飞雪团队

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

前端之JavaScript

[复制链接]

9321

主题

9409

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

  c, \* p- l2 O* @2 j* G" |9 L<h1 id="前端之javascript">前端之JavaScript</h1>
% e! V: w" z9 D: u5 Z/ H<p></p><p></p>( u$ @5 I9 b, B( x
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>% A% h# b9 r: o7 M2 u# A/ F( [$ y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
# B) Z- v* \* v它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>: G5 j/ d) O* W! ?2 P: a- B6 y1 _
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
8 S7 A7 Z7 i" h1 B# |6 s0 K2 M) ~9 ?它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
7 D9 m$ S/ x( Y; T. A<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
1 Y6 D* k. p' _5 N1 e<h3 id="21-注释">2.1 注释</h3>
2 m8 D6 Z1 F5 H- y0 N! S$ _* T. L<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>1 K/ Q7 l) p0 O7 }1 N# s8 B1 l7 K
<pre><code class="language-javascript">// 这是单行注释5 p1 T  E. g! x! {' e6 r2 a6 t

5 z6 x+ E9 z. y; P1 G; N' w' h+ u/*& _4 T! W5 C4 ^" l: r, i2 j
这是多行注释的第一行,
4 a: \9 S/ v0 g这是第二行。
7 _5 W! O4 Y  [2 u; c" I- m*/
* z. ~' ], j+ v0 A3 B$ |</code></pre>
3 N) a5 l% B/ |6 e# G<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 }8 q2 Q8 L' x3 V+ E<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
4 S. k# z. B+ a$ y  h<ul>
: m6 t& r+ \3 e) r/ A& K<li>变量必须以字母开头</li>
$ u; m" L: s8 C; j+ e6 x<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>8 U2 P+ H( ]# v/ W. Q. C  M  W
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
- i, T  R6 Y6 U  {- S9 z</ul>+ Y- Y  _# }! X4 y
<p><code>var</code>定义的都为全局变量</p>
0 x- x. m# V: @! j! ^<p><code>let</code>可以声明局部变量</p>7 ]- w* s4 m+ x
<p><strong>声明变量:</strong></p>
, \* R# U: _$ N, `4 I9 H* u+ S1 v: n<pre><code class="language-javascript">// 定义单个变量
  y, G+ S* O3 u6 S&gt; var name1 c' m5 P3 k/ _. p# f, w3 w; G
&gt; name = 'Hans'
$ ^- r) N9 C2 ^) g3 i* x+ o//定义并赋值8 {% e, e& O- B0 _
&gt; var name = 'Hans', j) f" q/ X/ `: Y) M8 P2 w
&gt; name
, C- U* N# |' u9 h'Hans'
1 u) v" h, E: d# K8 t
% P6 s5 M0 s7 ], a" T$ E// 定义多个变量) q; {" t, m  c* A0 N
&gt; var name = "Hans", age = 18+ g% x; c- F* @2 ?8 [
&gt; name% h9 Y" z  ]+ j8 ~( B
'Hans'2 h* e" C* e5 p
&gt; age. C: I, L. V3 w9 Q* {+ K+ b3 m
185 A+ h7 O2 A( l: @/ `5 I
+ `3 E% R. ]& n5 z* ?
//多行使用反引号`` 类型python中的三引号/ j$ Q& I  e6 G, }
&gt; var text = `A young idler,
" `% p" S% w  d2 w& Xan old beggar`
6 X) v0 v5 E/ T* C0 a' Q6 k, N&gt; text
6 Z5 W! k: C% z& G8 g. H7 }'A young idler,\nan old beggar'
+ O1 x. s8 n! W6 K' O' R</code></pre>
+ K. S2 C4 s6 f$ ^& W! D8 r* A<p><strong>声明常量:</strong></p>
* N3 G8 \) S/ h( t5 X<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
/ [6 K7 e$ Q: v& x8 Y  a<pre><code class="language-javascript">&gt; const pi = 3.148 r. b6 s* m9 v1 D3 Y) Z
&gt; pi* `9 r3 N" Q! A1 K# L' V& v
3.141 G$ z/ b# b! A3 r& I4 C
&gt;  pi = 3.01
' u3 ^1 h8 s- Z) |3 Q) NUncaught TypeError: Assignment to constant variable.# A" B7 a5 w/ n
    at &lt;anonymous&gt;:1:4& f+ T' M: Q8 [. w! D7 \5 n  j2 O1 H
. L6 U& _2 k" B# j% E
</code></pre>: a) C" I+ L- m6 v( q. v
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
% |9 Y7 r' K! [! h: V<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>+ G  Q3 g0 J6 [9 ~
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
; C, p2 Z( w$ J; f, J<h4 id="231-number类型">2.3.1 Number类型</h4>
  }' ~7 A2 U0 ]( H  D/ k" G<pre><code class="language-javascript">&gt; var a = 5
! i# y) b; o& n4 V0 m4 K- \; Y. b&gt; typeof a   //查看变量的类型  
8 b+ J5 R0 t* e  n1 Gnumber
/ |; U; U; P0 t" E; }0 M" ~; t3 z( r# G! o+ g
&gt; var b = 1.3
* B7 c9 x8 t& t0 L6 q8 t- N( C' L&gt; typeof b# m0 O6 K4 y9 x( ?
number
. m, J3 K, N& b' V: G2 q( V0 A$ L$ `# {7 R$ g
// 不管整型还是浮点型打开出来的结果都是number类型
5 X0 a( q4 s5 `5 _9 N) e( @" J$ V2 E/ L, N+ `" Q$ {
/*
, o9 v2 a7 ?, X4 V( w1 x& X% F% rNaN:Not A Number
# \8 P( i* c3 K8 b* t! iNaN属于数值类型 表示的意思是 不是一个数字
. V$ U9 ~0 O7 K: B) I" @* A" N*/
, }! S  H: S9 M2 g" o4 n& b/ c' H* w+ P2 ^/ D
parseInt('2345')  // 转整型! w2 Y/ E, s0 m: ~0 r) @
2345) J; o7 Z7 W3 e; a: {  c
parseInt('2345.5')
  ^; V2 T0 ^" d7 u' u* W2 X+ _23451 K/ _3 P' c. G* y, s, q
parseFloat('2345.5') // 转浮点型$ U3 M' [% B) [; |6 L
2345.5
) ^+ b& J, W; s% p; r6 G8 q* W1 JparseFloat('ABC')
$ p' I8 E$ f9 p* o9 O# z# s' `; eNaN
# Q7 {. O1 `$ x/ R0 V+ rparseInt('abc')
* b& j$ Q( }8 E+ \NaN+ x: m) w3 G# z
</code></pre>8 ?0 A% u4 o  [! e* Z
<h4 id="232-string类型">2.3.2 String类型</h4>
% z2 g- J) ], X/ Q: o, a  r$ o4 J<pre><code class="language-javascript">&gt; var name = 'Hans'3 l2 p; P2 b  e/ a" H2 c$ s! V
&gt; typeof name
, z4 d" ?6 g, Q4 X'string'0 N# z2 p7 t# r

