飞雪团队

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

前端之JavaScript

[复制链接]

7995

主题

8083

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26315
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

, w5 b0 B' [$ h  t" ]; {<h1 id="前端之javascript">前端之JavaScript</h1>
6 N6 a2 e5 q7 G. d9 H2 t" n' ?<p></p><p></p># W7 v, ^( s  b4 i: o" p: t7 w& w0 c' M
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>* }# a5 \! a: w4 n
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
2 Z9 u! ^3 z3 w它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
, m0 @* n+ C; M+ f0 T它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
/ Y4 O* H# l! i它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>. @5 V% p- C; Y% G. W
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>' r* `+ T5 N) m$ v
<h3 id="21-注释">2.1 注释</h3>
, ~3 D4 c$ J9 i; [0 z% k5 K- Q<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>1 b1 Q7 r. }- t2 t; {
<pre><code class="language-javascript">// 这是单行注释2 j6 K7 |7 V3 s7 B, ?
& {; `) Q! K$ _' i6 M" B7 q
/*
: o( \+ D: |1 X2 v7 w$ c这是多行注释的第一行,/ J( Z4 l' v" v5 Y( z
这是第二行。
, x" j* j) c# K& E% _4 [+ W*/8 Y; t& g/ ?6 h8 p
</code></pre>4 p8 S+ R% R+ |  P
<h3 id="22-变量和常量">2.2 变量和常量</h3>
) y" a- ^/ j" V; I2 z2 Y<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
( P2 A9 U! S1 U<ul>
% `$ \, P& z5 v9 U6 y1 t<li>变量必须以字母开头</li>
* ~9 U3 X  L: M5 l2 A7 {<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
( j) R1 u+ P2 C9 y7 D: e<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
7 ~! [! _+ z- R. S. `! _$ h</ul>
3 j2 r2 |4 M) P7 z  V3 m<p><code>var</code>定义的都为全局变量</p>  f/ v2 L4 \3 K; o8 v$ H8 X
<p><code>let</code>可以声明局部变量</p>
+ [" E5 P6 \- z4 R9 d<p><strong>声明变量:</strong></p>
- J0 ^7 ?6 S: p* [8 l$ m<pre><code class="language-javascript">// 定义单个变量
- B8 o" \4 w3 ~2 W% [2 X- y&gt; var name: R$ Q! z* {- g+ v! _$ I  v: _
&gt; name = 'Hans'4 B) H3 k( z7 O8 y+ F* v: L# o' p8 y
//定义并赋值
2 q; [) D* p- Y2 [&gt; var name = 'Hans'$ v1 {" a- W/ |7 U* b' p( [
&gt; name  r' A+ G) D0 Z- _' G8 W" V; f
'Hans'5 x; V5 H6 O, c+ Z0 B8 i

& E9 d- a8 @6 q- @* d+ ?9 r. P( d// 定义多个变量
. d& L3 n. @  v&gt; var name = "Hans", age = 18
7 h, ?+ F* D" n1 X8 F5 U&gt; name/ d: x4 A* ^' e7 {9 j
'Hans'
# y1 ~9 z; k! q/ B8 U+ P&gt; age% W+ @$ _( k' y- m' B
18& N4 e$ p3 q; e' V. y
6 T5 H- W0 V6 F5 i$ _" |5 B' ~3 a
//多行使用反引号`` 类型python中的三引号
! I" B/ j, n+ n: g6 L) n$ Z5 }! J&gt; var text = `A young idler,1 H) X. `1 L5 E/ Z! U" e! X
an old beggar`7 k* v; d# n8 A: a8 u0 }+ e, E6 H, ]
&gt; text4 \  ]3 Y; Q4 |* z/ A5 |( Z% O
'A young idler,\nan old beggar'  c) C' Q; E/ Y# E) _5 K
</code></pre>( J4 R' z& N( S- m5 [5 m* E, S
<p><strong>声明常量:</strong></p>
$ x8 ~$ D$ q3 }1 j<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>4 V* O0 K6 b: j4 W+ [! @
<pre><code class="language-javascript">&gt; const pi = 3.14" H. K: ]( ?) U% i, a+ \0 ]& J
&gt; pi
# n9 Y$ Y2 }5 t0 \4 z3.14( o6 |0 _8 i9 R# J
&gt;  pi = 3.019 m' y$ j) L6 A1 q+ @: A. `
Uncaught TypeError: Assignment to constant variable.
5 K0 f  Z( j) E$ u2 F2 h1 }( Z    at &lt;anonymous&gt;:1:4
: ?% C; b$ k1 f6 Z6 U1 J# C* K4 {2 K- }5 a1 j7 P, u1 ~
</code></pre>) S; u  Q  P) l7 \5 p
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>* `: Q; O9 q$ |4 A/ t* I/ Y# Z
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>+ V7 l' t8 j! P9 @9 w2 z  ^/ X
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
. @1 s* ^9 K+ ]7 J7 A9 i<h4 id="231-number类型">2.3.1 Number类型</h4>9 D/ _6 V$ ]& c9 l( _! x
<pre><code class="language-javascript">&gt; var a = 5
, h4 g  T$ G3 _" R&gt; typeof a   //查看变量的类型  / v1 {& g0 @* ]) b1 \3 Y
number' a4 L+ n0 Y! E0 z$ [$ x" k$ d+ Q

7 y" O1 p. V1 e$ G; R1 x5 ?5 L' t2 p&gt; var b = 1.3) Z' [- ?8 d  I+ \% p0 k8 o
&gt; typeof b# j2 j+ x: ?# v1 H
number
/ B' S( q# i  B7 ^
, \6 e! v& z4 d1 J// 不管整型还是浮点型打开出来的结果都是number类型
- |  E, `8 }4 p; v
, v) w& I  l. d. _/ S! R/*4 e3 t' H( A4 N5 O5 A
NaN:Not A Number- ~8 w# \$ f3 H) B! w9 s
NaN属于数值类型 表示的意思是 不是一个数字( H  i+ r* h/ ~/ J5 e! E6 i
*/
! P. F' t, }+ T6 m# }9 M& ?; y) w4 L- D$ H# _
parseInt('2345')  // 转整型. r1 _7 L+ s2 o" X) U
2345
3 o; N8 U/ f+ q/ h& VparseInt('2345.5')
2 S' e$ a) F$ [7 s8 C+ o2345
0 O6 y; G3 a9 L8 Z9 k9 [+ r* {parseFloat('2345.5') // 转浮点型
: R1 l0 D  ?7 y. }2345.5
; j8 {9 _( P7 h9 \2 S: X, GparseFloat('ABC')
! p3 ?9 b/ h( z5 R# K& |7 b  VNaN
5 k5 H; @6 |6 }# A6 j  BparseInt('abc')" Z- w6 y) T9 N1 p  N( c- I* V- `
NaN
' D* t7 s2 G) H2 Z& d- I% E( W</code></pre>
' T/ o8 Q, k) v4 D  [, Y<h4 id="232-string类型">2.3.2 String类型</h4>
5 ]0 o. u' l1 i$ c, L3 ]<pre><code class="language-javascript">&gt; var name = 'Hans'
' N, y; ]0 d; n' U1 {  D0 P$ I2 V&gt; typeof name
: v2 b. N) X* O! M3 {'string'
& S- q, k' N8 s3 ]! F% O
$ }$ q6 R& Q+ n( }! J9 O* K  G//常用方法
( f7 y  s- X9 s: G, L/ @// 变量值长度
. I' H# c' M, ^" f) a" Q&gt; name.length
" w& X7 S; X5 E8 W/ M# N4
: t; {9 ]3 j! z: P// trim() 移除空白
3 }/ w6 p7 D( g7 T" L- s, _&gt; var a = '    ABC    '6 s' ]4 k3 o5 P) Q6 `: x
&gt; a; D  ~' J" K/ b; E
'    ABC    '
* n+ y! w1 x  h4 z! O: w  A&gt; a.trim()
* }( @% b: C& o4 y) T'ABC'
. b. y4 {9 k/ C& `2 W//移除左边的空白
, J8 I. w2 J! D) {&gt; a.trimLeft()
, @2 ?) k2 a% g2 `4 k4 D'ABC    '
4 d# O7 j% I3 d8 R, E1 a8 i//移除右边的空白+ x, x( a, I/ w0 I7 t
&gt; a.trimRight()# x7 ^, R0 q: R  s
'    ABC'
+ W8 g; [! [' i0 {$ A$ c+ s- G9 U
//返回第n个字符,从0开始
9 {& C( F2 o2 j( J# ^, w& o&gt; name
1 x0 L9 j( n! Y- M0 W' S+ y'Hans'
# r; Z; K3 j2 _, u9 a&gt; name.charAt(3)
3 K9 b: k% o& d# A's'
( b$ i% A3 @1 h&gt; name.charAt()+ E& d" u$ y( e" h, U+ Q' J
'H'2 q( A3 j5 q0 s* n6 a' u; c2 o6 q" f
&gt; name.charAt(1)! J( n+ {" f. L( Y* i& ~* H  t8 i
'a'
: [; E) p. W* k2 S3 I4 V" I8 A+ f! x) K
// 在javascript中推荐使用加号(+)拼接
+ Y8 T0 i9 C% |&gt; name
. q) s" L4 P3 n2 ^: {1 |'Hans'- I& h+ V; C, w; ^7 J; d
&gt; a
: a2 y. ?/ ^* E: h'    ABC    '
% W: n5 U, W! J" Y&gt; name + a
% \0 p4 _" k" k4 T'Hans    ABC    '
5 M: W- v8 p3 j: R1 n3 f; E! ?// 使用concat拼接
# l1 b4 Q4 [5 R8 U+ u3 d* d+ \5 l, Z&gt; name.concat(a), j: M1 I! I! a' r  E
'Hans    ABC    '
, i/ v; n; I' W$ `4 A
4 A  S8 K  m$ Q6 }4 T% x1 ^8 w//indexOf(substring, start)子序列位置
0 o# @$ y" _+ ?7 E$ B$ y. _0 S6 x/ N+ c+ a
&gt; text
& \: }8 }! l( U- g. S" g2 c, \'A young idler,\nan old beggar'
; ~& G# d1 _5 F8 Q  D&gt; text.indexOf('young',0)
2 z" h6 B) C8 U2
: X- E' k  k2 c& f8 {' T- c4 }' s+ }! M# R$ J, s& ^
//.substring(from, to)        根据索引获取子序列' L* ?/ Y  J6 x/ {
&gt; text.substring(0,)" h7 E0 n: ?& Y$ g  K! O- w
'A young idler,\nan old beggar'; S! J/ R, [7 ]1 }! e
&gt; text.substring(0,10)
, j  V# t9 ?4 a) Z9 w5 K: x7 _* E* t. W'A young id'* L0 g6 h2 f" F  l4 \  N8 E
0 A. \  }2 g5 ]) B$ @5 d
// .slice(start, end)        切片, 从0开始顾头不顾尾
6 o/ ^  P* C7 l* Q7 C&gt; name.slice(0,3)1 x7 ^7 }6 U3 _( j. c3 E8 a
'Han'
2 E; E; K8 R# z( v% ], u; o# |& O3 s  k+ W
// 转小写
7 e. v) ?4 @6 s$ ~&gt; name
9 S$ G1 c- d6 P3 b! p'Hans'
/ `0 C2 _- v' W- n2 w2 x# `&gt; name.toLowerCase()
7 j+ L: X# f  p0 J! H'hans'9 H9 Z# X3 j. l+ D  r
// 转大写- o+ s5 I5 O: ]( V1 T8 ]
&gt; name.toUpperCase()
; a1 u  z) F6 u, ]2 L'HANS'! H6 V1 Z! a' J3 [7 j- Y

" B8 P/ ^( l3 r3 B% S" g// 分隔
8 Y) |8 q" x7 d8 N&gt; name
/ x, ]7 }8 T1 H7 _" `'Hans') I- p' `# P/ X. I
&gt; name.split('a')
/ ~+ ^2 e1 K- K) ]/ L(2)&nbsp;['H', 'ns']9 M* x+ r( [5 t* p1 Q
</code></pre>0 Y# x9 }" I/ f8 y) D& h) N. C# l- u# w
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>' D" ?) f3 p1 c& K4 {
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
% w" V& T0 m/ Z0 s' Q6 _/ j7 a5 y. C<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
% _! L4 q9 f3 J+ f<p><strong>null和undefined</strong></p>" v  i5 V4 ~# O1 Z
<ul>! P% z$ j- \% k$ o
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
* g- [0 {% ^0 o" Q2 @<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>9 ~4 U6 o2 O. p) K+ J% ~1 T* |
</ul>
& J9 y# O" u1 b, Q/ Q2 o<h4 id="234-array数组">2.3.4 Array数组</h4>
$ z( u& p/ U% R6 I! O<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; r" Q0 s8 t# {. V<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] . d/ f9 s  l/ W7 v
&gt; array17 P% o8 _. E: C1 ~& G" }. R" B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']3 U% F+ O( `/ l' i# m0 q4 T7 S& }6 T
&gt; console.log(array1[2])  //console.log打印类似python中的print
, m" `! D4 g; P& [, n* m* |( n3! g  P- d+ c/ N8 G) J8 h  z
// length元素个数
# {# s! a' t( b7 Z&gt; array1.length
# U9 M: S* l' V' r6% C' N9 }8 M$ b  K
// 在尾部增加元素,类型append
' X% ^% u! x* C5 u2 F5 c, r&gt; array1.push('D')
% R5 j4 J0 T" o3 I9 z  W4 K7& v. P; i! o5 q+ g
&gt; array1
+ n; W6 x! e' a- h(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
; X- z% ?) I/ w6 p// 在头部增加元素7 \( a3 B9 ~$ v- g% X, M5 M! A
&gt; array1.unshift(0)
; s  p4 v. O* O# x5 `) G; E8& n$ O8 U+ }( K0 D; b7 C. g
&gt; array1* E3 b4 _( [; w; V8 \
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']0 u: d) `0 U$ \" G' i

: N; o2 c8 j3 n* d9 E//取最后一个元素1 Z" G; U2 M6 f$ \4 E, ^! C: w
&gt; array1.pop()
+ @0 y: `3 D. k' n3 O7 }( i& \'D'8 W+ M; h/ T7 N; F3 K
&gt; array1
: M; z4 D6 }9 b8 C) G(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']6 o: \- n$ [! C# B8 k+ W1 C
//取头部元素* V) r9 n8 N! U% n8 H3 r' h
&gt; array1.shift()
* t2 }! ~) j/ i9 Q9 z07 R5 X# O, \; `3 Q
&gt; array1  R8 q6 r, M* |$ ]
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, ~* w2 u& h" l: E, D' A3 Y6 V5 H
//切片, 从0开始顾头不顾尾
, F9 R. O! ?9 A4 H  p3 K. C&gt; array1.slice(3,6)
& R# S, O% ?* j" Q. H(3)&nbsp;['a', 'b', 'c']
9 I( l2 X# q. s$ e// 反转7 U! O. G/ f7 q( ?& s# H5 P
&gt; array1.reverse()0 a. F: ^3 I  _. m' P0 H
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
' A3 a- Y- B$ H8 h0 D0 ]& x- X0 [; }! s// 将数组元素连接成字符串
4 C) O5 R6 l4 i# T3 p  l&gt; array1.join() // 什么不都写默认使用逗号分隔. e0 n9 u+ z6 U- D' q
'c,b,a,3,2,1'
5 t1 Y2 S: _! Z/ Q1 c&gt; array1.join(''), v0 A( j* I* ~# H. l- m3 S9 P
'cba321': y5 g  q4 _7 Q1 w: J! T* b
&gt; array1.join('|')9 E3 r8 |; q  k+ _0 L( B  I, I* a0 Q6 L
'c|b|a|3|2|1'
# K. v" E+ q+ H  e- R% X; w( P
: h0 Q0 j3 N' ]6 ^. ~// 连接数组
" _& G+ M2 H4 b$ g4 c5 G$ w&gt; var array2 = ['A','B','C']$ T) V) W$ M9 s  [9 h8 J5 J
&gt; array1.concat(array2)
* h5 p5 h' v" k) Y& a0 \(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']& h2 k. s0 Q. |9 v9 B: V

. W  h, p7 ^6 Q/ \# Y4 E) |// 排序
6 U/ Q. |: Q* c6 z&gt; array1.sort(). j% I9 G/ c, S* n2 \: ?0 s
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% N9 J! G# p4 {: o9 w0 A7 i: R: b* l% ^: K( [$ O
// 删除元素,并可以向数据组中添加新元素(可选)% B' f& k& e" G7 Y
&gt; array1.splice(3,3)  // 删除元素; L6 v: q+ ^, a  w
(3)&nbsp;['a', 'b', 'c']# d) t$ w" Q- p
&gt; array18 e5 Q/ I) Y$ i6 e' c- \
(3)&nbsp;[1, 2, 3]
4 J$ R; s0 Q4 f&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
9 ~# a# `1 x2 I( e2 A! u[]
2 J5 I$ Y7 q7 l$ `  e&gt; array1
# g, \6 A; x& y3 I7 j  E/ v(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']- \4 F6 n% [: {: Q- R  m6 {/ r
' F# z6 U, j/ B0 Z5 M# p1 b# s
/*
- C' k9 k- o! Ssplice(index,howmany,item1,.....,itemX)
- @; G# v* q  c! Qindex:必需,必须是数字。规定从何处添加/删除元素。
: p/ j& g- R) u* }% C- ?8 E- Showmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
+ L( s! G0 w/ }5 a* z) Xitem1, ..., itemX        可选。要添加到数组的新元素) ?' J- ?+ Y1 h
*/- Y! e! F  `3 n
; m5 u$ u+ f1 w0 A$ z
// forEach()        将数组的每个元素传递给回调函数
2 h+ r' W7 M. F$ j+ P&gt; array1.forEach(function test(n){console.log(n)})
# ]$ k) f9 J" ~3 f6 y  m: T, C! g 1
  z4 x, z, G4 ^6 A7 L# u 2
4 Q" ~- t& z/ G 3
! k9 K; q7 a7 u: n A6 E6 O2 }0 W% a0 a1 f& L3 H+ B3 m, g
B
- p  P; A! E: o4 L C
4 S" `: b) `4 c' M/ ^+ m// 返回一个数组元素调用函数处理后的值的新数组0 J: c) [. W, N: H4 K7 Q9 q# H
&gt; array1.map(function(value){return value +1})! w9 N( d- V6 t( i2 B) `
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
4 i  U2 a- _9 o</code></pre>
) a+ F4 F0 o/ z<h3 id="24-运算符">2.4 运算符</h3>6 k* l1 E: L: O3 M, Y
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
; ?0 E- T% z3 U" j" M$ N$ A$ s8 \<p><code>+ - * / % ++ --</code></p>: p* R* }( E! B) w- Y  j
<pre><code class="language-javascript">&gt; var a = 65 c( U, [+ I4 m- @
&gt; var b = 3+ Z* ^! J. j1 O
// 加0 J$ q. v* }1 m) s
&gt; a + b( m) A5 N0 n$ Y2 [9 y, J
9
/ x, {0 ?9 E# g/ v/ @// 减1 I# u" F8 p, W0 X' p8 x0 Y
&gt; a - b
5 g7 J# q8 G9 k% k( o1 f34 ?5 c; l# N" @5 G, ]( {: [
// 乘3 H+ ?+ P( R( g9 t/ u. m# N8 P0 C5 }
&gt; a * b
9 S0 K' p: a6 W# \& G/ Y8 J18
/ }8 G( D$ ~! [5 B// 除, C# H6 v' B8 ^4 k+ Z9 @* N  ]9 {
&gt; a / b
$ h; F8 p/ h# w9 z" {. a- x2
8 T7 d+ @" J$ ]- Y2 n1 Z) g# ?8 J// 取模(取余)
( U* b5 V4 y, [$ D1 l# @&gt; a % b
- s8 Y3 a9 R5 V# F0
4 e3 S) R  b2 V) s// 自增1(先赋值再增1)& ]8 c# T8 y; e( H1 ~
&gt; a++
7 t& g3 b2 i: y9 x4 i$ ^60 n% Z* T' y2 i: _
&gt; a
* b9 P/ A( m3 H0 ?4 l  K: B$ K- G79 x& t+ g& e# R/ L0 q, I
// 自减1(先赋值再减1)
' D4 ^8 U: U6 S. B! C&gt; a--" |9 X- v) b$ v4 Q- c# b
74 l% B1 L, h7 q$ i' j
&gt; a0 L# @$ i2 F9 [9 a. e: w$ u
6
4 `' ?( S/ ?+ ?: k// 自增1(先增1再赋值)! u4 Z6 l9 M6 v, Q% Y" D
&gt; ++a$ c: Y7 `6 N1 T5 `" L/ V4 S
7
0 F7 b* |  h* q0 l4 w" m* i// 自减1(先减1再赋值)
5 k$ {# ~5 Y; Z; S: c: h1 R. m  {&gt; --a% G! {" u* e0 e( Q" Q4 s
6' W1 u/ a: p' I: _( x- l
&gt; a
! J, A+ H- ]5 C' v. _( |69 V/ y4 m1 ^" g  B7 [. p& \. U

+ T- f5 D- o* o" ]/ M4 M, S1 K- Z//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理! O* R) E' ~9 A' ^9 u# r
</code></pre>
1 M9 b  ~% U- V  H/ K% P' E& ?<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- ]( R6 v8 l& c% @<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
. I/ G: L0 \7 A8 d2 C. X' N) P  B- N<pre><code class="language-javascript">// 大于  H! u9 z- Y, z* s$ x, B
&gt; a &gt; b
# Y6 R& S2 m4 G% J7 ptrue
- N8 i* m- S; f4 D// 大于等于9 L3 ]8 O0 ~: _" a
&gt; a &gt;= b
3 ^2 y& H% N% |( M/ u. Gtrue- f' J5 B, q4 V, c" n
// 小于$ E: |+ _; U4 x' z, i
&gt; a &lt; b
7 H9 {$ A, O2 ?false
/ y, d, m! Z# m// 小于等于
- Q. `% A8 U' c1 O/ _3 S. X- g&gt; a &lt;= b7 ]& I5 B) w$ q7 G
false! f/ d2 L: b% z, j$ @- k
// 弱不等于
& m6 i$ p& B  u, q&gt; a != b* r: n8 `, s0 X2 p# e
true
' {$ a9 H3 {* v/ L1 s' B' b; M// 弱等于
3 g  c) D( m8 V: |# s' z5 B3 @&gt; 1 == '1'5 o3 Q* v$ a+ t6 L# t
true
& I* p' m+ v$ P9 _" `- W// 强等于  ^; f- J/ M# p- `
&gt; 1 === '1'
" v! K- n+ d. C! pfalse
4 @5 x/ h1 @' x. y// 强不等于9 g1 L; ^* U1 o7 o# m# T
&gt; 1 !== '1'
3 X( o  A  j2 m6 d( x+ _. |1 {true% m) l% x  S9 }9 r

( Z) p5 q2 ?( i4 N* v& b/*
/ q0 v, v8 ^' L" B5 g9 k7 Q9 k( EJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误/ C2 |2 ?- q1 W1 v* @: s1 {1 F
*/7 i! l4 v# o& `5 H4 Z, f
</code></pre>
% b; T( Y- \. ?<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- R! J* }7 Y. e9 i2 E2 n5 y<p><code>&amp;&amp; || !</code></p>. v; @/ R! ^; x( h) l0 ~/ i4 p
<pre><code class="language-javascript">&amp;&amp; 与) G3 c  P$ ~& E( J) @  b
|| or ) Q+ [, r4 x& G5 ?8 e
! 非
+ R  r$ x2 s) G9 j/ [6 f4 C</code></pre>
* T7 a5 c' {$ e  h1 V' x<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>2 L* }  C2 s0 |$ y" x. d" M2 L* w; ^
<p><code>= += -= *= /=</code></p>
; N9 l( G- P+ }5 `0 O; ^% k<pre><code class="language-javascript">// 赋值
5 ~" B: s/ P1 E- O* `( s&gt; var x = 3# A7 M  j" `2 F/ y* [5 @. u; V
// 加等于, }  K5 `# T  `/ f
&gt; x += 27 h$ X+ E) J* c. b  z3 T: R; X
5! L" p5 r0 R: w) _" N5 N
// 减等于
; w0 W* G3 m9 C% C7 I) e&gt; x -= 11 E0 ^+ R! B& a" Q4 [8 ?
47 s# c- K  t8 r6 G% g) k
// 乘等于; E; V) Z; L% ?0 D& z, x
&gt; x *= 27 [1 E' o) w; x7 D% h$ k  I
8
+ }/ H. ]$ a2 K% \) l" S// 除等于( M5 o# r. \5 ~8 b( h6 f4 f2 g
&gt; x /= 2- e' L& x7 O0 Q1 g
4
& V( H0 U( d" ^</code></pre># ^# {% S  O' \0 T0 v0 j
<h3 id="25-流程控制">2.5 流程控制</h3>: y% e  Y" Q/ z2 ?8 w8 `) G
<h4 id="251-if">2.5.1 if</h4>2 q, f) f$ N! m! e
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
4 ^" o! ^5 l, I
) q1 [7 d" M9 G* q&gt; var x = 3# D& _! W( |8 q  M
&gt; if (x &gt; 2){console.log("OK")}0 R; Z. i- V) C, c6 f0 N# E, c) J
OK
! G- C) t- ]% \& x
3 t, F! K+ G/ r3 A7 U+ h2, if(条件){条件成立执行代码} 4 M+ u7 Y( m# V
        else{条件不成立执行代码}
9 w8 [$ p5 ]5 T* V! I- P+ b& ^) ~
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}9 G* b0 Z, _) G: e0 N) L7 j
'NO'
9 {, F3 U1 X9 x9 [. f+ b, t: g, U# n- r$ f! w0 p
3, if(条件1){条件1成立执行代码} + d/ P& R$ H1 Q
        else if(条件2){条件2成立执行代码}2 W7 K# _0 N' q
    else{上面条件都不成立执行代码}
' Q9 t& B! Q. K* F' y* ?' A9 Q6 i2 Q' a) Q$ B- U$ l
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
* m8 i  m1 g- Z2 W) V, n Ha
! H) ~$ v3 p& R, z! U$ Y$ w" h</code></pre>
6 K; V( s/ F9 Y8 U<h4 id="252-switch">2.5.2 switch</h4>
/ U+ Q$ J' _6 G6 w<pre><code class="language-javascript">var day = new Date().getDay();
# u6 H$ q1 {% R0 D9 hswitch (day) {, H' `% l6 [$ G1 P
  case 0:
; ?' p8 y! H& K. _& e  console.log("Sunday");% U+ [# P4 e# m  t+ q" L
  break;
$ f+ p, v% Y- U; M8 b) {. k  case 1:
: Q: _5 K, a3 z- W7 H) a) f  console.log("Monday");/ j- ?, g- X6 w! o/ @
  break;
