飞雪团队

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

前端之JavaScript

[复制链接]

8119

主题

8207

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

  j7 m. W! F# E- _& _  s; }8 O<h1 id="前端之javascript">前端之JavaScript</h1>$ n( Z4 L4 m, ]7 c  `1 c3 \
<p></p><p></p># \2 r2 q# {. x* a: z2 o0 B
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>& a% }$ ?2 R! W! t
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>8 j" H' q6 M1 l# Z! t
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 ]2 H6 {! q8 T, L% U) c& d它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>! E& j% ]0 {; ^" ?- L
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
) u/ ]/ m5 v, y6 |7 O<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
$ Z9 U$ D  O' S; y( i4 R% ]. x! B<h3 id="21-注释">2.1 注释</h3>9 D9 n8 R) @+ u2 j
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
2 ^+ y+ n. V5 @4 X& o<pre><code class="language-javascript">// 这是单行注释
3 r- x% s4 V! |3 i8 s( j
5 ^2 {' q2 T  v% b3 q/*
! a# @( m" o. ?# O这是多行注释的第一行," w0 e3 B/ ]- S6 u$ v2 j
这是第二行。
1 l# ]$ ^, v6 V9 E" ]' w*/4 H1 ?) |$ l/ e% Y
</code></pre>4 f( f$ u. Z3 V" u, p; D6 G+ ?
<h3 id="22-变量和常量">2.2 变量和常量</h3>
4 I  x1 i* G8 R* X" W  r, B6 |( \2 W<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
1 ^8 ]4 ?; s$ r& B3 X! p) P<ul>
3 Z" P1 p( i, j; D<li>变量必须以字母开头</li>
# j* d8 s' o3 F* G9 P0 {<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>: x& C9 e) E( \+ G" h
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>; Z/ ^  z9 f4 S; V5 r- O7 u, i
</ul>
! p/ s  G5 B8 n<p><code>var</code>定义的都为全局变量</p>6 d) Y: c/ r  z5 _0 m9 Y2 L* I0 P
<p><code>let</code>可以声明局部变量</p>3 I+ I; {6 n8 L* H: ^
<p><strong>声明变量:</strong></p>
7 ^# ?3 E3 ]1 H6 U<pre><code class="language-javascript">// 定义单个变量. {% k! |2 B7 Y3 F4 C( |. B3 F
&gt; var name" ~( A: s) Z5 V  ^/ Q; S
&gt; name = 'Hans'
8 |5 S" v" H0 I+ V% Q//定义并赋值
* o" R* D$ j* l, C& o! V&gt; var name = 'Hans'
  T9 s8 {( s! }! f# y( O&gt; name
' Y$ h' }8 s& y0 A* [5 @'Hans'
3 n" I' _5 E9 U. X+ T
/ i2 T; Q# [4 {: b8 n: z// 定义多个变量
; m; ]- v) k) j+ a4 n( P8 C. Y&gt; var name = "Hans", age = 187 ~4 W" z2 k5 Q/ D
&gt; name7 B! g1 p3 y" q3 z# f) z% a  a3 `
'Hans'7 T) A  n  H, [& m% |- I
&gt; age  k  Z# q% N* c: M- ^
18
' [+ X& I* G1 r& N3 W" Z
# _" |5 a4 u9 N5 ]3 V//多行使用反引号`` 类型python中的三引号
% c; R3 W! x7 t0 [' R* S" [&gt; var text = `A young idler,9 n( h4 B  z+ ]1 N/ }. `
an old beggar`& I$ }5 B/ T9 e$ k
&gt; text% V9 Z; x* H8 k7 j! F1 T
'A young idler,\nan old beggar'1 R6 {) ]0 c( M$ p
</code></pre>- q6 T* G, t0 C& E( q
<p><strong>声明常量:</strong></p>
/ c, E8 @" x) @) @; v<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>: {+ q" z/ _) r; [* c, U* E
<pre><code class="language-javascript">&gt; const pi = 3.146 D) \. a/ \, Q4 }" i
&gt; pi' a" M# V% F! u) r) m8 b0 H
3.14
. h7 J$ c' S6 t1 e, Z" E- n/ b&gt;  pi = 3.01* W6 `% n% `5 o2 N5 {
Uncaught TypeError: Assignment to constant variable.
7 S3 C, u. r: o$ P0 a    at &lt;anonymous&gt;:1:4
1 t1 L" D; v2 v) j$ Z; ?& Z' y$ T
</code></pre>
+ l* O# v5 ?1 i# s/ L<h3 id="23-基本数据类型">2.3 基本数据类型</h3>) \  y* D/ O8 i0 e) u+ k& A
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>* ^# \- @7 D  G5 w' i
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>4 W+ u( {3 F! k. k
<h4 id="231-number类型">2.3.1 Number类型</h4>
- j) A$ d3 T2 D- v<pre><code class="language-javascript">&gt; var a = 5
& M2 ]) [. P; w&gt; typeof a   //查看变量的类型  ! _9 R: O8 H+ a& l% Z. R
number( }2 z2 q8 D. s0 D6 I

6 i4 f9 Z8 A! J* U&gt; var b = 1.3# d$ K& x1 f/ S0 K( ~0 t
&gt; typeof b! g  ?+ y2 T7 f# ?2 Z
number
9 D# |' K7 C7 i' X7 {, `: d0 x" {( H3 m4 Q
// 不管整型还是浮点型打开出来的结果都是number类型, t3 N! Y- |0 L: P% Z0 b

6 B' Q' k4 `5 z/*) `0 ?! c1 `5 e' t/ y
NaN:Not A Number
0 U9 u4 i4 ?5 L# N2 [: s1 TNaN属于数值类型 表示的意思是 不是一个数字
8 ?& |) ]3 h$ T*/
* h7 ]7 C/ {9 z$ k: j4 @
: q0 r' _7 `, v% \parseInt('2345')  // 转整型
, c5 V) T4 I0 b3 I) K2345# n3 k1 n( P6 V
parseInt('2345.5')
! `- ^4 U/ ~  k2345
2 G  N+ r- U& B' ?8 r) ^parseFloat('2345.5') // 转浮点型4 t! r6 C6 a  X' p) E# D3 a
2345.5
$ H+ l8 c/ i+ N. iparseFloat('ABC')8 F% `# [5 U8 a* ]2 }5 v5 I0 M
NaN! C0 q. c4 e8 r* I& r. Q! \
parseInt('abc')
3 v0 f2 b' ^* @! o" V( MNaN
$ V2 c% T  }9 {* }</code></pre>
6 F8 h* g3 ^1 J$ Z/ \<h4 id="232-string类型">2.3.2 String类型</h4>( {4 _0 P1 P0 K% E" B
<pre><code class="language-javascript">&gt; var name = 'Hans'! w/ z& S6 [1 w- V. k
&gt; typeof name8 X: O! h; h+ ^; i' M. q5 L! m
'string'+ V, }7 s# _& G

5 @/ G. _# O/ m# l, X//常用方法
" a3 ^7 Z% z5 Z6 B( R" r* O// 变量值长度
( h6 d# @2 b( q$ r# i2 Z&gt; name.length
4 p2 H, d# |5 M( S# V1 C1 I2 D4# ^: U  g5 u" h7 \8 Z
// trim() 移除空白; g9 W8 x. D4 c2 C+ H% U, {& Q2 ]1 E
&gt; var a = '    ABC    '8 v  r" T  F; G7 N4 P) H6 }
&gt; a
. v) n" }$ V0 [  J1 Y2 p'    ABC    '
  g8 _  _/ l; d1 A9 a&gt; a.trim()
: h3 x% a4 d5 l'ABC'# T5 \% {4 ]  P# B# J4 x. \
//移除左边的空白8 T% ?; u* g: g3 g0 G( Q+ M8 w
&gt; a.trimLeft()
% |" B$ J8 Q# Y& b* ^+ `( Q'ABC    '5 a! F8 b' g$ J4 ^
//移除右边的空白
6 C! `, R/ D& X" [- J: f7 S&gt; a.trimRight()7 S3 j& B' ]5 \  h. W9 {+ A0 P
'    ABC'
% U( ?' r  F7 p+ K9 v' w5 j9 C
8 _. c9 q+ \0 W" t$ g" O2 D//返回第n个字符,从0开始' R# n6 P; V2 ]6 Y6 t1 V! e
&gt; name
6 A, ?, ~: O; I# Y, B'Hans'
3 }/ e: ]0 X; C9 }  Z, k1 x( W6 {&gt; name.charAt(3)
7 L$ X# ~0 Y$ ^! i: `'s'% J% N* N' ~. y& }; ?& C& R# O) _
&gt; name.charAt()
5 R) _, U! g2 r- N'H'# A0 O$ U! M( E" D1 M
&gt; name.charAt(1)0 X% a2 n, `: j
'a') G5 Z3 W- l5 e* Z" s

$ A! P& e( q- {! i* s3 }// 在javascript中推荐使用加号(+)拼接+ ?2 J0 v/ P% z/ i: G5 F: v
&gt; name
+ e" b% Y. m2 P  K, n; V# l'Hans'! i2 I! N- [  R. P& c7 T) G6 F3 u
&gt; a
7 a$ w% R+ ~  e7 A0 d'    ABC    '
  M5 _, g3 ]$ n  p3 x. V&gt; name + a  k0 T- _. Y8 m* i! z$ o% v
'Hans    ABC    '
9 R" R( y4 h0 M9 r2 N: w// 使用concat拼接( z6 q  C9 @$ p9 o: C9 C
&gt; name.concat(a)
, R/ F$ D; I0 Z1 s. X'Hans    ABC    '' g- I# C5 {' i% ?
- C  I. S( \% P" \( |! h( a
//indexOf(substring, start)子序列位置
3 E5 g6 K# r6 k
( w, _" a0 ?7 M: y3 P  y- P&gt; text
/ H3 T8 i+ X+ N0 F3 v'A young idler,\nan old beggar'+ d" f7 F& u1 C7 Y0 ]& |  z, V
&gt; text.indexOf('young',0)
( D. f; p' D1 z+ O8 [$ V2
7 t& w7 @3 t7 t. Z# Z1 I' N- ~# e  C; L# O+ ]6 U
//.substring(from, to)        根据索引获取子序列
. e) r/ u. W/ j: K- Y7 j&gt; text.substring(0,)
, H9 a' g, h5 P: [0 b/ `/ o- a3 Q'A young idler,\nan old beggar'9 k7 T( ], @2 D% j
&gt; text.substring(0,10)
' t1 P2 K$ p5 p$ P$ O- b5 n4 e'A young id'8 D! |1 ^* W* Y: Z
. @) O5 ?/ _( k# s
// .slice(start, end)        切片, 从0开始顾头不顾尾
4 _. G* I7 o3 |&gt; name.slice(0,3)
# @# J% L! P/ J- p8 `'Han'/ ]1 e$ P% q6 o) F5 [! V) ]
1 b+ |+ r: Y2 s  t! X1 J
// 转小写, H" ^& u3 Z3 T1 T  C
&gt; name
1 u8 B+ C6 Z1 G1 m/ p3 G# c'Hans') @  b8 M0 d2 e( V  W) a! k! ~
&gt; name.toLowerCase()
2 F! ?# ~/ C6 ~0 ~'hans'! _4 O  R: ~  O7 B! m+ r
// 转大写
3 U3 f: B2 s: z/ ?&gt; name.toUpperCase()
( @& t( R% |+ |3 R% i'HANS'6 b9 x4 J. w, l3 y; G' z6 e

: N) V) ?9 h) @. m8 ?; p4 e7 s// 分隔0 j1 d/ D+ S4 E; C4 j) M0 S
&gt; name& ~  Z7 G0 T% |- c% u) S
'Hans'* r: E5 ]- l  z: D- }1 ^& F( ]
&gt; name.split('a')
7 D' o0 t3 I" K  U) h8 M% d. m(2)&nbsp;['H', 'ns']! n( e: m* Y8 ^1 ^
</code></pre>" ]4 |! i9 z9 D  H/ ?
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>; ?. W% i7 x/ K1 Y6 b  R( q  O  T
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
6 Y4 a1 p+ I5 d2 [& M9 ?2 o<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, v' J+ z+ u. J( t. C
<p><strong>null和undefined</strong></p>
  N0 f/ `+ z" k3 H; {<ul>: m/ w4 M- U7 M% A0 w# m4 g- H
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
, E1 k/ c9 T! o<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>- K6 R. w. a9 g+ I: ^! W
</ul>
# I% `2 R! l& o5 @& h- t$ L7 d<h4 id="234-array数组">2.3.4 Array数组</h4>5 @9 q) P& o8 n/ }$ f+ Q3 a
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>9 M) i, z( v% X/ S# F" W
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 0 E+ d6 C9 Q7 n3 ^( r
&gt; array1- t. @1 M* U% U; T) _* _
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 d; P3 }$ L0 a# ^% G
&gt; console.log(array1[2])  //console.log打印类似python中的print; ^' y+ e/ O/ c
3
% ?- y+ t5 z5 h9 i% B// length元素个数' J9 O( X) V1 p* N8 j9 r9 t. j
&gt; array1.length
6 F- L2 t) u# d7 V( P* u6' h2 B" c1 n! B9 R1 [1 ~: k
// 在尾部增加元素,类型append8 y' v# {9 F. r( U0 }, U
&gt; array1.push('D')
% A4 m; c* F( D2 b; a8 ~7  K5 N# F  j' J, c
&gt; array10 D' a, z9 m, V6 E5 S
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
5 K, M8 W6 s& u& o1 f* c// 在头部增加元素
& z' M9 T7 j5 V5 f& R# p&gt; array1.unshift(0)4 s5 V0 U8 P7 P- J% y' y2 z
8  h0 H: O7 g3 E# y7 O. k
&gt; array1  B3 h7 C4 K# Q, B
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']8 L! |5 |0 u9 r  a( v; D# s, L
. v, u2 P( z! v" m
//取最后一个元素- V" W( ^. }* d5 R7 ~
&gt; array1.pop()5 |2 y9 x% l! l
'D') a0 e6 i8 S% q" R
&gt; array1
# m7 k: u" l" l(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! O! U9 x: {: [* h" G//取头部元素
% ^' ~- f$ z8 |: D5 @7 x% @* d! {- ^&gt; array1.shift()5 k: G6 s4 y; h1 R) ~2 l
0' v" V4 q5 \- L% b3 `" d, c: }
&gt; array1
$ @: O6 y% x& i' v5 f+ `4 o(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 ^4 }3 x0 p! {( Y9 l
1 t% L* E! L0 y: ]  `- j3 A- U//切片, 从0开始顾头不顾尾
4 ~, a; _8 ^1 T( I3 |* f7 b&gt; array1.slice(3,6)
. c7 H: ~' t6 W% [3 v) z, F(3)&nbsp;['a', 'b', 'c']+ a" I4 q; V3 v. Y9 h" ]6 K  }
// 反转
- Y! Q5 c& N2 g( L! t0 W&gt; array1.reverse()
+ i' u0 F8 O8 F, g5 E- @(6)&nbsp;['c', 'b', 'a', 3, 2, 1]$ A# g2 u) a$ n  e! _: U, L
// 将数组元素连接成字符串
; ~' }+ Y! v. ^$ w  ^7 ]  f. t&gt; array1.join() // 什么不都写默认使用逗号分隔
8 ~1 u" I' K* r" T9 S8 J'c,b,a,3,2,1'+ ~' k7 s6 x, }, y3 D5 l
&gt; array1.join('')5 H& A+ g1 G8 o8 {9 O
'cba321'
# |: _) x1 L" b! Z8 A1 \7 Q& }&gt; array1.join('|')+ n0 D$ a6 S1 @" k6 y  g2 L
'c|b|a|3|2|1'
/ Q/ [- Z, I! L" w: o& g0 x; v3 m  l( s5 h! N1 I2 _6 s
// 连接数组
( X3 N& r3 V& T" _( z; o&gt; var array2 = ['A','B','C']
& I6 b8 Q' B" W/ r4 ]/ C. ~; \+ @; @&gt; array1.concat(array2)
* }' M  c; p+ v* l/ F(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
. T3 e& g' u# \7 C8 A3 H" [$ N, t0 v$ U4 X! f3 ^+ {% u1 U' B; K
// 排序$ _: @0 |/ P# C- I& h4 |; O
&gt; array1.sort()
. l1 _5 b% Q/ V( D8 P" f(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# {0 d: {' Y$ ?& b
# J" @& c9 o. g; {0 r4 M
// 删除元素,并可以向数据组中添加新元素(可选)
7 X" L3 y; ^* o&gt; array1.splice(3,3)  // 删除元素
# t7 n- T2 v% `+ t8 ?& e(3)&nbsp;['a', 'b', 'c']& `1 y& L9 K: u1 {6 Z2 W( q) ?% u
&gt; array1
! ^3 x! B0 h; }$ L; N9 f$ A(3)&nbsp;[1, 2, 3]
5 k& i" @# _" r8 }$ q, K1 N) ~0 g&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素. D  N- ^" w& }( o0 L' L. t
[]7 V" i0 ~1 H! T& D! R
&gt; array1+ C3 _+ t# }' s5 `+ K' Y! F, {
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
) B$ ~" Q0 L$ d- e- v5 W* R
7 ^5 c0 |. ^0 F! M" y3 j6 I/*, M- t# Q$ C# I6 R4 F
splice(index,howmany,item1,.....,itemX)8 f* d( O9 H0 o) @
index:必需,必须是数字。规定从何处添加/删除元素。
  ], ]4 Z7 Z5 Q" Q9 L0 Phowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。+ [/ T' w7 i2 M! N6 H' U3 M8 f( M
