飞雪团队

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

前端之JavaScript

[复制链接]

7953

主题

8041

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26189
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
9 l# z3 a  o) v# K  X
<h1 id="前端之javascript">前端之JavaScript</h1>
; ~  s# n& p2 @* w( l! V<p></p><p></p>
8 D/ d2 B2 \$ j; T7 [<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
& X# m8 P. h, `+ d<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
- g7 J2 r- \1 Q8 V8 ~) C5 V5 J) ]它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
& L1 p9 T$ M6 }4 U, `' t它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
& }" A8 ?- N. h% ]$ B它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>2 P6 e3 T1 k' c+ t/ f
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2># R2 K% ]8 v6 |8 L* d
<h3 id="21-注释">2.1 注释</h3>" J- h. s# R: e" y6 J+ n
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>& e+ f, a; L( |  u
<pre><code class="language-javascript">// 这是单行注释) x1 M9 S* h# }9 x, {/ s

* p( l4 P- c, c6 B/*0 n$ t! x8 y# T; `5 F
这是多行注释的第一行,
. K' P* G& \: @% R/ w+ {这是第二行。
) I- b8 d% s6 h*/1 n1 K& A( f: F0 E' Y  N2 o3 z9 w9 L
</code></pre>
  F1 d2 ?' e6 `. v# o+ _<h3 id="22-变量和常量">2.2 变量和常量</h3>
4 v5 ]& Y+ ^( Y<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
7 n+ |" N" B8 r/ V2 Y  v<ul>
. r5 R  ]5 e5 u3 R<li>变量必须以字母开头</li># S) C( [5 h' @9 L9 F* X; m
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. f9 I/ r% c/ h/ ?  e) U<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
. Y) X# b1 {. V$ m( V</ul>( W$ Z7 g5 s8 m' O) N  Z3 G
<p><code>var</code>定义的都为全局变量</p>
9 `/ ^9 H2 d8 z' d<p><code>let</code>可以声明局部变量</p>
9 ^& E1 m$ }" F  E<p><strong>声明变量:</strong></p>. X, a( X( B* i7 x+ |
<pre><code class="language-javascript">// 定义单个变量& J, B. E! [# Q# p* N7 B# N6 \: ^5 Y
&gt; var name! t8 z* W6 o: A
&gt; name = 'Hans'4 f6 c( G1 W  a9 i
//定义并赋值
: Z6 U6 e: T9 c# E8 q&gt; var name = 'Hans'  d& D3 B# P5 P% \0 Y# |' N  l0 d& I! C/ K
&gt; name
: x  r! N5 O; L; v: g+ k'Hans'8 J) A; m( i! S* Z$ C0 A/ N' I
, S8 I- v3 K/ x4 A: u' S
// 定义多个变量
6 v( o$ J/ P/ s! c! x) S: `&gt; var name = "Hans", age = 18
, P, l5 K2 A; J5 z$ l1 L' v. z; L3 v&gt; name
; p" f; w2 B6 m! x4 Z2 {'Hans'5 P( Z* B9 {$ z" d
&gt; age1 I" t- F- n$ m9 A
18
/ P6 q; g6 _0 q6 o$ O  n! u  p% U8 S1 @$ u5 t: d5 I& }
//多行使用反引号`` 类型python中的三引号
9 g2 x1 n4 s" d5 e6 @$ B7 L2 z&gt; var text = `A young idler,& \1 e/ O! {6 D+ j' ?( ^
an old beggar`- v/ a2 ^$ ^! N/ |7 h
&gt; text. T/ k- E2 O3 r+ B0 k$ o  C, A. e
'A young idler,\nan old beggar'0 m( s0 {/ |/ J0 T
</code></pre>; t' n0 [8 g0 J' p
<p><strong>声明常量:</strong></p>( D! M+ ?' r, n1 {0 D" V$ R
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>9 `& k/ N1 `( n3 q" m
<pre><code class="language-javascript">&gt; const pi = 3.14, l; h  y& }8 C; t
&gt; pi# c2 _' B5 ~7 ~$ p& e% U. i5 u% G
3.14
" p% n, D+ A" v' D1 R! G3 D&gt;  pi = 3.01$ C$ b! ~1 c( e/ \0 k* }3 O6 z2 q8 K
Uncaught TypeError: Assignment to constant variable.
9 l# J# y; p5 p# D, A2 f    at &lt;anonymous&gt;:1:4
% R- ]6 D# I; v& N8 _4 g- Z" a3 M! V8 R6 s# t, H3 g, R* F7 a
</code></pre>
: }3 K1 W$ p' ~# A<h3 id="23-基本数据类型">2.3 基本数据类型</h3>7 Q2 Z0 R+ Z& X' _& }2 M
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
* K3 h; Y! p* O% Z4 t' q' W, ^<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>/ `7 m( a7 ^8 t$ e# D1 y" B' }8 U+ `
<h4 id="231-number类型">2.3.1 Number类型</h4>
$ v$ z4 d( A$ A) A6 u/ [0 B<pre><code class="language-javascript">&gt; var a = 5) x) S- F4 W! d" T! i( r% x
&gt; typeof a   //查看变量的类型  % T3 k, j+ F5 y2 }
number
0 r2 s3 s+ \1 U9 P  w! V* W2 e. e0 r" e) `- ~$ a2 O2 l5 d; {3 s
&gt; var b = 1.3# O8 I7 i4 ~3 c8 l) B. g
&gt; typeof b5 y' c' `7 w0 q' Z
number* B" Y7 d7 _' X$ O, {5 V$ U
- i7 w/ b% a6 J  R1 G7 S9 R
// 不管整型还是浮点型打开出来的结果都是number类型# E  S* T# V$ q2 @

3 p; Y' l( q3 r4 U$ o( ]/*$ c$ V) H- v) J$ C
NaN:Not A Number
" t) c/ s7 e5 R" y! `NaN属于数值类型 表示的意思是 不是一个数字, O# j# p+ H9 R: X. U7 \
*/4 E% R* ]3 g6 b- v6 G1 Z
# ?. u! G: y( Z% w
parseInt('2345')  // 转整型
7 r5 L# B; H0 Y2345
/ z4 H0 D  q0 k- D4 K" Z3 q% AparseInt('2345.5')+ ^% S$ I& ]3 m; E6 [3 G: ?7 [+ |
2345
& ~% m0 Q9 ~9 AparseFloat('2345.5') // 转浮点型, m+ j6 W  r1 k5 T
2345.5/ c/ d* D5 ^7 Y9 E& J
parseFloat('ABC')5 s1 j. {, |8 e! D- l* P
NaN
! ]& N! F0 |- |$ ~7 rparseInt('abc')
9 l# b3 _5 N" g& R. c0 @. BNaN
5 H* n) v& C/ A1 {8 `3 {</code></pre>
( n# e1 S4 F" ^; {<h4 id="232-string类型">2.3.2 String类型</h4>
  J& O! t. x5 V. `<pre><code class="language-javascript">&gt; var name = 'Hans'
, @) W9 H/ f9 J% f&gt; typeof name  V7 u2 j  W, T: Q" I5 X
'string'
1 J! P' b- n0 N9 m4 g/ j! X$ u6 ]
" C+ x' E) p' L+ i" I//常用方法' M: U1 m" Y1 f7 F4 i, u
// 变量值长度- Z: R+ v5 f6 e, u+ Y
&gt; name.length% }. @+ w, p6 L/ ~" F0 a5 }. L; G% R
4
$ r5 D0 `- W6 W- ^# L* K7 ]( W1 P// trim() 移除空白8 n+ \3 h) l. m/ K' }4 g) \+ S: w
&gt; var a = '    ABC    '1 c1 ~$ T" \# D: ?$ Y- H
&gt; a
# }1 u! Z3 o( A4 W'    ABC    '( \) L3 e  a* y5 V4 V; a8 D* e
&gt; a.trim()
$ ?  c6 }+ V( Z* l( J'ABC'! W7 z7 x" n. s* F
//移除左边的空白7 |: F1 W8 v6 F( Z  _9 V) K; L
&gt; a.trimLeft()) O8 X$ R" X' L6 }% B
'ABC    ', H2 K9 D" b9 W0 r$ _
//移除右边的空白
$ v2 b2 L6 l9 P3 ~7 l: t6 Z: W&gt; a.trimRight()
! N: A' A" d, Z' \, ?6 C8 V'    ABC'
/ a. {" f5 b& M4 H
% B' e1 k7 ?7 a( v+ |0 t/ c' w//返回第n个字符,从0开始
) p0 R) T# ?; s&gt; name
- ^' z! \! H8 \/ [' V8 ^'Hans'
% q  U+ m/ u0 L, [&gt; name.charAt(3)
+ \! Q  h1 D8 N5 J0 y7 v  [0 F's': y7 S+ N  P6 \- H- C2 r" u) R
&gt; name.charAt()
; h: M, z3 y/ v4 `) C/ y'H'; K4 O9 x, Y" P8 x; T: A0 ^7 p
&gt; name.charAt(1)- ?4 V/ H5 U0 K# Q" b7 |8 c
'a'0 O/ t4 W+ v4 {# `' ^5 x

* B0 J" P, O8 }4 e% A9 Z// 在javascript中推荐使用加号(+)拼接
  r! O  W. S& N6 M$ R1 r&gt; name  C' R, J7 t' G9 y+ l5 U8 e
'Hans', F; O7 e' g. |% ?4 D) f! @
&gt; a
5 Z) U+ s! {( Q'    ABC    '
/ @# o( h5 m2 n. D0 G&gt; name + a
. @4 J8 I' A# Z, }0 [4 y'Hans    ABC    '2 c0 L; E) N( `' p' l3 ~+ T  R
// 使用concat拼接
1 G* E. i( r! t&gt; name.concat(a)
) I! s  \/ S, X'Hans    ABC    '
, j  X3 H& x, h; _2 Y9 M6 y2 V  m
4 \/ a! W  X5 _+ B; d9 l' x% J/ }//indexOf(substring, start)子序列位置
5 l. J  S! ?0 ?4 i
$ ?0 [; Q8 @* I&gt; text& u& H% X$ d- c8 x
'A young idler,\nan old beggar'$ N& f& N* V0 i
&gt; text.indexOf('young',0)* `( J% x7 y7 G- x% b
2
) f8 O1 k, Z2 G+ }6 l: H- g0 j0 ?# P0 [+ H4 E2 Z. F: ?9 O3 V
//.substring(from, to)        根据索引获取子序列
1 p$ R" i( ^2 {6 `, V7 B&gt; text.substring(0,)
" z3 o: l9 r; l1 `2 k1 e'A young idler,\nan old beggar'" L! \) L# Q) J  V+ P; P1 M: m
&gt; text.substring(0,10)  l8 A2 q0 e$ ^# f$ [) \6 o
'A young id'
( z8 H3 T( N$ N* b  Q
  ?$ p# `" u* c5 F% W- k: g3 q( P// .slice(start, end)        切片, 从0开始顾头不顾尾1 m+ ?" p, h4 W; Z2 e, E
&gt; name.slice(0,3)
6 A- @, G. g* S3 \'Han'8 T- M+ P0 ]3 r

$ q& e- |5 R% ^7 S7 Y* {& p: H+ h// 转小写
# S+ P5 K% }3 z5 v4 K3 T% P: _! f9 ]/ G&gt; name  R* Z; G, ?! V* k
'Hans'& h5 K) ?' i6 v5 m( d) j$ W3 z; m: ]( [& }
&gt; name.toLowerCase()
5 T+ ?; a$ l+ u/ C1 o4 _'hans'
: ]1 o/ L: U, ?1 p/ i% ~- \! F; z4 ]// 转大写+ m! N, s% {8 A
&gt; name.toUpperCase()% `7 i' o% d  j0 z
'HANS'
# o! ~+ C/ U- ]3 D9 @6 i
5 j; h$ k" `9 I2 z3 o# O7 I// 分隔
( G) u2 z( k# Y1 I! D" D$ u, g6 R&gt; name) a! M; z6 i, a
'Hans'1 |; c2 _( O8 F  Y0 e5 q5 B3 `- v# i
&gt; name.split('a')
$ B! B2 O' Q, V' a1 L(2)&nbsp;['H', 'ns']
& C* H- |. S$ S+ c3 E</code></pre>, ?0 r! K: U7 @+ B/ c$ U
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
! v5 O- e" V7 s( ~2 o7 o8 q" F+ c" E: P<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>9 J: `0 a  `. S, s6 r! `6 {6 w
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>( K. v0 X6 a, u$ W" i
<p><strong>null和undefined</strong></p>/ n& ^8 V: `% J. E) a# X. o: h) I$ }
<ul>
- G, a( y( y3 Z/ _  J6 v8 n<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>% i% Y( Y, q5 o: m
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
- D4 p' c2 I5 l% g2 I& e</ul>
9 ~6 A6 x. _6 D) ]<h4 id="234-array数组">2.3.4 Array数组</h4>( ^+ b! g+ I, Q
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
( P# w, o9 h7 D3 e# G* R<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
, z* X/ D$ Z2 q6 N9 i&gt; array13 R4 U/ _! b; s5 u5 n1 h% Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']1 K% w$ ?7 ]9 G5 ~+ s) r
&gt; console.log(array1[2])  //console.log打印类似python中的print
3 s: v1 Y! s5 E. s; k3
5 P/ j8 W1 I& _$ d0 ?// length元素个数& }% \6 z0 C& d: U8 ?9 K0 _
&gt; array1.length! W9 r/ I' E; U7 M
6
& f# m1 t: j* c7 ~: j* I// 在尾部增加元素,类型append
8 w, Z, ?$ W% b: u. s! T, g&gt; array1.push('D')+ v& I! Q" S9 t' k
7% V8 m, l0 F  z! O1 f
&gt; array1
+ ^9 B0 R  S! S( t5 {(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
, Q, z( C) q7 i) [! f: Z8 ]// 在头部增加元素* e) c& D, k/ B! x
&gt; array1.unshift(0)- Q8 m* C7 }& c- ]9 h
8
4 Q# g; o' c0 m3 D+ d&gt; array1
# t# C+ }7 H- P/ O2 R: n) R(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
* x9 ~) b5 G  a( m6 g/ ^
9 h) W. P  [0 ^  Z8 c9 y% s: b//取最后一个元素; m% ^/ t( ]1 m# O, k  |+ G- f
&gt; array1.pop()) B. N* y* \+ _2 N, E
'D'
8 \1 r: R) h: x1 _% ]&gt; array1
8 ^% q7 w2 R# w2 @8 m! R7 S. N/ c(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']! C! r0 Q# Y% ~8 \3 u
//取头部元素
) {6 \  q0 q. P8 x&gt; array1.shift()
& F1 T1 G6 c7 O8 A4 I- c0
0 M3 H" [& c, R) i6 _&gt; array1! Y+ ^) d& Z" z' m- h) `8 r5 K$ P6 Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 p$ z/ R- I" i; `1 e% ~
. ~# l& W; W& s5 Z
//切片, 从0开始顾头不顾尾
1 @: w5 H. b/ h&gt; array1.slice(3,6)5 C( a  p+ [, o6 b; |" X3 F- D1 {
(3)&nbsp;['a', 'b', 'c']
5 y  @' b  q* R3 m// 反转
1 w2 S3 p0 B- v& ?2 I&gt; array1.reverse()1 g6 f5 I3 x) C- v, _
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]. v$ F  a! m. c( T9 q( U
// 将数组元素连接成字符串
6 _3 p; K1 c, ]: D0 B& `2 ^&gt; array1.join() // 什么不都写默认使用逗号分隔
3 U1 p) A4 c% \- c; e# t'c,b,a,3,2,1'7 n1 @" h0 k2 \1 q9 t1 \- O
&gt; array1.join('')& t/ A2 M( O$ ~" |4 E+ j/ a4 S
'cba321'
9 l: w* Y2 V7 G. Q. E* y( B&gt; array1.join('|')
6 v. s+ R( q: f+ N'c|b|a|3|2|1'% G0 i4 m1 N1 g, M5 K$ n1 {5 g

- L3 E" D+ f, M6 u3 |// 连接数组( Q+ q2 q/ j, `: E
&gt; var array2 = ['A','B','C']
! k) r) z. h2 o! @2 Q7 f9 I&gt; array1.concat(array2)0 i5 W7 A6 H! i% _  \2 i
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
4 M, Y* R5 Z3 J& F% q3 z! [: b& F' Y+ O8 F
// 排序; G( {3 X; m$ K: o
&gt; array1.sort()
/ y4 P/ b8 d( w(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# B4 \" f4 Z4 s/ S! Z9 R" e7 B+ s  G. _4 h1 A, r/ ^6 E& v2 W; _
// 删除元素,并可以向数据组中添加新元素(可选)
5 N6 ?( j  x  ]# {" B- }) O8 K6 ^&gt; array1.splice(3,3)  // 删除元素, o# J' l+ r( X7 G, I- @
(3)&nbsp;['a', 'b', 'c']: `" M7 u2 }" ^& c. o( \
&gt; array1
8 J5 G  C2 a. Q$ |9 f(3)&nbsp;[1, 2, 3]
: F9 U& B; R5 Y6 q&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
/ O  n4 _3 u2 r( T6 H: n[]
3 n$ ]7 Y$ j( I, G/ D, N' P$ p&gt; array1
5 j! b7 S+ c+ z. n. w(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']. W: i4 t% x. }! O) o8 V" d$ Z
" [9 i& }8 p% D, s& S( q3 D5 z
/*% K- B) T& ~1 T" j
splice(index,howmany,item1,.....,itemX)
- F& P7 c7 U8 L1 Sindex:必需,必须是数字。规定从何处添加/删除元素。
1 w7 d5 W  T1 y( l& yhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。9 ~1 P" Q( i; s) u5 L1 h- @& L: @7 f- l
item1, ..., itemX        可选。要添加到数组的新元素
7 ^4 W. \" x; H$ D+ C*// Z+ M, J1 M! j) F

) u: K3 Q8 U/ t6 U# [4 L4 Z// forEach()        将数组的每个元素传递给回调函数. d" a' r1 n4 H0 {/ }" M
&gt; array1.forEach(function test(n){console.log(n)}). U+ V0 {) w( D0 [/ l) [+ o8 x' B+ i& T  m
1
7 e+ s. R/ l- b% h& v  y7 J 22 t6 O& o- B/ M$ M* Z9 k
3  m5 A: }/ q& D8 I; e
A
4 t  t4 R, J: E# c2 E B
. n$ H7 S% O" q6 ?& c# q2 `3 Z( g) } C
  r/ p. b5 c8 G) i' w  Z# H: ^. e// 返回一个数组元素调用函数处理后的值的新数组
2 Y) G2 ^* g2 O, g0 g/ ~# ?7 P! X&gt; array1.map(function(value){return value +1})
+ [  e, \- D$ h! T(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
  n. T7 q) y& |+ I( s3 t; }- x9 v- f</code></pre>
$ n6 D1 \' E& |<h3 id="24-运算符">2.4 运算符</h3>" c% V! a+ n1 n) V
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
7 O' W0 g1 o; }<p><code>+ - * / % ++ --</code></p>0 W: s$ u1 ~5 R' t) k8 q) v' D0 A
<pre><code class="language-javascript">&gt; var a = 6  ?& T& M* r) k5 d' `- g
&gt; var b = 3
# T/ ?; H/ t$ i& r: B- O// 加
2 j' F# _+ }1 c2 G+ o&gt; a + b0 N7 |/ B8 t8 a4 j2 I
9
7 h! K8 a9 `. s  ?8 c// 减
( J1 }3 z0 g! m# D4 _+ J&gt; a - b
: T/ I: _" s" {+ F1 r& p: h- E3- a$ ~8 t# x6 A  v+ r' |" h* o4 q
// 乘9 n3 t  K0 L% w, ~
&gt; a * b& m! `5 M  I' p) G+ Q
18
* L5 ~6 t- P) O$ {; d( b" N4 @// 除- |6 i; L$ T9 C
&gt; a / b
) Y$ _  `3 g# [5 g27 ?4 S4 Y1 n, h9 E9 J! u# s
// 取模(取余)
7 x) N4 \1 U5 D&gt; a % b" ]" f9 O4 E) l- n/ Y
0
+ }2 F* I  F5 c4 l// 自增1(先赋值再增1)& H0 s! J5 e; e' l
&gt; a++
  p% }) c5 J* c" Y6
# I5 h9 _, j$ N&gt; a
; P" t; L0 i) E+ A% [7$ Y; P# m9 p: ?: H
// 自减1(先赋值再减1)
+ @( H2 B7 t0 R8 j- Q; a+ B&gt; a--
7 D' B* [: Q: o$ J7
1 c7 B% a: F$ ?& m1 J! B9 h&gt; a
) U: |- I. ]4 O: v- b" Q- Q7 }* {6
, c; }5 E0 x5 ]* `  ~// 自增1(先增1再赋值)
$ r' h9 r: Q: T& G5 V3 [5 g- `&gt; ++a
. u: h. q- h2 r, i7+ \" J  D( ~( i( q* [
// 自减1(先减1再赋值)0 z3 g5 g1 y; c2 e" X# E
&gt; --a( J. K& v8 O9 m; }2 v  A" l
6
. `: w" \! F7 J1 E( ?8 j&gt; a' w! }# p& r2 N8 H4 U
6
" Q2 i& T0 t0 T% s, ^! w# V3 y2 H1 k- u  B4 O" u7 }2 U
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
2 A$ a+ P2 N: i' j8 y$ }3 V) M</code></pre>. w9 S5 b) @; \/ _: y7 F* P
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>4 y* v1 ?5 i# Y4 Q5 g, e
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
. l" q. z& c6 e9 v) \# T1 s, M<pre><code class="language-javascript">// 大于
4 z+ {. Z# x5 K. j9 |" V( E& m0 G0 f&gt; a &gt; b
9 z& B% A% a! Ltrue- Q0 s4 z4 m3 P5 V0 T
// 大于等于' T  e! H9 a% t4 E  v$ h
&gt; a &gt;= b
# m8 w" ?# `+ ^true. ~% d4 `& Y6 C7 E0 F
// 小于
! i, G# r5 y  }% N) w* `: F! b&gt; a &lt; b
1 q# \7 {6 j8 jfalse3 p( ~! J+ K7 u4 A
// 小于等于
# Y$ F. |- v+ r9 s9 V3 e&gt; a &lt;= b
- ?  [. L+ y3 i7 t8 L' c- q: efalse* D/ I, P( G( m' S5 W
// 弱不等于
% \0 x/ }! o* |: {2 A, B$ U&gt; a != b' }, y* |9 O, ^0 c8 `
true: H5 b) ~  g% B) H* r' J
// 弱等于  ~+ P% w( `: s( Z$ e
&gt; 1 == '1'
, n# d1 |: G( b  \: d9 otrue: a) u$ S3 s5 [/ H! l# f4 @) n9 n+ e
// 强等于; ^' R. t- t5 f% m( G# {7 k9 y; w
&gt; 1 === '1'
$ Q; h) p, o; |5 e" Y! pfalse% H2 O9 J$ `( }+ b
// 强不等于2 n& W% k9 _. T
&gt; 1 !== '1': y5 X, a; h. }) I% n
true
9 D. C7 o$ D/ y1 @  t& P, ^# S1 U5 ]2 T' B7 `* Q2 p% H
/*3 _& K7 r' C) h6 r- r
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
+ O6 f6 _3 I3 q1 R*/
5 g4 C# A" i! q& E* U</code></pre>( r4 d4 p5 f* z( t1 Z: p3 V
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
' \7 e8 J$ M, O& S<p><code>&amp;&amp; || !</code></p>
# B  j; g6 Z* e' s$ l) i<pre><code class="language-javascript">&amp;&amp; 与
& q8 O' u+ M4 u+ }% c|| or
- x! S# \# K% R3 u. N0 |! 非
% e: s, k3 ~* P# q3 M' y- n5 `</code></pre>+ m- [1 K" o, h9 _0 P
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>* O9 c9 v% D1 f1 k4 x" Q8 \  \8 k' W
<p><code>= += -= *= /=</code></p>3 R) w8 k0 E4 w  h- F( B( ^
<pre><code class="language-javascript">// 赋值
( h2 o! J) h: v) \&gt; var x = 3, {4 M/ T6 [8 ?6 W' K
// 加等于7 i5 d' I$ x! k! _/ C- ^5 z( I
&gt; x += 2
, ]' Z; ]1 s5 I. l: _- t8 @. u% y57 {% V, o' o% |. `9 o6 V6 V+ C
// 减等于. B) b$ h1 B- O/ ?8 L  m
&gt; x -= 1( o/ l: v# w1 B; R: Q
4
  x' |) w& [  Z: ]4 x// 乘等于6 h! `! h3 Y" N2 N
&gt; x *= 2* D$ v/ ?1 e" ]8 w4 m2 X
88 ^' I6 d# G  q
// 除等于
1 T% N. i  {! \+ t5 x/ I, Z! h) k&gt; x /= 2, `+ H" ^0 {' I, `9 f8 O
4
8 s, ^7 `: H8 t</code></pre>* ~4 d4 _" J* {- T1 N3 d4 G
<h3 id="25-流程控制">2.5 流程控制</h3>
! V+ v/ v! H; R0 e+ V- J<h4 id="251-if">2.5.1 if</h4>0 F5 D% X9 I: ~+ j9 K
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}, J' R' V& x6 j! O4 t* C* O

8 d' G' z* S4 d% S$ `# m. {&gt; var x = 3
, Q+ B; e6 e+ W2 X, \- E&gt; if (x &gt; 2){console.log("OK")}5 z1 _4 U0 H/ V& W& f
OK( a/ T+ b* ?- c9 h" U# W: @3 @' Y* C6 D

) t0 |8 _( k2 B2, if(条件){条件成立执行代码} + T' l3 e3 J$ v
        else{条件不成立执行代码}
! Z9 J1 [0 u! c
" Y  D2 k3 |5 M2 K6 I0 @&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
! Z: S# \: T, K- m% {1 Y8 @- [( n) `, D'NO'
0 Z3 y, K8 N" Z8 j; S
* p4 M3 I4 V0 z3, if(条件1){条件1成立执行代码} 1 b  \* @* R# u
        else if(条件2){条件2成立执行代码}& H8 C  y$ P: F7 `" ?6 Q$ e
    else{上面条件都不成立执行代码}
& w1 m$ G$ q0 z2 ]7 L: b+ d! M
2 u. y4 P* R' m/ I# h&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
' D* G, M* `3 V" H4 M Ha+ }( I7 t- [2 Z7 a
</code></pre>
. O9 v' i2 U+ P" ^5 v: j& P8 [- l# A<h4 id="252-switch">2.5.2 switch</h4>: H" I+ A8 R. {4 z
<pre><code class="language-javascript">var day = new Date().getDay();
/ r" \3 l: X- o2 |switch (day) {
# N- ?8 E4 I! [1 u+ c# b4 X9 n  case 0:
  h5 y' L" B* d0 e7 V* I  console.log("Sunday");
/ W6 [) g1 e. \3 r' N/ z  break;1 S6 }4 z) W, b; K, @
  case 1:
( S4 J0 z7 e: _* Q3 l  console.log("Monday");
. \  {( A7 S! A3 N  break;
' R* o( J3 @* D9 B& s: M0 [default:
* k  {5 h- R! b0 W* T& A  M  console.log("不在范围")+ w, ?/ c% V, j8 E& w4 M: j1 {
}( x- L, W2 v% j  W6 \
不在范围" ]- M: d3 ?! m' j) ^
</code></pre>
/ F" a! f. q3 s+ `! C<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
+ B4 ]3 P3 |) k' L; I' j# y/ T3 l& J<h4 id="253-for">2.5.3 for</h4>
5 M5 h* J/ B* W. ]% h' a3 g8 @9 D<pre><code class="language-python">// for 循环* t9 U* i# ?" O4 Y9 `8 T- v
        for(起始值;循环条件;每次循环后执行的操作){
- ?! b4 [5 k4 u# Z/ y        for循环体代码; h. K4 l/ f; H* R6 S! B# O
    }( y! X9 L. G, d

7 d9 D+ A; w' F( d' u4 w$ B+ vfor (var i = 0; i&lt;10; i++){2 ^+ j8 |, ?+ a9 @1 I/ l( X
    console.log(i)
( h; S) ?. P+ G' [+ g. K}# X/ p( D8 ~0 H" i) G, R. |
        0) J5 Q$ E6 V$ L0 r8 w2 o5 `* I
        1
) n4 w8 I3 K2 _' ~+ {        2
. [) P& M7 D8 u$ e! `) z/ L, K$ Y        3
8 p$ R3 k: M' t! O4 m        44 ]$ o6 i) S4 g4 J  {2 O" K: S" n
        5+ A6 g1 {* V2 s
        6
2 }2 O) J- s. C8 u        7
4 e, o0 i# A3 K! ]9 U$ S+ M        8
1 c* x! y; M1 j        92 m  N2 k! v; i2 j
</code></pre>
- a' |: T' O) ^& m<h4 id="254-while">2.5.4 while</h4>
) s% _4 E6 G4 a- b) H: u+ ]<pre><code class="language-javascript">// while 循环( ^9 b& L% n: @. J) T0 n
        while(循环条件){. N# n( q8 g/ F  O# }' b, [
        循环体代码
  v: V: b! B) f1 V4 U6 [& W& [) ?    }  M6 }& q, _, t

( z$ H* E4 j3 v  `3 `&gt; var i = 09 l. i$ o. Y! n& n% A* m- c5 N0 y3 J
&gt; while(i&lt;10){
) V$ |% ?% g2 R    console.log(i)
) C% T0 s1 _* q6 ?  [% X) P    i++
  m! w/ v/ f8 A) M1 m* a% @/ p}$ _2 D5 s. k* W8 }% ]
