飞雪团队

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

前端之JavaScript

[复制链接]

8134

主题

8222

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26732
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
2 a" |  z3 i2 s! N) V$ \$ U) r  o* F
<h1 id="前端之javascript">前端之JavaScript</h1>8 @- e# Y. z) x" a) w4 d4 Y
<p></p><p></p>3 T+ _/ C2 `6 K
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2># m- ~' H8 {1 q8 m: T+ r
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
5 c( o! g. J; l它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
0 P! b. {& ]0 _它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
( I; h$ c+ r- q; _它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>5 k4 A; \; _6 H# N0 I1 W
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
% L* B+ i0 b" V/ x<h3 id="21-注释">2.1 注释</h3>- u6 J) V3 h3 T' p
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
6 j7 u7 P! p3 T  m4 ~" M* @5 k. R<pre><code class="language-javascript">// 这是单行注释
: ~4 |7 O- S; v0 o$ n, M7 @4 _$ C0 f7 o/ {3 O3 b: q0 H$ n
/*9 a4 c8 K; A6 V" u/ q
这是多行注释的第一行,
( M4 l6 d; j% @3 A这是第二行。
1 M3 z! ~2 {6 [*/
4 t3 L4 \4 G# o% R, x</code></pre>
6 x5 f6 q* R& O$ |7 e, X<h3 id="22-变量和常量">2.2 变量和常量</h3>
6 z* O2 \: r4 `, p/ L8 e+ U# L7 a<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
" n9 T3 [0 Z/ e<ul>
2 }0 E- C/ y) J6 Z<li>变量必须以字母开头</li>
/ O& n0 S1 s2 |- O9 z; S. }<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
0 u$ k0 W7 p% ]# w3 {2 D' W# \<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% a( Z4 j5 _) x; r5 G+ Z2 q" h
</ul># j3 |- ~! V% \/ N6 {
<p><code>var</code>定义的都为全局变量</p>+ R5 Z5 i0 C9 }) s: T$ J; _
<p><code>let</code>可以声明局部变量</p>; w5 P/ U- u0 g) z, [% f2 l
<p><strong>声明变量:</strong></p>1 m/ e5 Y) \6 f. C3 `' w! z
<pre><code class="language-javascript">// 定义单个变量! t% U3 j( w/ y* I- q$ W; u* K9 V  b
&gt; var name: b2 {2 j0 O0 ?1 q
&gt; name = 'Hans'
, ]& T9 ^' C% t& G1 W2 V//定义并赋值) v' ~! I. B7 j8 X8 H; O
&gt; var name = 'Hans': `8 I' Q3 Y' L' s5 _4 I
&gt; name6 T4 E2 t6 |" i5 }5 ^
'Hans'4 F6 y' }: ]! W+ D

4 N" V# K& @1 T. ~& w# r  d6 v// 定义多个变量
4 v" x6 p0 {; Z! M& n" g&gt; var name = "Hans", age = 18" J/ q, W  i) l5 e! V
&gt; name6 @1 A- q8 c. c3 K7 F2 K+ D
'Hans'/ q! }8 T2 H. R+ Q$ y* F5 y  {
&gt; age
+ t- x; {- m$ E7 y0 ^181 h5 J: d! ^3 ^5 I) Z% t! K  {2 \
5 c, }+ ?* Z6 |: U) s3 G$ c
//多行使用反引号`` 类型python中的三引号
# ^8 z2 S6 W1 K* `9 H&gt; var text = `A young idler,
* A0 L! P& _5 x7 D) y0 I0 ]5 \7 Man old beggar`* }0 O! _. X4 _' T! x4 d
&gt; text9 G5 V; Q# \1 H2 z
'A young idler,\nan old beggar'1 n2 F4 m3 q/ t4 V# o4 j) F
</code></pre>1 q0 y9 m1 o0 M# C6 ~
<p><strong>声明常量:</strong></p>! O' g5 ?5 R! r6 _. t2 o
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
, p) W4 Q/ @# }! U<pre><code class="language-javascript">&gt; const pi = 3.14
8 c2 k2 f3 D2 x! E&gt; pi5 b: L  B9 d! K1 [* w+ A
3.14
' F" s) \$ D8 v, m1 Z6 i2 V&gt;  pi = 3.01% ?; ~- x" P' {8 \* ~7 ]! U* q
Uncaught TypeError: Assignment to constant variable.
  w! _; y5 `8 C    at &lt;anonymous&gt;:1:4& c0 H- o) n7 Z/ y% t+ }! U3 U+ Y

