飞雪团队

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

前端之JavaScript

[复制链接]

7726

主题

7814

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

. ~1 J6 B! Q; G9 U5 W0 w6 l. Z<h1 id="前端之javascript">前端之JavaScript</h1>) g7 s7 _' {. i
<p></p><p></p>
# X4 L" M& q. B4 i<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>) d/ J2 b+ e4 }7 W' T
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>5 z6 G& k* \8 f+ F! A
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
) ~: k  w) a. L: C3 j它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
) }) y( P9 B, j7 p# ?& a! i* n; V它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
) ^# |3 ^. q% O' {<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
3 Z3 O1 O. ]5 e% u( H  `<h3 id="21-注释">2.1 注释</h3>
2 |. c7 Z4 w: V: c) ^5 a- B<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>* s3 t* c" }, X" V! W
<pre><code class="language-javascript">// 这是单行注释4 C# p; b* X) ]* j: h2 E, T9 s* K

- s" n9 U) R7 [) q# x/*
. V3 _2 a  A+ L& |( N这是多行注释的第一行,# \& @3 Q6 B6 B1 D8 _
这是第二行。0 c. [! W' N$ S: s" M
*/: D3 B- k  M8 u3 X0 O4 K) ~
</code></pre>
( [6 G' h* Q5 w  r5 c<h3 id="22-变量和常量">2.2 变量和常量</h3>. i, n0 Q3 \/ U% O
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>! h$ R% \( X$ v: M
<ul>
# a1 ~5 M5 W0 O  C7 j, n<li>变量必须以字母开头</li>
1 d) y0 S8 ]0 e" j7 ?3 n! b; N<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ U* H/ O) v3 a- A2 H; J& E
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
- Q/ K, U  i7 }; M# Y" g</ul># Y5 Y' G! T% j$ S4 T$ L
<p><code>var</code>定义的都为全局变量</p>
& x$ |2 F: n8 i: ]% `) A3 ^<p><code>let</code>可以声明局部变量</p>
( F6 W$ c$ o, U) ]7 d* s<p><strong>声明变量:</strong></p>
7 j5 l6 v& ]- d. R: S4 i0 V$ k<pre><code class="language-javascript">// 定义单个变量" d" W" C# ^  e+ F
&gt; var name' D8 k% o! I6 u$ l7 G2 y- w! |) z& N1 L
&gt; name = 'Hans'& I3 M$ M/ x; j; ~2 T) n
//定义并赋值: i; _; X! I/ g
&gt; var name = 'Hans'& V+ Y9 e1 L( k0 f' O
&gt; name
9 l9 h$ l# p9 Z% k8 n  m'Hans'/ V8 G( M' m* p* k! s* F

; b0 k3 x: [8 g$ _% }  O9 B( c" t// 定义多个变量9 p( L1 R- ]9 V7 n# f, ?# U) @
&gt; var name = "Hans", age = 18
) |6 E  A3 E+ N' l2 m4 z&gt; name
6 @6 K4 J9 ?5 j2 A, n  a'Hans'
# g* k# j+ \; b/ ~&gt; age2 L5 _* q: I$ F. R: Y2 O4 O
18
' X$ h& A+ H* i+ K5 V& E; U7 r, h% z
//多行使用反引号`` 类型python中的三引号+ \3 k' l9 Y" D8 J/ u4 s* }; M, q
&gt; var text = `A young idler,
5 e* o9 E' s" V5 b0 p9 f) X1 v9 j2 [an old beggar`, ?4 D6 E* v) e$ X/ b
&gt; text1 S# m. U. H9 M. T
'A young idler,\nan old beggar'1 p1 r* y4 ~5 ]) F$ F( H) A
</code></pre>$ R2 Q( M: Z7 N8 ?& Q% t9 f# P
<p><strong>声明常量:</strong></p>
& o( J- f$ ?+ j<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>* d& K) B! p9 E1 F/ P
<pre><code class="language-javascript">&gt; const pi = 3.14/ m) j  }7 }% Y: V) X$ W
&gt; pi- M: h$ m7 i8 a: t2 V' C+ w
3.14
/ [7 o* _6 K! L+ h&gt;  pi = 3.01
/ f& ?  A9 d  J4 C" bUncaught TypeError: Assignment to constant variable.
! d  S3 A# `: B; d5 O) i/ v8 x9 S    at &lt;anonymous&gt;:1:4
2 u$ J. }! @# h' S: k% ~. K- x" F& j$ N% o1 m. g! m; o
</code></pre>! H9 P( M8 L2 e1 p3 i
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
& C' m* i( D, z  H  d" n9 d<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
% v$ P: t9 U# [<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
4 W% m  \% D4 ~$ z<h4 id="231-number类型">2.3.1 Number类型</h4>
; p0 X! O4 W; g( k* Q) q3 z+ Z<pre><code class="language-javascript">&gt; var a = 5
1 n$ i4 l7 ^( \0 ?) @7 x8 I+ K3 K&gt; typeof a   //查看变量的类型  
  J; D+ t- x6 @/ ]number
