飞雪团队

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

前端之JavaScript

[复制链接]

8123

主题

8211

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26699
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
$ t' |' t" w* e/ o6 O
<h1 id="前端之javascript">前端之JavaScript</h1>6 Q/ \0 Y" e0 Z2 @- d2 I' u
<p></p><p></p>
. k* N4 Y# Z2 W+ T/ M; K$ f<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
* n5 h2 V4 T- b( Z0 z* ]<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
$ f# d; e  U4 u$ p; M) g. F它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 Y+ q. M4 `' L它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>: N1 a. m' {/ z  }
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>$ ^- r$ `$ O( Z- j  r7 K
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>7 m% y4 l  ?7 i) Z/ m4 u/ I/ a* l- V
<h3 id="21-注释">2.1 注释</h3>0 `0 b1 b) U4 A1 e7 }
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
6 [" d+ D' F" v9 r<pre><code class="language-javascript">// 这是单行注释! u  D/ v  I: z/ ~$ W% J
, o. b2 R2 F5 g6 |( V
/*5 N* k7 H& L# n
这是多行注释的第一行,+ k, M( ^  i- C" W( z+ E8 e% W
这是第二行。
$ S3 y1 y2 ~. v*/5 r8 @$ t( j8 @  o/ e, h0 o, X2 L
</code></pre>
% d: O+ _* D; c2 Y<h3 id="22-变量和常量">2.2 变量和常量</h3>
! m4 p8 l' D: i6 D2 }<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>8 m4 \4 P+ e: B$ ]' L2 L
<ul>, ~: S" x* M* B, F0 r
<li>变量必须以字母开头</li>
2 j; M3 I& g7 A<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
8 f- v3 P) m9 e# C  ?. N& Y/ _<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% w6 ^7 f. c6 t! }$ w( ]6 z) t$ r$ N
</ul>' C3 f: U. l! Z
<p><code>var</code>定义的都为全局变量</p>
* A1 ]* v1 W: l; |<p><code>let</code>可以声明局部变量</p>
( ^" r6 f$ L- d- ?7 p<p><strong>声明变量:</strong></p>  m  P. }3 ~' m% J9 U2 T. l& Y8 H
<pre><code class="language-javascript">// 定义单个变量7 @6 x# ~) O; C" P* U1 Y
&gt; var name
4 N% Y2 I- M, j4 G# q) d&gt; name = 'Hans'
7 X& J. K% C& o4 K3 k) i; s//定义并赋值
5 W. {/ ~0 z; T; Q+ G# I( ]) `&gt; var name = 'Hans'
, Q0 v; ?; @* m# q&gt; name
+ r8 f/ @+ N4 E'Hans'- e) x, v" a  ?( |2 r5 A) l4 o5 J

$ q: \" C* u  [. w8 Z+ f// 定义多个变量
* U8 _" J$ m3 ]& g  R; ?&gt; var name = "Hans", age = 186 w, o5 x2 P" R# ^. q* k5 _
&gt; name% ?0 [* t3 J6 s4 _$ N* e% p1 \8 s
'Hans'6 S& |* o2 e+ {  ]# X0 q; p3 ?# @
&gt; age+ x1 j3 a6 t" {4 ~) Q
18
2 Z8 G7 e9 M/ W* @  Y9 t/ |( W2 {, f
//多行使用反引号`` 类型python中的三引号9 `& S( {% q+ L7 N2 m9 @
&gt; var text = `A young idler,
$ {# [3 s2 e" z1 v. [1 F0 t7 Man old beggar`
3 |' r7 L- E# k( d&gt; text% a2 R- U5 {) q8 y  b; r, @& `7 |$ _
'A young idler,\nan old beggar'  m: Z) o1 W2 ?) f( o
</code></pre>& a( ]7 r. C; Q. h  p, Z6 s
<p><strong>声明常量:</strong></p>! M2 ]" i: p7 p  d# j: B
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>2 L) p/ l+ h3 ]9 G0 v8 |
<pre><code class="language-javascript">&gt; const pi = 3.14
6 A! [8 m3 Z1 ~/ X, y9 R# D&gt; pi
" J! T8 @( Y( e0 b% F2 p3.14
" `7 D9 l* C- }2 ^  |9 L5 _&gt;  pi = 3.01
4 ?9 z4 I; w% J3 C! x5 d" L* h, LUncaught TypeError: Assignment to constant variable.
6 p' r/ {2 y9 B8 }: v9 j    at &lt;anonymous&gt;:1:4
! Q& T' _0 A4 v% T( a$ p; b& [- k' k) W8 b* z; G4 U1 q- w' {' u' [
</code></pre>
+ {# i% P0 y5 i! z' V<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
, r: U* i0 k! X0 C* i) r" |<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 k( e  c  O! I* o# E<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
2 l! }8 ^9 W1 x! I<h4 id="231-number类型">2.3.1 Number类型</h4>
% H) E* M! f; `9 T<pre><code class="language-javascript">&gt; var a = 5  l% P& w2 E$ k8 v6 D$ N2 l
&gt; typeof a   //查看变量的类型  
, g% E/ C/ n3 |0 vnumber
- r8 n! u* l, T+ o4 y1 g5 Q
/ s' g' @/ y4 Y- U2 G&gt; var b = 1.3: z& j8 U% \. K  O' o: c7 h
&gt; typeof b0 @! H' C: q& e9 i  t
number
5 W5 c' W) i7 t4 e
$ y/ Y( O0 Q9 T/ c$ C$ P// 不管整型还是浮点型打开出来的结果都是number类型. p* E' D8 n+ w. b

6 H' D7 r% u0 t+ g$ P0 d/ @8 r/*; P: ?6 Q# H) J( }. N* S
NaN:Not A Number
; Q; c- {  p* S7 K. j) f0 M) pNaN属于数值类型 表示的意思是 不是一个数字
- L: }5 X% B& e*/" O# G+ I; c4 t& a0 V% g& }
) `7 P& \3 i+ M2 @& E
parseInt('2345')  // 转整型
/ |) Z' d( [4 X7 Q) r( L2345, c7 j1 U4 Y( B; G
parseInt('2345.5')
) M+ ?" _* r4 u8 n3 |8 M' d2345
+ ~) S; z9 e. w6 wparseFloat('2345.5') // 转浮点型: d) F: \9 _3 [5 T! f3 I
2345.5+ a3 `6 U5 z5 `. a
parseFloat('ABC')
8 Y, C" A" i& @  W, Z3 ANaN
) T' O2 X) V3 jparseInt('abc')
8 O& f* O5 U( j) oNaN
8 T. Z5 ~  h! V. ~' m: d3 g</code></pre>
! ]. n0 v9 a+ D+ L5 ?; ?/ n<h4 id="232-string类型">2.3.2 String类型</h4>) `& T$ B$ E" _# d
<pre><code class="language-javascript">&gt; var name = 'Hans'* P3 a: R+ g. Y# ?0 _5 b4 j
&gt; typeof name
3 c: ]% i/ k6 R- i" F' I'string'
7 c% A* H8 X# N0 G1 I" Y$ _1 _: _9 {8 v$ s
//常用方法
( R* M$ w( R' r9 b// 变量值长度1 d+ f# f- J" `
&gt; name.length
$ n: h5 a7 u: O4% |1 Z' x/ g) z3 \9 j- @
// trim() 移除空白
2 y2 h% C" i" w" I0 P&gt; var a = '    ABC    '  z8 x/ r/ d: q* s9 d$ ]3 T
&gt; a
3 R, M5 V9 t& v, N7 X4 X0 Q8 w! S'    ABC    '
7 D1 k7 J; n0 i) P&gt; a.trim()* p+ A% ^; J; J7 H( b1 x- W
'ABC'
+ ]3 i4 k  V# F1 f) T//移除左边的空白9 f& X9 z$ _7 u  B& `1 Z
&gt; a.trimLeft()
7 `3 A% z3 @5 I6 P' X, K'ABC    '
* a& R! w3 N: J0 X/ V% s+ O1 |8 Y; u//移除右边的空白
; F6 W# _+ M( `( A&gt; a.trimRight()
# o6 t' W; |. b5 x- _, [5 Q! t'    ABC'; e/ ]) C. @" C8 h# f  @- p
( N5 `* F( U0 b; f  a
//返回第n个字符,从0开始+ m0 \4 g& D; e9 v5 l
&gt; name8 C/ G9 t% Z; r' }8 P/ a
'Hans') f" M& A7 @% j* C% B: B
&gt; name.charAt(3)
. P$ _% O- J$ p! j( q4 R' |'s'9 ]  |6 \4 N& H6 a5 V
&gt; name.charAt()
2 @( U& N. U, r. E4 H'H'2 Q" L4 I3 c5 @/ ~+ J
&gt; name.charAt(1)
0 j6 r1 y3 v- n. G. V'a'# K/ C; [! H6 S1 N

# [8 C5 z% R' x/ _. y7 w2 O6 Y// 在javascript中推荐使用加号(+)拼接
6 w9 P3 f, p( _6 {8 J) e&gt; name1 E8 ^0 x1 Q6 W% j
'Hans'
8 M& R; `- a: h/ j&gt; a0 q0 c. f* X( H+ C  c3 H; h* Y* |
'    ABC    '
) i" E) F; g6 I: D* T" Y&gt; name + a0 W, E( z+ N4 F% l( n" O, V
'Hans    ABC    '
( p! A7 P1 m: i1 a// 使用concat拼接2 ?# g* t" j* s  \  r0 C- Z% U
&gt; name.concat(a)
9 e# Q: L+ K8 Z4 E'Hans    ABC    ') x" b  P; g' N  ?2 L

- t4 d' V9 {3 j. ]//indexOf(substring, start)子序列位置
! z- e, ]# y) S& U( u% S6 _# @: U8 ^/ A1 S% K9 S! |
&gt; text' P' }: D4 r; [/ x3 G( H
'A young idler,\nan old beggar'/ u- p4 X+ y/ f6 w$ s9 Y% W
&gt; text.indexOf('young',0)
7 [6 N& v# P( e7 t2! {- Y- m; m  Y" [: B  w+ Z( T
6 E1 O/ d* X& m- P' }
//.substring(from, to)        根据索引获取子序列
9 Q5 j0 D' t% u$ H- x$ s&gt; text.substring(0,)$ N+ t- |9 W) j7 C1 ^% C
'A young idler,\nan old beggar'
8 ]1 v, h! O. C0 G4 b&gt; text.substring(0,10)( R' o7 Q3 x" O) P2 Q: V
'A young id'* X7 h3 Y: a& x& ~* B

& T, x. U+ j" A; \// .slice(start, end)        切片, 从0开始顾头不顾尾  ^3 ~3 w, a0 C
&gt; name.slice(0,3)
- h' R" j" Q) R* v'Han'
7 L. I/ [8 v8 B: C
/ ~, W7 `+ u( U1 G2 E# S8 A$ _// 转小写; p. ^8 h$ u* W8 z3 ~7 j
&gt; name; }. n0 \1 p  ^" i1 T% N
'Hans'5 K1 W3 a/ W$ D3 }
&gt; name.toLowerCase(). E; W' Q; |) Y7 h! g
'hans'
- C' f3 h/ n2 a// 转大写
" `8 v0 P6 A9 T4 H&gt; name.toUpperCase()
1 c; A- _+ D2 t'HANS'
7 V* P# ]  ^7 y* J+ F( B9 t! J) B, k% _7 u$ n. p
// 分隔
( B% V+ F/ l3 z1 k&gt; name! }' r! t# `1 `5 t
'Hans'5 ^4 C& c8 j: r! f+ C
&gt; name.split('a')3 J, z) m' i* ~4 q% Z
(2)&nbsp;['H', 'ns']
2 s" t, Y* R2 {& h</code></pre>0 M0 |) ]! Z1 z1 e2 h
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>; p* u- B2 G& P  f
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
2 x' ^% ?7 G5 A* h( x# _9 C<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>  \" n3 e- t0 b8 U0 p" o2 g8 J4 w
<p><strong>null和undefined</strong></p>: `* o; E, M- C' q
<ul>
, q  H  X2 {2 `0 [8 p! m<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>3 F7 g8 r7 Y% j; D( d
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
+ p2 c) X/ y$ K</ul>
$ C, F( U1 T7 M& P; A" N<h4 id="234-array数组">2.3.4 Array数组</h4>% H' _4 Z0 n" y5 ~0 a' t
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; i% j0 X/ o% P7 A<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
/ b' I& {1 h1 B&gt; array1
$ W, y( E6 [' U; H& s( @8 s(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# E6 V& O3 O+ v" v1 T: M0 w
&gt; console.log(array1[2])  //console.log打印类似python中的print
+ [, R$ _' H5 \- k6 |8 Z3- _  p" Z& h) S! Q9 V0 p8 e
// length元素个数. F9 ?4 |7 j% m1 L
&gt; array1.length
6 u; C! y! [; `61 Q$ p, j  s  G+ S+ j
// 在尾部增加元素,类型append
" c3 p. ]* a. c& J2 ~&gt; array1.push('D')
9 D/ y- o' b! N$ z/ d3 _2 ^  w7! I' Y3 G/ m! m9 h1 z
&gt; array1) J3 U9 O7 @0 l. J# n. {2 S
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
% t5 i4 c- ?' V: g% l  e, {) w0 b3 m// 在头部增加元素/ n: I4 h! i* T1 \, F4 [0 X$ M3 S
&gt; array1.unshift(0)
* c3 J& O0 C( A" L8+ t7 E- S6 E3 n9 I- }. h
&gt; array1
+ x0 I* n' \+ ?  d: }  y' H(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
0 N+ r6 m3 K+ v& @/ G- w+ n2 O2 l5 N
//取最后一个元素7 L& k- @! [; ?0 N: i% j, R" U
&gt; array1.pop()+ d( @7 t, n1 h; u+ K$ W
'D'
* s, B) Q5 }) B8 U5 c% l( X/ H&gt; array1
1 [/ [6 i9 p& h, r1 m$ z/ p6 ~" `(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
' r/ u/ O8 x% l$ ^+ k! u//取头部元素
* j+ C$ a! T5 m&gt; array1.shift(); C0 w; P3 J/ Q: k, \9 Q
0
$ \& j0 y0 v5 t1 T& m2 o( f&gt; array1
; d# e; q6 y4 }4 O8 y  f2 c! v(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& s( h6 P. f0 i9 K8 n

" k  ~0 d! e" `4 o* e//切片, 从0开始顾头不顾尾
$ P9 x5 S7 g6 `( n& w% B6 o&gt; array1.slice(3,6)
5 {+ P$ `# C4 T0 c+ E(3)&nbsp;['a', 'b', 'c']
5 N- z2 ~. Q+ B$ q' o// 反转
1 C3 E  H) }4 x& u( e9 A&gt; array1.reverse()' ?* a4 \9 Q/ J( T' D+ N: X
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 _+ c$ z, p- z3 S+ Y
// 将数组元素连接成字符串- C5 U- ?8 Z5 f. w! Z  T+ A
&gt; array1.join() // 什么不都写默认使用逗号分隔
4 g$ N3 z* O, u+ }8 s0 \'c,b,a,3,2,1'
6 A( a: r( p9 f&gt; array1.join('')' i; h) b2 m; N& f5 J4 q$ b, f0 x
'cba321'4 [7 `# ]8 V$ t$ j2 G
&gt; array1.join('|')
2 N' \: Q' Y4 F'c|b|a|3|2|1'
& \) T% R3 w' A( D/ S4 H' J+ U& b8 ^( E; h% ~0 F
// 连接数组% N  @: R9 }7 ?, m; C
&gt; var array2 = ['A','B','C']5 [- R+ C+ t! C; w; m( G3 B/ B$ |
&gt; array1.concat(array2)
9 ?9 [4 w6 v# l% x: U6 L(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
3 [4 D/ J: ?' _$ V
1 @% N" v$ J4 x$ O// 排序( |/ H  O- e0 L: o- t/ P. m
&gt; array1.sort(): [7 l) q0 P" j6 T% j
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' B; l/ W" N% I0 F
, Y9 W. h/ R. k5 C// 删除元素,并可以向数据组中添加新元素(可选)
4 {# U9 Z) z% Y0 y; r- ]8 @0 G&gt; array1.splice(3,3)  // 删除元素" D6 I4 P4 V; z
(3)&nbsp;['a', 'b', 'c']5 O4 x# u9 f7 ?  Z. o% k
&gt; array1* o8 [; |4 U2 y
(3)&nbsp;[1, 2, 3]
! E- d) p" K2 C9 `0 x9 J% S, A&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
! e; Z/ @& w4 _[]
/ G, R1 h# F6 @" C&gt; array19 W9 i  o! r. X7 z
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']% K4 v! z( i3 R' V! X6 s! |

, U2 n* d/ s6 _9 Y6 t/*
# S1 ]6 v: d$ \splice(index,howmany,item1,.....,itemX)
4 z0 E. `8 e( c2 Y5 f  e  B& kindex:必需,必须是数字。规定从何处添加/删除元素。
4 @" [$ k5 O/ h# f+ R. rhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
* z, N9 S) m1 l& Y* Uitem1, ..., itemX        可选。要添加到数组的新元素+ g1 W, D. R! m
*/
2 q3 {2 o! A$ D- Q: Q) }  @
# P8 f! P, K# F/ A" K1 |// forEach()        将数组的每个元素传递给回调函数
8 |; @; j% I: d&gt; array1.forEach(function test(n){console.log(n)})
6 I  M' |* Z% x' _  |# c 1
# m  |( T5 `! \* { 2' A) P) I: ^! d7 l( f
3
' h& `5 E: N" N) R2 C- r: U4 U: _( q A
, A' l4 w& \5 Q; u B' O; x# Q2 G, l4 I4 @7 A
C6 w8 G6 \: B/ S4 z; [
// 返回一个数组元素调用函数处理后的值的新数组
0 C' w2 L0 O( A4 y2 _&gt; array1.map(function(value){return value +1})
( Z* s, h2 [* p* R(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']8 B1 S% y1 C& f2 c) d' o7 r2 }
</code></pre>% _0 |# x9 y* B/ V! c$ ~: R$ ^
<h3 id="24-运算符">2.4 运算符</h3>9 G/ @' ?+ S4 p: ]" p9 w
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
' D* \3 ?# E/ O<p><code>+ - * / % ++ --</code></p>
- Y; I# H1 d6 {$ e<pre><code class="language-javascript">&gt; var a = 6  h! u: G2 g, o5 B' w6 T: M
&gt; var b = 3# z5 `, s% `; E5 p3 ^' \
// 加
) ]4 j. ^1 Q* H  H6 I3 y: ?&gt; a + b
( o- H3 x: @. x; b# |" \9
: a( U) z5 o6 r4 M// 减" ^2 b/ _( R' p, Y8 x% h6 M. A
&gt; a - b, @4 D8 Y8 ?% \+ B6 i4 l1 W
3
( f1 W! [3 ~& d8 D// 乘
& Y* L+ o0 z1 W, u&gt; a * b% O& J& k; X& Q+ B4 R
18; Y* x& f/ J; I9 Q" X- m3 s2 h
// 除
% Z* e7 q, X4 X/ T! Y&gt; a / b
  d. z8 d8 Z* v% G/ z) x2$ m2 P& v. n4 B' _/ J' K- }
// 取模(取余)
2 ~. n" _& S8 q* J&gt; a % b% B7 J8 s* n+ h
0
9 I2 r% r  j, q* E8 s- V// 自增1(先赋值再增1)
! ~1 F. ^2 c2 S&gt; a++
: S% h  {, n7 n6 D3 m* b8 A  g6 O6  L2 w* ^8 A8 ~+ z2 P
&gt; a
# \' w# n) S$ [* K2 V7
$ z- _5 ~0 F$ A9 [// 自减1(先赋值再减1)
' S3 O" A- s3 f! E7 b6 W4 Y- v9 j&gt; a--5 |% Y5 q" y* P2 f6 e! O# h6 U
7# M5 G; s! S# h
&gt; a6 @) K1 p8 T  k, t& r
6
) P5 f7 v% \: J) }/ ?& ?& I# |" }// 自增1(先增1再赋值)
6 s+ e! S2 B; E) H% ^7 R+ X&gt; ++a
( Z7 a7 i. n: J; S8 @: n7
* E% Y2 t/ U, G3 M// 自减1(先减1再赋值)
4 ~% P$ Y2 \/ D. I+ i& n&gt; --a9 e- n$ F$ ]7 Y3 |5 }- D: a
6  g9 a" S8 u+ N; _8 ^
&gt; a
- Q  F+ H; s8 G1 r! d9 |6, D' I+ a( o  l0 N) M$ Z  h

' S9 K/ S  t, c3 V( S. p* y3 |//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
# v9 n8 }1 ]4 @* h$ q</code></pre>! l; Y: S  [8 W5 O& r5 U
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>2 ]" N5 n" b$ o, Z4 \+ \, T
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
2 ~$ C1 q$ G; e, j) t<pre><code class="language-javascript">// 大于$ y1 S; t! a" x; v
&gt; a &gt; b
; q) r: X4 H0 N, wtrue$ x/ M4 Y; ~  u; ^: R
// 大于等于
4 N3 N& l9 K+ I9 X2 D( |3 d  e&gt; a &gt;= b
6 W% s; W" P, m' n% k9 Etrue
! ^7 e" z! {+ d0 J& f& f/ M// 小于
- I( b: d0 B1 W&gt; a &lt; b% g& K, W( U+ ~7 m6 @
false
1 w  i$ [3 g( J! L( v) T// 小于等于
% ~0 ^3 E3 p+ c2 V6 [; M&gt; a &lt;= b6 Y# v, W9 \0 S, N* q  D* z
false; c, A! z/ R$ f9 s( M, [
// 弱不等于, G$ K7 _" A/ A3 Y$ F' ~
&gt; a != b
: V/ y5 K0 t# g. ?# u, E' Otrue# M; f" a) M0 m  k1 P$ X& {
// 弱等于
2 R  D8 l! G+ O+ l: l7 F&gt; 1 == '1'
# Y4 t3 k3 p" p' |% @  n# y8 M' ?true* R5 {9 l/ q1 D
// 强等于
  P7 G6 q' K& t) D  q&gt; 1 === '1'7 }' {5 O4 y. h. \
false
; g3 E+ D* A8 v! y# b' w( g; v// 强不等于
" `: l7 S7 p8 u7 v! u&gt; 1 !== '1'; N+ F4 ~( H; Q' h4 y# W* k
true
  ^1 u) v7 Q  b3 w. l! W/ F% `# S  D3 e6 M7 d
/*" q8 X" C) \' z2 A. i2 u
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误7 X* ]5 {/ N/ q- v/ y6 c
*/( z# @% p- G7 m- j
</code></pre>
6 \7 A: f3 }  y% i" b) M# d2 D<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
/ z! t6 O- x3 U, [  x# d/ e; z<p><code>&amp;&amp; || !</code></p>! X0 `, j/ ]8 `7 i% [
<pre><code class="language-javascript">&amp;&amp; 与
' ]3 \# R- H3 `/ S- n|| or / k# P+ r8 Y! n( ~! Y4 g
! 非
7 k8 O4 B5 N& _7 K</code></pre>2 a! Y3 t; S$ s
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
* W2 b3 [3 R) y4 ~" p+ ?<p><code>= += -= *= /=</code></p>- f. E# O" D2 N4 q/ P
<pre><code class="language-javascript">// 赋值: W1 t; K' y: h5 Y. \/ Z
&gt; var x = 32 i% j# ~: l  O$ R/ d' C- p
// 加等于
" R( h9 X8 B& u% M&gt; x += 2
" u) E% _" D. n* \3 o, j5
) h2 U2 @- G7 N0 t% d) O// 减等于/ F( S/ ^5 R3 \, e* ~
&gt; x -= 1" j7 K& S4 ]. L& f- ?' Q) Y; t
4
& o9 M. p: M6 }2 A/ W// 乘等于
, _; y0 E: F0 m) k/ ]  y0 i&gt; x *= 2  v2 }+ i; F, Y& `6 h4 c
8  M' _& B! }; L, j$ r( |
// 除等于
' F9 U; C: m. }% M; t# L: m&gt; x /= 2* ]0 ~6 N* g- E9 Y
4
" E% Z$ m' I; ~5 L</code></pre>
4 O; {1 c, T6 ]  H" o<h3 id="25-流程控制">2.5 流程控制</h3>
+ y6 H  P* I5 t: X3 `, B<h4 id="251-if">2.5.1 if</h4>1 T) o8 T# D" d6 K+ p* A
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
8 k, ~* G6 \# P) ~% n. _4 l7 k# t+ M( E1 o
&gt; var x = 3
& ?% b6 w9 m/ p; R( R5 e&gt; if (x &gt; 2){console.log("OK")}+ a7 ]- M1 z  m' f' m
OK( ], r( ?+ _  m; y; X

6 k( x0 d1 q+ V* g2, if(条件){条件成立执行代码}
3 j/ _3 }( ]' C2 z4 D        else{条件不成立执行代码}
. Y: a  O* n" X7 o6 _; _# H+ o; j$ C6 M- }4 u1 {
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
, u( C( B5 r+ o; g7 R$ }* P'NO'
7 j' P7 ]6 u& P: {. j$ r& M$ d  ?4 z' p' o
3, if(条件1){条件1成立执行代码} / Q  A! _8 ~- q8 ?; D
        else if(条件2){条件2成立执行代码}) \! ^" m  @, J+ H5 _
    else{上面条件都不成立执行代码}* ?: I; e( c! {9 v& ^, x2 I

$ O, r/ T! n8 i' e; v! t% r&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
7 X0 L' J4 I( a( z1 _$ W Ha
  M3 z8 ]" r# e( B5 [+ k. {* H</code></pre>( K1 [$ V* g- y) u% w1 _, Q# x
<h4 id="252-switch">2.5.2 switch</h4>
# C4 h7 x. k! G<pre><code class="language-javascript">var day = new Date().getDay();
( q6 S8 ?! }% B9 \switch (day) {) e6 n4 r0 R- M: f/ a( l, K% o
  case 0:
6 X- K' W8 x5 q3 D9 u; z$ j3 W+ d$ W  console.log("Sunday");
7 e# P' t9 b7 L; e# _. @, }; W( u% C  break;
9 J8 Y/ e8 O! I5 _  case 1:
1 _! _% f0 v( k7 o  console.log("Monday");" Q6 g' C& _, m8 c5 a2 v& b, T) H* M8 J
  break;+ s& s# a5 N" z" h% |+ w
default:
5 k7 L, e& M' H! m3 g  console.log("不在范围")
0 W4 ?$ m# t+ b0 D}
5 X. s) N. @" ^* T7 S 不在范围$ M/ j" T* P/ y
</code></pre>7 F. `5 o) G$ W- `
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
( d( u  U( v# E+ l7 ~: V<h4 id="253-for">2.5.3 for</h4>! \6 i2 b0 w1 I; u' e% b
<pre><code class="language-python">// for 循环% G2 ?/ [6 V! t. ^8 m
        for(起始值;循环条件;每次循环后执行的操作){
% N5 J# T6 A5 {3 T* z) _% l        for循环体代码
" c" h* w2 w* T    }
- h" M4 F# }8 A; Y+ }% |
8 w7 X# t! S4 {for (var i = 0; i&lt;10; i++){( u5 t) y. ^! ^$ \5 G0 D& _% r, ^
    console.log(i)
7 e7 p* `2 B- n  k8 P}6 \6 K0 C1 I5 Y" A) S/ i0 W
        0
2 c: i# j& \# P% w$ v/ N8 e* \        1
$ {5 k6 P) e# Y7 k" {5 [3 T        2+ S! O( x& A, u5 _% c6 V. S
        3/ M" Z6 u3 y& Q
        4# G4 _: ~8 [7 n7 w2 m
        5
' |, A3 s5 k" ^+ Y" @& m/ p        65 [, E. L. G' q* S
        7, |1 i( L0 O( c6 b  [6 i3 T
        8: |% D4 V- E3 B% P
        9' G2 h1 i5 @3 D' v$ `( @
</code></pre>, a3 w0 }' X% Y. f7 V
<h4 id="254-while">2.5.4 while</h4>& R, p% p+ R) j2 P3 j
<pre><code class="language-javascript">// while 循环( j: y! A; R* e+ M6 q0 c& M6 E
        while(循环条件){4 t7 m% M2 E5 N2 O/ F
        循环体代码
1 t" d; v' T+ g    }
3 I0 ^4 d8 `& W: k8 I& u
, F" T1 x; l- W) R5 L7 M$ I- Y! p; ~) B&gt; var i = 0: h7 Q4 y! y2 t5 I
&gt; while(i&lt;10){9 B4 i( b7 z3 n$ Y
    console.log(i)
8 T- R- e; }$ r, ^* a: p) {    i++
8 v5 y& B' E! d: ?7 Z) E9 @; R}3 W+ {9 S6 Y9 `* c
0* l& [# X8 r! e- o& i- L9 F
1
% Z* l! g. j- H1 G- e 2
5 G# l/ A% `% K# \' B& r) i8 q 3' b2 {! v. t& r! w' J* Z3 p
41 h7 w+ [* h; H1 U6 ]' V6 k
5
8 x# M: e! A! ~- v 6) ^5 z7 b/ ~: A+ e$ S/ p
7
1 L! t: R# M2 N6 P6 L) T) L 8
) c: P. U" ~" A5 X 9# ~4 }( B: P, ]# a% @: L2 |
</code></pre>+ R# {; R2 d! O
<h4 id="255-break和continue">2.5.5 break和continue</h4>) M: w& U* p6 @# q( O8 ~
<pre><code class="language-javascript">// break
/ b) s' u$ g% F+ n! N; Yfor (var i = 0; i&lt;10; i++){
/ t9 D' J; A% {0 _4 [( v0 \" b! U    if (i == 5){break}
$ b! u1 n3 |2 {3 z1 C' n5 V    console.log(i)
( o! |. N/ d3 ~; Z}
( g2 e5 T* Z1 _! M2 p4 q8 K 0
9 K+ Y; ~+ j# s6 N+ |/ ] 15 U2 p1 }: a5 {/ q& [  T
2" |6 i! |8 ^* }  M/ s7 ], T6 o" y, G
3
' x9 `+ q) y7 C. j* h# y 4/ b' a( x9 u: w. W7 M
// continue+ z0 a, J' i6 b+ w
for (var i = 0; i&lt;10; i++){
+ N4 N' ~1 N" W7 p. s    if (i == 5){continue}
& H# K2 w& }# `( ~7 X6 J    console.log(i)
. g/ H9 \1 [( s9 h8 @( ^( B/ K; t/ p}9 I$ |6 Q9 K  o0 w
0
8 k, e3 p+ W  b 1
% e# ^3 O, F- g9 c4 T$ h% U 29 X, q5 s& B5 K( g& k& R
3- R/ X6 ~4 W  m/ h
4& Z5 J: M0 k. h5 d8 E  G* H1 [' i. T
6
1 v) G7 w' q' K% N 7
1 N# }+ g4 F. ~* J1 R4 ]6 v, ~  j 8
# x- [8 I  b# \" x7 t5 ^. i# r! T 9
/ W. D. {6 w5 L/ [% R
- F. ?* j) D& |* Q4 L</code></pre>
' Z3 ~9 C! K; b<h3 id="26-三元运算">2.6 三元运算</h3>; X$ {* c( f* ?* {
<pre><code class="language-javascript">&gt; a9 D! v  v  }+ p+ v6 |5 t
6$ `0 u0 g" [( Q9 E+ ~: e. R
&gt; b
9 I9 [$ ~' X1 E4 j' n" t9 p  z3+ w, b4 w6 o/ i0 e* [
% U2 h& ~" h, Z$ M
//条件成立c为a的值,不成立c为b的值
1 P" `: Q5 D" W&gt; var c = a &gt; b ? a : b; u: l. ~7 w. s
&gt; c
- ~5 f, @1 W2 O69 L  U+ A8 }4 m4 s/ c

5 w0 j4 B% y! \  R6 P// 三元运算可以嵌套7 m1 ]- t0 [' a, Z) ]' {: Y
</code></pre>7 ]7 ]4 z( c# F0 z- p
<h3 id="27-函数">2.7 函数</h3>
8 {' Q- d" Q% n6 j<pre><code class="language-javascript">1. 普通函数6 b- l8 @) u6 ~1 D+ b6 u
&gt; function foo1(){
6 D6 ?% H- B4 N    console.log("Hi")
7 q- G8 s7 Q, @4 \% |; K}; j5 |2 h3 ^# z% y# J. M6 a

7 l  ]/ F  I& G6 E2 H&gt; foo1()$ G1 z& F% t5 j3 g
        Hi
0 E7 L- ?4 L  \2. 带参数函数5 Q8 D$ w& |  ^( _
&gt; function foo1(name){2 R3 X: i1 v, p" j; L( O7 D" W
console.log("Hi",name)* l9 g  n3 N  X! q9 {
}5 _$ K! P9 b  ]+ A: k

9 u- _/ D8 Y* e! q% J5 F&gt; foo1("Hans")
8 r0 O- r, U- b) U; _& U* IHi Hans
% S' T. Q2 `, N* }/ q! _
+ E  o: p- `! A; I&gt; var name = "Hello"7 X9 I# _5 D; T- _: M' N8 B
&gt; foo1(name)
2 x! `' \+ L4 B! O& D9 o; W; `Hi Hello; ~& K, [% s0 t5 I% v" q
& m+ ?6 u1 D; m: _6 W+ |0 ^
3. 带返回值函数
8 p+ v- `& t3 k/ c8 j: a&gt; function foo1(a,b){
" i  a  z$ c( D8 s/ u* ~        return a + b   
& ^4 q( K* Z7 ]}1 a5 s7 _7 C8 U& X0 c
&gt; foo1(1,2)9 t2 F, v! ]7 t) X$ X1 a) t
3- L. z9 [7 y% c" R+ v/ c/ p4 {
&gt; var a = foo1(10,20)  //接受函数返回值
( {' Y' N- j9 l- g, L. x&gt; a
/ J2 K, h$ S; c5 I, [& W& [- z+ g( E30
& ^+ j( j* i* @: D8 M, U) p3 W3 Y5 ?- P
4. 匿名函数3 A5 }+ t+ f) X7 g7 w" v$ ]
&gt; var sum = function(a, b){
' K( n$ h+ @& S# P" J9 s2 J  return a + b;, E$ c) c# h! m6 Z6 r
}
- N4 S1 I3 |% Z! B" E$ s' c0 T( U& y&gt; sum(1,2)5 I; w6 B0 K9 F7 m. W- p- P
3
0 d* m3 _" g; y! X# j4 R8 v! L1 o0 u
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
. _! r3 s: N1 \2 b  ]9 y9 D&gt; (function(a, b){0 x3 j+ k8 C4 V" b3 m
  return a + b  V& @2 V$ m1 Y9 o: z! X
})(10, 20)" w* _- m$ ~' w
30
- E& A" N( S; D; o8 g% T
' ^$ R# r! [. G6 R& N* k: k5. 闭包函数
' f5 p5 }8 ?) U) @5 g5 h& W// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
4 `  u, Z. m! @0 J3 ?, gvar city = "BJ"
" x4 q2 W8 `) F, v( P9 Pfunction f(){
9 k2 n& j" m) x! e& F    var city = "SH"' y7 \3 y' g1 T/ u
    function inner(){5 z) Y+ K' V% {- m
        console.log(city)4 W0 o( O  l0 l& d
    }
. E6 S# x/ f. d$ L9 b% c    return inner) h2 _# e+ l7 x- ^) h: m
}
% B/ M# K! y7 T. ~" G; o# Dvar ret = f()# D8 w3 O& u5 ?7 |: ~6 n# C, S
ret()
5 e8 t  b* f6 k执行结果:3 h# F5 l, Q; B7 |) S: v
SH
- e; H% M* b  x0 @" r4 h) ^; t) n& X7 G" I. r; G% J
</code></pre>
0 Y9 c( m+ b4 J- Z/ A- {/ ]<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
. ~; ~. k* Q) q# f( V# M<pre><code class="language-javascript">var f = v =&gt; v;
, V" Q: S0 h( F7 g2 a6 T4 [3 s" @// 等同于
6 b, G" _7 ]1 ^. q3 D2 M: s7 ~var f = function(v){
: d. _) Q4 g1 Y8 d$ O3 T$ k( D  return v;
8 f  G) `( l- j9 R}
5 C* y( A- H/ H' x) l</code></pre>
0 z, i( a9 o/ t6 Y' M<p><code>arguments</code>参数 可以获取传入的所有数据</p>
( q% `& @  V/ s$ R$ n<pre><code class="language-javascript">function foo1(a,b){
' o' [+ o1 p3 @    console.log(arguments.length)  //参数的个数
" C+ Q( ^$ Z! m! S, U/ c8 y: s    console.log(arguments[0]) // 第一个参数的值% x, Y3 b, w+ G% m8 V- S% s
        return a + b   0 n  U# J, S3 x% u, h# ?* U2 j
}5 ~6 w- ]2 l2 H$ r( c1 n2 G$ l
foo1(10,20)
5 G  G+ a8 p; _9 ~9 V: ?; e结果:
+ O, z# |/ J$ C" k7 k8 q$ v 2          //参数的个数
$ G" _* s! o, a+ b0 N10        // 第一个参数的值" W' Y' F. T3 Z/ ~
30        // 返回相加的结果
! ?4 }" U0 V) b/ O9 I</code></pre>: N+ F8 Q; b% ]1 |  _
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>1 J' ]; Z0 s7 ?3 N) ?
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
+ H8 P" H- A! }$ B3 M/ m& U<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
- H# `$ g* \, p5 ]2 D% H<h4 id="281-date对象">2.8.1 Date对象</h4>! q1 v8 z. e9 d. n
<pre><code class="language-javascript">&gt; var data_test = new Date()) q+ p* }, p- g& q7 ^2 w6 M( K
&gt; data_test
, |& ]8 ]4 @3 ]2 y+ RFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
& C$ t7 [7 n( ~1 p4 ]8 n- Z&gt; data_test.toLocaleString()1 _: [* L5 j' k) r& N' A/ H9 z
'2022/2/11 下午9:44:43'$ m' K) Y( v7 r! X8 Z; l
- P. T9 ]) r3 ~: e$ t9 p$ Y# ]
&gt; data_test.toLocaleDateString()
1 ~  [; z; t. o, ^' U3 ~'2022/2/11'
1 z/ M* N. U- R' F- v8 }6 t, L: N
&gt; var data_test2  = new Date("2022/2/11 9:44:43")5 F; p- [) ?2 A! e
&gt; data_test2.toLocaleString()
$ I% z* U# F, u. q' ^'2022/2/11 上午9:44:43', B3 h3 u& m8 C7 \" A$ F
2 w/ m$ X8 R" @* `$ B  l
// 获取当前几号
( O5 S. R, {3 k- ]4 [- Y% X: M&gt; data_test.getDate()
" M! a0 Y& I! S( g# ]3 A) v$ [6 s, v11
' R) [5 h& ^* x/ I2 @// 获取星期几,数字表示
0 y; K& K! y: z&gt; data_test.getDay()  
9 A- N7 R. x% g; I5
+ |% q" Y4 F; _// 获取月份(0-11)' Y% t+ g/ a0 [$ D5 n0 T% m9 E* n
&gt; data_test.getMonth()2 x9 |) n# S: ~' Y' f& A, Y
1
5 J( A3 s4 F8 b1 K0 h: i// 获取完整年份
" O! d* }. Q  U  u2 T&gt; data_test.getFullYear()  ?- T; w0 b5 b( |5 M: G* T- N
2022
! K8 X* d9 Z1 l& h# _1 \% E* E// 获取时
8 B* G5 [2 k7 M$ d&gt; data_test.getHours()
2 Q. s. q2 l0 o7 [1 N# L, f1 T21
3 ?- Z/ S+ B* F4 ^3 ?% S// 获取分3 C# H. F4 T7 D4 X4 C
&gt; data_test.getMinutes()
) |2 }3 ?: W( r0 |* @- d; H44' J2 ]4 `) a/ ~& i; V2 c8 J- L7 N
// 获取秒& i% j6 H3 N+ T3 D
&gt; data_test.getSeconds()
5 ~3 F7 r& i9 Y+ l  N43/ \. d- [* y& }1 _% }  ]6 o& Z( I
// 获取毫秒. ~) m7 e8 m& {: B4 q
&gt; data_test.getMilliseconds()
3 K) Z% e  c2 A! J2 p. T9 @( S2907 X+ c5 i* I. Y4 z
// 获取时间戳
, B% u! W( \2 t# ~+ N4 B+ @- V&gt; data_test.getTime()' t7 [  t5 r0 K' j5 }
1644587083290+ X1 {( d# O# v5 }) M7 p) Z% Y: k
</code></pre>
9 E/ Z/ w! v8 S9 c<h4 id="282-json对象">2.8.2 Json对象</h4>1 h& T& Z; s- b& e0 B, d' ~
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
7 C7 I6 C7 j. Z% u+ RJSON.parse()  // 反序列化,把JSON字符串转换成对象
& W# Q9 Q/ L5 Q4 z- `+ x& X7 d: U6 \- m; ?. r# t8 j
// 序列化) R$ C1 W, l3 G0 P- T5 Z* u1 V3 i
&gt; var jstojson = JSON.stringify(person)   p$ b9 o' o% u, v% E) \
&gt; jstojson  
; _9 s: P; b: l- t'{"Name":"Hans","Age":18}'
" a- N  f# [0 Q3 v' B* s4 E& s* @% l, G- H. B& o
// 反序列化5 f) q4 ]) ^3 i- K2 ]
&gt; var x = JSON.parse(jstojson)7 r* n4 `; X7 s0 H# `- U# ^
&gt; x
  Q5 m. N- E8 C- I{Name: 'Hans', Age: 18}
! a$ R% t2 i( z. y$ n  c; ^&gt; x.Age
. ?  Y  O9 N1 T' Q7 f18
" m1 ?# U4 `6 a</code></pre>2 _/ u' e% @2 o) {- \
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>9 ]; B+ Y2 ]) {  o7 P
<p>正则</p>/ f8 a+ |0 p& \2 Z, H
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
: J. r+ S; Y2 t4 }% h&gt; reg1( y3 o0 Q2 p0 ~
/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 l. k1 u* p" m3 A- p: n5 D! C
&gt; reg1.test("Hans666")
/ S; M, i1 M8 c6 i" |4 ?true
, ?% E! W# G3 l4 J4 d9 F6 S
! N. }0 k( b  z  Y7 v) E' |1 [" l' c&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/. C. {. M* Q* G7 V! s
&gt; reg2
1 F5 K- |  B  s! S: _2 h/^[a-zA-Z][a-zA-Z0-9]{4,7}/
2 n% S" Y, T6 l4 `' g&gt; reg2.test('Hasdfa')
) p8 C5 Z3 Y, V- e. ~# u$ _' ktrue
$ ^+ v7 d% ^: t  B
# k  d! I1 c9 N7 w全局匹配:  H& ^8 X% Y0 W
&gt; name
3 o% X) \2 n+ `'Hello'$ x4 G1 X' J5 E% A
&gt; name.match(/l/)
- k: o. x% V( d( T['l', index: 2, input: 'Hello', groups: undefined]
  H5 C0 Y) }; M' l) q# v3 I& F0 U# L  [5 r7 y$ D$ K0 Y
&gt; name.match(/l/g)' q# n/ [) C' F5 D6 _
(2)&nbsp;['l', 'l']. D4 |1 e7 i/ K( u' c' P5 K
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配  l$ g1 v3 _4 Y/ i& ~9 s

6 R" {4 v. |: y- `5 ^全局匹配注意事项:
9 s+ ?  l; V9 R8 n&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
# ~' U/ }; a! I6 A6 `5 l) ^&gt; reg2.test('Hasdfa')3 g+ u3 z. |& A  z+ D+ r
true1 L0 g% y2 D# f3 H4 ?
&gt;reg2.lastIndex;
6 U3 C- G- Z/ E65 d+ a. ?$ `! v( H' Q' M3 Q- j
&gt; reg2.test('Hasdfa')
! F+ w. U) P% _2 j: H1 `false3 d2 v  M" {8 {  S
&gt; reg2.lastIndex;6 `( ~1 e- t& _
0
6 t. p& [( c. _3 Z&gt; reg2.test('Hasdfa')# f  z- V# S! M( D& p" G1 X
true1 d5 L( h5 K& o* n4 E
&gt; reg2.lastIndex;
3 o' S- B: H, S0 F* {+ M( X, [6
$ B6 `' r! I8 r) ^6 j) X&gt; reg2.test('Hasdfa')
- N" e5 x/ ?! z" D' S& P9 {3 `false9 B0 b% [; I! Q9 D
&gt; reg2.lastIndex;
4 ^8 ]5 w  j; u: N. R5 x0
  ?/ \& J! b- w. x! f! y// 全局匹配会有一个lastindex属性2 t  k0 ~1 U& j# P( o" o2 |
&gt; reg2.test(); o! x) F$ S/ P: s( E3 g3 j. \
false3 e+ a5 K, G& S5 D! _/ r* U
&gt; reg2.test()
6 f5 N1 i% K3 H' Q4 ~. Wtrue5 D, o0 e) [. J& ^) f( G, z, i' q
// 校验时不传参数默认传的是undefined
  t  T' x; R# y% G% ~</code></pre>  I" f% _0 H0 B* K$ M7 U8 C3 y
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>) p6 T& ]- V3 y# l' u* W' a8 C
<p>就相当于是<code>python</code>中的字典</p>
$ {9 y7 }( }" ]  P6 h<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}" j9 T: y  u' u7 e3 n4 M3 l
&gt; person+ m* a5 K  U* g# w" ^7 M9 X  }
{Name: 'Hans', Age: 18}
0 q: r( g5 g2 k&gt; person.Name- @; F; F4 J6 M
'Hans'
* b$ w+ q/ G: Y" \& q&gt; person["Name"]8 v  C9 o) D& ~% S; ?2 N
'Hans'# G, }) O. e: d! l8 r) E1 ~5 e
1 i- C9 h; S% W: p: l
// 也可以使用new Object创建
( I  F* H" E; P' ~&gt; var person2 = new Object()
  {2 M1 n3 S3 H2 l6 C* A( o&gt; person2.name = "Hello": P' g- d% e# r6 k7 }. o
'Hello'
* o7 ]7 e9 R* |* R+ o&gt; person2.age = 20
* @6 I, H( ~" ]" E- P20
$ S+ c  @; U5 i- @</code></pre>
8 S: o6 q3 o& s" T$ }! t<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>/ |1 z) W* n9 c. X2 m
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>' j) k' S+ s- e% W5 X+ w
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
' R* \: Q+ H9 Y( P$ u2 W# j<h3 id="31-window-对象">3.1 window 对象</h3>
  K1 A0 u$ k' [% {<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>, Y7 I. e- ?# Q; B
<pre><code class="language-python">//览器窗口的内部高度0 \  j( L. n7 Z( A9 B
window.innerHeight + h' \+ ~2 a9 T7 E9 D
706
! U# u9 B# |6 p, q) l% P//浏览器窗口的内部宽度' Y2 n/ y; x2 n5 [
window.innerWidth! F# q7 ]+ _  d* P
1522- P- V7 O9 e! q+ e% I9 _
// 打开新窗口
0 Z1 o0 b! o8 s% M. E& rwindow.open('https://www.baidu.com')
- e6 l, k+ o) w6 J7 iWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}3 W  M8 J  {# c& B0 v, J
// 关闭当前窗口
6 D5 X3 W5 o6 C; J' m' c0 hwindow.close() 8 ^; L  F: D4 H
//  后退一页
0 _, ~1 n, W7 A. rwindow.history.back()- J6 c* T  i; r$ ^$ ~2 S
// 前进一页
8 r3 b2 I2 @8 Fwindow.history.forward() 6 V! e* u8 u1 z3 G0 }
//Web浏览器全称
9 S3 J9 A& M- O+ Xwindow.navigator.appName# l- K0 V& A( i. \7 I; q: C" T
'Netscape'0 x3 c  H6 f2 l8 W; ~" i( w
// Web浏览器厂商和版本的详细字符串
% k+ o3 R! `3 h1 o) nwindow.navigator.appVersion
4 H/ y& y7 o3 ]- l9 P'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'7 J' g0 {+ F, ^4 `  ^2 E7 f& y
// 客户端绝大部分信息8 i& I* o  U" o( j! ^, K" f
window.navigator.userAgent
2 S" |$ j& Y0 E' G% S& D'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 J: \0 T0 L4 L/ ]" g. F! k// 浏览器运行所在的操作系统& S  G( @7 n2 N4 `( A
window.navigator.platform1 _" S. C+ F) v3 J& M- |
'Win32'
# L) U& L; [5 Y, W1 ]
: F* ?6 Q. C. |//  获取URL
$ c! U! _: N5 M1 n. g0 v) jwindow.location.href
3 T! P/ ?2 Y, ~0 ]// 跳转到指定页面) D0 s8 \: B: v
window.location.href='https://www.baidu.com'1 ^; e- h: A0 Q+ D& p6 v1 b
// 重新加载页面
( D, r" k/ i3 F  C2 N4 j+ s. rwindow.location.reload() , o7 [3 z; F/ |9 r5 K  k
</code></pre>
. ?  V& g' F4 A" G* V, ]1 G  n. x$ G9 W<h3 id="32-弹出框">3.2 弹出框</h3>
' S4 Y4 l5 g/ ^/ _<p>三种消息框:警告框、确认框、提示框。</p>* c9 |2 R7 x) D% R) v
<h4 id="321-警告框">3.2.1 警告框</h4>+ t  J0 f( n5 ~6 I8 |, ~; o
<pre><code class="language-javascript">alert("Hello")( ]  `# ?$ L! [$ p* e* j) q. F" ~& C
</code></pre>+ [) m0 F. U/ d* ~- r' e2 a6 [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>( y3 F& c8 i% U2 f1 I# _/ V
<h4 id="322-确认框">3.2.2 确认框</h4>
4 K' \9 M# L. v- ?" {4 U<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>9 p0 g8 x, Y* t5 [3 ?8 ?  [
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true  n5 V8 @  W2 e& z# M. R
true6 }: y8 K4 J7 ~3 H, Z: G
&gt; confirm("你确定吗?")  // 点取消返回false
: F/ c9 i- s0 a* mfalse: C2 a/ _6 j+ ^! f( g- J# f
</code></pre>
$ p' S5 \, B* T2 d" Q<h4 id="323-提示框">3.2.3 提示框</h4>' v2 q6 a+ Q7 c3 W
<p><code>prompt("请输入","提示")</code></p>8 C8 f4 U- l' H7 ~! J' J& k
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
. i! b, g. v0 |6 M8 a& C<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>! W! |5 Z5 @# x+ f" E
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
# A; p& K0 O5 |, y<h3 id="33-计时相关">3.3 计时相关</h3>; K! h1 @% b: Q! d1 J+ \
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>; W, `& E2 _2 {4 [  h9 \/ D
<pre><code class="language-javascript">// 等于3秒钟弹窗* o! {5 _% h1 d3 s
setTimeout(function(){alert("Hello")}, 3000)
; ]) S4 y* @' d% N! H  n/ e$ h
' y" G6 s  Q' b* q3 z, X" _* Ivar t = setTimeout(function(){alert("Hello")}, 3000)
* U1 [0 b& {7 V% k9 Y- J+ h1 `7 k3 c
// 取消setTimeout设置
9 [+ m: e& Q! \/ m+ _  f/ V( YclearTimeout(t)
& ~: d3 `. ^! ^</code></pre>4 }& D) _# `) C2 _2 N% L  P& c; w6 L
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>$ P2 D9 Z6 q. z" _5 k
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>+ _" S) F! X' C: Y
<pre><code class="language-javascript">每三秒弹出 "hello" :
; f* [/ A* n4 _1 o) S5 [: p4 V* ]setInterval(function(){alert("Hello")},3000);
; ^: s; O, R3 U</code></pre>
6 c9 S1 U0 ~7 O  _<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
9 I# T5 b) o& L/ ]- y$ {3 |( Z<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 A3 R3 _" P6 }9 |7 w) R7 N' a//取消:
) ~4 w* x, s" lclearInterval(t). n" \; x; d; t  \; Q& L0 c
</code></pre>: }# o6 Q' I5 D$ R
! x! a+ v7 p# w4 _" m
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-24 19:00 , Processed in 0.083598 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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