飞雪团队

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

前端之JavaScript

[复制链接]

7677

主题

7765

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

" g% f1 ~8 R. `" @<h1 id="前端之javascript">前端之JavaScript</h1>
9 t. q2 O0 v$ q5 y# `0 Z1 `' H<p></p><p></p>5 i( n  ~9 J( a0 ^  S
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
+ y- I" Z; [. n2 t. H- T8 |<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>8 E$ p7 X% ?# e/ F) ~7 k
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>  T$ Y% p8 H+ O" l, ?8 }
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>% p/ Y# }7 b$ B* d  @* l9 l: b* {) B
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
' R% L# F2 W5 c8 [9 D! f3 H2 R/ B<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>1 a: r0 e1 J9 Y7 a4 C. J2 t5 x
<h3 id="21-注释">2.1 注释</h3>, K3 T6 g3 j3 [+ i* ^
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>* z" Y1 L% o9 y7 m9 ]0 E1 R
<pre><code class="language-javascript">// 这是单行注释7 m/ p. j' k/ c2 c) q  @$ @# U! ^

$ \6 X) J0 F/ w3 e0 q; m/*( A0 S7 n! G8 J  n& E2 Q
这是多行注释的第一行,: `5 q1 k) A# H  d
这是第二行。3 d* M9 y: k. h/ P$ Z
*/
" h/ Q) t7 C$ J$ g2 ]</code></pre>  E6 o' J3 G0 K( j* Q0 C5 u
<h3 id="22-变量和常量">2.2 变量和常量</h3>
& G2 t1 h) F  r" @; v9 J6 L% M<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
& @/ U' ?; \' e% @" B<ul>7 B% x) |2 z% f% G
<li>变量必须以字母开头</li>
0 |) ], w6 }: Z8 K3 q; o<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>; z8 f: A6 w& @4 c+ c' ~
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
0 v* r  P1 \4 G# R' f5 O7 U: L' R</ul>- d; a: c# O% w8 i' r2 R
<p><code>var</code>定义的都为全局变量</p>
$ C" P1 M3 J) a6 l0 j) r<p><code>let</code>可以声明局部变量</p>
0 P' C0 R3 m4 h9 u8 k<p><strong>声明变量:</strong></p>% g! K! V; n" @! |( x: O, }- ]
<pre><code class="language-javascript">// 定义单个变量2 b& F. L$ }3 ]& P3 b* u
&gt; var name
) f8 T4 g) m2 E: Y" h( A$ x&gt; name = 'Hans'' K& A( R0 H% t% Z
//定义并赋值
6 r; L- H9 ?6 j3 I; D&gt; var name = 'Hans'% ~9 z. a. A4 {
&gt; name8 O. s2 A7 c- f/ X5 Z9 I
'Hans'3 Q6 F! x9 z/ j2 d" ?& d
& L2 V- ]6 y2 ^8 r: e/ f
// 定义多个变量* |) K1 k* ~9 [+ J8 q6 Q( X
&gt; var name = "Hans", age = 18; }; `" a& c) `% f( e, U
&gt; name
! d/ E# d" e$ F3 c1 H7 `3 a( H, y# n7 V'Hans'' F; y) O1 T3 F
&gt; age( Y  }6 n( s6 F3 d5 p) d
185 K2 k& e+ ?7 y4 n
. a# o& h6 |/ ^0 o4 W
//多行使用反引号`` 类型python中的三引号, n# e: j" O9 K* o2 `  r
&gt; var text = `A young idler,
3 A9 `1 W# K% z. ~an old beggar`5 T, o( G+ C9 D0 Z
&gt; text, B5 j" W  l- ?- T& A
'A young idler,\nan old beggar', ]! q" ]2 b; {
</code></pre>3 H0 Y$ o6 x# K
<p><strong>声明常量:</strong></p>
) g' n; Y1 e7 }<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
- ~0 o' A& U3 U$ V. \" U<pre><code class="language-javascript">&gt; const pi = 3.14! G7 Y( q4 v& _# h+ T' b+ V
&gt; pi
: @7 P* p* @1 ]6 X1 \; E1 s3.14( U; C9 M0 K8 i1 Q5 F$ v3 K( L
&gt;  pi = 3.01
; O& \! ^8 c5 p% C9 ?5 xUncaught TypeError: Assignment to constant variable.
# x( I0 k& Z1 a, G" X7 ?4 F; z, T1 ^    at &lt;anonymous&gt;:1:4
0 E! |* e& W' }5 a( I  x1 N0 E& u. y5 ~
</code></pre>
: r% W9 j+ }! ~# v4 y9 ]<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
$ u+ Y/ L' Z: r, L, B* o<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
" H+ ^: B6 m7 R3 J) r& c9 d6 g/ H<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
, ]: T: x$ @$ ]8 p% l<h4 id="231-number类型">2.3.1 Number类型</h4>* S3 r' i$ V2 k. S8 V  ~, h
<pre><code class="language-javascript">&gt; var a = 5
  X2 o* m2 q! z1 k6 v2 D/ N&gt; typeof a   //查看变量的类型  