! H6 z; G) s8 `+ n/ t2 E1 Rdefault:
, \1 u* y" [) W; f7 m% y- l) g  console.log("不在范围")
% @7 B$ Z# O/ h9 f  M0 ]( v}, w6 |9 C/ _- N* L5 j/ \/ i) g% @
不在范围! i3 e6 {; J7 z) H$ v- |, G2 U9 F
</code></pre>
0 g7 {: j2 c4 [' A& A8 \<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
) g( I  q/ p- D<h4 id="253-for">2.5.3 for</h4>
6 U2 N+ b1 N* d9 v<pre><code class="language-python">// for 循环1 M7 B& p/ l, ]# r5 K0 x! ~
        for(起始值;循环条件;每次循环后执行的操作){$ {7 |1 j. u0 Q0 n  D# @( P( _
        for循环体代码- S% g# q1 B0 h/ f; q
    }, p, Z' A6 o4 i! L( J
; D0 U5 m. ~3 W
for (var i = 0; i&lt;10; i++){
) v# e3 T, c" I% e) ~* p    console.log(i)1 c: D# Y$ Q( S
}! j3 j0 I! Q+ i6 |% K! \- v
        0& [3 J' o8 a/ i5 t% q( x' O
        1+ g- x& e7 v# P
        29 y6 J. H: G5 _4 r! p$ g/ S3 M
        3* ?$ l( J5 x' \1 m/ E6 o! |5 i
        4% E3 U4 n; r* ]
        5% \  ]* L7 ?/ C. l6 {
        6) G$ P7 [7 J! _3 Z/ F% B! F: J; L# H
        7
. J+ `  {  A" q1 A( Z# q9 [        85 t7 N) \2 L: Q* A4 i  j
        9, d8 `+ D% C) M$ Z, v3 |$ P
</code></pre>
0 C6 @/ v0 G9 J- ~  ]% j% j<h4 id="254-while">2.5.4 while</h4>7 T% g' |& F1 e1 }+ K
<pre><code class="language-javascript">// while 循环
( x& T' H$ i: M0 v9 j        while(循环条件){4 Y& x* z( K: L1 X& s8 p/ G* v3 N
        循环体代码
' m8 L# B/ T: @4 b+ [) X$ ]    }+ B: t7 l5 ^! v/ x( D: ~( B% W; U) }
  V5 E4 D# C6 V+ Y* v, Q
&gt; var i = 03 r8 \& b3 Y' u( {, J
&gt; while(i&lt;10){3 g3 g0 F  W5 [+ M! e( j' t
    console.log(i)% _, X1 r- _% [: J9 ]7 j- B9 T
    i++2 ^; q6 `& i! F" r) c( i4 ?) Y+ ^& C
}
5 g, {) C7 M" R 0. x# e* R. n) K/ l; c* X/ \
15 Y8 p! T  \# h: h* c2 W
2
6 c3 t+ M* I5 f3 l7 W 3
1 `4 f$ o8 q& h  e 4& L- e1 o2 z6 f, f* t  Y8 x9 A# I
5& j! K7 s6 A) _
6
1 P" s9 M( V$ y1 e' Q 73 g% x5 F( z2 N. c4 z& m" T
81 N' `5 C( M9 M4 D$ W; W
9
- E: u/ l" _& i! Y- C& @! F</code></pre>  a. x; [) W2 L+ E( W) R; a* G
<h4 id="255-break和continue">2.5.5 break和continue</h4>, ?* h( h1 k% h$ k
<pre><code class="language-javascript">// break0 t8 I/ K" P& ?( f! }
for (var i = 0; i&lt;10; i++){$ e: t( D9 ^; m# D2 }" I+ z6 I
    if (i == 5){break}
, o( C3 D4 q, d" b/ c    console.log(i)6 T7 P- j# ]3 V. R+ z4 d8 h
}
2 q3 G6 `+ D3 x$ A- d+ c 0( ^1 @; C, _! Q2 t! j9 V+ E
1
4 T8 E% D# m, S% o4 h- P8 ~+ x$ [: N 2
6 r- `2 {2 }& W0 X" q 3
' ?2 D  S$ W- Y, W3 U( O/ j 4& V! s; c4 w% O/ z7 j
// continue; v! q; ~5 H: p$ _
for (var i = 0; i&lt;10; i++){
; p) u) J7 Y& ~' O  H    if (i == 5){continue}% e* p: R& u* ?5 J; F, u5 Y8 b( w
    console.log(i)
1 n, Q6 M8 x* t  p5 ]3 U4 h}
+ U( A+ @' V1 M& V 0
# b; Y8 i9 N! k1 T% |  n% j$ {( K+ f# G 1
5 T; R# j0 T: a, f0 U1 V+ Y 2
4 C- @7 j/ H. g6 D( @* d# v 3- c7 d/ C, E- }+ R! n+ }0 Z, {
4$ S3 K$ M$ n( d* d1 S1 ^
66 G: i% s- W7 r; T- K- Y9 ]1 J
7( n! F7 m- Q: X* D1 v& {$ D
8- ^; X5 A2 Y9 x- i4 Y
9) @5 Y' |, M/ ?% c; W
- f& w4 |7 g4 k* i: e, V0 m
</code></pre>$ p) D) b: f$ _2 Z! x
<h3 id="26-三元运算">2.6 三元运算</h3>
1 R4 c( c( e! p) v! I' O! Z) n& h<pre><code class="language-javascript">&gt; a
$ ]/ @  F! t2 c& K( O$ t: A6
. C$ z0 C# D- {&gt; b
5 b& f9 e+ {9 A1 y4 p, q3
# V* v( w- q7 P
" c7 v$ A) ?7 P* f0 z//条件成立c为a的值,不成立c为b的值
7 R4 h/ s3 T0 ^/ r' C. E&gt; var c = a &gt; b ? a : b8 k, K0 I. G6 F4 b/ D5 a; s
&gt; c
, b) E# `3 x7 }4 p, S) P6
% [5 \! H; n! R1 B+ u  R4 D3 h8 r" x8 n! \: X4 f9 V1 P) |/ ~
// 三元运算可以嵌套
' O. d* O8 @% P1 q. O</code></pre>6 n' D4 ?2 ?0 C7 ?$ o" ?
<h3 id="27-函数">2.7 函数</h3>
3 Y5 s6 G, D3 K<pre><code class="language-javascript">1. 普通函数
0 ^' p% M7 l( p4 u+ j+ \+ B&gt; function foo1(){
! m5 r: ^; J& P  M* N) Z: j    console.log("Hi")  G: U' N% ^. q( I7 q
}+ O: n& O1 b3 A" ^

9 h& k% [6 y. i) W. x* ~  W/ \" T&gt; foo1()$ k; w% X0 O( B1 S4 f7 x, I* z
        Hi8 ^" u& w2 {+ d; k3 r2 H
2. 带参数函数
: q' q5 b$ A0 B8 f$ F&gt; function foo1(name){
% q# I4 N, @8 ?/ ]console.log("Hi",name)% e, h6 A6 ?% @
}
% R+ K; o. K8 n* t6 @' A2 n+ w6 c1 h# P, u" ?9 X) n
&gt; foo1("Hans")2 V; ^& T- w# b+ @- p1 X- Y9 i6 R
Hi Hans
: {1 P. J" u1 \% ]' ?
3 ?; ]. b: h! z7 ?2 `' m# r&gt; var name = "Hello"
7 P" d* I1 q7 V+ f6 A&gt; foo1(name)! `* v2 s1 P) ?: n( X; A
Hi Hello8 O3 n; {( y, v5 j" @, c: g1 j, ~

& l! {/ O4 X2 W& }2 m3. 带返回值函数8 H1 M# w' J9 F* `/ H% w) S$ A: {
&gt; function foo1(a,b){
4 _& p7 t( O9 R7 X1 m6 O        return a + b   
0 v: z- {3 R: {1 q+ K" ~}
9 Z1 k* w5 o/ q2 Q* D: U0 w&gt; foo1(1,2); }+ b4 y2 e( A6 ?3 @- h- e
3' J" Y6 N  O3 n* a" }$ ~
&gt; var a = foo1(10,20)  //接受函数返回值* n6 Y2 K) O. C
&gt; a
) A) W; s: T$ U) s30, x9 S( w, Q6 l( l* H5 @0 k2 v9 n
5 q: b+ H; x/ y& d+ e5 Y
4. 匿名函数4 W4 k: M1 @' o! T$ ^/ ]. Q0 c% T
&gt; var sum = function(a, b){
: }0 t+ U- p8 x! _5 F  return a + b;
( v: {; e! Y* [0 L/ S}
( M/ W$ O+ u( j&gt; sum(1,2)1 t5 V/ I  H! `% x! I
3
6 ~8 i) i" ?! H/ D8 ~4 I3 O! N1 o4 i1 P, e3 d
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱2 E" v0 r) H0 r) ?+ J8 L  o
&gt; (function(a, b){1 c5 G/ a/ E3 R" X6 T7 g
  return a + b
. L5 q" e% ^! N% L$ w3 [})(10, 20)
( n3 S* [7 @6 _( k# c30
* J" p3 i& a8 D4 b& S8 P
( b1 T( R) ?3 d% @: k5. 闭包函数  v& p# |- r5 O/ S! k
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
5 ]0 z/ L' B8 _- ]/ Nvar city = "BJ"
9 l% [; Q# s+ ufunction f(){# E% ^6 H6 a7 Z& E- a7 J3 w
    var city = "SH"- P9 {* d) c6 h9 {
    function inner(){
9 x" F' J8 z8 p0 G4 |7 n, c2 c        console.log(city)1 z3 z$ g% f& o; q' W) o2 S( k
    }
  ?! k. U( y7 F: h5 l, F  B1 C    return inner
! P; v4 [6 x8 c3 q& b}' e1 m( P9 u# J: \! v
var ret = f()
6 |( B" R& Q8 m- l; E" W' Yret()+ u/ L9 y. K7 y$ h) ~. z- M
执行结果:
9 Z4 I1 e5 i/ H7 K$ D/ XSH
- x2 T( O7 E: }$ C3 w% s& u" I! R; H/ @
</code></pre>: r1 ?# C9 W( j" b( n! I- i
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
+ v$ }2 j6 Z8 i! o$ |9 I( S<pre><code class="language-javascript">var f = v =&gt; v;1 ]: L0 _, |( M; u3 A" n4 v
// 等同于
. n0 Q' f+ t* ]  g  R7 v+ m8 yvar f = function(v){) f/ Z' E) K; Y0 n8 \5 K
  return v;
6 {) t6 O/ C/ m}
) _  @3 N7 T, Y+ Y+ n% G1 z</code></pre>) O8 z: e9 e! r5 [
<p><code>arguments</code>参数 可以获取传入的所有数据</p>6 Q+ q. h4 W. Y1 w% r
<pre><code class="language-javascript">function foo1(a,b){
, i! {* H+ X1 S! N' Q    console.log(arguments.length)  //参数的个数 3 _* G) I7 |2 d- Q2 R
    console.log(arguments[0]) // 第一个参数的值
& Y' e5 C2 B" o0 \- X. ?; ]        return a + b   ' H$ u; y  l/ f' g7 p/ a
}
1 {+ e1 M/ E9 Q' {6 W4 t- sfoo1(10,20)
0 A4 {9 A2 X. N" V+ h结果:
# K' R) ^8 u% n9 I 2          //参数的个数
' r' e" ^- O! e! y* }( s0 V% }5 e  g10        // 第一个参数的值7 C8 p9 ]$ v- P5 s8 ^
30        // 返回相加的结果, b1 I5 Q3 [* n: E
</code></pre>3 r4 F, V5 ^" O% Y/ m" o
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
2 e& E% ]- c$ n( J& M' t<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
: y) S( \# |& ^# \2 V<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>, ?( T5 K. z9 z  j' x8 h# R. F2 r
<h4 id="281-date对象">2.8.1 Date对象</h4>* H1 [4 A7 S& o
<pre><code class="language-javascript">&gt; var data_test = new Date()
0 L8 f# E' j; b+ x2 G( P&gt; data_test5 `4 J$ G3 D& n0 v" n  v
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)8 d3 L# s# C. d+ r3 Y
&gt; data_test.toLocaleString()& P4 h, A# x3 m( M5 t
'2022/2/11 下午9:44:43'; c( s6 E+ z* a8 E

0 d! S( h6 [4 x1 M&gt; data_test.toLocaleDateString()
. I9 @( d) l* ^$ u- ^'2022/2/11'
+ T2 f, t8 x7 H8 a" e  G* K8 Q0 Y' F( p
&gt; var data_test2  = new Date("2022/2/11 9:44:43")/ q8 c. K  |% N! b* Q1 n
&gt; data_test2.toLocaleString()9 w4 T7 N  \. p. }+ [; k( a
'2022/2/11 上午9:44:43'
% x2 p; T  x' H  W, b) ]* o3 l; G. V/ S/ E9 Q# z; t2 c
// 获取当前几号# w0 _+ p0 e- i2 _
&gt; data_test.getDate()5 j2 J$ u  ^* b$ a2 I
111 _* Y1 g8 d$ G5 m0 n! }+ |# K2 R
// 获取星期几,数字表示5 y. u$ {9 u6 ]/ e) B
&gt; data_test.getDay()  , t# u+ p' f* E& p; P
5, {5 b0 h6 S0 ~! J2 Z5 Q# K
// 获取月份(0-11); F- Z4 a2 }/ V) t3 y; n
&gt; data_test.getMonth()
& W6 Y2 \- N, y2 m4 y: q" P17 [' ?( m( |/ {8 E" N
// 获取完整年份- h: d- ?3 B+ _# E, p2 t- u
&gt; data_test.getFullYear()
6 W  U+ V0 a: w% ^2 k9 g. E& `2022
! a$ b0 V& ^3 T2 c. I9 H7 S// 获取时
. h) q; o" F7 n+ {5 J&gt; data_test.getHours()( r0 Y3 s+ z! O/ ?6 A3 y
215 a& m. p' [, J) R  l6 ~
// 获取分
1 }9 F7 f) \! B# x7 V&gt; data_test.getMinutes()
9 W+ g- N# n( J5 @& a8 v44. t( ~5 r: `4 x4 k& m( O% l
// 获取秒
3 m6 q" c; Z* I7 v6 H1 H- y. Q&gt; data_test.getSeconds()
" e3 z, B4 `# b& Z) L; u2 @" y43' {8 p4 c1 {  A' ]! ^3 i( P% T& _
// 获取毫秒) O# \! X; p' V9 H3 }2 `. {6 J
&gt; data_test.getMilliseconds()$ v* }& C! e  u* S+ p0 u
2908 Z/ M: l7 ?. }- a) S0 Z2 j
// 获取时间戳" {6 ?9 r$ r8 _7 h* U* E$ Y
&gt; data_test.getTime()1 e9 k- ^5 q! {. J$ e
1644587083290* ^: ?' ~7 ^7 V6 w* y$ l
</code></pre>
1 G4 |! {0 J: y# y* B( `5 e- }4 A<h4 id="282-json对象">2.8.2 Json对象</h4>- Q7 n& M/ n! K& o2 T, f4 `7 d
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串; ~/ r( |7 I, }4 E
JSON.parse()  // 反序列化,把JSON字符串转换成对象
5 N1 O" J0 [/ A$ a
2 ^- s4 x  c) z7 z6 x. o- c( t// 序列化
+ f: T6 V6 y$ r! C0 c- V  r2 d&gt; var jstojson = JSON.stringify(person)
6 f! {. x" W0 O4 C+ O3 }&gt; jstojson  + z  y( d, G4 j. t4 e
'{"Name":"Hans","Age":18}'
- |: d; b. J  y! s$ A7 H5 d$ u, M2 W
9 c; T& u, m# i/ v// 反序列化
# d, b( \( G- _/ Z& f- r&gt; var x = JSON.parse(jstojson)
, d# J  t/ T. Y: c# h&gt; x
: I3 d1 x! A( o- B. `{Name: 'Hans', Age: 18}
6 q" Z3 i5 t% b$ n&gt; x.Age
/ |0 r- p' \6 `, b% `18
1 K3 r3 p) i) G( A  @</code></pre>
8 j$ y% \' W# _0 B<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
% A' Q! E  ], d1 v* H<p>正则</p>6 o! V' ~  J# K+ n4 Q" m4 T- p
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
6 Z8 i5 |9 A0 I% w+ R) S" G  o&gt; reg1
- B, R  I7 I8 k/^[a-zA-Z][a-zA-Z0-9]{4,7}/
' r2 S) E7 H0 ]. u9 k&gt; reg1.test("Hans666")
: y7 N2 s$ Y# ?: F" Ttrue& _8 e" R% V. @+ H' G: m  c
* }3 u; ^* B+ N% p9 \6 W
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/6 w1 R/ @0 Y+ n2 m
&gt; reg2
; h' F2 J& @8 `/^[a-zA-Z][a-zA-Z0-9]{4,7}/
4 E8 T! o8 f( j# n% f: z4 O$ F8 N&gt; reg2.test('Hasdfa')& x* M+ n6 h& q7 B- f# W$ Q
true, k* H% y% d; \1 Z1 y! r

6 m8 F3 ^, a2 V- }  _8 T全局匹配:
5 g2 t6 R4 w7 b3 l8 w2 s1 }5 y&gt; name
3 h1 ?7 n  y, g8 u: _2 n'Hello'
, L8 X" ^( Z* n$ ^7 V&gt; name.match(/l/)4 `  c1 |3 k% n& a
['l', index: 2, input: 'Hello', groups: undefined]' `3 T8 m2 r& ?* s4 t9 `

, q/ X5 w8 U  y& v8 G- m, r, ~&gt; name.match(/l/g)
0 y" i& s4 U: j' t' Z(2)&nbsp;['l', 'l'], l% k6 M) R1 L! P& d$ L3 l, S
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
! ^1 I1 [8 r+ d; q" t$ V% p/ `7 h$ f
5 a0 N0 o% q5 t; c& v0 Z' t全局匹配注意事项:7 P' [, O; P+ F; L* ?2 G
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
: `5 I4 N7 w3 Y&gt; reg2.test('Hasdfa')  {( l3 d8 T% d  D" w
true, b' P/ O* J6 g3 c% G
&gt;reg2.lastIndex;: Z8 B0 l# m2 d! ~
6
# ^7 d3 X! F3 Z6 A&gt; reg2.test('Hasdfa')# Q% u  ^. |0 j, @6 J
false" G. T' x; Y0 |, [( B/ x3 [- y
&gt; reg2.lastIndex;' i$ _: G* [2 ^! k( j5 u
02 @8 W; @9 l1 @8 I0 G8 c" [
&gt; reg2.test('Hasdfa')
( e  c5 e% Z  E1 X) [% K. R7 \true( j- |3 ]" o( q- j. s
&gt; reg2.lastIndex;; g8 P( F7 s3 I" K4 ?6 e
6
+ y9 [* K7 Q- j&gt; reg2.test('Hasdfa')
) C# y7 Q" ^. T" Kfalse
6 h  u- i( H* A% c&gt; reg2.lastIndex;
) a# C2 b0 {- R% J05 f: q( S/ {' ~
// 全局匹配会有一个lastindex属性
5 t4 N+ D# j2 j( r' w&gt; reg2.test()
- u6 q+ {0 t4 ^/ M: \* d7 xfalse
  y( j1 U: B$ W, {& d% |6 j$ `&gt; reg2.test()
4 g) Y; O& }! ^8 |7 c; D: [true) Y; J* \2 s) d% _- `' A
// 校验时不传参数默认传的是undefined
- [* |* c) c4 V* d3 ?</code></pre>( r5 U. y2 J9 T! i6 F- @9 h
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>& g7 c5 U6 o$ N& q3 q  ~
<p>就相当于是<code>python</code>中的字典</p>& B1 K7 ^5 Z/ z: ?+ C3 h
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}3 M8 k1 ]( f7 F. ]* h- X- N$ k) a
&gt; person6 f  B3 d0 M8 @' s2 V4 D
{Name: 'Hans', Age: 18}4 \' L5 G. h+ I5 W) f0 o
&gt; person.Name
: i9 n5 b* L8 A, U'Hans'
$ S! x6 a" C4 Z/ M+ N( O&gt; person["Name"]( ^" B+ }/ j& q! c; y6 ^. b% a- t
'Hans'
3 H& z" N# }0 H" \2 @' o* r  L
* w) J- C" X6 |// 也可以使用new Object创建
. N7 K8 @* q; P5 Z' v5 e, s2 j( [&gt; var person2 = new Object()! B' q! R6 U( r* D% a  `  e: \; B
&gt; person2.name = "Hello"
6 D- ]1 }; M3 K0 C0 V% Y'Hello'
$ V2 V; F5 w0 @&gt; person2.age = 20) s9 o- G5 K* |
20
+ x; @! s" D$ a) B  o</code></pre>+ f6 l7 B- n: }1 u
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>4 J; A5 B2 M1 L0 x0 Q
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
) A* @/ J( }$ K1 V: H& `8 V<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>, w8 F- y/ `9 z) O3 ^
<h3 id="31-window-对象">3.1 window 对象</h3>
' R" o# S0 E, j9 p3 \0 e# a<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
4 R! z3 d/ l* x2 v9 Y: Y<pre><code class="language-python">//览器窗口的内部高度
  u$ ?- \" Z, owindow.innerHeight
3 n# F. Z- @( H) B0 o( A& f+ h0 ]706
9 r9 m1 d5 ?7 F- R1 Q5 b& L, j//浏览器窗口的内部宽度- f6 g6 w$ w1 d/ P7 n1 K3 {. w7 H
window.innerWidth: w; O1 F6 R: c% j8 M( \. Y; Z
15221 I; B/ w1 d* Y
// 打开新窗口
- w9 U; `5 N4 r9 [. o- w' v- wwindow.open('https://www.baidu.com')
" M% `6 B- \4 L8 V% @7 L- xWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
7 g, B5 Z' g3 E// 关闭当前窗口
2 i9 ~! ?1 ?7 p& Pwindow.close()
/ f6 A/ V# H2 F8 f( n//  后退一页! _# q3 ^5 t; v; r. ?9 e! w
window.history.back()) x6 h" A# r: r
// 前进一页. w- F& h, {" ]& t1 R2 `  }7 ^
window.history.forward() 8 i( a- s# c! o  k# j7 I
//Web浏览器全称
2 V3 }- G  a* M. T  O3 k0 X4 a. Z1 [window.navigator.appName
4 a/ k. C  B- R0 z3 ]'Netscape'
1 f/ L1 ?5 B' I# A) j: ?: x0 P( c: [// Web浏览器厂商和版本的详细字符串' n$ E/ {1 G' u7 o! Y1 s
window.navigator.appVersion
: O8 {$ L; B9 Y) u& a- L1 B$ B! i'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
+ k: d* A! x! K# o; N& ?// 客户端绝大部分信息
  w9 F1 D6 R: Q& Q% uwindow.navigator.userAgent
( }7 k$ p* F) c% I& }! W'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- N0 ~- M3 F3 `' [' b, I
// 浏览器运行所在的操作系统; |* x! k2 q# a$ r3 V$ k& R
window.navigator.platform1 m3 R* x/ u/ ~) V1 m% p8 T0 V
'Win32'
$ e% V% r5 Q% u4 ^; }8 V. Y8 b5 O2 K9 l4 q
//  获取URL
8 O! ?# k; r) u4 m2 Q6 a" s) k, U  {window.location.href
/ I- V: n+ a; j// 跳转到指定页面
2 y( k4 A5 D( Z2 Q# G% v' Swindow.location.href='https://www.baidu.com'/ _- `2 n$ d+ W$ K2 B* q/ x
// 重新加载页面- L. V9 V: W# _6 N& J1 z4 P, x
window.location.reload() 0 t+ u7 Q# A3 c( Y
</code></pre>, r- N+ J5 t) X1 M0 K/ J
<h3 id="32-弹出框">3.2 弹出框</h3>
+ \, P- ^2 G8 D& {3 j3 L* J<p>三种消息框:警告框、确认框、提示框。</p>- R. f" H& z$ Q, C* \
<h4 id="321-警告框">3.2.1 警告框</h4>
' I8 i* {! }  ~. ]& l' X4 ]<pre><code class="language-javascript">alert("Hello")
' V$ N0 b: V" h</code></pre>* ]* s4 Z  w3 [9 j
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
0 U. D3 \9 q8 D. x; S& M<h4 id="322-确认框">3.2.2 确认框</h4>* a: g. w5 M% [6 Q
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>( n2 k4 x: f$ y7 @
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, Z$ J* m- Y% n0 v+ ztrue
7 G2 ^) S+ O% E* Q8 E* r&gt; confirm("你确定吗?")  // 点取消返回false
/ N& }$ w% g$ x+ w* sfalse% M# M7 j" C3 l, L* Y
</code></pre>
6 ^$ K# o  S$ T- X- K2 u2 |. S; h<h4 id="323-提示框">3.2.3 提示框</h4>- p; ~) O- {, ]6 z( @  m6 G$ P
<p><code>prompt("请输入","提示")</code></p>
7 ~: c- {1 t* ~* K  z7 z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>3 V6 ?6 c- b4 b$ A0 x. I$ ?- S
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>6 @: `4 b, U! @6 L/ S2 I5 Q
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
2 _, y- f: O& Z<h3 id="33-计时相关">3.3 计时相关</h3>; F" [. {( t; Q3 p
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
8 d' N+ n. Q* |  F  Z<pre><code class="language-javascript">// 等于3秒钟弹窗
7 E( L" v" |, ~9 x( D$ ?setTimeout(function(){alert("Hello")}, 3000)) P* J7 P$ L/ a' k7 h

4 ]; [7 t" t3 S0 ]var t = setTimeout(function(){alert("Hello")}, 3000)+ {4 W; i: `2 T2 E
7 L0 r4 N$ H" Z( B/ Y6 U
// 取消setTimeout设置
7 j0 V* f& K1 |6 @9 |3 h( qclearTimeout(t)
8 g8 R2 P; I9 l. o# C+ _: q6 P</code></pre>- F7 m. V5 w& z- W' s4 q: Q
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
  |4 f2 _, M6 E' \2 N) i! P( n  E<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>7 A& i4 `+ A* P' w
<pre><code class="language-javascript">每三秒弹出 "hello" :' e- h, W; ~+ d- \5 H1 Z- J
setInterval(function(){alert("Hello")},3000);
$ t4 O1 E% Y. z5 J* L1 g' M</code></pre>. }& q: ], Q. s$ w
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>4 C  F" P$ e% i: S
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
( r4 A9 s, f# c4 @//取消:8 w' X2 \$ U# {2 t/ ~, \
clearInterval(t)9 Z) y( b1 I2 ?. _0 @7 X7 L
</code></pre>5 c! R9 Y2 K& _, M
: A7 b& p# g) f- x$ J
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-1 10:20 , Processed in 0.082889 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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