飞雪团队

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

前端之JavaScript

[复制链接]

8053

主题

8141

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

& Q6 v  R: o6 G1 Z8 ~! p$ f7 O5 @<h1 id="前端之javascript">前端之JavaScript</h1>7 s! I4 Q6 N3 ^4 N" s7 m. k
<p></p><p></p>
4 g) Q$ p  E6 X' Q6 P6 w! N<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>8 `' A& l  s) N9 |2 V
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>0 Z6 ^1 v7 P, y2 ^
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 z# Z% M$ m/ ]$ J8 T它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>0 m# p( ?! ], |3 S/ n
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
" }4 n! {  R' `) E3 E. x, h+ }<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
5 Q+ G4 z+ h# _* i! ~<h3 id="21-注释">2.1 注释</h3>
$ F. n* @# p& S<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>; M; `9 b. t1 c. e
<pre><code class="language-javascript">// 这是单行注释
) h5 f& k% r3 ~! M( I7 }. O+ n7 f( ]' K0 N* t+ Y0 x
/*! ]$ f* L( U. q6 G" C! ^
这是多行注释的第一行,5 P' \+ f) u: j
这是第二行。
1 ]' t& l: m/ l$ e* C*/
# M- w7 w$ _- `6 ]8 j" Q</code></pre>) W2 e* U2 S1 I2 i9 A$ \
<h3 id="22-变量和常量">2.2 变量和常量</h3>
9 ~% D: u4 j. z. K: E7 I<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>$ I( k) {2 J8 }" t+ F: b3 p
<ul>
) o, g; O* n$ b2 y8 g0 P9 U<li>变量必须以字母开头</li>& c! s! p2 S6 J* n
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. f1 g, r# v7 M' t) u<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% y# D8 n6 Y( F2 T' T
</ul>, h5 O4 B. M! y  ^# s
<p><code>var</code>定义的都为全局变量</p>
" L8 m" ]* J9 ^2 d, N9 n, J7 h<p><code>let</code>可以声明局部变量</p>$ t( I" B) n: m2 N
<p><strong>声明变量:</strong></p>( j( f- x# d- W0 A9 b
<pre><code class="language-javascript">// 定义单个变量2 j( ^# B8 z3 J4 T
&gt; var name
: T2 p) |0 V5 o) D0 d* F&gt; name = 'Hans'
8 {( b/ L  u) t//定义并赋值- E: |2 M) C' c# s' ^
&gt; var name = 'Hans'
- m9 s: z! ^; `&gt; name
1 Z# X+ D* Y9 o* Q- g'Hans'2 U" n2 l. Y# t  n, S, Y5 g

. O; E# C! r; w7 Y9 J0 l( t// 定义多个变量0 z; \2 H, V8 X: N& D5 l
&gt; var name = "Hans", age = 18
# S9 I6 \* @" M% @4 l4 R! o&gt; name& f) v( [2 W( F, g; L
'Hans'
9 p8 C) D! P. Y# M) B&gt; age
$ y3 x7 T& ^8 }8 o9 E- i18
& r0 T" Y- n9 F  O2 ?0 R# ?) _  M' ?6 r* o( K
//多行使用反引号`` 类型python中的三引号
: G6 ?3 q8 S1 `! f# K" [5 h&gt; var text = `A young idler,
+ ?- r7 p, A/ ^3 }6 san old beggar`
) ?$ I( ~4 K# B" |- r3 F&gt; text- s6 l1 Z) H7 a9 A8 X
'A young idler,\nan old beggar'( i9 v$ c& [" v$ Q
</code></pre>
& i' p2 \; U* h' Z! ~- [$ r( j4 Q" L<p><strong>声明常量:</strong></p>" ]) Z6 `  V. B0 V0 x$ l
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! H9 W) C5 o. j+ k0 D1 i<pre><code class="language-javascript">&gt; const pi = 3.14: i  e, A* |! {; b2 U
&gt; pi1 H6 H& Z) J6 ^' @- u; |% _
3.14
6 r# I3 V+ H! a: Y&gt;  pi = 3.01
3 U' h5 b, N* }/ i9 e$ XUncaught TypeError: Assignment to constant variable.; E1 H: O" i- K. v1 n8 f6 l' Y
    at &lt;anonymous&gt;:1:4- v) A3 k$ m0 _* f
