飞雪团队

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

前端之JavaScript

[复制链接]

4822

主题

4910

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16784
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
& {- e" M0 X, N
<h1 id="前端之javascript">前端之JavaScript</h1>
5 c. [2 \' V* Z( K1 r% `. L1 T3 s<p></p><p></p>" ~- o( E" I& {$ T
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>: `9 r( Y6 Z/ j
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>0 c2 D! G! r$ W" `6 \
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
8 F8 ?6 w2 h% p它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>1 p' w+ Z4 W, z. x8 L& ^
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
! s0 u# H( |& t3 ~# P( @2 i! @  w  n<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
6 V% h1 J* Y. z1 h! U<h3 id="21-注释">2.1 注释</h3>; C3 K6 x! m  ?9 m! [+ q, R8 J, P
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>" P! G- D2 h/ b
<pre><code class="language-javascript">// 这是单行注释+ [5 k& p9 y, n# A. y  n' D! x! i
; E) f. ~; F3 Q
/*, E" i1 ]0 W, B2 D
这是多行注释的第一行,: |' ]1 @& i/ N7 c
这是第二行。( L/ m! {5 |7 J# m" N
*/
3 U# h" y- U! r; ^; X% h</code></pre>
( U  W$ b8 m3 j6 d0 M<h3 id="22-变量和常量">2.2 变量和常量</h3># H9 ?: v* o. |$ V/ {, x% F% H
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
) A& s0 x! n2 p6 }  _1 y<ul>- U4 Q5 |1 z1 f) ?, l& q8 b: K$ Q
<li>变量必须以字母开头</li>
# V* K) w1 e# b7 [<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>: I6 H8 m; S. s2 j" o9 O
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
. }: t5 L; @5 i( |) ?( K</ul>
  t# e: `! E7 t<p><code>var</code>定义的都为全局变量</p>( l: Z8 Q+ I, i# w- |6 y& C
<p><code>let</code>可以声明局部变量</p>
2 T+ e" ^6 p% B  v. a2 X: C' E# z) s; `<p><strong>声明变量:</strong></p>
4 c+ v8 D& Q6 m<pre><code class="language-javascript">// 定义单个变量
) u  O( Y* R/ h8 r+ e; S3 Z6 x&gt; var name
3 |: h. E# m6 G4 K: k3 ^/ Q& z5 d&gt; name = 'Hans'
1 d# z- L' x6 L& U//定义并赋值
: p7 e+ g  a1 C0 e2 ~$ C&gt; var name = 'Hans'+ F9 w! [2 H. s, T2 C* I. \0 w
&gt; name  h- l& h$ U5 d) h" q6 S
'Hans'
& O+ Z$ v( r& T) Y4 y
+ I6 ?+ v$ c6 Q// 定义多个变量
+ ]; W0 m1 X% x4 T- d: @&gt; var name = "Hans", age = 18  X" T2 ^3 d$ i; M, u/ z" _
&gt; name7 T& Q; C8 `/ ~) j3 V9 v
'Hans'* t* b; M$ l" u4 O
&gt; age
  b7 I/ F$ ?& O* q( H18
. ^( G: h1 y% y  x% l7 S& D, |% b- Z" X# ^
//多行使用反引号`` 类型python中的三引号
" Y& ^0 n2 x, ?  Z" F9 {( b9 |&gt; var text = `A young idler,; R8 Q  W% T! T) b5 r$ h& y
an old beggar`
+ I- Y. z8 T! d" A8 n# D8 f&gt; text* c# D) A& H% L3 ]
'A young idler,\nan old beggar'0 h1 a5 }/ j2 j" Y0 ^" P% @
</code></pre>. l: K) o2 }( P/ G( D; A2 ]4 F
<p><strong>声明常量:</strong></p>
7 i1 ]+ W( e  r/ M8 g<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& m: m7 [& q) y8 L3 M' z& _! |<pre><code class="language-javascript">&gt; const pi = 3.14. k  Y3 W8 y7 ?9 D
&gt; pi
$ W. Y9 I* k& D1 p4 S/ {* q1 w+ Y) l3.14
1 Q4 e; L4 L/ Y4 e&gt;  pi = 3.017 d# C* N: V" y5 f
Uncaught TypeError: Assignment to constant variable.
, `6 b; V& x+ i3 h    at &lt;anonymous&gt;:1:4
/ ?! k& E6 \0 I7 i* G) y0 u
8 B+ d5 \9 }& S/ Q% p0 L</code></pre>5 g- K( |$ a6 i) f8 l
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
0 y5 e$ @, w& |0 `' x<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>' J; {5 M+ l/ a2 _9 b$ u
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>9 _4 O7 L# T( \( t9 r7 ~' _1 y: w
<h4 id="231-number类型">2.3.1 Number类型</h4>* ?) e) h5 ?2 F. x& `
<pre><code class="language-javascript">&gt; var a = 5+ r& R) ?- s' Y
&gt; typeof a   //查看变量的类型  6 j6 N) E% H" b1 k& X. b
number( _  B: l$ w/ d9 F3 U9 w+ v* p
/ L. w, M) T- u, {0 g) C
&gt; var b = 1.3
. l" h* B5 z/ J, t, V+ |&gt; typeof b
9 G; q- h- o, L) [% snumber
0 c4 P! l; [4 X  ]; M  O" n6 Q, J2 d+ h8 e. @& l) ~
// 不管整型还是浮点型打开出来的结果都是number类型
+ P. I1 e0 T: S* o# {& K. v% N1 ]" ~  z: \: D. f
/*
' |# d, e' d' U7 T$ X2 ?2 f4 JNaN:Not A Number0 A5 g  i: M; |) p
NaN属于数值类型 表示的意思是 不是一个数字$ |- b" a, C1 q0 Q' ]2 F
*/$ W( S$ ^2 H3 S3 N. X% k2 E+ i

9 Q( U2 G* E! U7 M8 q6 E; K4 C0 }5 TparseInt('2345')  // 转整型
1 ?1 q$ I5 d- L! f' G23453 z7 r9 }; q# C, F( M6 t
parseInt('2345.5')1 ?! n. d6 \7 H! m0 i2 F9 D/ z
2345$ U# J8 H6 ^8 j8 n+ ^1 @
parseFloat('2345.5') // 转浮点型; N5 [6 Z# ^9 {/ ]" w7 u
2345.5
# P; c  h- w9 L* w: ~# eparseFloat('ABC')
$ J' o2 @* a0 Q6 }( cNaN
+ u) O1 T( q8 WparseInt('abc')
: v) M& L/ k: ANaN' v! O9 Y* V) |+ c! N+ S, ?
</code></pre>
6 ?& z1 ]; T5 e$ e- V1 ~5 C<h4 id="232-string类型">2.3.2 String类型</h4>
- @3 r0 f" F; D! R. X<pre><code class="language-javascript">&gt; var name = 'Hans'
, i6 h! M( N" g4 ?8 x&gt; typeof name
& t% l* `8 A* j; j' x2 [* S! N'string'% y* s3 D4 {% J8 y
# B9 V$ B$ S/ I% |2 m
//常用方法7 [- ~" [  z* v
// 变量值长度
3 F5 s5 {9 i/ \, Q&gt; name.length  ~2 R/ r+ \! o% i
42 L7 Z* l( E! V! m4 ~. C
// trim() 移除空白
% @. r; P. |5 u4 b/ @* z, P. d4 D&gt; var a = '    ABC    '
4 t& f7 f" |1 R) l&gt; a
1 F( f9 v, J7 _4 E9 r* _'    ABC    '
* H! i, u8 Q3 V# J&gt; a.trim()' R6 e' a1 L- L4 |
'ABC'7 y0 {0 G/ J, D, O
//移除左边的空白
! [  J4 L7 O) ?&gt; a.trimLeft()
( O+ W+ q3 g, H4 f% x'ABC    '
8 I: Z! w; L5 m3 x2 b% k6 Q//移除右边的空白- v5 W, g. b% l2 ]$ S; I( F
&gt; a.trimRight()) e: [- M/ V1 i; D& ]0 e/ x/ n
'    ABC'( r9 g1 W! K7 O, l$ y

7 q& Z( ]0 x* A) n! g//返回第n个字符,从0开始% L  Z, l& d8 L" v1 g
&gt; name4 a& S9 Q' S. n  E( V
'Hans'' y: U; C& ^" y9 ^& y' T
&gt; name.charAt(3): c( [$ x+ R5 J2 ]
's'
' p" t' g6 A9 I. y$ {0 s& S! g&gt; name.charAt()
5 }/ D- `( m2 i, x'H'
# L  |, L1 w: r# Q8 v7 q; E3 B&gt; name.charAt(1)
4 g9 f5 K" r; c3 Y'a'
1 [& R( u+ o$ r4 `- N) {& f/ h( T1 R6 }* a4 ~; ?
// 在javascript中推荐使用加号(+)拼接1 w, S  f$ ]7 q: f1 V: j4 P% h$ A
&gt; name
4 k( Q% c6 `/ G/ a% i. ~'Hans'
: V; h$ R" X  C: `! K&gt; a
4 T- \1 F, M7 S* N'    ABC    '; \- L$ G1 c7 C5 k. [# ~, {2 @. ?
&gt; name + a) I# O' v* r7 `
'Hans    ABC    '! z$ r0 F4 ^+ O; b( g8 v
// 使用concat拼接
0 B' t& o; X. W8 s4 Q/ S&gt; name.concat(a); l3 ~! ~4 Z. P9 F2 L% g7 \; s
'Hans    ABC    '
+ B8 U+ q. ~8 `/ c/ J8 F) l- Z$ s+ z  B5 B7 N0 W# j
//indexOf(substring, start)子序列位置
) c8 N+ d; m. o" v* l& ~
+ B% @0 ]7 j" {6 L( `9 ^&gt; text
4 w; G2 P! F( f1 Y; ?( f% i8 Y. ~' j'A young idler,\nan old beggar'
' h/ x3 Y# \7 p% \8 ^; ^0 v&gt; text.indexOf('young',0)
3 l# j( E1 w! s; @/ |1 A2
' |) R/ {+ w" o
. X7 H% |) l. X/ r  z) b( B# }; b//.substring(from, to)        根据索引获取子序列
9 k% f5 s* R/ y" A&gt; text.substring(0,)
, E4 Y% p7 N) o$ t1 d  ^# L'A young idler,\nan old beggar'
: p+ ], I2 i! \4 i* B&gt; text.substring(0,10)
3 B. N3 p& H6 s4 S7 K7 \'A young id'" M) u* o  X7 {% V5 J
: S% E, S8 F9 }# ?8 v1 F7 h
// .slice(start, end)        切片, 从0开始顾头不顾尾3 b; K" K( W/ r% v# n7 a: ^
&gt; name.slice(0,3)
& ~0 \; e& V; ~" y( |, P7 o'Han'% u7 T4 ]2 v. g" o
, {& d/ {) Y( R- |9 [( a
// 转小写: p) S! M& Q1 D
&gt; name
! v5 p; V) y. S: I0 Z'Hans'
$ i( H$ G/ I+ {" A8 P5 s: O&gt; name.toLowerCase()0 Y( ]$ s2 N+ @% c
'hans'
3 Y& h0 X- m- d9 S; ]8 N( U) I$ H// 转大写" @9 I0 {8 K2 R$ n
&gt; name.toUpperCase()# E. k& o6 y5 d. [2 S6 R' u7 o
'HANS', L1 |, V( ~9 l8 D( D' `# C* W

7 A1 n. l& K1 Q& w8 U3 c# y3 S// 分隔: W. H; ?# z" _6 j) E! M6 M* G
&gt; name
" ~5 z- J4 S0 g+ |- M* G& R$ r'Hans'
# {3 @% L7 f( {2 Y7 I; v&gt; name.split('a')
! {2 X7 f, e( ~( J1 |" ]2 x+ z  [(2)&nbsp;['H', 'ns']" E' m1 ^1 ?( S' H. L
</code></pre>
" l% O0 ]) F& r0 X7 i" ~. [<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>( C9 S$ H6 W: ^8 j* G/ F
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>, y2 q9 |7 V) d0 g  U' F
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
2 d7 H$ o& T& E7 U: ~" h  C2 \<p><strong>null和undefined</strong></p>8 S' M: j2 _! F# [9 A" b
<ul>1 @: a9 k: l+ G: e$ k0 r% X
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
* w4 {7 N) ?$ P6 S<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
: C( [* A3 i  i) w6 v' U" X- f# j) o# f</ul>( _( q0 R% n+ A# R" {
<h4 id="234-array数组">2.3.4 Array数组</h4>
4 j, \2 a2 r' h& c4 _0 y5 Z<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
9 Z" Q. F  P2 J<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] $ J0 g! B( r% \. U4 x# U
&gt; array1# C1 q! ~4 l" g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 A; V9 j* [; o8 v% y3 O! d- O&gt; console.log(array1[2])  //console.log打印类似python中的print# d: q3 q* j& N4 B: j: ^  A+ `
3" ]' T2 A# Q, V; W
// length元素个数2 r! o" W+ s  M. Y) Q# B
&gt; array1.length) L1 C$ y' T8 a( n7 h% H) P
6
, J$ X3 K5 ?5 c# q) U// 在尾部增加元素,类型append3 o- g7 Z4 j, V( T9 `
&gt; array1.push('D')
' s- h- y5 s* A2 y- B  X  L4 ~8 B7" U+ l; f. l! u
&gt; array19 u( q0 T/ R; T/ V% y
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
, t! S  c6 L% q// 在头部增加元素$ x9 n6 g- z3 K# a& D3 h9 G
&gt; array1.unshift(0)
* n( k0 \9 _9 h6 z! }5 j' E8
5 P. G2 M) R+ [1 H$ D4 _&gt; array1
5 ~0 M( [/ \' [  j(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
- b9 i) P' ?+ s/ v! k* T& x9 ~2 c! `
//取最后一个元素- Q) R5 Q& F  F) p" U0 D  H- F7 ^
&gt; array1.pop()9 [1 U# s( ~3 l
'D'
- h1 ~. I/ @( z, H$ k% G# y; h&gt; array1( S# d) I  \" E4 [
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']: r( Y/ Y' u% `* z" ]' q0 _
//取头部元素
: J7 o( U8 D7 z% i) q0 M&gt; array1.shift()9 @: D5 a2 n  C3 l) X/ c/ ?5 v4 o; _
0- w. @' V" I' p+ o" B
&gt; array1) u- I8 W9 P- X9 Y8 q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], c  {5 M- ]$ R
( q; }. A! e  v
//切片, 从0开始顾头不顾尾5 F: U/ k; O- D2 S
&gt; array1.slice(3,6)
5 E% T* r2 @' Z, y(3)&nbsp;['a', 'b', 'c']
" b, U5 U/ C. ?2 \) B4 |2 X// 反转, e2 V/ c- |5 ^! ^' c
&gt; array1.reverse()
/ f( _0 o/ i3 I2 _(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
+ }4 j3 w" \8 ]1 x// 将数组元素连接成字符串0 C9 c" d  d6 J2 j) p  j& G9 t
&gt; array1.join() // 什么不都写默认使用逗号分隔) S2 i# m. G' |
'c,b,a,3,2,1'9 F% d, G" `8 Z' y
&gt; array1.join('')
! l# p( Y  B, N  n* z'cba321'
) k: A$ [) q5 W0 Q# Z- O9 p! W&gt; array1.join('|')( o1 ^# j6 D1 H
'c|b|a|3|2|1'
4 ^! x: C; t* U$ U1 O# I/ c8 i9 |
0 M7 f- u& X, t# I7 `8 `& c2 p// 连接数组
8 }3 J) g. P1 C5 Y&gt; var array2 = ['A','B','C']* t  m9 f5 ~0 s6 W& |! ]9 e! Q( n' ~* W1 K
&gt; array1.concat(array2)
+ U0 G; \' G, j: B8 O- Y; S(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']4 R. r% S2 n! q. D* P% z9 v3 g

- o! x3 }  G+ _/ R* F. B: @5 d) V// 排序
6 U0 ?) _, q# y7 g, L2 \+ h3 a&gt; array1.sort()" C8 A( J8 C9 w4 G; f. i
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']5 z+ o$ z7 @/ o6 ^

+ }1 e  l, n3 F" V( h// 删除元素,并可以向数据组中添加新元素(可选)
# X2 Y' X" q8 D1 D/ q&gt; array1.splice(3,3)  // 删除元素
$ r9 B, A! C5 e(3)&nbsp;['a', 'b', 'c']) ^# }* _/ C; O) @
&gt; array1
1 u0 E4 u. c+ |8 L2 V/ G(3)&nbsp;[1, 2, 3]
: W( J/ {% |. }+ W8 n0 I0 @&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
% X' W; X: z7 M' `+ o$ ]  [8 o2 J1 Z[]
3 A5 o& i" L0 k3 _* C( U8 n+ Z&gt; array1
% ^1 L3 d' s8 x! ](6)&nbsp;[1, 2, 3, 'A', 'B', 'C']" g& U& o  R' {4 q% r/ F& }& o0 n

; e2 K4 q8 P3 G+ z; z/*& I% A, K7 ]- I# l2 u
splice(index,howmany,item1,.....,itemX)
, p7 s) Q- N# x' yindex:必需,必须是数字。规定从何处添加/删除元素。
- V% ?% a+ J6 F7 c& k1 zhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。7 K; K- ]) C, L2 l
item1, ..., itemX        可选。要添加到数组的新元素, w$ W; o' Z. P" B1 T" g9 ?
*/
' h3 U( T6 D% W5 T2 c- c
4 I, p0 u! Q: v% x3 `# Y+ M// forEach()        将数组的每个元素传递给回调函数& k9 |/ j' I  E! L
&gt; array1.forEach(function test(n){console.log(n)})
6 J2 w2 Z( T$ q; R& d2 J7 t' J4 V 1! G1 C  m8 u/ J) ?/ {9 [/ I
2
8 N0 A) V% x1 g7 J0 k 3
% O. r) j% M. |* q7 [- e, Y A+ D) Q/ F7 }% K$ H) w6 |" f
B2 J8 S8 X+ h# L: \6 V5 F3 P
C
; _: b# p7 l6 t6 ]" g8 ]$ K// 返回一个数组元素调用函数处理后的值的新数组0 Z! f% Z# A& l, q6 G. a
&gt; array1.map(function(value){return value +1})
5 {0 i! `2 L2 l) B* J$ H(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']& X8 R! s7 ?* F
</code></pre>6 F9 C. }; s: {' @3 D; H6 h
<h3 id="24-运算符">2.4 运算符</h3>
$ D; u; M. N; X<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 b, G4 I: J$ K6 }7 \<p><code>+ - * / % ++ --</code></p>
* H$ u$ `. ~8 [1 Z- Q<pre><code class="language-javascript">&gt; var a = 6
$ {* v7 X" {8 h$ ]/ X/ [4 r&gt; var b = 3* C5 D7 A4 J" y# G! N
// 加
, c( }+ ?% q5 x. m6 f! \, c&gt; a + b
/ ~5 b' U3 b6 ^6 Y: D9
) Z1 [. h4 h2 s4 Z- Y4 Z4 B3 m// 减! j  N; O0 L8 d0 |
&gt; a - b- X- Z1 W; \# t: a# R  {
3. M4 f' v' ^! H* P% Q( Z/ f. u
// 乘$ s9 m, u& q7 u5 [. z
&gt; a * b
  L4 E# t/ u+ p0 B3 x  m$ y180 N9 C( g% M1 a+ u+ m
// 除
" s4 i, S5 h5 Z9 u& y: T, w# V( `: v&gt; a / b. [! q8 D8 |+ [- [! }9 U0 r
2
# S6 h0 u: o3 d+ `( Y// 取模(取余)
8 ]9 W" d. G' A% j& D. e" X&gt; a % b5 e4 _8 J* {' v% @
0. `1 G2 N! h7 Z
// 自增1(先赋值再增1)1 Q! k. x0 F# m3 D% ]
&gt; a++
' [3 P. I9 Y, F; h8 s6
6 @$ p5 G- s; n8 P8 B  D* D5 a" A5 D&gt; a
" z* M3 p/ {: H7 J8 U( f72 \( P/ X) G1 b+ s! Q
// 自减1(先赋值再减1)" k; X3 q6 `' B' c; y
&gt; a--
+ w8 o5 M1 I6 `5 ~9 o) `+ ^$ ]75 T+ s3 c2 s9 G0 U( @
&gt; a
+ S  U0 ~/ k6 B( E; U# ~( W, _. u* R2 S6; U6 |' `$ q' n# J- y/ s
// 自增1(先增1再赋值)
( w* r6 g' w2 `7 j&gt; ++a! C0 t! D! W9 a2 v1 [
7
: Q3 Q8 u* ~9 b( }, n9 g) h// 自减1(先减1再赋值)
! s5 B& l& T- d; w" R3 H* z&gt; --a
% o6 T4 [$ T9 p8 P7 p. h7 W, G9 H5 _$ o6
/ Y' h3 U' y& y0 }&gt; a
) B% ]. C" s$ o1 }) v5 B67 ^4 E: l( |0 \+ Y, A  A- P
, P! Q7 O6 _. q9 @/ d
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
/ K' W* |: u, v1 c6 `( r% |) Z</code></pre>
( }! R4 s' R$ {' {7 C<h4 id="242-比较运算符">2.4.2 比较运算符</h4>. r* N$ T+ w- }( F, ?! }) g
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
+ K) I1 M% H( [<pre><code class="language-javascript">// 大于
4 A% ]0 h0 t5 Q9 t&gt; a &gt; b
! |0 U9 z2 j# d4 }( n1 qtrue
/ ^( Y$ `+ f: b( X9 U! f// 大于等于
# k# A, M" A( S&gt; a &gt;= b
0 Q$ F' Z) C7 K" v6 jtrue# O( ]- {% T" ]; z% ~4 M1 h. s/ S
// 小于
6 M; d; [, }7 U! r2 E; P2 q( O&gt; a &lt; b9 x8 Y6 r% q* }) T* y8 \
false
. z3 q* S- Q* s* A8 W$ P& Q& }// 小于等于: G1 G- R3 ?. N$ r0 O6 P& I4 I
&gt; a &lt;= b
% \( o* m9 [$ B+ Gfalse+ |  A8 ?* f' a" [! m7 L
// 弱不等于
9 R) ]) D  G6 `: @&gt; a != b
9 S4 U. T  C, m1 K7 |1 {; R0 ntrue4 q& U2 p* s, ]2 V8 f: `( K
// 弱等于" z' M; t2 f/ O- V% f
&gt; 1 == '1'
% J2 g& O- A0 H. T1 i( h/ ktrue
2 ^3 r# I& n  `$ b  O9 c# @) i// 强等于! p4 K1 U5 L" R% I9 W, i1 u
&gt; 1 === '1'
& ^! W) x* ]4 ^2 _( z2 Nfalse0 a: P, x7 u* l0 l; d7 _' ]% v
// 强不等于8 E( Y/ x4 Q$ N6 B" W3 H) u
&gt; 1 !== '1'
. P; K: s* T3 @$ Y) G# \6 f6 A% `# w' w  {true: N& U4 s" c4 M8 A  M( P

8 F) X4 O, @! [* J! H/ @5 V# w/*
3 I* r1 B* f2 n3 L) NJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误# p, @( _) z3 I: h
*/
4 I0 p5 N7 q) o! ?$ p</code></pre>
+ Q2 e/ G8 A$ d3 f) r<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
0 w7 [; D9 u" C8 u' w4 F6 f% D$ m<p><code>&amp;&amp; || !</code></p>
1 t% k7 M  i# a/ |% w9 l& ^<pre><code class="language-javascript">&amp;&amp; 与! _/ N! v. q, P$ l: X8 O
|| or
! J$ e' Q5 t: \. r! ?7 ?! 非
, h) @' H% r* M" Y, v; A* e</code></pre>6 b# z) t* {3 [: ^6 I% e& C
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>4 K: X8 l5 D* V0 J- b
<p><code>= += -= *= /=</code></p>
9 k; g4 a+ d3 B<pre><code class="language-javascript">// 赋值9 m$ J% p; p& \+ ~& {) u( m
&gt; var x = 3
7 N7 A/ i( X' S8 l0 F3 d// 加等于! P$ p: j( J1 Q4 H0 [5 N) _, a' @
&gt; x += 2
7 M; M7 l$ s5 q8 U- Q5' `1 \1 Y( B  G- {* L
// 减等于7 ^0 F0 k: o+ G4 H2 N
&gt; x -= 1' `5 n% S8 A, Q# H* [' [: S3 N
4
4 j- p1 O6 Q2 C6 M- A! L0 U) S// 乘等于
$ k3 [  B7 ]7 `1 {6 v&gt; x *= 2
* I. C/ ~% ]+ w' P4 q89 @1 h( u5 _% S! I* P8 p2 T
// 除等于
9 ~: U, ?" y7 |' d5 R, j9 c( N1 D&gt; x /= 2  A8 Q9 X( N' S9 ~; B$ x) Q
4
/ S! f; {7 F0 c8 g# |$ r</code></pre>
- T( N4 p2 ?9 X* U<h3 id="25-流程控制">2.5 流程控制</h3>
) j- F2 S3 |0 T7 `<h4 id="251-if">2.5.1 if</h4>
9 _0 z3 O- Q2 V' M2 f% E<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
2 I1 M# h8 C: w5 T4 W. C) @! a' [4 M5 S
&gt; var x = 3+ K$ s0 _$ ?$ v& L
&gt; if (x &gt; 2){console.log("OK")}1 `6 M% ~  w! ~6 z8 x; m" v
OK) \: p# I# S) [4 t3 J. M
% f# I* u! B) n+ T7 a7 m- B
2, if(条件){条件成立执行代码}
1 h$ y& d. W/ G8 t% m4 R        else{条件不成立执行代码}4 D. h. \( T, w& K  m6 w' Y( Z1 k% u

5 E' A  A- {9 K. h&gt; if (x &gt; 4){console.log("OK")}else{"NO"}+ o* ]4 D! E* K4 d
'NO'
; M: U+ c" v! l8 Y/ }0 d; r1 [9 C1 ?9 P
3, if(条件1){条件1成立执行代码} / @. I3 o) C" h3 [. a, f; |  ~
        else if(条件2){条件2成立执行代码}9 g/ h* [! M6 x1 z
    else{上面条件都不成立执行代码}: B/ F; f; T* m) _5 c) S1 ]
3 [+ P5 A9 ?" \" [+ d) c
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}" x1 y9 v8 ^9 w8 n  @! A. W2 B
Ha0 k! P; V0 \1 X
</code></pre>
6 m6 _( |5 P$ z  ]9 }1 q: d<h4 id="252-switch">2.5.2 switch</h4>
6 c& b& t  }" x# U( ?<pre><code class="language-javascript">var day = new Date().getDay();
$ L% J8 W+ _! `switch (day) {) T- S8 l+ v! q4 A/ R3 j2 z
  case 0:  t1 ]0 m: R* W' H* U5 ]6 L
  console.log("Sunday");
; f- P2 S! h9 L7 g, o  ]! e9 ?  break;+ x+ c1 M9 u1 E3 o2 w+ `) z
  case 1:8 X8 f' C: Q6 k( P
  console.log("Monday");' Q  Z$ T4 T1 J
  break;
% A" J: P8 ~, {( ^: Odefault:$ h8 {8 n. Y' g1 }" f; N
  console.log("不在范围")
6 q2 _/ d( E- [1 ~3 s' K- P}! z2 g/ v8 m, b4 _2 |3 a: V
不在范围' O7 Z6 Q8 Y4 t' w& m( F9 B4 R
</code></pre>
/ e* V" [1 L, T: w<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
' ]8 x0 ?: _. p- i6 R<h4 id="253-for">2.5.3 for</h4>: G) |; G" L# i
<pre><code class="language-python">// for 循环
+ K! [2 Y6 b4 k        for(起始值;循环条件;每次循环后执行的操作){
8 D' a$ `& J5 ?& J8 M5 t        for循环体代码. A- e  z3 p% `4 @
    }
$ M& C- |! G1 f, V
0 j" X/ i# A1 w3 O5 U% j% [. sfor (var i = 0; i&lt;10; i++){) @! S. s0 w! V8 W3 M% z: N
    console.log(i)
6 }  C- p( v) k$ V* B7 \7 t# m}# n4 O: t: O0 k5 \: \! O
        0% w+ I7 n& s7 w( @2 ]7 {
        1
  \  u# J- I, ]2 I        2! X- A5 F* _4 g9 M4 m
        3
: O2 s9 `* i. @% E+ m        4
' l% o8 c, {3 r- g2 ]2 C        56 D8 O0 e# T/ N  h$ }! M
        6
3 n. V- T& C( m6 |" l! b) A% m        7! w5 W+ A1 u4 d8 k1 X' h5 M0 B) R
        81 c+ e1 Y2 j- }
        9
. ^- w, a3 X( C  h* {: A( ]9 P8 ]+ H$ R</code></pre>% z1 i6 A) Y3 f* c# E
<h4 id="254-while">2.5.4 while</h4>
4 d9 B( c5 s# M<pre><code class="language-javascript">// while 循环6 k1 a% @. q9 |3 p) `3 C
        while(循环条件){( |7 `6 z! l* B% O7 p
        循环体代码
  S/ V7 C) n# J! Y. o0 h2 `    }. g; V& x9 \4 Y5 }6 ~: n

/ Q4 q( H0 j' H  ~9 i$ Y3 u5 S&gt; var i = 02 ^% t* o. x. `, f1 f/ i
&gt; while(i&lt;10){1 n* X+ o- E% f! o
    console.log(i)
3 r' p- D1 A& z: S    i++. P( k5 {( @# W4 A! ]4 M% ^, S
}- ?# o. g9 r- ?7 |3 u! b% V
0( r" K5 c+ T. s0 ~& P) U
1
& q% I% M; a8 P+ Q% W$ w7 k 24 u$ K* s  ~* X3 e# ^
3$ o% C: j  U+ e1 ~$ y( s2 G
4  s; M3 X& P" o, y
5( t" y: l9 J  a
6
7 X1 T# v# s7 Y4 X: t& [9 _3 n 7- L+ e/ D" k0 o8 T' z0 ~- v& x
8
' r) E; Y$ r- H* X) |4 D 9
. d. x; Z- {' E+ A5 d! k</code></pre>8 a- ~8 |6 h3 C2 R$ U( T4 t
<h4 id="255-break和continue">2.5.5 break和continue</h4>
! b. w& b8 [3 j# w<pre><code class="language-javascript">// break1 K: E4 Y8 O& v4 Q' \8 Y/ f
for (var i = 0; i&lt;10; i++){
" C$ I5 T+ X: \! e, }8 R    if (i == 5){break}8 q5 ]  E. ~+ d2 G/ j+ v
    console.log(i)
' v* f0 K% @1 v4 D- S3 o+ a! H/ S}
% @) U2 x4 o4 U. S0 c6 O, j3 q 0( S; o3 O* r1 ]5 w; ]9 T
1# i: \9 }$ l& d* T' n
24 @3 U* |+ F+ {- s0 \
3
" X* h/ f& ^& ^+ V( B6 c. x+ q) V6 k6 ^ 4
- Q0 S; X1 R' Y5 S7 T// continue# v# Q9 i4 ?& x& v+ m0 V0 M
for (var i = 0; i&lt;10; i++){2 H0 J( J7 D( c% Z0 y0 v
    if (i == 5){continue}
' Y' ~' a8 R4 n: Y    console.log(i)+ \6 j1 [. \1 E2 u  y! w4 a; p& Y- i
}
( ^/ b# G" f2 H* e" G) U/ Q 05 a- Z, H, \) C( r6 T: h, R
1
7 H, [' S* [' [; [ 2
' p+ n! I  T) R0 }, k% f 3
2 D4 m, A! x- Q2 B+ a( t& @+ V 4
% [7 I1 \. n6 F& h9 s4 V$ N) `7 h" e 6/ E6 k; R5 Z3 y6 C/ Q3 p
7
  w8 r- J9 `% n0 Z1 n( a 8
; C% X' }: G8 \$ W5 b! ?3 u 9% l% N; J! F% F! E
2 e  f& u- i; n) U( c& J
</code></pre>
9 V6 Y) a. y8 M* c! q9 {3 E6 n0 X<h3 id="26-三元运算">2.6 三元运算</h3>
$ c! M. y5 C: p0 e( \* A<pre><code class="language-javascript">&gt; a
' w' n1 ^6 b" A6* Q* _/ C- W1 S" f8 I* J  ~
&gt; b
) w6 C7 l4 _: e6 E3+ l. O& M; ~" ]" s

- `5 l4 z+ `1 M  B2 l0 I//条件成立c为a的值,不成立c为b的值
& `7 j1 F/ q& {2 V8 }$ L&gt; var c = a &gt; b ? a : b
) p$ p/ X/ `) E$ J" |, A&gt; c
8 z# A# V* i9 m' M* t& t/ u# \8 g6
1 b& @1 z+ z" u
0 Z3 e1 I  n+ L% K) a/ F// 三元运算可以嵌套+ i/ k+ G% a- r3 o- f. {3 C( E9 v9 @
</code></pre>
* k3 u  [. {8 ~$ C<h3 id="27-函数">2.7 函数</h3>$ L& H' ^$ o4 c" y7 G
<pre><code class="language-javascript">1. 普通函数+ s. m' I" D6 S2 |9 r. V/ z& u. C, n
&gt; function foo1(){1 d9 h) N4 b; L$ i. @( z* _, B7 j
    console.log("Hi")0 m: c9 E4 d1 H
}
, O* l: b# P/ p
& t9 k: L3 B9 S8 c/ ^&gt; foo1()7 ]- D9 _7 `  G9 Y, g. Q9 t
        Hi% U6 f% y. \4 G1 ]9 D# z
2. 带参数函数
+ ]- W8 N; u' h4 d( j&gt; function foo1(name){
* B, U0 K; I3 u/ N. L( Pconsole.log("Hi",name)/ Q  D) |2 K, i" o. X
}' V) O# L- l8 X* T: P+ T

! c) G* L& u# @( b$ E: S&gt; foo1("Hans")3 Q# [& o& u$ H: M9 Z, J2 x: S" R
Hi Hans
+ x. _! K  X" l6 k' z9 Z+ n
3 A+ E( ^% j% B& c6 S&gt; var name = "Hello"* `* Y& A& m$ i4 ^
&gt; foo1(name)& N% j- q- ?; N* p- ?4 r
Hi Hello$ s0 M: @( U" q# f! t

- P) k1 Q' C3 ^! i" w" @3 c3. 带返回值函数  x% s; D$ P% H6 x$ }
&gt; function foo1(a,b){
9 S* H7 g1 w& V! x9 I- h- }% `. p        return a + b   
( [$ _! M2 ~8 Z}
; v9 Z+ S. Y0 r# Q; I$ j7 b&gt; foo1(1,2)* K3 h/ j3 E/ ?* g4 g
3; E. a0 e, p. s
&gt; var a = foo1(10,20)  //接受函数返回值
2 E; n! A% [# o, T9 n* `&gt; a
% H' y- B9 h+ f" q30% ?% V; W' t: m0 I' W

) N, T( ?4 b- s4 u! r9 x, }4. 匿名函数  u- Y( v! d( ?: o8 ?
&gt; var sum = function(a, b){
( `& R  M; N( d  ^. \- z! G  return a + b;
, J) ?( l: y2 G5 i3 K4 x}4 z$ T; n; D9 _4 H
&gt; sum(1,2)
' O! \7 {$ A* a3
$ \' q5 k# N. R0 V* I1 n8 ~# I- y1 A) R" m% [" a
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
7 P* s1 T2 w, }6 V+ p- }4 I4 L" |" X&gt; (function(a, b){
* s' c7 U  L: c& K- c+ q  return a + b
3 W; t6 @, N: {( W; Z  _})(10, 20)! |0 K9 E/ y' r+ {, Y1 u
30( t5 c2 r. v( z' y: j) X) s

# l9 y- G6 P# O: o* P5. 闭包函数, A: j3 X/ M: g) I, Q9 i
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
1 ?; Q6 N. V5 u, @/ H) t' Cvar city = "BJ": h& L2 O- c9 g# Q  |( M; q
function f(){( ?/ t' K/ w7 Y/ H6 T% u1 Y
    var city = "SH"& R- ~& b9 W+ _. K+ T
    function inner(){* P9 t8 g# Z3 Z9 v8 f( `
        console.log(city); Y: t' v* A) Q0 f$ |$ L
    }
% j. K+ a+ ]# `( G6 w+ Q5 g    return inner7 b- X5 K8 b0 m  y4 R
}% I- `' i2 _) l8 A
var ret = f()
9 r' f- z' T' `1 H" _ret()% R$ i8 t! M$ ]2 E5 l( ?
执行结果:2 d; C7 V0 M: o4 \0 U4 Y
SH4 o& Z& F7 ]; i0 F1 a' p
7 P5 O3 P* H! W/ Q
</code></pre>
* S- @* ~" ?: u<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
5 ]+ I) Y8 K$ t/ s& K  n<pre><code class="language-javascript">var f = v =&gt; v;6 w% P- s" G6 j1 M0 R/ ?5 ^6 Y2 I
// 等同于
( j  g) U1 x! f+ _0 ~+ Pvar f = function(v){
9 r7 I. D( w- ?; M  return v;: E% Y; s/ c" o( i; ]$ V; d
}# H9 f  n' c: D% {
</code></pre>2 K; w* F$ q/ F, N3 _, K3 s6 @5 A" k
<p><code>arguments</code>参数 可以获取传入的所有数据</p>& B2 c: _9 z  k
<pre><code class="language-javascript">function foo1(a,b){6 c* x; I9 \+ b+ {+ N( \1 _* |
    console.log(arguments.length)  //参数的个数 ; h' [4 Y. A$ d9 D: ]
    console.log(arguments[0]) // 第一个参数的值9 G$ N# Q. [* m- Y' Z
        return a + b   
/ r# I' Z2 A2 j4 {}& @* _+ b! P5 A1 C
foo1(10,20)- I+ A- q5 m0 I$ l6 g# M- ]1 I; o
结果:1 n: a& D! g4 ^# F6 U7 z1 u) l5 F
2          //参数的个数 4 A. l4 B5 m- v7 b" m
10        // 第一个参数的值5 w9 P4 J5 K9 N) S3 T4 ~
30        // 返回相加的结果
9 R7 v7 `' Y7 R7 n- W</code></pre>
. Z/ P3 v5 m+ E- K* [0 r" P<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
# h" _- K- z. N% m/ G5 f# Z0 V; g<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
) O* y3 X# r4 ]* N<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
; t# q0 G7 @6 W+ E<h4 id="281-date对象">2.8.1 Date对象</h4>! v/ t8 ?# K* _" b/ X
<pre><code class="language-javascript">&gt; var data_test = new Date()
, n. _8 O* m8 l! z: C9 b&gt; data_test
1 v" i! d& K  N0 M9 hFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
4 v5 v. p$ g0 ^' D  B&gt; data_test.toLocaleString(): K6 b! m) t$ v* `. N
'2022/2/11 下午9:44:43'
* o# z# U# Z& [' z6 x$ f# \. h
* w: V2 V5 v1 j) v0 `&gt; data_test.toLocaleDateString()8 D$ G+ w3 q  K
'2022/2/11'9 O6 B& }1 _# \. S; k

& r( g% i" G* H( Z" S* v6 O% Q&gt; var data_test2  = new Date("2022/2/11 9:44:43")/ N4 k* B8 q% p3 D2 k
&gt; data_test2.toLocaleString()! A2 H( ?, Z3 N3 ~& H
'2022/2/11 上午9:44:43'
. W/ z! Y4 D8 a: H* T, z- w2 T' G2 ], ]8 q* F
// 获取当前几号
9 S, @- x3 Q1 P) ]2 I1 `9 r&gt; data_test.getDate()! E* t. D/ i& ^
11
1 ^. v) z7 X2 z7 _' }/ K- j// 获取星期几,数字表示, ~; j% C$ M8 T
&gt; data_test.getDay()  " X  X  U" n% T
57 [, D8 I# O- j% a; T
// 获取月份(0-11): N/ u- V/ y+ @7 K
&gt; data_test.getMonth()
6 ]- f9 s3 p/ C1 E" W: A: F! S1
) f7 B/ s0 C* l- O8 y% E// 获取完整年份
7 D% R2 \( o& ]&gt; data_test.getFullYear(); A% E( u6 ?; E( P% X4 }1 E& x% f
2022
/ I4 c# y( v) w4 ?// 获取时
) g2 W; B% E+ l# l&gt; data_test.getHours()
, Y5 @5 j( N" z6 t! Q% n* q9 J21
0 `; k: Y+ [- q2 b: [  E1 a/ X// 获取分
; _8 I# x$ A% \0 d1 i) `8 b* j&gt; data_test.getMinutes()2 _7 k, V+ o% Q8 f7 n
44# v5 ^8 H7 P9 y; S7 \
// 获取秒
# d: k5 L& q* W) i8 @8 P% E# S&gt; data_test.getSeconds()
, N2 m  D+ d0 L4 K4 S( H* ]1 }$ j43
+ ^" \8 H) ]7 j// 获取毫秒7 y" d7 o2 l& t/ d
&gt; data_test.getMilliseconds()
1 ]3 D8 T3 h) j7 D3 O290. x8 b$ i% _& ~0 H" C
// 获取时间戳! a+ U+ e- Q8 s8 f$ _6 H1 I
&gt; data_test.getTime()! \. ~+ I4 L% Q+ H# @9 b. k
16445870832906 P7 m1 H! |6 E3 y$ @3 P
</code></pre>
4 @- ?, s& o$ z4 b<h4 id="282-json对象">2.8.2 Json对象</h4>
7 ?9 Z  F- O! X6 I0 v/ z<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
' w0 S; z# K4 k0 b& }$ {JSON.parse()  // 反序列化,把JSON字符串转换成对象2 r4 b' c/ \2 l/ ?" `4 Y6 V; Q
: P9 H- B8 G9 J: G( X; C  r
// 序列化
8 c* V. e2 [5 {( x, E% w3 ^3 w&gt; var jstojson = JSON.stringify(person) 9 [1 h( f8 u+ k  {' \  r) k! Y
&gt; jstojson  ( J" `7 ]/ n! L$ v9 h: E4 u) \
'{"Name":"Hans","Age":18}'2 j  {1 O) {6 N  W& F0 a
8 ?) Z$ C- k" z% S
// 反序列化" n! i' f, `# r8 _, K! Z
&gt; var x = JSON.parse(jstojson)
9 X: w% v( a/ x6 X&gt; x$ K- ~9 ~" ]9 F
{Name: 'Hans', Age: 18}" L2 I0 i0 M6 V1 y/ \% i- ~. Y
&gt; x.Age
/ l, M% Z  L. g, m; ~+ N- V. i18
5 ~! I7 Q5 C( ]  T% \</code></pre>& y& C" J6 k; ]
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
+ r' l8 m' W& u3 s<p>正则</p>
$ d6 _- b2 w: W, J  D* F<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
0 O7 c9 F  K' M% `" ]" b6 X&gt; reg1
2 J" ^3 S8 J# X/^[a-zA-Z][a-zA-Z0-9]{4,7}/
2 P6 A9 k& D1 S+ d7 B- J. t# V7 }&gt; reg1.test("Hans666")8 G) K2 d( h" x  S
true. B0 i% E7 `/ l2 p/ Z% x
0 O+ [6 G9 V( i  h+ x' ~
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
6 i/ s! k# o8 F' X) g6 O5 _8 s" U&gt; reg2+ l* r7 c; F5 q1 Y
/^[a-zA-Z][a-zA-Z0-9]{4,7}/+ M" w$ G5 I  m: M8 E; _
&gt; reg2.test('Hasdfa'); H& \. b9 S6 k. c( W
true- C4 W, y- `  J1 ?
+ p. q6 Y1 _  _/ Q1 d
全局匹配:4 U0 p# l; {  G$ N: V
&gt; name
( ^! T  l& [' ]# D( I'Hello'; f- g% b2 z6 B( u# r
&gt; name.match(/l/)
  B% f; `: R5 D7 t['l', index: 2, input: 'Hello', groups: undefined]1 u/ w& [6 n0 Q  N- G: _% I' E

1 U2 R* P+ k0 s, s# B' j&gt; name.match(/l/g)
7 L  k% ?+ j( c8 s% B& }8 n" d) t(2)&nbsp;['l', 'l']% @) b8 ^0 {+ g1 `' t
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配0 V. V4 ]# q6 N7 i% C! D5 E

, f! z; A* _! O2 G全局匹配注意事项:2 @; D6 N7 w' K1 U: A9 ~
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g$ O( l: `$ Q/ i/ ^, K* h- a
&gt; reg2.test('Hasdfa')
! I; D  H$ n+ y& ]; qtrue% z! B1 {" u4 n4 d
&gt;reg2.lastIndex;
7 o% a$ S% F' C" t5 y/ u, H67 w* T2 N# i2 q! I  R- V: V! ?
&gt; reg2.test('Hasdfa')% S, M: {' g8 Q6 ?/ s
false
. T% p. x# x7 [% |: Y0 \5 u' m3 J& \&gt; reg2.lastIndex;, W6 A, i& J0 x4 y; l* v
0: T$ |" ^  ~! S5 f, T' N
&gt; reg2.test('Hasdfa')
  V7 I$ Y1 Y9 i. g; G: J9 |' htrue
4 U) q3 H. j$ h+ u&gt; reg2.lastIndex;: x# G5 v3 Y; d
61 S; d* q; M( N' _, Z$ K7 q8 E) _" w
&gt; reg2.test('Hasdfa')5 h0 R7 a( u( g6 Z/ W
false
: `# O+ }0 V/ p; |; y* x' a&gt; reg2.lastIndex;
5 c4 Y+ j3 t3 I% V, `0 e; f0' ]3 k; ]! b) `
// 全局匹配会有一个lastindex属性: ^7 I' D0 i& q/ \/ b
&gt; reg2.test()
5 }# t3 K% P# n" T$ Ffalse
2 E2 o) x7 @/ z& y. J, w6 k&gt; reg2.test()- {, n, P- O" l7 R3 }4 s
true
. f0 s* j+ K/ G9 _  g& W1 G// 校验时不传参数默认传的是undefined6 D; i/ T5 q/ x8 s0 i% _3 |3 u
</code></pre>
: j% m  ~- A5 ?3 v6 ?<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
, p) z6 |6 ~. S$ i5 S<p>就相当于是<code>python</code>中的字典</p>
( i4 e( D0 i( l; y<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}+ C) D5 E4 c& l9 O
&gt; person
5 J- K) q4 A- |; f  Y{Name: 'Hans', Age: 18}; w# z; o( V; S) D# H
&gt; person.Name
# [4 A0 m' W" K7 g: q* P( ~'Hans'
; B3 |3 \9 L" q" v1 v&gt; person["Name"]
" V2 P: K) \8 b: [+ U'Hans'
. f1 }$ h5 o( A% L+ }4 j" Q+ L5 A) `5 ~5 E  j5 [, @
// 也可以使用new Object创建
% \; y/ ?6 G8 i- t+ J7 `&gt; var person2 = new Object(). k2 E) [" s& W' e* c5 L  _
&gt; person2.name = "Hello"% [2 M% t* E4 ~) e! a6 y$ ^4 D
'Hello') T" a# Q5 O9 _
&gt; person2.age = 20# [6 t) J4 \6 W
20
! z3 v  k: p6 d4 C3 Q- I2 c. S</code></pre>( X6 Q% _4 }4 s" i+ x: c+ d
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>' L3 e7 W' ]- v2 w* L+ I4 x
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
; S" f0 }# F7 a% ^: d  T  h, o2 ]<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>1 ]9 Y- @3 V( D9 x% x7 f8 ]
<h3 id="31-window-对象">3.1 window 对象</h3>
7 v; g( X1 I7 w) ?$ M* s<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>& I6 q' n/ z# K  \
<pre><code class="language-python">//览器窗口的内部高度
8 b6 F2 M: _: x1 }7 f  Lwindow.innerHeight ' B4 `# l0 i# x) n, v. b
706( n& ~1 }, e5 f% l' G
//浏览器窗口的内部宽度5 D; w- {, \+ L, ^! ^# w; L3 j' v
window.innerWidth4 }0 a# F0 n' h
1522" n8 b2 J: P# R  h* w7 t! g
// 打开新窗口- k& |4 q( @7 Q, z8 M7 h
window.open('https://www.baidu.com')
& a( E5 m- i" s) g1 u  T8 s# m; FWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
0 [' b0 ~+ [7 [! D) y: W' d6 u// 关闭当前窗口- ?: k+ e2 ^7 ^
window.close()
  W' p& R( S/ `//  后退一页% }& i! R" G6 i4 ~9 b7 a
window.history.back()
& }+ t+ u1 z' n! s; D0 m6 T// 前进一页
* J1 B# h6 a: \& ^; z: I( rwindow.history.forward() 6 L- m  U; w1 z* e/ A4 b
//Web浏览器全称4 |4 C9 {8 y  C
window.navigator.appName& ~$ q( l4 p" Z/ Q* S5 u
'Netscape'* c: T' n2 v& F" h/ A1 Z
// Web浏览器厂商和版本的详细字符串
- w- o+ O3 ?7 U- Gwindow.navigator.appVersion! q6 ^/ f0 f  z& P* }
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) R& ]9 l/ Z" y+ q. F+ u; X// 客户端绝大部分信息
9 ^- C: V1 F0 ]5 O& k5 }- awindow.navigator.userAgent+ T1 d3 o' }/ g2 e% w; W; q
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
4 k- }) I5 f& @// 浏览器运行所在的操作系统5 k! e, w+ \. i& a  z7 I0 K
window.navigator.platform1 E; x9 c  y4 P: K: }7 x
'Win32'( C0 _8 V! j( N; `& z
) i# f: l/ q% [# x7 w; T/ h
//  获取URL4 }2 r6 ~# A9 j, e7 Y0 H
window.location.href7 f0 a) y* L6 ?, V9 u
// 跳转到指定页面
6 M4 s! C5 x6 O6 T1 A9 l  o9 qwindow.location.href='https://www.baidu.com'
0 R1 b) K# @- H1 D6 |// 重新加载页面) `" w  T$ o9 Y$ X7 x9 H1 H
window.location.reload()
2 q/ {, \5 w' m1 [0 S</code></pre>1 q9 }2 Z2 I' W
<h3 id="32-弹出框">3.2 弹出框</h3>% G- p0 A+ c  ^5 M  n9 w
<p>三种消息框:警告框、确认框、提示框。</p>5 O( W$ @5 z3 f0 k2 p
<h4 id="321-警告框">3.2.1 警告框</h4>
9 K- ]# |7 W/ ?<pre><code class="language-javascript">alert("Hello")
, h0 P1 p+ ?+ o3 X# V</code></pre>
* X; p6 j, s. O9 O' ~/ j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
6 _! B8 x) \9 A2 ^8 l  o& P<h4 id="322-确认框">3.2.2 确认框</h4>
5 a0 e$ L  i6 T0 R0 f+ |! f- l<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
" n' @+ M8 A/ |<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
9 j- G! G+ C5 I' N8 G9 ktrue! _$ x7 r8 x/ _$ F
&gt; confirm("你确定吗?")  // 点取消返回false9 k9 X# [/ J# d6 t2 X- x& E
false) ^- m3 x) T2 ^: \0 l# l6 p/ U( l
</code></pre>
0 C4 h' d7 `# z  p9 r<h4 id="323-提示框">3.2.3 提示框</h4>- g8 y- P5 A; C9 q
<p><code>prompt("请输入","提示")</code></p>
0 f$ v: m& l3 Z& }5 x: h<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>, ?- h" I2 K6 k
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>. b3 {1 w/ t$ R& {
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>0 h8 l' @7 W" c$ p/ v9 j8 Z
<h3 id="33-计时相关">3.3 计时相关</h3>
1 r5 \8 Q' Q' x<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>. L6 s* Q( v6 c! ]- S7 A, U
<pre><code class="language-javascript">// 等于3秒钟弹窗, G8 S: Z  G  F/ t' M
setTimeout(function(){alert("Hello")}, 3000)
" H+ c0 ^% I" i! b4 s% I' Z" Z0 Q+ V; e2 |% q( B1 L" d3 B
var t = setTimeout(function(){alert("Hello")}, 3000)% a3 Z5 W! @, Z- k8 S2 z) {
& w& }5 G( `  Y' a. h; K1 ~" l
// 取消setTimeout设置, _8 h6 G) N, |3 C( `# Q
clearTimeout(t)
0 g' T, f$ B* a' H9 s</code></pre>& Q; F2 v1 l$ L6 `5 c
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>9 t" o3 q+ H! p2 A
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
: h* o  n) M+ [<pre><code class="language-javascript">每三秒弹出 "hello" :
) y' y( _0 G5 KsetInterval(function(){alert("Hello")},3000);2 z6 W: _' p8 c" n2 Y. n$ R! a) C& z* D
</code></pre>, \) }2 e" T$ d' ~# [# w
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>$ J2 a/ L0 S0 B/ O: A% [
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
0 H+ V( Z3 C- e' D/ q* ^0 S//取消:$ g) t% C6 y/ F) {
clearInterval(t)
0 J4 O4 i; J- i; m' F1 B</code></pre>; a# U9 ]8 g" I( K* o% i
- J, t# r- ^/ j9 s7 u4 t; i' n1 s# |0 M$ n' l
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2024-9-20 01:09 , Processed in 0.073790 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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