03 n; ?6 W2 X$ A
1% \) T& H# c4 |4 A
29 l; U. c  c* F' l* d8 [8 W! `( p
3
; y, N. ]2 ^4 e8 e. b* P, A 4
8 L! N7 V+ O5 U 5, |- O# x5 K- b
6) \% y+ V; @- r( |$ z  l  u& U4 \
7
+ @, u1 d7 K$ l. v. { 8
" @. y% P" Y* ]( O$ l 9) o  z. W* C8 _& C
</code></pre>1 l% e# t1 c; [" P1 b: L% B, R
<h4 id="255-break和continue">2.5.5 break和continue</h4>
6 E+ s$ Y3 \  x0 J' I<pre><code class="language-javascript">// break
2 Z5 k! Z! P: @7 Vfor (var i = 0; i&lt;10; i++){
6 f$ J' i" H5 f$ @0 W2 l' F    if (i == 5){break}
' A( K2 j4 b  Q  z, x    console.log(i)+ v% d* Y# g9 f
}
- m: h" ~! f7 W+ h9 Z+ Y* \ 0+ @) c! d$ D9 }5 e" i
1
0 B8 q6 W& I! l& E 2  g8 u; ?8 u6 ^$ J! w
32 k$ }0 Q$ v+ z* u3 G4 j" O
4
, u: B: |* x" x# y// continue
  o, F+ p; F8 R9 b$ h! Efor (var i = 0; i&lt;10; i++){
! \8 k5 g2 }% q9 E# |1 `& [; H    if (i == 5){continue}
3 I' M4 m' D9 _1 Y' t. X- T    console.log(i)# H- S! f! B- w- A- D$ F7 t
}
& f6 R$ b" d: I- l1 Z5 d$ H 0
; C) K: b: \8 R6 Q+ ]0 s 1% q. m2 o, ?$ a! G2 g. l) p- }  q
2
( x8 P- {6 C2 c 31 s& e' h& N, @6 A0 _0 ^
4; ?2 Q/ e. N. b! a7 y4 z
6& R7 J9 }% o" q. H0 k' ~# y
74 |. y: l$ p- K3 Q( ]
8. f  Y; _  o0 R  K9 M/ l8 h* k
9' J5 g9 {: d5 c& e1 D

$ ?$ C- f3 W- x3 P</code></pre>& z" a- H: ^& }6 e( g3 A5 f
<h3 id="26-三元运算">2.6 三元运算</h3>
# i2 P" z& a- z7 r<pre><code class="language-javascript">&gt; a
  L" W# I; h: N2 A+ Z69 v' E7 W5 u% L' d, f
&gt; b
" N2 a* C  O1 G3. M3 W$ E+ C5 n* @' K( u; W1 g3 K! m

$ e% `* A4 U, H9 Y* a6 c//条件成立c为a的值,不成立c为b的值
# `/ T5 b# O! U/ Y&gt; var c = a &gt; b ? a : b1 s, U# x+ F2 @! K5 a
&gt; c+ R: F+ e( R  L' Q
6
. |! a( y8 F* W9 F: u$ s  p8 h1 [' t8 E
// 三元运算可以嵌套' L: Q$ @% E8 m! z" @- g$ @
</code></pre>: C$ A& g! U( \3 m8 E& U2 e
<h3 id="27-函数">2.7 函数</h3>2 S$ Y9 \; ]$ Y( \- B5 y6 F4 N6 J
<pre><code class="language-javascript">1. 普通函数
1 ^: w  d1 z: O&gt; function foo1(){) P. d' a3 p+ c! o7 ^& Y6 N
    console.log("Hi")
& L- w- c$ B# x# Z, H}
# g& Y3 a( ^8 C( N- a& C
, k. T3 H  |# B* ?, J% N6 H&gt; foo1(); T/ i# T( _5 i3 W. z2 T
        Hi4 F8 ^1 t2 A& p: F! L
2. 带参数函数
; w4 u& a, ~! i8 ]& T&gt; function foo1(name){( i: Y( Z0 u3 g# T; V3 J3 S) E
console.log("Hi",name)
9 e0 [3 c& Z% F8 Z% n$ V}, A; w. R$ G6 o; J1 {

8 T- _1 U4 y% z% B6 Z  Y&gt; foo1("Hans")
3 v2 F1 x4 |5 \) `1 p3 h1 oHi Hans5 z; F6 j, G9 T! y
- u4 R* G* [, D- b" O! w6 C
&gt; var name = "Hello"4 @' q" g; e! ^& ^" z# G
&gt; foo1(name)
" A: K6 [( n7 ~3 u  PHi Hello! c* y9 F5 L" t) v& z7 ~6 c
- U4 z5 X: k% Q6 d& x
3. 带返回值函数
' B0 \2 t. s+ H  g6 o: W! |&gt; function foo1(a,b){0 Q- z1 @$ P  ?
        return a + b   
7 w% i& I0 ?! d- T7 K}: y7 ~1 p- b, c5 ]
&gt; foo1(1,2)0 S; O) O1 N' O6 P2 U. h
3
0 w9 P) M4 C6 m! W' E0 E8 w&gt; var a = foo1(10,20)  //接受函数返回值5 h* t1 U7 v6 h) k4 w3 x
&gt; a
/ B/ b" X$ w* M; h# n4 }8 b% Q30
5 {. o) X0 [" C: j
7 s; ]7 L( h2 ~( ]4. 匿名函数. Z8 Q8 w. U4 ]+ G9 L$ G
&gt; var sum = function(a, b){
5 d; o" B% t0 p. U8 _! u% ]2 J  return a + b;
9 x  x" y' S, J- H) a; I# U6 t}% [' B* \$ c3 t, r# ?
&gt; sum(1,2)
) J$ \& h+ f4 X3 K# D, ]- F! x3
& d9 I8 s1 ^6 R% f+ y& ~" D3 d
+ h' l; b7 v6 W' ?6 C, M# `% v8 q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
$ [: ~/ U1 r" g( n1 ]% P" B&gt; (function(a, b){) {* K1 _6 n" e  F
  return a + b* @" W( e4 J) u3 m6 e* g
})(10, 20)  N' X4 G, V! @$ X: u$ c8 [1 t
30* i4 b  Y# F) u0 g& \

7 ~/ a; @& H# G9 o/ y5 A5. 闭包函数* ?6 O+ J/ b- b7 P# V5 _
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
, T1 ]9 G4 D) m. u" fvar city = "BJ"/ ^& {& R0 I. n: N
function f(){3 A2 S+ o3 B; m. F2 v
    var city = "SH"8 h1 T! V4 t- X8 z3 p- M" d$ O
    function inner(){8 @" x# h: B, p. g+ P; F
        console.log(city); e% E: q9 y4 }; q6 ~1 b" u6 Q3 m: U
    }
/ a8 m$ _5 B0 l1 H    return inner
( h$ t3 K2 o- e  L}$ j6 b  `3 D1 w
var ret = f()8 i2 b5 H. O3 ~- A0 A
ret()5 V  `  o, D( u& p4 i. X; A3 d
执行结果:
/ O* _' E' L) k- l* Y/ }& T* tSH. ~3 {0 n) c+ s. Q; u' y

. c3 X, \! T% Q# B  W</code></pre>6 ?7 O0 r7 g7 X. Q
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>) ?: {: m2 |3 @+ h
<pre><code class="language-javascript">var f = v =&gt; v;
5 ^; }* l" N0 K1 e) v- S// 等同于
# y0 Q4 M* a5 ~+ h% g* B; nvar f = function(v){: |. h' h3 H, f0 k( \* @. H6 d
  return v;
, z/ X% Z+ e' c# D( V}
  F& G1 p2 |+ F& O</code></pre>3 t, d' q& h/ ~, Y2 y
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ |. n" P4 F( M2 R7 c0 G" F: D+ x
<pre><code class="language-javascript">function foo1(a,b){5 J2 o# T1 v' F6 ?- B
    console.log(arguments.length)  //参数的个数
: m/ U3 K- o8 E: e    console.log(arguments[0]) // 第一个参数的值
& x2 f& _# U2 |! l! f        return a + b   - }- U5 W) y0 g# R1 p4 X' J/ s
}$ X0 W6 I& j9 ~  A3 Z
foo1(10,20)& o0 U/ k  {3 ?7 k+ v2 Q( S  D* e, F
结果:2 q6 ~7 I: X- x1 T
2          //参数的个数 * w% C. m& E! {# }0 Y
10        // 第一个参数的值
/ `! q. q3 [: T5 Y. o9 A8 B- b7 v30        // 返回相加的结果
: _% p* j2 b; u8 h) M  j</code></pre>. O, I' n- l6 p% ?1 a/ f# b
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>- W& z' w3 ?: Y; z* ]& O
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>& `2 t5 i  \( \- d3 x" m, e3 R
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>8 l9 l4 U' Q! R5 V: L! b6 D9 O! C" `: O
<h4 id="281-date对象">2.8.1 Date对象</h4>
, t  |" \! B, m! y% y<pre><code class="language-javascript">&gt; var data_test = new Date()
, ]. L5 z" b' @  [&gt; data_test, s2 c7 w4 `) a9 o: [
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)% v" ^2 i4 H. p5 w7 O- \" |
&gt; data_test.toLocaleString()2 X0 O+ s9 s  y7 g7 Z
'2022/2/11 下午9:44:43'7 U) g  b/ _' ]; |

7 \- E9 {. U8 F4 P2 ^8 @# J&gt; data_test.toLocaleDateString()
/ G' M- l2 U* W, g) I4 u'2022/2/11') C7 h  V* C% h8 F7 O$ G

$ O/ V) k6 L% ]; F- E  ~&gt; var data_test2  = new Date("2022/2/11 9:44:43")
/ a' a$ \* i+ g9 L7 L+ ^- p&gt; data_test2.toLocaleString()  c' b- f6 g. m
'2022/2/11 上午9:44:43'
2 e" n" \) A, L8 A, \4 X% y4 b& B8 ?" ?0 O2 T& a
// 获取当前几号  b) k2 m/ O, _' E
&gt; data_test.getDate()
7 J, u6 ^4 }" H0 a5 a7 B, i11
. a$ _) M' E$ l# W: }& S  B8 ?0 q// 获取星期几,数字表示
+ t, g) i  O7 T- t+ {&gt; data_test.getDay()  
6 u" z0 L; e: d& c7 i8 i5
3 Q9 O" t4 f/ U) A' n/ ?// 获取月份(0-11)) b1 Z  f' d6 @' j+ s" S; H
&gt; data_test.getMonth()6 F7 g! m& n" A
1' y% `. K" r* `! R: ?5 B9 a% o5 v
// 获取完整年份# Q0 o2 c0 k* j/ ?; R
&gt; data_test.getFullYear()
+ `+ U- d8 a2 n9 A2022; Q3 Q; b) Y- _/ d7 `& C  ~
// 获取时
4 D3 _+ d& W2 o; B9 z0 [, H&gt; data_test.getHours()
' D( |$ B) s' {5 d6 S" D21
* X% _) A+ n& E) K( m( {// 获取分$ j9 _! _% q# X" [! L8 ]' T
&gt; data_test.getMinutes()8 D; P) f' o+ b7 c7 {; b7 T; [
44
- n' `  z& d& i  C0 c' R! }+ X& X2 Q// 获取秒
  H1 X" O' I0 ~  s3 \5 K% L&gt; data_test.getSeconds()
9 z: g! b: O3 [. @6 _( O43
% ]0 w% B( T0 {// 获取毫秒' r' f3 Z* C5 B3 A* B% q* {+ M
&gt; data_test.getMilliseconds()
& |! t( d+ N  R. S2907 `% [4 f/ h- L! \+ m
// 获取时间戳. Q) Y" x! ?8 W) p: M8 [/ q
&gt; data_test.getTime()
4 {' v% r  T/ c16445870832900 u. d# W. N: q: W
</code></pre>
; P/ L. ^8 T2 C$ ?  U. {5 \<h4 id="282-json对象">2.8.2 Json对象</h4>
! Z; ?$ n! O: }, d9 S9 b# N<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串% n+ U3 j3 w) L) V
JSON.parse()  // 反序列化,把JSON字符串转换成对象
& \4 n9 N8 n/ Y( X" f6 @/ u6 `0 q" y6 r0 C
// 序列化$ \- G5 v1 E. p; Y
&gt; var jstojson = JSON.stringify(person)
  V1 H* \2 {1 p: ~7 O/ E&gt; jstojson  
4 }3 L* Q% ^0 p4 O; p'{"Name":"Hans","Age":18}'# W& L' {6 Z- f& r4 D2 `+ h
0 s0 |7 }: X6 q0 Q7 C' z' R
// 反序列化
8 a  L8 k7 W. Q1 ^&gt; var x = JSON.parse(jstojson)+ K: w3 Z: {5 G3 {+ [  m
&gt; x' D6 [- t- V+ R: R/ S% y
{Name: 'Hans', Age: 18}
$ F9 a2 |0 @' d$ A&gt; x.Age
+ T/ ^+ C" y4 [: j- W* D1 _8 n18
( Z! ^7 [- L6 X</code></pre>; q* ~; f, ^; `/ [! T4 l( p- [
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
5 Y( P+ G/ _" X9 Y" y1 e7 g+ K<p>正则</p>0 n& O4 x( h* i. g+ f7 W$ l
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
& d3 X/ p9 Q  F; w; E& E: J&gt; reg19 }- E2 x) [) l# ]7 z5 i( T* i
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
1 a! O" S! ^* n" @" G0 A8 q: V& Q&gt; reg1.test("Hans666")
& z9 }$ y0 S& E8 Btrue% B) a% X  ]7 }# K

0 V6 r; M, R  M6 j. R. ~&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( t0 J( ^8 K" }&gt; reg2" U) y9 F. g1 n6 M# l1 m  U
/^[a-zA-Z][a-zA-Z0-9]{4,7}/# c3 J4 N' q! o. j6 l5 A. Q; ]
&gt; reg2.test('Hasdfa')9 _! ]& B' O, X: F" d  T
true
" J& N. m  s0 C" F5 N
/ u) x9 }$ g& G' A  }- J全局匹配:
/ i" j( d- e6 N( @$ `: Y&gt; name
: ~. W% n: w/ X" P6 m$ M'Hello'$ z" n. g. R# l, m) o. Y- V
&gt; name.match(/l/)) y8 {+ w  n4 |0 w8 x& X; a4 x
['l', index: 2, input: 'Hello', groups: undefined]: |% l0 c* f8 k3 o' p

- s. \5 w" {$ m$ V' [$ P&gt; name.match(/l/g), h' v: V0 a( W/ v8 |& h& T# r  Y
(2)&nbsp;['l', 'l']9 I2 {- e, o1 X" R7 W
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
& o5 c! _8 K8 R, \; r' b; u& g/ `* x; ?7 r: K
全局匹配注意事项:
1 w$ d4 t- v5 Q$ ?, m* Z( W3 g&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
1 w) e% p, i/ ~&gt; reg2.test('Hasdfa')8 z4 T% h4 p5 f
true
8 j' Q" W2 }8 ]&gt;reg2.lastIndex;4 {3 V# x4 {7 E
6
- {! M" z1 X: q& q! q9 b&gt; reg2.test('Hasdfa')
; ^# L8 f- k! j6 R$ efalse6 R9 M( t& i7 M" Z! b# M% k; w
&gt; reg2.lastIndex;
. W7 E, z; {( F) p' R/ K8 u% g0+ L" a" |# Z$ Q! x" \; ]+ ^' N
&gt; reg2.test('Hasdfa')
& s) H+ |! W( g/ I9 B5 G9 r6 [true) q# m# E3 E+ i& H
&gt; reg2.lastIndex;- B& Z+ s+ R! u) p, u
6; R9 j- H' V0 c. b( Y3 J
&gt; reg2.test('Hasdfa')
% S) i8 P: {+ H" ^false9 v' i( x4 S, l/ E) [+ l+ y
&gt; reg2.lastIndex;7 e" i1 ]! I) e5 C4 [8 z7 v
0  `$ z' G( t/ X2 |
// 全局匹配会有一个lastindex属性
# j! f; n7 \) }: f$ X/ l3 w&gt; reg2.test()! w6 L0 w- M* n! Y8 l, \
false# s' ?: K7 Z! d& z- W  J
&gt; reg2.test()
; s$ ~& y5 `5 `true
. z4 h8 g1 ~' Q8 S// 校验时不传参数默认传的是undefined: m- o% ?% f" Z# |1 h
</code></pre>/ Y, {: d9 x& o! y6 u6 l: s3 U/ x& n' j
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>" l4 M$ D: y# v* Q# N
<p>就相当于是<code>python</code>中的字典</p>/ U2 L) P7 |5 R, x% k' `/ I1 w& c$ O
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
1 u8 T, J/ J& R2 X* z&gt; person0 {. O/ A0 n4 u: I/ l
{Name: 'Hans', Age: 18}/ o: J8 g6 J( N7 ~; Y8 y5 @, [7 b
&gt; person.Name! R( a' B* n3 R9 G9 g7 n9 A
'Hans': E. j5 x! y5 P, E7 o
&gt; person["Name"]
2 k4 R% J  M  J8 W, _1 F! s  o'Hans'  I* ^9 D- y3 |$ W1 ?, ^# {6 a
; X. \$ _* a7 ~5 F
// 也可以使用new Object创建
1 V4 r7 f* @1 X8 }6 Y6 I&gt; var person2 = new Object()' V$ r6 T7 A: M) Z9 y* V" Q
&gt; person2.name = "Hello"& T9 ~' ^0 {/ ^0 S) e% T
'Hello'
: P9 r/ j. Z) s4 [3 `; D- J&gt; person2.age = 20
  L" ]# c, z! q) X' z" [# \2 a204 C* N/ C& f8 ~0 n& U) ^; M
</code></pre>
: }4 m1 w5 V( r7 J* L/ A# P/ p<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ L- [$ {6 m. h% G; E<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>9 d; H* \8 y+ b- h! ?
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
4 W* }0 t5 D+ G, q<h3 id="31-window-对象">3.1 window 对象</h3>) q1 l  E& W$ U+ i
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>$ m% _3 i" G+ x! A: y
<pre><code class="language-python">//览器窗口的内部高度
* d- c  v/ h7 T" C( F; Q3 u( Hwindow.innerHeight
$ K3 ]: X- C* m" Z& ~5 Z. P; V5 u706
7 L& M9 R% q: z+ A//浏览器窗口的内部宽度
# ]! U  m3 ?9 nwindow.innerWidth
! R4 y+ e7 M5 t* ~! p1 [! t2 ~1522% l$ V: U5 ~- H, {% n1 a0 z
// 打开新窗口2 x2 h. U" b$ k# ~2 g
window.open('https://www.baidu.com')
. x9 a" E% C5 e; F2 a+ WWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}/ k6 ~1 @. E1 c, o1 x+ z; L
// 关闭当前窗口% s5 h6 ?( w5 r# j* _
window.close() : H7 ], F& F2 k, J! x8 s- ?
//  后退一页
2 {( x$ A$ G  H$ B2 l& cwindow.history.back()
6 S% h6 ~8 r; P5 i, P6 z2 f9 b+ \// 前进一页7 D9 Q; U9 T# X" ]
window.history.forward() & B  g9 z) ~6 S- i
//Web浏览器全称% J' ^5 r- d, Q% g5 E  b' x" o/ L
window.navigator.appName1 A" u, s/ e# k
'Netscape'
. h9 }: F4 \7 `1 }" u// Web浏览器厂商和版本的详细字符串0 U! d2 z" X+ M  n1 _+ p
window.navigator.appVersion' D' D0 k" ^9 v5 E8 ^- W; R4 ]1 y+ K
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'8 H$ G& }. ?$ c2 Z
// 客户端绝大部分信息5 `( i. F, C- n% R; g5 d
window.navigator.userAgent
+ |0 X7 ]2 r- R; C  S# C5 p% [8 a'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ w# D, O$ f4 w7 ^3 u4 y7 v( U% c3 |// 浏览器运行所在的操作系统
! b" O  {9 Y/ P8 \window.navigator.platform
' w" u4 O+ O  K( s2 o/ V' T'Win32'& x* Q4 i0 a/ F1 W1 H# b
! y8 Y8 I  E2 _  R. x
//  获取URL
3 E+ D0 q1 U2 M+ X# ?window.location.href) \* U1 Q1 G/ n7 e5 u7 g3 k
// 跳转到指定页面. n) V! j9 E" k
window.location.href='https://www.baidu.com'( |' C" {  ]# O
// 重新加载页面
4 e3 x$ Q. l$ dwindow.location.reload() 9 @. U1 X5 q( z% A6 E! n
</code></pre>
* M* C  _1 N4 Z' @+ x. Q+ b" |/ t<h3 id="32-弹出框">3.2 弹出框</h3>
- e1 s8 A/ b0 e# x4 R# W1 l<p>三种消息框:警告框、确认框、提示框。</p>! E0 j* T$ Q7 z1 v9 |; E5 o7 C
<h4 id="321-警告框">3.2.1 警告框</h4>
2 Y) F. |- b# Y7 V0 }<pre><code class="language-javascript">alert("Hello")) h2 [  D  |7 b2 H" @% p8 |
</code></pre>
4 d& u5 s1 R. p! e/ R<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>8 h; e% F3 |1 N- u8 J
<h4 id="322-确认框">3.2.2 确认框</h4>
& T  D* z/ V2 V4 k0 x<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
* L7 j  c# }1 R) \. S<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
- V* A- ?( u! @6 S- F: n6 }7 L: Q- ctrue' _1 O) H3 m$ W) O3 F' O4 V2 C
&gt; confirm("你确定吗?")  // 点取消返回false
  K9 O! {. j: {; ]6 Jfalse: F1 }8 b2 P9 N( U: L4 H. c1 D, ?
</code></pre>
; t; U; J0 C9 `, `9 ?<h4 id="323-提示框">3.2.3 提示框</h4>
. x3 L8 L0 [8 o<p><code>prompt("请输入","提示")</code></p>! e  l3 L2 D+ t. j0 O$ y
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
: _* X0 ?9 ~$ \$ D) n0 i<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>  }  J) F6 m& E# z
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ q* ]; G% u- u3 y
<h3 id="33-计时相关">3.3 计时相关</h3>
8 t  e" ~8 \8 F4 X9 U<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
9 K, l, Y- B$ M<pre><code class="language-javascript">// 等于3秒钟弹窗
! ~' x. u7 c( A+ H" asetTimeout(function(){alert("Hello")}, 3000)6 X$ V* u6 ~# ^! H7 B
! }* f! P( n1 ?  k- P" L" d# x
var t = setTimeout(function(){alert("Hello")}, 3000)1 r! g; P4 V$ [) |3 j8 o2 R& B4 j+ C/ u

5 L5 i6 B4 N' z* K8 R// 取消setTimeout设置
7 }4 f' d, w  m7 n. rclearTimeout(t)6 l1 @$ }" g6 l6 C" D  Y# U
</code></pre>! ^9 f- o1 g7 D7 M# Y, s1 M
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>4 i' l2 K( ~2 a2 r: Q  g
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
+ o) F4 a6 W: S8 M( ~$ I0 X<pre><code class="language-javascript">每三秒弹出 "hello" :
% ]% L8 H/ t, CsetInterval(function(){alert("Hello")},3000);
8 e7 u9 y: z1 w& x</code></pre>! f; x2 P. Q' U1 ~8 k
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
8 S5 C+ z6 F4 R8 {) X, E- d: f<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);6 Y5 m( k5 d0 z# c5 ~# e, }7 O+ K
//取消:
2 l- ]" |: Z6 d3 W- a( P2 @& U2 FclearInterval(t)
% D0 g. I- z' ^2 k6 _' V3 |; S</code></pre>, |3 l! d6 d1 u" f- |- q
3 D: I+ o1 m& e. l
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-24 22:32 , Processed in 0.073070 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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