飞雪团队

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

前端之JavaScript

[复制链接]

9008

主题

9096

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

% V% J, S2 A5 z8 g6 S4 S<h1 id="前端之javascript">前端之JavaScript</h1>" V( m3 r$ g: B7 l8 j
<p></p><p></p>% h! |( p- I9 ?" \: M- G
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
5 u  L; I8 W0 R/ ~. H: E<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>- h$ P, j, C3 y
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
9 y" e0 Y. Y$ J8 U; }  @1 G8 q它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>( n6 E9 ^& p. l$ q0 O$ _
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
4 q9 s2 b: {6 e/ h<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>! u9 Q( K( Q' J( }, S0 q
<h3 id="21-注释">2.1 注释</h3>
5 i6 v0 R" H) m6 L# M9 k' {<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
: S: V* E. h; I: k<pre><code class="language-javascript">// 这是单行注释& O' O: R9 |5 O; I. \% s( u4 k# F! C+ ^
0 Z, F/ Z7 h3 C; n8 k
/*
& d: }# }: `. z# W( O$ R% U这是多行注释的第一行,2 J+ m) K& g* \7 U! g* m
这是第二行。
7 w- S) y6 D, r$ O1 ?+ S: x*/
: G/ F4 H' A( {' X</code></pre>
" j+ N2 S; R3 s<h3 id="22-变量和常量">2.2 变量和常量</h3>
5 r- f) S. |- H<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>6 H5 c+ z6 V$ U9 `1 P  I, }/ B
<ul>7 p# F5 W& m6 L0 e; a5 ~
<li>变量必须以字母开头</li>; d* q$ _; P  ]2 o
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>; ]4 _# q6 i7 z% E
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
( k* P3 B- p9 E3 c% F! b</ul>
" n* ]0 [/ Y* b" |<p><code>var</code>定义的都为全局变量</p>
: W! y# B4 W; K. r0 p6 b; \<p><code>let</code>可以声明局部变量</p>
( o/ v+ b3 e- |) G<p><strong>声明变量:</strong></p>+ X- C* k0 ^# V  U  c
<pre><code class="language-javascript">// 定义单个变量
2 }4 c" s# X3 X% Y2 W/ r2 M4 v( ~+ B&gt; var name: x) K8 h0 A2 p+ X, @( ?9 J! L: y4 [6 H
&gt; name = 'Hans'
# m' ]7 l) @. z4 A# P1 `% n//定义并赋值- A! C* r: i2 K) k& [; m) b
&gt; var name = 'Hans'- ^9 g; B2 u7 D# P; n  u# [
&gt; name
! A8 p" v9 ]5 l. Q0 w'Hans': j% r; `. _: o. i1 K

4 n! }6 C5 m9 R, D5 |4 L, L// 定义多个变量% L& w; D, a* j. R: j
&gt; var name = "Hans", age = 189 d) [: a3 b  |$ E3 d& b5 g
&gt; name- [8 y* k% Q% Y. ~: d0 z/ B
'Hans'
' u, ]; G# U/ M! P/ E&gt; age
; r% E5 K6 G* E: j8 a! g18
0 ^4 b! l8 v4 `
& Q. w8 g  u2 I  O//多行使用反引号`` 类型python中的三引号
- L3 V: @. o" y8 F&gt; var text = `A young idler,* r- H8 ~( h0 i& C
an old beggar`# G0 u* W# V* G
&gt; text
- U- f1 o( Z* I; G! z- U8 y'A young idler,\nan old beggar'8 O! U: C& \2 Z8 b8 r
</code></pre>% c, Z" C6 W1 E# }5 H4 X
<p><strong>声明常量:</strong></p>
- h/ ^3 e" V  r1 _3 A: v<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
# t' P& p. M+ W3 Y+ {' }<pre><code class="language-javascript">&gt; const pi = 3.14( I8 W% y- C9 b: d" M
&gt; pi5 _7 Z8 F  X- ~
3.144 R' q" |( J5 Y1 V0 l+ S" v8 ^. X
&gt;  pi = 3.01
- |$ y# x) S. m# _4 N) BUncaught TypeError: Assignment to constant variable.
  ?, P" n0 w  m; z7 L& Y    at &lt;anonymous&gt;:1:42 E; s- n8 _) Z- Q- b7 B2 @3 \
0 }  ^; Z0 B) x
</code></pre>
5 F" \9 A0 ~8 v3 c<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
* e: [1 H+ o+ Q# h6 [<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>6 Q: Q8 J$ K+ E, H4 F
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>+ g3 J6 Z( e$ Z" l2 U+ X
<h4 id="231-number类型">2.3.1 Number类型</h4>
7 V- j9 F8 z7 e, a: [8 J. w<pre><code class="language-javascript">&gt; var a = 5
" Y5 O4 c* N& U1 x- ?- {&gt; typeof a   //查看变量的类型  : M: t5 {" w% a
number
/ [7 u" u/ \  T: K2 T+ v: _
. ^0 b0 r! Q* `+ I3 i% @&gt; var b = 1.3
" ?2 h# D7 r5 ^# U; B&gt; typeof b
) c3 M  f/ D' D. `0 X- ?& @" ^number- H& ?: I2 }+ B( \! e

/ U) ^* f9 L0 [7 @// 不管整型还是浮点型打开出来的结果都是number类型
+ p: v# Y9 c# {, K8 R
2 [# D0 w/ o3 [) A/*
9 F" [0 o' K5 @) ]1 S* tNaN:Not A Number- f! H: V5 Q: V6 k$ c
NaN属于数值类型 表示的意思是 不是一个数字& _) j5 r+ X" R& d- y
*/' W$ d; `$ P. W0 o0 r6 N0 [
3 S) P! K  X) \2 W
parseInt('2345')  // 转整型7 j' |- b9 Q2 \( C; T/ w) r
2345/ @& i& ]$ B7 i/ p* d
parseInt('2345.5')9 x: ]$ \) `: }- @. b7 O6 n
2345+ w6 @) t8 A, \: p: b7 h0 l
parseFloat('2345.5') // 转浮点型
. X: d+ \" b2 X$ B# N1 ^2345.5, C: r$ A& `5 }3 H
parseFloat('ABC')/ h: J/ P! D4 _& f
NaN
8 E, Z8 K; n8 V% u% ]" cparseInt('abc')# Q; ~5 c- O- o  b+ _8 }
NaN
+ d- J8 \% O- I* W5 r</code></pre>3 Z4 n0 a# J" [
<h4 id="232-string类型">2.3.2 String类型</h4>+ u! Q1 p0 ]& [
<pre><code class="language-javascript">&gt; var name = 'Hans'
. r" b; n/ {0 m5 y0 Q&gt; typeof name
& W' t9 i" K+ p6 p'string'
3 a6 t( [. v/ L4 r& L) l1 W3 n8 w6 K# c6 \1 F$ B# e' F- I
//常用方法2 j8 U# m5 O- O9 H5 r  I" H8 q
// 变量值长度
8 g6 r' {$ ?! }7 g- O6 N: y&gt; name.length
; j- @9 X6 N' H- ^% H! Y% d4
5 J4 m+ A( d4 G0 u// trim() 移除空白
: T0 A* j# |$ A- Q0 t6 E&gt; var a = '    ABC    ': c) t8 c; f' J
&gt; a
" B- A$ p! ~! L: B7 ~3 M3 X0 o'    ABC    '
) A" z8 u! W; t# I&gt; a.trim()
/ e0 W) d4 ~/ U/ {# u! J'ABC'
6 ~: ?/ k9 P9 }) |1 X5 Q//移除左边的空白* W+ X3 I/ Q6 b
&gt; a.trimLeft()
$ M  t: O; b- H& L/ y- d: c/ V'ABC    '7 J0 q; ?* b# [* I
//移除右边的空白
- A' q) X6 P; ~8 @1 w&gt; a.trimRight()
/ }, s( Z' o* D- t6 a/ y'    ABC'/ w/ }! B) e2 i) y
1 ]) g+ }& W" }/ ~0 e" @7 V
//返回第n个字符,从0开始3 Q0 x3 P" V( n7 b- k! W
&gt; name; h# g$ O/ _! V" d1 e1 e% H
'Hans'
7 |5 L4 W+ {# J  z! W5 d4 B&gt; name.charAt(3)
& S" N3 M6 v% y* w# u- j) x's'9 I* q" G" C: u5 @  Y- C
&gt; name.charAt()
0 F0 @6 {0 i$ X'H'
/ A6 h6 o; F2 W&gt; name.charAt(1)
/ ~  z' E8 A$ d'a'+ D. K! \% v+ \9 H) k2 h

0 B' L* Z2 T3 z1 a4 v& u// 在javascript中推荐使用加号(+)拼接  S& J( R1 E& [! k1 T& |
&gt; name( q& @$ H6 R1 A. K5 x) D
'Hans'6 |9 E. L% m% U5 w" B' M
&gt; a
) v) C1 f' q! B! S/ t5 B'    ABC    '
" s5 ]" R& f& t2 U# x/ o8 G# r* i&gt; name + a
0 J5 ?$ w$ y2 L) Y9 g: V* R3 c'Hans    ABC    '# n, C; T$ o7 l
// 使用concat拼接5 k  F6 A# Y: z/ H- [
&gt; name.concat(a)
) l7 c# M0 G  W& t, P' P# {'Hans    ABC    '0 `+ J+ r9 T7 A; L& J/ W
1 v; F' }# }( A& A
//indexOf(substring, start)子序列位置
% w+ c$ ]) S) ^" t5 M' r1 p9 ^0 P; G
&gt; text
( ~2 d# ]( X) q/ y" g5 Q'A young idler,\nan old beggar'
4 I1 [8 m1 c3 h/ E1 m: z) v&gt; text.indexOf('young',0)
, E2 y5 @4 c/ ~3 U5 [! i2
) Y! B* H/ F  ^4 Z( Z: i
* p' \4 O( s& {" z4 z1 d//.substring(from, to)        根据索引获取子序列/ O' @; P$ [9 c, @* w5 k2 x
&gt; text.substring(0,)
9 [- w5 Y0 A/ x' X- ~'A young idler,\nan old beggar'3 U2 W' K' {& i6 ~  I- d
&gt; text.substring(0,10)
& _0 O  y4 O% z3 d$ S'A young id'
' X) P1 _; |4 g1 o# G8 N
; |- F, B0 H' U& ~// .slice(start, end)        切片, 从0开始顾头不顾尾
4 b- I& Q8 @5 h/ w& @# t* B! e1 J, f&gt; name.slice(0,3)* ], ?7 J$ ^. i( [5 A2 W1 N
'Han'* c- O) Q* t+ C6 S  ]$ R3 {
, ^! r3 W1 h4 v
// 转小写) x* A: {" |2 C# `
&gt; name& M; m4 h. t* j' Z# c' r
'Hans': N4 X  B3 h, {: }( }1 U
&gt; name.toLowerCase()
, C) B$ m- D( p9 z1 @5 J'hans'
" p! H* J/ [) o. r# U) M// 转大写/ l7 x/ I+ c+ W8 l
&gt; name.toUpperCase()0 z! U  H( K8 I. p8 P) E
'HANS'
" l6 v/ ]2 D8 g1 v% L: v6 }( `% n5 M1 R7 F8 _$ M$ Q& _( p
// 分隔
# \3 F2 ~- n  _7 {&gt; name
1 a! d% H6 R: G* t0 ?# @'Hans'
  N* y5 y1 H3 H: ]! z( m&gt; name.split('a')3 S2 r- E1 j$ v! O0 M3 Y. v
(2)&nbsp;['H', 'ns']$ b! a4 x+ X3 m
</code></pre>4 H: p0 L, E2 r! @% ~0 I: o
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>( r! M4 @! ]% l. ^, T
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
  R2 t7 R' ?3 B8 c) k6 G<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
( e8 D. a3 }, |* y# l5 i* W* ]$ C& i<p><strong>null和undefined</strong></p>
- u2 \- b8 M0 q" Y<ul>5 [8 o: T: [% \  F7 D/ T( H% {* V
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
% F1 F5 y4 J0 {# G/ c+ s9 [<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>8 J- E( e1 m! V2 v: }- K
</ul>  U9 M2 g3 s9 N" u5 {7 U& S
<h4 id="234-array数组">2.3.4 Array数组</h4>- G* S  A5 E% h5 r& _: N: j8 A
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; d& K+ ?; O+ E# g' ^; R<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
! R+ D/ [% Z% g; K&gt; array11 W! K& C' t) J- ?( D2 @
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
! M; }' |2 P& N  j, e  E2 c9 Q&gt; console.log(array1[2])  //console.log打印类似python中的print0 |8 r- S7 X- m3 d1 `
3( T* R9 V9 d: x! T5 Y- w- T
// length元素个数
. O- I9 J6 Z$ T. v9 k' ^&gt; array1.length& @  T9 {1 E4 F$ A0 `. G& z
6
- m6 k  ~  \( D$ t5 K+ H// 在尾部增加元素,类型append
% `0 q- g! G4 L9 }0 x9 x&gt; array1.push('D')5 [0 Q! ]& ], n4 k* ~  e8 R  a
7
# s' v2 n0 j5 v&gt; array1
  r: @/ t# w# f" V6 N3 ?(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']6 X$ @" h9 T# `8 B! A- p0 t1 t
// 在头部增加元素& x0 E' n6 g! b
&gt; array1.unshift(0)3 r! I6 {& \9 K7 C+ [
87 b( v0 ]/ W* k8 h/ ]! y' m- I. F: ]
&gt; array1! h) ]$ r! |2 x- _* e! F
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
: n2 o9 ?6 _6 }% C% K4 u
  b( I% d; e; u" A0 N/ Z' b//取最后一个元素
$ c) p* ]- ]  {' N+ h( Z* Z! ~&gt; array1.pop()
9 J; l1 r% e( ^& u+ b3 H# q7 F8 H'D'# z) C! |0 Q% ]0 g" }4 B6 T: o9 S
&gt; array1
; O2 d7 ^6 `8 D7 A3 r9 U. W(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']6 s8 A  b6 C7 ~7 a' \
//取头部元素
4 H. b0 Z' x8 P3 i+ ~1 f&gt; array1.shift()
- C! e  l. V; z1 j+ s6 g0. e! f6 i% x, q* ?
&gt; array1
. J. C" M, I1 L- A" @, j1 K! z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 Y! t" o9 V  ~( K
, i7 g$ W  ~: R  x* R* t//切片, 从0开始顾头不顾尾8 w+ b& Z, J* v* l' i+ W# ^
&gt; array1.slice(3,6)
8 z0 ^# M- c* i' I% o( |2 _! R(3)&nbsp;['a', 'b', 'c']& Q8 I. c+ _+ |+ H+ L) {4 N
// 反转
# y0 F) _' [8 e5 r&gt; array1.reverse()
; `. u% F& V- d/ F( c(6)&nbsp;['c', 'b', 'a', 3, 2, 1]8 f* q7 Q2 u' z8 K
// 将数组元素连接成字符串$ F$ W2 `* R7 F8 G/ n
&gt; array1.join() // 什么不都写默认使用逗号分隔
$ ?5 c% x$ n" N0 O$ M3 O/ A, ?5 Z'c,b,a,3,2,1'
7 H& z+ R; P$ S5 L+ [, o$ l9 w&gt; array1.join('')
5 {. v- O/ c- H# Q# ^'cba321'0 S4 j! d: U) n, ]: P  H% k# [; P+ t
&gt; array1.join('|')
# e# V$ B4 V  e- e9 \9 Z'c|b|a|3|2|1'( U: I& V; Q. ]& s- l
$ u" v+ ~* X! H
// 连接数组. |2 S. e) G9 s. v
&gt; var array2 = ['A','B','C']; L) i0 _$ j. M( l# t8 \3 i$ U: @" @
&gt; array1.concat(array2)
5 b% j1 |, n4 w) o; m0 |* q+ P(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']0 _( ^$ h; ~3 M/ a) J$ W& ]

9 i' x% [9 {# w4 K2 x, N// 排序
! [2 l, [; Q. T" m# g&gt; array1.sort()2 v7 l$ A: i; _/ G' [0 P( O
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 P( s- t7 ~6 n* p0 H* u5 w& Y

/ B' |7 Y. O: t; Y6 S  P) r// 删除元素,并可以向数据组中添加新元素(可选): [. @3 d; q( X9 D/ B" L% a6 \+ a0 j! c
&gt; array1.splice(3,3)  // 删除元素
. [, |5 o% h$ F; x6 g(3)&nbsp;['a', 'b', 'c']! E7 m8 @9 i8 }2 D6 l
&gt; array1
4 q! x4 p- V, V(3)&nbsp;[1, 2, 3]
0 {  D2 Z0 C, \) _1 A: F$ p& v&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素" z  i/ y/ C& c9 Q/ v9 H; w
[]
: b& ?3 Q$ j! A- R# g: D&gt; array1' w6 V. A5 b3 ~$ w- j2 S) G
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
4 u0 l5 @/ f  N5 F# y, h& v, Q
$ @$ P8 L, @$ M+ [. B, B' t  s9 G0 E/*
) @" T+ b4 j  w9 |/ v6 L1 Xsplice(index,howmany,item1,.....,itemX)* X' f" q8 \7 _' W! d4 ~
index:必需,必须是数字。规定从何处添加/删除元素。
! S3 C  U' K$ G( [+ t0 ^+ B- l1 nhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。! ?6 N! E) I. h
item1, ..., itemX        可选。要添加到数组的新元素
3 c4 x# @) ~& w0 L' j*/7 G" p$ Z' v2 K5 P$ y) B. J
* ~& k' x5 I" @5 `1 z: U
// forEach()        将数组的每个元素传递给回调函数
! P2 y; e( O2 {0 o& y&gt; array1.forEach(function test(n){console.log(n)})
* d: K4 x: V5 @6 b 1
8 v# K: I& U# }3 X/ N! ^ 22 q2 C- [) a$ k- s* W0 @4 j
3
6 n/ L& A  ~0 @: _) | A
4 H9 `, e' R& X7 f: r$ ^ B
+ k' g8 ~# S7 W9 {; y  ^/ O C) M" f2 l6 z$ a- z0 Q5 g
// 返回一个数组元素调用函数处理后的值的新数组
8 G6 x/ Y; L) C# \0 F&gt; array1.map(function(value){return value +1})$ r4 B' D7 y1 {( d3 ~% H
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']8 c9 c8 k6 ]2 A; b- F3 G2 N
</code></pre>
9 W5 T* |% G0 E, R0 [6 b  p<h3 id="24-运算符">2.4 运算符</h3>
* m. a% f% q- V5 [3 b' _* B<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
; k! x& X2 `& K* i" l8 g<p><code>+ - * / % ++ --</code></p>. v  m3 a( B( x# [9 `6 A3 m
<pre><code class="language-javascript">&gt; var a = 6
7 E5 c' ]6 w! \$ ~+ H6 Z+ _&gt; var b = 3
  q( t2 D$ o0 V) A. m' @, G// 加$ f% s3 i( }  _3 i( H# i2 W
&gt; a + b
. S2 o- A  ]5 K9 P6 j$ v8 F+ K9
( K0 ]9 |  F; {2 X// 减
# Z5 |  S, h! @* S6 t&gt; a - b
3 q' }2 h* N+ A  b: `5 W& F3& N: B7 C* J3 e' n
// 乘
3 I' s# b  H( H( P9 y&gt; a * b
$ y( h; O% ]6 f9 ~' Z' [180 A7 [! `6 B) N4 Z. R
// 除8 [& m7 i; q& P! {
&gt; a / b
1 g: R; }9 _( x2 h! `5 F2
3 N1 f0 F$ i" f* k0 g- w; U// 取模(取余)* s1 `& O( H: S, C+ G3 d' p5 V
&gt; a % b* _  l6 R  F! C# o, a% E
0' |! ]/ v  I2 L+ q
// 自增1(先赋值再增1)
1 w: u" y! `6 G( I! e  j8 s&gt; a++% b8 {8 g0 d& w/ W' v8 ~/ `
6! U& m( ^+ [' u/ F5 T* q8 F5 R$ H* t0 \
&gt; a" Z3 Q* ?- Y; c: ^4 f* D  E
7
4 R$ J+ G) O4 S" N" S// 自减1(先赋值再减1)
( W6 n. r$ U/ ?5 \&gt; a--8 B9 b; Z& J9 g8 O& k* c
7
5 {. x: N5 J9 d7 E2 n&gt; a0 Y5 e4 y4 {% K8 R) U. U
6: j0 A7 M5 `2 e  \- ^+ p; l0 m8 D; S
// 自增1(先增1再赋值)  R8 W  M; ?# e2 ]# W
&gt; ++a4 w1 Z2 G' `" A
7
! \+ g# r0 O  y: ?0 Z# d. ?4 t// 自减1(先减1再赋值)6 J/ M; F5 `: W; `  l) b$ ?
&gt; --a$ ~: r9 b3 g3 j  ]
60 `, L4 J! O# g8 k
&gt; a
1 g2 C; D8 H4 Y$ k. D, Z* U6# F* w) R$ f' r# |9 h8 D2 L

. a8 |" @, f# [" q2 t//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
4 h- d8 C  D( v& v- e% \</code></pre>
0 L  ]/ p! e  B) d" Y& M1 u. B; i<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
; v- u( ~/ e$ g, v, q6 J<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>8 F% ?/ n, T0 @( X% T! n& y
<pre><code class="language-javascript">// 大于& e3 Y8 o% k$ }7 E% M
&gt; a &gt; b
1 \, l' G' H3 e; _' rtrue" h# V$ n! k- I4 T9 y
// 大于等于
: @4 i1 P9 z3 A. n% X& `. j6 j( w* E) F&gt; a &gt;= b
3 D+ j4 a- [/ ]( p9 strue
. o0 Q* h" U7 Q# T// 小于" P6 _4 r0 m2 J# M; U+ W
&gt; a &lt; b
) Y2 i) E0 H+ [* j' W8 X& ]false2 S5 {  L: v2 Y( d7 g9 F. h
// 小于等于( D9 `% {; D8 e  A; v$ V
&gt; a &lt;= b0 ]9 ~6 v4 Z" y" Y3 i1 @* {- l; _
false
6 R) S. J/ Q1 d// 弱不等于
' p2 `' |/ L/ E1 \  W; F&gt; a != b
8 c; H5 a! a) K& W' A# {true; z  Y2 X2 w$ F1 D7 v
// 弱等于
1 E( m) U# W. I! `% s8 u9 f&gt; 1 == '1'
5 t" y) j( f% H0 ttrue
# _3 U, s" o5 F// 强等于
, Q) A: W6 K' l- d&gt; 1 === '1'
% i' o3 |  d0 d0 l. xfalse2 l) \% _/ X& |( Y( x5 P+ h
// 强不等于
# }) K/ j* O$ W0 w. g( [& M! k) x8 x&gt; 1 !== '1'0 r( g" x" U1 ~! t2 ^/ j8 o: K: J
true
. _! O8 w5 U8 H; C$ z0 j3 Y6 B- m; B5 [- v3 \* U/ h
/*
& m6 g" |* e7 [: g! G( X% q& A1 @7 MJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
) i2 K" y1 {5 V& i2 Y*/
4 R! Y9 l0 F+ h6 e</code></pre>, q& O9 d. G  q6 ^# B- O
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( [% c2 N) \) y3 ~) @% k<p><code>&amp;&amp; || !</code></p>
' J. |" |& r# b; p<pre><code class="language-javascript">&amp;&amp; 与
5 }: C5 S% ?% T5 L$ w% O|| or
! |% C' z8 G8 C" z" g; D! 非
. e% C7 v: k8 Y7 r. B) k</code></pre>
% J" I: @* |' Q: D<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
4 q0 D0 `* d- K! y<p><code>= += -= *= /=</code></p>
8 c$ I% d3 q2 @# m  i: a<pre><code class="language-javascript">// 赋值1 N4 `  s# e& a
&gt; var x = 37 O8 Q) E. X* l/ x3 W0 _# N
// 加等于
8 `' u! b* u: c, b- D2 }&gt; x += 2
3 V3 k. @! ~8 r" V5
% ~5 D5 t& {. h7 `( D8 M// 减等于. h% b( ^" E2 c1 J
&gt; x -= 1; f0 Y( |2 D) _: \
4
6 x/ [; a! k; v6 Z$ n" g- x: ~; g! `! ?// 乘等于! |$ L8 e- `) P- s0 ^+ H
&gt; x *= 20 u) K6 `" N( }: E$ ~% h; \/ i
8
/ W% I! Z6 k' a// 除等于
  i: ~: {3 K% j2 q0 o&gt; x /= 2
$ `! K$ C  x/ s9 P4' V; H. B( P8 v, w
</code></pre>
' |; ]9 d3 h. ~8 C, S<h3 id="25-流程控制">2.5 流程控制</h3>6 A( C% Y& {+ T5 a8 `. |
<h4 id="251-if">2.5.1 if</h4>
1 K1 [- @# A; V( Y: \<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
& E0 H9 w: C3 N$ z6 Z) m
4 B' |+ u. M8 h&gt; var x = 3; O- P( e. K! o# L
&gt; if (x &gt; 2){console.log("OK")}( _; P; v4 E5 U! O; X/ U$ ?& _
OK
) R  T' [$ a, w; s6 n/ A3 L/ L8 P: B5 E$ l3 B
2, if(条件){条件成立执行代码} 8 c) ?- k0 D, e( O
        else{条件不成立执行代码}# q- z' g. F, r% h0 m3 b
+ Z% V: g  d! w3 A
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}: y8 e- |4 Q0 T' C2 b: Z- t  {
'NO'
4 T0 h8 P* X% B) z7 _0 t# W
% k6 X5 S* U% _9 P5 ~+ ^3, if(条件1){条件1成立执行代码}
' e. U! T; T4 n  k        else if(条件2){条件2成立执行代码}) r' g: e: ]; k2 h3 E
    else{上面条件都不成立执行代码}
$ G. h" T9 H: e" v$ L/ O& D3 d- e5 z
- \) t; J* K0 v; M&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}9 T# |$ B  Y$ e" B: C
Ha! \, U3 H8 X% R9 a4 t- g' [4 o
</code></pre>
9 y: Y4 W# Q2 r* _6 [' Y<h4 id="252-switch">2.5.2 switch</h4>
% e) u3 g( @$ P! Y2 n1 [) ~+ x<pre><code class="language-javascript">var day = new Date().getDay();
. }2 U$ H; ?- R9 x' Tswitch (day) {
& Z& L7 D2 w. G  case 0:
" z2 l1 Q! ?8 `& b- e  console.log("Sunday");1 x- b$ C5 Z: O5 e/ D" a( H
  break;8 `  k: X' m5 i: M0 ]9 C
  case 1:0 j* J* g$ c7 B; E# c# F4 j
  console.log("Monday");) g  h$ `& E3 K# _6 s
  break;
: X2 b' k4 ~8 hdefault:
* z; ]( Y( m* o1 j. Q  console.log("不在范围")
7 z& a6 {. ^  i' }* O/ h}1 U7 Z0 ?4 u% A8 @3 c. E( s% F2 q  l
不在范围7 d) B- q: T4 v2 N/ Q
</code></pre>8 W( y! F4 r& P2 z+ |% n4 I: p
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
4 C: r. i* J1 j, M4 v; X# x6 E<h4 id="253-for">2.5.3 for</h4>% _7 h+ S1 y( O" p
<pre><code class="language-python">// for 循环
* F% T) i0 ]/ E5 Z( z7 ]2 g        for(起始值;循环条件;每次循环后执行的操作){- n: J4 R0 `9 J  g; S
        for循环体代码9 O6 @5 E* |5 Z
    }/ [. V. A. [+ v$ E+ w. @# p5 y5 m
& b% R. n3 R+ h: i8 ~/ O5 k: F
for (var i = 0; i&lt;10; i++){/ x# ^, L2 u4 S2 y
    console.log(i)
+ W' ^. {5 v2 o( J9 t& {" `}3 S7 h4 b& x4 E
        0( q* H( c1 _" m" {2 h! l: k/ e
        13 K. k; Z0 B0 m5 e1 v+ Y1 U) v! L4 l
        2
" B4 P5 s6 \3 q1 j        3/ L0 r5 c) U3 z$ Q
        48 T8 w, S; x' u
        5
8 n7 F  |8 {  g( i& \5 {: s, w        6
/ p# S0 Q0 {& L+ a        7
) H5 _# m# f% ~        8
4 B# g! \* V" j( O        9$ y4 a) S0 Z" V4 x
</code></pre>
6 m( o& w4 |/ K, Q2 g6 B! q/ T<h4 id="254-while">2.5.4 while</h4>! E) o3 w, \7 ^4 f/ e% p
<pre><code class="language-javascript">// while 循环; T0 [; e6 r0 m0 x4 d; ~; |
        while(循环条件){
* [' D, \$ z/ X/ {6 e$ U        循环体代码
& g2 r: x9 I! x. E+ a    }& E; z2 g! f+ m( \+ v' A/ R

# N6 ^) S! w8 |7 E&gt; var i = 0
0 i) |- C5 p' G3 V9 Y0 ~&gt; while(i&lt;10){
  h  l6 b$ _! g* J, o: a6 t    console.log(i)
! M3 ^* O6 t9 }    i++
* s+ _, |. X) U* Z& e# i}
$ V, w  H7 {. d" H% ^ 0! l) _+ y. S1 w' ^- z$ N
1% u: b- `  ^5 e1 P1 e
2
; ^4 B& Y  l- {% s3 S% T, w. R5 j 3
& ]4 O* _% ~+ k5 M% [- E4 r, p 4
8 ?$ p* b' N, r( Z, y  X) p, p 5
' _5 `, |% S9 ]3 q7 F 6
4 I% ^! w- c9 S2 Z7 V% _4 U/ ^& n' V 7" b! L' c6 @3 m2 l4 Z$ K+ T7 \; {5 b
8
* x; D8 L& ^$ \" k$ R! S 9
% e7 E5 U) _- S. H3 J1 f</code></pre>5 f+ t) [1 l- W
<h4 id="255-break和continue">2.5.5 break和continue</h4>8 V3 j9 p& p6 {5 H. V; r8 L3 V
<pre><code class="language-javascript">// break
: N7 T( O4 h: X9 Zfor (var i = 0; i&lt;10; i++){
, L" ~& r, y$ W, Y7 V, g    if (i == 5){break}
+ u* O6 {4 [" q7 j7 Y    console.log(i)
/ q7 W" X( ?' I0 D7 ?}* X. e$ N; D( ]& M  i) {
0/ b/ F- T+ T  l, @8 p) J3 M
10 V- }2 V3 c# ^
2
7 ?9 j* [) ?, k+ [ 3
1 Y  }4 k. {; `0 O2 E0 W6 U 4: Y( ?( U  {2 P0 ]$ a
// continue
6 z% _1 L; R. k3 ]for (var i = 0; i&lt;10; i++){- c$ I6 r7 z7 q8 W* u  w
    if (i == 5){continue}) K: n) T& j- F5 O6 M
    console.log(i)
% {" G$ B7 J& a0 ~0 M# |}
# w; n# l. B) q9 ?- @, A3 o 0. X- v% k1 r; ?- V  q- e) h
1$ A  S; L5 c# j# ~3 Q9 g8 F
2
7 h$ R1 w9 ?6 [& v" H7 Z9 g 3
6 S) ~& f7 t( O* i 4
, {' K9 M  P6 r 6
0 B7 ?9 T- t( B* q. g9 _* q 7
( r: H4 w" A9 q+ u 8' k5 J( `1 p# W, z1 R+ F
9
  l$ l: Q3 Z$ n  P
0 m0 F/ ?' P2 q' [2 o</code></pre>
) e, U6 f: Z7 A9 {% W<h3 id="26-三元运算">2.6 三元运算</h3>; @" U- }) p" P
<pre><code class="language-javascript">&gt; a
0 H# m0 J8 c) I6: n4 ^% @' I) t
&gt; b
, u1 L/ \1 v( `& K) k/ E/ f3
0 R( M8 [$ r1 V- ^8 n- {5 t4 ^0 \0 d7 A' q& x" c3 B( H
//条件成立c为a的值,不成立c为b的值; {5 x6 O9 M' n1 c! D5 S
&gt; var c = a &gt; b ? a : b
+ ?' K6 ]5 {% h) c&gt; c
4 o0 u" g6 ]( Q6 @- I$ `; m6/ ^; E" ^& P: \, e
! \1 n  m% N) p6 s
// 三元运算可以嵌套+ I* D5 b  p# S  S+ r
</code></pre>' E8 [& V+ G. m, ]* Q
<h3 id="27-函数">2.7 函数</h3>  A, v4 j' n$ _/ [) {( W
<pre><code class="language-javascript">1. 普通函数
1 b9 S: `$ j2 H+ z&gt; function foo1(){% Z# J. L0 c9 G6 w9 w  j6 C
    console.log("Hi")9 \* C4 b, U( ?0 {1 Q$ k
}4 |# Y' s: x1 _! B# r3 _) g
3 c- n* V1 B5 N5 T; m; S
&gt; foo1()' [' k' d' h" u
        Hi
1 `5 y- j' k* h+ G# [+ u2. 带参数函数
% Y- v% D' R3 G&gt; function foo1(name){0 d2 v- ^  A# G# K* m
console.log("Hi",name), t6 Q( N! r# T5 p7 o  K5 e* t1 y
}
2 u/ q0 L$ S0 w
  c! q6 z% X9 g  R% @+ X&gt; foo1("Hans")6 f. O" m8 e% ]! H# `, b1 A
Hi Hans- F) H2 p' C% X+ e: x
0 g# N3 g6 y" \' V3 g( a
&gt; var name = "Hello"
- |" L7 H1 _1 ~; h0 m&gt; foo1(name)
" Y0 |# U4 M; P2 i8 T" [% k( HHi Hello3 }3 \2 d* d- s9 Z* c7 y2 ^8 z9 f

4 O0 i7 r  P$ |- M3 o; u3. 带返回值函数
+ g+ z# f( [) d&gt; function foo1(a,b){! e7 Q9 z) }3 M7 c7 j; {' }+ k
        return a + b   
* a2 i  w9 X3 h- }( R}
2 s; C, @0 n% T5 \+ I&gt; foo1(1,2)
+ i& D$ _5 u' p  a3
3 N- L: {+ @* z. ]! k9 W&gt; var a = foo1(10,20)  //接受函数返回值. W- w: S. Y: z, N, A- y: R
&gt; a
% Y% b+ _- z6 m7 r# x30- ^1 W7 }$ [; ~* [1 K3 h; a

( n  \1 O' r- G1 N2 J7 _6 A; U5 w4. 匿名函数
9 _0 C1 @+ ^1 H) X( i+ K&gt; var sum = function(a, b){
. `+ `* {! n) ?  return a + b;4 A; s2 l* }( B7 e
}$ C3 d( k7 e' B9 w' R
&gt; sum(1,2)4 ^2 _# ^0 z8 _
3
  n- b* b' o% {7 ]' _2 X1 W- M1 a( `! h6 r  l( a  v& {
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱- [) x6 c! O' i4 o6 I
&gt; (function(a, b){
, W, I1 K* |8 o. J  return a + b3 i. C# T; b( J' Y, F6 ?- X* n- l
})(10, 20)  u- b' a% S- r
30
4 s. _& i3 ^' y/ t; L
. p+ L$ S8 Y5 A3 [0 `7 @$ ?5. 闭包函数
2 I/ p2 N4 m( R4 ?9 `// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数% k1 N+ J6 |6 C- C, W4 @( \
var city = "BJ"
: Y/ ]" y2 k& L4 Z' U( Afunction f(){
2 C( z- I+ J- ?) a    var city = "SH"
; ?1 q* }5 ^  I# j4 K    function inner(){2 X+ `: K( V! G$ J' X" O
        console.log(city)
8 }! y- H. e9 c! R4 d; Y- N    }
/ |" @7 i  u; p8 b, J    return inner) F3 b' B# u* A! w- ]( n& \9 |3 g
}$ C. H" a# F6 R1 r# u6 b
var ret = f()
* l, b  |. S5 I$ W" Q3 P  L$ Nret()3 ]5 q) _& g4 }. P3 _% V
执行结果:0 ?4 ~) x" H/ E+ p
SH
' o; c2 [( p! s+ W. }6 T0 K1 m$ v7 p7 C8 E9 f( ^, Q
</code></pre>0 l( i6 W0 t* y& ~4 K% T
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>6 h5 X; E0 C2 O" @2 p' ^$ c
<pre><code class="language-javascript">var f = v =&gt; v;6 S3 T) g/ O! E) N1 t
// 等同于
! V6 S* v1 L5 i% }6 c9 a6 Tvar f = function(v){; {& F; F* \* e- f" n* ]1 e# O7 \
  return v;8 u9 J% m1 o3 M% {; R4 b
}/ z2 I! d% Q* L4 p, S$ \
</code></pre>4 v% c- e8 L! o! D) K9 H
<p><code>arguments</code>参数 可以获取传入的所有数据</p>! b+ R. ]" G5 e6 ^9 h% L$ o/ V
<pre><code class="language-javascript">function foo1(a,b){
4 b, k% c; u; r' R: m3 V9 B    console.log(arguments.length)  //参数的个数
7 e" e6 h: x9 c! S9 }    console.log(arguments[0]) // 第一个参数的值
0 M# D! v; [! O        return a + b   7 T3 g! Y* G& v; w
}, Y4 l" M7 p# H( T4 z! R
foo1(10,20)
; n7 C$ J, a+ l% o$ R" B8 [) T结果:+ r# o( x/ A4 Z
2          //参数的个数
1 n  d0 s: W( j0 C10        // 第一个参数的值9 ?" x) r' ~/ ~
30        // 返回相加的结果. ]# |5 p9 K! p9 p% i3 p  h! j, M
</code></pre>$ _" V5 y2 k6 i
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
- a: N' }, q  K3 g, a8 A: d4 C- a$ U<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>( Y  m5 h4 w( J- B  S$ y
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>0 B2 _  z& f& S
<h4 id="281-date对象">2.8.1 Date对象</h4>6 A% ]4 O, n7 v  w" h3 W
<pre><code class="language-javascript">&gt; var data_test = new Date()
/ C0 k3 m- V% [4 @, G; k* p&gt; data_test
! O0 {) C: J4 o& I0 u0 \Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间), h; T- I6 \2 s  ^0 C  G7 S
&gt; data_test.toLocaleString()9 f* _, k. x1 n% t" p; f0 C
'2022/2/11 下午9:44:43'
- {7 B6 f  W" t8 w1 q4 j% X  R$ [- k, a& X
&gt; data_test.toLocaleDateString()# y. G+ f* \5 w" H9 a1 S
'2022/2/11'3 N+ Y3 w3 i  P8 H  e$ k
3 V1 r% _) a0 [* O+ A) _
&gt; var data_test2  = new Date("2022/2/11 9:44:43")6 r7 V) K( S# v' {6 u/ c# t
&gt; data_test2.toLocaleString()- N, P" L6 x% H: Y" [: G- o
'2022/2/11 上午9:44:43'; o: j9 p% u8 {( c9 l

1 a# k: f- t( b) m! C7 W8 ?" b// 获取当前几号
, L4 b0 J) c6 H8 q" p&gt; data_test.getDate()6 d4 k- y4 N% m
11
+ ~+ \- E# {$ w9 x. e0 ?// 获取星期几,数字表示
* }! j6 @' Z. e7 y1 {7 f&gt; data_test.getDay()  
1 E1 Y3 v& Z0 G" _! Q+ H( E6 j5. I5 m; L& m4 n9 H+ L* L5 o$ K6 g1 d
// 获取月份(0-11)
$ ]* [+ P/ D- r&gt; data_test.getMonth()
! N4 q( S2 u, }# _# c4 u2 f& m1( l# H4 T) c: Y7 m# E1 a2 Q
// 获取完整年份" [: O5 `7 J* c: `+ \9 q. d
&gt; data_test.getFullYear()/ n/ a* o' @& C0 I: h4 D
20221 Q9 u2 g* x6 p, p' R% B
// 获取时/ \" @3 |9 y" B1 j- L& z
&gt; data_test.getHours()! C( ~  w3 o' f9 s7 Y
21* W$ ^3 ^8 F# ?7 Y" A, P8 J
// 获取分
& h# T7 M% ?. _" M' d6 K. Z&gt; data_test.getMinutes()
/ u) L. W& M7 j  R447 M- d/ |4 q7 o% d) i3 Y) ]
// 获取秒
; s0 A+ A' D) v: V( H2 j5 v- n&gt; data_test.getSeconds()5 N1 A5 ^9 z% \
43. x: T, ~& ?1 D# a, }4 @. |
// 获取毫秒
4 Q) [+ e( `9 w# m4 R' Q&gt; data_test.getMilliseconds()9 n, b  q! m2 l0 k8 l. O
290$ w( l9 J5 x& R6 u/ H
// 获取时间戳
+ K! a9 p$ U1 U) v) k&gt; data_test.getTime()
' f/ O2 o6 g# f5 O6 b1644587083290
3 F, g2 g0 g' ^9 x# _9 i& K% E4 ]</code></pre>( C$ {4 @+ f, j$ G) ~
<h4 id="282-json对象">2.8.2 Json对象</h4>
( V4 x0 q1 Z2 Z) B5 {" o2 D<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串3 l( f1 h: O% A! }
JSON.parse()  // 反序列化,把JSON字符串转换成对象8 Y; N" Q' k. f* A
/ d6 X( B$ E3 ]% q2 ^
// 序列化
' D" _) O: Z+ J5 N: g&gt; var jstojson = JSON.stringify(person)
4 e; F6 C" G- x&gt; jstojson  
; O) m7 |: p- H4 [- m1 B'{"Name":"Hans","Age":18}'
7 o1 q' N& x; W; R
# m6 }5 v5 ]' G; f. L6 S. f2 N// 反序列化
% Z( A9 r8 j7 {$ k&gt; var x = JSON.parse(jstojson)
5 \/ V! r) a6 Q9 C# u&gt; x+ J5 [8 f! J1 c0 T
{Name: 'Hans', Age: 18}
! {- M: K  K2 e3 _) G: p&gt; x.Age" K* Y- h# [4 J9 n8 x! q8 @0 ?8 o
186 @9 x: M( y9 Y
</code></pre>  y. R, Z% J& E4 v2 w" y" |" a
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>' _) J6 o/ ~7 o' U- r
<p>正则</p>. V( J3 q" b4 b8 ?
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
7 ~- [! m( _0 h  J, ]  ^&gt; reg1* [- A" x7 x- o4 j  e+ B0 M
/^[a-zA-Z][a-zA-Z0-9]{4,7}/- Y4 _8 C( r, S1 p6 G
&gt; reg1.test("Hans666")
" u$ `1 @1 _- i* Btrue, d/ g5 Q5 I) c

& N; s7 Y# k2 w  s+ O1 g7 D; N&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( S. B1 t) @) q7 D" I3 [  @&gt; reg2- x3 E' O- s: f9 @/ J$ W
/^[a-zA-Z][a-zA-Z0-9]{4,7}/" S/ q3 N; s) H1 z+ Z
&gt; reg2.test('Hasdfa')
8 h4 I- T+ m" E6 A$ X7 Strue. x7 D5 k. ~( k0 Y" _0 ]  g: Y

  i% ^) u9 s% g! F全局匹配:7 |. m! C0 }( m" Q5 ^5 L
&gt; name
4 X, t5 s8 x( s: o2 M'Hello'
9 k! r9 W; y6 t  ]&gt; name.match(/l/)
5 K8 f& i$ D' e0 E4 K- Q4 a['l', index: 2, input: 'Hello', groups: undefined]
3 s6 p7 N: g4 Z8 u7 h
7 F8 d% x2 L" h7 M# c9 v  X&gt; name.match(/l/g)% {" E7 d& x( {) T( K, G
(2)&nbsp;['l', 'l']
& C! K( a* O' x. _// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配9 k: ^2 Q  v) C: b( ^# C; I

0 t8 _( q% U! `* j- y- D7 Y# ]8 T全局匹配注意事项:
5 g$ e' J$ h- `1 T; j* `9 T! C&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
% T: l9 R9 b3 ?9 [6 _- ^&gt; reg2.test('Hasdfa')
" N7 D& K2 {& _1 ?8 p0 ]# v! ftrue' j* w  j2 ]% ~8 p& C9 K
&gt;reg2.lastIndex;
; @, u" k1 I5 ^' p0 L! _. K6
5 r. l$ J% z) b6 u+ q! _&gt; reg2.test('Hasdfa')" P( T' M6 ~. p# L
false
* A. T/ ^# v  O6 k) F  |0 I&gt; reg2.lastIndex;
: g3 p. O  }. L4 d. ]: K0
2 T6 ]* W' c" _( A$ \6 y3 d/ l&gt; reg2.test('Hasdfa')  d( K+ {- N- u5 m, x/ J. ~
true! z  \% x/ h9 y) d4 I- H
&gt; reg2.lastIndex;
* Z( I! _9 \0 _0 M) x6( J: W( y; f4 v
&gt; reg2.test('Hasdfa')
. W! R' o; R* M$ Qfalse) {  @1 a2 ^  d  V* B" J+ a: {
&gt; reg2.lastIndex;- R. q+ [* w7 l& [& s0 q& }' D. ?
07 D- I5 h* l: V5 ~, T; e! Y
// 全局匹配会有一个lastindex属性
# I+ G) ~0 S. ~" x&gt; reg2.test()
9 U/ d0 W* |* Z. Q$ L, {4 g5 d, V( }false' M1 x4 S# D7 m( W5 @
&gt; reg2.test()
- X7 T/ I* v3 U' `3 y; B3 |& b4 qtrue
: ~- p0 k5 F5 R4 L// 校验时不传参数默认传的是undefined$ V1 v9 D' R0 {
</code></pre>
4 P+ F) a- v2 i; P1 K6 Y: O<h4 id="284-自定义对象">2.8.4 自定义对象</h4>8 _2 v7 M- X2 m/ n# i* e9 c
<p>就相当于是<code>python</code>中的字典</p>
3 D" s+ S' @2 L/ R5 S<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}8 }2 S6 u8 e8 i9 z- m7 f  l2 {* {" W
&gt; person
2 H- A( M4 f7 K; x+ O4 Z{Name: 'Hans', Age: 18}, d. m- A5 u+ L- @; F
&gt; person.Name
" Z# l) V* Y5 F'Hans'
6 A# E" D" p1 I1 c3 ?% ^&gt; person["Name"]7 h+ e$ h$ o$ _/ O( S
'Hans'$ d' O$ a! `) j+ O+ Z

, ^1 R3 n, F# l7 B1 @' C! o// 也可以使用new Object创建
# j& |4 s, j: z7 M$ e&gt; var person2 = new Object()" z- a4 X: A2 p
&gt; person2.name = "Hello"
/ ^5 L$ H3 v! {3 l# ['Hello'  e7 s1 Y& N8 s2 V2 n( Y
&gt; person2.age = 20( ]* a8 s) C3 R1 l) X* I
20# J2 p8 v/ l  V/ N/ _& R, s2 L) |
</code></pre>2 ]. k( H( X6 x% O! T# ]; d
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2># ~# ]/ L5 q# Q# d
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
' Y1 X# _, G% |2 D0 @( |& X<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>  t: @2 D) O. I5 B% {5 d3 v% o
<h3 id="31-window-对象">3.1 window 对象</h3>
0 ?& [+ X. S) r# w; t( P<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
* P9 s) u% u/ W* v5 K% e/ g6 [<pre><code class="language-python">//览器窗口的内部高度
. x+ J% r9 ~& J! D3 k  Vwindow.innerHeight
* j. S+ A/ U, O/ t0 J& n+ q  {" r1 b706
2 B" v5 H4 H* V3 W- t* C8 o9 Z//浏览器窗口的内部宽度
, Y/ }$ t& L+ ]) K& L1 nwindow.innerWidth" ]) H' ?5 A0 N/ P
15226 }/ n! D, G# K
// 打开新窗口8 L: `; D& {9 z" e' ?; `0 l; p$ N6 O
window.open('https://www.baidu.com')
) u6 O: W/ w/ q/ tWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
) u% V5 A, R5 Z5 m9 ~. b& N// 关闭当前窗口2 n6 h$ [5 A! K) e6 u
window.close() 0 ~! q7 Z! r7 \) f8 z5 O. P
//  后退一页
+ Z: `* b# `  U' xwindow.history.back()
/ ^+ l# d; y5 Y' p9 L' d5 M5 N/ |// 前进一页/ ?" l: V5 g% k
window.history.forward() 9 ?0 p. E; i$ d1 L  W
//Web浏览器全称
: d0 o! S+ M( [- x5 qwindow.navigator.appName7 D% ^) m4 K7 P( |4 [5 Y) G! c
'Netscape'% G% L; ]" q% L7 p
// Web浏览器厂商和版本的详细字符串
  A) |4 d5 p9 H& h2 wwindow.navigator.appVersion) d9 N( O5 I# ?7 N, o" j% B2 B
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'5 @9 I8 x6 a3 ?- p
// 客户端绝大部分信息
6 v4 b  N5 K" Y; Y% ^' }' j+ H! owindow.navigator.userAgent: a! e2 y5 j2 N( P' L- Z- u
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 R4 @* d7 G) z2 m0 G/ V+ X. c7 n
// 浏览器运行所在的操作系统# Y9 r, h) D+ p5 V* X6 z" I
window.navigator.platform8 T5 m5 R) \7 f( s- u+ Y
'Win32'# k) C1 P" D& x' e, f6 n

% |7 ~  T/ ^$ [) u  |4 Z//  获取URL, M- d# b4 g6 Y& J
window.location.href
" {0 E8 A0 g  t4 }// 跳转到指定页面2 W2 y8 Q! g  c7 E7 j+ G6 _
window.location.href='https://www.baidu.com'
# x( @# ]$ S0 H+ y5 B  I: n: r// 重新加载页面- P  a8 k9 i$ T; T4 Z
window.location.reload() ) I1 o* j' }6 h' b5 v
</code></pre>
* W( L' n7 \0 a# k<h3 id="32-弹出框">3.2 弹出框</h3>( v: J  l- _% K- W0 }' `& B
<p>三种消息框:警告框、确认框、提示框。</p>
8 @8 U- n3 h1 G: s  g0 x; s<h4 id="321-警告框">3.2.1 警告框</h4>
6 u' Y: g* j% U+ h  _% h5 d7 M: `<pre><code class="language-javascript">alert("Hello")4 C  p$ _+ p+ F/ W: s
</code></pre>
7 V" p+ i( F/ i7 D% W/ D3 v3 M<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
- c( U, {) [! R# {0 U5 n* i3 m<h4 id="322-确认框">3.2.2 确认框</h4>  M3 l5 M/ x" x2 a& K" R
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>/ s" q; |9 n5 Q7 ^
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
/ r" d4 Z; F6 |# t% e+ E/ _* N" atrue& K" x- m8 Z4 C4 e
&gt; confirm("你确定吗?")  // 点取消返回false: s2 p2 {% |/ F+ _
false
$ m+ S9 H+ ^1 {7 C8 Q+ p0 Z5 U</code></pre># ]( ]3 b, o- E
<h4 id="323-提示框">3.2.3 提示框</h4>) a. q5 {$ w) {; M8 ^. @+ _8 m, b
<p><code>prompt("请输入","提示")</code></p>
% S/ \  X) F. E<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>& q* g& W! [0 x; v) W
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>; x& {1 B4 e- V1 \  [; R
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
1 L+ [0 M- b4 i1 ?<h3 id="33-计时相关">3.3 计时相关</h3>
6 p* r2 `. I& }<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
# w' R8 }1 ?% X" W" Y+ n<pre><code class="language-javascript">// 等于3秒钟弹窗
/ J6 D# y: s' vsetTimeout(function(){alert("Hello")}, 3000)
$ t& [3 z4 R' J! S2 {  ^% n* j: A( L! k8 j( H
var t = setTimeout(function(){alert("Hello")}, 3000)
' d8 u  v) W# P, I9 E5 }& b6 F2 b) O" j; d1 \. F
// 取消setTimeout设置
2 b& X# @0 J, z% `1 g; V& gclearTimeout(t)' b! N) U6 n; G* o6 l/ ?
</code></pre>! S! j( b6 j! b- M
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
7 b, t0 T- R& u& l  O<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
8 {* ~$ s  ?/ n3 Y7 S' |<pre><code class="language-javascript">每三秒弹出 "hello" :
% j4 W  Z1 s+ a2 jsetInterval(function(){alert("Hello")},3000);3 ?* M- H) p0 k' ^4 e2 T* J& W
</code></pre>5 N+ Y  w3 T# s1 U0 i7 ~0 K
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>$ {& Q; ]& A- t; n, N; I
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);7 W- e' n( r5 ~, K1 Z8 R, D
//取消:
3 {  ?6 ^) N, w, ]clearInterval(t)# R5 x! @' C/ {1 ~6 |- K
</code></pre>
) j( q3 M( p+ R
: t5 k- l$ L" b
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-7-22 20:29 , Processed in 0.071112 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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