飞雪团队

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

前端之JavaScript

[复制链接]

8044

主题

8132

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26462
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
9 x2 v) z) x# i, G2 r' H& \2 R9 I" g
<h1 id="前端之javascript">前端之JavaScript</h1>9 Y' B6 o5 w7 `( C# P
<p></p><p></p>
! U3 ]' ?  ?+ F0 p<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
  R. J/ u% V: o- t# o( D& x6 \<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
+ O( [* I# ]. r% b% F" f它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br># }& H8 g( n1 D8 ?* T( o  a
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>2 ~: }) h9 }" |9 `
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>0 B% D% Y9 W2 B+ t- X2 `0 X, d+ V( F
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
  \+ q- c. j+ k& H- A<h3 id="21-注释">2.1 注释</h3># F- a! _& o$ v& N# v
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
" }: {4 C6 @; ?! k<pre><code class="language-javascript">// 这是单行注释
! L+ y" P! u, M, v
1 }6 N0 ^- A; F- @% ]- F- i/*% m1 P8 o! n- f" Q# Q: ~  x5 `
这是多行注释的第一行,
9 {7 ^. _$ n2 z# R- a这是第二行。
- L: D. ]& `; t8 b4 q; D( a# s( r*/; L( ^/ }- \; f1 l, }, t& a, r* e
</code></pre>+ f- a8 a. J* [
<h3 id="22-变量和常量">2.2 变量和常量</h3>3 A" z9 ?2 y) K- B) P
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
4 K5 Q; y! u( L: H9 U<ul>
# _/ Z" h0 s* o- T% c9 Q<li>变量必须以字母开头</li>' O$ V8 b, {6 ^9 ^6 y
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>2 Z8 ^8 F3 G, i' z6 R$ ^* }
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>1 r% G* ]6 y$ Y8 s' `& [
</ul>
0 x* N8 c. e3 `' J<p><code>var</code>定义的都为全局变量</p>" p) K, i' {- T9 H: S
<p><code>let</code>可以声明局部变量</p>
# E5 Z9 x8 J* t$ X  ], [9 a<p><strong>声明变量:</strong></p>. Z0 B. n7 h1 ^( \  ]0 T- x
<pre><code class="language-javascript">// 定义单个变量
0 s5 d; H0 L! J  |# O, {+ W0 z&gt; var name
- t; Q7 ^0 P0 K  g) i. R8 K; j* J% M&gt; name = 'Hans') B0 a4 }- B, K8 V
//定义并赋值7 a1 i$ y1 ~5 w
&gt; var name = 'Hans'  ]0 r( k# ~9 Z
&gt; name3 o# O; s8 I: ^7 C' g: h4 B3 |
'Hans', c* ^) v1 T9 ?, T1 e* T
( f: Q4 J; T5 d2 g6 J# l
// 定义多个变量' ~0 X! s" H4 B( H- `; F; r& ?9 J- p
&gt; var name = "Hans", age = 18
: F" G6 O+ g( T+ C% J$ V5 L2 D: f&gt; name2 T( B; Y' d5 J& W
'Hans'
' I8 O6 r( R, T6 _&gt; age
. s6 c8 G7 u4 x9 T' f3 v  Y18& ~8 B) ^$ \" A

- j/ ]. \& _  [9 ~" w  _//多行使用反引号`` 类型python中的三引号
9 L( d% J0 ?; d3 v% V2 k: d&gt; var text = `A young idler,
4 r4 F5 n( u" s9 c: {3 E' Zan old beggar`1 X( h6 T" w  P9 _/ j" {  k  N
&gt; text1 x, V* _( S" k; C1 F/ f* H
'A young idler,\nan old beggar'
4 E; k, f2 z1 e' T$ w+ ~</code></pre>
$ y6 E$ Y  S) \$ n" I% g# d<p><strong>声明常量:</strong></p>
5 M; {, u+ p  I<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>" _) L# S9 J2 p: g& ]
<pre><code class="language-javascript">&gt; const pi = 3.148 W3 F7 R' u! F+ i
&gt; pi
" L+ J9 N- g" Z* l$ ~' D1 `3.148 w6 t1 P8 n- q  P4 g: E3 ~  G
&gt;  pi = 3.017 P- p, u/ Z# _/ {
Uncaught TypeError: Assignment to constant variable.8 b5 I8 a7 m7 r' U) f* ^5 Q
    at &lt;anonymous&gt;:1:45 z5 w; M: {- @: @1 l2 G

! r* H  _& J- a! e1 o8 ]</code></pre>, o) E  n9 m2 F$ ^6 N% e* J
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>. g6 h& ^5 e; q+ N/ n
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: T2 q) P$ d4 V5 l( Z+ r2 o0 w# P<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>+ Q' _6 o9 \: _9 f) _
<h4 id="231-number类型">2.3.1 Number类型</h4>4 _% _  X- u4 G! z% H/ {
<pre><code class="language-javascript">&gt; var a = 5
9 R5 l' L7 ?% }' q1 x) j& o* H&gt; typeof a   //查看变量的类型  
: F7 _% |8 m  `1 j8 A! M. rnumber
4 i1 h3 t* ~# m9 u! h7 w# A
9 `8 B$ p5 B, W&gt; var b = 1.3
+ A- \7 W1 s. c  _# R7 ^# j- `( T&gt; typeof b
; e# a& g5 {+ L4 Q& Ynumber
- l# H3 Q2 @" o8 b. G; X" a2 o% J1 v) \( {
// 不管整型还是浮点型打开出来的结果都是number类型% y: S$ j5 s* D. W; ^

' [  A6 q$ G9 X. a7 _4 f* ]- [/*( K* Y  E( z: X, b+ ]
NaN:Not A Number
$ _* }1 K$ P6 X3 Y0 WNaN属于数值类型 表示的意思是 不是一个数字8 ]. G0 `6 r, C5 x: Q
*/4 n9 M  |! X9 Q/ x# D
9 V7 i; W: v" a, g: D( D
parseInt('2345')  // 转整型6 d5 `. j( V& [6 C
2345; A' b7 k& d0 w1 d! y& b: z( ^8 |
parseInt('2345.5')) L% c6 K9 |' }# _  @0 L. J
2345
+ U( ]7 q/ ?9 `/ I; iparseFloat('2345.5') // 转浮点型( ]* z6 e0 o7 s0 c- k
2345.50 i) h, V, ^- u) G1 Z2 k
parseFloat('ABC')
0 [6 z: V  ~" u6 t/ V9 U1 b7 ]* cNaN! C- D  l) @& z) e! K
parseInt('abc')
  [. N* z7 H* P% {9 l8 |NaN
2 J% J& ~: f3 a) r! [</code></pre>
- G+ \9 [! w  V+ {<h4 id="232-string类型">2.3.2 String类型</h4>
; ]2 ^, K1 k  v2 _' b<pre><code class="language-javascript">&gt; var name = 'Hans'5 B: _9 r% j& y: M- v# j4 ?( a! A
&gt; typeof name
$ U0 ~/ `# d# u- n'string'
( p% U4 ]- w# z, w
5 a% X4 g7 z4 u//常用方法# J2 `  `* C' B4 Q0 i5 N# f
// 变量值长度7 k8 a' {# y. @% U$ w
&gt; name.length9 [9 i6 Q+ @9 i2 @
4  f7 f  f$ \% D6 s
// trim() 移除空白# h7 H, \+ B/ r' h, \# O5 R* e
&gt; var a = '    ABC    '
+ y! ]9 @3 j% @- S- Y&gt; a' x" u! V' {9 F* P4 L6 I
'    ABC    '
& }0 w2 K+ v6 n, S+ R4 P&gt; a.trim()
: u# X  Q% l6 i'ABC'7 R+ b% L/ N+ ?3 y" {6 b- S' U# P
//移除左边的空白  t5 Y; o' a) y
&gt; a.trimLeft()" ^6 R# h+ n1 k3 _1 @1 t
'ABC    '9 d/ U  Q- F1 n# r
//移除右边的空白6 j/ Q5 Z2 T, e, u0 R
&gt; a.trimRight()
, `- P  h% x/ }8 C* p9 _'    ABC'4 K1 G7 o9 [! D6 w) w

" \6 h) i. y+ w  A' y3 e) s: Q//返回第n个字符,从0开始
, O8 q# w* r6 z$ C) |&gt; name0 L) p0 L$ l: K, b! {4 e" f6 k
'Hans'
7 Z/ p: Q2 }" N&gt; name.charAt(3)
: Z: ?1 S/ X/ b* {$ F  g+ {9 Q's'
/ p0 T+ k" a% g# A7 q3 p&gt; name.charAt(); f+ O/ |% @# u% A& {3 o
'H'7 R8 ~) m7 @4 ^
&gt; name.charAt(1). Q- p+ j& Y  d, b
'a'& ~. F% d7 P6 n7 j$ l: e
9 O0 ~, \4 p+ d# C0 ?( J
// 在javascript中推荐使用加号(+)拼接
1 v7 [. Z( r) Z5 V&gt; name
4 U# j) H" ?( Q'Hans'
( a2 `% g, q9 X&gt; a8 M, ^9 y3 o# X) H  s2 P
'    ABC    '
9 }5 R$ s, F" w  x&gt; name + a% I. @( _# t% s( h8 N5 |
'Hans    ABC    '
. H+ F4 g. E# C3 M+ U8 Z$ V// 使用concat拼接
- _1 u% Y: v0 C4 a&gt; name.concat(a)
: ~# R" ~- D: @1 \' ~& R'Hans    ABC    '
# q- |  m, y1 |) l: j- a6 w7 R0 p- S9 `+ H( M
//indexOf(substring, start)子序列位置
3 `( f8 B* L/ Y* r3 h
  P5 r: ~7 P# k: f# a! ?+ P&gt; text: _5 [3 B, ~" N9 C6 Z5 b% N4 u' e
'A young idler,\nan old beggar'
; D# H+ B/ h8 \& f&gt; text.indexOf('young',0)/ L1 L7 J& y  i
22 P+ C5 x! a3 W4 s2 Q2 {

) r1 u- W- |# g7 ]5 O+ P; D//.substring(from, to)        根据索引获取子序列/ e0 y) Y/ i+ }9 ~
&gt; text.substring(0,)
6 b2 C7 ^& v- i'A young idler,\nan old beggar'
. ?/ X* C0 l3 f- N: g" A6 _&gt; text.substring(0,10): F" I7 N# l5 t) i: c: p2 O8 Z
'A young id'
7 M. ~" i$ ]" I/ H9 }4 R, |  a7 F6 ^) M
// .slice(start, end)        切片, 从0开始顾头不顾尾) S1 Q: ?- J4 b
&gt; name.slice(0,3)8 F: V: Y/ \0 @% k
'Han'1 J( {1 s6 h& D  X4 S( ^- W* V

: H0 V  x& J, ?' u4 f7 h// 转小写
+ ]% j' D) P' Q&gt; name
: B& Y$ d/ K% |" w'Hans'2 _) _' c& _; J0 O2 Z# K
&gt; name.toLowerCase()
8 g! f+ }. T+ U' `9 b- d2 s'hans') }) S, y: F5 Q6 R7 V/ P1 W" v! m; f
// 转大写
! B& r+ ]+ J1 t  `' v( F&gt; name.toUpperCase()+ F' D0 m, \2 ^2 }" P# i8 Q
'HANS'
6 F3 i6 Q3 @& O1 J( A* U8 M
  ?% c3 n4 h; T0 w// 分隔. C5 O  c3 G0 x- B3 C: w1 b+ E
&gt; name0 |9 o( @- l3 }5 I6 Y2 @
'Hans'
. ?1 I% w" a. Q# F2 }&gt; name.split('a')
. L9 z! {$ e& b9 O0 e* Y6 ]& S(2)&nbsp;['H', 'ns']
% G' k0 T& E! Z, J</code></pre># r7 p1 x+ E8 }. n8 }/ I* H' u
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
' O6 o2 y2 D2 o8 t* x  H6 l; K<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
# U9 d$ V; J2 t: z2 i5 Z<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
4 C% {& ]7 `6 k$ {<p><strong>null和undefined</strong></p>
" c) q. h9 R$ N+ W6 I<ul>
" l8 `2 a+ y1 S% L+ t<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>% U) g) E2 _- z
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
$ g5 o2 ^3 m# w# F9 e( a4 |</ul>
# a+ L8 h9 i, e6 M<h4 id="234-array数组">2.3.4 Array数组</h4>
5 D7 F% ^: c' z<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>7 {: K. S- Y: Z
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
# m+ J1 I# t. s$ K+ P) H$ j&gt; array1) c7 F/ u, E% ~( `# B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 }! g. y# T# n' y
&gt; console.log(array1[2])  //console.log打印类似python中的print
0 b/ Q3 {4 _: l, s+ @% m& @# g3- @3 Y) d$ K6 w. `
// length元素个数" G5 ?& k( A1 q
&gt; array1.length, H, Z8 G5 {, S$ J
6' J9 a/ n2 @' @4 K! a
// 在尾部增加元素,类型append
6 C: B4 c+ f+ ^: x* j% C  r&gt; array1.push('D')
- U9 `. x$ c) ^- v7) t- ^6 i5 G+ {/ v1 \) u
&gt; array1
& d7 \+ ?( v. N- b" T6 x. M(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
( a: a% Y/ W) Z// 在头部增加元素
( w. G$ w! u  O3 ~6 |* P&gt; array1.unshift(0)9 _. j8 V7 i' w% T/ ~; t! \
81 p6 O7 R% `! j. F( Z
&gt; array1* v) j( r% y" x0 s" b# }, T. m
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( B: C; k' y9 z8 Q2 |5 P& q

2 J+ }; z4 o8 `//取最后一个元素+ B. o2 O( i! r: a. a
&gt; array1.pop()
) S& V7 r" h8 F" D: H! A: D7 I* ^'D'
7 u5 T1 p; M9 U  K&gt; array1
" c- |4 M7 [$ l4 g6 d: ?(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']3 t0 ~) q) P" w" D; ]: ]4 v
//取头部元素
' A8 |4 W; m# I: q: o&gt; array1.shift()
; c1 J! P1 d$ j+ o2 x0+ m5 I. [3 i" [% j2 ~6 I
&gt; array1
& W& j+ e2 [  d, l# r4 C(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# N5 b0 ?. ^1 {& O$ f* ^0 D5 s( \" N
& g; U7 E  c6 q" }9 D  r//切片, 从0开始顾头不顾尾% Y0 u, a- w' ^# m: C
&gt; array1.slice(3,6)( V0 N4 ?+ l; c1 O
(3)&nbsp;['a', 'b', 'c']
2 |3 |" C1 ~; a; q1 M& q// 反转
) i( J/ a: Y% |3 \&gt; array1.reverse()' c: v/ i/ q6 L+ U! J* ^& G, d8 U
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
& D8 u* ~' F3 n$ v( ^// 将数组元素连接成字符串# ]9 ?! _* w. |- l7 |' |
&gt; array1.join() // 什么不都写默认使用逗号分隔
7 t& p+ ^, @% W$ O: s( O( K3 _# P'c,b,a,3,2,1'! g1 K9 _9 s, y: |$ Y
&gt; array1.join('')
. D/ E9 o8 i* I& }7 p& r7 H  T" l'cba321'' y, G. A8 j$ m1 M4 n+ v9 o, p
&gt; array1.join('|')+ m' X$ b& b8 J* \) J8 h
'c|b|a|3|2|1'
) D; j2 b: [) v0 l
' N5 U5 r* \8 B" U: _) ?9 v1 p// 连接数组
- W* u/ E7 ~% C3 F) {&gt; var array2 = ['A','B','C']- @5 F' _. K- z' p
&gt; array1.concat(array2)/ x- V7 _5 u1 l$ I
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']# w; H0 U  R5 q, |

  V: |6 l! l. M* y. t// 排序+ x4 t  Q6 c( Z! a3 b$ F
&gt; array1.sort()
: x& N+ U( i- M/ F( V(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& G, o; o, S2 o* e  m  }0 R

* M. l0 L7 L' w! c' U6 i/ J// 删除元素,并可以向数据组中添加新元素(可选)+ _; U7 l) r5 V5 ~- J( v
&gt; array1.splice(3,3)  // 删除元素
. O2 b7 T6 `  I! Y* o, @/ {(3)&nbsp;['a', 'b', 'c']2 m8 Y" Y8 E) H5 N2 o! L# E
&gt; array1$ f- s* h" }, W5 b; u
(3)&nbsp;[1, 2, 3]- J/ f7 a0 y8 i$ r& ]8 W! M3 o4 w
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素9 M2 F4 y6 e; S; ^' \/ _
[]
5 F& B0 r8 p8 }3 j4 H8 T7 v" T&gt; array1$ z6 W1 Y9 l( W! T+ e+ r8 f
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']# x! h% I. a( v
" @- ?, ]5 E; N! |' M
/*, h/ d2 U' U4 y! i0 U6 [
splice(index,howmany,item1,.....,itemX)1 m( I9 B( h! t( F9 V* z( r0 C
index:必需,必须是数字。规定从何处添加/删除元素。
# N5 B. w1 h0 Y. k/ `3 Xhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。, q3 I6 B- j8 `# X) z1 g) e
item1, ..., itemX        可选。要添加到数组的新元素. o. A+ ~; a$ j4 I; X& i
*/6 J- a# z* ^0 y: u

6 H* `- m0 W6 e/ e  b// forEach()        将数组的每个元素传递给回调函数
0 y- J* }7 a8 b5 F&gt; array1.forEach(function test(n){console.log(n)})0 J7 l2 }) w" D% |0 S' h
1# @. K  h* u7 q2 }
2# F* K' y6 R+ X: |' ?1 ?
35 m& J) K+ }7 G1 Z4 C
A" X$ ^# c8 c1 {" X" m
B
+ r) o2 B/ a1 J' H C
, f5 p8 w9 k0 T% j4 l( E// 返回一个数组元素调用函数处理后的值的新数组  O, Y+ |! n2 P" ?( w; ^  H
&gt; array1.map(function(value){return value +1})
" g9 h/ m4 p6 _5 E: @7 Z(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']( |( _# {$ f9 D& o, ?
</code></pre>/ S6 L. G( n* ]- ~% F7 W
<h3 id="24-运算符">2.4 运算符</h3>
) Z$ E, S# I4 a: ]4 v3 r<h4 id="241-数学运算符">2.4.1 数学运算符</h4>  W6 i7 R" h) d3 D
<p><code>+ - * / % ++ --</code></p>
( [5 S& c" W4 ?; C. s. v: O8 @<pre><code class="language-javascript">&gt; var a = 6
6 i5 y; q# Z0 |1 r&gt; var b = 3
# D+ ~4 X! _8 n( a2 O4 m0 \// 加8 N8 `& ]: t7 n( j: D7 b
&gt; a + b. ]5 {2 M( F0 q2 `$ W
9% ]  g8 j  \, G, H6 |: S( y% y; L/ W
// 减3 E# h# r) h: s) l6 i# _
&gt; a - b
$ F# P" }" w4 S8 V8 q3' |7 W) A, g, Q- r6 g" ~0 n; T- g
// 乘4 \9 |8 h( G: c+ f4 C" h
&gt; a * b
) R% B8 M% B; e8 U2 }# l5 U18
, C4 H/ g5 F% U- f; I* ^, t// 除) i- r; O, C% M% X3 R6 E
&gt; a / b
$ @* |& l* A# L$ `4 O) V2
( H# ~3 G- |; g0 n% ]// 取模(取余)
2 p2 W) H  \% `/ |) |9 H&gt; a % b
2 f6 f9 \/ i* S$ y7 G1 i( q0
+ m# _8 m0 c% b// 自增1(先赋值再增1)4 J5 l' u* k/ w9 r# r# n1 X
&gt; a++
+ M2 m! I' d) i# f" C& c$ N6 p63 w, }: C+ n' L, }+ a
&gt; a) ?, K. G- L" x2 b8 x& V0 ^7 S
7
3 y, S  b* b7 b9 ^6 s  }7 z// 自减1(先赋值再减1)
# I- i% ~" W& \; N+ W&gt; a--1 m5 u+ x6 V! V3 ]* D
73 F8 P# j! A, R7 t# J! G- Z
&gt; a7 F8 l. o5 u) K# y0 G$ }) r5 j9 v
60 i3 \1 H7 K# S4 _
// 自增1(先增1再赋值)
4 T* ]/ y: k' p  ]3 u: l+ m&gt; ++a
% o0 ~; o: k) x7 \" G- ]7
) z0 h/ R7 Y4 a' L// 自减1(先减1再赋值)+ l  d$ D2 D9 t, W
&gt; --a8 R' ^* d3 a. p. |) }2 ^* ^( Q' I! O
6
! Y4 C! r& W) }2 h7 B&gt; a  A1 V9 F" A: p7 j' ~8 z9 u
6" }  k5 E. e6 b: R7 u

# h5 b" m2 `9 b+ c1 y//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理; w2 @9 o" Q0 c3 Z$ h& f# m
</code></pre>
' g' Z. v0 `( E<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
4 t' C4 Z, g/ K& m, c) C/ X<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
6 \& z; O* ]% p* ?/ i( ^# u<pre><code class="language-javascript">// 大于2 o1 s& n$ Y, |& G% a* @
&gt; a &gt; b
: ?4 X: B3 l3 mtrue
' [, Y' j' B) R; W// 大于等于
/ F' B4 x% t. e9 U&gt; a &gt;= b
. `; r  r0 C  ^/ z& btrue7 Z7 h' g- n) w
// 小于: l* s7 ]1 ~5 d4 M/ d, K% c" T
&gt; a &lt; b2 Q* L( R8 T5 @; f: u" W
false
8 u2 x2 h: I# K! ?0 c' p0 f! E// 小于等于
6 c# G, J9 H0 U8 s! j! ^9 e3 r&gt; a &lt;= b
6 e/ t7 q: Z& n* C# Rfalse. v! n! R4 _8 Y2 t
// 弱不等于, z4 d( H, I1 |4 O  n
&gt; a != b
, G3 P# X; F6 w! s3 |0 k3 D, K' ?true. q6 C" }% C- i2 ~/ |/ H
// 弱等于
6 e6 K  w+ ]4 S; [2 l&gt; 1 == '1'
8 E; h6 W) y" i" b, ~  ~4 e, etrue3 N8 M* W. U0 s- x" Q
// 强等于3 X7 h1 D1 W/ [0 n
&gt; 1 === '1'" M+ s" y, N0 |' D5 {
false/ f. q8 c* m. J, c5 M
// 强不等于) L/ y0 `/ y, U; L* }7 v0 U
&gt; 1 !== '1'
# g$ O2 S" Z  Itrue
! I8 r0 t* {1 ]. b: Z/ x! {/ J) G9 c1 x# q7 p" ?* k2 Q: \3 ^
/*0 d8 \+ z5 l7 q# I- m; Z, ]
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误# y7 R) D1 x& z
*/" u0 h! m/ V( }- l9 R4 B9 B
</code></pre>4 I" C  w0 s" l
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
1 O* u& s' ~5 F, n, q. R<p><code>&amp;&amp; || !</code></p>
+ `; a0 P; J; u1 x" Q3 s<pre><code class="language-javascript">&amp;&amp; 与
& D/ p4 o5 u% D% j* t) G; A3 X|| or
. k2 m$ w. w1 s1 N  ^( N9 N! 非
5 T/ T. ~. P' ~- m5 d/ W</code></pre>
# [5 _* w  e. ?! X( Q0 ^" U5 o. v7 u7 ?<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
2 U5 ?8 E# v% g: @1 B8 _<p><code>= += -= *= /=</code></p>3 l+ i0 ?1 }7 q7 f6 q2 r
<pre><code class="language-javascript">// 赋值* s2 F. M3 q; k2 R
&gt; var x = 3
; A8 k  E9 F2 @9 \' Q: K( ]// 加等于
% m! R' A( Z% s/ _5 o5 t: g&gt; x += 2
) s% i8 W/ P: m! q52 ~  C0 X" f8 e* b" T- W) M
// 减等于
: f! l1 a' o9 Q8 X  h- S9 |9 j& C&gt; x -= 1: z' V7 o& v! g( m8 F# S: Z- _  L9 \
4
/ h- l; m& Z3 V3 e// 乘等于
0 E$ l+ a/ F% |&gt; x *= 2& J/ b: c1 \( m
8& B  c$ W4 V3 f6 d. U
// 除等于! L: D' W" y; s- F4 F
&gt; x /= 28 o3 P5 q3 Y! }/ S" L3 {
4
+ A" c, {9 b; e' f1 j4 b: [</code></pre>! G. O# E; v$ m7 Y. @1 A; |% R$ n8 m
<h3 id="25-流程控制">2.5 流程控制</h3>+ D$ J- B- s5 r
<h4 id="251-if">2.5.1 if</h4>
" R% R: e6 b7 k" ]<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
' C- H# G) [) w4 E7 L4 v
) T0 o$ q6 s( x, }. ^4 c7 d" a&gt; var x = 3
3 x' [" o" g3 R. m&gt; if (x &gt; 2){console.log("OK")}
8 Y8 @* k/ Q$ Z# ]$ s8 Q* O OK) S$ O& a4 J. f8 j
$ e) l$ \. |1 @2 @0 \" ?3 h- l
2, if(条件){条件成立执行代码} ! T* y7 G; }/ o! q& q
        else{条件不成立执行代码}
* D. O( f1 B% Z( q6 |! x' g% M
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
3 O4 q) h/ F6 h. a& Y'NO'8 x' r( I0 w( L( H+ K+ f! b
' |. D5 O- K7 }4 J
3, if(条件1){条件1成立执行代码} 3 Z# ~4 O1 p' X" k5 B  n. d
        else if(条件2){条件2成立执行代码}+ E! @/ d. F. C% |# t6 O
    else{上面条件都不成立执行代码}( e: R7 Y) d' f4 ^  t: B
3 m) y9 K  g& t& j, ^8 W8 k
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}8 b6 U% K! i$ s/ B; H
Ha: u; e! ?  R$ u2 V) L: c' t) [
</code></pre>
% ~- n5 }2 E# d. l  i3 u5 {<h4 id="252-switch">2.5.2 switch</h4>$ U' i% S1 b* u  ?: N8 S4 R) l
<pre><code class="language-javascript">var day = new Date().getDay();- X4 U# @, _- f0 F) }7 ]% J
switch (day) {: ?* p  d# I1 X% A. n4 I* b5 _  \
  case 0:( O/ ^. ]% c2 }& B* e+ a5 c) _% [
  console.log("Sunday");+ g! G0 R6 M+ r5 J' o
  break;
3 V  j, \8 k1 d3 [4 S9 B& E2 L  case 1:0 j6 ~- T8 V9 [
  console.log("Monday");9 ]3 i; q3 D# m: t
  break;
4 A0 \2 w4 \" D8 |default:$ U8 a1 |3 {- f( i" e1 T5 X, {
  console.log("不在范围")* A) W; e3 g4 s) t, X/ H; B
}
& R5 K$ ^2 x) K5 j& t6 k* ^  t- x 不在范围
- T+ i0 Z9 g1 V  v7 Q2 H: W</code></pre>
3 V. k. O% R0 F3 w% v<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>& G& P2 Q2 s9 C$ h  ]6 y
<h4 id="253-for">2.5.3 for</h4>
# {( \4 N* G- \8 y2 j5 ~( \0 X<pre><code class="language-python">// for 循环& ^& T; b# y  |# v7 p
        for(起始值;循环条件;每次循环后执行的操作){9 a% ^/ G5 b7 T; }; ^% u. D4 A
        for循环体代码5 K, `/ p; a1 Z3 z  J! F& Y
    }
, f( D8 y0 R& |
" E, y+ y0 ^. b8 Pfor (var i = 0; i&lt;10; i++){
' c# u3 t# q. z9 Y, m9 V3 Y3 @/ K    console.log(i)0 h$ x0 V, W2 K6 O4 Z
}, w. D& n0 M; G5 H, q# p8 G$ y5 h
        00 a6 a) b, Q0 i2 h: |
        1
2 S3 E* G3 l* ^+ ?3 c. ?2 {1 H        2* v  c( L0 R- I& x2 n
        3
$ t- k4 t" t& N: f/ ?" E        4
2 J! t7 Q* [( R* z! U! M5 s        5  z0 a7 X; C4 n0 a+ K
        6
: P" B, d9 ~9 f  R& u        7+ p! B' l, p7 G' Q, L) e  e
        8$ J- M" p9 V% |6 y( n6 l  d
        94 T3 K6 _% n2 ?2 u1 J
</code></pre>' S0 }( a1 o6 h' E
<h4 id="254-while">2.5.4 while</h4>
  c7 B1 @; W8 j1 i<pre><code class="language-javascript">// while 循环6 g# e% p3 q6 T
        while(循环条件){
0 ^- q  i/ B- c- ~. p        循环体代码% a$ W" d1 K5 L8 C2 D% @7 }
    }& m- @! Q+ d& T' i/ v% @% u
, h& D" @% u; g) r1 j
&gt; var i = 0$ o/ h. M+ r% [
&gt; while(i&lt;10){
/ Y! u( _3 M7 w    console.log(i), F* y6 y; I. `9 S& Z! p& ^1 l
    i++/ r: c2 z6 a! U- a7 c. _- n( Z
}
; B- j) v$ s+ n$ ]( U 0
/ @  z( N- o1 h" m) I. J 1
$ L! j8 q' z% h$ N 2
3 ^) E. _3 f+ K# w 3# ?8 r0 T. [8 [1 [2 S! A2 A/ j9 x
4
; Y* G7 x4 K+ k9 B' d 5
$ |! P  Z9 H3 g  C 6' W, ^* `9 T, f$ c0 o) m- F$ R: U
70 Y) P  ]: s9 t
8
2 {) V9 A( e; H 9
! F4 W& L7 r$ M8 \: V9 Y+ r$ l</code></pre>
9 T8 H4 J2 D/ e" i# I<h4 id="255-break和continue">2.5.5 break和continue</h4>
; `. D$ d3 O8 }7 V- p. Z: p# a<pre><code class="language-javascript">// break
3 N  T* Z* E9 n) C$ P( d: r3 ~0 Lfor (var i = 0; i&lt;10; i++){
' B/ I# M8 g3 N    if (i == 5){break}
; L3 h, R. b8 p* u8 T  S/ A+ O    console.log(i). m2 i8 q4 j% T) |3 \2 @
}
' h  B! ]: _! X$ ^: X, U 03 c7 N& c+ g) E2 z
1
5 C, V! h' n% Q. x# }7 v3 j 24 b4 P1 F+ H7 c* M4 F
3
1 c+ E- D- f' f. U1 E- Z0 a$ @ 4
1 G% J, a) e* x; u6 W) {// continue
) m& l( v3 G8 Z9 O% e) p; Tfor (var i = 0; i&lt;10; i++){: _: Q) O5 H0 Y5 F$ _( S; A2 W# @
    if (i == 5){continue}- F* A' g" \, q, y6 J
    console.log(i)
* R7 r+ l) w2 Z6 q}
3 M% ?  F! }1 H* Y8 \+ L& x7 U" i+ R 07 N2 a' V2 _% {, Z6 n- n3 h! t% ?
1
6 y% `' N. m# `/ C+ M# R 2
$ \1 M  U6 Y7 ?; A+ ~ 3
/ j7 b% I2 g7 N5 } 4
/ i, n: Y" L% K" l/ r# [0 t5 w. P 6
' c' k0 N+ q- e( x# b0 ? 79 F* W' Z& U( `, f) L: ^
8
2 W' Y1 q/ Z/ V9 @2 E0 y7 R* D4 ~ 9! D$ ~: r1 D, g
+ u) i4 k7 b# e7 ]4 |# J
</code></pre>; g+ t, w( E6 R1 G8 ^
<h3 id="26-三元运算">2.6 三元运算</h3>! Q6 V* K6 g* x3 ^- m9 }
<pre><code class="language-javascript">&gt; a  ~- v' E$ }( }5 w; r; x4 K
6
  O& G& [6 w! U) O( |$ Q1 y&gt; b* N- E6 h) P7 K/ s; I/ V1 \
3
3 c9 T1 ^( ^. C! ^7 t9 U# \1 F: E) O  x/ \* U
//条件成立c为a的值,不成立c为b的值
6 f2 t6 E  G  M9 R6 c1 D; Z&gt; var c = a &gt; b ? a : b1 o. n7 b' K) E
&gt; c( [/ ~5 P4 [+ d1 ~3 n5 D
6& F( V% z  }0 c. V5 {9 \* ?5 f$ M$ K% E
4 k9 N; C0 W' d* l
// 三元运算可以嵌套* y4 G+ n/ u( e# }
</code></pre>+ I4 V1 u0 b0 ?5 }) L& G! B, a
<h3 id="27-函数">2.7 函数</h3>) F4 g0 y5 ~8 k# i* M
<pre><code class="language-javascript">1. 普通函数" ?4 O; H& G# h
&gt; function foo1(){
( r/ }4 N/ v4 j3 z    console.log("Hi")+ k6 J6 D  H7 ~2 H6 q% e
}* o6 L  B& m- _; {# O( B
1 M  ]: w4 L4 m) ?7 w9 Z" B2 E
&gt; foo1()6 A  P5 G5 }" a/ ~
        Hi
6 t0 ]2 @, j" c2. 带参数函数+ n7 F, Y& y* c; V
&gt; function foo1(name){6 ~( x; b: \' @& b, i
console.log("Hi",name)" y& L& t+ |3 {' w# u, X) e
}
0 C/ ]8 U$ }' d: g  Y4 `9 ]  l# G2 w' q
&gt; foo1("Hans")# ?( R3 q; O$ v
Hi Hans
. Y3 x+ Z8 ~. Y) u& a8 M5 G3 U$ ]- L9 X  P5 s+ i" B- p: @
&gt; var name = "Hello"
  V: f- J1 _& k/ }, u. |! ^1 I) O% }&gt; foo1(name)
