飞雪团队

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9179|回复: 0

前端之JavaScript

[复制链接]

6738

主题

6826

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22542
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

, E: z+ M* ~' R: O1 ]5 p<h1 id="前端之javascript">前端之JavaScript</h1>
7 z5 c" \6 q% G8 Q; n' t4 f<p></p><p></p>- Z+ h- O3 K( K% a* s
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
. Z5 ~" d# f2 Q/ W: J5 V% X. ~+ p<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
; T: B$ y& ]8 ]6 S它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
6 a/ x4 O3 u2 H0 w它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>$ C8 G4 _6 C) W6 {
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
9 ^  [; v. A3 d; T& c<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>6 j$ P$ }& p5 x8 _
<h3 id="21-注释">2.1 注释</h3>3 E- @/ F% V) N- Y5 q* q; K6 V
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
( W. N$ _! b+ Q4 k/ h<pre><code class="language-javascript">// 这是单行注释
& f& q2 O5 k9 G$ Z: J" e, e. X/ c5 n/ ]2 ^
/*
( w* Z9 ?, _4 x- K这是多行注释的第一行,6 E0 |0 @3 J" h  t7 {* U
这是第二行。$ v6 t0 ~9 Z, Z6 t. W
*/
8 }  Z8 ~& v: V. A0 S  L! T7 ]& P</code></pre>1 I/ e4 V$ g9 @; |1 w1 P
<h3 id="22-变量和常量">2.2 变量和常量</h3>
& d" H! X: o4 i1 q6 W<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>/ A3 G6 Q6 _1 x" R
<ul>
: C* t0 r2 b/ q- U1 Q2 T<li>变量必须以字母开头</li>' ?. y$ v! ]4 i( g3 N- L3 a; G  |
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ U9 _8 S( x0 r+ {2 U' o
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>9 Y5 U* B, c' _2 j
</ul>9 c4 ^3 P7 i+ }5 ?( B# L
<p><code>var</code>定义的都为全局变量</p>- g* ]+ t1 s# Q0 W! b
<p><code>let</code>可以声明局部变量</p>5 A( j8 r% G" j- C
<p><strong>声明变量:</strong></p>0 E/ V+ \" J$ G
<pre><code class="language-javascript">// 定义单个变量- X9 u1 \# ~) |
&gt; var name
' S  M* j2 O& C1 {, B/ \&gt; name = 'Hans'; n# t: c- \& o! p1 K. I8 a  L
//定义并赋值6 h* g3 P1 |& ~' ~7 y3 O
&gt; var name = 'Hans'
4 C* J  [+ Q: e4 w( w  O3 q&gt; name  z0 F& I6 T. ?1 r/ g8 r+ R3 ]
'Hans'
5 d1 h; E5 J8 t# z% z9 Q+ t& z+ c
% w& A. q0 D* M: P// 定义多个变量
% \2 A3 U; H- P8 n& \&gt; var name = "Hans", age = 18" \4 Z; \8 @/ x. b
&gt; name
) z7 M2 @2 E+ u; s'Hans'
8 \) u& v' I' n. s7 n&gt; age
/ C1 G9 ?0 K/ T* S' e18
2 e' t6 Q" \2 U( Y1 \; {
, |& x1 Y0 a. E5 `/ F! u1 K1 V$ @//多行使用反引号`` 类型python中的三引号
' k: N4 Q* U) @6 ?&gt; var text = `A young idler,- B* q- p7 R2 G# {0 \+ u4 t
an old beggar`
2 U, I1 o, `% z&gt; text- u- o( Y# `8 c) W+ b- ?7 ~  g
'A young idler,\nan old beggar'
8 ]5 v2 D( |: X</code></pre>
- E1 _. F% e( k/ C<p><strong>声明常量:</strong></p>
4 {' l1 y. g, K+ U4 Q0 c! _* {<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>: Y1 I5 \" F% V' v1 e
<pre><code class="language-javascript">&gt; const pi = 3.14
+ ^: g9 L0 f" `&gt; pi) j. q. v8 J/ m  u9 f
3.14/ m% A  z" J2 L. w
&gt;  pi = 3.01$ ~' U& M4 I4 K: d% W
Uncaught TypeError: Assignment to constant variable.
( W" G* D3 v9 v! d& \    at &lt;anonymous&gt;:1:4
' o1 Y; U: d( e& A7 ^& i6 j7 H
4 o" N& l2 a6 p7 o</code></pre>
6 q) ?, |1 {" P8 C. G<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
& b: e1 I! W) G) K$ A" ~+ \' I<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: x- k0 _: F/ n# G" S<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
7 c, E) ?& i2 h<h4 id="231-number类型">2.3.1 Number类型</h4>
, L  h- s- S; r& H6 _# P<pre><code class="language-javascript">&gt; var a = 5) [! ]6 @" r, S
&gt; typeof a   //查看变量的类型  4 a/ b) a; h4 v8 ?1 S
number0 C: x% s  j; G7 ?+ e4 v% C$ o; {

/ s4 h3 R& ^- L, M2 F% d! T% R+ X&gt; var b = 1.3
) K/ q" m5 r, _&gt; typeof b. }4 T% n2 G+ t6 R! g9 B, x: y
number$ z4 z% ?7 O; i, H  V

. B8 i, n8 |7 W// 不管整型还是浮点型打开出来的结果都是number类型7 I* U3 e. \; q0 Y/ f3 t- j9 s

( @: C7 k/ O& ~3 z4 Z9 `/*) s. W- h/ Z% b! _3 v$ a* y' L1 Q
NaN:Not A Number
6 j) }; i, A, |" C3 }# I( C4 [. qNaN属于数值类型 表示的意思是 不是一个数字1 P- P% k& M$ ^: V8 w! ~3 `' H0 V
*/
: y" z' t$ M, S2 z: m2 u9 c$ c
5 Z, a2 \: j; n$ X! }parseInt('2345')  // 转整型; n8 N2 P3 q0 T4 P9 }
2345
5 _% X/ G" \, V. d& H' AparseInt('2345.5')
4 J2 t" M9 _! d& A3 C2345
  G  i( g* V) \- T2 h; w# ZparseFloat('2345.5') // 转浮点型
& a+ n9 W7 f+ i% l! e6 U% ]2345.50 J2 H, @: c6 m% ]  O$ H  i
parseFloat('ABC')
: M* G; b0 e+ Z* g/ a0 }' JNaN
# T0 P4 h3 y& E# |4 `parseInt('abc')! r( b) E( C% F  d, s" B( d
NaN
' x2 v& q, S- m" [7 y# ~# I</code></pre>; R1 O. c+ X# k; F$ S% T% ]
<h4 id="232-string类型">2.3.2 String类型</h4>
% p7 n& J* S# b1 E1 @! a& u5 [<pre><code class="language-javascript">&gt; var name = 'Hans', u  z4 T# u/ h. {- e
&gt; typeof name
1 J4 W. k" L8 p0 Q'string'
( d. a  d- D# o( b- y: y5 ]
( \* t- H  V0 T9 D  ?//常用方法$ N# C: Q  n0 `& j
// 变量值长度9 d. R6 ~3 L3 U) d3 v$ j
&gt; name.length
! Y6 a& Q$ f$ ^: _$ J) z, ~40 U: c8 r: [# s. l/ P
// trim() 移除空白# Z+ m6 s2 u, i, n0 ^
&gt; var a = '    ABC    '
; ]- ^$ c6 c. @8 p&gt; a1 v# o  J2 s4 p7 e
'    ABC    '% s9 r+ G0 M) }" ?/ O
&gt; a.trim()5 {& Q( M0 D, p' \
'ABC'6 @; _& j% W% y+ I
//移除左边的空白! h9 m' V( S2 g- S
&gt; a.trimLeft()3 Y  k- k3 T! g' A! {4 \$ r# H8 `
'ABC    '
% K, r! G/ N. }2 s$ y//移除右边的空白& H7 e( e( k0 _/ O. j) g
&gt; a.trimRight()
7 ^& l  s+ z- [3 v0 ]% C! [# a'    ABC'
6 l( ?; {4 e' b2 ~# S$ n1 m
% G4 D7 e& r, X, J1 J, y//返回第n个字符,从0开始3 V+ ^% V  G0 n# ^) l
&gt; name: Q; a6 y7 F4 @4 U3 Y# O, d# L  R
'Hans'
! [: |" t; g% f4 F7 @&gt; name.charAt(3)& U/ I0 d5 P! Z0 w% K
's') v6 K+ b) d5 t  @* O/ G1 m) Y
&gt; name.charAt(): y) A5 t# V: @4 J+ c
'H'0 t! Z: ?! f/ A& W; ~1 i: j
&gt; name.charAt(1)( p% A* c0 _+ V! i9 F% p  ~* r
'a'
! Q: g: J* R1 k' K9 m+ V" _: y0 ?" C9 s. C# w5 _
// 在javascript中推荐使用加号(+)拼接
: F/ X9 l2 P% v6 \&gt; name% ]! S! x+ y# K
'Hans'
9 K. `) o( U! V/ `" [- F&gt; a
2 i! u* w% F/ }# T: B'    ABC    ') \: z- y! H4 [& M5 q
&gt; name + a
, A' c2 v2 C! @7 }+ D% O4 ~'Hans    ABC    '
% V2 O. I6 A* z! L" F. p// 使用concat拼接
% l. [& n. \8 m# H+ X&gt; name.concat(a)  m, T$ F9 U3 Q
'Hans    ABC    '
. ?+ e: q0 O$ r. K( |& G" P6 O8 W2 |1 H
//indexOf(substring, start)子序列位置( G# s( `0 H0 H- M8 V

3 b3 E9 o3 i/ ~- j9 J&gt; text2 Y0 O# O3 O  o* b" U! r  Y
'A young idler,\nan old beggar'
& n+ \  R0 M. t* O0 a&gt; text.indexOf('young',0)5 i" C9 h1 v8 n
2
0 y# m: M) v/ K! u* f4 J) r$ d- x
( _; S7 y/ R; T3 ~: w//.substring(from, to)        根据索引获取子序列, i. o! `8 i6 j! n# `
&gt; text.substring(0,)$ }+ {+ C0 B: x: m. P
'A young idler,\nan old beggar'
' u0 T( u6 k$ S7 I, M&gt; text.substring(0,10)
; q, S- j( l. u( O  X4 P: u/ X'A young id'
* z/ C# X: e  d# E% ?, t* d3 p% T' _, n1 R3 V* {
// .slice(start, end)        切片, 从0开始顾头不顾尾
9 x9 z8 V- h( P, l. A( R' S&gt; name.slice(0,3)
, ?; S: V! `' w! p4 r9 ^" W+ {'Han'
7 A+ h' S* L3 F, N" R
) j* g' }- N% O& H: Y! d// 转小写
8 t! B. d4 u0 b3 s3 S( I8 A8 `  [2 l&gt; name* t( `4 T" P/ c6 k: ?( d( S
'Hans'6 j3 ?) u6 F$ z+ B' v% S! p
&gt; name.toLowerCase()
1 L( N- l; {( j2 s# c/ R- p'hans'
9 l" F* S( b# i& i7 T+ M" |% t) Z. N// 转大写
5 j! a% y) z. L- O- [* a. W; R1 E9 ^&gt; name.toUpperCase()
! C2 L+ @2 x& ]) i) q'HANS': f9 e: o( w2 b

8 _3 ]  y9 G' o2 v: d' l) f5 m// 分隔
4 R( b$ f9 x- h) z2 s' V&gt; name
, s* r; }2 c. X$ \2 m9 I, J$ K'Hans'/ e7 c+ k0 W* l9 F9 t, I
&gt; name.split('a')8 r# R, L! I* u% @# {2 V8 V
(2)&nbsp;['H', 'ns']
. P" }9 ~3 _# l* B9 r8 P; z</code></pre>/ m- I+ ~& _" @, s  \) a' i+ V9 z
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
  g3 |" e* p+ ]& a9 T+ D) n$ p$ E<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
8 K" a8 k3 L8 s9 R: w- o8 `<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>( G7 L+ y3 Z; E' T
<p><strong>null和undefined</strong></p>
9 y' l/ Q. ^8 ]# `<ul>
8 ^- P0 A. H; ~1 ]<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>* Z9 y: _- e5 }  m7 F
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
; H0 _& `; w) |; a9 G, k</ul>1 s+ o& D! T- I! z8 G
<h4 id="234-array数组">2.3.4 Array数组</h4>
  k1 R/ M: Q/ e1 V# B0 Z<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>" y& n. R' Y1 G, [! m
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
' v. l. G. Y$ z0 b' M&gt; array1
# z. N* |) R) Q" M(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# R1 r! x+ z$ D# h; Z( a  \4 Q
&gt; console.log(array1[2])  //console.log打印类似python中的print) v3 ^4 p) x/ z6 T* Q/ l3 O
34 }2 m+ E5 M; X8 `+ u% X' J6 P- G
// length元素个数
: h- c5 v% @5 Z6 |/ l1 n&gt; array1.length# F3 b7 M2 ?5 K. y" a$ C, k0 y
6  C, J& Q) x$ L5 F& q  G
// 在尾部增加元素,类型append
8 O) X: C/ l, A& z% `: I&gt; array1.push('D')/ x5 Y, n9 M4 T4 F
7
' F3 V8 g" ?  M! q/ D! c! v&gt; array1
& S) ~3 q" i9 S! t5 r(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
' O! b0 x  h  A: G+ p3 X) f// 在头部增加元素
1 m' g3 ~) V% e# R: J! M&gt; array1.unshift(0)
' x0 ]# f# V! \" r9 v8, D3 g! \! J" g3 C6 a# v* U2 z
&gt; array1: i3 Y5 h  {/ O8 |
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
! R( ~& r! Q# U. o
( n+ g. T2 a" P3 M. ?//取最后一个元素
* h/ ~: s% T% l5 L&gt; array1.pop()) ?; g! }& F5 H& [  w7 N* w
'D'. _! u3 j5 ^* X3 \* E
&gt; array1
& I7 U; g6 V; a1 U7 \' }(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']% g* ]! x0 `2 D) s$ E4 P
//取头部元素2 U4 b% w+ _  J; n# r
&gt; array1.shift()( R* J8 x5 H! ^7 R3 O7 `
0
. j! |8 Z6 r) o* U& D( j1 w2 o&gt; array10 A  F1 l+ B& K: a- V
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']) K0 l6 V" r5 H9 g" j

( x. Y* {& Z5 i. i' ?1 x//切片, 从0开始顾头不顾尾
1 _) @! O/ W1 s/ b1 A/ ]&gt; array1.slice(3,6)
: T  d' i' b# S" [3 f(3)&nbsp;['a', 'b', 'c']
1 z5 O, b1 K- x// 反转/ t- q9 E2 C' T( V/ \
&gt; array1.reverse()
: B% u' N/ T0 M$ @- ^" w" L(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
5 N) D" P+ d: l" L9 W7 @// 将数组元素连接成字符串+ S! T. c7 u  A: m7 R0 f9 \
&gt; array1.join() // 什么不都写默认使用逗号分隔8 [; J6 C, S, h
'c,b,a,3,2,1'$ v. J; m9 u) ~# g
&gt; array1.join('')
$ y' S; }1 S  R" }% W' {' l( m! H- O'cba321'& Q8 N1 q: ?8 S. f8 L
&gt; array1.join('|')
; f2 g, v% w7 r. _0 Y'c|b|a|3|2|1'
3 J! _5 h0 \4 e2 T$ n' V7 F
% s" v/ Q1 x8 O" h, z- j4 L// 连接数组
% h, ~# T/ h, E( o7 p& {7 H&gt; var array2 = ['A','B','C']  b; n& D# {. p5 s& H# a
&gt; array1.concat(array2)
, E% {8 ]9 Z, s! P" B1 s(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']/ \" Y8 @# b' N: R" f- n

; @( t) f; G8 f# E// 排序
8 v( A3 e+ l5 R8 Q&gt; array1.sort()9 o; G) @- r3 u( u- @) E8 r9 {
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  t/ P0 K/ a1 m* u

" f& ^8 M6 x4 m' ~* M// 删除元素,并可以向数据组中添加新元素(可选)( f$ ~; W- r3 ]8 L
&gt; array1.splice(3,3)  // 删除元素# b, v! k  t+ B. ^9 n5 a
(3)&nbsp;['a', 'b', 'c']
+ r0 {, q6 ]2 P) P) r- `&gt; array1
! {$ S; |9 f+ H* H4 C( L(3)&nbsp;[1, 2, 3]3 M1 A) a1 h$ J) Z$ W( c% U
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素/ a4 N& V# s& O) Q( i7 l. w( L
[]
7 D$ M/ w$ S- w&gt; array1
1 T1 B) u9 ^3 a(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']2 o* h& n# k0 D* @- G, z. R

" t: x  }7 |* u; b/*5 p' W5 o( T8 T2 H0 M/ N
splice(index,howmany,item1,.....,itemX)
, g1 L+ p& U4 J5 O5 ]+ iindex:必需,必须是数字。规定从何处添加/删除元素。1 P9 |+ F# m  w8 m2 w8 o4 j- I
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。, F$ @+ p6 K: ~0 L3 e. {' j
item1, ..., itemX        可选。要添加到数组的新元素
! q) j  h$ |& K2 R1 j: X2 n6 u*/
" X/ k# m: z' a: |
5 K* }$ Q8 L9 p# {0 p6 @// forEach()        将数组的每个元素传递给回调函数
% {( N3 W1 z/ i; ]6 ^# F: u&gt; array1.forEach(function test(n){console.log(n)})- d+ u8 `* u. P
1
" `1 @! q, l: b( v 2% T. G) R$ w/ l/ w6 u' ?
3
  q0 h! U5 j: A A
" l2 e: b6 R6 X$ I) i B
2 i, J0 N& z1 ?- N1 d. J, X C  _- Z- {4 G5 l2 R9 n
// 返回一个数组元素调用函数处理后的值的新数组
- M: Y) c1 Q! i9 G. D2 S' w&gt; array1.map(function(value){return value +1})
+ C3 Z5 Z6 v$ C+ G' q(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']; Y7 m0 Z; M$ z
</code></pre>, E' k% {$ f# {+ r2 b1 R
<h3 id="24-运算符">2.4 运算符</h3>
+ \* N" b( d: P( U( X<h4 id="241-数学运算符">2.4.1 数学运算符</h4>" d1 a0 _% j) z: u! E4 z$ V
<p><code>+ - * / % ++ --</code></p>
( v7 V; l; U" B4 ~7 ^6 t* C# R, ]<pre><code class="language-javascript">&gt; var a = 6
; D; }- K$ j' D0 |; |+ N9 B  G0 @$ R: d&gt; var b = 3
; B% |' h: X* f6 H// 加
& d4 y# ~: q& f: P&gt; a + b
- y7 n/ Z0 j7 m3 t. V+ c$ u9
( r6 _/ y. K; W3 N// 减! l9 y4 _$ {' t9 g( q2 Q
&gt; a - b# C/ F2 K/ K5 ~, }
3
. l/ ~" Y1 m% \// 乘4 O& Y% O; j; k
&gt; a * b
% {, s0 {/ r6 X4 o2 `% f18
) o3 L) Y) H6 Y. T* d// 除4 w# O: \: R# M$ R
&gt; a / b9 u. y8 A' n0 m' S1 e
2
* @; l3 w( ?) B1 r. z. A// 取模(取余)8 u2 B8 |1 S$ l+ i2 V+ X$ k  z1 g
&gt; a % b
/ l6 @" c' s' T9 F' ~+ z4 _; Z0' P0 h) ?! I' \; U! f% Y/ f
// 自增1(先赋值再增1)
/ c  U. i: a" U2 ]. a+ R5 r# P" B3 h&gt; a++
9 Z1 U; ~' I" @& |9 {. r% g' q6
! j# x+ Q3 y! p+ E+ U5 x; \&gt; a
% [* \0 i) p. L2 l8 r% G' q7
4 V. i* D6 _6 a0 @  O, S' q/ ~// 自减1(先赋值再减1)" `- w+ ~# b, k. a
&gt; a--
; B, N! ?( C( y/ \& X* h. K2 z7
6 J3 |/ a( d  P, h* u# E&gt; a
8 V6 f1 J# f; u2 \1 B- b6( L. s" P3 m+ H/ F" y' p/ y
// 自增1(先增1再赋值)) T0 M. O+ X2 O# F0 K
&gt; ++a
( K  \# B2 G% K79 C: i$ c' {* t; Q+ i- G
// 自减1(先减1再赋值)
1 ^, X; ?  C' S&gt; --a! @& T# o3 y7 }0 U, k# v2 `& O
6) O6 x3 e' U0 m) |* T( c
&gt; a) o1 t8 U, _" T- N
6
. R+ F5 d. B! c. Z: P- Q9 _  E, b7 B6 O& Y/ {' t% F
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
! F8 S" z( M! y</code></pre>
: a& [: N7 x0 D$ T/ V<h4 id="242-比较运算符">2.4.2 比较运算符</h4>2 J' M+ q, S# N( F8 a9 b
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>' a. V2 K; C$ o. Y$ Z- Y! O4 Z
<pre><code class="language-javascript">// 大于& U8 j3 J5 T4 @3 j; M& Y
&gt; a &gt; b
! S/ L) ]: ~, U* ]true# O. |, h4 H8 }% H9 ?
// 大于等于
/ A3 l/ @* a* y; u&gt; a &gt;= b
9 `2 g  F7 F* Y( Y: j8 B  xtrue
$ v, n4 @/ a* Z# k9 P2 g( _! ?// 小于1 u3 v- {" J/ E& F
&gt; a &lt; b
2 e2 G, t9 R% @* G! T. E5 Ifalse2 D5 ~8 _% Z# [% \" c
// 小于等于
, V" Q7 _$ s0 Y&gt; a &lt;= b4 v7 G7 u' `/ V$ K5 E6 c: w
false0 r! {7 z6 ?7 K
// 弱不等于3 k  j1 }$ c) o7 @6 ]" X
&gt; a != b
) E8 Y3 W( f( U7 C& Strue
- }2 j( p8 v& {3 z// 弱等于
5 L: J7 [6 z( h2 ~) s. W: O) y&gt; 1 == '1'# w' [+ S" f7 O# \  X: H  F
true( z5 x. a+ l0 @/ P4 Q
// 强等于5 f1 k2 ]2 g0 M4 v. J9 \
&gt; 1 === '1': }0 b* ^4 ~1 P: \8 P3 L7 J* W
false
2 ^  |5 h* i9 U% a/ Y* a// 强不等于
5 B6 F3 }4 Z# ]' x6 `&gt; 1 !== '1'1 N' B6 j5 l  D3 D& V
true
0 a7 L( Y5 ^. K5 q' B
* Z' h' J, Y( d) m/*1 @0 I/ n: O6 r) v) a3 p
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 t7 k( g5 T2 F0 K
*/6 q4 j5 O$ G. F4 U
</code></pre>3 N. ]; V8 g! A
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4># W7 j% X8 e" l3 M. }$ B  \- S
<p><code>&amp;&amp; || !</code></p>
9 z  @- s1 C, F. L  @1 ~; d& J, U<pre><code class="language-javascript">&amp;&amp; 与, ]* }+ g( q' B9 s0 r6 T% o
|| or 8 Q3 S- D8 Z& u' b4 V. f+ ?' h
! 非' z3 s5 Y2 J: i7 u8 T
</code></pre>' Q. m& X( d0 y& [
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>. _) T8 _4 }5 p  L5 _: }
<p><code>= += -= *= /=</code></p>
/ [9 q& a$ ~  u# Q( j8 R6 ^6 a<pre><code class="language-javascript">// 赋值% i( O8 F( J) z  |3 E- `
&gt; var x = 3( O# T4 N6 W- T$ \
// 加等于8 ~* w. O7 L! g' F# v! q' B# x
&gt; x += 2
' y/ k0 \8 `2 @" s5$ ]2 g) k8 C  }
// 减等于
* M1 p" w' j6 [9 K9 K3 V  R&gt; x -= 1
# K6 h) k+ G' L" O! e" |4
# H! l. V  P: Q' r9 z+ X1 m. @// 乘等于
. ]0 W3 Q3 o' ?7 H* @2 S- a&gt; x *= 2. n7 J- M5 `- c6 X" a
8
1 `4 W' D) x) p, Q+ F& R// 除等于
8 t# K  r9 N1 ^. ]' M&gt; x /= 2$ c# l, d% d" F# s+ y6 B2 t
4
1 q2 }2 w3 z) h$ s; e  _</code></pre>- [" O; a. \5 e# L/ h/ @' j+ N
<h3 id="25-流程控制">2.5 流程控制</h3>
! r  F. W4 f5 ^2 L9 o/ ]1 W6 B9 ^<h4 id="251-if">2.5.1 if</h4>
2 }! N0 x2 j) R<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
) h& ?: M+ ]6 Z4 u" }* {9 {' H
$ K2 {7 K& V/ Q  ]% v&gt; var x = 3
3 R0 B9 D1 N) k8 @: G: V5 ~2 q&gt; if (x &gt; 2){console.log("OK")}
7 I# u# U+ Z) D0 H! ?7 g: Y% P OK
2 p+ w+ J4 A9 }9 \2 H- x0 p- K/ j4 q# ]; w
2, if(条件){条件成立执行代码}
+ q9 h5 E3 `) I" u4 j        else{条件不成立执行代码}( V0 j% b2 I" T8 t6 Y* Z

2 g& k  [% ]8 R) w1 S$ ]/ d& }3 p2 R1 A&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
# E2 R( E8 D+ X( X'NO'
) c7 Q5 A& H& V( a$ v) {
$ v: e# r% X2 r7 a1 a3, if(条件1){条件1成立执行代码} # j- p; P" P  M2 A
        else if(条件2){条件2成立执行代码}. F: v! E( L) w
    else{上面条件都不成立执行代码}
: l! g- b8 x$ p6 x) Z5 T! s4 i3 Y) m3 M; U  v3 s8 C* P, t
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
0 z. S. z1 x1 R% M Ha' m( @" ~1 h6 c1 z* R; f  o  m
</code></pre>
! m4 N" z7 w; U: V5 @" w<h4 id="252-switch">2.5.2 switch</h4>
" H& S/ z$ o& D+ S2 ~  ?<pre><code class="language-javascript">var day = new Date().getDay();
* E$ d0 U3 r# o  ]- Eswitch (day) {
6 ]' z9 S! h9 H  [7 h6 l  case 0:
) [$ j( K+ x( t. M* k  console.log("Sunday");
& p! A. G" d" M) n  break;
+ P9 e9 ^& K# \& d* b  case 1:4 w  |" e. `2 c& O6 r$ X$ Q
  console.log("Monday");( n: p. \! O. ~5 p$ I1 K- E4 }
  break;+ `+ k" O  l& @- h. \
default:
2 N' v( D6 i, `2 {5 M  console.log("不在范围")) c6 F$ s  U( v
}
! D5 r* d+ o# A5 V 不在范围
' f% B+ i6 h/ [; V$ X, Q, H: X" T</code></pre>: ^+ v8 B) D! O2 V
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>  y' V& e0 g( ]! E, T# Y: M3 r
<h4 id="253-for">2.5.3 for</h4>- }7 {! `, g- @% G0 }
<pre><code class="language-python">// for 循环
2 b+ O- ?: c# f+ @        for(起始值;循环条件;每次循环后执行的操作){6 ]9 d0 u8 S. r+ x1 }/ \
        for循环体代码3 N  q. m& {. q0 [3 g. B
    }
3 R0 q  ~2 I, z  p0 p! L
/ I+ }9 P1 J$ f) Qfor (var i = 0; i&lt;10; i++){4 ~- A1 n- g0 }
    console.log(i)% X/ E7 a$ c% ]1 h
}
0 p4 a# b( F$ g5 e        0
0 |& u6 _# ~$ b4 u        1. }% r) r1 d- e- w: c
        2/ [4 V% D  M+ q! O
        32 m! O: |  p% [2 i& `
        4
+ ^. O* g. c- Y  L7 v( O4 S        53 o8 F5 f) A7 K8 a/ b) h! g1 ^0 C
        6
- N" E- t3 E8 X) U) h8 N        7
% ?# {* n( A& b: n: r        8
* N* w& P) K6 x" Y        9/ C) ~  s) Q' C9 c0 k
</code></pre>
, {* s5 p: k4 I9 T( y<h4 id="254-while">2.5.4 while</h4>
" V& A7 N, k( m1 i' p* u<pre><code class="language-javascript">// while 循环9 o" H; Z! @! u( |1 X' R
        while(循环条件){
0 }1 q# U( X+ I        循环体代码
3 B; i- L# |% s' o! V1 I    }% a$ S' @" G' {5 |
% w2 [/ n, B% W3 W/ V
&gt; var i = 0' O3 ]& V: z/ N0 {- ?. k* o
&gt; while(i&lt;10){4 p. L; [7 o4 h
    console.log(i)! x  t0 D3 w9 l/ B! W" ~0 y
    i++8 R0 [6 P" r5 H2 D, W6 F+ o7 q' r
}
. Z. ]+ M4 q+ K 0/ t; v" u: \% B8 A6 ^" A+ W' _
12 y) h" r. t" c2 X
2
. Q, Q- Y( U- Q$ ` 3
3 Q7 p* N4 u& \ 4) `, s+ Y2 {3 R& Q
5# ~) S" [, P' h9 a
6- d7 Y6 I- `! z3 O; \2 [4 `
7& ^; ~* N( q  Y2 X: a8 e" T' h
8
$ n/ x! k) e5 j. R- p 9
$ n% |8 r8 r: s4 p</code></pre>4 T" y8 ~) U2 ~) h. G7 K, y
<h4 id="255-break和continue">2.5.5 break和continue</h4>' }" V9 \5 B8 D+ _
<pre><code class="language-javascript">// break- H" ?9 H+ u  r0 Y7 U# c) V+ V
for (var i = 0; i&lt;10; i++){
* O' }( {9 d  Z    if (i == 5){break}: U. c4 R! {) ?: M  L* K
    console.log(i)
$ F( S) s3 z' E}
) l( p/ u5 D1 ]9 }5 t; M0 W 0
; m% Y2 ]8 f8 |/ G. O 1
* z$ z, b, H$ o/ m 2
& g& W2 A# z- C 3; ]& Y! g) C. ^2 ?$ k9 ^5 w
4
3 J( h/ |" G0 i# N5 {// continue
7 P: O+ Q7 E8 lfor (var i = 0; i&lt;10; i++){
7 e3 T. e8 C9 x5 T1 N( [+ B    if (i == 5){continue}
/ u$ O: y# H2 H2 S5 S1 m    console.log(i)
0 I- p& b" _' Q}
; ?8 {/ W% Z1 U7 P( P 0) j. P* D: _7 v" Q
16 u7 T" R* s( c8 `* o4 V0 F
24 _9 X! G5 I- ]% m$ u: q
3: U: W7 X, N& F& t" `5 `, u4 o2 l
4
5 G% n2 h" s: H# `6 p& l% m( r- _ 66 l  N. S) b: |( Z/ T
7. g# j$ ]; o) @1 F% q+ H
8
1 j% c  }- i) t 9
& K& j( N* k; T2 ], s
4 a1 D# T0 z$ D( [8 A( j</code></pre>: ?( L2 m" Q6 p' L
<h3 id="26-三元运算">2.6 三元运算</h3>
4 m6 O! V' a- C% M+ _<pre><code class="language-javascript">&gt; a
3 b# T( {' F: L. q% w6
- v* }% `7 G3 S&gt; b1 [. g( J* R* o, b  M, \
3
- j) C1 y* r" a# f2 Z
- f* r: C! ?! {  p) }, n//条件成立c为a的值,不成立c为b的值: {6 Q6 F3 k3 K% ?) Q
&gt; var c = a &gt; b ? a : b
0 T: q. G. W# b&gt; c
( P. k3 b6 e+ p7 S$ h0 p6- f* V5 Y( m" {: r0 l* T" L0 A
6 r. w/ i8 `3 [* d
// 三元运算可以嵌套7 F; j6 H: q0 {$ D( Y: r$ X) j2 H
</code></pre>+ _' j0 E* q* a. ^- k
<h3 id="27-函数">2.7 函数</h3>& y$ I- E' Z2 c1 l* I  Z/ W
<pre><code class="language-javascript">1. 普通函数
, [- t8 [7 f- E# f2 P&gt; function foo1(){  }5 v0 v( P" e- `2 T
    console.log("Hi")
* H$ V# n- f1 @# ^1 I) f}0 q) j. b7 X$ ^2 r$ q% Y9 k

7 E% O. \+ ^& K: ?2 p9 Q" U&gt; foo1()% D9 j, ]: y( T
        Hi6 c8 q; \1 `5 N  M  n0 O
2. 带参数函数1 }- r, E5 B7 ?  N) T1 m, X# w9 n  t/ d" z
&gt; function foo1(name){0 @- A2 J; \: T4 i" m6 ~9 Q; z
console.log("Hi",name)
2 m8 p+ v& \  a6 R0 v}
) M* t8 s0 p& p$ [* i7 X: H. l1 a: L- t. d4 o
&gt; foo1("Hans")! b1 j# l; b+ m; h1 w$ S
Hi Hans. w/ n8 e. Y' u
7 {" N- Y- s+ W1 i
&gt; var name = "Hello"- o% d* G% G$ g' _( q
&gt; foo1(name)( U& ~% w% |$ J: k3 k2 Y
Hi Hello& E7 p" _. ?6 g, u0 d6 S: M) F
* t5 ?% A: T+ ^. V, Z' A
3. 带返回值函数2 W4 ?5 L0 @+ V4 z. W. @2 m
&gt; function foo1(a,b){7 B4 s$ ~* o: z" [" @0 ?
        return a + b   
" {0 `+ ?" @/ a5 S, p}
: R; I6 E. t8 P  q5 v&gt; foo1(1,2)3 J; P/ a) T: n3 d+ Q6 I
3
7 g7 ]* {8 Q% H2 \2 M$ Q0 }0 ^- e&gt; var a = foo1(10,20)  //接受函数返回值
+ S! Q& T. U; z# \8 v. N  R&gt; a/ p5 D- I( @0 U
30" X3 U: s4 L7 D2 j% I  u

, C4 T1 O( R* J* J! y3 R0 d- Q, e5 S4. 匿名函数
$ N& b1 Y* H. Q: d+ u&gt; var sum = function(a, b){
! p2 I$ m1 q4 C0 @# f( X0 n) S5 C  return a + b;
+ h1 f2 p0 ?  u. l9 a}
3 D5 f5 M- e6 ^&gt; sum(1,2)7 j+ z2 D5 X+ G3 g9 o5 T$ ~& ?
37 j7 d4 d5 z& B1 p; z, D
! S% b/ U) f! [
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱, n" N" ?/ u# s" C- c
&gt; (function(a, b){# ], y" b( f" g; b7 @9 _
  return a + b
; p/ k# p4 _. b- F$ x& A0 D/ O6 Q, o})(10, 20)( s2 |; i5 k! D, s% ~7 [  a4 m
30
* V$ F  t: C% G( E- [* @' I2 E8 J# m) p* X
5. 闭包函数
, |$ ^1 h- {) A( t. E- u6 L// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数6 _0 ^6 f+ X: ]7 c# J
var city = "BJ") i4 D2 i) }, T9 W
function f(){
& C6 d6 `  R2 E  n    var city = "SH"
' N! S* p6 T$ A: K4 q    function inner(){# c8 f+ t& x) d- l# p/ b2 o9 ^% t6 U
        console.log(city)
, @9 G- ]6 q  z5 R, M    }
8 ?& b  z7 m$ L, J% Z, A    return inner
) d/ x* ]6 s7 W! {% y0 v}. o( Y, s/ l7 E6 @  T1 b4 _
var ret = f()1 _/ i+ t' R: ~) z  N, Z
ret()) _) l7 f: t' v) L6 j) s
执行结果:5 N5 k( J) z" r
SH- b; [8 Z" j5 I* c# l

6 g( q* n( H9 U. r0 \" ?- x! Z</code></pre>8 d$ i: R7 s$ B- F' x9 V
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>( L& X; {& [( d5 K3 s
<pre><code class="language-javascript">var f = v =&gt; v;  Q( q. K7 V* W5 n8 ]
// 等同于# x  T7 |, G+ K( R2 s: J, J
var f = function(v){0 m% Z+ c  Z0 Q1 u0 _7 N) G- W) K3 L6 N
  return v;# @; G! y) z% o
}1 Q- f; e: J" ]3 k# C" Y# p
</code></pre>- `2 b" Y$ `3 y/ F; j
<p><code>arguments</code>参数 可以获取传入的所有数据</p>+ u  l2 h$ ?) v/ P
<pre><code class="language-javascript">function foo1(a,b){
) G8 j, m  y; S( x6 D2 c. s    console.log(arguments.length)  //参数的个数
/ v. v/ [. {2 `' x& F* s: g    console.log(arguments[0]) // 第一个参数的值
# H4 q2 y; R) ~: a# \2 a! o, r& m) [        return a + b   2 [6 G( W9 {) o4 ^; Z. _, Z
}/ c+ h5 ^/ p8 [# d! w0 E
foo1(10,20)8 |8 }3 g* c9 h, ], b- ^! Z3 x
结果:
, N+ R+ n( x7 b( M' ~7 @& d" H& E 2          //参数的个数 0 m! [3 }: Z% N/ W% x
10        // 第一个参数的值
5 z) Z- \. `! M' v( q30        // 返回相加的结果
9 `% |8 o" L: a$ X3 m1 t</code></pre>
+ P, @* {* Z" U# Y<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
- m; t* }" }6 q1 [4 g4 ?% J: w% L7 I<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>* Z4 i" S5 g$ @
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
" h. k/ n, c. P' j4 v<h4 id="281-date对象">2.8.1 Date对象</h4>
7 u7 s! H% L/ S5 `/ V+ R2 Y<pre><code class="language-javascript">&gt; var data_test = new Date()
3 @6 B# U( C; Q8 q$ l* X) U&gt; data_test
! u- {$ g3 H5 P3 V6 B1 `Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)) Q/ K7 O' d4 {+ y9 C3 S  Z9 S
&gt; data_test.toLocaleString()+ d% v3 f1 G: L6 ~# `4 ~+ _
'2022/2/11 下午9:44:43'+ x: ~8 H. a* H; u

* Q& W& r& m; \* E, Z) \&gt; data_test.toLocaleDateString()
7 i$ `& g% T- S0 L$ ^3 {'2022/2/11'
" ]7 R6 E+ |) q5 P% j0 ]; Y" V7 v/ i  \# p8 w/ K  ?8 B
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
& T% y8 V5 J( S# B&gt; data_test2.toLocaleString()
! L+ t" b# h1 W% ^& M'2022/2/11 上午9:44:43'$ ^6 a' I' S  P

! I& d( k% ]2 k; d9 s+ l3 Y5 F// 获取当前几号
/ y5 k# B, i( o0 C/ N6 l! o" O) j: H&gt; data_test.getDate()' Y2 q" G3 _& {. s. m
11
1 F) K6 r' S( v' J4 f# r: Y4 s// 获取星期几,数字表示+ e2 ^: b/ X& c  t; D  c* X
&gt; data_test.getDay()  
. m$ G. o" a4 [5
4 ~' h/ @  c2 x  ^( A" d// 获取月份(0-11)
& K6 O6 I5 W# X# P" A+ |' A&gt; data_test.getMonth()" d& T, ~9 z3 h! a" D
1
& c: q3 R" n3 r' m// 获取完整年份
) u. i# X( _6 u1 O&gt; data_test.getFullYear()
) O0 Z. A; y& e7 u7 z2022
9 H6 `  R7 S" K0 H. u- u// 获取时; z. G8 w/ T* o9 K
&gt; data_test.getHours()
5 M- M$ Y, T: ]: D, W: Q217 A" ?3 a4 j! a" O  a8 M
// 获取分
0 u, @3 f" }1 m&gt; data_test.getMinutes()
: W- R# J: D8 W; @44
; ]9 q- }: @" E2 m! G0 _- Q// 获取秒; U4 _, Q5 c' `8 Z6 I: @
&gt; data_test.getSeconds()& ^8 X  b9 m! V0 _" K- E
434 R6 J. Y7 ?. E7 l; K/ [
// 获取毫秒
  G4 K% G; }) \! U&gt; data_test.getMilliseconds()0 l/ D2 S/ l" ^/ Z7 t" p
290
4 t3 R" @2 r/ H, A// 获取时间戳
% ^9 w' J1 }/ j5 r* Z7 h* P2 e&gt; data_test.getTime()1 f0 d. R( `1 U+ v
1644587083290
6 k5 C9 K5 a) `: r. u/ c</code></pre>
) L, p$ {( e- i. H<h4 id="282-json对象">2.8.2 Json对象</h4>' f( i3 _! G+ w, p
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串5 V: _6 u( n5 X9 v4 J+ w% p
JSON.parse()  // 反序列化,把JSON字符串转换成对象
5 {5 e) }& }! T5 a" h: \' q3 g7 d* u3 g& ^+ O
// 序列化9 K% z' Q* r1 t% v: X  B
&gt; var jstojson = JSON.stringify(person)
7 N' Z" ?" B2 R# |&gt; jstojson  % u9 s2 l( Y" Z
'{"Name":"Hans","Age":18}'
# G, m7 @8 _2 r" ^& t, Z4 h2 t, R6 _8 m- J
// 反序列化7 x" r7 ?: B1 ]+ k
&gt; var x = JSON.parse(jstojson), k. y1 H/ o8 a4 z  g
&gt; x+ R) A0 Y* V# H6 K
{Name: 'Hans', Age: 18}0 t( h$ N" D5 N
&gt; x.Age6 x  S( J6 u! p9 l
18' X9 [" L. v9 r7 i$ M
</code></pre>
5 v% u# v* j1 A5 i& j<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
2 _" q  F( ^5 m  i" k1 l; `2 V- [0 I<p>正则</p>
7 Y2 Y6 B2 P$ {<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");! c2 X" x' s5 o1 P( R* F, Z' m' V
&gt; reg1
% I+ v3 ^8 l& W- g% b/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ l% a; C! p+ f, ~
&gt; reg1.test("Hans666")7 h* Z5 T0 v. d: {. }
true
( n% X) m: M" D3 i( R1 a0 a/ j( L
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
5 D7 W. T# q( s( @5 @9 y7 T0 |& {&gt; reg2: }/ X6 ?7 M# J6 ^( j$ O1 z
/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 ^' _9 X4 h1 I- r; {8 P: m( [
&gt; reg2.test('Hasdfa')2 O* n% `. V0 s0 ?
true* V8 h8 C9 J1 w7 u0 }
! W+ Y. \8 R' v- p# n7 i
全局匹配:2 V( ^% Y+ u1 k" D
&gt; name
& \) [) N: S! Y, \: s'Hello'. s7 h  c8 F$ d. X8 \
&gt; name.match(/l/)
2 \, `! B& P9 z4 k( }; G5 Z% g8 U; R. E['l', index: 2, input: 'Hello', groups: undefined]
: K) T; O8 O; F  ]5 s( m- P9 J1 i6 ]0 [3 x0 l
&gt; name.match(/l/g)& n8 j/ ^8 S9 L
(2)&nbsp;['l', 'l']% q; M. N/ E. d( }) H8 N" ^
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配9 ], L# Q: r+ T

' ?6 ]9 L6 {: L8 G7 d) V; o, @全局匹配注意事项:2 }) v1 S: ?: j  I
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. y$ T% R1 |7 @! X% E&gt; reg2.test('Hasdfa')) D% [/ f2 c1 Y  P4 T
true6 F9 c) t3 u1 n% @
&gt;reg2.lastIndex;
* `6 Z2 g% {" m4 i0 E( \3 J6
' F/ M2 P9 d: g% f! ?  m&gt; reg2.test('Hasdfa')  a, ]0 j( W& g2 w2 r" F
false
, v) @: n4 L3 b: J+ m* q/ k&gt; reg2.lastIndex;$ b" j6 Y$ p9 f( G! P- ^9 i3 m
0* V' E, ^1 Y5 _2 _9 D2 L0 E
&gt; reg2.test('Hasdfa')" u$ _! _$ A5 s2 M
true, O# I3 J2 T% O2 [
&gt; reg2.lastIndex;" J8 s, O3 k9 d) P" e; u# T
6- _6 Y. n" e3 x3 x
&gt; reg2.test('Hasdfa')
7 P- x+ P4 ]; ufalse  r1 p% @# x* Y( g2 j
&gt; reg2.lastIndex;9 B8 v9 g# ^- Z5 ?7 U4 f0 ^
0+ _; S, C2 P% y0 @& ]; p0 q; N4 r) z
// 全局匹配会有一个lastindex属性
- @" k1 F  m8 q2 N" j&gt; reg2.test()
7 ?& j; v4 t+ t% N' t3 a6 m1 I( qfalse
: V0 ~1 P# E7 `6 u9 v# c&gt; reg2.test(); K5 [9 V, ~. e
true
0 x5 d; s  ?; J8 B+ P  _- A// 校验时不传参数默认传的是undefined8 X' t6 Z" x3 Z
</code></pre>
+ v7 o* q3 H1 T2 p4 v& T' i<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
3 k2 I7 E: P- B9 q8 i  e<p>就相当于是<code>python</code>中的字典</p>
5 ]# N" I8 q! h% Z  I<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}' P; i1 o4 c) ~3 j% d5 c: b
&gt; person$ c2 ]4 l8 U& a6 t% ~4 z
{Name: 'Hans', Age: 18}7 w. l) r/ p( U  s" j3 d
&gt; person.Name0 y4 ?7 u5 K: C, l
'Hans') y. l) n/ u2 ^' B  q
&gt; person["Name"]) ~3 y$ J, q* O- p0 ?6 L
'Hans'! L2 P! p1 Y# |  q! W$ w( ?) l. u' t
3 e. w4 T6 n% m9 f
// 也可以使用new Object创建! ]3 f  k+ f& m% \0 Z! W
&gt; var person2 = new Object()
1 @- E; L# E. Y% d$ ?$ A&gt; person2.name = "Hello"- A2 O$ H* c3 s
'Hello'
4 \9 N, t0 b" S! t. ^&gt; person2.age = 20
; A7 J$ _. y3 @! d0 D20
; ~9 N. m7 }; [8 E+ @5 h4 U( c8 ]</code></pre>$ d& T) i. D/ t& m5 V# c. U" D( ^
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>$ a) D- U# |1 F/ l6 }8 [; r8 U
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
% w. s& D$ \& c4 @) c<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>! F3 K' W& M  [5 _* W9 }. b
<h3 id="31-window-对象">3.1 window 对象</h3>4 x4 W' q( p( V. j/ U, y9 T! {1 U! K
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>1 f8 g% i' ]* w% H
<pre><code class="language-python">//览器窗口的内部高度
* O1 ]2 W2 y: M' P9 a  V3 ]  vwindow.innerHeight
: L& G% g5 y) M, r  w; ^/ S706
  C; e& G) \( F" v//浏览器窗口的内部宽度1 d1 m7 b# @* j
window.innerWidth
8 R$ e0 @, a# X! v) m15229 q+ V2 ?( ?, j$ i/ a
// 打开新窗口
- E  b+ o, ?  P( G7 H& y& Fwindow.open('https://www.baidu.com')
) i7 a- W. p( y) P& e) gWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
# e8 H' t8 ?7 }- }( a// 关闭当前窗口. M% _8 q' I9 z8 j3 [0 E+ j
window.close()
) q0 J- I& q3 V; J) i* g% P; e//  后退一页
% F/ F! e. X, l* z4 Swindow.history.back(), [- B6 p7 A4 K4 n- L
// 前进一页1 L- b! l* k( a! ~: G, z9 F
window.history.forward() & D7 z5 i0 Y& d* u: K
//Web浏览器全称9 R- u. l( q3 f8 H
window.navigator.appName
: p+ `4 N! V2 V'Netscape'2 n# a" a+ L6 M) v
// Web浏览器厂商和版本的详细字符串" k5 K  a8 n0 [/ ?9 ?
window.navigator.appVersion3 D. X5 J. g1 Z6 A: e" A% V8 R
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
5 r, ^2 q( H+ f: H// 客户端绝大部分信息
% ?: j, v9 D* z' uwindow.navigator.userAgent4 L/ G6 S1 z9 x9 e: U
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. O3 v+ ?" l$ d// 浏览器运行所在的操作系统
: @. T6 `  W/ {  O6 x& Iwindow.navigator.platform; u) C/ r) ~$ j3 f' i* g( h! Z4 b, y& q% J
'Win32'
1 q  p) A  V  K9 K; c
8 ~( v* e! O8 S4 b) [: @//  获取URL. u5 k; p# U. {" _
window.location.href
  d5 G, G4 N, T3 ~- ^) F, w& V// 跳转到指定页面
