飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

2 U. P0 M8 J$ [/ R; w<h1 id="前端之javascript">前端之JavaScript</h1>
  C; s) `# l. H% P# n<p></p><p></p>
$ M( f7 R* \7 m2 N( @. b<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>" c( Q5 q. B9 N2 U' ~9 {
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
6 C+ X+ E$ {  J6 R9 ]它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>+ |* |  v+ S4 N# K8 n/ ]# B; c; I
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
7 n+ J; H1 N% j0 D, x它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
# C7 v# |+ v0 T: J) y" L- o<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>2 C: U& B: z3 ^5 P) X( C; e
<h3 id="21-注释">2.1 注释</h3>3 r2 f1 @: N" W7 o% y& B) m6 h
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
: V- @7 |9 v9 O  ~<pre><code class="language-javascript">// 这是单行注释' f/ T' w4 z- u, W% H  m' P0 Y

% w6 _; d9 j8 j5 {/*# h0 {( c! O* Y7 P8 S+ `$ L5 k
这是多行注释的第一行,
  j, Y1 z, U% E$ T1 Y3 j. D* L这是第二行。; t4 v' _- o+ d% k+ h
*/
7 }! \6 m6 e. F) a7 c" C/ j6 a2 d</code></pre>
; e# N9 H& _9 [<h3 id="22-变量和常量">2.2 变量和常量</h3>
* y  t4 m. n* R% d1 @) j" r; ~<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
- g3 K: F& e4 ~* T+ x) I/ t2 o1 `  ?<ul>
7 W! O0 _1 G' ?<li>变量必须以字母开头</li>
+ S! R; Q  ^5 t% X, G7 y<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
8 A6 ~9 M8 K& s# v- V+ q& _  J0 f' X<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>+ a: @! R' e! |! x- I' L# @4 F
</ul>
- e% f3 R% b2 G<p><code>var</code>定义的都为全局变量</p>0 W% k9 W) Q/ F* b. F
<p><code>let</code>可以声明局部变量</p>2 b$ Q. P, Y2 q* d4 C0 B/ x
<p><strong>声明变量:</strong></p>
" h: b2 F. \) I  {' i4 Y0 N<pre><code class="language-javascript">// 定义单个变量, H# C1 C' ^, E% u$ U% a
&gt; var name
) G4 y8 ]2 W( D/ j) e: j) O6 d, i&gt; name = 'Hans'& e# t& x; B3 u, M
//定义并赋值2 B* i- J: X( h7 X, P/ i' V! o
&gt; var name = 'Hans'
1 {7 y: N, S5 ^$ `! b2 K&gt; name* x: K3 _# r& O0 w. W
'Hans'
& k% R* m& V, Z6 \
4 p3 [. R+ _) x. d' B" n// 定义多个变量
3 t, i8 O' A8 B) r2 H/ S0 f. a3 k&gt; var name = "Hans", age = 18
6 a8 [; m" [) K( Z2 M9 r. H3 a&gt; name8 n0 P" Y' l6 ^/ Z/ u
'Hans'
! g( n) b: V1 B6 {7 Z+ @&gt; age2 y( a' b+ B  w
18
* r' k' j! Q% ~& g
; o- E/ y3 S, E4 ^- D  i! j//多行使用反引号`` 类型python中的三引号
& K/ F5 B# B1 ~9 u! Q& ]&gt; var text = `A young idler,7 `) F$ Z; K1 V5 D( H
an old beggar`
: N( z  a' d* T+ r" d$ Q' X&gt; text
/ X  d9 d  T5 D# n& U/ T  G6 `'A young idler,\nan old beggar'$ e/ b( Y: U9 X/ D4 F) q  t
</code></pre>
  j5 q: q. t) a* X: Y& G: R. [$ l<p><strong>声明常量:</strong></p>& m- |1 l" c# |/ K
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
- l; |9 ~0 e, r1 X<pre><code class="language-javascript">&gt; const pi = 3.14
( G# a' c5 V4 o$ E" d+ u" u# Q&gt; pi& y, e9 P6 |% Y$ W" E, I- r
3.14
7 J& h: e# x5 q&gt;  pi = 3.01
0 l- v" `8 }' c* m" n9 tUncaught TypeError: Assignment to constant variable.) U$ ^6 B% y1 K7 x, R
    at &lt;anonymous&gt;:1:45 ?. T! [( k& ?

, i3 S6 O) x/ u' p+ I</code></pre>0 t1 k! k9 o4 w. q( s5 Q
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>  n' v6 X  q! O6 H4 R
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
$ j5 A" L4 d5 C8 x# j. E1 o<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
4 w3 J( g3 z: y& l& o<h4 id="231-number类型">2.3.1 Number类型</h4>
% Q3 E; c1 T: U: `3 @<pre><code class="language-javascript">&gt; var a = 5
) Z& ^$ o8 W7 X3 E0 L9 ~&gt; typeof a   //查看变量的类型  9 H: T9 M1 _9 D4 e$ A8 [! K" P
number6 y4 F7 B* D" g- @- n

7 @8 `+ [% i  h# M, v1 Y9 k+ [&gt; var b = 1.3! ~' V2 y1 l3 q8 \
&gt; typeof b: c3 s# ~4 K2 w3 J9 @  d
number$ |* Z2 y" T) Z

8 J$ n4 w' j" ~$ q1 v0 h3 }+ f// 不管整型还是浮点型打开出来的结果都是number类型
: j5 m- v  ~- F: J. g3 R
  k" ~0 e2 B, [% [/*1 v/ W% C/ s+ P$ a2 i1 f* O# t
NaN:Not A Number0 e& u5 `) }1 T# A; ~5 O
NaN属于数值类型 表示的意思是 不是一个数字
; D6 \) L" ?5 }: ~: f*/
; s, K( {' j% @, I+ F
6 l% _5 `+ d7 {parseInt('2345')  // 转整型
. I, F9 I7 f; q4 P& i. n8 |& O2345% @1 B. q% @/ }( b& L+ l$ j
parseInt('2345.5')& U' s/ M! B6 n3 v- s' F6 a" j7 H
2345. g- L4 j! j: \( l4 h  I
parseFloat('2345.5') // 转浮点型
. s, P: f- e7 S8 N2345.5! b6 T( r- j0 w% [. |& M
parseFloat('ABC')' ]0 b' \% q$ k5 V# W
NaN
% d. f4 q6 n  m; S) R0 XparseInt('abc')
: x$ }5 T) h! B6 u3 VNaN1 L% ]% B5 |- X% K
</code></pre>
2 s9 M: w* ~. p0 D. ^<h4 id="232-string类型">2.3.2 String类型</h4>
. p# }1 i3 q, C* p; `% O7 d<pre><code class="language-javascript">&gt; var name = 'Hans'- Y( T: k  t. L! q7 e" e
&gt; typeof name
9 ^( A# e; k. I6 P+ g* ?'string'! r$ C$ r9 Y" L

. ~; U+ O1 I7 P$ a7 {/ D; F//常用方法
7 r4 e) S9 T+ }9 L& w; Y// 变量值长度
3 r1 m1 A: c3 o- U8 o- j! t" k" W&gt; name.length, E# j7 S( n) R+ D
4
: _' h% j1 s' a1 m) ?9 H* d. \// trim() 移除空白/ q0 C3 L# ]8 ~, f' s9 E4 |
&gt; var a = '    ABC    '
" P; o0 I& O  F# f0 B&gt; a! J5 b# D4 A$ @5 `- u
'    ABC    '
; W) |! I. P/ U% s: \5 b&gt; a.trim()
+ Z+ `* E! o+ ^" q5 z'ABC'
$ W, L5 s/ T' o8 Q" s//移除左边的空白
7 I% d% r. X2 R7 ]&gt; a.trimLeft()
$ n# i0 [" }% {8 G" c5 W4 f'ABC    '0 ^! I' q4 Q( O  F9 M" Q
//移除右边的空白" e& D: g( i% I  b* F; C( J, L1 p
&gt; a.trimRight()  ~9 i* x* V$ U) `6 @! v& M+ R$ Z/ n
'    ABC'0 F) u! \5 P: S) ~9 i

8 R' C. T- T5 C7 {, p$ i5 J/ d//返回第n个字符,从0开始/ J, X# Y% _. u% s1 k
&gt; name6 L# V) @  S0 G! \
'Hans'
0 j; T  ?3 v2 K" V7 S- W' [; s/ p" [) e&gt; name.charAt(3)* X& D  d/ O2 z/ t# ~
's'/ J& S1 Y6 [0 X6 i/ E& ~( A, g. n+ i
&gt; name.charAt()
' s% e% k3 @. q( I'H'
% Q. V+ b) P; G, X&gt; name.charAt(1); f) Y6 j) A( n8 f2 V% I8 s) G' F
'a'
: B0 A5 }  E1 K9 E: N' w
8 l$ O- I: `$ ^! a4 G// 在javascript中推荐使用加号(+)拼接
! I  ]3 _& M! Q# S2 K; M&gt; name1 C" q# D& L4 v- v$ _1 T, X
'Hans'
: R4 X5 k6 F! v; U7 }&gt; a
, V* A7 G, a0 O$ S: h8 J'    ABC    '4 l8 ^: t' H7 h/ [
&gt; name + a
( \( W! F: |' S'Hans    ABC    '
6 l; l! o  q" f5 r% q2 e// 使用concat拼接
# D( h. q7 H, ~&gt; name.concat(a)- J$ Z5 x, i  E( Q- O! R
'Hans    ABC    '8 T" j4 K9 B2 y
2 {  T: X6 m3 ]7 ~
//indexOf(substring, start)子序列位置4 M* N, R& n4 G0 M) u: L! X

) C8 T0 G, H9 N# _&gt; text
1 O# a: H! u( ^0 G! u/ }'A young idler,\nan old beggar'
& C2 A5 E9 i6 R&gt; text.indexOf('young',0)
. Q1 P& Y# S5 }8 N# f* \5 {) }2
7 u$ m, x# X" S& V- L$ m4 T/ k$ W& ^! C, W# N1 _0 P6 ^( I
//.substring(from, to)        根据索引获取子序列
: V7 v1 ]# x" z' U" b+ A+ y* b&gt; text.substring(0,)
- y7 i9 T) S8 o0 K'A young idler,\nan old beggar'# {8 r* K# D- n* I1 r
&gt; text.substring(0,10)
4 \' l0 X- k. ^3 b+ ~'A young id'2 F4 ]( {3 k" p6 h
0 X1 z* A9 l' W1 f
// .slice(start, end)        切片, 从0开始顾头不顾尾
; V8 E# [: r, I5 }3 M! z$ V0 B* s&gt; name.slice(0,3)$ q* `6 n9 H2 Z' Z1 s# S
'Han'
9 a8 x" X% N, x7 m. x9 E/ j' U. i* O( T) k8 V
// 转小写
8 w) @! Y, p4 \( A3 k1 l8 s&gt; name
3 O2 b2 T' L2 q# X/ s6 n, b1 M'Hans'
2 X4 J0 Z7 b2 ^6 [&gt; name.toLowerCase()
5 D# S' J( r0 y5 G: y6 Q. \'hans'- `5 r( U6 K4 u7 F" W
// 转大写+ `% G. n4 h3 ?8 E5 l0 r/ y, `
&gt; name.toUpperCase()
8 [- M2 m6 T; X" m: I6 K5 }'HANS'3 v8 x; E- `' U% Q6 Y: y" u9 N$ `1 i

. E) u: W3 x; R' s& E* S( f& E// 分隔: ?+ h; I, o& @) u' e9 r
&gt; name4 g+ C& {- m9 N7 C* r& z% g( O5 j' w* X
'Hans'/ p  J6 h+ B% K
&gt; name.split('a')
, l$ s) V9 o4 w/ t: A0 m(2)&nbsp;['H', 'ns']; W5 V, ^4 s/ l
</code></pre>
) b7 m$ Q. X8 {2 Q- }<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
/ ^5 }3 V8 {9 I8 x- _! b<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>$ w/ ?* q* X$ G  @- }' h. I4 b
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
  Z8 @: L, U3 K<p><strong>null和undefined</strong></p>
8 l  `- H" L  f2 l  ]<ul>
5 C1 Y! K5 O/ ]9 q<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
: z4 q, h% S" u6 s- I, x<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>2 Y% e3 Q) Q, @* k/ Y/ T: s. y
</ul>
# G9 a6 N: U; M6 h' m. L<h4 id="234-array数组">2.3.4 Array数组</h4>
4 c4 F4 k4 q: k  t8 r8 x2 S7 U<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
  F; _& `, J" H" t) _+ {<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']   B- ]5 R6 ?9 ~% ?
&gt; array1( B' y- {7 j" F2 o0 N6 k6 A$ d
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- e: {  d/ k1 N6 R! x  }7 c( V
&gt; console.log(array1[2])  //console.log打印类似python中的print
! k3 V6 r+ F' t# D+ ~% n$ L7 @3
1 R1 s  V& m+ C& `6 }// length元素个数/ t2 |( P  b' _: E2 w$ n9 r3 ]
&gt; array1.length5 P, ]/ o7 d7 A1 `" E7 ~
6
4 n; Q% \/ X, n# `// 在尾部增加元素,类型append
6 Q/ F0 q9 Q& Z  V: e  _&gt; array1.push('D')& C# A/ {$ e) x8 Y# G
7
) [3 F" Y7 F1 Q3 d/ p4 o5 m&gt; array1
0 z- u9 R4 W4 l1 d# [9 z(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']: V0 q1 C9 e. x8 b3 D" |0 V
// 在头部增加元素% C! d7 c. ^* ]# k' [" e; C" Y
&gt; array1.unshift(0)
( O2 n- a7 T4 n/ E8' @+ z; g. `1 W: Y1 }# k
&gt; array1
2 A: U$ r9 h# j6 ^* q0 h(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% \/ P  I) L+ J% n; U) X

. Y. v- q7 j0 y" R; ~" b//取最后一个元素
; J& p+ S0 z8 F* I6 t) s&gt; array1.pop()
- B. Y8 P* C4 y'D'& h- M  v6 j5 d$ M) ]/ h9 N9 V* i
&gt; array1
+ ]) C! W+ @: V; R+ J2 |) J( S4 ^(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
  s/ s& x6 A7 x' Y//取头部元素
: t/ z, a  m* F2 Z$ i2 m&gt; array1.shift()1 x  g6 v0 d& x9 e1 v
0
1 h& v4 ?- h: t- b( c&gt; array1, Y4 v% k, W  C' ]$ T, I
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( ~* i- E0 n/ O1 ~2 H. I" k3 U
7 U/ H  L- h) J- t- p
//切片, 从0开始顾头不顾尾! [* ?( F7 F, `, X1 f3 I8 Q
&gt; array1.slice(3,6)
3 O/ T6 X( V5 a- s: k" P2 a; c(3)&nbsp;['a', 'b', 'c'], v5 l; h4 d4 u8 z" z2 G# d
// 反转
; n- f2 x8 h3 d1 z* v! }&gt; array1.reverse()4 {6 Q/ z/ a, Q: V2 Y( |1 S5 Y
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]$ d2 X$ C2 E7 C8 d! [" u
// 将数组元素连接成字符串
- T  l% _! W: E0 O  t&gt; array1.join() // 什么不都写默认使用逗号分隔
5 Z! S9 m1 o. n; a9 U'c,b,a,3,2,1'
$ v3 h( d' @' z1 |# N' H&gt; array1.join('')
  L' d" l6 h! B. h7 S, V/ B'cba321'- w$ {, P8 @# E$ R: }- Y
&gt; array1.join('|')2 W5 F5 N1 d5 j, z5 K3 ?) b
'c|b|a|3|2|1'
$ s+ c& m9 Y# @, t: U* B1 B% G
  x2 q: L7 u2 w// 连接数组1 }& k+ Z1 z9 o0 z
&gt; var array2 = ['A','B','C']
" e  D( {1 e: v9 i( ]) H! @! K. K, B&gt; array1.concat(array2)' m# f% G! {+ h) y7 q) G
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']2 n: P) q, |1 F% f

; `4 k# n$ ?) h6 s. }5 ~, A- V// 排序
, @; N7 s* R5 v! Y" I&gt; array1.sort()/ Z. G( b9 B4 A+ P1 W
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( e4 h# U# p" C" f2 a  N

; N  r% v, \' }( M// 删除元素,并可以向数据组中添加新元素(可选)
% l1 i* a5 @- L/ V  k&gt; array1.splice(3,3)  // 删除元素
5 p; _5 D* i6 N4 {0 }(3)&nbsp;['a', 'b', 'c']: c. J; }8 ?! c5 |& z8 B  Q
&gt; array1
. V& V1 @; N& `% k(3)&nbsp;[1, 2, 3]
. Y  L# {4 H* R6 D; A: ~) Q9 @&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
/ a* d0 g0 r6 f; {4 E[]  Y* f6 D$ W+ Y. x# ?
&gt; array1
2 K( k1 B+ p" ]/ @5 e' ]5 D(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
' `: C. n1 H. G8 A% V
2 f7 `/ q, q! O: D  O& A3 m/*! T; |2 {. w- N: {- \$ e
splice(index,howmany,item1,.....,itemX)
; d! l1 c9 N2 tindex:必需,必须是数字。规定从何处添加/删除元素。
- D2 H% P; `  f/ @. t, Jhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。: C7 \8 I" ^! x8 h# V
item1, ..., itemX        可选。要添加到数组的新元素+ I( A# a. z2 S3 G$ H
*/6 p# g$ c0 k: M" d9 w/ b7 Z: y: E

- G9 L# \) f; l! S// forEach()        将数组的每个元素传递给回调函数
. `: l; N3 ?, v9 l* H" U&gt; array1.forEach(function test(n){console.log(n)})3 S0 ^0 P! g: e; ~' ]" G# K
1  ^# C. F% R' F+ \+ n6 Y
2: L* j' T0 u8 g5 D3 f
3
) p* V8 Y. l5 W% d9 f  s2 B  `7 C A
- ?) K; L' p3 @% T- ]7 p. }+ y6 v B" k+ M  Y2 f% b5 W
C) N) b0 C  y/ j% `( Z
// 返回一个数组元素调用函数处理后的值的新数组
3 k. k+ T8 b/ Q&gt; array1.map(function(value){return value +1}): N7 z, k, Z9 T% l8 I: W( l4 m
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1'], T' m) z/ W# d7 b5 \: T, P
</code></pre>7 Q( d: M4 C. E( P8 k
<h3 id="24-运算符">2.4 运算符</h3>
. |$ B& O) Q0 `) X8 ^- U* T; g7 `6 S<h4 id="241-数学运算符">2.4.1 数学运算符</h4>+ B# t$ K/ R9 H9 r' B
<p><code>+ - * / % ++ --</code></p># l) p/ A8 j+ F* q" B1 H
<pre><code class="language-javascript">&gt; var a = 6
' A3 r+ y) f, X; w; A&gt; var b = 3
% W8 v3 p8 G* U' t: a! \$ n1 g// 加
% O2 z$ [8 X: u  B) c. Q&gt; a + b
8 J8 x/ J" G2 I3 W7 D& U/ Z94 S* c2 B" {7 W' e. B
// 减
$ X6 y. j; M) t3 a3 v! y* T&gt; a - b! X; A2 l8 a7 g9 [- c1 e# R
3% g- Q+ ~/ u+ R5 }) p5 C
// 乘# s( X# a' S! r& x9 q; [) t
&gt; a * b* j, ?* p* U% z9 u  C6 ]
18
) f: c5 h; ]( m& v* ?1 p/ O// 除8 h, U, i) ~, M5 N3 h* N' ^8 y
&gt; a / b
7 E3 @# a. u: {2 s2. d" `4 U) p+ S+ F! G
// 取模(取余)5 |+ A/ }$ c$ E' H3 m
&gt; a % b
1 [# e# {& Y# M/ F0
; y$ a2 n/ S. P% P7 y6 x, z// 自增1(先赋值再增1)
; k' U6 n* u4 ?2 p&gt; a++
# ^3 ^2 i+ N4 n- g6
. a* i4 ^0 |! j" Q# t9 L& E: h2 X  ?&gt; a9 E' ~* P2 C1 k! g9 a, y
7% I0 o% @/ E8 `' _; H/ p
// 自减1(先赋值再减1)
: ?9 ?) M! g: g/ T3 g* p&gt; a--& ?. o; R. {- r! o  T: a; C/ ]
7- S( `0 ~, m$ P/ b, K: ]# L$ n  ^
&gt; a
' K7 P- n3 w9 x! B: b6
- Z/ }) N& }- B* z# T" N, f// 自增1(先增1再赋值)+ ]; O, C- l# M! K! [, b6 ~3 t
&gt; ++a' B5 y6 T! ?6 A( E
78 ]! s# x. Q7 j8 P" A) w
// 自减1(先减1再赋值)
$ `- W& i% L* [4 }&gt; --a) ?% K/ V  O7 M; K! P9 v
65 I. s4 y# J9 m
&gt; a
' ]# t9 ]* }! G6: W8 k: z! w" B8 T' X
, @7 m1 }: V5 u# }5 m
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理0 H0 h0 M: q3 q- A& l* z& D- c) _
</code></pre>
: k* q+ |5 e2 x, [5 S+ o& E! I<h4 id="242-比较运算符">2.4.2 比较运算符</h4>2 i' z2 v3 S5 P- w
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
( r7 Q. u- N/ _0 g) M/ j( \<pre><code class="language-javascript">// 大于
+ s( A# |8 z. Y* @( \&gt; a &gt; b  x, ?1 f7 F" o' k- Y2 \
true& `* u5 B6 l! W& r
// 大于等于
5 e; Z. A6 _$ U- m; K+ Y+ H% R8 P&gt; a &gt;= b! X, e/ n1 e2 B* f1 r4 t! _7 M
true+ n2 z7 J2 Y: A& ]3 [  H2 Y8 o! K0 J
// 小于
; w3 l& B0 l% d6 H' T, D5 m' [&gt; a &lt; b7 K$ |$ P4 w$ {: r2 v
false6 `7 r, S9 g" G) O& {2 [* |. F
// 小于等于
0 U  d& M1 O+ a7 G7 Q&gt; a &lt;= b
4 R1 w/ N8 ~6 Qfalse
0 Y0 h$ p6 X: S8 m& z/ ]% ?: q$ s) Q3 N// 弱不等于* {5 L* i1 O/ k4 ^0 L
&gt; a != b
6 z) G: \6 `; d9 xtrue
$ M( \2 v: z2 z; }  v1 k// 弱等于
1 @, M- S" X9 s. s  `% g7 k0 [* |, Q! H&gt; 1 == '1'
, L; t) h4 i+ ^7 o$ |% R8 ztrue
( Q( l' _9 b$ R/ W" {% P// 强等于$ x" x, r9 d9 C& K6 k0 \
&gt; 1 === '1'
* O9 f8 g: N/ Dfalse& z# S/ p. F2 I
// 强不等于6 H# e9 D* y% r1 Q
&gt; 1 !== '1'8 c. I1 P6 o" e$ m
true' d% Y* b, \/ {& K" d* n, h

& R' @& }' b* D1 s0 Y6 Z/*( S# y. L, g  Y2 V+ ?! o- Z1 R
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误$ b8 F6 h( Z% E: ?
*/
! ^& d( g' L  e0 {% Z. d</code></pre>
: `$ X# l2 k2 I7 _$ v+ T<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( x+ J: d3 H& H' r6 T<p><code>&amp;&amp; || !</code></p>, ^7 ]( I: P; R2 s
<pre><code class="language-javascript">&amp;&amp; 与
0 v" B  ^! A: z/ Z" |2 c4 D|| or
' V) g3 g: j/ x: H  B  }" O6 L! 非
8 E" C& s9 d4 V</code></pre>) H0 f8 X2 e/ X8 ^
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
0 ?( s: ]4 ?0 E<p><code>= += -= *= /=</code></p>. g( B7 e) X8 ]! J; {4 {; _* R
<pre><code class="language-javascript">// 赋值$ k9 l8 t' P% g6 Q* ^1 m
&gt; var x = 3
0 [: _7 K$ h/ k1 Y  _* t! S/ A- n// 加等于
* D6 R7 X6 g# C& }$ E( K, _&gt; x += 2( V( {8 x1 N3 z0 h& b
50 y) C5 X  \1 J
// 减等于
  m% q& v# ?# `% D" [&gt; x -= 1, ]1 C2 x3 M' \
41 {0 Q! }& f6 Y* o! Q4 x
// 乘等于
, k: I% `2 d  f+ W4 I( K5 E&gt; x *= 2
0 ]8 w$ g( t! C; q. i82 W! ?# A3 J' w+ X& K
// 除等于5 n# ^; N- A: j5 \7 d$ J  _
&gt; x /= 2( K6 ]& F/ P- r$ {
4
- O! c, }# N+ o+ w</code></pre>' V( ^1 q  w& v
<h3 id="25-流程控制">2.5 流程控制</h3>4 x! b! A. b8 M0 {/ l9 f
<h4 id="251-if">2.5.1 if</h4>5 V2 ]& E8 J) n) c8 y
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}6 t7 U' _5 [3 `. Q! w( w
1 g' T3 X. E1 S
&gt; var x = 3
) t7 H+ f9 t, K0 V( I8 N! h- o, }&gt; if (x &gt; 2){console.log("OK")}
: S3 n0 q2 |7 z, x* {$ | OK) w% X6 Y8 a5 @6 u

1 y% v3 e) c! \0 l* w2, if(条件){条件成立执行代码}   `+ r, ]5 o- I* P& r1 J
        else{条件不成立执行代码}
: c( s, Y& T2 k3 ~* o) G
3 r9 J/ b! y# _: b& M&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
6 X! ]# s4 _  V# M. E. E3 @'NO'
) @! K3 p: p* S; r; w. y
9 U- n/ R7 R" Y3, if(条件1){条件1成立执行代码}
2 [/ s. e4 R+ y% n8 |8 q$ x        else if(条件2){条件2成立执行代码}
0 [8 A" Y7 p. I/ n    else{上面条件都不成立执行代码}
5 A; y* i, ^7 G6 d# Y
5 O6 t# j# q- a0 d2 l3 C5 p( @* ]&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}. E: e; M; `, ]8 \: X
Ha
+ f" j; N5 _0 `  d& E: O' l( d</code></pre>; c% z6 P& \8 K, r! O
<h4 id="252-switch">2.5.2 switch</h4>
% G+ S6 D& H0 i3 S<pre><code class="language-javascript">var day = new Date().getDay();' e! f% J9 F) z# S) X* m8 R3 E
switch (day) {
0 G* p9 f8 f, F7 ~1 k  case 0:
: ]# P& M5 J. T  G* b+ O  console.log("Sunday");
. H% |! ~  g3 Y, W  break;
2 O% M+ `2 y/ B9 _  case 1:2 R4 i+ T5 m# H. W3 T# `$ H
  console.log("Monday");5 w! ], }: Z1 B
  break;. [" H$ |4 p0 r# ^: C
default:# r  z! x! H$ N1 s
  console.log("不在范围")
4 A& I- g3 i3 Y+ W}* n3 H0 W. C: a( k
不在范围
( y% a% e5 n$ G9 D</code></pre>, \9 b( O( S: p! p- _5 \% U6 ~) Y
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>  s8 s. U" e" ^" \  E- A: l) ^
<h4 id="253-for">2.5.3 for</h4>
1 E- h) b) M1 ]6 b& v4 t' @<pre><code class="language-python">// for 循环
/ [0 ?8 v2 T, y8 D, t        for(起始值;循环条件;每次循环后执行的操作){
# ~% d4 a$ q; k        for循环体代码0 E' M6 y6 m. V/ }* }7 G& i# ^
    }, _( ~7 V, U' w/ F

% m+ x5 J# R! |- H, [for (var i = 0; i&lt;10; i++){
& ~# N& z( X; E" @: L    console.log(i)
5 ^3 U7 p2 g$ K}
7 i7 }! V& j& c" }: `        0
4 N5 h7 |5 x1 A/ W) \        1
" W) S: _' T6 ]* s; m        2
8 U* {( }, b- e& W4 Y        36 S& q1 \. Y- u# }5 i# b
        4# C+ Y3 a/ H& f3 u  L5 p7 S
        50 L, j- g* Y) X6 K; h* I
        6) C# M' D: a* A; V2 @
        7
