飞雪团队

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

前端之JavaScript

[复制链接]

8087

主题

8175

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ b( T7 C- J, o5 @) _) u<h1 id="前端之javascript">前端之JavaScript</h1>
8 E  V- [8 f2 ~8 e<p></p><p></p>
& @, e( r' k, r( g" j5 s9 p: o+ Z# p<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
% ~9 H; z: E5 @- X3 n- f8 B<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
3 ]9 r9 }4 S& u& @$ W' {, N& `4 M它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>+ r& R7 K! D! V/ O
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>- u/ l, \2 y% l0 t5 R! y
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 |. ?  f8 A9 _/ ?
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
* I3 s( E8 Z+ i<h3 id="21-注释">2.1 注释</h3>
7 `3 I& H2 N! U$ g6 O<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
  }( h; f. t5 I; A" s/ m<pre><code class="language-javascript">// 这是单行注释: U/ N9 k" m( G/ o
: n- b: i' ?! k! r( b! i
/** ~& K5 G$ D$ |' ~3 j1 j8 _0 d
这是多行注释的第一行,* l. g& Y* [4 l; r+ u
这是第二行。
+ w9 J" j  ?; i& i+ C. c$ A. H*/% |" w, c8 g/ j% S
</code></pre>$ }& n" M; J6 s! g# e
<h3 id="22-变量和常量">2.2 变量和常量</h3>, a8 G+ c1 B! ~/ G
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>( d: j5 H) [) O% `5 o6 B, Q
<ul>
# i" ~& W: |$ B( `<li>变量必须以字母开头</li>/ U: K/ ^$ {  J% ]. v2 ?
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
1 U# u* f3 l( M7 m: z<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>0 _6 n5 W/ H2 q& W; [6 k0 b6 L
</ul>, C$ Z4 W% `" W- p8 }/ H5 b9 R
<p><code>var</code>定义的都为全局变量</p>
' s9 N& a- i0 X4 u<p><code>let</code>可以声明局部变量</p>
1 E# `/ V8 o& [8 e* U<p><strong>声明变量:</strong></p>6 `! _4 [* `: E1 O$ N
<pre><code class="language-javascript">// 定义单个变量
; n! L- G/ s+ F$ }. A6 h&gt; var name0 l& m: B* z$ t5 W5 c: N! |
&gt; name = 'Hans'
2 L! ~# G+ x2 X; z//定义并赋值  @1 ~( Z& ^* i. f' y, m# p4 R% m
&gt; var name = 'Hans'' H3 K. b; r, K# ]8 c/ c
&gt; name  G3 {7 o. {* @1 y- x$ t- y
'Hans'% o: V/ m( u! l3 f
# Z1 Y$ M% m) h
// 定义多个变量- d- F, T; e" x; e; |! `( `
&gt; var name = "Hans", age = 18% h: d) O6 y2 [+ F
&gt; name
3 V- d: Q, D& G- U) o'Hans'
( L5 g6 @+ T, l&gt; age2 \6 d# W% ^4 M8 C
183 B- {+ K+ X; t6 k; F
/ |9 k9 B3 N4 e  t- C
//多行使用反引号`` 类型python中的三引号# c% _9 r' a5 x' I/ f
&gt; var text = `A young idler,8 z" D0 T3 K2 d: o' z2 ?5 Q+ d
an old beggar`8 C6 P! \* v! ^/ f* t2 x* M
&gt; text
( [+ q0 @+ r4 K4 m4 y0 j8 D; t" y8 K'A young idler,\nan old beggar'
( f, z3 x0 q5 h6 b</code></pre>( z) j& K& V' ~' k4 ]
<p><strong>声明常量:</strong></p>
3 y$ B" b2 {& ], w2 Y<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
7 [5 A4 c8 L. \! T+ R' ~* `<pre><code class="language-javascript">&gt; const pi = 3.14
, ]# F. S+ G& v&gt; pi% {! g( l, z# s/ G" f& J% w% |
3.14& y, Z* H( Y6 Y  D
&gt;  pi = 3.01
6 W" X! e! @1 ?Uncaught TypeError: Assignment to constant variable.4 ^% @4 X: Q' }; }7 v  ~7 J7 x, K
    at &lt;anonymous&gt;:1:4; k6 d; X& m& s! }( Q: S! N; e

$ p/ s, o' }+ M8 |- g</code></pre>% x9 y4 \9 G& r& Y0 f" C2 O
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
( B9 x& P3 x) p- V3 R) b: T<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
! Q+ w' s% Y; C7 g3 q& X; N% z<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>: N/ a+ \8 R, k0 g$ j- J: y! P, V
<h4 id="231-number类型">2.3.1 Number类型</h4>( ~, W: O8 A6 M1 l
<pre><code class="language-javascript">&gt; var a = 5& _) O4 J2 S8 j2 {/ m- L+ B( \
&gt; typeof a   //查看变量的类型  
3 T2 {7 G% |  d7 Qnumber
! @, T* T" M' P1 l+ V" e  a2 ]0 X# ?! z1 K
&gt; var b = 1.3$ M% x. u! ~2 I. i1 N9 f5 o
&gt; typeof b& w; u6 x7 W5 Y$ p
number+ t2 `, K/ v3 Q
$ @8 c/ a# ~% B8 P
// 不管整型还是浮点型打开出来的结果都是number类型
; S$ Z, b8 P8 G: q! }3 \
  t* C! k1 I) w) `* Q, u9 |6 y/*
$ q% n; r; j$ _" Q# W7 H( d  l. ~NaN:Not A Number
6 |8 T* Z2 C7 M/ U" nNaN属于数值类型 表示的意思是 不是一个数字
% C8 m3 s' T' h0 ^1 T% T% g*/
( i* x( W7 L4 X2 T/ L/ _9 j  F
5 {- L% |8 W  r" o- ~) p) FparseInt('2345')  // 转整型5 L  {- |- q; {: l' Y4 M* l' v
2345! W1 ]/ D6 V1 s9 W( A5 a
parseInt('2345.5')4 D6 O6 h2 [  A1 N# G" R& C- A
2345
% Q; @) L& R; r+ {2 ^/ gparseFloat('2345.5') // 转浮点型9 I: I% p/ G5 l% F: |4 R" l! C
2345.5/ o: n  j- W4 F6 d+ `2 g3 w$ Z$ ]
parseFloat('ABC')9 z. N; _( s* R) I
NaN
- r/ D) R$ v# f2 q0 ?5 a3 q9 R1 \parseInt('abc')( s6 D- _9 |& d
NaN4 E6 o# x" h  _! o
</code></pre>+ K3 r0 x" Z' l' w: a
<h4 id="232-string类型">2.3.2 String类型</h4>
$ D* }0 h: H+ |5 O<pre><code class="language-javascript">&gt; var name = 'Hans'- K$ G% _1 y& g: Z
&gt; typeof name
3 X& I& [$ {+ G$ ?6 u- O1 A8 d$ i'string': A1 M9 t9 W) q, U  K. I

5 K( ~1 `# ^$ |; F//常用方法9 s0 y0 e& t2 R4 X
// 变量值长度
6 L$ G1 f% {2 b- O# C2 T0 m" w: C&gt; name.length
/ o, E( v, `; G6 w: w0 r& s4# w7 R8 P+ _% e* Y; K& l8 @! ^) _
// trim() 移除空白
) r4 Y& ]2 ?5 y; I&gt; var a = '    ABC    '
- ?: O$ A7 u" ?) Y% J&gt; a
6 F' ?$ E) W7 E1 h  q'    ABC    ', @2 c; y& T3 A3 V2 T3 h  d* \0 F; x
&gt; a.trim()1 m( z. {6 i6 b  c! E0 {
'ABC'
7 o, S  [7 _! g, y+ h9 z//移除左边的空白
! d) {% a& j5 E" |% q. z6 a) m" i' K&gt; a.trimLeft()
8 i# c/ o9 N6 a  }0 w'ABC    '5 u; n* s1 U! {& g
//移除右边的空白8 K/ Z% w0 ?! a+ C, `0 a
&gt; a.trimRight(): {8 Y* |: q+ i) R3 H
'    ABC', j5 W3 y5 o& V, c

' n- y9 z: ~& L0 `9 {6 i! ]//返回第n个字符,从0开始
8 ]) f! Z. K0 u&gt; name
, {1 m+ ]" P; h" U- V& N. L5 J'Hans'
5 b) O8 `) f7 c' Q+ C5 X&gt; name.charAt(3)" d7 v3 b  p: D' V. C
's'
# H% b7 h, ~  V&gt; name.charAt()* G; i8 s) s8 P# R7 y
'H'
% t# e* `) ]1 M" J. y! q) ^& n&gt; name.charAt(1)
6 F5 I" ?+ r$ w* g% n6 K, ~; o: U'a'
$ W" Q/ o) t( v) b; w+ U' O0 {" c5 \: y5 r7 Y
// 在javascript中推荐使用加号(+)拼接, ~7 t5 [7 v: Z# l4 c
&gt; name
, N( G! r$ G$ K: n1 t+ A0 O% m% |+ i'Hans'
* e9 |9 W, c$ v: g* r/ k7 L&gt; a' A4 v' k1 K% H8 B, x
'    ABC    '& l, _2 I/ q. X1 g  z4 I: t! X4 v1 n
&gt; name + a8 C0 t1 @) G, Y: x" ]
'Hans    ABC    '
: \/ ?5 q* C8 c  L2 Y// 使用concat拼接
7 s+ W; l9 ?$ J3 ?& p6 C/ i&gt; name.concat(a)
1 O; z7 J) L/ b1 `! z! q/ `- {'Hans    ABC    '
( h. Z1 a& G  q( I9 [
5 g  F1 ~; L1 v# H//indexOf(substring, start)子序列位置
0 p0 N( L, @( p! x1 h2 f3 T
5 H3 J/ n; {  k9 T; t2 e&gt; text
6 l5 ]0 S# n1 K2 u  M# r9 E2 ?'A young idler,\nan old beggar'
4 M$ ?: N4 }* P5 N8 F" t&gt; text.indexOf('young',0); D4 x* S: S" k% Z, [
21 v5 e* H) L, f6 O9 q) m2 |7 L5 }' u
. b: f0 [; e4 n( _
//.substring(from, to)        根据索引获取子序列" i. |) c: P: C2 s" C3 S# A+ R; D( x
&gt; text.substring(0,)% y3 M. c9 M4 q/ j4 z% M& k1 |1 b
'A young idler,\nan old beggar'; t" k0 ^8 v6 C$ D# \6 P' U+ i
&gt; text.substring(0,10)
9 l; u) \' G' r1 L'A young id'- [4 ^: D4 x6 H

8 t+ W+ e  c3 g9 j/ ^$ T: {// .slice(start, end)        切片, 从0开始顾头不顾尾
& o' I( _/ Y+ ^# s/ `% [&gt; name.slice(0,3)
0 }! _0 O5 p! ]4 f2 w6 o7 b'Han'% G* _5 k7 B( x% X

: u* f2 k9 P3 w' H% B/ E5 a// 转小写) C+ L% _4 ]& {8 U! L1 h, L
&gt; name0 m( v+ @- n8 r! M9 C0 p; W
'Hans'/ E- A( u1 o/ {$ i% d- V
&gt; name.toLowerCase()( g: i$ r- O& @/ V' P: W  z. `* p
'hans'9 T$ t* B. p2 y1 B
// 转大写/ `$ ~8 y6 h3 l  U, U6 {
&gt; name.toUpperCase()
0 p* M4 t  b% u8 T4 I) [* D9 I- a'HANS'$ x5 H3 b1 Z( A) p
  E, Z& O6 Q+ ]! s' v
// 分隔* [, ]# t2 Q. l4 x/ _) e; X5 s
&gt; name
5 k& u; @8 d" R5 H. E3 v8 I'Hans'
: r- s4 g; o% }/ `! u2 W&gt; name.split('a')
6 K$ j( _5 r" R; J3 ^; ?) C(2)&nbsp;['H', 'ns']$ k; d% ^7 C0 I( h
</code></pre>
5 C0 }# o8 y, j* Z" k6 C; |* ]<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>; g2 j% s; g  J: @. O+ T$ ]
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>  H$ d: C. m7 M+ R
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
6 @& m, l& h' C4 _<p><strong>null和undefined</strong></p>
+ c; j* t, K* A/ R/ O/ U! N<ul>
9 H& ?+ a3 L7 J% p. a4 {1 e<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
6 q8 H! r0 c5 d<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>/ e; b: w. r/ F
</ul>
1 d0 ^( J- A8 m4 v* P+ C7 h# X! f, w3 y<h4 id="234-array数组">2.3.4 Array数组</h4>
9 k4 S* O" R* v<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>- z% N% R0 l8 v" [8 B. _
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
  [$ h3 q8 F- a# \: \! I&gt; array1
% _* Y  A: a7 N2 q(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' D; v# k$ Q; |# R& D+ G) C
&gt; console.log(array1[2])  //console.log打印类似python中的print
8 E+ b5 T# p. e. L7 _! f1 I32 k& w. W/ r1 Q( S# ~
// length元素个数
! E) ~9 D# |* h( B1 B2 e7 C- u4 Q&gt; array1.length
; m& T: j' ?6 U" r" d+ y65 H" k  \9 M: P$ A- [+ x8 W
// 在尾部增加元素,类型append
' f# l9 G0 m' J9 z7 T" ^&gt; array1.push('D')4 W! P3 T, B6 C0 {
7
4 \% ], b% n; W3 v$ l&gt; array1
% N6 {: L; H/ `* C5 m& j(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 c9 t9 C; N! F( |+ }" D// 在头部增加元素
& P) ^! [- p, F; W: B# [  L&gt; array1.unshift(0)! h" N6 A2 g# X
8
1 {7 k3 o6 Y% ~  d/ v. q$ c) [+ _&gt; array1) X. L& Q$ z+ ]
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']+ F! P" H" R* `  Z) ?) R8 U, w  Z
. l3 s: A; o$ ^" d
//取最后一个元素
) _) y8 Q1 ~& x0 g7 \&gt; array1.pop()( T4 q% y5 F* p: E
'D'
4 i( c4 D0 z6 p5 j! `% i&gt; array10 F/ \6 f& L3 {
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
: y- i1 {# ^' U3 o  {* t+ d7 p* Z//取头部元素
+ [/ J. c& N$ B7 _7 P&gt; array1.shift()
, y' a, ^9 @) e5 z; I  G0+ I$ U) d8 m0 [- A; M6 J
&gt; array1
6 U& s( \8 q- c+ j0 ?# q: L(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ K8 {7 f# k& E8 x  C5 s9 l8 [& k
+ r8 I& R/ K1 A2 X9 g
//切片, 从0开始顾头不顾尾
0 Q  i/ w/ {" h, K, Q0 A- m/ t3 \8 ]/ K&gt; array1.slice(3,6)6 `) u5 `/ Q9 e5 ~4 K, d0 ~
(3)&nbsp;['a', 'b', 'c']( ?0 A" d, n6 w0 i8 y
// 反转! }" I0 c, p& L1 A( V& {: ^
&gt; array1.reverse()
, q7 P6 p3 u% D0 C* p(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
8 [( x5 K8 e/ M$ J" m* [6 H// 将数组元素连接成字符串
' H/ O1 x3 P- @5 L2 ~&gt; array1.join() // 什么不都写默认使用逗号分隔5 \1 n7 d6 P, ^! K# R. b3 X
'c,b,a,3,2,1'
, W5 d: G1 R* k4 V/ z; G1 l&gt; array1.join('')7 I5 i9 b( ]" J( e' u
'cba321'; H9 l0 J% P" Z0 S+ w2 w
&gt; array1.join('|')/ i; J3 }. Q# J0 c
'c|b|a|3|2|1'" i6 s: n" Q/ ?9 L9 {

9 t* o6 d0 W, p: |/ V! K// 连接数组' h- i  ^2 ?- v5 I3 [
&gt; var array2 = ['A','B','C']
/ I1 ?5 B! |+ J7 j5 L* t8 j&gt; array1.concat(array2)+ z4 `; V/ b* t. b3 [
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']$ A7 R% n2 b. T$ ~# A% j3 `
3 r) P: y! ]3 E+ q, n2 {# h5 ^3 E- T4 H
// 排序
& [* y& K0 M! n  k9 d1 v' S+ ?; W&gt; array1.sort()5 r- f  B! k- Y* f: z& q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 K) p- H0 [% Q7 r6 \
* [! a1 y2 L4 c3 ?/ u// 删除元素,并可以向数据组中添加新元素(可选)  w! Z- B/ s3 {6 w- |( x/ [5 K1 Q
&gt; array1.splice(3,3)  // 删除元素% Z5 x) [: S: U  n
(3)&nbsp;['a', 'b', 'c'], h% [$ u7 |7 p
&gt; array1
' W6 R2 ], G. w% U+ \0 R0 J* c(3)&nbsp;[1, 2, 3]. f# j, S8 ?4 ^* c
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
' f# h+ Z- y: ^4 @% j- A[]' A4 y/ y9 w6 u
&gt; array1
( n$ j) F, X+ x9 b! O/ D  x(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
( ^+ z# w5 `/ x7 C1 r" n
5 M' ^3 L! Q+ \0 {1 r+ f( K/*
! c$ w8 u5 y) {- s4 wsplice(index,howmany,item1,.....,itemX)0 j7 L& A  r8 [# T# j
index:必需,必须是数字。规定从何处添加/删除元素。8 r4 |- P7 t" F! r# Y) Y+ @0 B' x
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. n. o1 \$ p3 m
item1, ..., itemX        可选。要添加到数组的新元素  j: y$ z0 C+ e! f+ m  K; ?
*/
( p2 Y6 @6 B# l3 {. T: o/ Q0 [! ^2 w% t7 p$ ?" |) S/ b
// forEach()        将数组的每个元素传递给回调函数1 c# n3 N9 t' p4 W+ ~( k
&gt; array1.forEach(function test(n){console.log(n)})
1 |. q# B( K$ M9 P% g( e5 V 1. G1 V  U$ S0 ~, p
2
3 ]% Z! S; E$ N) }6 K9 C4 l 3
' j% k& H! ^$ M A9 _) D4 g+ Z1 S" y8 K6 T% l
B
; e; ~  g3 ^8 ^9 e3 a9 F; g C0 m/ u: [" t( U% m( Z1 }4 o
// 返回一个数组元素调用函数处理后的值的新数组' G5 Q$ R, l' v* ?6 m$ V
&gt; array1.map(function(value){return value +1})7 f6 Q8 E* r. K( p3 h
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']( N) }0 Y/ l* t; [
</code></pre>( B# n: Z, E4 o* e
<h3 id="24-运算符">2.4 运算符</h3>/ u! P# \+ A2 g0 ?% D
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>% X5 E3 _9 G6 U4 b' ?+ Z. R- W
<p><code>+ - * / % ++ --</code></p>8 D0 h8 f4 F! w
<pre><code class="language-javascript">&gt; var a = 6
7 h, M1 B6 j$ I: T3 t9 I4 I4 f&gt; var b = 37 m6 ^+ c7 |1 X; y; }
// 加
& O) R; l& v/ S# y&gt; a + b
0 v7 `9 a' i3 R7 n9 F9- A5 p% ]! J# e0 [0 T$ |# g8 a
// 减2 J) e* u5 ?; z, R& K3 S% ~
&gt; a - b
8 y" |4 u& K4 O! Z' }3
2 o7 e( @; S0 ~// 乘9 @, A* n# \6 [6 L( o, b9 n
&gt; a * b$ u5 O0 y& p, v% @2 x, y; Q
186 L' a3 T8 K) \, F' _
// 除$ c# T7 _4 _" v1 o+ j3 J
&gt; a / b) K& t4 J2 Y- G# W' N+ B% Y( `
2
6 E" \3 v0 Y2 N// 取模(取余)
, @4 g# U) [" {  K& Q4 H&gt; a % b( m; o3 r- Q! A1 o' b& K
0
9 N8 b1 t6 K8 f% X; M// 自增1(先赋值再增1)
' k2 h5 I" l7 P0 o9 w. S# c&gt; a++
2 ]! B: N7 i7 u8 l) G4 y2 z9 b$ @6
. _% `' y& B' I6 Y4 E  y&gt; a
7 M1 s% Q& d3 e. H. W. |7
% C; S7 c7 X- ]// 自减1(先赋值再减1)
% R  H2 R' V2 ^* b&gt; a--  e9 x2 j, W  c* b6 |# \1 \7 A" n
7
6 v" E+ V# C! t4 F  C: A&gt; a
1 @: R* A" n8 R* j( G( B) T63 y/ [7 p+ H; p' @9 ]7 q  d8 i5 E, w
// 自增1(先增1再赋值)1 [$ T3 C2 E1 L; [3 G2 g
&gt; ++a
8 d, b5 t5 k4 }% D: P' [7
; o% r8 Q$ D% N6 N: N// 自减1(先减1再赋值)- N' E7 [# `5 J
&gt; --a# S. P; x* f# f& H, k3 z$ |
6
2 N9 g: X4 @1 L4 q&gt; a! g; B/ m. b1 ]' S: b
6
  e* G* w2 s8 b% w
! b% d+ `8 T2 B& e# K6 C7 T3 C//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
: F" B( D2 U1 W6 ^: S</code></pre>
, A% T% E" h/ I# D<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 p: K: t- r1 J+ ~2 f1 m<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>( R+ o6 Y( N: P
<pre><code class="language-javascript">// 大于
7 O+ Q6 g5 Y& w&gt; a &gt; b% M/ u9 a  U) F! D
true
' n; r/ r9 T9 o4 Z// 大于等于# _- ^: k& x1 g& ^$ A
&gt; a &gt;= b
! }1 ]3 W* H' [  v% V7 U( Q% Ltrue3 N. W0 q% C# D# M
// 小于
9 r+ E* V  m0 C1 m3 F. q/ Z&gt; a &lt; b5 q4 Y+ `4 [& ?# W0 z
false
8 X6 e+ h+ f9 j" r8 m// 小于等于
4 h) B, |: d  z&gt; a &lt;= b
% K% |3 S2 s# m! Cfalse
0 O# s% l( F, y' q7 p" W// 弱不等于
! g7 e( y0 w4 N2 y2 q9 ^% i- {: f&gt; a != b" S6 `0 f+ F8 N/ E; `/ c
true
: X- x7 t1 b; {' q6 b2 {// 弱等于& ?8 j* ?- _5 G
&gt; 1 == '1'' H( ^; k7 {" f5 s
true8 I& S5 k$ `$ A, {3 I" X
// 强等于9 t; K. ~% F& ?% N3 s/ @) m' g
&gt; 1 === '1'5 }" s. c* `& l
false
1 @0 Q  d( p$ X3 C: @) G! I* `// 强不等于* e: q+ _% @% G9 q, S% \! g
&gt; 1 !== '1'
( ^* H9 i& D' a; y4 V) k3 Ttrue# m9 n' X, l: w7 U8 V5 v0 x8 d

0 M$ \; `3 q3 w" l) s2 x  e/ v- P2 b/*
* g# K! a  ]5 c- BJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
; G' D1 k( T0 u) b  H*/* t/ I" f! B4 n
</code></pre>
: E5 C* O- L# c. y0 l: V<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
3 }% z( T; ]5 J# S7 R8 q7 q<p><code>&amp;&amp; || !</code></p>+ Q. ?) f0 [, V
<pre><code class="language-javascript">&amp;&amp; 与; _4 \6 i3 A& j: g! c
|| or
7 {) Z5 Q' b2 @! 非
/ @) N& u0 o# |! K</code></pre>: a  U+ U' }0 R# v
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
: ?! y  u5 h: F( F. d. z& n<p><code>= += -= *= /=</code></p>2 ]5 \, ]4 M6 a5 g4 o
<pre><code class="language-javascript">// 赋值
6 u1 D9 L8 P6 k" L7 i$ T- p- V6 y&gt; var x = 3" _: r) I" _9 E) d) H# J4 h
// 加等于
, ~  h% @9 B' g& N$ L% x5 k' O2 D&gt; x += 22 a' J! b+ w3 D* C
5
: [* k: x; V  [3 {// 减等于7 {/ F9 C/ N( [
&gt; x -= 1
) w  {1 ^  j8 x5 q4
$ T3 M: C. O! b! u// 乘等于& N& M: e7 ~2 h; m$ Y
&gt; x *= 2* v( i( N. |2 @) n/ S' p! A
8+ A+ a* I! j, P! l0 a1 \+ F
// 除等于
' P$ v0 \6 M4 R7 |7 n; M3 m; r&gt; x /= 2
1 _2 \* `8 H2 K: y$ W4
5 u8 ^7 G8 }3 j7 d" b9 R</code></pre>( f3 ?. F  W- E
<h3 id="25-流程控制">2.5 流程控制</h3>
7 U' y# n/ i% z+ B" W; _) t<h4 id="251-if">2.5.1 if</h4>& {$ {& O' b$ W) K
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}/ y- N! A5 C( G* c$ b

$ e' B: s" Z2 q" D& P" B&gt; var x = 3
  }: a# a1 q, u* e/ s0 V5 Q, L&gt; if (x &gt; 2){console.log("OK")}
# e# `# {: R# }( W' E OK
, t6 P: j: ]- p( P- T; i6 Y. o; P% a! i* _8 E: z, H! e
2, if(条件){条件成立执行代码}
0 Q+ i) N8 E) A! x) M        else{条件不成立执行代码}7 [6 M" l' W- s) s4 o! r% a8 X! t
% ]0 k; W" q  l) k0 K2 w
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}1 e/ @5 A  b2 n! v) a0 U
'NO'( d+ Q' b- V/ Y  w0 y, X( L
; I3 v" E3 w$ L, a( `
3, if(条件1){条件1成立执行代码}
( I4 |5 w3 m; p' Q3 _$ n        else if(条件2){条件2成立执行代码}" B+ g" h( S0 @% |! U9 E
    else{上面条件都不成立执行代码}$ t% Y6 j1 `( e* d) }! T5 J

; n9 c6 Q1 L8 M2 k- h&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}- `: o7 b2 `; S  D' {7 C: o% T
Ha0 u  H3 L' W8 f6 H9 _
</code></pre>" A7 ]  a, j  i. R& |# c- n* ?
<h4 id="252-switch">2.5.2 switch</h4>6 t/ a3 e% R' I) Y7 P# Q" b- |
<pre><code class="language-javascript">var day = new Date().getDay();
; j- F9 p7 |  R3 ~7 x5 J! Z" p) iswitch (day) {
) n$ Y. c9 w! X% e! H7 k  case 0:4 _  D; X  a: A& @
  console.log("Sunday");- j/ b. h$ s3 E; C
  break;
8 b! h% K4 |( d, Y* c% |  case 1:# F' y$ W/ G+ h. T6 @. Q7 L
  console.log("Monday");( n% J4 h0 [( P, ~& d! T  a7 e+ _
  break;- M- A9 g& x9 g" x2 v: o" D
default:
8 o: l0 W3 b0 A  C' n0 Q  console.log("不在范围")" e9 X$ g3 E* t. }, w2 l$ ?
}
; g6 j+ ]5 {$ G 不在范围" k$ s2 u1 l5 w/ C: S6 r
</code></pre>) E2 e4 p( I, m0 A1 ^# H" S! c! e
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>/ w8 S# b! _; J8 D5 E7 q; n
<h4 id="253-for">2.5.3 for</h4>
0 \8 o; r* T9 g7 |; Q2 y<pre><code class="language-python">// for 循环9 S: `0 L: ?# r" N) ^" y/ J
        for(起始值;循环条件;每次循环后执行的操作){
& H3 t. v5 d4 v! R        for循环体代码2 j  l$ Y) r+ Z6 n' u
    }
" w; s) U/ w8 ?# x# o. g# ^0 K! v2 q5 U1 }
for (var i = 0; i&lt;10; i++){, c5 y/ w, y! d; n* _
    console.log(i)
0 ]5 t2 Z( T- D; @4 q9 s}
! u( P+ f7 ~6 w4 d        0: Q# q" g6 e1 s
        1
6 c. U$ S, l% ^' K4 S        2  o( d1 R5 Z& L2 _# V
        3
- g4 y! h$ Q& H* U        4! I1 q+ N+ K" _6 w/ z8 l' l6 Q4 Z
        5
7 l, w& f. ~( \5 F' N3 D* P        69 C( A' X9 h. T1 R/ t5 g& B
        7; Q8 H, u! p. s! D
        8
& I$ n% r/ R, w8 J& |        95 c7 w, ~; X: c' Z
</code></pre>
- {0 l* t1 B# m( i) A<h4 id="254-while">2.5.4 while</h4>
9 _4 `% N- i: S5 ?, K4 ^' E+ I<pre><code class="language-javascript">// while 循环
7 ^0 e, G, C5 a        while(循环条件){# ~2 s- i" o; b3 R$ I2 S+ ?1 N
        循环体代码
$ \0 A/ t9 r. F% [8 C    }, r. V+ c! H) f2 `( o$ ]0 ~

5 b6 m& R7 m! y+ K0 s, }&gt; var i = 0
% \& R* O- A$ m! p, i. L&gt; while(i&lt;10){
3 K' C) h$ z* E; w! g    console.log(i)
: j- ]5 r/ [- y) k0 ?' |    i++
5 H+ ~8 p+ c) g$ \' \6 i' N! \; f}
2 c* C% d1 ]+ P$ x  Z 0
5 K  Z3 u# ^0 S' L" d 1  T  n; v. e4 j! {' n9 r( J
28 D" P/ \& i: n
3
$ h3 w3 f; O6 q& T+ v7 r- a 4
* Y, L4 X! X# X 5( q+ B7 K6 n* j+ `9 l  |9 r$ @
6
" L# o: R* J* n' O* b& V' K% J 7% L9 d7 E  r3 {4 \' K& @+ N3 _
8
  U. f7 G- o0 X; g0 Y, s' C! Y 9" c$ X4 j# [% o* J) x& O, a
</code></pre>( E, p7 z5 a, H8 _0 ~, l  A
<h4 id="255-break和continue">2.5.5 break和continue</h4>5 h- T8 |, I( A5 |3 ]
<pre><code class="language-javascript">// break5 F3 f, D. u! |
for (var i = 0; i&lt;10; i++){
" @$ M2 U2 {% {3 L    if (i == 5){break}
" a. O, D. K7 s3 ^3 q  R/ R( ], L    console.log(i)$ a5 i5 j% k5 j9 k
}. p6 l4 C6 b4 y
0$ G5 i3 X5 Y  c4 T3 ]2 `# F6 }. K
1
$ x1 t+ l- h2 }& j: e) V% x: ? 21 t' S* k# y$ `0 S
3, m# M# Z% q! S3 h" V+ u
4! s) @- A8 c" P: k$ k3 \
// continue
* O+ \7 Z  [# ~5 `for (var i = 0; i&lt;10; i++){$ j) \3 {/ W8 ~$ k& V% Z2 [4 \) Z
    if (i == 5){continue}
5 y+ Q4 {, F' j3 @' M' \' `9 f6 T    console.log(i)
2 u6 @. z# i/ F- O6 D" }( P}
( Y5 d' O  _3 y7 H* `9 { 0( c. K& S% `; E
1% A$ j- M; `6 c, _: \$ I
2
4 {7 Y( m& M6 Q; B 3# i7 P6 a/ t! Z8 `# m7 v& ?; n) N; E
4# U/ i: @" B8 n9 Y8 w- C; m
6* d1 j/ H* n  L& U9 b
7% N& L! ]! G( H2 w( P
8
* _- ]8 [3 E- }6 E5 \! A 9
7 X) I3 o3 x# P1 l3 {
# J, K9 F* }0 s- C+ r# k</code></pre>0 S6 N( s$ a# M* o( ^8 s' ^9 ]. B5 Z
<h3 id="26-三元运算">2.6 三元运算</h3>1 U; a0 z& \1 \- k/ d
<pre><code class="language-javascript">&gt; a  f2 }7 A7 x0 c5 r% J8 u
68 a$ W7 S, y1 Q2 V
&gt; b  W* c% I( K! C8 u* L0 f7 t
3
. G  w( K* D8 B. R% B: Y9 A: ]2 R5 ^! Z! m; O7 V2 e
//条件成立c为a的值,不成立c为b的值
& o# ^+ V3 u# k. Y: i&gt; var c = a &gt; b ? a : b
' u. L8 H1 J- t( C&gt; c8 e; l" `! V( ~) O" K) A
6: J8 Y' B; ~* I; T' i% `( o" {

5 Y: m, V% o3 H$ D6 x/ b0 }+ P// 三元运算可以嵌套
  T& w+ z+ p/ ~) q</code></pre>) {, ^  ~- Z8 v2 G/ ~
<h3 id="27-函数">2.7 函数</h3>) g( h1 w- s& a% W+ ]4 ?
<pre><code class="language-javascript">1. 普通函数. `1 h) ~9 {! Z$ X; t. A  z& j1 n
&gt; function foo1(){4 ^2 C9 b6 @/ i* I! A
    console.log("Hi")* g  Q! m, n  Z% H* H# ~
}
, X  n; G2 b& i0 S3 s$ h1 U
3 u' \( V6 i6 T8 ^& b&gt; foo1()
  O+ z6 Q  {! u- D6 V        Hi
& g3 Y& @: X& U) w3 n2. 带参数函数
! E& X1 {/ _- Q7 }&gt; function foo1(name){
9 r- z: ]/ a& Y2 yconsole.log("Hi",name)
, i$ q# r7 I3 s! N1 Y}! o4 e2 }/ c) v. l' {
! O& e" ^0 b6 G& M1 M) b
&gt; foo1("Hans")
8 K, K  K5 m, c$ uHi Hans3 ]# J( c6 M9 Z$ r8 Z1 Z
/ {' r9 Y' O  @) \: ^& }
&gt; var name = "Hello"5 Z2 D! G7 b3 H+ e  B; E
&gt; foo1(name)
8 H) L) z0 y) M: V! O  \Hi Hello
# P- L. {8 [& B% z
% M* n6 u+ J) X) V( C3. 带返回值函数4 j9 U  f$ ^( f9 F( h
&gt; function foo1(a,b){
+ V7 q- r6 Q; q& l7 @$ @        return a + b   * Y  I* J6 T5 e/ I& f
}. }* S; a2 H% a; y7 D. d$ H0 q
&gt; foo1(1,2)* G8 H7 h$ g0 W0 x9 N' s+ ^
3
( b* p8 E, a+ l* V&gt; var a = foo1(10,20)  //接受函数返回值
: G4 w6 c0 h- R3 c/ ~( ?, H5 v  F&gt; a
/ T  ~' x, ^( j' t+ F30/ [, C+ D3 @6 n$ `% p7 b+ a2 H( h% o
6 d* A2 H8 E9 Y. m
4. 匿名函数
0 @. t# c: }: ~8 f&gt; var sum = function(a, b){
" m8 K' e. o2 _2 g; K: Y& M1 H  return a + b;$ K& u+ ]7 N' l4 f5 k( |/ F# F
}
$ H3 W: s' h3 u: p&gt; sum(1,2)
9 J" G! T% O, O4 F: P1 |- ?3
4 e3 Z$ x9 l3 j3 r; B. e. b8 P6 |1 O+ z# Y: b
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
- k. b8 E, [. p&gt; (function(a, b){& Z5 y/ z1 q6 I3 A/ b+ |
  return a + b
( Q" j8 h$ N- c: N( Z5 l; N})(10, 20)
& ]0 a5 v" e8 }30
. |: b6 C: e$ e4 j, v" ~) }4 ^
! E3 Q- l0 M# ^5. 闭包函数
$ p  ?: T0 M% K' H// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
4 x: e( B# g$ [% [4 lvar city = "BJ"3 G, S( C$ W! Y
function f(){" ?4 e- E* f- V& T
    var city = "SH") x+ C1 A' |3 Z
    function inner(){
* f* c1 @" M  C" p+ M$ E        console.log(city)
2 V' n* A- y# Q" A' F- i# s# ]    }
% H' j: z. x7 K0 c    return inner3 S* z, S/ j; z' V; d# @5 u
}. b; ^3 s7 I+ y; }3 `; L/ T
var ret = f()  D; t, m; R9 e
ret()3 x- x. ^; d0 P1 U3 L
执行结果:3 \1 e* I7 ^' J( H9 z+ f
SH6 |! q. B9 S7 `+ b0 b- c, c, U

0 m4 E' O$ i/ K0 q" [! Q1 T</code></pre>
5 s- e$ d0 ]7 s- L<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>/ I1 d0 f3 r! V& a8 D& O
<pre><code class="language-javascript">var f = v =&gt; v;
" {  r8 S( n" ~3 Y$ O// 等同于
! Q7 I; y; q+ \4 @; x- A% m  Nvar f = function(v){
$ y. `! k! R* u# n  return v;! Z* @: I% I/ Q: I8 U( n
}, @4 z2 O8 {+ W. h1 i% C1 T
</code></pre>
( E9 A6 N9 F, u7 W" x# d# q<p><code>arguments</code>参数 可以获取传入的所有数据</p>
0 j, p- }9 B; O; Y2 f1 V% G4 I<pre><code class="language-javascript">function foo1(a,b){
1 l9 T' `9 x- W8 N/ f& u    console.log(arguments.length)  //参数的个数
4 c" K+ V7 r9 G8 I2 ^    console.log(arguments[0]) // 第一个参数的值
# x" f4 \8 Q5 T( B1 D0 e3 {        return a + b   
1 f% e3 n( N0 y4 E' l( p}  V3 \2 m' l/ b% J  Z9 y: ?
foo1(10,20)
3 S0 w5 y" e+ c. R  ]结果:
8 i4 a7 ?8 e, R 2          //参数的个数
* o" l' K7 ]) K# ^# z10        // 第一个参数的值
8 u5 H9 Y3 u" V* p4 Z; Y- b30        // 返回相加的结果6 B6 ^, T/ e4 C1 E  Z0 N+ e- @
</code></pre>
# A9 ?+ c* W7 P1 L" d. P$ F<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
1 G  F7 b! `3 y: [& i" ]3 D4 t<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>( ?7 {/ b2 c5 X$ G3 l
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>& `! q; A$ [7 C  s: p( j# \
<h4 id="281-date对象">2.8.1 Date对象</h4>
2 Q0 i5 ^  k4 u# \# [$ F<pre><code class="language-javascript">&gt; var data_test = new Date()7 j  L5 C6 U+ J( ~% a, e$ {
&gt; data_test
1 w) h0 x- ~* |+ V, I# G, `3 uFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)1 U* _+ f% P2 B* U2 I+ v9 K
&gt; data_test.toLocaleString(); z# \7 x  {2 x& R
'2022/2/11 下午9:44:43'
  @7 x/ [8 Q  j9 F/ n4 m" \
% d5 e# w# t8 _- |&gt; data_test.toLocaleDateString()
2 k& w8 E) g5 q# T& f3 X: u'2022/2/11'! L' Z8 T$ R2 G& D6 s1 y

2 X' _8 O) }: Z* S- x&gt; var data_test2  = new Date("2022/2/11 9:44:43")
, C* {8 e/ s! ?7 d: ~0 w&gt; data_test2.toLocaleString()
8 y0 f7 O7 j/ x$ e'2022/2/11 上午9:44:43'1 X6 o, j# ^; S4 t+ o$ ]: v% D# ]8 P& V

, a, I& |# a+ K" `- b1 R! g// 获取当前几号
* c# p  f3 D8 ?+ t9 C% P3 ]&gt; data_test.getDate()
! k; F) A+ ?: j) W119 _- k: A% I& H0 o' V% i+ O( d
// 获取星期几,数字表示
* V4 c5 n3 x! K+ @3 m&gt; data_test.getDay()  
9 [1 [0 o- ?0 Y( S3 q5
3 U" {" }* z5 s7 m// 获取月份(0-11)
- K/ k' P5 Q# g3 d3 v&gt; data_test.getMonth()+ ^& O- U: {$ G
1/ V: o9 j, p" z) P: N+ j2 c: q
// 获取完整年份
+ q+ j/ T- `: M&gt; data_test.getFullYear()
8 \5 [: ?- p. g3 }( a2022
8 W9 L; M" A, O% F  D% L// 获取时) f, _( r9 X' B
&gt; data_test.getHours()
) i; {" {3 Y" O: r21& X% i/ R+ R: C% k6 w% J( J
// 获取分
% N& v4 n2 H4 v. x) h&gt; data_test.getMinutes()
! F1 `; e9 g/ a( f44
8 _+ Y& g" o$ \7 J3 z# M// 获取秒7 b& k& H+ v$ T" F
&gt; data_test.getSeconds()6 I& V8 |3 R/ h0 N. V( t
43
# {- p, ^1 x: l: @+ A// 获取毫秒
$ f$ ~) C- h1 `" q: B0 y8 v/ f# d&gt; data_test.getMilliseconds()
& d9 h$ z; J! m290
# Y6 n/ e3 f+ N# W: i// 获取时间戳
8 W/ i" T+ B+ D5 e& T+ `/ P+ a&gt; data_test.getTime()
2 [, v0 C7 {! E: _0 ]1644587083290) a/ a. h3 _* n6 W
</code></pre>
, y  n" g4 q* G" l: p  z& j<h4 id="282-json对象">2.8.2 Json对象</h4>
0 K/ A" ~+ T' T<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
6 f- I' S0 z. w5 e+ m+ F4 ^JSON.parse()  // 反序列化,把JSON字符串转换成对象
6 Z8 J4 [! V& o& {; w& e$ }& F- G* t  G
// 序列化
$ t7 U- j' x3 J! y1 {3 a  K&gt; var jstojson = JSON.stringify(person)
, v1 ?* n% l, P; t&gt; jstojson  1 N& P, p# }" }  \) R
'{"Name":"Hans","Age":18}'5 B: b3 d! [  p$ E

- a1 ]. B0 i/ @% p( J* H. R8 e// 反序列化
% ~6 M5 Y9 U5 ]1 x3 |4 q&gt; var x = JSON.parse(jstojson)
5 P! a; }4 ~9 `4 E2 X- o+ ~6 _&gt; x
' J/ I- t4 e) M# S2 }{Name: 'Hans', Age: 18}4 P* @. u0 Q: I( S2 B) g4 L9 T
&gt; x.Age& u4 m! k. }! s; l
18
) T1 z# J6 ~$ _+ V</code></pre>
+ v2 b9 }2 v7 C2 ^! U& k! F<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>2 S  h+ b6 {2 |8 E; v: k5 P1 r
<p>正则</p>: Z: v& y( i' r+ ^: w" ^, U# J  `
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");# v* X/ R' b) H5 K* U7 i
&gt; reg16 X- _- C* ]  q* s7 v2 x7 A* t
/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ Z6 {2 A2 h8 B# ~
&gt; reg1.test("Hans666")
1 P# g9 U& @" d! e& V5 strue
+ A# K+ h4 n+ N8 W& ]& z- s- l4 n0 J  l' {: q
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
4 G1 r+ S4 C. X: b8 @  g( \! T&gt; reg2) J9 N7 Z5 v; @
/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ G; g& [4 Y6 h0 N4 [! H
&gt; reg2.test('Hasdfa')) d$ I) ^5 p- R% `5 N; J! g
true
9 Z3 `" k7 d: K, O0 P) `- K; O
4 D2 _4 C( J0 m( t  N9 b* ~- q3 R全局匹配:
% o5 l- _8 |6 K% q&gt; name. H9 k+ k9 \5 o& [  }
'Hello'1 P) V) f5 c4 L5 s, z! u
&gt; name.match(/l/)8 \% C; {# b0 R
['l', index: 2, input: 'Hello', groups: undefined]/ Z  O% D* N# K" W
3 K$ f  E1 x; F/ l
&gt; name.match(/l/g)! l* \, }9 T) P6 d* C
(2)&nbsp;['l', 'l']( B8 B1 p6 e2 F7 @5 r# ]4 c
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
& m2 q7 ^# M  j. I
5 U" P/ C- }% E# G/ y全局匹配注意事项:
3 Z" ]# q% q$ J( m9 U$ A&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. {0 z3 e. K6 C6 A7 `&gt; reg2.test('Hasdfa')0 D4 S2 H( S5 t, v; N
true. x' n: M% G$ {2 N6 O2 T  i
&gt;reg2.lastIndex;
+ X  |/ `6 E' r% C1 h" h3 o6
8 n1 S7 z, s+ ?: ^1 f0 L&gt; reg2.test('Hasdfa')4 U* M* ?; L# ?# e( c5 q8 X7 J4 [
false
$ x" E* @$ V7 u5 w* q# q&gt; reg2.lastIndex;: b; }) M( e: L8 O; O- T
0
  o0 B5 g  J! v+ M&gt; reg2.test('Hasdfa')
- j& W- L' W$ T. d6 O  k0 ~" o/ o% D; @true% h$ o4 y: Y4 c6 m  j
&gt; reg2.lastIndex;# s5 {. u$ h) @
6
% M7 x3 v' u* l- [: x- z( s0 b&gt; reg2.test('Hasdfa')
' k* C: z7 ~( I4 B' xfalse5 u" ~% U9 j$ y5 L; d# T: |7 Z
&gt; reg2.lastIndex;
+ |- ^& r8 u, v& ^( l/ k6 I3 j3 J0
' e$ t. i! Y8 a" N5 O// 全局匹配会有一个lastindex属性
5 o0 k4 M* E' o& s&gt; reg2.test(); E; h/ g- l$ K1 w1 j
false
8 d# t4 P! Z3 H4 ^/ B( w7 s&gt; reg2.test()
- E- G8 a2 S7 w  ^9 Q! o: w% P& xtrue
) y. @; U' i" q7 _  _// 校验时不传参数默认传的是undefined
% T: j2 ]7 L* ?, w2 C- T/ N</code></pre># T0 r6 _; u# I% n
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
, u1 T# B' u; j$ z/ M. E<p>就相当于是<code>python</code>中的字典</p>! Y& a1 H& ^" X+ }
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}4 F) J$ f- ^0 W+ W! u2 T% N. N; A
&gt; person
5 F! q$ a# \. Z{Name: 'Hans', Age: 18}6 D+ _3 \' x- k; s
&gt; person.Name1 i) ~6 H8 Z7 C# r. u7 U
'Hans'& \% Y+ ]; n* {9 o6 s2 ]
&gt; person["Name"]' A0 ^- W. Z4 e7 N+ r
'Hans'
( T$ n0 R' r: m; ]* k8 g+ j. W' v& Z5 s  n" C6 Q' _
// 也可以使用new Object创建
  v# Q0 t. L1 h( E7 o0 Q&gt; var person2 = new Object()- y* O. ]/ p/ z/ H+ a
&gt; person2.name = "Hello"
6 \7 j% O- R4 U; Z9 Q) J. C2 ]'Hello'
/ d) t! Q1 N; m: @9 Y, K&gt; person2.age = 20" [# e9 o9 f! C& y& ]6 v9 T
20
3 D5 A$ ]) o, }</code></pre>* n8 g7 |5 X2 i2 c
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>' {, R9 @* p' S  R
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>, _/ C! n+ J- f- }4 I; s5 y2 i
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
! M$ w3 o5 m( n* d<h3 id="31-window-对象">3.1 window 对象</h3>  b) J# j& H3 v; H: R
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
' G/ K& l1 z* ]3 _& k<pre><code class="language-python">//览器窗口的内部高度
! h6 e: u, y5 @% C( d7 k7 J4 |. Cwindow.innerHeight 4 x8 X# T& @3 L9 y: x# h, W2 K
706
/ v/ y  A' {+ y' w//浏览器窗口的内部宽度9 B' `1 {! t1 f& i
window.innerWidth
+ p+ Y; u' M2 i, o0 f1522
" [1 j0 a* q' C// 打开新窗口
8 C6 O1 v7 [9 L2 wwindow.open('https://www.baidu.com')' s! O, d2 T& o" d; J0 X6 N* k) Q
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}& z9 Z( s) E3 U/ [4 Y: [
// 关闭当前窗口
9 N9 |2 x+ F" w( Q' rwindow.close()
; Z2 Q* J% ~( \3 z* z3 t. M. [- x//  后退一页
# }' k$ Z$ g1 d2 ywindow.history.back()" u7 C+ ~' C4 s- {6 j: |
// 前进一页" D) n! a5 R: N1 v. \$ R
window.history.forward() 6 U& Y7 N( |% t5 E# ^8 K( J
//Web浏览器全称& h3 _) N+ N5 u4 M' w7 M( S
window.navigator.appName& o2 y" ^/ C+ K, ]" y
'Netscape'
3 i! D+ a: v6 A; x// Web浏览器厂商和版本的详细字符串
# S& {6 L' X* e! Vwindow.navigator.appVersion1 d% W  p- B. t9 ?5 h: V2 p6 Z
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
& E9 D: r7 H: m! c// 客户端绝大部分信息% ?3 C3 w. U' |1 H7 k
window.navigator.userAgent
5 k0 i# q# p  x0 E4 f'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ W3 D5 `" P' y9 a0 @
// 浏览器运行所在的操作系统& Z/ w3 w$ X9 b* ^1 s- U
window.navigator.platform/ A0 f* }: m: ~7 T
'Win32'7 r1 A! c. S# R

- Z% J0 T  U6 s. ~+ T' [6 U0 W//  获取URL
) r/ w- W6 a  lwindow.location.href# y9 X$ d  z8 i4 T/ D
// 跳转到指定页面* M* U  H4 E0 m0 ^3 M  b8 X
window.location.href='https://www.baidu.com'
% {: J4 R% {! [; L2 N1 w// 重新加载页面
; l$ ~/ d! C5 w2 mwindow.location.reload() 5 A3 D2 ~9 ^' x
</code></pre>* f7 W* y) t0 j. w9 x
<h3 id="32-弹出框">3.2 弹出框</h3>3 M( P' K/ m% C- {7 J9 X# ]4 o
<p>三种消息框:警告框、确认框、提示框。</p>+ L: C  t* I$ S- H. C! Z
<h4 id="321-警告框">3.2.1 警告框</h4>" z8 G# P) {* |5 z( V
<pre><code class="language-javascript">alert("Hello"): g% S+ I) `3 o+ l% [
</code></pre>- [; _9 [* B" F7 U6 o
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
; f9 Z, K& G! C<h4 id="322-确认框">3.2.2 确认框</h4>3 i9 N3 Z5 j% w
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
. w! |1 W, `$ k% N<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true% S" V0 F3 t! I' W( o7 I
true0 d% o1 S( W2 s! p7 q& {6 Q5 K- e" C
&gt; confirm("你确定吗?")  // 点取消返回false
" [) d% h( }: N. a4 Tfalse
( [: N- v" I# b1 n0 O* A$ t( P- b0 b</code></pre>
" \2 Q: _% \, v9 _9 A4 {<h4 id="323-提示框">3.2.3 提示框</h4>! L6 |4 h3 J  O, b
<p><code>prompt("请输入","提示")</code></p>2 _! |, d4 F4 e& H
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
$ T1 W0 {. M- d& Y+ t0 w* W<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
" K! [7 N: B6 [, Y& X<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
; s6 B- o& K5 ^$ D+ @% G<h3 id="33-计时相关">3.3 计时相关</h3>: I) W4 B5 A5 x, q4 }& m
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
1 a: s1 e! `4 `7 b  H$ D+ e<pre><code class="language-javascript">// 等于3秒钟弹窗9 Z1 H6 ?8 e5 c3 v& U
setTimeout(function(){alert("Hello")}, 3000)/ _2 A: H, ?' B$ {

9 N5 u0 f" t# \var t = setTimeout(function(){alert("Hello")}, 3000)
& [8 V3 w; m" i$ l  B+ N) `
1 F" }8 f9 N+ U  g& j) ?// 取消setTimeout设置
) L, Y% L1 C: s" P. aclearTimeout(t)
* e; m7 R8 z6 Q* J4 l- M</code></pre>
4 S9 @; b& W9 d( y( I' ~( C: d<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
# t  A1 v8 R* S/ ~$ \" h/ Q, b<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>$ @+ H$ w2 X+ `  |, F; o# f: s- `1 e
<pre><code class="language-javascript">每三秒弹出 "hello" :
* n7 Z' t+ V# ZsetInterval(function(){alert("Hello")},3000);4 N' ?4 z4 l6 K+ [& f
</code></pre>* O& Q) q7 q5 L. W  G+ y( Z
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>- ^# E& z) }* w: k3 |( Y2 p
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);8 N1 h  x7 H* l! s' u8 X
//取消:% b' o; {8 o9 O
clearInterval(t)
& K- V# Q. d" Q4 j! x! V</code></pre>
# L1 I+ x% b! l; R
2 W* h5 {8 y  }% y- c
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-17 13:40 , Processed in 0.074320 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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