0 f8 t1 H9 l3 u. C. f) I  F/ ^
2 l* W0 y2 B1 c&gt; var b = 1.3- p& b0 R! w# ^- M2 d
&gt; typeof b. h7 n- n8 W9 l+ {3 c5 Z7 Q
number
: @& g' q% J, P1 y. B5 D6 i
4 e& i1 c" n9 Z0 o) r9 n// 不管整型还是浮点型打开出来的结果都是number类型' A+ R1 C! s0 h9 |7 {

, ?* T2 ~  u- L: l/ j/*
1 P: M2 l" {/ Y" iNaN:Not A Number
8 w1 D7 m( o) o5 L' q7 mNaN属于数值类型 表示的意思是 不是一个数字' m' g/ P5 Y# G4 O; c' J! f
*/* N. z( x( N$ C0 e8 c! U7 u

  z0 v4 ]( W/ W( M5 e* ~, G0 RparseInt('2345')  // 转整型+ t& B9 m, {- |7 h8 E3 T3 r' `
2345
/ W. @2 f$ `. dparseInt('2345.5'). K$ c: U! p+ F5 X
2345& `  p& i8 ~9 K5 d& i7 B! D
parseFloat('2345.5') // 转浮点型$ C7 `; Y! l' x8 A7 L  k7 P% K1 k' Z2 n
2345.5
/ L: L2 k  r8 [& ?) b( JparseFloat('ABC')' R6 m9 l. S' B' h( C& m8 ]
NaN
6 E% e- R' m; ^$ p; u- SparseInt('abc')
1 M' X5 J0 D3 l* ~  O3 sNaN% A" \+ B$ k& S' C/ c, u
</code></pre>; j6 ?9 A( b5 R  e- F' w
<h4 id="232-string类型">2.3.2 String类型</h4>+ @& {& Y/ Z/ m& l
<pre><code class="language-javascript">&gt; var name = 'Hans'
, R. T3 K7 H$ O- \7 O. i& Y) {" _&gt; typeof name
% ^7 B5 d& E4 }* I& w+ s# Y( d* T'string'
" |4 I2 r( I; ?+ V* n( a9 @( _
//常用方法: P; u% J! r( @7 }% p
// 变量值长度
5 B0 V4 _2 Z& x% w&gt; name.length$ A1 `( t5 |( D+ n, o. L
4
8 J3 j1 ~$ Q+ w' X! z$ Q// trim() 移除空白
2 u: h* C6 x1 @7 a; Q&gt; var a = '    ABC    ', m/ ~: I  H$ A: S, B' p" P" s. C% l
&gt; a
1 h" ]  B$ ~& X/ _5 U'    ABC    '1 e5 V$ _4 ~2 F
&gt; a.trim()1 y- @. {" N7 {. F% s
'ABC'$ [( D8 O0 @3 N9 K
//移除左边的空白
& c3 N  s8 \, q, J  t3 M&gt; a.trimLeft(); N/ _% c/ A2 @/ w
'ABC    '
/ g  R4 ]6 `4 q' \6 V2 R* s( V5 g: V//移除右边的空白) P# N' C4 f6 w9 |1 w
&gt; a.trimRight()) R1 k* Y5 B# ]6 z
'    ABC'
1 ^, O) c% D. S3 X; l' g' l7 m1 v# y3 i2 r* r2 K7 _9 E( R
//返回第n个字符,从0开始5 u" ]- L" e/ f& X7 T3 N
&gt; name  {% M" X2 _7 H  |$ N
'Hans'
. W3 j0 J0 G4 U7 }&gt; name.charAt(3)
$ h( z$ P! k" o" w2 G+ q+ `2 D' j's'5 Q9 }+ _# [) S- t6 p0 r
&gt; name.charAt()6 [9 T2 b! o) E( X
'H'
# ^7 w% N& H9 X2 X1 U&gt; name.charAt(1): D- }7 P3 d' ]9 F: q
'a'
" S) U# J+ c/ I( p" H6 K5 W
) W& g  u  w" G$ ?; s) l% ~// 在javascript中推荐使用加号(+)拼接/ I$ c- a- \' @. K# s; A- N5 H
&gt; name* J' P) H8 E; `; i3 k/ T( l
'Hans'- W0 t( T& t4 y7 V5 _1 N/ K+ M  [
&gt; a
, }. C( B2 x8 e6 e' ]'    ABC    '
, G# l+ S* O6 y* W&gt; name + a
% }. O" C9 \0 o- V$ T8 u) u& ['Hans    ABC    '3 K+ b% m2 o6 D& k& s6 F( E
// 使用concat拼接! X, Q9 v. b) L/ _' I' q) n, P& R
&gt; name.concat(a)
4 \! m- z# {6 e0 l0 s! {3 u'Hans    ABC    '3 O5 b+ k9 n% N/ R+ G/ O

# D! c+ f  D8 ]7 B: s! j* m0 P//indexOf(substring, start)子序列位置. l) o  N$ e. c& ]9 L8 {

: V+ t9 U7 T/ [0 A/ z&gt; text
% a) t) z) X6 u* `. P0 n'A young idler,\nan old beggar'
3 M- x, W  N7 M. C&gt; text.indexOf('young',0), ^3 c. s" t/ y6 N( s% @$ c& P
2
% F+ p( e$ u( z5 ]( m& T1 z" @. h$ J5 B0 p, f" `7 W
//.substring(from, to)        根据索引获取子序列9 @. h. }1 ~* O" g6 s% h
&gt; text.substring(0,)% R) Q4 @( }: `
'A young idler,\nan old beggar'
3 m1 I( r; ?& x) t. i2 J6 G&gt; text.substring(0,10)
$ p$ W- @" J' w+ H'A young id'( k* E5 }# L. A! f

& z; [6 U: S" _( c// .slice(start, end)        切片, 从0开始顾头不顾尾# r$ a" O2 ^2 h/ j, |, s) D5 k
&gt; name.slice(0,3)
7 e' p3 l3 k1 S6 A) n& O) b'Han'
' u& b* g' j) [# d8 o% }& ^, _% C5 s' T+ n3 n+ T3 F+ y
// 转小写. U4 b( {' [5 v# w7 i6 v; N* \2 }
&gt; name
3 {  S! m7 I5 l1 x4 y2 u( p'Hans'
, F6 F9 c" Z) n6 F: l&gt; name.toLowerCase()& w2 L" P5 R- T* f, n* }
'hans'6 y, q' Y2 K/ n2 N
// 转大写3 ]0 G3 m1 X* v9 F. ~
&gt; name.toUpperCase()) t! W4 u. S* a. o
'HANS'. F! j7 L8 J# c) ~/ m5 w+ l
5 J/ {" r% Y4 U) s0 a
// 分隔$ @  L: \, G% D8 U
&gt; name
* N8 @" b1 S6 D" a2 s' M; F'Hans'& x% |6 W7 t; d  }% P$ A
&gt; name.split('a')
* s: o# G5 S* Y% a- Z* G- y. p(2)&nbsp;['H', 'ns']
: t7 u) W2 k& r7 K0 u</code></pre>5 k" P( u( `5 r* x) O
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
/ z* I2 {) E7 _) Y' E% q' I<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
5 q) _1 |% Z+ y' ^- F- V<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>( v! I4 Y7 Z; C0 n2 w) f0 T4 s
<p><strong>null和undefined</strong></p>
: ?6 V. |: y5 e( S3 R1 d<ul>* p' v" }4 c" {% z4 ~
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>! }* n9 a& z1 ]& ^! d2 t9 N5 r
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
5 t! i2 g8 g$ ^  K, X  u4 S</ul>' s# G# c& j0 q# o/ I
<h4 id="234-array数组">2.3.4 Array数组</h4>
' c+ a$ e+ _+ Z3 O7 Y<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
9 B: p! A$ Y4 x9 `% S9 U<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
& z+ G& N& h5 d5 |) p6 y9 V) p&gt; array1; `3 a$ T, |- w/ _9 _) z- W" n. a
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 f% q, H6 J4 d' N8 w; O7 a&gt; console.log(array1[2])  //console.log打印类似python中的print
7 m0 ?  O8 A7 S3
* o$ `: w5 F& X3 E// length元素个数
2 D& S/ c5 _1 y2 Z: X% l- E% F! e&gt; array1.length
) E& A$ k3 Q' l8 ~9 g' O6
' E* K1 a# q9 p9 ~3 b: V// 在尾部增加元素,类型append4 N7 P3 Y; r3 ], I; R& [5 B
&gt; array1.push('D')
# N8 X' r$ t* g7
: Q( W/ K& w" {+ @* w$ ?  P&gt; array1. u/ k' M7 N9 S& @" }
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
/ `6 Y' v% K! A/ ?& ^* b5 y+ y3 I// 在头部增加元素
+ X& H* i6 r  c! W* u&gt; array1.unshift(0)$ i5 |; b. l1 Z) Z
82 @* ^; x. l/ q8 t" u% I* E- x' p+ C
&gt; array1
3 T3 |3 t; ~" Z  l' _2 S(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']7 i: p' y* r$ n  J" ^: z

