飞雪团队

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

前端之JavaScript

[复制链接]

8057

主题

8145

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26501
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
! U0 |8 o5 u, j
<h1 id="前端之javascript">前端之JavaScript</h1>. }. {* f- V4 C; T8 h  q
<p></p><p></p>- U6 z6 X" J" a
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ t% G/ |$ Q1 _6 f& _
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>) i6 U) T7 Z( I& c
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
0 h( v) o+ Q) v1 j( Z它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>6 J! R8 X2 I" e' Y" U: `9 w2 t2 k
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
6 _( }- @0 g/ z<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>. Q/ z! K- |6 F& x+ N
<h3 id="21-注释">2.1 注释</h3>3 U( p1 Y" s! k2 A* G$ r6 S% r  m
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>* |) v1 [9 F+ y9 i9 |8 D
<pre><code class="language-javascript">// 这是单行注释! \8 a2 W5 _# m1 U) U% X

! }. I* e0 j8 W" L  H1 C/ a; x/*
4 f4 O3 e5 b, A: X9 _8 A$ |+ O+ c这是多行注释的第一行,2 Y% r2 @. |9 ^
这是第二行。1 C% {$ x9 w$ z5 |+ u
*/0 V5 _* m; h+ ^3 z4 @
</code></pre>
2 t- M7 v0 p3 @5 i. \6 d6 q7 g<h3 id="22-变量和常量">2.2 变量和常量</h3>
* j+ b6 ~) ~4 R0 o8 w<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>- Z! h1 ?2 @7 A! `1 a$ I
<ul>
4 N2 ]6 s, F, J# d<li>变量必须以字母开头</li>1 G: B, |& ]% h7 `" F
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>% F5 B: m% n* F
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
% K8 g2 c% B( }% X- W! U</ul>8 b2 ]+ o- y4 x; b% l
<p><code>var</code>定义的都为全局变量</p>; A5 n8 }+ e6 q( J" U
<p><code>let</code>可以声明局部变量</p>, q6 i- |7 R+ ^$ e/ X: S
<p><strong>声明变量:</strong></p>
3 E: r: a5 r" d- B( T<pre><code class="language-javascript">// 定义单个变量
; ]3 D7 Q; D9 b6 ?&gt; var name+ _/ t0 h* e2 @7 W; P7 O+ j/ E" y* }
&gt; name = 'Hans'% s$ I& i! d1 U: e) \8 t( j
//定义并赋值* \6 u- _/ f/ K! |* z! B, }
&gt; var name = 'Hans'
3 |6 s4 F2 O4 N3 f& P7 k" j&gt; name6 W3 R  A8 k: L% f+ J6 {6 p" a% A" V2 D: x
'Hans'
8 P) Z& x8 b8 p5 l
$ G' {! D0 x: P9 G8 _- m// 定义多个变量  I) ?8 j2 i5 e" |$ ^& X
&gt; var name = "Hans", age = 18
; A/ J. j% j6 Y&gt; name
  E' G+ j! u/ s9 g0 Q5 t'Hans'
% H; I. v; i. o; o+ K3 U" F4 y9 Q" E&gt; age6 r- I! @6 U0 i1 _6 F' \  e
18
3 E2 g/ Q- Y* y9 }
9 d. `! E7 F4 y. c% l+ F( k//多行使用反引号`` 类型python中的三引号
3 n  B( f$ o4 [; h& @6 Q' d0 |&gt; var text = `A young idler,4 H+ n5 C: D5 F
an old beggar`
+ ?) U; y. J0 h  H&gt; text9 a! a  [- z! g; Y4 a/ c/ I
'A young idler,\nan old beggar'/ R+ s! q" L( L
</code></pre>
0 y4 M. y3 I3 o) m/ F<p><strong>声明常量:</strong></p>, m" y. a: Q$ j% e% S+ s
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>2 s1 @' M' Q# d+ H
<pre><code class="language-javascript">&gt; const pi = 3.149 |5 c6 O) {9 e2 V2 b% y0 h: |2 R
&gt; pi
- H! Y7 Y6 l$ C3 M0 s: v4 [3.148 r9 L$ C  z9 Q
&gt;  pi = 3.01
$ l+ v4 ]+ e. D1 A3 o& w8 T& IUncaught TypeError: Assignment to constant variable.+ `2 L2 a# o1 ?3 V
    at &lt;anonymous&gt;:1:40 j& k% y0 E# n  A

