飞雪团队

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

前端之JavaScript

[复制链接]

8242

主题

8330

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

7 I) ]( L  U6 d1 }+ F& f6 K<h1 id="前端之javascript">前端之JavaScript</h1>' h" h3 V+ B- s4 [+ {
<p></p><p></p>
5 k3 Z* m1 d& l& i<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
; v% H- a1 W* M( @<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
4 J+ A) Z! S1 r6 l! j它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
/ T$ n, L6 G' X- B1 G- C$ L0 B它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>, g3 j/ J8 W6 j* |  A) |' J6 e
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>5 m4 I9 B6 G+ ^4 j1 u( _1 y. p
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>% J9 d" S/ W0 \( ^8 N9 v+ @  }
<h3 id="21-注释">2.1 注释</h3>) {( d3 V# M; @3 _% I4 R4 u
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
2 v* G$ {/ V9 x  D: Y<pre><code class="language-javascript">// 这是单行注释* ?0 f4 z- ~' U: [4 y' \

2 V/ o# ^+ w- z" m. ]6 @/*
! S0 N$ e  H! g这是多行注释的第一行,
% U, g* T! \# L这是第二行。
. J( |2 S, `, i: V% B*/! D( H  i+ j7 I
</code></pre>9 b( R% p' N: N) u
<h3 id="22-变量和常量">2.2 变量和常量</h3>) i6 Q& j6 Z1 s; g* }7 S
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
& l; @2 C" P! O% r<ul>
/ Y% D3 j2 ?2 E' U0 ]* ?. r<li>变量必须以字母开头</li>1 Q* m8 A1 l6 c7 G. n
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>! a* j. b, e5 P6 Y' ]
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
- H  Z1 U/ R* U+ B' B0 Y( k</ul># L9 W" t7 p( T, e) _) J5 i  e
<p><code>var</code>定义的都为全局变量</p>
/ u* U& a7 G! o" c" J0 m3 @; G<p><code>let</code>可以声明局部变量</p>
9 p5 Y) n5 ]% W<p><strong>声明变量:</strong></p>
1 D" o) z9 t7 i* w& I: g# W<pre><code class="language-javascript">// 定义单个变量
5 l9 N' o2 Y6 r  F. c" O&gt; var name4 a! d+ h7 I3 d; Z+ l5 ?3 @
&gt; name = 'Hans'
" g% g0 B, ]0 R' A//定义并赋值4 ^* d5 G5 f% `0 o
&gt; var name = 'Hans'  f  F( s% ~. U" a$ x
&gt; name
9 Q/ u$ ?$ Q6 L. f( X'Hans'" `, ^, m+ i4 p7 D! Z- y

+ g0 @& a. ?; ^+ `8 l// 定义多个变量$ V9 a5 J) ]5 @4 Q& V* W
&gt; var name = "Hans", age = 18, T/ f2 r2 S) Z5 x" P# P: b2 ^' ~- ~* [
&gt; name
0 o. o/ l) O& P) b. H/ D'Hans'
7 W+ F# B; Y3 H1 I, A  i: o&gt; age
) n+ B/ `: p1 ?4 }" E1 h& Y18% G  f' h2 H. X5 M3 {( w
% U( n$ R  T3 a& A
//多行使用反引号`` 类型python中的三引号4 Y6 Y" J8 `% V; f& ]' L
&gt; var text = `A young idler,' d# Q9 x; z# J) G0 M( Z1 @
an old beggar`1 L$ C0 g, F9 x/ n6 t; L/ ]
&gt; text% v/ N# B7 p/ }, m, _4 [9 N% C, \5 `
'A young idler,\nan old beggar'
& `" Q) P" E  @. @0 ?$ y6 C1 j</code></pre>
+ }: B  ]: x' u( i8 k& t. k3 |<p><strong>声明常量:</strong></p>
" P; S  z+ x3 X! C' v0 h3 y<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 @1 A. h5 H9 b  P
<pre><code class="language-javascript">&gt; const pi = 3.148 o- f' i& w- [# P, J
&gt; pi
$ ~, l2 m8 V# k: k( V: Q3.149 B6 Z- ^9 q3 T/ E0 G: n
&gt;  pi = 3.01' l2 P" S( u; D' y
Uncaught TypeError: Assignment to constant variable.; d; x  E4 _. g+ R" @
    at &lt;anonymous&gt;:1:4
2 J& e- T( x1 g6 p- ]6 A6 v. }" w3 g5 t% o
</code></pre>
& T+ Q. j. ]: F( t. p<h3 id="23-基本数据类型">2.3 基本数据类型</h3>& I: x6 h+ h  R( k) n
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>; u" p( z( F. b  K
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
: @! I8 R+ m4 |, I<h4 id="231-number类型">2.3.1 Number类型</h4>- p) B: N0 `# s, Y8 w& |
<pre><code class="language-javascript">&gt; var a = 5* |9 G7 N! R" L2 W8 i( A* x$ e& Z
&gt; typeof a   //查看变量的类型  
6 f) R) b% W2 m! T' m7 a& s* j+ unumber
) V4 S% U5 I2 x2 T. o. s
( S5 d0 r4 W6 o5 ^3 M+ h&gt; var b = 1.3" Z* ^! q, t0 k8 d, \. |, D; n7 P
&gt; typeof b
+ ~) m- i; u: R. M7 g& f# O$ O0 wnumber% F0 ~% i+ j# ^  j( H6 @

; B: Z9 h3 s9 ?/ \4 N# Z// 不管整型还是浮点型打开出来的结果都是number类型
6 U( @3 [6 \! A1 I# q
5 b- ~; g' U. b/ J  X6 [7 D0 E- x) W/*
4 D8 T1 q: x+ ONaN:Not A Number
+ \/ f) y0 G/ H! W/ ~5 pNaN属于数值类型 表示的意思是 不是一个数字: a6 {! Z4 V. Z( ^+ G! `( r9 B
*/
0 N/ p( |& D* w; X9 @: t  h8 Y" ^4 z# `+ L* F4 K2 K  y* g
parseInt('2345')  // 转整型
. d# _* D1 b1 u2345
: w  H( g- g9 z. M/ B5 a4 Q1 IparseInt('2345.5')4 a9 z$ b0 }2 [. d
2345
# z) K9 G6 H( [5 }7 \parseFloat('2345.5') // 转浮点型
: b  N2 S( ?* {2345.5
; }% I! n5 f& @: S. @parseFloat('ABC')! f1 S. R; S/ C( h
NaN
1 N5 y& f0 `4 p! u. h5 iparseInt('abc')
9 `" [* K8 V* h/ s& sNaN/ s) s2 u' l% T9 E0 F% }
</code></pre>& S$ N- t5 ?' ~  i' W& _
<h4 id="232-string类型">2.3.2 String类型</h4>
- n) W1 U+ P+ f" p' W- A<pre><code class="language-javascript">&gt; var name = 'Hans'
1 \, o  W: p( Z4 Y, l) X8 H&gt; typeof name
' ~8 }. t, o, W& N, L) E( f) ^' O'string'9 @, z& z/ w6 X- u8 J
1 ?- h, M+ I  |2 H
//常用方法8 |1 u4 Y' f4 F) X
// 变量值长度: c6 E- n1 S/ k- b2 Y& k/ _' c
&gt; name.length
' {- \" W7 K4 @  Z/ J, k49 w0 O4 i; x5 }4 E6 e) x* W/ E
// trim() 移除空白
2 I9 q7 ^4 I2 E: f5 F&gt; var a = '    ABC    '/ o, a' H3 c: T4 g
&gt; a' t7 C# W" H* T5 O8 ^, Q/ `# @9 F
'    ABC    '* l% p5 O$ A! A5 H" X$ n5 A, l) e
&gt; a.trim()8 C. P8 _* |9 e$ n3 f3 }! J
'ABC'
3 h1 c8 @  p; c! C3 `# V//移除左边的空白$ H5 ^0 B& ]2 v0 F4 n
&gt; a.trimLeft()& x( t" ?1 a6 \6 f2 M/ k: V% Y
'ABC    '
6 A4 j# ?6 s* z3 _/ l//移除右边的空白
4 u) M  Z/ P5 L% m. O% m9 Z7 a9 _8 J7 C&gt; a.trimRight()+ E( S$ y" }$ }
'    ABC'0 O1 _6 q$ ]# ]$ q0 ^' J, @
& r- B! n1 v# f$ P; m8 n
//返回第n个字符,从0开始3 u6 b* s  U" O# F
&gt; name
& \5 w2 K/ K6 n+ H8 a'Hans'/ m5 l/ |% [/ S. w& P& X# }8 N& h
&gt; name.charAt(3)
/ q# V' m" W9 Z- k8 n's'
$ }* B+ l1 j+ M/ Y&gt; name.charAt()
8 d- N2 R  Y" |" Y' ?'H'5 ^& g( B; u- r* k' Y* ]) E( D
&gt; name.charAt(1)
  T" U: G5 b+ {" t  s+ B. G- d: _'a'
9 I; n1 F: I3 s' z/ F# e0 z0 z1 M; f$ B$ W# T& t
// 在javascript中推荐使用加号(+)拼接
1 o) o! \) f* l&gt; name
8 N2 s( W  b( b' q7 v  U8 K'Hans'% M) b, S& v; c# d. W
&gt; a
9 N/ s7 i- P& h7 Y2 g, d# K'    ABC    '+ B; h0 e' p/ G: y
&gt; name + a
. G# S6 N/ H" l+ F/ U'Hans    ABC    '
) C6 `8 G; p4 y2 ^/ @// 使用concat拼接* D' |2 F% B3 F$ ^# a: W5 D1 [$ R  E
&gt; name.concat(a)
5 t6 v: v1 G  D% w1 b'Hans    ABC    '
1 \9 Y# M5 v! d3 U  R/ X* t5 r- Q6 n  _, j8 P4 W; B! T" J1 ~' c0 @
//indexOf(substring, start)子序列位置1 Q" P/ Q) Z/ p) I6 l2 X

: H2 z) b( n. Y4 \% E. a+ n9 F: l3 {&gt; text+ e" k5 q. ^* u+ ?
'A young idler,\nan old beggar'& `* x8 ]; p: P
&gt; text.indexOf('young',0)* ^6 K4 y; r& ?: G8 }
2! M5 \# a* k# g7 Z4 }

2 E7 }  E7 n( [//.substring(from, to)        根据索引获取子序列
; m. V& @" f6 X/ ?8 j& T&gt; text.substring(0,). G# ?& P" d8 N$ @7 r
'A young idler,\nan old beggar'3 n! X7 a) r. v. [, j% u8 ^
&gt; text.substring(0,10)
5 ?# {& ?5 l1 c& N4 w# \'A young id'
+ J( |8 ^2 X' J+ r. d1 [, i. ?& I$ [4 o2 I( D3 S6 u
// .slice(start, end)        切片, 从0开始顾头不顾尾
: y; S% @9 Z+ K/ i6 w&gt; name.slice(0,3)
) {, C* `5 _. H+ _'Han'
) t4 i& g: }  ^4 ]: p  f! u
% `# w% N& }2 k4 @7 j0 O* [// 转小写: g' y3 u! I6 E4 _- c
&gt; name
# L3 P! C0 ]  h2 U; f2 ['Hans'2 {4 m! _' v9 H5 N
&gt; name.toLowerCase()
1 |8 Y- @$ C( l& F0 o'hans'& W* ^4 T, `% d. ~
// 转大写& T4 s$ B& |% f* u
&gt; name.toUpperCase()
( h$ X+ S+ ?' p( I; q. b'HANS'! |; C/ I, S. V! M5 q
0 ^9 w/ f8 f5 z# i6 @
// 分隔7 z; z5 l0 w* I; q2 m' U
&gt; name
% }- }" J! F2 ~+ `'Hans'2 w! m, v. K) E7 u
&gt; name.split('a')
. s" f4 S8 |. S% Y. |8 u. ~0 V  f(2)&nbsp;['H', 'ns']- f/ N+ {- F2 ?6 s- f) Y
</code></pre>
) R  v6 G2 V8 o2 q<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
4 }' c- q# W; a- v0 X<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
+ k" W% G% Q8 R! J# [! L, w<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, }$ A5 B. ]' w4 }. r: Z
<p><strong>null和undefined</strong></p>
% W# Y# |, [- B& W<ul>
8 {7 D4 P2 b5 ^& \& ^2 _" w) {<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>5 f' G/ w/ w7 B9 |# A# ^$ c
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>) E0 o! |, Y+ n2 P' m5 m
</ul>) W2 E" o& d3 j; B5 b
<h4 id="234-array数组">2.3.4 Array数组</h4>
8 ^  d! I4 C3 g. E<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
( {" T0 f% Z* ?! v6 f- h<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
# H& X2 d! d+ `" v&gt; array18 Y8 |% e8 Y4 Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! M8 G( W$ a# v! L3 A
&gt; console.log(array1[2])  //console.log打印类似python中的print' T# |8 v9 {2 A0 E- u: }: V3 a) X
3
) F: E0 K/ K9 J/ n+ ]' P0 O// length元素个数  Z1 n! V9 j7 y! S* Q
&gt; array1.length
5 R9 R; F* T( Q3 ]- f* q' N) w69 _/ D2 z; {8 j7 I" R
// 在尾部增加元素,类型append
) v9 e8 @% F1 q- h: R1 H$ w&gt; array1.push('D')
3 E4 q9 ?' g" P7
. i( k% ^: \7 X, }0 p&gt; array1+ n# T% ^( M) J
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
& r" ?" J% j4 m9 w) `% s5 n) g4 l// 在头部增加元素6 ~/ Z+ ]7 }9 v, z' R) a9 A, E
&gt; array1.unshift(0)3 q5 E3 o. X& S& j$ c  `
8
$ y  w2 l+ f7 Y) t9 U&gt; array1
0 y. F$ _1 G" ?9 n(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
) X- K0 B. h0 m) |4 m( T+ h
1 k6 T5 r6 c# X- k3 J4 S6 o' u2 Y//取最后一个元素
. t; _8 F  S: I5 P% v+ t% @( }) N" h* F&gt; array1.pop()7 }3 g/ R9 c7 D) S% u
'D'0 X, F5 Y* {8 O* P% j" f
&gt; array1" W" z! j+ J, X, g
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']( @' \9 v: H) b$ p( b3 c3 h$ c- V
//取头部元素
' l; V6 s" t, U- P* B&gt; array1.shift()$ v# a% @& q* P5 i4 v0 t
0
! d2 ?( K0 A2 x0 c  h& X& Q&gt; array1& ?+ y+ U; P0 c' y5 c& `2 h3 ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']* y4 }$ d& L. R7 n; i8 ]