* H7 {9 w+ U1 {: j& p( i9 s
</code></pre>* j7 e7 p0 \* N  s  ~
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
% x. _* U) F1 h<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
/ v. ]1 a+ K. M% G4 z. o& `3 m! I<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>" ~! v0 z  J; g- b% T% o, q6 D1 @
<h4 id="231-number类型">2.3.1 Number类型</h4>
" v9 y# T) B$ y) A6 {" l1 Z<pre><code class="language-javascript">&gt; var a = 5+ C/ F4 H  h( ~6 c0 f1 M
&gt; typeof a   //查看变量的类型  
6 o4 B5 @; K! S1 fnumber
7 z/ T; j; i2 A* h1 ?" }: T+ H$ Y* {2 y4 H5 d2 R" ]( D) r
&gt; var b = 1.30 G% g- i8 D4 k* e5 }
&gt; typeof b& U: V$ W7 M6 W2 s
number1 s' T/ A9 Y& z1 W! g8 l$ [0 \
4 h5 R" m. v! [: k7 C3 e
// 不管整型还是浮点型打开出来的结果都是number类型
8 n8 ~6 K$ D, e- @: ]) T. E# B8 ]+ P0 O7 V/ j
/*
+ @9 B* |% R9 j3 j  MNaN:Not A Number
/ L5 A( }; [. j  a8 zNaN属于数值类型 表示的意思是 不是一个数字: `1 D/ f" [5 T3 @' Z! y* L: U
*/* P: x2 C& ]7 `

& ^) N4 m: @% t+ c. Z) Q4 NparseInt('2345')  // 转整型! w5 s1 x3 n  z8 ?- S7 a
2345
) ]2 Y3 q$ E9 ~+ D. J2 A4 VparseInt('2345.5')
( P* }3 p' G0 m; X  D0 h2345- s9 X4 l' W1 N. T1 a1 i8 c) T
parseFloat('2345.5') // 转浮点型
8 {# C9 C, A) d: x! ^- X2345.55 f% Q4 M1 W" v8 ?! c2 c
parseFloat('ABC')
, U! e- o: B% {5 B- Y% e1 sNaN: ?, j! B2 k0 g8 m5 r9 H
parseInt('abc')
7 {' M( d* N$ ]# \0 I8 ]" o$ kNaN
: G( j; e2 s# w& G3 J4 p</code></pre>2 k! k. h# K3 |- M4 V/ m
<h4 id="232-string类型">2.3.2 String类型</h4>5 U+ b- t. o* z! D% L5 W  Q2 B
<pre><code class="language-javascript">&gt; var name = 'Hans'5 `( B# G/ l) S1 j) O8 i  `, e: d
&gt; typeof name
6 M" T+ R! w* {, ?" I% c'string'* J! n2 }6 y; y( Z# J# C. `7 ?
- J0 S$ u5 v8 t: a) n6 c4 v
//常用方法' o$ m8 l: Q# b4 q6 R3 B
// 变量值长度
( `- V7 F- q( B& |3 M&gt; name.length
% Y, f) c) b  ~9 }+ [0 N" j: b4
% B, A9 \: _$ b" h7 Y// trim() 移除空白
" X& R2 F8 V9 ^  y/ A&gt; var a = '    ABC    '
0 v# O' K2 P0 ?, C5 s&gt; a
0 C" P0 q, n+ ~, \0 h9 j'    ABC    '
. f6 H2 L. c' {8 U) s# b&gt; a.trim()
4 i/ m2 t4 n$ m( X, @  T* p1 H'ABC'. E8 h$ I  J+ c2 c. q9 \5 c2 U7 H( ~
//移除左边的空白
3 J+ i6 p8 c8 U6 J. v4 [' A; k&gt; a.trimLeft()3 @4 t$ D5 a+ k) |1 N  Z2 b
'ABC    '
, F4 I. K# D* h9 w5 o//移除右边的空白* p. Y4 f6 ?$ K  G
&gt; a.trimRight()
+ r8 Z5 x+ J6 w6 x7 R'    ABC'
3 \. y. d! Q6 @% L4 y
% f6 C! e, T9 k/ Q% r9 l//返回第n个字符,从0开始
: N! k  b9 v% K1 K) E) t" W+ f' W&gt; name, C5 J. Y. u0 ]% H
'Hans'
1 r) T; Y* H5 ~: ~&gt; name.charAt(3)
2 R8 R9 K/ s' z" Z's'
; }, U% ?4 Y% U0 ^7 a, o&gt; name.charAt()
# c9 i: L. b, T  |'H'  ^5 o/ ~( a4 h& J3 q
&gt; name.charAt(1). J  O; q0 q, e9 P3 W5 {/ T" {
'a': `) M$ R1 V* B% e
* Y& g, U& \2 @7 D8 m. G: C) f
// 在javascript中推荐使用加号(+)拼接
7 K8 N0 K) F4 b, y1 B&gt; name8 {5 h; [% y( Y
'Hans'% u( F; P' ~1 a5 w  Q/ u
&gt; a9 b8 o* D/ ?; e0 P. D' v
'    ABC    ', Z$ S! K4 R- X# e6 M
&gt; name + a6 A0 n! ~4 @- v' s
'Hans    ABC    '+ Q1 A" [6 ^  D. w. ]" u% U  S
// 使用concat拼接3 k8 l* g5 X$ w$ `  C; C
&gt; name.concat(a)& j+ |+ H. B8 n1 o: R
'Hans    ABC    '
/ O8 E) ~/ [4 }; `, T9 M/ _, v' b  l4 O. C, e
//indexOf(substring, start)子序列位置% s) t: c4 E& G/ r2 a. m

0 e) a3 g9 ?2 R# y&gt; text$ h6 |# Q* `( ]4 Q+ a
'A young idler,\nan old beggar'
3 p$ J! \( i6 K; a/ Q&gt; text.indexOf('young',0)/ Q7 ~% i. m! I
2! b, Q/ d& I0 R3 d6 M" Z
- U$ h" ]0 }6 P0 r' ^6 Y3 G
//.substring(from, to)        根据索引获取子序列0 W' ?& g1 s, y2 s
&gt; text.substring(0,)
: _# N& H* }$ A- O4 z" P6 V) Y* w- E'A young idler,\nan old beggar'
9 \) g$ V1 ~/ g& g&gt; text.substring(0,10)4 M) N/ S, B) u
'A young id'7 c$ S! w/ P0 ~6 Z5 |) T6 w
8 {  \. f5 W8 l5 N$ n: |8 p
// .slice(start, end)        切片, 从0开始顾头不顾尾
( t. n1 |# H4 P: v+ E  O&gt; name.slice(0,3)
; W# U' s* D" f$ L. @" D  k'Han'  `/ T5 P- o1 l; y5 W; K

6 a/ {7 h* U9 A7 y# C$ D: o// 转小写3 X5 ^0 w2 d0 Y: B: P4 G
&gt; name
  v' G& n9 ~: F) j'Hans'
9 w) X& C# o" @- Y2 b: W/ E; t( K- P&gt; name.toLowerCase()/ }7 Z+ W2 M0 l. _
'hans'
5 @: m) _' j! G7 G// 转大写* n' O1 J: i; C5 ^0 n, A! n" f
&gt; name.toUpperCase()7 q5 E7 r. J+ V
'HANS'6 b  n1 A0 Z# D% v8 G
( _. A: n; N/ X0 r0 p  j  u: Z
// 分隔
2 e8 u4 _7 Q3 a! d" i$ ]* [+ k5 M&gt; name
- v6 T# S! v. Z2 Q# S& M  D'Hans'7 y, `* c" _8 b8 b7 _
&gt; name.split('a')* [, }. z. r8 F
(2)&nbsp;['H', 'ns']* l  b$ C6 R! o2 b  t* ]6 G4 B
</code></pre>
( O. {7 L9 J# u+ C<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
2 m' n9 t' X: e& d: @8 D6 W<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
4 Z7 c' `6 b9 s: S: d- `. G2 P' u<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>% Q7 L* z6 @) @$ D0 G5 V2 _- r
<p><strong>null和undefined</strong></p>: ^3 F9 R6 }7 _, A; ^' ?$ T: z
<ul>5 J# Y$ Q( p! a* e) \0 I# L
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>$ x. D6 G% y( L& E$ h& K1 U8 V5 R
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li># v2 y2 `+ q; B+ R7 ^) t/ [1 P
</ul>
- r; L; U8 Q% d. P<h4 id="234-array数组">2.3.4 Array数组</h4>
% [/ [* {# u1 r3 p. Z' d3 n  F1 h4 v<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>$ v. @/ C5 Q# [% `0 @, `2 ^
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ( b% s, g) z+ d: F, p& S& L
&gt; array1: n9 Z9 O  ~2 ?& c$ ?9 i  n/ p
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
1 E* F6 _5 h# K8 u( `&gt; console.log(array1[2])  //console.log打印类似python中的print
- n( n# J8 G$ e+ T3
) O: _+ B9 ^- ?  D// length元素个数. ?7 t8 a+ v3 O! O, `
&gt; array1.length
  j2 Y( Y" i: P4 v2 k6
* t6 T6 c7 a% B: f! S  v// 在尾部增加元素,类型append
6 }0 M& `1 @" ~&gt; array1.push('D')
& K% q$ F; ~7 e+ h0 L4 H6 Q7/ s# j  ^9 `- e
&gt; array1% O3 B5 b, B3 c2 {6 @' ]
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
0 w" E; g, B& o$ D7 D! n// 在头部增加元素# K3 z7 d% s. W
&gt; array1.unshift(0)
  H. e$ _  L1 {) x; p0 h- `8
0 |" B* ~; J. h* B&gt; array1, {, F+ X. o3 Z( ?: e- I: d
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']! Q, b. Y% }. m- w) }: Q- m

) P5 C; C  K0 _) g* M' k$ a//取最后一个元素
3 a( |* k5 F3 Y1 {: ~/ @&gt; array1.pop()
/ W" `! H/ q& S% U& g'D'
9 w8 ~: J# F5 y2 H&gt; array17 L) y+ e4 x( H' L. D
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']% [! r3 t; K: y
//取头部元素" C3 h6 [9 H  A* [
&gt; array1.shift()
* N  ~5 r* h9 r' x( P. Q0
: T/ g% x& J2 n  L& u  o. A5 j& w$ ?0 n3 ^&gt; array1, F; |1 ?& s: e' @& h( p
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 a' O; W1 G- {, @) _& x) z3 l

, N* G" h* z9 e' s0 D9 F" k& ~//切片, 从0开始顾头不顾尾9 L4 v* @' }4 d- d
&gt; array1.slice(3,6)
5 n; O- ^0 t" |(3)&nbsp;['a', 'b', 'c']
7 }. j: W+ E) f// 反转9 K" K+ S% p( M
&gt; array1.reverse()
5 Z5 W: p! ?. v& u; E' @$ N5 H(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
' @% U: \# F7 }3 [7 t: a// 将数组元素连接成字符串' `! [) X/ ~( R+ z
&gt; array1.join() // 什么不都写默认使用逗号分隔- l6 Z1 r9 t6 G+ \& I- L) [
'c,b,a,3,2,1'/ H8 {9 G. \( Z( s+ [/ k
&gt; array1.join('')
; T" a9 H8 J( n( J/ P  U" q1 z; n'cba321'
4 ~% I( A+ h1 q) ~, z9 J&gt; array1.join('|')
1 u. ^+ w; v- p7 I'c|b|a|3|2|1'9 n6 h( L/ x2 a, }

) w# B, h' {* @. K& n. a// 连接数组$ Q; h' I; V  V1 l- i- T
&gt; var array2 = ['A','B','C']
& _' U9 e% T% t0 P/ B* o, \3 K&gt; array1.concat(array2)( V) M; o+ U$ M
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
1 a1 |$ y: [  j6 B3 P1 w8 ]
7 b7 ]& K& a+ a6 \: ?( H) c- f- c3 s// 排序0 p4 k, v0 R* O6 z5 E/ ?
&gt; array1.sort()
7 X- q" j" P, {. z& J# V! ~8 K% ?(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ l3 ~* |" E9 ]& e! \2 U6 F3 g/ g$ _& M# ~  f
// 删除元素,并可以向数据组中添加新元素(可选)
3 N5 x6 C8 c0 Z0 v( Y&gt; array1.splice(3,3)  // 删除元素; A7 Y  z/ C! F
(3)&nbsp;['a', 'b', 'c']
% k: p; [0 ~& j# c&gt; array1
" n7 l7 e/ D- Y+ t" ?  P(3)&nbsp;[1, 2, 3]6 v$ E( Y1 L+ Q: o, ]$ t# S) a4 G
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
/ ~- t  Z$ }4 X' L$ y2 I2 N[], \( d- m! T4 L, k( o( Y- _3 H1 g
&gt; array1* R' z! z& a. K, z$ }) C% o
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
2 T0 |! W+ H+ m' ]" ]- e% r* i( ^3 Y/ P. c8 n
/*
8 v% f& Q% w: a; ~; Osplice(index,howmany,item1,.....,itemX)
) y" f$ F( \# d# N2 Bindex:必需,必须是数字。规定从何处添加/删除元素。
& I% J7 O: d+ Ihowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
: D8 `: _) w8 Z. c& pitem1, ..., itemX        可选。要添加到数组的新元素
$ z4 \* ~5 D- o' `4 E: k3 X*// O5 C  Y1 _" d( i* n! |' s/ l

- a1 M( c* f" I6 }// forEach()        将数组的每个元素传递给回调函数
+ [2 ?7 F: ]1 J" O&gt; array1.forEach(function test(n){console.log(n)})% _" w9 v  K: S. T
1: q* j, j5 L- `* y
21 C- i* W* f' l' E9 _' U
3
( o/ r* [$ z& g2 @' E( l A: j9 C/ F& A9 |, i; r% G* t
B
  ?* X1 v# g: \, W- F, d C
9 m/ U7 @, G3 G: ?3 x, e// 返回一个数组元素调用函数处理后的值的新数组: M* i# P# z7 q- C- n$ O6 A
&gt; array1.map(function(value){return value +1})) T& S' @5 [8 k7 `7 F
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
) z3 a; h8 o( m6 n1 [! Y</code></pre>9 p+ I5 Q" C9 E8 g
<h3 id="24-运算符">2.4 运算符</h3>
; x8 v1 w4 H" c- u<h4 id="241-数学运算符">2.4.1 数学运算符</h4>& M7 c7 t( K- w6 }) c  c$ [
<p><code>+ - * / % ++ --</code></p>. M3 t9 b/ K% P8 S8 \- c/ P* `
<pre><code class="language-javascript">&gt; var a = 6/ L* d* T8 X& f8 [# }
&gt; var b = 3
! h/ G2 `3 G, p// 加" {5 D3 d0 p3 C% F, w
&gt; a + b& N# B: ?0 J+ }$ E9 e! w
9$ G6 \) N' M1 u! y( E# |( V6 u
// 减7 c3 Q0 B& i, c1 B
&gt; a - b$ I0 x4 d% L. _/ v0 e
3
. u2 E% C) ^% A& Q% a// 乘, X4 v; o" }: q0 P$ \
&gt; a * b2 ^3 P( w' y& {; ]! i1 {0 @* ^
186 O( R9 S2 L  l2 i+ W) W3 S- ^6 ?
// 除( Y1 k/ q5 }/ Z( [( ?
&gt; a / b
, C" f  G! l1 _: r1 G" z25 B  t+ W, E8 O8 z0 `6 N% m+ l
// 取模(取余)
7 t4 e; h# s' A: {6 |&gt; a % b
! e3 w! C1 h  A  g0! r+ e- |5 h2 p6 G! j6 r2 A
// 自增1(先赋值再增1)
# g. K( L3 ?9 ~9 D; D  _9 Y&gt; a++
5 Q3 f8 [9 @( D  o68 ?7 ]5 q; m' h% F2 h
&gt; a$ `1 R9 O$ a2 Q' C- T6 u" T' t( t
7
3 q; s) ^1 r3 G% `( @// 自减1(先赋值再减1)4 D* g) H. n. m9 |  u
&gt; a--1 Q3 k" A; \8 b4 j
7, o+ {8 B8 @8 ?  D* s' j! m! E: g8 M
&gt; a0 ?- q+ Z( I6 c2 s# c% l2 [8 S
6- s6 R1 B. v; H, d- k) X1 b
// 自增1(先增1再赋值)
6 M7 ?  O; s! G' A# g  O+ s  O6 p&gt; ++a
" B3 ?( y. Q5 P, {1 C9 w5 Y$ A7  _  d2 A! O" J' V8 C- i: ]
// 自减1(先减1再赋值)# a5 b6 m- v, L0 m& N
&gt; --a
, z2 K3 P" d( p" {7 Y8 P6
( d3 d$ o8 t, T  E&gt; a6 I* o* M6 d% n$ }. R- q
6
8 p8 G; d/ _8 x. I
! d4 r6 O0 C" b$ ]3 \9 r0 ]//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
" ~% y- P; M: D! ?* ^/ F1 R5 b</code></pre>5 w; {0 Q' A9 q3 |3 [
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>, i5 U, B; _4 m8 m$ Z
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>! j6 |* |5 o; U4 J
<pre><code class="language-javascript">// 大于. A  {: e3 \7 b
&gt; a &gt; b4 Q4 A' J6 L2 \6 W; C
true
# K# j* G0 c: ^8 S// 大于等于% F7 u9 }' M) o6 C- X
&gt; a &gt;= b& B, M3 n+ ^; e, s! |
true
& o* J9 q' B  M) f// 小于% t1 k" ?2 ?. h  J
&gt; a &lt; b
# }7 z, `$ H2 Sfalse! U' A1 a6 T2 r3 t9 v5 a2 f
// 小于等于- z4 T( k1 F9 @5 ]' D& J! _% C( R  ?
&gt; a &lt;= b
8 M) v9 }+ c5 e' \, F. Nfalse; n2 r$ m% n- o& K0 P
// 弱不等于& N3 q. l9 _. @7 M* I  L$ U9 w7 _
&gt; a != b
1 S! t4 F) n# K( [- D5 k' ntrue
1 ^9 z, z8 T$ `: b3 {// 弱等于1 C4 J  L. {7 N
&gt; 1 == '1'2 j; A- A- _7 a! W! k
true
- u% ]2 M# h/ N2 W4 W( h// 强等于  \8 @4 [( L6 B/ K* g
&gt; 1 === '1'5 ^7 O5 b! _4 j3 U1 J1 W4 d$ r9 t: D
false
; q0 u9 k& O8 l& R" `- x. f6 P// 强不等于5 b1 e2 t: k, @% H; T
&gt; 1 !== '1': c5 C' v$ Z. b" [' @
true
. a! W. s6 u7 D( H1 I+ _. e3 j9 z  `; ?: r
/*
$ f( X0 S5 q" ~, `1 jJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误7 \5 Q) y1 v2 w7 q& Y+ M
*/1 \0 R6 b( ]2 n1 ~/ V! ]
</code></pre>
6 w/ {$ `0 Y; @2 q5 A<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
" Y2 ~; l7 a* ^- M9 {+ g<p><code>&amp;&amp; || !</code></p>* u3 @5 P2 o7 a
<pre><code class="language-javascript">&amp;&amp; 与
6 D& p2 S) C3 @) D% E|| or
, P6 C  L' ~  |* q5 M  c& K7 r! 非6 _! Q! D2 Z0 c# P' j$ w
</code></pre>7 |1 g( V3 ?5 h2 ]5 Y9 Q
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>8 W4 j  S) E8 A. x
<p><code>= += -= *= /=</code></p>! j! U! L$ S# D5 S7 A1 Y4 `
<pre><code class="language-javascript">// 赋值. m; v2 J0 @# F- q6 b" t" p8 ]
&gt; var x = 3; ]) @3 V1 p, n; B" v+ S
// 加等于
8 ^; D' B* G/ a0 `- C+ R3 }&gt; x += 2
5 f* U# x5 y! S3 d5. N5 y, Y( r  p7 ]  s4 o2 B+ V
// 减等于
! t6 n  M- k1 l&gt; x -= 1
3 x, J1 `% r$ [4
- b3 B1 O: J9 ^+ r$ f7 t// 乘等于' S. S' y: R' }- Y% J8 m3 H
&gt; x *= 29 @0 i6 f" C/ ^: F9 Q* N1 x0 X
89 v" ]2 c% F5 ], g6 @3 l& t! R
// 除等于+ S9 W% E; y* p- `* A/ I% t2 N
&gt; x /= 2; }0 B+ J5 B! ~/ V) @
4: L$ c+ r9 [# a4 b% {1 O
</code></pre>" i6 X$ n) W" y* `4 W
<h3 id="25-流程控制">2.5 流程控制</h3>& P2 @& @9 x8 R, e8 G# @3 i/ }
<h4 id="251-if">2.5.1 if</h4># J& A; p+ O- y8 U1 X: U
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
$ B6 h: _! B4 o4 I% X) a
0 n" D# r2 T$ Z: x7 O8 [" M&gt; var x = 3
: z9 ~& ^: \3 g& Q- _( f+ w&gt; if (x &gt; 2){console.log("OK")}
& Y  U9 }3 n9 c: B( F' Y OK, r& m8 L+ k2 R, `

& q* W2 O4 a2 @  l* k' s1 S2, if(条件){条件成立执行代码}
4 }4 d% F# z) z        else{条件不成立执行代码}
9 G% `8 Z3 [+ C3 i  X
, p: \) A( ~6 v2 V$ r&gt; if (x &gt; 4){console.log("OK")}else{"NO"}' f$ z1 c) n! {
'NO'
5 b$ S4 A" g* U3 V
# i, ^' w' F" p! Q! }  H& x1 ]" V9 U3, if(条件1){条件1成立执行代码} 7 h9 I4 c+ q  X- E6 S. _) d
        else if(条件2){条件2成立执行代码}
7 N, V1 J8 k2 D6 v* Q: A9 [4 W    else{上面条件都不成立执行代码}: S9 I9 |, I+ \' ]% v- A, E3 I

- E' r& R$ [# T( X, g$ z  p, f&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}9 L+ y: ^: D/ R( {
Ha7 Y$ F' r1 ?. o, Q3 {( P! A8 [
</code></pre>" |4 t4 N# a- ?+ }9 ]8 }7 y
<h4 id="252-switch">2.5.2 switch</h4>
' e2 N+ s) k( Z# e+ E. y5 B! Q<pre><code class="language-javascript">var day = new Date().getDay();  n/ S6 z. N8 F6 o
switch (day) {% @! X/ k( A. `2 f( ~
  case 0:
. v* I7 w! ]. N  @  console.log("Sunday");
0 q. f& Y8 T3 s6 h, M1 P6 s( e  break;
# A6 L) _) h" h/ Z7 u  d  case 1:* c5 Q0 b* \- U3 R! }& x; ~( |" o
  console.log("Monday");
( S$ c5 f1 S5 k/ ]) I  break;
" y! q1 U2 b# `, }5 X7 V& g8 tdefault:% l5 Q0 d8 L; e0 B) y8 Y
  console.log("不在范围")1 s  s9 n4 O( A
}
& I- Z, k0 c% Z* U, |8 F0 i 不在范围
7 d3 }. v- V4 {& T8 F/ l, a  a4 o</code></pre>
- {* l( ~' I8 d9 Y* d# M3 n2 P<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>+ y- }1 {8 w) L. }7 i( K! X
<h4 id="253-for">2.5.3 for</h4>
0 V, G) M+ p  y# U$ P8 e4 f<pre><code class="language-python">// for 循环' f/ W  w0 y$ b5 x
        for(起始值;循环条件;每次循环后执行的操作){0 {- {6 H  {5 |2 z
        for循环体代码% P8 F$ J5 S+ ^
    }" e" t2 l! p7 ^' i7 o

" _* V7 {' f4 P% r4 Q$ sfor (var i = 0; i&lt;10; i++){
) y- x) u# c5 P; _; ]$ S    console.log(i)* h" M( W$ k: X& p+ D- g$ P- @* K
}
5 ]) J2 @5 _/ m& W        0
! T" ]% \- H+ d: t0 q        11 c( o" W, q/ S4 ]" d1 \( u
        2! I7 }4 @' C; i4 a; O0 V8 C
        32 k. x8 b. N! v! z  {% G5 z
        4
$ Z& K' N% o6 }: p; h        5
1 a# |$ }# R9 w  i        6" a: |5 S# f7 h8 M& Q8 |  l& t) G
        7  R+ F* _& R" q. v, t8 ~
        8
) P* n3 A7 ]" @. p! Y6 l5 e. [        9
8 C- g: ?9 X' O6 E! [- D</code></pre>3 D1 |) i: [- `) Y& T3 H+ D1 j7 @
<h4 id="254-while">2.5.4 while</h4>
/ ?8 x9 G  ?* q* ]* J2 o. b) h<pre><code class="language-javascript">// while 循环
+ V9 }+ G: A5 w$ g        while(循环条件){6 I) V) C2 ^7 E+ P. j, V
        循环体代码
