飞雪团队

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

前端之JavaScript

[复制链接]

7957

主题

8045

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26201
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
* k, I# I7 f4 O. G, J
<h1 id="前端之javascript">前端之JavaScript</h1>
) j0 u; A1 H8 D<p></p><p></p>
- G) M: l8 F' K! T) r$ M<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>; G7 H* t% R+ H2 u8 G
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
  m, d4 k9 y; I它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
: Z" K5 x/ _# Z. i它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 e: o; e6 B) v; P
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 E, i; X7 F3 O2 B
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
1 b: ]) A4 x$ N$ t+ U<h3 id="21-注释">2.1 注释</h3>' g, L" `1 m& t# O" g* q+ B
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
7 z3 B2 G: D, Q; Q2 d( h6 J! _<pre><code class="language-javascript">// 这是单行注释  Z# }; @- \. {# q* S9 @
! P) _% P( l8 ^0 P5 ?  s2 |, ~- ]
/*
( \# E8 F5 K6 }! W! s6 B2 D# X这是多行注释的第一行,4 F: Y" W6 }7 I% D: l( z
这是第二行。  N7 U& e6 h9 P) V  ^3 [1 r0 A
*/4 W  t1 T( G7 [" ~9 `+ f
</code></pre>& b+ o' I1 X1 f. u
<h3 id="22-变量和常量">2.2 变量和常量</h3>
% g' `# X- J; n. v<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
$ g+ [1 F  @$ C( r2 R* u" @<ul>2 p8 x; o+ f# h, v4 u
<li>变量必须以字母开头</li>
5 y8 C+ P! y0 \/ r# A<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>5 q. k* I# L& |: m  b
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
# L5 o8 u$ a! K( S/ i+ g* d' s  s8 Z</ul>4 L. T$ h  v% `5 O& N# t
<p><code>var</code>定义的都为全局变量</p>1 W- `$ Y1 L, B! W- z/ J
<p><code>let</code>可以声明局部变量</p>
6 b. D. P( v  i% Y<p><strong>声明变量:</strong></p>" L' i+ W6 a  F5 _0 s- C$ t
<pre><code class="language-javascript">// 定义单个变量9 f9 R4 t8 z; c( u  ~. J
&gt; var name7 @* n) ^- ]8 A, j8 K
&gt; name = 'Hans'
8 C# R. l0 K5 H) e) a//定义并赋值
9 o& }* Q: k5 M/ g( B4 m&gt; var name = 'Hans'3 N* ]: W+ U" d) t- k& i' q2 Y( r
&gt; name* U- ]' a3 K! }, f8 \0 k% I1 q7 l
'Hans') |& m4 V9 H% w8 g# H: a
' D# h" W# I& h- O/ z& y5 _2 z" A
// 定义多个变量
) Q5 u; @) \5 }8 F2 B+ m: F&gt; var name = "Hans", age = 18
6 F: @) S+ ~  [&gt; name5 C. ~/ R+ p* O, X
'Hans'* h6 d& w5 P& r' U, D, t4 A
&gt; age
' y4 s- O4 S' ~% m# |3 }: {+ P* t18
+ b9 [' ^/ B% b; d$ R; D1 P5 P! m0 `( Z& ^4 N
//多行使用反引号`` 类型python中的三引号
2 q7 |4 m2 z+ G* w4 N( [" ^" K" c' D&gt; var text = `A young idler,
/ [3 U/ i" j+ T# Y% H+ g/ Q* ban old beggar`* t. m" |8 A' z& B7 q7 C
&gt; text
& E8 ]" ^  ^3 ~4 w3 M4 W( [, y6 Z'A young idler,\nan old beggar'
5 O# b# c& `4 p; z. G</code></pre>6 `) B' J6 ^" B4 Y4 s. L
<p><strong>声明常量:</strong></p>
7 M" ]4 ^% i* W0 x3 C$ L' ^' A<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
2 C, d5 m% H2 W' _$ A/ D; q/ q<pre><code class="language-javascript">&gt; const pi = 3.14+ |( O( I% `& x
&gt; pi
+ y) ]' t) I1 N% ?/ g3.14+ g8 V0 X! j8 b0 `# @8 B
&gt;  pi = 3.01& H7 B( ?: E" o, L% d/ F6 l
Uncaught TypeError: Assignment to constant variable.
4 {! g6 r' l0 ], S    at &lt;anonymous&gt;:1:4
1 X* a+ e" ~& n* I% R
1 |. \% w6 G4 f7 B8 C. G</code></pre>; d  ]- M) u7 u$ D6 g
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
' Q% {! [3 u0 D2 ~<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
$ f! `5 B" J' B<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>0 ~/ p5 g% q# V7 L8 y7 I- \' h0 r
<h4 id="231-number类型">2.3.1 Number类型</h4>
- G& j, s) ~1 i+ _<pre><code class="language-javascript">&gt; var a = 5+ w3 H0 I8 u! T3 {# b1 C  S
&gt; typeof a   //查看变量的类型  & f! n1 v3 e" k* q) l- M/ s; l
number) A" C& b- [/ R5 K, g
! {$ X/ I4 \; N$ C- J3 b$ J! \1 y2 v
&gt; var b = 1.3
& a5 i! T- K# B6 ^  Y9 r) u  g&gt; typeof b
& b# N: A- F. e  m" M# q- inumber/ q2 i, ?$ R! m, u/ F3 ~  b8 \

1 n3 }% ]/ s, J' u// 不管整型还是浮点型打开出来的结果都是number类型
4 E1 k' ]7 C4 Y  ^+ A% X* S8 G4 Q3 `$ L1 F
/*/ `, m3 j. |% N( f
NaN:Not A Number" y% ~- V5 ^0 [+ F0 Y: X7 p
NaN属于数值类型 表示的意思是 不是一个数字" Q8 |3 [. L% M) ?0 x
*/4 y- I2 L* m8 y* |

) b$ H. C  ]0 U: b7 q, Z0 wparseInt('2345')  // 转整型7 L- v0 X; w1 c. E
2345
1 F5 s5 o' `! P- L2 R4 n7 v4 aparseInt('2345.5')
0 G, m# p# o$ U2345, b7 [) s( j7 t* N$ @0 d
parseFloat('2345.5') // 转浮点型7 |- J9 _1 t! |2 _% S3 X6 N1 @
2345.52 Q. i5 e& v' ^& Z$ j, K
parseFloat('ABC')7 t: m8 F5 S* t& n' T* w; N
NaN
% J9 `3 u2 ^) d* V# a6 u) @9 Y! u5 DparseInt('abc')
' {" c1 }( d( H* f8 q0 |# q& DNaN
; _& g5 N- T' z3 O- d</code></pre>9 H. b. `: |& r5 m0 t/ {) T4 S
<h4 id="232-string类型">2.3.2 String类型</h4>
  g: _' m& m5 t$ q' e+ |: J2 ]<pre><code class="language-javascript">&gt; var name = 'Hans'7 `- `' ?$ Q5 z
&gt; typeof name
( d: L) N. w) h$ D'string'
) y' j) P( I% P. T6 X5 o( u3 e/ u6 E! x* w8 S! {
//常用方法/ c! E1 M+ J5 r
// 变量值长度$ U% S. f0 f* {: |5 p) ~1 y
&gt; name.length
7 S3 W0 ~0 D$ z" a4
( ]" z6 f# x' y& N2 Z// trim() 移除空白6 @3 H( G' z' _; L
&gt; var a = '    ABC    '
' c, {* Q7 A: w+ p) z6 p& v( F&gt; a- k  p  Q: W: z
'    ABC    '
/ B; p: S2 H5 J) o7 i% j&gt; a.trim()  j% V( D6 z+ v) `; S2 V7 M
'ABC'
! P5 u8 {# e5 i) Z//移除左边的空白: ^; p% l1 Q# k5 V+ Y6 z1 |
&gt; a.trimLeft(): J9 |( Y6 o8 R/ P1 ]" y0 V
'ABC    '& F  ]) }- R* f5 U
//移除右边的空白1 w; Y7 g, f# u1 b' C( `) y5 {' K
&gt; a.trimRight()
/ q9 W) ]* ]6 g  G# W- o'    ABC'
$ ~0 E9 z% _0 ~( O' ~
* }+ x  [! \+ w' n4 J//返回第n个字符,从0开始
9 W* K" |1 V1 W4 m7 N&gt; name0 T6 C. W: T* f6 K; ^9 R0 \  b
'Hans'
' w3 ^: u4 e) \; Q( f- C&gt; name.charAt(3)& t  N7 O& e  _8 H, p1 X) l& j
's'
/ k2 s$ O& Z8 T. U&gt; name.charAt()" A( |/ D+ S( j0 j( K4 h
'H'
" `" \0 J2 D8 b$ _) K&gt; name.charAt(1)
% ?" w2 l: a/ c8 a'a'
3 f3 i! q6 e6 E) W$ {  H
+ G* q' [3 X. b' ~8 `// 在javascript中推荐使用加号(+)拼接
9 {" L/ q5 @: `$ A* N, r- h&gt; name6 a1 O) _; V' A$ R* B2 S
'Hans'" L) u+ Z0 d/ e; Q/ I" M
&gt; a
! @# f0 R+ |& ^& _. S: i'    ABC    '7 n  j4 O0 u5 ?. f9 a4 R
&gt; name + a- Q: k, a( v! m4 c/ R! p% U
'Hans    ABC    '6 Q6 r: \4 _8 F# e! ]$ P( x
// 使用concat拼接
/ _+ g  t3 Z0 C&gt; name.concat(a)8 G4 r, g: I1 y& ^
'Hans    ABC    '
0 `! h8 R+ N! H( e
, @2 g; w, H% D$ E; c6 \5 m//indexOf(substring, start)子序列位置7 |% u& u' ^6 I* X
, S5 x( F+ \! S# u: c- ^
&gt; text
( u2 ?8 f) x9 Z+ q  y+ E'A young idler,\nan old beggar'. P+ |- J- E( ~$ U0 J: T8 s  F( ~: l
&gt; text.indexOf('young',0)
3 r$ k9 P  V. f9 w8 ~2" t" O$ I' ]7 S

% @; s9 e# N3 k: d; S. b//.substring(from, to)        根据索引获取子序列3 ^$ H# V# I5 l4 F9 e
&gt; text.substring(0,)# T2 D& Q+ u! t; I' ^- l
'A young idler,\nan old beggar'- @9 ^' _6 J8 t
&gt; text.substring(0,10)
$ q$ Z: g$ c# y% U  r'A young id'6 X4 Y# i8 W/ C8 Q; y9 u

7 i8 b, L6 W9 R3 J// .slice(start, end)        切片, 从0开始顾头不顾尾
; p' n* b1 P9 u&gt; name.slice(0,3)
2 M/ ]: s' Q4 s; R4 v9 o'Han'
2 l$ N" T, z$ Z
6 f  u! k3 ]( J4 m% G' o1 R// 转小写
4 k2 k/ c! _6 d/ g&gt; name' \" o; N) ], I
'Hans'
. c# ?, M& v; g! n6 ~&gt; name.toLowerCase()
/ b2 S( ]: u4 \; f* [! f- X4 H'hans'* {4 }- q3 A* \; m2 x; \* M
// 转大写
7 R  r  ?! g% I% V( {. u" w0 z  g/ w&gt; name.toUpperCase(), k. H7 f7 {# ~2 v; W7 }. Y: G9 ^
'HANS'/ }1 a! h% y6 b7 a4 t, }3 n) C. B  ~8 L

% y" V( S1 M6 Y  _2 L( \& J// 分隔0 }% @7 ^* d2 H, ?7 b) u
&gt; name& I# {% |$ g* I+ y0 w1 j
'Hans'
( d# h) u, \1 y' H9 {&gt; name.split('a')
9 B+ V2 W& o5 \! R; u3 D" q1 t(2)&nbsp;['H', 'ns']
7 A; A; X1 u! a2 ]</code></pre>* V% {4 s; l! o: R$ j: l7 l' f
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>3 V: x6 `! \# N, \$ y; r# _, ^
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
" y+ s- Z; |! ~& Y" j; x/ _<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>! V( }" B+ j* C+ ~
<p><strong>null和undefined</strong></p>
0 w' X0 I3 a3 N) R  t0 b' n& k<ul>3 }/ q+ _+ K4 I  ~
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>1 u: E4 A/ G9 c  p; F
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
4 r/ D* d- J9 A1 m7 m</ul>
5 y3 Q# f' t3 t/ Q% C<h4 id="234-array数组">2.3.4 Array数组</h4>
7 U* w- g: {1 K<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
, t( I$ t; O4 N) w<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ) a3 f5 Q2 Y9 P
&gt; array1
9 M# s  ^7 _1 r* g4 n8 {(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']2 e' m1 r% U+ l) L4 _" x* i8 h3 o
&gt; console.log(array1[2])  //console.log打印类似python中的print! y1 w4 P# \4 c) j! I
3% S) ^6 {( p5 a0 F
// length元素个数7 q' y2 t  l* ~5 R
&gt; array1.length
) A2 n; h1 x! m+ B7 U4 {4 X0 P2 D8 g6
2 {% _4 V* m6 S- x# B( X// 在尾部增加元素,类型append
2 x* d/ w; r* H&gt; array1.push('D')
, U+ F: L( I7 ~. U: d  s+ J7
' i0 g$ D. h" r7 R1 }&gt; array18 X$ s$ j) A8 B
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 x4 H. O. _$ e3 k( }// 在头部增加元素
! F, f$ w0 _( K2 q. H( B, Z&gt; array1.unshift(0)
5 A6 `$ Q* V1 f1 D- a; e8. b9 f6 ~. H' X
&gt; array12 b3 n, i+ K5 N% O0 [9 W
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']/ M' q* u' h7 N

4 y0 N! _6 S6 Z7 B3 l! I1 U8 y//取最后一个元素
/ @& B/ \/ ~) m9 E; \&gt; array1.pop()
4 e3 ^6 C5 ~7 t  n+ o6 `" X'D'
* f( _# Z5 X$ H# A5 B3 U1 o& i) X&gt; array1. h8 _8 k* K: C) K8 c
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']/ A8 R0 u2 R& Y+ \- R1 `
//取头部元素
. G$ j: d) V% O( V4 n7 d- x&gt; array1.shift()
  p* F8 F0 r0 o+ |: e7 t8 u0
- U% V5 I" T% z% P. B&gt; array1% u$ i( X; h! z. n
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* W3 S  o- x9 W# n+ z1 U& B8 B3 o; D+ M* C: c3 \) b) E) [5 `
//切片, 从0开始顾头不顾尾1 I1 N1 J3 k( ]! Y* G
&gt; array1.slice(3,6)
/ V( e/ s/ ~: Q* r(3)&nbsp;['a', 'b', 'c']( ^# k9 }& L% R! S% P; k+ W0 Z
// 反转1 G) u# K( x; G
&gt; array1.reverse()
) g7 i. {9 a! ~6 h(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
( ]2 x. t0 Q. A// 将数组元素连接成字符串$ F. b, O; `# q5 g
&gt; array1.join() // 什么不都写默认使用逗号分隔& p4 }  ^% R. }9 r3 o& _
'c,b,a,3,2,1'  y7 M  S/ Y* v& _5 R
&gt; array1.join('')
$ G: O& i( H. Y- E'cba321'3 Y2 X5 M- `2 A; F3 ^# J
&gt; array1.join('|')5 R2 ?0 u: m, N; D
'c|b|a|3|2|1'
3 A, `5 ~' a  H$ C* V7 ?+ r% Z+ S0 S0 [9 U* W
// 连接数组" V0 W/ D3 s! ]; ^$ X6 Z2 o
&gt; var array2 = ['A','B','C']+ l% n4 V' t+ L# I  O6 F
&gt; array1.concat(array2)
3 t( b  L/ K( [& p( H  C(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']5 a  h- ]) d4 h* s5 F# ]8 V
( }8 p2 T5 y; p2 v7 h
// 排序
6 ]. L- f/ k6 p/ `, M7 C&gt; array1.sort()
& X3 F* m7 }1 A. f/ \! u/ x; U(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& m0 v5 z  }  [/ g
# P* `) K# Y) ~5 Y# F; n5 \
// 删除元素,并可以向数据组中添加新元素(可选)6 h- T! I$ E' Y8 e. V% w
&gt; array1.splice(3,3)  // 删除元素# ]' ~0 N. D$ N; n9 p
(3)&nbsp;['a', 'b', 'c']
, q( ~  }7 ]' U$ `) s! f! h&gt; array1
8 a6 m: Q) F2 r(3)&nbsp;[1, 2, 3]
/ n/ e- X- F/ j6 N/ E' `+ f2 x&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素# D' p( J/ Z- C, v
[]
, G7 |) T4 v8 |+ t$ z: V8 ]; R&gt; array1& e9 F% d* P# ?2 L4 l
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
+ E6 L2 P4 t8 d( v* U2 n) g
, O5 K5 Q' \8 C/*! E. o/ _2 n! x: G2 @2 ?
splice(index,howmany,item1,.....,itemX)% z/ F) u9 i7 s8 b( M4 [% ~
index:必需,必须是数字。规定从何处添加/删除元素。* `8 D. `' z) {* R: Y4 e& d2 G3 {) O
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。5 b4 r3 Q3 E% _8 t0 }
item1, ..., itemX        可选。要添加到数组的新元素
; H8 F& n. {2 k. u, J*/# u* n" v$ B7 o, s! a& T+ W! C
1 e  P' G: S- ?
// forEach()        将数组的每个元素传递给回调函数* [' [  C+ [3 W4 ]7 \* l
&gt; array1.forEach(function test(n){console.log(n)})! v- p8 }6 T+ U6 C7 S
1" M4 T$ A- L; z7 u. d# o
2
; u) E+ b! v/ V 3$ C  @" e( v3 e" M5 X9 X% |
A) ~$ ^* K- V" P) _1 I
B) c. ]" e! P, a' n% i  C
C, |- I. a( ~- `8 K* Q! U* }( r% _9 ]9 v
// 返回一个数组元素调用函数处理后的值的新数组
9 U% _8 w( A- x6 U! p) Q&gt; array1.map(function(value){return value +1})  j, @0 Q4 N2 C
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']* l. }) G( @3 q% R3 L, [# O5 g
</code></pre>$ [# Z! x/ D; {% K3 J* D
<h3 id="24-运算符">2.4 运算符</h3>
& `' _+ Y; Q8 w- A<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
9 A) W5 p3 @: V1 P& }% \: B% p# L2 D<p><code>+ - * / % ++ --</code></p>& z9 d" G# C2 H% ^2 \
<pre><code class="language-javascript">&gt; var a = 6) c& Q- i! I( j0 o: ~
&gt; var b = 3& i- I" ~& M  t3 c1 A; Y0 V
// 加: n: ~7 |& N, E! `
&gt; a + b
0 ?/ ?5 X/ n; L" j9
+ P  P) y0 Z" z, A, D- y! R4 t6 E// 减
" g1 b! e  O5 S! `&gt; a - b
- `* i$ Y' A: E$ t' H1 ?1 s& Y3/ s8 t5 u  x5 m' r+ M
// 乘6 J/ }  h% G  b" e
&gt; a * b
) ^7 y, A( ]6 K/ _9 ]9 D18
1 N: Y4 K/ D0 v* U  ~( Y/ m// 除  z, e/ F# j5 A$ }! j9 A4 s
&gt; a / b
! m: j% Q: s& Z; k2
+ W3 g% f. d5 P# N. T// 取模(取余)$ @2 S+ e5 Y1 T: z3 c
&gt; a % b
& B* b+ A" u( q, J! p) m; F- x0
- N5 x0 ?4 Y- C6 p7 {5 K// 自增1(先赋值再增1)
  b& o6 I: F0 ~7 L&gt; a++
9 p% a- W" F7 h: _7 r) L( t6: _) f, H. p5 j4 Y# h
&gt; a6 B% v1 n2 s) e. K( u/ O) W
7
- C3 A) }4 Y" g, `8 X// 自减1(先赋值再减1)
* r$ c1 O; d1 P&gt; a--
1 n2 A! }) t: F9 n$ G74 O4 n% T  E% v9 T) z8 n9 q0 O
&gt; a
' i1 k% h* U' z+ Q! K6
! o4 o; h+ C& O: Y6 |" I// 自增1(先增1再赋值)
4 @6 l7 E! l- W$ G2 v8 T7 ~" }) Z% Q&gt; ++a- n+ G* f  N& ]0 W: U! O* `
7
. N3 p8 @& B% g+ O, i. t// 自减1(先减1再赋值)" {! T' V6 @, Q, W9 E( F
&gt; --a4 l( H- X; t. l* G1 m
6* |/ t' k, V& I7 S+ S
&gt; a+ G1 W: S) |% v/ V0 f) I# k
69 W1 ~5 i6 ^1 ?: p! @  ~

0 {0 I+ \2 K$ ?  D* \, V' M; b//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
; g3 b0 @9 h2 B+ F1 @: t</code></pre>
+ r$ p( X% `1 A$ }6 ]) z7 I+ D<h4 id="242-比较运算符">2.4.2 比较运算符</h4>: ]6 N# B3 b/ Q# a. c! Y& q- a
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>) P0 G1 T7 K# H
<pre><code class="language-javascript">// 大于
5 ^. o' ^( h% N+ h) l4 j$ I&gt; a &gt; b
% O% q- I" q9 x! G" }true
; x+ W( @, G5 r: P& g+ Q* _// 大于等于. V) r4 \% @- @/ w. ~, W
&gt; a &gt;= b0 M) i% R1 I. g* l4 k9 g
true
& T0 _8 j+ V! m* Q# D' W) D// 小于
( |7 O$ S- \9 R2 \&gt; a &lt; b
  K! Q% U2 s: Sfalse7 L/ ], |7 p+ S6 J% k4 {
// 小于等于
1 Q  j0 v5 u& Z7 v  D* ^+ N2 S&gt; a &lt;= b
- A- U3 S- o! |: q1 f/ [% f6 m% ~false: {# h6 y" P- c) I; k) Q
// 弱不等于
! I% T( B0 V5 ?, ?&gt; a != b
( y$ T- w* D; g7 f# vtrue4 @$ z5 \2 m" p. }  t
// 弱等于" M+ G6 D6 h8 Z1 k
&gt; 1 == '1'
) k+ P1 o0 K2 Z* c% vtrue  B; h8 l+ a3 O7 b
// 强等于2 F) q4 g( S( Y+ g' t3 f9 c* j% Z
&gt; 1 === '1'0 ]- r! _* O, V9 e) ^% H
false
+ x( z9 z# ~3 c, X1 u# M// 强不等于
+ l  O8 B. Y" a1 T&gt; 1 !== '1'
0 ?5 z0 m5 ?- o4 L' `+ `true
& u. L6 x' [! P' |
# ^( p# Z) U! |' G& \4 D, \$ j" `& h/*
  ~: O+ Z; f! s) e% T9 q% J) n) OJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
& y6 Q& _  @5 B, {- E*/
3 n# @( ~" H! Z. p</code></pre>
  E# [  V8 k0 i) g1 w2 @<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>4 Y* E; g! J% {: L4 M$ }- Q3 G
<p><code>&amp;&amp; || !</code></p>
3 O% E- U8 H5 A  j' o+ r<pre><code class="language-javascript">&amp;&amp; 与  p# G3 [7 ?# a$ x$ K) a, y
|| or
/ q2 ]) i3 r$ U! 非
: O7 j! \% p' S/ ~$ O' @</code></pre>
& L% O' r& @, d9 V<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>2 q2 h5 k7 Z9 U* ]. h) T* z
<p><code>= += -= *= /=</code></p>
2 A# G) l9 O' R7 [; i" P<pre><code class="language-javascript">// 赋值/ G: b* U* }4 m' @! s
&gt; var x = 3
# p* L8 j! H" T0 ?  i5 |8 W// 加等于6 }0 ^1 Z% w8 A' f2 p/ M6 z
&gt; x += 26 ~' m- K- M. r
5) n2 Q1 @, a. C5 V
// 减等于: e( V  x, G; `: n9 c' W
&gt; x -= 1) p/ [, e6 M3 E
44 u, J* a* [: q# W$ F
// 乘等于; M  |  q1 W; @# Z0 C
&gt; x *= 2( M. |* h+ s% a% R  G. ]- L3 @/ e
8) {! [6 P8 b# ]# a% L. A
// 除等于
6 d! m0 f$ l/ t" t) M&gt; x /= 2
4 c. |9 g* |- O& }/ T4; g5 `$ U" e& \# ^8 o' e- t5 h
</code></pre>
' c1 l& N1 O( S  P2 U<h3 id="25-流程控制">2.5 流程控制</h3>
, S  P( B8 E- [" _+ \<h4 id="251-if">2.5.1 if</h4>
8 J) D# r7 M4 @2 c2 t; \<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
) \& z: n! M% l& l9 ]- |- U" N* U+ B, U4 {
&gt; var x = 3+ T: |- C! v2 a/ j& m
&gt; if (x &gt; 2){console.log("OK")}4 c9 ~- I5 N( P* ?  D
OK; w! T; S, p$ X3 W9 X
0 A# O$ G# G, Z! t& |
2, if(条件){条件成立执行代码}
, e4 T* S; z& d, W8 \' {        else{条件不成立执行代码}1 x& h2 r9 ~* M" E4 e: `8 Z
! m- |' v( P& |  ^. X: I/ _
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}# E6 b& ~* z& T0 T% I! |
'NO'. [' S8 F: _, V. ^9 b

% D3 T  _' M, Q/ ^( ]$ D3, if(条件1){条件1成立执行代码}
3 i4 a5 }9 Q1 i$ f        else if(条件2){条件2成立执行代码}
% E! \2 u1 i! R; N4 S! L( }    else{上面条件都不成立执行代码}
8 a" i9 i5 [+ c4 K9 x3 k" M2 v8 ]0 _
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
1 J, P! X, D/ E" ~ Ha8 ]% B, c* ]* c* `
</code></pre>
6 ]+ }% Z9 o  S8 s" P& C<h4 id="252-switch">2.5.2 switch</h4>9 m1 Q1 R; P: l* X, U
<pre><code class="language-javascript">var day = new Date().getDay();
1 J! h; E4 {- r1 Xswitch (day) {. S& g6 X) m; z
  case 0:
  A  @, v2 l% [4 A! B  console.log("Sunday");
* `' `1 E* L4 ]0 s  y  break;
$ S2 u; g5 f: Y) H, L- N  |0 S4 y  case 1:( M' m' W) U, P; k: V1 `: I6 J  }, V
  console.log("Monday");
) `8 D# ]8 v/ b0 a5 q  break;
* z$ ^: I9 P( t: odefault:
; l0 ]8 _+ W9 m1 G5 x0 ^2 }  console.log("不在范围")
" F+ t$ R% \) t& ]8 d& r. s}
1 j! z) c% j$ D; B6 Q 不在范围6 R' l1 L' O* N9 h) A' p% I" J
</code></pre>
2 m3 R7 \% b( Y$ H% C3 \# M8 w<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
9 y; j" s; k3 d/ a+ I7 j) H! d5 ~# w<h4 id="253-for">2.5.3 for</h4>& A0 b9 k7 w2 B& j" z* L. |# x
<pre><code class="language-python">// for 循环
6 g  y& Z# v- s  L        for(起始值;循环条件;每次循环后执行的操作){
7 Z# D1 r0 G+ l        for循环体代码
1 }% r# E" K: e( F( t/ F    }
* X5 D1 _3 `1 n5 B7 W0 v+ [4 P$ ^- m# U& `. C
for (var i = 0; i&lt;10; i++){
: ~) `' y# }: y- K    console.log(i)
, L4 j! b- W! z! N, M* ~; Y}4 N) Q  u$ K- a# B2 q7 b
        0
$ \/ |; e; ^6 S% z6 v' O4 i# M% y        1- b+ ?: j. L+ u) \* v
        2
7 v% {9 R( }$ i        3
+ Y" l0 j/ n" E2 z  E* }& X        4
  j- b6 s4 [4 R/ f- ~( t" C6 c        5
  l2 g0 p* r% b. L* m! l! P4 ~# j; {! M2 j        6, I+ G, u) @. F, M
        7/ T- m& Z! ^. ?: Y) H) A- L1 `. i
        8
  {( e; o; t! _$ Z6 F6 m1 D        9
9 O, h$ f9 n' h5 h7 B</code></pre>
6 U8 Y) n5 ~" u+ |+ g6 W<h4 id="254-while">2.5.4 while</h4>  e0 M$ s: p2 \: r# U+ w" `* D
<pre><code class="language-javascript">// while 循环: [" F% f* N1 X+ I5 G5 V
        while(循环条件){' N; r* c1 `) J- h' C. V- ~
        循环体代码