4 }) r3 M4 W) |& H7 j6 p</code></pre>/ S" ~: @0 A% `" a) b8 ^6 M
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>2 D  _( v% R! b2 [, H* I( S
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>: S, C+ s9 ?5 h3 k% j
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>1 k/ z2 w+ D5 c; X: {
<h4 id="231-number类型">2.3.1 Number类型</h4>
& O. A& d  {# Q! A  d, T, p<pre><code class="language-javascript">&gt; var a = 56 Y  x. O9 t* l
&gt; typeof a   //查看变量的类型  ! n* e" L, N2 |5 D; U
number
. V" m0 U9 k6 u/ m% Z7 H7 p, U3 L7 V% X/ F0 U( C+ x
&gt; var b = 1.3
' u1 T. z$ x8 Q* D6 b( b&gt; typeof b5 |, {6 ]( C  p) L6 w6 w- U) {
number
$ @2 o% I( ]$ I( X& I" p5 p- m/ [$ y0 J5 X" L0 [2 n
// 不管整型还是浮点型打开出来的结果都是number类型! @) c. I% w6 ^

9 n" c2 Q( T; R6 e' i: _( g6 `8 o/*
8 X  c) o5 I+ B8 C" m, ^NaN:Not A Number
) M& X) |$ }$ E' h0 {NaN属于数值类型 表示的意思是 不是一个数字% c7 |$ f; I& P  t9 U
*/4 @1 z" x7 V1 A

9 a9 S4 _; r5 o1 S; O: RparseInt('2345')  // 转整型
! ?' X% W$ a: d3 c. R23451 g+ U0 P* L% A# \; S
parseInt('2345.5')
3 Y4 _2 ^( D' J) S2345
3 S7 ^: U( S5 a) a: UparseFloat('2345.5') // 转浮点型+ K5 Q" u; u& k4 {1 i1 X/ A  T( f# j
2345.5% x3 \/ K% H8 Q4 D. l( w
parseFloat('ABC')
# ]$ L# M4 @+ eNaN- G. j+ y9 t5 b& \: Y6 ^1 X' v8 n# J
parseInt('abc')- o9 T6 r+ [2 l' j) ]" ^
NaN5 V; s# k9 m7 l3 X2 k
</code></pre>
5 A* h  P, S* J* G<h4 id="232-string类型">2.3.2 String类型</h4>! G' S1 ~; x5 `5 B2 O
<pre><code class="language-javascript">&gt; var name = 'Hans'" y& T5 q; n, S# \
&gt; typeof name) n) j, c2 k# m8 u9 f8 ^
'string'% O; C( {0 h( J
3 m$ [) X* _9 |# M$ y( c" }$ s6 K
//常用方法
9 Y$ V+ H' Z" A* a1 u9 P* m# X2 u// 变量值长度% r4 x; x% K& U9 P- U
&gt; name.length
0 v; j" c# O) I3 Q6 d) P49 t& m% ^' Z' I2 A8 b6 a$ r2 K$ D
// trim() 移除空白( R1 F2 A6 }9 j  |) d2 b. y- b
&gt; var a = '    ABC    '6 M# ~  Y4 U1 G$ {$ D0 K. B
&gt; a. K# H$ F; G  Y) P
'    ABC    '2 e' l' B+ h4 k; A$ A8 c
&gt; a.trim()
9 H' n4 r7 @! e6 n2 a# V& X) p'ABC'
1 K/ f( U$ ]1 [# I3 a$ U5 e' R//移除左边的空白, b) t. H# X9 e0 H! s. y0 T
&gt; a.trimLeft()
' X6 v: }* k# ~% D5 w. W'ABC    '
0 Y" ?' A  S3 h0 X6 {4 |: B  W//移除右边的空白
3 T* r( A8 P/ r&gt; a.trimRight()
/ R' T  H% f, [( m. l+ G. v: ['    ABC'+ |( U8 u6 D# F( \+ ]

  M) u$ D. H" I+ v8 V: k+ l//返回第n个字符,从0开始
) G9 s9 y! K; _8 i&gt; name. V4 ~1 ?* R4 ~+ a0 O
'Hans'9 e# i; Z+ P- q
&gt; name.charAt(3)
% \5 V( I9 I4 j) N& |* ~'s': s/ M' T8 O7 n* c- v
&gt; name.charAt()7 T2 t/ G2 g, S( a: S! g
'H'
+ h- G, ~: P  a7 m$ |  {&gt; name.charAt(1)+ }; b) ?" ]. r  \
'a'7 @" Q& W+ C) h" C; f& Q+ i: ^4 D

" H. J0 P( O; H1 @+ {// 在javascript中推荐使用加号(+)拼接8 z" i+ P/ P6 ]: ]% N" k
&gt; name
4 A0 W4 }2 c7 @5 ?# C, R1 l6 C# P'Hans'5 c+ y9 k( }. a; l0 u' V* l4 A
&gt; a
( c5 U& p! Y( V2 b' a; a" Y' `5 K'    ABC    '
3 A. K4 G6 H$ Q$ L&gt; name + a
) s' J1 H- n' {'Hans    ABC    '
4 I" G% _& k* f! _# Q8 G) g; n// 使用concat拼接
/ S/ S3 Q# a3 b2 r  L3 Z7 Z&gt; name.concat(a)' F/ F' Q% A& Z! S# U5 e
'Hans    ABC    '
0 S6 g( l* X8 D
% Y5 }, e: U/ K' s( A' a: p//indexOf(substring, start)子序列位置+ B( u$ |) X5 [0 u) p$ v) H
7 E9 x& F7 z( m- C& ]
&gt; text" z7 a6 {& A, ]
'A young idler,\nan old beggar'
3 |% m! d( ^1 L1 U: b4 s&gt; text.indexOf('young',0)
& D1 Y# v# n) W) Q& D2
% y# e2 d, K) c7 ^4 K. h; P. V4 c9 e  Y
//.substring(from, to)        根据索引获取子序列, b. \6 l2 @* U' j
&gt; text.substring(0,)
. t; W+ J6 k3 t0 j- m' z- N'A young idler,\nan old beggar'
8 `2 N) j! d/ \4 h7 I8 ^! o  ]&gt; text.substring(0,10)
5 M5 c* E) E! T. t: z'A young id'6 p6 a, s( O1 {- {8 x& a$ [
/ d& B. F% z+ g! L( T
// .slice(start, end)        切片, 从0开始顾头不顾尾# P+ E6 F" J$ e3 s+ _% Q
&gt; name.slice(0,3)
' }+ R" C+ L  c  D" o'Han'
7 ~* u  ^7 x4 t& x
& t: d, B! a4 l; Z$ T6 \1 s// 转小写5 w7 V" J3 G6 l* }& [; d
&gt; name
+ k, F: W2 b- M5 W( y* `& S'Hans'
: d  F  p& @. d3 \& J# R  o&gt; name.toLowerCase()
6 M  a7 x& a1 Z! y* j1 J* g'hans'; r' }. V" A( @: H0 n1 @
// 转大写
* |( D9 d, f4 y" @&gt; name.toUpperCase()2 y! I1 L4 v, O: W" A6 S
'HANS'# Z8 h+ _3 Z4 M/ X3 @1 L

8 g2 P- L) u) S: K( }// 分隔
% G+ _' ]1 [% {+ V- G0 T& x&gt; name
5 j! s) d; V2 n' h'Hans'* J; ~& t: |3 T/ |7 N6 N6 M9 D
&gt; name.split('a')+ {2 _) f' k- I4 B) K4 Y) e9 ^( O$ [
(2)&nbsp;['H', 'ns']3 T$ f  V! t2 c& O  W1 U( [& M1 }
</code></pre>
8 C' g) m. j! R* J<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
' m- b- O3 e' @7 E) l$ M5 F- ]<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
- [  [5 D- [" Z3 }+ O<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>9 Z9 v; n5 ?3 T: \7 o
<p><strong>null和undefined</strong></p>
+ e7 y) n. l1 K6 P: r: M<ul>
, p1 n" d/ q7 L2 t+ z! H: @<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
1 T8 O1 \0 p& Z. F, @<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
- P" {& {& I" z% R9 G: T& k</ul>7 ~/ A! h8 o( F' h6 z, Q: L1 M2 {
<h4 id="234-array数组">2.3.4 Array数组</h4>6 ?) l$ d1 i4 i9 ?
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>4 x# z- V; y# l# x2 c
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] $ C) ~1 t/ Z" f" [) v. U& l
&gt; array1
) m  ~2 D/ z; ](6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' ~/ ?; j; Q0 [' d; M/ H
&gt; console.log(array1[2])  //console.log打印类似python中的print- J: Y" t: F/ {1 N( D2 A! c5 c. n
37 H. P. L: V* R5 @& \2 _9 M
// length元素个数6 g0 A: r+ }, \9 g% _
&gt; array1.length$ {4 ]$ F$ Q2 f7 N0 R& j: @1 d
6. k. ?( [- h+ t5 L1 T- N
// 在尾部增加元素,类型append
$ r0 K! w% x& @8 r7 {5 X&gt; array1.push('D')$ K4 Y5 Z. N, H
7/ k: @) j% P8 I+ t, p  }- d, h
&gt; array1
! k$ K  U; k" q6 F- ^8 D/ b- |(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 M* K( }$ o$ H5 J/ l' K// 在头部增加元素
8 u" ~8 F# y* q, K& i. e4 y&gt; array1.unshift(0)
! b1 T9 D6 a( C) @* [7 n8# t; ?+ D  ^6 O
&gt; array1
+ K$ m! R5 H; J3 m(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
7 {& j  U( e* ]
) S1 i8 `$ B$ x7 ], v8 Y7 T# a//取最后一个元素9 ~* w, N  l( j# x  P/ d: f
&gt; array1.pop()
' G2 N/ q* Q( C/ d! H" ^/ k'D'4 W( M) h" b% i0 C
&gt; array1
: i. B) s0 ^3 s* R( j(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']  Y% P; u) @* c
//取头部元素' f9 l' v3 ~8 V+ D! e
&gt; array1.shift()% D* M% K1 l2 o% w! S3 K
0
, X% m3 A! r  F3 ]0 j6 H* |' @' M6 i&gt; array18 q/ h7 t6 }0 Z; p. Z2 l: y4 L. T
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']: y) m! p! R5 |* I- j6 }6 N+ @8 @
% `2 p- N! |, c7 ^
//切片, 从0开始顾头不顾尾, G3 w1 I& c, ]: D# ]% l
&gt; array1.slice(3,6)' v( B% J( J( r" Y
(3)&nbsp;['a', 'b', 'c']9 C1 Z6 y/ Z- W' Q' ~  B8 E. [/ G
// 反转
0 I2 |2 V+ o& s9 z; X  d& B6 Z&gt; array1.reverse()
. E# f2 o. L( e+ r  f; |(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
; w8 n) k5 _6 h: y/ }// 将数组元素连接成字符串
# w: r& g5 Z/ y0 U, k9 W# N* f1 V&gt; array1.join() // 什么不都写默认使用逗号分隔
; Y4 }0 l" l+ t# ~" m0 v" U6 R'c,b,a,3,2,1'7 r3 ~+ G" u- o  m6 i
&gt; array1.join('')
$ s3 V- c# z4 t'cba321'! g4 }$ B1 V( i) w# K8 g
&gt; array1.join('|')3 `$ q% H  t! V+ s! f% T. B
'c|b|a|3|2|1'' g) p; @4 Y' N- O% x  F. E
, b/ `- _1 o- j: Z" S# K+ d
// 连接数组5 O1 c/ j3 K2 I$ ^" P, }
&gt; var array2 = ['A','B','C']2 Q: B# ]! i  H6 \3 \6 Q. M% }
&gt; array1.concat(array2)0 ?# g0 P' z' D, M# H
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
$ e0 _8 ?5 {' h4 W8 y
$ E. Q4 l, \2 z* P// 排序* K3 u9 h8 z; F& X: \, N; X
&gt; array1.sort()# |" n6 t( D% u$ E6 t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, t0 {+ Q& y5 Q  o
# p8 Y4 x/ N" |  z// 删除元素,并可以向数据组中添加新元素(可选)
. t2 F" U3 ~3 q$ r3 z  b&gt; array1.splice(3,3)  // 删除元素" T* a& Y' ^9 s2 M! A2 ^
(3)&nbsp;['a', 'b', 'c']% o# Q- E. @6 X7 J3 ?) K
&gt; array1
8 C  C! d# ~3 R) U7 d+ L(3)&nbsp;[1, 2, 3]
* Q) e5 p8 V, w9 z& A8 W, v) P&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
4 i: d7 @  F! Q. }5 v1 L[]
9 @6 n+ W$ W9 R% I% j% X% v&gt; array1
7 B4 }, }# {6 [0 |* H) s(6)&nbsp;[1, 2, 3, 'A', 'B', 'C'], H, w& d# d% z3 V6 C, b

4 R6 w. {$ R' a, o- C3 O9 x" \/*2 s& g9 C) t% s$ p4 H  n
splice(index,howmany,item1,.....,itemX)
) B- e1 Q- Y2 A+ X! W* Findex:必需,必须是数字。规定从何处添加/删除元素。7 H& ?. n4 A- c# f# n
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。' f3 ^4 o  d  \6 g6 l' p
item1, ..., itemX        可选。要添加到数组的新元素
! `5 T  D/ j  G, f. n7 ^) s. B*/
9 S" n! G2 s' x  G; z
" P! E1 j+ M+ H* h) \// forEach()        将数组的每个元素传递给回调函数
& r3 g: z3 H4 E/ X5 ^&gt; array1.forEach(function test(n){console.log(n)})9 s$ ~, W+ M# P6 u* h
1( c) l* x( |- b4 c6 A6 R; Q
2
' A2 a9 E9 ~, _/ y: }3 ^% B) ` 3+ e  e3 W' \8 }
A! ~/ ?( X; K3 D  X" }
B
' E) D; J& }% P7 M! E C3 B4 M8 ~: V, J# B
// 返回一个数组元素调用函数处理后的值的新数组/ p4 M8 v9 j6 `$ w: ]* L
&gt; array1.map(function(value){return value +1})
* H1 s' G% u# h. V9 k1 r(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']& @. j7 n  n9 i8 J+ ~9 q6 \7 Y
</code></pre>  a" O8 U- c  ?7 G0 m
<h3 id="24-运算符">2.4 运算符</h3>
& I  F3 T- ?, r4 G2 p. ]<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
4 G) V  m  _# N- u' S& V0 \<p><code>+ - * / % ++ --</code></p>
7 {* {  P, B0 t: p! D<pre><code class="language-javascript">&gt; var a = 6
" ]5 [5 x+ R& J; L; J- a& Q+ \&gt; var b = 3
# x, i. I# D1 T// 加" z- h/ h/ s: D
&gt; a + b/ T; N7 n! C% b% v% _) G
9
( L5 R; k% w* |+ t, C1 z// 减2 r' S4 s6 [% ^* v- d% d
&gt; a - b) p7 N2 j+ z5 V  G  f. ~9 g4 H' L
3
, J* o, Q0 y: J: l& R, c4 ]// 乘
7 w5 N: T9 z$ e; M- d3 H* l% u&gt; a * b
/ N2 Z0 s- u; f% o( W, t) G18
$ k! J6 N5 J, Q& R5 E// 除) A, f! f% I, a: x2 z
&gt; a / b& q8 {" O3 j5 N4 y& O# z) A
2& k0 x) r8 g8 U! a
// 取模(取余)
! I) X' }# p) q- O& z- k6 _&gt; a % b
1 ^9 J- o" ?* ?/ ~" D9 m7 u; j0 h0
/ }3 J1 f3 Q( Z9 x// 自增1(先赋值再增1)3 Y6 |: ]7 P3 r
&gt; a++
0 t2 L5 x1 ^- r5 Q* E7 {63 G$ A% q+ \$ D0 S
&gt; a0 ]  V! Y, @; I* a/ \0 u
7
5 d3 J1 V8 k4 K% k3 Z5 n0 ~4 L: C  w+ L, q// 自减1(先赋值再减1)' I  c& q! c/ h' i/ G" v& `3 f
&gt; a--2 _$ j) }2 k6 m6 O. E% l
7
! \" K# f  v) Y' E/ w: A! f' o' i&gt; a
3 I9 Q( D9 Q/ i' |- _' p6( |: x$ G5 k% _6 O0 j( r2 J$ L
// 自增1(先增1再赋值)2 O" V( a" \+ O0 W: ^- s
&gt; ++a7 F% f& s+ w4 o  u" }( `& d# Y
75 x1 v" y# \" N% J, P
// 自减1(先减1再赋值)2 j! s6 u8 S; d* R
&gt; --a
# `+ ^8 c) ^1 q/ j6) J, q' t3 K( g) z
&gt; a
) V" P( s4 C& a0 Q; X6
  O" l3 p" h2 U5 l8 A, `- y, Q
; t8 U5 ]9 w) H. ]8 A# L//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理" h; H' h: C# d( G. W, e
</code></pre>
# ^( y: v: p& u; {# U# P<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
* i: L4 A0 n- X* _0 a8 ^<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>. Y0 H' T) [: t. F! _. w
<pre><code class="language-javascript">// 大于
& X$ R; Z# j* y&gt; a &gt; b
9 U" E' ]% P5 V6 K& m4 z, mtrue  c& G# ?" q7 j( C/ f
// 大于等于3 [% D8 \- t; x- n. e! I
&gt; a &gt;= b
- c; t7 h& {- _+ {5 ]true0 ?+ L! c+ x2 J3 [* H4 I, }' I
// 小于, @$ r# O+ V9 b* X. ^% ?' q
&gt; a &lt; b) ~. M* e; F* s- h. n6 |. C8 b, Z
false. f! y  F+ V$ T' E; F+ }
// 小于等于) y( S" H+ p! K* ?8 q
&gt; a &lt;= b
8 [+ c3 c) X. g0 R7 Yfalse1 `9 [8 `6 {8 H( U; m
// 弱不等于' [) }1 y  D1 p$ U4 W' d$ ~) }
&gt; a != b! }. M6 T7 \, b; M9 D
true7 }8 I3 {. n. V' S
// 弱等于
  j& Y: U- Q% R, r7 U' f! H) q: U/ t* a&gt; 1 == '1'# K/ F) u7 f4 q* t8 \
true; B, R5 Q) X( s% d+ L1 b
// 强等于: Y$ X2 ~9 H" M( u) K# O' x* E
&gt; 1 === '1'
+ ]$ c* P1 \3 P- E* l  x% ~false" a' I! \% @$ e
// 强不等于4 b1 K7 i& L$ n4 n9 {4 |
&gt; 1 !== '1'
& k8 _8 L! }& k- z5 Y- V! ktrue+ p2 [  y; F6 s2 V
9 K9 F9 Y6 w/ W  M; h6 z" w
/*3 Z4 D" c3 X% u% ?! x; p. F- _/ ~" C8 O
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
: ]3 ^" M  K/ a- z0 K$ Y$ _*/
* j7 I) j' T# K  Y</code></pre>! ~- q3 K; J, A  e$ g4 W7 o
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
: `0 ^/ Z" @. [( Z3 W8 q7 B! u<p><code>&amp;&amp; || !</code></p>
8 I/ D* z0 g5 Y; {<pre><code class="language-javascript">&amp;&amp; 与
0 t; Z! v5 e8 Z2 D6 L3 `|| or ) b) O5 h0 s7 I& ?9 ]) C
! 非; j7 l; J3 m8 s9 r
</code></pre>7 l: c6 s1 a3 D
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>" F3 k. u" l' t
<p><code>= += -= *= /=</code></p>
. P" Q" a4 [9 c<pre><code class="language-javascript">// 赋值' U( d4 Q3 z  Y* u+ v# u% C
&gt; var x = 33 T& @0 U, ~" G. s: ^7 d
// 加等于
% l. b% Z( ]8 }- }3 M, n/ Z&gt; x += 2
1 z" O8 Z. @4 C% t: J# J0 P# T2 l5
% c  h8 c4 y, M) _/ v// 减等于
& P3 o3 J. R: h$ g&gt; x -= 1
7 c$ K% _1 V. M1 M+ H1 h- z  v4
" q3 I; z- D; T7 m8 _1 z// 乘等于+ D6 Z* @) r! M' L; e! e
&gt; x *= 25 y  H' [- ?+ E3 t- a5 _4 w3 {
8
& P/ g7 m+ o2 f2 G( y// 除等于# w7 L; [6 r/ a
&gt; x /= 2
( {6 Q! N4 r( }  ^+ `6 W# p# G43 I. b" n3 }) [9 G$ X& m
</code></pre>
3 Q) D5 v! g9 Y' ~( F' [# p6 Q<h3 id="25-流程控制">2.5 流程控制</h3>1 g. e9 S+ Q! i5 w6 W& g
<h4 id="251-if">2.5.1 if</h4>: E* ]/ [/ U( ^/ x" v( i- c* t+ ?( V- R
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}& E" p$ o$ h% H
& q" j" k6 z! G/ r# E4 \3 x
&gt; var x = 3+ ]; ]) y! F' u- b: q. X
&gt; if (x &gt; 2){console.log("OK")}7 c6 v/ C/ t6 K  c% X( `
OK
# S# U' ]6 g% n" |: C$ Q& s1 M+ e8 b  a4 K: O
2, if(条件){条件成立执行代码}
; j  `' a; G8 k6 h4 e: _2 o        else{条件不成立执行代码}
, {; v# k3 y! K7 y
8 U$ C$ g! H. ]4 }4 I&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
* i% B  }+ L: v2 {'NO'4 }9 F& h6 A# E
0 f5 S: \1 o4 i8 G! n, _
3, if(条件1){条件1成立执行代码} + Z3 N7 g+ k! }7 A3 x3 N5 b, a
        else if(条件2){条件2成立执行代码}) m) [) O" _3 @6 ~5 \2 J- F& g
    else{上面条件都不成立执行代码}; T: j; M- ?0 B4 w
