飞雪团队

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

前端之JavaScript

[复制链接]

6483

主题

6571

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21773
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
, F7 @( }( `3 h- q" |) p; o3 M% v* c
<h1 id="前端之javascript">前端之JavaScript</h1>7 J# ]$ B# Y7 g4 K. W
<p></p><p></p>
2 m  ~) h3 I' \- ~1 u7 a) K/ {<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
$ r2 |9 U+ q+ o, t6 n<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>2 ^. X% T9 w3 Q- r
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
% B, D8 g, D- |, t' X3 R: W它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>; U: G1 f4 D! P/ J! E- H9 F
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>) L6 r+ }, d6 i! t1 u
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
  P9 w5 C% c& u) T<h3 id="21-注释">2.1 注释</h3>
- h! n- l( d9 l: D/ N5 x! [<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>5 r* v8 I  W/ y$ p# {
<pre><code class="language-javascript">// 这是单行注释9 e+ M: v  r3 z. i4 A6 ]2 v

* j/ a+ A6 k2 u) z7 W4 Y/*
* h7 E9 z0 T/ C3 u9 x这是多行注释的第一行,! _& K7 E' i$ N& R
这是第二行。
' J* \3 l0 ^! o& {/ H. D* H*/
; `7 Y& P0 E3 ]2 J0 ^8 u</code></pre>
0 A3 X& _. F$ |+ q0 E3 P  }& o: {0 [; g, U<h3 id="22-变量和常量">2.2 变量和常量</h3>
4 i& \( ?# `3 v8 Y+ S# W9 ?! \<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>$ V+ I  v* I) D7 W: K
<ul>$ R( p$ h6 f( p) \8 R& g
<li>变量必须以字母开头</li>. j+ h) q, e. W# T8 q
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>7 l- J9 H. G7 I$ A8 F/ L; P: B
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>; b2 r: t; j* ?/ B8 j4 v
</ul>9 w2 X" }  F1 ^$ F! P8 p/ G! E
<p><code>var</code>定义的都为全局变量</p>4 x4 k! \: r# U9 N" l+ \# Y/ _
<p><code>let</code>可以声明局部变量</p>
, d3 [$ v: ?8 K: |4 K$ J# c<p><strong>声明变量:</strong></p>2 l7 J/ o8 G" ^, t* v' p* ]4 p+ f
<pre><code class="language-javascript">// 定义单个变量; X9 F& Y" p# b
&gt; var name
, J  q- }- a" B8 e&gt; name = 'Hans'+ E! _4 a; G- u8 H
//定义并赋值
- }# K( P2 E$ O&gt; var name = 'Hans': e6 _. F  D( ~2 a- J
&gt; name
6 {7 h" f8 K0 _; ?0 z) A'Hans'* a$ _1 x# G6 b% v$ |6 S7 I) U( @5 r

8 k( l$ {8 d' g6 c+ g* a1 [// 定义多个变量) b# k2 f0 q- s, j6 B1 }
&gt; var name = "Hans", age = 18, _2 z  J1 C  C8 G# j5 h* s$ Q
&gt; name
/ y" z% m, e% ~9 t+ l'Hans'& w& c! q, H  H
&gt; age2 d2 R$ Y2 d( ^8 e  P
18; X7 W/ g- x) i

% G9 N1 }% ?0 c0 L2 I# z" I& e8 a/ m//多行使用反引号`` 类型python中的三引号1 W5 ~5 T) y- R& M
&gt; var text = `A young idler,; }/ b- C. v+ L" v8 u. I' ~9 {
an old beggar`
) j- k( o8 o$ L+ R0 C& ~4 Q9 w0 y&gt; text
6 x' x# e1 K. K& S6 R7 e2 I7 d'A young idler,\nan old beggar'- x6 o6 H' b1 ?" _1 m% _
</code></pre>
* c8 r5 N, t/ g: Y5 ^<p><strong>声明常量:</strong></p>! h1 J: [% ~8 M) N) z
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! s, h6 \8 s+ k" Z<pre><code class="language-javascript">&gt; const pi = 3.14" u% j' F- i& V
&gt; pi! d4 p3 U' }% {3 n+ d0 R
3.14
0 |8 J7 ]) r2 x8 D1 I$ R8 ~( j&gt;  pi = 3.011 @" Y) I. d! x. U& O; O8 C
Uncaught TypeError: Assignment to constant variable.- Q' W" P7 V2 Z
    at &lt;anonymous&gt;:1:4
. f0 y! }+ C7 t3 b2 x' T+ o  A: B% I; s9 k
</code></pre>0 w. K. S: X1 B+ w2 |
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
0 s  Q) C2 b' k+ S+ [) k<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 t9 K8 b/ ~4 ~% T9 p8 `) r<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>. ]! u9 x3 T, Y4 j9 E  E
<h4 id="231-number类型">2.3.1 Number类型</h4>! w/ j8 \! u8 @0 s3 D3 d
<pre><code class="language-javascript">&gt; var a = 5
/ ^7 V2 i" [# I2 q: _&gt; typeof a   //查看变量的类型  0 @& @/ @, ~5 m
number
, F; Y+ b! f& g% {; u( a
+ B8 P0 z, `  ~# A; u8 _9 I1 Y&gt; var b = 1.3* G* g( E  [8 L, R. v. r
&gt; typeof b
% y& J- J/ N* _5 ^  ]% m. a% knumber
$ k; I' M2 Y6 e0 {! _
0 g4 B3 f/ F1 j, o// 不管整型还是浮点型打开出来的结果都是number类型+ v# g  O. m* @6 D8 A" n0 F" q+ t
) e1 {: o3 R4 W5 W4 _9 Y% b; h
/*: ]5 f% n0 g4 L) L) f1 O# a
NaN:Not A Number- g' N: b8 T9 x
NaN属于数值类型 表示的意思是 不是一个数字
6 S3 m, @4 v" ]4 k% w5 i# ]*/  v% X' a: H& @1 E1 q" i# w4 w3 j

1 ^4 W! K4 i( ?! W) ]& v% X9 h7 v: LparseInt('2345')  // 转整型" ]7 E( b" i( F& }" l: a
2345
; f. {, d6 K$ W/ V2 Q5 b" z$ h5 KparseInt('2345.5')
3 N( T8 v$ M- J/ t2345
0 c) t; ]% r8 W7 d3 k: V# j- Z% ^parseFloat('2345.5') // 转浮点型5 U: r5 o! P! g& [9 y
2345.53 g) d& r2 ^+ k2 }
parseFloat('ABC')% k7 r. L; n/ z% a
NaN5 \3 x3 ~/ y% t! W0 d6 ^/ D8 E' H) R
parseInt('abc')/ D8 Y: D8 M6 E9 _1 M, g
NaN
9 _8 E6 g: R! O; N</code></pre>
# g; d; f" j/ i* c6 J( R<h4 id="232-string类型">2.3.2 String类型</h4>. F* n+ P$ B+ {; M: c
<pre><code class="language-javascript">&gt; var name = 'Hans'' O" L8 O$ ~& z
&gt; typeof name; V/ o# n4 N- i* g5 L1 u, T
'string'( C1 w1 f8 D; M: ]& T, I6 {
- u$ A! |/ N: S. l) M; `
//常用方法
2 s2 F3 f) ?- o3 v$ p0 }$ c! `) ^: e// 变量值长度3 e* m/ Y" i+ q6 R2 s9 c- k
&gt; name.length. B% z: r8 n1 q; L8 t- @
4
- h+ K; p, Z4 u! s* o. l// trim() 移除空白3 q5 e. }2 C1 S& A' }: ]8 Z6 L; ~: \
&gt; var a = '    ABC    '
( Z( u$ j# e# y&gt; a" J7 g5 t. y0 X- r3 U' e' ~
'    ABC    ') g2 \" |# {0 H
&gt; a.trim()9 h* z& v1 S- _6 M9 Q! D" Z
'ABC'' r  m( q( z" b. E
//移除左边的空白5 U7 G$ o  z4 I5 b
&gt; a.trimLeft()& b. L5 [4 D  e5 @6 i$ X
'ABC    '6 T" {3 A$ f7 q5 ?, T1 _5 r+ _
//移除右边的空白
6 j( F6 V1 x4 D9 M6 l  f&gt; a.trimRight()" ^, c6 h4 h- e- r( D
'    ABC'
. p$ N# K- v+ ~8 N& N: e% T  i: g- l0 s( W
//返回第n个字符,从0开始
4 |4 F, `# U. @! a4 {) |&gt; name
7 c  c" Y4 K! ~+ ?'Hans'2 P( w/ F- |* }0 K2 U! t" B
&gt; name.charAt(3)
, y. f; S; o; b, a's'
! O# L& e2 _) ~) k+ z3 ~, n3 I&gt; name.charAt()1 U8 Y" V3 w. P& a
'H'6 l5 f4 `% [( `9 u, Q
&gt; name.charAt(1)* W0 Q5 |* P- L: W: P' }; Z
'a'3 u, S: A. t; ~