1 K* b3 C; J- F- A! ]# b7 V        8
" A; O  T0 N& I, v: E2 G3 B7 A        92 L- R: d" v% J, p$ S4 Z
</code></pre>
; Q. \3 X! L. N; v% E' I, I3 f<h4 id="254-while">2.5.4 while</h4>
" d8 I) {0 L* \' ]<pre><code class="language-javascript">// while 循环
4 D# R# P6 ?9 v& d5 e3 t' T% t' l        while(循环条件){
3 \5 {* R+ s/ @1 W! Z# V        循环体代码
# k& v, u% ^5 ~' [1 B    }
4 \: u; a) C$ t7 t$ l* e% d3 `0 j* c" s5 W( |
&gt; var i = 0
$ G4 Z! E8 O7 B% h7 R&gt; while(i&lt;10){
7 S# R' e9 w* {& |' e1 x' [    console.log(i)
2 V! x. t! g( v# V    i++. \$ t6 t' G+ j7 w9 e/ u( }
}0 p0 w. |! `9 i: `, t0 |4 z( I
0% K3 z* y2 t3 U7 I0 K+ S
1
& H8 I1 L, p9 h" n2 x1 q% f 2; {& h, N1 N* l9 s% ~& v& B
3
9 O; ], D7 |$ D6 | 4
$ h+ {+ Q0 m9 ]8 e2 x% S: M 5& _9 S  I  f3 f$ s) Y. t/ o7 z! N- x
6
* O1 A* E6 [$ W7 ]3 G7 a4 J* j! [ 77 l5 f7 g( O$ C* O
8
. R, M: o& _9 s9 | 9. H- _4 u/ J5 V8 z: c
</code></pre>
% W5 M# i7 B: ?<h4 id="255-break和continue">2.5.5 break和continue</h4>; v7 `" y5 r/ Q" U
<pre><code class="language-javascript">// break' N3 U$ t# |. W& p6 e
for (var i = 0; i&lt;10; i++){
" @- h" F' U6 Y. a    if (i == 5){break}) {! v. K; T; o; [! W
    console.log(i)9 _# e& C- R6 A# v% p' r& l
}
# w' ^( Q0 V  l& L# ]+ i  r 0" E" C% C6 M! E
1+ F! \2 ?8 T) p; \0 |
2) ]; [5 u# B+ \9 T2 o
3- M/ {" V' ~* p" q5 c
44 g* _# c( ^/ x" h0 D: N
// continue
1 `* l" k, [1 I' R  g0 e9 Ofor (var i = 0; i&lt;10; i++){
' ?* ~5 c$ }- Q, m9 p    if (i == 5){continue}" U6 N4 W0 Y1 X9 q. _
    console.log(i)% O5 K1 _6 ~" E% \! W
}
/ x( s* R+ c3 z2 L4 j) ] 05 d4 W& s, `* v+ C. Q3 x' m! r% O. i
1- _6 U! N7 s4 Q
2, a0 P( g; v- r& P& R6 ~
3
2 k9 K) v- E% b7 I0 h' E 4" ?+ n6 ~! ]# u" J' C2 J& W' l
6* X8 j1 `" q' r. a* V9 g5 U( V6 q
75 U* H- M) k0 v; @7 |6 d1 b
8
4 w+ _! f  A, |5 f$ Y9 c. Z& I4 e 9
! K$ W* W7 _/ |8 F0 b& U& b# y0 V: P! s, ?
</code></pre>& @5 d5 ~9 o/ t' ~8 ^8 r5 G
<h3 id="26-三元运算">2.6 三元运算</h3>* t4 G4 @! @8 q6 R0 Y& M
<pre><code class="language-javascript">&gt; a
1 X+ s4 |% \& f, h; Z$ ?, B0 ^6
* F, b6 x, d* @9 e&gt; b
0 k6 E" U: {1 S7 X4 _, e; n% w4 c39 p  V* R# B4 S: p8 m
$ p! \( p! J' n$ X1 v  z
//条件成立c为a的值,不成立c为b的值
0 o( h/ P; _2 k6 J  q$ z&gt; var c = a &gt; b ? a : b
( p4 ]1 [# k" a: a: Z&gt; c
5 ~# P$ P' r4 B; Y6
# n3 \/ S3 q8 m- V
( B2 Y! ^) A" |# \1 U' ]  `// 三元运算可以嵌套( }1 v& ^6 `' ?# X5 b+ ?
</code></pre>- T$ @0 B6 T' G
<h3 id="27-函数">2.7 函数</h3>* n4 e: @8 r8 \$ ?; t7 k
<pre><code class="language-javascript">1. 普通函数
# w: o7 H* c" }3 C- M0 `% |. w7 J! @&gt; function foo1(){
0 _( c- n7 v9 _/ T) \, B    console.log("Hi")/ f) G) Z, z( y* ?7 e
}) s. n% }- p0 J' i- e- f/ y
/ f7 L* i1 Y5 Q1 D* M1 K" [
&gt; foo1()! O3 E' j  h  D
        Hi7 b! V6 X4 h  T8 a7 V+ o