item1, ..., itemX        可选。要添加到数组的新元素
2 N: u6 Y2 O4 j4 c" ^0 g*/4 j& J9 F  ~7 }5 I
# e' @; I5 @, D: L+ r' ]" p( ?
// forEach()        将数组的每个元素传递给回调函数
* U% W8 h: \. J: x) b  y! N&gt; array1.forEach(function test(n){console.log(n)})7 k! n' \0 k' i, b$ B3 v% E
1
* j5 R# t/ V' Z, m" L% _9 v 2
1 C$ X9 \4 {* h 36 ]( t; f8 r( d  A) F8 T- W
A
3 y/ r$ ]6 P/ v! ?+ ?+ a  f( a B/ P% M2 J4 D) N8 ^' J
C$ R/ h3 f. m) F
// 返回一个数组元素调用函数处理后的值的新数组
7 d& q0 P2 ~8 _* U- L+ h&gt; array1.map(function(value){return value +1})
7 r" n$ _# c+ E# ]3 f( ]; Z(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
3 M4 @6 R; m  _8 `  m  d- C</code></pre>0 q* U6 z+ x8 L6 E
<h3 id="24-运算符">2.4 运算符</h3>
4 I- L! Y2 m3 m- w$ g# t) F<h4 id="241-数学运算符">2.4.1 数学运算符</h4>  W2 N8 y4 I# l6 X! t
<p><code>+ - * / % ++ --</code></p>& z9 Z& t5 _# p) c
<pre><code class="language-javascript">&gt; var a = 66 V( n" J5 N1 m7 Y
&gt; var b = 3& X$ ^8 D3 a) b4 U0 P3 a+ j& l
// 加- B, z8 B4 N4 d
&gt; a + b
/ w; U9 w) s3 A  h9
) J8 T0 n! X8 L# b" G. _! q& F% \// 减. D: g% Y7 Z2 m
&gt; a - b
  Z/ b* U( I8 E0 o% s: e& h3% `5 F* T. U8 Q+ M( |* c
// 乘* {' ?$ J) `9 o2 ?7 Z% G* E% a6 w0 b. X
&gt; a * b
& }1 f7 b1 U+ l& }( W  |, N$ u18
! k1 |, ?' h% ?# D6 u, y9 P- p! A: c4 s// 除
; {# V$ z/ u. ~/ p1 A/ D+ m# {6 S&gt; a / b  C9 }3 p! G3 Q0 L- N8 ]
2) w/ Z5 ^2 o: D3 i
// 取模(取余)
; ]4 t9 b$ K  s+ L&gt; a % b
5 C1 ?  k: B" H. L) i7 O0( M" j9 m' x0 p* K) J% o& V1 S
// 自增1(先赋值再增1)' g" W0 I) P* L
&gt; a++
4 G7 _2 h$ N, I: {3 Q* H0 B6$ }) L* X) K7 u1 s" a% x. A* `
&gt; a  P, o" b& L/ c9 o! l
77 i. H3 E" ?6 x( N
// 自减1(先赋值再减1)# W- b' n5 t6 y6 p2 m0 R; o7 Z
&gt; a--, l& h; P8 h: d) K1 Y+ K
7
: d) R2 ?3 p- K) T&gt; a$ \" D4 m2 T& x5 }) O  }
6
) d7 @/ v4 N3 I// 自增1(先增1再赋值)
1 |, c! S) _) f8 X6 q&gt; ++a
( \7 v# ~+ H: l: Q& [7 L1 q72 G) e8 n7 b7 S' F
// 自减1(先减1再赋值)
) w" a/ U7 @7 L; Z# g% N&gt; --a  K. Y* T% F4 P# S* }6 t
6! Q- ^! C5 b+ i+ f4 D& t
&gt; a
0 p: U! ]9 \+ n1 ]0 [, @2 G5 `6
7 ~9 W! u$ Y, H' H2 l% q' J1 r9 _* ^6 B) b6 v
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
  H6 K* l& y+ J, |) w</code></pre>
' s  V* z* |7 b" \/ M- x<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
  m  Q" |; k4 H. u5 h<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
; _  I2 H7 X1 ?* E) m  W% n<pre><code class="language-javascript">// 大于
6 z, A$ o1 ?$ P5 a: H&gt; a &gt; b- W+ u4 f: b, t/ w  c$ [8 n& s
true
1 f. A3 u# X, @1 W9 d; N// 大于等于
- r' Y( ~( I/ p- `% M&gt; a &gt;= b+ Q8 j9 j* M3 M) G' y/ H3 a( t  b* t- w
true
; s1 P- K9 V2 P! Y1 t// 小于
8 D4 X8 f9 S. w- b3 \&gt; a &lt; b8 O* e* p* ~' p$ G. S$ n$ j9 D
false
% b0 y3 x* F1 i% R- e7 j. e- x7 }  p// 小于等于2 r! J( [- g; s% @7 u  u
&gt; a &lt;= b
. P2 a; ]' D: ], W! Z1 ^( Afalse& v: E( C; f0 f) Q3 d" _% p
// 弱不等于
1 H3 e3 I9 T5 ]) v! h&gt; a != b" `' Q$ H% D% W4 b# u
true2 r4 T& D3 o3 C8 c  T- Z2 s
// 弱等于1 @0 X0 l% |: n* i0 M
&gt; 1 == '1'
- ?9 Y" h" G' p& w. Dtrue7 L" u; T$ U# {
// 强等于
3 \2 f* |* ]9 a& r* y: X% q&gt; 1 === '1'
" S9 `' s& ^& w" {/ s, n8 J# ?false4 t/ p# @3 S' [. g) Y  b
// 强不等于: ^, \; Y0 B/ g0 C- ^  w/ V
&gt; 1 !== '1'0 j" O4 I2 l& E& y8 @. U
true! ]' V3 u+ V5 F% |/ U