$ V! C, Z" _: N; `' x7 c" E// 在javascript中推荐使用加号(+)拼接. I2 Z2 P4 d9 w" Z
&gt; name
5 q" o: b9 ^7 ^) J% `'Hans'
8 S% T/ U2 n* V; o2 `$ n7 ?&gt; a
% ?, a, E$ |. j) u' q: Z'    ABC    '
" W5 t/ F# I* z: ^6 s2 C9 ^! g&gt; name + a
, ?) v$ I9 u2 O* c'Hans    ABC    '
. D5 t; P1 z) j$ ?// 使用concat拼接
3 G) }) e, x9 z: `! E& Z$ m/ d8 N&gt; name.concat(a)
9 O' u3 L; g/ e9 n+ F: d  |2 K'Hans    ABC    '5 q, Y) v( h" w' F; f' y
& {$ [) O2 d5 U6 J: e8 \$ ~
//indexOf(substring, start)子序列位置# @$ _9 u+ T# P& T9 `8 ?. p  d7 S

6 z2 T2 C  f# o' N&gt; text; P! r! `5 c/ n% o1 B
'A young idler,\nan old beggar'
' S+ l. r1 I/ j4 J4 Y* v- ~&gt; text.indexOf('young',0)$ [$ E2 Q/ L1 z  x* R
27 q$ s: q2 {3 ^! w$ b
: |$ U5 T0 Y" C% F
//.substring(from, to)        根据索引获取子序列
5 R1 u8 G* G4 V  N&gt; text.substring(0,)
5 V  e, r2 N5 N'A young idler,\nan old beggar'6 l# t$ B, g/ g3 ?
&gt; text.substring(0,10)
/ P; `  N. a% z( q2 z6 R7 P'A young id'% K- B- X7 D2 A  \4 G/ _) Z

+ {5 _, s4 Q* M& D// .slice(start, end)        切片, 从0开始顾头不顾尾
" m1 F2 L' b  O. k. j  J% j&gt; name.slice(0,3)
8 o9 r! r; a* K! a2 t'Han'4 N. N) w* }1 C7 y# f& q  O3 g

/ w) z1 x$ O3 t9 g  \# m  d// 转小写2 @$ j) Z- N* w7 v/ ?
&gt; name
/ c) o+ N- `0 b'Hans'
$ R* Z0 e7 m  g) f  U+ x&gt; name.toLowerCase()& O# Z* Y! M! c* H/ F1 o' Q) o
'hans'3 q' j! E# v8 s  P: Z6 y
// 转大写7 u* Y& |7 F' s* X* n
&gt; name.toUpperCase()3 G, M  n1 I# U5 A' k9 q5 i' B
'HANS'
$ E' F! B( U2 U, W/ {+ O6 T2 f1 C- @
// 分隔: M' @( |/ G& w* J# e( [. Z. b' P% }
&gt; name
/ R* B) E& A9 S'Hans'  a- r& A8 U3 ]$ F& b
&gt; name.split('a')8 {' i$ d4 O; @; N, p
(2)&nbsp;['H', 'ns']! z& M7 c7 _  q
</code></pre>) @5 ?( r7 g5 s2 j
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>" y6 M. W6 {* U. K/ c2 {
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>& W( U6 E2 m( A0 o/ j4 F1 v; E* G
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
2 p2 z1 B5 k5 b1 S6 p<p><strong>null和undefined</strong></p>; A6 e) X# L) K0 |" c, q
<ul>
! D5 S- u8 k7 a<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>4 R5 {3 S* c6 h+ s+ J
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
* r8 Z# _1 m) |/ [/ E5 ~9 e</ul>
" d' Q0 \: @& w- t% T<h4 id="234-array数组">2.3.4 Array数组</h4>9 b/ o& @! {! n7 d7 }+ b" d
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
/ \* z* r- D& i" M8 R<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
* F+ {6 l! V$ ]" b* N&gt; array1
# x6 t4 v. l0 g7 k3 J- Q; U2 Z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; E( B$ ?! Q3 l& d! s( `
&gt; console.log(array1[2])  //console.log打印类似python中的print2 O6 u: e0 u' n$ \
3
- A3 t: z% r" n. F' @' M// length元素个数
6 u; K1 n# C4 y* z, M&gt; array1.length; k+ E' P( s! q) h2 g
6
: [4 t( A/ m4 a* Q// 在尾部增加元素,类型append) P5 ~# @! ~4 O! w9 h
&gt; array1.push('D')9 D* D, Z# Q8 ^. D) J8 O
7! @! c8 u, y& P* u  e
&gt; array1
, O1 t; B8 E) r6 }* Z- c  |(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']' ~0 a. ~0 f5 p
// 在头部增加元素0 N+ Z$ n. U0 {0 {* I% M6 k& L5 v  O* k
&gt; array1.unshift(0)
. j2 ]/ ~9 @+ S81 ]& D* S, S/ x# A4 i' L! [
&gt; array1" e+ f: g8 h2 }* D3 R
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
3 p: f2 P1 B9 b" K0 \3 G4 R3 {* |( i6 P+ t
//取最后一个元素8 x3 @- |% {- ~$ k; n( E0 C/ a
&gt; array1.pop()0 T% f! M" Y! @$ [* Z6 E
'D'3 z. A" \0 W9 \7 n: W
&gt; array1
* g. r5 T+ G. f9 e. B" I" p, I(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']; M7 b4 r; ]# e4 C
//取头部元素
4 t% n" i! O! U* u+ z2 C$ ^&gt; array1.shift()
' n5 X% N7 K% J" f* P0
* F: C3 F0 j4 y7 t2 Z( ?  k&gt; array11 R/ }5 T1 b0 z' F( `
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
+ f: T+ l& V/ \& ]: u* M* h/ m# w$ ]  r( D2 d  V8 F7 ]" _7 u5 k
//切片, 从0开始顾头不顾尾' ^/ ^; x9 d( V! ^) W$ {3 y
&gt; array1.slice(3,6)& j3 e' n# F1 T# b- v: ~4 `( W5 U
(3)&nbsp;['a', 'b', 'c']
4 i9 g: ^( H4 w$ V3 h/ s// 反转
" R$ W3 z6 Z6 u* B5 L" R6 w3 u&gt; array1.reverse()
) F6 ~5 L" P1 a(6)&nbsp;['c', 'b', 'a', 3, 2, 1]  v( c' r1 f; W! \( I: {
// 将数组元素连接成字符串
& @2 }6 v6 ]" ^&gt; array1.join() // 什么不都写默认使用逗号分隔
, }2 q6 Q8 e" V4 m& g'c,b,a,3,2,1'8 R* S: T  t, K# |5 q
&gt; array1.join('')
1 R. ~2 x6 D+ @7 F# h4 p. B'cba321'
2 {0 R& l4 o/ R1 X2 ~&gt; array1.join('|')
4 ?  U4 y- b6 O'c|b|a|3|2|1': {% D  G4 E8 g0 L0 d

3 k+ O* l8 g' m  c// 连接数组2 |7 {2 v5 I' Y
&gt; var array2 = ['A','B','C']
5 B) l- E3 J7 z2 r" Z; }&gt; array1.concat(array2)
! r& J7 m. j0 A/ f/ i! T( d: {(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
8 g. M3 C# x& n  |" {. ?% ]# N( A4 w! q. Y
// 排序/ m1 n( ^! w# Q  O0 C5 y
&gt; array1.sort(): p0 @' @' D4 V: H; V. q. i2 X9 ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 N& W3 u* F# t9 |4 I  z0 p* y! d* l
// 删除元素,并可以向数据组中添加新元素(可选)# y; k) H3 O# h$ G% g& h! K
&gt; array1.splice(3,3)  // 删除元素4 Z% H' \( b7 s$ K/ _. ^& Y
(3)&nbsp;['a', 'b', 'c']+ n. m. \: ]* i1 b# Y" q
&gt; array1* ]$ b0 D; g# f$ o5 A& a* S5 f) J
(3)&nbsp;[1, 2, 3]! F  z2 A) J/ u4 P; m
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素2 M3 x; L2 e. S9 Y
[]2 A. ]: u; v* w/ {4 X/ ^% `
&gt; array14 c+ Y/ u: H# F+ h$ ^# g1 W
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
' j- z$ k7 p# w% T1 N. _/ e2 K
. V  d( A/ X+ W5 k/*; D9 y* y! |2 a1 W; T
splice(index,howmany,item1,.....,itemX)% x0 V: I; k. _" G0 k9 \5 b. M
index:必需,必须是数字。规定从何处添加/删除元素。
( u" W  N5 ], X2 [howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 J  o7 c* X6 @) k0 k/ k4 w2 U' |9 Ditem1, ..., itemX        可选。要添加到数组的新元素
# L; @8 K* _3 e1 ~0 l3 [*/
" A$ T# J3 L0 Y6 v% z1 \4 y, a- n/ ]* F" d5 ~& G8 a" U
// forEach()        将数组的每个元素传递给回调函数, x4 i+ k6 v! C- e- H7 U( k
&gt; array1.forEach(function test(n){console.log(n)}). Z( w$ {8 s2 U
1
1 z0 i2 P' }7 o- F8 m/ X9 g' z 2' e6 q1 X  @8 \/ s. C
3/ v$ T: h- O; ^& f7 T& W
A
7 w8 o- n% V1 ~* }; n$ g" U B) Z0 l. Q" B' D2 U1 J2 @0 j7 P
C
; @7 L) e4 }5 S# I9 p# u. \9 w// 返回一个数组元素调用函数处理后的值的新数组
3 l7 U( C6 g8 e+ z&gt; array1.map(function(value){return value +1})
! W) f0 x' c, D2 F0 C(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']) d$ f$ v: W- ~( H
</code></pre>
4 L( A, m5 H1 S; o8 u<h3 id="24-运算符">2.4 运算符</h3>
- L) J, C; U! ]<h4 id="241-数学运算符">2.4.1 数学运算符</h4># I- m" a0 s( K8 Q8 N! U* X
<p><code>+ - * / % ++ --</code></p>2 k/ k- d1 I( |# Y- Z, Y
<pre><code class="language-javascript">&gt; var a = 6
0 x0 W; l( j5 `/ K: l; ^' x& R&gt; var b = 3
1 b% D, r. S$ f% b// 加
/ |% Y( f1 f, e&gt; a + b/ y( T0 I6 F3 H" S0 A4 h
90 ]5 {% i$ H' K9 k3 U  ~% E6 K- t- k
// 减# I( T+ E2 o" ~- q( C$ b2 W; O, E
&gt; a - b
6 R' N) }2 D2 E$ h! _4 ?3
( \/ ~- n' F% p- y6 B4 r// 乘
& W+ J* {# C% m3 p' w9 r&gt; a * b
' A) e8 {$ n3 T6 i0 Y18
3 ?( ~( H2 K2 {; u. B1 r& r: H// 除
4 `# k* s4 j. z) V2 P/ z&gt; a / b' s# }1 h  S/ ], M: {0 N  c
2
* ]0 y5 C6 k, J// 取模(取余)
8 ^7 K" y4 n& l& h8 B+ L- r&gt; a % b
' r& `3 m9 e& S& }0
0 Q6 I0 g; ]4 k# P# j// 自增1(先赋值再增1)2 L7 J; b/ t$ Z2 w3 t
&gt; a++# {: M0 w3 J% v: R1 _2 z
6
4 c5 E, Z( }/ P. N( l* l- I: d&gt; a
2 l& R. M; U6 N8 ~( V7
/ C; a* S" E/ G' W// 自减1(先赋值再减1)8 w( t: Q! q" O& W/ h9 C
&gt; a--
1 C) D+ a+ A, N0 l0 L' n7! Q. Z" }- r9 b" O; Y7 @' ]8 \5 X
&gt; a
, [$ N7 ~/ l) \7 p+ x60 r) c6 D3 J# Y2 g; M5 v/ n* x8 j3 i
// 自增1(先增1再赋值)7 _7 r1 ]2 }0 i3 U% B% g5 ^% L
&gt; ++a
. `% v7 W; B# i( M! Y0 t7- X* Q- L1 X, L, }" k3 V
// 自减1(先减1再赋值)
. M6 F8 k7 V3 |; B* C&gt; --a1 w/ p. O8 D. b7 }: N! X
6
- D# B4 S' c' V3 O) g# {1 q& ]&gt; a' L! g8 E! }% y
6
' j2 q9 u5 I. ^- Z7 c( l
" ^5 x* y( z7 ?( R3 K4 r//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
" x) W$ E1 A( c( K6 R</code></pre>
: C! a8 M& N" O<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
% z* r) T. K, {. @2 g7 h4 n<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>9 a$ E& }( f5 h* l
<pre><code class="language-javascript">// 大于
) `4 w) R6 I: K+ m+ X&gt; a &gt; b
* @# Z! d; H. b8 e' |' q0 i1 Ytrue# N' a( \- U9 v/ L  k" `8 T2 a0 N
// 大于等于
% m; h- _8 E: E6 f; c&gt; a &gt;= b
! Q3 H. W+ D1 U0 m2 y: S$ Ktrue
- W: @& f# _8 u$ I: R5 t" {// 小于
5 z5 s  a8 l3 g$ ^0 r&gt; a &lt; b- D' J6 i" A# t7 t8 q" ?
false0 B. Q" s' i% w- E7 P) C
// 小于等于
: H* |- q3 w, S- p+ Z3 a! R&gt; a &lt;= b
  E' U, z4 s2 wfalse
, ?+ e9 Q3 @- {2 W, f3 w// 弱不等于
% O7 j  S& j! X* A9 R( s&gt; a != b) L- {, \2 H6 c  Z' G% b6 h/ l5 H
true  G4 F# X, v: G1 l
// 弱等于7 s# n+ V4 K$ R$ `3 c: ?8 Q
&gt; 1 == '1'
+ @# f/ ?) h5 K/ S, }' E0 ?true
3 _% O+ T" O9 e0 l) J2 ?# a" e// 强等于
5 h1 [+ r% e( k/ ?) q# S2 w&gt; 1 === '1'- Y2 k! a& b2 q$ f
false
/ u! [/ U. T) _1 r) x5 z0 P// 强不等于: x0 P8 a: e0 c
&gt; 1 !== '1'1 e7 T: |' _* w/ V  |+ l: K
true3 \3 f1 m2 M  o3 X4 P7 S

3 F% _" k& b/ w, c9 n, [5 m/** P. I; s8 T. x7 b. o$ }6 R% G
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
( V8 q2 x* \! E6 q& h* h: }( h*/
/ g4 W4 `+ b) h- h</code></pre>9 d- _  p0 Y! w. }
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>  h0 V/ b1 o" ~+ q
<p><code>&amp;&amp; || !</code></p>0 |) E2 Y: a. \. t4 x- D
<pre><code class="language-javascript">&amp;&amp; 与, e' k, W) d/ m8 g& r) t
|| or
+ O# L  s  k+ ^4 I! 非) f! X( R, P3 _  d. z4 g
</code></pre>
0 N0 {' |- S& ~; `' m4 }<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
; J4 w0 v: m( \2 \/ Z; M<p><code>= += -= *= /=</code></p>9 y6 R( f. F* j: U. @- v! \
<pre><code class="language-javascript">// 赋值
8 f% u. w* A. i5 X&gt; var x = 3: q2 ~9 J" r: @* G. \# ^
// 加等于
0 g' d( b0 v4 }( U; k- U( r" s) V&gt; x += 2( T- q- n8 r, ?3 a3 F5 Z- g- y
58 J3 y) P9 J# \+ {2 A  c6 @
// 减等于
! j% k  L6 X+ P" g7 h7 C9 L&gt; x -= 1
$ g5 i; S3 e8 @& }. m) z4
, M1 L, T- A, O// 乘等于
1 r0 x2 x' S7 |# u" q&gt; x *= 2
% f8 f! m+ A' m8
" Z2 H' d1 R% W9 L% G0 D# g// 除等于& }( R& s0 q' t* m8 i; @
&gt; x /= 2- M0 i! K) C' v6 _
4  ]" v& e7 x3 ^3 P% _. ~; ]
</code></pre>
4 Z5 j. o- s2 G- d5 c<h3 id="25-流程控制">2.5 流程控制</h3>5 n6 J9 L) s: p% i- x& |
<h4 id="251-if">2.5.1 if</h4>: m6 ?: y. O$ J  o* M
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
+ {0 y3 V+ T& Z, i( S
2 n) w  |" N# D& H& c$ F* B: M&gt; var x = 34 `9 x  A' q  r
&gt; if (x &gt; 2){console.log("OK")}3 x5 Q0 P/ c5 y8 q! d
OK2 p8 i% k/ ?* c

/ _* @5 [) A6 d# j! T4 M2, if(条件){条件成立执行代码}
" H' G( _/ p0 d* o# I( y- G, m        else{条件不成立执行代码}
, f3 ^, Z) Z  [! C; b& a
# C. e, v7 a! E5 Z+ A; Q! L&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
+ S; x" Q8 F3 W2 m'NO'
4 p0 X, }' ?4 D) v5 n
- Y/ p' ?5 w, y$ F; o7 S' V% l3, if(条件1){条件1成立执行代码}
2 `5 [2 l1 s8 G5 J: m        else if(条件2){条件2成立执行代码}4 k+ Q% |2 \: i3 {6 T# }
    else{上面条件都不成立执行代码}
- A( Q; [8 g( v( r$ u; u# x9 b9 e' W, s4 q6 h$ o9 f4 y
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
5 N' C; E; e3 Z3 T& c# O5 |' g Ha: g. Q7 l# L6 W" e; V
</code></pre>
% w8 p6 H* z+ H& C% a2 P<h4 id="252-switch">2.5.2 switch</h4>% T! u! S- _6 f& ~
<pre><code class="language-javascript">var day = new Date().getDay();* @8 v' Y' y/ o7 J
switch (day) {, M" H* ^( @( G* }5 d
  case 0:
. }  r& D- O: f! k3 l  console.log("Sunday");
3 t1 b$ j  h$ [$ a; `9 H  break;( D/ N% K0 o$ @1 _
  case 1:
/ ~- f# d5 }# _; L' l: p5 y  console.log("Monday");
/ V) `+ C- c6 F, O: }  break;* t6 U; p7 z1 i
default:$ R+ H; K. b! D- \9 r
  console.log("不在范围")
3 }: }0 t: p) D0 f}/ L3 `5 }- b3 n# w& _; @
不在范围8 ^1 |( Q* @9 g& C2 r1 _
</code></pre>
7 P+ l3 @6 P! o8 V% w% s<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>* x0 k" J# f9 R/ _1 X; Z, l8 {
<h4 id="253-for">2.5.3 for</h4>: c8 ^) T5 M9 N* d1 @+ S
<pre><code class="language-python">// for 循环0 O  }# i: N/ b( {! u9 S5 e9 m
        for(起始值;循环条件;每次循环后执行的操作){
( j. a( p) Y8 B5 D# D6 y% p        for循环体代码
9 J" D( w, s8 r$ |% N    }
) |( P3 e3 a. T
- p7 z, `2 S. p! I# N( b% z5 m  T. gfor (var i = 0; i&lt;10; i++){
' b( W9 `  N- C  z, `- l  r    console.log(i)
; Y; l/ h4 k! F. `}
' ?9 w' F1 |0 |8 |4 C& R        00 \7 ?* o0 |  e5 a2 j
        1/ U: d" U' L, C) }! m3 C, v
        21 y$ x3 ?9 k! s+ D3 F, L5 Q6 ^7 K8 T
        3) X* C, @% d* q& p1 e. f$ L
        4" m$ _% T4 ^' ]& u9 B6 P7 p
        5
. w$ S4 }- K* B- s0 P8 p% J        69 _* D$ {' d5 z5 x" a) {, q
        7+ i/ S- H) ^0 l& @) H7 T
        8; h; P) h' \! p8 r1 r; S3 v
        9# m) Q  c6 v2 \6 O
