飞雪团队

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

前端之JavaScript

[复制链接]

8119

主题

8207

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

7 m, V! \( U5 W, c# i$ B- {<h1 id="前端之javascript">前端之JavaScript</h1>
8 G3 [8 c: b, k! H" F( J<p></p><p></p>
1 J' }$ w8 i4 {/ m2 t7 S% {<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>7 w1 D6 A' X% g
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>; G) V4 W: {. l& a' D
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
) J3 X6 C; r$ ~它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
* {7 p# t- @5 O, j它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>5 ?: m6 M& I' S8 S' c" E) i
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>. X8 l4 O- z1 ~
<h3 id="21-注释">2.1 注释</h3>
8 |& U* D9 s- y<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
$ B( d/ _3 E  {. @( W<pre><code class="language-javascript">// 这是单行注释
! X4 P3 ]% s9 c* Q$ _4 M
7 e( O( p. U1 Y/*& C. J2 @1 g. w5 h
这是多行注释的第一行,
7 a8 j0 k7 S" s) [. H, _/ d- j这是第二行。; U# e" h9 z( H  c! M% }
*/
% Q" M9 v, B8 `! o/ ~8 e2 q: i</code></pre>' ?( J7 B6 f# S  O" A9 L1 D2 [
<h3 id="22-变量和常量">2.2 变量和常量</h3>
4 m* s' J/ [# Q! ^<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
: _- a4 _7 i5 k, N7 W" r<ul>' p4 J* m. [* m, n# ?
<li>变量必须以字母开头</li>
2 b+ D# N, a9 e) r; D; Z5 J. z: l- D<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
( w* J2 a2 ^+ P; p# Q; [<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>1 s4 n  t) L! V+ A; u
</ul>
9 h- ^2 ?& F9 Z1 D" _) `$ L' V<p><code>var</code>定义的都为全局变量</p>3 ~1 m: R  `) w# I, ^6 m' ?
<p><code>let</code>可以声明局部变量</p>
( m+ z) @4 q- N! G+ S<p><strong>声明变量:</strong></p>" I. `9 `, B1 y1 P% i+ D
<pre><code class="language-javascript">// 定义单个变量& B5 z: y, o4 l2 P. M1 F5 e* W8 ?
&gt; var name
$ O" o3 g$ E' C6 y&gt; name = 'Hans'
6 B1 o* j: E3 J+ N; U! j//定义并赋值7 P5 M: ]5 j6 e+ U
&gt; var name = 'Hans'
8 T8 l; f) H/ Q5 ~8 z3 g) W&gt; name) j% C5 V8 t3 w6 l1 y* e
'Hans'* y* d& G- g. v0 I  ]
- u- }. f" R% r/ r
// 定义多个变量
* V# `$ S9 l5 B' l&gt; var name = "Hans", age = 186 a. o. {7 s4 S! O2 s0 q& K$ V/ I
&gt; name
- K0 A( m' h) {9 G* h, i'Hans'
  z, s2 @3 g- O& G3 q&gt; age
9 l1 E' s/ _6 j9 p& l* v4 c18: N% j2 A( ^' k, D

2 x. _' b' b, s  R- }//多行使用反引号`` 类型python中的三引号" E3 y9 I; v6 ?, @# a8 q# Z6 n
&gt; var text = `A young idler,& x- H$ Y: X/ w8 J" [% Y. f- n& q+ I! n2 {
an old beggar`: q2 c, x5 ~2 w% A
&gt; text
+ i  r1 z! F* a! b'A young idler,\nan old beggar'
7 Z7 y- p- Y' T3 f1 r</code></pre>% ~- S  z+ Z7 @! S3 w
<p><strong>声明常量:</strong></p>/ x0 V7 U6 \  N
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>1 b4 K2 T' \! e* F. r
<pre><code class="language-javascript">&gt; const pi = 3.14
( `0 y1 W7 C7 J5 T% W. D2 a, b&gt; pi
: i+ P/ Z( S8 X! c- g4 ?3.14) G- H- L( a' ~' G# h
&gt;  pi = 3.01/ n3 z/ W. L- c: I$ q
Uncaught TypeError: Assignment to constant variable.
6 n% H# a4 r' V3 a4 t6 S    at &lt;anonymous&gt;:1:44 O1 {) G, ?5 O$ Y7 L' V
4 D$ \5 V7 j4 K  O$ G
</code></pre>
  h& Z5 D# N! Q5 b<h3 id="23-基本数据类型">2.3 基本数据类型</h3>9 N; V- `$ w/ B/ T3 }0 j8 w& `
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
, U2 I% R. M$ ?. W' t- M/ B<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>$ _) l* Z2 c" y, c
<h4 id="231-number类型">2.3.1 Number类型</h4>7 g! r) R$ i  v
<pre><code class="language-javascript">&gt; var a = 5: @8 Z; h1 z: s% _3 q% y' p: S2 \2 \
&gt; typeof a   //查看变量的类型  3 T7 M& ], A6 i8 a2 J5 F
number" m' \2 K$ s6 [6 Y% M/ C

; u; }- P! j( d9 F&gt; var b = 1.3/ W! ~/ E& U  G( ^1 M
&gt; typeof b' Z8 W: d6 q8 W) i+ C% ?. k, ^
number2 J/ ]- A0 H- j$ D: V: R9 ~# c3 P

2 e" U8 \  g' ]/ \// 不管整型还是浮点型打开出来的结果都是number类型
+ p8 O7 x* t0 L# k5 {& s8 }
5 ?/ y' J1 ]) [$ x$ z% V/*
& z" l% N9 y6 Q6 ~: uNaN:Not A Number; O7 [9 W7 a) b) m. m- P& v8 e# O
NaN属于数值类型 表示的意思是 不是一个数字
6 s2 K7 i8 n) q*/
% U# U; v0 G* e& R3 i# E
! K7 ]+ m8 [8 z- K3 b1 ^parseInt('2345')  // 转整型( d9 o( \. H1 E$ ]+ ]
23452 [9 O$ d6 G- @$ D
parseInt('2345.5')
5 v3 e% @) \' s/ V- o, w8 q2345+ ~& ~4 B2 E. |+ h3 t
parseFloat('2345.5') // 转浮点型
0 I. @/ t/ T6 i- T4 k9 r( U5 `2345.5
# ^# g& d! E* c# `5 nparseFloat('ABC')
7 m2 z  @. M* yNaN( ^! c/ S2 q. G6 w
parseInt('abc')
5 K% W7 Y- K" F/ q9 ONaN
, X; P9 T1 w" Z</code></pre>6 b& U5 ?6 p  o' M3 [+ `
<h4 id="232-string类型">2.3.2 String类型</h4>
" @8 R& S5 n$ a) A% p<pre><code class="language-javascript">&gt; var name = 'Hans'
  ?9 L4 Y: v/ i& ~4 Y( p$ W&gt; typeof name; U% ]# k% F  H  e2 U( V
'string'6 N. N! [: J2 E$ k9 Z: V

* _. k3 o4 |, c) r+ V/ Q- k//常用方法: A4 M* \) k8 Q  g
// 变量值长度
1 L& H5 R+ g1 X# t* {&gt; name.length
4 x: A" _9 W. X5 a0 H4
7 |  l! n0 f) W- C// trim() 移除空白/ O9 D, n: S6 Q( T* x
&gt; var a = '    ABC    '
7 O# s7 G4 o2 Y1 j3 l; C&gt; a1 A* i! X& l. O
'    ABC    '
9 l# l6 l! N" n( Z  ?: }6 o$ \&gt; a.trim()
- R% N: s$ P* |; q/ j: l'ABC'
- U4 b9 T0 d( n8 E, q* B//移除左边的空白& C1 a9 Y, d( t+ J* k% ?) p; t& m' f
&gt; a.trimLeft()
! e' U! ^6 X4 I9 Z% L! K1 g; \'ABC    '& x$ ~, s& T( H; C3 S+ G4 D8 Q) U
//移除右边的空白, u8 v% ]; Z/ C& C0 o* v9 J
&gt; a.trimRight()
9 h) z  W6 D4 ?: ]6 [6 v9 n'    ABC'
) S2 k7 R( X4 f; a/ Q* N1 o; C/ p* S  u( d& x- ^$ @7 ?0 e
//返回第n个字符,从0开始
& Z9 X- K" Z- u- @) X; I+ \2 E) U& S, R&gt; name5 h" b* u$ H, i9 c7 R* n
'Hans'% a2 D8 b# N& O+ e" ^1 D5 O5 b
&gt; name.charAt(3). @8 @6 Z  J( p: [/ \3 |+ n6 h2 n7 r
's'
- B8 G* y+ X/ G+ ]&gt; name.charAt()
0 Z# ^. U% U1 B* Y  Z) q, Y'H'/ J& j" w* K8 l4 E" Q2 I' E
&gt; name.charAt(1)
' R- K# d! k; q: z( J& q'a'
) G7 ~* B) F( e6 c% u+ h* C: z  j( Z8 p% |
// 在javascript中推荐使用加号(+)拼接
# i0 S% k, d7 f, t&gt; name
* ]7 E8 ?( q# I- f'Hans'
% o% h6 g! V3 G  n8 M( N&gt; a% c- E6 L& t$ X
'    ABC    '
- I+ K' x* a# M+ ^7 F, i&gt; name + a
( k( W; B2 a7 x' u'Hans    ABC    '
( J9 J! S+ R+ R// 使用concat拼接1 L5 u5 v- R  V! a. V
&gt; name.concat(a)
! L6 V1 E+ G% X/ Y'Hans    ABC    '
0 e; w3 O  ^, {* G
! b3 r5 x! j& l) k//indexOf(substring, start)子序列位置
0 Y2 Y" w' c1 E
; s" ?  `  U$ V! a- B+ Y0 t4 l&gt; text4 k8 c& G/ r3 B4 s) h  P8 c
'A young idler,\nan old beggar'
# m- f, S+ |! {&gt; text.indexOf('young',0)+ Z  r) n  B' w/ O" u7 e
2
3 `- X, F* i8 y4 m- a6 S8 h; H
+ O8 a5 k4 A: K4 W//.substring(from, to)        根据索引获取子序列
8 p6 ~1 y2 z2 a0 f9 d&gt; text.substring(0,)
0 R$ P) b, V+ ^6 Y. ~'A young idler,\nan old beggar'7 ?, c/ P% S7 a% I) ?$ m/ u2 H+ X
&gt; text.substring(0,10)
# `$ H4 F2 f# {% g( {" F3 R/ r+ L'A young id', Z# ^' ~* P) i" q+ x/ q# L6 L
3 y/ I) w0 U* r0 s' U* ]; {( B( J/ e
// .slice(start, end)        切片, 从0开始顾头不顾尾
6 X2 y1 |: B  Q4 [4 A2 |&gt; name.slice(0,3); d' g$ U6 t" e" R- C3 K
'Han'
# x) U8 ?1 _5 D$ [3 h
# K; m3 S  [; Y: W' ^4 E// 转小写; ^5 k! h0 v' [) _6 M# W
&gt; name9 |4 P  P+ A' W6 B$ W
'Hans'3 W! i* o& U' v* h& X: n6 v
&gt; name.toLowerCase()
- O  x0 M0 {. u'hans'( l1 v  O# O& H$ Y6 t
// 转大写
; r. E8 `$ E% w$ B* [6 h&gt; name.toUpperCase()
$ {  }6 [8 p9 \  [: m3 X. L6 l( q'HANS'
" P' m3 d. I' Y  L9 s7 Y' b7 o5 l
// 分隔
4 O2 o" @6 Z; m9 \1 D, p4 k&gt; name+ U% w4 q' O( X8 k( x3 D
'Hans'
7 k( ], f5 [6 \: O  k+ I2 x&gt; name.split('a')
- [5 |( J7 O; i- b(2)&nbsp;['H', 'ns']
0 o  p  ]0 o3 h4 i7 h: D</code></pre>  R7 g+ F8 L7 Q: c& R9 V
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>( C' Q" K& G6 ~5 W4 o; N. B
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>7 v3 d  u2 v$ J. q/ {
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>' J! X8 g. G5 o0 X
<p><strong>null和undefined</strong></p>/ L% q. E% i' D" l8 I
<ul>
) ?( D$ V6 g5 T7 P+ {  b<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
0 b# d* j  j3 |7 H<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
5 L- G3 s5 h$ V</ul>
* Z5 s+ r! F! j& X<h4 id="234-array数组">2.3.4 Array数组</h4>
% T8 l; b- p( w+ h$ A0 q$ N<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>' H. B' o! J  Q. r9 ~, o
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
2 r: V8 t/ z; `0 G2 ?+ A2 N&gt; array1* X8 P2 E# i# n4 r. p: {9 t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ ^5 B$ c" |/ q7 t9 ?&gt; console.log(array1[2])  //console.log打印类似python中的print, c" P* X" |8 j0 x+ `  [  i3 M
3
9 C5 s  a2 c  n; @// length元素个数3 ~* @+ q1 k' k% [+ G, x
&gt; array1.length0 S! e. o% p4 d' t; e% Z# ~
6, T' }+ X7 D4 |5 h7 t0 l) |7 ?0 d& A
// 在尾部增加元素,类型append) B: t% l: [: E6 F6 F' b* m) j
&gt; array1.push('D')# @" x, [( x3 G& |& {! S4 J
7% o; z$ D3 Z% k- h: j2 v% e: K# A
&gt; array1' i0 _4 ^' N/ |. [
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
  ^  C% z9 h" Y& M, f// 在头部增加元素' V3 w1 ^* W1 W! P1 U
&gt; array1.unshift(0)
4 d0 u) g' ~" p6 ^( T- `; j8
7 r0 F; N) j/ N/ c  g( k7 b&gt; array1
3 v( \7 C8 A( s(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% a  Q+ {9 P# k1 d

2 S& \4 ?1 B8 p0 S6 t3 b: k3 O//取最后一个元素8 ?: r4 @7 Y) f0 t; U
&gt; array1.pop()+ A5 y5 h! l3 q, ]7 P
'D'$ y3 ]& G# J# r7 d% s  r  |' p
&gt; array1
- j; y7 z; g0 L+ w" f(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ [0 s( }+ |% r: R
//取头部元素) k: H0 S4 S% |; B# }
&gt; array1.shift()
6 ~. \/ m4 P. v1 _$ K: x0
/ U( C. o" j. D( {6 m&gt; array17 D: u1 w! F' b  `- J) }
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  D# S0 Q; {* n3 a
% W( f) u5 \- H0 s0 N$ Q6 \
//切片, 从0开始顾头不顾尾
: D5 K) w, q! J" B; L&gt; array1.slice(3,6)% ]6 A0 Q' g+ q7 `: ^) s
(3)&nbsp;['a', 'b', 'c']# P, l3 k! H, |3 ]
// 反转6 |" M+ c7 ^) J* d0 B; `6 c
&gt; array1.reverse()
6 u6 `1 ?: Q0 M0 _(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
  r! I0 b! H: _+ L/ U. U( w// 将数组元素连接成字符串
+ P& e; [" V8 ]" j1 M&gt; array1.join() // 什么不都写默认使用逗号分隔
9 V8 U# g9 e/ q  y'c,b,a,3,2,1'
0 U6 m# [" T. N8 u, U5 y&gt; array1.join('')
. G3 W) `$ X; @) p7 d! {'cba321'# n/ Q5 t  s8 g3 w5 N6 C4 Q
&gt; array1.join('|')* h& s. d$ W* O$ ?" \4 l  e9 U
'c|b|a|3|2|1'
( O: I2 e* f, l4 k6 r& I7 {0 v$ B4 Q& u% }
// 连接数组
1 Z& k  Z+ I6 X, n&gt; var array2 = ['A','B','C']! p2 F$ H( i- ]: l: j* D
&gt; array1.concat(array2)4 t; [3 _6 w6 m% ]/ E  U- p
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
7 |) M* P7 A2 u( S$ W
4 v0 t" R+ c) ]/ g6 `0 F% }// 排序  p6 M# e* U, A9 v6 U% ~
&gt; array1.sort()# Y/ J7 @5 p7 B6 |7 N
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; T4 Y; h" e3 J- }; F2 {# [/ ?; ]
) D! _) _. R7 m5 g' t// 删除元素,并可以向数据组中添加新元素(可选)" \6 V) j  D& h' l
&gt; array1.splice(3,3)  // 删除元素- L4 S& A, G3 X6 J( q" q3 T; H. O
(3)&nbsp;['a', 'b', 'c']# k$ T  V8 X6 u* M* l  ]3 k# u
&gt; array1
' `; h# d' S0 j1 w/ Q( D(3)&nbsp;[1, 2, 3]2 g7 C9 l  ]3 _' X9 ^" Z1 ]  A7 L
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
2 v! ^) |! d) C! x" Q4 P5 M[]2 J' e+ k  W# ?
&gt; array1
* [$ `1 R5 m( a( s9 [& A(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
/ c0 r2 R/ F, C% Y. V' B. c; i& x$ y1 ?, k& K7 L
/*
% a- A/ e. Z0 i, V& rsplice(index,howmany,item1,.....,itemX)
, W7 [; X1 G- B" gindex:必需,必须是数字。规定从何处添加/删除元素。
( Q! v! P; A: j9 T! |howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。7 s; H- x$ d9 H  s. ]2 z' V' l
item1, ..., itemX        可选。要添加到数组的新元素: [( z. }) }2 M& h0 v& ?# P( M8 g
*/% D) k0 n5 T4 U9 D

3 ?  s) W2 Q+ i! k. i3 {& F// forEach()        将数组的每个元素传递给回调函数: ~5 h  ~; K- M9 ?) |) o( |9 @
&gt; array1.forEach(function test(n){console.log(n)})( A! v( F& F( i0 `& h( f
1% q5 V3 }/ r$ e5 W6 |' B  r
2
1 c9 [; b$ x8 O+ f 3
+ i5 K0 `3 C/ v" `" ^ A8 s6 r  {2 W+ t) g
B0 Y5 s/ d7 ^2 J8 a) w1 D: n
C. K0 E+ p% C2 b( ~- c+ d% A
// 返回一个数组元素调用函数处理后的值的新数组
  L) t2 x6 m1 s&gt; array1.map(function(value){return value +1})
# J- t2 S( `# ]0 B8 a(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']9 S  d5 ?/ a: s# m: w( Q
</code></pre>) |7 ^2 {, _. j8 ^5 f. r
<h3 id="24-运算符">2.4 运算符</h3>$ W* t! _5 t: v0 S4 A* z- {
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>% Y6 l/ R1 `( S* J! ^. O; u
<p><code>+ - * / % ++ --</code></p>3 G& O- B" d8 K; ]
<pre><code class="language-javascript">&gt; var a = 6
* Y  w2 R1 h" b" }+ i/ C4 j5 f&gt; var b = 3. @; B+ T' h  I6 d
// 加
/ H7 l. ]" x( D2 t$ |! x&gt; a + b
9 ]( V# g; u8 }9
4 z' O# B: R2 E// 减
$ q8 f4 n# v4 J$ j&gt; a - b( O; @, e/ Q: d# ^
3
5 I+ M3 e, ^& p: p2 O2 V) S% I& ?1 [// 乘' @! |* t; @0 M& l9 [) @
&gt; a * b
# c' V/ ^% U( ~, F1 R4 g18/ C* l- Q- B9 K
// 除( x- @0 P' t. C* ?" {5 u
&gt; a / b
* _1 ]0 ~9 p* v3 Y# z2+ z! z$ f# [) n$ w) `
// 取模(取余)
7 B/ n7 g7 x0 a! x5 x# L$ V# g&gt; a % b/ I' S" Z/ h- n( i- N
0
/ c" P0 E2 Z0 Q( S  \, R( [6 n// 自增1(先赋值再增1)
! Z0 d4 ^; M/ H. a. P&gt; a++9 R4 T9 _7 l* A5 S" q+ |
66 M* b1 Y4 L* o3 ^( j' B9 B7 G3 B5 E
&gt; a$ p% E& o6 x1 @0 z
7
/ W6 U( m+ U- P0 c// 自减1(先赋值再减1)7 E& Z$ w, _) |1 W2 b: O
&gt; a--
/ N" i3 g. S; K  D4 A  V( q7! x/ b. D! ~% }; z9 I( G( H: y2 W/ M
&gt; a
9 O( `& M2 [  t- ]3 ?6- h; J  l: k1 k
// 自增1(先增1再赋值)  K: T( I- I8 ^$ w
&gt; ++a0 |. Y# W& d8 s' M
7  p& |6 a& G- b/ n2 t, j9 Y- K# L
// 自减1(先减1再赋值)
" L" H, L( ?: G# Z8 d&gt; --a1 i/ z+ M. S/ n! g$ f
62 v( ~3 Z- Y0 [! g8 s/ V- t/ p0 Y
&gt; a
3 ^' }% a' x$ j# p) D: o3 p% ~68 c$ b5 ]% C. m
9 |" d- y. x: K1 p( U  n
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理6 Y0 _' I+ U% H% M
</code></pre>
: A7 |# o8 l1 U0 X. y7 }<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
$ C" k: g6 N, u: R<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>- K3 t6 `# R1 y4 g' n6 [4 O
<pre><code class="language-javascript">// 大于
4 Z5 U9 y- g) O$ [" J! k0 F( g&gt; a &gt; b
# W; F/ l- c1 [0 Itrue# e: \9 t( d/ L( Z
// 大于等于! p) `) k( I0 G- a
&gt; a &gt;= b
$ R/ t' J& u$ h3 Q6 gtrue1 }' h( L& U& h8 A
// 小于
0 x8 Q- J- J8 V+ p&gt; a &lt; b8 n& `( q; \' m4 w; O6 S
false
/ H7 d. u5 G$ ?' S// 小于等于
* ]2 q& K+ N- E+ B&gt; a &lt;= b0 Y9 o# c" e2 e, n! X1 E  H+ P3 j- _" c5 c
false
. P+ d8 N$ M" |; ~6 i$ Z- C// 弱不等于# G* q+ Z; ^/ r
&gt; a != b3 m0 w+ W5 M3 E+ o7 `1 x
true
- f* y" P( a( f0 U! h6 g// 弱等于1 r3 F2 F" z3 `0 O/ W; E
&gt; 1 == '1'! ~3 q8 j7 s3 E, f( h- B" u1 y
true
- n3 T3 ~8 \5 i* D6 M// 强等于
4 ~) i$ Y! M  p8 l7 Z3 c, l&gt; 1 === '1'3 A* h$ A4 t* a
false
4 C+ p/ y! B2 Y. x6 K// 强不等于
9 z1 [7 c1 T: g" y  H( e&gt; 1 !== '1'
  p: J& A9 U* L& H. ctrue
. F& u0 w  p0 e) W$ I% ?: [7 f! L& j$ Z( p; c' k
/** m# V& t' a0 i0 _9 m0 Q
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误& ~5 j& ^! _/ g5 \8 X! z
*/' N" h2 E; ?/ b& k
</code></pre>
3 F/ @( ^5 r9 r2 B8 D<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( w$ w( l' s' O' [6 s6 q8 ]<p><code>&amp;&amp; || !</code></p>  v9 V3 g( \$ q# f* X6 ~
<pre><code class="language-javascript">&amp;&amp; 与4 k+ c, t4 P8 ?& M- ]5 ?2 G: p
|| or 3 G, b5 r2 Z/ X$ ?! F1 N# |  U
! 非0 V3 V* X& [$ |  g$ |
</code></pre>, S9 u8 J4 x7 O; @7 |
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
3 e/ e/ F$ b  x. [7 z; w<p><code>= += -= *= /=</code></p>
4 m$ A& s; U3 m+ {% o* K3 d<pre><code class="language-javascript">// 赋值9 N2 x3 J4 J9 ?3 N
&gt; var x = 3
3 u; g( {) T4 b, e// 加等于; I' G  o% `2 }# Q
&gt; x += 2  z2 e1 r9 q% o+ e4 H$ }, w
5
& l. G  H" J) J2 W# E3 W// 减等于1 _% p/ x5 q3 C( j" O  Y, v+ h9 b
&gt; x -= 1! {( b" `, t  P0 k( @, t7 a( Q9 t* I, S
4
  A6 ]; ?$ c5 i- Q0 a6 N/ ?// 乘等于6 u9 `& Q, r* h: E. l
&gt; x *= 2! ?9 |7 I& V' h) v% b- K: _2 B
80 \* C& w' g5 |3 F! Y
// 除等于/ d; Z9 f) O* m
&gt; x /= 2
0 }* b8 L5 o+ [3 f& P4
- R* {4 @6 {* F4 w: {1 p/ c2 N</code></pre>
5 P( i' s" O# J5 Q* c8 F<h3 id="25-流程控制">2.5 流程控制</h3>4 m/ w4 y  e1 ]7 D
<h4 id="251-if">2.5.1 if</h4>2 e5 ^/ }) ]$ y$ t6 h7 {6 B
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}! \7 J; p! W9 u3 Z7 y( ]4 x0 ^
* V" Y- ]  J4 U* G/ C$ T
&gt; var x = 3# f$ Z5 i) ~, e8 s4 C0 [
&gt; if (x &gt; 2){console.log("OK")}( Y3 p- x/ }( ^; _
OK( X4 D3 X" s2 L
- w( d# O0 _) `$ }9 h
2, if(条件){条件成立执行代码}
1 k' f6 k# W+ E$ P% {7 @- `        else{条件不成立执行代码}* m. G' E8 K4 v& p: s
" G8 M& `' X- I9 G) [
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}- J- |+ H- I1 w. P- c! X+ \
'NO'" x& l( ?. t3 s' n( y
/ G1 y3 R2 T- S6 c' {
3, if(条件1){条件1成立执行代码}
& I0 W! y+ i. y5 ]( D        else if(条件2){条件2成立执行代码}. t  K; J7 v- b* e1 J
    else{上面条件都不成立执行代码}
3 H5 l- T; g( \" u  t
1 `  _8 ~' d& e. q4 \6 i$ z1 L&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
. _  K  c# u4 ?+ j Ha& C+ h. U, X; N+ ^5 ^# u0 G
</code></pre>* S% ?! V/ S1 v% P# m3 c, d
<h4 id="252-switch">2.5.2 switch</h4>& R4 D: {& W8 j3 v) U: X. Q
<pre><code class="language-javascript">var day = new Date().getDay();; w5 c2 d/ H- n  V3 q; g
switch (day) {
( z. Y7 `% F1 S- ~* Q, e/ R! V  case 0:3 `& q; [8 g% E2 y5 j2 {
  console.log("Sunday");. N" T. H: E( I; z  q
  break;
, l  v2 B  g# ~( M  case 1:
! m/ G5 o7 H3 X& r) j  console.log("Monday");) B2 C0 M5 e3 z( g- Z
  break;
& @6 F0 ]7 x( t- X) R7 vdefault:
% _7 e' D' N/ r/ O! X  console.log("不在范围")5 D" i0 F3 R+ E
}
9 \4 ~4 L) l  R& H 不在范围+ C  y8 n# l6 b* Q' `# A/ V  g
</code></pre>* z2 i- \7 B; a8 V; o2 `( E8 d/ k. d
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
' _  W1 |- P) k6 O: x+ b3 b; p: V<h4 id="253-for">2.5.3 for</h4>
: Q/ `0 O, P9 M$ p<pre><code class="language-python">// for 循环% l% J$ \6 I9 g; t3 P; q
        for(起始值;循环条件;每次循环后执行的操作){1 B- L: F; p' |( ?7 g; d& v5 V
        for循环体代码- `) A) T1 k8 L, x" Z
    }
5 g  k( g) w" ?0 w4 K2 g2 ^" X  Y' ~, a3 R- ~
for (var i = 0; i&lt;10; i++){, Q; H3 H9 J4 W6 }/ A, ^
    console.log(i)
# @! f% f; O5 `6 n- z, c}
+ t- }" U- l. T4 |6 Y- H        0
* {1 \: m+ L- ~        1; \6 F* _. l1 X" ~0 H/ ^. \% P
        2
# Y/ }& W) a9 ?, \' V! M        3
, e$ |/ F0 q. @        4
7 K2 I  V# Y# ^5 @4 a* h2 C        5
) B$ R* a  z9 T/ |) O        60 _% A# [7 r6 a7 ]1 }# B
        7* N2 N3 ]* O/ n0 c- N8 |* J
        8% x. F& Y; f2 Y0 t  P! i
        9) ?% J9 S; s! D. }
</code></pre>; L1 v* W3 N3 f( `( n' Z. B
<h4 id="254-while">2.5.4 while</h4>
/ o# Q8 w! L) D  Z2 d<pre><code class="language-javascript">// while 循环. K- o" a! @# t! ]
        while(循环条件){+ s' o2 g+ S  R0 G& f; g, S
        循环体代码- f/ e# [+ x& M
    }8 u6 V, n3 Z/ L
/ D. {: L) J) N9 r3 J
&gt; var i = 0. k/ e( Q" W  K. L/ y$ u& E  L
&gt; while(i&lt;10){$ t% P, `! M& `" v6 ?' M% m, u
    console.log(i)% O7 N5 N) c0 W, o5 X
    i++
) U. x0 Y4 s  R8 A5 K5 W}
, ^% A& [2 N$ Z1 ^9 B 0
# ~# E& {% p$ c! m  }8 z, O% C- C 1) t6 P& a% S! d, u1 Q. C8 w& O4 [$ S
23 ~  G* o1 l9 W9 t; a
3
% ~9 @( `6 O* ~2 u1 @ 4* s. Z2 ^% J# i% U
5
; y' r9 J  x) v% ? 6
+ g7 j2 _) E. e8 f; ] 7* a6 x) B2 q) C1 _+ N& ]9 K
8
3 {/ f0 A6 D" k4 H 9
) x7 I$ a5 E# t2 I% m; I0 F( I</code></pre>3 `9 O+ @: o& k/ C( D
<h4 id="255-break和continue">2.5.5 break和continue</h4>
4 e7 Z/ I+ a/ b+ k8 W<pre><code class="language-javascript">// break
7 k, _& K; c0 v  L, Pfor (var i = 0; i&lt;10; i++){- r6 }5 I5 p  L
    if (i == 5){break}7 A7 p/ Z/ M* [: X* H
    console.log(i)$ H! l, h4 x2 w  n, }! C9 B; u9 @
}1 ~% Y. m4 S" c) ?3 e' D5 u) w2 d
0
3 z* M. r5 I3 ~ 1# j5 v' a9 H3 f$ Y5 A. f7 k; D
2# N/ A; r0 |( L- t$ d- b' e) b
3
' Y% w1 S6 i, ] 4( a+ Y7 Y' w. J5 M
// continue
' v6 \& E0 J8 D; ]  D- P( nfor (var i = 0; i&lt;10; i++){0 ]8 e  }5 }; l6 T
    if (i == 5){continue}
* @  p* `. ?3 [0 }3 X    console.log(i)9 [# }& i4 ~% V" c$ z7 G
}
6 l# r# I" c' f( I 0
1 ]/ t4 Z1 H6 \4 n6 o 1- A" w- i( S5 @: f3 ]6 ]
2
- s% l* }- ]4 T: Q. ?& Y3 h. g  e 3
4 Q2 H4 u  n5 D/ Y- ^" z 4& h, z- a& ?$ @3 k
6
% ^$ a0 V$ s2 M& p5 t9 w# K& w, O 7
+ M0 }+ f0 ^2 l$ p& S  J( X& R 83 n9 a# Z: m$ [( s, d# K
9
1 g+ u* d* I3 e
8 e0 f8 l# s. N/ o</code></pre>; P5 |* A# c$ ]- S1 E; `
<h3 id="26-三元运算">2.6 三元运算</h3>
9 J' q+ Z, G  d8 I, f+ ?; B! ~# o<pre><code class="language-javascript">&gt; a
5 T# t- J  J! w+ L: C6/ T& {% Y0 g) ?3 h% a
&gt; b( A- X) Z6 O) T
3  V4 g, ^. b( B+ r

8 K, p2 A  e7 b//条件成立c为a的值,不成立c为b的值
# F9 Q7 l! N$ s8 J: `$ s) `7 @1 Y* q&gt; var c = a &gt; b ? a : b* z8 O1 M4 z* F( b
&gt; c! g" R( J/ B* _6 W9 o* T
62 F( j8 Y1 X) c& Q+ L
5 U( o$ p/ u; [+ q$ F+ p7 r
// 三元运算可以嵌套; b6 {2 F3 O  ?1 Z9 f- W
</code></pre>( S- p6 `& q# y
<h3 id="27-函数">2.7 函数</h3>( _6 m2 e. i" c. c
<pre><code class="language-javascript">1. 普通函数2 {0 `9 I* p& K9 K
&gt; function foo1(){2 q; V& i) T+ ]) C/ t1 n8 w
    console.log("Hi")! ^. d5 g  ^2 B1 C8 ?% l
}
; t0 M: L/ r; f5 O  C& q, I! G, u" J3 q$ k
&gt; foo1()4 ~7 H! ]* C! N$ i7 a
        Hi# e; x% l; |$ [' ~5 U6 W
2. 带参数函数$ [5 m) ~" ~, |7 Y  p0 S0 f: E4 E
&gt; function foo1(name){; A2 E2 ~; U; p4 y& \) X; ^
console.log("Hi",name)) Z. i- W( b5 D  B$ A2 h. u
}# q9 u, C8 _9 o# f6 [5 B; U
: e- z3 w/ i0 O/ g& e) m  _2 c$ d
&gt; foo1("Hans")5 }+ ^( b. c9 S/ s" A  P
Hi Hans
& s# ?: H3 v& \3 M* y
1 H9 n& B  a! U" i9 a6 ~/ ?( J&gt; var name = "Hello"8 B) H8 Y8 M6 M4 M& ?$ m4 N
&gt; foo1(name)" |) D5 \7 T. \1 s2 d, B- z# Q6 N
Hi Hello* W! x- x7 x4 E; u' ^
% \" ?  j, a; Q5 C: ?" p" S: X
3. 带返回值函数8 u0 L) s+ O7 e  U
&gt; function foo1(a,b){
3 w4 a, ^/ r' G4 s        return a + b   
) A! F& q( i6 L: u; ~}
  Z8 q1 [: w) _1 ^3 z&gt; foo1(1,2)
  R- y5 Z% }+ G3
. H8 Q! {' d8 m9 U( @* X) t2 ]+ G: I&gt; var a = foo1(10,20)  //接受函数返回值
" e* ]5 y9 E* N+ u- G( n&gt; a# P. f+ b3 Y. Z: ?. O7 k
30; s- _, g# T7 E9 I/ K4 h# U. ?

: ]0 ?4 `" G/ i& [+ ?4. 匿名函数' F" q& Y, l1 c2 _* w8 X: F. _2 m1 ?
&gt; var sum = function(a, b){! {- X  ?' i9 G% M$ ?* }" G
  return a + b;
8 E; l) Y2 }. G- w  L}+ D% g* `, M/ r" p$ V+ q
&gt; sum(1,2)
0 k/ F% W" ]' q: ^6 |$ B36 x3 \4 i& p% [' Z( H% x1 u- A9 @
0 E% ^/ U+ W3 P7 ?
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱  C7 N9 h" r" Q  k9 ]# {, j
&gt; (function(a, b){. s4 J6 o) ]% S+ B
  return a + b4 z3 C, I, ~: _, H
})(10, 20)# F+ \+ H8 ?  a  ]1 f. J
301 G( r8 D5 Q4 V: J* F  x7 i

, O8 a& n* r5 J+ Z/ u& J. j9 W, g5. 闭包函数  t. o, A2 |: k1 }; Z" v  ~
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数4 D5 l& @0 r  L; B+ ]- ^2 h
var city = "BJ"
# [4 v! v2 Y3 e- bfunction f(){" |& D" g1 F, o: M, Z) A. I' T
    var city = "SH"