$ I7 F3 J2 c& ?0 R3 S//取最后一个元素
4 y" @$ m. v3 Y. Z5 m1 A8 w& C+ r/ Y: {&gt; array1.pop()
' v' _0 ^6 j. I, B9 M'D'6 z6 ^. J8 x% j
&gt; array1
" M3 r7 ^% Y+ D# h7 U8 Z' V(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
6 [- D) g/ V5 \+ [* j) ?% h+ f8 B//取头部元素8 U4 b0 ?4 @9 B$ d) l/ W, r
&gt; array1.shift()  M' y( r6 p: X, r
0
8 k1 Y2 C: n$ O# i& k1 }&gt; array1
  e% v. `( K, p2 r8 {. K6 a(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ d1 t2 P) u) k+ C7 F3 K% a5 m# J2 G) H6 U7 I1 Q
//切片, 从0开始顾头不顾尾
4 n% p8 z! l- g  W; t&gt; array1.slice(3,6)% ]9 W2 Z3 z; ?
(3)&nbsp;['a', 'b', 'c']
- P, Y& C7 k! `+ c- J// 反转
/ A1 {; z0 n* `. r) X6 i4 H. ?&gt; array1.reverse()6 H, t& o; I" @/ ~+ q" f8 [% m
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
; |2 c+ l3 e; P1 `. c7 J  r' [// 将数组元素连接成字符串* S0 _' }8 x! Z7 @" j5 ^
&gt; array1.join() // 什么不都写默认使用逗号分隔
# Y) K/ m# w- T) K6 v1 S3 Q2 y'c,b,a,3,2,1'% \; c1 z5 L% ?4 r
&gt; array1.join(''); w- @4 Z) p: m% l$ S
'cba321'& k& p7 S2 z8 R7 n5 G# c- v) u
&gt; array1.join('|')
( W/ |& t5 ?% @9 C+ b( z3 ~8 j" I'c|b|a|3|2|1'
6 c- v, B/ e. Y9 r
9 C* e0 V* g% t2 `4 F; I// 连接数组
# |9 k. p- |. }7 ~$ t9 ?&gt; var array2 = ['A','B','C']
  C/ _, `  w, ?# t( u&gt; array1.concat(array2)- E  {: b9 F* {7 ^
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
2 I/ X& }+ g" [0 o& v+ X/ t3 ?6 h( H* Q
// 排序
" C& [5 b) s2 ?8 h' t9 Z7 R&gt; array1.sort()
8 J5 y* K8 S7 I7 i(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  I0 N" B( E2 X! ?# W' i% H

- |8 H& n# H7 g, k// 删除元素,并可以向数据组中添加新元素(可选)# z* V0 ]4 O' B- g
&gt; array1.splice(3,3)  // 删除元素: L0 J$ {) R8 @! _4 W/ m* l
(3)&nbsp;['a', 'b', 'c']9 q* P, p' I& z* y* j2 R3 p
&gt; array1
5 Q4 l* q$ o2 E" }' i* D; T" I+ D1 Y(3)&nbsp;[1, 2, 3]
2 C( D5 ?  _8 K7 O&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素- P2 L+ A, z7 c5 ^9 j# `
[]
  m* L( c9 N! }' @) _&gt; array1
7 X' |- |7 k+ }! i$ R* m: w+ \# C(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* c& x  `4 A0 z7 V5 o: K; V" X  b
# M. {! Q# V4 O+ \
/*; ~: j. {: t" r; h  y% }% o" @) d
splice(index,howmany,item1,.....,itemX)
) m) J5 e# F, J. oindex:必需,必须是数字。规定从何处添加/删除元素。
& T( u% q( }: S% y. uhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
+ d6 Q4 p" ]5 f7 Nitem1, ..., itemX        可选。要添加到数组的新元素
9 K2 U( f! L/ [% @7 o0 R*/& b8 M0 z7 C2 }* \+ R8 o

$ {+ Z1 [4 y- I// forEach()        将数组的每个元素传递给回调函数0 s. ^, E* |& b% U) S
&gt; array1.forEach(function test(n){console.log(n)})4 r  u6 [1 |  r/ w! I4 E0 G6 e( `
1
  S9 {; f8 A) @3 | 2
, v7 n0 @: S9 q3 @ 3
; x* h6 q, K0 `9 m: F! q" V A- D# o; H, {$ x6 L* r: p' b
B
/ ~+ `5 p+ g6 Y% ~9 U$ ^2 ~ C: ~5 o  P+ h5 l1 Z
// 返回一个数组元素调用函数处理后的值的新数组
$ ]' ~. x* e/ O+ d( G% y&gt; array1.map(function(value){return value +1})
+ U3 A5 \  R0 r$ y' J5 }! `5 V* @(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
) _8 _: Q3 C2 _9 e* j" S) g</code></pre>1 t* H' T  k5 O, O
<h3 id="24-运算符">2.4 运算符</h3>  C2 `4 r; ^& T  b  r& ~* x) c! s2 S
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
/ y( g3 t8 k' E7 p- l( Q5 z<p><code>+ - * / % ++ --</code></p>; L" i& _5 G  M4 {( U% w. E. `
<pre><code class="language-javascript">&gt; var a = 6
) T4 H& H( G* U/ _  `- |) F&gt; var b = 3
8 {7 K  ~  r9 v// 加
# Z9 j3 B0 n- K& t8 A; P&gt; a + b
, O  \% t0 j# r2 Q3 {9/ U  \' H2 w+ b; x! a
// 减/ }, f1 f/ e& T$ D+ t
&gt; a - b+ c/ e! l, c) f' f
3
' {& Z4 r4 C, y5 p; o. c: Y8 D$ V% p1 ?// 乘8 V1 L6 p9 M+ m# \: d: ~1 `
&gt; a * b
$ N: v, X; }+ B# y, F18
, [) |7 P  j/ Q// 除5 _% w$ x* ~, Y( g
&gt; a / b1 ^# O8 k( O% H* y! L2 ]
2
1 r) X2 _8 t5 ]" _// 取模(取余)) L0 @7 u/ d4 c7 `
&gt; a % b
: r4 A  U9 F+ ]8 E0
9 ~# G! \( n, o7 H9 T// 自增1(先赋值再增1)3 x; K. z# o! U% r2 Q3 U
&gt; a++' h& |9 ^: S4 F
6+ S3 L& }: Y8 _! C( _& e( ~
&gt; a
  ?" D4 K' u& k& i  b7: N. f# r  Z6 X! z& B
// 自减1(先赋值再减1)
3 d9 k7 v8 S! e/ I; ~" B&gt; a--. ?  \1 _& m$ C4 ]" p! G
7, T% l# N; U. n: l/ b) R) A7 F
&gt; a
3 m+ W& x1 x0 X' C6* q/ s1 |0 q1 I! q- m6 W
// 自增1(先增1再赋值)
( b3 A2 F. X7 Y' d6 t  M&gt; ++a
+ ^0 B' e. U3 K3 P: I$ U9 Y7 h4 @7
5 ]; L$ ~7 i8 {5 ~. Q. e0 [// 自减1(先减1再赋值)) k2 ]! U3 K5 b8 K
&gt; --a" |( v' {" z8 m% I
6
1 G/ C7 t; C$ Y1 V: f&gt; a2 b- K, x. T: {& m  H6 j6 V8 Z
6& N, f; D0 o; L' ^
1 `1 W* j9 q: J9 I/ u9 e' p/ `0 ]
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理' ]8 M4 Z" ~3 A+ s" R
</code></pre>
/ H# w% G* T/ l+ e8 e9 j<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  t- O+ H% r! i+ s
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
9 L2 d. ~- f8 W5 B3 j. c! D1 p& H<pre><code class="language-javascript">// 大于
2 t2 J$ L8 u  o# Z! @. j- V&gt; a &gt; b: e# h3 _) }1 c
true
# ]; W* l% y- q( N% Y// 大于等于( y- `. ?5 }9 L, k3 [* ~; `% q/ k4 ^
&gt; a &gt;= b
* a3 }$ L5 l$ ~9 l: e" Y% atrue5 c/ y. P5 |% ^% Q4 b
// 小于" ^$ T  \' e( L! z1 i: Z) S
&gt; a &lt; b
. }) I2 g0 X+ {  }0 qfalse- N4 |9 N. m: @2 U
// 小于等于
" t3 ~6 t3 A* v0 i&gt; a &lt;= b
3 h5 R, }+ ?5 z5 xfalse
+ P+ \2 B, l# t) N: g// 弱不等于
) R1 V8 h4 z# R" ?# p&gt; a != b
2 L* p  C2 g  U0 O' K4 f5 l" Strue- |9 M& H% e: M* M# K
// 弱等于( U( ]: H: k6 i4 z" i
&gt; 1 == '1'. s. h5 H- A  Y, Q( k/ l
true
6 W2 g) V1 i, B) v8 m) D& S. i7 |. h; U// 强等于. w2 w- `& _4 D7 B& o
&gt; 1 === '1'- i' b$ u, e" R5 |- o7 L2 u' C7 O
false; B8 y# p/ n5 D2 |0 b: j, I
// 强不等于
7 l: X* Z- K5 X4 n' q* X$ c&gt; 1 !== '1'
, {& U, w6 i" x) l& ^, Z4 Rtrue
! M5 `/ `  X) ?0 _8 @- C% [2 [
; b5 M- q; F( i& M/*
; K7 U: i, x1 U$ w" {JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
% ?) u6 S  S( c. S) o( }*/7 L) ?  _/ R6 Z& q3 z" i
</code></pre>
* S8 d1 A; O  @2 a+ Z( H<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>* B8 ]3 d+ |' _; s7 V& D
<p><code>&amp;&amp; || !</code></p>5 Z  i. a+ N1 |7 Q/ p( }" z
<pre><code class="language-javascript">&amp;&amp; 与9 M0 Y* g, g$ o4 K' E
|| or 0 z$ t3 I+ Q7 Y
! 非( u" ^/ x, ~: r* A+ W
</code></pre>
6 n6 _# O7 u5 [/ O/ j" T<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
& Y$ A# W7 n$ ?  u) d4 i1 Y<p><code>= += -= *= /=</code></p>( ?( ]6 w/ X3 F' A) W
<pre><code class="language-javascript">// 赋值7 K4 E' `. ~: f4 N. u: M9 c
&gt; var x = 3% J! l1 T& s+ ^% M  G  C+ C- E
// 加等于6 |% f' W' T6 f$ I
&gt; x += 27 O' v2 P% R2 G" ^
5& i6 `* B( v$ H) E0 Q* M
// 减等于
3 A/ W, x+ H0 k0 I+ L) N&gt; x -= 1
( s( v/ |' |4 \9 Q4
3 j$ l* A0 V1 |8 u( C2 H4 |// 乘等于
6 [: [3 N4 n) H6 K5 r  C) W( B&gt; x *= 2
9 S' R) |- c: u8
+ c  p. w- c2 M/ y/ w// 除等于( v2 }7 H" s: p, f: ^/ k2 k& r
&gt; x /= 2$ R3 j$ U0 _: k. S8 ]/ ?5 j+ A% @
4
* s; v; t/ h! o( D7 O% T' f: g</code></pre>' L. i7 l0 c  i/ u7 a) f* k
<h3 id="25-流程控制">2.5 流程控制</h3>; Z, M0 C( B6 ?7 J
<h4 id="251-if">2.5.1 if</h4>. b7 J$ d5 _4 W" p1 V
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}( \; f9 i4 R( v, z. Q! l( J' C
" C$ v6 E3 c. V& }
&gt; var x = 3
6 h/ _: C4 ?8 k7 K# f&gt; if (x &gt; 2){console.log("OK")}0 ~5 F$ j1 U! t7 T; a/ G: r* H
OK7 F. a+ k) G6 Z# J0 R0 ^

$ B5 K2 O, t; D! d) I5 F0 Q2, if(条件){条件成立执行代码} ! H: ^7 y  j. w9 R9 H. ]- |" K
        else{条件不成立执行代码}9 c0 U2 [4 M! @! L! J3 n/ `
/ a: ?! }. f: ]/ x  h
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}! }4 m7 ]' c7 ?8 s7 B, J
'NO'
! r/ T/ e" J: Y( d+ P2 t$ [8 A. s- {4 q& \4 Z! R$ c
3, if(条件1){条件1成立执行代码}
6 A) Y% {) Y0 t8 i2 Z        else if(条件2){条件2成立执行代码}$ [  M8 q9 N# r8 Y
    else{上面条件都不成立执行代码}
6 y* O  J/ y/ d! {6 m9 K5 p
$ O; S* D4 R. G+ }+ F/ z" R&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
3 I2 y8 U# o, H  t7 ?) l) n Ha
! T9 a2 s; q) h8 x/ o9 H: j( U1 ^</code></pre>* z2 |$ L/ j3 q3 O. e
<h4 id="252-switch">2.5.2 switch</h4>
' o6 f" H! q/ d" M: ~" y2 o<pre><code class="language-javascript">var day = new Date().getDay();/ q- O! ?5 ~6 S4 z3 C
switch (day) {
& E3 H& N' W2 k  case 0:
1 t% Y  k' `+ e4 e  console.log("Sunday");
1 V6 |) P3 q% u3 z  break;* o/ P, D& u  Q2 a: X) a
  case 1:
: r8 M, g* Y: Q  console.log("Monday");4 C$ t) P4 P- }2 \5 N5 {0 G
  break;0 g- n" L) e, d  ?% R* D
default:- ~& W+ [9 R( L- g* ~
  console.log("不在范围")* _8 M; N1 G9 a: q# J  Y! B6 g
}
2 n% X) n& _" I: Q. q 不在范围
" Z" [2 o) n3 t, S, c</code></pre>7 l- o2 h1 K" i7 h- O5 I
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
% [! ]0 w# a# ^6 S5 Y) V: `3 V<h4 id="253-for">2.5.3 for</h4>
5 b; e2 F% p, y, L$ ~# Z/ p<pre><code class="language-python">// for 循环
" _2 ]/ Z, o; T4 M4 I! B- A        for(起始值;循环条件;每次循环后执行的操作){
! \( Q  p' ?) R5 F- a        for循环体代码) B# V) _) h& n) D
    }
9 G9 o7 x# I. m: {- h+ z) Y6 ?! t
) j9 m. k1 G2 V( |% f  f/ j- Dfor (var i = 0; i&lt;10; i++){
, c6 t' }, |8 H& A0 s7 i    console.log(i)
4 j6 v7 Y* H0 Q4 \4 Q9 I4 b}4 _6 x3 C9 W$ l8 r7 Z, f: H) }( k! ^
        07 _. A+ H/ F! E2 O8 ~
        1) O4 m0 _6 H. A0 g. a& n" p& c
        2