" z. F! b$ B8 h5 Z3 j9 fwindow.location.href='https://www.baidu.com'
) U% W+ {" ~" B// 重新加载页面: u1 _- Z4 Y$ K- ~
window.location.reload()
/ g4 R& L/ E" `5 [</code></pre>8 m/ b& u( p, F6 z3 ^! @; h
<h3 id="32-弹出框">3.2 弹出框</h3># @% p+ ]% V# V; K
<p>三种消息框:警告框、确认框、提示框。</p>
( E; U9 }0 F4 I- H/ J+ z6 f<h4 id="321-警告框">3.2.1 警告框</h4>
6 o3 N1 m6 ?$ ^' A$ I% Y4 R' ^<pre><code class="language-javascript">alert("Hello")
" y/ n  F; g+ e9 ?. {( M1 \</code></pre>
1 A) @' q' f- ~2 \  V4 c<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
' G# U& q7 F' M% r# Q<h4 id="322-确认框">3.2.2 确认框</h4>& o, [; j' k8 b$ W: W- U0 |; a
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>5 K. S+ _2 t% e
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
: [! k$ Y" I, ]. U# otrue
8 J8 B2 H" J& x0 H; w&gt; confirm("你确定吗?")  // 点取消返回false" n; Y: v$ e, l: @/ a
false2 q+ j. {% L- P* b
</code></pre>
3 P9 {9 d0 I8 j<h4 id="323-提示框">3.2.3 提示框</h4>* v/ c6 Y0 r8 @0 G  x" U
<p><code>prompt("请输入","提示")</code></p>, r, H  v& e4 [1 }3 k& ~
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>+ N' v3 J9 B* n  Q, t
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>, n" t; ~0 n0 C0 k7 A9 f
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
. r. M0 @3 t: d: A  y) F<h3 id="33-计时相关">3.3 计时相关</h3>
2 T4 `& [, Y6 m4 F' W<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
0 v! U9 U2 G. m4 A. k5 w$ H9 Y/ a+ M+ Z; C<pre><code class="language-javascript">// 等于3秒钟弹窗2 Z, f" R7 g$ m
setTimeout(function(){alert("Hello")}, 3000)
7 s/ _' r' O" [; `. \9 e, Y9 S
3 V& Q# E" |3 d; R" uvar t = setTimeout(function(){alert("Hello")}, 3000)+ i( u  O! N3 Y
2 Q3 w) S; m7 {: V
// 取消setTimeout设置0 E4 G) h: d" ?% c( k! t' z
clearTimeout(t)' ^4 S% }5 J/ C" d6 d+ s
</code></pre>
4 h- E  p( w0 Q! S! L6 ~+ X1 ~<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 l& H4 e, g4 i; P% Q# f5 B<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
. P8 }9 J9 d0 Q+ p<pre><code class="language-javascript">每三秒弹出 "hello" :
- l9 Z, n! q$ u* q! B2 QsetInterval(function(){alert("Hello")},3000);
' \* H3 q# l3 }& e% F</code></pre>
. Q# Z( v8 l  g; }<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>  C3 d" C: C: {, P: X% k
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);( U! b, E$ v4 |% t: Q
//取消:, G  G. P; s5 o  u2 I
clearInterval(t)  h( S7 h% W7 \( v( p# m
</code></pre>, b5 {1 w7 k* r6 e* @0 I: s& c; O

3 F% R' Z' ?+ t3 p
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|飞雪团队

GMT+8, 2025-6-16 05:49 , Processed in 0.073087 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表