: `" i! M/ ]* {: H9 w+ nnumber
7 k* j0 Y0 J7 E# B# K4 h' d6 U/ q7 i# B
&gt; var b = 1.3) D4 w5 b+ o, J% e# K$ o/ @$ Y
&gt; typeof b
3 \- d' Y$ Y) o5 U4 n7 @: Qnumber7 q7 _: Z* K0 W4 w/ b7 N6 d
3 F& h7 L& L1 G3 G# G  g* B: n9 I
// 不管整型还是浮点型打开出来的结果都是number类型8 i4 k  c* g6 r( }. H" R7 k; ]
+ g2 Q0 c/ l0 F8 h4 u6 L* E
/*
7 c! J# P  c( B$ i  ~5 C* MNaN:Not A Number
( Q8 _* O7 E) jNaN属于数值类型 表示的意思是 不是一个数字. }" h7 {' |* h! s& x/ [8 m  r% K  Q
*/- D! ?1 f0 w. a2 l- U

* P- G) S. [. R+ _parseInt('2345')  // 转整型
5 \- ~8 ]! T7 H9 U; S0 H2345
* _, p; M1 h; B1 b5 p7 c! |4 ?7 uparseInt('2345.5')
& f9 Y3 ?& P  }9 Z3 @3 Z5 J+ z2345% Y. w3 l1 U4 w$ g! J  d
parseFloat('2345.5') // 转浮点型
6 g& ?+ d% A1 h( `1 Y6 d2345.5' b  J) N* ?. p+ M8 z$ _! `
parseFloat('ABC')& ]0 T& r" J2 e: y7 q: ]  q5 t
NaN
. F" ]3 Y; m! F5 V, g  hparseInt('abc')
9 `$ A/ x9 j0 ~( C+ ?% jNaN
, U4 f% [' J7 x) P" i+ H2 K0 \</code></pre>: I/ J4 O( T5 ?! M3 n
<h4 id="232-string类型">2.3.2 String类型</h4># h. o7 k/ K( @9 }  B8 X3 x$ D7 Z
<pre><code class="language-javascript">&gt; var name = 'Hans'
7 o. Y$ J" H) L3 X) O  _7 z&gt; typeof name
9 a, R& q1 c. h2 ~% ?'string': D8 ?, y  T# e: A

5 b& j5 [' `9 f8 S6 r  _% k//常用方法  \8 o3 y8 D/ Q8 B
// 变量值长度8 _; i/ p  ^1 V$ [. S, H! M+ p
&gt; name.length, N" F* y9 I. T( m* y: E
4
/ j" x. e/ r9 C// trim() 移除空白/ r- e9 R8 m: O9 l  \. X% F) [
&gt; var a = '    ABC    '8 H1 S' u" H- n; k3 _+ r7 n
&gt; a* N: Y$ a1 E9 S% O
'    ABC    ') o: c( y; O) p! `- K. b, a* ^- j% w' t
&gt; a.trim(); s9 i% Q8 t4 c; k1 [! |
'ABC'
. o" ]5 q5 C, T  `* Z$ v1 P& _4 L2 K//移除左边的空白7 o) m; Z2 z& ~3 b! M: G- O; t
&gt; a.trimLeft()5 P. ]4 n7 A9 U9 Y! d1 H
'ABC    '
( `# L( A7 P  O6 ]! {//移除右边的空白
" J% S3 y2 n5 N" R, ?5 I&gt; a.trimRight()" v3 ^, A4 X! [7 l' A4 D' ?
'    ABC'
  l* A+ h6 K3 n
# D4 M1 [3 l4 H6 h: k3 V8 r& G//返回第n个字符,从0开始$ x6 w5 n4 n$ C
&gt; name# g5 y4 ^4 M1 a* F7 R
'Hans') M( s1 D% u) M; I+ s. _0 S4 l
&gt; name.charAt(3)
- r$ V4 T' Z% A) r's'- `) ]4 Y# Y# ?
&gt; name.charAt()( O' n# P% T8 M/ G, V- m, d% a3 A
'H'5 C) N/ X! B8 m9 m4 Y& d1 u0 i
&gt; name.charAt(1)+ ^- Q8 C- N1 b) K4 S: C
'a'
) ~: M2 P7 x( [! {8 o- m" w: y3 t5 y9 p$ ^1 i& ]
// 在javascript中推荐使用加号(+)拼接
! a2 ^) w: r/ ]9 O$ V$ z&gt; name2 i- j3 K; ], }, a6 a3 W
'Hans') B4 }6 |8 o3 T. u9 z
&gt; a
3 B1 B9 B; d. ~'    ABC    '
) d9 F4 n$ x1 c. |& \7 S&gt; name + a
" y6 D5 @) V- ~1 ~1 h'Hans    ABC    '5 Z/ L; m  p+ U5 C7 Z0 D* F
// 使用concat拼接
7 K! g1 S8 r  E7 T3 T&gt; name.concat(a)6 b: W- b& f9 p8 J7 y& d
'Hans    ABC    '
+ U/ N5 F: D, x3 {" b
9 Y, @- g- \7 r5 k- b6 @7 Y, b# a//indexOf(substring, start)子序列位置
  T$ f6 D9 n4 l3 C* ?" F
$ n, ^. z9 c- ?: e$ W&gt; text" H$ C1 \7 `3 S9 c
'A young idler,\nan old beggar'" g9 S1 X1 I. Z5 M% [% H7 P! L
&gt; text.indexOf('young',0)4 T  d0 O+ Y' `$ k, ]- l, u' ~
2
% j* m0 M7 d# V1 \/ X
+ e: V9 T  u3 L* R//.substring(from, to)        根据索引获取子序列( D' z! B4 i" @5 U; Q% @
&gt; text.substring(0,)9 l. o3 c2 g4 i
'A young idler,\nan old beggar'
' c1 P3 B+ B- H&gt; text.substring(0,10)- X3 t4 h( }; I5 I/ M( L/ s
'A young id'2 R9 }& {' k3 I/ g+ j

0 d7 u) ]' \" r5 [( C# l) c/ g// .slice(start, end)        切片, 从0开始顾头不顾尾
5 e/ B% w% n. N9 r  X&gt; name.slice(0,3)2 P' N8 x& y5 m7 g; @
'Han'
% N' M2 S8 v, b) \
" J0 w0 |3 S9 P( L// 转小写
( f) m+ u# |# @/ A) X&gt; name: P1 ~& m9 G8 ^. f8 _
'Hans'
) }8 n6 e& v9 W2 r8 z1 A" u&gt; name.toLowerCase()
9 R" |, Y$ l% r'hans'
( j# Q4 O0 g: j4 m" A$ W// 转大写
$ ~0 ~" G1 F+ {6 v&gt; name.toUpperCase()) E0 [6 C, B2 W- _
'HANS': f! {! q  G6 w
1 `7 Z: V; @0 L% o6 d
// 分隔
  p, x; t* [( s&gt; name
4 x, G+ L+ C1 E/ g. t' R8 j'Hans'
* ?5 e+ G: X& x" s2 p. m( R5 z( g&gt; name.split('a')
! }! J2 v1 }8 O/ c5 t; B0 P4 K(2)&nbsp;['H', 'ns']+ ?4 N1 l3 H+ s  L( H
</code></pre>
/ N/ z4 |+ ^# t4 |: _<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>% Z1 o+ ?% w( o" A  t9 n
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
: R3 l/ E  |# H+ Q- c9 P% o" V1 D<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>" _9 ]  r0 D% n$ t
<p><strong>null和undefined</strong></p>
% f( r/ I+ j" Y<ul>
, h4 Y, o$ ~- Q9 L/ h- ?9 o<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
' c# M8 f5 x4 d9 \  V& ]5 W<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) T2 Q1 c, Z; E4 u" Z6 i" k</ul>
0 Z& L* \9 S: I0 o) E( a% G<h4 id="234-array数组">2.3.4 Array数组</h4>! \) m4 I4 {6 E; k( s
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>( y+ J, Z+ i+ W$ F$ b
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] " p. L0 C3 v* J$ k) `
&gt; array1
$ E" V8 e. ^2 t' b7 C9 o(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" s1 N0 ?8 C$ i9 Q: M&gt; console.log(array1[2])  //console.log打印类似python中的print
2 c0 y% H, }4 A3
" f. r; O/ g$ X2 }% l// length元素个数
8 x/ Q- v3 {+ x/ K$ I% o&gt; array1.length) V+ b/ B7 k2 n% d
6- N* Y: R. Y2 V7 K: G
// 在尾部增加元素,类型append# z# ^$ E9 S  u; @1 Y
&gt; array1.push('D')8 C: _0 f+ b% A5 h  f& o9 O
7" M& z9 q5 v; k5 e
&gt; array1' u* D8 C  s4 k% z& d3 s" d, n
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']" q9 E! M5 z3 X$ Q$ u/ \( x) i
// 在头部增加元素
) \( ^3 F. q' F! }7 A1 S' P: d, ~: ^& O&gt; array1.unshift(0)3 D1 N" I0 ^8 i) @% I+ U1 @
8
2 B8 T9 o! Y! ]  O5 Z&gt; array1
0 ^4 P% b# p: ]- M0 Q(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
) G( O% V4 C( t% L1 m4 A- V; K1 ?# `6 N$ Q  P; p+ ]+ [$ v
//取最后一个元素( g. I  A$ @+ U& f* E1 K) D
&gt; array1.pop()" b3 u' ^, c( d8 i8 _
'D'3 p, o5 R5 S# n% O( b4 ^* Y
&gt; array17 ?& A; \4 S& P  S4 l
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']! c% \3 v, o2 K  S$ b/ Q6 ]
//取头部元素
) I( @4 v+ A9 \5 A. c, y. `0 p&gt; array1.shift()1 D8 C& O" r- @, v5 v) C0 S+ z& e% x1 b
09 U/ U. O2 a; S  q5 U; k
&gt; array1! y* ]# Y3 p& [% b! l8 Z2 Q( Z$ d# c
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 Z! k& Q; ~8 n  d+ K# H% N& X+ _- b0 I: B
//切片, 从0开始顾头不顾尾% w, n, V1 }4 B4 t6 d
&gt; array1.slice(3,6)( c9 s, m5 i( k' d0 B  C/ @1 H+ G
(3)&nbsp;['a', 'b', 'c']7 |3 v  }+ ]+ d) j, n
// 反转
  w% a7 @8 C- s) |# J  T: Z! m&gt; array1.reverse()) i. E  M2 g$ [0 B; p" V
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
9 p6 j( `/ \8 z" W+ B// 将数组元素连接成字符串
' J9 ^# Q8 h+ j7 z&gt; array1.join() // 什么不都写默认使用逗号分隔
* ~7 b+ L# T0 n! p1 I2 p1 d; n, ]'c,b,a,3,2,1'- k' s; U( ~, l8 u3 t0 o' y; c
&gt; array1.join('')
' c: g: ^  e" N7 j# L'cba321'
3 O8 W+ M8 r8 U$ N0 z8 R&gt; array1.join('|')0 P7 R7 _1 r" P7 n
'c|b|a|3|2|1': C+ S( r2 ~6 x* f( j0 M
# R# a! u2 R' W8 P
// 连接数组
3 d; x9 f6 O$ \; G& E&gt; var array2 = ['A','B','C']; Y: L' K' P( E) k& a2 u' q
&gt; array1.concat(array2)
0 _% K0 A$ x! F/ z3 g' p/ d5 R4 e" ]/ S(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']! r5 f# K1 [  P: Z
; ~( }4 _5 _; |# }; Q" Z6 \5 K. S
// 排序
. }8 G+ L2 d+ A1 v&gt; array1.sort()- @* y8 h! c# P( L. p4 }" p" F9 G
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']* F" X8 Z2 B0 K8 `. F
: e1 l) v& r, E$ z
// 删除元素,并可以向数据组中添加新元素(可选): A6 e) `9 }; c# X! l
&gt; array1.splice(3,3)  // 删除元素4 s. e4 I1 W$ G  ^5 D$ F
(3)&nbsp;['a', 'b', 'c']
. S/ }+ i# j3 L9 s, |% w&gt; array1+ U* C  {8 w: j( P- H: s% `0 S  }6 B) p
(3)&nbsp;[1, 2, 3]! n  L2 I6 q/ L3 k
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
4 h' n) o0 p6 ?! G! _. u6 l  r0 I[]; }  j' Q7 m- c- L* ]# P& `
&gt; array1" h$ D) T' `9 ]$ c1 g& }
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
% D& E% Y8 I9 ^+ `( O" ?/ |8 S* `; \
- _, T5 K  \0 N* F7 m/*2 g% q5 q- r) w. R
splice(index,howmany,item1,.....,itemX)
! X- c5 {. ^9 A" I3 X* Findex:必需,必须是数字。规定从何处添加/删除元素。
( b9 x+ c; }& O: P9 S; a/ S) Lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
* i9 M7 T. J/ ^7 J5 M3 @7 W; a( Hitem1, ..., itemX        可选。要添加到数组的新元素
) f1 C2 g; B2 y" W5 I*// `; [/ {- q+ @
$ d$ _3 C! X. k+ {* j5 W: j  ?
// forEach()        将数组的每个元素传递给回调函数$ h* ]; V9 k* `" l
&gt; array1.forEach(function test(n){console.log(n)})
; T& G9 H  O# M- \7 v 1
* l$ d+ }1 W; r3 R 2
8 v+ J4 H) u" t% h 3
5 g( v# K+ }" H2 ]* r A8 O' {: Z& ^) u5 o7 _  h
B
) B  r: a+ o7 i2 F3 u( d C" f$ `8 p: _  s2 G
// 返回一个数组元素调用函数处理后的值的新数组
( I: z2 ], a  k7 ^6 U&gt; array1.map(function(value){return value +1})% z4 ]) x3 w4 b) b. V
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']# Q7 [! a- Z( M3 j0 L, @; L  p
</code></pre>
. t7 W2 E" ?! ^2 v: V<h3 id="24-运算符">2.4 运算符</h3>
( Y6 R* U+ U- N- y, p<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
+ e, ]! K$ Z5 p  `# @* G( i( B<p><code>+ - * / % ++ --</code></p>
8 @" @. O' y4 Q. u* M3 t6 f( L<pre><code class="language-javascript">&gt; var a = 6) d' Z, X3 e3 u7 t- U: i% V
&gt; var b = 35 r$ ]8 G& l6 C7 a9 v0 v5 c* ?
// 加$ |: A, p& x9 V7 s' V
&gt; a + b2 k5 ^% `5 E2 Y6 d2 @( E9 k7 A
9
6 y$ l# N4 S, a  d// 减! {' W& ?* |; W# l
&gt; a - b
6 o4 D& D! I4 b5 b3 G; E4 F3
& x1 Y2 S9 ~9 s5 {" f* ~% P9 D// 乘: e- t8 r0 U, u+ f! e% N6 p
&gt; a * b9 f+ c: V% g: V1 x
185 ~* {6 o1 A6 J& S
// 除: f/ e9 N0 k( ]- @9 S
&gt; a / b
. z: t5 R6 L& t8 p% [. P2
* m* O+ k. L7 a" Q6 A! t// 取模(取余)
% v! {/ g0 F+ |; F&gt; a % b: e1 p+ c3 L% f$ @1 W# m3 [
0, X9 V1 t1 N# k/ C, ^; j
// 自增1(先赋值再增1)% f0 L, Z8 y! Z  V3 z
&gt; a++
' u+ D. Y  o+ h3 m8 R; W4 Q6
9 }" P4 h8 {) q/ \$ J&gt; a$ |4 B, L1 {8 w& y
7
, Y, x' [2 Z1 [* ?) l- J// 自减1(先赋值再减1)
9 a" k; |/ W8 W( C- P+ o&gt; a--
) C- K  H& ~0 k7( E7 ^" _1 m2 I5 k5 H* k
&gt; a
' u) [( x7 f: T+ Q% t8 @62 X) ~) j* J# d% v
// 自增1(先增1再赋值)
: f9 Z5 J/ N  E+ Q( [2 A! F9 W&gt; ++a
% }) @- ?8 b+ m, N. x; D" a; `7) A( K% D4 z7 z) o& p2 O
// 自减1(先减1再赋值)( S! J0 _( K" k1 X
&gt; --a) e* B  @# H% Y# f+ k5 v- Z. F
6
- R5 \; b6 k) ?0 \1 W$ d7 \&gt; a2 A4 e9 I9 ~$ b2 E$ a# S
66 d/ ?5 a( q/ G. f, M5 o. H) N

4 F4 e# P: a( w8 R//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
8 _5 P; H- V5 Y2 I  ?  Y</code></pre>
+ ~; v# f! f9 {5 G, X4 L" Q<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
+ Q* `  w7 A( j, @, k; ?  i<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% C1 ]& |1 L& `" D' P9 n<pre><code class="language-javascript">// 大于5 B- w3 P6 h$ {5 r! s9 {; c; z+ F
&gt; a &gt; b% V) @7 {3 Q! o5 @
true
4 S" j$ S1 S' R+ y3 l' B// 大于等于7 [9 s  f: {& G0 }1 r( G7 D2 V
&gt; a &gt;= b
9 `/ ~; B$ G* M- {4 M. Z3 ktrue8 ]2 P" |& Y$ p
// 小于
( r- b" @1 c' E8 d8 K&gt; a &lt; b% d! Q8 a- i8 b: l* D) n8 Q) H" X
false
  {$ d, K/ |" N// 小于等于
7 r! O' e3 t$ f' p&gt; a &lt;= b  r" a" q7 c* Z( G6 X4 c
false
9 F5 a- s& F* Z/ c// 弱不等于
* t; O6 {7 a+ d: `7 S&gt; a != b
2 c4 b; \' _9 s1 Rtrue* Z( C$ e, S8 ]: p
// 弱等于) J  F. m7 W4 C8 \" m
&gt; 1 == '1'
' ]% Q' x3 C+ `% W: ktrue3 M6 `4 E9 Q& W* m1 g. x) z" B$ i
// 强等于
9 D9 {8 y* b0 M! {&gt; 1 === '1'* G/ Y( }; n2 a. n# F
false
+ J1 B! ^' @7 z// 强不等于
% J) d! v3 S1 n3 w9 Y' c&gt; 1 !== '1'; e% A6 j. |, h' n8 o6 H
true
# Q. h/ U) e1 T" Y& q3 q2 m0 }9 K" f0 l; ]; {+ s. a% y4 y
/*
  ?7 J" P; u1 H: \JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误! i' r, c) R# b' l* i
*/
8 E" @& g, x! z% [, c</code></pre>4 }+ c3 z, `* u6 t  Z2 O7 R. k
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
. A! F7 N3 Z# A# Q* H<p><code>&amp;&amp; || !</code></p>
7 j% o5 ]2 u$ x, H1 w3 c' n<pre><code class="language-javascript">&amp;&amp; 与3 K" E5 b2 k, O1 V7 e$ ]
|| or   i& ]. v" F  W( g0 X! Y: D
! 非
' n, x: s- r/ M3 N</code></pre>" \+ \$ q( O/ o
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>2 }' u. M! d# k& o; E  p0 d& _" K1 ~; f# ?
<p><code>= += -= *= /=</code></p>5 ?) ^$ a8 L% t5 B8 c9 S% S
<pre><code class="language-javascript">// 赋值
7 E. J- k: [/ R# K6 P! @&gt; var x = 3$ n0 O. M( m) g% R
// 加等于1 [( T* j/ p% c. |5 I
&gt; x += 21 T. |" b6 J# V; K2 i3 Z) l
5
0 f6 f' B8 o; u( H5 q// 减等于
0 g+ M& c- n$ O&gt; x -= 1
* k- A1 g' ?& e% ^. `% t1 h9 S; J4
5 k& _: t" X5 i/ M5 Y4 P+ H) d// 乘等于
; d+ M# S  V5 |, [5 n4 w, r&gt; x *= 2
" _/ ?* ]! U% t# n% c& o: u81 \9 r/ N& l# a: n; K, Z; U
// 除等于
+ x, _4 H4 Z$ O. c* I: @&gt; x /= 2/ @$ E) Y9 C( A$ f5 ]
4
9 W- h" {4 G; m5 H- ]9 K</code></pre>
9 g% B7 a. Y2 C2 n: U1 J! `<h3 id="25-流程控制">2.5 流程控制</h3>
4 U4 e1 X* I; G3 D, y<h4 id="251-if">2.5.1 if</h4>' F! S$ L0 t, b& r
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}# S% ?9 A8 x8 s$ \& @$ K4 s- D" y
0 w! _$ k0 n% `
&gt; var x = 3
  D/ s5 h. {9 h9 I  I- k&gt; if (x &gt; 2){console.log("OK")}
8 C6 y  s/ O2 j9 Y+ c4 e1 @ OK
6 `* b- l( J% n! ?- M- G
# q% v  h6 y: L& N- }0 ^2, if(条件){条件成立执行代码}
4 e/ |. f3 \3 x/ W% |$ A        else{条件不成立执行代码}/ F+ [, w1 C5 r; z

2 K2 u2 Y1 u0 D" C6 V& r&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
/ f5 V4 W( m# C'NO'' L3 w4 X3 D  d/ Z; B

1 B- I# i7 t  w8 e3, if(条件1){条件1成立执行代码}
4 `' T! ?' B( J* Y! t3 g        else if(条件2){条件2成立执行代码}
/ J" O; n/ Z5 s) K! I. |9 [$ T# M    else{上面条件都不成立执行代码}' n& P4 Z% J3 d# u
2 v+ l; `1 ^! S
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}6 s$ [/ W: h+ U5 v
Ha
) r! }6 u" X1 B: _</code></pre>
4 }9 B/ t  s  _4 h( ?/ _<h4 id="252-switch">2.5.2 switch</h4>
, z- u2 D) ^: G: Z<pre><code class="language-javascript">var day = new Date().getDay();) r1 A$ ]  F8 D- a* \: Z  k& L9 V; X
switch (day) {
9 o8 Z0 D& i0 R! u  case 0:4 S' C' I" P9 |  K8 x3 Y
  console.log("Sunday");
- r  k7 V2 Z( b4 U- b! d  break;9 M0 w% X9 L, l2 ]' q3 ]
  case 1:
- u# n: B3 k% d# v& H3 d7 J  console.log("Monday");7 T4 j0 g0 j/ l4 R7 k0 y* }- Y
  break;
: W( m  R4 f+ s: B0 j# I0 @default:
0 a: k- u- U$ p8 f; ]  console.log("不在范围")4 ~- x: z9 |$ ?0 W1 i2 F  n
}
+ [, z# s# [. W  A: F# R 不在范围
# P2 B, u; w( P</code></pre>- \3 p& g+ ?* e
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
5 n2 i$ C6 h- i<h4 id="253-for">2.5.3 for</h4>: }5 K; U; b6 h9 g* e
<pre><code class="language-python">// for 循环
) s! A/ _3 |- i; h, g4 j        for(起始值;循环条件;每次循环后执行的操作){
- W6 Q' Q, ^5 s' M7 X5 F        for循环体代码( R; U! f3 K1 W
    }
) ]7 \) D2 I/ x/ `
- l0 L: a2 ?- Afor (var i = 0; i&lt;10; i++){6 O: ?1 H% N$ I. x& Z$ l3 h
    console.log(i)
& ^6 [/ g0 j( f/ l0 ^$ n+ n2 P}$ o& w1 N# O4 F. S6 d  B
        0& \. e1 J' x8 S# [8 b
        1( y! V+ A" V; M" B+ I
        2
5 W/ B; P! _6 f* r" b- \7 `. u% c5 n        3
9 ]4 l7 U7 P  C4 c- [) {  o: u! _        4
. p$ N& y, S: B* j; f4 N6 N& _        5
8 C+ i! G7 {+ ^7 j9 M8 O# c        6
6 L/ s9 a" p3 e( r2 p  m; r% [        7, C! j0 S* p" s' o) E. i" Q* d( P
        8
! o# g8 n1 w4 u  P        92 Y* q  O, o7 p/ {2 I7 ]
</code></pre>
) G- z9 a' @8 }! \: \2 M<h4 id="254-while">2.5.4 while</h4>! \$ o5 {3 K( H% J( p) D' _8 }
<pre><code class="language-javascript">// while 循环* [- [" f5 M, L% b# }
        while(循环条件){
) J7 p5 U4 @) U# M: C  ~        循环体代码
+ `& y, E* `7 z; @4 Y6 A0 f    }
2 f0 X3 M0 \) Q2 z" T: d! c+ Q8 V; J$ D0 U+ s0 j$ E; t
&gt; var i = 0
! q6 X2 S/ p; z: b, e: [6 a: W&gt; while(i&lt;10){" O# n3 c* i3 ?
    console.log(i)" F2 B2 A) Z/ @7 c/ A: w3 u6 c7 h
    i++; ~! G' k( Z1 d
}
+ E# _# Z! L% [  P) Z" n7 T 0& k, X5 S4 J( m
1$ r, Z6 q& f% |0 P' \6 `
2' g  h) d7 J7 J
3$ Z% Q  \1 k: c0 g8 k6 M0 b* t6 |/ S6 X
4  z% q9 i6 g& T/ ?' A1 g
5
: |  D" q6 z# C- p 6  a9 I6 z8 L4 y9 V+ }/ a
7
; ~  G0 q4 E9 b9 J 8# Q+ J/ Y; S; Z7 a+ l4 ~9 w2 o
9& o- @7 ?, G% K4 M( w- D
</code></pre>5 M# H8 Y5 R, Z; e0 C
<h4 id="255-break和continue">2.5.5 break和continue</h4>
" R) A! N5 p- G. }1 D! ?<pre><code class="language-javascript">// break$ i8 D: U% g; u8 G6 B
for (var i = 0; i&lt;10; i++){- W/ e2 M8 Y: D- B( ?* A* H: c
    if (i == 5){break}4 i9 W+ j/ Y/ L( @6 s8 d& ?2 n
    console.log(i)$ v0 f) _1 M) q8 X6 A2 `8 ~
}
' S# r. y/ ]* I; n4 J9 L. t 0
$ j: b0 I3 |" ^% p; [+ s9 h 1
: ~* x1 k6 M7 v6 Z 2' k' W$ F/ S: q
3
) K: o  D- J+ W0 v 44 Y" [  H9 H; t
// continue
# K6 _& ~* D1 l- `for (var i = 0; i&lt;10; i++){
6 [( B; S" b% l' L+ n    if (i == 5){continue}3 v# f5 U0 x. D+ j4 Y4 v' h
    console.log(i)
1 A# s( G5 n" f5 T}; T6 l7 t- _, Y9 \1 N6 f
0: w" a1 M% g3 i9 E. G- m7 V
18 u$ b0 p% b0 |
29 Q7 a/ `' }. e2 Z/ P4 p/ a; w
3, s: t* P4 n  f; m0 T$ r  u3 n
40 A8 q. @  @2 j2 T
6) w8 Q4 j6 Z- u- z# Z, x" n+ [
7: Z% \  A  h2 @: Y0 W4 [! O6 {/ X
8
8 k& j; x( V2 L& [ 9+ C8 p$ C' [6 B' h
9 A% c1 `  H  F/ ]; @: [
</code></pre>
( U5 d1 \. Z/ s1 V6 _+ J<h3 id="26-三元运算">2.6 三元运算</h3>4 h/ O. |' o: R. h8 |. L( ]
<pre><code class="language-javascript">&gt; a1 |" |+ m# o% O# w$ x
6
$ H3 I- I3 |5 B6 Y2 M$ k/ n&gt; b
1 I2 M* }5 g% b$ S# ]. @3& |3 q7 c! |5 ~4 O3 R+ W1 y5 Y( }

, a7 b! E- v7 v1 V9 z//条件成立c为a的值,不成立c为b的值
+ O' f/ v- u7 F. a&gt; var c = a &gt; b ? a : b
! m; M2 q& @7 n7 r) z  g% ^&gt; c7 d$ w0 I: w' f2 \
6
9 H3 }+ }! f+ w4 U0 ~5 X, l
- O; H6 @! z' |// 三元运算可以嵌套/ A! ^9 |7 s9 W% q! e# w
</code></pre>
% C8 H+ h2 \  X! J4 J; i6 y6 B<h3 id="27-函数">2.7 函数</h3>
* h" k, `# g6 o) [/ ~<pre><code class="language-javascript">1. 普通函数
6 P  Z# ?) Q! G8 E; V* T$ T&gt; function foo1(){3 Z$ X2 T1 c7 O$ q
    console.log("Hi")# ]. g2 u5 E* e  g8 I
}
% m2 z. @8 b* f9 ?6 U2 ^7 G' Q' H2 b$ n" n: b' |6 ^% b
&gt; foo1(); T7 L1 ~+ Z/ x
        Hi+ A- e( v/ E  u' Y
2. 带参数函数' T8 }0 r0 o: i7 |
&gt; function foo1(name){; k5 r8 ?5 |; [1 s# M* _
console.log("Hi",name)1 u1 A( F- |4 N% k$ e
}  k8 R( k* e5 h$ L

2 p+ _- G: E6 O1 a) }&gt; foo1("Hans")
# u! o: }5 o; \1 o$ t, sHi Hans9 [, a1 ]& P/ ?' v4 j
. @: I% Z8 h' l; t& `
&gt; var name = "Hello"( V( r" q5 b  d/ u# M
&gt; foo1(name)
3 j) |* ?( r4 Y4 d1 Q3 G' H1 EHi Hello$ I3 m. x$ a0 G. F* V5 j* M4 l* Z
4 S/ V; K# D& Q/ A  P
3. 带返回值函数
- M& f$ U& y: ~$ B&gt; function foo1(a,b){
  Y/ J' N# E4 ]# t        return a + b   & [; q3 l# ?3 S
}' L# F3 x7 |" r- k: m2 @
&gt; foo1(1,2)8 d& I2 k9 R+ V
3! w. H$ s) F1 F  l3 A  K6 s
&gt; var a = foo1(10,20)  //接受函数返回值* X9 S1 G$ a3 T  a9 A& L* R
&gt; a4 J7 [( c# d* \% m! x
30
$ V. X" w0 |8 B
' V. J1 A5 W0 X9 R4. 匿名函数
) e4 v$ x4 ?4 B0 q; e# K/ r+ S- j( N&gt; var sum = function(a, b){
+ e$ X; P4 t# `4 B* H5 g# W! o8 {  return a + b;; g5 c( K' m2 ]6 c/ X
}
( w0 M( L4 I7 V2 b- x&gt; sum(1,2)
8 y6 A1 c/ v) P' L/ h2 u3
  l8 z1 Q$ b1 Q& \5 X/ ?. u, C& M/ |1 J- ^* g; Z1 a
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱3 ^, l  R5 t* e  i5 n  C
&gt; (function(a, b){
. w  c* Z' N8 B) D  return a + b
- }  P# B$ u$ ~1 F" O) Y0 r9 v})(10, 20), K3 e1 T3 `1 B7 r+ H3 t: E
30$ Q5 R; D# N8 c: @- x9 C$ }: x
6 n) `8 r- |# Q
5. 闭包函数
. H4 {; |9 c* B1 s- G# ]6 L// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
. X9 ]2 L! ]9 E3 Xvar city = "BJ"
" F7 X# `' ?! N9 I% j/ p6 }function f(){
" Z) ?  p5 S2 x. n- i    var city = "SH"8 |  Y9 T* n5 ^
    function inner(){
8 S' l  G+ U& m& {        console.log(city)/ p) E' K$ _+ x% ]+ E) O# H+ ]5 B0 L
    }
* `# J6 w8 @+ E8 w* D    return inner
4 N4 ]" J( L- f+ W' T# ^1 U}2 y8 I9 U5 i  d9 g
var ret = f()
" B! m3 n9 w  j# j8 y  T) Fret()$ w9 ]- W9 Q7 r7 W' N* Y
执行结果:% c% c, z, O1 i) P) Y3 q
SH
6 E) Q4 h8 S' @- O% P
1 G/ x; u# u0 {</code></pre>
- Z+ i( D5 J! }7 Q% k<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
/ t/ C7 K1 N7 h5 i* k<pre><code class="language-javascript">var f = v =&gt; v;6 s( x) q' @+ V
// 等同于
% D# X; l; E3 J6 L2 o* c* K2 N* xvar f = function(v){  k1 U- I: w6 p- o* x$ T1 K
  return v;
3 J, U2 X& |9 ]5 F7 X- E/ m0 J}3 o* e" i4 p+ T6 N8 h3 _
</code></pre>4 K0 @- @3 p0 M: t' G: ~
<p><code>arguments</code>参数 可以获取传入的所有数据</p># r& p# e& `2 G5 g+ y! u
<pre><code class="language-javascript">function foo1(a,b){
) d" n- W8 R* f6 J    console.log(arguments.length)  //参数的个数
- S8 B$ @6 g8 ]2 v  C% T    console.log(arguments[0]) // 第一个参数的值  W4 C$ x7 T9 q- U; _& S
        return a + b   # V: B* x! E$ b6 q3 j" c
}
5 Y4 A. X0 i  G/ y5 {4 P1 m5 {foo1(10,20)& I  ^, I0 g+ k9 f: V" A' m
结果:; V" L1 m6 m: f! T  d
2          //参数的个数
! M: \' H' Z( I& e10        // 第一个参数的值
' Y4 e/ |1 k. n3 L5 m30        // 返回相加的结果$ w% c0 Z* x: z( T  P# t
</code></pre>( G1 R2 r8 C: B* r6 C3 O5 i' e
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
3 q, q9 `8 a" F" k' v# J  h" q<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
) `- l, ]) X8 m0 W$ Z3 d3 q2 [* c+ J<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>8 W- z9 X# d% i  Y  h0 I1 l
<h4 id="281-date对象">2.8.1 Date对象</h4>* v6 b# E7 j: L& w8 _
<pre><code class="language-javascript">&gt; var data_test = new Date(). X" R9 V7 u* m
&gt; data_test: v& g7 ~( F! |- a8 E+ W
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)3 x; ?( l- `1 b
&gt; data_test.toLocaleString()* c( g! p. C$ @  L( w9 M0 S8 i0 \
'2022/2/11 下午9:44:43'9 O5 Y) q( W( r8 ~
/ i) ~* q' m9 I9 j2 p
&gt; data_test.toLocaleDateString()
, Z5 ^: B% _4 q# @( s& v9 D( t'2022/2/11'& I; s2 \- o" l2 ~; Q; m$ v0 p! t
( a' q6 I3 w! x$ z) f, X! ~
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
- }( W1 W, d  p; D! v$ }&gt; data_test2.toLocaleString()
' Q; G. R8 b  y- p5 z% p1 Y'2022/2/11 上午9:44:43'! b  j0 m) _* Z0 W5 F$ d

; V2 k! J! R% M) D/ [5 O& O; e1 {// 获取当前几号
2 k) t: v! A* Y2 V&gt; data_test.getDate()
7 y" Z9 k% S8 x$ o+ o& _8 b; D11
. B% u9 F* a1 T: J// 获取星期几,数字表示
8 `' p) |5 Z: G. M; X&gt; data_test.getDay()  
# o# ^9 [# Y$ J" y+ |' V# J" V5
6 H% `. e1 `7 s7 i9 I  f, q7 y// 获取月份(0-11)
% c! h0 s9 I7 e! ~  i+ D&gt; data_test.getMonth()
, O2 L  G2 G# d" e6 n; I1
3 _1 R9 |; G4 K3 ?7 @) |" p& K. B// 获取完整年份3 {7 K3 P+ |6 G8 y' h2 A# N( p
&gt; data_test.getFullYear()
5 v  m! P5 K" {2 U1 v/ L& H3 z! S2022( |* |! b# X/ L) ?, o) }, e9 L. s
// 获取时
- ?5 I5 |$ I! ?5 M3 }" x8 @: H2 o&gt; data_test.getHours()" ?% I  H' m) D! Z# f3 F
219 m9 B; P1 }, c( S: Q! A6 E
// 获取分
$ R" q3 d' X; {! b; j9 S&gt; data_test.getMinutes()
* F. i0 a6 A  f# `+ u; D44! H- g6 T8 `" \" c: k
// 获取秒3 Y, }. c* b/ _- y: V
&gt; data_test.getSeconds()
# D, I! W+ o9 i, n43
* t7 _  g) k% g# o, x( Q/ h, O* H// 获取毫秒
" k( L) c, w  M! n' G4 ]) ^&gt; data_test.getMilliseconds()7 l4 E- i* G* w  G+ M
2904 D2 o+ |" Z$ Z6 x, ?# l
// 获取时间戳
5 _, t8 n0 b) Y9 \4 v! n: n2 B* t&gt; data_test.getTime()
$ x! D/ n& X8 @' {7 G) }1644587083290
8 d  |& G% ]% f, `</code></pre>
6 \; w' q+ }9 {+ b4 ?$ D) u2 R<h4 id="282-json对象">2.8.2 Json对象</h4>' U% Q& x* s1 L9 h
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
9 _* h% h# _4 ]! hJSON.parse()  // 反序列化,把JSON字符串转换成对象
% P" t/ N% x9 |+ [' o& m7 T. w2 m9 n% ~; ]' M9 D2 ^# c
// 序列化5 @4 K$ }. U, ~5 Z8 f( d1 ?
&gt; var jstojson = JSON.stringify(person)
. @# D* J$ E/ I* P( a+ w&gt; jstojson  * k2 g; R7 w* }
'{"Name":"Hans","Age":18}'
! k# h3 s5 P6 p! X+ \4 d6 I
' e. j  s1 _2 A+ u// 反序列化) L2 X. t8 W8 {6 W8 h3 T/ t9 e1 m
&gt; var x = JSON.parse(jstojson)
: ~' ~: d- V. m2 o5 ?9 b- o) k&gt; x% |8 v5 [4 y9 J' [( F( y
{Name: 'Hans', Age: 18}
9 }4 I1 s' _9 O! h/ j&gt; x.Age
- F7 r/ _* e3 w0 b+ J18
4 G0 D6 x4 }& n( T</code></pre>% ^/ G) [. Y1 l
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>1 u$ i+ B4 Y3 L, E& g, S0 J
<p>正则</p>9 U  |; i- b: w: \
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
$ B  p. m0 t2 z1 l- N) Q1 P&gt; reg1
+ w2 Q' R2 }" {7 D/^[a-zA-Z][a-zA-Z0-9]{4,7}/' O; [0 Q: `( W; C. N  L. n% U; M
&gt; reg1.test("Hans666")0 w6 q! ^! J# T4 U( x+ ~
true6 J, a0 U% I: G4 W( U. h

8 W  d) ^4 g. ?$ d' e&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/( T. ?+ X* @& S- F
&gt; reg2
3 T! l- l4 {9 w) c0 V/^[a-zA-Z][a-zA-Z0-9]{4,7}/# G+ {9 [6 l0 F. I0 [" N
&gt; reg2.test('Hasdfa')( W* ^! i+ c6 ^4 O( `8 a
true
" R5 ~% k' q, t# F' t. Z0 V
- z& T3 S! H; m' p/ D全局匹配:" L( P$ O8 W$ C) U
&gt; name9 k3 @# T( |6 _+ E. U' v* K
'Hello'5 E2 o( L7 V+ Q$ ?3 v2 X
&gt; name.match(/l/)0 m+ n% h7 Y6 J7 L
['l', index: 2, input: 'Hello', groups: undefined]& G7 g# P5 L1 `" N# L

! d8 i. a- _0 ]; F&gt; name.match(/l/g)/ g7 {! t" p5 L$ y: o, N
(2)&nbsp;['l', 'l']
9 I+ c/ j4 I/ A* _// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
6 M' I2 Z( B3 ~7 O) }! n' J* z4 k# b! @/ [) q+ z6 ^9 V. V* `/ A
全局匹配注意事项:
) Q7 z1 R  t0 W# }) u; L* z&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
3 g  \7 d4 @. ]* P! N# f+ g&gt; reg2.test('Hasdfa')
1 e( M4 h! J& htrue% y; q3 J+ D% n+ ?
&gt;reg2.lastIndex;& X; p- ?+ J" g) L8 Z9 n: L, K7 ]
6/ d* o; h. a$ d
&gt; reg2.test('Hasdfa')$ G1 d9 s6 k7 r% }
false
7 F. R9 n' W4 `9 o2 H5 T8 ]&gt; reg2.lastIndex;. e! k$ D5 \1 I8 ]3 |+ v
01 w* E0 v8 W9 I9 O2 j- w; o3 T
&gt; reg2.test('Hasdfa')
  R9 q$ N3 Z  v) O9 otrue) C* b! J' C. S) a. k: Y
&gt; reg2.lastIndex;; X3 y+ m6 {9 L& S8 f9 a! C
6
% Z4 u! i& D8 d  K4 M/ l3 R% n  J&gt; reg2.test('Hasdfa')4 ~8 U5 J0 a/ i) u* x- P3 i
false
3 I+ M, {( k# o- ~( `* I2 c&gt; reg2.lastIndex;% {* E9 F0 k) I1 H* U" z9 m. w
03 \1 Q2 D" s- `+ K
// 全局匹配会有一个lastindex属性
# ~2 C' L0 w9 {% H' ^- C) k&gt; reg2.test()
% l4 Q' o4 E% [, lfalse0 Y- S  K  j1 S3 ]  C, z7 m
&gt; reg2.test()
, [$ D' W# i( L1 |* Jtrue9 |# C! w4 ]" c, D- S
// 校验时不传参数默认传的是undefined
/ b$ H+ c9 B" {! x6 W8 |1 V</code></pre>
% T6 ~; V/ `0 y  |! b: L<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
+ J0 z) p+ ?9 E2 q<p>就相当于是<code>python</code>中的字典</p>
, U3 h+ ^  [  g8 F$ ?& K<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
" \: u- L. K) p+ J&gt; person
" k& ~5 e1 _/ X* x7 P% v{Name: 'Hans', Age: 18}' M5 [% ~" k/ A7 c
&gt; person.Name8 z+ k& z1 t) C* V
'Hans'
/ X6 F% B  O. S* C- O&gt; person["Name"]
; c* U$ Y- q. i'Hans'/ H6 ]/ s" K! v" G3 U: W1 H* w

! N( N7 M  `  n; T+ m// 也可以使用new Object创建
, C! W: V+ \0 S; ?& t&gt; var person2 = new Object()
: \; m7 m3 U: f3 M' _&gt; person2.name = "Hello"
, B2 J8 c4 G6 L'Hello'
0 i0 P% D: `- }6 a: u&gt; person2.age = 20
' q: j$ s* F5 g) c3 H) z20& R; |0 I0 x( ^* U. @
</code></pre>  P: Y- E# P2 O4 X3 k% X
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>; R9 c+ [; f- ^3 n" J/ h" `  S7 p( G
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
: w$ [9 ]- @- C' m" P; W5 @$ W/ R4 J<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>3 r! @, h: o$ ?; B: y, _
<h3 id="31-window-对象">3.1 window 对象</h3>
+ e+ O  d9 }8 ?  v# A* y<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>& e9 \0 o! r8 w8 K! k
<pre><code class="language-python">//览器窗口的内部高度  V* k- z( Z; j( c; g; B- a* N7 p
window.innerHeight % S) X9 u- B+ }0 j5 T
706/ G1 B2 V4 P1 }" f
//浏览器窗口的内部宽度: \  [. ^9 k6 ]9 b$ ?+ P9 E. g
window.innerWidth
* x7 D+ b1 X+ E% x- Q1522
/ s  d2 N: Q' @/ g* N% T1 f// 打开新窗口
6 s* e( x! H" z! z8 |window.open('https://www.baidu.com')5 M7 R! h; a. C: G, l
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
- z, K" [) s0 X: Q2 O5 i. _3 i// 关闭当前窗口2 w5 P; k# O7 ^( h: N9 ]
window.close() % ?# E; }$ g; ~" |; ~
//  后退一页* Q9 s# `' X4 D5 R2 F. ]- X
window.history.back()" [! _0 S! P- p) r7 a
// 前进一页: Z+ h) E4 f% G- Z$ i9 Z
window.history.forward() ( ]3 ~9 L- ~3 V1 ^3 H" `2 O; z
//Web浏览器全称
$ Y! y) F, \  i6 z( V. y8 ^window.navigator.appName0 p, @- _8 }  @* I* h& @( _( H
'Netscape'2 y" k% q- @" ]+ i3 I) p
// Web浏览器厂商和版本的详细字符串
; y8 ^8 ?" f' X8 C5 Kwindow.navigator.appVersion
  r+ u- z- m' J* o) J" ^'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
9 M( t  j  c1 q2 M# M// 客户端绝大部分信息
5 O2 [. u* a) W4 J/ gwindow.navigator.userAgent/ d0 q, \- o- p
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
: q" e) u+ E! u3 Y// 浏览器运行所在的操作系统
; C9 ]' x  V! C' H; B2 g( M; awindow.navigator.platform% y% i( o+ z; W- b9 |
'Win32'7 c, d+ O$ ~5 e5 i* I5 @  Y
8 ]' U; u/ @4 V
//  获取URL1 H: W' S! S& t! m( b
window.location.href& F3 A7 e5 m! J4 W  f) t! |
// 跳转到指定页面
/ d# D. B8 J( H1 R" @0 _9 U; Hwindow.location.href='https://www.baidu.com'
# h' q. c! G3 U- X" [// 重新加载页面) T* g# _. I& n) O' U
window.location.reload() 6 g$ p& N' {& O7 E6 O9 R
</code></pre>
+ R# J: W, i- l) V- |3 k<h3 id="32-弹出框">3.2 弹出框</h3>  l. A% h$ j. t" P% O+ i& o
<p>三种消息框:警告框、确认框、提示框。</p>
; N& R  V5 G' G  x<h4 id="321-警告框">3.2.1 警告框</h4>; g/ R- l" o6 w* P" K" Q
<pre><code class="language-javascript">alert("Hello")
& J9 p1 Z5 c7 J; m</code></pre>
: t/ l7 C" H, d+ @) i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
2 J9 O; R& ]$ H7 l/ o  \) K<h4 id="322-确认框">3.2.2 确认框</h4>* V+ `; K8 Q) s7 ~$ t
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>& Z& D' y" k( ?% _0 Q
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true! ]% f; v) @6 u" ^
true
  v0 W0 ?5 r0 b% l&gt; confirm("你确定吗?")  // 点取消返回false8 Z7 L; x0 O  E  Y. r3 J
false
- W, d- ]; r3 @6 z# d6 m</code></pre>
, ?9 p% C  I0 g) y8 j, V<h4 id="323-提示框">3.2.3 提示框</h4>
/ B3 y  }+ A, ^1 E4 X! n% Q1 O<p><code>prompt("请输入","提示")</code></p>
: J/ T. W$ h* w7 W<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>, [. `9 D8 f( m2 R) u/ Q
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>) `( @$ C" J1 o9 @6 ]* P
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ O, P4 \& [8 [+ `# c$ s2 j
<h3 id="33-计时相关">3.3 计时相关</h3>
% d- U6 r. ?- o* x, C+ h+ W  T<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
6 R4 W' A! n4 x: J<pre><code class="language-javascript">// 等于3秒钟弹窗( W" }. q! X2 y/ F/ |! c
setTimeout(function(){alert("Hello")}, 3000)
) t' S% W: j% D6 l% E. C
9 |% h& \$ n2 ~5 ?: Q3 S6 hvar t = setTimeout(function(){alert("Hello")}, 3000)' q1 N+ s. B4 r& j9 [. w

3 \) t1 [' \+ Y# `// 取消setTimeout设置
$ w/ e) Y! H# ^6 r7 YclearTimeout(t)+ A5 g6 |( {% E) O( K
</code></pre>; N1 T0 r- p, R5 Z: ~5 Z8 t
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>& s2 O3 t6 j4 |( V" K$ D
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
7 ?+ o# z, k% Z; r3 s+ N<pre><code class="language-javascript">每三秒弹出 "hello" :
3 C1 ~. L! ~+ X" e2 j# R3 d) gsetInterval(function(){alert("Hello")},3000);
# u& k4 k5 w9 S& N* Q</code></pre>
- Z5 ]" w2 l: T<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
/ K7 Y# q/ M' s% h  e<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
. |* U( q8 r# y4 ]6 u//取消:6 r& q: O+ h: ]3 e4 b1 u: U
clearInterval(t)
/ E8 |" Q! d. f% p</code></pre>4 y# i# E, p$ @: O
- M( T1 [& |; w' w; _( N& P
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-10-28 14:25 , Processed in 0.102928 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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