飞雪团队

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

前端之JavaScript

[复制链接]

8062

主题

8150

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

7 v. ]" n+ C7 d5 h6 v<h1 id="前端之javascript">前端之JavaScript</h1>- U2 a' f4 c( n3 a, r
<p></p><p></p>
% W6 `6 C( T. t0 J4 e<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
* a7 T' \, o% L0 r% @<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>' f; \$ u; t8 |( e# _# a
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>: P  |; R2 U$ H! W0 w
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>: Z4 \( j6 s* L9 u" M1 c* U
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>: o, {' v1 R( ~5 }( |8 C
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
' r0 q/ b  `& X9 e- X<h3 id="21-注释">2.1 注释</h3>
6 U) I2 Y# j; N<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>- H5 C# e1 b  w4 V6 ^1 E
<pre><code class="language-javascript">// 这是单行注释
. j" f: d) p0 h% }* h% N
7 }- t* S5 @2 u2 k/ H% w/*% O6 Z/ e* n) O+ e: k" G. t% l" ^
这是多行注释的第一行,2 G) B" f: A* ]; i
这是第二行。
; V3 T1 g% Y% d7 y*/
, @) n  t% x. ~</code></pre>
$ `, u: _4 W/ i& {* m6 a+ ~4 A<h3 id="22-变量和常量">2.2 变量和常量</h3>
# f) m! C( |; ~<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>( v( r/ I% z$ \5 {* y
<ul>* t* P) Z/ X) b
<li>变量必须以字母开头</li>* L8 ?! d* \1 Z) s7 h) g
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>2 q/ \1 Y+ u( z2 p8 L- i
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>2 |- _. \6 q+ l% A* O
</ul>3 t* E5 l0 @( K1 ]% d: A
<p><code>var</code>定义的都为全局变量</p>2 E9 h; t; C# w9 e$ r' v
<p><code>let</code>可以声明局部变量</p>: c! X* M- R* G6 y
<p><strong>声明变量:</strong></p>6 ^  ?- b: d# d( n- e" {
<pre><code class="language-javascript">// 定义单个变量
2 s5 ^& ^6 u* w9 ^&gt; var name
" b( Y; k9 k6 P6 x$ A5 u&gt; name = 'Hans'
: C7 n9 m$ q3 y$ m0 M//定义并赋值# `6 W; L6 L4 v5 A3 v9 e
&gt; var name = 'Hans'
- t) S7 {& y+ a$ V6 x. c' f&gt; name
7 d" \3 l1 m7 d3 E* E' |; ^% L'Hans'8 l' f  ~0 P# V
4 M; A1 D3 ~3 D5 }0 M
// 定义多个变量$ Y: ]; E5 h1 N4 W* ]
&gt; var name = "Hans", age = 18; y1 m) r6 E% ~& w
&gt; name
: }" q; S! D: y% E8 R& i'Hans'
, H% R% {# Y1 `" Y7 Y4 i&gt; age
, i7 ~9 \2 k# {( u, e$ U" R* y18
- h, ~9 V" @1 n* `/ M1 u9 \  u9 R( _
& s( x8 Q8 O8 E+ l$ c# ]: X  Y//多行使用反引号`` 类型python中的三引号( w) v' X0 D. \: v; u" [
&gt; var text = `A young idler,. ?  v2 d7 l: y/ |
an old beggar`
5 _9 [/ f8 G6 Z0 _! n&gt; text
5 {* m' D' c' B5 X& }'A young idler,\nan old beggar'
) t9 w* E' [9 X! U3 ]9 j4 O" M1 p" |  F& V</code></pre>
+ B, e. x& A5 ?<p><strong>声明常量:</strong></p>( O) c- Q  N, F: H: U
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
8 G% M' Z9 T( o" z1 {3 ^<pre><code class="language-javascript">&gt; const pi = 3.146 l/ d. J  L) A9 D: [% }4 H, |
&gt; pi
5 b, R+ H1 K8 i* w* g5 `. x" e% i8 d3.141 O& S+ ?& p; P3 ]3 l
&gt;  pi = 3.01
% u2 _6 D& u8 X2 m' ~, y/ W  CUncaught TypeError: Assignment to constant variable.
7 U* A. E# X2 c3 J" p1 A    at &lt;anonymous&gt;:1:42 G: M0 |9 I- }( _" ?0 _& @

8 D  m2 G' y- S& }6 @$ [</code></pre>* \" u2 I4 t/ B- f
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>% D: ~& ^2 `" u$ f
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
7 g$ n7 u9 f. A6 m& k<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>6 i- Y" U1 r2 M8 ^$ W
<h4 id="231-number类型">2.3.1 Number类型</h4>
2 O5 W# s  u4 E* u9 ^  i; h4 W% X<pre><code class="language-javascript">&gt; var a = 54 U# I6 R5 S% d* ?
&gt; typeof a   //查看变量的类型  
6 n7 _, A$ ]" E: cnumber$ s9 X/ i, _8 u/ y$ H$ P9 b' i
6 `4 s% D8 h! `6 W$ H* s: V
&gt; var b = 1.3+ U" n4 J  P- b9 G! y# Q7 a$ W5 Y5 y
&gt; typeof b
, b2 K- u: w9 r! lnumber0 n* T5 o) ^0 }/ z5 B

$ t6 `! v* D& L, w8 U( c// 不管整型还是浮点型打开出来的结果都是number类型8 c* u4 z. \0 R

( U6 r& `2 X* X" h+ X! ?/*/ z- D" N, z5 ]) R0 Z* Y1 w3 S2 v
NaN:Not A Number
$ }7 z1 ~6 C. yNaN属于数值类型 表示的意思是 不是一个数字9 o  b" `5 M8 K2 _' g/ B
*/2 T/ s$ v4 }+ w- B1 _" _$ S* l
  a! ^6 g4 d, v  G6 |
parseInt('2345')  // 转整型
. @9 X  p: V# R8 g2345
# C6 |# ^% T: }2 ^. s/ iparseInt('2345.5')% |3 K  V! M8 H, B7 t$ `1 M7 |# \9 [4 n
2345
9 I, J+ l$ ~7 OparseFloat('2345.5') // 转浮点型: C- m8 o# q% ~- ?1 o1 D
2345.5
! \1 v" z/ `: I" x/ m+ AparseFloat('ABC')
7 D1 P. M$ ]5 F3 n# `% xNaN
! v2 s& c/ t  U# H7 `2 b2 Z& u# mparseInt('abc')7 A: _% j/ g8 Y* U8 Y' j$ j
NaN
1 L; Q# G* L/ V7 _" X, P$ y3 e</code></pre>
" ?" N" W* w& M* p7 v<h4 id="232-string类型">2.3.2 String类型</h4>' M' v9 L- w3 U# {3 e; s8 `
<pre><code class="language-javascript">&gt; var name = 'Hans'
# ?; T1 @2 e7 D2 A# i3 Y& Q0 i$ x&gt; typeof name
5 F7 |8 |2 R& n' S  E% [7 x. y, W'string'7 v# R/ [5 j' \" B/ l