' l" o9 m' a, W    }5 D* j! \/ N' e9 m, o7 b

6 w/ B* s0 M- L&gt; var i = 0  D1 F0 S# m" ?
&gt; while(i&lt;10){- a, e8 a" j) X3 l+ x5 G
    console.log(i)
" ^2 \/ f3 L' e( q9 E$ g# Y3 ?    i++# |4 b: N$ D8 k5 g9 J4 l# x
}& S9 X- f6 h; r" D6 e. A& L
0
+ p0 S; C# x' a4 A 1
9 y8 @+ e* C& L0 |# M% M+ x4 r1 [ 2
# J& x( X; i8 o 3
$ {. Y/ O3 p! `0 t9 [ 4
4 h3 h4 o% b8 Q1 b  H 5
. o0 D1 {1 _' @  i$ }& X/ Q- M+ c- s 6
" z9 Z9 f3 g6 z. [' u' G 74 I! l) a& O4 W* r: L# N
8
  b! ^- ]; Q' q+ j( k  [- A' ? 9# P* w. o. T4 C
</code></pre>
3 m" g' F) F: h! `7 V. X/ C+ a# p<h4 id="255-break和continue">2.5.5 break和continue</h4>4 o9 N6 i" }3 [) t- @9 T" B7 @% Y
<pre><code class="language-javascript">// break
' U' ]* \7 U. O3 Z# Ffor (var i = 0; i&lt;10; i++){
0 r) i- I9 v/ c; U. S& ]    if (i == 5){break}5 G& C  e( R9 i1 N  d
    console.log(i)
5 R) ?/ i+ J" K}* k7 J* B" j" l) T
0
0 Y$ `( N+ K; y# x- \ 1
. U7 T* i2 u$ v" }5 N 2
, C) F4 `  r' B, _% T+ N 37 y0 y- ^. I/ p1 \
4
, h2 S* n2 p  w5 H// continue
! x# u$ V2 i8 g- I6 a. _% }for (var i = 0; i&lt;10; i++){
& M: i: v' o& [* H2 U3 A    if (i == 5){continue}" ]% v( F2 t( n
    console.log(i)