1 g4 N% G+ O! Y7 p# M! l//切片, 从0开始顾头不顾尾
" A9 d: w% b; ?3 U# U&gt; array1.slice(3,6)
, x2 R( S- K- ]4 y4 O(3)&nbsp;['a', 'b', 'c']9 t% Y4 K& k7 x6 o  a. H
// 反转' s9 A: h# w* L& _- @
&gt; array1.reverse()6 ~# |7 \! c4 _5 v2 J
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]* o( t$ S! _& \% ?# v; y5 s/ K
// 将数组元素连接成字符串
* o4 {6 V7 _* p  o* H9 M/ K&gt; array1.join() // 什么不都写默认使用逗号分隔$ c+ l4 ^7 k9 Y' W: k
'c,b,a,3,2,1'
* B5 i# r1 ^3 @* v' q/ S&gt; array1.join('')
) o6 R- [( F/ Q1 n'cba321'  b+ ~& T. C1 `  t' h6 T% k& _
&gt; array1.join('|')% S( y& p4 Q& A* c8 `5 G' Y
'c|b|a|3|2|1'  k. ?) n  w$ [- C" q- \

( C; _, J* `& O) e// 连接数组6 i8 ~5 u# N5 {! P/ B# k; y' i  ^
&gt; var array2 = ['A','B','C']
. @7 s4 `. E' `6 u" a&gt; array1.concat(array2)" C+ \: p* X! Z: {$ D! U
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']/ f  j! \4 ?$ j
6 _9 D- {. |& X: V( d% E! a, T# W
// 排序4 V  k8 {8 Y  G7 b0 J4 s
&gt; array1.sort()& A# o7 V5 _' `) C5 X. U
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* n, R; @9 V8 j" I
- O, e7 w# U. q// 删除元素,并可以向数据组中添加新元素(可选)
8 [) b; U+ [# M; V" D&gt; array1.splice(3,3)  // 删除元素" b) J; R' g" q9 u. ?
(3)&nbsp;['a', 'b', 'c']
% D* ?. c7 K% w5 Y% _&gt; array19 h9 M8 A- t- O& G. m
(3)&nbsp;[1, 2, 3]
0 t6 x" e  c) Q" [&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
) A2 _) S8 g: C9 a6 {[]6 k( f/ a, J) D
&gt; array1% h: ?' }" E( _$ w& ^
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']2 }, q2 z( P  u& B7 l
/ p$ S. p# h5 _; p4 e9 j; y
/*
8 R! H; k: G% E' N# Csplice(index,howmany,item1,.....,itemX)
/ ^, |8 j+ N9 L: Q' xindex:必需,必须是数字。规定从何处添加/删除元素。; D: `3 m0 O7 R! _+ M; o' l
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
; G7 {5 u5 g9 C0 w. Bitem1, ..., itemX        可选。要添加到数组的新元素" \* @, Z! u: o* w
*/
- I* k" ~$ ?) m3 z" s/ H5 I- z/ ]
5 N; s! J* F" |. t2 E5 z' T% r* k' ?// forEach()        将数组的每个元素传递给回调函数: \4 c& T4 R# {4 J% ^& u9 p$ o4 t
&gt; array1.forEach(function test(n){console.log(n)}); A1 m+ G! ?; b- u
12 b7 l, i& w: {) {" S
2
0 k) i+ R1 _$ K/ \- q  S! k 3
0 v3 @9 L  o' P( I" p, _ A
* x# d" T( M0 R+ P: R6 I B$ {* ]2 \$ n! l# t
C
% g" z3 O8 E# T/ x2 O* ~; Y// 返回一个数组元素调用函数处理后的值的新数组6 U3 j3 d4 a. R- M- o  l* @% C
&gt; array1.map(function(value){return value +1})1 M! w3 s/ U0 O9 t8 s+ R) v7 y
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']# q0 I4 c2 I! b. Y' `
</code></pre>
4 g% X6 F2 }) e$ T) C<h3 id="24-运算符">2.4 运算符</h3>
- T+ ]* [$ o8 |' ?( u: M- Z7 t7 u<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
* d. E2 g5 R8 d8 l; W2 P<p><code>+ - * / % ++ --</code></p>* Q7 i* ^# \8 X
<pre><code class="language-javascript">&gt; var a = 6: J$ m( o- G1 g! N
&gt; var b = 37 B% p7 e5 ]; w; l) \% q
// 加: y4 ?, |0 r' ~0 E8 m; a  m
&gt; a + b/ \' }  N! h( x# d+ z
9; _6 e& l5 y, j, q( Z, A
// 减8 L( s- ~- b, a; l# ^' S
&gt; a - b. [. T+ p# }4 ^) A
3. C9 {& f: ^9 k5 m
// 乘
9 N. S$ p8 m! M0 |3 s" P&gt; a * b7 c( w) M) o; R5 O& B/ u9 b$ \+ }5 }6 H
18& f& v/ [1 ~+ U+ H4 K, F
// 除
9 B5 j( T! ~8 U1 l* l&gt; a / b
- D/ o6 N: V# K3 H6 r1 @; f' C2
, Q2 {2 r$ ~. A( Y% ^$ T// 取模(取余)
: O8 I1 R# y. k' l, s) G1 M&gt; a % b
2 C7 t: r# Q' f& `5 p0. m# L% T6 |* b2 ^' D/ A0 }
// 自增1(先赋值再增1)& t) L* X; }# [/ h3 L- I
&gt; a++
6 F2 k  a+ g7 d& ?, O+ F8 ?64 ~# x& C5 R6 t4 u
&gt; a
$ r0 s, w0 y  J, [5 V7
4 e0 z/ k' Z6 q# a  z9 P// 自减1(先赋值再减1)
" m0 v% s) }( U+ u! B7 J5 z- d&gt; a--
, Q0 z. F' s, Z75 M9 F7 [$ \1 P
&gt; a
6 X' G9 o6 i& L$ P) I6
- e7 F! K: y* W* z// 自增1(先增1再赋值)4 e$ `7 x0 @* k" I
&gt; ++a
5 p$ |0 m5 M% c: c9 j7
" Z& V& {( y* D2 m) c  I" m6 w// 自减1(先减1再赋值). X! a- N5 t" f) A3 L( S
&gt; --a% S/ _( c2 j8 d# }) G" I+ A, i6 ^3 ]
6* `9 l& {  p9 _: D8 B
&gt; a
0 ~7 f$ a7 E2 w' B7 X" M6
- E0 V5 h. \/ J4 T0 r9 B6 ~) q7 h/ |( _
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
, g2 x7 S) o- w) s. E# K% Y</code></pre>
( P; b! E' n8 ]* X0 {$ o<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
  }  ~0 m3 t" C0 b<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>% H- ~8 t3 q0 ~% w8 B
<pre><code class="language-javascript">// 大于
5 U* l+ v1 Z* L+ q- L  L&gt; a &gt; b
# B8 E8 S5 z9 \+ `  @5 ?, X/ Mtrue
# k; Y2 d1 J0 J8 U8 K$ a! \1 t// 大于等于
* k% H% c( L: E8 N&gt; a &gt;= b6 @5 q8 ~0 k" B8 x  Q5 |
true
& x) e! @9 J, u// 小于7 L( F* X# R1 K$ z. E
&gt; a &lt; b
+ t( K$ s+ w* t* m6 yfalse
6 N& f  r* Q# c// 小于等于
4 N) }/ ]" c$ r. }# T&gt; a &lt;= b
6 \  ]9 ^/ O6 E! l& O6 l0 Gfalse
: ]7 u4 _% K# ]: ?6 Z4 r) p// 弱不等于
4 v. d6 r6 C5 L% q' P&gt; a != b
3 N3 ^4 q: Q0 ~  n! Rtrue$ }, W' ~! U5 |, ]5 w* N/ `1 `9 D# T# c
// 弱等于
1 c9 Y' q* A0 i# y% o&gt; 1 == '1'* Y, i% l' F0 [/ W* M4 m
true
( {" t9 D3 {3 [% C// 强等于
4 v* ?. [2 l' }3 ?5 U&gt; 1 === '1'
5 j& ^1 t% ^/ |4 J2 ?) w1 rfalse6 H  i# R  O/ k3 C1 o  u( f2 w
// 强不等于
8 ~7 L  l  v3 O. }2 P; n# Z/ C" W&gt; 1 !== '1'
" Z& O' q4 r6 r9 L1 e6 h5 }true1 {4 q3 ^3 Q( d% Q

' R, Q9 z/ f4 v/ e/ n, i* Y8 V5 j/*
$ H6 t% H  t2 u# a9 EJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误* J! @1 I/ M+ A5 A
*/+ f* ]" R/ L" C6 {
</code></pre>) L0 G* L3 v$ Y; \
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>5 t1 h; D$ s, E0 \8 J( _0 O1 l
<p><code>&amp;&amp; || !</code></p>+ c$ C" f/ u! r8 J
<pre><code class="language-javascript">&amp;&amp; 与' x2 Z5 @8 @: d6 C5 w/ o: q
|| or
8 W; r  a1 P$ Q* X. @! 非/ \9 J/ A" w/ c% K, M) T- W7 k
</code></pre>0 F3 Q  F' d1 K5 M7 T
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
# G) i/ X  V6 z- C/ Z; ~0 Y8 M<p><code>= += -= *= /=</code></p>
. n1 R9 K) T: ^8 `9 w5 o( s<pre><code class="language-javascript">// 赋值+ Z" u% W3 e6 C
&gt; var x = 3
2 v3 ^9 P& _" Y% M// 加等于4 x' L# }" y, v! I1 a
&gt; x += 2
. h; I: ]2 I2 f5
% t7 _1 _1 ^5 K// 减等于
+ M  F# M0 @/ e5 y, u&gt; x -= 10 B3 C! V' s, w: f7 y: r3 K
47 T7 D! r- E5 k& G
// 乘等于# D3 i3 P) R  P$ f' n: W( b; t% j  ^
&gt; x *= 2( h4 ^2 _5 ^4 M, b( _$ v6 \( t
8
  x  U1 ]6 c& [9 J$ T// 除等于$ ?, B& S% w; O5 p# h5 X' f
&gt; x /= 2
1 j" o( Q1 V( K- j+ i) O2 `6 p4
) e. y( L$ G( c! i- \</code></pre>$ v0 T2 W8 G$ _' ?3 n8 k/ D
<h3 id="25-流程控制">2.5 流程控制</h3>4 ]( R9 O( z8 Z8 Q
<h4 id="251-if">2.5.1 if</h4>
6 Q* x/ G4 s! ^0 l# o/ W<pre><code class="language-javascript">1, if(条件){条件成立执行代码}1 T+ |/ d3 I6 T% d- U7 P

) a7 q0 A  J( ~$ ~3 W# S&gt; var x = 3
& ^0 I' H, U5 T+ b6 ~, _&gt; if (x &gt; 2){console.log("OK")}" e! m3 _+ p- n. `
OK7 t" C7 ]1 Q, c) i0 p8 c$ K" a# _" c- }

$ G8 ~1 s9 x, _* W2, if(条件){条件成立执行代码}
$ L& I) B* X" A4 a        else{条件不成立执行代码}' a4 s" b' M* J  ]% _
8 e" @' W/ `7 j% d. J- V
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
) q* h! r4 I2 i6 i'NO'
; [3 b0 W. c# \
3 ?. V8 r6 _& }( j5 P( @0 H* v3, if(条件1){条件1成立执行代码}
) E2 r7 r+ c1 U& c0 ^- d        else if(条件2){条件2成立执行代码}
1 [7 L& i" W/ U% @5 z# n    else{上面条件都不成立执行代码}
" j( e2 w6 G2 z  b$ o+ ^3 P4 |2 t+ B! }0 |2 j' Z9 `/ a
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
) M7 I  A( _5 r- G) W Ha
$ l* m& {1 M5 q: V0 I- ?</code></pre>
% B, z$ A. [' K+ @! S% t+ l. d<h4 id="252-switch">2.5.2 switch</h4>
5 \# w6 |( c7 A' h3 l<pre><code class="language-javascript">var day = new Date().getDay();/ a: r' {1 V+ g
switch (day) {: U) O4 \) g& B) U. k9 N. V
  case 0:, y1 t7 n1 o3 a
  console.log("Sunday");
0 K" ^. O+ z* a6 f# _4 K1 J  break;
5 z. `; F% Q4 [  case 1:% Q& t0 h+ w" G( V6 z
  console.log("Monday");6 C7 f7 k+ \! U9 [4 ]
  break;
! R0 S. p  s/ [/ w6 idefault:2 `) w: p# O- H8 h# s
  console.log("不在范围")
1 x$ U2 Y5 I/ ?2 p! o$ O. }  j, Q}  i0 u$ d# x! P9 O% ^
不在范围7 q  Q* \* f. C" {
</code></pre>9 X1 H# h; [8 O
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
2 H: V8 r. J! g, |$ y<h4 id="253-for">2.5.3 for</h4>( J: @' ^6 q( Z4 F' O! z& ~
<pre><code class="language-python">// for 循环# P/ `( ?$ R0 S3 t4 Y3 e
        for(起始值;循环条件;每次循环后执行的操作){/ M8 ?( k, a) P0 q: ~
        for循环体代码
  T, B; }3 n) }    }* u- r5 v3 n# `; n4 `

