飞雪团队

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

前端之JavaScript

[复制链接]

7992

主题

8080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( W5 h. Y, B* F- m7 d* o<h1 id="前端之javascript">前端之JavaScript</h1>
: x4 P2 j7 j5 x0 r: H( s+ C. s4 J<p></p><p></p>
1 W6 m# Y3 T) n7 G. d+ f0 A% d1 z<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>5 `$ K: b2 A, H
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>1 X' [0 B6 C3 o" \, W2 C
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>8 \/ L# w( S; {' j; @. }9 U
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>  B' d$ @8 {+ J* y7 {
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>: O  t% s: G" h) Q0 ^; F! Y
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>5 i) d) b# s( z1 ~
<h3 id="21-注释">2.1 注释</h3>' Z7 _1 L3 B7 z. v# I1 S- B
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>* @7 d9 L- a. @0 I' o7 d. J
<pre><code class="language-javascript">// 这是单行注释
! B4 s  H3 V$ N8 Q! x+ E0 ?7 `4 \5 ~! w5 h2 B
/*
+ z( K/ F/ E5 y这是多行注释的第一行,
7 z8 P  O* y* @4 O$ X这是第二行。1 m  E" g' k2 ~, [$ J) j
*/
- `' m( ?( l- e, E5 t</code></pre>) w# U, b' v/ \6 O
<h3 id="22-变量和常量">2.2 变量和常量</h3>
$ Z1 a; T" }' Y: u/ w, w" a$ P<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
) [  P$ s1 d$ m4 q+ l( {# p9 h( W1 h<ul>5 [/ D/ t0 i0 O1 f1 C
<li>变量必须以字母开头</li>
* ^5 f0 ~8 z9 o<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
6 t" Y! F+ h" w( |. w3 E" ]<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
; }4 b! O4 l' l3 d6 x</ul>. T; [6 `  P' a9 Y
<p><code>var</code>定义的都为全局变量</p>, P# x3 @0 p9 n6 _2 c
<p><code>let</code>可以声明局部变量</p>
5 R# l4 w& Y" Z! m<p><strong>声明变量:</strong></p>4 F2 ?' K6 {. U: r
<pre><code class="language-javascript">// 定义单个变量
1 G% W2 v1 ?1 m+ z&gt; var name
8 J( U  [8 w) V$ R&gt; name = 'Hans'$ q8 Y9 H) F+ O( K0 E1 ?8 E
//定义并赋值
. S6 U% r5 m7 p# |+ p&gt; var name = 'Hans'
( W8 \" K) N# h4 B( ]( a&gt; name5 ]! i1 E0 n5 F; h! ^6 r
'Hans'- l. ^# d- H+ o& @3 X
0 {, S* R. M2 t; s+ v' n7 y
// 定义多个变量
7 ^( |) @. o2 \2 D1 E" _&gt; var name = "Hans", age = 18& S0 K5 r4 t  @
&gt; name- N% y3 u# m, P
'Hans'& v2 H6 {$ I' J) }
&gt; age2 R7 a$ w7 e, n0 Z7 x! T+ t; C6 C9 Q
18
7 T0 q9 \: r  K9 |0 i# \; R; v* W0 \! j& v4 n
//多行使用反引号`` 类型python中的三引号: B+ O  B& a) W3 \
&gt; var text = `A young idler,
" ~! V& k1 l2 U- J$ zan old beggar`4 i$ S( \, O# R/ ?8 \' Y( J  g4 o
&gt; text6 C7 _% b! A% Y( ^
'A young idler,\nan old beggar'
+ I1 C" X% ^& \0 F, R- ]: J</code></pre>" w" p" V% ~8 j# P7 v0 F
<p><strong>声明常量:</strong></p>  ^! g) z' |( I: ^6 g
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
$ W% l4 e7 I& W  I; L& J<pre><code class="language-javascript">&gt; const pi = 3.14
9 V4 ?. i1 \0 m' f4 b# i& a1 R&gt; pi
, D% \4 M  `) Y/ u6 S3.14
* Y3 o! d* x: r1 v! v) l9 W&gt;  pi = 3.01
: w' o( C9 o1 N. k) V0 [' @" Y3 AUncaught TypeError: Assignment to constant variable.  a3 y1 b; f; F, {! H4 v7 `
    at &lt;anonymous&gt;:1:4* K1 L* s  \. ?" x/ M
- o! L; Y: c* w& B" p
</code></pre>6 O, ^! _8 @9 s% K4 d
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>6 N4 L4 X9 j5 E
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 p6 a6 o  W9 L* K) f4 S4 L$ Z" }<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>& J7 ^7 i6 D7 u: Q
<h4 id="231-number类型">2.3.1 Number类型</h4>  |+ {- V2 Q" D8 w; X: ^; R
<pre><code class="language-javascript">&gt; var a = 5
5 {: }0 a, c; @6 E" T, C" _&gt; typeof a   //查看变量的类型  
) A2 M7 \  c& z! y& E+ _2 y) \number: P1 X0 a$ u5 a, w

  b% X3 W, ?+ q3 i&gt; var b = 1.3. y4 m4 u3 y6 g1 D9 u. u
&gt; typeof b
5 X6 R% b# |2 c/ a, ^! Znumber
7 ~' n4 ^; f! b
& a4 ?, [+ K, n# C// 不管整型还是浮点型打开出来的结果都是number类型
' P" [. D* E! z% b) s. t+ P1 Q' {
6 V0 `, @3 u# g/ N3 K+ m/*, G7 o$ Q  y1 [
NaN:Not A Number3 B1 V5 ~; V5 Z4 T/ K: C; Q. C6 j
NaN属于数值类型 表示的意思是 不是一个数字
" [4 J3 a+ B% G9 }1 L*/$ O7 _5 f' }) k5 o
) c$ p6 Z/ r- j  S6 l2 U
parseInt('2345')  // 转整型. Q2 s+ r$ P6 F) a4 S0 p
2345& e0 q" t9 M+ W/ Z
parseInt('2345.5')
- [; W& T& T2 x1 a/ _2345# K% M0 t  A/ b
parseFloat('2345.5') // 转浮点型
6 Z6 t" O3 z; L# u/ K4 K3 L2345.5" E/ e9 l9 I0 b9 g) \2 S; g# P8 O
parseFloat('ABC')( s/ L4 P( Z% c! J3 x8 u
NaN
' _7 {; h  m$ h& ^3 ]parseInt('abc')
" G3 s' E7 m) M* ~& p7 E8 lNaN8 z& n- f/ `6 m' m0 L- C+ t
</code></pre>, ~7 ^9 a! g2 W  {( c
<h4 id="232-string类型">2.3.2 String类型</h4>
. x, l/ Q" w6 r/ Z" w<pre><code class="language-javascript">&gt; var name = 'Hans'
* w4 h0 |$ B: T, c&gt; typeof name
) Q9 Y- q) a1 z( O  }2 c'string'0 K2 W% C" |2 |  A
, w- o  c2 H( Q' K/ P8 A8 O  C
//常用方法
( ?& a; V0 m* g$ }4 u// 变量值长度5 ]5 D2 A8 r% o; b1 S* d% h& r3 P
&gt; name.length2 X( @) X# X3 a; E' f
4
  O+ a$ `0 n7 d: W// trim() 移除空白6 \, a8 ?6 M  b4 l7 A7 r
&gt; var a = '    ABC    '' A1 Z4 X0 {# q, [1 h" S& n% \
&gt; a
- X) f$ q! s5 ^6 }4 u% V2 ?/ G, T'    ABC    '1 P6 b3 T- e+ k$ w5 e, L
&gt; a.trim()
  @  i) t5 [$ O0 F3 j& m& ^' p) d'ABC'. d( v% D$ k! ~: I% c7 T
//移除左边的空白
) Y3 r' j4 w8 L8 k&gt; a.trimLeft()
  j- o4 a! S. B4 M2 R+ d2 ^/ R'ABC    '
. `8 N: N( w% X2 V9 o//移除右边的空白
2 W+ t3 P) A9 N8 A# A&gt; a.trimRight()% b7 H% o" }! K6 l- n
'    ABC'
+ j9 d0 [& g4 G8 r6 t; C0 e& h1 I1 O+ `
//返回第n个字符,从0开始* M8 y* C0 b2 n" Q
&gt; name9 R/ R$ _4 S  o5 y
'Hans'
, X2 @4 M% ^' A&gt; name.charAt(3)
- N0 a. b0 D5 y2 x. h8 S9 Q. b- _0 E's'2 m* T) Y5 g, [
&gt; name.charAt()
+ t" [- \. F* j) p$ Q1 S% \'H'
7 z6 S3 K/ m8 ~&gt; name.charAt(1)- {0 v5 ?" O+ N2 K, z
'a'
, e; Z9 ]. |5 J
9 L" o' x: J5 C0 X$ y3 b# x6 K8 k// 在javascript中推荐使用加号(+)拼接% c/ t! U4 z6 x
&gt; name
* K. c. Q3 u1 ]'Hans'
  d/ v6 W3 K! z' m! ?&gt; a4 N$ u/ O' d! G% D$ q/ h
'    ABC    '
7 b* F/ l2 v! E&gt; name + a: c. t/ [' O6 M/ p: W* n( e' a0 A$ D# n
'Hans    ABC    '1 I  J" M1 |  k' ]" U. ^1 K
// 使用concat拼接
, {5 c& l% f8 R- Q7 F9 Q&gt; name.concat(a)
6 Z* L( d( X" a9 |' u: B'Hans    ABC    '
: R% c) t- E# M. s. y3 ]' y( ]0 o$ K2 W8 b8 B! [5 j
//indexOf(substring, start)子序列位置
. M, c4 H" c) ~( Q
8 H  ^" y  B) b1 _: m7 y" f& u&gt; text+ X+ D6 F5 J* ~: q7 W, D
'A young idler,\nan old beggar'
( V7 T; A/ p, S$ E2 A- S&gt; text.indexOf('young',0)$ z( o) v4 K% _2 O
2
- h; Z# H8 C# S2 ~+ C3 R. e8 K3 B( ~0 g% j
//.substring(from, to)        根据索引获取子序列
: G$ l% H2 w7 S) I  g) A, w6 ?&gt; text.substring(0,)
8 L4 W/ h3 U; N9 N'A young idler,\nan old beggar'( H  g/ x3 H0 v
&gt; text.substring(0,10)
+ j$ J& a+ B6 D'A young id'
) q) i! s9 K0 I' z
- q( y* W/ E2 o+ A// .slice(start, end)        切片, 从0开始顾头不顾尾
; W2 c- ^" c4 W$ A8 \! k0 _&gt; name.slice(0,3)$ _" ^" q4 T6 e9 Y2 o+ F9 v
'Han'$ r- u( {! p3 V0 A, j
3 |% d- u( {) X' n
// 转小写+ b) g7 U. V! L1 R. _' C
&gt; name
) T! `4 ]0 _7 ]. Z'Hans'' Y# |1 I# ~  [6 T
&gt; name.toLowerCase()$ [1 _: n9 f4 u  A& }+ ?1 b
'hans'
+ K/ V2 \3 G0 m// 转大写8 f  ]) S. D) Y3 S7 e3 Z# }0 h
&gt; name.toUpperCase()2 n8 S+ x! d$ R8 R3 X: @9 V
'HANS'" E* t8 U+ C! [: g
/ m% s; `' j% ~1 D, V( \: y
// 分隔
( }; J5 G7 O2 ]7 f* Q4 y' X* V) ]&gt; name) K6 e0 ~- @3 t# Y) |
'Hans'
% X% q1 L9 k" j2 b0 O&gt; name.split('a')* d6 N, i& b8 E) N0 v/ D
(2)&nbsp;['H', 'ns']# e: V- t( O; D" T9 h3 |6 F- a! F
</code></pre>0 L) s( p3 p: o1 m) f4 H! j7 s9 _
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
- ^+ L  M+ k  X4 e7 N<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
: T, {2 s* \4 |$ m<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>+ t! ]+ `+ m4 @" L  Q( e  i; m) @
<p><strong>null和undefined</strong></p>
3 L& ^5 H- B& q+ R! J( ^<ul># U3 M4 \& ^, \
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
7 ~' O9 G& K: s<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
0 W& v" l( b, R. T: P( L</ul>
$ _/ c# S. H4 `$ y/ B( W% c<h4 id="234-array数组">2.3.4 Array数组</h4>  k4 O% W: U" C9 N
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
3 x7 Y. z& l0 H. _% N9 |- R" ?<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
6 S' e, `( h! Q&gt; array1
6 n/ r+ T" J4 k) j5 ](6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. J6 S' z; _) Q* B. T- w# }5 m' ?&gt; console.log(array1[2])  //console.log打印类似python中的print
: Z8 I8 w3 u7 D1 f3 i# o% ]; N" w8 g3
+ s. M# b' K8 k/ i" \6 R! ?// length元素个数* S1 B2 Z- \2 c/ U! T' I
&gt; array1.length: M& W" _+ x5 V5 K% n% B
6
$ X  \6 _1 l, c: n' B' c+ A  `// 在尾部增加元素,类型append) ]: Y- s0 E. d  ~; ~' a6 `
&gt; array1.push('D'): o. T6 b! R/ M8 x! P" o6 `- I# a+ v
7
6 S2 l6 U- T7 c&gt; array1
; Z1 U. h, }6 U6 Q( x(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
  d+ m5 h( i6 e0 P* l// 在头部增加元素1 }& Z( k9 G, R" H& b8 j; Q
&gt; array1.unshift(0); g$ y+ `  N/ `3 B; ~9 H- r! ^
8
8 }. |  _$ ], ~  `- u&gt; array1
1 L- m2 a0 B$ O3 E0 C$ Q, r/ y(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']5 l6 P4 L' E7 B3 R+ F! @3 G, A

3 s8 r; q2 @: e' o2 ~//取最后一个元素& x5 o9 v! w6 }$ N6 Y$ a& Q2 H
&gt; array1.pop()
" @* A+ n9 D8 G'D'
2 S  O9 s' U1 Z6 b: O6 }# V; }&gt; array1
, u, y* P- E/ @% y(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
% c( {& A) A8 A4 h" ~! \3 z//取头部元素2 _; N7 {4 `" Q: u2 r
&gt; array1.shift()
3 J' i$ H9 t; ~8 `+ E00 u4 m8 s, e$ P$ t/ Y
&gt; array1
/ o+ A2 o7 t- x6 h$ X& W" }(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
! s* B4 p4 Z/ D" ?1 ^6 X$ H; b) N0 v
//切片, 从0开始顾头不顾尾
7 A* U4 X, [) a&gt; array1.slice(3,6)
# I8 Q: ^- D7 S$ v(3)&nbsp;['a', 'b', 'c']
9 G9 r, V5 n% f9 }# h! I5 F// 反转
% w7 G6 r+ l& F0 [&gt; array1.reverse()
. Z& s' g4 @* Z- _2 A(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
% I3 f  v& C" I7 C// 将数组元素连接成字符串( x( [) h, z% T! G3 ]2 K8 j
&gt; array1.join() // 什么不都写默认使用逗号分隔- [$ I" k7 @4 y2 E7 a$ \9 t
'c,b,a,3,2,1'
) @% Y0 a) Z0 G# J& C) y&gt; array1.join('')% S* y: u, V, Z: A
'cba321'- w# b6 p/ k$ h# A# p
&gt; array1.join('|')
$ b! d$ y2 @: m5 G: ^& l2 F'c|b|a|3|2|1'+ G# I) N6 X# p; f2 P

8 W% ^% z* l" y4 A; |+ `// 连接数组
! G1 t8 e* Y( L$ l: @' s( C% N- {&gt; var array2 = ['A','B','C']
9 |; T: [4 E3 y: U. K4 r&gt; array1.concat(array2)' s0 U! [/ F6 O9 \
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
# m, v1 G9 y% {: a) q- x
$ R8 x$ l: }: t// 排序
3 |% x; v. \6 e) J2 E: Q&gt; array1.sort()- b. @& a) r% c7 v
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( {; u& u4 _- C/ l0 h
0 E3 N- e# q- U6 X  R" n7 j5 O
// 删除元素,并可以向数据组中添加新元素(可选)
+ ^3 e! ?3 I; X% |: P! G&gt; array1.splice(3,3)  // 删除元素
% n6 I% M9 o+ H. v  y# ~( I(3)&nbsp;['a', 'b', 'c']
* B( x/ x* e" x$ j4 T: b&gt; array11 b2 J7 w8 Y9 A# w) m
(3)&nbsp;[1, 2, 3]
8 [  f2 A' n8 M$ E/ K  [&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
4 c4 T( B( h8 ^! ~- Y. N7 \" [[]/ z, }% u, r8 t1 b
&gt; array1' q! T0 d4 ^7 E8 y6 c/ @9 \; @$ D
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
1 j. n' @6 Z  k9 Q% `  A  I
/ f( `5 d' K% A; S/*
  K: S( m! H3 Msplice(index,howmany,item1,.....,itemX)( p$ c* W6 ^( z5 I2 l% B! a2 _) m+ Z/ }
index:必需,必须是数字。规定从何处添加/删除元素。
) f2 _( p  E) Hhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
. e8 X: ~" K6 h/ R& K1 u3 jitem1, ..., itemX        可选。要添加到数组的新元素% y( G0 O. N  W6 C# `
*/8 j6 r. u4 W- o3 [2 o" A3 \+ O' c

0 T% z9 R3 M) o7 N/ J// forEach()        将数组的每个元素传递给回调函数6 @3 V, ~7 [  r  A* q" K0 f
&gt; array1.forEach(function test(n){console.log(n)})
; E$ T3 m8 C) \6 D 1/ `5 G( [8 E8 x7 l
24 S0 p5 J4 L9 u( g7 d0 b
3* [' H. n& Y3 Y+ V" e
A
! Y" C0 _" \6 D B
7 a' F5 ?6 o9 R1 n5 n* l5 N, q C8 |2 T! t/ ?: ~- x8 E3 c7 b- {
// 返回一个数组元素调用函数处理后的值的新数组
- a$ g- s' l' V$ S9 b&gt; array1.map(function(value){return value +1})
7 r6 g" k0 b7 s, ~& [(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']. j+ L9 S5 G& G
</code></pre>: n: p9 T6 _% e- g! M3 }
<h3 id="24-运算符">2.4 运算符</h3>( g" F! L' x' u8 h5 I3 G9 @
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>8 _" K# I0 S$ J2 P
<p><code>+ - * / % ++ --</code></p>
) W( p9 M& d3 a! I2 w<pre><code class="language-javascript">&gt; var a = 63 O  o1 Z: p. P" M) C. a5 O2 B
&gt; var b = 3
* x. {  Y( Y  P* Q" i// 加
6 c' k' H$ f7 r! x! P&gt; a + b$ t7 ]( o4 r- T% i; _/ \
97 v! Z% b: |. t, g9 p: `  C  P
// 减5 g( {( c4 V$ V# |6 q( o
&gt; a - b
6 W7 ]4 L7 J. J' x" c3/ l: x6 N! [7 y( j9 j6 e# [% w8 m: H! z
// 乘- b. d( F% u5 Z+ M/ P
&gt; a * b- C6 L! f1 q& ~# r+ K
180 C. O+ a- j6 N  E. @2 Q
// 除; y- W4 O8 m" K0 x: O
&gt; a / b
$ V6 \" ~# E  v" E2 q2
/ F* {. }8 W3 S2 t  A7 z. r( d// 取模(取余)
3 O) p+ [6 Z- M+ `' J3 n&gt; a % b
. @/ j) v. \! U7 [4 {- a/ a0
6 y, g+ d3 o* F! i1 b# r6 N2 y* s" o! B: T// 自增1(先赋值再增1)
: V, C4 i/ ~  V/ F* G2 A' F3 U- a&gt; a++  b* _' W8 p2 |, f4 `; S; ~! R
6+ g% A# M$ P! m
&gt; a
5 ~. w9 C5 _' ~# ^) {7# I1 \6 _9 w$ p$ N3 p& W
// 自减1(先赋值再减1)* K9 b; z, c9 P4 }* L" Y: t7 U
&gt; a--
8 m' j4 G0 t% R# P* d7
0 w1 b& v; Z2 S( g: I&gt; a. J) {5 O) n, b# d8 p, p) r6 S
6: S4 \2 e1 P) ?$ w2 N3 _
// 自增1(先增1再赋值)
# @7 u, [+ b2 r0 F& b&gt; ++a
% j" X! D' R6 g4 B7 o7
3 Z( m' j+ f3 O// 自减1(先减1再赋值)
6 t4 C6 ^& S' z' E7 Z: F&gt; --a" p) V, s  t0 n9 V$ L. ^& `
6
: L9 x" o* v; a% ~&gt; a. x! o. a/ k+ [/ U9 `% Y: y+ k
6  y# N9 e' E# v; P. w$ p2 z4 C

( K6 H5 ]! @4 T# D; d3 |. y5 R//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理& R6 J0 k. r; }
</code></pre>) I, ]0 i& G9 g
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- m/ ]) y' A. }: d* w( z4 j7 w<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
# Y7 {+ t$ v7 m# g<pre><code class="language-javascript">// 大于
4 K' s) E# G4 |&gt; a &gt; b( ]' v* e( O8 u
true
2 c% D6 }3 K# _// 大于等于
( X6 F9 v+ m0 G+ a, z% l4 h1 G&gt; a &gt;= b
2 H* D  q  f- I+ Z( ~2 o* @4 v$ q( Ytrue  C$ ~* S, s1 v$ i- c
// 小于
  M5 d! Y3 @/ u! x7 |- Q+ S: H" T&gt; a &lt; b* t0 t! z, {2 y8 G2 t' J" P
false
* p( Q' E# h/ ]  z' i  x// 小于等于  @! [! N, F: U/ i% y% ^3 x
&gt; a &lt;= b% l* H  u$ e3 p, Y) b! d& d
false
: l' M/ [, `" {- X. p+ [; H// 弱不等于. Y* {; i" i' Q+ a" B0 q5 Z2 Y: E+ u
&gt; a != b  A* @8 i! J0 c3 ?) {0 |9 u( c; e
true$ X7 K6 P9 g3 a" [
// 弱等于
  ~, u! L) A! O- j$ i/ y" T&gt; 1 == '1'5 ^. y/ j& ]& E' P9 M) f% J: U
true
) C: Y. G9 t( N+ V1 ]5 y9 T// 强等于
. D9 h  l. X, d% v; }  p&gt; 1 === '1'
; v4 g1 X' ^  A& W# O" i2 m4 Vfalse
( J! j+ ^; D9 k! E6 r9 o- q// 强不等于/ F8 X% H, N* l3 b3 R2 N4 d( T
&gt; 1 !== '1'
2 n. }6 S* t- [$ G6 @$ p; o7 A. F. ytrue
. k( c# r, h* Z. _" k; O" o
( j! O0 `+ A9 v5 _* [3 J( V/*. x  c# [5 L" E( H4 V
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误8 [* a; _8 {" m/ `  \
*/
5 ~5 {( X: @2 G% Z1 M4 z</code></pre>9 w' Q8 O* f$ z7 F4 j, \
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- O4 ^! H6 V8 \! G' y<p><code>&amp;&amp; || !</code></p>6 e: i0 F2 a6 u0 N, F1 \
<pre><code class="language-javascript">&amp;&amp; 与
+ C! Q: y9 C. @, P|| or # v- U1 [7 \( I' n* N# h
! 非
( o* H, D- R% r! ^9 u</code></pre>- t. i, C# c. |% H: ~' `, K# n2 p7 Z; m
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, \3 [1 i8 Z9 }: w$ _<p><code>= += -= *= /=</code></p>, K* v2 i3 r7 N0 A8 b# A9 O
<pre><code class="language-javascript">// 赋值
; L2 t0 k2 k1 H&gt; var x = 3
! ~$ ~% i# P! R& Z// 加等于
0 F9 \0 M& \+ A. \* f- ^, X&gt; x += 2
. i* v1 v% H- J5
; K. L" H+ K4 M5 Y// 减等于
; J, Y, I$ C2 k* V) V&gt; x -= 1+ j! z$ K* v0 e
47 N" Q$ h. F+ S" J
// 乘等于
: Z: h2 h, u/ j* z8 _& A5 C&gt; x *= 23 e; C6 V% d+ i+ p  y
85 k- h2 v" z! \6 [' A- `" E7 w
// 除等于
2 l2 U( f- p7 m2 H&gt; x /= 2
) A  u0 {" M! ~7 |+ `- W4) T5 c) H; Q7 Q9 w# D5 k8 a! B8 d
</code></pre>
9 I; F7 H6 ?9 o& ^<h3 id="25-流程控制">2.5 流程控制</h3>
, G2 p+ c8 D2 Q8 h: z) ^<h4 id="251-if">2.5.1 if</h4>9 Z; u: x$ c; f5 v- g3 r+ f8 o
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
" a0 c& {7 T; X
4 l: S# T) b5 ?3 x2 d&gt; var x = 3/ c0 T) @: [$ X. C: [: p& ?8 C  B0 e
&gt; if (x &gt; 2){console.log("OK")}
. N. y2 x5 V4 {. j' T OK
0 B" B- Z( {  t- Y; {
( H& E' g: [5 U+ t/ [$ w0 ~2, if(条件){条件成立执行代码}
5 q/ f  ?! x# T) h- |5 f$ S        else{条件不成立执行代码}( p5 J8 J  J6 K8 O2 d+ ^
! e& W" H+ e! L. I
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
: @* B' m' b) S'NO'
& {" g% B; S( F0 r9 c
' U  l8 U1 e! p# [8 s3, if(条件1){条件1成立执行代码} ( Y* ?+ D$ t/ n' K$ T5 e9 J
        else if(条件2){条件2成立执行代码}) q( O' C% B# C: P
    else{上面条件都不成立执行代码}9 _7 X  N/ x& r8 a+ Z

+ ~- H, n% i& g- h: H5 b- \&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}* B7 B8 P' @9 a0 W: x7 X8 r
Ha  R1 N3 v; G' u( S' z1 b. s
</code></pre>
- P/ s9 d' s. a  P& H<h4 id="252-switch">2.5.2 switch</h4>! }2 j9 _2 r* U3 _9 l& z7 s
<pre><code class="language-javascript">var day = new Date().getDay();
- a% I5 r2 ~  s2 ]5 wswitch (day) {% M- K' A' i# s
  case 0:
/ K! y+ S. d1 W  `; L  console.log("Sunday");/ H2 P+ m$ |1 T% [5 l
  break;
6 B2 A2 P5 O) f1 |& f  case 1:5 A( {- q9 W) L9 X, Q
  console.log("Monday");9 u! I+ [4 A1 U) l  K
  break;
! ^, M5 ?# ~' t  P  Zdefault:
1 z) Q% y3 b, r) |& W  console.log("不在范围")
, d9 P& c. b% o) r2 S* F}
2 Q6 b! X- b' \& e4 O 不在范围$ ]5 d  u5 @/ q
</code></pre>
( a5 I+ N# m1 g2 l! j5 {  h3 R: @<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>/ Y1 ^2 t  S5 Z1 S& B1 |
<h4 id="253-for">2.5.3 for</h4>
4 G4 a+ s- I3 _* R& o* y<pre><code class="language-python">// for 循环7 e1 f6 v1 D1 O# d8 d$ N
        for(起始值;循环条件;每次循环后执行的操作){
, l% G6 Z) d& v% v        for循环体代码  X! a4 I* \5 o) a/ t% f: R
    }
& M2 P3 }9 t+ w! T; J( b/ g* k  F" [1 h" g7 N
for (var i = 0; i&lt;10; i++){
. U9 h9 b6 h& X. M2 _9 O; p    console.log(i)
9 o" g! P/ ^# P6 ?. G+ ?& d}
1 e! Q# j" M. X) z. o4 @% I        08 `1 }) i) u( z  _8 L/ x
        1
( r. w0 Z; r9 S; ]        2
, |2 u4 G  R1 I( t, f        3$ Q5 j. o3 m1 e% k$ F$ e# x
        4
, l( M; @3 i8 I& x  o( `        5, X9 h7 [) a( o  Y$ Y$ Q) ~& W
        6+ K: _& M. A. j
        7& E9 ]2 K5 v3 [! @3 j  p
        8; E8 }: |+ F- V
        9
9 M  S' B1 ?/ y5 h! c7 Q# M/ W</code></pre>
- v2 y, R7 ~& }" a! N<h4 id="254-while">2.5.4 while</h4>$ x# K% V1 Q6 e3 m6 `7 s, V
<pre><code class="language-javascript">// while 循环
* N2 O- j0 ]' S: M; t" K7 z        while(循环条件){5 i) a  L, B$ v3 A( g
        循环体代码1 w: a% Z" c$ k! k
    }2 L  E+ G0 T, g/ T+ J7 U( j% |" j
: D; w8 R  \( ]; [7 h
&gt; var i = 04 T. M! W3 t0 p7 V) Z
&gt; while(i&lt;10){7 R# P1 I$ M1 C. U* J$ X
    console.log(i)
3 q5 }! n; i1 p0 A7 ]    i++4 g! Y4 c$ k5 ^0 D7 [
}
( X7 r& t+ Q0 B* U8 I1 z; ^7 ?5 p 0
8 @# g  B/ J* y/ f. O( ~1 z 1
& n0 ?) h9 a  _: R 2
$ \7 s% O: C) h0 L$ _" A 3
8 E) u4 \, z2 J* m6 H0 X( u 4# p' W) ~; j! L4 W* V
5
3 E) D/ E* `/ n: ]  n. ]& T$ \ 60 L- v: y, g' Y4 c4 x9 D
7" J( L* J4 T2 y
8. }6 W) K+ u% k; S* f
9
( `" g2 `5 X7 \# V</code></pre>( v. w( h* \# v! U
<h4 id="255-break和continue">2.5.5 break和continue</h4>( J: x6 X/ B8 l; }5 ^; N
<pre><code class="language-javascript">// break
2 R* g* ]7 J- E2 B5 N* v7 Ffor (var i = 0; i&lt;10; i++){* Y  o8 b/ E5 j  r) ?0 v
    if (i == 5){break}6 X5 H5 R& I% F; `* e# E
    console.log(i)
( H( F& i1 ^5 e, Y}% ?: G. Q, Q/ g2 ]4 R: h# R
0
" m; y" ?- n4 I1 n 1
# z5 w5 \- U$ N 2& L/ l5 V  C) Y5 G/ v
3! ?. z- o  y+ e4 q
45 {* j. Q8 t# ~
// continue1 F5 h" i. z8 f! P! ]" ]
for (var i = 0; i&lt;10; i++){3 O7 K% c8 q, s) m% I& x
    if (i == 5){continue}
" g6 S5 a( Q4 ~8 f  O7 |    console.log(i)
. a4 {. d- h1 ?* [( l+ P9 W}
- k  {; i; |6 q8 X3 L& t 03 Z& g- q/ K8 @
1
: K$ K; b% h, N1 S7 H) z: H 2* I' b3 e* y) ]. D# j7 w
35 A  W: J& v( j$ z- y9 d* y& ?
4
5 T6 k" m7 X7 ?! N( m. x 69 t8 x3 h7 y! S9 j& [
7
# u; `! d6 X% l8 F! h7 @# t 8
9 Z* M; y- t8 ?8 ?# F 9
3 v) e9 J: v# o1 t; i
+ j' i2 G$ t/ Q3 \6 h9 p) @</code></pre>  H' U* \9 z" U  E( x
<h3 id="26-三元运算">2.6 三元运算</h3>
, M+ X( {; G* L% U% S<pre><code class="language-javascript">&gt; a; I  {. s( d! Z' s* P$ A! V' @
65 O+ F3 h1 ~. Y+ B1 r4 W+ l
&gt; b
" a& F: d6 P7 d( H. o% Z3) Q1 t" f% P+ K9 t7 ]

# Y; x! O: D8 x4 @. z# ]0 \//条件成立c为a的值,不成立c为b的值
7 m% _  P' K: F&gt; var c = a &gt; b ? a : b
/ O( e# y3 K9 p+ l&gt; c
# `! i$ K0 O' L. d6
. G; Z) ~% R2 I; a; ]/ I; N( J. B
2 V% O, k) T$ L8 b' _  w, g% M// 三元运算可以嵌套
7 w9 @0 `/ K6 Z# h1 _</code></pre>  P$ h1 \0 P- L2 _  C6 ~
<h3 id="27-函数">2.7 函数</h3>
+ B' s$ E$ z9 [1 E$ D( r% p<pre><code class="language-javascript">1. 普通函数
7 |2 r0 t+ A: G: B  T) ]&gt; function foo1(){
5 _: o9 m) ~! V, \: `& ~& i3 M    console.log("Hi")! L8 w/ S" W! u0 a
}
8 L2 g) b5 e/ ^% T% w- z6 J/ W1 S2 N. v' R9 u" m
&gt; foo1()
! |8 o2 B% n% A) B3 X; i: w        Hi5 \% j4 y# X$ d% ?6 q
2. 带参数函数
0 F. }$ g7 g; N% C&gt; function foo1(name){7 d/ E* q" R% P$ k4 y! x/ }
console.log("Hi",name)
) s( r* E0 w, ^7 X; T}7 e# h2 ]3 D0 r9 I+ T8 u, }/ _: b: R

' Q& @8 V% m/ D: B: @&gt; foo1("Hans")8 Y( j; A) L; V$ z, V, B; _* p
Hi Hans9 P* w2 u& z6 C/ b7 x: c
' g9 |& B; [+ T3 x& _
&gt; var name = "Hello"
. n# ]9 W! G8 {+ ^8 m  O  T&gt; foo1(name)* i( |2 u/ Y7 ~+ ]: |4 D. i; c
Hi Hello
0 |% d& \7 T5 E/ t6 o" K3 S) N/ Q5 L& e  i' y5 t& J
3. 带返回值函数
0 j: R+ d( Y. p6 \+ G: W* N' Y&gt; function foo1(a,b){
- @: j! e: r, F4 _, w        return a + b   
9 p: K0 S6 k9 Y2 U}9 P# s. i1 Y6 Q  Y. p- A7 K
&gt; foo1(1,2)8 z, y7 `* v" O0 G- X4 o
3. u/ C4 J% q! O# n& R( N
&gt; var a = foo1(10,20)  //接受函数返回值) c) w4 U: ^; P4 S- O2 R
&gt; a
1 Z  M( d4 o% e2 T; A300 Z. g! b$ S# n( }- Y: H; T/ I

) c0 Y7 i% E0 W; i" U, @/ ^0 D4. 匿名函数
" ^  V9 E4 ~! w2 @- ~&gt; var sum = function(a, b){
& d- v, Z, B3 }* l  return a + b;
& V0 g( L+ \3 o+ J/ M* [}
+ e3 e) d% s9 l/ j  X2 k, g&gt; sum(1,2)
# a5 r. J0 n9 \" J) C3
, K. A3 r0 j& ~; Z$ q  D
2 B; u9 \8 H  d' A// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱+ {/ B+ ?6 D) @/ P- P- H" m8 N6 G+ i
&gt; (function(a, b){4 t! o8 D$ u6 Y0 @- B0 n
  return a + b) W) y5 @$ `' R' @
})(10, 20)
% K5 X7 c$ i( d0 u" c8 b2 x( Z& \' M30
# ^4 b0 L7 e9 v) S7 j/ K: e; Q
3 p" i0 V( s3 F1 \6 F; K/ s, n5. 闭包函数  c. U0 W1 ^: l* z+ S7 w: l
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数# Z: q0 y: V7 |, l6 u$ U" k+ Q: I
var city = "BJ"+ b$ j' k, j( i) e% e/ h2 i. M
function f(){: W/ I' C. i! F( J
    var city = "SH"( J! K4 f" C  x' c* z( d
    function inner(){
6 U% C* a0 N* Q$ L' n( h; C        console.log(city)# i- J2 n/ A6 K& N3 T- B+ G  C
    }
1 ]* p+ M$ F/ C; K) a' l! ?) J% c    return inner
7 v: j, Q) r) l}8 P( u7 G  W6 c5 Z* m2 a
var ret = f()# E( M3 k' K2 }; W9 B/ c
ret()
3 w, W* F% M0 E; d9 T0 u执行结果:! P1 G5 r/ E# u
SH8 m2 L2 G! D, ~% \
' m+ ]1 f7 s3 F
</code></pre>& c, t4 Y6 C3 k6 _3 q; o0 `' B5 w* w
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>- @9 O- q/ M+ G3 m4 c0 `9 E$ n
<pre><code class="language-javascript">var f = v =&gt; v;8 s) ~7 I1 {2 X2 c
// 等同于# D0 @6 |/ t. T$ F
var f = function(v){7 z# y6 X8 m4 m; p; H" t% X
  return v;# w; [( L7 U/ M- V/ v* B5 H
}
/ p' b# x$ t% O! S0 l6 k0 ^$ S</code></pre>* P& v, i/ y2 e  K- i8 ?
<p><code>arguments</code>参数 可以获取传入的所有数据</p>7 K$ `) @$ W5 Y% K
<pre><code class="language-javascript">function foo1(a,b){: h, }/ L8 }5 f2 r- d
    console.log(arguments.length)  //参数的个数 5 s7 o" L: x/ [1 x. W
    console.log(arguments[0]) // 第一个参数的值
7 n2 N7 T" L" q1 X# j% ?5 Y2 A1 w( l( z        return a + b   , n) z( Y+ M6 Q; a  B7 y
}# T: h  ]( D% {. T$ y8 j3 D
foo1(10,20)2 Z- {$ B$ W1 \* h
结果:
2 h9 x+ ?) G$ G3 L 2          //参数的个数
% o/ T0 e9 ?9 N2 U/ l( k1 I9 S10        // 第一个参数的值
  R; P1 ^0 p, q3 K0 Q  x! x30        // 返回相加的结果
& z2 t1 z* M, I8 @</code></pre>
7 ~2 U+ Y6 O+ W<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>' b: X+ c1 O5 q
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
& p: _& X* J8 v4 J- c8 L<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>& h# i& U- J+ K
<h4 id="281-date对象">2.8.1 Date对象</h4>
4 |* {9 t8 j; i# z<pre><code class="language-javascript">&gt; var data_test = new Date()9 C8 U  f! h0 S1 q
&gt; data_test
0 ^0 ~' j5 a% ~0 E' e) YFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间). M# w6 H% h/ ?  P" [
&gt; data_test.toLocaleString()! F( C0 b3 L1 l) L
'2022/2/11 下午9:44:43'9 U# ~. s2 r& B, g. [8 [
2 n( A7 P2 C8 C5 r) B
&gt; data_test.toLocaleDateString()1 }4 f  H1 W' g% H) Z
'2022/2/11'
2 A! P) @5 m- F* n0 |' m, o2 K( q! N& {# d' H- x' K
&gt; var data_test2  = new Date("2022/2/11 9:44:43")# i; R; u5 f5 |1 e8 P9 \- L: n
&gt; data_test2.toLocaleString()2 G( A1 x: P' D6 m2 r2 N
'2022/2/11 上午9:44:43'  q3 {8 m! O6 G  u. _6 d
5 e% i0 W# C! R
// 获取当前几号
# X! y; \$ K6 t9 x! q3 ]3 q8 ]&gt; data_test.getDate()
; q7 h& G9 Q1 t  D: c) j$ ^6 d11
( ~9 R3 Z4 t! L" k! W// 获取星期几,数字表示
" d; u4 h# J+ j  a1 q  d6 s&gt; data_test.getDay()  1 s! p3 s8 T$ |; ?: i6 M
5+ R0 b5 n' i1 b
// 获取月份(0-11)
5 `# V) ^& p% ~3 C- k4 g; Y1 C# J! }&gt; data_test.getMonth()
: k& F( W3 a# e5 t18 H# j  G( O" C- s% H0 @8 o" y
// 获取完整年份0 C% ]0 D; ^/ o8 M& [' o* J/ K$ V* g9 N
&gt; data_test.getFullYear()+ }/ s( F, M6 p" J. I  U
20220 w' ?5 X0 E5 Q& b
// 获取时
0 [1 b) Q. K* ~6 a9 ]2 H' }3 }  a&gt; data_test.getHours()( G" J! m: v0 |& p0 d/ G7 N* l" u
21+ J' Z8 N# {& K9 G- g$ }
// 获取分& a+ V% D: \3 b9 w9 ^1 J* |" K
&gt; data_test.getMinutes()
6 G' N* m. f- [6 i( X44
7 h% @: f' X+ k- m// 获取秒
4 w. F7 e) Q( [/ t9 `3 M&gt; data_test.getSeconds()
& i( y3 U& E# d# n# s43
9 G5 ~7 ~' |- N; v7 H// 获取毫秒* h0 W# J+ L, v0 K) |9 i7 j* _  F0 n
&gt; data_test.getMilliseconds()7 w7 l6 W' X5 ]9 V2 }# Y
290
, N; Y  e# D* s; C6 T9 \// 获取时间戳) N! F5 E* y/ u) f" s
&gt; data_test.getTime()
* L. W" m5 m  B% J) K1644587083290
' d$ H2 [7 H$ |</code></pre>4 T! z( \1 p+ v$ M
<h4 id="282-json对象">2.8.2 Json对象</h4>9 _% f2 `" S. j  ^
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串' t8 w$ @5 |: Q, }
JSON.parse()  // 反序列化,把JSON字符串转换成对象
- \! o: p' {9 w$ z/ Y# S# b- z/ x8 M
5 l8 q8 w* _1 U. X// 序列化3 [# Q# i* }! ?$ m9 ~
&gt; var jstojson = JSON.stringify(person) : y+ N1 {, |) j% a" L
&gt; jstojson  
" [$ x& u- X! {1 L# k! }8 `'{"Name":"Hans","Age":18}'7 b, ~* S  U( E: r( x7 J1 Y) t

& c7 c9 r. e9 I: x// 反序列化
( v. a" s+ \$ m&gt; var x = JSON.parse(jstojson)
: a: r3 I5 I$ r7 `4 l&gt; x
! l4 [: v( Z$ c1 H- e{Name: 'Hans', Age: 18}" Z  }' c$ w% C
&gt; x.Age
0 i" ~, L0 i) }18$ Q- {5 ]6 ]" _' N  r  A, r5 C6 @, d
</code></pre>
$ A' H& o  x. k4 F4 p% V<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>& E- K8 ^' g% y
<p>正则</p>+ q* z& O  D) _5 e9 R9 }- u) X7 x
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");- F5 V% Z& D! g1 Z
&gt; reg1, z/ N# [  v3 v! R  q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 V/ M' N- A7 o8 p: m&gt; reg1.test("Hans666")
* Y& _' v: g5 X4 dtrue, j9 y" Z4 B3 m/ g' b

7 L5 d; @: {- r, L! i&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
3 y# i! I) R& f4 G&gt; reg2
" q7 y$ w, j' N' Z& z/^[a-zA-Z][a-zA-Z0-9]{4,7}/& w1 Y+ ~% {/ I0 C
&gt; reg2.test('Hasdfa')3 a" }5 n" S' \( b3 ^
true/ A: x" b: [- H8 U
( W* A2 U( R) M" j. v
全局匹配:: ^, l+ [+ C9 l+ j6 U% P
&gt; name1 A1 T1 l* y. B% H" U2 t
'Hello', N" u* n2 E+ x1 D, `* \
&gt; name.match(/l/)7 L* {6 t; s1 `$ J+ A
['l', index: 2, input: 'Hello', groups: undefined]
1 |6 r8 p* j  l) e. N$ b. l
/ I& Q/ ~/ y( O" b2 E&gt; name.match(/l/g)( w7 x* C1 _  z( P2 h1 c3 m
(2)&nbsp;['l', 'l']% U0 B& f" B- U  V1 J* f
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
1 U6 C( W9 ]! @, E6 c
1 r3 U. N3 [. s全局匹配注意事项:5 V8 X6 y  _3 a6 b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
* a5 x+ k) K2 S5 U' `6 A: Q& T. d&gt; reg2.test('Hasdfa')
' `& f7 K) I# `/ M! t2 gtrue
( D$ C, |* c2 F2 u&gt;reg2.lastIndex;
. c8 e* R0 S% C3 f: [( P5 ^% E* w69 d4 Y( z2 u6 \, |* x0 ]
&gt; reg2.test('Hasdfa')
6 e9 [4 R4 z# efalse
$ _) M) W$ }9 n: a9 O! x4 H+ Z) H* [1 C, X&gt; reg2.lastIndex;7 v/ a! `9 Z& w" R  C5 O$ ]' [
0( D  [1 k" R5 l' T2 Q& y/ [0 a
&gt; reg2.test('Hasdfa')" b( d+ u2 w) I6 k6 M4 p
true
6 d7 Z2 w' V9 o% {7 m5 q&gt; reg2.lastIndex;! l/ r* ~; i' `4 R
6
6 J' \6 L; `+ }. \5 r  z# ?) s. U&gt; reg2.test('Hasdfa')0 {- W# B' v4 L1 i" X
false
9 n4 l: U/ L0 Z# e7 B5 [&gt; reg2.lastIndex;% |! Z2 n5 Z! v, S0 _3 |. }0 F
0
" [3 h8 H3 d1 ]3 p/ H// 全局匹配会有一个lastindex属性* G2 t$ M7 W6 K6 X0 T
&gt; reg2.test()6 b. E2 Y9 C& G8 Q6 g9 U9 l4 B0 H% \
false$ z( W( ]! x4 G" M
&gt; reg2.test()9 L3 j/ t' ?( v  j1 _( }$ i
true
: ]6 t/ T( h& t0 V3 x: T% K// 校验时不传参数默认传的是undefined+ x- O9 L* }# F% [9 Z: G) q* k
</code></pre>' |0 ~2 O( M& {- E) c; U4 J
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
' e0 U% G% o' z<p>就相当于是<code>python</code>中的字典</p>; v, h, m$ J. B0 }( |3 C
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}3 h. P( o, X3 U: k& B* o
&gt; person
! o- m8 o' `4 g6 P, c3 m% S: R{Name: 'Hans', Age: 18}) v- J, _3 p5 b+ }' }! L
&gt; person.Name0 E/ `6 L4 P) j6 d" ?
'Hans'
& ?; c9 `* F2 v&gt; person["Name"]
5 v% b2 K$ `: w' d'Hans'! L4 E/ y: D$ b/ R# Z* d8 o% G5 l' J

0 \, U/ T! r* a, R// 也可以使用new Object创建. N% h0 ~7 l4 e# B; W6 F  {9 Y
&gt; var person2 = new Object()& z, ~1 M. s9 P) X6 m8 j7 [: G6 g
&gt; person2.name = "Hello": {7 F% H8 F- m1 w5 Y
'Hello'
" z; h. x# i) o2 k- Y6 N, i4 {&gt; person2.age = 20, s$ Q( x5 \9 o5 B
205 _( Q, M- q8 a2 U
</code></pre>
6 R4 z7 W: F" o2 ^0 d1 H/ m2 N<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>5 b# A( G1 o  Q8 a  z
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>( H) _3 N, f1 W  I
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>- }8 @5 n+ o' c8 l7 [. G
<h3 id="31-window-对象">3.1 window 对象</h3>
+ D* \/ C3 Z: S" d0 {<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
) w3 }- l1 Q8 Z0 F" X<pre><code class="language-python">//览器窗口的内部高度
3 ~, ~+ i# F  L' E1 t! \+ ywindow.innerHeight
' T* `! a( j+ T/ Q706( t- Z0 y  R9 ~! X- |2 K, H
//浏览器窗口的内部宽度! g/ H: {" C1 k$ a0 R
window.innerWidth# Q  ?$ {  X/ D& Y1 o6 z
1522
& R* r% T. u6 W  w// 打开新窗口6 u  {* s5 s' a+ ^: v
window.open('https://www.baidu.com')
4 |" R) z; C& \% o5 H" @Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}% H, v0 P/ ?( k
// 关闭当前窗口
" x3 }, m( Z; l- l8 X4 q4 Pwindow.close()
: G3 H  E# ?+ j! X. p//  后退一页/ d" o. @8 `/ {* n8 t0 k4 M
window.history.back()
+ a2 S  a/ ]. b7 x" Z( x// 前进一页3 v% R* B, M8 P1 u6 k
window.history.forward() : ~6 m2 ]  p! g, l' h: N2 m
//Web浏览器全称
! G. X, j* K( }- l1 T4 q7 Pwindow.navigator.appName8 m9 P. C9 i, t. A9 L& _
'Netscape'3 i( J# l2 C  U5 `/ S
// Web浏览器厂商和版本的详细字符串
1 P8 c) ^8 K, S0 A3 hwindow.navigator.appVersion
5 K" d- f: t# p0 r/ D9 ^5 z1 j# K5 `'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 a# Z+ U$ X0 A9 u) ~. }9 W
// 客户端绝大部分信息1 J% W& n, W0 Y
window.navigator.userAgent; f0 c2 Z: V8 X$ l' e$ X
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'3 O4 l, G( E+ c/ F
// 浏览器运行所在的操作系统
4 E$ L! S) f8 G& ~6 rwindow.navigator.platform4 n$ h' J' `. ?2 @* W6 @
'Win32'
4 F% M3 ~# D$ R% T$ U
: \: @1 v9 C& y5 Z' |  G9 N' V//  获取URL9 g1 c. X% }, W, D% s! P
window.location.href
  J6 Y. J6 E8 K  Y* _4 r// 跳转到指定页面
- z: F$ i, N" g( f2 p% Fwindow.location.href='https://www.baidu.com'( ]2 z. y: H- V4 R" ]
// 重新加载页面
) Y! Q: N& H5 Z. w+ x  M( Awindow.location.reload()
: v- w* e8 i2 `</code></pre>
* ~7 |) A$ t1 Q<h3 id="32-弹出框">3.2 弹出框</h3>3 Z) N8 H/ V9 K
<p>三种消息框:警告框、确认框、提示框。</p>, k) W1 N* {1 j( B( d: B# C* x
<h4 id="321-警告框">3.2.1 警告框</h4>6 P0 u( p3 T9 E
<pre><code class="language-javascript">alert("Hello")
& c# R$ A1 t( D1 x$ t( Z# l9 S</code></pre>2 W! p; M; L& p& d9 x
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>. g7 F6 \- u: P6 d6 h
<h4 id="322-确认框">3.2.2 确认框</h4>7 [9 U2 z9 w5 F9 R
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>7 n( S( i8 I6 u7 i# v! ^
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true/ r( x4 {  @, f) r5 K! V" o
true
! \3 e! }' j* t6 \&gt; confirm("你确定吗?")  // 点取消返回false
! ^6 B- C# x3 I# x. |) Dfalse' F3 C# |8 j( v' b5 S
</code></pre>
8 p, y. L0 Y# I<h4 id="323-提示框">3.2.3 提示框</h4>
! c$ x9 t3 Y7 P. k0 B<p><code>prompt("请输入","提示")</code></p>8 N' r- g( B+ n2 l( B8 l* f2 l' m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
/ i& R0 }& k+ b8 V<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
& o) @% W/ ]4 I7 {" ^* s<p>如果直接点<code>取消</code>后端收到<code>null</code></p>0 \7 g( i; [& q2 q# A
<h3 id="33-计时相关">3.3 计时相关</h3>
! x/ }' g4 R1 G4 a  |<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>; F" W( w3 I  V8 a8 c" B$ O
<pre><code class="language-javascript">// 等于3秒钟弹窗
) b# ~9 q8 e/ T. Y) _" ?2 v; d$ csetTimeout(function(){alert("Hello")}, 3000)
: n3 I+ |4 \# y  {8 E* B( E4 t
0 s. n! a9 e) xvar t = setTimeout(function(){alert("Hello")}, 3000)
2 F7 \, k4 b& l5 {- ?, U1 j& `% r! O# ^6 K( R* |3 a6 e2 c
// 取消setTimeout设置& v- f0 ]* @& I# V
clearTimeout(t)# ^" p8 m' `. ~% c; o. H$ X! Q
</code></pre>1 u7 T7 n( a# M) ?. H0 g. W5 q
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>2 C- G3 T+ a+ `5 I; Z9 W) F$ c
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
. ?  e0 ~8 {  u3 _  X<pre><code class="language-javascript">每三秒弹出 "hello" :( _2 G5 F- Z1 |2 ?0 ~, f
setInterval(function(){alert("Hello")},3000);8 n( }2 e! e) k8 X
</code></pre>
. k1 z9 t8 C( m2 `; I<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>/ ~3 v3 d* t1 v: B" R! ^4 d3 Y
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);. {0 _, [# R4 k" h. d
//取消:9 z7 E) i9 L* R0 N/ S8 k/ n
clearInterval(t)
+ i) ]6 ]; Q; r/ q: [</code></pre>3 y. X6 D; X! c! e4 W
6 X6 A: e4 _' E, K3 @; M# [* R
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-29 09:46 , Processed in 0.074084 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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