" y/ A( o1 y0 P! s$ f
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
) ]& f6 k: S6 R4 t8 K' y3 O1 p. { Ha
- N! y- x- p/ d+ a' Q1 U% q8 r: w* H</code></pre>
! s$ ]. C: |, a% j<h4 id="252-switch">2.5.2 switch</h4>
) r4 Y: {. [: V8 @; `<pre><code class="language-javascript">var day = new Date().getDay();
! L8 ^6 a' n7 }! U7 Z$ vswitch (day) {- d9 ?3 T$ e4 Q) I0 Y
  case 0:
- _) g5 c, d( @1 _" Q  console.log("Sunday");
3 w9 A  ~; t4 F' x  break;' W* J2 b; G9 p4 t
  case 1:
; d6 ?' z: p5 ]7 s; x  console.log("Monday");) ]" Q6 B2 ]' _5 r0 t. n
  break;
) r% r+ Y# z7 T/ T8 [7 K; Ydefault:9 ~$ f- q# c" J4 @
  console.log("不在范围"); B& \) j& X: I8 h  g
}, h' C, {2 y$ f- D$ U3 e" H
不在范围
. f) U1 a' C* U7 y9 M3 T- h</code></pre>
; q2 d7 D! ]$ w+ j& ?<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
) i/ f, K( M2 \: t. Q7 e5 g- n) Y7 V<h4 id="253-for">2.5.3 for</h4>8 q! H8 m/ K$ y/ D0 E3 J7 n
<pre><code class="language-python">// for 循环
. K& @9 S6 y% U3 O) R        for(起始值;循环条件;每次循环后执行的操作){
' o- k8 r$ c7 d! B7 Y. E        for循环体代码8 [: P. r' r7 y7 E7 W1 [
    }! C3 E. Z, C1 m" X

% W! y/ I" n' m, f7 k% v% Gfor (var i = 0; i&lt;10; i++){3 p" ]7 ]9 B. Z8 c6 r  f
    console.log(i)3 X5 ?/ I- F2 ^7 `0 I/ ?
}" b- o0 \$ U( X* X5 H
        0# v/ V* S; Y. a9 v5 V+ c( f) U7 M
        1
% \2 h0 W0 ]# h        2
) P# y$ X. ^: C4 R        33 H  L3 A% I, X; H! [# t2 T0 R
        4! B. V8 m1 t; o6 G* @
        5* z% f: q' Z) _( E
        61 a; [7 B/ j- ?) }  e4 G) g! Z# V
        7
