飞雪团队

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

前端之JavaScript

[复制链接]

7957

主题

8045

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26201
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
2 ^, z' o& {2 ]- P6 v' p
<h1 id="前端之javascript">前端之JavaScript</h1>3 [7 z" E! x% n1 w" ^5 ^
<p></p><p></p>+ n: O2 H; M% x# Z: x6 L. h( e' w5 c
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, P) N) Q6 T) A! X<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>, p+ z/ F* L! J7 a- V  g
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
# P- T! V" l" l3 ]& Q  B3 t它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
& m- P9 z! V" M+ n, h; E. W它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
( T( d4 o8 K8 t5 H+ C<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>& g4 y" S! n) u
<h3 id="21-注释">2.1 注释</h3># y) ]0 Q' [# Z- H+ Y' N7 U
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
9 q% @- U1 [, N3 W8 \<pre><code class="language-javascript">// 这是单行注释1 f& D7 C- u- D& G# J9 K

" B& x& r/ F6 y" M! b, w/*. J& B: h$ p7 ^) ]
这是多行注释的第一行,# ]+ S# E( @" }
这是第二行。
0 i1 a7 ]5 e- ^( X4 o0 c$ i+ T9 K9 q2 y*/; A) D: `, J. m* _
</code></pre>
6 o) r3 \: i( b<h3 id="22-变量和常量">2.2 变量和常量</h3>
! Z9 O3 J1 m: r8 h3 |. I+ R$ ^, B<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
% i1 z( a0 B6 U# _/ E7 W: ~<ul>/ E/ F2 \$ L6 J! j# }
<li>变量必须以字母开头</li>% R/ j! ~- f& E* E. b& d
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
% [# X$ g4 `$ X) ]) a<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 K; g5 D$ A9 d$ ~6 u  ?) {</ul>
0 ]+ ]( a: }) D* r<p><code>var</code>定义的都为全局变量</p>
+ |4 P/ u+ L1 |; Z9 j* b* {<p><code>let</code>可以声明局部变量</p>! R. a2 `# t. I5 V& [, ~+ M9 N
<p><strong>声明变量:</strong></p>- s, H2 _, e0 m9 G/ d9 k
<pre><code class="language-javascript">// 定义单个变量
* z, R/ ~, E2 m( c( }# u# D&gt; var name
1 k$ ?+ R% ^5 S2 d8 c& K. c, f&gt; name = 'Hans'
* d% p$ x/ b5 H- S. Q//定义并赋值
6 S3 y4 u1 \- @' r&gt; var name = 'Hans'4 L2 {) q4 Q( s3 r1 m) ]; T' |
&gt; name! H, {/ N& Z, a( u/ b+ K0 i
'Hans'
$ S; C8 D9 E* J5 u) X. l+ F
, u2 G% B# W0 o// 定义多个变量
, H5 u4 l5 `( `, p: G&gt; var name = "Hans", age = 18
" h$ {) x1 P: y4 X: q&gt; name& ~1 }) r" `6 i& {! W
'Hans'
7 s" h% ]5 v; B9 s8 i&gt; age* p' x; |* g4 ?6 Y) a; D
18
% J/ r* t& I$ o5 u; N1 M
4 M, u0 H$ F$ L3 p! ~% H1 X//多行使用反引号`` 类型python中的三引号
  T5 [( k/ \" ?. v6 l. C3 a&gt; var text = `A young idler,
. h( \2 x; H& {* Ran old beggar`
2 R4 c/ z  o" A. k7 c, a1 W&gt; text
5 {$ o* U8 U+ v4 J# l'A young idler,\nan old beggar'
2 z% z& \2 o# y; T. |4 w7 ^; [</code></pre>, X  [  Z; R. B1 q8 @, v8 {- D
<p><strong>声明常量:</strong></p>
0 r8 _' [! [/ i& J" E) r' v<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! B2 ]: Y8 r6 g6 Y$ w/ T( G/ X<pre><code class="language-javascript">&gt; const pi = 3.14
4 A% `. X  C0 ^) i3 r&gt; pi
: t6 }* f$ j: X/ T3.146 g0 y& g4 \. O$ M
&gt;  pi = 3.01
: w2 a4 D) c. U1 kUncaught TypeError: Assignment to constant variable.0 j, o$ ^5 N! x: h
    at &lt;anonymous&gt;:1:4
5 ]$ y8 u  e4 G! o: j2 ^
! H. `+ B7 D# a! g</code></pre>& }* _" K8 u6 N! _3 ~
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>2 _  L) S, \% f
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
# b$ D! Q( D5 ]4 K1 i8 T# O; |<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>3 T% B1 V0 w* K% ?4 W* S- [* \
<h4 id="231-number类型">2.3.1 Number类型</h4>
; W% \# A5 ?, l7 C/ }& w. A<pre><code class="language-javascript">&gt; var a = 5. p3 |" S* w" C/ N3 f; u+ J
&gt; typeof a   //查看变量的类型  
& r5 j* L" i& A3 v8 l7 I# L" knumber
$ m; H" u  J: c* E6 J& ^  f
) Z6 K. s8 s9 F1 u6 Y&gt; var b = 1.34 p& ~4 G1 R6 j. _) [2 A3 i
&gt; typeof b9 j) ]2 x$ T5 k" |% ^
number  T- \3 [( A2 n: H8 i
8 x/ b. R# y# f0 M
// 不管整型还是浮点型打开出来的结果都是number类型' p. W. O" Z# H7 D
! d- A3 p' d3 W& Q
/*# V' T5 g( L0 n  I
NaN:Not A Number
6 z" A5 {: n+ T$ }; D9 FNaN属于数值类型 表示的意思是 不是一个数字
4 f" v. _$ N! Y*/
0 V. L( `* X5 }6 d
8 k6 s# }, A$ R# ^/ ~4 GparseInt('2345')  // 转整型2 B; \: y4 `: K6 B$ o
2345
8 k4 ]1 }% a! ?% h3 B7 WparseInt('2345.5')$ T7 w- n( n, Y" b; X
2345( B: s: A- Y& H2 e
parseFloat('2345.5') // 转浮点型
: N; j0 A( H" X; F2345.5; g' F' ~- k; y! Q2 @6 q7 G
parseFloat('ABC')7 u, h+ F6 }& \; Y; H4 f) Y
NaN$ i+ L1 E, P& M: T
parseInt('abc'): J9 t" _9 P% Y
NaN
6 J6 h+ ~$ N4 V" @: E6 m- h</code></pre>& ]  ?1 T3 q# _$ {' X2 s
<h4 id="232-string类型">2.3.2 String类型</h4>
$ G! _9 T/ U2 N% R/ a8 I; }<pre><code class="language-javascript">&gt; var name = 'Hans'2 D% B" z( e1 p+ Q' [' j; }
&gt; typeof name
7 Q! w! m3 S; M* h, v6 X& s7 S* r' v'string'
4 y5 o" a1 y6 r7 K9 I
% Z" @; c4 Q  i0 B: V$ J//常用方法
6 O  c8 C6 ]0 x) ]# o// 变量值长度! E5 U4 e6 f+ W6 w( w
&gt; name.length
8 k4 D4 d9 ~3 o7 `9 T4
% b, a7 H  A  q// trim() 移除空白5 Z8 x; a$ O, l2 X1 b
&gt; var a = '    ABC    '
* G+ h0 G' T% a7 W0 w&gt; a
- J; f0 \" B1 N0 i' ?1 \% f+ {'    ABC    '
# }/ y. b' H6 \. s5 w1 v& o&gt; a.trim()
8 _/ E/ W) ?  A& Z'ABC') q0 d# U& ^$ [( r8 e4 x% r# }) u
//移除左边的空白4 z: G6 F$ E; [, B
&gt; a.trimLeft()2 m$ j* ?. h6 x
'ABC    '
3 I( n6 O; {! x+ `" u//移除右边的空白
! A: K2 d2 o( @&gt; a.trimRight()/ `1 \/ {9 d0 L8 i, m& Z
'    ABC'
3 U4 {# {$ R; L: B) P1 A
% y1 _" ]1 z2 k, I3 `//返回第n个字符,从0开始
0 i2 E) m1 j' z&gt; name
  c7 m/ G' R0 f1 P: N: J'Hans'