" {' d4 ^8 `0 x8 Vfor (var i = 0; i&lt;10; i++){
' P7 e3 M, r5 X* k: c    console.log(i)3 i, U2 X" n1 g7 V4 w$ h
}
7 \! K9 a' o3 r% l        0* g" e' {% x( s
        1+ j: X$ }& B- d; z8 A# h
        20 C; \- R, [( l+ H+ R) ]- y6 s; Q" `
        3- o6 O) Z  ^, C, L' h2 ]) `
        4
9 R) w0 d- v5 D  g        5$ y- |5 H7 N) v9 E7 {: e- }3 E
        63 ~( e9 z  G/ X$ y3 }3 f
        7
5 I6 `2 w- T; y: r        8* M% M0 O+ ^( S- B, C8 a3 f
        9
, I' S. J- X, H4 u; K1 P+ M7 C/ M* \</code></pre>% a& g) P( R& J3 ~6 U
<h4 id="254-while">2.5.4 while</h4>
4 v& _4 o6 c! z" G/ E<pre><code class="language-javascript">// while 循环! E* A% h" r0 |/ Z" P& n7 E
        while(循环条件){* a1 \. M" \  g. L+ ]
        循环体代码4 J- f$ ~/ u. |: }7 U
    }
# g& J5 K2 Y3 G' x) s
6 L# J5 O7 P2 [&gt; var i = 03 T0 W7 p0 o6 m5 t7 L
&gt; while(i&lt;10){
, T. ^0 t9 m0 W& `; K+ q/ q4 R" g    console.log(i)* i4 C- H' P4 I' Q+ V" F6 Z4 g
    i++