! m5 X" [5 J8 o  G7 R" l//常用方法7 u8 N. z1 m5 j: i* ^
// 变量值长度
4 U8 w/ f* ~* M8 q/ {# ^&gt; name.length# L' m0 ~8 \5 f* f2 T
4
1 x3 N( t6 g! L' c* p5 T2 E. ?// trim() 移除空白1 d' W! X# g. `) E
&gt; var a = '    ABC    '
9 T( Z* d! }# N) Z! `&gt; a
4 u2 m2 B4 z. Q: `! U1 Z) w$ X'    ABC    '
& q( w7 ]4 P4 Q  B% _# |" O&gt; a.trim()" {' J+ m* t/ O4 B! R1 X3 L* w
'ABC'
% O5 |. p  _# ^//移除左边的空白+ P1 ]7 c0 u9 h
&gt; a.trimLeft()
& }# ?- ~0 C, s: L& ~! k; s'ABC    '7 t& h6 D2 v3 ]; N+ c
//移除右边的空白
8 y7 N+ g+ `8 A6 J2 p2 U&gt; a.trimRight()
- z8 G, J* k6 ]* r/ I'    ABC'& n4 _% t' M# N! ]+ K

3 C6 f$ `' V8 A! E  r( ]9 H//返回第n个字符,从0开始+ ?% d* @! c* K% I
&gt; name
, B" G4 a" }6 d# C3 X  i'Hans'# g" A& O+ J( T8 i2 l  E  _' K
&gt; name.charAt(3)6 x6 \: C3 d! _
's'; k% h0 f) F# C0 q# g# F, i. q8 _: z
&gt; name.charAt()
, x' O5 G' E$ t$ C' c& i'H'
* L' ^* r0 a9 k# T) [&gt; name.charAt(1): C6 O5 Z) g) a  @6 t) M
'a', S. I5 K' M# o. f& D6 y3 F8 y
# G7 N; ~! y( e) i1 y- b, r
// 在javascript中推荐使用加号(+)拼接7 ?! b$ P4 O& t- l3 O; R. y% t
&gt; name% f% A, \) @$ K0 O" ~# D
'Hans'
6 Q* e7 Y0 W3 F  @7 g7 b) p- n6 o; y&gt; a& D) q% Z5 H+ q9 P0 l2 g+ b0 t: e
'    ABC    '
- u8 ^1 ?/ b  g! t: V5 d: R&gt; name + a
5 a; U$ O, [1 L0 p3 U, O'Hans    ABC    '
  r3 o# v  T% X+ Z; B/ y// 使用concat拼接
& n7 D7 Y% w; H5 M$ x% u5 E9 Y&gt; name.concat(a)  {7 }" a1 S! p* J- g* t9 P7 u
'Hans    ABC    '& L9 d: x. |1 P- X3 {  W0 V2 Q8 j

# U  e5 M9 {$ F//indexOf(substring, start)子序列位置
. N* f* g+ z7 K' q9 ^2 d* O# f8 d! t# z6 }% Z+ ?) V& i
&gt; text. O; J  I: d6 d* q) D' l
'A young idler,\nan old beggar'
" M/ X" X; A  T8 w1 r% @8 [&gt; text.indexOf('young',0)
- }/ s* l8 d) k2 y7 T1 [" L2, _6 e7 n; A. V8 o
( `7 V; J( E1 z9 l' w/ [  Q: ^4 L) w
//.substring(from, to)        根据索引获取子序列* g" X1 S) l  n5 _0 n0 v$ q
&gt; text.substring(0,), K" G; `( ^- y% ]% I+ z
'A young idler,\nan old beggar'
  o# a, h2 N. C7 e0 A- w# C7 i&gt; text.substring(0,10)
. [2 ~/ ?3 I$ S5 @' o1 l'A young id'& r& ]: e! r: z7 X* I
0 o- J# O5 j& L1 a/ k+ K' k
// .slice(start, end)        切片, 从0开始顾头不顾尾6 B- p' S6 ?9 y$ Y* |: M8 r$ _4 t
&gt; name.slice(0,3)- r9 w% u, Q5 J0 ^! @# O/ f
'Han'( X: U( ^9 j0 `4 e2 {

+ x9 E" [* C" v3 C7 {; H7 Q// 转小写
: r: x$ v! D+ O: S&gt; name
, Q7 r, b7 ?7 Q: g" n'Hans'% C* B1 A( X) A  q( [& ^: m9 U: i& f
&gt; name.toLowerCase(). `# Q' V; s) O+ R! v4 P' D% N% L- J( }
'hans'
* S7 W. d3 @/ m5 J1 {8 e// 转大写& q5 h8 h" y1 c8 F
&gt; name.toUpperCase()
" x0 ?! ^* Y$ n5 V$ ^& [$ C: v4 _'HANS'8 m4 K0 a( L" b6 }4 k" u
$ K8 \5 E8 p6 \2 [9 i
// 分隔2 d7 A% L. |( {4 W1 l$ ^" t
&gt; name+ n9 r5 @. l5 p, Y/ i
'Hans'' q  m& v" b0 c& @" Q* W  |5 c
&gt; name.split('a')0 E1 J3 p) s# }4 Z
(2)&nbsp;['H', 'ns']
4 C9 q, e& Y7 X. n</code></pre>
/ s" b+ N* J! A* ~' W<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>' V3 j- b6 d) M/ r! y. m4 R
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>8 g  J1 W! [: m1 M4 m- M0 V; M. {/ J$ t
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p># Q2 e" l9 [& a' b0 N; k
<p><strong>null和undefined</strong></p>6 C. ]/ U( A8 |6 D8 P6 ~
<ul>
( s; C' A- r2 g/ y2 v9 Z0 Y<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>/ k  ?+ R4 [: M" {3 n9 v3 m; ~
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
1 n+ P; X% ]6 o) f4 C; \</ul>
' I2 n2 e2 ~- V<h4 id="234-array数组">2.3.4 Array数组</h4>  {; ]/ r( u  l5 l$ ^% P
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>. R0 R2 Q& r& ^6 V( \
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] / |! [( M( L  |2 x" b
&gt; array1! Z  j  V2 R+ N% l( a
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% _# v" x) Q* ?/ C( i&gt; console.log(array1[2])  //console.log打印类似python中的print0 w! j' ]+ W0 ]4 M  r, w
3) O* z% _: B  k' H
// length元素个数2 N7 o& h: w. i$ ?# Z
&gt; array1.length
9 t4 _0 `4 k6 r$ V8 O/ e; F2 d6' _4 f3 I$ Z. ?% T
// 在尾部增加元素,类型append6 t  u7 |+ C+ j* G) s* O" O* W
&gt; array1.push('D')
/ ]2 U5 ]5 M, E% w& O: n* c7
5 v4 c4 b: t  r( H&gt; array1
$ H0 o3 T; F" t6 v(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']8 n& s/ n+ x6 E9 |8 W& r) |; M
// 在头部增加元素; v* ~: J( z! {# @& O
&gt; array1.unshift(0)
- Z" y. F  w/ X* T+ v) V9 y( f87 v- N+ x) s# J/ g! P8 u2 H
&gt; array1
; @) t8 M( G8 u* b(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']# M/ c5 g* v! d* H

/ q; ~0 d8 t& z4 _. h: f3 }//取最后一个元素3 `3 l$ L# z1 D0 Z$ Y
&gt; array1.pop()
+ p: U; B9 _1 C6 g0 q' v' Y( k# V/ p$ C'D'
: ~9 Q$ X7 O, \8 p&gt; array1
* o0 i/ b0 h- J9 \' S(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
1 l. B5 m3 u- q) \  F1 t//取头部元素
% B) ?# ^* V% K! v. z&gt; array1.shift()
: X6 e7 R( d" c, z& [5 ]: v- c0
# i& ^- S" G1 J&gt; array19 Y3 Q: ?( k$ }8 t! `# f
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']1 F; m9 m) E& D1 P  l- }6 w
+ Z( k; G7 A9 B8 s# _9 G9 X) r
//切片, 从0开始顾头不顾尾
" g7 M1 o5 ]% ~&gt; array1.slice(3,6)
) w% ~0 a: h, U3 m2 [(3)&nbsp;['a', 'b', 'c']
% a' u; T+ `# M+ ~2 P$ u) }// 反转
8 c- `5 D0 U% K, y8 W&gt; array1.reverse()$ M( Q3 w! N$ r& t  y0 W" X( U
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]" a. x* e  _& V% |; @: Y5 ^2 G' L
// 将数组元素连接成字符串
9 o' K7 R1 w( @/ l0 ~2 B&gt; array1.join() // 什么不都写默认使用逗号分隔2 A3 f( v0 J0 _* {, s7 s
'c,b,a,3,2,1'$ S  _; ?0 e( @" t* k
&gt; array1.join('')1 z% [. [8 m4 D
'cba321', |0 }! \8 y3 M5 D6 a: A
&gt; array1.join('|'), T! z: M, E1 I4 z/ \: s
'c|b|a|3|2|1') R6 p9 `  F6 k& r
+ o" [1 B  I( W! G; a! R/ h
// 连接数组
& y% Z5 ^" a" z( D4 A# I! J+ v&gt; var array2 = ['A','B','C']7 n$ j$ U3 s9 }; l  V
&gt; array1.concat(array2)
8 m3 y; P" z2 @$ h* O% d(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
% v0 n! J: d3 G& q3 [5 K& C0 _2 g" ?. V* f, g
// 排序
2 V' h' S( L7 ~; e( C/ s&gt; array1.sort()5 A1 [6 p1 R. {: y( W. X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 y( h( v9 ]; T" w2 e
6 U1 r! w* F! V5 W- p" B5 k: x// 删除元素,并可以向数据组中添加新元素(可选)
8 n' d: }( S/ S&gt; array1.splice(3,3)  // 删除元素
1 [' K9 ?9 U# W* N8 M4 l9 b- A# r(3)&nbsp;['a', 'b', 'c']+ D2 S/ X7 \3 _2 Y& Z* U
&gt; array1
7 s7 ^+ `, t+ u3 Q& z+ W, Y(3)&nbsp;[1, 2, 3]
' k7 T. o, E& B  x" T5 H&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素* U7 g' F  x* j: y# B% V
[]
& Z1 [& a' J2 L6 O0 N# J1 I' F&gt; array15 C; y/ S* S. T2 A8 y
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
" P0 T2 E% k7 S7 t* j2 W" m
! D; @8 J  `; ?* H/*8 y& W9 f8 p) K$ p, |
splice(index,howmany,item1,.....,itemX)! l0 E7 U3 p' }' I4 a1 F
index:必需,必须是数字。规定从何处添加/删除元素。. F( K( Q3 E4 w( N3 Y
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. u" P1 Y5 {3 p$ X2 |0 v, K
item1, ..., itemX        可选。要添加到数组的新元素
" W  A9 S/ s* C+ |! W  ?  Q9 E*/: K( o+ f! S0 O$ e- I8 B
; O3 e& ?! {5 ^! L( J
// forEach()        将数组的每个元素传递给回调函数
* Y/ }; \* a7 ]. W4 j&gt; array1.forEach(function test(n){console.log(n)})2 o: L! I3 k  M) y6 M0 S
1
+ G9 P4 A/ T2 c: a# N8 u" ?9 | 2& ?$ i/ K0 A/ C4 v$ T
3
1 W) N( g9 }' j  g# s A
; h2 V* |2 p" X5 V+ o. M B( g# c" N0 x1 K' C
C3 x3 V! i: n) x/ x8 \
// 返回一个数组元素调用函数处理后的值的新数组
& v+ g4 a4 U- q0 A&gt; array1.map(function(value){return value +1})5 x, \# ~/ Y, Y" o
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']! \, a6 T0 w9 q0 A; O" N. W) ^# k
</code></pre>/ W( @+ i/ R( k  A6 U8 V
<h3 id="24-运算符">2.4 运算符</h3>7 c0 ]- O) l8 p$ \( e& q6 _
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 p7 u) w# |4 P% i<p><code>+ - * / % ++ --</code></p>; R: ?* h8 U* E6 @) T0 q
<pre><code class="language-javascript">&gt; var a = 6* Y  V8 P; P. A" L! C/ d; h
&gt; var b = 3. P7 H9 ?6 b- ?& H
// 加
: d. W0 k% L4 _! c; A/ v% w3 p& R+ p; @% F&gt; a + b
: x3 D% X+ s0 K9 T& S9! H* x( u9 N; E. m  C
// 减
! d" G$ P7 w0 n  U&gt; a - b
$ K4 e3 w3 }5 g8 W1 m/ c3, [# M/ B/ p7 C# {* i( [
// 乘7 P  ]" |4 \  t2 s8 A# [4 R/ [9 W
&gt; a * b: @( @6 U, y; j! _. `
18+ [! P$ S7 ]& f/ ~; i7 e
// 除+ \% ~, B+ a3 l1 Z
&gt; a / b
* i* n4 G  `# o  r0 H# k( p2
3 t! z1 q- a8 J- j% q: r3 E/ _- s// 取模(取余)
4 m, y2 T* a. o( o4 B) p; A! [; |&gt; a % b# h# ?3 o3 e+ p: t4 F) j
0
- B* [7 B2 z; u// 自增1(先赋值再增1)
' q9 D4 S4 j5 c- q- u&gt; a++
/ Z+ u4 O- }) h$ \. l6, N+ o+ C" T- ^" R
&gt; a, z. g2 |( q. l
7) @% Q: J! C6 f( M/ B
// 自减1(先赋值再减1)8 P6 e5 i& K: r8 [- b" m
&gt; a--' w7 y) E( q: @7 T' V. D
7
& B: B; t) G7 L7 R1 L4 ^8 L# _# n&gt; a3 |2 g( j; v# j1 R# p" D. c8 C
6
2 D0 X3 K3 E$ U+ N/ A% u// 自增1(先增1再赋值)& L: S( K% b) W8 u7 v, Q0 a' Y
&gt; ++a- J+ S. [4 ]) k1 v+ L8 V
7
( `# H6 o0 k) ?% Z& l6 ]: f// 自减1(先减1再赋值)
- H! q( ?, E2 O  z; s) g+ _&gt; --a
; O6 q& L8 I3 r+ d" J6
: t# t* r- `# a( `&gt; a# q( E  K0 L( z3 F$ h
6
& M  e- v; ~5 L+ h* b' }/ u2 ]8 Q, I# A6 [/ d( y9 c4 H: y
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理/ A7 N/ A' ]5 @) R1 x
</code></pre>
% w& |6 c/ w% S8 u<h4 id="242-比较运算符">2.4.2 比较运算符</h4>; F0 Y9 h3 `' r8 h; `6 k# H
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
3 [; G* P4 t- C0 C<pre><code class="language-javascript">// 大于
2 A8 `, {: B3 g2 u1 ^&gt; a &gt; b
* I. ?$ d8 U& {' k* ~true" ]5 f) v6 x6 ]* `) r
// 大于等于+ J- N6 u* v. N7 t: O1 l
&gt; a &gt;= b
) z: S" G3 r0 Ntrue
- d" {7 U1 u6 R( A# s" H/ I// 小于
  j2 x& k0 [( E9 C&gt; a &lt; b& N; ^) {; w0 E5 n
false
. P: b3 S  r- _& w% @2 @# ^% F// 小于等于
6 v( R) N6 H, z' J) F: E! ^3 a% J&gt; a &lt;= b
% {7 ^! v' M4 ]: tfalse, b/ y9 ~5 f3 |% i0 K
// 弱不等于* }/ |" M# w* y/ D/ |
&gt; a != b) [# V- o, W- d6 G& K; {
true1 O0 R/ _( Z; ]8 I2 f
// 弱等于" c! w) M- i* u, L8 n* \% t! i9 R0 |
&gt; 1 == '1'
) ~0 u+ Y3 B' o4 ]$ Vtrue* P) _& L; u6 V% X& R  w
// 强等于
+ i; R1 i7 h2 @, w) ^% B, O&gt; 1 === '1'
4 H1 g9 V& R' Y. J) ~3 I# Zfalse
0 j; @! T! P' r+ _! g' ?) n; j// 强不等于1 [6 b0 o9 l0 V2 p0 y9 j9 c
&gt; 1 !== '1'* w- @$ P) F  w# v5 k; G% l, P3 L
true4 W/ q( F+ q! W1 p/ S( |6 q4 n2 j

! N1 ]. _) X, ~8 u/*. i" g2 z- p9 ^9 G# `  o, D
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
1 s$ z! h3 q  C*/  i( T8 w) H6 O5 r( B3 ]0 v
</code></pre>
5 l+ W: l' ]; Q  n0 _<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
% O4 ~1 @3 T% L" {( W0 E8 \* \<p><code>&amp;&amp; || !</code></p>& |7 K0 v& Z3 C$ k' I& H6 n
<pre><code class="language-javascript">&amp;&amp; 与  _$ e6 R& Y( L: v+ T
|| or
8 ^& c* Z# ]" @/ j* i7 x1 _! G! 非
5 u* D" e0 d( ?! w8 a) T</code></pre>
7 G- I+ C6 `4 ]<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>, ]* X- ~, @: Q0 f9 l& j/ d
<p><code>= += -= *= /=</code></p>
& H# |8 r( {: y" h1 D% Z<pre><code class="language-javascript">// 赋值
! c5 R9 H# D/ w# w3 {7 v&gt; var x = 3
+ P" T3 Q9 j6 m0 x// 加等于) p# B6 B* D; j* q' r& w& ?
&gt; x += 2/ E1 O2 F( S+ L5 i& }
5* y+ ]* \9 q+ r2 X+ C. j' C
// 减等于3 h# h5 ?# `) c
&gt; x -= 1
$ s( L$ R$ c, e: ?4 X8 U$ P5 j4
2 k* k, N  G" G# X9 m1 T// 乘等于
4 f& Z1 |* A7 x+ r# c+ ]$ ?3 v; f&gt; x *= 2! a6 T" \; }2 E$ q% w; A
82 |" K% m: o7 `3 M
// 除等于
% v  M$ I5 a2 t" |" K&gt; x /= 2
9 I" o3 I4 i3 V- \8 r/ J8 _4! B, j& M6 o7 G/ i: X* o0 [
</code></pre>
5 o# W; ~, c3 F<h3 id="25-流程控制">2.5 流程控制</h3>
. O5 }+ F: A- X2 R<h4 id="251-if">2.5.1 if</h4>
" Y7 Q: Q% `5 m5 g<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
- \7 N1 a5 ^/ q8 A
' j. ?6 f. }+ ^5 J&gt; var x = 3
8 s6 q2 [* P$ e$ f' r* [5 |( h: E( i&gt; if (x &gt; 2){console.log("OK")}
6 I6 S; ?5 {# e) _, y3 `  r2 q1 [ OK6 t7 G+ u& C1 [9 p, u
$ i8 ^/ R+ x5 n) Q0 x
2, if(条件){条件成立执行代码} ; e: T" F3 I9 p( |
        else{条件不成立执行代码}
! l: ^4 j1 `$ V. t. v6 p# U# f6 X. l% Y' J( [4 g) q1 L
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
8 C  O. \5 F% I1 \5 `'NO'7 h+ L! \' S. d8 K, _
5 o5 u4 i3 U, o# ?- |3 V
3, if(条件1){条件1成立执行代码}
6 q: O, N0 I( a9 w        else if(条件2){条件2成立执行代码}
" h9 I+ M6 b7 r$ [    else{上面条件都不成立执行代码}/ K, q& r) L0 B5 q& D

' i# {+ g' R, \8 T/ C! _8 s' y5 r. e&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}4 D0 B& P" {8 E/ U
Ha
5 @) k: O  [% Q) j( h0 i</code></pre>% l9 a+ D9 v/ [4 i1 F8 y+ E
<h4 id="252-switch">2.5.2 switch</h4>
5 N- v8 c7 [" Z- [% Q  l- c<pre><code class="language-javascript">var day = new Date().getDay();* u" r. f7 w  ^5 f
switch (day) {
, K4 `! ~; v! h2 c  case 0:; w  F1 E  e/ B7 B' D% B
  console.log("Sunday");  _* @4 n! K; p) z  D+ H" Q- d
  break;
: P4 F! ]: I; I5 y  a" k  W  case 1:
" l6 F; u- C; o; k2 A  console.log("Monday");
& r+ a, K. }$ t5 A, v1 [  break;. P+ x( s7 p& a. }
default:
, ~4 [: [8 I5 }. t  console.log("不在范围")9 ]- z% x+ ~+ e; i# ?6 e# u( x3 G' n
}: Y' L$ j! o- w: X0 ~
不在范围
4 H4 V) [6 X4 h</code></pre>1 y$ c' H9 Z$ |% Z8 g
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>' o5 [" w2 R3 [4 ^8 w7 \/ G
<h4 id="253-for">2.5.3 for</h4>
; C  s! a) ?2 O, n7 P; f# ^<pre><code class="language-python">// for 循环) n1 e0 k4 n9 B2 g( W% |
        for(起始值;循环条件;每次循环后执行的操作){& L2 W! P' b) ~* |, u1 T) @
        for循环体代码
0 N) v" W5 k; [, {2 o    }
/ w6 M3 A/ K, V! ^8 `4 f5 W8 c, a% c7 C% C
for (var i = 0; i&lt;10; i++){
5 E9 }; m* ]7 E    console.log(i)4 n* n; E% S+ I+ m! ^: ~' T' P9 @
}4 n, T5 V  u. k& V' D
        0; t9 P" p) N( v" s/ I. ?2 T- g
        1
# ]0 b9 J0 Y0 P* @5 s) K& J        2
0 H9 o/ d  F) n        3
2 ^( ?! p( p4 B& J        4) `" M6 z- ~# e- a9 t, t# @
        5
2 n! z5 M. V7 X; u, o( {0 d" ^  G8 D        6% Q8 g2 \  n$ p: L7 r$ j% U5 u
        7
9 ?% {3 E$ b4 p/ Z0 P8 ^& J6 R        8
" I% \. G7 Y: Z& v        9- y9 d8 Y1 ^/ k
</code></pre>
( N# |5 ]( ]* U0 d% I" d. I# K<h4 id="254-while">2.5.4 while</h4>
$ ]( ^2 v3 ~. J1 A  C) R, {) w+ N<pre><code class="language-javascript">// while 循环9 b8 `9 F, h" _: u3 W4 d
        while(循环条件){* N$ P4 E' _, i" e4 B8 |
        循环体代码
( A9 v+ R+ @9 u; P; v    }  Q; z" X% y8 p) Q
$ E+ ~5 T+ A, f  w8 {. ]
&gt; var i = 0- v) Y" @4 g# l5 R6 i* c  L
&gt; while(i&lt;10){" S& u, I& j3 `/ q* @4 J
    console.log(i)
/ m% v3 @% U3 D" Q0 P4 Y    i++  K* u: y/ i3 z5 p2 D9 `% a
}  A$ k" t1 ?* @  K3 |
0. Y; L6 F/ I2 B
1# Q* J, Z  i* z/ C; g% g) Z8 P  C
2
# |/ g/ S( b1 S; K: t6 } 3; [0 Y6 g+ ]; \/ r6 r
4" e  p! d& ^- I: ]& z, L4 ~
57 |4 ]5 c; P5 k6 D9 @3 E" j6 K" c
6$ Q; q, o5 {' h0 i0 A9 Q" }: R
7; |2 g% }/ C( W& N+ C: H
8
' n3 s3 A" U+ E# _; p( P  Y 9
* J2 M; s6 N! H4 y</code></pre>* W  V7 N7 d: M% P7 q) g
<h4 id="255-break和continue">2.5.5 break和continue</h4>
, F6 Q7 F% ]7 Q8 t9 M1 O<pre><code class="language-javascript">// break
( u+ `+ F1 m+ efor (var i = 0; i&lt;10; i++){3 P8 g4 n$ E+ M9 a  a1 \
    if (i == 5){break}- c# N6 @5 Y/ k% E% @7 g
    console.log(i)
0 ]. }, u% b, }/ Z# D+ I}  X% b- B# F# C  m7 w
0
  n! p- |, U3 d: c 1* P$ @! O2 c3 n7 J# p
2
' I. u- Q0 h+ j, N- I" e7 `6 W9 z 3
7 U9 V7 b( ^8 p5 s7 N+ v) z* G 4, R! W4 N: n- }: K
// continue
2 k$ E' f' R( g0 [/ [for (var i = 0; i&lt;10; i++){$ V; Y  ]& H# z/ o
    if (i == 5){continue}
) ~: Z* N" P" k; j+ \    console.log(i)& ^0 b! t) W" ^: g
}
9 B6 Q0 K- R7 Y  I8 x6 q 0
+ V/ @; j0 l8 B% l* Q 16 v8 {, f+ N, H7 C& O
24 \6 V& N! B6 d9 r/ Y  t
3
+ w8 t* M" |1 w8 O5 | 4) t( T5 f4 X2 B% y9 G
6
2 {( u9 L% C, h/ A: V, J 7
- a7 d9 Z2 Z' F% P 80 Z" Q+ t, P2 d2 i; b, x; O
9
: k/ L5 A; E% t( j% v5 H; s$ U4 Q. u; D) ^5 C( E: M$ ?
</code></pre>
& _0 B0 }' O8 Y<h3 id="26-三元运算">2.6 三元运算</h3>  S% b9 |. f9 U% M
<pre><code class="language-javascript">&gt; a
; G3 o1 j1 w% c& y+ q( r6# A$ K/ @6 g/ j5 o9 f1 C
&gt; b
. F" ]" a# b  B3$ N( Y$ \! X1 z! p# H% [3 E4 o

# e1 g' w  x1 Y+ g& s//条件成立c为a的值,不成立c为b的值
- |- a/ J! x0 @: A) H, _2 e&gt; var c = a &gt; b ? a : b
% T+ r' ]: @, [: m! U&gt; c
; a- p8 a/ ~$ \! ]6
! S( c0 {5 c' d7 @/ y+ Y' G3 o' L9 ]
// 三元运算可以嵌套; V# @- ]2 s6 @$ p& P
</code></pre>
- y, _; V6 \( _2 {% ?<h3 id="27-函数">2.7 函数</h3>
& [6 }8 R% G3 ?- k<pre><code class="language-javascript">1. 普通函数
  J8 x! @* V& ^8 T" K1 G2 \2 q&gt; function foo1(){
$ V: r! u$ G* j8 j; ~, B    console.log("Hi")7 D" f6 T, D( v% u" P
}' ~% ?. e7 y7 P" f+ ~. l
4 }; R& n' n( a. R7 _
&gt; foo1()
5 ]/ m( `+ t" \5 U# s* Q' ?        Hi. r! l8 O5 h) f+ h! }8 ~
2. 带参数函数
: G: D5 D% q2 t* Z1 ^&gt; function foo1(name){
+ S6 R, u4 [  `8 L2 m5 Uconsole.log("Hi",name)
% k6 B0 C0 c2 i3 \# n% m) `3 q& ~}
0 T3 R, |( l) j8 z9 H$ z  g6 Q  g- x. u
3 C& C1 h% U% _&gt; foo1("Hans")
; h) t! v7 r; C# d, DHi Hans% k+ X; q$ G. `4 E6 |

4 h' }* q$ E) ?# v: b&gt; var name = "Hello"
5 @& {0 p$ L; L8 S- Z&gt; foo1(name)
  X+ g8 B, `, k; c, e7 N, @Hi Hello5 \$ C( P/ I, r7 f! f  U. v
# f1 ^9 B+ P  p6 O  Z8 K
3. 带返回值函数
' K$ r# [% c% `4 ~6 I- ?&gt; function foo1(a,b){8 y% Q5 g; `5 v7 m' M( w
        return a + b   * Q8 O- {8 [1 V2 M
}
  ^- u% P9 ~+ h  e/ B&gt; foo1(1,2)
/ P# R; {3 T; [( e, T6 ]3
  d- E7 d6 z. ~8 U. o&gt; var a = foo1(10,20)  //接受函数返回值
9 d) O( d% ~1 m7 g, ~( ?+ D&gt; a0 l) |/ D2 q6 q' x% m0 @
30
( h2 N4 ^9 a7 o; \0 A
% U0 K7 X4 u9 @5 e: S% X  H+ J5 ~4. 匿名函数
9 @! y+ H: ]- Q2 q3 V' {6 N* u&gt; var sum = function(a, b){
1 e: k# o8 T; m& r  return a + b;
+ M# {& R3 ]3 s: }6 o/ q. G2 l}9 m  G, k3 O8 H+ i
&gt; sum(1,2)7 v/ @* i& z9 I$ V5 K3 z
3
' s0 }9 O$ w9 L& e9 t* I+ D4 A$ j- w5 A
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
1 A" m, R) o0 h9 t! k&gt; (function(a, b){
3 V3 n+ V7 K" Y9 C2 Z$ A  return a + b5 @+ B, |$ c* s& D; E: ?: R
})(10, 20)$ T0 |2 `) |, k. c  Q; D
302 @: t0 h; T6 X8 G

( }6 N% }" P: @1 f  w4 p' t5. 闭包函数
$ F2 U, s$ e: R* g. ?$ \// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数0 W) H- T4 b1 l1 N7 ]6 q
var city = "BJ"5 G4 \. y( L/ z4 V" p0 g* `* q7 D' j* d
function f(){' @3 \) v! t3 Q
    var city = "SH"( _8 P, o( M0 ^% B
    function inner(){4 r7 |5 @7 u/ A3 U7 ]
        console.log(city)
" x4 q% i0 f2 r. k+ P    }
# [2 R- `2 ?5 s$ M9 S0 e    return inner
  n& ~6 Q2 ~0 g5 S* N}& ]! F) d4 ], v
var ret = f()
" v, R7 S9 u; q) @9 yret()7 w$ S9 Q7 v) C) d6 w1 C" J! x3 D0 H
执行结果:4 C) @/ z4 {& ]! p+ w- O3 s
SH
7 D0 Z0 d# |1 e, c' }# Z- \+ o1 P  d6 H# M
</code></pre>
5 k& D% q7 ]/ K3 E<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
/ u7 j  P9 i' }+ M2 R<pre><code class="language-javascript">var f = v =&gt; v;
# z$ ]8 T7 ^8 y9 q3 S// 等同于
# z, c. z1 D7 r1 Kvar f = function(v){
* h+ J) T( D6 h# `2 o6 X& y3 |; d  return v;
! y" ?" m" {8 D6 O( t3 c}
! |/ x- l0 I& v) A) N$ j</code></pre>% k$ ^& x# T& |& g
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
; V$ J% t. ]% J. M) a2 X<pre><code class="language-javascript">function foo1(a,b){
, l( o+ J- v# u    console.log(arguments.length)  //参数的个数 9 x% q( w0 y% \5 r
    console.log(arguments[0]) // 第一个参数的值$ S: d8 Z9 @9 ^( }, k0 H
        return a + b   ! h( O  r% h( d' H
}
8 r4 F. q" x+ N7 P, Mfoo1(10,20)) N0 n7 F9 p" X: W, E
结果:
1 i8 g7 ?' e/ E8 L- x8 D 2          //参数的个数
0 o3 |- X, N3 }2 J8 _' _10        // 第一个参数的值
6 {! h7 K4 j) D% a9 L1 A30        // 返回相加的结果& {# W$ W# o4 q) C9 ]
</code></pre>1 m$ N6 ^9 U2 v$ W
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>8 g1 w, \8 M! A
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>' C0 D& \- f8 s  v) b
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
. c: ?9 z  O7 T/ Y2 N8 U<h4 id="281-date对象">2.8.1 Date对象</h4>1 x4 Z3 n5 k2 f" Z% q
<pre><code class="language-javascript">&gt; var data_test = new Date()/ o) W- V6 }: \4 Z# @* T
&gt; data_test
6 ^- m7 \* P5 {! K: @2 ?+ [9 n$ }Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  W5 h) B! \$ \! z) N
&gt; data_test.toLocaleString()
4 }+ R0 G, M) N'2022/2/11 下午9:44:43'
3 d( u/ s  G# `0 }' h( W; T/ v' e4 ?( l9 }" B) f
&gt; data_test.toLocaleDateString()" g( R* ?7 ?! o9 _
'2022/2/11'
. A3 B0 N1 j, f0 M  p/ c' @: G; F( g4 x/ ?0 z% J
&gt; var data_test2  = new Date("2022/2/11 9:44:43"). ~$ }  B, V! V
&gt; data_test2.toLocaleString()- R, \; m" C6 a" A8 W  a
'2022/2/11 上午9:44:43': O# l$ M* z2 E) n
. k" F. e& L! y
// 获取当前几号
3 u5 |. m" T9 v5 z&gt; data_test.getDate()
, \  w1 m+ f9 @4 e0 c11
7 G/ Y* v) h3 S// 获取星期几,数字表示
' v6 W3 E( ~" K% S) p/ ?& Q5 c5 t&gt; data_test.getDay()  
7 g+ c- l' q% e6 s. B  r6 i5
) ^. g1 \# E, b5 v3 d6 C// 获取月份(0-11)+ Q" z6 O; W) k) X: p3 ]  W2 b, ~
&gt; data_test.getMonth()& k- ]* y8 k& E) y! x( m) p
17 n/ F7 u2 T8 l
// 获取完整年份
" y+ s) N* C/ q* X&gt; data_test.getFullYear()
: p/ U/ g5 U( N6 N; D  c2022
5 M" ^; m+ e+ j, p; P$ i// 获取时1 T4 u; \" n: z/ y
&gt; data_test.getHours()$ T* ?5 o% d. N
21, C# d* ^1 q0 ]% j) h
// 获取分
3 j7 `  n4 m! n! e" z8 N* k&gt; data_test.getMinutes()
* H2 w! y7 N5 b8 W44* n& c8 F) v; L2 x
// 获取秒2 Q5 B* B" J; N5 @) h6 _$ g7 I
&gt; data_test.getSeconds()6 ?& ]' U" O$ o" B  K: `% {
434 ?- Z0 d! N( r% F7 a
// 获取毫秒7 K" _6 I+ q% n; z4 V+ v# L
&gt; data_test.getMilliseconds()
  s- R: e( T) \2 ^, L% g" ]290
* S) _/ N5 t4 w: O5 ?! \$ I// 获取时间戳2 d3 c% ~; n3 C. \6 F. S' I
&gt; data_test.getTime()9 a8 }  n; A9 i/ I/ o
1644587083290& m5 v) d- W4 N# s! `
</code></pre>
! f8 W, \9 R, d, I! t<h4 id="282-json对象">2.8.2 Json对象</h4>
' B3 y* E( Q# ~. V7 U1 [3 `( k& a<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
! W3 e. m" V- Y( sJSON.parse()  // 反序列化,把JSON字符串转换成对象, z2 E( l6 Q0 E* s5 w% a' z0 Z# B
) a/ B/ W5 o% e8 J6 q
// 序列化
' U' s5 b3 N0 U) a&gt; var jstojson = JSON.stringify(person)
4 l+ u1 m% T- _" `&gt; jstojson  ' L* P& L. h( c8 e! V
'{"Name":"Hans","Age":18}'; f$ A: [( J7 F* `1 G1 n! X+ z/ H
; U: e2 S4 h8 N1 T. k
// 反序列化
2 Z1 R: f7 Z& }2 b+ l& y3 v) W. `&gt; var x = JSON.parse(jstojson)
6 F- a2 \7 q# n7 z* o&gt; x( A4 m1 e% R, E9 O' \
{Name: 'Hans', Age: 18}
7 z3 N! Y" e% P  j&gt; x.Age
/ s' q& B- a9 y. U18
; G: n  c  I6 P& ?</code></pre>
+ w" O, x8 f: M1 m1 `<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
9 y) z. ]) t1 D- a- x* p! r% l<p>正则</p>
  t6 R" d5 H0 w( f<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
# x7 z  [3 o6 Z4 C&gt; reg1( g4 c. N3 v6 `
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
; k; \% \( b) b' _/ `& u1 L6 e&gt; reg1.test("Hans666")
. O2 j3 t7 R/ i: s0 L8 ^true
/ e% k/ L2 b) \
; A, ~6 n* @8 R3 d* a&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
2 d4 W3 l# ^$ g&gt; reg2
1 R6 |/ q6 \0 s+ b/^[a-zA-Z][a-zA-Z0-9]{4,7}/, F% R2 q9 I. C( ?! r. E
&gt; reg2.test('Hasdfa')( _) K! H1 ~) t2 m
true
1 x. n  b5 J8 X1 ^, j' ?# J% I8 y: o2 W) T; }; r- T+ ~: M" d  U
全局匹配:
9 D0 E; ]( x( r- p2 v7 p&gt; name2 l$ e! ]5 {2 R: x+ w! ~* ?/ p* x
'Hello'
/ P3 @0 j1 P  c& d4 N&gt; name.match(/l/)$ }# ^1 y9 q8 x1 o- Z: L0 L( D5 J
['l', index: 2, input: 'Hello', groups: undefined]/ }, O7 W4 L) n# I

  O. a9 J5 x8 Y% H- H&gt; name.match(/l/g), f" z  E% J8 d) r( m4 D
(2)&nbsp;['l', 'l']2 x5 e; i( r; n
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
" V2 o; `$ H# J# g$ h; _* }+ W7 V  d; C5 q1 U, ]
全局匹配注意事项:
. o* w& }( e* K& w- h&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
0 g# W1 T  m# C4 w4 y' l% l&gt; reg2.test('Hasdfa')
. s/ s0 r0 g( y) y5 itrue
, |5 b& V  x2 P+ X, Z( g&gt;reg2.lastIndex;% c4 X) d& H% w$ v
6  t  x! b9 m6 L1 Q4 W5 r. N
&gt; reg2.test('Hasdfa')
# T4 x8 g5 X$ l, \4 G# r( x5 dfalse
. Q, B+ ^* ^! ?: J/ C) M&gt; reg2.lastIndex;
) `, G6 r5 o9 K2 ~0+ R% @$ V" t; h" B3 ^  D5 y
&gt; reg2.test('Hasdfa')
" d* S" c+ ?1 [, Z4 B- t  [% d" ^true8 s( @# a6 e- k1 |$ B$ n1 u3 n7 E& j* y
&gt; reg2.lastIndex;& ?9 x, A* w4 E+ P
6
5 t! ?5 z+ o6 ^3 L  q: c( [) Y&gt; reg2.test('Hasdfa')# P9 |& C$ O1 i3 d1 p
false  `) ]/ I3 U9 W% x
&gt; reg2.lastIndex;
5 u% G/ c! @) ?( S' X5 w7 q0
# x, R& M6 ~- a0 E2 M// 全局匹配会有一个lastindex属性
9 Y! i' X% ~7 p9 h  }. c&gt; reg2.test()
. k) p2 }# g; G8 J2 U- @false
& e5 Q' r4 ~; H: q7 c3 z&gt; reg2.test()1 x  r7 \" m9 \0 i* \3 A4 {
true4 M: ^( I$ `* g4 ?
// 校验时不传参数默认传的是undefined' i" i! g( I8 t+ m/ q$ ]
</code></pre>
. x. H* ]  x+ h, ]<h4 id="284-自定义对象">2.8.4 自定义对象</h4>9 R; J3 O! G# T. H+ b5 q! M% ^3 z0 Y+ b
<p>就相当于是<code>python</code>中的字典</p>$ C! N' _. I% o0 [
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: T% F9 c# W/ v5 `&gt; person: R! k) C$ z" n* W8 K2 B: n4 M$ P
{Name: 'Hans', Age: 18}
' I, j$ m) X/ J1 R&gt; person.Name/ ]3 |  x) g# ^; j8 O6 a! k, z
'Hans'
. p! f" w. o# T2 e  N" `% h&gt; person["Name"]. ]" t8 ^: x9 r
'Hans'( b% @2 L, D0 k: x# v

0 F9 @+ g  u6 b+ X# s, J- d% M// 也可以使用new Object创建4 c# s4 N0 C: ]2 f) \
&gt; var person2 = new Object(): [: C6 K9 {) L7 U9 h1 X$ V
&gt; person2.name = "Hello"
4 `0 g0 N/ M- J8 Z2 i' H" R7 p'Hello'
, N5 w, w4 o* e" v, g! ^&gt; person2.age = 20$ x5 \/ ^- b: L8 a$ y% w6 |
20# m7 [& m4 }1 W: X  J
</code></pre>& B' v; o( x" \' ^% j% C0 r
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>, I  P/ z( N/ u, m  T! X
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>0 t/ z2 o& m4 [& J& t, y) g' N+ R& I
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
  h1 F  ]% L- g& B<h3 id="31-window-对象">3.1 window 对象</h3>