$ x6 m7 s1 k, I/*: m* Y. V8 h# e9 M* P
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
' P5 s3 t9 t* }, [% Q*/
  R: M  X5 g- i9 P$ E4 _/ V: ~7 I</code></pre>
! h& _$ n7 W1 \<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>5 [4 u6 p6 F$ O
<p><code>&amp;&amp; || !</code></p>4 V( Y) l; q# o+ A4 i" i
<pre><code class="language-javascript">&amp;&amp; 与6 ^7 G$ v$ S7 o4 \0 G
|| or
, ?" B( M- N. h- I! 非% z& ?% P- {" l: a5 `8 @, u( X
</code></pre>
; L$ G1 g9 n* L8 T. h<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
+ f( U( H/ _/ |8 j, c0 P- |* |<p><code>= += -= *= /=</code></p>2 q) a" c5 M! _+ P
<pre><code class="language-javascript">// 赋值
/ H3 n. C0 m3 v7 c% O&gt; var x = 3: H/ U+ z: [8 S7 A
// 加等于
5 I  k: @: y# t% ]6 N&gt; x += 2
+ \4 O- J+ ^7 Z7 u3 x1 c5
0 N2 y: u8 [$ e& B// 减等于+ l8 `5 t2 j3 x" f- g9 a
&gt; x -= 1
1 q, o  x* I4 @# {2 o. b& u9 \" N47 \3 E  [  h$ p( X
// 乘等于* R. p7 A/ C# ]% ^3 H/ E& E
&gt; x *= 2, ~0 u" Z3 ^6 X# E! a. X& b3 M0 c5 ~
8
4 j& N; A( R# \) [: n- z7 x// 除等于
* h$ l3 y& S* [; ]0 `( b% X5 H&gt; x /= 2
4 y2 G  @4 B! m6 {9 H46 l+ R# e) E" D4 [* w
</code></pre>
3 e* p7 Y. [) j  m  r<h3 id="25-流程控制">2.5 流程控制</h3>7 O# H  j7 V! z# h* z0 X
<h4 id="251-if">2.5.1 if</h4>8 @/ ~. P* b1 p( z' h8 q3 G8 N( N
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
, h, Y  V8 G! \/ Z$ ^0 D7 n8 i! E+ _7 o# p! H6 D9 }4 k
&gt; var x = 3
7 `/ N! X! V* U2 v& K4 P- C3 {&gt; if (x &gt; 2){console.log("OK")}
5 p" N- o  O! Q% f1 x OK2 Z  X. c+ k0 S

% A, L6 ^. T5 M7 p5 _: @1 ~6 o. `2, if(条件){条件成立执行代码}
" y; {7 j7 C8 \, h% w        else{条件不成立执行代码}
, t1 A2 _  E) e4 \. O$ i1 G' M/ C
( i! |7 q  z, E8 `  v2 ]&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
. i; L0 X5 c/ t2 \8 n& D6 M'NO'
  t" c0 }* E( L* ]
0 t- ]; q) Z/ ^$ K1 ?9 \, h3, if(条件1){条件1成立执行代码} 0 d* W; z8 I0 ^0 n: c* p& e+ s
        else if(条件2){条件2成立执行代码}9 G: x( `5 R* _; y4 M6 q8 L" A
    else{上面条件都不成立执行代码}
! F! b+ f0 d' b* {6 B: w, N+ V; L+ r6 c) N2 F
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}' T+ z' d) |2 D# t3 b
Ha
1 R, k# A7 h4 @- L7 m</code></pre>& C" y; a- F) {" k) R4 n/ C0 m
<h4 id="252-switch">2.5.2 switch</h4>
5 a/ ]- `( _8 D/ t2 r& [$ r<pre><code class="language-javascript">var day = new Date().getDay();
  w* y$ V9 `5 f* S. c9 }& E& r+ Rswitch (day) {: V$ @8 n, V2 G
  case 0:7 ]* e6 o# a0 i* I; Q  o
  console.log("Sunday");
% F2 |( J' l6 u% F& ^1 B/ u  break;
" u! F) J5 _) |- _  case 1:0 ^$ I5 p' t" y6 @1 _
  console.log("Monday");, t7 t/ R5 v" u  p' E
  break;. Z# y! |4 D- V* D
default:
; r5 w7 E3 Z  M7 M3 z( [: a4 T# B' ]  console.log("不在范围")1 @3 @! t1 C& e/ Q" i
}+ {+ T* e" c  h& K
不在范围# H$ C; ?0 Z7 s3 U
</code></pre>2 L' R$ @" d8 d5 F  }' u6 i
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
7 O8 k( L- ~% J" |, x0 T( N7 @<h4 id="253-for">2.5.3 for</h4>( i# ~4 q% d+ t9 J8 s, T; [+ Z
<pre><code class="language-python">// for 循环; K/ J: ~( d* s( x! S6 Y9 t) @
        for(起始值;循环条件;每次循环后执行的操作){: X. w1 z+ _% [& @9 }% R& o& C
        for循环体代码
2 {" `! Q1 C$ ?7 C, j& @    }
4 d5 j1 T) u8 ~3 {6 _
/ ~- e  k8 X3 P( ~2 Qfor (var i = 0; i&lt;10; i++){
* R. d) W$ l/ z, V    console.log(i)$ \2 D9 l# ~8 o( O
}1 ^! D! V4 D& w9 |* n. w
        01 K# E. v) Y0 Z& ]' I7 U9 S! a
        1
4 G/ b% r7 R4 {        2
) Y- O# F) e, u/ ]) z        3* `6 ~$ V& W5 k
        4
9 {5 J; W- l7 B7 v        5
9 ?3 A# X; f7 h  R# v% b2 s        6
* P8 g5 l; I) j2 b' p        7
  O1 A, b) D5 K9 m! U( G        8
9 b+ O/ }& v- m1 r( Q9 _        9
( X6 k8 D' {( y6 |</code></pre>, v( f+ d, x9 G  I0 p' x
<h4 id="254-while">2.5.4 while</h4>
8 T. i5 g! j- a0 b: c! l<pre><code class="language-javascript">// while 循环8 i+ W4 X3 [  i
        while(循环条件){0 S$ ]4 a$ X& p' W6 m
        循环体代码
1 n' Y3 F- v/ }0 ?    }: Y* t2 \+ M, V9 R

# _% n* \: X$ F0 R, B/ I! @6 Q" k&gt; var i = 0
2 @* @' j7 y) o+ B% s- z&gt; while(i&lt;10){9 Z6 m! L# d2 _- a; x" }
    console.log(i)0 w% j8 O& y0 G* o4 T8 z* J
    i++% D9 [# n6 L0 P4 T, q$ v% G7 [
}
- a: s5 l0 s" y 0' {* U2 d* C$ @. P
1
# K! z3 T- j* g$ b 24 [/ m  z6 H, F+ V, v4 r5 `- I; [
3, B# N/ o7 N8 t8 @! B
4/ @# Z- H6 A" b
55 q% P+ W7 w! @& Q$ V
6
: R# g5 T3 S( X! M" | 77 ^, ]( C# d0 z5 p$ K$ v
85 K( q5 k( ~! _! P
9$ @: G8 V- E( c' U
</code></pre>  r7 P9 e& _! e2 D  x
<h4 id="255-break和continue">2.5.5 break和continue</h4>
# D, h  E, D6 I. c) V# [2 R/ a/ M<pre><code class="language-javascript">// break0 h4 p' g$ ^) N, ~0 a/ ~6 D) u
for (var i = 0; i&lt;10; i++){; O* A" P: w$ l4 L$ ?% h0 |0 Z
    if (i == 5){break}
* y' l( h8 R6 q  T, \  ~    console.log(i)
2 y& w6 g1 q7 b& d9 a$ Y7 @}
: w5 i$ P/ U, I& \. \! n 0
3 |9 W4 L' q9 {. a$ a( D 1
" |) o% z+ l5 X- c$ C 2. h- H6 [+ D  n( `
3
  C! Z- l4 D3 G" j% h 4' X# r8 ?9 u2 T' R
// continue
! p! q' H/ o: nfor (var i = 0; i&lt;10; i++){" a8 K2 r' i+ M
    if (i == 5){continue}7 E& g: _( O+ X
    console.log(i)3 T6 m8 v' |. G* o
}
7 P% R0 l  [! p+ v 0+ r  i- H3 y3 v2 {6 o) s
1" a  ]. G: e8 ^4 d1 r0 d4 D+ d% @
2
+ ]9 X8 l+ S' F; ]& } 3
- I! x: h& @6 ]) B 4
+ |' _2 G9 e4 w4 H' V 6
$ O; [" N- `9 M! `" r7 B; V) u 7
. |3 q( B+ M6 n5 {% @* x 8
# k$ Y8 Z  V/ {9 z" P 9' ~5 Q7 t6 J9 G! C

7 b; I- c4 ]) b- n2 [</code></pre>$ U$ e* E& ]! {
<h3 id="26-三元运算">2.6 三元运算</h3>+ Z$ i+ L4 V6 u) z
<pre><code class="language-javascript">&gt; a, C# q0 N( j( ]+ ]' O" g
6" h# e. K) |( g
&gt; b, B) ~# L" l5 U. G5 l
39 c; q" `% m' z+ c, {& `, b5 Z

: H7 _  D/ E9 E3 O: f# D1 t& X//条件成立c为a的值,不成立c为b的值1 \" }) w; W  X% M  Y
&gt; var c = a &gt; b ? a : b1 y' B# o( m3 M# }
&gt; c
, u) {: K) {9 ^8 u# h9 Z, R6  h8 b( v+ r! q
0 c5 [+ \& Q8 C* ^* B/ Q# R- A/ H
// 三元运算可以嵌套. z1 i" T3 Q% f0 P) ]
</code></pre>
* B5 [& C% v* J- ~9 I) b* _<h3 id="27-函数">2.7 函数</h3>
5 M5 j3 r4 s& r& y% p) U<pre><code class="language-javascript">1. 普通函数+ ]9 i: T* z5 a' W- s
&gt; function foo1(){/ y1 z3 _7 P- P: O+ S2 V
    console.log("Hi")
  ^* V: H3 Q9 O2 f  A. H$ e}
; X) V, f6 w: j1 V$ u. }$ Q1 d& ?: z5 B% }/ }# w7 Z
&gt; foo1()# A2 X: E0 W' E: V
        Hi$ Q5 I' n" p4 H6 W, q0 V  ^/ d. }# q