2. 带参数函数
$ W' F% L/ _3 X) V+ I3 H" o&gt; function foo1(name){
+ N7 @+ @# y9 |4 ]# _2 g' E" y& M3 P  jconsole.log("Hi",name)
! ]- X, {/ b, @6 D# D* H/ q}
6 H8 K, p( t* E- t* B0 P5 W8 s
) d% ~" r6 K$ ^8 ^8 J&gt; foo1("Hans")
) j% P  X9 ~3 L! z6 tHi Hans
& A0 B2 u3 u# r0 H7 t
/ f) Z5 P4 r! I+ B4 t&gt; var name = "Hello": F9 j4 u6 S" |6 D8 ~
&gt; foo1(name)' U" k& J0 e0 D7 I3 Q
Hi Hello
( P) j6 e9 w1 S0 V# G5 i2 ]$ ]; `
7 P9 p2 v3 ~: }3. 带返回值函数
! @5 J/ y/ X7 R# C9 w2 t&gt; function foo1(a,b){
2 K- `- d9 v( u; Q        return a + b   
& S4 i$ x3 ?( L# l0 q7 f# I}# C/ i+ }5 O" }. N! f
&gt; foo1(1,2)5 I8 P) G2 m6 k( v
3
& y! g, M7 k- G&gt; var a = foo1(10,20)  //接受函数返回值) C5 O  ^( D4 y4 a( p6 B
&gt; a
( T" ^- W9 I5 l- A3 i3 l30
- n' f7 n7 y9 }7 z$ ^5 \' ], h; Q9 E( t# e9 P
4. 匿名函数# O5 i# p3 M1 Y5 N/ \
&gt; var sum = function(a, b){
: Z! S4 K8 {6 Q$ ]5 I  return a + b;% \# v/ U9 {7 h* z* u  _2 e+ E
}
4 q3 a7 U2 B1 i- X7 ~( A9 ^&gt; sum(1,2)  [  t+ P/ L9 o: y
34 i3 u6 {; g: c3 ?7 z; L0 S

' Z- P3 _1 @/ q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
( m4 L' q5 x3 k# W&gt; (function(a, b){
5 p3 ]" Q  `. \% C  return a + b, L0 X) M$ Q- P' `, Z
})(10, 20)
' T* O4 R6 b5 _; C* T; p301 Q% v7 d% r1 j4 [5 u4 x0 [3 f
. S* H5 k) c" d. `8 `( m5 {
5. 闭包函数
/ s7 k* U9 Z5 B0 i// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
6 _  N% B& i1 N, D* s9 `% Avar city = "BJ"
( f* i2 H6 Z+ Q; T  L0 ^/ Ofunction f(){
& _& K& t2 w# v: f# J    var city = "SH"
% a% ~4 T% U4 @; W+ D    function inner(){
6 g! j& b' u5 {& S9 B+ L        console.log(city)
$ E' g, S3 g) X    }7 s# S1 E& O6 }( V
    return inner  e$ _3 z, j7 Y# `
}# e5 @5 _- j1 k4 i7 w) A
var ret = f()
9 F/ b% t$ u# j; Kret()4 b+ s0 a5 Z  h; D6 R% u8 I7 ]
执行结果:
9 W9 T0 a' f% U1 a6 j8 a/ _3 VSH/ c. l  F7 g4 I- z) V
  [8 W, I, c' J. T+ z# v
</code></pre>
/ r  y1 O1 l0 s0 f% }6 f! g) d<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>; X  c* g, i3 y) a/ X
<pre><code class="language-javascript">var f = v =&gt; v;# K  O! ]# C4 _
// 等同于* f# U9 u# R0 z
var f = function(v){
! t# e2 a' n$ S( y! X9 m+ n& X- M  return v;
2 t6 m8 f* N2 G  G; P, u+ o}  u  U! r: p! ]' ]" B* Z& n* o
</code></pre>
/ S" o0 V3 \. M. B& c* Z<p><code>arguments</code>参数 可以获取传入的所有数据</p>1 t% i2 s6 F0 ^5 E3 t
<pre><code class="language-javascript">function foo1(a,b){  ?3 R/ p, J4 }- q4 Y
    console.log(arguments.length)  //参数的个数 ' L& J- e: c+ t5 M
    console.log(arguments[0]) // 第一个参数的值- j! T3 S' `) J* C
        return a + b   