* ?; \7 K3 u: i/ Z& Q+ R, L4 w<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
/ g8 S) H9 R- Q% u) F" N: r* C" h% V<pre><code class="language-python">//览器窗口的内部高度' H/ w. b3 Z" b
window.innerHeight % E5 a- R) Q8 Q% E7 D2 p
706
: a4 L, i& w( b5 a$ B3 w9 h//浏览器窗口的内部宽度
5 v- f& H; f! Q6 m2 a7 r+ Z+ }window.innerWidth. o& |4 i+ _( K$ E0 d
1522
5 d. e8 P( w  P3 O// 打开新窗口
' }: w' \5 E  B3 iwindow.open('https://www.baidu.com'): Q1 |8 |: A, y
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}3 S/ s5 Z4 _9 C- O5 v/ y! @8 T9 z: _
// 关闭当前窗口  G/ O. r9 m' G1 q' L
window.close() 0 Y1 y' S3 O+ d
//  后退一页
8 a1 R0 k. n- ?4 swindow.history.back()7 _; s7 H, _/ |) Z5 |+ e
// 前进一页) R7 z9 i+ p% \& J( X4 Y
window.history.forward()
) K, s7 _" u2 J. U% c//Web浏览器全称% p$ n( a, u4 m+ t/ v& _4 p+ ?
window.navigator.appName
- }/ @; Y, e9 e8 v/ L' I) @'Netscape'/ B: b, v/ }3 z8 x
// Web浏览器厂商和版本的详细字符串
- M; L9 b2 l3 f* zwindow.navigator.appVersion
9 L6 e  I" ~7 V3 p4 Y'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'# W" v0 R( l* k2 y2 `, u
// 客户端绝大部分信息* }9 U/ B5 R7 {6 c/ L
window.navigator.userAgent$ K6 w* }6 K) [  ^
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
, ]. E+ ]2 f6 ^! ^+ e) _4 S5 L: O// 浏览器运行所在的操作系统
* t& C: j, Y1 h( G& Mwindow.navigator.platform: s& A. ?. A" T8 Q
'Win32'
/ L# w" [1 U. D% ~: b" M; |2 W) R$ p; \+ ^: W2 p
//  获取URL2 J0 ?9 \6 b" e
window.location.href& r. K0 ^4 E) D$ j! |6 F
// 跳转到指定页面
% p. a4 z+ q2 O* o: @( h7 zwindow.location.href='https://www.baidu.com'! u# B/ k* o: ^/ d* w
// 重新加载页面. a! K7 G; W. h6 g" n  {; o6 M
window.location.reload()
+ Q6 `7 ^" q0 y; {3 S1 ]* Y; W0 d</code></pre>
/ `9 J5 P! j# H. S" `  O2 `<h3 id="32-弹出框">3.2 弹出框</h3>0 c/ z0 y$ {3 x1 t
<p>三种消息框:警告框、确认框、提示框。</p>
: `/ W  {% y7 @9 a3 K% `<h4 id="321-警告框">3.2.1 警告框</h4>
  T2 f: j1 f7 U+ g  [<pre><code class="language-javascript">alert("Hello")& e$ D4 y1 l" b
</code></pre>8 d# O/ T5 h( p! j
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
- C, q! [0 [: J' }4 R<h4 id="322-确认框">3.2.2 确认框</h4>& {. U( f$ d8 U8 b7 E0 w
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
4 B5 H( T) ~+ c<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
$ }9 h" a2 f& t" Rtrue9 _: ~' N* L0 Y0 X' j$ m3 c
&gt; confirm("你确定吗?")  // 点取消返回false# r8 A' v" J- H' O( K' |
false- C6 B. P: y. a- h
</code></pre>
) k# {/ q* D# |$ D; h& J<h4 id="323-提示框">3.2.3 提示框</h4>( o0 c7 X3 {. N. S$ V
<p><code>prompt("请输入","提示")</code></p>
/ O% t' z! W; m, X; q* j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
+ B7 _, ]% ^4 s/ g# [9 k<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
. Z: s" O2 d+ ]4 X0 x<p>如果直接点<code>取消</code>后端收到<code>null</code></p>6 O) u9 D8 d4 V; l0 l% k! l
<h3 id="33-计时相关">3.3 计时相关</h3>8 u# w! d/ n) L- M5 Q8 d
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
' N# t2 d1 J$ x/ |, `! N<pre><code class="language-javascript">// 等于3秒钟弹窗
- z% z/ b0 ]5 f' p( v4 t7 b7 dsetTimeout(function(){alert("Hello")}, 3000)
" |2 [& j7 D3 D2 A0 I8 o+ l  _9 a2 F/ L3 K/ w' _
var t = setTimeout(function(){alert("Hello")}, 3000)  t6 J0 I5 _. `5 W& m0 g! ~6 Y. Q
6 x8 s2 M8 G/ ?  a
// 取消setTimeout设置0 g) {3 n9 Z5 }$ h2 d) Y
clearTimeout(t)" r' j$ C& x1 }& @+ p2 P
</code></pre>% h6 U) x8 G; q/ z& T
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
6 z) u3 S2 I1 W& J' }' _<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
) }$ @& N6 i% J6 t: K& A  l6 ]+ ~<pre><code class="language-javascript">每三秒弹出 "hello" :
1 ^, H+ T7 {( H" q6 k; V& ]setInterval(function(){alert("Hello")},3000);7 d1 ~# y/ D8 F5 H
</code></pre>
$ ]$ _% g2 C( ]2 Y$ C; \<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>& H! O& E, @' ^- V# h8 u" ^
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
! t7 j5 u% b9 U* A( e//取消:
8 |  @3 m! O; ~- e; E8 p5 ?' p* hclearInterval(t)) Z3 b  e7 m6 c% r; L
</code></pre>; X/ ?5 \0 K9 Y8 x/ _

0 w3 t; L6 c; Q* y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-11-4 15:52 , Processed in 0.069688 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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