</code></pre>0 W% s2 x. v# H8 }  N2 B
<h4 id="254-while">2.5.4 while</h4>' [1 T$ v$ C7 N6 l
<pre><code class="language-javascript">// while 循环/ F9 d* t4 y& P) t! O' }2 Q
        while(循环条件){+ [/ U1 ]! q, J) U; t
        循环体代码* G  x) p" N6 v
    }
% S( J" a% V9 [6 Z. f* t3 m4 M& a8 ?6 `. n3 i9 n
&gt; var i = 0: L* z7 n' D' U2 L6 h8 @" v
&gt; while(i&lt;10){: h. J/ Y& F. m3 b$ X2 z9 z
    console.log(i)4 ~0 H! T% X: f/ Z! I7 p4 F9 d
    i++
9 d, t; v2 X6 D7 w5 a}
; n* e6 X, e2 u5 i& M. @4 z 0* R+ ]3 r. }+ e8 d2 g2 Z  n. R  T2 R0 l
1
. n- s5 w9 u1 ^3 p. M7 g( v- u 2- z" E3 V6 l+ p( G* Q
3
: h) q9 x1 }9 y6 N 4. U* t( E# ~$ g% q# k7 L  S
5
+ I3 h8 c  y1 S  k9 D. B 6
3 J2 ?, k  B) R& Y- ~ 70 Y" U, T! h+ u$ J* K5 l
8/ q  t; d. @0 ]2 F6 ^. s
97 O# d5 v" r1 P! T
</code></pre>
  t) i5 U+ P; X. A! ?! k' @* m<h4 id="255-break和continue">2.5.5 break和continue</h4>