7 k. x; Y' A% o- q9 y1 Q&gt; name.charAt(3)
) n0 c6 ]* \4 W1 a- H2 d's'
2 }0 b5 L# n. s! }0 z# M4 I&gt; name.charAt()3 G  h8 ^9 x7 I) G! x3 b" q1 h1 P
'H'
4 ?# J$ e% Z) N8 v* W- ^&gt; name.charAt(1)  V* t4 X7 U; W& }1 u3 e) J% Q
'a'& F$ r( D1 j) w* j

) A" d$ ]2 b! e// 在javascript中推荐使用加号(+)拼接
8 _4 @+ s/ K$ T( k0 `; i" G&gt; name
+ d3 F/ |0 z$ K9 \& K4 t'Hans'- e) ]# |) q8 \' }5 D- x3 B
&gt; a
# u! g  Z0 S) Z, X1 N: b'    ABC    '
' Q0 G* A, j8 b&gt; name + a8 u; l3 N+ [+ u6 c! P
'Hans    ABC    '3 f$ _4 y$ x; u
// 使用concat拼接1 @4 u, Q+ k. K3 Y& D
&gt; name.concat(a)
1 n" L/ G8 Q/ Y: P  H'Hans    ABC    '
/ x5 ?" [2 A0 a3 M! ]4 _) [/ ~
//indexOf(substring, start)子序列位置
6 t; N  u8 N6 S! N7 c4 Q' n4 x9 `+ x& c- X
&gt; text- ~" e) y/ B$ L
'A young idler,\nan old beggar'2 S" k5 Z( [, {) `+ M6 @
&gt; text.indexOf('young',0)
; u1 O5 U; Y0 E* R7 A: K" E' f. l2+ n! o# l1 K; e7 {

  x$ O- B2 N- B//.substring(from, to)        根据索引获取子序列
9 k3 {( ^1 _5 d' s8 \&gt; text.substring(0,)' t/ F7 a  P' G; F0 t3 U5 `
'A young idler,\nan old beggar'6 C7 ^7 C7 s7 C) t4 X7 v3 [
&gt; text.substring(0,10)
( ^6 M" G7 W$ W1 I9 @. v5 u'A young id'1 O0 ~7 w1 U+ L: J3 K" w( t. d
/ W- V9 r( d$ l4 S7 }  y- J
// .slice(start, end)        切片, 从0开始顾头不顾尾' |  v7 l  C5 g$ A; p
&gt; name.slice(0,3)
) Y/ S1 V7 z4 }6 }" {9 Q'Han'% E8 P: i" J4 T- E* d( h& _& g

9 R3 k7 H* ~  U3 x( W// 转小写, ^, Y3 e/ d: g& ~7 K8 K
&gt; name
; h" V  N# o& W. z! o6 c/ ?'Hans'# I2 D4 O& k9 o6 N1 m8 Y( i8 [* C
&gt; name.toLowerCase()2 P' E5 o* q' p; D" t
'hans'7 b3 _8 g6 a7 }
// 转大写
% F) W( o, A5 Y' j* x: a  [4 |&gt; name.toUpperCase()
' }1 U0 k3 J" t+ I! i/ @0 R% I- O'HANS': |4 L; b" S7 }' |# p0 h4 m

/ {5 W" Y6 A. w- Y8 U// 分隔
% h, [' i% X7 g6 p  h; J9 {&gt; name
) e/ k9 s- g" t  x* x# O'Hans'
8 M6 w6 r9 w, _% E. C) v&gt; name.split('a')$ {# d% k7 o7 c
(2)&nbsp;['H', 'ns']% \+ ]5 ^% d+ {) B* {
</code></pre>
4 L; D& p  C% M% E- ^1 [0 \<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
" f! o2 d7 `5 S- X  e: }) j<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
& J5 O+ v8 I- H<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>9 A6 [# R: w# u2 x: L
<p><strong>null和undefined</strong></p>
6 Q7 `2 b1 s; k4 d6 b% j' [1 u<ul>- i3 I* o7 l& u2 d; d+ Q- P$ s- q
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>- P' A, M2 J1 i2 n  S
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>; e; D# \3 [; b! x8 f' a
</ul>
7 H4 w7 L& \! N0 {; O( c4 W<h4 id="234-array数组">2.3.4 Array数组</h4>" `- e2 K6 l9 U; \* l$ G
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>; O, t! A9 e* h1 s+ j7 Z, ?% M8 p1 b
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] $ v; l3 i" V- y" |( v1 Y9 U
&gt; array1
0 o9 s" e2 e4 G/ s(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
3 _' I5 R, [( F  o0 }) M% \1 [% s&gt; console.log(array1[2])  //console.log打印类似python中的print
: ]' U$ ^& m- B" B5 Y6 c" A& x, D. q36 K' @6 R0 R$ o) _9 g! b
// length元素个数* H$ M, H6 r; Z  |- F* ]: m
&gt; array1.length  A# T6 O5 I$ E, y4 S9 C* @, g' I
64 E/ L- {0 R& x& ]" `) g
// 在尾部增加元素,类型append" h6 ^6 ~# b5 j
&gt; array1.push('D')
: {% e6 Z, ^6 w$ c3 H/ }7
1 s9 W6 g9 S4 `4 m5 H&gt; array12 S; N1 A  Q+ t& ?& |9 z
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']8 K7 e& W. A% c, o
// 在头部增加元素
, j! ~9 H0 t) @5 u  D3 X1 s&gt; array1.unshift(0)
  `! V% w8 D  t$ U7 m/ F8
& S+ S  v/ Y7 l; |/ M&gt; array1; \0 S1 p9 d. A! W' K
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']9 @) @/ z0 @# Q
. U  v+ ?8 w2 p! Q; x& C
//取最后一个元素
" G8 ^; O! u; ?! S4 r2 \&gt; array1.pop()
! @" O1 _/ u8 r. A4 _/ K( c; p'D'2 p* `7 e+ H6 i) T3 v8 L
&gt; array1/ B5 u) L  k* h3 C/ W2 P
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']( f; Z# V! Y4 k, k1 j
//取头部元素
  m% \0 C5 f" n2 G3 ]&gt; array1.shift()) m0 @8 h( G* ?: O1 `
0
' @5 q% q) ^3 U( |6 ?8 r&gt; array1$ v8 A- P" G( \, f  m; B! Z0 ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. d* |% G% F$ z% L" z
5 `2 g2 p% `3 l1 [# ^+ Y
//切片, 从0开始顾头不顾尾
* b7 C- [0 D% }! h2 p- @# U&gt; array1.slice(3,6)2 m2 I; V$ \9 g  _+ w, f9 \9 O% n
(3)&nbsp;['a', 'b', 'c']  q" d, }/ N$ u* h. X0 h
// 反转; C, z; g! A: U0 |" o+ y9 D
&gt; array1.reverse()
& P" ~! F( t7 l# E(6)&nbsp;['c', 'b', 'a', 3, 2, 1]* l% ]) t9 ]7 p# M' I( k+ f' @
// 将数组元素连接成字符串& f9 p' p1 i5 S4 m. }
&gt; array1.join() // 什么不都写默认使用逗号分隔
3 S* ~# O- e) V! J; ?7 w' a+ Y3 Z' o'c,b,a,3,2,1'4 Z5 T# C7 u/ O& h  F/ L
&gt; array1.join('')5 e( l$ ^9 g$ q, ]4 C
'cba321'
$ k( Z, Z# q. E&gt; array1.join('|')
) i, g1 ?( K7 a, U  q'c|b|a|3|2|1'
# }9 o0 _+ B$ D0 Y1 t
6 {  H/ E$ K0 O9 |5 k2 g// 连接数组
: }& `2 {8 B. G5 V6 t&gt; var array2 = ['A','B','C']9 n. [! C1 Z, S' _7 E& h
&gt; array1.concat(array2)
& h9 ]/ X' Q9 c, n5 l4 G(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']/ I# f6 s0 @2 p: o, [9 W

( U& m" }9 {; l- X% c8 M// 排序
( V$ L2 R6 P# X" d( U- o9 R( i6 g+ Y&gt; array1.sort()# P1 w% a* g3 {* X, e
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ S- D0 {! M+ }) T
, |$ m0 o  y2 k0 Z( t- r  k
// 删除元素,并可以向数据组中添加新元素(可选)5 R5 R! e2 C9 l
&gt; array1.splice(3,3)  // 删除元素3 M/ Y% P% u5 |  q
(3)&nbsp;['a', 'b', 'c']
1 B0 W# f3 u0 ~&gt; array1
' K9 U# W% ^& G3 J! F8 s(3)&nbsp;[1, 2, 3]: f) j6 `6 R# v5 ]
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素8 q* T7 F( E2 Q6 s- _; u
[]
$ [  b/ q" T3 m) ~- R&gt; array10 ]! J3 l! V& E- s3 a1 e
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']5 ]. r1 j: ^- }
" A8 i  ]$ L; g! N' ]. Z% W
/*
4 i8 K* k. \6 X; F5 O4 k; Y; Isplice(index,howmany,item1,.....,itemX)
& c/ e& m+ Y& U* p; cindex:必需,必须是数字。规定从何处添加/删除元素。. C0 Q) T2 X& h
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。& E/ t2 w: E0 C9 u7 f
item1, ..., itemX        可选。要添加到数组的新元素  D- l0 }3 M! y! E, Y* b
*/3 ^$ h3 i. @7 P" L9 q6 G2 ]

0 r. u+ O1 u; o  v. `; ^6 U5 r// forEach()        将数组的每个元素传递给回调函数' G) a8 W  d- D# G
&gt; array1.forEach(function test(n){console.log(n)})1 n: w$ G' U  q/ c, k* t6 W& v
1
( w& L# P. B# Y9 N: I- g) I1 o 2* M( S) X; U7 s6 z
3; W6 w% o6 e+ `/ G: M& J* ?- u
A
+ X. U0 U5 N; z; ^, m7 h B
7 t; x+ `: }* H+ i0 V C
5 F% [: y5 V# p( U9 h; |// 返回一个数组元素调用函数处理后的值的新数组
. @6 e9 ~0 v( L# v( m& u( w0 [&gt; array1.map(function(value){return value +1})$ r0 h4 v) I- c
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']8 T8 Z- N9 l% f/ \$ ^
</code></pre>% ^* s& U2 X- d: I0 ?) W: F4 ]% S; I& W: E. j
<h3 id="24-运算符">2.4 运算符</h3># T: S" A( j; I' D) X
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
- t& z$ ^4 U, j0 O4 Q8 `0 Y<p><code>+ - * / % ++ --</code></p>' E$ Y/ r/ m6 j: n
<pre><code class="language-javascript">&gt; var a = 6, r* J! Q; T1 [( R
&gt; var b = 35 b) t2 Y& a: p% Q. U* _+ J% i5 M- |
// 加* v; Z" `+ P9 p2 W% Z
&gt; a + b
% q# s0 x" U) V3 E3 y  R9
" S) J! K- ?2 b- y$ |// 减
) A- n! Z( M! j+ ]" `! v' _  s5 k&gt; a - b
; Q( z8 }2 }+ f' r: F0 Q3. h# n% J# M. [, N0 i
// 乘" Z( O7 _; |8 A& u: ]
&gt; a * b
. O. ^7 J/ C& Q" @9 g184 X6 O; i: b7 U  L. U9 a
// 除
& J3 h& y) ~# V3 ~% k) g&gt; a / b, _2 `) r8 d$ c4 E' v& e/ M4 p
2
0 E5 L4 M4 x9 E1 R- G" @" M) [// 取模(取余)
- s3 P* o% L) Y( v8 z&gt; a % b9 Q( D0 }" T+ q
0
. W% _& j6 n: a& g* C+ q* f// 自增1(先赋值再增1)' R* z! }* Q, R0 G, A3 s1 A
&gt; a++
* f4 k7 s8 w2 k% d. u  ]+ K+ c6
& u1 l9 g1 G4 ]&gt; a
+ S8 h. w* i. l4 P$ u7
/ u' M- [# \3 E' \* N// 自减1(先赋值再减1)
; u# P. O9 }+ o) s  Q- e+ M&gt; a--/ t3 O: y( q- m. s$ G
7
% F5 S; J& Z4 p6 t- r9 ~&gt; a
% [9 |  P7 D6 q; F* b4 `6
4 j- ~8 C: ~" C3 J/ y5 ~3 B* o// 自增1(先增1再赋值)
% Z# p: d! c) V" ~# _$ u2 I; O&gt; ++a. _$ q+ B/ q7 G- y& O( R7 M$ c
7: H+ C( \9 U; Y$ c5 q3 j
// 自减1(先减1再赋值)/ r3 `: F6 b" J! A3 E0 S
&gt; --a# k8 D% y- b: m/ R5 c5 O; F
6& I' X/ |9 _0 [5 W: V; H; s/ a
&gt; a
. }7 m4 a1 ~. K3 J% a0 s( ~3 F6
( R7 i4 z% P1 o9 @7 p/ j; a' e9 g, l$ _6 w4 C0 X" U9 c0 a. {
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理: P) f/ X6 Y8 c+ m
</code></pre>
# u! V9 u6 t" W3 l( V<h4 id="242-比较运算符">2.4.2 比较运算符</h4>' t3 h0 q4 X% i$ y0 Z& m
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
. |; K& J  M: d6 C! c; q<pre><code class="language-javascript">// 大于
( q' \" E$ r) ?, O5 e3 w&gt; a &gt; b$ n, S6 t+ B9 [$ ^3 {
true
$ n; Z0 q+ O! d, X& h" e. m# K// 大于等于
( ~& l# H* {/ t& N2 n&gt; a &gt;= b( j. ]8 S  p$ H2 u
true- k  w# y' {& c' P8 a" {
// 小于
! k* b# Z8 \% D5 V0 T3 b/ M) R1 v&gt; a &lt; b6 _  {% j  k- C. m# H6 D  l
false
* G' d6 a. E8 E: X# c// 小于等于
% t  [& t( `3 T! s* \: @, A9 ~$ ]" o" v&gt; a &lt;= b
$ b2 x" J4 l; Sfalse' D9 p+ Q3 E; e( z
// 弱不等于
! o! l/ A) k- g+ Z9 d&gt; a != b
  f1 b& B, x; k7 y" h  f: Ntrue5 G* }8 ?1 E- R  b" Y% {
// 弱等于
7 |( {$ p# }) W4 J) q( c/ r% X7 `2 M&gt; 1 == '1'( ^2 {- a$ ^* Q0 N9 s; x  v
true
3 o" d! q/ }3 k- c0 f% ~// 强等于# a* \5 M& _1 \; g
&gt; 1 === '1'+ |2 K1 q, w5 ^  Y" ^
false
' a6 b7 D0 a: S% z& P: b// 强不等于; i4 G7 T* L$ K( Y/ ?! Z1 }6 J. ~* h
&gt; 1 !== '1'
/ h) ~) s3 Z2 C5 q/ F8 V* g- Ktrue1 g' }" h) @+ U& ~! `# W. a
! P' J) l2 n6 C$ [/ j" j
/*
. j& X. {( m; I+ vJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误: N4 f$ }8 R- i* b  Q4 U
*/
0 V: S) g* {0 t5 h5 r6 }1 _</code></pre>
! s0 o* O$ Q3 K2 @; ], R  `* c: E5 }<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( V4 R- o9 a3 B1 \; H3 ?<p><code>&amp;&amp; || !</code></p>
, ?( _! x( q6 @. ]<pre><code class="language-javascript">&amp;&amp; 与
/ q4 m. K: C# u) [2 B: `1 b|| or 3 N/ }' V& E. q% _" Q5 z
! 非4 M( Z; @! [8 [7 {7 `: b
</code></pre>% f* J' O8 A% E; k5 }6 ~  _4 d  t6 c
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>( Q+ t& j. K, g, }) R: p) |
<p><code>= += -= *= /=</code></p>
, _! [6 g, f9 J& J8 A' Q<pre><code class="language-javascript">// 赋值
, s8 T! U8 S) C1 \7 c1 m&gt; var x = 3
4 F6 O) L! C0 v" s' w! e: E" P4 d$ t// 加等于
# {/ \8 b6 I- a* q4 P' V8 ^) M' ~&gt; x += 28 O( X& }, R8 i, l
52 V7 R, |2 K: b7 T2 J9 g
// 减等于
: E# N! E3 ~- u- ?&gt; x -= 1
5 _5 q( e4 J; |* r* ^$ `4
: w7 V+ l  b( n0 ^+ G, l% H// 乘等于
4 S0 }; ]/ |' Z! Q2 n8 e3 O&gt; x *= 2
, t+ E1 W' _. o% Z4 e8
3 M; ^; j" p# ~( Q// 除等于
0 v8 H4 {8 g% Y1 ^- {&gt; x /= 2
5 l: O4 h# v0 G4
$ z; g8 Z, @0 Y  s</code></pre>
0 O$ y9 D! }  h<h3 id="25-流程控制">2.5 流程控制</h3>
& p4 P* p- [6 n1 [<h4 id="251-if">2.5.1 if</h4>
* w4 D! C/ h8 K<pre><code class="language-javascript">1, if(条件){条件成立执行代码}- R" L" q. B& ]8 O( x
4 ]4 q9 w$ M& ?; I; L
&gt; var x = 3
  I3 a  p& D" q/ G&gt; if (x &gt; 2){console.log("OK")}
% M, `, f% M' {2 B7 w4 p' r, \ OK+ l9 R) {- h" z0 I6 d$ D$ b$ H3 u( o
8 _# f) R" I; [6 r
2, if(条件){条件成立执行代码} ! G& z+ m! r, y) C. h. H6 E8 ~
        else{条件不成立执行代码}
, J+ O1 \- h' K+ V+ q' u) {  i8 E. F
% Y. b) J" t/ v&gt; if (x &gt; 4){console.log("OK")}else{"NO"}( ~0 r: b( {8 p4 m2 T5 H
'NO'
8 _# U3 C4 T9 A# @, Y" K: M. V% z/ ^3 b8 n; V# W
3, if(条件1){条件1成立执行代码}
+ i5 h0 L! S5 [4 q( X        else if(条件2){条件2成立执行代码}
3 ~! F/ q  F* Z5 z+ O: m    else{上面条件都不成立执行代码}
/ {; P. C  a5 p0 X) N2 ]$ F: M! w+ Y/ |5 r0 f! b
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- q* j# \; _$ o# T- D8 j& Z Ha
; ]- l) t+ H! G5 q' D</code></pre>
; u& [3 w1 h0 |, ]* I9 C5 I9 f; y<h4 id="252-switch">2.5.2 switch</h4>
# x# z4 Q0 s4 y5 c4 P<pre><code class="language-javascript">var day = new Date().getDay();
) j% ?  l8 t; \  ^8 W- j& }switch (day) {
( k8 X* y) F9 B" ~7 n: p  case 0:$ M# T/ `' T$ b" x& ^1 a
  console.log("Sunday");2 Q7 G0 G0 Z$ R! f8 H# }
  break;6 ^5 S4 l7 M* e: p' L% J6 n' i
  case 1:
$ c9 ?0 O% z! ~8 a2 B  console.log("Monday");
  |, b- a8 p5 \$ V- J/ F  break;4 g5 ~+ v) p" E) u
default:
/ j2 X$ X( u  _5 y9 a4 t  console.log("不在范围")5 t: V. Z4 O( j9 K" }. i% p4 q+ m2 q7 s
}
- Z" ^) ^/ V: g9 X0 c 不在范围" R+ v( H( i/ |4 @& I1 \/ \* W2 a
</code></pre>4 \) K% n, e$ N5 F
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>7 F  A4 I4 H+ R
<h4 id="253-for">2.5.3 for</h4>6 l2 p9 M. D! ?9 o2 X
<pre><code class="language-python">// for 循环3 m7 G/ ^6 P: `: l
        for(起始值;循环条件;每次循环后执行的操作){% |& S; F7 b0 f7 `2 ?
        for循环体代码
+ u1 y* b* ^) q+ I# }    }
) w2 N0 o$ a' S! ~
! h3 ~4 [- K; S9 {7 W9 A: i/ Nfor (var i = 0; i&lt;10; i++){: S- ~' Z2 `  n# T
    console.log(i)/ p# h  ]  g! U
}
5 [" J$ x, }) R1 ^9 F        06 G4 ?( g& ?" G9 n/ ]+ a* }  P
        10 v4 R5 z! a7 D6 _1 w
        2
; |& X, `! O2 c" F' P$ S        3' P  V: |* M5 s9 G
        4
4 A% m3 L( J" C3 S9 p        5
( R( h( \: F: d2 ]        6) X$ r' O+ I  j
        7/ b' }* O  @+ M2 t  R/ x) S) y% c
        8
6 X2 O+ k2 R: _9 m$ Z        95 j8 `4 e0 J. y+ M2 h0 t
</code></pre>: [- B! }* h- T* @
<h4 id="254-while">2.5.4 while</h4>* h# B- z6 r% }' f* C7 y: ~% B
<pre><code class="language-javascript">// while 循环
1 R. x" F# T, j0 ^! u        while(循环条件){9 O: s- D( Q9 S% z7 g
        循环体代码6 P/ \. {9 S" S7 W- ^$ v
    }
' {4 g/ I2 G" e8 u1 Q9 P4 y* |" \
$ l' s) Z8 L0 ~0 T1 F4 W&gt; var i = 04 r- w# s: l/ L% r
&gt; while(i&lt;10){
% g- x6 d% p% E, C$ ~' P" V9 k7 z    console.log(i)3 w; l/ b5 @+ t2 L2 |% m
    i++: \$ \* w8 ^5 a$ b+ |
}4 Q: |5 }5 h8 a: X- m
0; j1 \4 F! ~! t  @  S: p" A( }/ C/ E
1
6 V# L8 E. v4 V* q6 f) T 2
* k% G* `& `, T/ H- ^$ M 3
# r* W  v4 ]' j( u! I* Y 4
7 ^% {& u; u( k! L. t' c2 ?+ _8 ~ 56 ~: s( L4 S2 R' G
6! @* x1 D" e4 t% U
7
2 M+ d" W: w% O+ L3 t4 e, I! [: i2 s 8, H) s) r6 z3 R6 k! b' l
9
) c: Y) E: q$ |: o1 a</code></pre>
4 H1 |# i+ e6 D$ F$ E6 r<h4 id="255-break和continue">2.5.5 break和continue</h4>
. `0 w7 n7 w$ x<pre><code class="language-javascript">// break
3 B8 c) V  r2 v+ x2 c) afor (var i = 0; i&lt;10; i++){) |9 G" O2 v+ l' u# x8 ]
    if (i == 5){break}
; ^1 z& X: k- X% O& Q1 x/ V9 v    console.log(i)
! T, r# w! L) E: Q0 f! }2 F}
5 b- s5 [9 E! n+ A% Y1 X( I 0
& e8 [+ V1 B/ C* E! j 16 K6 b) S9 C' I/ Z
2
1 N1 c; O$ n1 F. q1 I8 J6 x# m 39 }% r# k5 H" r2 g6 z4 _" F: h7 V
4
! Y$ L( U6 L9 r3 F& W( W: ]; J// continue/ x5 {# c  r% B6 L& ~+ t; s0 r
for (var i = 0; i&lt;10; i++){1 @4 e( ?/ A9 \- V' |4 ~3 F
    if (i == 5){continue}& G) r! }( @4 u' v4 ^7 D
    console.log(i)4 v. n' O. S5 X
}  g3 }$ P5 L; \/ ?$ g& {& }
02 V( ~2 G2 Z2 ]7 x+ q
1
  h4 t* a; U, r! {0 Y, _' D 2$ s% ?9 g" x( u# M. l6 g) R7 X  V
3, m. x- {; k' f; P. ?
4
7 d1 Z* @' V% P( t$ A6 G. _! W) V 6
9 ^* e3 h$ Q& u0 L4 s9 s 79 L! Y2 y# I7 c- ?/ `
8" i; u: O8 n) `- V: L$ C
9
9 B7 D3 w0 D- c$ `6 P: y' ]2 X8 C; T1 z2 Z6 H) ~
</code></pre>" f, c4 R& H1 s0 b' T8 A
<h3 id="26-三元运算">2.6 三元运算</h3>
/ O& j% ]% ]& a, I* o, u" \<pre><code class="language-javascript">&gt; a
6 |: C. {/ D, e9 k  Y1 n6
, W( G( s) H& l! K9 b3 R2 e&gt; b
" d& r8 r1 @4 z3 ^3* \% Z6 A$ [! t. l- H
2 ]. i* V* g2 d, g9 S& L2 x
//条件成立c为a的值,不成立c为b的值
& y9 [; X, _3 E& \&gt; var c = a &gt; b ? a : b
5 ^% _/ e, |# T+ D* k% U# P7 {: T&gt; c2 m2 c" ]2 I1 g: C
6' G& f0 v2 {9 {" F4 J& |, o+ ~
8 R5 E8 l, m  J
// 三元运算可以嵌套) y0 V. \6 Z. S4 a  u
</code></pre>
6 j% k3 O5 [1 A) k<h3 id="27-函数">2.7 函数</h3>
; ~9 @  O2 ?6 A9 |2 I& C2 ]<pre><code class="language-javascript">1. 普通函数  z0 n! T+ G% ^7 P- Z# A6 Y  M
&gt; function foo1(){
* `$ ?3 S3 ~2 |    console.log("Hi")
  Z' }* y+ `! G1 d& a, e) Z1 R}
8 Z9 V8 ?1 n+ Z* \3 h  _
4 |; x8 [  l5 g&gt; foo1()/ ], W3 q- x. Q! [& N" E9 ]: O
        Hi! L( m6 H3 J  M. I9 ~
2. 带参数函数# @8 Q/ B. V; s& o8 F2 {6 @
&gt; function foo1(name){
0 Y2 F. B. @* ]5 O7 z  h9 I' _0 Vconsole.log("Hi",name)
0 Y+ n' P% A) ]& L7 W5 }}5 k) V4 i; s9 n
; j! X0 k; p. L' i& B
&gt; foo1("Hans")
6 M6 X7 T5 ?8 b( T2 B$ `( zHi Hans& K( Q5 A6 [& }; a1 y: e8 c
8 Z6 _$ ?9 v8 J1 }8 k
&gt; var name = "Hello"1 k6 A& Q7 @4 E2 v: a
&gt; foo1(name)/ X8 h8 W  g8 T! H
Hi Hello
& d/ Z# c( a: E! [' x/ y, W, S  ^/ A
8 F1 ^# I0 N. ~/ J4 r% g3. 带返回值函数
' f+ `5 ]/ Q4 N* \8 l! E&gt; function foo1(a,b){
% @9 A- s7 A7 p2 X3 Y- y1 D        return a + b   2 T& V$ j; e, K3 E3 _3 i, @% [
}
) @6 I" m% Y1 m2 f" {! g&gt; foo1(1,2)
# N- V4 ~+ j8 z2 M- z8 Q5 [5 L) j3$ d  r/ e5 O, W/ X+ g* m' q- e3 h
&gt; var a = foo1(10,20)  //接受函数返回值
3 r& m$ f6 y' y$ V&gt; a
. t2 l( {8 x1 Q  c* _7 A30
' ]8 X6 ~2 d' M6 j9 g
- M- ~9 X: r4 y. p. J8 F; M4. 匿名函数
) U. n9 G6 s: |* T! _* y0 [  y&gt; var sum = function(a, b){
. t# y* J3 H# i6 U' D  return a + b;
7 ~, X6 v) d8 Q}
$ Q( ~5 o; f1 \4 t" u. Z1 |&gt; sum(1,2)- L3 I2 S3 E/ i  c' y; d/ |
3
* U9 x, i8 u8 ]! j3 }5 a0 n
# z4 A3 h: y1 \" R2 o2 a// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
+ a9 V: Z. U3 d&gt; (function(a, b){
7 @, S2 M/ n  \0 N" z4 ~4 O  return a + b
1 Q& {9 _% s3 f/ A' |) ^$ j})(10, 20)3 w3 a+ S( n& V
30
0 j# {, [; U* F' s" B* o) b1 ]+ w- y$ e' `4 [
5. 闭包函数& Z% }8 g& Q% @, x7 Y0 E+ [" ?
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
- J/ T$ |# h  Dvar city = "BJ"; h1 v! E. y1 ~; B1 s+ f' D! `
function f(){8 t4 H( r) C$ \! K4 z# ]9 a5 Z+ ?
    var city = "SH"3 \) d" h9 G- J
    function inner(){6 f4 l4 W2 f' F
        console.log(city)) O7 G' f: j. C6 U/ {2 Z' H4 n
    }) l' L+ G# Z- w- b8 j' Y
    return inner1 ]4 C2 o* D- t+ H7 i1 E- b
}
  j! {/ `0 J  C# }! q+ r+ E0 Kvar ret = f()
8 H- c6 H3 f  y" }4 s3 d0 bret()
& E" a1 Q3 ~. e/ k8 [执行结果:) k" ^! b0 x- u; v! ?* E
SH
& }  w* H: |  [: l. `
' n/ r* j9 e! C8 H; L( H</code></pre>
( q" y6 q) ]! B/ w8 S! J<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>- }4 W" E" G/ \9 ^. Q! D* J, M
<pre><code class="language-javascript">var f = v =&gt; v;
: u+ Z& o+ @5 Q1 H4 [// 等同于! ^9 Y/ O) q5 p, t" N3 c' T0 s
var f = function(v){: m/ A; s5 `' o
  return v;& [1 d$ d9 C+ L- V7 y
}
* u: s! _- U# l</code></pre>8 z3 `& W6 Z5 d2 U0 p+ X
<p><code>arguments</code>参数 可以获取传入的所有数据</p>. ]; W( t$ e% w) F- R
<pre><code class="language-javascript">function foo1(a,b){) \  [9 ~+ |; H& U, L
    console.log(arguments.length)  //参数的个数
, s2 X/ j9 n4 X3 l+ H2 v& A" I% i    console.log(arguments[0]) // 第一个参数的值
7 o6 y' d  I1 R7 k) s' `- u        return a + b   
  F* i8 n7 T# c! b1 K}
0 o( J" [$ [) T4 [8 X1 W6 `foo1(10,20)
9 {" N9 d4 d- L4 ~结果:% N2 m# [+ V4 [: O9 i5 n( w
2          //参数的个数 " Z& S  |! K, b6 j6 O
10        // 第一个参数的值
3 W) K; N/ D, [! f30        // 返回相加的结果; H7 E1 [+ m8 j' L6 B8 E
</code></pre>: q4 W/ G' }+ O0 \4 {3 E
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 ]! L+ }& z, D/ J  b. Y<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
# U" r# q4 g- d( [2 @6 _<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>! E6 y, U* a2 w: |3 {4 o
<h4 id="281-date对象">2.8.1 Date对象</h4>5 }- B: `# r/ J5 M  N9 J  N" ~4 r
<pre><code class="language-javascript">&gt; var data_test = new Date()
7 |# n3 T( i3 \. Z&gt; data_test8 A  z: x" {0 R! e7 T: K
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)3 n* V$ x: ]8 o1 K" F0 z! S+ x
&gt; data_test.toLocaleString()/ B; U1 w: W' c7 }  |
'2022/2/11 下午9:44:43'. x2 J3 D3 E! b3 l' p. }
$ g) H+ ]/ s* [: m+ l. {0 N1 b$ J2 f
&gt; data_test.toLocaleDateString()! o1 M) R4 m# n- R% C$ g9 M
'2022/2/11'
% Y" V! g) j- G9 w' r# [2 g' z% f/ W' v# O/ P# u, l, s
&gt; var data_test2  = new Date("2022/2/11 9:44:43")9 m; v0 u4 l, T, Q" [2 o8 Y
&gt; data_test2.toLocaleString()
- g3 k5 @/ V# @" a8 {$ z5 n'2022/2/11 上午9:44:43'- N8 K* h+ V! v  z$ [2 v) V) ~) g" Y; L. Y
& R% C9 N( N3 D& I1 e
// 获取当前几号
( @0 g6 d# R# L* z. ?% E6 I&gt; data_test.getDate()
0 U7 P7 k1 l% V11( H& T4 o7 j8 O& Y6 Q1 P1 a
// 获取星期几,数字表示
2 o; |( V+ {6 x/ D&gt; data_test.getDay()  
. l- _3 n/ L, H- \8 D4 |5
4 m+ e) a% G6 a5 n  e/ N0 K2 `// 获取月份(0-11)% J7 Q2 G6 ^1 K9 W
&gt; data_test.getMonth()( e; @% e" H* L% k
1
$ \6 Z2 i0 [! |: w  A8 q// 获取完整年份
6 h3 @. Z) r+ _. [" l' y&gt; data_test.getFullYear()
! n' r! W. g3 \$ X7 n$ v& G! K: `3 b9 b2022
# X0 |; `; H7 Z, P1 j5 u9 F// 获取时4 F  D4 T$ p+ X% n8 r. w
&gt; data_test.getHours()
! |8 I7 w/ Q+ c, l/ c21
3 a! _7 _* t* X. z! ]// 获取分
$ _" u7 a% L" }: ^) D( O0 U&gt; data_test.getMinutes()0 b6 }) l( l- `9 w0 \- G% h! |  r
44( c4 ^; A% Y: r8 b' k
// 获取秒
3 |7 _& y" ]; O3 c: F% k+ q&gt; data_test.getSeconds()
! X; a7 a# D& u2 i0 q+ u432 k$ i9 N! `+ L' @2 h6 h
// 获取毫秒
- s$ O& m3 {9 n, e/ m&gt; data_test.getMilliseconds()4 B% _4 l. p! r
2905 O& c; J5 [7 F; e9 n6 |
// 获取时间戳! h1 n1 u. b: R! \( H: @
&gt; data_test.getTime()' i! d# k% O1 q& n
1644587083290" h8 l+ x- M2 q0 |2 I, v" y
</code></pre>4 |9 ]' v- H6 m1 U/ G" u! S. S1 M
<h4 id="282-json对象">2.8.2 Json对象</h4>
8 z  ]* L) ]' j* U<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串& t; w- @; D; H9 R+ V
JSON.parse()  // 反序列化,把JSON字符串转换成对象
% I% F# g5 g. e' Y3 s
& `/ L+ f# w3 l6 r8 H" x; R" M// 序列化
  T& Y! D1 Y) ^) Z5 F2 {&gt; var jstojson = JSON.stringify(person) 3 k" F; X5 h4 }0 a- _
&gt; jstojson  
- G6 U* H% }) Y7 J9 p5 U* W& o'{"Name":"Hans","Age":18}', P( _0 G8 `# O' P
3 |( x& ~8 E' h
// 反序列化! X& \  `. Y- l, q; t) j  c1 _3 |
&gt; var x = JSON.parse(jstojson)
: ?7 E6 V3 n" k7 ^5 y% ]- P/ \$ G&gt; x
  [6 Q3 K/ e/ b& G' J, K{Name: 'Hans', Age: 18}
" [! @4 X, r9 j: I: |&gt; x.Age* t  B! g' M+ \0 Z# W3 G/ O5 V
18
$ e; g1 e% B0 \- X" L6 m9 B: @</code></pre>; a8 J1 @. y. J* g1 Q
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4># n$ V0 P9 v0 o+ Z8 r: u
<p>正则</p>
' N5 }& l% Q6 o4 Y9 b<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");8 I& C% o1 C9 Z  D( i! S9 P- \
&gt; reg1
3 }  [8 ?% X! y( I& p9 j/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 S" `& U  m! ]0 f0 w! X, ]&gt; reg1.test("Hans666")! t  f' L$ X2 O& K
true
: n+ M( g! v1 O) a% }# b: B: L  j* u) o8 M- |* `9 X1 u! J
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
% u6 X: a) O) \, ?9 d* C) p2 g, c9 I&gt; reg20 Q' j/ S6 u' m& B, ]+ D
/^[a-zA-Z][a-zA-Z0-9]{4,7}/  J+ ~: z' w, P1 c4 K; J
&gt; reg2.test('Hasdfa')
: P9 ~+ f8 ]" |2 Wtrue
1 D; F, G5 V4 b# v* a  a$ P- e: b. |
全局匹配:
( P( e% S- b' ^2 x! t&gt; name* ~9 j& O" v: }. q
'Hello'
  H8 ]0 ~8 `. j$ {$ ?* \; o  p&gt; name.match(/l/)) B0 Z; K8 d! ?* e
['l', index: 2, input: 'Hello', groups: undefined]' ]5 i) p6 p' F. |

9 g( h3 n/ z5 W5 Q&gt; name.match(/l/g), }7 d! c7 z$ N7 H
(2)&nbsp;['l', 'l']0 D( M" ?; l2 ^
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
8 T- m$ c% O3 ~5 t% x4 N) N7 S$ P- ?  I/ k
全局匹配注意事项:
0 X& k: n* T/ E* K5 |' o# L&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% }4 t: Z$ N& n7 S4 d
&gt; reg2.test('Hasdfa')6 l) D/ [& k  g. M+ [+ C4 z; r& r& P
true7 z) ?0 B& E8 [' C. ^
&gt;reg2.lastIndex;1 P% L' k. s: Y% E+ J5 H2 T1 {
6, |1 }; ^( u& k9 `
&gt; reg2.test('Hasdfa')! V& m0 t2 W- a8 S) q( L
false+ d5 E- r7 S) A* h/ r$ t
&gt; reg2.lastIndex;% E/ j& w  S# I6 B/ p; A1 G
0$ a) I6 K# S+ W
&gt; reg2.test('Hasdfa')3 J6 N' l0 l2 @1 ^+ E+ l# ^' N# |
true* ^+ n7 I4 m! Q6 l
&gt; reg2.lastIndex;! w( d- ~; x0 l
6  x+ r0 A$ v8 Q) c, T4 P6 `
&gt; reg2.test('Hasdfa')2 ^* q) o1 [5 C4 g6 D- P" q5 D' X( T
false; c% s% u  x3 K$ w, x# U
&gt; reg2.lastIndex;
% |" t1 M' q) x0 v0
" `- g. r% j& p3 h( u// 全局匹配会有一个lastindex属性
) m6 O% `- T+ A. B+ ^! `' D&gt; reg2.test()
3 O- a* B& L  b) r8 l, j7 wfalse
5 O9 O$ u- x" s7 h8 g; I&gt; reg2.test()
4 j0 r. ~$ @5 \+ J# o6 `true1 ?$ g: c# }6 q% C3 V
// 校验时不传参数默认传的是undefined! y3 C+ H8 \+ }% j6 r
</code></pre>
/ m( a3 F3 C6 z<h4 id="284-自定义对象">2.8.4 自定义对象</h4>6 w( P5 \  i$ r. y$ \' N. v$ L, ?  d
<p>就相当于是<code>python</code>中的字典</p>
& M9 p3 ^6 R6 E$ D/ b, K2 v. |<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}7 X$ [7 Y0 |" r5 q; t2 o# |& P5 f
&gt; person& X3 `' Z/ U" S$ Q, a) H% H
{Name: 'Hans', Age: 18}$ S5 e- X- w/ c8 G  W' K- R* B
&gt; person.Name& G# W5 }& @4 C9 A
'Hans'% q) a; t3 k/ \8 `% }1 {/ @
&gt; person["Name"]  C8 J" ]+ ?; w7 N" K) f: r
'Hans'1 z7 N- @: B& ?0 [0 M
0 s* d. Q9 T& r; C; {
// 也可以使用new Object创建' o/ R: R- o! ~; \& w+ H4 h8 g
&gt; var person2 = new Object()
6 j- \* ^( c# w&gt; person2.name = "Hello"
2 \; {1 x) P; G'Hello'
$ G, e' l0 z8 c5 s% p- o&gt; person2.age = 20
5 h% K# M# m  m  b1 v20
  {4 Y) t% \; D7 K</code></pre>
3 u$ o" o5 M+ ?" c<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
* K9 O* e- `, \- L9 p8 e<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>9 ^, [8 |5 z/ d. d: |/ B+ n4 b
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>2 c8 B' j7 P6 W8 H# }
<h3 id="31-window-对象">3.1 window 对象</h3>2 x8 {) T2 ~8 J! }# z
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
5 s' k$ n9 z$ G/ v% H1 R<pre><code class="language-python">//览器窗口的内部高度
4 S  t' @! h) y& l6 y2 Cwindow.innerHeight
4 n' c1 J1 Z1 T* L706
: G7 o) v( O9 b9 u2 a//浏览器窗口的内部宽度
& {9 i" w+ {" u$ U* k* xwindow.innerWidth
3 Q% a! E) }/ Y1 t1522/ V. j: D- S0 s0 W
// 打开新窗口
& p' L& A( Y: I2 {& S: o) X0 D, lwindow.open('https://www.baidu.com')8 z" B9 `2 x* `- w4 h
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
/ L# s1 O! [3 i// 关闭当前窗口
/ T9 r; y* w7 i% m& d2 B$ \window.close()
! h' ?) o* r9 c- u6 I: n7 v! w1 h//  后退一页
, G' Z$ m. w( i1 f5 b, z, awindow.history.back()1 c  b/ v8 }; p  o3 v; Q7 C
// 前进一页
) {/ a- R1 e) m) I- e8 Hwindow.history.forward()
& q3 s, L" w2 X/ M7 H//Web浏览器全称4 i" @; l' C! E5 V
window.navigator.appName1 b& B* ~6 Q* {1 u
'Netscape'
/ K; {0 @" s" M5 Z3 g// Web浏览器厂商和版本的详细字符串
- ~5 m6 L9 c# c) wwindow.navigator.appVersion
; V* r9 X. [9 W! q& r'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
4 d/ c" Y" P/ Z9 L* g- N// 客户端绝大部分信息; i5 q. G) Z# [  Q
window.navigator.userAgent
7 ~' v5 ^3 g8 K  Z'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 m- {* U5 J4 t1 L$ \7 B# S// 浏览器运行所在的操作系统
, |7 x+ j  ]& L( _4 c' D$ Iwindow.navigator.platform
# k% T. y4 Y3 n' `- s, D'Win32'2 D, R" F1 U" n2 M, K. T- E
) x& Q* |  j2 {4 q. Y3 o* E+ A7 A
//  获取URL! K6 N* A% J' K1 {% @& _
window.location.href6 H- P$ @! B& U" ]
// 跳转到指定页面0 w. ~5 L4 x3 A2 g& _
window.location.href='https://www.baidu.com'
) ^0 R9 |' j5 @6 M  ]2 t3 t// 重新加载页面( S$ y9 `/ v' j. L3 i9 V/ g
window.location.reload() 3 t; \; Q; c2 e
</code></pre>& I  ?, I& T! z5 ?6 B# |; ]  A
<h3 id="32-弹出框">3.2 弹出框</h3>$ E% ]4 B& h# f
<p>三种消息框:警告框、确认框、提示框。</p>
. k. j0 V4 m/ [6 J' @  z<h4 id="321-警告框">3.2.1 警告框</h4>2 I" i; T. v8 V% w4 f
<pre><code class="language-javascript">alert("Hello")* H- M6 F( C+ l3 j- Q. F4 T" Q4 }
</code></pre>
8 N, I# i4 b1 u6 }. Z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
' \5 v- G4 ~4 {$ Q<h4 id="322-确认框">3.2.2 确认框</h4>
) P4 V% |- J3 V; F<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
2 l# U8 o& o, R8 T' ~. U- U# @<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
; l* w. g1 ^; O! B; i; X- p# X6 ]true
) k' j( ]& k! @: l, P% L5 A&gt; confirm("你确定吗?")  // 点取消返回false2 n$ Z$ N( n5 L3 E, w6 V4 B
false4 ?! X( z3 ^5 G3 C, t8 U& |+ d
</code></pre>
/ m# ]; B0 h" E* p<h4 id="323-提示框">3.2.3 提示框</h4>
; e6 Y, b- I$ T<p><code>prompt("请输入","提示")</code></p>. s3 r% F0 a' i, Z" s5 C: v
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>0 n) T0 M; t# h( I8 O
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
6 Y/ u9 i3 Q% t" z. s  }) n<p>如果直接点<code>取消</code>后端收到<code>null</code></p>1 G' W1 a% L' F0 U! U# @
<h3 id="33-计时相关">3.3 计时相关</h3>
! x5 y, m! S9 v" c" o<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
# X% p: P& {/ ]4 l: g<pre><code class="language-javascript">// 等于3秒钟弹窗
2 N$ D4 M$ B6 {8 e. FsetTimeout(function(){alert("Hello")}, 3000)
/ a: \( J' T$ m$ A" U; U; d. |+ ]! e' @# r& o# M
var t = setTimeout(function(){alert("Hello")}, 3000)! G( l( c4 }3 a6 ^% j# p# h( X

& \8 C1 v- i" Y. a7 `// 取消setTimeout设置# y( W9 P) _3 ]) M& m: j3 X$ [: E
clearTimeout(t)1 k, s0 h5 x- `* \4 K
</code></pre>
% i) l; g8 L  O* I+ Z- |2 T<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
+ C5 R2 J- k( L6 f- D2 V3 W9 s<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
3 P% V8 Z+ j4 H<pre><code class="language-javascript">每三秒弹出 "hello" :
2 y) ^/ @+ @, `, \/ v; PsetInterval(function(){alert("Hello")},3000);
4 J' V9 Q: L. i1 [</code></pre>
/ ]9 W3 f$ Y" _! x! h9 E<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
! |! a* F/ b: U4 j+ o<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
, \: ]) w/ \4 t* H//取消:5 `+ e- @+ B) N# m. u# Q, @" e
clearInterval(t)
5 `9 p) d3 s8 X9 j& Z$ w1 F</code></pre>
. _5 k7 G" E( c! z. E& m7 P7 l/ o: J7 C. j- U! L0 [
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-25 20:16 , Processed in 0.090471 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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