飞雪团队

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

前端之JavaScript

[复制链接]

8135

主题

8223

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

3 i& `7 B. Q% y# W1 W$ W' W2 m" b<h1 id="前端之javascript">前端之JavaScript</h1>
9 t$ L1 M2 ]' q3 I) S2 n<p></p><p></p>
7 A8 I4 T# g; q6 V) {2 }<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ j: u  ]4 X7 Y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>3 w, H1 Z9 x3 ^% q# v. J
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>; w( H1 ]' y3 |- N. C, X; ]& ^
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
5 D$ f2 H! p" h4 t6 T0 Y它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
$ U9 r5 \5 b$ m* w: o& m<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>$ s# [/ l( ~" ]: M
<h3 id="21-注释">2.1 注释</h3>3 _( L& b' Q) `- r* a& F+ c
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
% |1 O+ W/ ~# d! Q! Q+ D<pre><code class="language-javascript">// 这是单行注释
8 Y+ p; u0 y" X8 j
% T. H  c8 l) z& A: D/*' j, l/ h, u+ H
这是多行注释的第一行,$ P# D8 D9 z  A' b( v
这是第二行。
6 D, L0 A; Z1 L*// o( y6 S4 O7 f2 f& l/ p# D4 w* O$ h
</code></pre>
% f  U1 Y: Y- ?<h3 id="22-变量和常量">2.2 变量和常量</h3>! w: \6 K7 n6 T0 g+ T
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>5 M- x9 Q9 C% g5 j7 ~/ H
<ul>
' Y8 q4 J) t' R, B<li>变量必须以字母开头</li>
/ K) i: a6 O$ d0 F( R<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
+ p  }! r5 K" y* e( m<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
  J( m. `2 j) U9 I$ ]' X</ul>
* o7 i* A  a6 A; O6 S$ M2 b) `& M<p><code>var</code>定义的都为全局变量</p>
* X- z+ N8 n% g& \/ `" i<p><code>let</code>可以声明局部变量</p>
: {8 I. N+ B5 e/ ~. w: J$ n6 t<p><strong>声明变量:</strong></p>
- E' o( r+ A4 U& E. Y6 f* U<pre><code class="language-javascript">// 定义单个变量7 y, J9 a' I" S: c. d5 H' v
&gt; var name
* @1 n, O" O; V  ^+ h, K* u&gt; name = 'Hans'
5 L  @# T" w- Q3 ~3 Z//定义并赋值
% ~& Z8 R4 g, `+ z, d( j" `&gt; var name = 'Hans'* S* I- e( t! b8 j2 U' q
&gt; name
  Z/ K% W$ H! S; D  Z5 Z'Hans'7 Y' K, T* s+ c

7 z$ ?, Y. `# }5 j# w! c( ?0 Q// 定义多个变量
5 ^. i% F& U! @8 P: T- F&gt; var name = "Hans", age = 18
) `# @1 H9 b5 f2 J&gt; name
5 Y) M0 S/ L1 G9 c6 ~0 i4 {+ N'Hans'' n4 V/ P! G( Q4 L& s' \, R
&gt; age
! ~% U# c/ ^% S: G* D  V0 R' l7 P187 Y; ]% b! D# q

* `7 h, x' b8 a: k  T2 |; H//多行使用反引号`` 类型python中的三引号& U7 m; N3 f. J/ |
&gt; var text = `A young idler,$ K, m) D; E+ X3 @: [; L% K
an old beggar`3 w5 M: N3 d8 R! m
&gt; text/ x1 g; T! `5 G( L( `) d, ^- x2 c
'A young idler,\nan old beggar'% U( j( c) s8 ?, ^
</code></pre>1 @0 M; b  ^, {: \1 {& r( v1 K
<p><strong>声明常量:</strong></p>& [, o5 O: S  t: `
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
5 q% m0 S2 R8 r# A<pre><code class="language-javascript">&gt; const pi = 3.14$ S4 U! `6 t" x
&gt; pi
. b& g  g, v: H, d" }( U# L' d' Y3.141 r4 G( i8 i0 p+ p* c
&gt;  pi = 3.01
3 f" }( |; z8 X1 @$ ?) O3 WUncaught TypeError: Assignment to constant variable.
" ]$ x4 ~! B. P    at &lt;anonymous&gt;:1:4, R3 h( `  m$ q& k6 p/ J

* v5 {  V7 B5 Y& z1 H( N- E0 o</code></pre>
# v/ K3 \; S' e& U6 Q<h3 id="23-基本数据类型">2.3 基本数据类型</h3>7 S8 n9 a: x: w  n+ b: g
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
& B7 B$ e8 r" L# o! D7 A<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>; [4 W  g7 ^/ h; P. M  I
<h4 id="231-number类型">2.3.1 Number类型</h4>5 z/ u. S' B) Q$ x
<pre><code class="language-javascript">&gt; var a = 5
0 a1 F" q- S  ?; j&gt; typeof a   //查看变量的类型  
# L$ y% N7 \" r+ M, T% F  D* cnumber
, P3 d; G- o9 V, ?# O7 [1 S
; S" n& j" X8 |! v& b&gt; var b = 1.3  |1 o7 T1 g% g. E2 x
&gt; typeof b. s2 c% K' E! v$ b
number
# v# v0 k1 L+ G; D! Q( _2 r  H6 P0 {* a) N0 w( g3 U* X
// 不管整型还是浮点型打开出来的结果都是number类型
* w- B0 n6 ?' @% C- F. S  M
" ~6 g: g$ J' t7 S+ _/*
) S3 g* d4 |0 T* W/ e) g2 G( n8 {# mNaN:Not A Number
/ N. @/ K8 Q( a1 N- s) ?NaN属于数值类型 表示的意思是 不是一个数字
2 ~4 j5 y- w4 u, B" I) t0 D9 Z: l*/
; _6 h  r) b! [
" ?- U- ?* N# f4 R1 rparseInt('2345')  // 转整型" n2 B" t1 Z+ M% z/ D6 f$ T% S
2345
% `1 ]1 Z& A- I: bparseInt('2345.5'). U  O4 ~4 W  S2 K+ l
2345$ D+ v  [& W% |
parseFloat('2345.5') // 转浮点型% @/ d4 |' Q1 c" k
2345.57 [+ L0 w5 P- G2 Q/ a) |( D% r3 ~% p
parseFloat('ABC')
" \. }% n3 Y' cNaN' R, W( _: m! @  C
parseInt('abc')) y  Q& Z. p7 e1 M" A! O
NaN
. U% f0 u# ~* ~0 [: v% t</code></pre>
) b- y6 P; m1 H7 i: V. X  m+ ~<h4 id="232-string类型">2.3.2 String类型</h4>
' u+ I1 U) d2 C* x<pre><code class="language-javascript">&gt; var name = 'Hans'
8 F) @+ H4 J6 p&gt; typeof name
! D2 W6 G0 c; U; x% @1 \% L'string'* Z% t+ U7 r* O2 \. i

( c/ y( A, c0 `4 z, @" r//常用方法
3 r+ j$ j; f" F7 `7 {1 C// 变量值长度" J* e) g  o/ q& E9 p) P; O. l
&gt; name.length, i5 Z+ M; @6 c" J, H6 S) ~& i
4, }0 }3 P0 e. r/ ?, F( D
// trim() 移除空白
3 B# s9 }8 x' F9 m&gt; var a = '    ABC    '
6 ^7 m* }% T* |; N! Z1 E, G&gt; a! M9 [' v" d# R
'    ABC    '/ O% {  u9 V" L% {" I
&gt; a.trim()  d2 H( t: i) c0 Y6 w
'ABC': r3 f2 T' P5 d) Q6 k) P
//移除左边的空白
0 X% C6 y) e& ~5 i7 Y# M&gt; a.trimLeft()8 T2 f9 a4 y# ~
'ABC    '+ @7 c/ z9 c/ _! Z
//移除右边的空白
; Y1 ~" B! I2 e7 R( x- ]" k&gt; a.trimRight()
) q3 L+ U6 ~* \" M+ f: g9 E'    ABC'
* K2 P+ f$ P: l( D6 i! k  t- j
) T! Z8 m2 v' I: J1 Z//返回第n个字符,从0开始0 n7 G3 U' X3 \
&gt; name
& ]1 e8 j- e1 H: a& f'Hans'
! x. X; ^0 R* l! U5 ?+ V& u&gt; name.charAt(3)
" p& o9 r/ U, p# }6 p7 Y& {'s'* Z) x* H$ i$ Y  ^& P
&gt; name.charAt()( d- I5 ]0 ~4 Y  h" U
'H'% D2 D9 X$ I1 f' `$ B
&gt; name.charAt(1)$ j: g& L' F$ e4 L+ V8 Y& e$ V/ E
'a'
# ~* P# P* l6 C- d$ X% e) N% F4 @0 F' z( U
// 在javascript中推荐使用加号(+)拼接
8 d- w% ^6 f( o" S6 A, R&gt; name
3 E4 J$ ], K! X6 h'Hans'
; e1 L+ q! a- j" k5 r, V( d- q&gt; a1 w1 j7 b/ A. a- e! g
'    ABC    '
' t' d3 j& g# Q&gt; name + a
1 T1 k8 `# L+ F9 w9 x8 @'Hans    ABC    '
1 s9 B, d$ A6 K$ a// 使用concat拼接
1 o, N9 W- l% M  c. ~6 C( `&gt; name.concat(a)
8 V4 E' m$ c% x) q% H'Hans    ABC    '
6 J: C, Z0 ^7 k8 f4 l% x* Y
3 E) b8 [) z6 Y1 _0 y# q$ H- K//indexOf(substring, start)子序列位置  E% V5 ?4 ?( q" a! h3 W7 m