0 E3 u0 B1 O0 j; @}* L! ~" `2 R! F  f' q
0
# m5 j1 M: c# B- P 1* Z+ Y! _& W- r' @7 h
2$ I5 J& r' t) M' {
3& f& J7 q. _4 l/ R* W: q6 I
4
* `: x" }# H3 d" P( p. ?" G 6
* @7 _, G$ \% C  v 7$ @1 O5 @, ?% X' Y
8
# ^" G( F* I' T* r1 Y0 ?0 H 9
" J( [- Y4 a4 s3 V" G, j9 V8 l
7 b; a, F5 F4 X% f2 [. \</code></pre>
; c9 R$ C3 C4 F; Z<h3 id="26-三元运算">2.6 三元运算</h3>
/ T& ?+ \* M: \0 B( f! T<pre><code class="language-javascript">&gt; a6 O) c# S0 Z6 d
6
- E5 \$ J+ i  j, X5 s&gt; b' a" Z3 J1 I: x
3
( \6 E( a* N! d8 v1 b4 d
/ B. a. d+ K% H3 v7 i//条件成立c为a的值,不成立c为b的值
0 k/ B+ b) m% G9 \( J( Y&gt; var c = a &gt; b ? a : b  E0 q5 Y4 T- E/ J# I9 D% W9 b
&gt; c2 `2 [  f5 E- ^  p
67 y* \. i: p' `$ K6 U
- F$ |. B& @# {+ {- S
// 三元运算可以嵌套0 n6 O' `5 \- \, H; z. ?  x) V' M( \
</code></pre>
, U/ \* Z/ I# t& {: r+ @# Q6 I<h3 id="27-函数">2.7 函数</h3>4 [0 C+ x& D# g5 L# N+ s
<pre><code class="language-javascript">1. 普通函数: [& Y/ {! m* Z& P7 [
&gt; function foo1(){
- W  V; E2 i% j- M    console.log("Hi")0 O- a! }: r$ E0 H4 n
}7 L; e# w" }6 f6 r

2 a. F, X+ `; g5 i3 o8 A&gt; foo1()- K; n, |' c+ X
        Hi
; C4 z% X* R# s" d2. 带参数函数
' t; Q- Q. Y. D/ a! t0 U  @  P+ N4 b&gt; function foo1(name){
3 e7 q8 W. t; bconsole.log("Hi",name)
) O3 X7 c2 r1 x# R$ X5 v}/ R! Q" L, t4 J! k

3 ^9 m2 m+ a# d6 {( l/ A&gt; foo1("Hans")
& |& c/ ?, F8 l' h" ]Hi Hans
0 F% n: q; ^: x9 w" R
6 s; m0 z% y$ b- }* C&gt; var name = "Hello"
, A6 G! o* A+ }& A! ]&gt; foo1(name)
+ I2 ]. a& N% d5 j: K/ C) d( I7 EHi Hello
3 W# @) g- X. P3 @0 V- n: l( _$ X2 l; @1 N- R9 P
3. 带返回值函数
9 E: X; |8 t7 X  h+ ]&gt; function foo1(a,b){
+ N4 T4 T0 a- {3 e: e( B        return a + b   3 g7 m$ h& S5 L4 a" f
}) H- \0 L$ R. H- G: V6 p
&gt; foo1(1,2)+ {8 u  P; U3 K# t$ r
3# W0 _7 Z$ V% h
&gt; var a = foo1(10,20)  //接受函数返回值
" t7 C9 \2 K. I8 Z# C&gt; a
" F/ B2 s( x  E6 n30
4 T% g- V4 I+ j) W; Y9 s
  U' @9 Y) {4 i4. 匿名函数4 E' A6 Q: ]+ j5 A
&gt; var sum = function(a, b){
3 J: h, y2 N* {  return a + b;( J6 e1 f2 U8 K5 J# q
}
  {) Z4 y+ y. L% L! C+ z  W&gt; sum(1,2)
) g" z' S7 A1 _8 [7 P' w3
7 X6 Y9 g' d* y& Z- A8 I, v3 z, |) X6 }" u
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
3 ^# a+ R* h  h&gt; (function(a, b){% `* A: c: ^- S: [5 x7 J4 e% W
  return a + b1 s8 h0 Q( ~3 O$ ]2 T$ F
})(10, 20)7 P$ K9 x' `' F4 j9 l9 q
30: G: [) t, X) r/ m
, t6 q2 y; m; _$ K
5. 闭包函数8 b  s4 Y# n0 {: W0 a) i
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数/ Q' l5 ?2 x8 q4 k9 w2 C' {1 Y
var city = "BJ"3 p  X2 C- E; h( X2 y5 s
function f(){
9 |( z6 m1 l/ A, z- Q    var city = "SH"
# s; Y  w6 t* b3 V    function inner(){* ^3 x5 |3 C, x8 Q; A
        console.log(city)
# r6 R* j$ d5 i9 s% t2 x5 n3 Y    }  `9 ^  l" s8 ~$ V
    return inner6 a+ I8 e& K9 {! A8 u
}
' R. u& ~2 Q# bvar ret = f()8 j9 U9 c5 L+ \6 L
ret()" O& Q. U6 X8 }3 |
执行结果:
; e4 {+ [1 P5 V, f* C4 OSH
5 g8 F. s" }5 N9 ~; X3 T8 @5 R, t. F$ y! W- W
</code></pre>
. H. c  n0 A9 {<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>! T0 H5 `2 q1 k1 |
<pre><code class="language-javascript">var f = v =&gt; v;
9 i2 W* T( a& W, ^! D// 等同于# K9 e  g; r8 w* c6 o. b8 x, H5 t
var f = function(v){4 ?9 w$ F% R8 ]9 p
  return v;$ k1 G% h7 z* d7 j, `/ A
}9 m  x3 V+ u0 T/ `/ C. I/ ~
</code></pre>
, l! m+ \, [/ ?; y8 _<p><code>arguments</code>参数 可以获取传入的所有数据</p>( T; |& h/ a. {' g
<pre><code class="language-javascript">function foo1(a,b){
+ K" i  `+ V, X8 l2 e! `    console.log(arguments.length)  //参数的个数
5 H$ A; `1 g$ N- X9 ?9 l3 M% b    console.log(arguments[0]) // 第一个参数的值
% z( i  M& e7 \+ P$ M$ e+ M- y        return a + b   
/ v# a* S" N! l}
' W; Z& n, D0 H7 @# m# C4 k) Vfoo1(10,20)& }, `3 }" ~" @+ ]2 a, F; q
结果:
5 w( Q) `# d. w  Q5 S' n 2          //参数的个数 1 q' N/ D) T8 s! |6 }6 t: ~
10        // 第一个参数的值
2 P, D% u2 b" n  c# ^/ }: w30        // 返回相加的结果4 \* b, v" q5 X# I0 G
</code></pre>: x) W/ b( k- t. M. d. `5 ~: c6 S
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
9 `* L" n4 l- T5 p3 c8 O8 l<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
5 S9 ^, w% ^) j2 i) ^<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
2 ]$ d4 R! {: x. h% m. T. l<h4 id="281-date对象">2.8.1 Date对象</h4>* x% c% a- f6 O. x" Y0 r2 y3 j
<pre><code class="language-javascript">&gt; var data_test = new Date()8 _* t' \; N# q$ u
&gt; data_test
* d3 D# _" j3 {Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)9 I" f1 x2 i6 G3 S
&gt; data_test.toLocaleString()! w" p, i: f$ b3 @7 w0 D
'2022/2/11 下午9:44:43'
6 I% p: g; ^# ~$ t% t3 q) l4 y* v1 ^3 c) {( i
&gt; data_test.toLocaleDateString()$ b, w: @/ c6 M' }
'2022/2/11'
5 z5 R7 p& n5 S7 L% w. a; I) c+ r+ w8 B" }4 ?$ d& d" T7 l
&gt; var data_test2  = new Date("2022/2/11 9:44:43"), ~$ @' h" O. g; L. }) {, j
&gt; data_test2.toLocaleString()3 O# d8 P6 b* C' p$ l
'2022/2/11 上午9:44:43'8 X# `7 f1 F4 F

" n8 Y2 I* h# r9 Z// 获取当前几号. n/ S5 |+ }4 ^+ W. s% U
&gt; data_test.getDate()
0 ?; ~# x+ ]( S* F" p, w+ }11: {4 Y  o1 e% p* O- U( r
// 获取星期几,数字表示
& G9 d; t! t1 Q- [' I4 M&gt; data_test.getDay()  
8 o, e$ l& ~) d/ d- @, E) S5+ G. R0 g& b+ `$ o0 s
// 获取月份(0-11)$ \% S+ v0 M; q( b- Z# ]- q) z. ]. I
&gt; data_test.getMonth()& X  [  c& Z3 i- n# s3 I
1. H" n5 h1 t# q- T( {$ M+ I
// 获取完整年份
$ r+ g$ p" p: h6 |&gt; data_test.getFullYear()
# b  m+ _* W: H4 R" s) Z/ n- L  @2022# D( f3 m' ~$ L& K% j! i
// 获取时
+ X6 w" R6 n, O9 g1 D- f* n5 j- Y&gt; data_test.getHours()5 H* O! H6 s+ }0 Y8 A8 k
211 a: c$ i& m0 X1 ~) u' _; [
// 获取分2 i8 e5 F) z6 K
&gt; data_test.getMinutes()
: R9 e4 j6 Z9 _9 o$ I0 p44/ O& A& P( D9 v$ F
// 获取秒# r0 n6 `* l& o8 B6 Y6 V3 i
&gt; data_test.getSeconds()! ~( t# y7 H4 ?# T
43
. m+ ]. Y+ s  J# n9 j& B0 \9 U  g1 `// 获取毫秒
% S+ x8 ?6 \8 z: s) Z* U) h&gt; data_test.getMilliseconds()
& M- U* ]$ y# P# O290* r: s  ?: y5 w7 x. |0 R" g
// 获取时间戳
) ]9 |2 a  x1 I* D9 o' R&gt; data_test.getTime()5 ~$ o  J1 _4 _  t" u
1644587083290
5 t; Q) W0 S3 E4 n</code></pre>5 u9 r9 R2 H9 u6 ~$ C5 J2 A9 _
<h4 id="282-json对象">2.8.2 Json对象</h4>
  ?5 J9 ]- B8 a$ S<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串* ^+ L" I0 K! D. g6 B( e
JSON.parse()  // 反序列化,把JSON字符串转换成对象
, f, z$ n# y: R) w- K# L$ n7 y+ \" S0 T. p4 T! y, E8 b
// 序列化0 @6 b6 p0 {; O$ ]- r" _, z
&gt; var jstojson = JSON.stringify(person)
$ j8 k" |9 B! I&gt; jstojson  ! j$ O" h: m% q0 ]
'{"Name":"Hans","Age":18}'- G4 F# I3 d& v4 W+ E7 i
) `5 D* x+ g' j  S0 i' f# T1 Y" |# z
// 反序列化$ ]1 y, ~# @" a5 k+ l. a7 n
&gt; var x = JSON.parse(jstojson)$ m: e" [* S6 q6 S6 k$ E
&gt; x
$ |! B" H9 k: @  Q6 L' y5 E" D{Name: 'Hans', Age: 18}) W+ D9 N2 S, d( |0 F
&gt; x.Age
. s- M( W; C# ~4 e7 ?4 d/ b* ?18
. g1 ^1 L0 f, |</code></pre>4 {: _: l4 E' r- |; o1 O8 t# i
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
2 ^2 V& F; ?1 B' j" R$ Q/ p7 v+ L) r<p>正则</p>
  x# S9 e) ?" u4 o2 z( V' N% s8 f<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
6 ]& X4 t: e# R5 U- D# W&gt; reg13 [2 J* w: O; Y! e, u2 g3 y) V
/^[a-zA-Z][a-zA-Z0-9]{4,7}/0 Z; d& |7 r6 d# G& i$ s
&gt; reg1.test("Hans666")
1 F2 j$ H# b3 g. X8 q$ S1 n9 xtrue
& [7 |. G1 u  f- V* s  p
+ @6 j& R& D  j: f# K1 U&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
$ e2 g5 U  X3 R, s&gt; reg2! Q& P& }( {& t6 K
/^[a-zA-Z][a-zA-Z0-9]{4,7}/; N) t4 u7 D" ?7 J3 J  X( c
&gt; reg2.test('Hasdfa')
) z" w3 f. B: P# }+ S8 jtrue- c7 {' N* G  d) h! J
1 y+ \* Y0 C) N8 M& W
全局匹配:$ `1 @+ l- u* k
&gt; name4 L8 N7 l+ r# k
'Hello'5 z1 U& s' C* K
&gt; name.match(/l/)( S0 W# V3 i6 P& h
['l', index: 2, input: 'Hello', groups: undefined]
5 P: b4 J8 `* Z" `3 P/ x
  ^5 v2 S9 @1 a&gt; name.match(/l/g)" s+ k: Q3 C, T6 m; v3 G
(2)&nbsp;['l', 'l']. W( X9 l. ?; ^  E6 z. E+ e7 `
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
5 v$ _2 }8 H2 c9 O, M, J. r$ ?9 b, n; [5 w
全局匹配注意事项:& m# X0 C- T1 H& K$ @3 p
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g- M$ B8 M; B; r6 }- P
&gt; reg2.test('Hasdfa')
% C6 K0 Q0 {) i9 Q% rtrue6 v) `1 {% o; s% C9 y
&gt;reg2.lastIndex;
! g- x# D$ q6 U% T; e' F6# [' e/ B8 P' t3 k! W. g
&gt; reg2.test('Hasdfa')
; T$ F$ H/ T( wfalse. |+ F5 Y9 o5 e8 H, K; L
&gt; reg2.lastIndex;3 W4 Z1 W8 `2 W1 x1 _
0
' s* M8 v6 F& u4 Y, a&gt; reg2.test('Hasdfa')) V; k3 k% T+ q* x
true+ W2 E' p0 A4 z% Z- u
&gt; reg2.lastIndex;
& a0 n5 F# o( V) x# H6' c1 V8 D: A/ {, ?8 C5 q7 l
&gt; reg2.test('Hasdfa')/ I8 v( n8 O: R+ F7 p) U, F4 W
false) }) {$ p% A* s/ Y7 D, x$ P
&gt; reg2.lastIndex;
3 \* k- X  Z1 [  Q" G1 |+ D0( j2 e7 E# g: g
// 全局匹配会有一个lastindex属性0 |# M! y% K2 w
&gt; reg2.test()) N* @, V  M7 w+ A+ K) ~% Q5 ^
false- _+ z# ^, o, B7 u* V) ]
&gt; reg2.test()
/ S0 C/ v6 D5 ?true
' v; J; i, C, u// 校验时不传参数默认传的是undefined$ E; @7 L* s# I3 a
</code></pre>% d7 C! P3 z" h5 f" c9 F3 v
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
* s2 R/ ?9 t8 V<p>就相当于是<code>python</code>中的字典</p>
0 X" g; M4 d4 H4 q<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
$ e" H- J0 w, J5 ^0 x5 V&gt; person' t- \' B7 Q! S$ l
{Name: 'Hans', Age: 18}& Y2 x0 X6 E3 d
&gt; person.Name  @1 G/ N9 {" Y  H! G# X5 A
'Hans'& ~! _' V0 p4 _$ s( d( P& X- {
&gt; person["Name"]2 K3 J7 X! w; r+ k) d; `/ a
'Hans'% B) v& }9 z2 v7 F1 \# O/ v' N
8 h: e7 t8 Y4 _* I9 U3 n* p' L5 r
// 也可以使用new Object创建/ e% ], v3 O/ ]2 r: Z
&gt; var person2 = new Object()' f7 I2 p. K3 ]
&gt; person2.name = "Hello"
+ Y& ]% a7 m& B3 v" P* s5 b5 G'Hello'; X6 ~% |  k3 G+ J0 D5 d
&gt; person2.age = 202 l" A3 c) n/ I0 s8 ^% _" @0 J" e# U! E
20, n, U# N6 [! T2 T
</code></pre>, Y4 d$ @) r+ E/ g+ a
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
; I) N5 Z/ P; V  J& e<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>* J, I, K5 e; e+ S
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>/ h  w9 Y$ _. E# N7 L$ {0 g9 m( D. K
<h3 id="31-window-对象">3.1 window 对象</h3>
/ w( r! @& y7 `/ I! ~" s& Y<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>- @) @; R% |: ]
<pre><code class="language-python">//览器窗口的内部高度
! J( u6 u1 e& H- A4 n% xwindow.innerHeight : L6 X$ L: a' P" f5 g
706/ |- h4 o8 v5 H1 S$ a
//浏览器窗口的内部宽度  I) D2 [7 X' Y$ T# ^9 z5 O* M+ ]8 M
window.innerWidth
* Y4 a. f1 P5 r2 M3 ~1522
& u7 i7 q( J; V# T// 打开新窗口
2 o1 G* @2 C8 `" m, o1 Ywindow.open('https://www.baidu.com')# O6 M5 u! W6 @; |2 X/ r6 j: w& B4 V
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}' Y) x( S& V% L1 V
// 关闭当前窗口
9 ^* j. g: e$ M3 w  q1 Qwindow.close()
# G  ?$ f; O2 `& s//  后退一页5 h1 s. z. k' S  c# s' s$ x
window.history.back()
( S- Q" D/ W. m3 K' u// 前进一页$ V, M& C- i! K) w7 G4 ]4 s
window.history.forward()
+ J0 M1 z  X- z; l% {5 Q* J) A& m//Web浏览器全称
; j  U4 C& N" Zwindow.navigator.appName
$ n4 ^$ G7 m& g'Netscape'
2 y' w% g+ n# f! ^// Web浏览器厂商和版本的详细字符串
/ n4 x* T0 E! G% owindow.navigator.appVersion
* K# i# d, A! J. @. P3 H+ w8 M6 ^'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 p! ^. ]! Z! H9 C, F% }/ f// 客户端绝大部分信息. T5 Y% t5 D- I
window.navigator.userAgent$ u* E" u/ M* b6 \
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 C0 G# G% t6 _( N! Y( q! {" W// 浏览器运行所在的操作系统
& O7 |- k# F# }7 N7 m) s& L. R' Wwindow.navigator.platform
4 K* a+ I# @  K# P( w) {'Win32'  X  S7 `/ w9 {0 k4 Y8 o, M! b: w
+ b! ^3 j; g, V' @
//  获取URL+ T& K2 x0 E2 c6 T8 [
window.location.href
* N9 p$ I( i; e! ]7 W/ z, U7 N// 跳转到指定页面! h0 z! }) g# q# S# k9 C
window.location.href='https://www.baidu.com') Z# |" K5 V+ o+ b: a
// 重新加载页面
2 l6 g. n. B6 Vwindow.location.reload() 6 i0 ^: y5 r! J( G9 ^2 A
</code></pre>8 P& q+ \  H- c; D- O+ o  v
<h3 id="32-弹出框">3.2 弹出框</h3>; E7 G4 G% ~# q; U) ~- s5 {
<p>三种消息框:警告框、确认框、提示框。</p>9 a  C: u& c& I8 x& G2 ]7 L
<h4 id="321-警告框">3.2.1 警告框</h4>
  |# L* A5 P# @. K" n4 y/ ^<pre><code class="language-javascript">alert("Hello")% v9 w; b# ]5 O; f5 i) N7 ^
