飞雪团队

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

前端之JavaScript

[复制链接]

5896

主题

5984

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
20012
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
' e) y+ c  Q  Y3 U
<h1 id="前端之javascript">前端之JavaScript</h1>
0 K; e) ?7 R* f6 |5 B  U- |<p></p><p></p>
2 R  T' B0 q% d7 R2 w3 {3 q<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>5 l8 B8 E: ?' h
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>" d) \! V# n% |* ^8 \
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>* g3 [) r. G/ f: w
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>' x- P& M0 l7 k
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>1 W0 J" P) ?( B9 r1 O
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
9 x4 f+ C  b2 R<h3 id="21-注释">2.1 注释</h3>
2 X' G6 _. F) c, t) A. X1 q<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
. F* O- J& |5 t# z8 m( N<pre><code class="language-javascript">// 这是单行注释- v1 P  g) t, D, \7 S5 q

; \6 I) s0 Q' B3 \. o/*0 l9 U. p0 k4 t  x4 P1 g7 w
这是多行注释的第一行,
4 s- G) V+ H7 m0 M; b1 p$ h这是第二行。
5 F+ k; ?- L( y7 ^; e2 X+ a3 y6 d*/( B1 J  i+ v6 b& }$ V' G7 k  {* Q
</code></pre>1 c7 u! x. U# K
<h3 id="22-变量和常量">2.2 变量和常量</h3>. Y5 M3 I7 H, O' p: _4 k
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
$ n* H8 Q6 c; |# i3 f% y6 s/ d<ul>. d, Z$ I" f2 F; B; J% C4 h
<li>变量必须以字母开头</li>
: V3 E) O' _: H# t<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>" a% x( I4 ?+ w
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>/ k  N+ V: q! u( \$ m2 q
</ul>$ h; \' \8 h1 ~' W& \
<p><code>var</code>定义的都为全局变量</p>
, i  e: l6 x. V9 s<p><code>let</code>可以声明局部变量</p>) z' }' L8 C4 j1 v0 A$ A  _( S# s
<p><strong>声明变量:</strong></p># R2 Q5 L. A& ~- `+ f3 H$ X
<pre><code class="language-javascript">// 定义单个变量( u5 Z$ R: {- A" e2 s
&gt; var name
/ y) h. w1 Y2 A&gt; name = 'Hans'
( F- Y& M; n  M//定义并赋值9 v' O8 q% R( M: m: q% h
&gt; var name = 'Hans'
; s  a$ a& f2 I) w6 D9 W' c. q&gt; name
0 z0 `  G5 _9 R( ~4 F. \" `% n'Hans'
" l) h7 b  z& N% N* X6 Q# z
2 N# r4 h8 F: U// 定义多个变量+ i' ^; L% E$ N" l. H$ q, h' p
&gt; var name = "Hans", age = 18
$ j8 N% G* @5 F, C% X9 a9 N. k: e&gt; name
. s. x8 B) C: g'Hans'
* b3 Y8 ]8 a( ~6 h&gt; age
* q- i- F) ?: F18
. z* q' w0 j7 j( X
' m3 f8 n8 U1 R- k0 a5 C' w//多行使用反引号`` 类型python中的三引号: a+ k4 O8 L. K* O* z
&gt; var text = `A young idler,+ l+ J6 @7 o9 Q. b; e% a* v
an old beggar`
$ c; w, l. [( c8 l&gt; text
0 M- h6 q5 o! w7 B9 ^+ }- H- e% u! `'A young idler,\nan old beggar'
" h) |/ A: C! J, z7 f4 q8 A/ A</code></pre>
6 w- ^& X: C5 w0 Q& G  y0 V7 ]$ g<p><strong>声明常量:</strong></p>
% b" B) d: D% y$ A4 C$ T; F4 i3 i. q<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& v( E2 z8 [; ^8 I% `0 f" K<pre><code class="language-javascript">&gt; const pi = 3.14
8 J# F. O2 C2 g+ H% r3 f, m6 X+ v&gt; pi( A' B% `9 y* x, I0 N3 V
3.14
/ Y+ {; {- F( G: I3 N: L; f&gt;  pi = 3.016 l& Q  S) S6 s% v) \7 {! S
Uncaught TypeError: Assignment to constant variable.
5 H+ u* _. |) h3 X+ i6 {0 j    at &lt;anonymous&gt;:1:45 D, a$ _2 |- d/ ^4 v. |% Z" b* B
6 P7 T/ Z: n! T3 V
</code></pre>) U. A" ]1 S, o0 q% ?4 i5 F
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>. o) e! x9 z! ~. n
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
# H/ P. `! y& J& [* z7 Q: {: f<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
) j4 ~- L# {! k6 j( K: ^+ D4 b<h4 id="231-number类型">2.3.1 Number类型</h4>
( z  g$ U3 i5 v+ |! i2 ?- A<pre><code class="language-javascript">&gt; var a = 5/ N* ?4 |$ ?: d- t' r- ~
&gt; typeof a   //查看变量的类型  
( `/ G# X+ R5 K, P# [number- W. k- W/ k6 p& w' E- b
7 G' _% `8 }: w
&gt; var b = 1.3/ A0 B+ O6 t* d/ U2 c& S4 q) [
&gt; typeof b8 x1 s, L% d7 q0 i
number0 o2 _  i+ W% N; l. b4 M0 l! }
6 T& x0 s0 l" ]) f" c/ [
// 不管整型还是浮点型打开出来的结果都是number类型  e& C) h1 j1 G/ A5 T; q+ l4 \; I
& ~7 l4 I- p4 j- t; R; b
/*% V' k: X2 {! \% O) M, d$ z
NaN:Not A Number* s5 a" F% D9 e4 n
NaN属于数值类型 表示的意思是 不是一个数字( l6 i4 K# f7 ^: O8 U
*/" \; e3 F  J# L& I4 T

6 V# w' L' {: ^; ]0 d6 {- NparseInt('2345')  // 转整型" C' y1 @8 w$ f. s; ^" e0 ?
2345% J4 O- K' ?5 x
parseInt('2345.5'), T7 F) s  I# x; _, ?
23457 y7 M+ w- U! O' j+ [  g5 r0 Z
parseFloat('2345.5') // 转浮点型: w5 Z' Y3 ~# b# X* v. @8 ~  {. I
2345.5) X2 R' t: e# q# w2 u& Z
parseFloat('ABC')
  ?2 ~, X9 W6 [0 T, lNaN. Y2 [1 \$ P& i1 c3 h6 p
parseInt('abc')
% {( I9 T3 ^, q! g) XNaN
& ~* R3 i* [5 k</code></pre>
8 D9 t8 ^. e# t1 W0 [( v. z<h4 id="232-string类型">2.3.2 String类型</h4>  o' h$ ?; g9 {; ^
<pre><code class="language-javascript">&gt; var name = 'Hans'
* W! f( B; R; T: ^&gt; typeof name
" I3 c9 @! n# g; M6 ], B'string'
2 ^: ]" Q! }& f: e, {4 G; }  D& `1 ]$ ]7 D) ]) t2 b
//常用方法+ [- \. H/ g  ]9 y* [- T$ X+ o
// 变量值长度
6 P% Q& X$ {- H& a2 U) n&gt; name.length
: l3 m8 d4 s3 t45 r0 i; b3 I" P
// trim() 移除空白
5 g) E& ]4 W" ~# k5 L&gt; var a = '    ABC    '
8 m3 a. u& P$ C/ i& _, F* w&gt; a8 W( ]! {; A9 f% W3 e, x# V! h' h: w
'    ABC    '
% b* G5 b2 I6 m1 ]&gt; a.trim()
6 B  I4 l- x, c: e) ?. `'ABC': _! F9 x' K- f/ ]
//移除左边的空白
. C; y! \; a/ P1 G3 U% t# w( R&gt; a.trimLeft()
8 A% M6 }7 d. N2 d6 E9 z5 ?" Y'ABC    '
* o. Z* `  [- j1 {$ {$ [- D( X//移除右边的空白2 D4 z9 z' X5 J  ?
&gt; a.trimRight()( j) Z% d5 }. u. }3 v% }; A
'    ABC'
0 L9 y7 M7 H- z4 x/ V- a
! F& K' h% @7 V  l0 U//返回第n个字符,从0开始
( a0 v( x+ J  _3 ?9 S) s& q&gt; name
0 \. \* D" ~, Z% ^) K* E'Hans'
$ e* J: {" @/ c' g: S7 y&gt; name.charAt(3)3 v  q+ n/ ]9 K; s1 z
's'
( D$ c2 b% I7 t. r  [  J9 m&gt; name.charAt()
* j4 I1 i# f5 _3 ^( ]+ ^'H'! d; O/ o6 H! e- j( Y6 ]7 S; `
&gt; name.charAt(1)8 d  m9 G$ ?, |5 i$ t- Z+ C
'a'
/ u/ G8 b* ~3 {. }% h! I/ e1 _& d0 C
- G0 }7 r! o- e// 在javascript中推荐使用加号(+)拼接8 \* x. X% O) I6 z% K
&gt; name9 O/ S/ C. Q; J2 d4 ?5 J, {5 m
'Hans'8 }+ Z1 M8 G4 L
&gt; a
* {  B3 n; K) t$ C3 ?'    ABC    '/ K* X5 ~6 p' U" Y
&gt; name + a
4 [1 W. P6 c4 v7 D5 L'Hans    ABC    '. T& A6 {: I6 X1 l6 T1 b4 _0 O
// 使用concat拼接
1 t) D& P" [. N6 F6 z+ }&gt; name.concat(a). B6 O4 a9 \% M3 C0 S( [7 _
'Hans    ABC    '1 S8 G+ q* v" k( Q5 P/ f8 }

- J& J, y: P5 @$ z//indexOf(substring, start)子序列位置
$ I; w7 @& O" {# G8 T" v. Q/ C' i( g) A' ?* ?6 y1 M; k
&gt; text
% l- \# \8 `. c) V'A young idler,\nan old beggar'+ d7 [. C2 ^1 `" X; U
&gt; text.indexOf('young',0)
; h, y0 W" o6 H2 L9 L20 s) j2 h  b- A1 ?' P5 u7 s
4 I2 c  B% y# W9 E7 Z2 x# j; U) m
//.substring(from, to)        根据索引获取子序列
2 @) @, Y$ n8 b" T/ B&gt; text.substring(0,)
! }/ \& c& g. }+ F, f, X) i'A young idler,\nan old beggar'( p% H" \  s+ e+ u- n
&gt; text.substring(0,10)
6 e$ F& a+ O  ]3 _/ H) T9 S'A young id'' s0 Z/ C: f# d/ \! W9 F

0 p/ y; I* r* ~6 x7 U; s// .slice(start, end)        切片, 从0开始顾头不顾尾
3 ]5 C; I. ]3 z) v&gt; name.slice(0,3)$ w* E: e, V  ]3 w
'Han'
: g/ c% S# @; v  C
+ v' f2 T, j5 J// 转小写
* m5 w4 u6 @+ a# P. ~5 [4 {6 d&gt; name+ A8 w# b) v3 H: k
'Hans'
  R/ O, j8 F  ]! f, r9 T&gt; name.toLowerCase()