& d0 I2 L; W9 T+ o+ b&gt; text( N) V& ]4 T1 E8 S
'A young idler,\nan old beggar'
6 B5 R4 E6 g# O! V/ I$ y! c' R$ `  C&gt; text.indexOf('young',0)7 v) j# t' A1 p# @
2+ B' f8 A9 u& E! m: D( _

  |- K1 r/ j$ ]! R, g//.substring(from, to)        根据索引获取子序列
* T0 E+ ^! O, A0 T& L7 Q&gt; text.substring(0,)
# h2 S2 x) b& v' w" T'A young idler,\nan old beggar'
/ w0 E# Z0 {1 ^" q&gt; text.substring(0,10)
5 Z3 v! s6 {  K9 s7 v'A young id'- p5 _( f7 H: T: J) `4 W( ]" i) D

+ j- k1 Y3 J- n, O: h1 t5 W// .slice(start, end)        切片, 从0开始顾头不顾尾
7 j3 g! b" B+ e* X; b# f1 j' B&gt; name.slice(0,3)
# g) g1 ?; m3 u. |( w'Han'# d" k( S% D- |- {* a/ H  G. a

# m- B. n6 j8 _  Q5 k7 V( x// 转小写
! f9 D; }& M; K2 R&gt; name/ r' o8 Y$ O! A* W' j
'Hans'7 q' S1 ?* I  l3 v( `3 p
&gt; name.toLowerCase()
' w/ i4 Q) \. e  K4 ^'hans'
$ J3 i! }7 C2 t3 k( V% e% e// 转大写  R$ ?0 R3 ]2 B& N: ?7 [$ j
&gt; name.toUpperCase()
" U" X9 I) W" L) S( A* b'HANS'
8 z6 W( Z) s. ~. [3 j! M. A! y  G" _7 }7 `2 \3 T" y
// 分隔3 j( _$ u% I4 S/ D6 O
&gt; name  l& F; k0 d* X2 k. \6 \2 H9 x
'Hans'/ O6 t1 D2 b# A0 S/ h
&gt; name.split('a')' }7 ^3 `, h! Z) C1 Q! f
(2)&nbsp;['H', 'ns']; ]  Z7 o1 E1 D3 Z4 I0 a
</code></pre>
6 o4 T9 Q, W# o, w# v& D/ P<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
7 K6 @  c% C% }, [: j( D! g5 W, J<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>/ d3 f' @& j! d5 W! o1 @
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
; [5 ]4 O. d5 d( j3 F<p><strong>null和undefined</strong></p># C0 v" F5 j7 V
<ul>! t8 _3 m) ?% M5 }5 P) n6 X& \
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>4 v  ]0 y( G6 ~$ B& }
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>3 I  [+ s1 w/ T" E$ s
</ul>
6 y' C- j& X6 W<h4 id="234-array数组">2.3.4 Array数组</h4>
9 W, v, V" }; u<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>% A. [. _2 K* u1 Z- o7 |
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 0 ?. p/ W4 ^! Z  l
&gt; array15 V- c6 r- c+ O2 F- ?# j* G3 y
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 ~, V/ [. A8 q1 U9 W: l3 }1 t6 P&gt; console.log(array1[2])  //console.log打印类似python中的print
- y1 q4 E4 G$ X5 k6 S$ q3 g  {0 g$ D0 l3
: v" r; V  z' O* Y$ E0 f' z// length元素个数! J4 [9 s9 u1 K5 M, x% i' ]3 \
&gt; array1.length
) V4 c2 f; Y% c: c5 Y: \69 |) w2 T- |! B" A0 q& Y
// 在尾部增加元素,类型append
6 M) o' x/ Y$ P( J&gt; array1.push('D')
, O1 H9 H' D  W' D8 S- G73 I! G: d  B6 e' b
&gt; array1& W, u; b, Y3 f4 ^; K4 c0 k# U
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
% ]6 {. [. v4 `. V* T) E/ z7 G// 在头部增加元素
* t. y0 ?; `0 U' t) N&gt; array1.unshift(0)
. T' ^+ t1 I: y3 s1 p7 I8& N' T" A5 e: p; V7 d, x3 e
&gt; array1
7 L* J( i( C9 @2 d8 B; a2 }5 g0 C. }(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
2 k! Y7 J5 C( T6 X- R
5 j: N& o& T$ H; l. b( n+ i//取最后一个元素) }. O: f% ~7 f0 p. J( z
&gt; array1.pop()
8 q, m0 h. Y" M/ V'D'
- \0 W: ?! S" ]8 P. |1 Q, x&gt; array1
  t3 s/ C( C2 I7 }. q) C" \7 X" F. t(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']: s8 Q7 X( Z/ }& n7 q+ Q
//取头部元素3 g  ]% `& c9 N. F* m! M
&gt; array1.shift(); m' Z) ?6 O! f+ Q8 Y0 ]
0
3 A3 p& q; s% Y* z/ d- W&gt; array1
5 w- n# h7 U* ^/ E5 j. f. z4 L(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! E3 l% U4 ^6 b/ n, H3 V0 J
6 Q" r6 @5 N; T% i- X! M- f' v
//切片, 从0开始顾头不顾尾% \# |) L$ W  A" V- S+ G
&gt; array1.slice(3,6)0 P2 z  I0 I* }( z5 ]7 f' O+ X1 |% N
(3)&nbsp;['a', 'b', 'c']9 o" |! r" w+ d+ L$ k: Y
// 反转
3 [$ p: g- m4 G( q! H/ n% z5 h9 O: @&gt; array1.reverse()
  h0 Z: E+ f4 N- x: z: \(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
+ f" V  `2 |) H1 f' L1 T  ~- r2 G// 将数组元素连接成字符串! l! f4 N; `2 X0 H5 o3 ]: n
&gt; array1.join() // 什么不都写默认使用逗号分隔
# Z7 B$ Z$ z5 D4 L' d'c,b,a,3,2,1'8 W3 S1 u% S4 ^6 j$ P6 r' ]1 b" \
&gt; array1.join('')4 H1 J6 A5 q3 T6 ?+ w1 [( E0 E$ p8 e
'cba321'2 i7 ~3 n8 p% D; s+ ]' n* ~  P
&gt; array1.join('|')
! j" e) u0 u4 u# m8 {'c|b|a|3|2|1'
) a" m3 L) J3 w% X1 l
" D% h- J5 L3 @// 连接数组" w; x! \$ @# X3 A2 z+ D  K
&gt; var array2 = ['A','B','C']! |3 h6 v( M! e2 P
&gt; array1.concat(array2)/ a% L+ L5 `' n5 q' i" m
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
% r8 o! u. S- x; z( l3 o2 T* F; k1 n; B
// 排序- k  n: y$ C4 A+ E9 U
&gt; array1.sort()0 o- V3 i' p$ X5 D* w
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  C4 q3 N7 A8 `  u! {

0 R( S5 E1 p! w% l3 i7 c% B, P// 删除元素,并可以向数据组中添加新元素(可选)$ P0 O- g8 G7 w; S, v7 N+ F
&gt; array1.splice(3,3)  // 删除元素
- \6 q2 D; {% B- z2 f. E(3)&nbsp;['a', 'b', 'c']
. X4 D( @3 g& B+ E; w& k&gt; array1/ }; A" }: q9 Z8 I4 w: f
(3)&nbsp;[1, 2, 3]1 K1 W; |8 X2 \) ~
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
8 ~" `4 u  j! l' ~/ s' V2 a[]* x- r/ k* L8 {* t
&gt; array1; `- t9 r' O/ D8 j  v  p  B
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C'], t9 x6 L8 n& y4 U

  s3 I! Y0 C3 [2 d' [6 Z1 y1 [! i/*
/ o, h* e$ n0 E. U' @/ fsplice(index,howmany,item1,.....,itemX)
8 Q: q2 l. W! Z) J) O+ y$ yindex:必需,必须是数字。规定从何处添加/删除元素。
+ M# |5 z1 j' ]5 J- lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。9 o8 Q  D4 P5 J' l  M! L5 K
item1, ..., itemX        可选。要添加到数组的新元素
0 j+ A( x) Y! K/ F  N& Q*/
+ i) Q+ t8 \* U6 I+ C( F5 g9 r$ S+ \* B
// forEach()        将数组的每个元素传递给回调函数
3 K- j3 ]# m; ^9 {% C/ X0 W7 R7 q&gt; array1.forEach(function test(n){console.log(n)})* ?3 T- U. I  _0 t% ^! h' o# e
1- F5 b0 \4 c3 p
2
+ t7 C" G/ O7 G 3
0 h' U9 P" g% Q1 ^! z& y A
4 W% c9 h5 D0 f2 w# i B8 _9 H1 ~6 C7 d; o- z2 x: `
C
) H/ `5 ~  [4 _7 V( x9 u// 返回一个数组元素调用函数处理后的值的新数组
/ Q. t+ Z9 M! k6 G% V&gt; array1.map(function(value){return value +1})
' j/ v2 [4 h1 ^' @) F" u. w) g(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']: \" G7 d2 m# H$ ]9 @& m
</code></pre>
8 k  q7 [6 t4 B<h3 id="24-运算符">2.4 运算符</h3>+ z! i1 F) X& \7 ~7 O4 s
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
7 E/ a4 r1 P( b1 O8 r* V. Y  `<p><code>+ - * / % ++ --</code></p>& g' {/ n+ V# G5 P7 L: v0 A# \+ ]
<pre><code class="language-javascript">&gt; var a = 6
' S" p. E3 x( [1 o" `$ j0 v8 c&gt; var b = 3
6 c2 i* t; j( \$ s) C: w// 加: |& t7 O; p% B6 h
&gt; a + b
. y5 j5 B) Y3 ^  C% n9 ^3 K- ?9
3 g- i/ F+ e5 w7 h5 s8 p// 减
1 u' e) d) w3 |5 g( k1 X  V- h&gt; a - b
# p* H% H7 k3 p1 Y3
' A7 N; x: }% m8 u+ P- S// 乘/ P, W. U) D& k: N: T
&gt; a * b
( W, `% Z3 o) k: ~8 h1 t2 ]5 z18
2 g. {. m# H: _* V0 h* T! C// 除  F7 b( f" T9 i: b" Y$ q
&gt; a / b7 M# D( B6 \8 ^5 A, Z7 b" n3 F
2, y# w, v" t, p# U; V" ?) K  E& m
// 取模(取余)" l2 k& `% Z$ N* Q
&gt; a % b
# e; H6 W; I9 v/ Z% s0
. d( |2 s% C6 G) Q// 自增1(先赋值再增1)# s! u% N1 a% ?8 _/ ]
&gt; a++. F( R- C3 \9 m4 K0 Q
6$ k/ P" n2 r4 H; s" h
&gt; a' X: y" c, r, ~0 A9 Q' w
77 e/ ]% w( N; T
// 自减1(先赋值再减1)
% k1 D& F9 ~' N- V; T- B0 {&gt; a--
1 [' F6 Z: c; t! ]4 Z% ?4 r7
& V: @! o* R$ E' h* W6 ~) f) W$ V&gt; a
: k4 m! W) E# J0 \0 v* J6
1 F7 R4 h  [, ?7 z" }# k// 自增1(先增1再赋值)
7 [# ]6 w' s7 a& d, e  X&gt; ++a* `3 C) w. J4 Q7 z" C
7' H; D* ?( Q$ Y; V, R9 U
// 自减1(先减1再赋值)7 M, @1 ~1 H2 l. q0 V
&gt; --a8 s' |$ A+ B5 F6 P" O! n1 s) Y
6) p2 f: \1 o) u+ j2 X7 `
&gt; a8 n% j: a7 M0 w
6
$ J. F6 Y+ h/ }7 o' d3 a- f
& S7 b$ ]2 a: }5 x; J3 H' C1 \//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理0 K3 n5 d; F3 `: H; U4 N
</code></pre>
" C0 q5 \% o1 z2 F8 p' j<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
9 x  P) g1 ]& \' V<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
- Z. M1 m: x; u8 s<pre><code class="language-javascript">// 大于: ]( t2 N9 V: d4 [* o  x
&gt; a &gt; b
% `# O3 s3 x8 j( |$ Z/ i- }/ v6 @true* M; J; Y5 G, T+ v. v8 O
// 大于等于
% Z8 ^2 r. N% S! S: d7 B/ i! T&gt; a &gt;= b; p. Q: F& `- h8 Z8 o4 U
true/ k; e$ d: W1 X- J) ?# H  O9 U
// 小于
+ D6 u: ^- C. a3 `&gt; a &lt; b  z. Z4 Q' l/ W' K
false" I8 ]* m/ t8 ^0 q' G; D6 ~$ E2 e
// 小于等于( }- m0 C; P1 e6 @
&gt; a &lt;= b$ r2 C9 o, i) b! j
false! }  S% ~+ N' }0 m( l, ]
// 弱不等于' ^* J$ ?) C7 P3 U4 O
&gt; a != b1 g, b/ K6 T9 X7 M/ m" d
true
( y3 [5 A# s, x, b" L$ Z// 弱等于1 r) E; P  O+ @/ m) L5 G
&gt; 1 == '1'1 c4 [" B" }( u, u: I
true
/ a# n4 `: H4 l) n' R// 强等于
- [9 @+ e; R7 U&gt; 1 === '1'% L) G( ~8 l/ f( ^! R
false, ^  `* N" w1 p; B" Y) {  N, n
// 强不等于
- j) n/ Y& l. M$ g  }&gt; 1 !== '1'
* D8 E7 c( O" b) J' f. o# etrue# ^+ c0 o& D! [/ [9 d) D$ L

" e1 q9 B/ T8 U" ~/*/ V  W; _8 S  p& z
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误' ^. I8 @) \  |. @% d
*/
7 s1 _' q; P3 e! t" D</code></pre>2 \5 Q) b* ]$ N" W% \
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>' N" \7 a+ p# m$ ?# ^( w
<p><code>&amp;&amp; || !</code></p>
- o' v7 \" K% i8 a1 F/ o( |9 @, }! ~<pre><code class="language-javascript">&amp;&amp; 与1 c: L5 A3 `4 n! _, l
|| or 8 M; r# j  I. ]% d( O* Y& ~3 x
! 非
7 O  `- W- _% a) z</code></pre>& ~+ z" S' u( O1 d
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>2 c; z# {$ a* W, y4 }4 n- \; m* @8 `
<p><code>= += -= *= /=</code></p>% G1 O0 q: Q/ o. f2 W/ r. |; R; s& Q
<pre><code class="language-javascript">// 赋值
% Y1 I3 @0 H$ L: M; |0 l6 S&gt; var x = 3+ s) c3 ]3 s' l+ e
// 加等于, l7 k- u: M- n; j
&gt; x += 2
9 s8 a9 K* K( D- {! S" f5, O9 ^7 |+ r/ H
// 减等于" V# y% W- Q+ d- `! W* K
&gt; x -= 1# ~9 a" }) l+ t) ]8 X2 y( D& m
4; }9 M& A, p- {- f& f3 q+ a; j
// 乘等于5 t% v. H  s' y
&gt; x *= 2
! ?* C' W# z4 G- e$ y# r4 }# R8
- q6 p. ?( h* H$ T// 除等于
& p5 O% c3 P) d# K&gt; x /= 2" ~4 f/ g! A6 h' E
4
6 i/ u8 z% x+ T! O9 ]- p, J7 [. ~</code></pre>  l; W/ @) Q1 X6 `* N; Z
<h3 id="25-流程控制">2.5 流程控制</h3>: l6 E% a1 z4 e
<h4 id="251-if">2.5.1 if</h4>* Y7 I2 ^/ Y# ]# B
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}+ j8 M, N' K: d
9 p& C8 w- Z* s3 D
&gt; var x = 3
9 Q/ u! D, B7 O&gt; if (x &gt; 2){console.log("OK")}  M# S7 W3 f$ f% g4 ]6 ~
OK# `  N% E+ ]! k, O
8 P$ [* c& b$ C
2, if(条件){条件成立执行代码} . [* L. }& J" Y; D7 U8 U$ h$ ]
        else{条件不成立执行代码}7 \" \( M5 I7 u) o# ^9 q! @  v

' C; a& n9 ~: T. L# v% N&gt; if (x &gt; 4){console.log("OK")}else{"NO"}. h7 G! b; L% Z
'NO'
% m) A/ c4 h( J$ }* m! @" Z3 F' Y- h/ `- b9 R
3, if(条件1){条件1成立执行代码} 2 F& ~2 h) {+ b$ l# Y* u$ n
        else if(条件2){条件2成立执行代码}& O! V) j4 S/ k, P3 ]+ A
    else{上面条件都不成立执行代码}* Z+ Z8 ~' C0 a8 n7 h0 E: U+ X6 f: f
9 `2 Q  B: e% U0 z1 C" ?4 F
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}9 {4 m: A- W4 c% x
Ha2 {* n; p! M' S# C8 W& h
</code></pre>! W3 }8 I4 ^9 ~5 D
<h4 id="252-switch">2.5.2 switch</h4>
. X& [& l! a( v: n5 t<pre><code class="language-javascript">var day = new Date().getDay();& P; A+ P' c+ }( ~; l
switch (day) {1 p/ X8 E3 x, _1 ?8 B
  case 0:9 Y, H0 h5 g3 ]4 g( \, x; F
  console.log("Sunday");
6 o$ g' U; i* f: l5 O  break;' u3 \( y( s3 N2 K' y. Q+ n
  case 1:
$ n1 N: c# E# ~. C4 M  console.log("Monday");: G3 J$ |8 O" B
  break;, i6 u' Y( {! x$ e) n7 L' i- H' L
default:
$ p/ w; r- l+ c  console.log("不在范围")
0 I/ a$ x( O1 u( x}9 c0 a: z5 O& C; o
不在范围! N( L) o$ J$ U
</code></pre>
6 O2 K9 u- |8 g) O, a' X" c<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>, L+ G2 g+ K- C. m; n1 P
<h4 id="253-for">2.5.3 for</h4>
- ^- n" t! N# V& D<pre><code class="language-python">// for 循环
! F- R+ Y1 E7 G% i        for(起始值;循环条件;每次循环后执行的操作){
! T6 j# b8 h+ @" _* M        for循环体代码* b* N$ b5 L- z# y6 g; f8 }3 P% t9 }; S  w
    }5 c; m4 g0 c' x+ g
+ J8 {4 p' X: L; O( R
for (var i = 0; i&lt;10; i++){. k) k, l6 p" z2 r* M; _
    console.log(i)
* y7 ~8 e1 I1 i5 D. c8 N; F/ v}
  O! K1 y! ~$ r8 T, Q  N7 l        0
# k. Z# ^  K3 l: h4 H2 m        1/ O% P. I$ f$ E; U8 k9 d: v* d5 Z) G
        2
! h2 |4 Y4 [- _  C3 t  y        3
" k! H0 p$ e- @2 T6 k0 T* z" \        4" G  |* C& P" b3 o) A1 S* P* b% |
        5/ I- ~4 t- E( ?9 ~
        6" P' Y5 J- m# M8 [! |8 O
        79 H9 \0 X4 A! r
        8, \2 x7 h8 L* v9 w- M
        9
) j8 W# N/ x: J. t</code></pre>
0 r* t" A+ m8 k2 d& o% E$ N<h4 id="254-while">2.5.4 while</h4>( l$ A: b. z" E' p
<pre><code class="language-javascript">// while 循环# I8 Y# L* n% h2 r+ _
        while(循环条件){
* [& u4 h" N- k) q        循环体代码
/ @$ G2 e4 _% q, F# q- Q    }
$ d7 H- e5 r/ ^7 C, D5 J
  L: m- x$ u) w( e7 w, u; Q; D$ U$ w, r8 n&gt; var i = 01 c1 K, z7 m$ j& m! n! j
&gt; while(i&lt;10){
& R, Y; w! f* U- k; \    console.log(i)' H' t& c# B" X
    i++. D- O2 E; d% y0 G
}
3 ?( t0 t2 m6 [- i 0
, E" {- J; i  Q5 `1 M5 j6 e" x' B 18 C, `1 X, v. Y; a- _
21 U4 z) ^3 T! x: Y% U8 n
3" ~" f( t- ~0 k
4( O- j0 A8 l& t, V+ y; ~* L
5
+ E* o0 a3 j6 H 6
" l3 P$ L8 v6 r 7
! E7 L) [, h  r3 u' ] 8
! T/ R. K. K; n9 R4 o$ t 9
* `% b: R6 v6 J/ x</code></pre>- B7 K4 R$ g7 ^) Z
<h4 id="255-break和continue">2.5.5 break和continue</h4>3 r! y# T7 ^( [1 M/ V$ @
<pre><code class="language-javascript">// break
, P' t2 g5 ^% sfor (var i = 0; i&lt;10; i++){
3 {' F" d( W1 z  L' T& [    if (i == 5){break}$ e9 }- a5 J1 [, \
    console.log(i)
1 E( W! e8 r# _! ?) S. g8 C}
) j# j3 y* d" v7 L2 i* L! m# T- z# v 0& l/ [1 C2 {: R- [& Q5 F0 [
1
! \. n0 ~9 `% V  o1 N2 [ 2- [) ]  h# Y) D. l7 t; S
3
! O& F* w- z: |$ c* K( @6 C8 [ 4
$ q1 ^! m/ S8 w4 F' r! q1 p// continue
4 f! z, D$ o$ A% z# {6 N9 Dfor (var i = 0; i&lt;10; i++){
7 M- M0 r" ]2 d. Z& m  q' P    if (i == 5){continue}
+ B3 M) ^0 r9 _    console.log(i)% e/ c& y, _. E
}
1 A/ q: I0 Z( `) F' ] 0% W0 j1 A7 ~- Z
1+ e  U3 x% _3 ]' |5 E
26 X: y4 S0 A) a7 \- K( \& V6 C
3) {; P/ z7 e% H1 N
4" M" O7 J+ _* g) d( y0 r. D
6
, W, l6 Z/ J$ L/ f7 _ 7
, ^& L- \$ S9 r; |1 `6 v" R: y 8
3 C! [( v4 U( Z- k; v 9
* ?1 ~2 E" J( q4 C) r) k; o9 y9 N1 w# p% S* R* {
</code></pre>
4 n% U$ o6 V, P7 z$ g' B/ Q<h3 id="26-三元运算">2.6 三元运算</h3>
. P: }- m; y" v$ T# t<pre><code class="language-javascript">&gt; a6 S0 Z$ O) b8 t
6
; T5 {8 r. F7 ^/ {&gt; b
* S5 d6 k; C0 ?9 R8 [38 _* m( e  w4 \% [
) Q4 m( R( i# b( ?" t- d. r
//条件成立c为a的值,不成立c为b的值. N1 l8 o+ @/ O
&gt; var c = a &gt; b ? a : b
4 V! _7 B6 X: u7 N/ T8 ~' c. ?&gt; c0 n" A( p: Q2 `" U5 U% [, d4 |
69 i- T& q' d. h5 C6 C
9 s7 a0 }9 p6 o$ a$ n
// 三元运算可以嵌套- E* ?7 _- ^5 B: K
</code></pre>( b2 e4 D2 K* U' W7 s3 h
<h3 id="27-函数">2.7 函数</h3>& Z# m7 a7 o" N5 {$ X
<pre><code class="language-javascript">1. 普通函数
/ T, R" T# p! v4 z% c' \&gt; function foo1(){
  _# `1 W! W, E1 Q0 R, h: g    console.log("Hi"), W5 N; F, V" q5 r  H+ q5 H
}4 q3 s5 F9 C) x: j+ E

: p. L# x1 H4 u9 V* s&gt; foo1()
3 s. _2 s9 ]0 S: d+ S        Hi% o" j% D1 [1 U9 H5 L8 v: m
2. 带参数函数# W$ F: b6 e0 A4 f4 I
&gt; function foo1(name){
) j/ r% P7 Q4 mconsole.log("Hi",name)
- |* M  E1 b. v% N}
5 A1 Q  t4 k2 x9 E
/ f8 `+ Y! V! |. U. g&gt; foo1("Hans")
' w5 [) Q. }; i/ `Hi Hans
, L0 y. Y; ]+ N
4 `. i0 w7 t+ x/ v" h" G' e$ O2 j&gt; var name = "Hello"
& j7 t  n! q+ E( m% [- X&gt; foo1(name)8 T3 t/ ~3 }( x" W/ R  L: i1 U; v
Hi Hello
5 I* {; N4 o2 F$ d7 _/ ]; H4 W+ T4 @( v  ]4 b, y' L( H) c
3. 带返回值函数
- L, q: ]# N* s( T1 X&gt; function foo1(a,b){7 {1 S6 i- |: H$ e3 O
        return a + b   
. h* w! U$ W! i- E' o}) E5 g& @6 m  y: y/ E
&gt; foo1(1,2)
7 a( W+ }/ W# R38 |5 F3 U' R2 B+ @
&gt; var a = foo1(10,20)  //接受函数返回值) e3 T. U$ h8 R  \5 x6 d' Z
&gt; a# b/ x4 G+ g' ?! A8 i
30
) E: v# t, x' W- d7 `' F, A' ~) g/ Z& j& q7 M9 t" ^' X
4. 匿名函数. ^; e1 K- K/ u0 @9 J9 o6 A4 Z; m+ v' i
&gt; var sum = function(a, b){. i1 a& a3 {0 M* H/ L
  return a + b;9 m$ d: q: X+ r" G6 l
}
7 R# d4 f: c9 ^& k/ h&gt; sum(1,2)
* y5 u1 i6 y/ I  X, y3: s' i5 K- W4 l4 R& J! Q

1 M8 o3 b* u( W, s// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
, |0 K5 v+ w- S6 Q, v. J&gt; (function(a, b){# f7 C# d" j! n8 r
  return a + b
& c6 E9 b1 c. I7 u$ q# ~- j})(10, 20)" C- Z6 U- O8 x4 \1 t3 G
30
5 q4 L1 I1 r: e
/ u* I* S# a1 Y$ Z5. 闭包函数
# \* H2 Y! M5 Q$ _; U, P// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数* _1 Q& X1 y0 F0 A$ N  q: n* ?2 ]- a) k& ~
var city = "BJ"
7 D& \8 [9 @8 t) t  Yfunction f(){8 [% I3 ~% a8 E$ x) m* [* r' j; ~8 {
    var city = "SH") d: q5 M8 ]% a: D5 J6 j: h$ e
    function inner(){! ^8 W% H, [; ~
        console.log(city)
4 P! _0 j4 O& M) E& y    }6 s- `" U! P% C6 J; _7 t" i
    return inner, D2 b/ G4 I# E* H& T' I: M
}/ {  y+ S1 i+ r( k$ w
var ret = f()9 e3 S7 g. {8 K) o$ c: E
ret(). U, y7 E: R* h0 }3 @
执行结果:: s2 ?& k, U7 f2 g
SH" M$ Z& V3 f' Q$ S
- p0 N" ^+ o" m2 m! B& s
</code></pre>
5 n& }( c, Q4 V. l( @) Z<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>, {& ~, u+ E& @6 @% @' }; z& S4 h0 }
<pre><code class="language-javascript">var f = v =&gt; v;, {. B' Q. r! ~& P& g
// 等同于
3 m% l" c: w9 |) A- A, Y! i  Uvar f = function(v){
$ T7 `$ S# }# X2 A+ o; ]3 H+ G9 G  return v;; {0 G9 E+ @2 H* k: t
}
3 e% s5 M* w5 E$ b$ i0 a</code></pre>9 t; V0 A% A6 U, |8 R$ G
<p><code>arguments</code>参数 可以获取传入的所有数据</p>% d" J9 Z( `# }2 p) H( B0 `" Y
<pre><code class="language-javascript">function foo1(a,b){
0 I7 s6 i6 [# C3 [* `5 {    console.log(arguments.length)  //参数的个数
, m, J+ G$ U% N    console.log(arguments[0]) // 第一个参数的值
5 p$ ^2 _3 g, t' ~! Q        return a + b   
% y! p3 I1 O- F6 R" Y" P- D}
( \7 G+ X3 s; Z" U+ ofoo1(10,20)6 A9 _2 c6 d3 Q, P: p4 d
结果:6 h. a8 w5 v( ~5 ^0 F& C
2          //参数的个数 6 y( o+ i3 l- S; @% M, }" _
10        // 第一个参数的值# q* R. e' P' E2 H
30        // 返回相加的结果+ x8 Q/ ^& l; b7 }
</code></pre>
/ [5 u- P  g4 a' p4 w4 ]<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
/ u  f6 I5 ^. a0 B<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>1 F$ j) X, s2 f2 L2 f
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
+ V9 |5 S" g5 p0 O  E9 q6 s+ h. O<h4 id="281-date对象">2.8.1 Date对象</h4>( [# d7 Z, m5 t- V5 a6 U- T$ I
<pre><code class="language-javascript">&gt; var data_test = new Date()9 o  b) [9 T2 E) H# p  f+ o
&gt; data_test$ G! Q' ~2 x5 y% p, Z+ ~
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
+ {) T; f! r6 n: K9 @&gt; data_test.toLocaleString()
2 k/ Q' a% s3 W+ T, A'2022/2/11 下午9:44:43'
2 ]4 {9 K% r+ k# F- n1 E! H
5 M3 d5 @( l1 a4 s&gt; data_test.toLocaleDateString()7 [* m7 E' P1 ?' f% v
'2022/2/11') x- o5 m1 D+ J

# C5 _7 Q; j+ x: r) I+ i# T/ C5 S&gt; var data_test2  = new Date("2022/2/11 9:44:43")
( d: q$ J# E3 b/ K# q& R9 r&gt; data_test2.toLocaleString()3 r- P7 d0 x2 n# n1 a8 A8 c
'2022/2/11 上午9:44:43'* ^1 i8 K: ?/ Z7 }

3 o$ N  u3 L" A8 i4 J// 获取当前几号
1 _3 }3 U# X1 j3 u. [&gt; data_test.getDate()7 j% e! j' ~0 h1 T
11
/ a! j! U- e, K/ u# N2 \// 获取星期几,数字表示
! f7 T- D4 `0 I+ ?8 S1 j' d&gt; data_test.getDay()  ' E% o  l8 t- D  D6 a, ?
5
8 a1 J' {3 m# Q8 b1 k4 Z// 获取月份(0-11)2 e  y5 P0 S) o& b# O: U
&gt; data_test.getMonth()  X+ e: {) e9 Z& C4 o
1# U: H, m; w. R' b* V
// 获取完整年份
/ w) P! O% n7 O" y: m! l' g6 O&gt; data_test.getFullYear()
8 E# A' @% L; f# T) D9 D0 I2022) z3 k: F3 K4 U) s
// 获取时' T  _7 x* C4 x: B  \$ G" E, e# A# h
&gt; data_test.getHours()
; j& w# Z; b0 E' M( J/ ~, {! G21  R' X! A  z9 L/ F# G
// 获取分8 b8 ]- F4 {/ J- n
&gt; data_test.getMinutes()
& d; J& _3 ]" c/ D445 F) w% j9 a5 D5 }. v
// 获取秒3 }0 N" T- n7 R; Q0 T6 k
&gt; data_test.getSeconds()) O1 Q* _9 m. |% x: Y
43
1 r6 H7 k$ f  S& P6 d, y5 u: w; X// 获取毫秒
, X) W& r4 V' |- j! V6 ^( \&gt; data_test.getMilliseconds()1 K2 U4 [* _0 f7 D3 D8 o( L: H
290
3 L' H7 q' W, p! H/ w; Q+ W// 获取时间戳0 \: U0 G% @: O- `$ F, H
&gt; data_test.getTime()8 C' S' P% o* D3 e9 }6 q7 X
1644587083290
& n+ }, @+ i3 ~2 x</code></pre>
, Y  r  r( y) }: B& |<h4 id="282-json对象">2.8.2 Json对象</h4>5 |  {; k3 m2 V
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
5 c. o" o" K* F  g0 U: U8 YJSON.parse()  // 反序列化,把JSON字符串转换成对象( v, e0 n: r/ C" R" d, J

) h9 \  A) b* c) F% r& `2 O5 K// 序列化
7 e. ]( f3 }' Q2 {( g* g  }&gt; var jstojson = JSON.stringify(person) / @4 e0 k9 m. _1 N; j, @) [
&gt; jstojson  
9 ~/ \6 B& r- v4 t* P1 D$ e% Z* M9 ]2 I'{"Name":"Hans","Age":18}'3 G9 K. A3 S$ j: p) O

! L7 G0 U  W+ [; f- d// 反序列化
5 e$ _/ M% Z& [, X3 C2 X  \&gt; var x = JSON.parse(jstojson)
8 Q' n+ ^2 ?# s! J2 e; a&gt; x
4 k* f" U0 N) N% M, N8 {{Name: 'Hans', Age: 18}
' o) N% w! m4 i/ g  C$ B&gt; x.Age  u6 a! h4 k4 X) T  l5 x
18. i$ r, A, [9 g( I
</code></pre>1 ~8 [8 k% u% L
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
/ T9 M5 i1 p0 u1 _, `  x<p>正则</p>
) v, u) V' E! m/ y% W<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");' `; F/ w# U# K. j" R) }( Y6 [0 x
&gt; reg1
- M7 X" c* t' l* V; G, t/^[a-zA-Z][a-zA-Z0-9]{4,7}/" K6 G' P8 P  s
&gt; reg1.test("Hans666")$ K/ Q5 G0 _$ R& w
true( M6 [6 }  i2 F
( i: x# ^8 |3 d; v
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
  w) K: X* E3 K: T3 O&gt; reg2
% X4 }6 B7 W1 [: c/ `  a/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ g* Z3 N+ b) }0 b, X; m3 e
&gt; reg2.test('Hasdfa')
) E2 F# s+ Z3 x& F* S4 strue
, g% P! Q0 Q' [' G& `6 W- a  s# @$ c9 h" T6 w# _: t+ Y' ?) V
全局匹配:
! Q; }0 `; W6 E, Y% a&gt; name
0 B  d' w* x8 z+ M. Z'Hello'
1 M  m! k! b# R* i+ s9 u7 X; w&gt; name.match(/l/)
4 v$ Q; k2 i/ _. O0 r['l', index: 2, input: 'Hello', groups: undefined]
6 d- B! v! z, Y# j. r8 S
/ ^- y1 r: v% O2 ^4 A&gt; name.match(/l/g)- w" b- J9 M) K
(2)&nbsp;['l', 'l']
( q/ g9 x+ F- |4 v* g7 ^// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配: c( J; g6 w/ I, I) _9 ?
4 s+ c( Y8 {0 {4 g- ?8 T
全局匹配注意事项:
2 b4 A. }2 W, o* m# h# S" v6 g$ G&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g  a6 B. V9 H( B" U% A
&gt; reg2.test('Hasdfa')
# Q$ S7 z9 w& [  ntrue. U2 ~- S  Y" g7 [3 @! d
&gt;reg2.lastIndex;
- O: ~6 b; s7 c8 d6
6 h' N6 D+ X( `* m&gt; reg2.test('Hasdfa')( ^3 z6 e0 f2 @& R6 ?
false
0 L* G" a) X% W6 o&gt; reg2.lastIndex;
' E9 E4 ]$ P' G; P, e6 ?01 G- T0 e! i8 X: ?
&gt; reg2.test('Hasdfa')
+ b+ d3 O5 @1 T- @6 p) J2 jtrue
0 P/ k% @0 O9 M) O4 }&gt; reg2.lastIndex;$ ~' \0 i9 [% v+ c( i
6# _1 B6 h- W9 q
&gt; reg2.test('Hasdfa')7 u$ j/ F& [! o7 s4 h) ~' D
false
) k: `3 z- u; o0 \' Z- B* c&gt; reg2.lastIndex;7 B" Q7 ?9 z1 b: I1 t7 p, u
0
7 p" d3 V! v, k" o, v- N. j3 u% S// 全局匹配会有一个lastindex属性* w! L) O! ]# c  j
&gt; reg2.test()
& \$ y7 ^8 b( Gfalse, K" _$ |  Y# s! L( v0 c$ O
&gt; reg2.test()
- X: I3 K3 c3 l: m' v( jtrue2 n; B( t# ?6 c$ V% N1 _
// 校验时不传参数默认传的是undefined
7 R3 @5 e- B7 J</code></pre>% ?) H2 O/ q1 e1 w5 I
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
2 u3 ]% N3 W5 a- F  L1 `0 S. [6 d<p>就相当于是<code>python</code>中的字典</p>9 f  Y+ B. Q6 [8 M, E
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: }* g& C; A- ^1 z! f* R  V1 [&gt; person
, C3 e1 q8 j3 _, }{Name: 'Hans', Age: 18}
0 g% A5 f8 H8 M&gt; person.Name
& ^4 `9 M, o+ m# d'Hans'
# o2 h: R3 S+ C" H' s7 y&gt; person["Name"]( L$ m6 ?( i$ s0 U
'Hans'
1 K: t0 T) Q- k* _" w1 B8 W; Z' c/ Q# M3 d
// 也可以使用new Object创建# K: `8 M6 C& ^- ]+ @/ v
&gt; var person2 = new Object()
5 N. `9 K' O: x. L. i' h&gt; person2.name = "Hello"; K6 u! z( x6 Q+ f+ r
'Hello'/ l3 V- {, }: E
&gt; person2.age = 20
" q) [! g* a/ A20, z0 S5 d2 r; i  b
</code></pre>( a4 o1 T" S. x' F4 I. Z$ s/ V
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
; T5 M* i9 v" l# H$ n<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>0 s2 H; ?3 m: P7 M5 n# _, J3 N4 z
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>% q: F( v5 R7 s6 d
<h3 id="31-window-对象">3.1 window 对象</h3>
1 V2 D8 l# D" e* f% I<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
8 D. z. H- l* O3 I1 \0 n<pre><code class="language-python">//览器窗口的内部高度
, V* x; V) r. d- ]  z! M" ]- bwindow.innerHeight $ W: K9 ~* Y, G3 r/ a+ \5 B" _
7061 M6 r% j% s4 y7 ?
//浏览器窗口的内部宽度
! A$ {1 J* e! Kwindow.innerWidth$ K- n1 P. B: h. T% s8 M- ^& f
1522
3 y7 m0 v( k" g& L// 打开新窗口) B: P* b. n1 }% f9 y8 y6 {
window.open('https://www.baidu.com')
3 W5 I8 r) k2 _! w7 OWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}9 K- v, W# b% z9 T3 R
// 关闭当前窗口; |( Q6 d" ~% F+ u1 |; N+ g4 Y
window.close()
) D$ Z# D8 n- W9 F- i2 a& X' b//  后退一页
- ^6 F/ W: m+ Z+ N* I5 Xwindow.history.back(). b5 n* h, {& B! V6 C4 i" k1 h9 V
// 前进一页
4 ?) x1 [/ X$ c3 s6 L1 |& O6 q3 Vwindow.history.forward()
+ \6 t% n7 J* i! E* H- E- a//Web浏览器全称
- n/ x& W# M; m% X+ iwindow.navigator.appName- u+ S. y- T8 v
'Netscape'0 z/ |+ b  Q% R" _0 t; v! ^% e, B
// Web浏览器厂商和版本的详细字符串
4 x0 X& J& q5 P/ rwindow.navigator.appVersion
* d' ]8 j, }' v7 V# A'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ U. \' u/ t) H; ~! X( A// 客户端绝大部分信息
* M+ _5 O, z& m: k* bwindow.navigator.userAgent
8 M3 b: R% [# G2 d# `! f'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ u9 R) x( B7 o9 P. e6 U/ L
// 浏览器运行所在的操作系统
" K1 o- a. L$ p# Lwindow.navigator.platform+ i8 _  W7 H" P9 \
'Win32'! S0 m% ^% p9 N" E, j

; Z0 e# w- T* a* [$ W//  获取URL
9 ]( I( D4 z# @window.location.href
  L& ~# w( v2 ]; D# S// 跳转到指定页面* N& D% n" d; c/ [
window.location.href='https://www.baidu.com'
: c. L* S1 }2 ~* z// 重新加载页面
5 ~9 T7 C* [. b: |5 A. Hwindow.location.reload() ! V/ i  Z% ]2 ]# c  Z4 b  ]0 c
</code></pre>
7 P- p; ^1 ^! i( X1 m7 z0 \# o9 z: I# f<h3 id="32-弹出框">3.2 弹出框</h3># a" h7 w& u- k6 t9 Y) I+ C
<p>三种消息框:警告框、确认框、提示框。</p>0 j# P$ ~2 p/ N1 B6 D! Y4 \1 n
<h4 id="321-警告框">3.2.1 警告框</h4>8 l$ b) \, N0 I. I' E7 I9 d, E
<pre><code class="language-javascript">alert("Hello")
) j! I+ p, r6 I3 ^</code></pre>
9 K+ D$ H/ u# ]3 e8 p, d4 j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>4 E/ O$ f; I5 r3 R( S, R
<h4 id="322-确认框">3.2.2 确认框</h4>
7 O) L, n1 s( M7 w8 X4 ~<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>' F" r4 }$ j1 B, n  a# z) y) E; C
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
: H0 U: P" N/ U+ d' B. A2 Ctrue0 Y# T( f- A$ f- Z0 T  p! H, a
&gt; confirm("你确定吗?")  // 点取消返回false
' Y/ K6 G) L+ j' d$ _. f& Efalse
, V" L6 w5 ?. l</code></pre>& v# M2 c; |( E" H/ H
<h4 id="323-提示框">3.2.3 提示框</h4>2 u2 i. i' k) f6 Z0 c7 t$ N  m5 n
<p><code>prompt("请输入","提示")</code></p>0 H6 h: f0 u* @* r5 f! w7 ]5 k
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>0 b/ b: K% s7 k& K4 b
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
0 `# n# B1 J# ?) U3 N" {! W' C<p>如果直接点<code>取消</code>后端收到<code>null</code></p># p8 P+ |( ^9 ]5 [$ w4 |
<h3 id="33-计时相关">3.3 计时相关</h3>% G! j4 M, P5 ?* e1 ?
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
6 w# z+ }3 U7 y6 ~/ Z5 Y, P<pre><code class="language-javascript">// 等于3秒钟弹窗
4 {7 N9 S( F' o8 P, T  qsetTimeout(function(){alert("Hello")}, 3000)( y2 p( J& d( Y& a6 k% ?/ f* J

, Q. V4 o# T' V" D' W4 |4 j; Kvar t = setTimeout(function(){alert("Hello")}, 3000)
% ~% B# D  b* [
" u" P2 [9 Z$ X' l! c, P' a// 取消setTimeout设置
5 V5 j( N% |7 A: r, K4 f8 nclearTimeout(t)8 `) J8 y, W* z! L
</code></pre>8 M) J7 }% E6 S/ v& P' e! o, @
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
0 N  W. X0 K: `* Z1 b4 [% G<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>" c: h' u, o0 `* ]; r6 a; f
<pre><code class="language-javascript">每三秒弹出 "hello" :
5 t) c9 e. C) y# U$ T- Q" @setInterval(function(){alert("Hello")},3000);
7 G% G3 b9 m& d</code></pre>
# C. \: u' `9 T7 q. p<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
8 e5 a6 Z( w$ ]' a$ M0 |<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
0 u) [3 {' ]" ~. @8 `$ _//取消:) j* e' e( }* @/ A: Z2 r
clearInterval(t)% q: A6 F' `7 X; G5 w# L0 w
</code></pre>
- b: x4 P" r3 i) R$ b7 n
' Y" _  V! t( s/ z' r: A/ h
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-1-3 04:05 , Processed in 0.073984 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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