: o% [0 ~+ A( n1 S    function inner(){
9 Z) E  w5 [2 g; }* `% L3 p0 }- x        console.log(city)# O. Z7 q. u/ [5 k, h$ ~
    }
) b( t' j1 g% ]! A    return inner
4 o; K7 B' U0 K0 ~* F}& e7 X& B) K3 c8 L1 a* F
var ret = f()
& M$ `7 e9 r" d& L" u; q  Kret()- U6 a- G8 k, X4 h
执行结果:
1 k( Q. S4 r8 YSH, D9 \, ^* V0 t+ W8 [* w: `

( \! g7 }' R& ]! F) c1 u. u# }</code></pre>
! v: y: B0 p7 i<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>9 m& A6 m# p/ i* E0 J9 A
<pre><code class="language-javascript">var f = v =&gt; v;/ k; ~/ S! y, V4 o( K& _* l
// 等同于/ g) [' t& r4 x9 `
var f = function(v){
+ U5 P0 }5 k3 |7 O3 c  return v;/ {3 P5 b1 y$ T! K/ c0 I
}
7 Q$ `: l5 o1 l" \/ e</code></pre>+ S% g6 r: P1 E- O! D  B
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
' d8 \7 C1 P6 f) N& @$ W<pre><code class="language-javascript">function foo1(a,b){& u# @* M& Y+ L& x
    console.log(arguments.length)  //参数的个数
& e. v# b9 \6 I1 F    console.log(arguments[0]) // 第一个参数的值
7 p* V9 J, x3 d6 q: A% ?        return a + b   
. z* K* [, T) f3 e: P}5 l* b& O. w" i# z; S  l1 a
foo1(10,20); w2 I8 H+ F! }0 u. S5 u
结果:" B" @4 D0 O, `/ Z* l1 C
2          //参数的个数 ) F1 R  C1 U& X4 D
10        // 第一个参数的值
- u8 j1 z/ p& t7 g' G' Y$ ?30        // 返回相加的结果; Y$ p+ T% _! U, N
</code></pre>
- ~, Y# l0 q* D9 {0 T: ?<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
/ w& ]( b  u7 L+ K<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>4 [4 C; C2 W5 \
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
6 j* `8 |2 h! C( E5 \<h4 id="281-date对象">2.8.1 Date对象</h4>" C% z7 I0 y7 a! ~! T/ Y
<pre><code class="language-javascript">&gt; var data_test = new Date()
9 p: o& \1 i1 p- a, T&gt; data_test
* l7 N- Y) w# ], W/ C4 I" yFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
: Y2 F9 v8 a0 w, G5 ]&gt; data_test.toLocaleString()
  ~" ^! |$ p& T" @'2022/2/11 下午9:44:43'
1 j( Y+ O, G  D4 k# |, I% `
/ e! Y; i( Y$ N) p2 \+ Y) e) ~&gt; data_test.toLocaleDateString()
/ C7 H- O8 |4 k) z# I2 K'2022/2/11'
/ B: P1 d4 P2 r
7 Z5 _- m% l1 p' v. F) K" X( A&gt; var data_test2  = new Date("2022/2/11 9:44:43")0 |" E% b- y1 g/ N' r) o
&gt; data_test2.toLocaleString(): q- L; r- {: G9 k" D
'2022/2/11 上午9:44:43'! }+ s) r5 H$ Q; u& g
- ]  w8 d4 |- n8 ?5 B, X6 a7 m9 ]5 v
// 获取当前几号
* l; d& W8 y9 ]$ w! T&gt; data_test.getDate()
! U8 m6 V: A! J6 }8 j6 S11$ L5 e  r% X: u" y+ @, ]
// 获取星期几,数字表示
4 K& B# Q% B% K% h$ |&gt; data_test.getDay()  
1 N# M2 j! k  W0 K) h  {5% T+ i: m: E2 m+ b1 S+ ~
// 获取月份(0-11)
" T# O/ O) U4 Z+ ?9 f% J&gt; data_test.getMonth()/ U2 _; t/ m& Y2 G
1$ H9 z8 J$ D8 r' i
// 获取完整年份
$ a$ G4 h+ w; x/ p6 V&gt; data_test.getFullYear()
7 k& J- a% F: y5 W8 ^20226 e: ~# ]# y& S0 o. P
// 获取时- n8 A; a; ]  y+ {, Y
&gt; data_test.getHours()
) G6 z, d! h, C" g3 h213 Z! J* q2 u" Z) C4 Y
// 获取分
, I- L6 M1 h! K# X  O&gt; data_test.getMinutes()
! O' e$ e* G0 m/ A* ^, \, P: f$ c44
) J$ ~& d+ `5 `# r// 获取秒; ?8 F/ D) M: h+ X5 y( e; p! m
&gt; data_test.getSeconds()
+ j; Y/ ^- M8 C( I' U3 ~43
6 n2 m! K7 [$ h4 O// 获取毫秒
% Z2 m7 N6 a7 ]+ C, @& g! E. y! e&gt; data_test.getMilliseconds()9 m' _9 w! s' L1 |$ U
290
( L2 \' Q8 l! ~6 p/ h  z3 E5 b, v// 获取时间戳& t: [3 c/ S( S) w# U# H4 @
&gt; data_test.getTime()' B9 V' ~7 k- A
1644587083290
& l7 x$ @: L" `9 n) s8 l</code></pre>4 C# F! Z  ~0 b( s$ b5 U( B
<h4 id="282-json对象">2.8.2 Json对象</h4>$ T6 ]7 @2 m7 [( W
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串! S; \( v' |! I7 D3 e. h
JSON.parse()  // 反序列化,把JSON字符串转换成对象  _+ t. x& R. Y0 K2 L
  o  \: l( l0 u% o0 X" s+ c' H- W3 x. x
// 序列化
( s7 L  M9 I- [; f&gt; var jstojson = JSON.stringify(person)
8 l  R' a/ U) k&gt; jstojson  , X) Y$ b) U% p7 m
'{"Name":"Hans","Age":18}'8 i$ b' X1 P% j, }
+ x+ T. A- Q6 Y: P* [* C
// 反序列化
: n/ j) {# v$ f1 ~&gt; var x = JSON.parse(jstojson)1 L) D) \* I6 C. Z# H3 g: T" w+ F, i- u; d
&gt; x8 v  I9 c. k, w% t$ s
{Name: 'Hans', Age: 18}
( s0 j3 S$ S' Y' b&gt; x.Age3 a# q7 K8 ^6 L5 i$ W
18: F8 N0 B# d( A1 \
</code></pre>
$ i4 _# b. U; t, U<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
7 B7 \0 c* T% w- H<p>正则</p>/ C  E+ T$ ]! r
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
9 N. \& r0 y# t, ^' b9 j7 e' o&gt; reg14 E* L6 p7 `+ r( l2 R# @8 q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& {* _$ M) d# Q+ x: M8 d&gt; reg1.test("Hans666")( J& z" i2 l; ?" R8 d
true% u" r% T+ o6 K- u9 G1 t" P6 T- j

: b  |! y# }: H$ m+ P&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/5 n, _8 d, |5 ~( r2 ?# T
&gt; reg2
+ j) |" E. n4 A* s4 ?, [/ m/^[a-zA-Z][a-zA-Z0-9]{4,7}/1 l7 `( R' X+ O' A- X' J0 Z
&gt; reg2.test('Hasdfa')
7 v) m6 h/ V" Y- u* j  gtrue
6 Y+ _6 y, p4 q! D9 u7 L% s/ f
+ f6 @& y$ c. m4 {4 W全局匹配:; M# a% G6 [; F# y/ S3 J
&gt; name$ e+ H+ ~# |- b  R
'Hello'5 Q0 O* {7 A8 {! f2 E7 i2 N
&gt; name.match(/l/)
/ Z; h2 j6 I4 `1 E['l', index: 2, input: 'Hello', groups: undefined]- u) Q( Z4 q4 H7 e

& k; o" _7 K5 P( a8 J3 P2 [&gt; name.match(/l/g)
3 o# A. f4 x7 ^  R(2)&nbsp;['l', 'l']  o4 g0 |$ H0 V6 D7 @+ }
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
  i% N& b' G- U" D# R8 n! P' e
- Z/ e/ ]' A% U2 O6 R( b) R全局匹配注意事项:
, Y/ z! n0 Q* |9 J&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
; t. Y& D$ k( B4 {) M&gt; reg2.test('Hasdfa')
( m) E# {! E5 y7 ^$ r7 |% Ptrue$ J! [5 K, o- s& e
&gt;reg2.lastIndex;
8 [+ M9 f8 z" y6 G1 A6
+ ^9 N6 l$ \3 s, ~1 F' P. \- W&gt; reg2.test('Hasdfa'), d% }1 c+ |% m+ N
false
, x$ F- v' D$ [2 ~  M5 \2 s&gt; reg2.lastIndex;
6 x7 ]7 T. F0 S2 A; I4 J08 j! e5 |& s! ^# a7 g3 G' x- c
&gt; reg2.test('Hasdfa'); K7 M& e0 W* U- S4 H
true
/ n6 N( L3 A  R8 d&gt; reg2.lastIndex;
& B1 C4 [, ?7 f2 z8 B- c6
- R6 x2 n9 W8 B3 h4 @3 h2 ~$ p! W; C&gt; reg2.test('Hasdfa')$ q' O& M. u3 h9 \+ p+ G4 m
false( g0 I' Q8 B# i4 {6 s7 R
&gt; reg2.lastIndex;
% |1 {- w5 `. ]( M8 I0
1 `4 d; q) c/ q& P1 O// 全局匹配会有一个lastindex属性
8 _+ J/ Z. w# h% ?&gt; reg2.test()1 k: L. c& l1 z  g0 X: Q4 Z2 C
false% C# N2 x" ~- Y5 W
&gt; reg2.test(). g- I  m6 j" ^( J6 m
true/ n% I3 P1 P% [- t- O) j, l
// 校验时不传参数默认传的是undefined
( j+ K% {* B. I; d</code></pre>+ q2 A1 u# i9 r+ w  R5 ^* a- p% b" A4 D8 ^
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>5 q4 {2 [, r$ X" ?6 n) X
<p>就相当于是<code>python</code>中的字典</p>
. h: r5 m6 V9 a3 N  W<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 }& H, F; A: Q; ~&gt; person
7 T, z1 [- D' j  [& u{Name: 'Hans', Age: 18}
8 `6 H8 Y- f# j1 d" U&gt; person.Name
" ~. G5 z8 Z* h: R'Hans'& E& P% c6 p' j0 ^$ i7 u
&gt; person["Name"]6 P; A2 G1 t2 `+ E! a
'Hans'( ~' Z6 U, l- F" h  G! \% n# n9 _
6 J' Z3 h$ ^9 R
// 也可以使用new Object创建* b' A8 U$ `' `7 A
&gt; var person2 = new Object()' A  h! [$ T' q* h4 M  Q! F
&gt; person2.name = "Hello"- r" T+ Y+ _& s. o- o
'Hello'3 x% ]7 I( T( s/ B' T
&gt; person2.age = 20, i! P+ |$ \8 T" @; W- r& E; T1 C
20. O* o4 Y5 c: X# ]$ ~6 |. B
</code></pre>- }0 f" O& u1 ?8 c
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
, W2 H) t$ |' B: ]<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>9 J' ^" V' |: n$ I
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
8 Q) a8 z$ l( s) V) T<h3 id="31-window-对象">3.1 window 对象</h3>
- \( e+ S( s, k5 P* z8 J<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>5 X% q) |; ^! Z, t( c
<pre><code class="language-python">//览器窗口的内部高度
& j. a8 q4 V2 X" V5 B; ]( Vwindow.innerHeight / h3 _% y% N' \3 H0 [2 I2 @
706& c4 Z7 O8 @' c4 B. v, V8 [
//浏览器窗口的内部宽度
. t6 b7 U/ ^# l2 b, ^6 Ewindow.innerWidth% Y' Q. Y- q  \: x
1522$ d$ \' V2 r0 h+ s0 Y$ M. L
// 打开新窗口
/ N$ K5 E# k) W3 Q; K! N1 swindow.open('https://www.baidu.com')
. W  T3 J3 y, j& T0 e% H& CWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
0 J3 N) Y2 y" a  J! w0 ?% d4 e/ F// 关闭当前窗口5 A' k( U' D# X. k+ t
window.close() $ e8 k4 n$ l7 A6 X) P
//  后退一页4 T1 I" F* T8 @- y( r0 D, r+ f
window.history.back(); F, O* C( C; A" W7 V# z; D) X; |
// 前进一页, M% R3 Q9 m" M+ r3 e! }5 Q) S
window.history.forward() & F' h3 P% S( \# \, u+ t% X
//Web浏览器全称
9 K8 O  o+ {# W% ?  u0 k+ swindow.navigator.appName
& \+ V3 z3 j( `0 T) T'Netscape'
& Z# L2 |* I7 }" s3 I// Web浏览器厂商和版本的详细字符串/ s. F( T/ z6 ?8 M
window.navigator.appVersion
$ g3 S) H. s0 U& J: Q3 ^4 F'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" u: k  f( A- L. D; Y) o/ A& J// 客户端绝大部分信息) M' R& o3 H* t5 u6 O6 V+ D
window.navigator.userAgent7 j7 h8 l* s. Q$ m: J+ {5 g
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 W2 S3 h/ F) x5 |
// 浏览器运行所在的操作系统
* a2 o% n1 ?: L1 p" _4 Gwindow.navigator.platform. `; ~4 }+ V! ^/ G& w3 I! b
'Win32'7 I8 A0 f9 p" j4 d1 M* X: [6 p9 j
3 p! e+ X* h7 j! u6 ?
//  获取URL; K3 f% Q2 \; F
window.location.href; N2 I: X+ x! T1 K4 p
// 跳转到指定页面% d3 B( o8 d3 T! E% B- c
window.location.href='https://www.baidu.com'3 H5 G3 B" t# F1 R2 B6 r+ n2 d5 ~
// 重新加载页面# @5 E' ?6 T2 Y0 |5 L
window.location.reload() 0 D' P) P. M. `  F
</code></pre>' i, z! [/ y, q( p
<h3 id="32-弹出框">3.2 弹出框</h3>, b- b0 Z- K' z. G+ O/ U1 a- @  ^
<p>三种消息框:警告框、确认框、提示框。</p>
4 t" F9 B9 m( m. H<h4 id="321-警告框">3.2.1 警告框</h4>4 a, S# T) d/ d# @# W  R0 [. v# W* I
<pre><code class="language-javascript">alert("Hello")
8 N" {( r! n" ]0 |$ a; g</code></pre>
- V( C: ?/ j, i$ ]+ w<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>1 u* ^- Y  F& M, \1 B  ]0 V! N- ?% V
<h4 id="322-确认框">3.2.2 确认框</h4>
1 f+ ?2 M5 b. h$ C+ I<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
% c7 _7 `7 C; V0 B6 B7 {% J<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true; v( M/ g# {, H' h6 B" q1 f" x. c
true
$ v* H8 k8 o9 y7 h- h& L&gt; confirm("你确定吗?")  // 点取消返回false
% ^" E9 V, y, g( Z& d0 Pfalse
7 X+ Y0 `0 N4 i</code></pre>
* A7 D  h  Y" C<h4 id="323-提示框">3.2.3 提示框</h4>; u0 [0 R4 S5 p& h
<p><code>prompt("请输入","提示")</code></p>% h* @4 u2 h! y2 H6 q  v" P8 J
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>( h! U' i0 W( M1 N
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>  s& j) @; C0 M+ z* j8 S1 _1 X
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>/ o* K/ X; m% v6 Z/ F2 S
<h3 id="33-计时相关">3.3 计时相关</h3>
- J; o: `! y: }; T4 K- z0 V3 A8 S<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
# y* R- F. A+ B3 n& d<pre><code class="language-javascript">// 等于3秒钟弹窗+ F6 Q) M! k* o5 w9 O9 z
setTimeout(function(){alert("Hello")}, 3000)2 l3 t* E8 U, ^& h
) o0 v/ |* V6 m8 [
var t = setTimeout(function(){alert("Hello")}, 3000)
! r. w4 {) q, e' h$ S2 S' L, h9 W, s" [0 t6 A" K
// 取消setTimeout设置; e) B3 ~6 o9 U" o" t
clearTimeout(t)# ^; ~3 D8 U* Y
</code></pre>" @  V3 ^' x! d" ]8 b% Z. v& i) w
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 ]1 h! s# d. Y" `  }& C: k<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
6 {: y" Z/ [7 n5 c. w& i<pre><code class="language-javascript">每三秒弹出 "hello" :
2 C. i5 A* a$ c) LsetInterval(function(){alert("Hello")},3000);
6 q: _  M6 r0 Q8 }0 b) j</code></pre>' J2 c# f+ P, ]# z' F) Q
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
+ I  m, A+ `; r& G( I/ ]<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);) w; v% Q1 W, V8 I" L
//取消:2 g4 X, w' G% p4 v4 @
clearInterval(t)
' R6 O2 {/ Z8 _2 U1 @</code></pre>9 [1 g6 i# K$ u; z* w
- t2 M. B) ?$ |; w
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-24 03:41 , Processed in 0.077522 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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