+ S& V# Y% g. _( W8 n//常用方法( h/ {6 G# k. \& n9 g4 g' m
// 变量值长度& V, n5 a- Z0 m/ A8 n) G
&gt; name.length& h  j; s. Y) h3 C( L; D
4
, }) A4 b1 ]& F, B' R3 X/ b// trim() 移除空白3 V3 N' i, Q4 O! \8 c) s
&gt; var a = '    ABC    '
# U$ u& z5 f$ G&gt; a
# k6 L+ y% H7 l+ r; h'    ABC    '
& v- p  c3 W, ^. n: x- i4 _&gt; a.trim()
6 t, }0 }4 J0 s) K: W, @: L'ABC'; l( T& Z* _1 n1 x$ E
//移除左边的空白( M3 z, \2 {& _' C7 c
&gt; a.trimLeft()3 W  _( |9 _, {+ ?* D. o
'ABC    ', ]' X+ }; k  R& _9 n
//移除右边的空白9 Y3 U  s3 ?. ?- O3 P1 B0 f
&gt; a.trimRight()6 ~: j6 B& Y& n& F) w
'    ABC'
2 |/ z8 b5 Z! ?) h4 v9 c9 T0 s; t* j& K# e3 r' p
//返回第n个字符,从0开始
( W2 u% P$ T" `9 O9 p/ \+ U8 v& j&gt; name
% N: u" F, ^( x1 E) B6 |6 C'Hans'
: r$ L& Y9 v3 d+ ?# c& k" m+ K&gt; name.charAt(3)+ m/ F, n, A! w6 m* m
's'
8 I  A* ~2 M1 E% p7 o5 I; C  x&gt; name.charAt()
0 w! u2 M! P$ L2 a'H'
9 d0 _( S2 d! |" h$ P7 v) N4 _; i&gt; name.charAt(1)
& @5 p( ]: }% `* J8 M- h5 B  R8 t'a'' W, R/ `5 u+ T( {" I! \1 A6 @9 y

& A$ r' T; h8 i" S9 J- O// 在javascript中推荐使用加号(+)拼接
3 ?- |* r( x9 N! j- }) e& B8 c&gt; name+ l9 `3 Z9 {7 n5 G: t; D* G
'Hans'9 }' P8 D# M1 x
&gt; a) A; y% a; a) ~3 B9 t9 D4 Z
'    ABC    '. ~3 J. T' A! e5 `1 K
&gt; name + a5 J+ }5 g) i, v* q2 Q
'Hans    ABC    '
! b: p1 X! m5 m+ [. |* H6 F6 m// 使用concat拼接. K0 x6 ~$ b2 z- u% c
&gt; name.concat(a)
% A( C: Z4 J$ n6 Y6 Q# T'Hans    ABC    '2 f" @* r& ], t# A" B/ J  ?

, A$ M& a: ~. c//indexOf(substring, start)子序列位置4 p9 U6 T+ y& E  Q

1 ?$ S& a! c5 G0 W- b9 P&gt; text
8 t: [+ p5 l. ]3 D; A'A young idler,\nan old beggar'
5 Q$ r( E  I: M9 }1 t&gt; text.indexOf('young',0)( T4 Z9 u& a# U4 o; m
2. [+ n! k: T# e; b8 _
0 {, g" Y5 L6 ?* i  `( F
//.substring(from, to)        根据索引获取子序列
0 P0 o3 {- T# z& c8 |, c. [" b% L&gt; text.substring(0,)) O% F0 k( H9 V! }
'A young idler,\nan old beggar'0 A) U( O. J" N5 `; V9 m! R
&gt; text.substring(0,10)
; i' K; l) ]5 I3 ]) s# t'A young id'
& a. ~6 g. F, h& r# h5 [- n2 b# V0 s8 s+ f# ]  }
// .slice(start, end)        切片, 从0开始顾头不顾尾
4 c8 N& G# n! u2 r&gt; name.slice(0,3)
* M. E" i8 E$ r7 m'Han'
- C* Q$ l1 Z: A
0 x% r1 }  I) u* t// 转小写  W; L. u0 G& Y0 m* s8 F2 Z, h
&gt; name% y+ p1 s4 a2 m! U/ d7 ?. O3 S
'Hans'0 g2 Z2 s* U; E- E2 a
&gt; name.toLowerCase()
  b+ t' \% B: K4 B0 x'hans'
7 h" @) a& p, C: U  \// 转大写
$ {4 N; d9 ^2 h( t& S&gt; name.toUpperCase()
# s, w, E2 U, B'HANS'" |) L+ d4 W$ C4 ]& C
. f5 T3 F% ~9 \
// 分隔
. Y; ^2 \& {8 v1 b6 \' R; e# _5 Y&gt; name
1 q7 M( Z" U4 m2 F" u( K9 X6 q'Hans'! D  I' b4 X: u, R0 c7 [6 w
&gt; name.split('a')& u# ]/ _# _% H0 B/ S: e4 A7 s
(2)&nbsp;['H', 'ns']5 c7 h- N1 P7 h. }( K
</code></pre>
2 R3 X; z$ Z" w<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
8 N5 t) [! e# p- a  y4 ?3 ^<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
+ s& ~5 Y8 F/ }<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
+ y) j* W- `# M/ I* I- Z: H% Z9 e<p><strong>null和undefined</strong></p>
5 B4 N/ L$ ~* D, z) o8 @, G<ul>; O: U1 F' r; v2 ?4 B8 ~& d
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
0 ~9 \; h4 C- V) C: X<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>3 `% y) Q$ n/ V; n  D) J
</ul>7 B/ O3 {+ e; T, K
<h4 id="234-array数组">2.3.4 Array数组</h4>- m" {' l5 g  d& v  s
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>( Q; d( F$ S+ K7 a
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
0 L# x) s% z$ T7 s8 @+ X. `&gt; array1
) J; I! t. i% `/ A(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& s' T- v2 U5 W  n; `* S
&gt; console.log(array1[2])  //console.log打印类似python中的print5 ^+ }& I# |4 ^0 P* d+ q/ I# P7 c
34 @! |- \4 y3 Q' B: T
// length元素个数9 O/ q5 l% r" S  `" v, o& k5 u% ^. n
&gt; array1.length( }) ~5 n$ k! k$ o9 b$ j, e
6
% Z- a8 K1 h7 F( _- e) D// 在尾部增加元素,类型append" u" a. Y" d3 d% x8 j* S
&gt; array1.push('D')
$ L4 M3 ]1 p  H: _9 c7
" ~; M$ U! {& a9 m. b2 W&gt; array10 [6 K2 u. R2 a( D+ M% ]
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
/ _# a5 D& S$ R" G; I! D% E// 在头部增加元素
6 a4 Z% B. q% ?  n! C3 r&gt; array1.unshift(0)
, N6 v$ e+ ~3 B) r, O8 y8* F- q/ F5 h, @1 t9 Y$ C" d
&gt; array1' b; ~* N% Y) p" B% e- T' m* A
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
7 W/ e$ P- A0 x/ ^: [; Q( l5 r$ u1 {  D/ K. s
//取最后一个元素
3 s6 r9 l! G3 {  f* t& y&gt; array1.pop()) B4 H8 R0 b& [! |1 b3 \7 s
'D'
5 x5 `" z# K  ?: z! n! u&gt; array1; `8 L! N! Z- v
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']8 L) t. ^' [1 }, q- p: r$ K
//取头部元素1 O, W" G& D( h1 _) y
&gt; array1.shift()
) J3 V4 z' g1 J4 d0
( ?$ g0 h+ G6 k* o4 d& W! Z&gt; array1
6 K2 g+ l( |! H9 T(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 c0 y! G) L8 P6 h! `$ V  m  }  u) D0 _) Q, r: ]) R
//切片, 从0开始顾头不顾尾  C* E- A6 S* e% `( K' M$ N9 c
&gt; array1.slice(3,6)
, _3 q7 u- Q; Q: s" M( j(3)&nbsp;['a', 'b', 'c']" N% b6 U) X' r8 c3 n( T8 s, C  ]
// 反转5 v1 S4 H. U5 K# I, |# R5 \4 t
&gt; array1.reverse()
1 L: i0 j- v7 H) [: u- |3 n* }7 @% o(6)&nbsp;['c', 'b', 'a', 3, 2, 1]: x0 v6 E0 ]- e; }% f& U
// 将数组元素连接成字符串
( T8 @& v0 y. r5 w% Q&gt; array1.join() // 什么不都写默认使用逗号分隔5 U- I. }2 E1 U/ p, O4 w
'c,b,a,3,2,1'9 y  ?, w5 V) ?5 \8 [( `; A2 y
&gt; array1.join('')& @- U# p, F8 ^: p* z
'cba321'5 y' W2 S, F5 Y- _
&gt; array1.join('|')5 X8 t/ }# A% E
'c|b|a|3|2|1'; F6 Y0 M% _) P& b2 V+ f* L3 N5 U; a
9 C% W0 q% q/ _# L+ x( T
// 连接数组
0 P/ h0 C" s9 Z7 }; S7 e# n* T' j&gt; var array2 = ['A','B','C']
9 h9 F4 |% o- F&gt; array1.concat(array2)
: o0 {& Y, E4 H5 R3 d% `$ r& ](9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
! P2 [; A% m0 L2 _( f- U! c& V
: M- j+ Q0 p2 m8 X8 p. }// 排序9 K1 Y3 W/ P1 t+ S( K( n/ j" o
&gt; array1.sort()8 Z' B" @7 O( ~3 U- g. E
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; e! g3 W! g7 q. N0 Q1 O% m5 r5 ]& Y$ v2 i, ]! Q. L2 U
// 删除元素,并可以向数据组中添加新元素(可选)( j4 h& h. i( Q  M& L* O- j+ h) Z
&gt; array1.splice(3,3)  // 删除元素
/ K8 U4 ~3 P, W7 c& q3 a(3)&nbsp;['a', 'b', 'c']6 a0 K$ R# x4 m4 F$ g
&gt; array1
# H' S; J5 G7 ](3)&nbsp;[1, 2, 3]
& X+ v$ J. h* S% L&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
0 q  C% V- R* ^' C0 K[]$ p$ L: `7 O+ G; o7 ~# t
&gt; array19 Q# k4 \- _  @3 [+ h9 @
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
" u+ v- t+ u; q* R- g$ X# ^2 a* H: O4 U4 m! r
/*/ V# _$ V6 K/ y9 |
splice(index,howmany,item1,.....,itemX)5 t: I/ Z( y$ X  j  P! r6 [
index:必需,必须是数字。规定从何处添加/删除元素。
. ~" W% x) y; m* [  qhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。1 ?# M; Z# E4 H; x
item1, ..., itemX        可选。要添加到数组的新元素
* o2 v7 L# L8 }3 E* c7 y*/
1 y4 q" P, z6 s  b; T. Q2 L5 ]0 ~- F( m: \
// forEach()        将数组的每个元素传递给回调函数  z- u) G/ p* w. f% `/ @
&gt; array1.forEach(function test(n){console.log(n)})
* U6 \, J, s! {1 L, K 1
( Y% }' J% s- _ 27 w8 R1 a( A6 o) @, T! w4 x
3
9 |2 {$ ~+ r5 o A5 q) `7 ?/ j# \) S. K
B0 E- Y: {/ W8 x* ^
C
% h! |3 a: ^! w8 c7 {8 Y) o// 返回一个数组元素调用函数处理后的值的新数组
& t1 i' n% G, R; r&gt; array1.map(function(value){return value +1}). ?6 b" G- ^' H% ~5 f( F5 j+ ]2 I
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
1 i+ G+ I/ H/ Z$ N. n+ v( S</code></pre>
7 S# h( w5 y4 t2 x<h3 id="24-运算符">2.4 运算符</h3>
3 m! W" f, A2 C5 W. @3 K  |  |* `<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 W+ l7 x- E% t, e9 W2 ~<p><code>+ - * / % ++ --</code></p>9 L0 m& r& N, W: z& J2 i
<pre><code class="language-javascript">&gt; var a = 6
! }; s; R: U2 t+ S0 I3 ^&gt; var b = 3# o! D" e4 I  V) I  L7 Q+ D
// 加
0 r3 a' a9 k! }&gt; a + b& G) M! }. K# {; z! m
9; @" L5 E- w: `; H
// 减/ k: R" G. w: `
&gt; a - b0 V/ E5 J. p3 d
3/ `8 `6 P$ }+ k- o5 r+ e* \* ], D
// 乘$ o9 t- l; i, f$ z% g! B
&gt; a * b
$ e* j3 s1 N3 b8 I3 n9 M18
3 n: ]. j2 W, z; J// 除8 ~3 N- I9 W" v, [: A) O
&gt; a / b: F( p, s6 z. Z& s' J* `
2
0 V( B, {' ?$ v1 R! J. K// 取模(取余)* B' d. n+ C, ~& o) x: Y: ]0 f
&gt; a % b" A; e/ }: Q% L/ D* |2 I
03 V; U" Y6 j: C+ E: F
// 自增1(先赋值再增1)+ l8 `7 y' A) J  I3 }8 _& K
&gt; a++
( _) T1 v6 r6 t+ P6; b# D" F/ ]% b4 P: y  k  K& v
&gt; a
* d( t9 U3 M0 S2 {77 j+ S$ Z5 T& C/ c4 ?
// 自减1(先赋值再减1)
/ T& B. D1 `* Q# d. J+ F- v& b&gt; a--3 I! \* S4 u  p6 y+ |* {
7
; k- a4 ]& X7 v! j9 Y& v# b4 J&gt; a+ u  ^# c$ J1 d; G1 p- q5 Z) p
6* I- V- Y3 o& N
// 自增1(先增1再赋值)" d0 F0 R# A, T5 h- a
&gt; ++a0 b, c. v; |1 ^4 V' R
7  A# c+ ]! s- w6 n' w% [7 {+ L
// 自减1(先减1再赋值)+ W  F! k) M$ e0 ]; k3 f1 J* @' l
&gt; --a# B# @+ f1 J3 I5 f2 P
64 _- W0 L7 h! z' ]  B" L
&gt; a* z, S6 Y3 g) u9 t7 o' w+ @
6
$ d) z- ]+ A) q
. T- ]; g: u; A2 D8 Z//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
( p0 A! j$ i% O</code></pre>" a- C$ G) J$ q& F& G* z
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
: {; Q; v( ^* Y% Q6 S. B<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>- m3 z0 Z( Z* R3 u( q3 S
<pre><code class="language-javascript">// 大于. ?! [  ]2 d: b7 s* \4 ~7 q
&gt; a &gt; b
' ~5 A, |- z& h* w* htrue
) Y* v! t3 G% R& O1 C6 j// 大于等于* g7 `) L- t5 E5 B/ \* ^
&gt; a &gt;= b
. I: D7 v& h2 u4 p) [& D3 r- h& Btrue; T! _6 u0 n+ d3 a3 f
// 小于
' J( N6 z; c* e4 M: \* C&gt; a &lt; b$ I  I$ o3 D1 s& v" [. G
false
9 E) q5 b) F, f" j9 R4 Q// 小于等于+ Y% {/ s% }  w7 H6 ]
&gt; a &lt;= b
$ B+ x; O4 {& Q; gfalse
# f5 u( j" G! x// 弱不等于& e  Y) h3 ]) Y5 y
&gt; a != b0 x( ]  ?7 ~! i# ^  z; U: c
true
* j5 C$ p1 `7 w4 S0 Q; V2 N, w// 弱等于
( {4 U. q4 B: O: _&gt; 1 == '1': K' \, Z- P# R3 Z* A6 z. q1 h
true
  h6 ~+ ]1 l3 I& G// 强等于
! v1 h- J# ?7 ~2 p8 g+ q1 p1 n6 h7 @&gt; 1 === '1'/ }( ~6 |# |9 N. E4 \
false
9 [. W  r- K: ~# m3 N4 Q) |// 强不等于! {: N, M% w* x" y  A
&gt; 1 !== '1'; ]" m3 V6 T2 }
true
4 [  s1 Z5 `& b* E9 [, P+ L1 c3 }4 c
/*2 Z' L3 w- {6 X1 i; ?
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
8 T4 y/ ^! {) G7 n% k*/6 X: v2 L/ k  Y2 d  ^' L
</code></pre>4 J7 p+ u) q4 L$ A
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
& j5 ^% f8 C" |% @+ Y<p><code>&amp;&amp; || !</code></p>
) L8 a+ N1 B  }<pre><code class="language-javascript">&amp;&amp; 与1 R/ ?7 k" Z7 O/ Q6 {$ P
|| or 3 ]$ V# `- j" i5 F8 W* M4 ~) m
! 非
: j: b- T. f0 l1 M$ \2 u</code></pre>
* q6 B9 x: n- Z8 o+ \/ ?<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>) n$ P; C" ]7 @8 C( t+ [6 j
<p><code>= += -= *= /=</code></p>
; X% b) o/ _! L. F0 h) U<pre><code class="language-javascript">// 赋值
2 w9 [6 |% D) }" u( E&gt; var x = 3
6 i  c' s6 [, r/ L( u+ l9 T// 加等于! r& _8 j, T" f
&gt; x += 2& Q; S; t9 h, ]4 ?7 V7 r/ ], |8 F
5
* T% ~1 A: k- `+ J( f. \9 O4 e// 减等于7 t) l! L) B9 Y: Q) O
&gt; x -= 1, H/ S0 O5 f9 a5 |" p  A
4
/ j: J( F' N( h7 {; E/ G) n// 乘等于5 e9 k% `3 u! `3 I- k
&gt; x *= 2
0 J4 J& ]0 N7 K( a: ?8
; Y" ?/ v& J8 q' e8 A3 e// 除等于5 A. B5 M- u' Y- D8 B
&gt; x /= 20 z6 n- {" T. j4 u
4
# o/ U( E* N# H; X1 I</code></pre>
6 P2 u$ `5 S) X0 ?# a) s0 l<h3 id="25-流程控制">2.5 流程控制</h3>
/ v4 Y" E. q' }5 E' M$ I7 i! x<h4 id="251-if">2.5.1 if</h4>6 A& D6 N2 L2 U, x- s5 {
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
, U# w3 ?& g0 U+ S3 b/ C, H
5 H& P% z3 X1 e( S&gt; var x = 3
+ ~6 F/ F& M& j& ~; N&gt; if (x &gt; 2){console.log("OK")}- p) H( p# R) _) m* ]) _) h$ R
OK- g& Y5 ^% P/ J9 t) C4 e+ ^$ V
8 E( z# k' y8 v4 C: [
2, if(条件){条件成立执行代码} , Q+ `& ?- }2 K" L% `) s4 ~
        else{条件不成立执行代码}( u8 w6 e& e1 J* Q6 F+ }

) g: u5 v4 l$ J* w3 ]) L; M+ g&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
% M6 W& \. F. J6 K$ J'NO'
6 {0 y- {/ s( K( k1 S8 o# P4 Q7 ^" ~( |: f* Z
3, if(条件1){条件1成立执行代码}
& |% m: L* N2 _/ X$ s& W        else if(条件2){条件2成立执行代码}5 x" l! Q! w; }0 f& c. Z  Z
    else{上面条件都不成立执行代码}, T" p2 b8 n9 W; G7 {9 ^5 h6 d

  Y, c" N1 @0 A, _2 }2 N: V. q  {&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
6 F/ P  g0 I5 E Ha
  l% T" Z& b- a) L& Z</code></pre>
$ t& p& N0 z0 b& ^<h4 id="252-switch">2.5.2 switch</h4>
3 M! ?) N: y: h* W<pre><code class="language-javascript">var day = new Date().getDay();
# s, ?! m* A( R  f! J' Oswitch (day) {9 O3 E( N0 d0 d( D2 ?$ L/ r, N
  case 0:
. }  l! _! q5 ^' j% M- i& H2 Q  console.log("Sunday");  r, s, p' O3 s  b
  break;# o6 E; P3 {, ?. H8 f
  case 1:& U$ G- w& j. |# _
  console.log("Monday");
) V3 _7 _( q& e& L  break;* {* L( k+ g6 ?, Q/ X
default:
& \# @' R' L2 u, d3 ]+ J- E* r  console.log("不在范围")* \' }2 U5 s9 Q; i' h3 c
}
) X, {$ x6 w: l1 w, `- q# y7 J5 x 不在范围
6 @% B0 a0 d& \8 x</code></pre>  o- u. U8 Z3 X
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
" A1 `5 T, c( U4 i<h4 id="253-for">2.5.3 for</h4>
* H7 e* p# [6 ]) N6 `<pre><code class="language-python">// for 循环1 Z0 w, X3 L0 e% r& K. l
        for(起始值;循环条件;每次循环后执行的操作){# N1 U+ y7 c+ D
        for循环体代码
* _* ]; @% ]5 I0 a5 g" v    }
0 P' e( D5 j* m6 @+ ?2 e3 c0 i$ v% Q0 R
for (var i = 0; i&lt;10; i++){
! ~' y, b, j: S* l& i& c    console.log(i)
# {9 ~2 W& V5 Z6 h+ {' y}* w% d: M% r: ?) i1 i- G1 I
        0
5 X- N6 y, }8 W( F5 J        1
5 a) N; F0 @! J9 p( o9 \1 T        2
  C4 q% a' {( @  {- w        3
6 B' w5 A; s4 f2 Q, Y, G        4
( n/ S# J% v$ u4 g% X+ `' N1 a$ P& d        5; P" u0 G3 z/ u& K0 Q" j, K9 n
        6
0 O/ M* k# T% B2 ]1 Y        7
. Q  y2 [! X1 H# d' Y% c7 G, R0 z        8( s0 J/ J1 c- _2 s/ ]
        9
7 R: ^5 _4 z" r& n' H; v</code></pre>4 T* l! _- e8 Y+ g, g
<h4 id="254-while">2.5.4 while</h4>
1 n, l9 G& q) z; s1 o5 W<pre><code class="language-javascript">// while 循环4 }# s- d1 G8 ^% V+ T' p3 R, M- e: {7 P
        while(循环条件){
& A" V4 |: v* b8 J4 D3 ?        循环体代码
8 ^# e" ^# Y& S2 j    }( T3 b. Z1 v; ~1 Y! {/ r

. \8 l9 Y$ U" N' s6 r, `5 |" \( r&gt; var i = 0% `3 l1 E/ [* [
&gt; while(i&lt;10){$ L$ E0 _! y: Z3 V+ C' F
    console.log(i)
1 Y) S5 c+ S8 B: W5 ]; V    i++$ O# }  Q' F+ j
}5 Y" P! H+ w4 o
02 G6 \3 Q) u$ |  K$ i$ m: D
1; ?. F* u5 k5 l
2+ E. k6 m  R6 E/ R5 V8 c1 j* f
30 s4 B4 E7 O; i4 a8 i% ]
4
- ?, d* j; }. C6 i. N 5
- B9 j7 g; y0 p- W- l" e3 K% J 6
6 W; r( i& ]/ A) t( g$ v3 P2 V 7+ n. J2 O) m" V3 A
8- E$ j: _* V. Z& h3 b% \5 T3 o
90 |$ C9 t5 K% g* t9 g# b0 Z  R
</code></pre>
" d$ r- c4 L' L4 i% D$ I, u<h4 id="255-break和continue">2.5.5 break和continue</h4>
3 y- c% k: i8 S. x<pre><code class="language-javascript">// break1 b) m: b1 l" Y' M$ D0 D5 o& o
for (var i = 0; i&lt;10; i++){8 q! Z* x$ o- c; D0 \7 y: I
    if (i == 5){break}$ |- x6 D2 R9 m
    console.log(i)3 F% P: N9 r: X/ [7 j+ q
}
2 Y) b  w* M6 a 0/ W/ o- l& D$ w1 d
1: k2 j5 n: Q; J" e1 h+ C
2  q# @7 r1 s- v( R$ [) t+ A, Y% ^
3# D, I* e% |5 ^2 y
4
# [7 T) q9 I7 I+ ?2 i9 h7 D// continue0 t" g# p+ M; X# U* g$ I
for (var i = 0; i&lt;10; i++){3 L8 r  o3 L* }4 y& D& W
    if (i == 5){continue}& A# x7 G/ c- m7 c% v
    console.log(i)) i# V" z8 W8 ~! a
}' L. o6 T% g. o$ Z
0+ K3 s4 a) D1 \% N% z
1) e" Q3 S; K9 C+ i% ?
2. {. f& I& c0 ]( z
3
7 [0 w" z! L6 k7 c4 h* k- | 4. E  I8 [% o0 h% T3 |$ S
6
0 u( l. K" t  r6 s" u 7
3 V, _2 q5 a2 |6 i3 ?/ d 87 Y% w4 W+ D$ y9 U0 {. C
9
9 w  \/ Q% @( m# l0 J
; m# q7 w& c+ n% c) m. z</code></pre>
# q6 f% @2 }- Y( U<h3 id="26-三元运算">2.6 三元运算</h3>
5 C7 p3 u& J; v# r( |6 S' _$ i<pre><code class="language-javascript">&gt; a6 @: O/ V& _5 f8 r# |
6/ g0 ?  p; J. y( M, n$ ~, h
&gt; b% v) }$ K, {0 F+ Z: H* R* G, }# i
3
  W$ x7 ?. N- t+ X3 S+ m0 J& c2 r- Z! S/ m% p* s$ t! t
//条件成立c为a的值,不成立c为b的值
: y( t2 z- g5 |) \1 m7 x&gt; var c = a &gt; b ? a : b
8 C* g9 q/ c1 a; w# G&gt; c3 J# u# y# I4 ?) p! g, d
6- C$ ^. N: y7 i+ ^8 b
' A0 x$ ~' B# ]3 p# [
// 三元运算可以嵌套
) n5 I! |" f6 V: w' N5 y</code></pre>
4 S' A  E# p5 S$ G! F' x, S<h3 id="27-函数">2.7 函数</h3>
) U' f# w0 [$ c/ J2 `<pre><code class="language-javascript">1. 普通函数
. k: \/ l; \; W4 H. l&gt; function foo1(){
# ]( G- {+ M3 Q    console.log("Hi")3 j+ J& E9 @- r) h
}
% I1 A* D$ @& U. V6 L4 @& E
3 P& C% M. W, y# b" L6 e/ C&gt; foo1()) M7 E8 C( }0 T/ m3 z/ l
        Hi
) O2 m5 _0 K& p' ^$ t2 r2. 带参数函数
1 S# M5 M% a( u5 A( y# I&gt; function foo1(name){3 d) s# w" A- q$ |! E0 R  V+ s3 D4 M
console.log("Hi",name), K/ P; E+ `6 N1 K: E* X4 C8 V
}$ u: S. U/ ^3 a4 `6 }7 E
7 Y" `$ p  m3 I
&gt; foo1("Hans")2 i# f$ ^+ s& `$ J) H
Hi Hans! g! u$ p- d9 Q- o
8 I' B1 s- o7 r8 S: X
&gt; var name = "Hello"
$ `6 `/ d' R" E7 N' w6 S&gt; foo1(name)
0 V& E$ L) m9 A6 ]+ ]% qHi Hello
4 f9 K: a) @9 b! X, U0 A, q
& Z! I' ^9 `! Y8 T" a0 \" V. _3. 带返回值函数
6 y8 U% X3 ?5 {* g2 W! S6 L' V" q6 M) e&gt; function foo1(a,b){
+ S* U# H' l+ ]9 g9 d& P        return a + b   0 I; ~  B1 X) ?6 @, Q$ v5 ~
}
, ^" c5 ?4 \& ?; ~&gt; foo1(1,2)5 q, k% m- Z1 @9 f3 [8 H2 `, S* C
3" Q7 T6 D7 J, s* |0 g! ]7 e# a. F
&gt; var a = foo1(10,20)  //接受函数返回值
+ N3 q6 m( R3 u: G+ @# V! J; M&gt; a, R- k: u) Y& y! `+ u
30  g" |; d% ~3 F3 q3 W% g' y! [8 j

5 q; U  |* l0 d( D4. 匿名函数
2 |' k  n; b" o&gt; var sum = function(a, b){
- C( z4 @4 N  p0 y- M4 B: k& t  return a + b;' r4 r+ D. z( f& F+ h, ]# M
}
# B# O" Q  D. M0 F&gt; sum(1,2)3 E6 [2 d3 o- y
3
0 T! o/ p+ i; j* T# l" V; A
/ J4 t& a. ^% s5 y2 U, c// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱' m' Q8 C3 q/ i- A* J# z: d* b
&gt; (function(a, b){6 L$ m0 c9 _2 V5 C% I. g, T0 g3 E& d+ K
  return a + b
, t  v1 \: m, L# J5 @  d})(10, 20)* C: {  m9 x6 P) @- e1 k1 L1 X
30
& B" C; X( I" O+ _6 t: i% G5 t  G
8 b9 q) ~& S2 n% E1 ~5. 闭包函数  n; M9 h8 ]- y8 H. U  D
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数! n$ b, l& D& E' p* h( {; \- |; L/ a
var city = "BJ"6 a5 u; W0 R. D! _' D; D
function f(){
7 B* t" n$ Q$ g6 }9 e+ N4 X    var city = "SH"4 t0 w  E( u. U: H( v: N8 ]
    function inner(){7 x# c/ V/ \. F1 m- I8 a3 H
        console.log(city)
6 d; e: m% K+ l) S( `& [2 l- @    }5 Q) T0 r9 s( u) f
    return inner
0 R' O5 l2 C# m- d}
# n4 ]% N8 x( ivar ret = f()4 I/ T5 }" D& Z0 ]7 }- G$ j: n
ret()
, r9 Y- U0 ?. m6 i7 g8 O  l$ E& a0 P执行结果:8 B9 S8 l7 z4 o  ?% E$ a
SH# Z' ^- P4 O1 W0 A
6 a0 `& m- t9 _( ]
</code></pre>
1 `3 f. L$ o7 [+ @4 N# z* f<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
7 M( j" U: u: t4 r. V2 J4 Q<pre><code class="language-javascript">var f = v =&gt; v;
* M. z# x2 D. V/ g1 Z2 `5 n// 等同于
; i! z  W& d, F7 V, Ovar f = function(v){
. S, A# X+ z. {8 w- h. U  return v;# P/ ]9 w7 k" w: E$ z
}
- z1 @# h& H) h1 s7 w</code></pre>
9 f  `/ Q) R2 W5 M9 q8 ]9 x<p><code>arguments</code>参数 可以获取传入的所有数据</p>2 J4 N: u1 o& u8 R# c! k7 b: B
<pre><code class="language-javascript">function foo1(a,b){# y8 g$ f. A3 s
    console.log(arguments.length)  //参数的个数 7 ]) |# r6 W- m/ \' b
    console.log(arguments[0]) // 第一个参数的值
7 o7 s3 ~7 R* p8 U) g8 ?        return a + b   
+ B3 U) ^, r, D+ I0 B# ^4 Q}6 Z9 C, g7 s- ~- C% u
foo1(10,20)# y" A4 G6 z. z; f
结果:
6 s- v. y8 f6 r7 S 2          //参数的个数 $ }' U& t/ j  A( T2 D. S
10        // 第一个参数的值3 J0 H/ z: s+ x& S$ _" z  U
30        // 返回相加的结果
: t$ D) _3 g2 m' T( V1 n" D4 z</code></pre>0 t! A$ o- \+ x* E9 q
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
3 u+ R; w  u* G5 `& f<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>$ ~7 b( H2 }2 ~9 H7 A. b0 q& M
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
9 l1 E$ d1 p- g; g) L% S<h4 id="281-date对象">2.8.1 Date对象</h4>
' E0 ], a5 [9 j) V* E<pre><code class="language-javascript">&gt; var data_test = new Date()
# \& Z% G* p0 w6 w0 G) E" x&gt; data_test) A" M* c! ^. w4 j( I
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)8 E& ?# y5 D+ r8 J& Q% p
&gt; data_test.toLocaleString()$ [( a. g) x2 [7 C: z0 F* I
'2022/2/11 下午9:44:43'7 ?4 B1 p0 S/ t3 G. ?
1 p) S2 q. m# ?  T
&gt; data_test.toLocaleDateString()! ^( E% _0 A. M4 G& g
'2022/2/11'" J2 R  V7 |  k) e- ?' a; P3 t

! K+ b- g: k' ^2 B' R0 g; E&gt; var data_test2  = new Date("2022/2/11 9:44:43")
: Y( s, ?& D/ r$ Q- i&gt; data_test2.toLocaleString()! Q8 }" V8 Y! r8 R$ G! p. w/ Y
'2022/2/11 上午9:44:43'
  @) H( d; ^) n/ o  c; _+ X, |' M& l; T8 [* H
// 获取当前几号4 k. I$ L/ e! Q7 N* x7 m
&gt; data_test.getDate()- H6 f2 o" F+ n5 [9 v2 W
11
, N8 Z# F3 r0 a- a; U, H6 ]; H// 获取星期几,数字表示
& @" u2 J7 x6 J6 |8 k3 F$ B&gt; data_test.getDay()  4 x# m& l$ J" J" L
5
3 q8 X! z& V' l// 获取月份(0-11)9 `& `& A- u: }' j
&gt; data_test.getMonth()) J' t+ Q; W5 a5 A: @+ A+ j* K
1
3 f( H- F7 Z+ F4 F- o// 获取完整年份
# s+ K+ h8 r& B5 ]( h  s' B3 \/ R&gt; data_test.getFullYear()
! L7 |% i' W$ R; h2 {* i9 [20221 X2 ^4 M3 v: B( D3 R
// 获取时
% @0 b; D* G- r- _&gt; data_test.getHours()
  B. ]5 H3 R) X7 A1 Y) Q21
" {: {0 H! }2 a! V, C; ~. |/ k// 获取分/ c8 }$ A6 v2 s" A2 A; y
&gt; data_test.getMinutes()% A) E; i$ I  W
44
+ U" j" g3 M$ X  a- N: n4 M// 获取秒
3 a, R! J1 I8 v: ]( N- v6 d! M/ A&gt; data_test.getSeconds(): `1 |) b' d: e1 K, ^0 V
43
9 i1 l+ Z+ _# a/ B4 V. ^) |; N$ _// 获取毫秒
! Y/ o2 f8 a* y) m/ h&gt; data_test.getMilliseconds()
. ?9 B9 N3 U" g0 H, a  R, G290
  j( r9 G( `/ h0 z/ A1 u/ w( Q// 获取时间戳
+ E0 u" H8 j  E0 X2 w; m- s&gt; data_test.getTime()
; T$ \% Y! z; c; R4 i- [4 w1644587083290
8 g9 K3 F9 S9 e</code></pre>
+ ?' C- S3 I1 Z# P. A0 @<h4 id="282-json对象">2.8.2 Json对象</h4>9 n( ~, F* y- E& K
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
) f. @+ C: h1 Q" j1 B; g; fJSON.parse()  // 反序列化,把JSON字符串转换成对象
' N6 f/ ^% P4 ]+ Z* j1 }& Z. H1 S: ^3 R, c4 K: V
// 序列化
& S# Y( r& Q' {) [7 y7 }) d&gt; var jstojson = JSON.stringify(person) ( v; H7 J- `5 ^- R( `9 c* A6 @
&gt; jstojson  ' `! f, E5 ]* g0 m
'{"Name":"Hans","Age":18}'* u0 k3 D% n2 U1 n# t7 n

2 n: x5 n% W% o4 G" o+ b// 反序列化
+ F4 R$ B+ u% a; ~&gt; var x = JSON.parse(jstojson)
# |6 E$ u. J; v/ U6 j$ K&gt; x
7 B8 W' m/ [4 o" r{Name: 'Hans', Age: 18}3 J5 B8 f0 d# |6 d) r
&gt; x.Age
; h4 P& I- b/ y+ ]' u184 J6 v# |) f0 t8 k. d
</code></pre>
7 _$ y9 e) n3 M* a- d) j<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>( V) `) w* {1 S! }. ^
<p>正则</p>1 _. D. G( o& n/ C5 p
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");1 C9 k6 G) S4 A6 _4 x
&gt; reg1
- a% N" _: t- e% `$ F. H2 F/^[a-zA-Z][a-zA-Z0-9]{4,7}/3 e1 P5 ^, f2 i( ~$ T( j
&gt; reg1.test("Hans666")
- n; j) A; S. n: Ztrue4 N# r: w% b  H) B6 K" f
, C( Y$ N; z" z5 D1 s: x
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
- C$ s( T( s- g+ u) @) v( W&gt; reg25 z7 Z  t  m% d7 L
/^[a-zA-Z][a-zA-Z0-9]{4,7}/9 y# p" s( `  F$ l, Q
&gt; reg2.test('Hasdfa')
* @; D4 ?; b% d8 k: htrue; b" M* [) r# T0 n0 p

2 ?( c/ U% f( a" P  Z- K) L, d全局匹配:
* z! i3 K* B: ^" k$ C2 E' B&gt; name
* a& y  D7 f: S$ v' [/ L'Hello'6 p& j; N0 ]9 b" a1 d+ j3 ^
&gt; name.match(/l/)
( F: r' o& k% l['l', index: 2, input: 'Hello', groups: undefined]
+ O" u$ W* I7 e/ F+ [5 W$ M# S" I; X+ ~  e
&gt; name.match(/l/g)
5 C7 k6 r( d3 k(2)&nbsp;['l', 'l']
. h& z0 M7 Q0 O- U: V6 V6 C// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配- \' V8 G3 d' B! h* G( ^, q3 L
- V$ \. i! U, t
全局匹配注意事项:! U- j+ ~% o' w7 ?, n
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g5 S& [( n! s- D0 {3 I! t
&gt; reg2.test('Hasdfa')
' i& z- w8 H/ J0 w" y8 r" Ttrue$ h7 z% I2 t& O6 h
&gt;reg2.lastIndex;
3 @. o9 _4 |: m- {& D" I( s66 m7 g5 f" M" l
&gt; reg2.test('Hasdfa')9 S# j5 {) t' j& E
false
4 x9 o; r% U$ r4 m( Y: C# S&gt; reg2.lastIndex;+ A3 n* ?, N0 B2 o  P9 G
0
$ t( v  M8 q  n1 z; R" S+ v&gt; reg2.test('Hasdfa')! M" T/ ~" ]' k  W9 E+ M1 y
true* m( a- @/ G, f4 N; [/ z
&gt; reg2.lastIndex;
# Q/ U$ w! k' M+ [8 z4 R, V66 r9 b0 L' W/ {
&gt; reg2.test('Hasdfa')8 [$ K# @+ ]0 M8 e4 k0 X' C
false
9 o0 A% o0 e' j$ G: m&gt; reg2.lastIndex;: m) x3 H, K: a, y) Z1 I
09 L; m9 s) n4 W% I; c. X) l
// 全局匹配会有一个lastindex属性# T3 h8 L/ A: B- x8 r
&gt; reg2.test()$ E) g2 G# m: {
false$ J- c" w6 {4 s% m
&gt; reg2.test()
" }3 C1 r5 I+ W; s- ptrue
) L2 q$ v) z) y* |  `9 @+ ^" N// 校验时不传参数默认传的是undefined5 i: B  [3 g/ a6 Z& x
</code></pre>
# H* J  I+ y" g6 o/ |9 Q) I<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
2 W* J  F4 e1 a( {4 n* P<p>就相当于是<code>python</code>中的字典</p>% Y* r! u" Z, L! X4 ~/ B3 A/ V7 Y7 H
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}) o! [" V% T3 m- j: I1 y5 {
&gt; person
# V  N% z: [! I( `{Name: 'Hans', Age: 18}
- N8 y! X2 B0 y/ ?, J" T&gt; person.Name
/ L& t4 g, R0 [2 a- ~# }7 Y'Hans'
) n! \+ J, ]8 d1 y. c( h&gt; person["Name"]4 Q3 J& S: L& }  O
'Hans'. @' r) A: v& l, f4 A" x7 {! V
! ?  \+ D/ ]# F, e; g& Z) E+ k
// 也可以使用new Object创建
% k5 T# g# s2 L; v&gt; var person2 = new Object()+ w4 s5 F' x7 G9 y0 c
&gt; person2.name = "Hello"& v1 \$ r. T' H& X
'Hello'
& x2 n- {! d4 L  V! r&gt; person2.age = 20
( q5 l; K: S: c& r, O' |20
( n2 C% [. I% s' d% o- _/ J$ I</code></pre>
' Z7 H9 c5 [* c% J/ F! m* {<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>. n7 X  s9 q9 _# e9 n
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>) Q2 o; ^. l" b! k! h2 o. N
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>; _0 L/ P1 ~( ~2 w$ s3 }" m$ G3 r
<h3 id="31-window-对象">3.1 window 对象</h3>
' R( R$ c9 E8 z! ~5 ]<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>) ~7 ]- O* E6 m. j
<pre><code class="language-python">//览器窗口的内部高度& I. c9 c* P" x' k3 B; m3 s
window.innerHeight 6 y& [  `  T+ M/ }7 n& _6 X8 T3 @
706( M2 e: R  }: ~# u; J* n/ Q! a
//浏览器窗口的内部宽度6 H, }, n  u5 T0 t1 r6 T
window.innerWidth
3 O- w6 G0 F5 Y6 }1522' @- J; W+ e/ H$ E9 L3 _/ g8 {
// 打开新窗口
4 f2 `9 _9 s, B9 Ywindow.open('https://www.baidu.com'), `. g$ N: ~  g, ]8 ^8 X
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}8 _; w3 R0 h  k1 F" k
// 关闭当前窗口- G0 j$ H3 r* o! u! H$ x
window.close()
* `' W) x3 Z1 M3 h//  后退一页3 a  W5 H+ j* l$ }4 D# V& o
window.history.back()& C% X$ y  J2 f+ }" w5 e
// 前进一页
% m: K8 @) D) D' L" Zwindow.history.forward() ; _4 M: O( i: P* \# c' W
//Web浏览器全称4 ~4 y" T* a- F( _
window.navigator.appName9 @% I' D, D0 A! ?% m
'Netscape'
" w" l9 F, r0 F9 E- H4 q& `// Web浏览器厂商和版本的详细字符串7 o3 x% u- n' P8 Z' |
window.navigator.appVersion
- U9 j8 j9 {( i'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
% K4 ^& Q* }, n3 ?6 ^// 客户端绝大部分信息" u3 e. g7 R' {9 X
window.navigator.userAgent
# O; p' u5 K& Y% x' N# u'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- H$ h$ b/ P3 a+ G* `) o" m
// 浏览器运行所在的操作系统' S# V  M3 X9 j8 @6 s' s
window.navigator.platform+ p7 I4 {* W8 S, A" X+ a
'Win32'
: t9 i- Y" U* C& x
6 U' I; {  X5 p9 Y8 V: M' c+ i- @//  获取URL
! t: e( D* x( @6 u! x+ s5 {window.location.href
, ^  G2 o; z" J- K  w7 u// 跳转到指定页面8 N$ ~7 h* ?% i$ g( W4 T: B
window.location.href='https://www.baidu.com'2 u: \+ D% k7 I5 }0 g
// 重新加载页面" @  Y6 A" ^& s
window.location.reload()
  J6 G0 ?3 E" y& s/ K</code></pre>- k# P5 d" d7 T1 o1 R
<h3 id="32-弹出框">3.2 弹出框</h3>
  V; }$ r5 x% H: c  [& m5 n<p>三种消息框:警告框、确认框、提示框。</p>
# K+ E7 B' F: r. I* a* c) a; r<h4 id="321-警告框">3.2.1 警告框</h4>+ a8 ~$ H, h4 Y
<pre><code class="language-javascript">alert("Hello")% W7 i: {; z9 B: d" ^+ D
</code></pre>
! p4 O9 B$ y& i+ Q3 N+ h) r: h$ w. |<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>! c5 C& i- ~, a/ H
<h4 id="322-确认框">3.2.2 确认框</h4>
0 t7 v' w1 C9 y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>  d# T2 F) U, V8 H# f; Y: y6 g
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 ^2 _6 e9 V# S1 qtrue4 o: D4 U0 Q- I4 c$ ?
&gt; confirm("你确定吗?")  // 点取消返回false
+ k$ X% E8 `; k( yfalse
4 b' V7 ?! `$ J# i</code></pre>+ m2 @0 }! x4 D' W/ ~
<h4 id="323-提示框">3.2.3 提示框</h4>7 I/ a/ {  W( t/ ]4 T7 T. z& u- e
<p><code>prompt("请输入","提示")</code></p>" |! n; N7 @! r: _1 d# H0 i; t4 w
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>3 l; K; k' p1 ?$ ?
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
; Q- m" X/ Z! u6 v3 {% Z1 ]! J  `<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
6 b! d# E5 A4 D  K# R/ D( [<h3 id="33-计时相关">3.3 计时相关</h3>% F0 X& ^; w! d# B! J/ o( m
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
5 ~# x3 g$ q1 o5 O$ R/ G<pre><code class="language-javascript">// 等于3秒钟弹窗+ w7 C0 O1 K2 i9 X. C2 H4 W
setTimeout(function(){alert("Hello")}, 3000)! A+ O& @1 X7 X( P$ t, F' {2 o1 D

5 C- x, x# f( tvar t = setTimeout(function(){alert("Hello")}, 3000)
9 I+ Y+ K$ v' k4 k. V3 e4 k$ M8 y% C/ b4 s
// 取消setTimeout设置
/ @1 K+ Z; F, i+ ~; U- |) c" jclearTimeout(t)+ ]+ X- W7 ?9 D2 h' p
</code></pre>
* _; `* }) l" z; M0 j) s- q) ^<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>8 s- z' ]; ^( a8 I5 A6 v
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>0 T: }" x9 q0 b# \7 z4 |
<pre><code class="language-javascript">每三秒弹出 "hello" :
0 V- g' H. Q; j, b6 tsetInterval(function(){alert("Hello")},3000);& m, O! b1 s- N- Y- Q
</code></pre>% ~2 \8 V  R; S8 ~3 c: {9 K
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
! P4 d- d& \( K2 D$ S& J<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);2 q# e$ F" y; X/ z
//取消:
) T" K# y2 W* _9 ?" z# X' iclearInterval(t)
0 K8 R* K. ]0 E4 U; z</code></pre>. H& R) e3 E  P$ f8 B: j

* [! h6 B0 m  x: S
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-16 17:42 , Processed in 0.074330 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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