飞雪团队

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

前端之JavaScript

[复制链接]

8049

主题

8137

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

* H) G) F" a) w0 C6 z<h1 id="前端之javascript">前端之JavaScript</h1>& p2 O" T2 g5 M  ]5 k+ k! u
<p></p><p></p>6 e& |+ X: |% Z
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, k# R" c  G/ Q3 O$ X8 i1 [<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
- h$ [, @6 ~$ J% p它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
( b3 u1 B6 }* A0 Q4 U' {它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
) `0 a% G2 Y8 V' m# \* T8 T它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
# j$ |/ E' Q) U- H<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
" Y' U" P4 n5 H' }% o% S- R+ L<h3 id="21-注释">2.1 注释</h3>% A- u# R- Y4 D1 M- k! n
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
0 ^! |# J8 ]" s0 H6 p0 W% ]" x<pre><code class="language-javascript">// 这是单行注释9 b4 p7 l( ]1 ~; d+ Y! J& s
. ~2 `$ V' A0 f( E5 J8 b
/*  ?/ B. o0 x! O; F) ~
这是多行注释的第一行,
+ M8 K3 j' n. [  O这是第二行。, Y3 q$ j! h# ~& M9 R% f) O; z
*/# b, w3 `) h4 N: _) p- d
</code></pre>
2 A( k) z: J5 q% H3 q9 z: a<h3 id="22-变量和常量">2.2 变量和常量</h3>
# m" p  h$ C* ]; {% o( K. e) S<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
0 b7 ~  f/ ?, l  p9 S/ y<ul>4 M0 P" D6 b# b' d1 b5 G
<li>变量必须以字母开头</li>* D; E7 S+ K; n$ u& p
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>! z+ D  ?- Y: T& V! w0 b/ q  j9 d
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
2 c. k- q+ D! \3 I) I% Y: d3 W</ul>2 S& Q) K  I9 |  v
<p><code>var</code>定义的都为全局变量</p>* ^" R/ C$ y3 r& }  G+ V, V* `
<p><code>let</code>可以声明局部变量</p>
/ X4 A" c" v2 Q  H, e, I* y! T" p<p><strong>声明变量:</strong></p>
& m# q& [2 a2 B' x1 U4 @1 v) O; V<pre><code class="language-javascript">// 定义单个变量
4 t/ L5 b6 @- s4 N&gt; var name
! b" {# p" c) J1 ]( W' q- ~&gt; name = 'Hans'" m$ Q, O: n3 V
//定义并赋值
( I/ Y( L! Q- U* u2 k" Y&gt; var name = 'Hans'" s6 E6 U. m; {& \% q: N
&gt; name
1 \/ z9 Z- b; Y1 e" i* Z'Hans'
% h" a9 c7 Z  H" q9 \
% S4 z  C. o2 X0 h6 N$ R; b// 定义多个变量
! [: G9 F9 u) U4 `&gt; var name = "Hans", age = 18
9 \. _; k/ Y, A3 i, Q&gt; name/ k+ w' N5 j& `; ?0 b
'Hans'  Y6 }: t2 Y0 \+ p; D; I
&gt; age
2 j0 T! |3 g( |( L( \6 o9 s18
* X2 F9 Q8 |. K1 {3 |5 x6 R4 J: y2 o5 @2 S2 Q* i# p
//多行使用反引号`` 类型python中的三引号
3 b% \* g9 g& P1 B4 O, ?: j&gt; var text = `A young idler,- K: Y; y6 }  b2 V$ K. C6 _! C
an old beggar`4 a( w) {: q5 i  K: h3 I: h2 _4 Y
&gt; text* p. ]0 C9 F/ v0 \% h
'A young idler,\nan old beggar'
! J3 T) \$ w( x6 i</code></pre>% K5 B( ?( r8 h* V7 r1 Z7 P
<p><strong>声明常量:</strong></p>
+ L6 f! u& b1 T1 \5 ?: R$ z<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
5 v1 \1 N, y: L<pre><code class="language-javascript">&gt; const pi = 3.14
/ x  y7 `6 i# U3 T&gt; pi* V9 J# Y. L$ h6 Z7 P0 X
3.143 ^% c0 Y6 n( Z8 z# b/ Y. |" K' K
&gt;  pi = 3.01& H; C  j1 v/ |+ }- m
Uncaught TypeError: Assignment to constant variable." M6 g1 Z" F1 a; o5 K
    at &lt;anonymous&gt;:1:4
1 y  T  B) |' w0 ?6 [- s9 z1 ~5 F' h; R$ N0 ^  f
</code></pre>
# {; u" F' Y. }  R3 C# w3 P) @) y  r<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
4 z/ Z: J8 [1 Z2 {8 l<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>/ w- |, _: L  Q9 S* m; o
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
+ ~+ D0 I: g; k  L6 Y! X! G/ c<h4 id="231-number类型">2.3.1 Number类型</h4>/ L6 c  `3 j1 V8 P8 F; y& g
<pre><code class="language-javascript">&gt; var a = 5! }# u* s- N; m" o/ [1 W  E
&gt; typeof a   //查看变量的类型  
8 s9 n0 n1 v" E4 X- Anumber( @5 V" _' e: w5 N1 }; ^7 p; ?2 ]
6 x9 _+ W4 ^4 d9 _! M+ t& C
&gt; var b = 1.3& N. }, }) ?8 |" Q+ Q" Y5 P% P9 K4 ?
&gt; typeof b
: H8 G# {" p/ N  `5 onumber3 q4 p. v2 M5 R$ Z$ H' V8 n
5 v2 N; [% h! Q0 d) U5 h# P( l
// 不管整型还是浮点型打开出来的结果都是number类型0 u# M5 x. j7 W% G
; o  t4 s6 ^7 g% o9 v) B" [
/*: H5 z8 G% u% l
NaN:Not A Number
2 N5 ^' ~! ^- A: G8 oNaN属于数值类型 表示的意思是 不是一个数字% x. a; E1 K. u9 H$ S! u: W$ I
*/
5 U3 i( K* @3 `4 |$ p7 c2 l) G1 M, r7 V" n
parseInt('2345')  // 转整型: s( U/ ~) J0 M1 t$ @& j+ G
2345
% M& S) W7 D5 x* W# F* }8 _7 uparseInt('2345.5')& A( S, a0 ~* T' A5 D! I
2345
" o5 N, E' R7 y- s, h$ hparseFloat('2345.5') // 转浮点型
' F! }7 x* ?9 N2345.5
+ V" r2 `3 a2 H: Q4 y  P; u  C/ rparseFloat('ABC')- ^* G2 V0 M1 W  A" m; H6 {9 n& K0 F# I
NaN/ p3 F0 Y3 G- c& U2 T% ]+ {9 H
parseInt('abc')! i8 ?& {5 F3 u* {3 c- A% }
NaN
5 k; `& `( h- B" Z2 s% Y  ?, ?  Z; C</code></pre>, C9 Q4 h+ D% O( q6 d. @
<h4 id="232-string类型">2.3.2 String类型</h4>
- `( G$ A9 D! @/ y<pre><code class="language-javascript">&gt; var name = 'Hans'
* ?. S' y+ }$ H0 v5 I: C&gt; typeof name( v* w6 X# w' T
'string'  e& Q. z) ^) l8 m$ j+ |

5 f0 m* M9 s# w) W5 R3 Y  @" C//常用方法! K/ F* J; L; c. z* [" j8 W" b; T( H
// 变量值长度
5 H$ z8 R5 C- ?+ ?( ~( Q8 C&gt; name.length, y* F0 \0 V4 m# V3 d4 Q# v: ?
4
! ]. O# ~+ X$ H" j+ Y9 b// trim() 移除空白7 }( A* u; u/ l& U
&gt; var a = '    ABC    '- r  G- C! `. I6 s% f  g  v
&gt; a
5 n3 q, v8 \4 {( c  G8 |'    ABC    '
9 v4 p. X/ a; T/ J7 Q, g- t&gt; a.trim()
, O; [0 Y$ P8 v1 v$ M'ABC'- G- w( _- L; z8 i& ?) L! {# l
//移除左边的空白- m1 |5 Q# `) s# [+ H+ P9 t
&gt; a.trimLeft()
- [/ L  |/ W# u, A( ^$ Q* j; N3 v'ABC    '' M$ v; n& p- j; M3 p% H5 @8 ?
//移除右边的空白+ N5 z0 `  H& V1 k) O- d
&gt; a.trimRight()6 K* V8 y" p, {- o: S
'    ABC'9 Y, ?& `, y1 A+ Y

2 B! i" [3 E9 o, a/ J//返回第n个字符,从0开始
( l6 j# s0 B: c8 I" s  T9 f&gt; name* [9 e+ Q+ ^* F7 r% o5 H  t
'Hans'* l/ }$ Z7 z1 [
&gt; name.charAt(3)
; G8 Y2 x9 H" X+ N's'. V( i1 Z: ~6 S% s4 y$ x' E
&gt; name.charAt()3 `) f8 [  g1 r- B
'H'/ V: t5 G0 `# p! T
&gt; name.charAt(1)
1 L  G( z( N4 x6 x" d; T# ^'a'
( Z6 r. s) g* [+ f% j! L& S* C, X8 a- M, t) @; E( W
// 在javascript中推荐使用加号(+)拼接
! g# S/ n: a0 l7 u; ^: E! I&gt; name
; m5 |5 _; u+ u! \. S: H$ ^'Hans', k7 e9 v  d" _% a4 }! I: x- ]
&gt; a
/ I: `+ S. m% y  v7 I# ?2 O'    ABC    '
; `8 U4 V3 z0 h2 O&gt; name + a% ?- ^4 v6 u: D6 M9 a7 T
'Hans    ABC    '
. D& q( x4 R6 {' a+ F3 v// 使用concat拼接8 ?" y6 R8 o, R" o! b7 K5 {
&gt; name.concat(a)( P, K9 ^: e/ a5 n! a
'Hans    ABC    '2 v  y" I' H, F  c5 X: w! b
- z. z7 Z) X4 ~" V, [
//indexOf(substring, start)子序列位置' L+ X7 y5 V2 j, A7 U+ l

1 @, v8 e* G- s# q4 @- f" @&gt; text
8 e8 F  F5 n' `! U3 s, k'A young idler,\nan old beggar'
/ v4 t& w" x- s: q&gt; text.indexOf('young',0)
! p3 U( R" W# O% H* G# i  B23 r! T! q6 x5 v0 |- s
1 Y9 z1 l% C9 I0 \
//.substring(from, to)        根据索引获取子序列- z/ }  c7 I1 d1 e  [
&gt; text.substring(0,)
* {; e0 y) F# a: P'A young idler,\nan old beggar'1 U7 o$ M  K: Z$ w; \9 X  A
&gt; text.substring(0,10)$ u" d. Z: c. @$ Q' f* ?
'A young id'
& j4 X0 z% x& m6 q: }$ g) R# k0 `" ^# C5 U
// .slice(start, end)        切片, 从0开始顾头不顾尾  g- S9 X( ^7 P" ^4 {$ ?# Z
&gt; name.slice(0,3)
9 x8 b/ U% R# `  I) v( O: \8 C'Han'$ d8 O6 q# w6 F+ r# E; V0 t

1 R: x9 d# A! M5 R// 转小写
7 e9 {3 C! d) k% B&gt; name
- [2 k4 s5 b& U0 O* y7 B'Hans'8 M# z$ c( e1 n$ w; j% H- F/ `
&gt; name.toLowerCase()
6 j$ P3 S& `  W$ r( n3 L'hans'
" V4 J' c- M" ?/ i& u$ z" [5 d& D// 转大写
3 v1 G( W" H" h% W! j&gt; name.toUpperCase(). L0 k# ]* P* p3 q* _: |/ [8 O2 d
'HANS'
9 w- y7 Y5 H7 Q  l% Q6 a6 q: X- i# x& ?
// 分隔5 [7 z! `" }6 d
&gt; name
8 L+ e" s; N( Z& E'Hans'# E4 c% s1 r  O$ G' o  d
&gt; name.split('a')0 n: J# W1 L. S7 }5 t+ o
(2)&nbsp;['H', 'ns']
6 M+ J/ y4 q6 e! L; O, w</code></pre>8 {3 g' E' W- Z8 F2 ^; S
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>/ c" O- j$ [/ d+ I0 ]
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
$ o% ^$ }2 l6 r8 a2 q4 u<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
3 P2 @0 W, C/ t- I1 g+ J<p><strong>null和undefined</strong></p>) e% Q8 D' k8 Y
<ul>7 b" a: A3 ~0 v4 v* A' F/ J7 K
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>! Y( {! S) v7 ~9 u+ a( X0 O7 t- ]
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>. l4 }  a) I( X( J$ f8 c
</ul>
' u+ o5 S  y8 Q+ T1 s$ c<h4 id="234-array数组">2.3.4 Array数组</h4>" Q/ d# y# o' E: f! {" i
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
, H* Y: t/ B* ^) J; d<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
3 ?1 q* {2 E: A+ }2 z# ?2 T&gt; array1, S& J/ f# G  }
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" k+ D9 y0 S2 h) Q" K; l1 E
&gt; console.log(array1[2])  //console.log打印类似python中的print5 x8 i0 s- g3 O( L5 W
3
. d  {) O9 I  N+ @' f+ z// length元素个数6 M, E% N. H2 O* j( I
&gt; array1.length- E7 L/ y0 ^+ w# ^8 _& l4 h: h1 _) q4 V
6  X9 g# z& U9 u( D
// 在尾部增加元素,类型append* S. B$ `  j8 a4 ?8 C& V! v5 |
&gt; array1.push('D')% k0 x3 l8 T' }9 x& K
7
) y8 w8 m# u# Z' M&gt; array1
/ `3 A% w0 v3 c1 W  g5 d8 X7 k1 B5 t+ _(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
! h! D# Z, @% n7 K; m5 ?7 d// 在头部增加元素
0 j/ u  v/ c' Z4 B) L" x& J&gt; array1.unshift(0)3 M/ y7 |& p. X" c6 z' Q
8: L8 B$ j+ ?3 ^7 K9 i( o2 ]
&gt; array1+ n' t3 c7 `7 S& a
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
/ y' v  p8 X; R. D2 U& B0 O
$ j+ J& d7 f) U! v- D+ K' m//取最后一个元素
' _6 {9 _3 \: E( p8 {&gt; array1.pop()* I, y2 F7 i7 Q; K
'D'
- J5 P# }* B8 x4 H&gt; array1
7 m' z: {$ J- G( K' P! o(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']6 E; y, T! P# L
//取头部元素/ `% q- }; _. E- ^+ T, ?
&gt; array1.shift()
6 L9 s! f/ R3 h1 K& q0# |, c% G1 _- L* m0 N
&gt; array1. D  }6 O0 y$ F
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 e8 c& O$ U$ k* Y( U* P3 C
$ \+ C- A. c6 S4 H& c) j//切片, 从0开始顾头不顾尾
  [8 [4 Q9 T; ^" Z8 c&gt; array1.slice(3,6)+ M, ]$ A8 c! K6 |) I
(3)&nbsp;['a', 'b', 'c']
# V" U% C3 b' @// 反转8 k0 B( F+ k( q% t
&gt; array1.reverse()
4 c# k% d& V7 r, k(6)&nbsp;['c', 'b', 'a', 3, 2, 1]# k8 A! `( M- \2 t
// 将数组元素连接成字符串
2 S, Z) [, O3 h, Z. s( q&gt; array1.join() // 什么不都写默认使用逗号分隔0 A( A" h' L# S7 a# E/ [7 t0 C
'c,b,a,3,2,1'
# n8 c8 e( G/ B0 f/ I2 q&gt; array1.join('')6 x5 D8 j" J. E1 T
'cba321'8 Z3 z) F* V/ v- C" }
&gt; array1.join('|')
, b9 G( v! F8 Q' f* C'c|b|a|3|2|1'8 P4 D: y. Y" ]/ X2 X5 W( q# n
7 ^% ^+ c7 a# \  b& k' U
// 连接数组
8 A3 b' O3 D: f+ [/ {8 v&gt; var array2 = ['A','B','C']
- X" i- N# D( x0 B7 O&gt; array1.concat(array2)( J: q+ d' P  E, D& Q
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']2 L. h& b: M; l$ ?

7 V! u! M! K& Y3 S- S// 排序
1 ?3 }+ @% R( n; a( _5 }9 ^4 e&gt; array1.sort()
8 R1 D2 P  p& [/ E(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 t; y; K0 `& Y& j, R8 M

; n& g, J$ n' s- K& j// 删除元素,并可以向数据组中添加新元素(可选)
4 P% V3 |; ^. \3 Q&gt; array1.splice(3,3)  // 删除元素
- g% ]; p; `5 t5 R! G; D(3)&nbsp;['a', 'b', 'c']
( e, y$ m) w; f$ E0 X# m0 |&gt; array12 M; `# F' }% O- N& ^
(3)&nbsp;[1, 2, 3]
# W0 M& ]/ R( U5 {) Y. d# N( W( T&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
' |- J6 i/ g: }* N. H[]
5 p6 c& l! I8 W4 d* n/ ^; S0 Y; t&gt; array1% p' A- `+ Z/ a
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']7 G# G, b$ h8 D
" o7 m2 B2 x! K1 S0 J
/*# X/ p3 d' ?( i4 q" K7 H
splice(index,howmany,item1,.....,itemX)
1 {. z* x3 _; F  @' K) l0 sindex:必需,必须是数字。规定从何处添加/删除元素。
4 v% }) c! O& ^7 a! {howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。# e- A3 S/ X1 _' r5 g+ Q
item1, ..., itemX        可选。要添加到数组的新元素0 I" Z4 x# a8 \2 m, e
*/4 D- O/ H7 N( S  Y/ t

# S/ f- N1 }2 f1 N- F4 x! G// forEach()        将数组的每个元素传递给回调函数
/ x, l/ v7 m, B. x9 g# }3 Q, p&gt; array1.forEach(function test(n){console.log(n)})
& U, J0 ?' w4 n5 p 10 b+ r6 c& ?( k  s" a0 U' p
2  O1 b% e, Q: K
3
3 O+ ?2 \$ O+ D3 {: ]" l A! L7 e# ?0 L) R8 u' n4 E3 K+ t
B
! @0 f. @  r; V5 N3 _ C* |, o& E+ s" G; ^( ^6 R$ v
// 返回一个数组元素调用函数处理后的值的新数组
/ p# |0 ]: T( T5 f&gt; array1.map(function(value){return value +1})# j) ?) G, e/ B( v# @) Z! p4 C, z
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
9 @* D5 M) u6 p/ S9 y9 z</code></pre>8 R% O/ P5 L; ^; e5 _/ I: w7 O) e
<h3 id="24-运算符">2.4 运算符</h3>6 c4 \% e0 ~; F* {' u
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
  J- U% y# x  z/ s0 c! j: L<p><code>+ - * / % ++ --</code></p>: e3 x& L6 u8 }8 J& B8 `' t
<pre><code class="language-javascript">&gt; var a = 6; ~/ ^- P4 L3 K) g0 w1 k
&gt; var b = 3; Q  w; N0 N& P! t, ~  n
// 加, K7 |: ]! W- R5 W0 I7 T) l
&gt; a + b
  d. @3 [- a6 o- r9 U7 Q9
4 h3 n( j# T4 T// 减
3 A' G: H) [; \" w* R# Q&gt; a - b
- U% V: Z  A8 L2 f% ^2 f* B3% n$ o& r% }5 a; t9 w% q4 K
// 乘3 l% j" |2 R: D) C
&gt; a * b
3 z9 b0 G: l" {' a18& [6 b) q5 j4 Y, v# X2 Q- W7 n
// 除
& ^( J( z/ ?" [&gt; a / b
0 T4 Q" U! B+ w2/ a) F  N* P" i& Q
// 取模(取余). h- s' O8 `' w7 t$ Z
&gt; a % b
' J: S* g* B$ M0 ?0) D. e3 e& F+ Y
// 自增1(先赋值再增1)9 u! B9 m% W+ o% P1 @4 M. \: n
&gt; a++8 W, C: `! y8 U0 K) I% }& N( ^
6# G  r/ [6 p- n* v
&gt; a: H# h6 |1 O2 f9 Q# @# t
7& K& V, R, L5 z( p7 m) x
// 自减1(先赋值再减1)# |  z4 l! o' @0 K
&gt; a--
$ f* v5 P& s3 m/ t! C& n7 j7
% c; |+ E+ C- n+ e8 V&gt; a5 U$ [7 F* y" w, M1 r: k
62 y7 y/ ~! {3 u. c$ o2 s/ [* G+ `& T2 i. N
// 自增1(先增1再赋值)
5 f1 P2 n; o1 y8 k/ r&gt; ++a
/ H- J! ]" V! n! }* f7! N( r* o" m; [* t' i! Y6 T, f
// 自减1(先减1再赋值)
3 L' o& O& ~0 A' T( f&gt; --a8 [5 o1 h8 c2 }
68 P( z4 N6 X/ f% L: y( x
&gt; a
3 c( g' t. {: s( f" ^8 Z6 V6& M, d6 T# M7 \8 f9 K# l6 V1 e

9 o/ T1 i* `" g5 K) `//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ ^4 J3 s" ]* K6 \+ F* p</code></pre>
% P3 r' y$ C' S1 L" c, C<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
) }* K5 H$ y) Z& @0 x<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>5 W/ D1 F  Y; V
<pre><code class="language-javascript">// 大于0 z4 z/ O* I# w
&gt; a &gt; b, I/ G' h) w+ X9 I9 \6 f
true% W6 [5 i1 y0 }6 t% k
// 大于等于0 O: w3 Q& l- Q5 T$ Z5 K
&gt; a &gt;= b1 K( j# \* K. R& Y- g
true  u6 z2 w* b8 L) a
// 小于
2 h& e1 _# p; y' G! z* F0 W! u&gt; a &lt; b
2 @' T1 z% v* ~& h& p( _false2 j  ?& K% M4 c$ Z" @
// 小于等于
& S. y9 h! q) z&gt; a &lt;= b
+ f2 ~( G( m& p- Kfalse: j! O& [: O# |
// 弱不等于1 y' x  K$ ]4 M: }
&gt; a != b9 R9 `# C- e( @
true' v' L& w# v1 B- y! T8 p
// 弱等于8 e- E1 O$ H2 ?+ U: b
&gt; 1 == '1'
4 f' c$ {& k, j) Ytrue0 s$ u- E8 l' T1 ~8 V3 L; Y  w  W
// 强等于
/ a- F* h* _( G4 [* `3 D&gt; 1 === '1'4 N; I% [& {5 i& S0 p" E. g: F
false- e9 L2 e' Q7 c8 _: H
// 强不等于
: u$ W# H4 y, S7 e&gt; 1 !== '1'
9 s2 D4 ^# `9 qtrue
- r  h. c. C2 a/ G7 X: P, w( y
# c  d% v7 u' c7 i. D/*6 O8 l8 @" l' N( ?& I3 x! w
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
, E' @0 e$ i( C6 N% L9 Y! Z/ S7 e/ c*/
* N% d( Z* f2 ^6 R</code></pre>
5 o; r2 ]" F/ M<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>- ^) b# K8 I0 v& _# d3 f
<p><code>&amp;&amp; || !</code></p>
" L6 z/ ^. J+ }! j<pre><code class="language-javascript">&amp;&amp; 与
" i( p3 S' R9 h) U. k! g+ W  e' J|| or
: n6 `. w0 L8 ?- b% A! 非
9 l7 T$ w% @. k: _# I$ C+ c</code></pre>
  \/ l5 C" }: |' O# U" I<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 R/ ^- q) c+ o* s  }  a" H. Y1 ?
<p><code>= += -= *= /=</code></p>
# O9 f" z- |( n, y, d! u<pre><code class="language-javascript">// 赋值
/ h) M  p* Q8 A* B  e7 j&gt; var x = 3
, h* N# _1 O' v  @// 加等于
6 b3 ^6 C5 E( ]; D7 Z&gt; x += 2# \% c/ d9 w. E- F/ J4 d" k; R
5
. x9 ~7 G4 A0 l6 W// 减等于" X( `) A$ p, a& J5 q: @9 ]8 N
&gt; x -= 16 l$ t- C( ]! m, ~) [
4
2 l7 I' t% c6 A// 乘等于
0 k# B& Y0 `  u1 F. c4 c( s&gt; x *= 2
  g, n% X( n7 y5 |0 E& z, ?8
" N6 G5 y9 g9 d0 i9 ~// 除等于
$ L& `) M3 D1 T&gt; x /= 2& l0 Q9 M( W4 s/ d! z- Z5 a
4* U7 U0 G+ |5 K& R( Z6 J/ j
</code></pre>
3 o' R1 A, t: c4 z9 x0 e/ \4 [<h3 id="25-流程控制">2.5 流程控制</h3>
' E/ K4 m6 `" [; |( L" _9 t<h4 id="251-if">2.5.1 if</h4>
) p8 \) Z0 `2 T* i) m<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
: U1 W; g: V1 s' A- K% }/ I& E! Y% D
&gt; var x = 3
. I3 ^  x7 ?4 W+ w4 I9 `1 M) O7 d2 ?&gt; if (x &gt; 2){console.log("OK")}( l3 p, e9 w1 i0 p) `
OK
0 y4 r8 ^' C: v' e8 V, E  A7 ~3 H; t+ E0 m8 f- q- ]
2, if(条件){条件成立执行代码}
9 J- X# s* J! P        else{条件不成立执行代码}4 X! H8 `! Z5 @/ @5 A$ J5 }

5 P( n$ o5 m0 a( Z" V$ Z&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
- r% S/ V' M3 u' h2 H4 ^& E'NO'
- F- k. y" R  X
! n& M- u. K! ^6 K/ t4 m. w3, if(条件1){条件1成立执行代码}
% e4 Y- I8 Y' ?$ q- M# o9 e5 B        else if(条件2){条件2成立执行代码}
2 O9 Q; n8 q/ F" T8 F  J2 ?    else{上面条件都不成立执行代码}
; a' Q" n2 E4 v1 v2 ?" o5 ?8 b
: ~2 M5 T7 Y$ Z: ^&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
: H4 s; J6 G. @  M Ha6 w( v  L3 J! E1 [: d) [
</code></pre>$ {( Z1 `4 X. ?( m2 R
<h4 id="252-switch">2.5.2 switch</h4>
) x* f$ P  C6 l8 y( m, P<pre><code class="language-javascript">var day = new Date().getDay();
4 ^/ L) S5 h+ n) p+ c" Dswitch (day) {
  B: ^# J% `( s# c, c  case 0:9 v% M3 ^( [. y/ s  o# H
  console.log("Sunday");
; |3 I8 K7 J5 s5 c4 B5 J  break;, C6 m5 ~  }4 C: N" q
  case 1:. e% E' S0 s" O9 S* C7 o6 `9 H
  console.log("Monday");
8 Q+ p4 N3 x1 `/ H; f/ w  break;
3 K( U, f' p, x3 m, \9 w. U4 _- Z& Xdefault:
# l+ I5 E1 m# ^" w8 b9 l( V+ X3 v  console.log("不在范围")
# m" l+ p; ]; T3 n# [& x: ]+ ]}
% R5 r9 g, D' a" f7 L0 Q 不在范围
/ ]  o& t  v6 T, \</code></pre>
4 J0 T1 M# b3 y0 U8 r<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>" u. t" _/ C7 k( m
<h4 id="253-for">2.5.3 for</h4>7 Q% o0 W( s  V: F. J: h
<pre><code class="language-python">// for 循环$ Z  x) b7 I8 g2 m
        for(起始值;循环条件;每次循环后执行的操作){  \' S9 [- X* z. A, |
        for循环体代码
; u+ ~% v2 {6 A/ D- y4 A( l( U# D    }
& B5 Z+ U( M' i6 q% f) q: M4 g
) m4 U. U5 c/ N8 f2 }" hfor (var i = 0; i&lt;10; i++){
  d7 ?( B: ]/ W6 w& e    console.log(i)4 }, `- N; p/ n
}
/ e* l/ r2 G) W  E4 `        0
/ D2 w9 d' ]) ]3 U        1' a1 f( C: z+ h; n/ B: a
        28 J9 F! J6 f5 d" {0 U+ ~
        31 Y! Y$ Y  l# P0 V
        4- ~1 l+ @6 M+ Y  M% G8 {: M5 ]7 v
        5
7 f6 O* M8 s9 _" ~        6
8 T1 j6 s8 S) K' s        7
8 G- Y: B% r+ n  K        84 m. W# J4 E( [0 }8 P" {6 l2 `
        9
. z! ^0 B# _- n. U" e8 P1 s8 v</code></pre>
. r. B" S& V% J1 N<h4 id="254-while">2.5.4 while</h4>
6 ?1 A3 }9 R. u' D7 H; g. T<pre><code class="language-javascript">// while 循环
% ?' Z  q1 o! ^" ]% u/ M        while(循环条件){
  F* z. C5 O8 R2 o        循环体代码
+ M- J3 I: X% x+ _; _+ B    }& X  I& ^, Y  j: K$ I- T0 ]
2 ]* m# V$ L& x5 r
&gt; var i = 00 T% d2 p+ n; V
&gt; while(i&lt;10){
; R0 S# u! c" o( a% _/ j2 B    console.log(i)8 w8 q5 T9 e( t9 Y+ J
    i++
* \; a$ ~( H1 Y- n7 f9 r7 Q0 V% }}
; F$ C# p$ o. ]7 a7 J 0$ |5 M: M1 x  ^# m
1
. q8 ~7 O) F1 U& W 2+ q/ X# ?* B# g( _
33 P6 d* i$ y; h- H
4
8 i+ o: w/ M8 N9 y$ H5 E 58 o9 g# s, ~! K0 `" M, D
68 Y% Y' `+ F" y9 c% D
7$ b$ [; ^1 C: N, T7 Q/ y! b
8+ o% u5 W7 a; d4 K9 A
9: {: Y# [, w/ g/ p+ M! ^4 ]/ x6 b& A
</code></pre>
0 f5 ]7 m- w. [<h4 id="255-break和continue">2.5.5 break和continue</h4>
5 ^: C  A% Z5 y- r<pre><code class="language-javascript">// break
3 B2 G; R; L8 G- n) V' N, hfor (var i = 0; i&lt;10; i++){1 g9 ?' F9 ?. {: Z
    if (i == 5){break}
. H) q) r. a) \9 ]' k1 r    console.log(i)7 A5 f& q/ c2 H1 A6 M
}
) T2 i# ]  A! _: N' n  j 0
; x/ H4 j: {% ~- N$ f+ a3 i) I# F 1- V/ B- b* ]1 D* B
21 c$ E- |- R, y! f) ^
3: P3 t& P/ [: `2 k# |
46 N/ J: o. U" `/ d! O
// continue
; A  `7 _* z0 wfor (var i = 0; i&lt;10; i++){
. f/ B/ N9 h2 E, H; @3 p4 n! G2 [6 y    if (i == 5){continue}
  J! _( ?2 |9 ]7 Y$ t& A    console.log(i)% @* Q! u/ A; G, A
}% m3 O+ }% u6 W3 |0 _3 Q6 }- z
0
! O/ l( w: ]8 \7 Y 1& D3 O0 D- c" v: Y! |  E% g
2
/ E# A, x/ k$ u. h" ? 3- i2 t; L5 }, V7 o
4
3 V& Q5 U' B! @3 g5 U6 J 6
, Z- [! k+ T) b 7
  X4 r" ~  {; s" G0 G" a0 |4 F& l( \ 86 m: N7 v7 @. q9 `2 G2 p0 \
9& a9 a4 E' E8 U- r0 N4 `' m

3 P& j1 F1 W) f" l3 ~$ p- G) w& F</code></pre>! `! M. s+ ^& r# a& P: g
<h3 id="26-三元运算">2.6 三元运算</h3>
! i, Q7 e/ }% {<pre><code class="language-javascript">&gt; a
9 Z* [. I$ r  Q9 P3 Z- @2 ]7 d65 m9 L/ k7 k( P8 `# e$ H
&gt; b
' `8 L+ y: R4 t; S' N) A& H3* p& t" e9 X& j, @4 R* c, }

2 l3 l* f% ^: f9 I% z, U& G//条件成立c为a的值,不成立c为b的值
) j2 a& _7 ?# w7 }5 c1 T, J&gt; var c = a &gt; b ? a : b
" W3 R6 B" N$ m/ g&gt; c- A8 p# P; [: U! c6 C
6$ U$ E& F! _* L0 ?! Y* Z1 x

& F( \- [" e" Q3 ^+ X// 三元运算可以嵌套2 N1 p  a# ^$ _8 w
</code></pre>3 D) b" N( M/ z* b) L
<h3 id="27-函数">2.7 函数</h3>- d4 f4 D/ T$ b
<pre><code class="language-javascript">1. 普通函数
2 c1 _# i4 |5 H3 P% {& y+ S&gt; function foo1(){
5 i% Z. C9 S8 c# }. a! t    console.log("Hi"). v+ Y, P# e+ H5 d) ~+ G* ^- j$ @+ V) c
}' B9 f! T$ x! m  l% A% u
  m+ C6 ]: s7 c; [( w1 e
&gt; foo1()7 j3 Q* R9 y8 v& C' O( B
        Hi. i4 s# l- m& n9 X) b4 q
2. 带参数函数
+ u# [; i/ B4 M/ t6 [, v) t6 T% O&gt; function foo1(name){+ ^6 e- B6 U! S8 d- W
console.log("Hi",name)
3 s% _; T$ J. ~) J& U" ^' x- J$ {! T}
" Y: z- F- B0 i8 j" W# [6 Z+ X# n0 _6 R: C, p4 v
&gt; foo1("Hans")
2 |( Y0 N1 X# Y& g; \Hi Hans4 Z* r8 J9 ^; D& V% ~- P

3 i) y" Y: V, ~) e/ r- r&gt; var name = "Hello"
. q" g% M* A1 Y  u8 Q( @- u% c&gt; foo1(name)
& J4 Z- f3 `) ?& m; ]5 aHi Hello
  Z% {" `$ Q9 r9 c6 Q' c& r4 A$ f
: D7 |4 }" Z9 Q. [, S$ C# C3. 带返回值函数( F. j$ r9 T; m1 _' |" L9 O
&gt; function foo1(a,b){5 G9 N# k6 b6 Z/ p& Y* @/ U" x, q  C
        return a + b   
- y+ B; I; r8 T# a0 K}
- w% w5 z( W( ^; |% C# a&gt; foo1(1,2)& Z. y. e6 @* L# r
3
: s  A* m( M: S5 W$ e/ j- L8 k+ n$ W&gt; var a = foo1(10,20)  //接受函数返回值
3 v, A# s9 M* Q1 m) K&gt; a
4 j& S; W" s5 K+ I# g, F30
( G  |/ V& h1 R2 ~! V+ t' ], }: G7 ~9 B- G5 o0 f$ j5 Q
4. 匿名函数9 [1 E' C. B: u7 Y' s
&gt; var sum = function(a, b){
4 m' p% P. I$ Z# Z, S9 q& V  return a + b;# e  {. a) z' u8 _+ C% A8 J1 ]
}
* W1 n& d9 K; d4 ~; |  A8 u4 J) |&gt; sum(1,2), B* A8 w! b% v/ ^, A8 X8 }
3
% A" b* Y8 Z2 c7 H& E$ e1 C
# m& @$ |! G5 O+ L: d// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
" U3 O6 j/ c' A&gt; (function(a, b){
, E9 `2 E. s5 L, w$ A  return a + b
$ C, {# T3 T( R# q" k! i})(10, 20)$ o. F4 l8 a' _; W
30$ z5 L* {& O. L- G) T
* H  m( |* U' G- c' H
5. 闭包函数) e3 b- D6 h& e$ i9 ?" F
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
  U& q) V# ]! a6 a% V4 ]  Lvar city = "BJ"' `- v% u8 s' l& v) g& c
function f(){) d2 V" u2 C) }7 V* n. F6 F3 E! [
    var city = "SH"
% F- M; v0 U$ j5 S    function inner(){
* i& u3 i! Y' H5 S        console.log(city)& E# z- ~& k- ]3 ?4 ^" F9 x! p4 C
    }" C, w% m' }' w9 ~: L# _
    return inner' r8 H# @* v% O) g
}
4 c* k* i! l! D) n8 ~var ret = f()2 q; b6 I% b. Q  S
ret()
3 K6 F. A5 v' a3 `3 F: R% ~4 M执行结果:  B* ?+ m7 c1 Q  [
SH
+ j6 u6 R: w, d5 t! H. a1 h+ |0 t/ H# W+ s9 Y; \% U
</code></pre>  U% i8 k( B1 m0 ^/ S) o: W
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% T; A$ z3 m# B% w3 N<pre><code class="language-javascript">var f = v =&gt; v;$ @2 f. o- q* ?+ e3 P, C' U5 x" Z
// 等同于; {$ L& p8 ]4 d
var f = function(v){
2 |2 m8 c) w1 w3 a/ A  return v;/ r* F$ o6 C. \, t6 D3 f/ g1 e
}0 c6 E3 G! ]( `8 t7 Z( h7 Q$ B
</code></pre>5 ?% j/ U  O$ M( E' ~
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
2 i% W6 H5 t! ~4 a; j<pre><code class="language-javascript">function foo1(a,b){1 S) Y; h- i, f
    console.log(arguments.length)  //参数的个数 ) o$ @0 M, m8 o. \7 l
    console.log(arguments[0]) // 第一个参数的值
/ j& Y+ y6 @$ v        return a + b   + V7 Z  @& |- {9 \' I; X# e- N
}
1 E3 L; ]2 a4 u, W' _4 pfoo1(10,20)' r4 R) ?9 n7 z- M- Z1 Z; h
结果:2 l. E) t0 J; u2 a" G; w+ H5 ?( S
2          //参数的个数 5 U6 T$ \  r- b; T  ?9 `3 q# {  b
10        // 第一个参数的值
) |5 Q/ A7 k8 l" `& I5 [4 n30        // 返回相加的结果
7 N3 m) C/ Y. [+ O</code></pre>. G$ \- \2 F# e! p# a
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>( [0 U- R" \" j* a3 E# {/ r/ Q/ ?1 V
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
- }9 Z. g: g, f/ B8 |<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>  r8 H1 D7 k5 I% \
<h4 id="281-date对象">2.8.1 Date对象</h4>1 S* R8 B# d- G7 `
<pre><code class="language-javascript">&gt; var data_test = new Date()
: R2 |* Q3 k" k; t0 n0 e! z&gt; data_test
5 p1 t" J' k# @/ `Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
" \0 y. \/ F' P7 `&gt; data_test.toLocaleString()7 K% F/ I. P) k2 b4 T
'2022/2/11 下午9:44:43'7 P4 N3 |0 a# p2 `% ^& A7 F
* h# `3 a/ @2 j* n
&gt; data_test.toLocaleDateString()
" C# }: _  Y: g. k# f# @'2022/2/11'( X; g/ ?4 Q, a! N# U$ P
0 _1 \! A, T  f, U: x2 d  c: B" p7 v
&gt; var data_test2  = new Date("2022/2/11 9:44:43")$ P5 O( ^! A8 {
&gt; data_test2.toLocaleString()
% F! b* p4 n" N; k& Z! [) i: S'2022/2/11 上午9:44:43'% X8 ?  @% v6 X% \  b
0 B3 [7 [& e* _9 B/ f7 F9 Z
// 获取当前几号
; Y$ K8 V3 b8 ~, v2 i3 D&gt; data_test.getDate()
8 G  `; X' I: \. q9 d/ H5 I11  `+ d4 V" W* s9 Q& p9 |" n
// 获取星期几,数字表示9 E8 Z) @# H. J! l5 a2 q, X
&gt; data_test.getDay()  
; r$ R) t0 m( k+ l+ ?! V5
0 ]8 f, q$ X4 x: @+ u; |7 U// 获取月份(0-11)3 a3 C! d' }; R7 x" ?8 }5 C0 W
&gt; data_test.getMonth()
) \/ D  I6 y0 w) C: f1& q% N. V7 j2 g- c
// 获取完整年份
2 @# {8 d1 s( V0 a, Z&gt; data_test.getFullYear()8 X3 q$ T7 B1 S) Z( H! v4 x0 U
20227 D" c+ s( _! t/ X/ W
// 获取时" N+ J+ F/ O" B9 v+ K
&gt; data_test.getHours()# l8 M9 K+ R( f2 n+ {7 o
214 H. x/ R! R* ~9 A/ a4 U- t7 X
// 获取分% r, O  k6 I4 ~& M8 ?
&gt; data_test.getMinutes()/ ^: i; {. Z: b* C
44
" V% |/ ?8 F0 p: j+ T  }8 x// 获取秒
: w" T2 r+ s& h  X- B, V&gt; data_test.getSeconds()
0 D( G) g) t+ M6 Y; n% w43
' {; C7 U. M$ G/ ]/ j" g8 \// 获取毫秒
9 y  k6 u, e; Y1 N- m  S3 p: e, h&gt; data_test.getMilliseconds()
/ X( B" f3 M+ W$ j290
8 S0 K$ f4 S$ o* u, L0 v; g# K) V, z// 获取时间戳
9 S1 D0 k5 @! Q$ ]&gt; data_test.getTime()
3 N8 J& Z) p# m1644587083290
; \8 Q* r4 m- t  e8 W</code></pre>
! ~9 }' d+ I, Z<h4 id="282-json对象">2.8.2 Json对象</h4>
+ b% y) J- ?8 S6 y8 d7 \<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串% [; b% L5 r8 C* A/ m
JSON.parse()  // 反序列化,把JSON字符串转换成对象9 N. w6 R" t4 w: ~  E" `& E% C0 K$ m
1 |* L: `/ I( ?& y1 G& z
// 序列化, i$ w+ ]7 b) ~- ^& w
&gt; var jstojson = JSON.stringify(person)
' H" F, h5 I% }( J&gt; jstojson  9 M% A$ i6 B7 D0 w, E* \
'{"Name":"Hans","Age":18}'$ l! ]3 n5 Y! w

* _* i, s8 H; d; R// 反序列化. S8 g# e; k- w( {* d$ n
&gt; var x = JSON.parse(jstojson)6 i% @- ^7 B* S) G3 [9 I8 C( v4 y: |
&gt; x& L3 l, f7 [+ M
{Name: 'Hans', Age: 18}
: ~2 j6 v: D- l( Z1 g" r) O&gt; x.Age" w9 q6 e# b/ x5 i& m
18) h. n. e+ L! v1 B" }) j
</code></pre>! J  c5 G/ @4 R8 m: g* J* c8 C
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>; b# f( k. C/ Z  ?% K
<p>正则</p>" A3 d- z. E! E3 }* ?/ C8 u
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");; O+ o- [" T* \
&gt; reg1
" T$ t9 k; v2 v/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 S2 ~. m+ G1 @  O
&gt; reg1.test("Hans666"). Q$ q+ h8 m. D+ @& m1 ]
true
' N: s2 ^/ q! E) x% Z2 e
' i9 i2 o9 c6 M/ t& K% L) K1 W5 j&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
! B( `" T2 E% N3 }( W( J5 y9 s&gt; reg2
* Y! l- c1 s! ~* ?' J! E/^[a-zA-Z][a-zA-Z0-9]{4,7}/& R& z9 d- x( ^
&gt; reg2.test('Hasdfa')! d( u! q5 T! i  _
true& z. _7 P1 E' w3 x  y1 Y- _! w

$ x% D) B9 S$ p2 A% l8 y全局匹配:
* w; z; Y9 K( L/ s/ E&gt; name, L! p: B- M( S! x
'Hello'
8 L& f7 q, [! i. V( X&gt; name.match(/l/)
6 ?1 r8 Z# h3 p['l', index: 2, input: 'Hello', groups: undefined]
( v1 c! \1 g! v) V% U0 \
# ^; j8 w" o; E&gt; name.match(/l/g)# D& t1 ?2 ?- B8 M
(2)&nbsp;['l', 'l']
% t" s7 b' c) d+ R3 ^// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配4 t" F7 y( d3 D& F- e

* K. P2 l: N  w) R  c, B全局匹配注意事项:6 N5 C' j) T# c+ T6 C& ~8 q% ~) ]* O
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
5 `7 ^4 T+ k& G! j+ r&gt; reg2.test('Hasdfa')
! p1 B/ z% |3 \$ R8 ]6 `true
+ R3 U! @# q( y7 U* I&gt;reg2.lastIndex;
4 \* X$ l; h7 L/ S, o* Z. O3 [3 R6
9 [% r, A; ^6 K9 U3 T" d) ?&gt; reg2.test('Hasdfa')6 V' @% A& v6 F6 e
false1 ~* @9 d( @" i1 T+ k
&gt; reg2.lastIndex;
! |( L$ Q$ \$ X4 H* P- I0+ \0 I3 ~7 G% [9 e; k7 W* h
&gt; reg2.test('Hasdfa')
8 A' n0 B/ S5 D9 n* ^true- G8 m0 `+ e  x# I
&gt; reg2.lastIndex;
3 `# h$ X: S6 a( j) F( [  u2 E$ p) [6
6 X& u' S7 b# M, b" w. H, t0 U&gt; reg2.test('Hasdfa')
) _( j, @$ t1 g+ J4 d: ]( nfalse1 E5 I/ t& S& w2 ^
&gt; reg2.lastIndex;
* w) u8 N' y' A4 i' r% {; y01 Y' Y2 p; L3 G1 B! F$ k1 ~
// 全局匹配会有一个lastindex属性9 A( m9 F% c& p0 a- K
&gt; reg2.test()
! r; d3 D& ]7 u9 ifalse
9 u; X' e, I$ [2 A3 Y&gt; reg2.test()( n" _/ U5 m0 U0 P# N
true
  H% R. d3 J) ]$ ~' W9 T// 校验时不传参数默认传的是undefined
$ n+ _4 U& ^" j$ V0 p1 s8 m$ B; Q</code></pre>
/ n( s8 Y# p+ j8 F<h4 id="284-自定义对象">2.8.4 自定义对象</h4>0 U* B" i3 Q  |! d+ L: ^
<p>就相当于是<code>python</code>中的字典</p>
/ Q& T, p( a5 e; p4 b<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 U5 Y+ y. T& u, B&gt; person
. D+ W7 O$ p, ^5 q{Name: 'Hans', Age: 18}3 ^& D& w8 z8 Y6 Y6 H% N6 e) G% P
&gt; person.Name
# v+ ~. o3 [% y'Hans'
% `6 p9 a- I( t&gt; person["Name"]/ h3 Z2 n' Q! u
'Hans'. ~. Y+ O) f6 z: N
. l; B+ F& I; i' B
// 也可以使用new Object创建, e$ Y3 ~6 x. h. e1 p0 B: k
&gt; var person2 = new Object()
' x9 G( L0 r- o3 w. Q- t8 r" K&gt; person2.name = "Hello"( S( L: l+ N1 P4 O! ^1 Z6 C
'Hello'
1 x1 L7 u- e( S0 p8 T&gt; person2.age = 209 _8 R- O7 w2 b; h- z$ h, T
20
, {0 v: E0 r7 g3 x# t</code></pre>
0 e6 W" e9 X  F+ A2 o9 m0 Q3 o<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
# X. `2 T* o6 ~" J3 t8 \" G! F<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>& i5 Q- R6 E5 ]$ H  I7 Y% ]; s8 O
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>, ~! b: m: S1 z7 h
<h3 id="31-window-对象">3.1 window 对象</h3>
$ A) a+ W, W6 S) ^' ~% I6 m<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
( u; ~+ x5 t3 l<pre><code class="language-python">//览器窗口的内部高度
' Z+ y/ V" s$ H2 L; Bwindow.innerHeight ( ]* I! d8 o/ O3 T7 |" f$ N$ n
706
7 O3 e8 G$ `7 x' d; y- S  \//浏览器窗口的内部宽度
: ]$ E6 Q: C" q; B/ r- h' Xwindow.innerWidth
, x' X, Z% n0 b2 u3 C& b$ l1522
/ P9 V' g& h0 U" i! v# T// 打开新窗口& }' O6 c+ f" j  `& m! x. ?
window.open('https://www.baidu.com')8 o, P& G  B: w! R  m8 A
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
: Y( c1 |0 @$ Y6 G( ?0 B// 关闭当前窗口
+ L1 f3 r3 K' Q5 s2 @window.close() ! U# p9 Q% X* S! V
//  后退一页
0 u2 `# I; G$ Q7 M' L0 lwindow.history.back()
- f3 i3 F5 _. ^// 前进一页4 y: P8 ^+ f/ U+ j# z. {2 ^
window.history.forward()
% h* M8 Q0 _0 s0 Z- O//Web浏览器全称1 ~3 `* ]* ]1 V; n, M5 T1 n) |  v" E# R
window.navigator.appName6 K# M; }& w# u8 k+ m) A5 K; Y
'Netscape'0 Q2 `! A: e' \8 N( G, ~8 A6 n3 I
// Web浏览器厂商和版本的详细字符串
- p( W0 @6 F& r( \1 c' ^3 iwindow.navigator.appVersion' p5 m, }5 ~4 Q
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
0 y* x- S. A: T+ i7 }// 客户端绝大部分信息5 ]) g1 T8 ~" d# f
window.navigator.userAgent8 {: D4 \. x: p& |. L. t, c" b' |3 T
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
! k& L* Y0 x2 ~' ^6 \// 浏览器运行所在的操作系统
) s5 z! {3 Q  w0 i$ b: C' C. T7 Lwindow.navigator.platform
- p/ ]6 ~: s2 B5 T7 u'Win32'$ T1 B3 K5 W+ q+ D  r* y" R' q

5 w: d3 {2 S; ~2 i- e; U8 w//  获取URL, d% v8 M# R6 u' h# X
window.location.href" j- S' H0 l% {& m
// 跳转到指定页面- t, T# q& ?$ B" Q5 F4 z9 m) P; X
window.location.href='https://www.baidu.com'! I; f  |" B& r7 Z% e6 }1 e
// 重新加载页面9 o3 O: M7 H( `( i+ n" I% y
window.location.reload() ( l: u' \. R4 k$ i
</code></pre>. O2 L& @2 [% i$ @4 S3 |. S9 @
<h3 id="32-弹出框">3.2 弹出框</h3>
& V+ C# D8 u  h<p>三种消息框:警告框、确认框、提示框。</p>0 A# v; m# Q2 U% }
<h4 id="321-警告框">3.2.1 警告框</h4>
2 a& q! G5 ~1 Z/ p. v<pre><code class="language-javascript">alert("Hello"); j  K* i3 T0 B
</code></pre>
6 ]  {- m1 K- V( N$ c. o" v: L+ V<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
/ t1 C" l% l4 D: e% I<h4 id="322-确认框">3.2.2 确认框</h4>
$ @) h4 c0 _/ j$ ?# e# ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
- w, T) `3 H( Q4 I7 s! K5 j; c& S<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true, x6 O9 p9 k- s0 `9 J
true
! P; [/ ?( R# R&gt; confirm("你确定吗?")  // 点取消返回false+ M5 _% H1 c0 w% k1 W, N
false5 B5 }' T: e6 L9 J& p
</code></pre>% ^! O$ S% _7 @# H4 j4 S
<h4 id="323-提示框">3.2.3 提示框</h4>7 I( v2 B! s2 H: d
<p><code>prompt("请输入","提示")</code></p>  c$ `  q9 k7 @# H/ k" _8 A& X
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
. X: S, y  O5 r' o5 j<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
* K. B+ O. K$ _: S; W1 k+ ^<p>如果直接点<code>取消</code>后端收到<code>null</code></p># H6 v1 |1 b, p8 Q1 G
<h3 id="33-计时相关">3.3 计时相关</h3>
$ d: l9 u$ r6 M6 b# ~, S- P+ W<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>2 X$ i% S2 B" h; G! {
<pre><code class="language-javascript">// 等于3秒钟弹窗* s  p# q. m( x
setTimeout(function(){alert("Hello")}, 3000)0 v! r) t5 u1 D# c( Z

) o5 `  W  M# b" s! j# p  p# Wvar t = setTimeout(function(){alert("Hello")}, 3000)
# C7 H, u  R2 b7 G6 T9 t+ @) X
9 o- W4 O/ j: N8 x: }& U5 Z// 取消setTimeout设置
4 i3 `4 Q& B- l+ O6 r% jclearTimeout(t)5 f' Y6 O; O" T! {( G& [
</code></pre>
; v- A! d, \3 C, @( j+ x5 k<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 U# Q6 `; m0 ^% P' W<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>; M0 x: B2 H3 l' _5 M
<pre><code class="language-javascript">每三秒弹出 "hello" :$ s! r; \1 V& M9 f2 Y! x' ~9 G
setInterval(function(){alert("Hello")},3000);0 c' F; {, N( F! S
</code></pre>5 `) J6 z: n  H
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
) A/ X" }! K3 Q! m( n& }2 C$ M<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);8 U: P2 U7 h& [" y
//取消:3 N9 \. e) K. @. q8 l/ s  o( f5 r6 O1 ]
clearInterval(t)5 j" _, t3 S" n
</code></pre>
8 G( ]8 ~# p1 s2 A, e( `3 N$ U) D* l' a4 l
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-11 11:06 , Processed in 0.070933 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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