2. 带参数函数2 j6 q- ]2 c# J5 G5 t
&gt; function foo1(name){
( ~: s7 R/ f! q" w% O9 Fconsole.log("Hi",name)8 l$ ~- c( n. j! O6 x2 t
}3 R9 b: N8 S8 p5 K5 J8 n
% @4 ^0 M/ B! b0 ^) X& R
&gt; foo1("Hans")8 J, ]% K( J4 C/ F$ N, w
Hi Hans
) h( L3 r( T9 K3 E4 V; [( R/ v# }5 P9 M  q' `  W# v6 ^9 J
&gt; var name = "Hello"9 P7 [* j2 W2 |
&gt; foo1(name)
( Q* u1 w% B2 Z/ j/ |Hi Hello
1 u; S) Y" B. k) Y7 |& U1 L4 f# P
# c% _8 b7 Y# i3 m+ O9 z* y7 `6 O3. 带返回值函数' I# [7 s0 K+ N) i+ m  y* ^5 c
&gt; function foo1(a,b){" G5 c) A) G1 H( Z' b
        return a + b   ' U/ u! a! F$ N2 }5 ~) _
}7 m7 d3 A' l# V# u0 }* g
&gt; foo1(1,2)" V* p9 V; R  l" M. x
3
9 S. p" E6 h5 t% G1 R4 K&gt; var a = foo1(10,20)  //接受函数返回值
; {& i; B; N/ K&gt; a. N9 }: u; A- P/ t: O/ x, x
30
: ~0 A) h* O" n  I" o: m( `$ }0 t' A' G: G) X% Y/ H: V6 F
4. 匿名函数+ @  U8 T- V6 w8 w" q6 M
&gt; var sum = function(a, b){/ G, j# c, n. r
  return a + b;# }1 n8 y7 y3 O( D- T& y0 }& e
}" j; Q( }  E1 X
&gt; sum(1,2)
- B3 V% r! D' j6 B3
9 V6 t7 p' U; x5 Y3 [- F
* ~5 ]/ F8 e" i& m, K2 V9 Q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱2 _, P2 x8 {+ M9 E+ y/ ]+ X
&gt; (function(a, b){5 M3 T4 P0 x; N. ^3 K- N4 k
  return a + b8 s4 E5 p1 c: K1 @! G( w
})(10, 20)( L2 d) d1 R" |" A% l0 K
30
6 Q1 @6 T& f1 x8 G3 {5 ]5 ]3 c5 Q/ f" z1 ~
5. 闭包函数
* t" E) R9 w! f% b: k0 f// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数$ |: H/ g8 C' h% h$ u
var city = "BJ"! G4 G" K: s6 e  u. X# f" j5 U
function f(){
: i4 o( W; b2 X3 m    var city = "SH"% x4 S* B+ _1 k' H: {. E
    function inner(){. ^; @$ G, o; c" b& h. k
        console.log(city)/ V1 O# g$ T) g5 s3 J% A4 x3 Q) l  k
    }
) M4 k8 h5 ]7 }    return inner
( C+ `( H9 U, V' e  L) N}7 H; w. P. A- n* I6 W4 m, q  \
var ret = f()
. ^. L. k4 N& Pret()
( i' f: U3 ?5 C+ k3 f; w* U执行结果:& f( J2 `6 U. i) o+ F( L9 N, L
SH3 b) l9 \8 |, m# ]$ {3 q3 m5 E
8 |6 w6 h# d! k1 f
</code></pre>2 L, X1 m& ?$ j. Q" `
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
3 V( J  I2 a; [<pre><code class="language-javascript">var f = v =&gt; v;! b$ a6 _9 v: Q; w: a% B8 x7 k
// 等同于
" R$ q& E( U7 k1 w8 f0 V, Avar f = function(v){
  D  M- C& A* p* N: g* }' S, s# F  return v;
1 M5 o6 Y8 V+ J}+ B7 [  M3 _1 i
</code></pre># I; R& f# ~7 _# P# b
<p><code>arguments</code>参数 可以获取传入的所有数据</p>) O; w/ b1 `$ K: H  ]
<pre><code class="language-javascript">function foo1(a,b){1 \- I& c; G; Q# g2 l9 ]
    console.log(arguments.length)  //参数的个数   z. |4 K9 C$ U
    console.log(arguments[0]) // 第一个参数的值
, o; u' Y' N  E( z        return a + b   
" D2 D; {% ?3 M- l2 i2 h}& `/ I5 B4 r4 U
foo1(10,20)/ h7 m. K1 J) C8 {& q) U
结果:% G8 H4 E/ N$ E! L
2          //参数的个数
; r$ H; v. Y1 _" y. O0 i  k10        // 第一个参数的值
8 g/ |/ v" x6 K/ t30        // 返回相加的结果
  ]4 X) S1 U- R& L</code></pre>
3 l( `" r5 F8 @4 U; v0 k/ g5 O" Z<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
9 ^1 _6 z4 I& Y  O" J$ H: `5 ~7 c<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
1 L5 F0 E. w; A+ M( h" t& x% d<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>, `) x, w4 J9 b
<h4 id="281-date对象">2.8.1 Date对象</h4>
1 A9 d& H4 t. _# B3 W$ l<pre><code class="language-javascript">&gt; var data_test = new Date()
* H$ H- k# \' |1 G7 L&gt; data_test$ C4 H. r  m' u2 ~
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
# z- ]7 f: n: h&gt; data_test.toLocaleString(). K2 n) M+ w8 o# \
'2022/2/11 下午9:44:43'- Z, U9 n8 `+ @/ [  B
* _, B9 [( f8 C9 [" h4 K, e% O# F
&gt; data_test.toLocaleDateString(), l9 p9 l! f: ^
'2022/2/11'  ], f* d! ~, H

; ^7 f' q( J: B' Q&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  h9 I+ l# z6 g1 `$ v8 U2 A+ h&gt; data_test2.toLocaleString()
2 i1 F. S! m3 i5 M'2022/2/11 上午9:44:43'
, G$ x+ V2 y* l- E1 Z+ K% m. d3 s, O( g. }
// 获取当前几号
# m) z' P2 a! g- w" q! W4 C0 s( x5 [&gt; data_test.getDate()& n1 Q# S2 J  D( G# x9 g) E
11: w; |# N' ?/ m0 V9 [
// 获取星期几,数字表示1 l4 B( G% W* |6 V$ X) W# E0 _* H7 c
&gt; data_test.getDay()  $ X7 Q$ p" \3 C1 z; G- o
55 M  e& \4 i% K/ B, Q; L' W
// 获取月份(0-11)
+ z! c7 c  {) p7 y2 f9 z&gt; data_test.getMonth()( j3 C! i2 `0 d2 M8 X. \5 _3 ]6 S
1! ]/ w$ _# L1 n9 @8 i
// 获取完整年份9 D/ n) h& K$ d. C
&gt; data_test.getFullYear()
' ]! G7 b' u, A2 \& x1 W  o) H; b! B2022, V% ]9 T4 ?& K- L
// 获取时, T/ t8 s% `( X$ Q. B8 @
&gt; data_test.getHours()
4 B: k5 S9 S4 O, w# d' r4 F210 Y$ X: q- G; ~
// 获取分
( Z1 Y+ C$ a  q&gt; data_test.getMinutes(). U/ e( K8 {' g# g
44
$ i0 D" z/ m" T- b// 获取秒
2 w) ~" d# z& E: i7 U&gt; data_test.getSeconds()% d) W& p( v! A; a
43
6 V0 y! z- \. b1 V# R' z// 获取毫秒
' h. E! l* h3 C, i7 m9 p; {&gt; data_test.getMilliseconds()
) `+ i3 O$ |% H! o290
3 z1 I' a8 Y8 ?: l( x( Z// 获取时间戳
$ `3 y2 i2 I" j  @; x&gt; data_test.getTime()
# b& a' c* `, Q1 c* o1644587083290  a' g& m" ?9 d+ s+ S$ j8 j/ @% p
</code></pre>9 N$ n% m; z% M/ R& C
<h4 id="282-json对象">2.8.2 Json对象</h4>
( X$ Q& l. t( O$ M<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
! ~! t$ c+ T! m/ z1 R7 HJSON.parse()  // 反序列化,把JSON字符串转换成对象
) N8 B% f1 J( V) v- r$ L0 I  G# C0 D8 @& F/ d) F) H! e
// 序列化# D) u1 u  [9 q- a+ l4 P
&gt; var jstojson = JSON.stringify(person) 1 `+ |4 [5 v# F6 Z. k4 R2 r
&gt; jstojson  
/ e* f6 I, Q- s) N- Y1 C4 t'{"Name":"Hans","Age":18}'
# I& N3 X, {2 ~4 Q6 L' q; j- f  ~! W# `
// 反序列化. j# O: L% B2 Z4 K) K1 r( ?' r
&gt; var x = JSON.parse(jstojson), d+ q3 J7 m6 V) s6 @
&gt; x
) n" f" T% H7 I! [3 m( ~{Name: 'Hans', Age: 18}
* m3 M2 w' b6 C, F* q) r&gt; x.Age
0 K" C0 r% m( C5 I. P: @* j: q. B18. _- _" m0 v; @" {
</code></pre>  ]* Y& M& [8 K" d. I8 ~* m. O
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
6 i5 }# S' U1 e# ~: f3 s( E! d<p>正则</p>: X0 m8 e/ ]; K/ G2 G  t8 V( t* e; _
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");# @6 ?0 _* U( ]' u
&gt; reg1* I2 z1 D3 X! h/ @) t- J
/^[a-zA-Z][a-zA-Z0-9]{4,7}/4 D! G! ?6 ~3 x9 E
&gt; reg1.test("Hans666")
: _/ U% c( r9 H% j/ \* jtrue
1 `$ w+ ?9 S& @- I8 |1 N8 Q
  T* |9 X3 f- J5 w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/1 k8 r6 Z8 P6 M8 J; ]
&gt; reg2* q9 |' W/ b  @4 P4 A7 U
/^[a-zA-Z][a-zA-Z0-9]{4,7}/. ^% f1 D( `, K- ~
&gt; reg2.test('Hasdfa')6 i7 @; t8 g2 \! D5 j
true4 X: Y) M6 l$ p. F
% O+ h0 \- ~- Y- M" i
全局匹配:
! P8 N; }3 U! `, w( @3 k&gt; name
8 H5 p: H! M: c- X'Hello'  S9 A2 C2 r$ ^* j9 K) u+ q
&gt; name.match(/l/)% \' Z; X  u3 `6 i! p# j4 u
['l', index: 2, input: 'Hello', groups: undefined]
. z  o0 t  U7 }, H) U; d1 f; m' r* d! H+ `7 Z, u5 r
&gt; name.match(/l/g)
* X: k: `* F6 A! {(2)&nbsp;['l', 'l']
& N- Y$ N8 n- k" j) Y, g$ N// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
: U) c0 _& I/ t% E$ r9 T& R
- e1 l) T- }2 W7 i# o全局匹配注意事项:( Q- T" D" X7 i
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% K& Y" J5 X1 E
&gt; reg2.test('Hasdfa')
0 a3 F& j; |  L9 Ptrue6 W# X5 r1 C, H
&gt;reg2.lastIndex;8 h: W; i' R+ g& A+ {' Q" d
6
, Q& s1 e; J6 O: C" L&gt; reg2.test('Hasdfa')& T% c) q* S8 D2 h
false
7 n% r1 Q3 L' X/ @2 J! |  }&gt; reg2.lastIndex;
% A9 H( ?+ C) Z( x1 \1 e05 [( r' r  x4 ?+ P3 Q4 C
&gt; reg2.test('Hasdfa')
3 T0 U+ x; v  E' h4 i% {true7 X: X7 D0 m8 N  q
&gt; reg2.lastIndex;; s" W0 k& A4 h# m( M5 g# E
6
0 ~  i% e$ y* p" e. h- R&gt; reg2.test('Hasdfa')
0 h5 x5 e6 p  C9 ^1 q4 \false' n7 q3 @3 L% {# e+ q' v/ j
&gt; reg2.lastIndex;/ t- t, b& G2 m- E
0
$ }7 H8 s* D% s- Q// 全局匹配会有一个lastindex属性
% u& c. ?. s# P+ Q&gt; reg2.test()* x  H* i# n& g6 q, c
false/ ^5 V/ i9 Z. d4 E
&gt; reg2.test()2 S3 k6 `* r9 B- ]2 L; D4 c
true6 y& k: Q6 l  g9 e/ m% `/ u
// 校验时不传参数默认传的是undefined
: z  o9 {- S- D1 l! D' e- S( H5 L</code></pre>* `$ h1 h$ |# l+ n7 o3 H" ^
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
% T$ _3 w8 r  y  X# K+ @  W/ ~0 M<p>就相当于是<code>python</code>中的字典</p>, H. B# T% l) m
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}8 N: p: G+ }+ [' @0 B, |: s0 i
&gt; person# b: e1 D% a2 N( w( v
{Name: 'Hans', Age: 18}
1 w4 Z3 ]- g& |& b4 M$ I" H&gt; person.Name
  H0 a' F9 ]& E2 W3 B/ E% T. v'Hans'. Y/ K  T1 s2 U9 {* U3 z
&gt; person["Name"]
# L2 s9 H/ B" A# j, q5 l! J7 V'Hans'
! ?( _8 Y0 x+ o3 R; i, o
, a5 f. u8 @' O// 也可以使用new Object创建
$ T+ L* H- S7 R1 O) _' a; M&gt; var person2 = new Object()' Y, j6 m& u$ l: b. P
&gt; person2.name = "Hello"
) i0 v& g, M; i' Y7 \4 d'Hello'
' o+ i" S" ]' [4 H0 ^& ]' h; h&gt; person2.age = 20, ~- M% J. M4 g, B- c( ]& S
204 |( V1 r( u, B: z: R6 G7 ]
</code></pre>
+ A1 t  y0 d. c( \) j9 n<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
8 N) s; T: v& w8 N3 ?<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
, r# K1 l1 O5 I: O! E+ \<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p># O( k7 c% ~3 O
<h3 id="31-window-对象">3.1 window 对象</h3>
9 h5 x: J% b  m2 |+ v<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
* g1 }" R  U# X! g# t) r) v9 b<pre><code class="language-python">//览器窗口的内部高度
, k0 }" ?- a0 K% nwindow.innerHeight
7 y& n7 n- @* q& Y7063 R4 m( ]" E8 h+ N6 m
//浏览器窗口的内部宽度8 i& ~: d( F% Z9 o
window.innerWidth
0 ]- e8 D& Z" y) ^1522/ x4 v  [4 [% i9 d/ k
// 打开新窗口/ L4 v' h8 r4 N. ?9 \7 N
window.open('https://www.baidu.com')
/ a4 i0 v/ P& u6 }4 EWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
; a! B; i% {; m: n& p, N) b// 关闭当前窗口3 D$ g0 A6 r$ q
window.close()
; r/ d4 y0 {, M! L" S//  后退一页
3 q, D5 G0 o! Y: k1 Dwindow.history.back()
5 X2 v# v5 M7 O: k// 前进一页
9 \" J% o. P" ~( qwindow.history.forward() * O# M: p2 @, A2 E+ u( |1 s
//Web浏览器全称
% \* r* M& K5 M( f  x  \- Xwindow.navigator.appName
( P# {" ~1 H+ n: W1 z: q'Netscape'3 l, N4 R* t! g4 D0 [8 M5 x) ~: B( R* P
// Web浏览器厂商和版本的详细字符串
0 s1 W! W2 w3 M( w  ?6 kwindow.navigator.appVersion
% {: w% j/ P1 s" @6 |3 F'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'2 H+ @5 w  q: `8 c# s$ F
// 客户端绝大部分信息+ C2 A; z- t/ k2 m) A- s
window.navigator.userAgent
9 M6 ^8 z+ a* n+ v: Q1 \/ W'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) ~7 k% m$ L# \9 Q// 浏览器运行所在的操作系统
. Z3 D' K9 ]% d3 F# R3 Dwindow.navigator.platform
# Q* w) p- a! Z( _'Win32') h  j9 S& Z3 n1 ~# w+ b- `: |

- N& a: o$ X/ g, g/ T6 L) j//  获取URL- x, b( O3 }, V
window.location.href
9 }% ~/ N* R0 i$ ^" M1 d// 跳转到指定页面
, [, {" z1 i3 B" K# h# e/ Wwindow.location.href='https://www.baidu.com'
% Y. ]2 Y4 e* C8 t6 ?" z) P// 重新加载页面% a. U1 D) F; _! w$ \  _
window.location.reload()
! I  J5 Z0 e* F  F& t</code></pre># L! O, L. }0 u
<h3 id="32-弹出框">3.2 弹出框</h3>
2 V4 p, F( P5 Q, {$ m, n8 m" j<p>三种消息框:警告框、确认框、提示框。</p>
7 x6 {7 L% M- O: @& h<h4 id="321-警告框">3.2.1 警告框</h4>) [/ h2 P( r7 O6 ~" \4 c! J, e; T1 B
<pre><code class="language-javascript">alert("Hello")
* U, h, H/ C7 m% }2 l  N</code></pre>* v3 B( i# d) a
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
! \9 y9 W7 s1 c) n" B/ ]. N<h4 id="322-确认框">3.2.2 确认框</h4>. t2 t5 X# y' y
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
. ?6 Q4 D2 W0 [' k7 i6 O<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
4 S5 q1 @4 x- W  I& {* i4 a' Ptrue
/ @" e/ J2 P! m+ G: Y- B# t&gt; confirm("你确定吗?")  // 点取消返回false
8 a3 ~3 k; O$ [false
5 Z; R% ^6 H! }$ j</code></pre>" M8 M/ L! q: b2 T
<h4 id="323-提示框">3.2.3 提示框</h4>
* t0 n5 f8 o2 W<p><code>prompt("请输入","提示")</code></p>- u& L$ M. x' r( a# J" h% z& O+ o
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
  f, D7 ]! M8 d1 T<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>. K) z# l2 n; i& H
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>/ g) S- S* W$ K. l4 R# X
<h3 id="33-计时相关">3.3 计时相关</h3>
% K" R) G$ E. F7 ?3 ?8 U# P<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
( D' \- D. m% C: U2 f/ u<pre><code class="language-javascript">// 等于3秒钟弹窗
5 w: h* k/ k# W/ I# y7 ksetTimeout(function(){alert("Hello")}, 3000)4 D! }7 g3 \% l& j: Y/ N4 r

" K6 P7 C, o* q+ `! lvar t = setTimeout(function(){alert("Hello")}, 3000)
: ]/ Y# K* ?: n4 R8 ^8 X
7 T8 c: a& u$ O. U+ p7 {% c) J// 取消setTimeout设置
4 _5 v3 i/ n* k8 hclearTimeout(t)) t" z3 o1 c& @& D/ G1 n
</code></pre>
- a) c9 j6 _  t<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
' N$ u7 t9 J) d% Q9 ?: G' L" r<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>7 d  G1 P9 l# K7 l
<pre><code class="language-javascript">每三秒弹出 "hello" :
8 b+ n. F0 \3 l* t! q$ HsetInterval(function(){alert("Hello")},3000);# Y- r: j$ w# O" R* D
</code></pre>; N" `$ v  K8 D
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>4 R- b+ f  b+ H/ ]% c
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);! i$ o' z0 \9 ]% A1 v+ `- `
//取消:
. n  G. J. G. l4 ]2 [clearInterval(t)
& C6 ~6 c* J4 i4 s# k+ p' R, ~</code></pre>
4 S+ U9 l# ]! ~1 i$ L; Z- M  R/ m- O9 F1 _4 i4 c1 ^! g
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-23 22:57 , Processed in 0.070006 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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