飞雪团队

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

前端之JavaScript

[复制链接]

8034

主题

8122

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26432
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

- x5 [" m% {, j; a) Y" U, S+ \<h1 id="前端之javascript">前端之JavaScript</h1>5 n( v/ V: m5 y: m8 P# U
<p></p><p></p>
! E  R; |" g, Q) T' ^<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>! {1 o8 A2 J! `
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
3 j1 D' s) f! T$ l4 x它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
7 A3 s+ J. J7 c' j3 r5 C它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>5 R  m" }( ^0 m" P1 n, }( A
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
. L- ^4 \! f- _" q2 u5 c<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>$ V! |+ P5 D( \5 |
<h3 id="21-注释">2.1 注释</h3>
6 W2 A1 i" v, k4 G- c  |<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>7 i) J9 H3 ?8 h1 d5 C  E
<pre><code class="language-javascript">// 这是单行注释
9 G! W2 s3 s. r# M7 |8 N8 u" w, N; m7 g0 v' }$ `5 [
/*# u$ Y1 ?( E( n; e. h
这是多行注释的第一行,  o: }* J. S  W2 b$ F
这是第二行。
2 [# ^/ @; F* f( P0 V7 S% `*/5 A, s6 s- p! O4 Y! N! M
</code></pre>' k6 L- E1 z. s1 |/ p* J, w/ K
<h3 id="22-变量和常量">2.2 变量和常量</h3>3 f8 ~& \- c/ I$ y' r# I( x
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>6 \3 D: k6 A  G& F& m8 M3 s5 |0 [7 c
<ul>
3 v4 w$ W0 q2 N5 ?7 U- S( E, n<li>变量必须以字母开头</li>
- [- a3 y7 O5 h( \( m& W* ?+ h<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. s/ d' q" D; K0 D3 m- g0 M( y<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>2 o* {/ |# c' p  `* e
</ul>9 ^: \% m: J+ d2 y# f& h
<p><code>var</code>定义的都为全局变量</p>" _2 K1 F4 C" U" p
<p><code>let</code>可以声明局部变量</p>
3 g+ X6 w( w8 t2 x<p><strong>声明变量:</strong></p>
8 `0 C2 C4 j* C; ~<pre><code class="language-javascript">// 定义单个变量. Y5 z- g+ i: L
&gt; var name3 ^* ^) n0 Q9 a& z) O3 ^8 `
&gt; name = 'Hans'
8 d7 H8 N9 A5 m7 w2 g! w& s" D: d//定义并赋值% {( e, d9 I: j/ B
&gt; var name = 'Hans'( A& P/ y6 h! C# A) U9 J
&gt; name% t: Z9 ^5 a  Q/ `2 r- }  y
'Hans'
5 x- H# {1 U7 }* d9 Z$ |) l- b; D: u" {: w+ R
// 定义多个变量
7 \2 Y' u2 N+ ?% L&gt; var name = "Hans", age = 18$ t& S; ~7 o2 j' d3 X0 C
&gt; name- j: p* B, N0 w4 S  j. b# Z. o# u
'Hans'
, k8 _' n  y% x&gt; age
6 g& u( {0 W5 S18
8 h' z: G/ N  P: f" S2 D
& t0 V& t, w0 A7 y//多行使用反引号`` 类型python中的三引号2 |  q: b) H9 z6 t  \0 `; I% S
&gt; var text = `A young idler,% n* t' E% \. c+ J; y' _
an old beggar`
0 c( }$ t2 g. C& s! a+ ]&gt; text
  O9 W: V' `! Z! }4 c'A young idler,\nan old beggar'" r9 B6 @, H! h  I
</code></pre>
8 M! }; o; ?7 ?" e& \0 k<p><strong>声明常量:</strong></p>1 T6 K: ?: o. Q- v& H& e
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>) [, }" P; p* |6 l" b( c$ l
<pre><code class="language-javascript">&gt; const pi = 3.14
. V; _+ w( c5 Z0 V&gt; pi
5 M8 z- c! j* U% u' U1 D3.14
% c& o3 K. i9 `# Z9 z1 z1 F&gt;  pi = 3.01+ @: x% d4 ^: Q8 z1 K6 @$ d
Uncaught TypeError: Assignment to constant variable.
8 g  ]& C2 Y8 N: o' R: G    at &lt;anonymous&gt;:1:4
' V' j6 {; i8 {; y6 T8 ~+ B" F- C1 O9 t( C9 O/ r
</code></pre>
* w2 l: Z/ f! b1 l' G+ v3 D+ y- ]<h3 id="23-基本数据类型">2.3 基本数据类型</h3>3 n- I9 T# f$ E) `4 m
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>& B& U5 q% V( H& L
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p># h) @) H5 T# ?1 j% _/ P+ n  Z* }9 u" V
<h4 id="231-number类型">2.3.1 Number类型</h4>* B. {& v  \! U! H& p
<pre><code class="language-javascript">&gt; var a = 5$ ?" r' J6 K# |0 X! z7 q! u
&gt; typeof a   //查看变量的类型  
" \) W! L% R( F3 y& }# dnumber; i+ V- D3 s! p% N- }# k
$ n" |7 e3 \8 O, ~- x8 p
&gt; var b = 1.39 T7 K; O' f  Q& s1 @
&gt; typeof b
1 h- |9 L) P' q+ p+ Pnumber* k0 T* q- U" [5 r1 A2 z

% c! Z$ Y0 Z; H# x# Q! \$ j( e$ M// 不管整型还是浮点型打开出来的结果都是number类型' N2 o6 c) Z% O8 m7 U- u3 s
0 r: @4 R1 B* `# d) Q# Q1 _
/*
" K3 j' O9 X7 Q; YNaN:Not A Number
, b+ T0 C0 D7 \+ g1 a* aNaN属于数值类型 表示的意思是 不是一个数字; z. J" L' q3 A1 u$ M; \7 B5 L5 \
*/
" S/ M) B( ~) V7 H7 q' c, j5 y3 E$ B- C' z( B5 |! B. s
parseInt('2345')  // 转整型5 d' m! f& D8 v2 H
2345, M+ S3 K+ H0 M3 J
parseInt('2345.5')
; v4 t) K$ v) c) ]$ Q23454 M# e& X& h) H: [* d4 ^
parseFloat('2345.5') // 转浮点型0 d1 `2 ?6 I( Z+ m0 Y
2345.5; \* v. R. |8 j5 i: O
parseFloat('ABC')' d+ J) ~/ E) w4 A% Q  Y8 h
NaN; M- {# b, B4 d8 V  b3 k
parseInt('abc')" o6 ?/ B/ V" @! i( ^5 X
NaN1 Y( I7 |* i7 ^& @5 I2 {3 u
</code></pre>; k% C/ k6 k( z8 b
<h4 id="232-string类型">2.3.2 String类型</h4>
/ G$ i! n* C# O$ ?$ |% }<pre><code class="language-javascript">&gt; var name = 'Hans'0 F+ n$ p( s5 `2 [* n
&gt; typeof name
3 o  @! V! Z9 T! j9 X3 V'string': a1 F% I2 X7 Z& Q$ m, j# ?& G3 c
% O( O( c7 m! ?! E
//常用方法! [# {% I% c5 s
// 变量值长度$ D& ?( Q8 v; C( M+ g3 v
&gt; name.length$ f2 k+ J6 r& j0 l8 F/ A
4
9 s+ q( i  N( c% _/ b3 m// trim() 移除空白& W. L: D# F* ^0 p
&gt; var a = '    ABC    '
& {. Z2 g4 v: }& r9 g" T&gt; a
) @1 o0 T( C$ F/ p- F! M3 n8 ~; t- ^'    ABC    '
1 f! e; {4 U1 W1 i&gt; a.trim()
( w) |, J& r  T( F'ABC'( t; ^0 v6 w/ d; o& u+ V1 d5 D
//移除左边的空白8 g4 A, `3 l6 h0 \$ O+ c9 y
&gt; a.trimLeft()7 u5 T; \9 f: V* f
'ABC    '
( T9 v8 X3 q) k7 N% Y//移除右边的空白, y: H: ^, ~  ]+ o
&gt; a.trimRight()4 i5 }& G" b- w
'    ABC'
$ D5 T% g$ J9 ^8 F" {& A, |' g. o+ m0 b! U6 V
//返回第n个字符,从0开始
7 R# P6 N, b& V  K% h8 ]+ h* t&gt; name/ K: ^/ z7 r- q$ w
'Hans'
1 n3 V% ?0 r* Q9 Q&gt; name.charAt(3)
4 m* P7 d$ d' l8 r# \'s'. [9 C! t' [/ d
&gt; name.charAt()
- l& m; V' ?) E2 k" `8 _, Z7 ]' U' s'H'' p( }/ Z0 d8 I2 v+ o4 J0 U
&gt; name.charAt(1)+ r' Z% g1 Y$ c, j+ A1 t- L  U
'a'" o' J, Y, }4 ^6 g, m; G

7 B3 S2 c3 c/ [( o1 r9 ^// 在javascript中推荐使用加号(+)拼接
; K/ \9 B: j$ o&gt; name7 T' q8 k  c, t+ D0 r
'Hans'8 a, k% q- T# h
&gt; a5 q% i' l4 ]7 a% P4 j  E
'    ABC    '
/ O% O: ^/ g' M) f, H" R&gt; name + a
; m* F" V( Q, S4 \+ e% m: u, C'Hans    ABC    ': [) E  ]% z' W6 ~! i6 P
// 使用concat拼接
4 y6 z- @) \, Q. t&gt; name.concat(a)- \* N; s! ^7 C- p( a/ N* {
'Hans    ABC    '; {0 r2 Y# J; c$ v
3 P% Y1 u. M/ Z
//indexOf(substring, start)子序列位置
! ^+ d% c/ S/ p
4 _/ @0 t% H. ?) D6 x&gt; text
3 v6 E% Y$ P. E5 v1 S'A young idler,\nan old beggar'
2 s' b4 T4 n$ g3 {0 S( ?4 i; T* o) I&gt; text.indexOf('young',0)
, `$ I8 h: g+ M7 F, \, z' \5 d* X6 Z2
4 K- ^- n" z8 r, g
2 H6 w+ z: l! ^//.substring(from, to)        根据索引获取子序列
2 u7 C! t8 S2 s- b6 Y&gt; text.substring(0,), o( k( }  r7 x2 J6 \$ n
'A young idler,\nan old beggar'3 o% r& M$ ]4 z& K
&gt; text.substring(0,10)
. C* f$ r! `+ S- ^0 t'A young id'
3 D2 h# Q- L. f; V+ X3 l! m
) ^7 u. `% Z. {% a* Q// .slice(start, end)        切片, 从0开始顾头不顾尾
1 z/ Y9 t$ T) P5 t: M. o3 `&gt; name.slice(0,3), R! t! l! n$ V& ~6 b) V, Z, o
'Han'
& [  n* {' c+ B6 g; K- r6 n! o; j: H- y  S
// 转小写
, v- B2 K# D- u+ `; c) r& v, D&gt; name/ _) v6 Y5 Z9 d) g4 k! Q/ u
'Hans'
/ ~& {4 e5 Z* d) j3 i' C5 n, E; r&gt; name.toLowerCase()5 w3 g4 r  C0 m! _8 `
'hans'
$ ~0 T; D' q5 X4 W4 v+ U// 转大写. f' o0 W& P7 G/ \
&gt; name.toUpperCase()' Q( @1 @: ~) @
'HANS'
9 U; R" f; z/ s9 F7 d$ Q# M1 p  m  n$ M( t4 o" C
// 分隔
- v2 m# X: `$ O4 I+ ~+ H&gt; name3 u6 ?, A) E' c1 W8 {2 A7 x( k
'Hans'
5 [5 n. t4 K' `$ H) `&gt; name.split('a'); ^* F* \* g& H. ]& V. f% V$ B
(2)&nbsp;['H', 'ns']
5 H* ~. I2 w/ r& f8 Z6 t</code></pre>
+ R, f+ D" ?- Z+ M( a% R2 u/ U) y" v<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>+ Q$ D* l+ M& I- |' `0 ]; r) U! R; w
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
$ l: W( e3 g" [# ^3 @. k2 h<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
6 }; ~; i4 @. b# D<p><strong>null和undefined</strong></p>
# m) `. i( y0 u7 `<ul>3 @, J1 ]* m  a& u9 v
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>8 t2 F" p0 y/ _4 a6 i5 a1 `
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>) w, O  ~  |& m2 W* b6 O! O  @
</ul>3 ~) r& s# z, G" [2 l3 }' b/ p
<h4 id="234-array数组">2.3.4 Array数组</h4>
, f" K. y4 y4 o<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; G) C+ g1 F) r5 `7 _<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ' ~' Y) s5 _( m  z3 A1 K
&gt; array1
9 S; M# B3 l" a% D/ P(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
9 D) N" j# e4 l) e7 d&gt; console.log(array1[2])  //console.log打印类似python中的print  s* s0 S4 V) p% }* i) }, A) N0 I2 _& Q
3
# ^7 V# M) r( o$ h// length元素个数
: J/ Y7 f& C5 f" L& `&gt; array1.length$ m- T, j, h: o8 G
6
" j/ ~3 Z2 V# ^4 h; }+ M( [; u: j! D7 Q// 在尾部增加元素,类型append
' L( [; v( h% A5 J9 e7 ?&gt; array1.push('D')
& ]8 B4 |1 X7 d7( M9 z+ X5 e! V9 r; `! \
&gt; array1( |) R% e% {* g- a
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
- t8 g0 I8 T9 w; ]// 在头部增加元素
9 J# b; z' r0 U3 @&gt; array1.unshift(0)
1 F# s: Q& F$ U7 K: X. ^8* f( @3 h; i6 Q5 V% q8 v0 g
&gt; array1
% P2 H  f- V- F' k(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']+ O/ d8 |' g6 Z% x! `$ v  Z
' H$ |4 ?* T- L/ l" P
//取最后一个元素
7 l; Q, l4 z3 a$ V4 I, Q# o" s- p- A* u&gt; array1.pop()
! ~0 R! p# k  P- F6 m) [5 F$ w'D'
5 s( a* K! v8 j, l# b( X* X&gt; array1) C1 ^# B/ ^, `
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']* I9 y0 T! ~; D0 B
//取头部元素
1 J2 F! j4 W8 x1 {9 a; V9 I0 g&gt; array1.shift(): H. ^( j0 m7 m' U5 C7 k
00 l/ m8 Z6 B5 \$ A' {! t5 v
&gt; array16 _2 t& h! @9 k
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], S# u* C. ?$ |+ ^# s; g

3 \4 @; G& Y/ C# T; \1 i  {//切片, 从0开始顾头不顾尾) D0 W" D( s" d' Z4 T/ m# ?' U
&gt; array1.slice(3,6)
& v/ E! C3 L* C; N. J(3)&nbsp;['a', 'b', 'c']9 l2 P4 d  B/ ^
// 反转" f/ S* \- c4 J1 [' z7 H1 R
&gt; array1.reverse()
5 x1 k6 ~4 K2 T* d(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
3 E) L/ K+ W1 X) P' i$ y// 将数组元素连接成字符串
/ B0 a, T  F" ^1 t&gt; array1.join() // 什么不都写默认使用逗号分隔) o2 P: P; u8 ^: h5 T( b
'c,b,a,3,2,1': E8 {( p  F, A) a' J
&gt; array1.join('')7 l8 \' ~1 d# c% T7 H" v5 O& L
'cba321'
; o& R8 d3 r( F( o- S3 w&gt; array1.join('|')
  ^: q+ C' C3 X# S'c|b|a|3|2|1'
' s, k% e) c7 A$ Q! @# E' D/ P3 v% [4 h
// 连接数组
% v+ E; a0 M3 I&gt; var array2 = ['A','B','C']
* P+ q) }! d- B8 P- N! ]&gt; array1.concat(array2)
) u( p1 n) K( u(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']) f7 \5 C. k* Y& ^* }) I* W9 Z
% L' {& V) N- u* y* u
// 排序
% h& d$ M( L  M# I6 B4 |7 R- q# M&gt; array1.sort()5 W% M, w$ }& f; T9 @- O, B8 c
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']8 @! n3 K) k1 O$ D) v
3 h3 h+ Y4 P0 r" l, ^
// 删除元素,并可以向数据组中添加新元素(可选)
+ n3 o: _( J6 }- l4 I& @&gt; array1.splice(3,3)  // 删除元素
: Q' n. ~& V3 |  I, T4 W' T* L! S(3)&nbsp;['a', 'b', 'c']
! Z/ O& a1 E6 [2 B&gt; array1+ i4 `& k9 W" K
(3)&nbsp;[1, 2, 3]6 C9 L* H( v* m
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
6 i- T1 w, ]( |% P: H% m8 z. E[]. J4 {# D: a: Z; j) G, Y8 W
&gt; array1
/ B3 Z6 O$ i' Y0 Y8 d0 j(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']6 o4 n$ J7 C7 L1 O" V7 R. R/ \
9 h0 \3 c  M) u9 R2 E" H
/*) }5 G2 V) M# H1 y5 e8 r% q5 t
splice(index,howmany,item1,.....,itemX)" g6 o+ H. O; [/ }. b
index:必需,必须是数字。规定从何处添加/删除元素。
* H. b; b5 Z4 ?' Ihowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 N$ X' f% B; x
item1, ..., itemX        可选。要添加到数组的新元素
( T" M( Q5 O' `+ I, K' q2 |: v! W*/) b: ?" B4 |) j

9 R+ [; z8 p. j9 E, q+ T// forEach()        将数组的每个元素传递给回调函数
2 c3 x0 F- z; j" m&gt; array1.forEach(function test(n){console.log(n)})
4 _  h- W3 Y5 C% ]- a 1
* b8 G" O' H: W- B# t- S5 ] 2( |$ t( @4 s8 }* h
3
0 s+ r2 i/ }" k5 { A
+ B) M5 x+ E+ a3 [+ z B% B3 d. c+ e1 S# o1 Y: ~
C9 L- p- W2 o' u
// 返回一个数组元素调用函数处理后的值的新数组5 X) I- }' T* t- `& m
&gt; array1.map(function(value){return value +1})8 G1 J* @2 d  w- {. n( [
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']  J% C- Y3 U$ d' t
</code></pre>9 `  @6 }1 |% j$ }: }
<h3 id="24-运算符">2.4 运算符</h3>
( o7 n' U0 |  q5 d<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( c' A: Y! r7 C$ L* S4 [, c
<p><code>+ - * / % ++ --</code></p>
) d5 V6 e$ ~9 M# R4 h  d& |<pre><code class="language-javascript">&gt; var a = 6
; b0 H8 [. t1 g4 Y" [7 Z5 P2 B&gt; var b = 3
+ m% s2 \6 w& n( W! o/ f// 加
+ [* d% F! ]  o1 P& M+ D&gt; a + b
' R( z4 `. r% Z/ ^+ C+ i# \9
$ d' o3 N( Q4 y: S+ E// 减
8 U6 n/ D3 P+ W' M&gt; a - b
+ I$ w, \$ v9 \39 M" H/ o0 J% w: r' c
// 乘
/ I0 q6 G# G* ^$ ^9 g1 s( n&gt; a * b% S% X* B8 `7 h5 x* K( V
18
, ^% s3 z1 w, N3 w* o( m// 除
/ t. k4 a- v: W; C: L& N8 z: I&gt; a / b
9 X; S/ X/ E1 \6 D& Q! ?: p; a2* }9 i- R& {4 l1 r, t* ?5 v' Q
// 取模(取余)
3 I- e/ T5 m4 \( [4 V&gt; a % b
3 v) S, e, M) f  \, z6 [0
, r% i. P) G, o( q; t) M! }// 自增1(先赋值再增1)
2 V) U$ f1 q; V2 t, U* q&gt; a++
) ~6 z6 S; [# ?6$ J0 S& L( Z0 Y& X, g
&gt; a0 ]$ U! L! l3 a- s. m& R
74 F, y, N$ Q4 U: B! f2 z
// 自减1(先赋值再减1)
/ U$ b4 e& [2 g8 }/ `1 q" D&gt; a--+ a+ c& r3 t: c9 ?. ?$ [+ p" l! M
7
+ \# Q# q: o. D- c9 \" W' P; u, `&gt; a
2 E' m% i& R/ m! C4 r4 J69 H1 c! f( _4 H% s4 C4 @* d
// 自增1(先增1再赋值)  A1 L" h8 B1 o2 I5 N8 V7 g
&gt; ++a& X: ]  L2 q+ s; R" R. P# W# n
7
- F  ~% [* C* F, M8 R$ p// 自减1(先减1再赋值)
7 L) G, w& I/ q( X2 r&gt; --a  }: I: U; d$ G. ]5 t/ `6 G
6) Q3 S% \( V, ^6 x! U
&gt; a
- E8 x7 h( U% [/ X% A6) j. c1 o' T, [* ^

4 |; g* z" [! n$ d//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
) A7 [" B6 W6 ^/ u: A* V6 \</code></pre>' p: z7 C/ k6 {$ h" N) t
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
6 V) i+ Z# C6 k6 w<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>6 T* q0 a( ^7 ~
<pre><code class="language-javascript">// 大于
# k; q1 l! u; m6 @3 E& n2 G% {5 L9 d&gt; a &gt; b) E7 W/ c9 f$ b' K) r6 e, b
true
+ D. ^9 }/ H3 b// 大于等于+ w5 z1 ]& w' Z" ~4 ~9 L, A8 f  Q% a0 Z
&gt; a &gt;= b
; ~. @! i; n- C' R* _' ^  N9 ]true
( E4 Q, {5 W0 I" n9 U0 w& F// 小于
% I1 g0 [  Y1 G6 @! ?8 z&gt; a &lt; b
+ i$ _( b9 r$ H- Q, u/ Vfalse
4 C- H8 o3 e/ a  p# S// 小于等于" g. |# |4 B8 n# {0 Q# p
&gt; a &lt;= b. I2 A6 U: i& x8 z$ w- _
false
& ]3 y: I. A: B& ~/ P// 弱不等于
6 V( X# U' Y1 y* d5 C&gt; a != b
, N" O9 `, B; _# A: [; Jtrue- w7 |9 \* q. P: J5 e, G
// 弱等于) `# z' ^1 a7 A
&gt; 1 == '1'" Y2 t, P$ x7 K' i* g
true5 Y* q! s6 q$ b& N0 H0 U
// 强等于' i  Q0 l" ]! b; e/ r
&gt; 1 === '1'! b1 q% w/ e& W, i
false
6 P$ J5 ]4 |# y+ N$ }& f1 ~7 ]! h// 强不等于+ J5 y+ {* ~! a8 y) C, _4 u# [% k
&gt; 1 !== '1'
9 L% l: Q- a1 R1 T. K4 Ytrue
5 o1 f4 R& B5 T$ v$ f$ Y1 O
2 c, Y' A; r1 r2 `3 s) g. X( l- e/*! N+ m% E* J+ }3 @. w
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
5 T0 F3 x9 {' l! Z*/
" I( i; m' ?0 R</code></pre>
7 b/ D3 O5 ?- L. ^7 c& T, I<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>5 S) V& o& P# a& O
<p><code>&amp;&amp; || !</code></p>/ Q* m/ H0 D0 N9 K5 ]* t
<pre><code class="language-javascript">&amp;&amp; 与! M+ \; R8 t, D. v
|| or * c. t1 R% {0 k/ c9 _4 |% i; E
! 非
( z( d5 M/ n. ?; u# Q7 m) z& g( c</code></pre>/ }3 e* ]) d$ Y# e
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
7 z" s& m. I% F# U1 ~2 Q<p><code>= += -= *= /=</code></p>( x; J( E: b  l% z$ a1 Y
<pre><code class="language-javascript">// 赋值
* q3 ~# O$ k( b6 V* b4 ]&gt; var x = 3
$ x% |4 P7 K5 f# M9 l- T0 l8 c// 加等于
! D) I9 d+ S! T&gt; x += 2: l! X# ?$ d0 W: A" n
5
3 \! c+ K: [2 v& r2 `# o7 F( ]// 减等于
" f) R9 P. c* T7 t&gt; x -= 1
* D- n. {/ Y3 t6 l3 w0 ~! R4
9 _. {8 f' Y. A9 n  i' h// 乘等于* J+ l  I( N0 u5 }9 m
&gt; x *= 28 j" I$ L# o" s0 v8 K0 I9 J
8
6 K* Z- ?# }  A# q// 除等于
( M9 x& b# j- N4 ^&gt; x /= 2
0 f; w; Q* ~$ z* S/ C# |! m) U49 s) s* z+ l# h- v2 y
</code></pre>9 ^5 b+ C) p( y) X  G% b. r7 `
<h3 id="25-流程控制">2.5 流程控制</h3>
6 H, [* }2 Z3 Z/ s) D<h4 id="251-if">2.5.1 if</h4>
0 q7 I1 c, g# L% q' S  I<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
' `2 w6 n0 v$ d- E* K3 v0 v( I. E9 s" O5 G
&gt; var x = 3
% q1 o, Z0 z& X2 p&gt; if (x &gt; 2){console.log("OK")}
4 v: _4 }: G, P  `6 } OK
" D. q- t" k8 E/ |) U3 ~# O
5 b3 Q1 k" P* Z' R5 H2, if(条件){条件成立执行代码}
' e9 i3 C' [# t# B- X5 A0 F8 e        else{条件不成立执行代码}! I9 b, v* [$ A

& T1 ~# B1 k) E& B% Z&gt; if (x &gt; 4){console.log("OK")}else{"NO"}* c+ I( S$ t2 a' \
'NO'
2 ?: s+ u7 l$ D, B+ Y
/ ^' M' L$ ^, S6 R$ k! G- ?0 a. W3, if(条件1){条件1成立执行代码}
2 P. l3 o) E8 j' U1 U0 B        else if(条件2){条件2成立执行代码}% d0 A9 P+ q# I; a
    else{上面条件都不成立执行代码}
1 i: c$ S! f- }5 V# y# v, p0 }! Z+ K7 k
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}  E2 M, r2 G# K! }) V
Ha
% @2 |5 Z$ n& p: ^, z& f+ t' O. ^</code></pre>( e8 I6 w6 ~/ o# G3 v. c$ Z1 j0 X
<h4 id="252-switch">2.5.2 switch</h4>
* o5 ~& h/ x* V% P<pre><code class="language-javascript">var day = new Date().getDay();
3 z$ c6 @+ w2 Q, L! J4 |switch (day) {
0 v; {7 A! a; w0 S; R) Y" Q4 w' d  case 0:  O' M4 a) S7 G
  console.log("Sunday");
% H0 t- R4 o5 `7 G4 H/ _6 c+ V% w  break;, E% f: @3 y, G7 i4 l' W9 K7 [  o% i
  case 1:
5 \2 B+ {7 z/ ]  console.log("Monday");( x+ V3 L! m3 G- G
  break;% Y9 z1 ?2 u4 b! M( t
default:2 H  p* `* s& O# Z* I# @- X
  console.log("不在范围")
& j2 h$ M3 {$ v# `* y0 Y8 v& R" |}
- ]* A3 f/ K# d" o 不在范围4 w/ p  E9 j4 I% S
</code></pre>
) N, i+ k& p% v, a) E/ E/ V( X<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
4 ]( m# `' R9 n5 b% g, h<h4 id="253-for">2.5.3 for</h4>
$ k; N9 u$ ^( a8 {<pre><code class="language-python">// for 循环4 n+ k: ?/ Z  y2 g
        for(起始值;循环条件;每次循环后执行的操作){! s& R( X9 J5 v: e
        for循环体代码2 x" Q" [' |0 o( _; n& z2 ?# M. E9 ~% |
    }( `' R" H( I! U4 u4 d4 N5 H) r

3 x3 m) @# W1 m+ i7 P+ d# t# {for (var i = 0; i&lt;10; i++){- z) z+ B3 c/ G% C5 U* e5 ?
    console.log(i)
- [! _7 I) x1 p3 C}
6 e; j' I: r! \        0, E( ^. x! ^0 u8 L2 x; [' v
        1* ]: I: `) d" O$ D  B: r
        2
3 E* W+ y4 W# n. \        3
5 K  u( {% w$ k$ K9 h        4" X1 X% |& L" f: u1 R
        5" Y& W1 I7 m- l( W& {1 J: B
        6
9 ?# c* b7 F2 D8 ?: H# c        7
; I% l$ w7 i" t# W        8
2 Z% C2 g; m' O        9; a" x# L( A3 b
</code></pre>
/ f! {: A! ~5 J/ f$ m( f$ H9 y+ U<h4 id="254-while">2.5.4 while</h4># t; A8 m$ I) X9 f
<pre><code class="language-javascript">// while 循环3 ~1 c3 j# U6 h" f4 j! ]
        while(循环条件){
+ l! P/ w, @- _: \1 l" x$ b        循环体代码8 K" `1 s4 ?1 v- K& q
    }( N! F9 ~8 O2 q1 N- i; C  I

; X; l5 r1 {+ j& G&gt; var i = 05 q5 y+ N6 B. G0 v/ K
&gt; while(i&lt;10){. ?$ `8 Q' P, _  z9 E
    console.log(i)
  X6 R5 k8 n) y* j4 F( O    i++
- ]; |1 B& P# R0 {}7 s% Z( D5 i; A0 e3 M/ R+ Y
09 h+ a8 d, q& I+ Y* T
1
1 V5 A# w6 b  J4 v- |% M' ^ 2
2 Y0 ~# L0 W: P4 p3 p0 K 39 ~& k1 c) G8 }0 P" n
4
! u7 R5 L# `$ y6 |7 N: \' H 5
# P& ]% l4 l' e: v# i: v 6
) ?. _/ n. x$ _8 {5 f2 y/ n  h, p9 ] 7
6 W/ a" W! j+ ^  r; T5 G7 f 8
% j& R9 k& g2 e5 [, |! e8 B 94 S: n3 Z( ?/ _4 ?1 U, D$ b
</code></pre>
0 Z4 Y& ]' ]- @: O<h4 id="255-break和continue">2.5.5 break和continue</h4>. J9 @+ d7 m* }$ _% Y
<pre><code class="language-javascript">// break
4 f' z+ k* }  S. Ufor (var i = 0; i&lt;10; i++){
7 ]0 N1 J9 u+ ~. \* y# Q    if (i == 5){break}
8 K  ^, z% v4 t4 X) B6 K  R- Q    console.log(i)
  o5 c+ n- }9 G4 c; p}
: Z" {( d2 E4 J+ Y* T; E 0- e5 r% w) Q1 J
14 n* I2 ?, N; Z* Q  N1 X, U% Z
23 N  _6 Y7 T* e" B+ x
3. R2 x6 U. K* C) t/ G; T
4
. ]6 F( Z; u3 l// continue4 h1 Y3 n  N+ r) a& q
for (var i = 0; i&lt;10; i++){. V4 H% P7 R3 E5 X8 ^# ?/ z
    if (i == 5){continue}
, G* e* L" z( D, S  K% t    console.log(i)1 u# m# S# B  k% f" e9 E/ K
}
$ O0 I7 R# `" l+ r2 y( ^ 0
# e4 b; ~& M  `7 r1 ~! f6 y 1/ y. v" G/ `; L/ N3 r) J  A  ~
2
! d" R6 m; U/ b( \ 3* y- u# {1 ?+ S6 l# [& O8 o
4
' ?3 P" @- t! Y$ K 6
# @; x6 m5 }( @. t* ^ 7, Q" D$ j# f9 w$ N% r9 O3 A1 E
8/ j& s6 d0 O, D/ ]
9% L; c; v1 O2 Z# p3 {) D8 y

/ R5 {: [* o* q( j, Y# @</code></pre>
+ s, W5 \0 d1 }  u<h3 id="26-三元运算">2.6 三元运算</h3>
: z* `  f, j+ X6 H<pre><code class="language-javascript">&gt; a
1 H6 B0 Z' S; n6
( W( _8 N  H3 M2 e$ \) C7 T) V&gt; b& ^9 x% e7 s8 ]" V
3) T' q& X  a) S6 ?

/ ]2 V7 ~: ?' b- [//条件成立c为a的值,不成立c为b的值  t' g8 H7 ?: d* [$ y4 [3 k
&gt; var c = a &gt; b ? a : b1 w, y! K" D8 F
&gt; c
7 G/ Q+ P: C) H6 r+ i- I0 H% [62 I- {) P* W5 a9 J9 S
, t1 Q. O" w+ y) S
// 三元运算可以嵌套
# R* X6 Z4 }, P1 F! Q/ b7 g- w</code></pre>
3 w' b% N* c( _8 Q; l<h3 id="27-函数">2.7 函数</h3>
, q; o/ T: i: [1 I4 p5 p- p' O<pre><code class="language-javascript">1. 普通函数
  O4 B4 K4 P# V+ @&gt; function foo1(){
7 N4 Z/ Z! {& y1 L# Y    console.log("Hi")
; R- L5 I* T2 Z4 |" n}, Z0 `* b: r- ^/ Y) M

" V1 m$ d6 E2 z  Z( x) |: r&gt; foo1()
. B5 _& \6 s% l$ J5 U1 j3 G        Hi2 e  `' s& f3 \9 {% V+ x7 ~* u2 g
2. 带参数函数
# B' v+ D* b. ?+ n+ A9 s& t&gt; function foo1(name){
9 |0 \$ l8 a# R+ f8 x% k9 x8 s$ @console.log("Hi",name)
% _. b2 h; u6 r2 A% t}6 ^- ~8 w# W* t! f& p

, o; I8 r9 N4 Y* }# x8 D/ m5 W&gt; foo1("Hans")+ i' v5 s- e+ G: x& J- T% B
Hi Hans8 k. H4 `/ H, G/ J- {! ]/ b3 w

9 w  n5 |4 I: Y8 V1 |% m4 {3 S&gt; var name = "Hello"% Q9 [9 i6 |" r: A$ p$ @
&gt; foo1(name)( d: z+ ^0 p, ?, b/ k; J
Hi Hello& ^! t2 h8 O9 H0 h7 t4 Y) F
  @% A0 p9 u5 Y5 _
3. 带返回值函数+ x/ D; T" P2 |; b5 o
&gt; function foo1(a,b){$ c8 K  O) _. h/ I
        return a + b   & [4 w$ m, l/ R
}
8 Y4 e- t/ a7 g+ G$ c2 J&gt; foo1(1,2)
2 _, p" K. M* h7 D# y1 I7 j3, u' M6 V5 g* F0 y
&gt; var a = foo1(10,20)  //接受函数返回值$ y6 z; i& `& p: z5 Q9 F* p
&gt; a( }# i* L' `0 B4 F% C
30
" B# i0 s- [) {. g
0 Q" X8 q* i9 y) X4. 匿名函数. P; }" o  d. I3 q7 y. L
&gt; var sum = function(a, b){
0 a( \' u/ [! r( _  return a + b;- M, m/ \! \8 n
}
: L8 I" @* D) ?6 v5 ^) o&gt; sum(1,2)
3 A# L+ A: {/ k3 d9 P& g  B4 I* p) b3: ?( v+ W% Z% q1 {

/ H. s' P- @* x7 S' n7 ?# r  i// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
5 _& S' o. P0 {/ W. o&gt; (function(a, b){* L- f& P% F$ q2 o& c. I
  return a + b( G7 g! o6 C7 P& d7 [
})(10, 20)
# b; _* L0 |/ c3 P* ?304 C% @: i, Z* O, D4 A4 o
$ X4 G, f+ s# ]4 s: Y, x3 ?7 l
5. 闭包函数
+ E* Q4 l! V7 Q" B5 z, i// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数$ H* I! ~" t9 f! }; _2 |. b
var city = "BJ"
( B1 Y, T1 p5 L  R- m  y7 q# q( Xfunction f(){
0 U2 f  s' k/ h2 T1 m( T: l    var city = "SH"# J/ J/ [7 y. X' K, Q4 X
    function inner(){, Y) P3 p; ^# V; j/ ~
        console.log(city)0 ^+ Z( q) U( V- O, ?6 g: b
    }
0 R2 T+ L5 y3 G+ L) S. {0 ^& r8 e    return inner+ _. ]# Y+ h) K; X$ t
}  X# m3 m+ G) i. m2 z% U8 \$ ^' N, ^
var ret = f()
3 _. E: H; Q  `8 e6 |% O5 [ret()0 J8 ~9 s- ^5 ]6 D: ^. S( e( I
执行结果:( ?7 f; ^- K, W) M6 S
SH6 L5 \" x1 O8 B3 n& G

; `2 T& Q1 m% T  L/ O8 Y& C</code></pre>
& O6 e* d* {4 p3 g6 T$ a  p<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
' C2 |/ N) g; o) k: ?<pre><code class="language-javascript">var f = v =&gt; v;
$ e" _" R. l5 n+ P5 L3 T- F4 D9 a// 等同于3 Y4 f9 E) r/ H* w) E+ g2 n$ |
var f = function(v){
' F. O, u. k! H4 V) E. H# z  C  return v;& m5 K" P/ d  P  b- [: A3 B* x3 B2 C1 H
}0 L* N7 Y  r* A2 U/ P, T
</code></pre>
0 R' C9 U7 z9 ?0 @: `<p><code>arguments</code>参数 可以获取传入的所有数据</p>; t  `' P9 _4 b6 I
<pre><code class="language-javascript">function foo1(a,b){
) o4 M% K' b8 S" G  L1 ~+ ?( z    console.log(arguments.length)  //参数的个数
- a5 m; ^! J8 d: D' _8 n    console.log(arguments[0]) // 第一个参数的值! S: j) X$ [: n- ^. M0 A: x. B; Y
        return a + b   
7 Q/ o$ R. `. L& Y% b}
( W7 \. U  W5 }0 T5 r" I# p# Rfoo1(10,20). M: D" S5 w& `3 ^# y( A, D* W+ x
结果:
% \) J$ @. r% d" W6 X* g 2          //参数的个数 ' j* ^1 s; A/ h7 `! o0 ^+ l
10        // 第一个参数的值
/ `0 t2 s, @" r! K  r30        // 返回相加的结果  U3 \# l+ L# b! }( A$ g1 R
</code></pre>
8 r5 M9 w) C( H/ H, I, H5 U9 i" T4 V<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>3 [) I( a! z: g) [1 g9 X" d* S
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>& {% A* k" {1 J2 k- m. G
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% `: t' A& G8 L
<h4 id="281-date对象">2.8.1 Date对象</h4>
+ }' L" ?3 a8 D2 I  E<pre><code class="language-javascript">&gt; var data_test = new Date()
  V. _4 ]) o: A, f- i&gt; data_test
5 J/ |; E' V7 K" _  U$ Z6 D, IFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)6 j5 @4 f( G1 A: U  u# ^
&gt; data_test.toLocaleString()
" o6 T0 b9 {) \3 m7 Q0 j'2022/2/11 下午9:44:43'2 [5 H2 k: v9 _2 H" Y
$ w6 D- G7 i1 o$ A
&gt; data_test.toLocaleDateString()+ ^5 y) a7 d( @6 p$ A
'2022/2/11'
- D# H/ t( W3 O! B  a
+ `" o) z. [7 H" D/ v: l&gt; var data_test2  = new Date("2022/2/11 9:44:43")
) J6 o1 n; E; r* T: T&gt; data_test2.toLocaleString()
& r2 N0 O. C; U: @8 l, |'2022/2/11 上午9:44:43', M5 P  \/ @4 O; i( q3 K( D. q
1 u! Z$ h. m; t- u: O0 g2 L" {
// 获取当前几号
5 c+ Y1 O, {. U&gt; data_test.getDate()
3 W) I' y& j) U6 j5 J. Z11
/ \/ b# b: m( Q$ X7 m& O// 获取星期几,数字表示
4 j( D: a' n* R( h$ x&gt; data_test.getDay()  : k6 ?9 ^1 q3 B! E7 W
5, T7 _) L, K& W: G! U2 n0 G) t
// 获取月份(0-11)
/ @% H7 g2 f  ?8 E8 V&gt; data_test.getMonth(), q2 H; c; a7 g  \" _4 }
1( `" {. X8 e& i) E
// 获取完整年份3 p7 i1 K' [) r4 y
&gt; data_test.getFullYear()
" X$ |) M0 M( x0 `3 I  m2022
8 o. D* n9 L- h// 获取时
7 X% i* r1 r* c9 \&gt; data_test.getHours()" i( B! n$ T3 ]6 v' E8 M: Z+ G
21
0 d  O9 E% o" w// 获取分8 u4 d. k: u( x: l
&gt; data_test.getMinutes(): @0 b5 p9 I' n6 c2 E+ t& s  @3 q
44
  ]; P3 j' H9 m5 w! ]& N// 获取秒
: G% H5 W9 C9 X4 I&gt; data_test.getSeconds(). {9 O8 _: t1 `* a9 L' W; w
43
9 i  T- S: U# K+ m. ?// 获取毫秒/ W% A! Z! P5 U) k/ C2 I6 `
&gt; data_test.getMilliseconds()
5 q7 P; J; D  m3 A8 w5 ?290
8 v5 m0 u/ v5 Q8 A' Z+ N/ v: M* N+ k8 e// 获取时间戳; ~7 l- V) }: O2 m
&gt; data_test.getTime()' {4 U( ^, k+ }# P  g
1644587083290
+ c) N7 F; J9 J( H6 f" k2 [</code></pre>' \$ _' y3 E/ ]* w
<h4 id="282-json对象">2.8.2 Json对象</h4>
! m! X0 X5 w. f, l: s3 k9 o0 C<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
+ @) P0 e5 s- u6 x' xJSON.parse()  // 反序列化,把JSON字符串转换成对象
# ~1 ?6 n" t% }( Q& z6 n1 C6 ~; y( R8 I0 O: \6 P1 P
// 序列化
8 C4 \: E- D+ O' u  e&gt; var jstojson = JSON.stringify(person) 4 P* t. E- g3 k
&gt; jstojson  
/ t0 U1 E; Z5 J! m& H'{"Name":"Hans","Age":18}'
7 u: Y# I( n6 p  |; F! _: c
$ n. |0 v& \6 i// 反序列化
& C. p/ }! Q) z- P4 U8 c&gt; var x = JSON.parse(jstojson)
& m' ?: x7 `4 ^* L& A& ]7 |&gt; x! x- r! A" B" }/ |7 n7 y! a; G4 r
{Name: 'Hans', Age: 18}6 G3 p9 t: C: v
&gt; x.Age
" {/ q; v' P" E; v3 q2 H  l18
; ~: h, p5 g- y+ p( t</code></pre>
3 B1 B- o& ?5 S5 O( X/ `<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
2 X. ~3 D" x9 L0 L/ T1 m<p>正则</p>& f4 z! T/ ]6 F) s  S4 Z' f, z
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");0 N9 G, d; b( F5 p7 y
&gt; reg1
+ Q5 y& P, j  |6 s/ \) g: D+ F/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& M( B& T" W% ]; j- N&gt; reg1.test("Hans666")0 M9 d( ?( d( l' f
true
+ B% C3 \5 H3 @, J' W: T0 ]9 A. x9 U4 Y3 ^
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
  N7 n- H# t# A  ^$ h& A  p&gt; reg2
! ^  E% b# Y% F/^[a-zA-Z][a-zA-Z0-9]{4,7}/& `4 r* y3 Q9 z0 {: x$ K
&gt; reg2.test('Hasdfa')
+ B) K- a  K5 _+ F6 Ftrue" Z# \/ H# Z. A! {* P& l1 J

$ z+ x/ F  o% X- k) H全局匹配:  R! E8 c' k# g% j8 f9 v4 X: V8 W) X- T- L
&gt; name
) O% N, u  H- h. {* y'Hello'
! Q7 d6 W9 V6 ^9 h$ U( d&gt; name.match(/l/)
. f$ Q, R5 v" i  c3 t5 Y4 v['l', index: 2, input: 'Hello', groups: undefined]
# f) K2 v: O9 o; U' V3 t4 p8 F  v7 T; |3 Z
&gt; name.match(/l/g)
. q, n# [' ~' S& j; m(2)&nbsp;['l', 'l']
- Z: d2 I2 S' K// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配5 y6 x6 t9 E) e0 `' G% U7 E# B# I

& P3 \. L6 e, i" I全局匹配注意事项:
: H$ c" }3 ~& h&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% A! A- M/ r. S. D8 n( u
&gt; reg2.test('Hasdfa')# r, z; ]7 C' b7 p0 _: G7 p
true
8 N/ |7 q. @3 ~3 B2 O- {4 ~&gt;reg2.lastIndex;
+ R+ a# D0 R- L6
5 f4 y/ T0 T  B&gt; reg2.test('Hasdfa')# H! W$ ?  ~1 [
false. k) i; E2 c/ w& {! D
&gt; reg2.lastIndex;) \# \. f% i, Q! }" V, Z6 h! u
0
, h# D2 T3 I+ |&gt; reg2.test('Hasdfa')% _: I5 p. Y! N+ g' p1 y
true. m: b3 B+ c# n1 J
&gt; reg2.lastIndex;
& G0 K+ l, P6 G6
# b, L0 H& D* l" i( ?&gt; reg2.test('Hasdfa')+ e4 D& \* Q# Y( s
false
  Y1 t. W: {) a7 q&gt; reg2.lastIndex;3 S! _: N7 H# c
0% R7 ~6 b8 P0 {1 H, }
// 全局匹配会有一个lastindex属性; s% I; k( R* b6 U
&gt; reg2.test()
2 H0 E, I1 W5 F  D' Nfalse4 Z2 o/ M/ W9 {+ E  n
&gt; reg2.test()8 u5 {3 ]" O- B
true6 }9 P$ N$ o8 I" Z
// 校验时不传参数默认传的是undefined
: D& t% \. X& C$ S# E: {: ]</code></pre>3 l! H" c8 e1 [  k+ t3 J
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
. r) A1 F' O! i<p>就相当于是<code>python</code>中的字典</p>
$ v$ T6 k$ {+ s2 s. w8 s6 l<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 k& x- ]9 d- }0 `* U&gt; person( T/ y; C- V; Y; W# j
{Name: 'Hans', Age: 18}4 A8 O" J$ W8 K& n3 e' B2 c
&gt; person.Name
( k* |2 R: s+ _9 }2 J9 v. M: s* q'Hans'* j8 \, u) r- h2 {9 N
&gt; person["Name"]
5 m4 b; N: x, C, s% `) ~3 G'Hans'/ k! p2 `! v! x  \* m' M1 u$ G, Z) A
$ D( C9 l: i0 G/ f
// 也可以使用new Object创建% W2 U$ Q1 _- O$ b: H
&gt; var person2 = new Object()
( r% E8 P- k, T* i3 ~( l# _& p. X&gt; person2.name = "Hello"9 ?; G* q; Q* q+ P
'Hello'
6 o7 s) C& c+ L( U6 r&gt; person2.age = 20# h  y* P( \, G
207 ^( J  I* U' U+ ^2 T4 a/ j
</code></pre>. Q/ f' o8 i# z
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
7 \3 c) s$ i5 F: A: [6 O<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p># K# v5 V2 ^' Q$ u7 G& d9 K
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>6 s9 g3 s& O$ @2 v5 o) L* x
<h3 id="31-window-对象">3.1 window 对象</h3>* N) Y, |2 A8 ]- L
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>5 F. [: z0 a% y4 Q9 Q4 m+ M
<pre><code class="language-python">//览器窗口的内部高度! O; L7 c+ J- b6 ~* T% p& r0 e
window.innerHeight
; Q' @; c- h8 y! V; n7067 A" a" E+ ]/ Y
//浏览器窗口的内部宽度
' Z, N, b5 \1 Q( g. ~0 `window.innerWidth( b; i1 E' w7 U& @% c  g
1522
2 h, }8 M6 J: o6 R2 c0 D5 ?/ X5 ?// 打开新窗口' n+ B8 ^( m; @8 q  ^
window.open('https://www.baidu.com')
8 ^- U3 Z; o; K3 j$ C; q0 aWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
9 q. Q/ `" R: E( P4 ^7 h// 关闭当前窗口2 r& u6 n) n4 E8 S$ V
window.close()
4 Z0 Q, k; t) ^, l//  后退一页
2 N4 {- B" S) G. u! {window.history.back()
6 H  ^2 p$ z, @7 T- ^// 前进一页
# R6 V+ ^1 H; n" ~/ S- l) Mwindow.history.forward()
6 E6 |0 e- L) M, E' N: d' c% H//Web浏览器全称. E8 l& K) V9 v3 k$ t" M
window.navigator.appName
0 E2 H% O+ [0 x  [+ n8 h9 m'Netscape'
  h% p- [; M' Y6 V  B; m" e// Web浏览器厂商和版本的详细字符串+ t8 Q4 q, j, [
window.navigator.appVersion
& @$ T: k& ?  {3 C'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
- S+ a! @( j+ k8 T( ]/ q// 客户端绝大部分信息
; N  d$ D7 w) t) Dwindow.navigator.userAgent* V) C, N+ \+ j  _3 |/ r" j
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
5 }, i1 O( v: K. l4 _9 e: L// 浏览器运行所在的操作系统
: C: s1 O( S7 j3 W( ^1 lwindow.navigator.platform- D/ j/ `1 |- C# ~, _" m) G
'Win32'
/ l% E, V9 M6 X$ n. V; e$ t+ \0 H+ i6 @1 z
//  获取URL
7 j) t* k7 o$ @. fwindow.location.href* H& ^; S  |" d* k: F- W9 A( w
// 跳转到指定页面$ L9 P1 m6 W/ ~/ e( b5 }' [
window.location.href='https://www.baidu.com': u1 V9 M0 g2 s* H. j
// 重新加载页面
2 U$ A% D  i. Q' X; \window.location.reload()
. E. d6 L1 @5 p9 m/ a5 w: E</code></pre>
/ [. M- ?4 E/ P4 x: }<h3 id="32-弹出框">3.2 弹出框</h3>' t% k' z+ {0 A, }
<p>三种消息框:警告框、确认框、提示框。</p>" L0 C% n# A6 f
<h4 id="321-警告框">3.2.1 警告框</h4>0 j' ]4 Y4 M, o& m+ e' m, p
<pre><code class="language-javascript">alert("Hello")4 L& h1 P9 ~  L3 \1 @
</code></pre># i! C* W. ]+ v. f, w+ p
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>3 p9 Q6 v, U) i+ h" O0 O/ w
<h4 id="322-确认框">3.2.2 确认框</h4>7 M8 ~  Z' z/ C9 P  G
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
2 G& @* X3 k, ]+ X- y, q" y<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true+ d$ W; w% r/ @7 h" m6 Y5 _
true/ Y8 m. A! k3 P' {" k; a! E( S
&gt; confirm("你确定吗?")  // 点取消返回false& ]5 W3 k& K( q( Z. J+ @
false2 K+ d$ V8 C; C  p
</code></pre>" q) I3 Z4 N# ~" m9 C
<h4 id="323-提示框">3.2.3 提示框</h4># d) |6 A+ e* b! s( b6 b
<p><code>prompt("请输入","提示")</code></p>6 K: h, N' ~, B0 b; ~* L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
; t0 E% a  q, j4 J1 e* D0 z<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
. A" y& N8 T. X! f- O% H" l8 `<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
- W$ b7 [. P% f4 @( k( i; Y<h3 id="33-计时相关">3.3 计时相关</h3>4 b( k0 _- N) u! y% l- l5 t* R. ?% [' ]
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
0 ~- ]6 g, G1 K! }4 D# l) ?) Y<pre><code class="language-javascript">// 等于3秒钟弹窗+ F6 P+ [3 R; v
setTimeout(function(){alert("Hello")}, 3000); Y3 l* a3 G! S3 j

1 Z- R" E! ^3 {: _9 E+ rvar t = setTimeout(function(){alert("Hello")}, 3000)) t3 b) a' @0 K, z

2 D0 s2 ^9 m! E% P. ]: ^// 取消setTimeout设置1 n0 j) p% O5 [: c) K9 ^
clearTimeout(t). d8 ]( v7 @$ I- Z2 c+ m6 m
</code></pre># n  y5 B' z$ O' T
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>' O/ P3 H& `- v$ X3 H" p
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
* |# \6 F1 x& X' T0 o0 J0 |% p<pre><code class="language-javascript">每三秒弹出 "hello" :
, T5 ~" Y, l3 r4 h% D9 PsetInterval(function(){alert("Hello")},3000);
9 z/ E' F" E4 ^3 J) v5 U9 q9 q</code></pre>) N3 f, J; d, H) h0 o6 E
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
$ }7 k3 N6 Y4 q# Q% X9 [, c& Q<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);* y8 |7 E2 Y' {$ L  I- C
//取消:
( l, K' U: \. NclearInterval(t)$ R8 I& k  [8 _* S# x; P. L  J( }
</code></pre>
* K: j( P+ d! H4 C  Z- V
5 r6 m7 n2 h0 [
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-5 06:59 , Processed in 0.083102 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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