5 B- M4 x8 P: s* i3 N'hans'
- [, q7 ?* e# R) i// 转大写
1 g: m3 d9 K2 g" h&gt; name.toUpperCase()
0 k8 z2 S( y% C'HANS'" _4 U3 o. W7 k$ {. u: s& [# P# B
) c/ B, I- O3 C1 F/ }( b; B
// 分隔
* |2 Y8 o; X/ d$ v  x&gt; name
. \* A, \' k; g4 m'Hans'
: ?3 f8 X4 I9 a6 L( W&gt; name.split('a')+ t% T" J  Q& q
(2)&nbsp;['H', 'ns']8 ~5 c0 F: b+ R$ U1 h' d
</code></pre>; j. g" a  H8 L
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
3 u: k% B5 W3 D' b: Q<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p># {' c- o4 c: L& _2 W: C
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
/ g+ X% x) p- m- O<p><strong>null和undefined</strong></p>
% W  Y7 q9 F6 E% T1 F<ul>! `. A( x0 ?& l* Q# J2 E7 W
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
4 J" C4 g8 i5 Z7 y<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
  I2 H; y) c8 S' M) K</ul>
0 q# f  \; ?4 G7 l; X  v<h4 id="234-array数组">2.3.4 Array数组</h4>: _+ n# u4 b  C* G- s
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>6 a6 k, q% @5 I1 _0 V$ C) N) e8 H3 B
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
5 |' e8 F! Y. m6 {0 q&gt; array1; b0 e, F, D1 @+ c% u; m8 ]8 ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 P$ }  ]$ V% a9 w7 W* s&gt; console.log(array1[2])  //console.log打印类似python中的print# Z5 F; c" u3 y7 ~" ^
3
2 P3 Y* W/ [$ c) j# l// length元素个数. a6 f# h( g* {8 w5 j8 {; j/ d
&gt; array1.length
4 j* d2 O- [4 F, i  @& t2 ?2 w9 g* Q3 p6. I! ^' `" k: a, M
// 在尾部增加元素,类型append
$ J! N  p4 m- @; V" d&gt; array1.push('D')
. u" H( U) [3 Y& D7
, m5 C8 M& m8 t% ?2 l- }&gt; array1
, s% ~9 Z, [& c0 Q3 D0 N(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']- L% C' @* u/ Q, J% V  F
// 在头部增加元素
  U/ W! w4 x. U! Z$ v&gt; array1.unshift(0), V5 ~5 F/ B# @5 }
8; A4 T( F* o1 N" Z8 i$ P
&gt; array10 O' x1 p/ k; L4 k0 A7 k
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
. V; O9 e/ @# _0 r" [1 f6 ~' \# `! Q# A. [+ B6 e. R) T
//取最后一个元素: I1 E4 j) E; E  N2 _
&gt; array1.pop()
. w9 S0 D, r; ]' I6 g'D'
; w/ S1 s7 d# \&gt; array14 D' T. j8 _" d
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c'], O- W9 m0 A8 j* N% R5 S
//取头部元素
) o4 H7 Z/ D: S5 ?# H% |  h7 N7 T% c&gt; array1.shift()
# b5 V4 Y8 o1 a: O5 a0 r' x* u0
' J9 N2 g, p' }( O& X& P&gt; array1
6 x& \5 o- y4 P, Y: s(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']8 L/ d, |; a2 ?1 Q0 _1 ~

1 a* f) g5 D( U7 m+ P8 `//切片, 从0开始顾头不顾尾* j) f4 n7 u+ _/ A7 `, _
&gt; array1.slice(3,6)1 t0 J% T: j: N# p' H7 h" M
(3)&nbsp;['a', 'b', 'c']
. Z6 Z5 J! u- o1 a) T; a// 反转
! A' _& f0 \' F: j&gt; array1.reverse()3 V0 M% C7 ~" J- u
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
1 t, E; g6 L! \( B' m2 ?// 将数组元素连接成字符串
0 m4 j, M" g1 a5 ^; @' t' K&gt; array1.join() // 什么不都写默认使用逗号分隔
0 V' P5 @' q4 d" N  G'c,b,a,3,2,1'! w# @! _, y6 H0 d. o0 T4 V
&gt; array1.join('')
4 u: u$ {" p; B) \'cba321'- n1 d- u% {! d+ U. m5 N: B
&gt; array1.join('|'), @' ?, Y1 r* j
'c|b|a|3|2|1'
; R- {2 y5 t! G$ ^1 b5 e4 U
& I1 E# \: F; K9 t// 连接数组
! D$ v0 t$ O' u: V8 i, P: C&gt; var array2 = ['A','B','C']; o) I! d2 Q# L! o2 q1 g
&gt; array1.concat(array2)8 q- t: C3 a: z; Y5 @- H# \
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
" J6 `( w% p3 j# V* q6 ]% P! E0 g+ o1 Q
// 排序
* J8 ^2 k/ {- ?. y8 w&gt; array1.sort()1 E4 v' N- J, ^' N! x0 j  v
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. [/ S) w7 ^9 I: i1 X  w5 @/ D, E3 `: O1 L/ [# a6 G
// 删除元素,并可以向数据组中添加新元素(可选)1 F! q- b1 I# f1 o
&gt; array1.splice(3,3)  // 删除元素7 X3 @+ Z# j8 ^5 N0 l& a: t: Q
(3)&nbsp;['a', 'b', 'c']
( i# R( c2 a1 x( c" K" x7 C5 T9 @&gt; array1( S. A  o6 ?- o2 ?) g% S8 B6 ~) l
(3)&nbsp;[1, 2, 3]6 T' H% }% u4 J9 Z7 K! |
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素  E2 W7 s0 |7 Y
[]7 U. G7 k: d; x% V+ r5 [2 Q
&gt; array12 {3 B  ]4 y& O  [: l7 p2 Q" |+ c
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
# {% @' V5 s( [+ F4 {
6 I0 i- j' W. b5 R2 M/ x" Q/*5 [6 Y* R  L2 l* _' V" j
splice(index,howmany,item1,.....,itemX)
) C& F' J2 P: o6 T) W% A  mindex:必需,必须是数字。规定从何处添加/删除元素。4 L8 w; w% s0 }8 F
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 D$ g7 D& Z  S4 ]$ {item1, ..., itemX        可选。要添加到数组的新元素
0 H  N5 q4 ]: R9 E*/% k+ d. ?, w  Z. L# Q

, N' O9 D$ i9 r// forEach()        将数组的每个元素传递给回调函数3 {$ e3 T* ~6 L/ m  W
&gt; array1.forEach(function test(n){console.log(n)})9 G3 P, |  H& o  J; ]  H2 H& c# }
1
% g. ^4 m: G& i  X 2
3 [. j" I( S: t0 ?* \ 3; D( B; R) e3 h4 G( B
A
" W/ u4 a3 Z) h B
% ]" A/ ~. v1 m' N: w! p; H C; H% Y2 @+ C, F, Z4 |5 @& [
// 返回一个数组元素调用函数处理后的值的新数组: O) {- J3 ^% ~$ j7 S
&gt; array1.map(function(value){return value +1})3 w& f5 f: J* V
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']6 L& l: S0 O& H3 G- p
</code></pre>
: S, o  C$ t/ a9 y! p; i+ B<h3 id="24-运算符">2.4 运算符</h3>
# O; {4 y8 a' S: ?5 L' i% e<h4 id="241-数学运算符">2.4.1 数学运算符</h4>; G7 J4 T% m  y
<p><code>+ - * / % ++ --</code></p>7 Y# V# z" T- c4 a
<pre><code class="language-javascript">&gt; var a = 6
! h2 Z5 X2 n) e( R&gt; var b = 3; l  q1 m) S  a% z. l
// 加
( a( j4 J% Z2 ~1 s+ p8 b0 h&gt; a + b" X  R, P) k' S3 [2 A
9
6 A5 G! u8 Z6 o( p// 减5 L. O% P+ e  x
&gt; a - b
9 c7 }0 Y' \) o' y- o7 e* y35 c' U/ @2 \7 U
// 乘
$ a. n/ Q" w0 l5 ?; m# q6 L% M" X6 O&gt; a * b
. m3 Y; @$ r" H" J, H& R18& ^( X, u, ^  g# @+ N/ S
// 除' e" G, [$ d: ?/ m1 |
&gt; a / b
* e( n9 P5 e  @. Q6 z0 }25 q7 `! p7 t/ n) |! C% i
// 取模(取余)
) a8 Z1 \. N- D9 I- L  [& o&gt; a % b
6 L  b+ X% v5 {9 |01 ?; Y- j4 P- P7 y
// 自增1(先赋值再增1)( I! C: Z, ^3 \3 |: |3 q
&gt; a++# D5 @. J; I$ C5 X; u1 B0 O- I
6
" q4 p( s. z% {# Y% q9 D- x- i3 u&gt; a
# o8 u; F2 i/ I0 r; n; i  A) [7
- V+ I6 @2 `0 B4 T5 n" }% t// 自减1(先赋值再减1)
$ ?/ {- F0 \) N' d: S& c&gt; a--" ?" [/ D$ R3 L% U
7) c4 y/ y$ @+ H- z3 m* l$ w8 u0 x. w, S4 A
&gt; a
; T  y7 h: H- F: C$ Q; F$ X4 j: k6. _2 W0 D2 h, b( _; l9 x
// 自增1(先增1再赋值)8 i  A) `: |5 B8 K! M4 v0 }
&gt; ++a
2 t0 X. u3 j7 i# U; a- a" r73 s4 h; E) f' e/ k) n
// 自减1(先减1再赋值)' i6 D' H& h7 E* W. X
&gt; --a
' M$ e: ]. V$ I* z$ J" ?; b' L! Z6
% I! h3 G6 Y0 `' z&gt; a0 @2 E$ R0 Z  j! F/ f" Y! @
65 K( z+ b  K4 T

1 u' v1 E; E  _* t, o" F8 Q+ F//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
: g1 B6 b0 n; [0 F: h: _. ?</code></pre>
4 }: P. P. }& N' }. M' h* |' ?" k8 A2 U<h4 id="242-比较运算符">2.4.2 比较运算符</h4>7 U5 V! T0 u5 _4 G" f& Q
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% S/ ~3 d% p3 ?* A) Z6 T* l3 M<pre><code class="language-javascript">// 大于
( S- ~+ T! Q! x: J/ U7 n&gt; a &gt; b
4 T; }7 u4 G0 H/ Ftrue
4 a3 i( @- U$ p$ l, A2 a( k// 大于等于7 L6 \  ?6 I0 m3 U! t  Y) [( z
&gt; a &gt;= b" z3 d  c& x" B9 w$ P* J% z7 ]
true1 }5 f1 E4 I) m' m# j$ j- y
// 小于, L: j  i5 M4 w6 q! ?2 W( l  G
&gt; a &lt; b; x$ l/ ]  x) W1 B
false
6 n, m( r! g# S- c5 G* r// 小于等于1 t2 J! z5 F7 C" _
&gt; a &lt;= b
7 Q# ~' ]$ _7 R9 z8 e7 |0 e, ofalse4 L( {* ~% B% h& w+ E
// 弱不等于
+ P( r# i  j$ r: x: m2 Y&gt; a != b- F7 Y1 B6 Z5 ?2 w, H# i; L
true
0 e8 e/ ?7 }4 ]- x6 _' ?- _// 弱等于
1 f; B  h" d$ P, |9 |1 m&gt; 1 == '1'7 M% O7 Z- V! n; P
true
& F5 f: e, U" {" i/ I6 H+ w4 g// 强等于& {( _- R: y% d) [3 V- o3 H
&gt; 1 === '1'
/ ]6 B. Q, A- q" u- Z2 H0 ifalse% S$ \& L: e- ^( z1 ]  s+ z$ {! G% P
// 强不等于; C( i4 `  c* B# d6 q
&gt; 1 !== '1'  d: D' \9 H$ S  C
true
0 d. v' e+ O8 ]1 O  b5 f
7 N! Q  o$ d( {& z. C4 T$ b; z' {/** E% K9 f0 z1 m. D& |% |7 g
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误! D+ E) j; N2 g
*/
5 ^# c/ C5 _! A+ _& h& q) ~</code></pre>4 F1 a1 b- L% x/ `, O- _; O
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
' b" W  @0 s9 B<p><code>&amp;&amp; || !</code></p>) m% T" W. v  {2 j
<pre><code class="language-javascript">&amp;&amp; 与! c4 U, ]) Z3 {/ q/ v0 ]: g* D
|| or $ @( d- d0 ?0 m+ ~. m
! 非% F% [9 q8 Q" H1 @4 V! O
</code></pre>
" f+ @1 B1 Z4 n<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>5 o: h& j' x, N1 _
<p><code>= += -= *= /=</code></p>
# F" o; k  E) N9 @  [- d+ x<pre><code class="language-javascript">// 赋值
5 a  S1 g9 E3 M; g: N&gt; var x = 3) u" G! o/ c2 R1 \! e% a; h
// 加等于$ C* [) B) b9 P3 y
&gt; x += 2! o7 i) H$ ], q- |; U) O1 d
52 H( L7 e% @  X+ U/ ~
// 减等于+ ^4 Y- a4 G1 c' k2 K! q. H
&gt; x -= 1& f3 U4 L, R  x# u/ X8 [( d" s. ~6 S' t
49 C% h( L2 j1 a  x
// 乘等于
' a6 X& \! v, l4 e8 w, b&gt; x *= 2
3 e3 T$ J5 J' I; S* L4 P/ w87 l4 \' W/ ]2 }+ g* ?  Y4 K
// 除等于
$ V! s9 c, A$ n" y$ ?1 o  B+ R&gt; x /= 2' b+ B: h% S" L# C: L: B7 L
4( r( x( o& A* A" x
</code></pre>( N: \8 @6 g  B3 m2 V" y5 f$ `$ O
<h3 id="25-流程控制">2.5 流程控制</h3>1 j+ K4 ~5 ^# h5 R1 e
<h4 id="251-if">2.5.1 if</h4>
# Z2 A! z7 R! z" }& J4 }6 @<pre><code class="language-javascript">1, if(条件){条件成立执行代码}5 I+ k# i% Y! x1 ?

, c3 T3 b& ~& Q1 O3 C+ u&gt; var x = 3, @' d4 @  v, i, _% @/ }
&gt; if (x &gt; 2){console.log("OK")}
7 z) A5 L3 |3 k  e  [  ` OK
2 g2 u& O( `# m! _
% s' B9 @- k+ j- g2, if(条件){条件成立执行代码}
0 [1 z1 S+ k# w( h7 d2 F        else{条件不成立执行代码}" z7 Q) R4 K  u

/ y7 k9 ?+ ]$ S) E6 l+ h&gt; if (x &gt; 4){console.log("OK")}else{"NO"}8 e* L6 B$ q* k+ E
'NO'
* h( I* s$ V! \' F) G
3 r" ^1 q  j# q2 o  I8 a0 r8 K3, if(条件1){条件1成立执行代码}
0 L% \% ?- y. c9 R: [) X$ z8 L        else if(条件2){条件2成立执行代码}
& r2 ]* @; S+ M% K% b  S, K2 _    else{上面条件都不成立执行代码}
7 p+ H- {0 @3 F. ~) _2 J
( W! B; a) t: I& x2 F2 G) I& K&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}: D4 ^8 ?# C8 r* y& W" f3 z- P- t8 l
Ha
, b5 i9 V: r4 E</code></pre>* f1 A' B+ D5 w* U$ b
<h4 id="252-switch">2.5.2 switch</h4>
+ ?5 t- j) L* K% F* U<pre><code class="language-javascript">var day = new Date().getDay();: V. E9 T- r/ z' @
switch (day) {
! a0 c; R' C$ o" e  case 0:
. }6 T8 l6 ~( p# \  console.log("Sunday");0 z! Q8 z0 \0 q/ t  N) I7 |* K( r
  break;
- I4 S+ i7 `# K! L# f* ]5 S" ~* @  u$ j  case 1:
7 m% P8 G! h; v3 ?' I; X( I  console.log("Monday");
* i. h# N$ _4 b# r$ p! q  break;/ G( `% ^! t) p' d$ J
default:
3 J! s; x) e. X, s+ _5 v  console.log("不在范围")/ w, x, s- {4 Q3 @( W6 U
}2 b; s0 }5 e+ T
不在范围2 n) V# O' T" g7 w* H1 B/ |
</code></pre>
: f8 Q) d4 @. R0 `<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
- r! h3 [4 o4 w1 a1 `. I<h4 id="253-for">2.5.3 for</h4>4 I0 L& e# G' h: A( x  t' g
<pre><code class="language-python">// for 循环6 T# S& Y6 {& Y+ F3 H
        for(起始值;循环条件;每次循环后执行的操作){( g* S& b2 i+ o. J3 V/ J1 z
        for循环体代码
  V/ Y& {2 x& _# M4 k: q    }
' B* l- w% A( V5 r- ]8 L8 E; V* }0 W: b
for (var i = 0; i&lt;10; i++){8 p" }9 c5 i. r' n$ }# Q3 x5 d
    console.log(i)
& m) U* ^" ^9 N( ^5 k( l' q; X}
# j- Z# Y7 C- Z3 H; X6 t: }        0
7 {4 J# X) E. ~& v  T/ H$ g        1
/ W. d+ Y$ j3 x/ R) {$ B        2
7 ^% m0 g$ Z- N9 c        3, U, y7 J4 t" I& D
        4. p; F3 A; t* D: ~6 F3 `( q/ m; k
        5  m) s$ T9 g* s* O" r
        6
! V; ?' D) Y( z; v: V, s7 o        7+ {1 K% [, T/ ?: o
        8+ D) m2 U3 S+ w. p+ y9 T/ v, P
        9
: D) b& B$ h" l</code></pre>
5 Y" s6 t) y' a$ `4 f<h4 id="254-while">2.5.4 while</h4>- A8 c; z7 ^; P5 M2 V2 l
<pre><code class="language-javascript">// while 循环
" r, s" y$ D) Q: v  B% S4 p- d        while(循环条件){
( |+ A+ L. k+ U6 r. c4 `        循环体代码
+ Z, D2 }/ h+ g) V6 z    }
3 w& s9 u6 v' l! b1 }6 N9 V) W  G7 z: N) d" W* ]7 A! U
&gt; var i = 0
% b* T8 k+ E$ L. d5 i# q4 Q, `1 K&gt; while(i&lt;10){
$ n7 Q4 X! S: P  ~    console.log(i)1 M0 `, D' u" s, S6 Q* x2 M
    i++
* D% i9 e- v* k6 a. I( F4 r}
1 {! X0 [7 W4 }2 [2 `, }, \ 0
# z2 z) `( `) C 1
; w) B: i7 X1 s( R6 \ 2- k6 s. G- [5 ~2 j; ]9 H3 ^
3
3 S' |, [% ~! J2 Z  ?  w1 U 4- Q8 `% r% I: T6 W: c/ I: `# c! }
5
9 ]: z8 n7 T! M0 t3 W7 e 6# S$ N* [  g: P. B
7; v6 h- E6 R. i7 W
8) E2 {; n6 E5 H# w* ~  n+ R. ]
9) J% ~5 X  T$ I" E- @
</code></pre>* d+ O1 B! X+ \0 w6 u# a9 I
<h4 id="255-break和continue">2.5.5 break和continue</h4>
" Q' o0 E; D0 ^3 ~<pre><code class="language-javascript">// break  J; U, G9 w  r: ^5 H( @4 W
for (var i = 0; i&lt;10; i++){
; K& a* T1 H, Y4 ^. t    if (i == 5){break}
' _6 H6 I2 _. g& a. u! b4 q    console.log(i)
  s; _! q( f# S' A/ I% A  b}" o* G# r8 \6 V* r% K( u  V
0) \8 _, _# |$ j# Q# c% n5 T3 z
1/ E! ^5 y( N* B" X* c: M: p
2$ o- q6 Q2 S5 r7 o( s8 N
3
! y: e  u8 N" k$ m+ ~* a% v% c 4
  I* R$ O$ l. L+ Q4 `3 U$ A8 F( g// continue
5 ]- n$ k1 u) n$ mfor (var i = 0; i&lt;10; i++){% t7 H" P( P% L6 ^2 p5 W* I
    if (i == 5){continue}7 d9 j6 K$ Y5 h% n
    console.log(i)' N7 N  I5 g* H+ ]
}- z5 i) w2 ]& Y0 ]& o
03 x- x! V" U9 L; K+ G* |
1$ o3 J9 ]( p8 p) S9 e5 s6 g5 {2 [
2
9 V$ y! I! p6 n/ Q9 S! V; ~/ P/ R 3
6 G* s" ]+ ]4 L0 \$ p, Z# ~ 45 G& C) v6 g0 Q- \7 Y- W: |
6+ w- `: n/ R: [1 D" m( U( v2 Q
79 q, W& ^3 h% K9 k' s8 @2 H
8
1 e! u9 {% L. h( v. ?, v# z) f9 ? 9' O6 W4 @; p# h2 t! K6 w$ i
9 N0 z- J8 i( x4 o5 N
</code></pre>4 _- Q' Q& k; p* z; M  B
<h3 id="26-三元运算">2.6 三元运算</h3>
, A; `" Q" p. S/ ]% H9 A' H<pre><code class="language-javascript">&gt; a. r$ q: O0 P" D8 A/ |
6
* o( r/ _4 j0 u6 o! J&gt; b; [. H- R& \, L. e0 n0 Z# Y* {7 o/ j
3
2 s' ^1 z& t7 g. N- I" j
+ ^! n) L" R: {* L//条件成立c为a的值,不成立c为b的值2 t  ^) w0 Q$ b* s
&gt; var c = a &gt; b ? a : b6 O7 K  q, q# M- y* x. w
&gt; c) t% o3 C+ I: \! \6 e
6) O2 _$ l5 F% l) }9 J, b" h" n
7 z: ?  O4 d; ]8 L4 w
// 三元运算可以嵌套
3 B" V4 a) B1 ^1 t7 m! M$ M</code></pre>
: Y5 V( [1 h1 ^0 o<h3 id="27-函数">2.7 函数</h3>
0 @5 D  V; `" }- x6 M, k<pre><code class="language-javascript">1. 普通函数
$ q0 i, A% I; o( v  `&gt; function foo1(){
# U* ]: E3 r9 M. y# ~: z    console.log("Hi")& H. d, Z1 d: o& k6 F& S
}
! q" F) ~3 Z. V* |* H
7 y" [/ e* r& b8 a8 |&gt; foo1()  E. D6 n# ^) `6 Z; ^' J
        Hi) M. R$ \& L8 v' H5 m) z
2. 带参数函数
- @7 ?: W# T. e6 J5 E4 N1 ]2 H&gt; function foo1(name){
6 a1 T+ y: A0 x9 _8 Hconsole.log("Hi",name)8 O' q3 N% M. D+ S  g$ x# h
}
$ }- j, r6 m4 T& D) L0 m0 Q: Z2 E$ G6 Z" Y3 V2 A1 f
&gt; foo1("Hans")8 Y. y3 D7 p$ B8 j# A$ X+ @: @: @
Hi Hans
# q6 f% s( N0 P9 m( f. X- j# Q6 r, P/ E) @& ]  V' f0 }) j
&gt; var name = "Hello"
5 q) U2 i, r) {&gt; foo1(name)
7 P; q5 e% C! ^/ X( uHi Hello# C" P2 @% O7 D5 {9 a  L" D
) C7 J3 o7 F  m# Z
3. 带返回值函数
  _" l: @4 s: T! m. ?; P&gt; function foo1(a,b){
% U& r2 ]4 ?( @" \1 M! Z        return a + b   
' |. ~' A6 Z% `6 _6 [}0 }. w! j6 V+ e2 B* M* X
&gt; foo1(1,2)
6 `9 c  T$ m2 g0 ]$ W6 Z9 B& w; |0 G3' @& I( V; S, S# z% k
&gt; var a = foo1(10,20)  //接受函数返回值
/ z* W0 s% W! X' ^0 |" [9 n: n6 ]&gt; a
5 \, `! K) T3 p2 m7 C) H( b( f) y30
! H0 D5 B, j( b. e7 z: ^! T' F! T' y. o' g% x
4. 匿名函数
" o' R, z* d. e+ i- J$ c% a; c0 B&gt; var sum = function(a, b){2 ]# G1 G# e) Z& g* l" G
  return a + b;
4 G2 |$ K) ^" {( c$ J}3 B  t4 D2 Y/ ?/ Q; p4 f* F/ @5 Q( ]
&gt; sum(1,2)
5 `9 r6 @# Q& v& x. |3' c# M- U) N, C3 |7 O9 g+ ^

( A* a  N# J# K( j- Y) H8 h// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱& ^3 P. T' l, S
&gt; (function(a, b){
& H" n5 i, Z- T' L  return a + b7 P( a) `% K: E8 z  R
})(10, 20)
; M, N% w3 |- u4 E6 v; D  A" d6 T1 ?( e30" }0 X7 X& l6 W* b/ N. S% \# R

3 x  `2 M2 r& y0 G! S8 f5. 闭包函数7 |' |8 U+ s2 Y* r' F
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
0 B9 i6 X  U& R' m, Yvar city = "BJ"
9 S6 ?4 A! m3 w; p; K# l" v$ t. zfunction f(){# l; S7 R% k/ U, r; A
    var city = "SH"% T2 w+ f. A4 z2 x" a; Q' T$ h& o
    function inner(){
2 c3 A7 U8 {, U, e$ d4 p        console.log(city)
1 H/ ~: y* v3 m  F$ |! ^. E    }8 u8 j$ X% M5 ]6 |. @! c
    return inner
# q/ M+ o) C8 J; s7 Q. p}; r6 i& v2 I$ n
var ret = f()/ ^! I- M8 g9 l& e5 e; b( O
ret()& x- B$ l) h) J4 K
执行结果:9 n2 K8 V* D* X1 ?7 \/ ?' F
SH- A: e0 L5 V3 P% E# F2 y- P) d

8 b6 {4 h5 x8 B2 _$ G  T5 x</code></pre>  f/ a+ a, J" ]- M
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
6 L2 T9 V; E. S<pre><code class="language-javascript">var f = v =&gt; v;
5 Q% t( G) e6 a- x5 }% P1 D// 等同于  p$ _. L3 ~3 R) d
var f = function(v){
& g' H2 S: m% O& C' P  return v;
; D9 c; N) H) J! P7 p/ j2 i; ?6 k}+ o: H6 h! K8 B. k8 I1 @. D
</code></pre>
3 B) Y  \% c  j& \% ~2 c6 V<p><code>arguments</code>参数 可以获取传入的所有数据</p>5 y# @$ n, b0 t' i; P
<pre><code class="language-javascript">function foo1(a,b){2 k; z$ z: d% t% _  O) ?
    console.log(arguments.length)  //参数的个数
9 T0 p" d2 X& I7 a" y; Z; J    console.log(arguments[0]) // 第一个参数的值& j* q/ f7 }7 u' M7 ~  M; U  T
        return a + b   ( m( X' x  n2 ]7 P/ v
}
* r$ M0 j* D8 nfoo1(10,20)
  k( N# G. ^7 {" N) s' I1 h- R! b结果:
! R, R: q! O  Z; J8 [/ V 2          //参数的个数
4 U) T3 d8 l$ X10        // 第一个参数的值
/ S6 ~' ^, U! x) y1 X30        // 返回相加的结果
$ m+ \' q! F7 l! F1 c</code></pre>
( C# d# W+ V; w! a- m<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
1 N3 U2 ], c6 e<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>1 t0 _' r9 s& f* u
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
  X) G7 Q" ?- ^1 D4 P<h4 id="281-date对象">2.8.1 Date对象</h4>
$ h9 [: ~# ?# E  e$ m<pre><code class="language-javascript">&gt; var data_test = new Date()6 f+ J2 g4 v. q
&gt; data_test
* R" y( E1 z  L# AFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  _' F& s9 |% P
&gt; data_test.toLocaleString()
. ]: @+ M8 Q$ y' R'2022/2/11 下午9:44:43'% Z8 [  ?5 J- W) g3 B& s5 i% |( z
; D' J) M/ o& u: }" F) r
&gt; data_test.toLocaleDateString(), ?( U* v! f- l+ v
'2022/2/11'3 T" |" c- V2 L8 K% S( C7 |2 L

' D( z1 ^: a: V3 s; \8 n&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  }# Q* k4 E! w; E- ?; j&gt; data_test2.toLocaleString()
( N2 }  J% R+ z; A0 i" L) d( N9 \'2022/2/11 上午9:44:43'4 R3 v7 H( i$ d6 z" P5 k

0 Y% l( L) W: v0 Q$ B6 [/ D// 获取当前几号
. S1 f4 O0 i5 _5 S. m0 g% @&gt; data_test.getDate()
3 {; y% D7 I! I6 O9 @$ \11
( {3 Y- D1 b4 |" ^" v# n// 获取星期几,数字表示- j4 }# ]$ {" r. f( u( Y, c# D
&gt; data_test.getDay()  3 [) @. R$ z! |
53 o: p5 c. o4 v5 o, E9 J
// 获取月份(0-11)& s% y8 O& L7 _  J+ G7 |' T. M8 g
&gt; data_test.getMonth()
8 b; `9 I5 C* R5 N1
" W0 R4 |, @# L. p9 J! h. d, g$ h" o. Z// 获取完整年份+ s( Y' a* W5 c% Q3 l: R! W
&gt; data_test.getFullYear()
. D. [" S$ g' L0 i2 l* c* w; j' H2022
8 D2 K1 [7 k+ r$ V/ R" ^2 G) b// 获取时
0 a+ U# a' e- M# ~4 Z&gt; data_test.getHours()
0 w* c* A+ H) ~0 `  _21& J8 i; u& k* n7 `8 z& R
// 获取分. d( e/ P1 P! b( x5 J5 a
&gt; data_test.getMinutes()" q; x; g$ X/ }7 T. x, m, z
44: ?  o/ E3 Y2 ]6 o5 K& p, s; ?+ j
// 获取秒
6 G/ g7 H+ l' U% o& I# U&gt; data_test.getSeconds()4 l9 a" |& Y/ H
43
" [+ p9 C- o% q( q+ [+ Q9 @// 获取毫秒/ l! e! \) q" F+ w% t) c+ V: v5 E$ \
&gt; data_test.getMilliseconds()
; @" d  D7 d- ?) p290
& i; v2 k6 P! s$ M1 {; H5 y* E! L// 获取时间戳! S" i6 P; }2 _( M$ R  \
&gt; data_test.getTime()' x( E* u' K$ a
1644587083290
7 G* @  ~7 h, A. k</code></pre>  M* j' C" |4 r4 N
<h4 id="282-json对象">2.8.2 Json对象</h4>9 I3 t% @2 o! \+ P; b
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
# \" M) P! b8 ?9 }2 b  w% O3 X* H3 ^JSON.parse()  // 反序列化,把JSON字符串转换成对象1 c  j! t+ y, R

, H6 A( y. S& D; l// 序列化* o9 {# `7 |) @# R2 a
&gt; var jstojson = JSON.stringify(person) 6 X+ p, X$ }3 D/ I& P+ X9 _
&gt; jstojson  / @- j/ Z- n1 u9 e/ i1 F
'{"Name":"Hans","Age":18}'( `) B5 k; Y' B' h" ?' B* F8 w) a
  q0 e* `$ D0 f7 _- e+ Z3 M
// 反序列化/ q( |9 a7 u7 {* I2 N
&gt; var x = JSON.parse(jstojson)
, V3 g7 S7 K1 M/ p5 t, |&gt; x
9 ^0 d2 ~* `/ Z; _{Name: 'Hans', Age: 18}* Y3 @9 c& A$ S# o! F3 Z% m- Z8 c
&gt; x.Age0 p; c' L+ C5 y1 G. H
18$ u: R- u' u1 y, J& R: _
</code></pre>; \5 n5 G$ i# p/ s
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
1 n* [' E. w8 n; i<p>正则</p>
  ~: a& a5 r! e  W+ o: @7 `( H. Z! m<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
* n. w, M0 k3 D: ?, v&gt; reg1
: {5 {! H( R! e& q6 D/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ L. q+ \' d% u( `! ?9 q
&gt; reg1.test("Hans666")' j5 X& r4 V; e3 M3 w
true
3 v* F/ A% g' o6 x" x/ m0 |6 s3 Z8 W7 w' d0 G
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
; r* Y; c; T! o. H* a0 I# n6 g- E&gt; reg24 X% ^# _5 i5 [; q0 ~# r: c# ~2 ?
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 v( y( ^' C+ H2 T8 _&gt; reg2.test('Hasdfa')7 x+ z0 g9 _  K- p
true7 l6 E! \) e4 k+ L, n* a& K: v- [* g
# F" r8 v& R, V# E$ t
全局匹配:6 C$ `" `8 y7 Z
&gt; name9 ^  d% k8 c& ?/ h) h7 S( o
'Hello'
( s8 Z' `; N7 d0 c$ R! ?+ r! I4 F  r&gt; name.match(/l/)2 T8 n% [* Y+ ?. A- W( s. b, o, H
['l', index: 2, input: 'Hello', groups: undefined]
; Y, D) v/ V: K: S, k
- p2 b4 E$ j# ~&gt; name.match(/l/g)& o  S8 o, [; J9 Y% h! m! @0 L
(2)&nbsp;['l', 'l']
  P# A2 o4 a  H9 y: b- f2 j' R9 a8 }// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配8 `# w# E5 w; w8 w' f3 Z

# |% G- f1 c& H& b' s全局匹配注意事项:. x9 p0 S* J/ u
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g  y' s6 l: l3 e. H9 p  @
&gt; reg2.test('Hasdfa')7 `2 c! @" g. i$ ?$ l  H5 P6 {
true
9 r! }- k3 V/ \&gt;reg2.lastIndex;
' A3 E+ a  y! b& I/ X6 W2 O6
. {) i5 b9 U2 F. t&gt; reg2.test('Hasdfa')* J' z; w; o- b$ ~1 ~/ u
false. h% U. U: m$ E' ^+ Q; M. E8 O% G7 ]
&gt; reg2.lastIndex;
6 D' C+ ]( g0 [% M0$ w' @( p3 z# D! z3 e  Q: H
&gt; reg2.test('Hasdfa'). Q2 d8 ^# U# s) L
true" R& z. U* P( T
&gt; reg2.lastIndex;
9 P7 O$ g, g( L# E) f5 [6
9 D9 w1 r9 b( D: i8 [. ~&gt; reg2.test('Hasdfa')' [" L2 h) s: h0 @
false: J& k8 b  B6 L# b: F: @, v9 _5 m
&gt; reg2.lastIndex;
) b1 h# k' g# D7 X) @* H0
/ N* m# T+ j" O* [4 r4 W0 P9 j* e' {// 全局匹配会有一个lastindex属性
0 g  G+ b8 r; B4 U% Q) D&gt; reg2.test()
- B+ e$ H/ |) f  `$ g! mfalse
- _, g/ r2 y; Z3 g$ c& _# d  G&gt; reg2.test(), x3 t8 p# v  ^  x6 B& `; ]
true! f# @5 m( ]  v# c7 m7 F+ P: ]
// 校验时不传参数默认传的是undefined
: q% |, |5 ?& A$ s$ {  L+ X; k1 h</code></pre>
- y$ p3 W2 o; ?) @: a$ z<h4 id="284-自定义对象">2.8.4 自定义对象</h4>% E# x1 r% Y7 p+ d4 ]
<p>就相当于是<code>python</code>中的字典</p>* \% A/ Q8 B" j- q' ~3 ?
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}. A" i) p0 |  M0 t- k2 b% ~! p
&gt; person) O$ a1 B4 j# z& X% f
{Name: 'Hans', Age: 18}. F3 q. ^1 ^3 ]. m+ }) e
&gt; person.Name7 M8 F; r4 S# ^3 S% b0 l6 n7 Q
'Hans'
  Y: O# _; k8 D# d: O&gt; person["Name"]
1 y1 H9 F2 V4 {1 K% W'Hans'* C2 T9 R6 {. _/ z7 d
- H. p+ b, Q, H/ m2 ^+ f( {/ F
// 也可以使用new Object创建4 Q9 Y- L; Q* q# D5 v
&gt; var person2 = new Object()4 D# f8 ~/ Q2 ]! n* l) K2 q
&gt; person2.name = "Hello": \, s2 G/ g* z5 p3 q- q0 t! {
'Hello'
# E$ P5 z  I& E+ l1 }&gt; person2.age = 202 ~+ V: A7 J  v$ X8 ~1 Y
20
) h6 E$ P5 c9 E( y; O</code></pre>( k+ `, S7 H. l) @$ r8 G
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>* M$ Z# ]0 S9 B8 K, W- _! b  B
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
/ B& ~- d! k8 l$ b& q+ x- R, |1 \, m<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
' K5 m$ B# q+ {. }1 N$ d" _<h3 id="31-window-对象">3.1 window 对象</h3>
1 ], t+ y0 X- q<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>* Z# H6 U4 `# ~% C
<pre><code class="language-python">//览器窗口的内部高度
7 [: l% h. E( [  Qwindow.innerHeight ( R) {  r( w  y- }
7064 Y0 a$ S& ]" m$ P% O7 u- I4 ]  ~7 t
//浏览器窗口的内部宽度. l4 p: t: c  V& [
window.innerWidth
1 E" o" ^2 s1 P: ^& [8 v2 h, g1522
5 N, ^, X7 i* [; A/ i// 打开新窗口+ u7 k/ a' P  H! U
window.open('https://www.baidu.com')- f  I1 Y8 p/ ^% |. N6 M! c
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
% ~/ ?; `. @7 D4 [5 V7 E% ^& B0 {// 关闭当前窗口
# Z' G2 |7 z, ?% L& k: s2 T" b/ Rwindow.close()
  V: y" _  O+ m! K//  后退一页
5 i  j% ^, ~3 p/ Y9 J2 @; [# @window.history.back(), ]. ?8 Z& l- n8 C7 s3 r2 |: B. |
// 前进一页$ x" L4 x7 c5 M6 _* X- e
window.history.forward()   H3 z. ]) {/ [7 S
//Web浏览器全称
$ s! D0 f4 g" s3 `* o3 ~window.navigator.appName8 `6 f7 ]) `1 x" F& W# T' x0 c4 |0 S
'Netscape', U5 q4 o5 D5 A3 M4 o
// Web浏览器厂商和版本的详细字符串6 I  M' c1 u% _3 H- W! L
window.navigator.appVersion
6 x. d! J( L6 e9 E'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'5 }  a0 Z& _9 n9 z& A. N
// 客户端绝大部分信息
* s! j$ S# Q5 X  N0 wwindow.navigator.userAgent
5 |# c9 u% P5 S( ^2 ]; ^# }. I/ t# u( o'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) W  V8 `9 b1 r' ]  B7 \. l// 浏览器运行所在的操作系统
- @' t9 o# i0 C( m9 T/ ]* d! e  wwindow.navigator.platform7 @1 \6 X0 y- \7 L8 Z
'Win32'* \8 D' U$ j* J8 P8 ?* u2 M

. d- |; F" l2 c4 A0 }, [* @//  获取URL
) x9 W- P' y& r# nwindow.location.href5 j; D- z! i- t) L# c  S
// 跳转到指定页面
* }, T# V9 B6 t5 L) l6 xwindow.location.href='https://www.baidu.com'3 c. K1 B6 Z4 k6 @$ Z0 n
// 重新加载页面7 D7 Q3 c9 v' D+ n
window.location.reload()
4 p( a+ O: A* W+ h0 ~4 W</code></pre>  L# N+ T- I) L* o5 E; r
<h3 id="32-弹出框">3.2 弹出框</h3>$ x1 ]! y. b5 s8 F2 Z+ @
<p>三种消息框:警告框、确认框、提示框。</p>
! V: K6 w: _" |<h4 id="321-警告框">3.2.1 警告框</h4>- x% g4 S& L# }7 k( Y
<pre><code class="language-javascript">alert("Hello")
/ q/ F2 C  B# q4 F( F3 ^- Z  J$ p# K, }</code></pre>+ ?- U+ j. y+ X3 d. f' t  s: ~3 B8 F
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
* ?* e0 E5 C4 p% r7 p' T# d! @' J<h4 id="322-确认框">3.2.2 确认框</h4>
) Y3 Y% I) \1 ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 k' d: f- Y/ Q5 p# p0 ?; b<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true" G- t0 h! I- `; R6 B
true
' A+ K( }' Y, b, r. ]&gt; confirm("你确定吗?")  // 点取消返回false: ]' j  }  S. K! S+ Y* H
false8 j- h4 j1 @& X
</code></pre>1 h8 e2 l* G; R2 _+ f
<h4 id="323-提示框">3.2.3 提示框</h4>
% z) F, Q3 o) M: C. y* l2 W4 Y. Z. _<p><code>prompt("请输入","提示")</code></p>
; j- w; d5 G) S9 q' W# K- H$ S" g<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>2 x, G3 N/ S1 W6 ~8 z% W
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>' g1 z# G8 X% A/ }7 f0 w
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>: ]% v7 I4 ]: C. b0 j
<h3 id="33-计时相关">3.3 计时相关</h3>9 k& v0 |, L& {' s1 ^8 {
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
1 w. K4 E- Q# [$ e4 D8 {<pre><code class="language-javascript">// 等于3秒钟弹窗' Q! O3 f1 e! A) `; r  a
setTimeout(function(){alert("Hello")}, 3000)
$ y' y7 f4 ~% D* O2 O# _! x& J" X& i2 N
var t = setTimeout(function(){alert("Hello")}, 3000); C: Z3 E! z0 P" L* [% G) u8 E
6 ]4 |2 \+ D0 O( b& {
// 取消setTimeout设置: Q6 [6 Z5 v# o# U- M
clearTimeout(t); d+ F/ l. p6 U9 R8 o, p( \/ u
</code></pre>
, J/ V) X  [% \% U$ `! F# j<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>2 W) B. c. R5 S! y) H1 B
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>* \3 [! d/ T. k+ ?* l! u
<pre><code class="language-javascript">每三秒弹出 "hello" :! D/ L9 u! @1 `
setInterval(function(){alert("Hello")},3000);" e+ N1 [( ]6 S0 ?- F" E$ a* }
</code></pre>
# o, S$ y4 |, p( J<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# S2 {* l) i8 @/ }3 m  S0 l/ R<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
+ F, q, u  ]. l  N. }- m8 q//取消:0 @" U1 Q. f" c0 ~
clearInterval(t)
3 F# v# W* Y% o' ?: g: j</code></pre>
2 S2 y5 D! U$ w9 f
. f+ c" T3 o5 o* ~0 W3 V- u; N
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-2-19 06:19 , Processed in 0.093920 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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