/ y; X- O* {' v: K, F}
' b" A( j  Q* p, N) k( vfoo1(10,20)
7 f% A0 J/ f0 w  M/ F& D1 W  k8 ?结果:
' e" f& t- {3 `7 d, {% m+ L 2          //参数的个数
1 {" l. o2 o5 Y; A6 _) |: _( s, y10        // 第一个参数的值, o" r. ~9 W& N2 N
30        // 返回相加的结果4 ~: e( q& ~  Q( v) X% y
</code></pre>
: v, @# D$ B# o* ]7 X1 d<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
, @( i& H! {* m; g<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>+ a* I1 Z8 a- h; j
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>$ m, i$ B3 L# S4 z% e
<h4 id="281-date对象">2.8.1 Date对象</h4>
5 E( E) V  U* y- F4 Z8 ?<pre><code class="language-javascript">&gt; var data_test = new Date()
5 E. Z' @) e0 X3 L: M6 `&gt; data_test
! c1 Z( ]3 Q' N0 jFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
) G" a  u; {3 c6 ^&gt; data_test.toLocaleString()" j0 ~3 K$ w! q  U
'2022/2/11 下午9:44:43'8 w3 ^  o/ Q3 a) p: I) q

2 H9 x1 ^5 W& l9 Y! c, k&gt; data_test.toLocaleDateString()
$ N5 t2 U  t( E# ]3 Q; s'2022/2/11'1 r( d- r2 x& j4 ?. ?

% w" r& |$ `* P. E; g5 U&gt; var data_test2  = new Date("2022/2/11 9:44:43")! A3 G' O4 [$ t# N8 j, r, `( I: D
&gt; data_test2.toLocaleString()
9 R: s' V8 [& k7 V'2022/2/11 上午9:44:43'
5 t+ K! y/ s2 z/ J% U' O7 v! |1 ]8 q5 v9 p. V6 p
// 获取当前几号
0 P# I  M+ c* z" \' K2 b&gt; data_test.getDate()0 j2 }/ ]0 V6 X2 S; B
11
' p5 C1 ?# ?+ J  s2 L// 获取星期几,数字表示
2 F, M% T/ p" n/ H& B8 L&gt; data_test.getDay()  % m+ R7 z6 ]2 b. k" x/ _% g
5
, ]; o/ g0 J' W6 {; K// 获取月份(0-11)5 z9 S$ q) B* k' Y' \
&gt; data_test.getMonth()
! h' C1 y: T- p& M, e; I8 x/ _2 W1( ]  i5 B$ T$ `  ^0 X" f  b
// 获取完整年份1 b! U$ E! x3 y' k, T- W( N1 @
&gt; data_test.getFullYear()9 F: _! M% d) e! o9 t; u
2022: Q* N, v' m, n1 ]- }
// 获取时
( Z! j+ R0 O% }, o+ y$ H/ l&gt; data_test.getHours()
& ^6 s% O6 ~! L3 _; M7 @21$ p5 |% s0 t5 ~0 Z
// 获取分
  a6 H6 n8 i2 S  S. y. k&gt; data_test.getMinutes()
) v' c, Z* r& K2 `7 e0 \1 ~: n$ x* [44
0 [; x& E+ e5 b- X$ ^* M& G// 获取秒
- m7 Q$ ?3 t+ h: f&gt; data_test.getSeconds()
) f: z2 V5 _% l/ S' x' i43
, U$ K) G& v: l( v+ o7 y4 x; G// 获取毫秒; W( [6 N/ e) q1 H/ o9 g1 {9 x- |
&gt; data_test.getMilliseconds()# c- t/ }$ H# ^* R
2904 Z( E1 l& ^3 }
// 获取时间戳' ~; v" L+ C: c
&gt; data_test.getTime()
+ b' u# |6 `( x, q1644587083290
8 z4 x: ?) u& c* T$ `</code></pre>5 G  Q. P# b: |) J
<h4 id="282-json对象">2.8.2 Json对象</h4>
# p9 P1 X; F. V3 I* R0 b<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ |$ b* m& t- n- f9 W* ~6 FJSON.parse()  // 反序列化,把JSON字符串转换成对象
3 f  S1 N8 \! V% F2 }( I
( x3 u% V8 D  R5 S5 |. N3 F) L// 序列化
7 m! v/ S$ l# h9 e" O; k' e&gt; var jstojson = JSON.stringify(person)
; ^; [4 p4 \. P/ G$ U, \&gt; jstojson  * i/ p6 l/ e2 M; x- r$ J6 G
'{"Name":"Hans","Age":18}'
3 ^1 d0 T- K: o* u! s% i4 F5 ?* h$ Q7 Y% A" }
// 反序列化% A, ?2 z' _3 S& G
&gt; var x = JSON.parse(jstojson)
$ T- v" F& c$ d& H&gt; x3 t3 ]$ G+ P$ p( V
{Name: 'Hans', Age: 18}
' u# i' `7 C6 M9 W. s9 X& @% d$ d4 I2 m&gt; x.Age
$ e8 s& C4 e* l  W180 Y( Q% i- f# z$ X: ]% `: z9 v
</code></pre>
: K; a3 ]) u( Z4 W4 i  P* Z: R0 f<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>! Y) u8 N2 ?1 I
<p>正则</p>
+ R4 r! ]# a/ m<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");& o8 P) }9 f% ?' ~9 b
&gt; reg1* ~6 D: E2 E2 j) G3 ]! D9 M
/^[a-zA-Z][a-zA-Z0-9]{4,7}/0 u' ?+ U8 r4 @8 m$ u5 ^* B
&gt; reg1.test("Hans666")
5 l4 F4 t0 Z  R2 c# \( W( Qtrue8 ~9 S3 R; t$ v
) v8 v; ?' `. ?+ W
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
9 j3 m6 ~  }' s/ J. @3 u9 n&gt; reg2
% k- k, }+ H* {2 V# N( _4 M/^[a-zA-Z][a-zA-Z0-9]{4,7}/6 d4 k6 @, x5 s
&gt; reg2.test('Hasdfa'). j! ?- @( x; n7 p9 m, W8 \: D% A% I
true
( Y4 v& o2 m$ `
$ }2 c& w5 {, L5 g全局匹配:, o! ]4 l3 F# l) r
&gt; name- N7 e* {) G7 M7 J3 \
'Hello'( H- r, ~% w$ ^# W+ C- P* U2 T
&gt; name.match(/l/), {3 X; o# i5 |* |9 n" u' u
['l', index: 2, input: 'Hello', groups: undefined]* e- F. e6 k1 C2 `* n+ @3 A
! \3 B, V- g, e# s: @- {
&gt; name.match(/l/g)
: r5 o5 ]. h* w1 ^6 Z& p(2)&nbsp;['l', 'l']
, P. Z# l! t( d: {1 E1 C/ [4 Z+ _! |// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配$ f" L/ ?' A. x
5 e+ o  W* P! d
全局匹配注意事项:
1 W# b( y7 p) W, v/ J7 b( Q0 P5 w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
: T/ C. j# @4 ~9 @0 Q0 Y; S&gt; reg2.test('Hasdfa')
" s* R6 j9 p% G* q4 e* k( Ctrue) K# G- D5 b$ d+ T% a
&gt;reg2.lastIndex;
9 M. |1 @/ q  ~6
7 n# \3 E2 f- i, _&gt; reg2.test('Hasdfa')
, ]( Y/ M4 J# V2 `4 P3 e$ u8 Ofalse
  ^" F2 U3 q0 E+ [2 T5 o; _&gt; reg2.lastIndex;$ H, l8 ^. M, _+ ~5 k* Z# c
09 ^+ U  u" Z+ O0 d- r$ l1 s
&gt; reg2.test('Hasdfa')
; b6 _4 [; ?  S! C* Ctrue& [, N% v4 y/ A2 V4 |/ W. q! J) j/ X6 S
&gt; reg2.lastIndex;
% a' ^. K2 Y) X' K, z$ _+ x6# N7 B0 o7 N: X- b/ ~, B
&gt; reg2.test('Hasdfa'); j+ C7 o- L1 [0 p1 {- H
false
: \5 R7 y5 m* R2 I&gt; reg2.lastIndex;2 m1 Z; _2 S6 Z: X8 P
0
6 X* d& _4 p6 v' r3 {' W% }// 全局匹配会有一个lastindex属性9 ]9 N: n$ c: C' \, F$ b
&gt; reg2.test()
* o6 ~2 M8 m$ V5 h- ffalse8 ^% J9 g5 }; n
&gt; reg2.test()" P2 d% E+ b; B
true
2 E: B: n# |3 R// 校验时不传参数默认传的是undefined2 Z$ X1 T% E3 p- J' N' I! w
</code></pre>
# r1 R$ e5 r+ x8 t8 _<h4 id="284-自定义对象">2.8.4 自定义对象</h4>, B/ q' S0 q! `* o  Y3 S
<p>就相当于是<code>python</code>中的字典</p>+ u, v8 ^! e6 ~9 |4 x3 ^( H
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}. _8 X2 L( d! w; N
&gt; person1 d  b. l- I, V: r
{Name: 'Hans', Age: 18}
- R! ]* \! V* x: r4 E&gt; person.Name3 o3 \/ F( ^) H0 n
'Hans'
, G3 @7 [. s, l7 g&gt; person["Name"]7 w8 _- T5 z0 E; T
'Hans'
; k( b4 y( o0 L! P& q& I( v, o4 i
// 也可以使用new Object创建. g/ ~3 h6 O" _# ~
&gt; var person2 = new Object()- d' h) d% c' `4 [; A
&gt; person2.name = "Hello"
% c$ `' r  _9 B3 \4 {'Hello'
3 R$ _# n& E1 b&gt; person2.age = 20
8 y4 U- s1 f" y! D8 P203 M) b! f. D) x6 O
</code></pre>
3 c: H* W5 Q" @0 p1 N/ `* }/ A" H<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>- B2 [5 b0 D2 q  O; K6 _) t, o
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
0 s" l! ~( j, E4 ~4 f7 ^+ x<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>8 z( M8 L) \( u  P& k; w
<h3 id="31-window-对象">3.1 window 对象</h3>
3 f% M0 R$ y2 u<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
7 E+ V/ s# l% d; @1 D7 U) U<pre><code class="language-python">//览器窗口的内部高度
  ]0 K. n" B: k: r4 S3 hwindow.innerHeight 0 H: Y& Q0 s  ]% a. F2 U7 }% K
706
: j) E$ f9 d2 ^//浏览器窗口的内部宽度9 R8 j, x0 L0 m+ a: [$ }
window.innerWidth
9 o+ ~, E9 `) J  f* g1522
* W# K8 o1 P' ]  f, i3 T// 打开新窗口
: D& ^. O, s& q) w$ n& R8 b2 Zwindow.open('https://www.baidu.com')* q& V6 V$ A/ ?# f8 k8 N9 J/ f
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}4 m6 ?3 [# h9 O% M1 W. y% l
// 关闭当前窗口  i  t/ {/ _  H* m9 J
window.close()
0 `/ K1 }! D0 z5 T, F/ C//  后退一页5 n, M' y6 @  P% M9 O$ R3 _- v( ?
window.history.back()5 t! e+ |! s3 L$ v
// 前进一页2 \. {$ M/ u$ X5 p# `
window.history.forward()
; f+ N1 n; E# [+ g) t0 S/ s$ [6 @//Web浏览器全称
0 W5 [! x- B7 V$ |window.navigator.appName0 ~' r$ H6 r+ E* m) @& ?
'Netscape'
- q' a/ q8 E( D* o# \  ~5 t* T// Web浏览器厂商和版本的详细字符串
9 n3 Q. o& H1 \: a- x  Awindow.navigator.appVersion" p! j: `8 ]! y- k  ?
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" B0 I; a) l$ z: v; Q// 客户端绝大部分信息. t6 ]6 ~8 `! E9 X. t) A
window.navigator.userAgent
% T% r5 }6 u7 E+ U2 Y+ U+ g'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% k4 \1 m' \5 T. v, N. I
// 浏览器运行所在的操作系统
* X$ {* q/ C3 L* `0 `0 iwindow.navigator.platform
9 O/ t, \% o* B+ D$ n2 P'Win32'
' I# j3 D9 P+ I; l/ P! z9 [1 Q+ G3 \# I
//  获取URL
2 X7 R) q1 r: y2 w: Twindow.location.href
: U. |+ ?2 h- N// 跳转到指定页面5 C% s! _# Z, s- R$ I# a) l% j0 [& W) C
window.location.href='https://www.baidu.com'
2 ?. `; f# v2 t' Y. l' m( F* v3 d// 重新加载页面- h1 a) k; y; f
window.location.reload()
2 H# G  t% h. x7 m0 u</code></pre>
' i8 E" ]. n5 i) X<h3 id="32-弹出框">3.2 弹出框</h3>
8 l" j" i2 h4 R! Y2 }& x<p>三种消息框:警告框、确认框、提示框。</p>( t5 d/ ~! W; P1 Z! \5 L; ?" n
<h4 id="321-警告框">3.2.1 警告框</h4>
- F1 \6 i8 D: w1 z6 B<pre><code class="language-javascript">alert("Hello")) y, y7 A$ ]1 b/ B
</code></pre># _- t& {+ _7 g1 L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
4 s( Z8 t7 J2 k* T<h4 id="322-确认框">3.2.2 确认框</h4>
% a6 T6 q- i: k' l) U3 I7 I<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>! i4 d, e- i; o. z
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true9 i7 T6 c9 ]$ Y- j3 {2 t2 T
true2 u* y0 |8 N+ _
&gt; confirm("你确定吗?")  // 点取消返回false
  P3 }. j* O8 n4 F* rfalse) G; ^: B( z# K( U6 R; x
</code></pre>
$ a5 l8 B0 @3 y<h4 id="323-提示框">3.2.3 提示框</h4>
1 U/ O, X6 v: a0 y7 u( u6 B<p><code>prompt("请输入","提示")</code></p>
# G* E0 _& [! O1 O! U  o<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>  L: v$ u7 x. [0 E/ n! [( [0 v
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
* ]  S1 z7 x6 e* q! @4 b- ]<p>如果直接点<code>取消</code>后端收到<code>null</code></p>3 o- Q. z0 Y5 @; x
<h3 id="33-计时相关">3.3 计时相关</h3>3 ]3 [0 I0 I& ~1 u$ u& Y* X( ~2 R
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
9 A3 z& b, ~& Z3 J! x9 {# X<pre><code class="language-javascript">// 等于3秒钟弹窗! e9 j5 {" U" a
setTimeout(function(){alert("Hello")}, 3000)
' a( f& w3 O! ~$ \! {4 K7 |+ I: g2 w! C: U5 K
var t = setTimeout(function(){alert("Hello")}, 3000)
" @! U5 w  }- K+ C0 |: [1 ^# n$ a
5 i- {4 j& N0 G3 }/ V% o; H// 取消setTimeout设置; F4 {+ U; y; @' L6 X) u: u" c
clearTimeout(t)
; T- V' J  @0 p% F0 l</code></pre>
6 p2 G1 T3 ^5 }, z9 N9 ]<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>& y3 |4 z5 e, n/ j% I: z
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>& M/ M# m7 ~# C  d5 T
<pre><code class="language-javascript">每三秒弹出 "hello" :
8 u' ?. f4 x. G. N, p7 ]+ ]( ?setInterval(function(){alert("Hello")},3000);
; Y/ d* b# t# I$ X</code></pre>  N0 D: S/ L% m/ {/ [/ y3 O
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
: e8 P' x  ]% A1 b+ G+ i  h/ }<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);5 y0 ~/ W! d0 I0 ^8 ^
//取消:
0 p5 w* F8 |" @, hclearInterval(t)4 N: Y  M* P, {9 K3 }
</code></pre>3 T  _! [: `* Q, X* e9 y2 s

/ d8 c0 r3 C1 P; A1 J2 W2 ?5 m7 G( |
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-8 06:15 , Processed in 0.092013 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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