飞雪团队

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

前端之JavaScript

[复制链接]

8134

主题

8222

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

1 K1 Q9 e0 _# G+ b<h1 id="前端之javascript">前端之JavaScript</h1>" K4 f% t, D/ A8 e( l
<p></p><p></p>4 ?% M# H5 \1 q8 ^/ |
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>  U  t) t+ n) \/ S( f9 y" t
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>3 Q; [: ~# K+ S2 o8 d( m
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>" ~; G- W- D9 D+ X
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
3 F2 M8 x( s: N+ o( |6 T" A4 e它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
6 T; R1 `) V0 H$ J0 H) V, v<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>; [1 X& P* i9 g. N
<h3 id="21-注释">2.1 注释</h3>
& f; i7 c3 a! g% `0 h/ ]* a<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>4 J- g8 O( J+ N3 b
<pre><code class="language-javascript">// 这是单行注释
' h7 u# g; K  k  X% p+ P) o/ j, [- ^) x2 E" X4 r7 _% V* l5 D5 N
/*/ `& ~* A( d6 [# b3 g2 E- w
这是多行注释的第一行,2 t! x3 l2 I, e& G" Q
这是第二行。
) P+ a* \5 {' R2 z*/
+ D3 V: x) C* X9 g; {</code></pre>& Z/ r( S3 E- b3 N
<h3 id="22-变量和常量">2.2 变量和常量</h3>
1 i$ i1 x; F; R/ \( v; ~<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>0 ~' o" ~; ]' z- L( r$ V
<ul>
% m5 Z5 l5 z; {4 ]" k<li>变量必须以字母开头</li>9 m; J) |2 R9 z5 l
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>; \8 w5 Z  o8 W) q& d: |) y3 ?* o
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
' r( \* P% i" h& i</ul>
1 ~& C) W8 e2 j2 V* ?/ ?. a<p><code>var</code>定义的都为全局变量</p>! H  C" ~) J; C
<p><code>let</code>可以声明局部变量</p>
- \# X4 N: P/ x) X% x+ W2 ]<p><strong>声明变量:</strong></p>" V( q; T/ n4 R; Q' F" ?
<pre><code class="language-javascript">// 定义单个变量
5 l  X5 g: U  F2 c2 d&gt; var name9 m# @5 p8 c3 ^9 f+ \6 L% D
&gt; name = 'Hans'. g+ |0 P' D6 ~* H: X9 E9 O
//定义并赋值
: G# {$ f5 r8 d- ^; F, ^: _  B7 v&gt; var name = 'Hans'4 {" k( p9 f8 N: K. e! J; E
&gt; name8 E4 Z  F6 h# H9 y7 }
'Hans'
4 L$ U2 N* ~) a  [
. U" T/ d+ h, O+ i9 E4 R// 定义多个变量0 G& m( b8 q- T; A4 X
&gt; var name = "Hans", age = 18
" _/ U0 w" A' X- ], ]&gt; name' j  B5 h5 F4 a2 R, j) t9 S/ `- @
'Hans'
1 M: e- m, c8 @2 M; V* v& Q8 u. a8 K% n&gt; age( d3 D2 M& y+ J8 P& k
18  M8 ^9 ^8 j6 ^$ D- P( E

! Q/ ]. J6 H( C//多行使用反引号`` 类型python中的三引号4 w9 {# S1 `4 T
&gt; var text = `A young idler,
8 ]) Q- F3 N- }9 E1 [an old beggar`$ }9 ^' H' ?; R8 ~8 t: x
&gt; text
1 D& a, @/ h! a'A young idler,\nan old beggar'% @1 N7 |( W: l& y7 {# O1 @
</code></pre>
& x8 a- v/ n+ N1 s* q8 a<p><strong>声明常量:</strong></p>2 p1 v' u, T, T/ w2 L$ D  h; ]
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
( X% _' S# g- {6 @<pre><code class="language-javascript">&gt; const pi = 3.14
. V, G8 K( R* D) i' v+ o; M&gt; pi2 y9 d4 {: A: z  h9 Z, Y! A' e
3.14
* R: [- d# y2 W$ ~9 B&gt;  pi = 3.013 y3 `8 D# A' Y; ]! t, }: q8 A+ y" E
Uncaught TypeError: Assignment to constant variable.
$ E: {9 D' F6 B7 v0 _  j% t    at &lt;anonymous&gt;:1:4
, x+ e" ~3 c, Y! S5 T
/ ]  D) F/ x7 m! R9 J" _/ P</code></pre>
, c  @2 n4 [: }3 h6 f# W<h3 id="23-基本数据类型">2.3 基本数据类型</h3>  s/ h8 w0 j  ?( c
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>( h8 ?: F+ g/ c2 s, P$ S
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>5 U! T3 {# o2 ], A1 U+ I
<h4 id="231-number类型">2.3.1 Number类型</h4>. l, c2 V6 H& C* m6 M! L  O( K+ W+ h
<pre><code class="language-javascript">&gt; var a = 55 @) ~( \  R; m. ^
&gt; typeof a   //查看变量的类型  ( m; K' G& H. J; m* o9 D, [
number7 r( Y) W! C# E$ E" X: V
9 M: A: O* n. _" p
&gt; var b = 1.3
5 o4 }, g8 x% M&gt; typeof b
) A! [7 M8 V2 K! V7 b! hnumber
& t0 G" n, T7 X* V' A" _$ w" u  Q9 ~3 @% E* x5 O9 ~8 e4 {+ @
// 不管整型还是浮点型打开出来的结果都是number类型
" f6 s7 a$ I# `- u2 K8 g& \+ d2 P; S0 ]; s  R1 q5 Z2 A7 ?( w! w
/*7 `; h; Z4 B/ o! _8 `3 \# x) }6 H* e
NaN:Not A Number
9 t7 B( {5 w% u. G( vNaN属于数值类型 表示的意思是 不是一个数字  {; s& W. H3 M, h+ ?3 @, w5 ~
*/
% G9 A6 ^6 l7 B  b  X* |" t8 T- q- t! ~6 j$ T
parseInt('2345')  // 转整型) n4 }$ q& Y$ E; z2 i0 T
23457 B8 d3 D7 z# k0 S9 \
parseInt('2345.5')& N: I+ z- R/ [1 w8 v. x% z
2345
5 C: j4 `% o" L7 g5 NparseFloat('2345.5') // 转浮点型
. L/ E8 E# M" W) W8 O2345.5
4 L$ O; ^2 p$ X3 {parseFloat('ABC')( @# r4 A0 ?- T$ z
NaN
7 J" l5 }& s- o' |6 V8 R& J- I! _parseInt('abc')
2 }' `* X4 {  _1 ~6 D0 b% y8 [NaN
& D8 x  V2 H, B* t5 T/ F4 O</code></pre>8 q+ g" o$ @' a* I
<h4 id="232-string类型">2.3.2 String类型</h4>
2 O" }) U* b% i" d+ K2 }/ R<pre><code class="language-javascript">&gt; var name = 'Hans'0 v  o) d$ D8 K5 D; Y
&gt; typeof name
. P; E1 @" t' ^! ^, B9 T. n5 E'string'
# G! B" c# z2 F' W8 y# O( I- @% h2 p% p( v
//常用方法) ^  K0 o' u1 C/ }. W! {- E
// 变量值长度
: d' X9 @5 K9 Y8 x3 ]! r! I&gt; name.length% x* ?0 k& I. K5 |. q4 J
46 B( J5 m/ L, ^% c+ n' P, e+ y' E9 b
// trim() 移除空白
/ I9 ^) A3 \# Z- ]7 x* c0 E&gt; var a = '    ABC    '
8 u2 i' W. H! e) p& o4 n&gt; a
4 f$ R. R8 J; p1 ['    ABC    ', \9 Y6 w- Y- d- \3 A0 k* b/ p) R
&gt; a.trim()5 W0 z' H% A1 D( [1 k# k6 H- |$ y- e% v
'ABC'
! f! w3 e* }, y! K8 _//移除左边的空白8 C' y+ F1 m4 |2 C6 d7 a
&gt; a.trimLeft()3 R" u3 S2 N/ s
'ABC    '
5 a4 n( h' N) L; a//移除右边的空白- R5 V- J+ D1 x, m4 e& `
&gt; a.trimRight()
) A. O, v. J  ~3 z9 D'    ABC'0 N' t5 ?0 w" ?: ^8 E- x$ V: N
0 B8 O. o$ t( O+ {- z. k3 \
//返回第n个字符,从0开始& z* g; j# p. F( B+ v
&gt; name1 W) n  v$ {9 o: t5 e5 o
'Hans'! [, ]7 l% l& j1 s
&gt; name.charAt(3)
: \6 M1 X5 {* z8 q4 W: m's'
  U! ]: Q$ h2 }4 t- @! }' q1 L& R&gt; name.charAt()' i! j" s* r  _" w8 O0 Y' m; S7 i
'H'* r# ~$ i2 S' o/ o1 |9 ?6 i" y
&gt; name.charAt(1)
* |) O5 }' _0 `/ X9 h9 S8 m" T'a'
$ d4 n  J6 L. P$ ~9 y/ ~
$ Q  Y$ Y' h9 I3 L: p  i' u& c- I5 _// 在javascript中推荐使用加号(+)拼接
8 ~/ a. Q8 y6 i$ ]&gt; name; H* V4 l) n& J
'Hans'2 w( e( d9 n. f( P
&gt; a
& O. t% @5 r4 r' ^% M'    ABC    '8 n5 ]# M+ [& b" q- x; K; ~9 }
&gt; name + a
; R6 W" K& F2 G" e7 O& m. R5 Y. J'Hans    ABC    '
' d0 A/ B5 Y* B9 q  J4 ~3 x2 a// 使用concat拼接
0 a* R' W3 R5 Y7 g% R&gt; name.concat(a)
( n* [6 f- [" \'Hans    ABC    '& m) s0 u5 h3 F& w- p

/ t1 ?3 y5 O8 g# @: Z3 M, {//indexOf(substring, start)子序列位置
# s& \( A( W9 p6 E2 b+ p: A5 c. I+ U- I: g
&gt; text. J& v3 X/ Z( A9 X4 i# l
'A young idler,\nan old beggar'
( u0 g5 H) d, H' J# A. ?&gt; text.indexOf('young',0)1 y1 W6 z  i2 R( m; _$ M
29 p' R( L" b6 c$ U* i

' O3 R7 w1 B. ^+ r) K! T//.substring(from, to)        根据索引获取子序列
8 b* H% a; b0 }- d( I4 n&gt; text.substring(0,)1 r7 n) M2 j. z2 L9 h  m& [
'A young idler,\nan old beggar'% W: M' u2 m& s
&gt; text.substring(0,10)4 ?: R* [1 c+ b/ X( p/ G) J
'A young id'
& ^" P0 m$ n8 ?6 ^0 P* p/ X. P
2 z* `6 R5 n) w: Q' k! c$ o3 C! S// .slice(start, end)        切片, 从0开始顾头不顾尾2 z* ^6 x1 C1 j& Y, ^
&gt; name.slice(0,3)
$ @# h# w9 }8 x+ \'Han'0 B6 w+ p' a2 F; m7 Z
1 V- C; q+ K1 h/ I$ Z
// 转小写
$ X( p% N5 U! @: F- p+ I&gt; name
0 C4 d  L# r( a7 c) u. }'Hans'
) `/ k* p7 v! Y&gt; name.toLowerCase()
6 a; U+ t& _. K: Y# z'hans'
9 Q1 x* M% q! B) E// 转大写
$ c1 A8 D3 c$ H7 o! s, h1 a  J' D&gt; name.toUpperCase()
# q- Z' a* v) G) M- L6 t9 D'HANS'5 P9 N( H& A/ ?3 X) I  M
2 I( `' n2 `' v4 m( i) O0 G- ^6 D0 Q, m
// 分隔, O3 g7 m8 \$ v: Q" f( s
&gt; name) K1 I7 B8 u- c6 `, [. y' O
'Hans'$ u+ a; ?( v. Z0 _) \
&gt; name.split('a'): F' f7 P) G- y% l- L
(2)&nbsp;['H', 'ns']
* w' u+ ^" v( C6 F( w6 f</code></pre>
) F! ^1 r) [2 o<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>4 M+ N' |" u( N+ z/ e- y8 |/ Z
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>3 P) v7 v4 a  A' N6 n
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
, R1 u& Z, L) o2 V% i( }- J5 z<p><strong>null和undefined</strong></p>
! W* s! o. N4 c3 N: g* W- d% y<ul>; Q- S2 F' A- ^. X% B
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>3 a% w; F7 V& E& y: Z6 d8 [
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>4 y- j/ _9 P/ R* y4 t! w. [' L# @8 i3 `! b
</ul>1 S, J1 ^: _' X
<h4 id="234-array数组">2.3.4 Array数组</h4>
0 j! O6 ?6 i1 V" ]<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
7 x5 {: E( ?! j/ o  u% c' \: @<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
; d- s% \* P2 W: o& x4 N( E3 O&gt; array19 d7 @/ I; D6 r' _- @" Z9 R' R( q+ z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 _% O( t4 ~- J- E- v2 q&gt; console.log(array1[2])  //console.log打印类似python中的print, m9 i' u6 ]2 K4 }- D0 ]
3
1 n7 \7 J1 [: A8 |// length元素个数. y7 _" g' X7 }' I1 f; {( u4 p
&gt; array1.length9 l$ V" W; K  H1 |
6
2 m& C  S' y, o/ \// 在尾部增加元素,类型append. o, b  g0 _7 w6 m
&gt; array1.push('D')
( C, w" P2 ]: A: K' f7
2 k: W! B: V9 X& O&gt; array1; Z& h4 w/ P) `' C$ T: N
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']& Y# s0 N$ J" o* o
// 在头部增加元素
6 T8 b) s0 T& d$ _&gt; array1.unshift(0)
! B" ~/ z: t1 A8: i6 ?& N7 j7 W3 x, _6 d
&gt; array1% w2 |3 u8 n6 ~# m( `
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% Z* M& [* Z6 X, ^( L; N
5 K: b6 g! J2 V5 ^( f
//取最后一个元素1 B6 ?5 z/ F! h3 V/ F( X$ Q
&gt; array1.pop()/ ~4 [5 X4 Q' W+ I: G; d* I2 K- v
'D'
3 b1 T2 {2 S5 J1 u! O8 [&gt; array1
8 K( |% B0 A0 P$ o' T/ k# w, j(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']( B& g% h+ f$ n; q/ _
//取头部元素1 E- w4 L/ i9 r3 n
&gt; array1.shift()
: Q" r5 `' E' c( Y+ f. ^' b0
5 ~; P4 ?! s: L& e  Y: d&gt; array18 Z3 g) e$ a& [% k; m+ s
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 A( L8 @' y; {" l% _
3 |$ o4 E# R% t2 A3 d9 y; m6 G//切片, 从0开始顾头不顾尾3 Y! S4 _2 i8 h& _* _) A" C2 L( c
&gt; array1.slice(3,6)
4 T% n$ f, P  x# Z; \0 x(3)&nbsp;['a', 'b', 'c']- q2 e1 z5 N8 G7 l+ u" `9 s
// 反转
0 Q  R. U" S5 j, S0 @1 r&gt; array1.reverse()
( _7 p; X- R2 n* y: h(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
# s% B5 W) P0 f// 将数组元素连接成字符串
; k2 @$ F9 z" A9 a&gt; array1.join() // 什么不都写默认使用逗号分隔
( N' m! x( `( f4 f: Y5 ^, e7 R'c,b,a,3,2,1'2 N! g, F  C" R/ Y5 p) A/ D* x
&gt; array1.join('')
! |3 I8 O- g3 A'cba321'
6 o+ {+ l+ m. f6 J2 B* J&gt; array1.join('|')
2 l) `) H/ c' r- |' q8 u" k'c|b|a|3|2|1'+ T2 b9 H" u3 h% i" C! k

: d7 p+ X" z: \' i. \// 连接数组: v$ ^9 ?8 m: B7 W
&gt; var array2 = ['A','B','C']
2 B' Z5 G$ o1 U6 E7 F$ [; t+ b  }$ |&gt; array1.concat(array2)
2 s; r4 X7 X+ h) y(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
! x& e2 Q& x& F( ]. {, R% f* d( F% g9 x! U  p2 y6 }
// 排序
4 U2 G- r; Z5 l* ?&gt; array1.sort()0 x( V0 i4 |7 s$ i; @6 R& H
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 _, Z3 x3 H, L8 |2 U# N# n* P1 k! j
6 |/ r' L* r$ c+ a// 删除元素,并可以向数据组中添加新元素(可选), p7 a4 Y$ t% J5 r2 K$ c/ P
&gt; array1.splice(3,3)  // 删除元素* B2 X+ g1 V5 \# d2 }9 Z9 v9 f
(3)&nbsp;['a', 'b', 'c']3 c/ z- _; l% R' Y' Z1 K, S4 j
&gt; array1
) a( O- q  {9 [$ x7 }(3)&nbsp;[1, 2, 3]
* E9 z  S" s* P8 z9 v+ K$ ^5 M&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
( S2 q( a! R8 O0 ?" W  [[]! o5 i7 ~6 U7 r. E0 h; ^6 N
&gt; array1/ W9 y% W+ y$ C
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']5 J9 r' k, N3 [$ D6 C

& l8 t$ d) ^  V# ~* H$ T/*
: B6 W, u% ^. C2 zsplice(index,howmany,item1,.....,itemX)
' Y* h7 j! G, @. k2 Gindex:必需,必须是数字。规定从何处添加/删除元素。
' F  T8 {6 U1 U. Khowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。" F" R, d2 T: X8 c" v1 b
item1, ..., itemX        可选。要添加到数组的新元素( A1 P- k: `0 K( o3 |; _: {) e) l
*/) h# ^+ s* l& m- \2 L$ o- F8 _1 H
. X% I# ~9 k1 t0 C5 I- o
// forEach()        将数组的每个元素传递给回调函数: W" j/ D8 [4 a
&gt; array1.forEach(function test(n){console.log(n)})$ E. _+ U! ]. d! _2 k( C" x3 K
1
: I4 B: }4 g- W, P  w: } 2
9 W% ~5 L7 i6 q: x2 m' F' J- V# q 3# \, s2 R7 X( X
A
- h6 U3 T  \0 Q/ @- v; z B
6 o+ ]. j; E2 Z, {8 w3 R9 e+ @# K C
4 m! ?9 v2 q7 U# |0 i// 返回一个数组元素调用函数处理后的值的新数组
/ c% h# i# N1 H  W8 j+ l&gt; array1.map(function(value){return value +1})
+ a& D# E) t( v(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']( D1 S8 c4 x( U9 J& I* H+ R
</code></pre>
, _: k: `. `6 t1 `5 ^$ K3 j" `<h3 id="24-运算符">2.4 运算符</h3># X; h% Q- {1 d& ~- ?
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
. p+ P' g8 f- _' C* q- B<p><code>+ - * / % ++ --</code></p>
* B; r, C: X* Y& _3 f" N<pre><code class="language-javascript">&gt; var a = 6: D  _8 A9 {! g5 ^
&gt; var b = 3, k) O( L9 q. t1 K) ?3 m
// 加2 \" H+ ]; b  s5 e1 {9 r$ I
&gt; a + b
2 U* W2 Q2 P; S/ `& A$ `2 E9) O% e6 j9 Z& L1 I( G1 x8 K
// 减9 K, P0 A# P( ^% c8 X
&gt; a - b
/ t; x9 B" p: }3
0 S7 V# b7 {; F9 r0 p9 M, k: z7 P// 乘) {9 I7 R, c" S
&gt; a * b0 R" }  ?) `6 g$ j2 Z7 ?$ P
18
! i  L, g- b- d5 o3 F// 除! P: D( f3 ]1 l* N7 z* u
&gt; a / b4 ^4 A, h) @& {+ R! d9 F6 R+ ?* A
2( ]) i  v% x9 Q2 D; b( j
// 取模(取余)
5 D% E  ~5 C0 o& O! |& x3 G&gt; a % b# d0 Y3 |* K0 l) K2 m
0# W6 h. Q6 X& J
// 自增1(先赋值再增1)
4 T( w. l* E4 D7 u8 N& i( p  l&gt; a++
$ A& Z8 K6 m* e7 H% c8 K  z6$ r. H3 t7 Z: A$ i8 x
&gt; a
/ b# w8 {  L; c; b! ]6 Y" {2 G7; s# U2 ]. C. w/ F/ }0 S; Y( c
// 自减1(先赋值再减1)4 I8 f( C; a( L7 j
&gt; a--
. V1 E6 `. R2 l5 t, L" q7
" r2 m1 f) p! \, ~&gt; a. c$ I( @. e# X% y
6
/ e- h. C7 n6 y% t$ a3 h; R// 自增1(先增1再赋值)1 z/ H0 g5 X/ A0 Y4 r- W
&gt; ++a
  O& r: s2 {& f% h3 y/ ^7
$ W3 C: Y. J; U7 F: `/ J. F! Q// 自减1(先减1再赋值): h" t) z4 Z% y; f, s* c* ]/ C
&gt; --a& W9 }6 G& b+ e
6" N. P) l( W$ `9 c' `1 s8 c& U
&gt; a
5 V: _, t& c4 M6 n' a2 d3 y1 h6
" U4 H7 ^6 r" ?3 C, L3 H% ^
. K3 j+ K: i  L0 z4 \$ u5 J$ H2 f//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
9 v" h' m5 Y1 m" r2 X+ e6 M: w</code></pre>
5 y2 @6 z4 i+ T: A) Q<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  `3 _) T9 V- Z1 J$ G
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>3 A! ?' `  v( ~  I7 [5 s" W% X
<pre><code class="language-javascript">// 大于1 M" I  f6 @5 Z  r/ B, Z' r
&gt; a &gt; b9 V. M0 S4 ^& y/ n2 \+ B1 ^: ]1 |
true- M  k6 t( b5 U; I, g  L9 y
// 大于等于
0 ~6 \6 m, e; `$ A! C. t) ]  i&gt; a &gt;= b2 {% s4 b* v* j9 [- g% s5 y( d
true
0 J6 U6 j  z9 }* J7 ~// 小于
: N$ ?. S9 J5 c&gt; a &lt; b
$ ~) s" x" r; g& T1 O. {" G7 ?false
- j& @6 x6 ?5 M' T  S// 小于等于$ N& a9 r2 P7 Q+ w/ K, d; Z3 c9 g
&gt; a &lt;= b
4 @; b. o7 H& D( i! C- O) |  tfalse
/ Q$ b! x  ]% ^6 G5 ~% D// 弱不等于
# Y& u  F$ i, d. F. V8 w3 w5 {&gt; a != b
: f/ q. b; {: b- T9 v+ Ltrue
. I. W8 T7 g# Y7 T7 }// 弱等于
* ?/ X7 g: k5 H9 b1 S; T1 V&gt; 1 == '1'
" l* h9 b6 n. t: M9 Ztrue( I% g' E- l% r/ T
// 强等于, |5 `0 X( q! E# l1 Y9 T6 A/ t! c: W5 y
&gt; 1 === '1'
( w8 v- R# \0 n1 N# k9 Cfalse4 `9 A, D4 M2 O6 X( q/ r
// 强不等于
& l: C, u" N' Q1 B. ]&gt; 1 !== '1'& Q' J3 P/ g  W! p, x
true8 `, Q) ^# e& t1 f

1 ]/ K' S6 X1 @7 D3 |2 J5 W/*
4 P  h8 T/ Q$ z  D# {* S' }: TJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误+ K0 I* z, v/ B3 D0 J+ `
*/( M/ o( K! w/ c6 F
</code></pre>' Y% f& p6 }& j
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
' |- O6 G7 O2 p$ X# g  y" ?<p><code>&amp;&amp; || !</code></p>6 A3 J) \! O# n/ w8 P
<pre><code class="language-javascript">&amp;&amp; 与
% n' S5 d0 }" X/ g. K|| or : @) \% n# t: ?' G; S  V, x1 A5 ~
! 非
  @# ?. d" R/ ^6 Q2 f% M</code></pre>
, e8 ?3 |6 e' ]6 R<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
3 Z- j$ ~. M2 e; Y! G/ \/ A<p><code>= += -= *= /=</code></p>
5 T# F# X% P% ~/ T5 T) e3 h<pre><code class="language-javascript">// 赋值
2 Q( b( y2 M6 H" r$ ^1 A  y&gt; var x = 3! k5 Y3 o/ z9 a# w& E' s8 l& Y
// 加等于* T# i+ a, i8 Q. v: g3 g- \1 X
&gt; x += 2
# T: n8 t4 I2 Z) I1 k5& y3 p! I( B7 C
// 减等于
9 A* W, n( D* y  w&gt; x -= 19 O  H& m; P, t
46 P& A( v4 R" H, J$ O# O
// 乘等于) S" T% }( S( v$ c/ z0 P: P+ F' {
&gt; x *= 2
8 g8 S+ O& e" d8
3 c; i; m. P; C$ r% J; R// 除等于
& P, y$ f+ \7 p2 Z&gt; x /= 2
- r  A+ X( e1 N4 c% W& p6 F( a4. G: q2 G* Q0 U4 h
</code></pre>
* O& D# _" Y* a<h3 id="25-流程控制">2.5 流程控制</h3>
3 @) y( l8 O( k- g<h4 id="251-if">2.5.1 if</h4>
! e' m6 ?7 Y0 _; q# s4 {4 @<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
2 A, h" p- W# V) k8 M( Y* y2 a& N) b1 w
&gt; var x = 3
1 D7 j- T1 ]$ C. \6 [& K+ Y&gt; if (x &gt; 2){console.log("OK")}
  |8 T7 u; X8 ~, L# p( v OK/ y. v  S  C2 P% t, N

* D- ~% U- C# E2, if(条件){条件成立执行代码}
# K4 \6 X& R+ `6 r4 b; G) K        else{条件不成立执行代码}" D' r4 K$ i8 a/ `& E% m

! B/ }9 ?. k6 F9 t$ f& c, C# t&gt; if (x &gt; 4){console.log("OK")}else{"NO"}$ k1 C8 C) `# p( B9 t
'NO'; `) l+ p- I8 M8 q) i1 V8 f
7 q) |" q' U! x6 |* s
3, if(条件1){条件1成立执行代码}
. G( o6 ~! v& \% ?* n* B5 a        else if(条件2){条件2成立执行代码}6 `$ b) D9 h: T4 o
    else{上面条件都不成立执行代码}
0 |8 p. [8 W8 L3 R5 ]$ E7 f
- j+ o0 o% E. C" S6 k6 A5 s&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
$ c. N3 I/ }* t1 b( g Ha
' `; x( m8 R# Q( q' |( E</code></pre>
( ?: O2 ~% z  r<h4 id="252-switch">2.5.2 switch</h4>
% b, u. y' ^9 p7 R! M& F0 U" d<pre><code class="language-javascript">var day = new Date().getDay();
8 d9 N, f# B' E; Aswitch (day) {
, i+ v7 |) w# s  case 0:
6 x: A5 T: n$ f8 b( [  console.log("Sunday");
" y8 x. g: b% A5 B  break;$ Z# o3 m+ g. o- B5 G
  case 1:0 n0 `6 j3 r' ?  `2 U$ p
  console.log("Monday");
8 d# O& c' o7 K) W5 {  break;2 G, Z0 c' {, L4 s: S
default:
9 q7 q6 ]9 n9 z4 S% z5 l  console.log("不在范围")
, V# ]: r! q7 A" D& h" H}! E6 u. k. x8 r
不在范围  [2 [. P* Y. C( A1 U
</code></pre>
% v8 m, T6 Q! n8 o7 }<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
: p$ r) D' M& A' K<h4 id="253-for">2.5.3 for</h4>
$ P" H7 F- V8 w1 ]7 q$ n) d7 d- H<pre><code class="language-python">// for 循环
# f4 _  s" n5 i& s8 D! x        for(起始值;循环条件;每次循环后执行的操作){6 p. U# C( {+ J! e
        for循环体代码) H% @9 W  Z9 A) U" W
    }8 F+ n& S1 Y0 f0 J8 S
/ @. y2 U! ~8 p1 D
for (var i = 0; i&lt;10; i++){% H' `/ v9 b" a
    console.log(i)8 N, t) g; }3 h1 `  _& _
}
5 \# ^1 c. X' E: e7 t% }& H% ^0 S        0
3 q# |$ R/ g* D3 b  |& g& M+ E        19 `, o% K; ?/ R- v9 ?
        2# G4 W0 ]2 l% F7 n8 o- Q
        3
- c, l# {3 S" B% j        4. D! h$ z5 x3 ?
        57 {5 b8 o/ |" X2 U
        6  u; w  W6 [+ ~' `5 |
        7
5 u) L/ o: S/ M        8; v4 K; h( r6 m3 z0 r3 W  d4 m
        97 J. w3 F6 g" d1 t: ~3 a
</code></pre>
* \" N1 o; D$ N1 N<h4 id="254-while">2.5.4 while</h4>, r, b% X- M8 t" Q$ R  z4 P2 i" e
<pre><code class="language-javascript">// while 循环
8 a3 X' d2 J# h9 f        while(循环条件){, L: {7 }4 w3 Y" Z/ X
        循环体代码
: M8 S1 |# t9 s, L" f4 N. [    }
  c. ]/ k/ K+ o  `$ U' E
0 Q. o9 s( ^) f( X0 ?! _4 N&gt; var i = 0
9 j% q; y, w9 A# |&gt; while(i&lt;10){7 k* _! G4 Y5 _0 M6 E
    console.log(i)
; J) F; Q: z# ^# K0 f. A; h2 c% I    i++. C/ O4 N6 c) M# b
}' C* t4 f/ K0 P: L8 H
0
8 ~4 d2 D( m& S: l- ^ 15 M0 h7 O( w5 S0 p- I# k6 F
2
& L6 r1 G- ?# r7 G 3
; l. h8 I6 A0 r1 C& z; x6 r% g3 X* j 4
: N  a  h& B4 L2 f. @  h; L 5% `2 g8 d. l. a$ h5 l, W
6& `3 k2 B+ R, A' M2 W
7- q/ x3 V" I" O6 E' `. K2 g
8
: }/ J. z3 Q) ^7 j: E4 z1 e  s  I 9* U% @& U. @4 k( B1 H6 {+ U
</code></pre>( M- n: o. B4 o- J% S5 Y* E) g
<h4 id="255-break和continue">2.5.5 break和continue</h4>6 _/ l/ Q6 x9 o. G
<pre><code class="language-javascript">// break! M6 b  k3 i3 p% z
for (var i = 0; i&lt;10; i++){% I7 d$ ~$ C/ m% n/ I  `0 g
    if (i == 5){break}
$ F1 y6 ^& X! v5 |( f1 T# k    console.log(i)
+ k' e- p/ E8 E$ K% W}7 F) _, y- G7 J/ U
0( s  r2 {+ w7 M. L! y. w
1
6 w/ v1 Y) F5 S& k- j  `5 S$ y 2
5 X5 N* |' `9 L8 B6 x  f7 h8 q 3
5 O: F- \9 ~6 S& W 4
' B" a0 X$ z) K! E! T// continue# D/ s2 g' K" e5 l. k* J
for (var i = 0; i&lt;10; i++){7 ~+ L- k8 _" J) o
    if (i == 5){continue}, N9 n) J5 X) i8 v& s) x  q/ S3 E
    console.log(i)
2 D0 d& K0 L2 h; l/ v/ E& E}
! q4 {# p1 _+ \' P- {% W8 i: |! y 0
8 e( [: p! s; C9 ]4 ~' ] 1  ?) }& t5 W9 B* d3 l4 z, c, J
2
5 s7 W# L# R) ~# c$ u. ~ 36 a' r8 A3 A* \: g, }- o- Q
4. I% t2 K8 T( X8 Y  }# h) `) I
67 s0 `0 N( O7 k# L4 Z1 t; T
7& Z5 T& H6 X' A: F
8! P* N8 d0 Y5 g* r  C2 z
9
: P6 f9 U) U2 X% j* c' B
6 ?0 W, i0 t) D$ d' |0 Q</code></pre>! f* l4 `# |! |2 s7 ~6 K4 q
<h3 id="26-三元运算">2.6 三元运算</h3>
, \6 e' @: L, r( s: X6 M<pre><code class="language-javascript">&gt; a6 B5 y" _/ q" B6 Q1 Y/ A& v# \, W
6. |  @! h* \* C- e3 u
&gt; b
; m5 I* I5 B! `+ m8 _5 t; ?6 i3
6 V' w( y, m0 ]4 J; r8 u9 N: e! @& {; y5 O
//条件成立c为a的值,不成立c为b的值  V- a- A8 a; E* D, M
&gt; var c = a &gt; b ? a : b: \8 b. s5 D% {* O6 s& J3 D
&gt; c9 _" h+ i" P( m! H! x# |& p9 V1 q
6
9 m& u3 P4 D0 z3 s7 h2 G. d9 b1 w! A6 C3 _8 v
// 三元运算可以嵌套
* v# ?. N; H$ E3 V- O# o</code></pre>7 l. C; d9 y8 Y0 r7 ?
<h3 id="27-函数">2.7 函数</h3>
& ^+ i2 u8 B( H! }1 C4 g7 g<pre><code class="language-javascript">1. 普通函数
8 J( d* X1 R4 A1 }; P* G" A&gt; function foo1(){
8 b8 D1 P1 d' P( v- S* m; w$ q    console.log("Hi")
8 p0 u7 K. T8 t: T- J7 t9 w}
$ N. `5 I: ~) Y8 P2 ?9 W0 F- x% E- Y" H+ _: Q( n; c
&gt; foo1()9 H6 Q$ A& z- {  C9 Z, b
        Hi( B5 u7 a" T. M' U* J1 k
2. 带参数函数
' E8 o9 Y) b- I# h&gt; function foo1(name){
4 k! W3 e7 n) x% M) Tconsole.log("Hi",name)
5 c9 Z1 Z* U) c4 ]  c! B3 f" H}9 z! c3 ~* b  _+ h" D  h

  p8 [$ w, |' s$ K! W6 _3 a' Q5 T&gt; foo1("Hans")+ f2 W; s7 \$ M% w/ }8 j8 c- b) S
Hi Hans
3 x# z  m( k, \" K% u
" z3 @* {/ i- R5 ]/ d" t, N; n+ `7 R$ L&gt; var name = "Hello"
9 H3 p' d  i9 a6 F) P3 ~8 \- o&gt; foo1(name)+ ^. I5 N0 r4 Y  Y& H. }5 D
Hi Hello
: \3 T: o/ x( Q- P" h
- F1 v: c. A) B: T3. 带返回值函数/ j$ d: V3 t. |) O! [
&gt; function foo1(a,b){3 l1 H; g( m- }4 c) }7 U
        return a + b     j) U6 i, Z6 W5 R0 v$ u
}$ `) y0 e& }& m9 ?  J! Q2 N
&gt; foo1(1,2)& |9 P) t+ S" J- H, V' A0 M
3* ]+ u, d  |0 p. }" Z% d9 Q
&gt; var a = foo1(10,20)  //接受函数返回值
* _% ~2 [  P* D& g% S&gt; a
/ Y0 r# p( N0 T30
% @+ M9 b$ r, Z. r  |9 X) `5 Y
( M% _. U1 b. \7 ]6 Z4. 匿名函数  }) V; z* h8 [# j' e! {! x/ }: o
&gt; var sum = function(a, b){$ S6 F* ~8 [% a: v$ _
  return a + b;
0 D5 L# ]% p" c# a7 L8 E}
0 D& l& E  t2 v1 e1 {4 {+ y8 ?' n8 j&gt; sum(1,2)
: I% W: Q6 L# k5 Z2 P! f. o, V. I3' M  W+ G# g) [4 e7 h+ N

7 z0 J/ M2 M) K0 I. b// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
0 n- S  h5 d; @" x0 S&gt; (function(a, b){, a, E: I( U- S7 ]  E" O
  return a + b9 G/ ]5 |1 f1 g
})(10, 20)
/ E+ o3 N9 J9 ?7 ]8 F30
6 |! C' w& s1 ~" n3 Q: o9 x$ `) ^, }* w7 ^0 S9 S
5. 闭包函数
! H- G6 y9 K+ m5 X9 U// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数  q+ v; ^/ E) A4 O8 M5 N) C) s
var city = "BJ"' h( m" t7 V. ?# U' ~. O7 I3 i% L
function f(){
/ n; M# }! T1 H, c3 s    var city = "SH"
1 ]5 N5 [/ b0 m: Y; d+ N9 P    function inner(){8 U* ~: {/ c+ s  J( `) g4 r
        console.log(city)3 w/ C: H8 K! F. x
    }- Y* T6 X0 l, f& }1 ?6 O% Z
    return inner
5 m- a  {9 |- A, L; U& S1 i}
4 m6 ^9 `1 T+ \7 G7 b/ i" Tvar ret = f(), R. h( `# Z7 s1 A: \( N
ret()8 j: u1 J& U9 I
执行结果:
7 t# i) z! u  ?: L- bSH
0 m9 t1 R: q$ k: j8 r3 O# q5 v# r5 k  p" b5 \% ]7 A
</code></pre>  r* {3 ~, P" c/ S1 P. l
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
/ l$ A% b/ ]: F& W( A% T<pre><code class="language-javascript">var f = v =&gt; v;
4 p) f3 n& i% N2 i. i" X// 等同于, _$ s" O' ?! [( R% R$ Q0 V
var f = function(v){! E* {. s; I$ K7 I
  return v;! i2 T$ I; N9 c  _
}/ P; e$ v# f8 p8 l  |7 }7 c
</code></pre>
9 T+ W! y/ S( z* c  k1 L<p><code>arguments</code>参数 可以获取传入的所有数据</p>
" m0 j9 M. N. y3 }<pre><code class="language-javascript">function foo1(a,b){8 [) A1 J, D  N9 k: \8 K. M$ Q/ Z1 n
    console.log(arguments.length)  //参数的个数
& u" ~. ?$ k8 a* D    console.log(arguments[0]) // 第一个参数的值
$ |3 O% k% ?9 U& Q9 P9 d. ~        return a + b   ; Q( e; t9 ]% A: Z
}1 H. h- Z/ K6 L! A& E
foo1(10,20)
+ h1 i$ {% m) }; [结果:$ F* ^5 q% r" v& ]: b
2          //参数的个数
8 X- y; {; r  E* {% V' }) Y% ]10        // 第一个参数的值
: a9 T) O+ `; j4 @# e6 N30        // 返回相加的结果
, W8 Y, I/ N2 f) j3 i' ?4 y</code></pre>
7 z# L9 D" e: p. N" i<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>; W" P0 W2 h) R# R) p+ U
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
, ?* Y# P2 ?5 p# a<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
0 H; x& p( ~( l) [" i: @( W8 m" u7 K; j<h4 id="281-date对象">2.8.1 Date对象</h4>9 t! g; g" ^4 O# g$ u; \& l
<pre><code class="language-javascript">&gt; var data_test = new Date()& m( u+ j, A# \; J6 ^, m
&gt; data_test/ e% \1 y, q# S! t, D
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
( @$ M8 C+ r3 ?2 D7 S  Y, @6 R&gt; data_test.toLocaleString()
, }4 P: D' O2 b% @'2022/2/11 下午9:44:43'
, a$ W* h: l" U# M7 d( g, I3 Y4 A4 j, _
&gt; data_test.toLocaleDateString()  Y6 C6 N' l/ u" ?3 E
'2022/2/11'
) k1 n) |; h$ l( d7 Q
) b0 b6 Q# K! k% F5 T- P&gt; var data_test2  = new Date("2022/2/11 9:44:43")
- `/ e( Z. u/ t. t6 f& s  r&gt; data_test2.toLocaleString()
3 H. M% ], @0 m0 r'2022/2/11 上午9:44:43'
" g' E3 ?) K! ^  N& f1 I' K+ n( j  E( _7 W
// 获取当前几号
7 C, S* U( Q6 J% l# [&gt; data_test.getDate()
0 ?3 e) M( f- Q% M11" S/ ]# v, h5 W2 k1 R
// 获取星期几,数字表示
8 u9 E+ H% l2 E- f&gt; data_test.getDay()  
, z# i, M' k6 d8 F  F5, {, Q2 F# P6 c% c& s
// 获取月份(0-11)
" l" J! t" V! r! `9 _&gt; data_test.getMonth()6 A, J$ e. ]  o* n5 f
1
! Q+ m# T' I8 g# p// 获取完整年份
! [2 z9 i) T' [. s+ y& c&gt; data_test.getFullYear()6 R3 K, j9 l- m- R6 R
2022  p% h9 \" U# M6 N; T
// 获取时
6 H$ \- ?! S8 L' s; N! a$ u! U&gt; data_test.getHours()
% ?" T% n  r+ q7 F! D2 |21$ e. g7 t4 m9 Q/ t/ E: W$ S
// 获取分4 D; d; C" _9 k# _1 m! `5 K- u
&gt; data_test.getMinutes()
+ a& \, M7 r" b$ f' H44
- D5 Y* v8 o# A6 v// 获取秒
+ ~1 E. G8 K. x# C&gt; data_test.getSeconds()
# G: {# u1 d. c5 d2 j. F, n- L43
) v) L& @- w' {2 U// 获取毫秒
5 l# s2 w0 A/ }1 ~! ?0 a4 C8 }8 e0 e&gt; data_test.getMilliseconds()
9 v% u, ~* S7 D# _+ x  k- s$ o0 Z290" C, N1 J3 ^& r( _" T. B8 |- g
// 获取时间戳5 `. C  ~5 f" A! d
&gt; data_test.getTime()
6 M3 C$ Q5 j- _* u$ Z1644587083290
4 D& Y! u3 M% c5 H, B</code></pre>
( [2 D8 j3 O- o$ O4 Y% v9 b<h4 id="282-json对象">2.8.2 Json对象</h4>5 B/ ]4 ~  v6 h4 l+ P7 a" k
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串9 ^7 K" e, p" c! r. p: k4 K, o
JSON.parse()  // 反序列化,把JSON字符串转换成对象9 U/ x* I1 X1 `" a# J, O' U3 X' A

) j& U6 P$ H% o6 }2 h, ]8 Y0 v// 序列化
2 v4 ?8 \* u! N; \&gt; var jstojson = JSON.stringify(person)
# J' p- a9 a9 j/ ^9 C&gt; jstojson  
1 _! f7 S. m- m. r; t'{"Name":"Hans","Age":18}'
' \, h7 X" N+ O) |. n+ Y5 o
# B4 B) \! X0 R! \$ C* V/ J// 反序列化
' ~1 v6 h4 Z8 R) k&gt; var x = JSON.parse(jstojson)& c: b! D) R. S8 a# |0 d
&gt; x' _! s7 S. x( i0 Q! B1 v
{Name: 'Hans', Age: 18}3 c& y8 N7 j) N0 ]8 f9 {  b" t
&gt; x.Age8 h* f- S: G5 ?7 K: G* {7 D  L8 [
183 @* ^) |4 t; ?% K
</code></pre>
2 w  }3 h7 d0 E5 ~<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>! K* J7 @+ n% P# q( p* P
<p>正则</p>
0 ^+ \$ f9 W. g* M- i<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
' x6 y+ S  ]6 E* ]; [* y&gt; reg1
. z, s8 N; _& O* X$ c/^[a-zA-Z][a-zA-Z0-9]{4,7}/% V; N: X2 I  s0 d. ?
&gt; reg1.test("Hans666")7 r) A# \& Y6 W
true# G  a4 e$ v& S# D) N$ ]$ i: x! z6 F

6 h7 Z4 L) m5 z+ Y4 _) n  ^&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/# s0 Y" o' f" s- c$ @
&gt; reg26 _4 k- n$ G2 ?; u7 O$ f
/^[a-zA-Z][a-zA-Z0-9]{4,7}/) T- ~( s. F/ U. ~( @# h
&gt; reg2.test('Hasdfa')1 F3 A. S0 j) S+ C) ]
true
( V5 f" V' X+ ^5 N  I6 i! `$ f( C: ~8 j# }9 U% r: [. C
全局匹配:- N! E' v8 u/ M7 _% W5 ?/ P
&gt; name8 r; l# P3 H/ ]+ V) M
'Hello'
: l) F% _6 E  p2 T* X9 X&gt; name.match(/l/)
5 w0 S* F; R6 v. T6 n* |['l', index: 2, input: 'Hello', groups: undefined]
; T: l- Y7 J  x
# \* ~: {" M/ @9 Y" y&gt; name.match(/l/g)$ S0 \* _' U( ]- w' w$ b; E! `
(2)&nbsp;['l', 'l']2 b* f; @4 f- `/ U$ Y' Q6 o. X
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配1 X% ]; f( b& @' l+ ~1 J
6 Q7 P# H2 T) C& D0 f; \
全局匹配注意事项:( S9 s, ]5 R/ L' b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
1 m/ d: D7 \$ e' m. l. W&gt; reg2.test('Hasdfa')2 h* e( s+ B6 ^( i% Q1 @
true6 g5 U- s+ A, @) [. T" O; n3 P
&gt;reg2.lastIndex;
+ b! K0 p" u) o& S4 @64 p1 l8 s% u0 O  k$ h
&gt; reg2.test('Hasdfa')5 l$ r5 ^0 h) x: @3 H
false
- R# `! D. M; I, S&gt; reg2.lastIndex;1 A$ J0 N5 D7 n" U# G& C9 x& D
0
; G0 [6 V8 e; T/ ~. A&gt; reg2.test('Hasdfa')  i  Z6 r& F6 m1 g$ _! n
true
9 \6 W4 j* y! k4 i7 E# c&gt; reg2.lastIndex;. K; E( l8 b/ ?& j8 x7 }
6
8 d( K/ e3 Y  ~9 R& j7 Z7 K4 z&gt; reg2.test('Hasdfa')0 p/ `8 A' W2 Z" F! Q
false
: w: c) x0 q+ [, B&gt; reg2.lastIndex;0 i% q) F* t: r, |' X4 j
0
3 Y1 _- H" |( ?// 全局匹配会有一个lastindex属性+ n0 b; t5 K8 x! ~6 v( q( t
&gt; reg2.test(): ^: U2 s$ C7 p4 J' s
false, `* Q% m! x. M& N% g
&gt; reg2.test()- [6 D. a* S, L
true4 x# l/ b/ a( f9 j* a# x- m
// 校验时不传参数默认传的是undefined
" M  p& g; q0 @7 t' K. D: v</code></pre>; J6 {5 _- Y6 @; y( T. B
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 m8 f3 S1 m1 ~2 T
<p>就相当于是<code>python</code>中的字典</p>' M/ u" o- V2 L# \! X+ r
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
2 Q5 V  q6 U/ b; x* U& ^&gt; person
7 b0 Y+ b$ K" l* |- q" j% s{Name: 'Hans', Age: 18}& q2 O# L# E3 h$ ^6 `% q
&gt; person.Name) }' E' ^1 ^* e) i2 ^
'Hans'
1 W+ M+ C+ P5 m' R: S. B. P* ^&gt; person["Name"]
  J" F7 C4 ?; ]8 ~# n& s'Hans'& Q: d0 q" [; o  ?

) o3 @/ {8 Z* A+ H: m9 p// 也可以使用new Object创建. @2 d+ e/ {3 W% A
&gt; var person2 = new Object()" J* j; J7 q. ^6 V
&gt; person2.name = "Hello"
4 p, p* J8 M: O& N4 S'Hello'  V" G0 V* A7 Y/ M9 Z1 f! r
&gt; person2.age = 208 D. U1 |$ u8 s, S' O& a
20. z/ C% w0 U9 u; ^, u
</code></pre>
% i+ N$ N& ~* a/ h. M% T# @$ {<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>  u8 d/ @8 U5 x5 n
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
  s) O) w0 |$ j. P' {<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>! s: X  `* ~" Z2 \
<h3 id="31-window-对象">3.1 window 对象</h3>
$ W* G2 O0 K2 |( I! J& v, v, t/ A<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
- i5 l" l0 a9 w8 q( N3 `<pre><code class="language-python">//览器窗口的内部高度! `6 U! ~' f! g: ]* l/ y+ D7 o+ G- ?
window.innerHeight + Y; Y8 j  p* c6 A) h. ~
706# m. r# B9 |6 P+ [& N
//浏览器窗口的内部宽度" V0 ?8 h: x8 \6 m$ J
window.innerWidth! [! ?6 C% M' V+ R$ g. ^9 ^
1522$ N" b# h. Q8 {& W7 k
// 打开新窗口
% d0 U' u3 x7 [. owindow.open('https://www.baidu.com')
! t; L$ e- {8 f8 F6 [Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
9 Y# d) L  Z% R% C% T4 N7 `5 M// 关闭当前窗口
* ?& i: t# \: V; lwindow.close() ) G# i! ?: D2 J( P
//  后退一页. e( U2 s( F. E( ?3 }1 g& \. k" I
window.history.back()
4 v- V  J! i; {. h( v+ n& @// 前进一页
& _: }1 V: m: j$ F3 Vwindow.history.forward() 3 }  ~9 M+ W4 l8 ~' T% u) \6 L
//Web浏览器全称- u& e) t2 n  M3 h
window.navigator.appName7 c1 L" g+ B: H6 O7 ~
'Netscape'
2 x; T1 {0 D" M# B+ E// Web浏览器厂商和版本的详细字符串
4 V% E; ?  {" e( Y, I* v, P; zwindow.navigator.appVersion
8 l! h0 g+ h2 q5 {# A2 R; z3 t+ ~'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 Z- W3 h* K* x; @
// 客户端绝大部分信息
6 e; A, v: m) |' x# E# zwindow.navigator.userAgent  G( J2 [6 c9 u
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 f8 h" R% M6 U2 R
// 浏览器运行所在的操作系统* m2 s) w* h/ _: }4 q3 F
window.navigator.platform
9 ]: {! _$ w8 D5 X'Win32'7 D% d" v, s" |5 n

/ X( r# K1 g# L//  获取URL
) G  I2 C  y- m9 _window.location.href
# Q) v, I7 v1 C! l// 跳转到指定页面/ d8 ?% q$ }9 S% n9 A: v
window.location.href='https://www.baidu.com'
( E* E  w% e9 A( ~// 重新加载页面! {; b: z8 Q; ]$ N
window.location.reload()
8 C' |8 m+ X6 V/ Z- }( @: Y</code></pre>/ b, n4 R0 p& U$ {  B0 Y+ w! d
<h3 id="32-弹出框">3.2 弹出框</h3>- l- E/ ~- A4 A* @7 O0 W
<p>三种消息框:警告框、确认框、提示框。</p>
) l1 ]+ ]3 A3 B2 x; W<h4 id="321-警告框">3.2.1 警告框</h4>: R' F2 _" ?/ ]- n9 {
<pre><code class="language-javascript">alert("Hello")* q+ p9 E: ~7 y
</code></pre>
- |* h+ w; K5 H* u) y0 |<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
& e/ P, \/ _) F' y9 n1 O/ N<h4 id="322-确认框">3.2.2 确认框</h4>
/ v7 H3 y! T+ t. r: r. f<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
/ k/ ]0 ?2 b8 b  @% J& z( Z<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true& w9 a0 d& O. W" e$ {" q+ B
true& |6 K: \6 p0 z
&gt; confirm("你确定吗?")  // 点取消返回false8 \* X7 }# f: g8 e) `& r" l1 m
false9 i6 E: J" A7 F7 c( }
</code></pre>! q7 J6 x; H3 }
<h4 id="323-提示框">3.2.3 提示框</h4>- }3 r' |3 {! G& f' M  L
<p><code>prompt("请输入","提示")</code></p>8 Z- c% g3 T" B) h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
8 O) f8 l# |; }* s6 G3 n% y<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
3 I/ E! Y$ x5 Z. }9 V! F<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
4 f: @$ C/ C, U" w& Z8 w( I" A$ }<h3 id="33-计时相关">3.3 计时相关</h3>, X" ^2 h4 S; r+ Z# F# Y
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
" m' o) f( g0 j' a/ Q<pre><code class="language-javascript">// 等于3秒钟弹窗! L$ C$ p* I, \  B, g; h9 {
setTimeout(function(){alert("Hello")}, 3000)
% w) f+ E6 b* n
) x# G) A5 P* f$ J' ivar t = setTimeout(function(){alert("Hello")}, 3000)+ R; r. f7 K& k' m* U# m8 a

4 d* `. j% M6 ]* c// 取消setTimeout设置
9 ]( [; O% M3 y( m) eclearTimeout(t)2 T! @% A; Z$ b  N6 z+ o% W( L2 s
</code></pre>
, x& Q7 z1 Q  @% p1 l<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
1 ]/ V0 S; W( d/ v<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
" [* k" k2 _! f# r- F8 U<pre><code class="language-javascript">每三秒弹出 "hello" :
& B( O: e( L+ ^' r0 esetInterval(function(){alert("Hello")},3000);
/ n$ n( e3 _5 h3 \+ T# d</code></pre>4 a2 |0 M5 X9 \, e- V7 u+ e% o& Z
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
5 D4 p& h$ K: u- h' ]& l$ r* W/ E<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);( V8 H$ \/ \4 t+ ]  j
//取消:
3 ~; n+ D- i/ x+ _clearInterval(t)
- ~2 W0 p, _, n' |) n# g</code></pre>$ u; [1 Y- }! s4 U% T

# r$ E6 w" f. O- J0 I
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-28 01:48 , Processed in 0.068127 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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