/ e# S1 t9 Z% I; K' x</code></pre>/ s" o5 D; E6 u2 G' J8 b% \
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
6 k# ^; J7 Y) r9 c( Q6 x; r: d0 d. G<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
& q5 ~6 O( f& J" a<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>$ B. w* [  `/ ?- N1 L1 ]
<h4 id="231-number类型">2.3.1 Number类型</h4>
2 T  i9 W9 D1 Y3 @1 t& M( ~<pre><code class="language-javascript">&gt; var a = 5
, k, y. {- Z, O&gt; typeof a   //查看变量的类型  3 C  o& x; {9 W( m( H3 I# y
number
* L( A: q. u/ [7 D0 ?& S$ W. x: U' Z. w+ d, \( h/ p( t  f
&gt; var b = 1.3( v) O; n' v3 N4 `3 F
&gt; typeof b
2 }* h7 ~3 W$ ^: ]9 K/ A1 B! enumber
2 T- Y: O9 }+ x0 Y: z* z% R" G) ]0 m
// 不管整型还是浮点型打开出来的结果都是number类型
/ K0 E! y  u1 w3 t
4 ], y6 e# A- y/*. @* ?% w3 k( ]1 R
NaN:Not A Number1 ?, \4 M8 g3 A9 O
NaN属于数值类型 表示的意思是 不是一个数字7 _* {$ d# h9 Q! [7 p
*/
& z5 |' Z3 p/ v" c! E/ i0 V9 g9 o: C: I7 `* T
parseInt('2345')  // 转整型1 f2 r3 X0 U! Y2 d! X7 z1 |& W
2345& ?6 |/ q2 |. _2 v
parseInt('2345.5')
- J, d# E8 \- |; C* m2345
3 L% _6 k0 |( c+ ^% kparseFloat('2345.5') // 转浮点型
+ _6 |( {: P4 g* j2345.5
; }7 f9 c  M' @1 Z# aparseFloat('ABC')4 p2 |* f5 p" [2 X# u
NaN0 x0 C. y8 z' X1 D$ Q% T) y
parseInt('abc')8 ]6 i$ y1 B2 Q, F2 }5 X% ]
NaN: o# o7 @! o6 H) g2 N2 S! y
</code></pre>
0 ?( J7 @6 p2 c" b( t$ N  e<h4 id="232-string类型">2.3.2 String类型</h4>
! T  e" x% ^" d<pre><code class="language-javascript">&gt; var name = 'Hans'
* V7 Q: l5 E( P7 Z8 H6 ~&gt; typeof name$ F" X5 i5 G( u# {# }9 d! K
'string'
' }& }7 p* N7 E( [$ P+ c: V6 O7 c5 l1 Y( {
//常用方法: k" I, u3 F  o- s6 J5 ]& k/ {
// 变量值长度
3 s- K, x& [. Y; g&gt; name.length
. B, i& M9 f% ^, `4
1 z! m; [$ k+ Z" {3 |( p  G// trim() 移除空白
" N0 I) |9 ]- P0 M$ \&gt; var a = '    ABC    '
: k! M4 l, M& s; w: w5 j. g&gt; a* |8 Q2 C1 ]: F. E3 _
'    ABC    '
3 U* [5 p8 h9 \/ r8 T; x9 w1 U7 ~; C&gt; a.trim()+ v) t5 b. t% h' U
'ABC'  e* }% S' [( _* b2 I$ y: q& X1 I
//移除左边的空白/ I* h3 e" z. P5 z
&gt; a.trimLeft()# X- R4 n5 Y0 O- z
'ABC    '4 {$ h3 j* R7 i$ |" q1 A
//移除右边的空白: o3 i/ `% [+ x  b+ ?$ p: _
&gt; a.trimRight()
# m+ O0 I' `( q9 {) G! ~'    ABC'% D" B: m( T1 D8 m: y

2 }0 z1 R% _" @8 H: H! \4 u* }//返回第n个字符,从0开始
/ m. O0 ^7 H6 F! k&gt; name, I2 s0 S  P$ `$ K5 Z" c- K
'Hans'
+ J5 V5 r1 m% |9 n) [+ |' k&gt; name.charAt(3)
' T9 a& R$ e4 }5 }'s'
4 F0 V2 w" F- L% ^* U' G8 N4 i&gt; name.charAt()
8 V+ L3 a& f2 Q, i1 ?7 \' |# d'H'
: \* ~2 K8 H, z( h. J&gt; name.charAt(1)
  W9 \7 N; Z2 h' f7 e& `'a'
. T1 {3 X! g+ S2 T# J+ C, R( h& a7 u0 R/ E- m" G
// 在javascript中推荐使用加号(+)拼接
, H% |0 `9 E* m- z% V&gt; name- _2 B* @: p1 O$ O# u$ N3 F
'Hans'3 H& a6 \3 d2 z& h9 y' a" C* P
&gt; a
- g0 L7 f. W: q$ ]; ^, i'    ABC    '
1 r# V! {. y: L. n5 c0 F&gt; name + a
* U2 L: T( z9 V0 S9 j! O! z'Hans    ABC    '
! o3 q5 E3 z- {  c( r, U8 @1 N: L6 ^// 使用concat拼接
5 V9 a0 }6 M$ ]) p- d' e&gt; name.concat(a)
+ Z' t* g/ m8 n: Y! u$ `2 B'Hans    ABC    '
) ]  u5 B1 I6 C* z; p9 {0 }6 T: t% o( H
//indexOf(substring, start)子序列位置
/ E! U" y8 f2 c6 ]9 D
' i. d# |& r& \9 A; n1 P0 D. d! Y&gt; text. h7 e. n9 g1 R3 W7 f
'A young idler,\nan old beggar'- k  W7 k! O! s( O9 {( I5 n% |, M9 b5 }
&gt; text.indexOf('young',0)9 b) [! u4 o) j, y6 [) K  P% ~
2
0 Q# l: h4 I. _0 B' Z# |- D, Y5 i
/ j, s/ W$ G9 d; i& Q8 Y4 u, V, ^//.substring(from, to)        根据索引获取子序列
4 |8 d9 L* c. e" x6 P&gt; text.substring(0,)5 _  I. e8 g/ M7 L* h" `
'A young idler,\nan old beggar'
6 G( y% X6 F  e  V3 J&gt; text.substring(0,10)
% W$ u! h" v' m'A young id'
1 q) u' z  w% P- L! l9 F2 F- d) w4 M
// .slice(start, end)        切片, 从0开始顾头不顾尾, ?- \0 Q1 @; U: X
&gt; name.slice(0,3)" a% p& \) S2 ?+ t9 Z, r, t
'Han'  X3 J; ?5 j3 S4 U! u

+ a% W* n. Y$ v' J8 k( O$ p7 A// 转小写
  ~1 f( a* F( r2 |  d&gt; name
& d( ?+ b+ V" f* X% H6 U'Hans'
5 M1 j5 N0 @. O% P/ Z&gt; name.toLowerCase()
- T5 W. r. t: N+ I+ H/ C'hans'3 \+ e! W% D6 `+ A2 S$ k4 p. ]
// 转大写
0 c6 u( ~) D/ A2 y7 B7 d5 B; {&gt; name.toUpperCase()
8 L( u* i. @- g: P, R0 h'HANS'1 t( m, _# @: ^( `

& A4 T; d' }4 z9 J! A// 分隔/ v- G, V4 U+ v* m" h8 }
&gt; name9 X9 B1 c! N" t% I
'Hans'
) E+ V9 b0 T+ l* `$ `&gt; name.split('a')
' V: w: \4 R4 T1 Q, V8 @: A(2)&nbsp;['H', 'ns']' j9 V+ ~8 d3 h8 p
</code></pre>
  m: m% x6 r" p3 V<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
' s" m4 ?+ ]5 ^<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
% {# ^: K! L% n6 t/ m% p% g<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
9 j1 [  g9 B7 b9 p<p><strong>null和undefined</strong></p>
8 t& c; i* F! z<ul>
/ b' G1 F9 {0 _& j5 V1 ^- T+ L<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
2 u, c' d7 a8 {0 d<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>; @8 N; @  ^+ P0 U+ Q! j) K
</ul>; x2 T: q+ Z3 U9 r
<h4 id="234-array数组">2.3.4 Array数组</h4>+ g. y! b6 I7 c( G  c8 J7 T
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
- h0 e1 I+ h0 Y0 z<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
2 w6 B; `- T1 w; B' z% D# n&gt; array1
' s9 `, N7 K- ^2 g; c: M(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
  |$ H9 i! }$ f# r&gt; console.log(array1[2])  //console.log打印类似python中的print/ t1 M: q1 Y5 W/ I+ P* w
3( n( p( t( x/ v3 w9 v- v
// length元素个数/ _& m& b0 [* K4 c2 r
&gt; array1.length6 g' l, [# w+ v
64 O0 L6 p, h8 _: ^* l% X7 O
// 在尾部增加元素,类型append
) h2 Z( ^6 ~7 Y' [9 y/ ?&gt; array1.push('D')
: t6 A" H9 ]- V+ ]$ _$ [7
- r0 ~2 M; v, N2 Z; r# B&gt; array13 e7 u) B! d8 O$ \6 E" C; K/ |% o  m! R
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']. K9 _) c7 `7 s. R
// 在头部增加元素% z( }7 j0 |' C) T9 n
&gt; array1.unshift(0)
8 e# ~# N# v+ f5 u, N8
/ q. F1 _7 I' f+ e5 x3 w&gt; array1
) ?. C; c0 V% ?# k4 d' f( c(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']5 {( y) s4 |+ {' s2 n& a

  M  i, Y4 `, ~6 C7 W# P7 H$ _//取最后一个元素
7 S8 ]0 |9 e2 R2 u: m/ K3 c&gt; array1.pop()
. z3 E3 A3 q2 {. W6 [" v$ E'D'
8 t; a* J! Z5 @0 p&gt; array1# z$ \$ u' W6 B9 B
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
1 z+ y3 B9 p9 D: h# u//取头部元素+ B) V" I7 C% Q4 Z' ]
&gt; array1.shift()
' [8 o3 `* T7 A8 Y6 H* F2 P0
* @8 F8 Z, M- c/ K0 O" U- H2 ]&gt; array1
: q1 P6 h  J: h5 I2 k. ^(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 _8 ?% L. L8 Y: f/ j6 E, B2 {% v
' I) ^* d. O3 J& X6 N6 C; Y
//切片, 从0开始顾头不顾尾, q" `8 r, i, K9 Q0 k9 L
&gt; array1.slice(3,6)
% C1 t8 \2 E; L" L4 F1 q* Y0 h(3)&nbsp;['a', 'b', 'c']
4 R% V# L7 X. e7 z// 反转
- A, u6 I$ F9 E- p2 e4 u( V&gt; array1.reverse()' F, I+ Z% y3 [2 M
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]) X6 _0 }0 D0 d$ t
// 将数组元素连接成字符串; f5 d0 F1 A. h; J  o
&gt; array1.join() // 什么不都写默认使用逗号分隔# h1 Q! w. w6 a# I# j
'c,b,a,3,2,1'
) i' _' V4 }2 {) Y! U- |! ^&gt; array1.join('')
+ Z7 E5 |$ I, X( m; j'cba321'% {) J- w& r3 h7 r1 d6 y
&gt; array1.join('|')1 B1 \4 o* y$ O" Y' R
'c|b|a|3|2|1'( V- X3 m5 ^9 M) X& W5 f
8 [& x7 C- U" D3 P) J: _
// 连接数组, ?' g/ C9 m& b0 _9 d7 ]6 T
&gt; var array2 = ['A','B','C']
* N6 q) G7 @' u& C! s5 y&gt; array1.concat(array2). F, G: e" J0 h1 e8 ~. j
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']. }  N1 l. W0 M# S. ~' t1 G
- G2 G, v- k' F9 R+ d) ]' f+ Z% r$ R
// 排序
$ i9 D( E5 U4 ?: O* M&gt; array1.sort()
, _; j3 M" ]; j3 ]8 U4 `8 n7 u) u, o+ n6 h(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& E0 H/ E  m. [. K. Z
; x8 M' O0 ~3 L4 ]5 s2 i
// 删除元素,并可以向数据组中添加新元素(可选)
% j1 P+ V' \" o& }* ~&gt; array1.splice(3,3)  // 删除元素( ?# h- y' D) F9 c
(3)&nbsp;['a', 'b', 'c']8 j! ~7 E. K9 @! }: g
&gt; array1
! [% J; F2 X5 `# S) G  S(3)&nbsp;[1, 2, 3]
6 z# ]  f) n4 x5 l&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素# Y, L; c" [7 W9 n+ M
[]9 I: O! i0 ?+ n) P* I, R# n
&gt; array1
) c8 z! w0 Z+ o$ s! w(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
9 p: G4 E2 T; c# J6 y: P2 i# l1 L; `% f! g; d( O
/*
1 u$ N8 J2 i, S) L0 m6 Hsplice(index,howmany,item1,.....,itemX)
7 j7 q8 Q& [8 V9 _* e- F; m% Z& Lindex:必需,必须是数字。规定从何处添加/删除元素。# I/ t9 h0 g+ _$ o% {; }
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。" p( O* k  B$ p, x1 n7 s1 t$ Q
item1, ..., itemX        可选。要添加到数组的新元素" M/ ], Z% l- ?. i) {1 O" p- f
*/
, y6 B' D( A" Z& l
) L3 w8 }7 R& d: H// forEach()        将数组的每个元素传递给回调函数
" G% G2 |: F3 X, H- B&gt; array1.forEach(function test(n){console.log(n)})' A2 ]2 ]0 C: z2 w
1
- z( F3 t. @; E" X 2
+ G: V3 g6 o3 ]+ F# [0 q 32 O9 W+ k' R0 t  G8 ?8 f( L/ z: j/ A
A
- ^! r* o; a$ M0 }3 j7 g7 r B
. b& {5 m( s5 L C* I* g. _# R- K0 b$ \$ H
// 返回一个数组元素调用函数处理后的值的新数组
) i. S% M# p5 _, k&gt; array1.map(function(value){return value +1})2 J! |0 s4 I% z
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']& ^. v3 b: o8 a6 C, \" J6 L$ Q
</code></pre>0 t9 S. x3 O% p  c. l. a7 _6 d
<h3 id="24-运算符">2.4 运算符</h3>& b  R; m7 W5 Q+ ~' y( L. L
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
4 a+ T! }2 g) e' m) [6 G9 |<p><code>+ - * / % ++ --</code></p>" G, y0 l( x" S/ t
<pre><code class="language-javascript">&gt; var a = 64 a; m" W% Q9 c
&gt; var b = 34 K- v% s7 T/ t6 E
// 加7 t$ H; m- p1 j) A/ E& J5 b% m+ [. G* G
&gt; a + b4 K7 t) L. F! i8 X5 [( T
9
: Q, ]% g$ q7 j7 A3 K( R$ m8 U. g4 u// 减: V! C; F; v* z
&gt; a - b
/ A  y9 p) M( u" J1 {* {: C, ^3
# k/ l# g, ^5 h4 p2 m# w. S) T// 乘
# m; V2 `; k- m. q9 |. b$ Z&gt; a * b" K4 y4 t+ X$ m5 r& \* m$ u- C
18
6 ~! I2 C( r& V; U$ i$ V// 除
' Q( A: {" y8 U! x* C&gt; a / b/ c% _6 Z5 d" U
2" W, T9 M7 \5 K2 ^( G  ^/ `6 M
// 取模(取余)
, [3 J# e$ e! w$ r7 L4 a&gt; a % b
0 q( h  N+ }/ A0 K+ _: V" j' u0
6 K5 l* v$ e6 \6 [" o// 自增1(先赋值再增1)/ _5 J$ ^& P0 u3 k" `$ e
&gt; a++3 ~: C7 M0 N# H! t2 t
6, E2 ^8 y& b+ O1 W+ g6 H+ ~0 Y
&gt; a
4 i1 Y, t) ]: C) _8 _7
9 f4 L9 z, ?+ p" Q// 自减1(先赋值再减1)' N- o0 Y) G( x1 }8 N( j) ]
&gt; a--
( n; Z% ]$ R, k4 [' \73 h$ o$ z& o9 T2 [
&gt; a
; l5 q0 o$ ^9 o6  ~4 e. Y5 s1 S3 w: Q
// 自增1(先增1再赋值)- E9 e2 z. A, H. b  M
&gt; ++a% L5 r- V8 {  e( P4 B+ Z& m
7
5 i. c" B& K0 u4 U0 Z* ~& M- Y! s// 自减1(先减1再赋值)4 z& }. ?. ^! [" o( @) i
&gt; --a0 e3 f9 I/ _1 c! K+ E
6
# D0 }9 B$ ~; L& `) f$ e7 y&gt; a
' {; W. A) c# M) p6$ W# v4 Z* r+ H# @- z

7 J, e) D$ H$ X  O& h//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理' m( L% Y0 j& \) Y
</code></pre>
1 v7 P( Z% Y4 C0 X! H* c1 _! _' _<h4 id="242-比较运算符">2.4.2 比较运算符</h4>8 I/ F- w. `/ w1 c+ ?3 u
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
& k2 @0 v' |, u; J: A  n<pre><code class="language-javascript">// 大于0 ]3 b% k% Y+ v" g
&gt; a &gt; b
5 H/ f  ^6 X8 R% h& Atrue3 _0 c; y; m5 I2 w: h& R0 M3 m
// 大于等于
& j! h) d0 }: Y' L&gt; a &gt;= b
5 V1 M# W# R# d3 ltrue
2 n$ Y/ ?5 q7 Y. C# x" }2 K// 小于: A/ p) R3 O. E2 [$ S8 @' k
&gt; a &lt; b
( @6 F1 f! l: {. s% ]8 K% c. i2 rfalse
# V$ J: o7 v* Y2 _. B6 P& m+ I// 小于等于
2 P1 Z' q  G/ k! A&gt; a &lt;= b  t( B3 k8 b5 J
false4 Q: ?+ h5 ^' d) _
// 弱不等于
$ z6 z; `2 {& P+ Q+ K) B( F# ?: C5 k% y&gt; a != b
$ @6 i4 R5 F! @6 p" ^* F7 ]true0 Y' L4 t1 k: {& F% A
// 弱等于& S6 ?0 a: F' R# |
&gt; 1 == '1'
( S- [, M) C: ztrue
9 [+ B- I4 c! j// 强等于
+ z* b1 r7 l, Y. ]4 ]&gt; 1 === '1'# V6 N/ d& c0 D# M
false8 u9 S& |/ s, }
// 强不等于
$ c; c! C7 S8 R- {. m&gt; 1 !== '1'
2 e+ q+ C" p3 M6 f7 `, Ptrue0 C7 o" Y$ o2 v' |8 `! N

5 b/ e8 d$ [! T3 k# m/*: S% N1 j% I% C. y4 n, ~
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
) f- b; N, }! t2 g6 A6 V# R*/8 s- u, j2 u/ P- c; D' ~9 B, R1 N
</code></pre>  O- |6 s( H/ H/ P8 d
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4># W# t# f( M% S2 @
<p><code>&amp;&amp; || !</code></p>/ {4 b4 S( E0 b5 c. V
<pre><code class="language-javascript">&amp;&amp; 与: P; R% ]8 ~. @& j. R
|| or 2 t: f! j% M  Y+ S  e5 v* ~  K
! 非
& t. ?* {1 r- H7 h</code></pre>4 K/ o& x! `: r1 Y3 v' g
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>" t9 K6 d- K% b- F
<p><code>= += -= *= /=</code></p>
/ D0 [. x2 w/ P% L$ W<pre><code class="language-javascript">// 赋值
1 E  _, r! D) G  [7 ]% O&gt; var x = 3
9 a& g# @4 d$ C7 P( E// 加等于
% W2 Y! C& s+ g. L&gt; x += 21 h; W8 F) s. m" [2 ~  P
59 \; h1 L, a& a* O" Q1 O) u
// 减等于
/ f3 u4 n- |, D" b$ a&gt; x -= 1% ]4 _. {) a! c- R- p. G
4
! T# A+ j, c% B, G// 乘等于5 u7 n7 \: o8 ~( S8 T) P. z0 r
&gt; x *= 2, Y# u+ M% e' Y. m3 S8 }/ y1 Q
8
) \8 C( A0 r0 I# y. Z% I// 除等于
9 e5 \% Y0 Y, S1 Y+ v&gt; x /= 2
$ J+ y6 J4 e9 w" l. T$ z42 S, K/ ]' q& q# Q6 M# Z0 c  \
</code></pre>5 r# S7 Q( u9 J2 Q' _$ \5 x8 {; X
<h3 id="25-流程控制">2.5 流程控制</h3>) h  [3 n! r) W/ \( \, F
<h4 id="251-if">2.5.1 if</h4>
5 h8 Y8 R( V/ L* z3 }<pre><code class="language-javascript">1, if(条件){条件成立执行代码}- l- q" ?$ h; r& B1 |% G  F  H1 y

: K$ s- Y) `2 g&gt; var x = 3
/ ~' |5 p; ^, `# _' T5 }8 H; J&gt; if (x &gt; 2){console.log("OK")}
0 `5 r# b5 h6 ?! _. T9 E OK
' e# s) O5 [4 g: t% |* B- T
! H% w1 J8 }: N% p# W0 e2 ?3 o1 i4 t2, if(条件){条件成立执行代码}
5 }6 ~  k6 Z5 w) \% F        else{条件不成立执行代码}
% v8 {& r. V/ A
- i1 Y4 j- g! @' k8 o9 V) {&gt; if (x &gt; 4){console.log("OK")}else{"NO"}# N# g1 ]+ @4 _# r9 g, k+ P# l
'NO'8 k. _- ]. O0 e8 L1 v, {0 Z
$ U1 c4 R$ J/ C  F' }9 D# O2 k7 e
3, if(条件1){条件1成立执行代码} * c' }# G; e  e
        else if(条件2){条件2成立执行代码}7 w/ h* \7 t. S/ {
    else{上面条件都不成立执行代码}
( P) b3 q5 F2 y. e7 `+ n, v' C# C3 `" d
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}/ D! X5 `; Y0 `( X- Y0 K/ X
Ha) M- v% }( |4 l0 ?
</code></pre>
& q% |- E. s5 E, C<h4 id="252-switch">2.5.2 switch</h4>
/ J9 T0 i; `6 _<pre><code class="language-javascript">var day = new Date().getDay();' q% o; f+ E* C! _: f4 x3 d& p
switch (day) {  X3 t7 w9 W3 o% Z  d' w
  case 0:7 A2 C, Y, N' X/ o
  console.log("Sunday");8 I& q$ f0 K- b# H
  break;) g% O4 p6 k) h; J- j& x% f  C4 N
  case 1:
% q& j/ y2 R8 r/ k, e  console.log("Monday");/ t( U4 n$ S, Q9 M5 {% @
  break;0 K" e. |. w. M* y; q
default:9 U3 Q4 H: V( h& a) Y
  console.log("不在范围")+ b$ p7 E7 F3 L) M
}8 S/ I( {) ]% Z$ m  h: N* G3 H
不在范围0 }$ A' t9 Y3 @" w7 v1 U
</code></pre>
! @, \( [3 ~$ Q9 r<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
6 M6 `. Z, \+ g" i; b* U<h4 id="253-for">2.5.3 for</h4>; {, u1 P+ Q5 M: o8 r
<pre><code class="language-python">// for 循环
9 Y6 M$ p+ [" D% U8 n, u" G        for(起始值;循环条件;每次循环后执行的操作){
3 S0 b$ Y* x, H! F8 ]9 J: Q3 {        for循环体代码5 n, A. `. h, B+ J
    }
, Z( \0 s+ n$ \. y& I, t8 J0 g* A5 y. Z9 N; L( A
for (var i = 0; i&lt;10; i++){  u- w+ L4 q. P3 _  |( ~- w1 G
    console.log(i)
" m/ U- C- k8 ~}7 `9 K' ]& K0 Q2 a+ Q
        0
# R+ K6 V0 \  _; O) v, C. y        13 Y: k& _$ P7 x
        2% N" C. A3 G, N2 t
        3
. A: S" L# w1 G7 h        4. J1 ^4 G9 b# g! s" K# Q% K
        5
* m( N8 G+ I$ q, c        6
$ p8 H9 B( E' c+ Y        70 _8 i% P; I4 G' [1 b; I
        8. ^" _; W. N* O( R# f+ Q
        9
" ~- j4 ?9 K3 u+ Y! a</code></pre>- {7 [/ S: |9 D# k- C
<h4 id="254-while">2.5.4 while</h4>
( O' d' V  p2 [, D  x! u<pre><code class="language-javascript">// while 循环; Q; L# {. a8 T' d' p
        while(循环条件){
0 b2 W: V6 v6 b# W9 J4 M        循环体代码: y4 M7 j6 a! S7 ^1 {7 M
    }  u# U* m% a+ Y' u7 u* j% R
! d; [; t: U. i# y) M1 ]4 R
&gt; var i = 0
7 B" q! H- e) {) g) c&gt; while(i&lt;10){
1 J# o4 h( O1 ^3 ~* o- t    console.log(i)3 M' Q6 W# |7 I5 E9 ]! Q& g
    i++: p7 O7 G* X/ i0 _6 ]1 @
}
8 G- H: L6 F: q 0
) f) D7 |! `- W6 U/ h 1; W7 w$ ?8 i& I# I/ Y: h/ a: C
2
  l1 A' G. R$ M2 q1 ?$ B 3
3 r, `0 [5 s$ w! d; j 4
" b: `" G4 f/ s% q6 D; I 5
/ i. {% x" z3 e 67 o* ~9 q$ @7 A) K
76 p6 n) Z! F6 m" M! f
8% j4 t2 O$ p$ \% ^! o5 Q! v( Z+ P! n
9
7 J2 L9 V" X' w) S' n. A% D1 G& x</code></pre>
1 x9 F& ]+ B$ _5 F  H9 a6 Q# y( ]<h4 id="255-break和continue">2.5.5 break和continue</h4>
/ s. y2 ?) [( y3 k2 ~<pre><code class="language-javascript">// break8 p$ o) Q# |4 B( v1 `/ I
for (var i = 0; i&lt;10; i++){
5 @/ P% ?3 D- ^& d* l5 L    if (i == 5){break}
3 n. N0 \5 e7 k$ E+ n    console.log(i)
0 E7 S; n* D5 c$ p' r}
7 K) M( V* @6 E4 v 0
) ~9 d8 ?% z- A& v0 v 1% a, n- f) W) A! U' R* M2 ^% h7 o
2- H' m* U3 }3 P0 |5 F
32 q- Z9 s) }5 S9 F' o. w
48 h( E& F  Z, R) F/ l/ k
// continue
! w; g9 h$ i7 F% b1 c; Z+ J3 {* Y4 qfor (var i = 0; i&lt;10; i++){
* ~4 {, s( O7 ?3 ?3 f5 T' M; w# i    if (i == 5){continue}
% s& |; C8 `2 I5 x2 y    console.log(i), j- O' C( ^' B; \' t
}1 E& P% @) L+ Q
0
. |- ]/ k4 W; r& r0 M% g+ e 1
) h7 \, k/ P) N( ^ 25 ]8 o1 S$ B% R' p/ s/ A
35 f* i/ n/ O8 R: h  @% e
4# v% t8 I. v2 }. u! f  u
6. a" ~2 R9 U" E! }  t" a$ i
75 \- F( e% B( e  K; U
8+ X# N! g5 u; q* t: n; M/ K7 S
9
# U7 u5 P: j, o- N3 x! u1 o& ], i( x+ I
</code></pre>
  q6 _$ D% }* Q0 j: M# D+ W7 d<h3 id="26-三元运算">2.6 三元运算</h3>
, |5 B6 e7 u2 b$ x( E<pre><code class="language-javascript">&gt; a
; u8 @8 m7 A8 a( y/ F6! K6 G: B9 F" T# \- `
&gt; b" Z! ]. ?* g  G% O' G2 f) k  H
3
! L2 a$ w) N- Q% a' C- i. w0 X  |: p8 z1 k  _0 R" B
//条件成立c为a的值,不成立c为b的值
% M: w" `3 O4 @3 R% U5 w2 ], G, j* D&gt; var c = a &gt; b ? a : b, D, z5 k$ O& k8 w5 z, m
&gt; c9 O, W0 G0 ^1 K. j+ I
6
* \8 }  D% k, m) @  ?8 W5 T  \% C# L
// 三元运算可以嵌套/ z. }% }6 Z7 F  x7 x  b/ p
</code></pre>  S* U9 B; @# K5 e" [$ H
<h3 id="27-函数">2.7 函数</h3>4 o- c, n4 o# A- K
<pre><code class="language-javascript">1. 普通函数8 K' R7 _. E' q9 P
&gt; function foo1(){8 U/ b1 z  g- P
    console.log("Hi")# y  U0 U! D% f1 P
}/ f$ e$ ~! I4 F. U

9 w  w2 Y& c7 y2 _- g, l&gt; foo1()
( L$ W" g0 d$ |6 k8 o+ h( E        Hi
4 `0 g1 |5 ]" s  ?, R2. 带参数函数
) \% M8 W) {* s& M- e* x&gt; function foo1(name){. @! C1 u! _# h$ ]
console.log("Hi",name), X+ k, z2 q+ \- o$ M/ y
}
8 d3 j  m3 e# ]: {( r
- ]5 B' b% F& {&gt; foo1("Hans")  X' |9 D7 i4 b6 Q! T& H
Hi Hans; X- ^! _+ F& K* d! `

* U% e8 u3 b7 N7 {) K0 v9 E, p&gt; var name = "Hello", J+ K6 Z9 ?2 c! J6 Q
&gt; foo1(name)
. {4 ?  M6 [5 B$ ?+ P/ j. _. vHi Hello/ Z" i( i) T$ V, h& T/ s! r) u% z* |
2 \4 @: ?8 e. ]1 M% v
3. 带返回值函数
" |: U7 Z( O3 {2 D2 \9 `0 R0 `&gt; function foo1(a,b){
# A+ K7 u" V& x" V- a        return a + b   
( A# i3 e9 J. h7 k, A/ A}$ p$ k5 P! n4 B4 f6 s
&gt; foo1(1,2)
. s/ ~) n+ J2 i: |- e8 r2 P3) |3 B: E; E/ f5 ?+ Z# j
&gt; var a = foo1(10,20)  //接受函数返回值
; [: e/ W6 H* n' q8 R5 w&gt; a
6 M' j* ~9 ~1 V5 q' c% M30
) k! K3 r% W9 o' s' ~6 j4 m( @5 ]$ Y* s3 v5 u' ^; [2 o) j5 V4 w1 P
4. 匿名函数
/ }* V4 h; X1 ^1 N0 |&gt; var sum = function(a, b){/ f' K, q  U. n
  return a + b;8 ~2 R( n+ L. K' n' d
}
1 B# O3 F/ }7 B4 G% m5 q&gt; sum(1,2)
! p9 _9 I" w/ }3
% ]7 y% h9 z4 A! o" Z$ K
* w. s7 Y" o5 ~. D5 G7 T) W/ ~2 Z' q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 x6 y0 N. r! p
&gt; (function(a, b){
5 u/ H% ~" b0 `. D+ e) e' J  return a + b( y- h7 L& h9 A: ~6 {+ `
})(10, 20)
! o9 @( T1 [- n: r30
8 L( E7 [5 }; H9 x, M0 M5 U1 T2 J; D2 e6 `4 ~" N+ e
5. 闭包函数3 W, L- w! r- L2 `# L/ I
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
' ^# X' l0 A* o- l7 kvar city = "BJ": t) U6 [5 |6 i; v) o/ o7 ~* D4 n
function f(){  u. C( H% j3 d8 v4 k, w
    var city = "SH"; T% n) g+ \6 n* q8 N
    function inner(){: H" w% n3 l8 _3 @4 n
        console.log(city)4 e7 n# n% [9 U$ B
    }6 t* L, O1 N% H7 ?( I8 H
    return inner
- w2 Q6 b$ a+ s& A- r# B}) F# v* c+ x3 T# b) E4 R6 N5 `
var ret = f()
7 `3 z1 ^( G6 Y7 l: C; eret()
& ]; e+ }2 C: V, X& U9 M9 M执行结果:
0 J% \' H! j# m" @. G/ ^' \SH) e' m- u7 G  B6 ^. B
1 e- h+ k4 d- L& a4 W+ p. @
</code></pre>
, C/ O! j- `0 G' ?8 P<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>% r6 h5 `$ i0 `8 {8 H; z
<pre><code class="language-javascript">var f = v =&gt; v;
* I6 t4 E3 \7 R+ ]// 等同于
7 `8 h/ v& e4 s5 T- n0 J; L4 _var f = function(v){
6 h7 {) p6 S4 I& i8 S  return v;) X) t" ?7 V8 m# p' U2 V. U
}
1 G/ P& v' {! O( K$ L2 V</code></pre>% A6 v) V4 S* Z" {9 |# d7 s( C
<p><code>arguments</code>参数 可以获取传入的所有数据</p>% M4 S2 ^7 j2 D9 ~# Y: P+ N
<pre><code class="language-javascript">function foo1(a,b){
: ~/ D0 m" _/ Q6 B    console.log(arguments.length)  //参数的个数
( i% }2 A) ]4 ]' X    console.log(arguments[0]) // 第一个参数的值7 R' ]4 D/ t1 q( T
        return a + b   - G) T$ T% m7 k( v
}0 k2 ~3 v, [" U4 a6 B
foo1(10,20)
+ g! v1 w1 B. K5 |结果:) I- v9 `2 F7 V/ O3 ]
2          //参数的个数
8 S) l: `+ h, v7 V) d10        // 第一个参数的值3 E1 ]1 h9 ^* D2 S& L& X4 N
30        // 返回相加的结果
( t7 i6 D+ B6 j: O. N# R( g0 L</code></pre>
3 R- T' A9 M# m: `<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
* o' _% h3 ]% k- f! G<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>0 E- F  u: u6 S7 [/ k  t
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
1 g2 A% V: w9 M; f<h4 id="281-date对象">2.8.1 Date对象</h4>. O: t# |  T, b7 s) K4 `- O
<pre><code class="language-javascript">&gt; var data_test = new Date()1 U9 q) d9 p9 B, P( t- W
&gt; data_test
: r8 Y2 f9 W+ ?; \* GFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)9 m) I, `" j4 p
&gt; data_test.toLocaleString()
3 {( O2 w2 x6 o+ P7 X/ L; v'2022/2/11 下午9:44:43'
+ l5 K! \* I' ^( k: v9 s, `( T& u/ y5 v7 j
&gt; data_test.toLocaleDateString()
$ s& T/ S7 p9 h9 t! V'2022/2/11') p# b: {9 e) }! ?  P
/ d* P" ]3 M0 z
&gt; var data_test2  = new Date("2022/2/11 9:44:43"); Y" I/ S# G3 v0 ~. s( k/ e, B5 F
&gt; data_test2.toLocaleString()( l5 v$ b# x& I% H* D+ K+ D
'2022/2/11 上午9:44:43'4 J9 l! v- d0 O5 W' a
6 V" }+ K/ o. {1 S* @: H
// 获取当前几号
/ U! g+ M1 }2 m1 R+ S( |&gt; data_test.getDate()
! C. w2 A0 d. Q& [) ?11
& z8 T4 f' e2 O1 `+ Z// 获取星期几,数字表示0 k! A! u* e2 J  B8 K( B2 i. I* }- r
&gt; data_test.getDay()  
% D% @9 Z, Z6 W4 N( D. `3 ^5- V1 R" @0 _$ P; t
// 获取月份(0-11): j/ ]5 d5 x" z- x
&gt; data_test.getMonth()0 |" f8 e7 T! g  G% ]0 x9 w4 h+ {
1
( P0 {" q3 y. U3 y// 获取完整年份" w# X6 q* Y, l# B1 {4 H$ i: V( a
&gt; data_test.getFullYear()$ k4 l  [! X1 G  C
2022
* k5 ~0 H; ?# p$ N// 获取时
4 z. o5 y! G1 O&gt; data_test.getHours()  v6 c% r8 N" Y" L, i+ f1 S) @' }
21' `6 ^0 M+ e( C- m* @
// 获取分4 T" Q7 M; o6 S; _- u8 Y
&gt; data_test.getMinutes()2 ~4 c. c* ?! u) J
44
$ Z( U3 U( B" J0 k6 {3 f// 获取秒
: P! K' P* P( o8 `1 Y' k&gt; data_test.getSeconds()6 G. F4 \9 p7 P# c; n5 k
43
+ z) B' \9 r+ N4 ^// 获取毫秒2 S; L- A7 Z1 `# R
&gt; data_test.getMilliseconds()1 ^; G7 W7 [: n# a! E+ ]" C: f( Y
290' ^; T4 i# U* J2 O
// 获取时间戳
* q- P( J: U; c: B( u1 J( U& ~&gt; data_test.getTime()+ a2 h  ^9 z. v; D( N; \/ ^
1644587083290+ O) a5 k  y/ e8 {7 O+ h1 `3 _  [4 T
</code></pre>; A) _8 B+ X8 L/ F, X! x8 M; p
<h4 id="282-json对象">2.8.2 Json对象</h4>; I- a8 Z  E  L0 @- k
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
  N9 k# _2 K0 \$ M# w5 `* nJSON.parse()  // 反序列化,把JSON字符串转换成对象
7 y% o" v2 S/ ~! |. \  p6 h: |, D6 `6 e8 G- d7 m" G$ |
// 序列化
/ Q, j7 A8 M  n# G/ l8 m# z, I&gt; var jstojson = JSON.stringify(person) 9 A/ Q1 H/ t% n4 c
&gt; jstojson  
- s7 ]- l8 }, o' d" c) y'{"Name":"Hans","Age":18}'* C$ n0 u0 ]. D4 l* _% Z  f7 Z9 C
' @: a1 U6 z9 `6 H2 x" t9 `
// 反序列化. I1 t  ]( [# W/ T+ Y& c6 I
&gt; var x = JSON.parse(jstojson)
' ?' e3 n9 X# Y0 y&gt; x
* l/ _* ]! Y; J$ X7 N! W( g% K{Name: 'Hans', Age: 18}
' n- M4 r  B% z&gt; x.Age
  t* m" B2 a! p. M1 _18' k+ d* A: |; A/ O, ?" @
</code></pre>
2 b: F) q! `1 c! I6 U<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
. j) x$ ]# ]+ O/ v<p>正则</p>% o8 q; L! W; _1 J
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
$ s/ a, T+ W$ v! f  f% l& K, V&gt; reg19 I% K, N4 E; i! J, w
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
) N! I3 F, `. D; z( [5 f&gt; reg1.test("Hans666")
4 t0 B7 @4 E7 `+ q& \/ I6 ctrue; _  J! i4 q  M# j) Q" \2 Z- Y6 F
/ v. f9 `# Y; w5 ?& K
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
6 a# i0 |5 r5 i' d9 {&gt; reg2
7 ~6 F6 ]/ W$ }2 t; M/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- |3 H3 V7 n* [& h) Q&gt; reg2.test('Hasdfa')% H/ Q, ?0 L7 n3 s1 B
true' \1 t( v! e! V

! T; h  q4 `- w" l$ m* M& c) G( J全局匹配:
) @) ^6 b# F1 r6 U0 q& `&gt; name% L, ]: t0 U2 {& r: M
'Hello'- _0 A/ [; `8 i, S
&gt; name.match(/l/)8 h8 c; k& ^: ]( v: v( h5 ^
['l', index: 2, input: 'Hello', groups: undefined]
$ l" @( c# q- Y4 a! S
% R, Z& H/ C; c( i: F) O: I! r" F&gt; name.match(/l/g)% r% E* N- h3 P; i! `* W1 K
(2)&nbsp;['l', 'l']
3 e  t) w5 F0 N! r% E// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配* R9 T4 C: E6 `
0 t; W9 y7 b7 y  b- F
全局匹配注意事项:
& P. ]! H: V% p, R) X6 N$ o' B&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g# e2 w3 q" ?' D+ Y8 J$ ^+ x7 f; D
&gt; reg2.test('Hasdfa')
) A% Q( |# O4 f0 a3 Vtrue
, v! b5 s* e4 Q$ `. U1 c: z; U" L&gt;reg2.lastIndex;( ]% T! i' s4 y) ~* @
6; x/ ^. E( O" X
&gt; reg2.test('Hasdfa')
$ Z* K. R/ w% k) c- Q) N/ Hfalse
+ H- s+ Z+ Q, [8 Z8 B&gt; reg2.lastIndex;( `* ^, a9 l. @7 o; k( H) L! ]! ^
07 i% x  o" S( G6 q
&gt; reg2.test('Hasdfa')
- a( y) `7 O5 G1 x5 G9 htrue
* j0 n( K- ^, ?) U&gt; reg2.lastIndex;8 r/ l" S5 \- R* [1 y# @
6
4 f( ^  p/ |+ g% |, D& g( l. C6 s( n&gt; reg2.test('Hasdfa'), s1 E, |! @  h& E- t8 I+ x5 a
false
) O# n4 |: X% m$ y' v7 I4 N' v&gt; reg2.lastIndex;) E, C* D' R. F' K* A1 G6 \
0
4 q: A( G6 y/ S+ g& d/ L- M// 全局匹配会有一个lastindex属性
9 V7 K# N" w4 Z; T" i; _3 k9 u&gt; reg2.test()$ _9 {1 ]# N' V
false
& J3 V; S! p7 h: v( n# p8 ]&gt; reg2.test()
( w% q. X( j, ]; {! ntrue
7 W- g) M6 k: ?// 校验时不传参数默认传的是undefined
. t1 H5 f- Z6 x, G: f</code></pre>
; c/ N; `: H' D) S<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
& m; w  f: `7 V9 h9 ^<p>就相当于是<code>python</code>中的字典</p>0 P! N) [; T2 L: R/ {
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}" Q/ f1 Q5 f, u; O
&gt; person& G: h4 m5 Q) @+ \+ w9 s
{Name: 'Hans', Age: 18}+ y" M0 i) w+ q  h; g
&gt; person.Name
0 Z$ j9 ]8 C# j: E( c) B'Hans'5 M$ x5 K1 G; K
&gt; person["Name"]/ `, r2 h' r1 z4 r0 k4 W
'Hans'. l$ N/ S" J/ s4 o+ B# M7 w; C

, P+ D3 }: L) q: I- w8 U8 x9 K// 也可以使用new Object创建. D! e7 @  `/ D( N; q2 G
&gt; var person2 = new Object()! ?8 D4 R9 f+ m  n' [# {. X- F
&gt; person2.name = "Hello"
& q; g9 T8 K" S) D# T'Hello'+ [  t( i) q  l8 d% s; s- k
&gt; person2.age = 20
9 u9 `+ i  A4 B% P- H20
8 L: Z& X* C! v0 Z% }# u</code></pre>. E5 O# C/ E0 X/ e
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>; i; E" _" K; P6 P6 J
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
. F$ O* Q5 a  J. }& `+ a7 v<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>) M! p% W8 s6 ^; U' P* g6 o, x
<h3 id="31-window-对象">3.1 window 对象</h3>! M! w: x9 a7 l0 C4 t9 V
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>0 S' G3 R$ q& l' U8 H3 `% K
<pre><code class="language-python">//览器窗口的内部高度, s9 W4 {3 a' m* }- n
window.innerHeight ; d% q2 z4 z/ y/ M! r! y$ u0 y, d, d
706
2 x. R8 [$ D8 i3 p6 s//浏览器窗口的内部宽度! g7 q6 w  [. i% }- ?  a
window.innerWidth* [5 Q8 ?7 ]' ~! A2 i/ X2 G
1522, S# v- A* B4 r- P$ {
// 打开新窗口! n& \7 ?  f, s; t( U* s* o
window.open('https://www.baidu.com')* {( K5 V5 S7 a
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}6 Q6 K8 y9 z' J
// 关闭当前窗口
: b" L" Z5 M6 W: _1 L/ p/ gwindow.close() - A& u, M" H' U( E$ n/ V6 S5 S5 n7 @
//  后退一页+ s8 V3 E" H% b6 r8 k
window.history.back(): N7 @" d6 e' E% |# Q
// 前进一页
7 }/ R0 z; z8 t9 o% F# \1 vwindow.history.forward() 5 h$ b7 m" W4 |' i# U2 o8 X" w
//Web浏览器全称) B$ S, X1 t% Q$ f  {$ f
window.navigator.appName; R/ w  B  C4 P4 l$ ?; \, @( j$ `
'Netscape'
2 P: ~- m! o3 Y& K' p// Web浏览器厂商和版本的详细字符串' f% l3 }$ E: |! Q# O% F! V" E
window.navigator.appVersion) b; e& ~2 T7 Q" d
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ Q! Z# P, X3 [// 客户端绝大部分信息
# Y( N5 P/ o' ]6 mwindow.navigator.userAgent5 u4 H* {3 i8 V3 |
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) w6 j$ `9 q" c& a0 i7 B- Y3 w// 浏览器运行所在的操作系统
8 @9 W1 t' W4 |- A4 ^8 Ywindow.navigator.platform
- G2 a6 K7 P) S3 v! y'Win32', P" y( W  S/ `; q

" F/ V! t- R! D7 u$ r, u# t& {//  获取URL/ w! M" O# r! M) o1 ?" y
window.location.href7 J3 s' W. g1 ]! C
// 跳转到指定页面
: C/ w2 ]" e% Q! l8 w: Y, o2 Lwindow.location.href='https://www.baidu.com'$ e8 @7 [' v' e3 O) R" g
// 重新加载页面, u, V8 ?" O& K* |% f, p: {
window.location.reload() 7 A; A% `/ [3 c# h0 ?% x- B! X/ x  @' P7 ~
</code></pre>' v: j; ~6 ^5 O+ \
<h3 id="32-弹出框">3.2 弹出框</h3>+ n+ F. M" z, }/ N2 p8 f
<p>三种消息框:警告框、确认框、提示框。</p>
# s7 j& t0 B! t) z8 e; c# `<h4 id="321-警告框">3.2.1 警告框</h4>
0 e7 G3 S# b# D! t<pre><code class="language-javascript">alert("Hello")' Z$ }( W9 c% j3 w/ \
</code></pre>( g3 o7 |( ?- s4 E8 e
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
, S/ I: U6 L* {5 n$ W7 [& w' ~<h4 id="322-确认框">3.2.2 确认框</h4># q7 u4 R- L6 Z5 Y; w) ?
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; w( i( R  x1 Z4 r5 d! m+ G<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
/ [+ G9 v# ^9 d; p- P4 ], Z% Strue
$ ?4 P( D4 T, N8 B1 R8 H  d&gt; confirm("你确定吗?")  // 点取消返回false+ N6 p/ v9 {+ e5 _3 {: }" t
false4 a; ~  M3 M2 y; {
</code></pre>
  x$ ^8 T! Z6 v  X9 D/ s<h4 id="323-提示框">3.2.3 提示框</h4>
% |$ c1 X4 X3 u2 A0 ^( I<p><code>prompt("请输入","提示")</code></p>2 E5 W* ]; f4 I  u$ s6 c
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
6 s- b- B, b, v( g9 a7 r<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>- V9 C& Y9 e  l( H3 {% D$ n  I
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ I+ t+ K+ D" ~( `
<h3 id="33-计时相关">3.3 计时相关</h3>
5 O8 y8 h  T% j* o1 p4 N<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>- u8 R, M$ [8 M, r3 S" u
<pre><code class="language-javascript">// 等于3秒钟弹窗9 }* S: k0 W% m+ ~
setTimeout(function(){alert("Hello")}, 3000)! {3 j# Q7 A5 S% a( X8 V: ~/ ?/ H: b
; |& T# v, u/ }! Y0 }
var t = setTimeout(function(){alert("Hello")}, 3000)7 L3 }4 y- r" ~: q: Q  v
/ i; f, \  K4 q( `" \
// 取消setTimeout设置* y, ^# l! r! g* d5 n3 ?* a
clearTimeout(t)
- \" o( w4 u( L0 N$ d& E</code></pre>
  g, S. i# T% H$ a" q0 a( C<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 a( ?, M4 y2 D* O: k<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
( W7 D  a! D" Q$ t  k<pre><code class="language-javascript">每三秒弹出 "hello" :
' Z5 t; R) K6 I) x0 O: l3 JsetInterval(function(){alert("Hello")},3000);0 N# n2 g& M- v) c7 y
</code></pre>3 ^4 h' n: @: ^9 R( U7 ]$ y9 }
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
. E: z; R% V  S4 t; `" m, ?<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);: B+ F7 p  x0 i: E& @
//取消:4 K, e, e+ w: D* @0 @/ u) h' P6 W$ t
clearInterval(t)
6 G( e8 P$ o; r! j) s</code></pre>) ^& f9 r1 X! I* U, Z- n4 c+ M$ d

! A; ^/ |" ~) z7 q4 P1 n$ f6 \
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-13 04:59 , Processed in 0.073063 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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