飞雪团队

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

前端之JavaScript

[复制链接]

7992

主题

8080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

6 s6 d2 I1 N. i. O1 o6 F<h1 id="前端之javascript">前端之JavaScript</h1>8 z8 P; _- }  }5 q2 d
<p></p><p></p>/ i# v1 X" O9 B
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>: Z: r' J7 D* P. ^# ]4 Y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
- @0 i+ \3 S/ B5 q3 O" O它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
' }5 Q* D; Q3 v" |( ?它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>; ?# ~1 V/ y( V( u  T
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>, Z4 r9 C# D7 i9 V8 A! L
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 S+ y- q5 ^5 g<h3 id="21-注释">2.1 注释</h3>6 c- s+ ~0 n! L6 {
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>. l$ J) L2 \* ^4 p. p/ `
<pre><code class="language-javascript">// 这是单行注释
/ b' I( Y7 w4 `  D; f1 {& |# l' b" e& p2 Q( F* Z  W7 _
/*
! S& P  q' J8 g7 @这是多行注释的第一行,
! `- b6 `( m% n) w这是第二行。
- e& m" ^) d/ i! P/ v*/
% G6 d5 P2 y" n) H9 O3 o5 X7 d</code></pre>4 H/ c# B3 C7 ], \. k, B5 Q& |" Z
<h3 id="22-变量和常量">2.2 变量和常量</h3>) C! R  p( u# E& z' O
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>( |5 ~, I' C+ f% O" [8 ~, v" h
<ul>
4 }3 N$ L/ W0 d. [4 G; Y<li>变量必须以字母开头</li># k: t2 O0 F% `# _! \* T& g" A# \6 e
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>, \$ k/ `2 V* ]. Z$ b4 C. y! ]% N
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>0 F  F) X  {" a3 \  E8 w9 u% k% }
</ul>
* y! N: O/ D5 J/ O: X$ V, y<p><code>var</code>定义的都为全局变量</p>
1 X6 [- ~) v( _/ I7 R# ^( R( G& W<p><code>let</code>可以声明局部变量</p>
: ]6 o3 f# l! E6 K% i<p><strong>声明变量:</strong></p>0 ?) j: `$ u/ o) R! v
<pre><code class="language-javascript">// 定义单个变量
0 ]9 E0 g6 ^1 [7 f2 Q0 b1 d6 t&gt; var name
# r  r7 f3 t( [% Q&gt; name = 'Hans'- b. R* L1 W. }
//定义并赋值% t- L( d4 h) y7 B
&gt; var name = 'Hans'8 L( l0 i( v2 Z6 D' E' U' |1 I6 E8 f
&gt; name* A" N; W, b: g; n( C, J: k' A/ Q
'Hans'
! Z; l' T  ]0 @) u* v5 m
& R  b4 H5 x; G. ~( j// 定义多个变量
$ I, f+ `5 z' i' f8 Y&gt; var name = "Hans", age = 18
0 s8 C, C# ?7 Q&gt; name3 l& i% c  E* f7 B
'Hans'4 j9 D6 x- v9 K  V/ F' A
&gt; age
+ [8 i7 H! K2 g8 h0 L( ^0 @18
, O9 N$ l3 C4 ?; p
* r$ r7 j: q( I2 z- r! u//多行使用反引号`` 类型python中的三引号
/ _5 u7 X1 f; }2 q8 p! O&gt; var text = `A young idler,3 U: D% R- L& n
an old beggar`
. W4 N6 b4 \& P1 g&gt; text4 C' p9 W9 f  }' w, A
'A young idler,\nan old beggar') u4 x' f  p) u) q5 v, p) W- b
</code></pre>! ~9 f( ]5 {  F( }& X/ L
<p><strong>声明常量:</strong></p>7 R" ~, `$ Y( l7 |
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
1 \, M) \& }5 W) H  D' d8 |<pre><code class="language-javascript">&gt; const pi = 3.14
/ i' H  k3 _+ _&gt; pi
- R, x- r9 y) p# C: U3.14: D9 V! d$ k! }9 a% c* U7 r
&gt;  pi = 3.015 b9 t+ d( Y6 ~# i; h2 Q' J! c1 T
Uncaught TypeError: Assignment to constant variable.( ~, J0 N4 x7 D# R
    at &lt;anonymous&gt;:1:4+ R, t2 J( l5 y- m1 n
- G: ^! v% K! R$ k7 I
</code></pre>4 ^) x1 i% O3 \6 ]
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
) E9 z% c8 P" e  P) g1 z# J! [<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
6 ~/ S$ y0 G. t- u& r<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>+ R/ l/ b  E/ e+ ^# u2 T5 L
<h4 id="231-number类型">2.3.1 Number类型</h4>8 a7 t% G' A; s) E; t* X3 u
<pre><code class="language-javascript">&gt; var a = 5
' \% b( J, _( d8 {) p$ l&gt; typeof a   //查看变量的类型  ! t) E! k$ X. F- ^6 S
number
1 g& ]5 C" S6 q: ^; B/ R( I4 c) J8 @" ~3 S5 r6 Q
&gt; var b = 1.3
; r0 R  W1 c' _4 ]2 m# v&gt; typeof b/ M( C" f0 t$ Q4 D
number7 s2 ]% B+ Z* v+ Q
( S6 p1 [: C1 ~' ~
// 不管整型还是浮点型打开出来的结果都是number类型6 T+ @' W" Q# r: j
, s) D( ?8 }1 f3 g+ z
/*5 J7 H( C% P$ E5 v% ?$ Z. a- ?
NaN:Not A Number3 w6 D  Y+ `. `; t9 {/ ]9 U9 z( q
NaN属于数值类型 表示的意思是 不是一个数字1 D# f9 y, X# i+ w3 f
*/
6 |# M  h* \" M5 u8 V1 _
  |* {# A; U0 t( [1 SparseInt('2345')  // 转整型
$ A8 q& a: y  \0 [: j& x$ S2345
  c: _0 L, K" s: K+ s& fparseInt('2345.5')
/ b; d4 u2 {% X, D% R" T23459 K& U& R8 o6 R2 P3 M: S+ |& N# Y8 a
parseFloat('2345.5') // 转浮点型
& c3 r' r3 q! q$ r+ v2345.5
! c5 r: `$ s8 Q( C1 CparseFloat('ABC')3 t( m* ]3 }6 s0 p7 f
NaN0 \) r& P4 l1 Y* Y* l
parseInt('abc')
3 L3 o, t$ G  l* b1 `NaN! a4 `9 G* k/ w0 G  R6 K
</code></pre>
+ b4 E9 V7 g! R4 n! B  _+ M7 A5 y<h4 id="232-string类型">2.3.2 String类型</h4>
. R2 j4 S% l, e$ K: m<pre><code class="language-javascript">&gt; var name = 'Hans'
) h, S( w2 @; p' X&gt; typeof name
8 `1 B5 i; A6 a# p& `'string'
, V) |/ Y& _' ^' T6 K$ h) B$ I* y$ Z0 N7 B
//常用方法
& i5 y) u* |& e5 \// 变量值长度- Y8 d& N! }/ l; L% v! z/ I
&gt; name.length& l! f) i  ^  W. {
4% ^9 M2 h: r: ?
// trim() 移除空白0 G( ~% l, [. C9 y6 l' |' S
&gt; var a = '    ABC    '# V9 A/ K" I$ l4 a
&gt; a6 I( F# |1 u5 l
'    ABC    '2 r5 ~3 g$ J1 n9 M, G5 q) H0 z! g6 k
&gt; a.trim()2 V  a5 ~1 L0 y4 s% T+ M
'ABC'/ T; i  Y  S, Y' o/ p- G
//移除左边的空白! L2 l8 e* D, Q3 p- Z+ i. F8 ?
&gt; a.trimLeft()
6 R' c" R4 @& _4 U! j; R'ABC    ') b8 [9 z+ A% S" z: d
//移除右边的空白7 ^2 b6 \4 ^2 Z/ A- t
&gt; a.trimRight()
4 e# h3 c# Z* Q'    ABC'& |# S7 C, F% v& S; K1 M
3 y0 T6 w) Y! H  m
//返回第n个字符,从0开始
- |0 A1 L. k; d&gt; name
- L3 m% K8 Y# O# Q0 a) Q'Hans'4 h, C. M+ L8 r) ~
&gt; name.charAt(3)3 X( s5 \+ W$ E! P: x" D2 X
's': p% ?# Y6 X' C
&gt; name.charAt(). k, P8 Q( E$ k/ U- ^1 o
'H'; P+ C9 L8 G. }1 l
&gt; name.charAt(1)
5 B7 @$ e. L" o3 K+ G'a'/ R  u! Z- P. z
- _, a) D7 S. q, h% ]
// 在javascript中推荐使用加号(+)拼接
8 v3 r0 s0 G% V0 W: y+ {1 o&gt; name3 B5 h& L" k% d" B
'Hans'5 ]% Z- _/ `8 d+ H# C+ v
&gt; a
; T9 p) N* k) }'    ABC    '9 m8 L( G- l; i! ~& W8 i  F
&gt; name + a
' G5 `. m. o4 `7 F( p( S'Hans    ABC    '
5 \& |0 S9 E; T! N* C  {// 使用concat拼接$ X$ \' s7 e: ~* `( z9 d* i
&gt; name.concat(a)$ |' T% d% E9 ^  g! k4 X
'Hans    ABC    '
( A8 B0 q7 L+ F8 K" i$ r) t1 p6 A: }' r( S) ~( o. ~; y
//indexOf(substring, start)子序列位置
3 m( Y# D, i4 R& ?& M
6 O% E, z. e# L! m&gt; text
4 T! q0 u3 r; W" i'A young idler,\nan old beggar'; |! f# b, }& E, x% Y9 I
&gt; text.indexOf('young',0)
3 @) S2 W6 p( z" j2
' h. `4 s! q  p# ?, X
4 V, X4 B1 k5 B9 W) i# _//.substring(from, to)        根据索引获取子序列
9 T# M! {& ?0 v; F& ?3 u&gt; text.substring(0,)2 b% j$ u9 N4 h  a
'A young idler,\nan old beggar'9 `! M& |# B7 O5 U8 z2 {. _
&gt; text.substring(0,10)
7 v) f( R  _# q* i# o5 A1 h7 C+ R+ F'A young id'
2 p3 p) W' @, k8 t' v6 Q- v3 r+ O6 ?& R
// .slice(start, end)        切片, 从0开始顾头不顾尾' y2 l) S- k& N- ?; Q% M' d
&gt; name.slice(0,3)( O$ ^  Y2 _2 z5 B* w3 Z+ O9 I
'Han'
6 s& c/ R" n9 a+ k6 X2 x5 p) R: n
2 Q: a: U* a# ]: P, Q) F// 转小写2 C9 X8 X' K. l- E6 c0 M! A
&gt; name
( l9 P; J: O7 \- P2 Y% x+ R% q+ \4 e'Hans'1 U; e- o. o/ ~- h4 T
&gt; name.toLowerCase()
2 i+ {1 z. i& s( R1 ?( _'hans'
! G8 X- t! g2 B1 p: A// 转大写
' k3 m4 ]" E9 q) P&gt; name.toUpperCase()
' k- v8 I8 a) E0 X, r'HANS'
% Y+ z; c  v6 p" s; M; ^& r
0 m' p  w, o8 U+ E4 i// 分隔
9 g$ H2 z0 k' G4 O) a; C8 S: m9 A2 J&gt; name
1 J+ U0 c1 r8 ?0 G. {* R'Hans'& e# Q8 O$ G$ C0 t4 R: p1 K
&gt; name.split('a')
9 x$ ]! x9 {/ J6 f+ T(2)&nbsp;['H', 'ns']% n8 v5 s( w- [2 k! c5 x. j
</code></pre>4 D8 K+ ~; h6 k3 W' a; {3 h- l
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
: ^, g# @) M0 R) j0 g4 E" C<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>- M  [% W9 z7 l0 u% a9 ]
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
2 n* t3 Q+ B4 u) F+ i3 s9 U<p><strong>null和undefined</strong></p>- [; d( ]6 M' ]
<ul>& X0 _/ o4 ]9 I, z2 ?1 l8 Y
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>% r/ l% c- x0 l5 p
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
. t. m" ?! G3 n1 `/ d</ul>: i) j; n! X3 `: E
<h4 id="234-array数组">2.3.4 Array数组</h4>1 j5 O2 v5 \  w  E! m
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>2 H' l) e( `. q; p. |
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
( N# X6 l2 \; y1 N- d7 G4 t& w; _&gt; array1- w6 ]- |0 N3 o' d  @
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 G) H/ o6 c1 Q" a, X+ a&gt; console.log(array1[2])  //console.log打印类似python中的print; @1 \$ u; e3 }! @. P" J
3( y) M1 a  v& M! f  {4 t: @! r
// length元素个数' Q1 i# D5 V: ~" K; l3 ^' O( r
&gt; array1.length
" z1 {& s* P) H+ V; N6 N7 A6
" I7 k$ K& O* C) b  y& Q// 在尾部增加元素,类型append; }% G( e. M) M7 c; O' j
&gt; array1.push('D')
4 o+ ^& U1 V7 p7; F' D9 h# j7 e( `" h( h$ d
&gt; array1
7 e0 m- t% P7 s2 W(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
; |6 C- L4 G. M' m5 j. \) I5 B5 E// 在头部增加元素9 }8 [# f; j/ M- e
&gt; array1.unshift(0): V5 l: n( I0 h* ?& [+ w+ {
81 J4 k1 d/ G4 H& a7 L( }0 T( m
&gt; array1' t* |  x% n8 b+ B3 K6 r' R
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']. C3 N9 `9 @6 d" p& d' v
7 O5 ^5 W+ u1 ~% [8 f$ ^: e  j" |) G
//取最后一个元素% E) @8 k- X" R# k; ?2 M: Z7 O5 _, O
&gt; array1.pop()
! |8 h; o3 u1 a7 G7 {! `2 Y  q'D'% F6 p% e5 s5 u' q% _7 _
&gt; array1, e, ^; X* C1 c% @
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
, R; Y. R& g8 O+ [+ E//取头部元素/ `' h- h! v4 D8 A2 H; R6 z/ e
&gt; array1.shift()
) b# Q: H$ T' e* W  g02 w+ k( u9 T4 J! S
&gt; array1
: K3 P& y6 _- k' D8 n5 c(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 l8 f1 Y8 U  d/ N: Z( g$ _
* D0 O5 N: Z& u" b0 i7 ?! _
//切片, 从0开始顾头不顾尾
5 I) ^& H1 {$ `8 |. f" f&gt; array1.slice(3,6)+ _7 c% J4 X' h; f: \# @* Z" A
(3)&nbsp;['a', 'b', 'c']& i, s9 L8 l8 {: T" W0 d
// 反转
7 E0 j( ^6 n3 f. s&gt; array1.reverse()- }: L" p% `; P4 b9 J1 H4 P. o
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]5 @- z4 T+ T" ~9 g$ d. G  W' H2 A
// 将数组元素连接成字符串" h3 g4 E8 H$ `( b! \
&gt; array1.join() // 什么不都写默认使用逗号分隔
. S$ Q8 @3 [. |1 x# c. D'c,b,a,3,2,1'# r/ i7 A# M8 ~/ I- h3 V; Y
&gt; array1.join('')
9 K* |* q7 R" D7 |/ o  h. C'cba321'
. j& h% W- N7 M+ D0 z& D&gt; array1.join('|')
3 X7 b8 e& s' I2 b'c|b|a|3|2|1'/ e4 o5 p- ]& N) A1 ?9 p

4 f7 c: |0 ?, H& ^! @// 连接数组$ O) B' ]" U4 g# \4 R, x
&gt; var array2 = ['A','B','C']
6 ~- o- y1 l. _&gt; array1.concat(array2); b' ~: u2 r3 u6 g. ^; ]# q# U% h
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
$ m7 Y' Q3 }6 |: c, r
3 }4 ^; w4 r8 ^; c, _// 排序
( a4 j1 [0 c4 g3 E( N&gt; array1.sort()* C0 `+ h1 Z4 Q' `; r" ?
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
: }1 i& h: W# v
. U* {+ A  `, G4 j9 x9 b( f// 删除元素,并可以向数据组中添加新元素(可选)* H  a1 v4 R; }
&gt; array1.splice(3,3)  // 删除元素* F0 i5 _# _8 C0 K: b
(3)&nbsp;['a', 'b', 'c']
: {6 V9 J2 ^9 ~3 @5 A&gt; array1
* _( b1 ]6 F, L7 R; F+ l(3)&nbsp;[1, 2, 3]
" N! j/ C$ j; F" }) K4 N&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素. l( i: o3 I$ e/ y1 Q  `. @- e
[]# h" V2 L. |: ~' ~
&gt; array1
1 r" p0 p2 z+ R4 h2 Q4 l6 h) r- E(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']. \$ s: b1 a! s" w

8 d; k/ H/ J: f! ^/ L7 q% F/*' C( ?8 w" u9 W- r
splice(index,howmany,item1,.....,itemX)
* K' t0 O- f" }8 T+ [2 S. F6 [index:必需,必须是数字。规定从何处添加/删除元素。
$ s% @* I% p; H6 T4 ?4 khowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。1 [7 j( ^+ r9 F' o8 K
item1, ..., itemX        可选。要添加到数组的新元素
) B4 [' s0 q5 C& |) M' @4 k/ H*/8 c8 x( e9 i- k
; c& C7 v" ?+ M
// forEach()        将数组的每个元素传递给回调函数0 t3 Y% O, U& n3 J2 \2 a* L
&gt; array1.forEach(function test(n){console.log(n)}): _: w7 b! w: O, a1 v$ v
1& V" s8 {8 t4 H* B
2
" h' m  g2 H$ f8 j 3
0 `/ Q7 e, X+ a, { A4 Q2 M" n" U* T9 }
B
. j0 [* `4 N! O3 S0 [# F( T C
- `7 ~6 ]( P( x, I6 g  a1 V, j// 返回一个数组元素调用函数处理后的值的新数组
! }2 X2 ~; @! q9 \+ Q% _&gt; array1.map(function(value){return value +1})
! j. w1 G2 F, M0 \- O$ l(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
, _: ?, u( r5 m4 B+ ]! H</code></pre>% t  L+ F4 s. q- U
<h3 id="24-运算符">2.4 运算符</h3>
; f: k! _4 P  ^  f0 _( F8 v# J<h4 id="241-数学运算符">2.4.1 数学运算符</h4>4 g9 a; A9 g( M: v
<p><code>+ - * / % ++ --</code></p>
. U+ k+ Q+ B9 z- H<pre><code class="language-javascript">&gt; var a = 6
7 }$ P9 e% D* t; S5 Q/ d&gt; var b = 37 k! D3 q* R( ^
// 加, y5 [) U$ p6 l0 Y' c
&gt; a + b1 r4 v6 S# \4 D$ k# G* n+ J/ U% A: d
9, a+ p, n  O" v0 c
// 减
$ V. Y9 ?" ?# A&gt; a - b% d5 h/ ?+ J6 q* M
3" U% f4 X1 H5 j/ L0 P
// 乘' [- {& f/ H! t9 h% Q; y5 G
&gt; a * b8 f; Y" c$ K9 t# m7 w
18
/ v* d& _/ R3 W) d// 除
0 L0 u+ b8 K) p7 q% V" J/ B&gt; a / b
& D+ Q9 Y6 U* _& u  A0 i2; P9 b) J8 p! [( E6 d9 b
// 取模(取余)
8 h+ @/ n" }- e0 M5 {( s&gt; a % b3 |; c5 a: u+ P/ n/ f4 a; n$ w
0  O' m( Q( v; ^7 @& L4 {
// 自增1(先赋值再增1)
+ T  K$ e7 g  o- F5 E8 h&gt; a++1 m; o, m! E, |2 a: \
6( ]& ~" j) e$ w; Q9 I
&gt; a
0 v+ n9 d4 ?. x7
- z, U3 r* }% |' Y// 自减1(先赋值再减1)
! p+ x7 {7 N4 ^+ J! a, a7 P% `$ g&gt; a--
9 p) r0 S" _! k7 n( k+ g7: t9 h, T7 F- G+ `
&gt; a
6 k  `$ F' a& `  O' Q6, `* I7 d: _' w9 p2 b
// 自增1(先增1再赋值)
' y$ S. q3 q# q$ h&gt; ++a1 m) t% T- D5 g0 B
7
3 z" H; ?! _5 u8 C9 h( {// 自减1(先减1再赋值)& m- P, C2 o% ]1 n7 ]  T
&gt; --a, y2 F* q7 }$ L* B# z5 {8 z
6
8 b9 ?5 [+ q5 Y; A! ^+ p' f8 t+ c- K&gt; a. E. o7 p4 v% G" N$ M9 f
6
( S3 @" @; x8 S$ S# e  O0 I3 c' `6 ]4 N6 L
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ R% p. a6 C; o( {; I! z</code></pre>
" R) ~3 W0 E3 r  @/ W& l# b# b<h4 id="242-比较运算符">2.4.2 比较运算符</h4>. p. `0 s0 U9 \* }
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
' J6 N: ]6 Z1 {6 Z  v1 H! [' @5 f<pre><code class="language-javascript">// 大于# c& P7 t8 b0 b  R1 n! Q* g
&gt; a &gt; b. J( W! d  {; Q& V  Z
true
, v5 `6 ]5 v: t0 Y, C$ `) H// 大于等于
' J: d. C2 O0 e4 N2 f+ l+ ^$ l. r&gt; a &gt;= b
+ Z, m' G" p0 y$ {; S. o: ?/ mtrue
' U1 P- }" ^* y1 `  m8 g- f- E// 小于. ?: \0 s3 C3 a0 n
&gt; a &lt; b
) x( I& d; c( r& Y4 u- W! r1 {" X  ?& ~1 Yfalse  `& _1 @2 b" V* n; ?# q2 H+ L4 ~
// 小于等于
" B( Q7 }+ h+ I8 i* |( S. f, E4 K5 f&gt; a &lt;= b: L  D8 Y- Y1 g
false; o2 N' ~/ E% ?8 S5 ?0 B0 M
// 弱不等于
5 g, d- \2 `" ]  u; o9 ~0 ]: U&gt; a != b
& \  }/ f; y/ h! H- g6 l6 N" o: E+ \8 Mtrue, w: X+ f' _& f* k* o
// 弱等于2 v9 v% h+ O+ K$ p$ O6 v& E8 \
&gt; 1 == '1'3 i& }6 z) a- a: X/ P
true
2 l- B+ n9 h1 S/ b// 强等于8 K; b9 f" s/ k* C" s, m: K  }; t/ H' a% \
&gt; 1 === '1'* o' X4 z6 A0 o0 ^* V3 W( r
false8 _/ U; z5 `3 n" m7 O& s6 L: f
// 强不等于- e5 W; K( a& r' E" n
&gt; 1 !== '1'  O9 t- u# `2 f
true
1 F3 ?! \# c4 k8 W+ A3 B0 d& t, V0 K& H& `1 b" X
/*0 Z9 q( x6 N0 x. C- Z& t
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误, B% L& ]$ ]" h; H9 d  [- R) o
*/: y; N& u. I6 u- I9 z3 {+ ]
</code></pre>
7 y. C" Z( s. n* o7 @2 h6 n1 \: H<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>/ A( ?9 G. n7 Z; m
<p><code>&amp;&amp; || !</code></p>
5 q7 d5 w7 `$ ~# }<pre><code class="language-javascript">&amp;&amp; 与1 a& S$ j: x% U/ |2 }3 P
|| or
/ w* Z0 I2 ~8 Y9 e+ T1 a* u! 非5 B# H$ c6 }$ y' X8 e+ b% U
</code></pre>0 @5 x( p# J5 b' N- ]
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
9 p  ~/ C5 ?' j  y/ n. ~<p><code>= += -= *= /=</code></p>5 @8 L7 {; x6 e6 N' f) o
<pre><code class="language-javascript">// 赋值
- G% K- M7 P  _- x% Z  W% }. ]&gt; var x = 3: D: K4 ]$ Y4 T+ |$ @8 m8 v
// 加等于. a8 \. _. g; w3 G) d" U" j' v
&gt; x += 2
8 \/ m% {7 I, V) V5 S5% @+ i' Z7 |) J2 j
// 减等于4 U- J0 T- u* h  Q; s8 K7 D$ |
&gt; x -= 1
6 k  P0 S* H$ U( j+ G4 g& Z9 k& }0 Z4- {4 _) h3 t8 C8 s* g
// 乘等于
. `7 ?  L) h8 T: Z&gt; x *= 2
7 Y1 D6 H0 g- ^2 ~5 K84 N4 y8 U" X4 l! K0 S
// 除等于6 j) S% ^* x! T, `; P1 p- L/ p4 R
&gt; x /= 25 `9 `; P# P4 }
44 L0 m1 t6 g4 F* x: V
</code></pre>
  t& N/ Y5 S1 C<h3 id="25-流程控制">2.5 流程控制</h3>
6 f# D( S  H( n<h4 id="251-if">2.5.1 if</h4>
' C2 J) s8 A7 F<pre><code class="language-javascript">1, if(条件){条件成立执行代码}% g* r' S) Y: H) `: f$ e
6 _5 Z0 D5 Y; V5 [
&gt; var x = 34 b" O* [% w0 R5 S3 _( l6 B$ m6 ~
&gt; if (x &gt; 2){console.log("OK")}
$ E* [+ Y% _' `3 d OK
% [, |) N( Q% v# S! m
' L, g7 ~. [4 [+ w+ a8 D( B+ a2, if(条件){条件成立执行代码}
, b5 I* v. c! N$ ?$ c        else{条件不成立执行代码}9 u1 I, f& |9 L3 c8 z
. v5 M; F7 ?; V$ T: G- M/ s
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}+ s: z0 q6 i0 @% G8 ^9 V- @9 ~( P# x
'NO'
  y0 a. V$ ^9 u, W3 D7 F; F2 S- ^. w3 x
8 ^3 {/ X# d, ?$ Y6 I/ s' I+ P3, if(条件1){条件1成立执行代码} 4 P' l) d1 Q' E3 g2 ]" O* [
        else if(条件2){条件2成立执行代码}+ ]2 u6 X7 b2 f. x5 V# ]
    else{上面条件都不成立执行代码}
# Q7 z* ^2 M5 z) G( ]8 N1 ?% y. z! K+ L7 V
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
* |* q. h* k- v! G0 [% t8 m4 S Ha: ], X2 s, A( @0 a- t& s- C1 f
</code></pre>0 P) q: _1 H7 b7 k* W+ ^: m0 r& T* b
<h4 id="252-switch">2.5.2 switch</h4>0 Y0 a4 H: p$ o0 b7 x$ T1 _3 B
<pre><code class="language-javascript">var day = new Date().getDay();
4 v, H/ R, R1 T+ ^+ \: Tswitch (day) {
/ L* h# Y5 \% g" W8 }& Y, [  case 0:! h1 {; G* X; k( Z$ o/ U
  console.log("Sunday");2 Z: k, Y" _9 l3 t
  break;
& b* N: O, \/ I. G. C5 a; s# l  case 1:  R0 }* c' s, a# i7 g$ B; r, ]0 [
  console.log("Monday");
2 G' M/ R8 ~9 ]; c/ q1 R  break;
* m# v4 X# l! O- g8 }% Fdefault:) @( l1 W/ O# ?% Q" _+ u2 U6 n' T, o
  console.log("不在范围")6 d' c+ C2 K; X7 A. u+ E; Z
}
( T# ?2 W, C( Q: W 不在范围+ R5 k, Q# S2 f+ B! t2 ?4 k
</code></pre>7 T8 ~, J4 C* m+ P
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>. o! {+ j6 e7 Z; ~# U2 Z6 K
<h4 id="253-for">2.5.3 for</h4>, e/ Z% \+ K4 P1 e- l2 m
<pre><code class="language-python">// for 循环
; Z% y8 Z! ?5 V% {$ B  H        for(起始值;循环条件;每次循环后执行的操作){
) l. ~) Q$ z- Z( f1 }        for循环体代码& l) B4 l0 }% h# u" B) P& v  s% Y8 D
    }; J/ c% b* I& W% a" H6 [) Q# J

9 Z8 R* s( v6 s/ Ufor (var i = 0; i&lt;10; i++){& X& N8 }+ r! Y( E
    console.log(i)
% n' C" j9 ?) l* n4 g" \}
( P  j" r% R. f9 B; z. {        00 ?( g& N0 Q3 v3 U8 L
        16 X& y- w) f" T) y6 V  \
        25 a3 N+ F: |: I4 }, A$ M* C+ S
        3
- ~* o: [9 k; ]        4
. n$ S) B4 {- L; c! {        5
( t8 i6 o9 B8 s/ b& p" W* g        6  D+ X9 T! f) |" r
        7
1 u7 ]0 s% _' x+ Z/ v        8- w7 z1 H1 U# q8 q
        9/ A5 C% x6 r- r7 c; f4 z
</code></pre>" U2 D6 J7 o) f, U3 O, U% _  T
<h4 id="254-while">2.5.4 while</h4>
3 U. t6 l, k7 f9 c8 [( @<pre><code class="language-javascript">// while 循环+ a! }' _3 M, _% H; R& T
        while(循环条件){; H7 ]  l# y. V( a. r  [
        循环体代码
0 q7 D5 `) C. X% J7 r( B    }/ ?/ `4 s7 P, {% ?

8 Y- o. u$ b- P( M/ h6 p&gt; var i = 0. h  \0 A( \  E: t
&gt; while(i&lt;10){; I) O7 l6 f. ?7 o
    console.log(i)
; l9 q' [4 P/ I1 i; r& z    i++" f) z1 e  ^! r: j9 V$ z6 a
}
7 p; }0 ]+ {0 Y3 X7 _+ V 0
; _- p* ]: |; g6 t2 { 1
* i4 K+ U# r) o7 ]+ }4 Q 2
1 O) C( s: Q0 ^ 3
& D5 ?0 C3 c3 m1 ^$ Y 4
" V- [1 i' W0 m, m 5
  y/ K4 \0 G) s- K( x 6
4 N& d+ Q' {! W- g9 p 78 L& R8 I5 Q9 x* J1 K: h
8
6 Q9 K. C+ r9 }) B; |9 i. z 9+ t' L1 j4 U* }2 K. c; i3 b
</code></pre>/ Y# }/ a% C2 V$ f$ ?8 z3 q9 A
<h4 id="255-break和continue">2.5.5 break和continue</h4>' D7 d6 c, i0 s+ W) C0 O+ p
<pre><code class="language-javascript">// break: v% E; y6 y  E$ Y! Y& N8 U# d
for (var i = 0; i&lt;10; i++){! U2 m  A1 r, L! C$ y  ]! G$ ?. i
    if (i == 5){break}
4 g" E  R3 i8 y2 \+ X, Z    console.log(i)
2 Z) o+ M( D% Q0 K5 E2 T}
  O! f7 ?( t- t6 ^8 Z; d 0
+ M6 ?# e  h, j( K% w6 K 1+ ^! }& \% X; D+ L1 h) x
25 k8 @* f) [& j  a$ i  \; R; [
3/ Y9 p" ]8 D7 M% z2 P7 ~0 n  n
4* Q1 H3 n& s0 \5 c! D
// continue
& L' z1 C' G, E+ r7 G( wfor (var i = 0; i&lt;10; i++){
3 \# r3 e5 X* t    if (i == 5){continue}
+ |0 P# {- T* y    console.log(i)+ n, }7 d" E: u/ `. I- E( }
}
% i- K( L$ F, M 0
6 C4 n8 \2 k1 Y 1, [+ p+ J# M7 |2 i' t
2/ p6 a+ @2 E" `: d2 C, M
36 f+ l0 Y2 G" o7 @( x; a3 U, n1 w
4
& o( D& ?+ B! O' r5 z: _. u% W: ~ 6
9 e& ]3 {" ~7 Z6 ?) x. \/ ^ 7' b% `* N5 ~/ u+ e7 b1 `
8
1 _! Y/ _$ J5 `* G: i; V" u 93 n/ ?* G$ p6 h- G9 N( h% T3 @
* x  A. h. O9 j2 ~  J
</code></pre>
" I$ V3 _$ V6 T9 S2 A: N<h3 id="26-三元运算">2.6 三元运算</h3>( J3 H: K0 p3 s- F3 y4 ^- d' H# Y
<pre><code class="language-javascript">&gt; a
, i# G3 n  [/ m% [: i* ?6
6 K5 r3 a" B7 h5 H&gt; b2 H; c! ]. ~1 P
3
' `* A( a- l6 z% C. O* s, @
$ L; l. }: ?# {//条件成立c为a的值,不成立c为b的值) G% K! E3 c. F! n- x7 Q
&gt; var c = a &gt; b ? a : b
( E' z8 T/ F# c; q* R3 U9 X&gt; c1 B9 B* O! u2 u) O  x; ?) R+ [4 d
6
, F- I' |; R, u: B. m- T- T
  c) l! c" A3 \% I. `// 三元运算可以嵌套
- r- Q8 `9 b" ]7 Z( k</code></pre>
4 A1 c# C; n, y! g4 S6 H<h3 id="27-函数">2.7 函数</h3>
; ?& Q3 w5 t8 z3 M7 t2 x<pre><code class="language-javascript">1. 普通函数
5 I: g& G( T* M8 L0 \+ h&gt; function foo1(){
( V1 p0 Q+ t4 D- b9 O    console.log("Hi")
  j* v# d9 B+ f# y}" M4 M' ?3 T! o4 C; I+ D; l1 c

5 u3 R0 q- j& k- f6 G! h0 g&gt; foo1()
) a1 a8 Y% ]' X3 N  A! \        Hi! D4 H4 n6 N( ^5 v) A6 i
2. 带参数函数
: I% I* W( Q! F7 e&gt; function foo1(name){
4 H; B; K: c7 Rconsole.log("Hi",name)2 R, Q' j2 D9 Q, T
}7 c" K! {& u4 p2 I* j- n

. i* \4 |0 b& I) V2 [3 z&gt; foo1("Hans"), O. P+ b) {( Z' i  q+ @3 {
Hi Hans
( Z3 C0 t& i' N# _# Y; I  d- ]% y* O
&gt; var name = "Hello"" Z7 x/ x8 N8 m: h, J1 N+ p" N
&gt; foo1(name)
$ z" z: ~9 X9 e( THi Hello
7 a+ H% y  d! \& [1 I- k8 r. u! Y5 x0 _' ^! f! @; r" S) j+ }
3. 带返回值函数: @/ o% [4 E) d5 n3 G0 n
&gt; function foo1(a,b){
8 t/ F( s6 l4 d% I+ W        return a + b   
% E7 [" C3 `2 D, }  \}
9 f: o! T1 _) C, s&gt; foo1(1,2)
) C$ d9 ?% C0 B  t$ I5 V34 j8 I' J% M$ H. S6 d* }) ]
&gt; var a = foo1(10,20)  //接受函数返回值2 ^. g& s) \4 s0 t$ s8 X, {
&gt; a/ M& k' h8 e0 g6 J. T
30) y  Z3 G# x+ p, T5 P: {/ B: e! g

3 K) m2 ~4 ^! i: Q6 b4. 匿名函数
2 B8 x% U% w9 h' R+ x5 Q6 _&gt; var sum = function(a, b){: [  Z6 l! j# b! b
  return a + b;' V7 @' l1 C+ H4 i  D! b
}
- Q' V, T0 N. z& _&gt; sum(1,2)
; m' d# n6 P# s- k. m3
; t0 Y, L  t3 W& C8 T+ ?8 P( Z, J2 g# l, k
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
6 f# \  H, a+ z% \" {&gt; (function(a, b){
$ X0 w. ^& P3 _- c  return a + b
9 ]7 c' _5 ]0 ~7 C, v})(10, 20)8 O$ r$ V* e( \1 b' ?& B
30
" j3 n8 I5 a8 V4 l8 d
2 R5 u0 r; l1 O" d5. 闭包函数* C5 w" a5 {  K9 N- e. i& M
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
2 m) m  y. b0 i3 ]2 B" e3 Mvar city = "BJ"  p6 I& D8 s. Y
function f(){
, w! _; U* g1 D0 h5 k. Z# s* ?    var city = "SH"  b2 ]3 ~9 k2 `/ L+ M8 T
    function inner(){8 _2 w# {" v7 `9 g: g, u8 k' ~
        console.log(city)4 {$ ^; x3 u+ S6 e: v- N
    }
7 w- d* }" t3 G! E    return inner
: t) q1 L  o/ r1 G. y% o}
: g- C: l$ g9 @: ]! w! @var ret = f()* [, e! ]9 j3 I3 k* N
ret()4 W( L+ I- v% a: z# K7 R
执行结果:7 B; e9 J, V- P7 g
SH2 i8 S5 m2 O: k: o2 }/ l9 M! v8 T& n
: H- A2 x+ ~6 y7 T. V2 K; N" D) h, P
</code></pre>* \% j. e( n% w/ H- M
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
6 k, y/ i2 J+ D4 j, T7 ^<pre><code class="language-javascript">var f = v =&gt; v;. w7 u! q2 v, A& \& {- e
// 等同于0 m) V9 J9 C8 D3 F' ^6 w" C. Y
var f = function(v){  C) g# c" A( d2 v) i
  return v;2 ?' l  {. z$ C; n
}# x2 I; x, \: C6 X) g2 n9 u
</code></pre>2 _* R$ U! u3 {' P
<p><code>arguments</code>参数 可以获取传入的所有数据</p>' z+ g. p% v1 w. L
<pre><code class="language-javascript">function foo1(a,b){' k& ^; P) S( z
    console.log(arguments.length)  //参数的个数
+ R# {7 \! x% v. ]    console.log(arguments[0]) // 第一个参数的值
3 ^, O0 l# X9 o        return a + b   
3 {: ~, B0 |3 Z2 V/ H" U}) l( C* G4 y$ g9 {
foo1(10,20)  r% k1 }# t) e2 _1 |2 z( U# c
结果:+ D& x, x6 @$ J% A1 N' ?* ~# O. p
2          //参数的个数
6 a, D, h- P- B2 x3 n10        // 第一个参数的值
+ h* j: A) g0 r, p" N2 r30        // 返回相加的结果
3 K) `# J4 b; w</code></pre>
0 n# u. L$ t5 ?# \& N3 s<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
9 ?0 R' d* y4 G<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
2 {9 c( v, p8 O; f2 V<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>: W; G4 V5 h: I. s% ?# D, o
<h4 id="281-date对象">2.8.1 Date对象</h4>
6 h1 i1 j: D8 _/ {2 O<pre><code class="language-javascript">&gt; var data_test = new Date()
  O9 u- e; [5 N7 M5 f# \! h&gt; data_test
5 W3 ~& q1 N6 h6 M4 Z$ B( F8 zFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间); r$ f4 y: M8 z4 c  R' n' @
&gt; data_test.toLocaleString()  e$ \; c! m, U6 }
'2022/2/11 下午9:44:43'8 W% O" K: {0 t- e; N2 T
" C0 @6 w5 L: P7 f3 X
&gt; data_test.toLocaleDateString()# u- n$ i# h- g. ~
'2022/2/11'
; D8 {3 u' ]$ [; |" e& ^3 Z7 p0 q) _  s- b$ i2 ^+ x9 H
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
3 i; T; E8 `4 x# G7 I" F&gt; data_test2.toLocaleString(): X% A. _" R' E
'2022/2/11 上午9:44:43'
  f7 q$ y9 s) B% a- k' r8 m' ]5 |/ v, v9 ^/ \+ X) y$ e, n
// 获取当前几号
, R. ?1 S" O4 t2 R. @! |* ]) t2 j. {&gt; data_test.getDate()1 \8 d- Y; M4 a) _
11; n$ J& [  k, k- i
// 获取星期几,数字表示
; k5 M7 m+ d7 B  e&gt; data_test.getDay()  
. J- v" O6 V- C2 J" \8 A9 P; S- D5- a# v, w- ]4 d
// 获取月份(0-11)
6 k' ~9 W  _7 W0 o' I; n&gt; data_test.getMonth()" V7 \, d  Z6 @' y( K/ n
1
. g* q7 _! E* X6 T7 {: d2 R1 i// 获取完整年份
: s( Q# \7 |/ j$ l* O: d- T0 `&gt; data_test.getFullYear()
; A0 t+ ~# d/ w& K6 n2022  O. E  C6 U. S; p0 Y- {- N
// 获取时9 U: A1 `' [+ I
&gt; data_test.getHours()
- ]% g+ _; ]1 O; B4 @# _21
: y5 g% o0 }4 F5 c- i$ t4 @  _, i// 获取分# d" Y. C7 q$ a0 `
&gt; data_test.getMinutes()
4 q) o; g& q7 Z( h# h44
( }$ E8 P+ O0 F4 z& A/ O// 获取秒
5 r/ t; b6 P; Z% ]3 f8 M; V9 R! u&gt; data_test.getSeconds()6 c* j  |: p( h9 I. a) y/ N! P: q
43
" q0 Q4 A  P) b# p// 获取毫秒; V: Z, v! o  X' D3 k+ A- O
&gt; data_test.getMilliseconds()
! P6 y+ b- s# V# R0 Y0 Q$ ?# [: y' N290/ Q2 T* n( g- ^$ ^
// 获取时间戳9 F$ b8 r% ^9 F5 P. J* e  J5 {2 ?
&gt; data_test.getTime()' Q7 e" ?0 ~  d6 A& g; g# v
16445870832900 O7 p7 K, @* t0 ?5 n
</code></pre>6 u) a5 T9 A9 R1 z' P
<h4 id="282-json对象">2.8.2 Json对象</h4>
( T' U, u" c$ H5 `+ q7 |<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
* f7 _' ?; t; T6 c# z; Q1 `JSON.parse()  // 反序列化,把JSON字符串转换成对象8 [. |" P8 K7 Z0 C% X' K
  ~+ o( {# R, z+ C! c! E" v6 Z
// 序列化' w; F; Z' n$ s+ f) I3 ?0 w
&gt; var jstojson = JSON.stringify(person) 0 `* k4 u5 b  o, v0 X$ N
&gt; jstojson  
/ t, C; u! Z" a: ['{"Name":"Hans","Age":18}'
. M, ?4 r9 m9 ^
1 I; }& [) j" `3 X8 V' J// 反序列化
9 i& @  u% H2 @# z( C2 w5 K&gt; var x = JSON.parse(jstojson)) ?$ U1 ]" q+ u
&gt; x9 @7 k$ B6 l; p3 z+ u" b3 N
{Name: 'Hans', Age: 18}
0 l* F% X: ?8 f# g- S# e&gt; x.Age& ]1 I' ^8 C5 e, R, Y
18
* t) Y8 J+ N; v1 \</code></pre>' V' m' g% ?, E* ]3 ^
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>8 M+ |* |! N& E8 h/ T1 v' v! Q- [& _
<p>正则</p>
% m% Y# l) s9 I7 L" B<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");( o  R$ `8 U. S( V
&gt; reg1
; D! G' \+ E6 R1 N$ t% t2 C; _/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 ?& f0 X' r2 U$ b6 m&gt; reg1.test("Hans666")8 w* S6 c1 D2 t  O) p/ g* X. O
true8 ^3 r  o( N/ K

* U. U9 x- B! s" b. N&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/% B% h3 U- H3 l
&gt; reg2) ~- o( n, Z- E* g
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 _9 a) b: m: P/ Q% _&gt; reg2.test('Hasdfa')% w% s7 O  y8 T
true
5 s! k0 b7 u/ o
0 _  U- _# v8 G1 b/ P6 K全局匹配:& e# {- M0 g+ D
&gt; name* D8 U: W; M8 H
'Hello'
- o) {" T/ _# F# O&gt; name.match(/l/)1 p9 ^" l" o% b% O& a5 O
['l', index: 2, input: 'Hello', groups: undefined]
# g, V6 ]8 E! P/ x! F( p! m! v7 X
+ X4 ~* D* D& G" a( [* n&gt; name.match(/l/g)
, b% a5 G) Q4 B, {. k9 Q(2)&nbsp;['l', 'l']
7 W" p& j0 @; J' e5 s// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
- B3 V/ O8 J% f0 s' Y# v( p5 e. b0 o- V/ n
全局匹配注意事项:& a$ P* f; Y  \5 e0 X1 t
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
8 J$ d. ?- i4 p; F1 u&gt; reg2.test('Hasdfa')
6 Z% u7 Y) H0 _; O* q; }$ K+ f' vtrue
0 _: z( E/ {' P&gt;reg2.lastIndex;, w1 o" U7 G- ~+ a7 T
6: x; L, S+ p4 `; A# |+ ~
&gt; reg2.test('Hasdfa')
6 ^5 ?) Y3 o' g5 @0 V& u. Bfalse
9 g% q8 Y8 }. y' Q; d&gt; reg2.lastIndex;) b2 Q4 \/ J; \( k, `
03 \5 K8 e* Q: Y4 ?: A; d! m
&gt; reg2.test('Hasdfa')
" X3 Z0 u, P" a+ Y; _( U9 z7 A( N, G) _true
7 H# u- Q$ F( f* L: `&gt; reg2.lastIndex;4 f7 t0 G7 h* E/ P/ K
6
9 a' \4 c7 ]% K&gt; reg2.test('Hasdfa')% s  V& O/ y* y" g1 ]
false1 o2 S$ l9 L% x. |& I
&gt; reg2.lastIndex;- m1 k9 X) B. S& r2 Z# j
0
$ O9 ^) v9 o# P; B9 j& _4 t+ u// 全局匹配会有一个lastindex属性
$ I0 f! _& t5 W/ }0 Q&gt; reg2.test()* P+ r, M9 ~" ^% g! \: m5 d
false0 {3 ~8 D3 X3 i/ I
&gt; reg2.test()5 g0 B9 B) T) \$ V* _
true
! K& ~' {2 Y: H9 z7 m( X// 校验时不传参数默认传的是undefined
$ C- I, Q$ U+ ^6 f</code></pre>: |8 d# H! h3 {
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
, X3 M( r3 m$ b! _. c  l5 |0 z<p>就相当于是<code>python</code>中的字典</p>. B5 L# p$ S. m4 j1 H0 _$ r/ v
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}. V5 C- c2 }& |( q
&gt; person
* @1 v- s! s5 Y" E{Name: 'Hans', Age: 18}! ~" X, D5 l: q( h: O( o
&gt; person.Name
( _9 X6 A9 u3 K9 a% [  ]'Hans'" Z( j0 G+ X" \5 G! a
&gt; person["Name"]
5 ]1 V0 A9 @( Z6 }8 l( h) F2 A'Hans'
$ B% `( K' _9 h4 P3 W2 p; p& w# L- X0 {
// 也可以使用new Object创建
- x( P2 }- _3 z$ R3 ?: h$ n&gt; var person2 = new Object()1 L  c$ Y* x: W5 C8 v1 v
&gt; person2.name = "Hello"5 B) m; `/ u8 S/ `% `* Y. z! U
'Hello'
3 j- i! d9 E8 j! e" q# X&gt; person2.age = 20* V; J' D4 L; K, j; {
20. n7 u( q( y2 Q2 A& d# p0 t
</code></pre>
# K6 L3 ]$ y. q; G# Q  {<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>! H- ^8 U( I, p1 n9 J
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
9 |9 \9 {7 [/ C+ i<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>' B- p- q3 o7 m5 w+ N' S
<h3 id="31-window-对象">3.1 window 对象</h3>1 \1 e6 e' _8 T' J6 |, E3 w
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
% H$ k7 h6 m* Q<pre><code class="language-python">//览器窗口的内部高度2 L7 s- _+ J% w1 @5 l
window.innerHeight
1 o% @9 w5 ^( O+ ^* S706
- U& Z6 v. m: d5 M1 W9 m. d& |: j//浏览器窗口的内部宽度
& y% E. w3 X3 ~* R4 Cwindow.innerWidth2 ~. B( ~& h$ R+ k7 L3 D4 {: T
15225 h% y( t! v2 \3 V# b$ S% C
// 打开新窗口
& H; Q8 J1 b+ P( J4 m3 C- nwindow.open('https://www.baidu.com')
; j* N5 W. d- n! J- V( j2 J4 RWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}6 }+ k/ W( r' a0 K. Q$ h- I
// 关闭当前窗口
7 B  b/ d) i8 j0 K' m% _8 Owindow.close()   @( ?: P0 V) `8 h" N4 {
//  后退一页) S% V4 S# D' t& p$ P
window.history.back()
7 M9 D1 B$ \7 ~3 N// 前进一页- R* C9 d/ ]! @5 T; N4 B" d
window.history.forward()
' r$ H# z4 @  o/ [* f//Web浏览器全称' V6 `7 l, C# e. P# O. W
window.navigator.appName) u1 Q7 i+ j. E, g  h
'Netscape'
  [& D4 {. T# s2 ?: h// Web浏览器厂商和版本的详细字符串
" Z7 k) E! D- n* N5 Swindow.navigator.appVersion
7 O  h: n7 H" n- H. Y7 Z'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'0 r6 s1 d9 X' P9 w0 z* [4 e2 v+ F* P
// 客户端绝大部分信息! O, B# a& b; e5 x- L  \5 S
window.navigator.userAgent
; d1 j8 |" s2 I, U' S'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ H( N+ x$ s  v
// 浏览器运行所在的操作系统8 @  \+ D4 D& [* E5 W# s
window.navigator.platform
  d; L/ T5 `( H! m( V'Win32'/ w9 b6 R; N" b; B" \" c1 Y" P
2 i$ P5 {% w! Z, Z3 K9 r
//  获取URL( q( T* `( c% A! _3 X% @: B" R; h
window.location.href0 }  b  ]- Q' m1 V0 j1 ~
// 跳转到指定页面" ~% M% u( l( c0 V6 |, t$ b
window.location.href='https://www.baidu.com'
$ p5 v& j! d5 V; s* b* t; S// 重新加载页面
6 q4 }) Y( b/ b  qwindow.location.reload() ( {/ E" U6 g8 n
</code></pre>) R, u6 P% C% a! m  _2 ?- Q
<h3 id="32-弹出框">3.2 弹出框</h3>  P6 E6 s/ [6 U& l/ [
<p>三种消息框:警告框、确认框、提示框。</p>( ~0 t( f8 C% N- @' v, ]' ~
<h4 id="321-警告框">3.2.1 警告框</h4>
* U5 }3 b' J/ X: d) X, V4 m<pre><code class="language-javascript">alert("Hello")
; t- f7 Z; t; R. ~</code></pre>8 N5 a; f3 ^9 Z, p8 O
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
/ i% e0 B5 w6 A, y<h4 id="322-确认框">3.2.2 确认框</h4>
9 p* ^6 T& E/ V) s<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>* }9 o! C" T2 |
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
6 ]" g; ?9 d" |! i' R: h. Rtrue
3 @9 k+ G) q1 J& b4 c&gt; confirm("你确定吗?")  // 点取消返回false  r* O( s3 F' z
false  L6 ?* U* U1 u2 A
</code></pre>/ U' j6 J0 n4 N' z: h, \7 ^
<h4 id="323-提示框">3.2.3 提示框</h4>9 Q3 R# `% i5 l
<p><code>prompt("请输入","提示")</code></p>7 o1 Z' H  L9 J& Z/ [7 B3 `3 b
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
1 \" d$ N+ _" E2 F+ O% D<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
) U8 u" z/ b! \$ T& r<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
3 K, X2 X4 }4 ?<h3 id="33-计时相关">3.3 计时相关</h3>
7 @2 A- E$ s7 N# A: v. _<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>! c' [* y2 Y4 g5 I# e
<pre><code class="language-javascript">// 等于3秒钟弹窗  H3 Z* ^% C# t' }  h  F+ ]
setTimeout(function(){alert("Hello")}, 3000), u& O& G1 t$ {* E2 `# g% ?

& {4 m5 u% M6 {# j9 x7 uvar t = setTimeout(function(){alert("Hello")}, 3000)
# @. r. a5 l, t4 S5 \
# K5 N* F; h9 }7 y8 ?" x// 取消setTimeout设置, u1 z$ O/ c/ I
clearTimeout(t)
1 B, U+ B' ^' \0 ~) k% C  A, w</code></pre>- ?% u7 }- w3 ]; b9 f( W, |
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>4 n4 e  z( C) \
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
# f6 e' q& p! P& ~+ h# R. v' M6 i<pre><code class="language-javascript">每三秒弹出 "hello" :+ J$ y' s6 D4 W4 w6 \
setInterval(function(){alert("Hello")},3000);
% j1 {6 T4 p% @0 z</code></pre>
) _4 z6 Z+ |; ]; Y0 G& O6 P<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p># r3 Q" c+ p' w3 P5 h1 |
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
% ~! H; s3 |) f: |//取消:
! `6 i. G& Q, R* ?clearInterval(t)
$ L: n' e+ O2 z</code></pre>) M! ?/ k; m4 E6 @* Q
2 e  m# |7 J  L! R% x
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-28 12:29 , Processed in 0.078268 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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