飞雪团队

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

前端之JavaScript

[复制链接]

8115

主题

8203

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26675
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
( _  j( O% Q" C; p
<h1 id="前端之javascript">前端之JavaScript</h1>
; H  Y7 w8 u8 t4 E! A$ q<p></p><p></p>
  N# i# ~* t: w: I8 V6 W<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, Y8 a  m# W  B! _* x2 B<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
% U7 Q+ s: ~( c0 M( Q8 e它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>  {. m8 i/ L% q4 x9 ?
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
& b+ u1 N. \0 v' T2 A它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
  W1 d2 M) K: L  g6 `8 A2 G& O<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
, N: M- w/ z% R1 k- L5 g8 ^+ h3 C<h3 id="21-注释">2.1 注释</h3>3 \1 t5 `8 K3 a" G& Z$ p5 X3 q/ Z: D
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
8 q6 V# k8 o' n0 \1 y<pre><code class="language-javascript">// 这是单行注释% ~+ f2 t+ H% N1 ~
5 ^- X# P- a6 G" G
/*( M/ r6 K  o) `! B$ X% O
这是多行注释的第一行,
4 C, p. g- R( O$ f6 l4 G% |这是第二行。# e! R9 Z6 M- r+ z# e$ K- P! C
*/
3 Q' a2 v0 J" ?3 p5 x* T</code></pre>
  Y9 \: v; |' w<h3 id="22-变量和常量">2.2 变量和常量</h3>
; y7 {+ B( H& T# W5 j7 [9 J<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
- D4 r; j% n4 P! |% ^<ul>) X* ?( {5 d( c  U# |$ f+ R! S
<li>变量必须以字母开头</li>
: k: W, K, i0 G<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
0 _/ O1 O9 t+ u+ B  @: q/ c- N9 `<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
% v( G3 B2 E8 q/ W! f5 t) Q# Z</ul>
8 m# L: D0 r9 m" ^; W9 |<p><code>var</code>定义的都为全局变量</p>
* U2 `9 {) k* C1 H* L<p><code>let</code>可以声明局部变量</p>
. `9 W; y( w& J* E5 u<p><strong>声明变量:</strong></p>
) n  u! x. N( o0 C7 B7 u' g<pre><code class="language-javascript">// 定义单个变量4 O" n: Z6 ^0 C# s
&gt; var name7 ~+ W% J3 p+ x  D" Q$ Y" D
&gt; name = 'Hans'' a" F0 C$ a( B+ L0 G
//定义并赋值
8 g7 ~, r1 K& |9 C' V! Z&gt; var name = 'Hans'
/ U( V! c* C: i$ E&gt; name
) b$ `8 l) J/ \" Q8 ~'Hans'$ G1 ]1 \. d& c( F3 }$ N

" n" Z! k' q, r7 U3 K// 定义多个变量, I0 n8 x- g2 W7 @) ~
&gt; var name = "Hans", age = 18  e8 k+ y/ q" j) W+ @
&gt; name( q1 c6 L; h" J+ C' }
'Hans'
6 ]+ S+ C2 |& B7 @. |&gt; age! \  P+ z, I4 y  ~$ s  Q4 D: J2 P) V
18$ M5 ^) c0 R$ }6 r1 U0 {; j. c4 a# d

- Q/ S* j" z$ U; w, H//多行使用反引号`` 类型python中的三引号0 s& N+ z8 D4 ?5 ?% B  L  G
&gt; var text = `A young idler,
) U5 m: x1 n; D6 T+ \5 Man old beggar`
2 u" C7 Q: m+ Y( X% i&gt; text6 N1 F4 R' a+ d5 B" w, u
'A young idler,\nan old beggar'9 ]* }+ a0 K& C0 ?2 C4 P
</code></pre>
" ^9 X: l0 K0 W* _& x( }& B<p><strong>声明常量:</strong></p>0 F  l6 W9 _% [, b; C! k
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>* x# B+ C( E* |
<pre><code class="language-javascript">&gt; const pi = 3.148 C! F' x4 f. R% t% B& h
&gt; pi
- e+ a# a  O! j8 X& X4 n) _; I3.14
/ C1 b7 Y' Z4 l! ~&gt;  pi = 3.01. ~5 b$ u$ C6 n- C. G8 a
Uncaught TypeError: Assignment to constant variable.
7 z, q/ X+ }3 Q2 g+ w    at &lt;anonymous&gt;:1:41 C/ q! o# E  x/ u" F9 v# P
  z! y; t4 @1 C. n
</code></pre>0 [  I5 b+ p5 _) P
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>9 n0 n5 Z* Q% [3 \  r  }
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
) x7 d2 @6 r6 R# m/ g, A, h- F<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
+ n$ a8 x+ w+ {) a/ k) W, `8 f; z* _<h4 id="231-number类型">2.3.1 Number类型</h4>
; d  g& S4 R3 o1 k- S/ r1 B/ ]% P<pre><code class="language-javascript">&gt; var a = 5
0 l& ^8 c  T3 Z7 n/ l&gt; typeof a   //查看变量的类型  
" K# H5 h% p- V- qnumber5 ]4 O: N: V" r. F7 U3 J& l/ F
& K8 a1 G3 ]0 ~0 x9 Q3 S
&gt; var b = 1.3
5 U$ G! n; H3 P8 ]+ N1 z&gt; typeof b
+ o$ C8 A/ `% \number& ~" [9 Z) a& y+ z( }
# O- Z4 S( X9 t( m' M9 M( ~  k7 o- D
// 不管整型还是浮点型打开出来的结果都是number类型
1 [( N, t0 l, ?6 n1 @
1 F0 `; Z5 a0 |3 A+ I8 Z9 ]/ G/*
9 y2 c4 b( N* O& ~( r2 zNaN:Not A Number
! Q, V2 {7 I4 {( ONaN属于数值类型 表示的意思是 不是一个数字
+ o: D9 ^# l) k: f*/
/ W4 F) d0 m+ R4 |6 d! _6 U7 @/ t+ m2 `' X9 r' G: v
parseInt('2345')  // 转整型6 V3 ]. H9 a$ j2 w, A# x5 Y
2345
* R2 [& G0 O& R5 J1 v" e+ bparseInt('2345.5'), k5 B! h) B" R$ Q6 n& Z( W# b" h
2345
, Y/ f+ e5 |1 f6 O& H+ E! XparseFloat('2345.5') // 转浮点型0 h0 q6 s, V# l  q: ^3 h3 E( z
2345.56 G2 G5 V1 }" A2 h- U
parseFloat('ABC')8 q5 V. d9 i0 s2 [) \* S
NaN
- A( k6 m& F4 u3 A7 |% k& WparseInt('abc')% Z& t$ Z" D0 N! O
NaN
0 \" [8 O0 S' V/ h! z</code></pre>
: a, |4 y# \& z/ c<h4 id="232-string类型">2.3.2 String类型</h4>
6 w( X0 @" _  x$ W3 ^5 J* E6 R' L9 h<pre><code class="language-javascript">&gt; var name = 'Hans'
; G$ l. C: V% C* {&gt; typeof name* a& g' W3 h1 j- a& w( {
'string'
4 J$ x, ]% b7 v5 X
0 U4 X* t% u1 c1 ~2 F) ]//常用方法
5 z+ O3 x, Q* j: V1 D( H  I) F// 变量值长度
. w5 @; W; U' z* E! O8 ?- g/ M&gt; name.length  Y. r" \) }+ ]) d  g
4
8 d1 S& |2 V+ B// trim() 移除空白) Z3 |, n: o" i, S* `
&gt; var a = '    ABC    '
7 s0 q( C7 `% ?. B$ p  r# h4 B&gt; a2 \1 `- U% p  E7 Y# ~2 P: J- W4 H9 `
'    ABC    ', p* M# J: F* B
&gt; a.trim()1 k: v( R. @% R: m9 Y- u. N
'ABC'7 W5 B1 ]; \+ y$ c) Y1 z7 F/ N1 g
//移除左边的空白, J" j" l9 b$ @4 |6 |
&gt; a.trimLeft()8 h' W, Q4 f9 s, c9 Q, x# }
'ABC    '
7 {. \) @; L4 `* {//移除右边的空白
/ B+ G! A) y# ^5 W: {+ l&gt; a.trimRight()
, J4 T' \  x6 r0 U8 K& a'    ABC'
1 l# q& O3 }# c/ a/ t# s8 j/ Z. R
5 `6 c  ?; U4 g4 S//返回第n个字符,从0开始
8 q8 s! E8 p" N' K& G6 N&gt; name
6 q7 z" y; V! Z& w2 G. A'Hans'
% X1 ]: U  f- [" h3 @% Z" p&gt; name.charAt(3)
& C" \) r) J  g+ V. `5 Q: H's'0 e7 ]6 v* c$ M1 ^
&gt; name.charAt()9 n1 ^/ z4 t0 j6 A# S8 }
'H'
5 O* p) _3 F/ M&gt; name.charAt(1)
) z3 t* A$ f+ E. n'a'
4 C, f/ q4 L: U
; [. u0 V! P/ y# A6 k) _, a7 ?. k: k// 在javascript中推荐使用加号(+)拼接
+ \& T# L" ]) I5 u3 Y&gt; name
3 K8 T% s$ s  w4 R- t'Hans'4 R( C8 X4 c! w+ ^9 ?8 K
&gt; a, i' K+ @8 ~- D4 }
'    ABC    '8 |9 h4 k; F" x( s- ^5 U
&gt; name + a
& j2 m  r4 m0 O1 O; M'Hans    ABC    '% g5 a) n' ^9 \# u" q# I$ N
// 使用concat拼接& B7 a" ~9 A( J: c6 I/ A- j5 L
&gt; name.concat(a)9 V$ k  J/ T# e) v4 b2 a5 e1 q
'Hans    ABC    '* h) e4 o' N; i2 f5 ~7 [5 L0 P

2 U5 I" h) W( P' n//indexOf(substring, start)子序列位置
' F  R2 H+ k  n0 p9 G
1 c) g/ ~2 Z/ F' n8 Q+ g( p$ ?- G&gt; text
' h! u0 p1 v( S6 B'A young idler,\nan old beggar'
( u4 k7 D" o" Q" `1 J" h&gt; text.indexOf('young',0)
8 Z% f1 s" R2 R$ `2
1 j  ]; e9 {; Z3 j5 `: d
% D' t7 E$ {) |//.substring(from, to)        根据索引获取子序列! _  h# h, g; Z5 A
&gt; text.substring(0,)
' i' j, B; ]# O# a7 M'A young idler,\nan old beggar'- S& {$ ?: w" w: i' F! d5 I, q
&gt; text.substring(0,10)
/ l4 H3 V" H: X: p) T% U+ K'A young id'
6 B4 n8 L# ^- C6 k% G0 B- v/ K/ y& {* ?. w
// .slice(start, end)        切片, 从0开始顾头不顾尾
/ \( I, e9 x; Y" N# ~&gt; name.slice(0,3)
6 d: Z" M. m! X'Han'  m1 ^" p( X# H# P2 n- M
+ m0 k! p3 |1 t9 l
// 转小写
0 D+ F! ~' i- k&gt; name
- y( _3 c) U) ]9 y) V'Hans'2 l# s6 N& C: d+ J- D
&gt; name.toLowerCase()# l. e) [5 g9 K3 [$ z5 }5 h/ E7 H0 x
'hans'
1 ~: ]* N1 V4 j) n// 转大写9 Z  r: X& D& {, k" _$ c
&gt; name.toUpperCase(). N; p4 @- z( P# z5 p" f, a
'HANS'
; M2 R9 S0 W$ q: I0 a/ p. h# I! |1 Q) _0 H" e4 n8 T
// 分隔
" U9 Q4 V3 K6 P0 x+ n3 W7 O&gt; name
" n. w# n6 g  {# X4 T'Hans': [; B1 l! C" U8 P
&gt; name.split('a')0 n5 _  i, m: R5 b0 g, L) Z4 p. ?0 p
(2)&nbsp;['H', 'ns']
# k# Q% m% X; y3 e</code></pre>
" \8 o! O! n" ~- m& T4 W9 o<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>$ l1 V9 h3 L" _! @7 O6 }9 T8 x
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
) @2 [! ~4 }9 _) h' k5 _0 ^<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
; ^/ p0 h/ g7 i& P<p><strong>null和undefined</strong></p>% |" b( C5 U. [5 |& W
<ul>+ x; s1 z9 l2 I" h
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
0 U2 U. ]+ p2 J$ G9 j<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>* _: t% K4 `8 s( F. X# R$ Q( C# m
</ul>
8 r7 G, q' ~% u/ K/ d5 P<h4 id="234-array数组">2.3.4 Array数组</h4>/ G6 D0 L1 Y. x. h- @
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
+ _# w0 H3 r; U<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
- d2 i3 ^; k3 P4 W! R% E&gt; array1' ~' P* v5 X2 P' p
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 G  y, i+ }5 Q) L2 X& }&gt; console.log(array1[2])  //console.log打印类似python中的print
& C/ y$ A. _/ r7 J# d; K3
1 T# F2 ?, T' U( |% I3 l& m# W// length元素个数
" M6 |( A& G; |2 S, V2 K$ p. S&gt; array1.length$ }' n: z7 h4 o$ Z) o, l$ X" f7 {( o
6
" I* `7 A) |5 n' b8 d( z9 L4 v// 在尾部增加元素,类型append
: g& r$ N1 e* s3 ?- K&gt; array1.push('D')
- y' D/ W: j. _7 {1 E. s7
3 i3 b1 N* h% `0 i2 G# u/ ?2 T, z&gt; array1
# ^' D8 }. `. E7 B0 w& C(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
9 ~8 L+ P+ e% n// 在头部增加元素
* I2 Y! _7 [0 n! q&gt; array1.unshift(0)$ ]+ v$ k5 Q& q
8
# M' e5 ?0 D+ }  E8 {2 G, L; B: Q&gt; array1
& }' ~8 L8 Q5 M! }9 X/ _: k(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']5 ~( o* K" @5 ^2 V+ P
; i3 x8 v: @  ~
//取最后一个元素
, F/ y' H! J7 E8 v% x3 T% ]. s$ F&gt; array1.pop()
& ]$ E" S7 E' v6 T'D'$ H- `6 d" W' E, Y
&gt; array1; r& {5 Y8 p; Y
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
* \, b! l# j" C1 Y& [//取头部元素9 ^* S6 Y* Z* c
&gt; array1.shift()
0 M! n8 n, G9 m0 e& g05 s$ T4 P" z6 p+ @( @; M' q$ U
&gt; array1
$ r: z$ X5 d  |* Z6 d(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']) q/ H' J- w0 z+ t6 U' }
  z" r% O) G. E% z
//切片, 从0开始顾头不顾尾
. Q4 W9 U7 T5 \& F. r" k) H&gt; array1.slice(3,6)
* @. l+ A; q# A- f$ l& ?: O9 i9 W(3)&nbsp;['a', 'b', 'c']
2 r4 w9 s0 K" i& I. ~" C# T// 反转( ]% X# L% @  B# e6 }
&gt; array1.reverse()8 }* p5 j1 Y/ q3 i( L
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
  g5 @! X! A! `2 g5 L// 将数组元素连接成字符串' ?) g% E4 r& K6 W
&gt; array1.join() // 什么不都写默认使用逗号分隔( l& X! [- {6 c
'c,b,a,3,2,1'
; g' J9 k9 ?* x/ z. i&gt; array1.join('')
% U* g  @3 ~" ^+ q* A2 f'cba321'  |* ^  @. @( M6 s  b5 p
&gt; array1.join('|')
& ?. m, D7 j8 K! b" u2 U2 C'c|b|a|3|2|1'; o* B, F, y" Q: F$ p) C# |- m

4 W5 E8 L, b% i9 d% {, M9 f// 连接数组! N" r% v. ?* I5 x% j% `
&gt; var array2 = ['A','B','C']
& a/ ?7 q+ \3 s  D; _' y&gt; array1.concat(array2)
8 k1 {' M8 J, Q6 f0 ?(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
! I! ]. R& B' n" U9 k8 B! O
2 ?; S2 \3 Y' ]// 排序# R% r: H# G4 P: S
&gt; array1.sort()( U; C- y: s- G% m1 Q2 g7 I
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
1 }4 J  Z. r5 {3 g: o- q: N5 b, R% Y# g7 T3 u0 D
// 删除元素,并可以向数据组中添加新元素(可选)
7 j4 m6 k9 o9 u8 ]; W; s+ u&gt; array1.splice(3,3)  // 删除元素
0 V+ D+ ?, n: A' I5 }, O% @/ v7 e, f(3)&nbsp;['a', 'b', 'c']
* `8 c& u2 |& [9 t&gt; array17 E4 j6 M, P, R  B+ W; O8 q
(3)&nbsp;[1, 2, 3]0 `% k$ i, i# Y7 l$ m; Z5 O
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
) {+ x) @% V3 A% n! N9 w4 S% `$ L[]
) R& V" G" d. {( y9 a, Z&gt; array1
0 k" ~. |2 D3 W9 R, ^* a(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']3 q, }  o0 X, W3 S- e  c

. }& P: ]) Q6 B, ^3 k8 v* }/*
2 q4 W) I" w; H+ Tsplice(index,howmany,item1,.....,itemX)  s$ L( ^5 f  {, \
index:必需,必须是数字。规定从何处添加/删除元素。
8 b; Y" o; ]/ x3 u/ G, f/ W; f+ \howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
* d( ^0 _, [/ ~/ `' J( W0 Gitem1, ..., itemX        可选。要添加到数组的新元素
* g( V4 o( p) G$ V- [8 \; L*/
$ R( _% \& Z' |+ ]; X0 b
* F3 |! r- M" P8 u+ j9 @: b, p// forEach()        将数组的每个元素传递给回调函数
: j) Q! m: C7 u  _% k$ p: c&gt; array1.forEach(function test(n){console.log(n)})5 J' v0 C% x' [1 O
1
/ c6 M0 M7 w( J. x/ R 2
( V/ }4 [6 g2 i8 z# a" F 39 \7 n* e( i( e7 H3 X6 g: a
A
0 O6 d# c+ @* B$ ^  m* `( V, ?2 d$ f8 Y B
1 i0 t' ~, j" Q1 c; t C
" u1 g2 t" Q0 x! i// 返回一个数组元素调用函数处理后的值的新数组9 g/ N/ m7 ^( u3 N7 ?+ C
&gt; array1.map(function(value){return value +1})
: e& ]1 p3 e: m8 J( k) t(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']$ _% U' [. Z0 |* l& P
</code></pre>7 y4 a, f  B! ~6 s! H
<h3 id="24-运算符">2.4 运算符</h3>
! l* w2 R, W/ ]% K1 k6 E<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
1 ?$ P: J; B1 `. q: v9 P7 A* ~<p><code>+ - * / % ++ --</code></p>0 g: a4 @6 C8 ?/ A1 \
<pre><code class="language-javascript">&gt; var a = 6
( n4 W8 N1 u7 r8 u# e% ~7 R&gt; var b = 3
! B/ n9 [) r+ }// 加6 D  M4 B8 Y! ?: y9 d1 R5 t
&gt; a + b. t+ c: e" d2 s# K4 d; h  v
9
/ `$ f/ m8 q3 h7 u  s! q% U// 减
+ Q3 T% ^* x7 G$ C8 |&gt; a - b
0 Z& k, {6 D' Y/ t+ c3
: P4 t% X0 J4 c0 u! @// 乘
) [  H2 N# t% E&gt; a * b1 A1 N2 N2 v- i3 X3 m
18
% r( u* ?1 `: `  u( o// 除
  }; {+ [: F" p/ Y5 u' \&gt; a / b
5 e! |" C. P5 K2 W8 N2
/ @' R3 `7 K% R. @! V3 }# t5 ]" b  k// 取模(取余)1 l( ]8 @% o9 R8 F
&gt; a % b( i. N) c/ {( i8 V. C" M8 `
0
  S$ H' \3 n7 Y/ |+ G// 自增1(先赋值再增1)
- j, M6 G7 J4 i: o% r  `1 z&gt; a++1 r& c; {0 c/ P
6
) V. w% J; _0 H- k0 {' `8 W2 B&gt; a1 X. Y( e) W4 r$ @  j/ w0 p
7
3 s" H' h9 [, a' _( F- N, {% g' y. x// 自减1(先赋值再减1)" {; L. ?. q& I$ ~5 e
&gt; a--9 [; l  m- U7 E  @( o4 G) H
7; E. b/ H- c* L* ^6 H( g$ G
&gt; a
5 s6 Z( s0 s# t% i; R  u6% N2 O( {% G3 K( ~0 A
// 自增1(先增1再赋值)
" E2 {8 y2 Y0 [# }/ c$ _% z, R* F1 e&gt; ++a; B# N" f) c/ P: d* f2 }- `( N: X
73 l: ?2 w/ ]- P0 n3 t! {& k
// 自减1(先减1再赋值)3 v% o4 d; D8 @! ]( L
&gt; --a/ E. F* l2 w; k% u5 d' z
6% r& Y0 \2 i4 B( Q3 K
&gt; a
7 _) g; U: |: B4 \, i64 X2 c) e/ \. E
% \" v/ I8 R5 i, k( q
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ J+ n' n% C# @; L; S5 c</code></pre>+ q/ }# a: J8 i3 J7 u9 _3 H
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
! Z3 }# q6 U7 U8 z<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% M7 B  C! M* `, c/ ?" n<pre><code class="language-javascript">// 大于
: L6 q& |$ J- g2 q/ X&gt; a &gt; b! W& |/ U/ o- |) z
true
# Y2 I( x! n+ E/ P% b! ?// 大于等于: @, c8 L$ L% V. {$ h4 ~9 p
&gt; a &gt;= b
* D# i* ~5 e9 o, b8 V3 g1 Ttrue
% `4 H5 V- Z# O9 U3 P2 `// 小于- }$ f8 c  M& I5 V- y) T) A1 e
&gt; a &lt; b
, K, P9 z6 M& M3 Z0 Cfalse5 r/ f! i* R5 p0 k# C( ~
// 小于等于
* J7 g1 r+ K; p&gt; a &lt;= b
+ V- V. Z# i& q9 R3 c. q. Bfalse
5 p( B( T4 ?/ F/ C6 S! A// 弱不等于( U1 g$ a9 d) F2 X5 m
&gt; a != b
( s5 h* H5 X9 t; H% X- R: A2 Htrue0 s3 ]3 _$ d* u7 G: e4 A& j
// 弱等于, ?  y4 D7 S3 L  ~% P
&gt; 1 == '1'" a& a' ~' ^1 v( J( a3 @$ i! E
true
4 J% _6 _) {6 b6 I) j// 强等于
  c7 ~0 v0 P) A( m! |&gt; 1 === '1'
) S5 K. o" d5 A$ H) q7 X: Z/ {' V  L& Xfalse
5 H1 `* ^3 F' f( d+ F5 t* O7 Y4 J// 强不等于
) ~7 F1 D2 U( ~* |# e" H. `$ r&gt; 1 !== '1'  ]+ q+ V  x8 e  Q
true- e( @! t$ P0 j6 n
8 c! p- a) X5 n9 x
/*2 u$ P# b' z1 k" h
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
, f% B9 w' a, s8 \' Y+ O: {: _2 b*/. a, |% q8 i1 r' I7 q
</code></pre>
  |! U7 _/ k$ N$ ~+ X+ z9 S<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
5 c+ G7 D# Q% [" B<p><code>&amp;&amp; || !</code></p>: X0 R9 k% m( l& t2 h3 r; t
<pre><code class="language-javascript">&amp;&amp; 与( G! M( e  _7 t+ ~! C& e  y. |
|| or 3 i0 \* ~3 |  W% L% e
! 非
- [: u+ v" h; |! b: I  U</code></pre>; P9 A2 i  ^. [
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
! K' M; ~: z2 A# ]# M9 W* n. }<p><code>= += -= *= /=</code></p>
/ j/ W$ P7 _( W" y& e<pre><code class="language-javascript">// 赋值
2 @" l% C+ K0 g( D5 f9 l& t&gt; var x = 3
8 k. W9 U) N' b1 _* x# L& ]" Y4 c// 加等于
5 ?% `& X! h( j: s  N& O5 h8 H&gt; x += 2
: K0 {, E0 o" y53 j$ ?. B0 q( g. ?+ [
// 减等于
1 W& T* C4 L3 s3 b. N: L: N&gt; x -= 1
- x/ m6 H9 @7 e: J0 Q4
% C6 W0 Z& n8 A6 S" j! C8 i1 C3 `- R// 乘等于3 |7 L* Q/ p% S
&gt; x *= 2! {+ t8 G9 O; Y& F* u" _5 l/ r5 `1 w
8
! |# a' u+ ^5 _6 V; F// 除等于
  R& r3 z9 h7 d( }& K$ C&gt; x /= 20 ~* S; A, ~, s/ C1 t" G8 |1 l% d
4
3 {1 |% s# ~- H0 R. c</code></pre>
. [' c/ I0 N$ i; D<h3 id="25-流程控制">2.5 流程控制</h3>$ C! U! j5 N9 F2 Q# D$ x
<h4 id="251-if">2.5.1 if</h4>1 Q9 d2 M5 }, \  Y$ E/ h; W/ @
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
8 p( B9 g0 N4 e: D
4 b' q( x. i9 W&gt; var x = 32 B! t) s- U/ O' q4 [
&gt; if (x &gt; 2){console.log("OK")}' b( w. B' K( @# ^" J; `
OK% n, ~9 R* u1 ]5 f$ s+ i6 C

5 H# U1 a% s% t! ]& T$ `2 ?/ [2, if(条件){条件成立执行代码}
' ^; _# @* d% M; f" j1 h; }& A        else{条件不成立执行代码}
+ K# V1 y7 B0 L  t& N2 \" R
% O  x! o' B1 k2 l&gt; if (x &gt; 4){console.log("OK")}else{"NO"}; _$ q7 _  _+ _. i0 w
'NO'
5 Z1 L! c( c4 J4 d/ o9 w7 r0 K8 \( ^7 T% ~; D9 }: b: S$ Z
3, if(条件1){条件1成立执行代码}
0 H8 W, i2 l9 E: C  s) N5 Z        else if(条件2){条件2成立执行代码}
, Q8 B& l9 T+ z; Z    else{上面条件都不成立执行代码}
2 }) l% v6 q) ~" A  U
% v! \4 n0 K. E8 W+ p&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}! L6 @, o' G- N5 x* _
Ha
; w) J1 L2 c/ v- o* _# m</code></pre>- ~# o& r1 N1 @& n5 L7 w
<h4 id="252-switch">2.5.2 switch</h4>6 C6 d  `4 @5 D) v( U
<pre><code class="language-javascript">var day = new Date().getDay();  Y7 V, f9 c1 p0 [
switch (day) {
2 x  O' m4 I* l5 M1 x  case 0:
9 S+ y1 P! `% ?  console.log("Sunday");
* Y9 ?" i+ D' e3 ?  break;# r  {+ J' H6 ~1 C; y; Y7 K- V
  case 1:
- }% q( A: D( I% B  console.log("Monday");
3 g( k: b& t: F& Z  J! I  break;; ]- c' t) z  v  c4 @: C
default:
! T# N6 K. D( P: p9 f+ ~- L( M: _  console.log("不在范围")4 T3 E0 m( U7 e" X1 ^2 i
}8 |1 t& ?/ F: \/ {0 C* m$ D- Y" T; y
不在范围) p/ k2 x8 K- `% h/ {" M# n' Q
</code></pre>
8 B. v( z' n$ e* U<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>1 G$ n. a7 U7 O% ~) m" O# w
<h4 id="253-for">2.5.3 for</h4>/ l  O8 r9 c7 E: R
<pre><code class="language-python">// for 循环
) |% j2 B8 @; z: C  P+ d        for(起始值;循环条件;每次循环后执行的操作){4 \( `$ w; N( q% l! G: e
        for循环体代码
; N/ g% v' n6 x+ E/ D    }
5 P) F! ?' e0 Z/ g* g/ ?
$ p- ^- x9 s/ v6 d0 a  B, Mfor (var i = 0; i&lt;10; i++){4 Z' z1 d) `9 `# b
    console.log(i)
; k1 L0 x2 e! n  E: \}4 c9 u  L+ j+ n
        0
1 O( U/ I. d( D        1
1 G4 o9 e' r" f8 t  o& B        2! i1 E! P" y  M0 v: L" Q* p' E
        3% Q( t. t5 q1 E
        4
' ~$ |0 b$ |& G        5
4 l8 q0 s) U% E* N) ~! @0 V7 |        66 ~3 e" o5 r  c7 |( h; ]  z- u
        7: V2 ~. c" y, Y& [, H6 K
        82 {$ h" k" y# I/ R- C+ s
        9
+ C$ o; q/ b- |* o& g/ G9 l, Z</code></pre>$ E) k/ q( j* {4 E& w" o
<h4 id="254-while">2.5.4 while</h4>
4 p/ G0 m" q& N7 A1 `  u6 q<pre><code class="language-javascript">// while 循环$ T6 B# k$ _. K1 @# y
        while(循环条件){
# z% c7 J) ~9 I0 c( M7 C+ j        循环体代码& v1 c6 N# D+ }# s$ ?
    }
$ W: V1 f- H6 n& d! G; R8 L! K. [/ c6 |# n( Z1 m3 ]* @8 U7 P
&gt; var i = 03 J4 Z7 r( C: n! C7 K7 w- @
&gt; while(i&lt;10){2 S' f+ z# X) v9 d
    console.log(i)2 W! \. e5 h2 C% T* c0 G* Y
    i++! f% u1 S, Y- k, l6 ~& z8 i
}# u2 G3 p: j7 Z: N( X
0
% v5 J5 ]$ O( I. h7 `; s: Q4 S  p 1
/ T2 [3 n: W( x5 s+ @5 B 2
' R8 U) ]* M! [9 Y; M  H 3
. V8 s% N/ @# K1 t0 P8 L* ^ 4
$ m7 l4 F. a4 @- [5 f 5$ x: _' H/ B" b/ {: f
6
2 U$ E& ]2 s$ `+ u' w' T 7: ^$ _' t" T8 u
81 Z' z/ C/ a6 l6 C
9
' k& Y; w4 N, X' U1 `( F</code></pre>
. g( N1 }0 r: }: r( B" i9 r+ `, y8 I<h4 id="255-break和continue">2.5.5 break和continue</h4>5 F" m' W& i) n
<pre><code class="language-javascript">// break8 [% m: S3 }6 r; M* z% \4 G& \
for (var i = 0; i&lt;10; i++){
1 R) s! d/ N6 o6 @' D    if (i == 5){break}
4 X& i+ f" p# x7 ^    console.log(i)7 k& F- w4 z3 v, B# L5 p* n
}
8 K: M( H. o: F 0
( m* R* f+ A6 S* f. w 1
; j1 o  U' S% [1 r& a* a 2
$ u5 p- }7 m% O1 ^' V3 D 3
( M2 L  N0 Y0 C/ N# w8 J 4+ L$ X$ k& ?9 Z& }
// continue& A0 ]. w6 b- J, ?8 g8 \
for (var i = 0; i&lt;10; i++){
, E1 Q" V  w* M+ Q5 z4 ~1 w" s- i7 B    if (i == 5){continue}
5 v: U; p' Z2 u    console.log(i)& y' O. @6 Y: G$ i% S1 I& p* M
}, d% F2 a* G; V( G0 |
0
2 w4 M6 O3 [! J4 i% S" J0 r 1
+ [7 d& u2 m0 e+ S4 R8 T 2* {% }7 I" v) D; l  C/ T( J7 Y
3
' W8 Q  }1 q# _: }% } 4
2 S- A0 X$ r: [' I, j' O4 W 6; o) Y$ J" J% a7 r* `+ @
7
: H# C: r1 [+ q  N+ {, e/ _/ { 8. ^) `' E- R. G9 l# K
9
) \' ^( k- A% i3 K; Y" B% R: G& H% @1 O6 _$ \8 A
</code></pre>4 e3 @1 M3 \6 ~
<h3 id="26-三元运算">2.6 三元运算</h3># w, }. s0 j+ O4 n; O5 j% _
<pre><code class="language-javascript">&gt; a- @) Y; e8 K3 Q
6
4 p) `8 d0 {* B&gt; b
+ Y. P4 w* y$ q# w3
! N4 G" y1 u+ Q. U
4 f! S5 A! n6 r//条件成立c为a的值,不成立c为b的值1 B' a  r( g3 R, C
&gt; var c = a &gt; b ? a : b1 f' D  x, t+ P1 y
&gt; c6 U" t% A& b- T, o) O
6. C7 }! l' k& L' f  J& T

/ I* A; u4 B0 O/ v; b; a' G- j// 三元运算可以嵌套( d3 P' C& {, m
</code></pre># O+ C2 \$ e' I+ _6 W
<h3 id="27-函数">2.7 函数</h3>
9 j5 @4 I  O/ M7 h4 S) G- P<pre><code class="language-javascript">1. 普通函数
9 h' C/ F1 ^# Q5 [7 s$ R&gt; function foo1(){
6 x6 p) ^/ I6 p" u* g+ I1 c    console.log("Hi")  D& I: y/ K7 F$ k
}. w. H" a9 B( }  v) x6 h

: F, `; N4 }- d8 D& @&gt; foo1()( {* _5 e. ]( j/ ^+ A) V9 z
        Hi9 W7 n! y9 `) m
2. 带参数函数9 |: c" q: `6 C0 b' Y) C
&gt; function foo1(name){
5 ^' Y; a! }8 X9 _8 g% Wconsole.log("Hi",name)8 r* N- H; W9 M5 Z( @/ D
}' D# p8 F+ ?7 [3 E; o

  o% {: L2 G! ]% q' S3 k3 R1 P&gt; foo1("Hans")
6 h( x7 ^& W  ~Hi Hans
- ^1 o/ k0 k( R9 z, J* {6 P9 ?' w; @" X0 T7 y# M
&gt; var name = "Hello"
4 }+ o7 P1 \  ]8 k$ J7 n+ K- V6 H&gt; foo1(name)
3 M% v$ [; s$ [$ mHi Hello2 H: D; B  L, R8 H' J- k$ z

+ b$ b& j5 T. `, e4 o6 k3. 带返回值函数6 X) p( V8 P6 u- p8 ?
&gt; function foo1(a,b){
6 `4 z! }( T- C* s7 m9 w7 r        return a + b   ( ~2 u( \+ B# f. K. _% Q
}  Z% H( @. U1 K6 c
&gt; foo1(1,2)
$ [/ i' r! U8 h; z- w3" ^0 O- F! a& P: {, k0 g0 ]% s6 T
&gt; var a = foo1(10,20)  //接受函数返回值
" R7 C! \  M9 g  I9 b- x&gt; a
- {+ f/ [: s0 U* s# g30' W* y* a, `0 H: l0 k

) `) p" f& A3 f3 n" A' [4 \. `& J" K4. 匿名函数6 w! o% Z7 j+ s7 _( @
&gt; var sum = function(a, b){
( m! {; N. Q5 }6 _0 S# P$ m  return a + b;
$ _1 b' K1 C5 c) i3 F! d, g% D}
6 I: C; y2 f' [  _) e' Y* i! G&gt; sum(1,2)2 [( I  l; C4 R( f2 ]0 w0 M& ~# D2 G
3
5 d, C/ O+ }% J, {6 z' C- z
7 h0 l7 d. W6 D7 x; O2 E6 q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
/ p, c% ~# h+ x&gt; (function(a, b){' D/ q* l* q6 z4 h# Z5 Y
  return a + b. y/ j; o) y# N. t4 l
})(10, 20)6 i4 a, r* `, Y7 w
304 Y  i3 K9 x; Z) F

1 O5 d7 p! C; M% r# O8 ^5. 闭包函数' [7 D+ ?8 q6 d; P, u9 c# i* X, H  b
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
# I" |4 Z' r8 v% ~; o# V$ t! Tvar city = "BJ". c6 x+ M1 C. Y
function f(){' z0 |: y9 v* y) l6 S7 E
    var city = "SH"5 a, L* x4 T0 y% \9 L2 Y
    function inner(){
* {1 |( B" A" [: S. i# R        console.log(city)
$ J& ]4 [1 d2 x7 s1 n/ ?3 S    }
' f) F1 z3 C% _  \& j+ K    return inner0 V# N: n! N8 j, e7 a0 W7 d# Q
}; X) Y& U2 `* A
var ret = f()! W( c% b" i9 s
ret()
5 p- u2 M# A: A执行结果:3 ^% ~6 l# Z- f2 Z, M6 r
SH, Z" i) j$ Q! p7 Z

8 H2 ?5 J3 }+ e% I8 d3 M  [</code></pre>
* Q- G, A, J! P& w5 \<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>- k+ X2 ^+ L: D, H* C& y
<pre><code class="language-javascript">var f = v =&gt; v;
4 _! j4 f$ ~1 N% I# G  t$ b7 P: T// 等同于, x. @: C! j; H4 t9 a
var f = function(v){
# n' g, e! n& `/ T  K1 q' ]8 ]7 f  return v;  J2 Z( K) S/ L0 \- x
}0 d0 q  }  j9 x3 l' c. O
</code></pre>
) z, G; m2 G/ J3 h1 T0 [2 x<p><code>arguments</code>参数 可以获取传入的所有数据</p>8 P5 S+ b$ x8 i: M# b
<pre><code class="language-javascript">function foo1(a,b){
8 j( u7 E) S+ M+ _2 v7 ^, u& w    console.log(arguments.length)  //参数的个数
5 [' Z" H5 m/ K1 H, s  W    console.log(arguments[0]) // 第一个参数的值) b3 D1 ?0 k9 S2 g$ n1 q# F# `
        return a + b   " q" A  {4 ?4 z- t' H. a
}5 H0 Q# _" X, D* o$ }# U
foo1(10,20)
$ a- a8 R% C' u+ `$ h结果:
) J' y- w* f, m8 ] 2          //参数的个数 7 `- I$ z$ ]% R5 U: ]( Y
10        // 第一个参数的值
/ m& F- ~' u9 k8 {" K30        // 返回相加的结果( ~0 h  p" V& L. a4 ?2 q; ^
</code></pre>
: Z9 R0 T, g" K! ]1 S! A( W<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>% e/ r9 H) j- y7 f# e6 M
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>2 ^* ]7 U! K" n1 x, g% w( y( t1 z, u
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
- i9 N6 R0 t3 ^<h4 id="281-date对象">2.8.1 Date对象</h4>
6 F/ g0 {: H. a* V; @<pre><code class="language-javascript">&gt; var data_test = new Date()
  C( N6 l3 j$ h7 O- s( j' E&gt; data_test* j6 P4 a% u) ~, o' p7 l2 x/ @+ J: W4 P
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
4 _1 |8 W# U' R6 Y3 E* _&gt; data_test.toLocaleString()
* b6 l5 A2 N- e9 S! b' t8 U4 Y" E'2022/2/11 下午9:44:43'
0 i* q8 g, h9 p$ E1 p3 N+ D; y/ a- k% r
&gt; data_test.toLocaleDateString()0 F# g0 t) Q7 S) U/ ^+ Q1 Q
'2022/2/11'
5 m) f) o4 T; Q
5 d9 g: `1 n  E3 o% r; x&gt; var data_test2  = new Date("2022/2/11 9:44:43")9 X6 k+ b( I' ^8 w: }: i
&gt; data_test2.toLocaleString()
! r  [; c! a9 J  r# i7 P'2022/2/11 上午9:44:43'( w6 h4 q" A; A( x8 c/ s

: t' _9 B/ p2 y- P* f// 获取当前几号
2 L4 z1 q6 k, g* t( y&gt; data_test.getDate()
* w9 Y7 F  ^) T# F5 P. [11
9 U" F$ `# v# y7 R& \7 A// 获取星期几,数字表示
3 o6 {0 T1 e2 z&gt; data_test.getDay()  2 l# P, z; r% L9 o& }, Z
5
" ~) ]/ I& M% O, C" a" v: s+ W// 获取月份(0-11)) Q, v% r7 d, Y* l$ r: m
&gt; data_test.getMonth()
7 ]6 d; {) d- j, Y! g' W; V* f1
' Q  ]" T) D* d3 N' q: [/ C// 获取完整年份% N7 P& m; {9 r2 G2 Z! J  a
&gt; data_test.getFullYear()
5 E% K) \1 ]7 S2 G. i7 S9 \( F1 O20220 n8 c1 U6 x' g3 d# O, i$ I9 T
// 获取时+ G, a! I( l& y& E" u6 U. x
&gt; data_test.getHours()
2 q) X# S( l9 P, s2 e210 ]- ~% D$ V2 d+ U" \) a
// 获取分7 @6 x- V7 t) ]; X- {: {3 @
&gt; data_test.getMinutes()
! I) r2 ?1 w' I449 ]. f$ M6 g9 w( C4 _9 a4 w* c
// 获取秒
5 q1 M, Y8 B  I9 b&gt; data_test.getSeconds()( P* Y; c/ \! z) S4 J
43' l3 x4 u1 @! e% h/ G5 u
// 获取毫秒$ Q3 P( j( T' E' r' N
&gt; data_test.getMilliseconds()% Z( g! m! y# e( [
290
! h+ q0 D+ L$ o5 H% q; ]// 获取时间戳
3 ?; q/ I# B* r&gt; data_test.getTime()
. V2 r* W6 h) h9 e0 j" ]: H/ V1644587083290) ]+ w) E3 n' g' F( q6 }
</code></pre>
) P' s: i; M) W/ l<h4 id="282-json对象">2.8.2 Json对象</h4>
# `/ h" @# Y2 ?4 h3 h<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串7 {& X: Q% U/ w' R! Y
JSON.parse()  // 反序列化,把JSON字符串转换成对象, w9 y( k" s7 `  ^" O' U. [) [  T

! P* h! w0 P+ B6 x+ C- ]7 d// 序列化: ~# J9 {% l5 j- {: `1 x
&gt; var jstojson = JSON.stringify(person) ( [6 E6 G. u) E1 m
&gt; jstojson  
7 L9 }" X* E; Q  q6 E'{"Name":"Hans","Age":18}'% a8 j2 X: _+ [2 Y9 C8 a
  q0 F( N* C/ f9 F+ A/ y% ^
// 反序列化8 |7 ^6 O; a6 f6 W, e8 ~3 Z' L
&gt; var x = JSON.parse(jstojson)* ^1 z- B0 f# E% t6 ?. ?
&gt; x3 V& A; q1 L" ?
{Name: 'Hans', Age: 18}! q' ?5 K. f5 U% a" `3 p
&gt; x.Age
# K% B8 Z9 u/ D& x' t& M18" s) `2 D6 Q, g" `9 t' j
</code></pre>) p! h% g8 _) _+ p6 C
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>% J, Z9 ~4 K2 s$ x8 V, }" F
<p>正则</p>
8 h7 b0 a0 d% x% z$ ~3 e" N<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");8 W& z( T: q& [+ x, V2 a$ i
&gt; reg1; D8 _5 I# \# U/ h2 `4 j
/^[a-zA-Z][a-zA-Z0-9]{4,7}/( e7 [7 f3 o/ R8 c
&gt; reg1.test("Hans666")' K, f8 N1 j4 E6 p; ^0 L+ [
true) c$ s0 A& l' v( g
0 U: m6 g' A9 ]: ]
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
: R% X6 B& W4 M&gt; reg2
+ Q6 B3 w+ a* d* y4 S6 R/^[a-zA-Z][a-zA-Z0-9]{4,7}/7 F5 e9 d* i/ N, }, X
&gt; reg2.test('Hasdfa')- _$ P0 f; C: N
true' y6 c! p8 A9 S/ ^
2 O" S! Z9 }- U0 N
全局匹配:0 K/ Y2 M# d: n- V+ J/ Y
&gt; name* F7 @+ {* i0 l" N6 P
'Hello'
* A0 U' ^$ V2 i+ E&gt; name.match(/l/)) l& \/ o/ F3 P3 V3 [9 z
['l', index: 2, input: 'Hello', groups: undefined]
: s& \! T* i1 B* m* b2 P! F# _$ ^- l% _, Y' W
&gt; name.match(/l/g)
5 C% s" B) ~9 q3 i(2)&nbsp;['l', 'l']
* y- Z3 P9 ?! g8 Y' G) E+ }// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
- ?4 B# c+ V  B0 m8 v7 l% G8 E. Q6 k; ^! V; t* b, Q. W0 E3 R
全局匹配注意事项:
& X5 R" h2 d" ~2 c3 d&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g1 j% i* `2 R( m# b
&gt; reg2.test('Hasdfa')
# b: v0 L7 K) y( H: F7 D4 jtrue
! k0 v! y0 i3 [8 V1 i3 C( F&gt;reg2.lastIndex;
: P) B* V* z1 e6 c" H: X+ f7 w# \) P( j1 m6! s# ?- J3 h- u( v3 e/ L, l
&gt; reg2.test('Hasdfa')2 D6 @/ j) ?, ?9 p% C
false: o, f0 \) r# a  s1 _) j
&gt; reg2.lastIndex;5 K# q2 p  J8 f
0! ~" X8 {+ b* F- M
&gt; reg2.test('Hasdfa')4 ^3 Q& ~7 w( k% s* }( \0 i
true; O; D. C1 B7 L4 b$ P2 M
&gt; reg2.lastIndex;
) D" J; L+ ?5 ~; e" ]& ?6
* T0 S4 q' U$ k/ k- i&gt; reg2.test('Hasdfa')7 C7 r/ `0 R4 t' O- _
false$ }* _" b, \/ Z% g! W8 ~' h8 N
&gt; reg2.lastIndex;. E3 `. N3 @% I- U/ m
0
7 [) U$ }7 p( z# z) o0 m6 Q// 全局匹配会有一个lastindex属性
" l: ]6 Z2 e: t3 R% b8 P7 L&gt; reg2.test()' k4 N( ?' C5 c. G2 ~' z' }' C% Y1 z7 u/ B
false
0 u( U7 U5 F  G&gt; reg2.test()4 @# P5 v* R+ s5 U4 |( K$ B. v* j4 x
true
  K$ L) n# G2 L% O' \& w// 校验时不传参数默认传的是undefined
9 ?% }2 ]% w' T6 y1 F5 o</code></pre>
1 p& E9 q4 G$ p( u<h4 id="284-自定义对象">2.8.4 自定义对象</h4>9 _# l. `- f& [1 B
<p>就相当于是<code>python</code>中的字典</p>
. u8 R) M! }" _<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}, R: `# N; W1 c5 r0 U3 B! r0 m
&gt; person3 M: O. l' v2 A$ k% ?
{Name: 'Hans', Age: 18}# w/ q2 W$ `: h2 Y4 A9 _, s
&gt; person.Name
+ l! z4 P( I. K, a8 S" c'Hans'
/ q3 B3 D7 E9 w+ f' U0 V& ]&gt; person["Name"]1 e7 F" E4 }  b. e8 a9 g2 H" d' S8 A
'Hans'% g! o5 y* k* q

. S6 R  a' g( P9 I  X// 也可以使用new Object创建
7 ]% b3 K$ e; t" b+ Q3 o&gt; var person2 = new Object()! I5 j" l3 e6 x* U/ q1 P1 j4 J
&gt; person2.name = "Hello"9 \  z* B' p9 ], ^+ r' u. D# \
'Hello'
9 ]' C; a; `2 b5 n5 s. ^( E&gt; person2.age = 20. k! d9 p( z* _& f
20
+ e4 W2 n" D& S" m</code></pre>& T4 Y) Y1 h* x, v
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>2 k: K  z7 b* [, T% {+ a" c( W
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
5 U& k2 n! z4 i* ]5 F! @  a4 C<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>% R9 M- r2 y; r6 L! e8 m' S( _# w0 ]
<h3 id="31-window-对象">3.1 window 对象</h3>
) ?8 D; Z7 b. V/ D0 I& u0 ~<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>& K$ z- T' R) N  \5 k) Q' e
<pre><code class="language-python">//览器窗口的内部高度
7 q6 [  y- ?2 uwindow.innerHeight
( A" H# b) A& _" E# Y, i- q7062 r0 G$ ~3 p; `; Z/ q
//浏览器窗口的内部宽度
2 [# k) t: T4 swindow.innerWidth; d$ l: @( k8 |$ H: v
1522* ?5 B0 u0 o6 F: j" {* x
// 打开新窗口
- v% b7 j9 r% a# `: L4 B9 Pwindow.open('https://www.baidu.com')
: h) }! e0 \4 UWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}/ J) s8 j" `& m" k
// 关闭当前窗口
! W* J4 w3 H) W5 s8 f. bwindow.close()
4 F2 }0 X( @) u: B) j7 K0 }//  后退一页4 [$ w" S  Y1 x$ x1 J
window.history.back()
; o) G1 [. q7 u5 w! n// 前进一页0 k0 K- [" A& V* J
window.history.forward()
, t% G3 U) o" X8 `: T9 M6 Q//Web浏览器全称* X5 I- |( K6 x
window.navigator.appName
! e2 y( ?/ k  i6 l4 V'Netscape'
/ ]# B) G- x: t4 q2 o7 w( {! ]8 W6 I// Web浏览器厂商和版本的详细字符串5 @4 B' `6 R2 ^8 l5 ~
window.navigator.appVersion- E/ p3 c; ]! q" o, t2 @
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'8 F  c1 A, Z5 M
// 客户端绝大部分信息
4 [5 ?9 d# g  R. u# K8 bwindow.navigator.userAgent
8 W$ W7 m& o5 L& m0 K, y'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* Y8 {( B5 G  D8 C: ^$ [
// 浏览器运行所在的操作系统
& ^4 n5 Z& O6 T% P' ~; n1 m; qwindow.navigator.platform
& }# c0 Z" r% P! O'Win32'& e: C* b! t! t

3 l( U/ m8 z1 {" F//  获取URL
' A) N/ t/ C7 Iwindow.location.href
9 B$ T" R! D) e' o: S7 V+ n// 跳转到指定页面
$ [* ?  [. m( f3 {8 {" zwindow.location.href='https://www.baidu.com'' I& f( g5 D& T9 s. {
// 重新加载页面
, r9 i4 {  T4 K6 k8 Twindow.location.reload()
) F8 }0 c# w) E, R, q, u</code></pre>
! H3 C- N# |( n! x% i<h3 id="32-弹出框">3.2 弹出框</h3>: @. \0 e0 C$ p: a# y
<p>三种消息框:警告框、确认框、提示框。</p>" {: {- W$ v! h! A6 o
<h4 id="321-警告框">3.2.1 警告框</h4>  o3 K1 Q9 w/ k$ g( P
<pre><code class="language-javascript">alert("Hello")3 F, ^& {- V0 P
</code></pre>  x7 @: q0 z+ O$ F7 S
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
) r: \' [# @! F4 D<h4 id="322-确认框">3.2.2 确认框</h4>8 w7 K) o, ^0 t$ [; j& |
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; H+ G) m. _0 Z4 u$ b# D<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true4 R" d, d. V5 B$ ]% T, D/ I% p
true
3 O' O7 b# o( t' ^6 G&gt; confirm("你确定吗?")  // 点取消返回false' H# p' I- X6 n0 ~
false7 L/ F- e/ j2 [
</code></pre>
7 H3 ?# I( x( l5 E8 {<h4 id="323-提示框">3.2.3 提示框</h4>
  K& m( e( q1 c2 }5 U2 E<p><code>prompt("请输入","提示")</code></p>
6 B3 \; m0 W+ S8 L' i1 z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
: r7 c9 C. d& O6 i' ]( L<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
7 R& x3 Q$ @& w% ]9 o2 u<p>如果直接点<code>取消</code>后端收到<code>null</code></p>( g6 S% h8 F/ J6 O1 T) l8 b, l
<h3 id="33-计时相关">3.3 计时相关</h3>! Y# b4 x; a- A% B5 ~8 a' d! F. E
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
" B- @3 [7 {6 |$ `  Z$ h<pre><code class="language-javascript">// 等于3秒钟弹窗
0 s! i& I* C9 n: n# Q. i: dsetTimeout(function(){alert("Hello")}, 3000)5 b$ y% C2 E) m. u; t
! W% t5 V  r2 ~& Y. c
var t = setTimeout(function(){alert("Hello")}, 3000)$ {& K( _) x& Z; A* f- i

0 Q. R# ^( a, ^# F) U2 b// 取消setTimeout设置
) u2 \. i1 a. G2 _- OclearTimeout(t)
# V* R5 w. I  v/ G; {* k- R</code></pre>
+ D3 A: J- Q( D. T8 O. l<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
9 A, m+ E2 M, F  V/ c* H, ]<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>7 h5 G1 ~9 N. ?# g. `$ R
<pre><code class="language-javascript">每三秒弹出 "hello" :
4 l! ^9 l& n+ C0 h  R" L2 lsetInterval(function(){alert("Hello")},3000);% P2 O( S: F+ @
</code></pre>, L' }4 \' u! V1 x5 p* {3 u, o# Q
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
  X& Y' a8 y) {5 P0 \<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);" I- Z/ N  ^: F, O  A
//取消:
* S( `" v. G& g+ `- k% vclearInterval(t); W4 L" \  B* @3 ]$ p& O- h% O4 a# I
</code></pre>$ s- I. O; P. ~+ K0 B2 x! T. t! S; b3 d

% T* K. ^6 y4 F& r4 X+ O$ q) J
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-20 14:18 , Processed in 0.103296 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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