# K8 j7 A5 E! i2 a$ @( v        8
* U7 G7 I0 Y1 s& P( Y        9
& n9 _3 h2 D* o- V9 ?- |</code></pre>8 `0 E! L9 F1 _/ t8 p8 C0 P* i
<h4 id="254-while">2.5.4 while</h4>
. Q. j9 t9 C3 f7 z<pre><code class="language-javascript">// while 循环+ u1 C; C6 ~$ W& H2 l- ~
        while(循环条件){$ J/ X. i  C% z3 D7 S
        循环体代码  t3 I; C) ?' M8 H2 P1 _8 g
    }
" q' d6 n2 @9 R3 P( Z, Q; @4 k
% o+ z, T( t5 z1 ~: l&gt; var i = 02 ^& G9 w5 K7 N; Z9 g
&gt; while(i&lt;10){" Q9 z! o6 P' N
    console.log(i)3 F9 G( ?- ~& `
    i++4 A: [6 Q" C$ f
}8 t4 ?- \# x1 L& {0 N. b
01 V  B+ V; p1 J# d! W
1
6 o; w) R3 X" b8 n! \  T 2
# v1 p* Y6 J8 D1 c' f- L 3" I& e$ l7 l* ^
4
; Z; l' \+ L- y 56 J+ J2 Y& i5 H5 \/ K1 W
6
6 v, v3 O+ @8 b; ]) q& E- g2 J 7
4 a+ I; E8 q* Q4 T  i: P! G$ d 8
' H! t: @! ~) P& Y: j0 T2 B  B 9
- ~  J1 B8 L" e" A' Y</code></pre>: O; F" r+ [: G# |
<h4 id="255-break和continue">2.5.5 break和continue</h4>
7 A# u- {! [4 i" w: [' r1 d* ~1 W<pre><code class="language-javascript">// break
% j" O& s" A8 A( H; i4 J6 H# c8 Afor (var i = 0; i&lt;10; i++){" c* j0 I+ M; b) N  p
    if (i == 5){break}4 ], ]9 I% ~0 Y* ~5 E; r# s) K
    console.log(i)3 K  s. W3 f8 s
}, U2 u3 S+ ?+ l5 w; q  k" O
0$ k7 }6 p7 d: {0 @$ u- @
12 y+ m8 T  B. J! i: _, [7 x
2
4 B1 j$ x  I5 n  S" O! h 3
) E! K! d7 g/ O+ f0 g# [; p 42 i& y/ H( w- M/ ?8 a
// continue
/ i; E4 H" y$ {% n* Cfor (var i = 0; i&lt;10; i++){+ t- u; E" W* x+ [; a& ~) T* j
    if (i == 5){continue}! R" F1 `. |6 @+ F  L$ y  M) C
    console.log(i)
. U5 c& a) }$ e0 ^! A}. a& u3 c9 ~7 a- Y( w
0
5 X. m* \. N! i* t. e" W 1- D3 R, J( }2 ^7 m
28 {% A  p$ N* M" [) R5 T
3/ T: q- |" D+ b, y: q' H
47 j2 Z3 l4 P" E% R, |
6
+ e0 I+ S) I6 D4 u: {; T7 U4 j. q 7, p, }6 T! }4 c: M
8
& ]4 U( ]8 Z. Y$ _( ?' E/ s, E 9" a  R! ]9 P- |" T: t$ w7 ^* T
, w: \, o0 T5 R/ C! }1 P
</code></pre>
6 P3 G$ Q& ^. ~, H( b0 N<h3 id="26-三元运算">2.6 三元运算</h3>
+ t# I: V' F/ @! L1 p! X2 h<pre><code class="language-javascript">&gt; a
) K" ?! d; }7 u6
) W/ t, \2 `/ M; C9 f&gt; b6 r; M* p! `8 S
3
/ ^! Y% ^" i1 y5 f; `0 ~: G% Y' M
! O. O; ^! Q* H+ j' p  s//条件成立c为a的值,不成立c为b的值0 c6 @+ u  I* U- X
&gt; var c = a &gt; b ? a : b
' y* r" C6 }& i5 J9 ?&gt; c
! N4 R& t3 e  ~5 D+ X* @6$ z: h7 m" M5 [4 k2 H# Y- P: ?& ]