8 ]. i" B% r( |! a) {1 r3 Q2 ~<pre><code class="language-javascript">// break! |8 j7 x9 J6 B& i
for (var i = 0; i&lt;10; i++){
1 a: o0 s! l) v5 y- P! L    if (i == 5){break}# C1 L+ m8 P+ \% b
    console.log(i)2 D% ^: l% l- r% S5 @
}5 U9 O$ p6 ^# O$ i" F6 E
0
8 ]: g' q9 E5 s  V5 w; V9 |. U 1
4 |% m! Z* }2 L2 D 2
& u8 [8 l2 n+ w8 c, x% a) s/ O 34 D) S  z/ j& k! l  e
4
4 }4 d0 h3 c# N, J( N% s// continue
$ E6 h0 p7 h1 r+ ^( ^$ y3 mfor (var i = 0; i&lt;10; i++){
" T, V% e% i$ m4 W- o) R7 Y  }    if (i == 5){continue}% c8 n; ^3 I; o# I0 I& t
    console.log(i)
: K7 m. D- M! Y, a. n' T}: X4 X0 |7 D. Q3 }; B: l  Y
0
+ q6 C- z6 y7 k* A" Q) s& \ 1
  ~( G- C+ R0 d 2+ Y0 Y( E* q0 ]- T5 G
3
3 J& J% L) N. e( ?2 t. w* ~; D+ x$ _0 _, T 4* i" t; _( h) ?# I9 ~' l4 [
6
3 m8 u# |, j$ ~' R' W' b5 W0 f( B 7
5 g' f) K/ X& L. y9 V2 v+ O5 h 8
* ], R, ]9 k# G8 B! _3 B 9
% F$ C4 m' \3 ~: C4 x1 R
/ U5 b7 x9 ?8 a/ G</code></pre>3 h' m2 o( h% b( a! }
<h3 id="26-三元运算">2.6 三元运算</h3>
) b1 e% L* ?9 F7 Y( x6 `/ @6 g<pre><code class="language-javascript">&gt; a
8 X  F  w2 U9 r* S+ y3 M6
) l% C4 D- Y+ K: D- n# f&gt; b
& z2 H- [5 Y3 ^) A- j2 j39 A' o9 X8 B' Q: @9 s
) _+ r( D/ n, L7 |# i2 [2 H" m+ h
//条件成立c为a的值,不成立c为b的值3 I: p( ^7 V9 [9 [1 I
&gt; var c = a &gt; b ? a : b
% v0 ]. p8 y) }9 z) ^&gt; c
1 m7 ~! {2 ]! [' b2 y  X: |9 {& |5 s6% a6 H6 Q$ m/ C. @
( I3 ^/ I7 c/ X
// 三元运算可以嵌套
* \* M" S$ h) A+ }" P</code></pre>
# R  C$ q: r' n0 Z2 }0 I6 A<h3 id="27-函数">2.7 函数</h3>
  ?$ f2 _, |6 f' ?& n<pre><code class="language-javascript">1. 普通函数
3 i  O  f7 T+ B! [4 E6 r+ b7 i5 l- @&gt; function foo1(){
# ~: c- B* L) _5 J4 Z    console.log("Hi")
2 C  E, B1 \8 J4 b5 m6 d8 `$ [; S}
3 d! D! L" T0 V9 }0 C; P/ U& i8 r3 J1 j: {7 q
&gt; foo1(), W  C: `- N" |6 ^* k
        Hi
8 n: g  w; e8 E4 ]2 O6 ?2. 带参数函数5 R1 u6 L5 g& r5 p  @. D# f
&gt; function foo1(name){
9 Z( y9 a7 Y7 g4 r6 W$ k( c/ {console.log("Hi",name)
: M7 d$ J; D2 G7 S: q' W}
  B" [  a) q; d4 i- C7 |  v7 ^- s& \
&gt; foo1("Hans")
3 @: J2 T; {" {2 a' M4 x* c' z- pHi Hans3 I. m- d; A$ V; A" B5 k
; I# [0 u8 K( N- A7 A. J1 l" }
&gt; var name = "Hello"
. {1 }9 p4 \" u2 Y&gt; foo1(name)+ Z  f: b& }/ d0 T
Hi Hello' E+ x" y( W0 y' l- ~
0 O3 b4 L, X* |/ O$ ?
3. 带返回值函数7 z  g) f$ H" r# s! \2 M( U
&gt; function foo1(a,b){/ v8 B' v4 W3 z+ [+ P. |
        return a + b   - W" G  n5 V6 p% z
}, F' M/ v$ [5 b" h- M
&gt; foo1(1,2)
  t6 ?: K1 ~; Z& @" U9 i8 F3
: A+ o% I4 c! c+ Q! y& K&gt; var a = foo1(10,20)  //接受函数返回值9 X. [$ t. t; O; F: p, K
&gt; a
0 @& e6 M, E; B0 t' J30/ P/ ^! T% V3 f8 G  }

6 r( q! C* Z  G! t) ]0 A2 [4. 匿名函数; _& j! g# f* G& k1 d
&gt; var sum = function(a, b){
1 C) Z! W% m' E- z$ U( W  return a + b;
  s( L3 d8 {) V3 A2 |9 W$ H7 u}
  y: p! v8 W" t* S% R' e&gt; sum(1,2)
6 [/ V" H, }4 V32 K: A; f5 w* N  D: U* o+ W: _

9 v3 Z' x$ ^% E) w* l; z' N// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
$ P! N+ \' q& k$ U. L&gt; (function(a, b){; \$ Q8 O  h' m. o
  return a + b
% M0 J" j9 I2 H+ ~})(10, 20)
9 w/ ~  n3 o  F; R8 \/ U7 e30/ W; m1 w$ t1 Z3 i( I/ q5 g
. s- ~! H6 a/ e; c3 P
5. 闭包函数
' u$ {0 {* N# m$ y5 l6 r  f9 z  u// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数) T3 Z; ?  s- m& |$ ~7 A$ @
var city = "BJ"
. n! l3 }; \! a, gfunction f(){
3 l" j6 b0 H; w, {# x    var city = "SH"
  |2 q1 V) k! X% }0 h+ {    function inner(){
: w; H+ x. a- m& r        console.log(city)) L$ u; Z) ?! [3 `' {, ^6 x
    }