/ e  f5 e. t; r5 x' G}
6 M/ z4 |9 j# v2 [9 F# H% A1 k% d' [3 v& ~ 0; A0 R' m! a2 f/ m- s
1' H% F; {0 t' U% W1 M& \
2% Z$ K8 C& S# ~( |( b
3; \& W! j" O( Q- f( a: ]) E) Z" }
4
- L% B* W8 \- o5 ?5 R- S 5
- ^$ B, q7 Z5 y 67 F  k  Y! `4 v
7  X% W$ I/ e5 A! d
8
3 a* |4 e4 `& z9 j; i 9
$ P) [( I, p9 p$ L</code></pre>
2 T4 f: @. U2 f" t/ S( i# [0 A+ W: d<h4 id="255-break和continue">2.5.5 break和continue</h4>
) T% f% E8 g7 T: j8 G6 w2 g<pre><code class="language-javascript">// break7 `# f2 D) k: n  }7 p- f4 r
for (var i = 0; i&lt;10; i++){
# s+ w9 t# {5 `* {% F8 i    if (i == 5){break}0 m& l8 ]3 @1 x3 a6 r
    console.log(i)
* n1 @( X9 e# Q8 I/ O}" m2 A" ~1 _. X/ d$ k6 \
0
% p* ?9 O$ y* M* h! @, C0 c 1
$ M! y8 P: x! o, P1 P" ^! ]/ W; c 2
+ u" G" @8 c. [, ]7 D 3
5 d# A- u5 N( [* a' B 4
/ T+ d7 G4 ]- h+ w9 P" t* Y5 g// continue
, p% _) F; x' jfor (var i = 0; i&lt;10; i++){; T" T8 g( v/ X9 ^* M( F
    if (i == 5){continue}
+ |; B% m  L) w* `    console.log(i)
/ V/ t# b* T( E. O' t}' h! `0 Z6 U0 |1 U' N9 c0 i4 W
09 u$ ^8 G" n  Q* b6 \
1
' c% U: t4 F5 O 2
; d4 G8 v3 n4 D0 ^$ I( s# Q 3
, s. ?6 [3 m5 t+ r 4
4 K3 Z- Z9 ~# ?6 f 6! O/ e- S! R, Z
7% ]0 {8 t: l+ w0 h+ C
8) _4 F) {2 _8 k0 e+ H
9. w$ J' w6 r  G
0 w  N; p* b8 M+ H
</code></pre>2 m' F% ]. I* k9 U" M- a
<h3 id="26-三元运算">2.6 三元运算</h3>
" A! V# m# N1 ?! z& W4 ?) }<pre><code class="language-javascript">&gt; a
: K! l. \/ U8 l/ v6 B6
* g/ N) ^$ c" i+ D&gt; b
' f6 d; P3 p- M- Q& G3$ H! ]2 v" M  p# h9 c" y
" i9 q, O. }5 U$ W% m
//条件成立c为a的值,不成立c为b的值
6 _7 g, K( I3 t! T& B/ M&gt; var c = a &gt; b ? a : b- L' h3 X/ p" ?2 V) _# |6 s
&gt; c
8 I6 ]% n% x$ b6+ g% c# k) H& ^& W: U$ s3 ^0 Q
0 e$ Z- s5 x1 ?* `
// 三元运算可以嵌套
/ ?  B% a3 @. ~</code></pre>7 [/ @0 Q0 [! V# r- @" y
<h3 id="27-函数">2.7 函数</h3>/ ^% P' N5 L+ _* g: Q$ S' v
<pre><code class="language-javascript">1. 普通函数
" ?( F' d  `/ y2 }$ X2 e* K- i&gt; function foo1(){
9 n- B$ f3 Z" e    console.log("Hi")( W9 @* O% L& }$ k) k, O6 A* E: r
}
8 n' k5 H* w# M' t5 a8 d! m1 N. o2 R- ]
&gt; foo1()
$ E, w0 @& ?9 n) v5 v) u/ N        Hi; H6 L/ P9 X1 [9 `7 ?
2. 带参数函数
8 ^0 \' W0 j$ _0 y+ i&gt; function foo1(name){7 t, E# u$ E- y. H) ~* v
console.log("Hi",name)6 X  r( h) E7 {& R
}6 z# S& {9 f  Z& ~: b) q  p
& w& [/ X& r& v( r0 a) j, ?) y# f: p
&gt; foo1("Hans")5 @* Q; z( \$ T
Hi Hans
& x; s5 o2 o, y- l2 {3 x5 M8 C. V* [1 d/ r4 P
&gt; var name = "Hello"2 N: c& s* r+ v+ S5 y, l. W; o6 k4 e0 b
&gt; foo1(name)  |$ ]* L( X, z) i) Y
Hi Hello
% H. {( q# ]$ O7 n9 g/ D( Y8 ~! R% w& v
3. 带返回值函数
2 K* k# _4 N! [, a&gt; function foo1(a,b){
8 n; n* H) }; l( \        return a + b   
" A. d9 W2 C2 ~' H}$ M/ X: I' u% r! F+ v
&gt; foo1(1,2)1 h* e9 F+ s* w
3
9 x; C7 K+ J9 A& N5 J; Q&gt; var a = foo1(10,20)  //接受函数返回值  S# k9 D1 G* {* M1 Z
&gt; a5 y& Q. a* e% D+ \. U
30
) T. I+ ~$ S% T: f- m  }1 ]7 L
0 ?3 d  Z6 @/ x) k2 g  D4. 匿名函数- F# `9 F; C4 [. d
&gt; var sum = function(a, b){
6 g  T& W3 a( T' C# u; N% E& i" s  return a + b;3 c0 G2 H% i9 f
}
) V% x) P1 p2 k&gt; sum(1,2)
/ u2 j7 j. n' Z; X3 |3
/ H4 a0 N$ E9 T1 U
# i7 T% y, n) p( X2 E( c/ i// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱, a! H( h; @/ r( y0 |
&gt; (function(a, b){
0 V& }$ j/ j; K  return a + b8 I2 Q- k7 y% R& X, m( A3 l
})(10, 20)
( Q( S5 D# c5 c) u0 {30
( ]/ [1 h( [1 z- q( r* P/ q
9 u' j/ {$ M) O9 K! S5. 闭包函数
7 y+ z  F5 V% P$ l* R// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
' f  U% q% B4 f* p  |* O' f, Cvar city = "BJ"1 D7 |" a$ _* K' B, y
function f(){
9 n0 b7 r# w  c/ G) l    var city = "SH"' y6 ~3 K7 O$ v: D: f9 R5 a  |6 P
    function inner(){
$ K0 m  V8 h* t4 s! l        console.log(city)
2 }: {  _' \; e/ ?, f& M    }" s+ x' L' z0 O) @2 @; f- Y9 e% Y  n
    return inner3 b1 [, p. |# K# P
}% Y+ _, M0 a* q- w' G; Y3 I$ n
var ret = f()6 F! s5 U2 j' _6 |, r
ret()
, _- k0 `1 c# p9 ]" ^/ Z* S执行结果:9 N& _! B+ a: o) g5 z; p6 [" p
SH2 t5 X2 {+ x" Y6 ^
% K+ h! m- M9 @7 f8 B
</code></pre>1 K: {+ }/ F  E# b+ V
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>  X" ]; u5 N; L: e/ R
<pre><code class="language-javascript">var f = v =&gt; v;
& S& b" j. O+ e  O! ?7 V// 等同于
( v+ J/ k0 k, G1 H; @var f = function(v){7 g8 z! _, s) \! k. E
  return v;7 N- V/ l3 h8 L) a& F
}
" x; K9 ~+ Q. J( O$ W. C</code></pre>% a2 ^5 _5 h0 G3 v2 K
<p><code>arguments</code>参数 可以获取传入的所有数据</p>! {& z9 K; V1 m7 i" O8 ?" V
<pre><code class="language-javascript">function foo1(a,b){& p) P& d; E8 V  `- A
    console.log(arguments.length)  //参数的个数 ; [! Y" m: ~2 A9 L
    console.log(arguments[0]) // 第一个参数的值& I7 f8 @  U( x" ?
        return a + b   3 Q: E( c1 O/ x
}3 {) ]& U/ k7 Q9 y+ O
foo1(10,20)
" p9 l8 x. @: A8 \3 V2 i% p! a结果:
( o4 f/ J/ ~9 q- d# k 2          //参数的个数
: L$ F; ^0 s0 [" v; m10        // 第一个参数的值
, z' y' k& i, _' s30        // 返回相加的结果
: _: H) H7 T* F& |0 ]: J</code></pre>/ e' N  M, b& {) P- y- Q
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>6 {7 T1 [- r1 g" H2 U! v
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
) c' c8 W, v/ |. j<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
! Z5 P* O  T- J$ @<h4 id="281-date对象">2.8.1 Date对象</h4>7 ^4 t* N- ]% P  y" t
<pre><code class="language-javascript">&gt; var data_test = new Date()
' n6 _% B6 ]& r1 h7 W! e) K4 D&gt; data_test
# H- M; Q$ R. K% D- i5 T/ iFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)1 w: D/ a/ [8 V9 V( C! g
&gt; data_test.toLocaleString()
: g2 p' r+ l" s& a! h'2022/2/11 下午9:44:43'1 e  \+ u/ b8 c/ n$ B! ^
. b  H$ y* U- G
&gt; data_test.toLocaleDateString()1 k1 F/ R7 i' _3 k3 |& g
'2022/2/11'6 K/ S0 v, N- r4 `* W; z7 ?; k
, p. I% c8 G# b) n( u" i: ]
&gt; var data_test2  = new Date("2022/2/11 9:44:43")+ A$ q% f7 Z# V, l0 S7 C! B
&gt; data_test2.toLocaleString()
/ @" i- Z9 l$ s'2022/2/11 上午9:44:43'( w; k7 N4 e( R
8 g( ], [/ v! @. e4 u: C
// 获取当前几号
9 }+ \0 R) x! I3 b1 `&gt; data_test.getDate()8 |; c  M8 l2 s9 C# F8 w
11* Z) H/ x* f/ a; d% @
// 获取星期几,数字表示
" r$ P0 N  w# n8 S&gt; data_test.getDay()  5 [# K& C. w* a% `/ d  m: n
55 P% u" Z! S2 ?8 H. {$ h4 z
// 获取月份(0-11)
) ^$ k% v' ^7 x% q9 z; m0 E% P% l$ m8 b&gt; data_test.getMonth()
5 ?5 S2 @; t: q( c2 G1
$ i) a; ]1 Z3 p% z( l3 W// 获取完整年份
" u# y+ z6 m  z2 m* G/ |) p&gt; data_test.getFullYear()0 y& w8 q# ]' v
2022: g, d4 f/ `! G& E+ r
// 获取时
( p) M' Q% D" J: w, `; a! r" [&gt; data_test.getHours()) S, h+ m- f/ y4 G
21# ]; v/ Q  M) J, d7 X. R# T
// 获取分
" A/ u3 I6 Q" T' b&gt; data_test.getMinutes()+ n9 ?3 o5 @% F' ]5 O
44
( |: q/ J' j; ?# H  F' V  F// 获取秒
% l( m3 O4 Z3 d* A: o1 W' O5 `) I&gt; data_test.getSeconds()
( g  b3 P/ F- `- W0 M! ~43
: [3 u. i% c. g* M% k& f// 获取毫秒6 m" ]) S+ |* ?! s2 o% c2 f
&gt; data_test.getMilliseconds()" Q7 p* {0 Y+ A
290
# s. C! X* `9 E% u9 f, U// 获取时间戳3 u+ g, n( ~0 S0 M- y* n1 E
&gt; data_test.getTime()
+ [& |) r/ b8 D; `* Q- l6 @1644587083290
& G6 {% r( U/ ]9 q6 ?</code></pre>" T) _3 D& @( N, O
<h4 id="282-json对象">2.8.2 Json对象</h4>5 c( X$ ]# c  [4 x( e! ?, u
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
: i  c3 P8 b! U; R4 hJSON.parse()  // 反序列化,把JSON字符串转换成对象
6 M1 M; M+ q! G7 u- {8 w1 U: u  b! r% h  y5 l
// 序列化
$ L5 _. r% F: E) B. k: j&gt; var jstojson = JSON.stringify(person)
  y5 X% V  q2 U  v9 C  P2 V( t&gt; jstojson  
- ^9 {( U" b- c& O, P/ n7 X4 `'{"Name":"Hans","Age":18}'& f4 u1 y/ U0 `  t
  w1 K0 R3 n  g! P: q* }
// 反序列化0 I$ @! f! n' P& V2 H% x+ e
&gt; var x = JSON.parse(jstojson)% v0 D6 m" Z% A- \. D% Q
&gt; x
) d# Q) a& g, [: ~{Name: 'Hans', Age: 18}( z+ Y! {9 @; ]( f
&gt; x.Age7 o" S$ ~6 u1 M' [+ [
184 m! G4 ^4 T0 S' J' d& r3 B1 w; g
</code></pre>9 M/ s: X7 F3 R
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
! `( A' z, d1 h7 h+ g  a; f<p>正则</p>
" f6 S6 |0 B3 @5 b<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");. j" o; U/ }, h8 G! E
&gt; reg1
: C* o5 M) P( D3 k2 W/^[a-zA-Z][a-zA-Z0-9]{4,7}/
0 e4 [! c2 B( G+ _7 [# [&gt; reg1.test("Hans666")) x8 M! i$ p  ?- t! F6 h& {5 u
true
0 |" ~% m3 M4 x0 ~+ W+ h& @
, R, G6 Q$ e$ |! T4 @& z&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
. i6 p, e  T7 q$ y; d5 ]! H&gt; reg21 g; R$ g& @4 {! P: W4 w( B
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
' x0 M. w% h0 u9 ~  T$ D% N&gt; reg2.test('Hasdfa')" p0 I- V7 u6 ^$ ~( @; c1 ?
true& H- A3 @/ P2 f# f( a* ]

" p8 P3 C5 m. g全局匹配:
& P9 j8 p5 Y, X& b, m&gt; name) ^( Y7 L5 P  t3 y3 T
'Hello'
' {) C+ B+ T5 t- t- N  `/ d' G9 `5 \&gt; name.match(/l/)# l  L# O' g  q( C
['l', index: 2, input: 'Hello', groups: undefined]
, u/ @/ J- Z6 W( w
" i* x/ ^2 U& @&gt; name.match(/l/g)
7 N! x' X' G( @/ ]5 C+ |6 g(2)&nbsp;['l', 'l']7 I  ^( f" ]2 z1 L
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
! m$ X# s8 _" v5 m1 v0 b
3 |( I5 I+ q. g# b% `: L8 o: V* P全局匹配注意事项:
) D# q8 ~1 s# h6 o3 y- z7 w, L0 \&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
7 i% W5 A8 D- ^9 V) K( R&gt; reg2.test('Hasdfa')* M% l4 X6 T9 c2 r5 I* q# ]3 V; D
true" X; z6 ~, g0 j, O2 s* u
&gt;reg2.lastIndex;
# O# `- p4 E1 x' \7 M6 Z6
8 c: P# @+ Q3 V# b" T&gt; reg2.test('Hasdfa'); D- o2 F2 g1 h# |8 J6 j  @
false4 v9 d  i) ?, i
&gt; reg2.lastIndex;, \9 j" \; m+ T  I' j
04 l; t9 r4 ]- R, g
&gt; reg2.test('Hasdfa'); ]- F7 ?1 r- K0 I$ k6 i
true8 B9 ]2 c# A: m1 D
&gt; reg2.lastIndex;6 \( A7 L9 b2 {0 G5 R
6
3 M, m' F$ f. E: Y" A&gt; reg2.test('Hasdfa')
, Z* |: Q+ V+ q; |+ m/ }false
* B# g5 k" @/ I  T3 n) R  _&gt; reg2.lastIndex;
3 f' h# H+ h. B- M  j- e0
) w% j9 N6 M) S* n% q// 全局匹配会有一个lastindex属性
' F# H: e" y3 z. u/ b" m&gt; reg2.test()0 Y: v9 ~" Q  B3 c. U# }
false
8 n' G- \# W4 k7 |; m& G- r$ U&gt; reg2.test()
) x9 J9 o) T& E) Htrue
$ H! V: C: q+ A% M6 ~5 K// 校验时不传参数默认传的是undefined
: u2 J6 g- O- P2 A) {& v</code></pre>! D1 a8 ~- H  D0 _/ V* P3 D: H
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>  S6 h" s  i" k0 {3 l
<p>就相当于是<code>python</code>中的字典</p>
; {2 N* K2 e5 M<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}2 V4 J% c1 t; ^
&gt; person' F9 r, j- S, O+ D- L
{Name: 'Hans', Age: 18}% n) w- z5 p) f/ A3 W
&gt; person.Name
% A$ {' I6 q. E: N/ q'Hans'& Q0 b& V* r# r2 c1 @
&gt; person["Name"]
, P; w3 d  z# A! J4 A1 X( X+ M'Hans'4 O1 f& ]5 B8 l* J6 R6 P
- o% E# {( I( A) A
// 也可以使用new Object创建! q! ^9 }. t1 R7 I3 K
&gt; var person2 = new Object()+ A7 h" }; g; d: l; ]0 M
&gt; person2.name = "Hello"
, k  Y( q% N8 U1 @2 t'Hello'. d7 F8 U9 B0 v. n0 e
&gt; person2.age = 20
  U. j  I2 T2 v' H* a20
0 \) e1 s% \& k" P( H</code></pre>
+ w/ U7 t; L3 V: Z! `$ N) S<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
2 c4 U6 }  Q& H2 j<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
7 M8 z7 q( u4 p: d: ]<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
1 a  K$ ^3 e* t<h3 id="31-window-对象">3.1 window 对象</h3>6 a8 z5 X& Q2 h+ }$ ?6 C( T
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
! V7 [, ~: x( @+ K9 |<pre><code class="language-python">//览器窗口的内部高度
- E  E" K3 C; ]( K% swindow.innerHeight
# n7 v+ h+ x0 s8 v) t; e+ i706' Y+ {3 Q! C1 l+ ]9 D0 P% v
//浏览器窗口的内部宽度' h; X8 G9 L( f- D- ^
window.innerWidth
2 u% b. Z' D! Z$ O; Z15223 B2 _* a3 T6 l' s4 N& S. M
// 打开新窗口: T3 v/ a# S' B1 T' ]* F3 L1 k
window.open('https://www.baidu.com')
1 x6 o4 v7 \- |  Z5 z& nWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
2 F+ F7 G, Q# [) i* R6 T// 关闭当前窗口9 Y# O. n, Q; q* `! u
window.close()
" [7 |: u3 K' R//  后退一页
1 P: u& a, g0 l  L- Rwindow.history.back()
% W4 }% |8 O: w7 k. U/ x// 前进一页
9 q# i1 S+ L) F. H. S8 H6 ywindow.history.forward() , p$ r4 |: v2 \1 ^$ a5 p
//Web浏览器全称$ q. g+ v7 P& r' S4 E/ V/ k
window.navigator.appName
/ D8 t( b% `6 j( F/ j'Netscape'
( F5 ~7 I6 C& \3 J// Web浏览器厂商和版本的详细字符串
, t8 V0 v! p% k+ w' Nwindow.navigator.appVersion$ |1 C. p- ?" e! k& c- w) u/ O5 p- E
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 X( b% Z+ C4 V2 T: v// 客户端绝大部分信息. W0 m' d) U  e% N% ]7 ~- ?
window.navigator.userAgent
& e* u+ I6 Y) ^5 M; p! f'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
1 h  v  o7 O4 J8 l  L+ C// 浏览器运行所在的操作系统
( I$ e* c) ~. F) t5 D* K3 Uwindow.navigator.platform$ Y) F5 N4 d! o, \. W( ]( m+ X! q
'Win32', f! Y) K+ `7 K- v- B) j+ \6 P

) l  `" G  _2 b3 r//  获取URL
/ q0 b% s0 ^) `! u# p6 M- rwindow.location.href
: E: W# b8 P1 K/ U) y9 w+ V// 跳转到指定页面( n: o! G6 x6 C3 ^$ E- r  N
window.location.href='https://www.baidu.com'
$ g, o8 W8 }4 `* h// 重新加载页面
4 I3 h' O# `7 ~/ \0 qwindow.location.reload() . A" |2 D8 \  y2 T8 P0 S
</code></pre>
3 c* u0 A( X8 ]! t( W( r* H7 I; v<h3 id="32-弹出框">3.2 弹出框</h3>
$ `9 @  \3 g8 Y( Y$ n) F<p>三种消息框:警告框、确认框、提示框。</p>
4 ]4 o6 P9 R# y- w8 ?5 p. g0 Y<h4 id="321-警告框">3.2.1 警告框</h4>7 r7 C! a7 h; Q* Y
<pre><code class="language-javascript">alert("Hello")
* r( g, J% y  n7 t& _2 U* ~</code></pre>
! j* o( _# u, l  N<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
) n0 z8 ?" R/ B5 i2 t* s4 D<h4 id="322-确认框">3.2.2 确认框</h4>
. ~) s& H9 Q2 p<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
/ l& F- w" S+ t* }2 ~<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
+ ?' z+ C  j* V4 N" ftrue5 x$ T/ W9 D1 V7 M! L  b2 Y" D% L
&gt; confirm("你确定吗?")  // 点取消返回false; Y+ J3 U- j$ f% B
false( H. r3 ~; g( x9 D; Z; I/ U) ?
</code></pre>
+ ~( u5 A$ C+ w' ]<h4 id="323-提示框">3.2.3 提示框</h4>' f2 N/ X- R! R0 ]1 H; O/ |% [' x
<p><code>prompt("请输入","提示")</code></p>
) ~2 _! }7 Y( f0 d& {<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>+ z+ U% }: W, I0 p' N6 \0 b
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>6 @  q$ g# Y3 ]
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>6 I  Q7 t4 H% \! Q
<h3 id="33-计时相关">3.3 计时相关</h3>( U" U; d# O) H$ p7 V( m! N; B7 \9 G
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>: m; A3 p( ]1 N
<pre><code class="language-javascript">// 等于3秒钟弹窗. s4 W! |5 @! a( [8 f$ G
setTimeout(function(){alert("Hello")}, 3000)% K) @$ v( `" S7 T

8 X1 `0 N) `3 @1 [0 {var t = setTimeout(function(){alert("Hello")}, 3000)
% c: E. q: u5 V4 B0 v% u2 Z6 w' y/ V2 _
4 D' I9 R5 c; q+ |// 取消setTimeout设置
. d5 @8 f0 D- m% Q0 J9 I% [& LclearTimeout(t)' _4 ^. Z, N- P+ h( H+ c1 ]6 K& M
</code></pre>
8 T( K7 J* Y# U<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>, Y5 u+ d" V; y( V, `
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
5 V& T1 l) k1 @<pre><code class="language-javascript">每三秒弹出 "hello" :2 v+ o4 F% t% ]5 h: Z
setInterval(function(){alert("Hello")},3000);
) _3 w3 q3 h& i: l% b- \1 D& {</code></pre>- `6 R9 l5 E7 O( U" x2 z- g
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>. s3 c; r7 K# G" H0 V
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
" F$ q2 x& g+ E3 l* a//取消:1 I+ F: U! ^( T: k7 P- m
clearInterval(t)/ E/ D  p/ ?) _9 h- `: \+ Q! Z
</code></pre>
3 M) ]3 j' z! g
  g  S, y" Y2 |$ }9 ~" \) i
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-2-27 00:06 , Processed in 0.075328 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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