</code></pre>
  J; W# S8 N- Z: F7 u8 d8 u<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
' P  l/ _, o/ `<h4 id="322-确认框">3.2.2 确认框</h4>
9 {. A: a! d2 q( h<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>7 v7 n  Y1 }, k
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true6 B: u5 @$ a) @5 @
true7 o  s; m, w; f9 t+ d0 d
&gt; confirm("你确定吗?")  // 点取消返回false
; U; Y  n$ N6 w0 T" h; @8 [false% G/ F) G! A% E" _8 O, s0 P
</code></pre>
" c0 J+ F2 w% W+ ~# E<h4 id="323-提示框">3.2.3 提示框</h4>9 }) [* H* ]9 m; P" c- ~
<p><code>prompt("请输入","提示")</code></p>
' b5 D2 U, H# O! g+ `<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
& p! _. v2 V4 {) S& d. V<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
8 j  _! K: S1 m+ p1 |2 e, E<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
+ R* G+ a3 V, l0 t8 ?* s<h3 id="33-计时相关">3.3 计时相关</h3>
1 D  B2 y5 k! S$ b" D$ @7 Z1 Z<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>. d$ @6 X" C! |& O- i$ Z7 i
<pre><code class="language-javascript">// 等于3秒钟弹窗, K# x  x) m4 A1 y' Y, m
setTimeout(function(){alert("Hello")}, 3000)
* U3 R' B  r2 e2 k
1 K5 M! u) Z2 Evar t = setTimeout(function(){alert("Hello")}, 3000)
; f2 x1 \: S4 g
. `( z4 [3 i# e) K( F, J// 取消setTimeout设置$ w3 W: u" u& v  D# X
clearTimeout(t)
: r8 I0 s. g/ F- \6 _: d</code></pre>' X4 F9 a; r  K* F) a
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>3 \( w& K% F6 }& x
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>+ l, \8 p+ B, |$ t
<pre><code class="language-javascript">每三秒弹出 "hello" :2 v2 j0 h; y. L+ \
setInterval(function(){alert("Hello")},3000);1 y" m6 s6 J/ s( t
</code></pre>; s6 H( ^( S9 l
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>: x: N0 |* D/ W# [/ U# V
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
) G3 H0 e! s( f3 U' v//取消:
5 P$ u" l: \- G4 lclearInterval(t)
' b& {, F/ Z. Y- @  d. a</code></pre>, I5 a  Z7 L5 S6 x6 Z

! O" g) w1 ~* F, ?% N( l
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-25 20:53 , Processed in 0.070656 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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