% P; g: v1 O4 MHi Hello% t; f3 ~# \8 n1 s
/ K( @; w& v" |, p" P3 c' R
3. 带返回值函数( [3 ]/ O0 U4 }0 `2 r3 B" ~+ b6 W$ L
&gt; function foo1(a,b){- C4 |5 X( j; i
        return a + b   
4 S; A: l  Q+ J+ a  X}: i( e& R# i: S/ R& ~4 X
&gt; foo1(1,2)3 }' R4 Q% W  k. b7 C, D
3
! o5 J. w0 b. n+ s" B0 l, P; M# K&gt; var a = foo1(10,20)  //接受函数返回值
* s: v6 ^; T* u9 B3 t/ q: R" z&gt; a4 s, U' E0 C2 s
30, h' a& |! ~, s- n( A

8 G( W' w! |6 P6 ]( G4. 匿名函数
' ?% U$ z2 h* S. [&gt; var sum = function(a, b){
5 B0 @% u0 A" O  return a + b;% [: \& x% y/ j4 E9 r2 @# F
}
! @; @  R! u& C3 B&gt; sum(1,2)! q. p* ~9 Z$ l1 z' \' p- G& Z
3
6 ?$ s# e+ @; i  S9 Z) W1 E& V' A6 ~. T6 Q' l
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
0 f6 D) Z) h, F" u( k&gt; (function(a, b){
6 ^: m0 c: |/ @4 f' _3 j  return a + b# e+ x, h& g4 _7 V+ D8 x
})(10, 20)
! T9 d9 U6 Z+ g+ J0 K/ D  Q0 [0 {302 F% t. M- l9 I; M

3 N. M. ~7 @" P; G5 {/ H( |5. 闭包函数
8 `( Z0 j, ?4 m6 g( q, c// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
$ n! c( x6 O! ]: F2 T! s7 u+ L1 @3 bvar city = "BJ"; c6 d3 i8 e# o
function f(){8 ?8 w% @/ M3 D5 S
    var city = "SH"
& ?, F3 b5 g6 t/ F. h: W, q8 v    function inner(){
" N' J- N# _. h        console.log(city)
! _" ~* G- i4 L1 S$ x& U8 A    }; M- i7 f* y7 @* t- j  o4 k+ \
    return inner
% t6 V/ F0 C1 ?8 P; b0 t}
$ G& k+ A! O1 O: \: `var ret = f()7 h: ~5 \0 k7 M) k
ret()8 b' h" n4 R% T" x+ x" e
执行结果:2 a% b# M$ {: A) A, |' H/ e. \8 g  ?
SH: M- X; i$ c* h+ W/ e, u& N+ ^' ]" t

! d9 X2 k, j  D* O8 E</code></pre>/ n, I8 P1 q; w& M  g" u  U* [- j4 e
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
$ c' \; q$ Y% L( @! r# @' t<pre><code class="language-javascript">var f = v =&gt; v;2 y3 J; B+ o7 a# i# V
// 等同于2 i* m' Q& ^+ d" g% u  [
var f = function(v){
4 ~4 m; C0 T- e( c+ [0 L  return v;; P8 M( r) j7 I* o
}' H' V# n1 M2 Q8 N+ R. O4 B) V
</code></pre>2 C  R- @+ s$ Z( Y
<p><code>arguments</code>参数 可以获取传入的所有数据</p>$ ^4 _8 A/ S* v7 o/ Z4 ]- @
<pre><code class="language-javascript">function foo1(a,b){$ r1 t. W/ I" Q0 l+ l6 Y4 k
    console.log(arguments.length)  //参数的个数
6 c) ]* _4 I' t    console.log(arguments[0]) // 第一个参数的值
+ E+ `, q* V9 V  I% [7 r        return a + b   6 S' ]0 W8 w- N( z
}
; n1 a1 l2 p$ X7 B! ^& Cfoo1(10,20)
& d, s  C  o1 x) ?# @4 a6 }结果:
4 [+ e- v$ p) h& |4 W" d/ m 2          //参数的个数
2 i9 U7 y9 E, i9 G1 W9 c6 N10        // 第一个参数的值" J0 @" ]1 f: Q( @( ]
30        // 返回相加的结果% `# F: L. E, `9 T- V+ Y0 }; J7 L
</code></pre>9 E" z. _" w, r4 b
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>( ?! @5 H, z9 Y  S, e& m( ]: t! ~1 o
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
# W( W' T6 X8 Z) N# b' W<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
( q0 h( I; K3 f<h4 id="281-date对象">2.8.1 Date对象</h4>
+ v9 m3 O- i. |+ Z<pre><code class="language-javascript">&gt; var data_test = new Date()* R) ?: R% p9 `/ D& K
&gt; data_test
3 b3 @# t& \( ^8 NFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间). ^2 d. u0 A0 @
&gt; data_test.toLocaleString()- y7 o+ z1 o& _: W" P% f" R1 [
'2022/2/11 下午9:44:43'; X7 w8 |/ j, U7 R, y% p

2 w# @* d1 M* x! W/ c&gt; data_test.toLocaleDateString(), z0 C6 c5 P8 P" @& l4 J
'2022/2/11'/ X+ j7 |. L! C9 n4 @) K$ J4 W

" A3 w: l% w9 U3 G7 p( J&gt; var data_test2  = new Date("2022/2/11 9:44:43")
+ f- L% N' E; z' }7 s&gt; data_test2.toLocaleString()# w' d# s4 }, `2 D$ n' U
'2022/2/11 上午9:44:43', S6 t! D3 C: t) r( o3 W+ J9 q+ |
4 T; p$ \, Q2 _0 G  a$ X. R0 w4 v
// 获取当前几号2 a  j3 {! n7 v0 h# C
&gt; data_test.getDate()
" @5 d7 H; C5 _; j119 L6 c* H( A' J" A2 v
// 获取星期几,数字表示/ B7 U9 Y1 f3 n$ d
&gt; data_test.getDay()  
. q0 K3 e2 c2 \, W; i4 ~53 l+ A3 b0 B" W$ Q5 @$ y% t9 `% L
// 获取月份(0-11)
6 e) h- y5 w: O) k- c2 a/ t&gt; data_test.getMonth()
3 y( P- b0 t4 u. }* a% y5 _1
' E  W/ @' s. x" m5 M// 获取完整年份) R9 Y* ?& M/ D7 ?  t7 _" Q" X
&gt; data_test.getFullYear()
& O! Q& ]; i, d& ~2022! H2 `, G+ ?" R- e4 @. j) g
// 获取时
8 Q6 Z) h1 i: w4 D! ?& q&gt; data_test.getHours()
! H. p$ N  s$ n21& ]/ x- E$ a/ L6 A7 s
// 获取分2 g1 O$ B' c4 [& e: B, C9 R
&gt; data_test.getMinutes()
5 C, k/ E8 ?- [% C1 y443 s* @! K% q( @' y, C2 ~
// 获取秒
, o- x) {8 R: {' F' q&gt; data_test.getSeconds()- K& L2 G0 ?# H" Q# _
43
! m' Y) X/ F6 T// 获取毫秒0 h- F; A' M$ u1 k! \* S, P$ V
&gt; data_test.getMilliseconds()
6 E5 B* K% \! h290
$ l2 A+ g* G5 o! O// 获取时间戳
% Q! |+ a0 Z4 R) \9 b" k/ T8 |' w$ V% `&gt; data_test.getTime()
! A* y% `  u% {! j- O; ^4 z16445870832902 y. c! q% ?& t
</code></pre>: W% g& j; ]2 ]9 x$ ^8 v8 D
<h4 id="282-json对象">2.8.2 Json对象</h4>
4 m0 H) N$ N, v  q0 R' g) D- Q<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
# T; l) ~: A3 l9 z+ ~JSON.parse()  // 反序列化,把JSON字符串转换成对象' p, j" l% e8 n4 ~3 @  W
: O' o, P  u; a( E
// 序列化( O! D/ ~# B9 _1 Z# _3 H; h! X
&gt; var jstojson = JSON.stringify(person)
. `  N" ^% B- V# v1 T% \+ s&gt; jstojson  
5 ?" i' T3 Q, N# n'{"Name":"Hans","Age":18}'
- l( o9 V- D! ?6 Z9 S+ X9 p4 o8 N! L0 |- X; U
// 反序列化
1 m5 K* P! b9 M8 n1 w&gt; var x = JSON.parse(jstojson)
- C8 p8 [2 q% g! \# u&gt; x) V) ^/ U: B: r# Z) o8 l
{Name: 'Hans', Age: 18}
  q' ~9 W3 w6 A* c1 {&gt; x.Age
7 i* k% |! f# Y- z2 o. W18& t/ C1 u( ~8 w  I
</code></pre>
0 O! a/ o0 h  q7 U<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
( A6 f) B0 l' `9 f" B$ C6 L<p>正则</p>
7 A! J( M; _( N6 Z2 E0 }; [: B/ Q<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
; p  s: {6 [; l% Q6 L  |&gt; reg1
. ]: J& q5 |* r& q6 x- f  U/^[a-zA-Z][a-zA-Z0-9]{4,7}/
4 V5 O5 `- {+ Y! D7 i&gt; reg1.test("Hans666")
% X2 s6 r( O! b: @true
/ z6 g3 p3 ~% h$ {9 D
. K# X; ^. u( p( {$ g+ X7 M0 F&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/) i0 j" }9 u" ~6 \  B0 h9 w0 Q
&gt; reg2
! c% W6 b# t7 p. @0 F( A. P/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 i8 v: Z* I: d  ]5 c&gt; reg2.test('Hasdfa')% I. X2 I" b2 r3 ~0 {$ S; [1 b! U0 E
true
9 R! ]! d) a7 G5 o+ z" u8 C8 i0 K( d2 a5 H' \
全局匹配:
3 @  [* s: f7 f. s# O5 z& u% ~&gt; name
  k) u! X4 d2 h  m( S2 o4 ]$ ?'Hello'; }: i) J- h" Q
&gt; name.match(/l/)
5 Z% ?' f5 X' f* U! Z['l', index: 2, input: 'Hello', groups: undefined]
' ?0 k* s8 r) L8 d. K' m( B; X/ C5 J! D. J% s
&gt; name.match(/l/g)
: w, Z* @, B9 e/ a8 d$ \(2)&nbsp;['l', 'l']
  f; r- E9 |3 H9 ^- F& u// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
' w' C& W$ C. |/ s2 y3 }# a8 T8 \) @( v% E- |# W) ^
全局匹配注意事项:" F$ f1 c  Q$ z# D# e- L, l, w$ P% I
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g6 m  l. I! @" G' c
&gt; reg2.test('Hasdfa')
2 o- j" f6 O6 ~+ T& T6 ~true
1 [* Y( M& t- E2 i7 q+ x4 _&gt;reg2.lastIndex;
' P9 k4 S' V  ^8 _" v( }6# }# \# r% r# Z0 _
&gt; reg2.test('Hasdfa')
5 ]& ^+ q' y1 _  ^0 C* x# W/ Bfalse
8 F  H  I  s' p3 @&gt; reg2.lastIndex;
% d  E; C  W% h$ A+ p0
1 A# A% H3 f/ [&gt; reg2.test('Hasdfa')# x8 `- H3 ?1 c1 U
true
6 Q7 Y" {1 M/ e) X+ ~; z" j&gt; reg2.lastIndex;* Q/ ~" [6 d! N7 T
6
4 w/ L1 H' R; I; a&gt; reg2.test('Hasdfa')& k& {* O/ i3 v, t* c* K
false
) E5 |, i; {  `&gt; reg2.lastIndex;+ _2 {0 r' g% i7 s% A& @$ F% I8 G( ^% [
0
5 G0 S" d+ s  R; L9 f1 C5 z// 全局匹配会有一个lastindex属性" ~8 U( }: d. K; J; w- a
&gt; reg2.test()! ^8 g2 V- Z; U) u) k: @
false, i2 }+ o+ v( I% M
&gt; reg2.test()6 F% G+ M# q5 n1 R+ u% _
true
3 m  \  x8 n3 g5 }' r0 ~9 y4 W// 校验时不传参数默认传的是undefined
' i( v* v- X) E8 j</code></pre>  G9 U; I5 ]' Y" l" k
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>2 k, J- x$ {! _
<p>就相当于是<code>python</code>中的字典</p>% p' v, T$ E8 }3 ^
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
4 k3 \8 X( f* f# s3 r4 S4 |&gt; person
5 n  m  u3 ]3 p) b' \6 X. B{Name: 'Hans', Age: 18}& b  o9 R, \9 D$ U. O. |1 n% M4 E
&gt; person.Name; ?8 V9 Y  {7 U2 E: ^
'Hans'
  R% v, y2 D. w&gt; person["Name"]7 O) `2 t9 [5 j4 V. ^( O( H
'Hans'
; h4 ?( }# A1 G
; o5 B: |9 J1 c- T) M// 也可以使用new Object创建+ M/ z9 K9 L" E& R- `2 W8 |
&gt; var person2 = new Object()! `% {# x+ p& v; k2 B0 q' f& c
&gt; person2.name = "Hello"3 ~' e5 |$ n% I9 Q( a4 z; w& u: [4 O
'Hello'8 @( B. z& F  a) q& r8 k
&gt; person2.age = 20
6 X% Q' l& W6 i( e( A20
* J- q5 y/ r/ s1 }</code></pre>  d' t  p9 ]: G
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
% ^2 e! s2 Y  p9 A" ^' [<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>5 d0 B& X* Y  I- y1 [  @+ ?
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>) }; L3 L( v. @$ @6 q. C
<h3 id="31-window-对象">3.1 window 对象</h3>
# R; N: W) s5 ]" s/ X<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>$ Y7 B9 E" ~: `& X" @* g) ]
<pre><code class="language-python">//览器窗口的内部高度
, p; P6 U5 l# b% twindow.innerHeight
) z1 X' {+ d% c706
- u: @1 Y2 G$ u2 f$ [//浏览器窗口的内部宽度9 E4 {/ q, q- _
window.innerWidth
9 x( b4 t7 T. N8 R5 O1522
5 J  v8 t, _) G% x  C& f9 t. g// 打开新窗口
  X! O, p( f6 ewindow.open('https://www.baidu.com')4 i4 ?, ^. E& W& O0 K
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
+ w; I6 N2 G  V+ x! v4 t// 关闭当前窗口
# E5 @0 E! a5 |$ m- v% F, ]& n  h" vwindow.close()
1 @2 K2 H" \0 c4 v1 N//  后退一页4 i) _6 N5 P8 P7 O4 K/ d" ?/ M5 n
window.history.back()
+ g3 F2 K6 ?+ J% N& M// 前进一页6 R, {* x2 l  [
window.history.forward()
& }4 y$ m) l' d//Web浏览器全称9 g) @6 W# [/ C
window.navigator.appName
3 P/ K; m1 t7 N: @4 @8 [. f  g& p. c! |'Netscape'5 s( ~2 a9 J1 Y1 h1 c
// Web浏览器厂商和版本的详细字符串
- U2 \. i) G6 ]5 r% f$ r/ i, m! E0 Rwindow.navigator.appVersion7 ~3 p# X$ ~# v! ]
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'' T5 H  n* Q8 \* R+ b* r9 q- r& u" ~
// 客户端绝大部分信息
, Y* A  C3 R6 }" J- c- D* y) ]window.navigator.userAgent8 X( ]; Q3 t. R. N) G- g
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'9 {4 c' Y2 t  l7 Y$ p
// 浏览器运行所在的操作系统; H+ C6 m7 }1 G- h
window.navigator.platform
+ O' E7 O; `: q; j0 B'Win32'
" e$ V6 U3 P  E- K' v1 {$ T+ T2 I, T1 C; }; t3 V3 E
//  获取URL
8 v9 N8 N; J" K- L  hwindow.location.href
: i4 d/ L1 E/ S4 P1 L* p// 跳转到指定页面/ I. h/ x8 \) e; m
window.location.href='https://www.baidu.com'- Y" ~8 c# ]' J- N/ h
// 重新加载页面8 R$ c! F. r& }2 h5 N' d: Y  e
window.location.reload() 6 G, J% X- u  q+ Q: B
</code></pre>2 |9 ]: c. e/ d8 x
<h3 id="32-弹出框">3.2 弹出框</h3>+ X0 |( `; F: a8 _0 g6 X* ?, J
<p>三种消息框:警告框、确认框、提示框。</p>, g6 a% t/ [6 q" n& n% L
<h4 id="321-警告框">3.2.1 警告框</h4>6 Y& Y: ^( o! q
<pre><code class="language-javascript">alert("Hello")
. y' S$ v4 _$ s0 j* l</code></pre>
. U! o) S% T+ i, Q5 C& O/ j5 l<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
2 J4 ?. w2 H& j. X5 X- }<h4 id="322-确认框">3.2.2 确认框</h4>% A) {, [" F& i: }) K  s9 G
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
6 K5 B8 S0 h' M- Q2 _& o. Y$ f% p4 _<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true7 o+ n* C& u$ z# e9 c' z
true8 B5 D: y4 H/ v0 o* s- k- `
&gt; confirm("你确定吗?")  // 点取消返回false/ N+ W) U' V( Y3 y
false4 h% Q4 h7 _5 X8 Q; r
</code></pre>9 O6 ^: n$ W$ F* ^
<h4 id="323-提示框">3.2.3 提示框</h4>( F2 D7 |1 \! X8 n/ q6 n# A
<p><code>prompt("请输入","提示")</code></p>& m) _5 i  E( I) v3 n$ ?) J5 ?
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>; m! _9 j/ z3 G  ^3 J$ e
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
, }; P/ Z* i8 Y7 E9 J8 j2 g0 j2 c- n<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
* x+ q- `  Y1 W. i$ i<h3 id="33-计时相关">3.3 计时相关</h3>, [, D3 c; x9 \; J& k
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>2 ]0 G/ ^) h& B2 O( p3 t5 A
<pre><code class="language-javascript">// 等于3秒钟弹窗
. B; A3 {2 V# @6 }) c7 Q+ ZsetTimeout(function(){alert("Hello")}, 3000)
1 d1 @2 c$ F+ ?7 `; H( i/ D9 c5 [' d1 j0 b) l
var t = setTimeout(function(){alert("Hello")}, 3000)
* i- T$ |) m9 Z# }3 K7 w! `6 T$ s1 `
0 W, }9 Q( p3 I4 Z// 取消setTimeout设置" |# N0 O; Y: Y" \3 r& j
clearTimeout(t)
; b4 H; r0 q1 J9 c; x' M$ A</code></pre>
( A/ C6 S" p7 h) n. w* p4 E8 q7 A  K: S<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>: C( w0 g( x2 X$ N# w9 w
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
, h' W  ]1 z4 {& [' n<pre><code class="language-javascript">每三秒弹出 "hello" :
" |8 a8 S6 |5 M( T7 dsetInterval(function(){alert("Hello")},3000);
7 f$ w0 }! S0 }, j</code></pre>
0 A8 s( `) P( W* \1 S, F<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
% r( o. w$ l  t, w$ |2 N$ X<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
* N/ B- D& c* H4 c/ u1 T4 q# Q/ s//取消:
, ]) B7 g( F1 ^clearInterval(t)% N; V$ l$ c; ?9 @7 V6 e
</code></pre>
. J8 I6 T/ }3 a6 ]
7 x8 G; [, D1 @+ B7 O5 b
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 16:28 , Processed in 0.070376 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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