3 l/ m# X! q3 @3 Y" H. j: m7 B" i// 三元运算可以嵌套: N, A' y' a8 }% r% R2 N' ]  z
</code></pre>
+ l3 T5 |/ q4 {, h<h3 id="27-函数">2.7 函数</h3>
# N  \3 i# [' k9 y<pre><code class="language-javascript">1. 普通函数
) E( o7 t  p7 f# E8 s&gt; function foo1(){
9 z( \* ]/ W* S    console.log("Hi")
( _2 C$ Q$ c9 w/ ^# z! d! y: B}
. L6 z: p- y) ^) T- ^2 [% S) H' n# `' b! k$ U% `+ ^
&gt; foo1()
( I9 A- O% ]5 [* [( g+ d. K        Hi, g& I1 |* b* a/ C
2. 带参数函数
. k9 Q) j' F* e# T&gt; function foo1(name){: M$ t$ A) G  U
console.log("Hi",name), y- R6 J, z1 c# \
}
' b$ }% m7 s# r: y$ t4 O9 z/ o2 g" d, n, J( [2 W
&gt; foo1("Hans")9 `, i% i' R% I- v0 [7 y+ ]
Hi Hans
7 V) w" m4 u5 v+ i& F, b) l) D8 s) ^4 \: T7 [
&gt; var name = "Hello"
6 v$ ~9 j  C$ z9 |1 C&gt; foo1(name)+ u( j: T: J' L
Hi Hello! A: Y# P$ u7 Y1 z5 @5 h5 j

7 q8 a9 E" ^7 e3 R% O: Z) s3. 带返回值函数) J7 N) N" l1 p5 N, A
&gt; function foo1(a,b){
  N7 x7 @! c7 i' \- t) D& B6 \- D        return a + b   ! r# _% `2 h, n/ l* m+ [! a9 F
}
: E% Q& B( H0 C" o&gt; foo1(1,2)
1 {; p" I; G: X. G1 H3: F: G; T. A6 d8 E% P9 B% E
&gt; var a = foo1(10,20)  //接受函数返回值. g, a+ d0 D% q4 {# ^. h: u% N6 N& D
&gt; a$ y. u, K1 F! c
30; V- {) b4 ^# W5 c! G4 e# g
( E. A5 O" C) z+ h$ b5 W# M
4. 匿名函数( M. }) r: A: w* V
&gt; var sum = function(a, b){# o2 N) v$ t3 a9 U
  return a + b;1 [- b* |1 D% H6 X
}
1 N. t% S1 y+ R/ c: f' ^/ I&gt; sum(1,2): u2 d' b: v$ ~: n" A, j$ }7 M- L7 f
3! L& p) x7 V+ Z: A7 V4 `

$ x+ @, ]5 b$ F4 P// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
1 x! ~- y( l$ X&gt; (function(a, b){1 \/ ^6 r2 B" m1 x3 ]/ r
  return a + b
1 Z3 ~, E0 {+ Y- l})(10, 20)3 d* @  r4 e6 D' a) ~
308 D$ O6 u/ h9 F! _$ l( b( `
& \+ i% g: c! ]8 t3 U! D
5. 闭包函数
8 N7 R: ]# _; B5 }// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
- w3 G) \" j$ K/ Bvar city = "BJ"
( u2 D* ]* z- D0 Y+ nfunction f(){9 e  V! K) `% C8 q5 e1 R
    var city = "SH"
1 f. F! @( v2 B3 o! }) l% M" w    function inner(){& l. R9 T% y2 {4 k2 r/ L% ^: N, Y
        console.log(city)8 B1 G/ x* g$ N4 g6 T& T9 U
    }
! c$ N1 ~1 {; T( ]2 [4 H    return inner
6 G: m" a- n7 h$ T  T}
  j5 k  e/ Q0 qvar ret = f()
6 p# ^5 k6 p3 a8 M; \0 }" Z3 ?ret()
% ?2 u1 m; m1 c# O2 ?4 V% i7 B执行结果:
4 E+ m9 Q- z8 J) g, e. {6 mSH3 E/ y  W2 R# v' x6 f
3 m/ q- G3 ~, d9 N) ]
</code></pre>
3 b7 I+ d$ @( g, t<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
) u. h$ o2 i6 c. e  U<pre><code class="language-javascript">var f = v =&gt; v;
. B& {9 J& E" w8 _0 T& T// 等同于
+ G! ]* n3 M0 x, q6 y7 C( fvar f = function(v){
. M- [! }0 u' q$ `  return v;6 B- h8 c0 q* |5 {& o7 l: @9 v; G
}
% n1 x3 Q- `4 W: Q" @$ }</code></pre>
1 ~; G$ w$ W+ j. @+ X" }<p><code>arguments</code>参数 可以获取传入的所有数据</p>
6 S  S& S0 D  O6 x6 m$ R* A/ P: K<pre><code class="language-javascript">function foo1(a,b){
% O/ O" Q7 K1 q4 i. Y) X    console.log(arguments.length)  //参数的个数
' {( E/ y/ I$ M2 m! [$ C* P$ M    console.log(arguments[0]) // 第一个参数的值& V4 Y( a/ [: f: a3 g
        return a + b   
2 O( b5 A% O/ N}  r, a( i0 n  z- ~- e& y
foo1(10,20)( J) z. L% x  ?9 E+ ?' I9 o
结果:
3 T$ I( g4 I: y2 P$ S, s! } 2          //参数的个数 ) r$ d% U0 W0 R; Y6 l- O/ `. p
10        // 第一个参数的值: H+ i( L1 [- W; v3 X! a
30        // 返回相加的结果
5 J. B0 H: k+ x8 j; i</code></pre>
, ]. M: ^7 c+ Y! [. M  ?+ x<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
0 ?, m: y" G- s- Q, c4 C<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
' g0 Y* P7 e) \" ?" n6 ]<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>1 b8 k7 ]9 D8 \) v0 d8 w6 {
<h4 id="281-date对象">2.8.1 Date对象</h4>% _+ }1 A. m' s! U$ S
<pre><code class="language-javascript">&gt; var data_test = new Date()! Y! L6 g% s) c6 D. [% m8 _: s
&gt; data_test2 I7 @/ R- n# E- @9 x' D# y3 D
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间), c) ?. ]: o' D. ~% L: y/ v+ u+ p
&gt; data_test.toLocaleString()9 W  |- }* @' h$ \! Z& Q9 f* [0 _
'2022/2/11 下午9:44:43'% o3 U) a4 }: `$ q; D4 l/ d

+ ]: c/ v2 T! Z$ `. ~* Q&gt; data_test.toLocaleDateString()# H8 O! V# G4 }6 p% {
'2022/2/11'
* v/ o. S. z3 M3 N% {$ W5 Y! ^& q2 N/ v/ `8 \
&gt; var data_test2  = new Date("2022/2/11 9:44:43")* f9 G5 K: i2 E$ X( M1 @4 a( R; K
&gt; data_test2.toLocaleString()
) y4 u6 v1 |, Y7 K'2022/2/11 上午9:44:43'6 E1 M, K4 l& G7 t" r

6 j5 U% O2 s; H0 J' }; M, c4 K. E// 获取当前几号
& G  |5 p" h4 \( F0 k&gt; data_test.getDate()
8 B. h& L2 `0 G" d( m11
0 V2 h$ r8 ]; ?$ N$ x9 Y# ?9 i5 P0 h// 获取星期几,数字表示
$ Y5 i6 A6 {$ G6 g* g" I4 O$ q4 `&gt; data_test.getDay()  
; `9 N4 S/ @% M5# \9 x, P9 u2 C0 |3 D6 E; c
// 获取月份(0-11). c& u7 u+ p* C% G4 h, L
&gt; data_test.getMonth(). H: C7 u1 P  N/ o
1
: D& P1 y- t- ]  Q" M// 获取完整年份4 u; E4 P, y5 N+ q7 K
&gt; data_test.getFullYear()5 ?1 N0 c* h' ~. G1 o# o$ f
2022* r& f3 K9 s0 m1 q( P5 c
// 获取时* y) c3 i7 o; c. o# I: F$ `/ i2 X
&gt; data_test.getHours()
0 Z5 b# l( A) a3 V/ E3 B2 t) F3 Q21
$ s1 z  V" v. o! S+ W) I// 获取分% @; }8 a5 \7 E1 R% P0 m# K, L
&gt; data_test.getMinutes(), n* r7 O  b3 S3 w2 }
44
* y( C! |7 t  j) V  F// 获取秒
5 E% y$ Q  O4 x5 b& S7 t; c&gt; data_test.getSeconds()  j6 Y% c- p8 `! a
43: i; b2 f5 k- D, A4 w
// 获取毫秒
& C; i" `  u2 H&gt; data_test.getMilliseconds()
% `5 M( B+ h# B( R290
" n4 E8 z2 A" B! V5 t// 获取时间戳
. a+ Y6 H6 O1 S9 p! R, e&gt; data_test.getTime()4 X( a4 o, [& w; `% `
1644587083290
) E1 L( \( u, c! t</code></pre>
  K$ d! i# q6 n0 O- E<h4 id="282-json对象">2.8.2 Json对象</h4>$ d+ B& x: t: H/ l# C* Q
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
9 V6 m+ K( W( gJSON.parse()  // 反序列化,把JSON字符串转换成对象5 T7 W5 d3 K+ {' R& m* G

0 J" O% ?% r) n6 o; v// 序列化: }( S1 F+ h* n% S, A- \& v
&gt; var jstojson = JSON.stringify(person) 4 c! H) z+ |* ?, R
&gt; jstojson  * C5 B* f, i! }: |+ _
'{"Name":"Hans","Age":18}'
" Y, b. Q! ^! i
& a1 d7 Z, n0 b$ [( K% d) y' D/ N// 反序列化- Y$ w# U5 n$ G* ^6 ], }* {
&gt; var x = JSON.parse(jstojson)
% d* _9 K5 A! p&gt; x7 h" G' o  w9 a% q9 U* g/ y" H
{Name: 'Hans', Age: 18}0 n  C! |$ C9 y* _* {3 ^( y) S
&gt; x.Age+ ^% f, V7 }, J5 [
18
1 z0 g: u, F# o/ w4 p; X</code></pre>& F- b, d7 G0 b) {! m
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
. S6 Y, I9 x7 f<p>正则</p>
- L/ P( r1 ?) m0 K<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
/ ~- c9 P3 @3 g& N1 ?3 o% ^8 F&gt; reg10 [& R. f" Y, \. r
/^[a-zA-Z][a-zA-Z0-9]{4,7}/" y7 U* ?- Z' D3 F# O( V6 v/ b
&gt; reg1.test("Hans666")
7 i9 U8 g/ j$ T' W4 L5 {0 @- mtrue1 y  j) k0 V* r* h4 i2 M
9 _' N. @1 D3 p
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/7 j2 R! t- B* B+ N5 s; ~
&gt; reg2# N2 {# F$ i1 @& o/ `$ X/ H3 m
/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ @0 ~4 E. W( t6 K0 k. u( g/ ^; i
&gt; reg2.test('Hasdfa')) z+ u5 @# r( E( W
true
" C6 X7 l+ ~, G5 O, n" s  g8 v3 o% \  q
全局匹配:
9 T, N3 k3 L. s  \/ l0 b! q&gt; name
! b7 s% D  g/ U, Q5 ['Hello'1 p; ~  n) s! i: f1 B, n9 H+ P
&gt; name.match(/l/)
6 I- l- J$ {" M0 y( B$ [['l', index: 2, input: 'Hello', groups: undefined]
5 w, h$ C0 E2 S! h+ g4 M% m, j0 P0 a% U) S9 q8 a3 ~4 }; {
&gt; name.match(/l/g)
1 \& b2 C6 e, L* ]- n(2)&nbsp;['l', 'l']
8 ]: m" {0 p+ {. i" {- \; m// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
2 T: M; I$ x$ v$ ~. k# g, ^, v/ O0 @- P  u. d
全局匹配注意事项:: ]2 j  ^9 e: a& H7 O6 \$ }' s# M, `
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g* _7 N# B5 O! X6 B
&gt; reg2.test('Hasdfa')
0 o3 p: E$ N. Ctrue5 @; ?  g% U6 I: Z% B
&gt;reg2.lastIndex;7 Q4 B0 ^2 x  {& c# T, b+ N  x; X- d
6
; ]' |7 H( Q% w4 ~' `6 A6 `- M" s! Y7 Q&gt; reg2.test('Hasdfa')
; \0 z5 d9 j: `0 W, C0 w# Ifalse
+ ?2 X0 C" X' y- M% k5 ?&gt; reg2.lastIndex;
( G% J6 Z+ H* _' r/ B! M3 Y0
1 l1 E& x! d$ h1 m9 p! S" b- e&gt; reg2.test('Hasdfa')
- G; o3 k5 V% Dtrue; o; |: I' I4 q% F( |: E
&gt; reg2.lastIndex;
. r" g7 M( s" D+ c64 ~1 e3 @* W7 }- [: z
&gt; reg2.test('Hasdfa')7 g" @0 E+ e4 r, f
false
9 p, p/ R2 ]7 l2 k3 H7 L&gt; reg2.lastIndex;0 Y4 W. B3 N3 w" D$ \8 s3 }
0
2 c: R$ z  }6 s- F+ P7 t+ L$ \// 全局匹配会有一个lastindex属性& Q/ [8 u; u7 k! K( m" l
&gt; reg2.test()% K9 o' B. h0 l4 o6 c/ s
false
2 f0 {6 c  d8 k) P# [&gt; reg2.test()
3 w$ [. o" Z" f+ m, Utrue
( W1 L; p8 v# l! u3 j$ R1 `1 W7 R// 校验时不传参数默认传的是undefined! ^2 N' c# \- Z* l$ L1 ^; \
</code></pre>
/ }9 j% N& ]- j7 ]* B<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
1 q% O. q' k& Y2 x* D+ e) d<p>就相当于是<code>python</code>中的字典</p>
& N7 W# {/ R; N( J<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
& \& c% C" b: o# H+ V&gt; person
# h2 ~6 J  Z+ [6 `8 N, L4 }{Name: 'Hans', Age: 18}
! E5 N- s+ D% X( P+ T# W&gt; person.Name
0 `" w$ C5 y  q( ]6 o& ?1 y3 w+ N'Hans'
+ h& ]( _9 a! B* Y7 V&gt; person["Name"]
2 i6 E; _! D5 C6 Y'Hans'
! g, a* `4 A6 t9 |* N4 v9 Q2 J1 z9 J/ v% c( d' ~+ f/ P
// 也可以使用new Object创建
1 C4 f: e# i* L$ }- L" \- B0 u&gt; var person2 = new Object()
5 S/ D; _" {8 @&gt; person2.name = "Hello"
. H  N# j  h! c) u- \6 g# k+ ['Hello'
0 o( s# m  E  q4 e' a0 J$ N&gt; person2.age = 202 K+ [9 s0 C* @
20+ P4 x0 V/ U! r3 O. @# g3 {! n+ L
</code></pre>
% }) e* H8 N" Q: D<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
/ G' k. K- H3 ~<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>: n$ }. s; v% {
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
: ~/ S" C! y1 |" G# p. Z<h3 id="31-window-对象">3.1 window 对象</h3>
3 J2 U; V' W5 O0 r6 x! _  S$ g<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>- F# J6 D& Q+ I! R$ D4 t
<pre><code class="language-python">//览器窗口的内部高度
9 b8 _! b- e! M$ Y; Uwindow.innerHeight 9 {$ _* j, `9 ?7 ^9 D& u
706
% D: a3 W; b) g" i3 E- E/ i! R//浏览器窗口的内部宽度; X, f1 X: \/ v% U$ S5 N7 g# m6 c
window.innerWidth+ W* W/ Z5 Z! @' g; x
1522
3 h- M- |8 \* K- E/ A  N// 打开新窗口
: _# k  c6 {$ ]8 n: Rwindow.open('https://www.baidu.com')
2 `, T. h. o( p/ c* B1 |2 t0 UWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
2 c) Z, b3 n0 t' e/ r  S1 r) A// 关闭当前窗口
4 P* F! L8 ?4 z: ?: lwindow.close()
" @6 O/ A- a, Z5 l* V( R//  后退一页
9 m8 W6 e8 D/ S# R% ewindow.history.back()
9 h6 v$ a& l8 q$ c- X7 p// 前进一页
# S2 D9 d9 F& R- Fwindow.history.forward()
+ b+ W  b( m3 h! L; i: N//Web浏览器全称$ l& t  H% ^3 U# B$ w
window.navigator.appName4 @" K6 J# ^3 ]& L: W- h4 K% W9 N
'Netscape'! _. V( Y0 q6 G! A: j8 f/ r' S
// Web浏览器厂商和版本的详细字符串( [, F- ?% O# G3 X) x' F9 u9 j
window.navigator.appVersion. s$ b0 |# J, O6 u0 a3 M
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 D1 B) M6 O3 ]+ c1 P* Z- z// 客户端绝大部分信息) o; [; u! j& }( ^, V( f: Z1 w
window.navigator.userAgent+ u' c7 f% P2 O4 W& ?' F! y) j
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'" v( d/ {2 j$ ^* }+ J. k: D
// 浏览器运行所在的操作系统1 U0 ^2 i  k, g% y  m% _; |3 s
window.navigator.platform
, f5 l% G7 n: w% Y4 F5 y'Win32'
; {3 D0 [3 D5 d1 U
$ O9 R9 V5 ^8 L' U3 g: a  P- n//  获取URL8 Q+ u3 p4 w1 @/ \9 C
window.location.href+ ~$ n7 X- s% }' s6 r( ?" Q
// 跳转到指定页面
2 E2 Z6 L  T, i5 {/ J3 Ywindow.location.href='https://www.baidu.com': k. }3 h* A( k# t- W
// 重新加载页面/ p) ?( M8 U$ Q# S* k
window.location.reload()
2 A, I% V% @; b1 v1 D) m1 C</code></pre>) |# p' O* {! z8 c7 }, x
<h3 id="32-弹出框">3.2 弹出框</h3>
9 E6 N% D$ S/ o0 S+ X: ?3 k<p>三种消息框:警告框、确认框、提示框。</p>. R' d9 a# f! X4 q8 t: U
<h4 id="321-警告框">3.2.1 警告框</h4>- y. A7 N, z5 E$ z
<pre><code class="language-javascript">alert("Hello")
. h1 k$ }" h+ U2 T</code></pre>
; q$ a' N, x6 N/ J( Z3 n- `5 S5 ], @<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
, `1 O3 x- g; P  N<h4 id="322-确认框">3.2.2 确认框</h4>' r0 s* r  @5 Y  L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>& E1 j# F4 N: O' z/ |0 B. A" o  w
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 Q5 C7 b$ F* y2 |( atrue+ R3 b8 B9 ?( H+ z+ ~7 _2 ?6 s% z) e
&gt; confirm("你确定吗?")  // 点取消返回false3 g, K0 O  K9 ?% `: H
false
! d+ Z8 u; s6 C0 B& M</code></pre>
: T! n# U& W* [, ^) ~5 O9 f! g<h4 id="323-提示框">3.2.3 提示框</h4>5 c( e  q' d3 {5 I* R+ D) Y# A8 l) e
<p><code>prompt("请输入","提示")</code></p>& ?5 B' k2 w3 n/ X: l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>* z1 F( D6 e1 u1 o; U0 ?
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>$ T& P- u: U# C  j* u' l) b
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
) b1 k8 ^* [) |( f<h3 id="33-计时相关">3.3 计时相关</h3>: z2 |: G) D2 W( M( g8 L+ p
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
) ^! c# w# t+ v* _<pre><code class="language-javascript">// 等于3秒钟弹窗4 o0 Q6 y6 h( Z4 c. m
setTimeout(function(){alert("Hello")}, 3000): Y; g- P' d2 ^
6 w; R9 N1 T9 x/ W+ O- _( r
var t = setTimeout(function(){alert("Hello")}, 3000)
1 y! I+ D# |2 |! Q' Z) n6 G
2 I% p8 r6 ?# ]6 |8 o) b// 取消setTimeout设置/ q4 W. e1 Y- m/ M
clearTimeout(t)0 e# t: O  p0 E9 u
</code></pre>
6 Y5 s- b, V( \' g% v7 z" x" U<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
$ p* [; c2 g' M' }<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>+ ]# J8 l  ~9 ]- a1 A, W. d
<pre><code class="language-javascript">每三秒弹出 "hello" :
- ~% Z& F4 f" J6 u5 b+ b* @setInterval(function(){alert("Hello")},3000);3 X( w1 \# C: d( e/ n! i" a
</code></pre>- p5 V+ W  g8 e/ z
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>0 _8 O0 u6 |1 g8 L
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);9 l' C/ x( z6 r' ?& b1 h
//取消:
0 V: F5 V, a" ?) t$ u: M: h6 i' ^clearInterval(t)4 v2 ~8 g- o$ o# N6 U* R( ?
</code></pre>% K$ P! w# G/ ^- u3 x/ H$ _
, q6 s' [3 r. D+ |% J: {
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-27 22:27 , Processed in 0.075469 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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