# A* S4 g" A5 _1 {    }
9 e; A" n. A: k1 R) x- @0 l% u! j$ l& v, F8 y9 V( [" x) [' X
&gt; var i = 02 W1 j- i7 D( w& S9 O6 U8 _
&gt; while(i&lt;10){
2 n: U, i. Q  \7 m    console.log(i)
8 U9 X" O" d# B9 p: ^    i++) b+ z8 ~5 l7 I. D6 I7 F) A
}8 X( }$ e) _  `! J- T
0
1 ?; h! J8 D- z0 @5 ]% b0 e 1
8 W$ I  s1 `, Y* r3 E2 }' k 2' y3 J8 j5 s6 K  Q: h
39 }# v& e, [+ b9 V2 z4 {- ^
4
; e: w0 W5 P/ c- p& t 5
- L) Q- W: [+ X- r) H5 S 63 Z7 |4 o: X* X
7
: h/ E. V0 n* m  ~. a 85 }) o! L0 h& l" m' A
98 y' u! O4 M, K2 g% X3 L7 X
</code></pre>' c6 ]- f2 f/ i5 A2 ^3 t) E
<h4 id="255-break和continue">2.5.5 break和continue</h4>' j3 i/ w) c' G( W
<pre><code class="language-javascript">// break& ~* r0 j$ Z2 U) _3 T9 t+ a
for (var i = 0; i&lt;10; i++){
' o+ O3 l. U" Z: r7 }    if (i == 5){break}2 B& H0 d* U  ~' l1 \  A
    console.log(i)0 Q3 t& U, }* m$ j. r0 n. f
}3 \+ U, r$ z7 y9 z0 U. [
0
( M2 h% T$ l, v6 X" f& r 1
4 a5 G# _. o0 Q" c 2! a) v5 ^- t2 H( U' ]
3
8 i) v1 y: U( k6 R 4
3 w1 ^2 s* N- y, [% f9 K// continue
1 r1 Z( c9 I; {7 Qfor (var i = 0; i&lt;10; i++){
1 U" U) T( J1 T; s' _% m- R6 B    if (i == 5){continue}
+ A4 G0 i6 l$ Z- A+ v% ^! t! c/ P    console.log(i)8 J8 n: E2 z. M. g7 F. c( B
}
# K/ B; s" J. W 0+ S+ s# ?. s2 d
1
. E7 a+ \2 w8 b0 u 2& D0 E6 H" i9 r* ^" a- K5 d! K
3" t! ?; W, W2 t* j) W
4
/ ]" |3 ?: f2 j. M( O6 T/ {6 N3 j3 J 6) [; [& ]4 N- v
7
$ Q9 }4 x* r+ s* K/ n% G% q 8
& G* l) ^/ m0 r- m; L! q 9
4 S2 Y8 F- \4 ?5 J- G! u! M* f
! c2 a: U# ^/ }! x& L1 d" f9 B. `</code></pre>
( w& L% d8 t; ^8 W5 r  C& \8 v<h3 id="26-三元运算">2.6 三元运算</h3>
1 T4 j( E: ?0 C9 K<pre><code class="language-javascript">&gt; a# s: u4 u% o: @% Y2 e. W. ?
6
- J: ^( r; }2 @' j5 d&gt; b
7 H+ H: h; ]# ~: {) u1 L8 a& {3
) s$ m+ l2 S7 P) j
( E% z! q2 v" V0 w//条件成立c为a的值,不成立c为b的值
# u3 z+ D/ ]7 `&gt; var c = a &gt; b ? a : b
) n) d% q' f( ~# @# Z* [, _# P&gt; c
( J- T( Z& e3 I- Q6 l6
/ T+ O/ I' _) I& p7 Q. x' b
- ]6 Q4 Y( d! W( d1 y// 三元运算可以嵌套
" f6 f; `$ n: g" P5 W) v' {</code></pre>
; W- y5 ?2 {7 ]. U- A8 C8 ?# Z<h3 id="27-函数">2.7 函数</h3>
# i3 ]3 |8 D) U* a, a* _& c<pre><code class="language-javascript">1. 普通函数# H$ Z4 K5 q# R' E
&gt; function foo1(){: R0 J) G$ o5 {" e' W3 Y
    console.log("Hi")
* [) n/ R& P9 R7 O! O& `}! ~6 L5 U" v! E
. H6 u+ X  i  G5 W6 f
&gt; foo1()
6 Q& F$ l( F$ \8 g. A( Y        Hi
* D& T. ^6 N# Z3 G1 A, w+ s2. 带参数函数
. ~. [4 A: n1 b1 Z2 M- l- |- g$ w/ f&gt; function foo1(name){
# W9 O: V  j" O# X8 H& Jconsole.log("Hi",name)
( W' I8 z0 `( L& `) o4 h  V7 t}* C1 J: D. T& B5 o! N& o
6 @' q: G9 P. n
&gt; foo1("Hans")
6 |5 B; n8 N, K& V$ ]Hi Hans
2 o. H6 A1 h4 V/ A
, H0 s% t8 W: L( o, g/ z5 B+ b&gt; var name = "Hello"
, L/ h: i1 h+ z& p' ^6 ~0 ~&gt; foo1(name)
9 r8 K0 `$ X+ C2 R1 uHi Hello
$ B, G, i4 f+ l6 p% m- Y8 h3 C5 @5 t$ p
4 k: b7 O' }# ?7 H1 y3. 带返回值函数5 r1 @; u. K. W0 L, Y
&gt; function foo1(a,b){
3 C1 `; i/ b$ ~        return a + b   
" L3 ^% Z  n1 M0 {  M. S8 `}
) \' t0 U' v* u9 Q( u, z" \&gt; foo1(1,2)# X* P5 t* I3 N8 i- d
3
$ y& t4 E6 t; x  |9 F5 n; W0 g& m' \&gt; var a = foo1(10,20)  //接受函数返回值
) J2 y- @% @5 g3 y&gt; a
6 j' e% |- {5 b9 k30
) v6 P" d  i: w& c3 d3 A" M2 m/ K: {5 V. v  T/ x
4. 匿名函数6 ~/ x1 V$ E- n4 p" N6 A+ Z9 e) {
&gt; var sum = function(a, b){
4 x' k% `; R, X, b6 b6 j0 C6 n  return a + b;, u' A/ m* q2 n' a
}$ y) U5 _0 j$ P  @, ?5 d
&gt; sum(1,2)+ a  a6 F+ [4 l) k
3$ ?* Z  f1 j9 \3 K0 ~
# R8 F8 J) G8 m# V9 r& E
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
# Y. o3 F& `  l7 o1 n9 U&gt; (function(a, b){, L8 c$ v0 ~7 R: u3 s
  return a + b
- [9 i4 p+ D, H( s7 A& \})(10, 20)+ c* h0 |3 @: M* t1 ^4 H
308 O" r- |7 \" U# V$ \; X: o
( n9 Y. Q5 W5 u5 g4 V
5. 闭包函数
2 R# T6 w1 ?( h. }// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
, n" F7 d8 j/ e8 h3 s( @; |var city = "BJ"
+ {" \5 d3 m. G- f5 Efunction f(){+ D7 p) A" J" I0 ~3 x& Y7 l8 t
    var city = "SH"6 Z2 Z2 V4 I2 M+ A
    function inner(){6 O* U7 y- s. T
        console.log(city)/ b( V9 F# U" D& N& t" H
    }
/ A- n, O4 R9 K0 q- E    return inner
( D% I6 q: f3 k}
9 ?+ o  O; {" S6 h; fvar ret = f()
) M+ V* U3 P1 m5 X! ~ret()
$ [' `) Q! C  t执行结果:
; \- `* z% K$ B2 B' _* p, `SH3 x/ E+ Z/ ~. S

0 m/ Z7 M" \6 x- w; J</code></pre>& b" u) E" d( H9 S0 `
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>5 c6 P% W  T. E' l% g
<pre><code class="language-javascript">var f = v =&gt; v;
: H  ?# l. C. w0 w7 D// 等同于& ?, F. A2 C9 B( [; f8 C
var f = function(v){$ l! A4 u1 |- W3 F" {/ s7 f
  return v;) b7 C9 o0 L  r# Z* D- P$ n
}, |) N2 [' _. \9 B
</code></pre>
' b2 h' O  U) R! p8 [7 i<p><code>arguments</code>参数 可以获取传入的所有数据</p>
6 `1 Z4 k/ h4 s<pre><code class="language-javascript">function foo1(a,b){# Y1 x0 r6 z( o
    console.log(arguments.length)  //参数的个数
0 I' U% |# \8 Q7 g' T7 p  C    console.log(arguments[0]) // 第一个参数的值
4 h- v" s% o0 @2 v        return a + b   
& \' Y, s# k( A# l' B" n/ T6 Z}
1 z, ^, S( j4 d& v& v# ffoo1(10,20)
, A# K! a  ]0 K% ~# T" d9 w结果:3 F; a" p" Q' i* h
2          //参数的个数
8 |) k8 }) k! I  v+ ]* R+ q10        // 第一个参数的值
" S+ m. r/ }: ?, O" {, r30        // 返回相加的结果
. ]0 k6 S1 `4 F</code></pre>
1 L4 ?  l8 `. J. |<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
6 y$ B, B* m. V# f, P) ?' X) i9 E<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
& w1 u3 L9 C; J& T4 |. t<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>( v. L1 o+ G# r; M; C$ [& x
<h4 id="281-date对象">2.8.1 Date对象</h4>
- r- _5 N* z, D4 m; g' A& r<pre><code class="language-javascript">&gt; var data_test = new Date()
$ _$ ]7 x3 s" a' g5 {1 O5 l&gt; data_test% ~  v: i- a2 V' [+ Y/ U/ X  Y
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)/ K$ f" Z+ E# w4 E
&gt; data_test.toLocaleString()
* l8 q" h' ^) i& C1 T'2022/2/11 下午9:44:43'
; W0 K0 _9 f- j: y. F( D/ x, _- L* e" ~
&gt; data_test.toLocaleDateString(); @- f5 m! j/ A( a0 h' U* F6 N
'2022/2/11'. {1 k) a, @: w; W+ _3 ^

9 M2 ^  _1 a1 I/ _5 o* J&gt; var data_test2  = new Date("2022/2/11 9:44:43")& h( R* C; N7 |7 i
&gt; data_test2.toLocaleString()
; V; }3 ^- o, f'2022/2/11 上午9:44:43'
9 O: W/ x8 v8 [' J& {" H& {/ _2 L2 _9 I1 M3 }- b9 E7 W
// 获取当前几号
7 }$ l) g# {2 B! c! Q' X, V$ D&gt; data_test.getDate()# n1 L( Y+ R" S0 v
11% ~0 E- p! @2 e" S/ R7 e
// 获取星期几,数字表示* m$ b6 E( [2 n( z9 k
&gt; data_test.getDay()  1 e% R2 H2 F/ h% f. y/ [+ g) h
5
+ k9 v0 i; c) c! Q// 获取月份(0-11)
* j$ o& t- S  S( m6 l& K, e&gt; data_test.getMonth()
, I- Q( J; m5 q& k3 }4 @; w1
- P9 a4 p6 ~# l8 U3 k9 b! b// 获取完整年份, f$ D$ b, y+ \, \7 M
&gt; data_test.getFullYear()
7 R4 e2 j# ~( ~) a5 d* ^% ~2022
" x5 E9 k3 L' o% X3 x  m7 |: I// 获取时4 R3 \# g" l  i: }( K
&gt; data_test.getHours()/ n: U2 {$ U7 Q" [1 [$ D: f
21
' [* f) I" T+ l5 c; ~7 P// 获取分5 j/ ^' m6 k7 y0 v
&gt; data_test.getMinutes()" T& ?% h+ a; ~
44# |  G$ `/ `1 R, D
// 获取秒
7 `: R% Q' i& o$ D&gt; data_test.getSeconds()5 |) {' X) f* C, ]4 |* v% S
43# B3 z9 w! ~% W8 B# T7 a
// 获取毫秒
1 f" O9 L" Q4 U. a4 O2 w! e" C&gt; data_test.getMilliseconds()4 U7 u- q/ P$ I/ X2 g, G& K) d8 \
290% h9 Y0 O1 I2 q: a0 r
// 获取时间戳) A  O  L" o3 H- Z2 X0 ?) ]. r
&gt; data_test.getTime()2 R' ?( K( J: |% B. ], t
1644587083290& [& P" Q& S: e3 v  j5 Q% N3 U
</code></pre>" [- O( W- P$ b, m2 r
<h4 id="282-json对象">2.8.2 Json对象</h4>1 g* m2 N4 a" [" z0 x' i3 A
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
0 Q4 r, R! X" p) Y, f6 i, bJSON.parse()  // 反序列化,把JSON字符串转换成对象
# I. x; \6 x. V6 z6 G% \3 j
$ |/ m! t2 |# I% @$ G* y- V4 i* S// 序列化/ V2 f' b- f1 }0 i; \
&gt; var jstojson = JSON.stringify(person)
7 e+ N! v, Q4 L* ?: ?) P( y&gt; jstojson  ! J: b8 V- E& Y0 o. T! R* N
'{"Name":"Hans","Age":18}'" N- N8 l  o. T

+ i4 s8 i2 g9 ~! z! u// 反序列化
/ _) l/ P6 t) o9 x: u&gt; var x = JSON.parse(jstojson)
- X5 }4 ?. b7 k# k: h&gt; x, S4 g) \% d  l) c
{Name: 'Hans', Age: 18}: Z, W: ^+ Y( x4 ^
&gt; x.Age
* \6 g- N! @8 t) B, }1 T; j184 u% s3 S8 q3 t
</code></pre>
5 m4 w6 ?5 Q5 l+ g<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
5 |2 q# v! m+ [<p>正则</p>
3 ~$ n+ n+ l% d<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");" \# B, b- H9 P/ z/ v% ?, p
&gt; reg16 q. D; J( \" m9 J* `, d+ U2 }
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
; ~9 M" _) t3 N  ?&gt; reg1.test("Hans666")
: e  c( k) v% |6 Rtrue
) R- H" P# |2 S! c: F+ v3 ]- t$ a* y' C/ D9 F! C9 K6 W& M7 z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
5 A# Q: ]; p0 p' c+ c' B&gt; reg2" G$ W/ J6 r$ U- ~3 Q$ |; m% X
/^[a-zA-Z][a-zA-Z0-9]{4,7}/! Y5 m1 z" h+ Z% x# ]  |
&gt; reg2.test('Hasdfa'). z2 Y" f( L, Q) O% ^$ u8 b
true
9 D7 d7 z; Q8 U3 J/ [2 T. B/ \2 N$ l8 H: t9 N5 U1 l
全局匹配:
# f* [( D3 q6 A$ ?# P) o&gt; name
7 j9 G* b6 u+ @'Hello'( e  ^  |0 c$ [' ]$ Z; t
&gt; name.match(/l/)
# \9 ~/ i1 _4 W# }) w, `& u# W['l', index: 2, input: 'Hello', groups: undefined]
# `' {( B: M. n2 ?2 M1 B) N: p" u& N: T/ p4 t% s/ v; {
&gt; name.match(/l/g)
/ v& z8 @- S6 t(2)&nbsp;['l', 'l']
  V# h% W, _6 }" C// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配7 K/ e3 Y8 u$ J" _, k5 J. [& y4 q

1 \5 O* b) f; I$ L/ a# p1 O/ A2 k全局匹配注意事项:+ M: {% j* z6 y. W% O5 S# D/ B3 u
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g. ~8 y& k- g( ]# n2 S: a+ Q
&gt; reg2.test('Hasdfa')
5 @! r) \1 V) k* h; t4 `true0 v& j# W- Q2 Z! ^; k
&gt;reg2.lastIndex;
2 F3 ?" }. r$ C9 \) `6
% i7 c/ p) y! g9 q1 h&gt; reg2.test('Hasdfa')
+ ]" s( V, t. |8 Y$ rfalse3 v% b) p8 c& V6 X; X2 X
&gt; reg2.lastIndex;8 h" W6 Z9 K# r8 M- f
0
. X( X* L  T% Q4 o( ^- n6 d&gt; reg2.test('Hasdfa')# h$ r6 k! |$ D- @0 U; t
true
, i, X' q8 I6 ^&gt; reg2.lastIndex;
: z2 |4 K, V+ x' V6
* D0 `3 Y; a0 I( f5 h  U&gt; reg2.test('Hasdfa')
) Y0 Q  B$ Z' }7 Y& Q9 I% _false7 m7 D$ d0 {2 L! ?
&gt; reg2.lastIndex;2 Y1 M# M+ l, ^% i6 l
0
* |" G( ], b1 o& T2 v& m9 L* O// 全局匹配会有一个lastindex属性
* E& e: s5 b6 Y( P9 l; c&gt; reg2.test()4 U5 i8 Y: q9 a# U, V$ D
false
3 d) G; E, N7 L* t: s' r; t2 D&gt; reg2.test()
+ Y, d/ X( s6 u' ?" W0 o2 ^true
& y: Z/ z( v) R/ A// 校验时不传参数默认传的是undefined
( H5 }! X0 M' S8 \4 b5 M0 x</code></pre>
- o: W% j3 }1 z% `* a) a5 |  {<h4 id="284-自定义对象">2.8.4 自定义对象</h4>! B+ W' L1 c/ j2 A) U
<p>就相当于是<code>python</code>中的字典</p>
' Y: A$ |/ p& u0 ~' S" `9 c+ B<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
, c8 ]) Y7 R4 i& d) y1 `&gt; person4 D9 r+ [4 h$ B' [# A
{Name: 'Hans', Age: 18}2 f0 F0 ]' i8 Z. b4 I
&gt; person.Name- X+ G/ h) i3 ~0 {0 g6 Y. V+ V
'Hans'+ f- `, ~" C3 B7 E6 n; F2 }
&gt; person["Name"]
5 k& [6 R, Z7 Y0 P4 n'Hans'+ |8 k5 Q: u- c
- ~- G& L! _' ]: y( ^( F" d
// 也可以使用new Object创建# d8 ]. V  M: O
&gt; var person2 = new Object()
6 p, k4 w) M$ c3 t0 ^&gt; person2.name = "Hello"9 U2 _* Q3 H3 g
'Hello'
0 j+ e6 ~  O6 [3 j% G1 l9 c&gt; person2.age = 20; d! ^  y5 F, L; g. A, o" T1 {
20
' |( l- `/ N3 h</code></pre># u2 Y! j$ k' S5 I5 q3 w7 g
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>& L) [* c- K7 S# P& F+ {4 {
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
1 D9 `7 {0 @) d<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>  h1 S& a" X' N; w$ g( b/ w
<h3 id="31-window-对象">3.1 window 对象</h3>  Y# d3 h" N: C( ~4 g. d
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
6 S7 T/ W( O1 B<pre><code class="language-python">//览器窗口的内部高度
0 A+ o! K4 O1 r! {% Xwindow.innerHeight
- D& c* M; x2 ~$ x8 o9 s- \706& u/ p5 o1 B+ }4 C4 m, p1 E
//浏览器窗口的内部宽度
9 t* e" d5 c; p. B. {- e# ]  q; \window.innerWidth
! N; V" l) `$ o8 w) k. @5 c! d1522
& w& l2 N  l0 u6 \5 q// 打开新窗口& N' c+ P" j5 x5 v7 k
window.open('https://www.baidu.com')4 E9 L7 A: i/ E" b; ~
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 O! y1 G! Q/ U/ s: n% ~* h// 关闭当前窗口
, V, T2 n) ]0 R% fwindow.close()
/ d' u1 w1 F. |4 @//  后退一页
/ {6 a4 N: v( O& o" kwindow.history.back()
. I% I  _1 a. Y" e" z// 前进一页
( u& l) \; z+ L- A5 M6 s- z. Ewindow.history.forward()
2 o6 ~- X5 x5 `8 I0 @//Web浏览器全称5 o" P6 _& }6 X$ E- C) Y: e
window.navigator.appName
" q/ N$ V( e  s4 T+ b. M'Netscape'
9 x1 t; H; I6 s# e" y// Web浏览器厂商和版本的详细字符串
! F- g2 c6 g& d, m8 ]8 r( Cwindow.navigator.appVersion% B+ u: ^8 {8 s( `+ {; R9 d
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', D* c. k& t- k
// 客户端绝大部分信息
( @" x& }" R$ g+ Z& Hwindow.navigator.userAgent
8 K2 p/ s; K0 H, }4 Q! j' j'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ f2 x7 f4 g  J2 ]* B1 |
// 浏览器运行所在的操作系统
6 f/ X/ E# `0 L% y4 Q4 _' p# Iwindow.navigator.platform
: g2 ?# B  d+ ], |# m: C5 L$ r'Win32'
/ t# B$ C$ Y/ U( @5 X) j2 G
2 o7 ?  C) p) a4 Z( V$ B& l# M$ p//  获取URL( O' m, N, l! _7 n6 V! v3 U: a
window.location.href
% H. V3 I( y' K+ D0 x+ P// 跳转到指定页面% p. w& t9 W) p- E8 m% w0 D* H, \  {
window.location.href='https://www.baidu.com'! b  w" B! A( r1 u! g0 w6 J1 P3 i
// 重新加载页面
2 q. x. C/ M6 B& R# s1 d1 R1 E* rwindow.location.reload()
+ k; D% v0 t4 i1 C</code></pre># c) W0 S; [& B2 _
<h3 id="32-弹出框">3.2 弹出框</h3>* z8 ?+ u/ G4 }( O% M/ N6 Y* g
<p>三种消息框:警告框、确认框、提示框。</p>
: N% j7 G$ Y5 s; g' u<h4 id="321-警告框">3.2.1 警告框</h4>, j& b  Y, [4 O. |$ _1 L( O
<pre><code class="language-javascript">alert("Hello")- `/ Z( r, C% Y" N9 x, @2 J9 Z9 W
</code></pre>; I2 [, s% [$ r) o  d  @
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
* |: S, C& g  ?: Q3 L0 k<h4 id="322-确认框">3.2.2 确认框</h4>- R4 D7 ?1 r  |& F/ H- h6 r  G
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>* r) j9 q: S9 F" \3 P& g7 R6 @
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
! n& n  F4 \" Z, Rtrue
5 P1 C; t6 M; C' r&gt; confirm("你确定吗?")  // 点取消返回false
4 l' T3 y. K6 p8 yfalse$ v8 ~. O+ {2 ~% Q$ O) z+ p0 |
</code></pre>
' S* @: E9 a1 L) K3 C& m<h4 id="323-提示框">3.2.3 提示框</h4>+ n2 ~* s  k% v2 @0 S' g. V5 u
<p><code>prompt("请输入","提示")</code></p>
, R! l  m* u) n( Z9 g/ ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
; l! ]% x# L; X" {<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
' v% O( C" z) m<p>如果直接点<code>取消</code>后端收到<code>null</code></p>3 j; _9 [6 j$ F3 W" i5 B
<h3 id="33-计时相关">3.3 计时相关</h3>  `! l/ Y; w. v5 W
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>0 b5 Y( T  E2 v9 H' ?" Z0 B% A
<pre><code class="language-javascript">// 等于3秒钟弹窗, e5 v. ^; K' c2 P; y$ t
setTimeout(function(){alert("Hello")}, 3000)/ o" L3 @/ `1 }" r

- w, n; J% h3 `; q5 }# ovar t = setTimeout(function(){alert("Hello")}, 3000)
* r# L% I. u: {. ?' F
" m3 U  l& f  v9 v+ ?& o- T9 ]8 F// 取消setTimeout设置
! Z; s6 W& d7 f0 U3 J$ _clearTimeout(t): g0 S" e' v# w0 K! Z: L: ]
</code></pre>
* e: M/ e/ H" B<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
2 t1 m2 p& B- M5 F* v' L) _<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>4 K; {- J2 w' c; B
<pre><code class="language-javascript">每三秒弹出 "hello" :4 g9 J( j( S, Q$ H0 H" l
setInterval(function(){alert("Hello")},3000);
7 J( }2 g, u3 q& n4 F1 C3 b7 M</code></pre>
. n$ Q* t0 v  A& e8 T<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
' O1 I" @# w! Z( ^6 W<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
. q  C5 G+ ~$ b  F+ {//取消:' d( B2 e! A& P" p8 b
clearInterval(t)
$ Q  {! t3 x9 P4 k  z7 i1 {</code></pre>( E, T& v& ~9 s- @  m
( X, l% F! @- D( z. e3 H; R, ~
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-11 16:07 , Processed in 0.073808 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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