3 y" P  t6 T: R+ L. A' y% I- w        3
# F0 x2 O- g1 f1 O' a$ Z        4
2 J) i6 w; K; D6 W5 z5 M: }        57 L1 I8 ~: g/ g* o+ q4 }: u
        67 O; v5 r! K$ F
        7
3 v1 v' P/ ?0 I; B5 @) a8 u        8
! B6 F7 T- s* b& j: P        9
, R- C* r/ T5 `$ k+ \% |</code></pre>
& H; ~: Y3 q: B2 {( U  k. E: X5 h<h4 id="254-while">2.5.4 while</h4>1 o( d: Q. i  ?( `
<pre><code class="language-javascript">// while 循环
0 j5 p8 Y' d# V2 [        while(循环条件){
' l8 B+ y' X% w        循环体代码
, x& M- z8 r' U2 q3 ~0 k    }
- @' c2 b; }% Z$ {" O$ x3 b( x# S' b$ X, C/ K! f
&gt; var i = 0
0 i6 e, d3 T$ x; K% v3 n&gt; while(i&lt;10){& v; T4 ?) S# x
    console.log(i)
; j+ T; Z9 `. o. G8 T( k# H% S* @    i++
: m5 c, Q' H" R/ T, g: i4 Q}
; I: A" y0 p- N3 c  B9 S 0' @0 i' ]* k0 v, q% g
17 t: _. L' w4 _/ L. P
2
$ D2 \& i. L8 c/ T! I 31 `. \6 o4 S' o/ p7 }
4
( q& t9 w. f* |* } 5
5 n' [* w2 x4 ^7 W. j+ a 6& A; c. Z( Q# H5 p1 W' |
7$ h! h  y, K' a4 k; Z- p& t
8
: b& f1 I; u0 K  ?9 q 9
6 M: `$ @# [* ^4 [6 y</code></pre>
; H" D8 y* L; C' T# L; z& A<h4 id="255-break和continue">2.5.5 break和continue</h4>1 P0 ^5 H0 x4 I9 L, c
<pre><code class="language-javascript">// break
" g( v9 G0 U3 c, W) Kfor (var i = 0; i&lt;10; i++){+ N0 k4 }$ n, o6 a
    if (i == 5){break}; E% g. K- |  A( Z4 ]
    console.log(i)
  B5 [+ \8 j/ I) n}4 Z  M: f8 K2 z! b* J1 [$ h
0$ X8 g( k; S: y$ A5 p5 S. b4 S' Q
1# x0 j8 w; D) ?8 L& s' h
2- Z- D' q+ D* v8 K& c$ a7 A% A
3: a4 z" O6 K+ W. _: o: U1 ^
4
7 \: @2 H* ~% P4 p// continue* x+ a0 x- o2 \) t' t; N
for (var i = 0; i&lt;10; i++){" p. {- i) y4 x( ^8 p% e' k
    if (i == 5){continue}
1 s2 V4 N/ T- X- P' A! D: K    console.log(i)
. [! ]* ]# u0 V3 r, ]. a  q* n. _}
* n% S4 q5 O# h) i/ b 03 g/ f1 j: U4 c' @4 S: w
1
' Z0 W2 o: C2 g% N- w3 A 2
" v. H+ z- x( s0 Q0 T 3
! |5 p1 T! X4 O8 T3 T9 R 49 o2 e. W$ G; W/ H4 |% [7 K
6
& Z' |+ ]5 V% L  j$ `# j( x0 i; m( E 7
2 c9 l! m- D" y) W% s7 s+ `) u 8
$ U: G" y: [4 |3 `; I, A/ s 9
( Q7 v3 c  x+ t9 W" j# j; n! Q/ G" s5 E: }
</code></pre>& d+ ]8 l7 d* ~8 [5 f' U# j. G
<h3 id="26-三元运算">2.6 三元运算</h3>
( V0 T% c* }. D) o# A<pre><code class="language-javascript">&gt; a
$ L* h' L/ ]6 c8 }1 r. X60 C9 g. ^3 {" s' o8 g
&gt; b
0 I* q: U$ K* h3 t3# f9 g/ E8 [/ |0 y0 L9 h; M
& H) e3 F' c5 ~/ z
//条件成立c为a的值,不成立c为b的值
* v- E/ j7 }- a&gt; var c = a &gt; b ? a : b1 I% J8 e: l7 }* z
&gt; c
  l6 |% q7 W5 N: p+ s; ~, M; G7 @) U( d6
) L. c) R7 Y/ C& e: C; N/ I' A9 M- r' E) I; b
// 三元运算可以嵌套
5 t- k) v. Z. @$ i9 n" z</code></pre>( z4 e/ D/ P0 Z
<h3 id="27-函数">2.7 函数</h3>4 R: r6 T8 S9 S0 l+ ^- j/ O8 i
<pre><code class="language-javascript">1. 普通函数2 D3 @! Q- S' Z$ b- l9 e2 Y' |" |; w
&gt; function foo1(){
4 S) S- F0 a/ x8 s' s0 s    console.log("Hi")
! x5 z) J8 g1 j/ \}
7 }  a% W, _  N5 w6 x5 i- A
/ y$ Z  m8 |9 K4 V4 ]. A, M&gt; foo1()
3 B+ F2 f3 M& r# j- X! l2 l* [        Hi
& o% S  `. n; X2. 带参数函数1 J  q8 ^- R9 h5 W  w  _6 ]6 c* k
&gt; function foo1(name){' m6 O- @) {! Z5 J! ]8 w; _
console.log("Hi",name)) `7 Z7 V2 m& G$ I6 R9 I7 J
}7 j- X, r6 Z! n, {

+ m* Y% B8 S" _+ T&gt; foo1("Hans"), F5 a0 W; l/ B: V7 S. z) S
Hi Hans
4 G  m& q1 \- g) v6 d: N# Z; E8 ~8 w1 L4 u. T
&gt; var name = "Hello"  i! R. n1 B* x$ S0 d; c4 e7 ]
&gt; foo1(name)8 k" O: z. ]0 K( t0 a
Hi Hello
1 q0 \! p* Y" O) ?
. q+ S6 p+ v, F6 q/ Y3. 带返回值函数" m* p4 O  c1 f' p( j  M8 C7 G) o
&gt; function foo1(a,b){. D: Y8 b! E0 ^
        return a + b   
" D  W5 G3 E7 C! H) N; q}
  V6 d7 J; y$ E+ e& Y# x4 `6 O&gt; foo1(1,2)3 C- e+ @* a  T2 I' g
3
* M( V- F# w2 X/ c4 s9 V&gt; var a = foo1(10,20)  //接受函数返回值
* Q2 U$ C7 A8 V# P&gt; a
5 i! q$ l" `: b9 O306 F5 P: H* \2 M  P

  U3 b! Y) V* ~8 ]! t4. 匿名函数4 t( g5 c9 B9 v# N0 j
&gt; var sum = function(a, b){
6 {# [! K# [) F/ z  I  return a + b;
' O  ~2 d4 M% I8 a# h( c}
7 F, d( m3 h' @3 E2 r$ }/ D6 `3 v&gt; sum(1,2)
+ X' `0 m3 ^! ^# `; R$ Q9 g3
) k; Q" d: p8 x  k6 j- e9 V% L* a
1 i# f  Z0 c7 \, h' r% i- ~) R7 k// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
1 J! {5 e! C& @8 G. d/ w$ ~" h&gt; (function(a, b){7 ^$ Z! {5 c3 V9 n! ?7 T$ ]
  return a + b9 Z) K6 Y- G  r5 R/ F$ k
})(10, 20): G6 f3 K0 @' A% w! t5 \
30- d( k$ d  Z5 X
' L4 x  w" K  Z9 H0 u# L2 k
5. 闭包函数
& A% D# h/ Y- T  D' }* T// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数) k% Z+ Y) X* h  j& @
var city = "BJ") c9 W' H  m# f2 k* W
function f(){' c) u: d: A* @/ J' v
    var city = "SH"* e# X7 _1 c( y) g
    function inner(){
, M6 U4 v! r2 i0 |- t: q3 y        console.log(city)- w! N/ G( x, U) r
    }
: D; a* a$ m; d* F3 ?    return inner
$ J7 ?2 z, o& H( P}% D' e* ^5 v8 s
var ret = f()+ [9 n- c) v& O3 `
ret()
1 k& C/ V. a% q$ f7 \4 A  I执行结果:
' k+ ^5 o) M5 KSH2 O% W+ h$ A$ U0 N3 j# Z, H" F
- X% q- Y1 J2 w& k2 f1 _3 Z
</code></pre>  f8 \" w' H- d( r" y
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
: M* F8 }7 l- L- D8 M<pre><code class="language-javascript">var f = v =&gt; v;
! s8 t" b% l/ ~8 u5 e6 ?// 等同于
* i' N+ q+ L5 e- vvar f = function(v){
0 I3 ~; M" t5 @: f. w: ?8 J3 u; M  return v;8 y% p& F) z+ i5 V9 M) Q
}
/ M6 e7 d2 r4 Q; {5 ^+ W</code></pre>9 }5 f1 F, W  ?3 ~
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
; w$ A+ {3 R( \* r* @3 h0 x<pre><code class="language-javascript">function foo1(a,b){6 s- r7 w* c2 j7 f3 g
    console.log(arguments.length)  //参数的个数 1 B, G) X6 m. |1 y% t& o
    console.log(arguments[0]) // 第一个参数的值
& |0 w4 Q; q$ Q( l; M        return a + b   * ?! n4 ?2 x5 E% x$ _2 W5 J# A
}
; t3 j5 _5 C* x* o# E( Ofoo1(10,20)- H1 N; C0 D: p; l1 @& d. M+ Q
结果:
; M" i( R' j# S3 ^  Z( Y- J 2          //参数的个数
4 q( d* B$ `* p% |) Q! O10        // 第一个参数的值  d* |1 p- p8 d+ P, E( I
30        // 返回相加的结果
& v. J$ C3 F, H( J% h4 C</code></pre>. Y4 P5 {* d0 }$ r
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>& W$ K/ x$ l4 G  h" s# u, d9 E
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
  K4 {: h& q1 S/ H; _" q* f<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>! q: L% D& P! x8 p0 u* g
<h4 id="281-date对象">2.8.1 Date对象</h4>
( k( V+ I! [2 A+ s2 C<pre><code class="language-javascript">&gt; var data_test = new Date()
4 {  X% @: F3 x&gt; data_test- r. ?% K3 I5 |: R# o" r
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
9 F* ~: Z3 b/ j5 ~0 ]! X6 m8 r&gt; data_test.toLocaleString()2 q" c% D& C- c0 D; F' e- I
'2022/2/11 下午9:44:43'
$ l' F, ^9 c0 W; z$ T2 \  O' [3 \0 B& e" _0 j
&gt; data_test.toLocaleDateString()* [* Y) ]% k4 `' a$ S
'2022/2/11'
+ Z3 X5 y: C$ P0 E$ I$ X6 @& I  ]0 f: k- [7 U% _
&gt; var data_test2  = new Date("2022/2/11 9:44:43")( Q$ J6 V( f5 o/ I1 b
&gt; data_test2.toLocaleString()
" G0 m: [9 j& o& [- h  _'2022/2/11 上午9:44:43'
' ^3 @1 E4 N0 t0 n6 M" P
: W' i& f$ m  y1 T+ t$ J" n; C2 i1 a// 获取当前几号% w1 q# j  r! \# m  L0 V
&gt; data_test.getDate()
0 O+ W/ b7 G; H. ?) d% ?11
. Y4 @1 s8 Y! x' e8 z// 获取星期几,数字表示
! n2 d, _6 Y" j) r&gt; data_test.getDay()  
# w) z2 S, ^! U" v2 T# X5$ i* h0 V7 s: Y% T& q* y# i
// 获取月份(0-11)/ |0 g, J# w" k' k+ K
&gt; data_test.getMonth()
' L: q' v3 ~" `& z15 L) \8 s. h  H5 g, I' v5 |3 c
// 获取完整年份
, Y4 w; `" y% n  M: v7 ^&gt; data_test.getFullYear(); b- R, b6 `9 S7 j3 N
2022
) r# n# F0 t" o) I" h) K, I// 获取时
4 s: ~4 M9 M. K4 U&gt; data_test.getHours(); R, y& z# u# H5 y
21+ f+ q. M7 ~4 y1 F. k3 y& ?
// 获取分. `7 H: g9 V: |0 G
&gt; data_test.getMinutes()3 e0 K) p# b6 o" m( ]# X$ B: M
447 E( R* s" c6 @% _. |! U6 X. w5 ^
// 获取秒( E! O0 o5 z$ W* m! G, K# g1 b/ T
&gt; data_test.getSeconds()* T! @! l" y8 [$ k
43$ Z2 T$ _: e' |5 `( @/ Q
// 获取毫秒) p/ o: A2 t) T, \- x
&gt; data_test.getMilliseconds()
% d3 Q0 |- Y, D( J& H* B, e; f; U3 x9 P2907 c! ?& R, q  l  f6 R% O7 D
// 获取时间戳3 m0 E! h7 k* _9 C( P
&gt; data_test.getTime()* ^; H$ g7 ^# k
16445870832906 L$ y1 E9 s3 P1 ?' U; g6 Y
</code></pre>0 Z+ o, f9 N" f+ I6 G# f
<h4 id="282-json对象">2.8.2 Json对象</h4>
( j: I7 ^$ T: ^' C& \2 X( ~8 ~<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串5 G$ r- `  a) L2 ?
JSON.parse()  // 反序列化,把JSON字符串转换成对象
6 T* H1 l) d0 r) I+ ~8 V7 u3 S% [
) ~& Q1 M# r# J1 M, z) P; g2 z// 序列化
0 I3 N" z! G& C&gt; var jstojson = JSON.stringify(person)
# s& R' t2 ^  E% y- X7 ]7 X&gt; jstojson  + `8 l) [7 V, G1 S" F2 h
'{"Name":"Hans","Age":18}'
" o; u  {6 n" @( A* k4 B) D9 x* x  G1 Q; U. x3 ]" R; M  E. W
// 反序列化' c% O0 Q+ T- [+ C
&gt; var x = JSON.parse(jstojson)) \0 g( z* p+ t
&gt; x" M2 z5 T, K) ~  P, N
{Name: 'Hans', Age: 18}6 d/ M9 w- W6 A6 ?3 F
&gt; x.Age
$ I% T0 P2 O: z. t" r4 T18
) N8 u$ z9 U: }, R: B</code></pre>- M6 z, n/ o4 g+ }5 N
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
' ^7 L6 C& e* t+ K! c<p>正则</p>
( I4 R' ^' s  @& U) }- Y$ A4 C<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");6 T# S1 e6 d8 v% _- ]3 m" j
&gt; reg1
. p+ B& {7 L8 [7 e( i/^[a-zA-Z][a-zA-Z0-9]{4,7}/
3 M1 `) M, c, N. M- R&gt; reg1.test("Hans666"); R5 p0 Z8 o# _6 U
true4 [+ S" ~0 F% Q& f: l5 E
8 U$ @4 j- l5 Z. i" Z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/; o" ~  I0 j! E; B
&gt; reg27 _' ?' r& A' q4 G. F# Y# t7 u% M
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- w* a" ?: z0 a& U8 d8 f&gt; reg2.test('Hasdfa')" v9 `- f+ ]' p: _! A
true6 T$ x7 m. D. h! Z) [% V2 X

( Y% {+ h9 D! Q8 \7 h  x全局匹配:* K6 }" @  Y1 C$ ~5 W) M; `& }
&gt; name
# {8 X: f4 Q6 C; e) w# V0 U# m'Hello'8 j/ W8 {, c5 D8 c, x3 O
&gt; name.match(/l/)& y; |# }. D, t% i% I' R$ j2 s
['l', index: 2, input: 'Hello', groups: undefined]
- k! g9 c; _: @
4 ^( @  m1 L# M: j8 N&gt; name.match(/l/g). w& A4 Q! `2 k& I$ i% D6 }
(2)&nbsp;['l', 'l']
) h/ o$ {) x8 W4 p0 [2 I& T4 Q' B// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配5 p; J9 o! n- Z2 p" t

. z6 k& n4 I% [9 l" c3 W5 ]% j全局匹配注意事项:% X) g; d  f0 v& t3 [& k
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. \: X# F3 z7 I: N/ h% S&gt; reg2.test('Hasdfa')
* C3 w7 \# H0 d% ~! {" Ptrue$ ^- f" O( i# \0 `
&gt;reg2.lastIndex;
# N! O# v- R7 n+ O& M6/ `. ^( y1 V6 ^8 n7 N7 W
&gt; reg2.test('Hasdfa')
4 v2 D6 l$ p' ~* E4 `& Ofalse
) R( Q( d4 Z' A6 I) ?) f: v&gt; reg2.lastIndex;
$ f+ _8 x6 C% _; O0 ~0; ]$ C; Y3 q$ ?2 X4 C
&gt; reg2.test('Hasdfa')
( Q* ]& g; A7 [. l, ~+ Vtrue0 T5 z) O; m+ i$ O) i+ }
&gt; reg2.lastIndex;; n% h/ _2 N9 C8 S9 J
6
' W! }8 p9 M( U&gt; reg2.test('Hasdfa')5 i3 s+ ?0 ?' E9 v  D# D
false; b3 U0 c3 D& |  j( e0 x
&gt; reg2.lastIndex;
2 z9 d- ]" K0 x: ]0
% \# _8 H4 K, D* X// 全局匹配会有一个lastindex属性) ^3 {# f0 Z5 w9 m& l9 ]+ V) ]6 Q
&gt; reg2.test()
% T1 g6 d2 o/ P& t1 `& f8 G$ Nfalse# M! q+ A/ q/ y
&gt; reg2.test()4 M$ H6 p7 c3 {. z
true/ Z4 \. D7 g( d# m3 v
// 校验时不传参数默认传的是undefined
' x6 a3 K( Q" `</code></pre>
0 O1 w, k0 a: {0 T8 y<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
# D' ^) D( [/ v9 \) m/ n<p>就相当于是<code>python</code>中的字典</p>: T* Z; f* A5 y$ ^2 r4 S
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
, e5 y' a  Y) u5 I3 L* o, e6 k  ~&gt; person
6 Q( T% M& B* p2 b{Name: 'Hans', Age: 18}4 t0 n9 Y7 G8 z0 \" J' ?
&gt; person.Name
* v5 k' v3 M0 j* }'Hans'
. G8 X) d- W. N, [+ C&gt; person["Name"]1 s. B' M7 h) Q1 J
'Hans'
# o+ d. w* o0 F" V
- a* `0 U3 e5 l$ x( H2 `# C// 也可以使用new Object创建
1 M# o; X4 u: |4 J$ X: |) K+ g&gt; var person2 = new Object()8 E% G% x( I1 q  E
&gt; person2.name = "Hello"
6 |, @/ {' c6 X# T'Hello'
8 ~2 r0 t' K( F! a9 K&gt; person2.age = 20% _* ?: r! c& |8 Z% w' Z  F- z1 z" _
20. i  V9 U0 D: a; B& i
</code></pre>
' U2 Q- y5 @! d' N2 A<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>" Y9 _4 Q$ {+ D7 j; p9 T. |1 P
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>$ V0 i# ^6 P3 t9 V+ G
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
- h. b# x- v' j: b, U' a# P<h3 id="31-window-对象">3.1 window 对象</h3>
: h* t8 L* n. N$ g$ ?2 A& ~+ ~9 P<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
; d6 n7 b# r. M/ v0 b<pre><code class="language-python">//览器窗口的内部高度
- S$ A5 N0 _2 d/ |& ?- Fwindow.innerHeight
* o" j: b8 d8 B1 a2 V* c706  j; O3 e- o: m$ c4 E% \* `
//浏览器窗口的内部宽度1 Q. r: S: d' G# u
window.innerWidth" p2 R* [% U9 y3 j  w% |
15228 @9 Z" x) H5 ]$ N& S+ @; O8 [
// 打开新窗口) {/ P- _: `" L6 J. B) V
window.open('https://www.baidu.com')6 S4 m+ K+ b4 H/ v
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}9 I1 j/ q8 I6 D; l1 o. I, r
// 关闭当前窗口( H3 O7 E0 I/ G* l8 |
window.close()
0 h# S6 V4 |( O% ^//  后退一页
) `- a( `+ o% L5 jwindow.history.back()
8 h6 u! i& E& ~// 前进一页
4 E) t* ]- U# D* B: F7 fwindow.history.forward()
1 u7 J+ {/ a) e5 S4 c, f! k//Web浏览器全称' ~' I0 `0 L7 V- \) ~% P* I, u& n$ r
window.navigator.appName3 }* ~& l8 k) O
'Netscape'
; T6 ~- C9 G; ~/ m6 ], I// Web浏览器厂商和版本的详细字符串& {5 x" t) D4 m7 |4 z
window.navigator.appVersion( e& [, N5 }+ K% ^) a! y, b
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 {8 B# ]0 f4 o4 a! u1 Q$ B// 客户端绝大部分信息
) ]# I' [8 P* _7 }window.navigator.userAgent
( K, }6 L% D- i! V'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
2 w5 o. f. |: ?// 浏览器运行所在的操作系统7 x9 F( u1 ^7 f4 \, o; ]: S
window.navigator.platform
5 n0 ~6 g- u/ c5 ?4 \9 {, g'Win32'2 }4 a* T9 @% A0 b, m, G4 \
4 m2 @7 d/ |) o' c! U  {% o
//  获取URL
+ `! B. u$ O' M; O5 b0 D" {( jwindow.location.href) I+ ]& A, g* H8 @
// 跳转到指定页面
, e9 V! a& ~- d( V" Twindow.location.href='https://www.baidu.com'
1 ]! ]. u; I1 k% S" l; a7 h// 重新加载页面% Z2 {/ X- p9 u& z1 F
window.location.reload() * H$ y4 N* ^/ x" K' J3 z* d
</code></pre>
4 g0 s: o( L1 |0 E' ?<h3 id="32-弹出框">3.2 弹出框</h3>. F( ]! t* O% x: M
<p>三种消息框:警告框、确认框、提示框。</p>( `4 d- }4 W' Q# F1 q6 k
<h4 id="321-警告框">3.2.1 警告框</h4>
1 M0 z5 [. @6 w<pre><code class="language-javascript">alert("Hello")7 h0 F) A/ o; ~
</code></pre>
) Y2 k: s0 G# g) X  v% ?! T2 d<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
: W2 H3 ~6 M5 Q1 G4 f<h4 id="322-确认框">3.2.2 确认框</h4>7 m% A0 @* q9 I7 Y4 s8 |9 f
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 ^. t3 Z! W3 i, U<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true2 a2 k1 C: }7 s! `  b' g  G
true
6 p: s( E' E% b: z/ R: [&gt; confirm("你确定吗?")  // 点取消返回false
3 Y0 {7 f& Q1 m; J( c2 L+ f$ xfalse! L" T/ l  Q! P
</code></pre>
0 D9 O% }/ a- J6 z* L. E+ s8 ]<h4 id="323-提示框">3.2.3 提示框</h4>& O  @6 Z. k& L! \1 O, Y  Y3 m
<p><code>prompt("请输入","提示")</code></p>9 g" e  n( u. q4 u  j& R4 Q4 n
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>! P. K6 O% l) U4 P* U- A
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>, z+ @! e/ C% s% H, h+ m& F6 A/ s
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
) t; G) G( C9 J3 S! m<h3 id="33-计时相关">3.3 计时相关</h3>6 A: x; K, G: ?$ Z
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>, ^1 N! k7 b( ~1 S; p- ?3 ~  K. h
<pre><code class="language-javascript">// 等于3秒钟弹窗
2 T; b% ?: M) [" t9 \' X; [& esetTimeout(function(){alert("Hello")}, 3000)
7 F* W6 G- p5 q1 n; y& i+ J" V% f4 \& l: N( f% i( d7 m
var t = setTimeout(function(){alert("Hello")}, 3000)
% f7 i+ e2 q+ ~
$ n! a/ m7 Z% O// 取消setTimeout设置' m' e, c- U9 d  Q  e& ^2 ^: E
clearTimeout(t)
5 N8 i4 a5 \, `4 `</code></pre>
3 b" t" K8 A3 [<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>& y4 b/ `' i% u' ?
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
6 {" V. h& O- d/ F+ ?. c9 \+ d) S<pre><code class="language-javascript">每三秒弹出 "hello" :
1 I) N( O; H1 MsetInterval(function(){alert("Hello")},3000);
# [% ?( H+ L7 E2 B: ^" \* {/ \</code></pre>
6 @, w# R4 K% A( A<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
: i1 b+ L% E7 b4 d4 V+ Q; v! V<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);( [: |* N) @& _
//取消:2 f) L# O% E& @6 O, K
clearInterval(t); w1 |- W8 N3 _: P6 K0 V) M5 y
</code></pre>
. i9 S! S! r: F1 \7 X2 `
( O  U+ Z! H& C1 [9 p  R. @, k
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-10-31 18:06 , Processed in 0.080361 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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