* y( r: b3 z: b* a, G2 O8 l    return inner0 g8 b$ L1 ~5 X5 U" V% @
}# \+ B) ~/ P  c, \: ^9 ?
var ret = f()
- ~" i2 q4 b, ]; F0 Y3 Kret()- K4 W; e# R4 b: `- O1 m: f' a
执行结果:3 i- \8 O$ T4 n) O
SH
2 M5 j0 p& @! c, n0 q  o' |7 ]+ u6 q
</code></pre>  L1 r' K3 E; [5 L
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
# i+ Q: H9 h% V<pre><code class="language-javascript">var f = v =&gt; v;; m# w8 }$ B4 B( l$ f
// 等同于2 a1 C( u7 i- N$ s
var f = function(v){
" G/ j$ g. A4 r7 d( o& Y* a' B  return v;
+ S9 _8 x* M3 o) g0 n}
! H8 `+ T! ]: v2 L</code></pre>
' u- r# c  |' x<p><code>arguments</code>参数 可以获取传入的所有数据</p>% r, {# ]$ x1 d) ~$ L
<pre><code class="language-javascript">function foo1(a,b){
' M+ N4 X  J9 \    console.log(arguments.length)  //参数的个数 + m4 S1 H  k) |- v5 ^: }
    console.log(arguments[0]) // 第一个参数的值
: q8 Q# x/ |% a$ D! m1 [) n* M& ]- N( P        return a + b   
  L: ?/ _+ f' X) @}1 B6 m$ }% }# I1 Y! H; v5 ~2 n
foo1(10,20)) O8 i' \4 ~4 H' p% y8 S
结果:
2 W- E  q" G  l9 l) T 2          //参数的个数
9 e1 O  G3 x. U5 Q9 R; C" X10        // 第一个参数的值
3 k! B/ j( W, E% F- ^; F% A) J30        // 返回相加的结果) z4 b/ z& E/ T2 O; ^
</code></pre>. z* v$ s) B6 [$ U
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>1 N+ L+ q0 E, e& {
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
& L: e( L# @; v/ J+ T<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
* k9 G% M, |& s& _7 I' r: w: U$ c<h4 id="281-date对象">2.8.1 Date对象</h4>
# }/ a) d3 B8 t% x) Q  ~<pre><code class="language-javascript">&gt; var data_test = new Date()
# h6 c/ k3 S% I& |1 T9 h&gt; data_test6 d, Y% s) p1 p2 m9 N1 t! M
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
( y- r8 V1 Y6 h6 p&gt; data_test.toLocaleString()
' y+ Z& `- |0 f! H! o3 y* C  X'2022/2/11 下午9:44:43'! a5 @2 }2 A7 B; d

) }' V( x/ |$ S5 G9 `3 F  X&gt; data_test.toLocaleDateString()
8 f2 q$ m4 S0 |'2022/2/11'! I" G7 T/ B8 v) T
( @* t+ o# P% g- X9 {' d
&gt; var data_test2  = new Date("2022/2/11 9:44:43")6 M6 W9 w1 c% D3 L
&gt; data_test2.toLocaleString(): b: a5 a# W3 o( N6 D7 c
'2022/2/11 上午9:44:43'
* K9 g) V6 s4 s3 k/ x. Q. W, p& h; _0 T4 n- u- n- Q5 _4 n
// 获取当前几号: x7 E: k8 |, h) V1 h; T
&gt; data_test.getDate()
0 [$ |3 x5 k+ P0 m* M  y- j11
$ N7 L! u( z+ I. a2 x5 u4 K// 获取星期几,数字表示
* _' U% w+ o# {, e&gt; data_test.getDay()  $ L$ F5 v; w, G( K% {
5: M. A4 U3 T& _$ y9 |9 y& t
// 获取月份(0-11)
- H, `! T- a9 h% z- _' a9 z, c! y&gt; data_test.getMonth()6 G) n! t7 ~' b6 j, B7 ?# B
1
/ r: J& ~  p3 {. Z6 D// 获取完整年份$ G  d' @9 \# D# Z+ ~& v
&gt; data_test.getFullYear()* O, Q2 y& [" E, P
2022
! Q- |, j2 P1 K+ h// 获取时
8 u; Q' W1 B6 N* W4 M. _&gt; data_test.getHours()5 v% N; @# z" C- _
21$ }( Y+ S1 u8 s) X% v
// 获取分
+ \$ ^8 p' @5 |. p. N& ?, J6 u' E&gt; data_test.getMinutes(); q# D& W# a# M3 p
44
! T- }" J0 Y5 L! a' `5 J- X// 获取秒4 G! v* \0 F9 h& G
&gt; data_test.getSeconds()6 ]0 J  a0 }* r7 D4 |" V/ C2 p
431 W9 D# Q8 D1 \" m" K2 S
// 获取毫秒) Q4 W4 x) I5 m6 H* B$ _' L% }
&gt; data_test.getMilliseconds(). T8 Y: I# m" w$ h) I7 u
290) a9 d( w! ?, a; Z
// 获取时间戳- J. X6 x5 u1 |: T
&gt; data_test.getTime()
. Z+ K, r3 a  V# W# w. P1 g1644587083290, j/ f/ w5 _  ~. J7 Q4 P
</code></pre>
- N% q# C3 _: p( W<h4 id="282-json对象">2.8.2 Json对象</h4>: ~2 S& Y0 V  W
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串3 h2 S  d6 x: Z: b" k3 L6 T
JSON.parse()  // 反序列化,把JSON字符串转换成对象6 B# J0 E+ ~5 |, r5 f$ B- n
; ^8 u/ t/ v( f0 j. O2 P, A! |: @
// 序列化
# n3 |) y  v* U$ }&gt; var jstojson = JSON.stringify(person) * c* e1 t" A, X
&gt; jstojson  % R- p1 g7 J1 |/ ~
'{"Name":"Hans","Age":18}'
/ C& a2 R8 {# w' \1 t: f. z7 {5 y! b7 j( X
// 反序列化% G1 L  N- ?2 r, }6 ?% ^
&gt; var x = JSON.parse(jstojson)& T7 y( Y: Z: K! ]
&gt; x
! h# q0 J8 n" }* D* F# V) K5 G" J{Name: 'Hans', Age: 18}! L3 S% m( y" X/ @! m; q2 ]
&gt; x.Age, j) Z6 H7 w5 q% l& \% q: @
18
) d9 w" K9 `( P</code></pre>
9 R* V2 g8 R) C<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
2 F* A1 K. @* x$ d<p>正则</p>; E" S( {" H4 |# x& X8 l$ N* F, l  \
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");' k& D) L" k5 `) H  U
&gt; reg1
/ N$ T# T4 Z8 \4 J/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& S; \/ q9 h4 w( ?&gt; reg1.test("Hans666")( T0 l3 S7 o/ d* f' F
true. C7 X. y# C* m# h7 g: o
  a; Z3 l0 ^& X* c8 Q9 H8 R) \
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/  L5 ]. \# o2 X
&gt; reg2
0 o7 S  f! I7 r" x: ~4 q3 t3 u/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ P$ {( x5 N7 J; Q! ~9 Z&gt; reg2.test('Hasdfa')
! S$ ?! c$ x/ v' i7 i& y+ W: [true
; X  d3 _* L! z2 h; A
, X0 m& v1 g/ f" Z全局匹配:
! ]6 ?8 {, i3 r/ ~; q$ g3 c&gt; name) H3 x3 y5 }7 D4 i+ l* K# j$ \$ \3 F
'Hello'
6 O2 T# K9 n# H5 d5 Q3 b" t&gt; name.match(/l/)* E0 J4 D3 q( p& \$ i( ^
['l', index: 2, input: 'Hello', groups: undefined]4 O( J1 D# v/ {/ e
; f/ U$ K2 @, T2 J1 G! |! _
&gt; name.match(/l/g)
* n+ ~: P% W: t2 Z(2)&nbsp;['l', 'l']8 U' E* i; T- ~" M
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配# C) A$ `5 c8 T3 A3 `

% D6 r4 `& e& {7 e* U全局匹配注意事项:8 j' S5 Q9 ?8 a4 a7 ]
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
; }/ F6 |, t4 D( j5 q! y: ~&gt; reg2.test('Hasdfa')7 M% |6 `. P4 W& F
true
2 }5 q& B5 E: m/ M&gt;reg2.lastIndex;
4 _5 h' E. I/ |: S% @5 H% J6
; {: A! W$ g7 _% V3 F+ y&gt; reg2.test('Hasdfa')4 w' `4 y. e# b2 G0 ^7 ?7 A
false, w! A$ [$ [) J! p
&gt; reg2.lastIndex;& f0 P7 e0 }  |) P+ y2 s, @  M
0& ?9 x" R& D% }+ q* i. w$ @
&gt; reg2.test('Hasdfa')
& m! V  C2 t. P, ctrue
' z1 `8 [/ L: o/ ]+ F6 k&gt; reg2.lastIndex;' w0 I" Y- v0 Q# Y
6
& X" D5 T  l: m0 B+ x5 x. h&gt; reg2.test('Hasdfa')
" f" {7 I- S; c; n# Y; [false/ v% @0 C& q8 B( U: o# i
&gt; reg2.lastIndex;/ U/ c# {6 P; t% `2 B# N  k
0
4 ?' e, M1 h: W" N: M// 全局匹配会有一个lastindex属性+ n- S1 [- Y+ ]; E" R: _
&gt; reg2.test()9 Y* o* p, T0 E! s; {" ^( P
false
# y, \& [# h$ B1 w# h" O1 i&gt; reg2.test()
8 ]0 x' Z/ M7 A7 w' i' m/ u! x, U- wtrue
3 N- o6 Q9 d9 W. K// 校验时不传参数默认传的是undefined/ O8 m( }4 O- G( p5 }9 j! g
</code></pre>/ u! U. K9 h7 J( p  M
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
' h$ l/ B/ K! J+ L" Y9 d<p>就相当于是<code>python</code>中的字典</p>2 w" u1 @7 g5 _/ g5 B
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
* s9 k4 G' B7 l2 D  u9 ^" ]9 V&gt; person
: g( f2 R5 F& z$ V+ u{Name: 'Hans', Age: 18}
) K  l5 u# Q8 Q1 S- h" Y; g0 }: s&gt; person.Name5 r2 V8 t& e/ b; Q/ E0 ^( N
'Hans'0 J- {  I/ n3 _3 n0 `9 F
&gt; person["Name"]
6 M6 @4 i0 [6 }'Hans'
7 `! c/ o9 d+ o, F% E4 T" G  y$ j, F) h; y# D! M. e0 w) M4 @* Q
// 也可以使用new Object创建* h: w2 E2 t5 [& w2 P1 n
&gt; var person2 = new Object()
7 z8 G1 t2 q- ~! h&gt; person2.name = "Hello". G% B' a1 `& y
'Hello'
8 j4 Z0 h- W* S' E, T! }( [&gt; person2.age = 20( E3 k3 X+ J/ B/ g  u; P3 Q  H* B
20
) ]$ a7 n+ C7 k1 f</code></pre>. }7 z9 x5 f+ d  ^  ?9 N+ U4 b) {
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>6 r9 j+ Y/ b% V! H% x  M9 W
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>7 h3 M  \$ K. q& H4 A$ P, z2 P
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>7 {5 W, J: I, D1 ^2 E5 k' J9 l- z
<h3 id="31-window-对象">3.1 window 对象</h3>2 L: X2 ~/ h6 \  N/ b& e, [
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>1 W% B0 ]& p+ h) M6 A) Y: e$ D
<pre><code class="language-python">//览器窗口的内部高度) x  h1 J" }" U- \; \# C, O- ?
window.innerHeight # U3 z& o7 S2 v9 w
706
' j8 v  h/ h/ d" w, u7 M; b2 \; @//浏览器窗口的内部宽度# `# j$ n7 ^' D# f
window.innerWidth
- x8 n9 _: a& Q8 _1522
1 h3 S$ j  v3 h5 K, ]/ u// 打开新窗口
" r4 h& e9 P! M$ S$ Wwindow.open('https://www.baidu.com')
8 _. G9 X  k% @8 `Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
: x1 X7 c5 |: R$ N) O* s* U; P5 ?// 关闭当前窗口
. E" v. T' J. l9 H$ Nwindow.close()
1 ?, j: c0 g, z( J3 ]# S. H9 Q& A//  后退一页- N7 a7 ]6 l7 u3 T
window.history.back()
+ H7 [' ~: u, p/ O$ P" @// 前进一页$ I# e- I4 Q, R3 Y: Z( o' R1 Y
window.history.forward()   I1 e9 `/ X2 p8 Q% E- U+ K# t! a
//Web浏览器全称
0 S! r- ^& N- d8 `; l* Fwindow.navigator.appName5 S- v+ b: D5 r* y+ }( }
'Netscape'% {- d8 L# F5 d/ _
// Web浏览器厂商和版本的详细字符串
) z2 |9 y; _4 m. R9 v( Hwindow.navigator.appVersion
3 x' X! n3 E3 p  ]- j" F/ b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( g5 S/ v- Y' U3 j
// 客户端绝大部分信息1 g8 k& A/ E4 ]9 X1 C
window.navigator.userAgent) A2 Z- E* b" A3 y
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ G* g5 c' o8 R1 ^; ?) p
// 浏览器运行所在的操作系统# i7 I8 A$ ?2 u7 c4 p7 P. U
window.navigator.platform! X+ D# K5 s1 K2 |4 r
'Win32'% e  R- V, b, {' r2 ]5 h

7 D9 v" `; X0 N! A+ E0 C//  获取URL
2 D. d5 X5 Y  I' [# r% A) Ewindow.location.href
3 F0 X+ M& f! x9 D7 \// 跳转到指定页面) O: |1 ^, h6 o
window.location.href='https://www.baidu.com'
* t' r- O. w- ^. l6 p$ e// 重新加载页面
8 s" b" S8 \3 Z. p6 v6 G& D& iwindow.location.reload() 4 X1 [; i5 ?4 X
</code></pre>
. d; M, Y  `% h" R2 l: L5 M<h3 id="32-弹出框">3.2 弹出框</h3>- H/ S* K9 D$ f' {
<p>三种消息框:警告框、确认框、提示框。</p>
! M  t( _4 s% n; e( b* m( a8 S<h4 id="321-警告框">3.2.1 警告框</h4>
% u) |( }4 Y% l7 e<pre><code class="language-javascript">alert("Hello")! P" ^( t( W- V2 _' L
</code></pre>
* U& N8 N8 {  H6 j' l3 ]1 p; s0 D<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>, l" x* r( n) Q) s8 f3 M
<h4 id="322-确认框">3.2.2 确认框</h4>5 h" F2 E( E" ^0 d7 x! ^/ ]
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
3 ]2 o1 Z7 L& K% Q- y6 ]+ C<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true( A) Y" v4 ^( A
true8 C5 ~" _0 R; [6 Z* L
&gt; confirm("你确定吗?")  // 点取消返回false# B, G- a, Q8 f% Z+ i  j
false) z3 ^2 {) ]2 T  V# E# `# ]
</code></pre>
8 u3 X/ A- q2 k( M<h4 id="323-提示框">3.2.3 提示框</h4>
6 `7 Z4 ^( p" m7 Q9 E<p><code>prompt("请输入","提示")</code></p>+ z8 S5 l3 R1 s4 U- [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
! I) e# D! p% [  s<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
& g- B. N9 ~3 w2 Y4 T; D$ ?<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
" f& t* f. W2 s) F<h3 id="33-计时相关">3.3 计时相关</h3>& n0 T: ]! B+ I
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
( N6 N* z; n! u, h+ Y' z; L9 a<pre><code class="language-javascript">// 等于3秒钟弹窗
1 z% B) L; q8 v* K; I# ^) osetTimeout(function(){alert("Hello")}, 3000)2 D, J$ {* l! T1 g) L* N

% r5 H8 M$ @5 q( Avar t = setTimeout(function(){alert("Hello")}, 3000)
! E5 @/ u2 J1 \3 x  N" G& J  c; l* r8 T+ _" S" R/ A/ D
// 取消setTimeout设置
& o! a- j$ X; ?: ]$ a; P$ ^* lclearTimeout(t)
" U5 C4 [8 L8 X% {</code></pre>
; ]8 ^: D+ S4 G! L  I9 Z$ w* Q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>+ a9 V2 F: D) R1 z- G7 G
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>3 \& \) @  ]  l" P1 m( b5 p
<pre><code class="language-javascript">每三秒弹出 "hello" :
) J: E* @# B' k0 H0 p: f) wsetInterval(function(){alert("Hello")},3000);- L: H# j" v) U1 J  i' ^& ^2 G! j
</code></pre>
7 m" r3 A. O4 q% e<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>( D! m2 v/ e8 s
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
  Y" C4 y' G0 u//取消:
3 Z- k9 B7 M, B$ X+ r* T  sclearInterval(t)
% ~- M" y! n# V2 d</code></pre>" G4 \- z/ V6 f  D

* Y1 {, [4 u8 l  l+ c7 p
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-5-1 16:58 , Processed in 0.070284 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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