飞雪团队

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

前端之JavaScript

[复制链接]

7583

主题

7671

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25079
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

+ r/ T  [# d' @+ x; K6 q& p: q<h1 id="前端之javascript">前端之JavaScript</h1>
  D9 j0 e$ f& y<p></p><p></p>
/ K+ O1 x* X1 t! x6 ?. y( c<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
1 U2 \9 x. m# K0 ^. \+ g<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
2 k: C" M; I$ [, y4 t- _5 L' ]* ]它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
2 t  s0 t. M$ w它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
0 A. @/ L/ M8 o& y) A9 S它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
2 b' E' g+ r8 _/ @6 \<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>) B$ @6 y: p" }- S* B# G
<h3 id="21-注释">2.1 注释</h3>6 C9 B( p% n' o1 {7 y
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p># u: d  Z5 @7 z; |6 ~
<pre><code class="language-javascript">// 这是单行注释+ Z1 _, K  n4 \2 U1 a6 z! t
6 N9 c: L3 N# x! @
/*
: r9 X4 x, v6 }/ s这是多行注释的第一行,
3 y1 e( v  \8 D* S$ \+ [这是第二行。9 m6 e6 r( r2 `
*/
; a, v9 j# g- C* t4 }$ }4 _! F( Y</code></pre>" i. w+ g, {6 G, v( M% \7 p+ J. J
<h3 id="22-变量和常量">2.2 变量和常量</h3>1 a- e+ b" O: r. `* T
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>( {2 m( l& w6 O1 w: e
<ul>
( x. B, H0 f4 `! \% Z0 s<li>变量必须以字母开头</li>
+ W; f# i5 t9 o0 W" T) L6 J7 ?: J<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>1 {8 r7 g  X* \$ m
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
2 u, O/ |6 {) {4 i</ul>
9 ]0 l* [( ~2 F" l6 i! Q1 ~) z3 y<p><code>var</code>定义的都为全局变量</p>
8 C! a% p2 I! T" B" G' {$ c: `+ h<p><code>let</code>可以声明局部变量</p>
6 c8 ]4 i) x1 V$ \1 H<p><strong>声明变量:</strong></p>, Q% j5 ~# E9 z& N7 L7 J/ H4 m2 G
<pre><code class="language-javascript">// 定义单个变量) d6 U* i1 D' f
&gt; var name
& l6 j# `' J6 T- h) p8 w: y&gt; name = 'Hans'' R! x; ^, w/ J2 n# B% E
//定义并赋值
6 k1 l4 q0 C2 f6 E&gt; var name = 'Hans'
9 o6 b0 F) E; q0 u1 b6 m&gt; name
6 S$ ^( G& |+ q) P* ?" n0 R1 y5 z( v'Hans'
: H1 c! T4 n  b! y8 [7 m" b; o( f  E. ~' ~  q  F' ~5 l0 Q
// 定义多个变量
0 u. F0 A$ `" v4 U  `&gt; var name = "Hans", age = 18
% o- z% P7 y$ p/ ~0 E4 k&gt; name
8 x+ t3 x; c& _+ J$ p+ w$ y8 F) I'Hans'
, F# y! ~5 f* m; w&gt; age
3 \% q6 T- I- N" B18' D$ b; h# y7 `! q
* F5 ?9 v, K& A
//多行使用反引号`` 类型python中的三引号
2 l) I$ X: x9 h4 N" u& O* C4 I&gt; var text = `A young idler,
" f  w# U' [1 W1 Yan old beggar`& _+ d9 O9 ?  I0 T
&gt; text0 h0 D) a  r" ?
'A young idler,\nan old beggar'
9 B/ p6 i: m" {7 H. P% ?5 L</code></pre>
. I' I5 }6 U% P2 `<p><strong>声明常量:</strong></p>; X+ F) M; v2 n
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
8 ~- S. l$ C# v, ~4 N<pre><code class="language-javascript">&gt; const pi = 3.14- I# g8 g% A" m4 {6 H& E) J
&gt; pi
/ ]- y) q  l2 t, u3.14
% m5 Q' [2 v0 [2 p6 w" @5 X, p&gt;  pi = 3.01
; m7 y; \" @) P: CUncaught TypeError: Assignment to constant variable.
3 I* B. v* Q& S/ _7 Z7 W    at &lt;anonymous&gt;:1:4
! e7 ~0 ]0 ~! L' A& u1 f! h$ n. V5 @! J5 ?9 {
</code></pre>
: s) A6 r) _7 Q9 v<h3 id="23-基本数据类型">2.3 基本数据类型</h3>3 O/ z$ N; _- y8 Y
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 I9 {/ }9 A5 W4 S! T<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
6 w: ?& X. w  @. O& c<h4 id="231-number类型">2.3.1 Number类型</h4>; ^# |5 \: N' q
<pre><code class="language-javascript">&gt; var a = 5
0 {: }% y5 V: Y  a  O9 b2 w! h$ |  W&gt; typeof a   //查看变量的类型  
, Q+ a/ j7 v$ Z1 G& unumber" X6 A& ~8 ]' g( H
, J1 k+ |6 b$ l3 _( s6 h' u
&gt; var b = 1.3
" h4 a5 E- U: f4 m' _&gt; typeof b
, r+ L# X8 A: o; a% {! G( gnumber
/ Q0 u) j: `6 h$ K& K
* x- H8 {1 b1 _7 a// 不管整型还是浮点型打开出来的结果都是number类型
7 \2 g: H1 H6 ?# F) Z9 P( R, }7 O2 Q! `* Z: J( N7 P& T$ P2 e  N
/*
/ @. A% ]) ^9 m+ r. z' NNaN:Not A Number
% [* ?" k4 e3 O+ s+ bNaN属于数值类型 表示的意思是 不是一个数字+ p0 @' d0 H( [5 i
*/
! R9 \( _6 P6 R
! [' ~0 ]5 f# D- ]. T% mparseInt('2345')  // 转整型
; j6 u2 J. C* m& o2345
; X: I; v. a0 U' `parseInt('2345.5')& K4 v/ z6 b8 M# u
23458 j6 W8 N1 p# W  H: ^
parseFloat('2345.5') // 转浮点型/ F* e* n8 y. p5 x2 f# }: A
2345.5  C" a; z2 ~+ u2 Q' A* A! a
parseFloat('ABC')
- G( W+ A9 F0 V, I, hNaN9 G* Y* x- e1 o/ a& |( g+ w
parseInt('abc')
& D6 I: U/ r; e0 Q; L: D+ K3 }2 gNaN
. Y* W8 Q$ _+ M/ t</code></pre>
: I: x/ q( O  ?, J8 [8 X3 V<h4 id="232-string类型">2.3.2 String类型</h4>; \$ }; m& w4 U: ?) l, F& Z9 [
<pre><code class="language-javascript">&gt; var name = 'Hans'
/ w" F) r- g, T: C4 q&gt; typeof name
/ ^$ p# Z" X2 c4 `6 f% S* P1 n'string'2 i+ Z. ]6 L! k* T' h: q
1 }+ c$ L: k1 f
//常用方法
7 Z! P/ I9 w6 ^; ^; ?& Z// 变量值长度
( e* [' ?/ q' \, P! ^&gt; name.length
" K) E0 h- e6 g42 g' O" n0 z; n( ?
// trim() 移除空白# B& I/ V! ?0 |* i5 I
&gt; var a = '    ABC    '* y, f: V0 E+ ]' V& a# X  E
&gt; a
! i' s$ G1 O. r0 A'    ABC    '
* C/ r6 E9 m1 P9 g&gt; a.trim()0 [8 i1 O6 h- i3 {7 d/ Z7 o
'ABC'
6 l- P: x/ o! L* Z//移除左边的空白
# |5 f' G7 [, \9 A&gt; a.trimLeft()+ U% Y: j- E2 Q, e/ A
'ABC    '' B+ v. P% `( c" }. m
//移除右边的空白
$ A1 ^, ]( j3 L& D# E&gt; a.trimRight(), m- Q/ X/ M2 j4 R, M  L
'    ABC'! i- V/ [/ ]" X* K: @# R) m5 U; T& M

& j2 q, J2 O- v% Y. {//返回第n个字符,从0开始
6 |! n3 f$ r  y$ w; Y$ j&gt; name  K9 D0 ?4 J' S' x- M
'Hans'
! X9 E( H, _( L+ r; C! X&gt; name.charAt(3)
' F8 y* W& C+ c+ H's'
" c( ]/ x) m' n* Q&gt; name.charAt()! |; T4 w- e1 n: l4 P
'H'
- h* w( K+ P* `+ j&gt; name.charAt(1)
$ Q2 J3 p8 k1 L'a'- N% o4 l/ [3 S3 N5 h% \

5 {( g& w* s; x( o3 \// 在javascript中推荐使用加号(+)拼接+ q- j$ L: U4 L6 j
&gt; name
  ~2 F: T& }9 ^1 ]( w- O5 F9 G'Hans'2 E' j4 d2 m0 w' t8 ?/ O
&gt; a
% ]! \3 ]& J; B'    ABC    '+ \) B$ s2 y9 x
&gt; name + a- B( o# d, m( r
'Hans    ABC    '2 P% g4 B( M% H* }- H* a! @6 \* ~
// 使用concat拼接
: ~+ X0 R4 c: i! M2 M&gt; name.concat(a)* q7 m1 p; s) p( f9 C
'Hans    ABC    '9 z! }1 L$ z1 _: d

) |  P! y) Y- {- k  Z$ g//indexOf(substring, start)子序列位置2 Y0 }) _/ g3 v% b# e8 ]' ], _( T
: n; f9 j, `, R1 q/ j$ h% o
&gt; text2 ~" O* i* v! ~9 M5 i' A
'A young idler,\nan old beggar'
8 N) o( E( Y+ \; n) n&gt; text.indexOf('young',0)
3 W& L0 W' w$ y* \4 q( Q# J2& k; I7 E2 q2 G1 e

) t7 G. }; T2 [& R//.substring(from, to)        根据索引获取子序列
8 ?5 E9 {: ^  w1 W  z# ?&gt; text.substring(0,)
0 d3 T, q+ U. V+ N'A young idler,\nan old beggar'' m$ e0 u4 ?" n, A
&gt; text.substring(0,10)% F' P+ Q( P$ ]5 M0 W/ a$ E9 X3 t
'A young id'
5 B0 V: n; U. f$ X3 G& Z+ R! K: j# G7 s: s# l$ Q& h" x2 W+ I$ m  Q
// .slice(start, end)        切片, 从0开始顾头不顾尾2 d9 s( Q/ [9 W2 N+ V1 B' Q0 ~& [
&gt; name.slice(0,3)
+ a8 u8 A- z, d! {'Han'
0 c8 {( x- Z! u& W2 L& T$ x
: G6 e/ Z7 m% V* Y5 a// 转小写
% Y: R/ L; B6 x9 ]# y5 P, ~&gt; name
0 V) y" P( e  }2 A& B. {'Hans'3 _/ ?6 Y) [6 D" s! k
&gt; name.toLowerCase()! H* l! V9 O4 `$ I; d
'hans'
+ l  s5 R5 \8 \/ c$ L// 转大写3 {, w' T3 @4 ~# W6 J
&gt; name.toUpperCase()
3 }0 x' E2 x; T" }) Y- k'HANS'
, P, v3 R& x- X: I3 Y/ C
6 _2 H2 J# D8 B// 分隔
+ o2 p4 A& @8 ?! f7 P&gt; name
3 h* U; v8 ?, m) g'Hans'
/ ^( c, u3 q+ U; z3 }) _&gt; name.split('a')
+ g+ t. z: z  T) T# c(2)&nbsp;['H', 'ns']( P, m8 o6 A  v+ C, c
</code></pre>3 R, H! S+ e* K
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
- k* g1 \9 H* t# u<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
# m1 p" r: z) k<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>! D- `  h' D4 o/ `
<p><strong>null和undefined</strong></p>2 r3 M0 b4 k: p& S6 z- Y
<ul>0 x# z  I+ z7 G, s& C. K  I
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
- R# J( j8 _( [3 ]  ]2 i5 [<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>( t# z1 t! v; n* ~2 E& C0 X! F
</ul>
. z3 v3 X  s1 B* W. f. ~! [<h4 id="234-array数组">2.3.4 Array数组</h4>
3 b  d+ E' S! D1 q, L<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>) h; J) K' O7 `6 b" Q* R0 I& L. l
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
. ^* p6 ~. T* _* J&gt; array1
( g: |/ C* m6 I* o; D( V: T(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' I9 d" c- k5 T% c, r&gt; console.log(array1[2])  //console.log打印类似python中的print
4 A( V9 b$ t: u& A9 p) S  c5 E36 h9 z0 ?/ Y5 O
// length元素个数& o8 w, `' z9 ^5 i2 L6 S, h
&gt; array1.length1 l4 d6 E0 c0 P& o) v; t$ s
6$ C. T9 B' j. d0 N4 R0 {9 n
// 在尾部增加元素,类型append/ r! l- ~/ t' R; E
&gt; array1.push('D')
- z9 l+ m& `5 i0 }% j& d70 I) {# T# z. g) O* b$ e
&gt; array12 u* P2 X5 X+ c* P& c$ _9 [
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']5 M" i8 @" J7 |
// 在头部增加元素5 m% P$ P% L# l1 T& z9 N* b4 k
&gt; array1.unshift(0)
4 ^* G3 }9 O1 f, ^6 M- B83 r9 m; _7 i; O
&gt; array1
) F7 ]! c: @4 s. Z. c(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
/ b. K% J, L  [* g; S# {/ o3 M
1 h6 {% c. R  B1 b" O//取最后一个元素
9 @- a8 R. C. `! n5 C5 F' o&gt; array1.pop()
6 D. w$ A7 n% m: u# u5 J' B+ n'D'  {  x- D: ^1 |$ n! _
&gt; array1  X% H# O1 T# v
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']' C! N, M, J. c, `  [$ i5 w: @
//取头部元素
, b/ B' n7 v+ p6 Q6 ?8 Y&gt; array1.shift()) L7 P1 q6 T: {
0
, s6 @# @; }+ S+ A# \&gt; array1; c3 Z4 c8 T) Q6 ?  S4 }- s; u* r
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. K9 E: I4 t1 v, d: ~+ Q* j% _
" [  E/ v7 y  t: A+ Z. i
//切片, 从0开始顾头不顾尾
: h* R6 E7 }1 x# u) c&gt; array1.slice(3,6)' \1 L) `  v* ^8 P
(3)&nbsp;['a', 'b', 'c']8 u' \/ W6 w# a3 |9 G( l- {
// 反转1 y' L- z6 P, k& N9 n, r
&gt; array1.reverse()
, W+ O; E2 j. U  a& e9 a(6)&nbsp;['c', 'b', 'a', 3, 2, 1]: o0 n2 m+ |. f# q8 f
// 将数组元素连接成字符串
$ _) \7 S; p; W  [# Z  k! I. v&gt; array1.join() // 什么不都写默认使用逗号分隔
9 R& v, c3 x  T- h9 b' R# G9 D# X'c,b,a,3,2,1': {) v3 E3 V6 O( K7 g% N7 k) N
&gt; array1.join('')
% z$ Z) D% U. Z( }$ f" f$ s! `'cba321'
0 [8 p9 j5 D3 z* Y+ V  d&gt; array1.join('|')
' f+ w* g3 L- B) Y$ r) K1 R'c|b|a|3|2|1'! x2 S, Z3 G8 p6 N- ^* u+ p
8 g7 e. h4 e. q3 A. U
// 连接数组
9 q: p$ E, g3 i$ S&gt; var array2 = ['A','B','C']
0 L! A) J( {5 J' P&gt; array1.concat(array2)/ f2 F& P* d: @( H. Z6 b( {& t
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
5 Z: g3 K5 ^1 V8 h
' K3 R3 l8 s( b( f- x// 排序. U7 V9 l' J; K
&gt; array1.sort()* O# d; E) I# E) \: ]: F" c
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 H9 t, x( B9 {1 g# l2 y7 ]+ ^. h: S2 s% E
// 删除元素,并可以向数据组中添加新元素(可选)
  i, u. k2 z. [' ^* j( ?&gt; array1.splice(3,3)  // 删除元素) r4 f' I' z6 r- n' [# @. n
(3)&nbsp;['a', 'b', 'c']
: T/ A. t" {/ l4 A&gt; array1- }# @- s5 M  `$ W% b6 U) N+ M
(3)&nbsp;[1, 2, 3]2 X/ B2 y. Q7 S1 s
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素* A5 F% p& s2 h2 }3 L1 }: j
[]
' l+ E9 G8 A5 P/ l. p$ }( p&gt; array1, ^5 C6 Y4 T4 U6 H* p2 g5 ~! J
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']1 N8 o  A* G0 n: m% O1 z
; y+ c/ Z$ J' v" H7 Y) m
/*
: x0 {5 g4 R4 c% R" msplice(index,howmany,item1,.....,itemX)
( [6 I! {% v# w$ ^6 \% cindex:必需,必须是数字。规定从何处添加/删除元素。
# O( c3 y: E8 T3 N2 m6 Khowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. \9 ^' q0 W! X3 T: v9 d9 Z
item1, ..., itemX        可选。要添加到数组的新元素* Q1 R) C, ?: z( J! a
*/
) K) W/ ~/ ]( ^$ Y
5 K: M# |, G/ D) f) O1 q6 ?( H$ @// forEach()        将数组的每个元素传递给回调函数; L3 x1 Y( v" B' q/ A" b
&gt; array1.forEach(function test(n){console.log(n)})
8 f9 \' p* q3 I" X/ b  n  E% F 1$ a5 ]4 s6 m7 O  Z4 Z0 j6 W
2* E& p; D3 `9 f3 b+ c
33 O! E* a, a5 s* e
A7 Y% d& _( P9 u0 k  |. c
B2 l$ s2 T; r6 D1 c* B5 H- W
C) v& b) v# K- x! v0 k4 X* F% t
// 返回一个数组元素调用函数处理后的值的新数组3 @, [  d/ Q+ o: a+ u0 \
&gt; array1.map(function(value){return value +1})+ Y8 c6 c" |# i6 c2 M5 ~
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
/ x+ R4 g5 A- `* P* g# R8 |</code></pre>
& A7 h; @3 ?% d/ ~4 f$ S/ z: w9 y<h3 id="24-运算符">2.4 运算符</h3>
: L( ]% @- ]8 g- d& x2 C1 F<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( X* v( j/ [# d
<p><code>+ - * / % ++ --</code></p>
% P$ E. W, q0 y/ g& d/ Q<pre><code class="language-javascript">&gt; var a = 62 X& [: a6 j/ X& y; j
&gt; var b = 34 e3 D0 a0 P1 C! Y' A
// 加0 U5 x! ?" Q5 K- M# J
&gt; a + b: ^  }3 i9 v" A$ J
9
: W. s9 }' M( p" ]3 Y! C1 c// 减* i6 u5 O) F8 R6 v; ]0 R4 z
&gt; a - b, P* Q, [2 [4 z  P! L" A
39 l$ G: R" I# N9 `) q. ^9 m
// 乘( z' V+ A* x: s2 ^6 {
&gt; a * b
- U, M! Q( E9 H! e( G5 v! m4 ~' o187 A1 \. f: J! D8 c2 C& _+ p2 j
// 除
8 ]7 O2 ~' V$ j1 x% f' M&gt; a / b( v% M2 j6 I4 D" z8 ^0 ]
28 i  G4 p* m6 t8 r
// 取模(取余)
4 Z4 b! b6 c$ E. i3 a' ?8 l&gt; a % b
. o/ x: x/ X/ f6 j% E$ u" ~9 m* ~08 K: p$ V; K7 W
// 自增1(先赋值再增1)
' X: d/ k2 u2 e&gt; a++
( ?; }' h/ E% ?. V  B; G1 l# p1 Z6
, e/ B+ \1 |) F" u$ S" l&gt; a
/ `; j3 N/ T0 \3 v5 @7. I8 A4 A: }8 s
// 自减1(先赋值再减1)9 a. R# z( _3 ]1 Z  v
&gt; a--
! I0 Y2 a3 m0 l! v0 w% o6 w* v7
+ a, J9 R6 y* M&gt; a5 y  V# s1 N  h9 y: n
6. T4 O7 M+ q; t( s" d! u
// 自增1(先增1再赋值)1 l0 r: N: I) l) k* @6 U; l
&gt; ++a
( P* ^- D8 o6 a! Q7
1 Y$ u( z8 f+ Q2 u$ l0 ?/ l// 自减1(先减1再赋值)  o7 Y) E" ]0 u: P
&gt; --a
+ V/ {& H9 W3 x) O+ r6
% f( }0 i0 T2 E# _1 W" l# k5 l. _&gt; a
5 z! Q+ r7 \) i: m4 r2 U2 X69 w8 u6 P6 @  f4 q
$ G$ `. S" {- o5 u8 _( q" K
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理( y2 m9 [; ^8 G! |
</code></pre>
" Z/ l# C) l: a& @) ^7 k<h4 id="242-比较运算符">2.4.2 比较运算符</h4>6 J+ c) V8 j+ ~, g
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
- w6 [! H2 s; g, S3 C  C<pre><code class="language-javascript">// 大于+ A/ f2 J" _; d- o
&gt; a &gt; b
0 [. y: s+ o: d" W$ H8 `9 Itrue
9 I. U8 g& c) F4 g; `/ y// 大于等于& y3 E* P1 u9 h0 Q* x1 Y( n7 r3 v
&gt; a &gt;= b
& t+ ~5 t$ z: a1 Ktrue
$ I+ R4 I3 J, M6 a. H) }0 |// 小于
- Y, W! Y; h0 c& C  M9 j&gt; a &lt; b
% s& W; a& W2 }! m5 j  Efalse" p6 L$ s! {" d& l* U
// 小于等于
1 O7 L' A9 H3 t8 Z4 b9 \1 l&gt; a &lt;= b* i! _+ r. j9 A' u, |
false
  ?0 l6 y5 U" U// 弱不等于
: T! p7 n. n; T% r; n/ V&gt; a != b8 |) ?/ I$ g; F
true* k0 E. Y' W  ?8 g4 v% G, M# L
// 弱等于
$ ~  c8 Z$ |  D4 G6 A&gt; 1 == '1'
& g* t6 `+ W$ N7 Xtrue  d) a8 g& v* }, J8 A4 O0 I- ^* j
// 强等于4 I0 L3 n0 \/ g9 P
&gt; 1 === '1'& R" R; _& O. E
false, g/ O: I* _  w7 T2 A- `
// 强不等于
$ \' m$ I+ Q) ^) w9 I! c& f; A&gt; 1 !== '1', `+ z! j8 ^( {1 o* H) J7 @4 f
true
2 l3 o  K5 n8 {7 v4 s  i* W0 B( P/ G  L1 O: m" j
/*
' @  |1 i; A/ L% ~( OJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误- V8 D- k8 p: Q  s
*/
$ v. @# |$ O. r; m6 W+ Z0 X</code></pre>2 D% n! l/ b# S, g3 @- G) H7 Q
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- _) o* W6 O# R6 R. {<p><code>&amp;&amp; || !</code></p>+ T) x' m' W8 U
<pre><code class="language-javascript">&amp;&amp; 与
' Y5 \7 }, a- O4 Q/ B/ ?|| or 1 M5 M7 G; f3 l# t1 i, L8 g
! 非
. i1 F2 y( [/ l. w+ @$ {</code></pre>
) B" f* b* L' ~8 _5 @4 K<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>; z  x, n! v4 w" o9 n
<p><code>= += -= *= /=</code></p>5 J% u1 _& h( _1 ]2 `* w0 L
<pre><code class="language-javascript">// 赋值
" j+ G3 t( e8 X&gt; var x = 3( j" {6 W" s: f0 @; t6 w* ~- {
// 加等于* v, P. b0 K( h; }8 S
&gt; x += 2
7 c( h  I; v8 L+ e1 X8 K52 b7 \9 Z& h" c" d) B: V/ i% d
// 减等于
. |1 W) B7 T3 I4 ^4 S4 i&gt; x -= 1
8 d2 j0 k$ P. u; |. ~# V42 k" M5 J% y1 @# q0 j% Y
// 乘等于) w4 p3 W7 l5 V
&gt; x *= 2
6 h* l7 I* b( S- v8. s' q: U  N1 Z
// 除等于5 _% Z: v6 m( f8 t
&gt; x /= 2+ w6 [, G& E0 U* t4 Y1 q
4
* D/ @* t* \- }$ ]7 j$ U7 v4 s) w</code></pre>
4 L0 l) j, ?+ l5 g2 ?, q6 b<h3 id="25-流程控制">2.5 流程控制</h3>9 c5 k7 U  z$ S2 @4 g
<h4 id="251-if">2.5.1 if</h4>" q1 V" y1 U$ n3 H, _4 Y; a
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}* U. w( L$ J5 |, B3 O: m) o

( ~5 T# Q' z; P, s: S&gt; var x = 3
; g% h# F$ ?, N, m, g* Z1 M&gt; if (x &gt; 2){console.log("OK")}  Q; Q9 W# m! c7 Y, ?
OK
8 N( E( d5 R  u- [6 p1 K5 j) b( h4 B7 C- s8 y& X/ g* y5 h
2, if(条件){条件成立执行代码}
1 E. u/ \4 j. G2 v        else{条件不成立执行代码}
7 U( L- h6 w; W% @
* @& r8 d( R. i: q; M& e, h" T&gt; if (x &gt; 4){console.log("OK")}else{"NO"}# Z9 t3 S! j0 b0 \
'NO'& X% k! Q/ n" }
8 l) S2 z$ h4 b9 ]5 J3 Y" y
3, if(条件1){条件1成立执行代码}
; S4 ]- @: q: D2 v* f5 J0 q1 R6 w* R        else if(条件2){条件2成立执行代码}" e' i2 U/ `- k+ [9 W, `4 c
    else{上面条件都不成立执行代码}
% R, f- l5 d# W% n5 ~& n1 G* O1 R) B2 e8 s' Q) f5 P6 z
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
8 b, E! y. ?8 F# i- W Ha6 f( s, ]% K  K+ R
</code></pre>: N+ \# D% L/ w4 u
<h4 id="252-switch">2.5.2 switch</h4>) f8 [  F, o# w) P4 E* k
<pre><code class="language-javascript">var day = new Date().getDay();
) G( ?2 @: y" m/ G( p. H& D4 L' yswitch (day) {
. j. q2 }, I! T0 l. D: W  case 0:( R% H/ O: q" ?0 ]0 z. K: m
  console.log("Sunday");: t+ l. B2 f9 k/ b
  break;. ^# q* P2 N1 `/ Z% b% W
  case 1:/ b: B! s, t0 |, t
  console.log("Monday");
$ b: z% n( |+ y7 j2 `/ Q. W7 y0 ]( m  break;
3 y- U0 ?! s$ M2 Y' _- Kdefault:+ p) r/ m( Q6 C5 e0 E2 S) i
  console.log("不在范围")7 G2 U. H% K& }* {9 f
}# ^% _! a$ `" S7 c4 F8 `# S
不在范围" G. L- |# _; v! E% E
</code></pre>" O7 z: k) z; V! x
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>' t4 `1 X# x* `! p1 G  I
<h4 id="253-for">2.5.3 for</h4># ~1 V% O1 e8 P- B) Y% F# a, M1 b
<pre><code class="language-python">// for 循环  s1 u4 l3 W( ^
        for(起始值;循环条件;每次循环后执行的操作){
. v4 C1 E0 c0 R5 }        for循环体代码: n7 X4 x( Z! Q
    }
" ], Q% u' l) @# `  G2 r, X* |! [- p  l
for (var i = 0; i&lt;10; i++){  T, ]+ u% i" z( {+ {. c
    console.log(i)
! x% `% b0 [: p( A  V" r# \" F}" j2 z7 q2 E5 P" A8 a& x6 a5 s
        0
, l* B! ^: m7 O1 ]3 v        1
& Z5 U$ n4 ~, D% @' E! p: s' A        2
/ r3 G+ C; b2 Y2 J        3/ Q4 p  r& J6 y) L
        4% r8 D" {+ m2 M) F7 }
        5; c0 Z+ ^0 K  e* e, D" d
        6
: C' e% c- G" X6 t  o        7
/ j# `* K6 i! c% g& Q1 z  E' G        8: M4 Q) [5 F5 S9 l4 Y2 L4 M
        9
% |- Q: {+ a2 [- w</code></pre>
) Y* H# B: t' c" f<h4 id="254-while">2.5.4 while</h4>5 a6 X. O. A; R7 j' R0 J: q* |
<pre><code class="language-javascript">// while 循环
7 @7 C" u( O4 r4 _; T9 n! @        while(循环条件){
, p0 a# c% [' N        循环体代码
0 a. f2 v& s# e# e    }
! K4 T$ |9 Y/ ^2 |; d; K0 {
1 w  k4 ^5 @; Z. z1 T4 n&gt; var i = 0
$ t: W( e0 g; [&gt; while(i&lt;10){
4 q& c/ W8 h0 ^" |    console.log(i)
/ }5 @) w8 Y: E9 D    i++7 s; a% s/ w/ c
}. v) Z- i1 I* B6 e
0
- I8 W* |. ^% }$ _, E, n 1- L( S: \; x# @# r2 d% u1 C
2& {8 _, I+ Y. K( `
3
% U+ {$ d5 C% R- S- ]! U3 t 4- ^' ?$ ~9 B. J' ?  `, M! o
5- D& @; d' R7 U% q8 e/ \
6* V9 v6 C+ f! I( w
7
/ S8 C0 _6 {, t" w8 @. I- R 8* w$ c9 P8 x# V( O8 e# y0 r- M0 R
9
: w( m3 \& y4 m4 D</code></pre>$ E# d# E! {+ u# }6 p/ ?
<h4 id="255-break和continue">2.5.5 break和continue</h4>0 \3 Y( ]8 ]' u
<pre><code class="language-javascript">// break! q) h" q$ r+ m; J- h+ B0 C+ O- f
for (var i = 0; i&lt;10; i++){
. u+ e5 b% Z+ y) h% y* _    if (i == 5){break}/ ?1 P) V1 J2 F% m. J
    console.log(i)' C5 u& c# @5 `
}
  m$ c! J4 a/ ]6 @3 d, f 0
) z7 p5 x6 r, G, E 1/ I$ h6 [! v7 ?2 C8 S4 I
2
' S2 E, I3 x3 i( ` 38 c/ F7 B$ x0 v7 x% H$ k9 C9 [. e
40 N1 R+ u' M1 m$ U7 V
// continue; y0 g% O# N+ U2 h) z# M6 t+ U+ g
for (var i = 0; i&lt;10; i++){+ k9 J1 t  T9 V
    if (i == 5){continue}
! e. I: `! ~6 X; P+ s    console.log(i)
5 F* A6 q8 q) V2 A3 Q" k}
. Y9 _# v3 U  l2 U 0
) \  W( g! K- g3 Z* k! o3 h+ R 1
0 ~: `/ m2 u/ A% p1 m  Z" A 2
0 z" ?) R1 ]( h& v7 a 3
; e+ g/ f0 a8 k) C3 i 4* K  `6 I0 w, z% e8 B
6
5 D9 j( O- E  C" Q 7
1 t5 S# u: s) I1 P% ~# o# T6 X 8
# K6 n8 V0 R& ^' `! V+ z6 E# a 9: @- [) ?( P$ }7 i* h, Q$ i) n
0 T* [/ [; j, t; X3 y3 \1 R" T( D
</code></pre>: `' D$ n# M7 D# \: R4 Y* z
<h3 id="26-三元运算">2.6 三元运算</h3>
& \5 d6 H( W' O  h* F# y1 c<pre><code class="language-javascript">&gt; a
; F( I9 ]; D0 a/ H6
4 G, {- v$ M9 A4 {&gt; b
  C+ O' r, H6 c34 m4 o" p) o, O% c. |: g  E

/ m4 P$ W7 \5 ?& S. u//条件成立c为a的值,不成立c为b的值
; \- e( w/ u7 f3 ^&gt; var c = a &gt; b ? a : b" \- |  L. v$ H7 M1 ]
&gt; c; ]! g! n% ]! f7 [% V
6
  }* t0 [6 }% K7 v
" h) {$ v) v7 Y' e& A// 三元运算可以嵌套
; p7 R6 F( m* W+ Y2 Y4 W% U</code></pre>
& N& q6 c( a9 l3 k<h3 id="27-函数">2.7 函数</h3>; b2 G, q: |  U; u2 I  D/ u, t
<pre><code class="language-javascript">1. 普通函数" D" u* e) O5 X& T$ b
&gt; function foo1(){
- @( d: ~( C- K4 ^    console.log("Hi")1 q2 M( Q# U  P: v: {
}
3 k! x! w" ]! ?) @
  |, J# g) }9 |' e&gt; foo1(); R# k/ s7 a& ^4 x. i
        Hi8 y- c" G% K8 V
2. 带参数函数- [5 n% H9 g3 R& u  l
&gt; function foo1(name){  w4 k* G$ k! C9 w, B1 h! J7 p! I
console.log("Hi",name)
( h3 k0 s  Q2 \- |}2 L' ?6 o! ?4 c, X
3 {2 Z* l1 v' ^5 H$ U
&gt; foo1("Hans")# A( j! G/ L( k% C6 _9 g& J
Hi Hans7 d: X* ]9 t" e5 z) d

4 P  G# ]4 r# p0 a4 [&gt; var name = "Hello"" O3 t1 U5 R. T( M9 q/ y  i
&gt; foo1(name)
- r- G2 O% ?% C% f- q0 LHi Hello
9 n: d3 k% B3 `# F8 Y/ q" W
1 S' O, R. a: e# h- j3. 带返回值函数
/ S( o% k- I/ E&gt; function foo1(a,b){- H$ e: X9 b, s$ L  ~
        return a + b   & L/ J5 u, K+ {! k# I5 F* F7 Q
}% v4 w: K  Q3 g: t
&gt; foo1(1,2), j: E' f6 D+ C5 {. F. V7 ^
3. a# n1 `& E2 d) J1 D
&gt; var a = foo1(10,20)  //接受函数返回值
7 _" A$ S1 L  V1 \% n&gt; a
3 G" t$ `- g7 q  V  b' d0 j30$ [9 {6 o5 p7 {# Z. L. S* h$ v' I

. p7 q- a  U3 q2 o2 N4. 匿名函数& ~& o! u5 e/ I; m
&gt; var sum = function(a, b){
# h) y- K* v* F5 H6 ?! _  return a + b;
. l" p6 F8 q2 _: K4 F}! f% O) l: W3 W  A( b0 {' u
&gt; sum(1,2)
7 }  y/ ~1 i- i- m/ |: C3
$ O  A7 U" s* ~. M. ^* O- u, F: c: [5 k6 b& W4 `
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱8 t4 `4 w. Q* K- A, A
&gt; (function(a, b){
/ N( o2 ^7 m; A2 J0 B  return a + b
. M/ A: z1 |0 Z$ l})(10, 20)6 Y& `5 ?5 D' b
30
/ t" R* D! N6 L, I! }; r0 p- t' T: ?7 W! R: B$ ^
5. 闭包函数8 R: U2 t1 `5 s# M4 ^
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
; c4 R; I. n% U7 |var city = "BJ"
- G* N" d, e: u8 @' bfunction f(){
6 z9 F' x# B" e4 I# F    var city = "SH"
' o; j/ l) R- a$ t- ~    function inner(){
! M* f  Z- A, r+ W        console.log(city)
) _1 r6 _8 N& \# h: y$ E5 m    }3 f6 A3 `) @+ Z% A6 P" p" {; p6 u1 c
    return inner& @- U) E. [# `9 |, P' K/ ]; I
}
; y5 w* V. X4 W- S  M- Uvar ret = f()- P# l3 Z! y- J6 ~
ret()
  U: M0 q0 b. z3 R3 G: ]执行结果:; p: K% r; f1 ^. @' [
SH* G: ^2 G' C! L* J/ X3 W3 b

6 W. b1 f7 C' u; }' ~) `; l</code></pre>
4 s, u( E9 p6 ?5 P* Q% v<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
+ ?" j7 I4 e1 o) e9 J* r<pre><code class="language-javascript">var f = v =&gt; v;
; ^9 |7 o" y6 y// 等同于0 t) p- H2 k" W8 }3 M$ F9 `
var f = function(v){
6 y& E+ p2 S/ @4 @7 N7 X  return v;
; ]/ B- u( F7 f6 O( }! {0 O  c}
2 D  d: h6 Y3 A</code></pre>
' J8 n  R, x. Y: T<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, {9 V& ?  @/ D<pre><code class="language-javascript">function foo1(a,b){+ v* b% I/ f* @7 w2 N, t
    console.log(arguments.length)  //参数的个数 ! L5 p: I( O7 r/ S* q  ~" R
    console.log(arguments[0]) // 第一个参数的值
7 c( a" `) R) C# u/ L        return a + b   
+ G& X" o8 m: c2 A9 y. Y' [9 p}  l9 d( m" o4 }: v3 v: E1 M7 U
foo1(10,20), M. E- t  i! s, g+ A7 y: r( @6 Y2 ~
结果:& O% r/ h. x% v
2          //参数的个数
# g- B5 t( S: m7 B/ r: d) d  C; }10        // 第一个参数的值
* ?7 g9 o: H: t8 A/ B* S  Q30        // 返回相加的结果
4 P% e- @4 U# S</code></pre>
% d% i' o. C3 K, A& b<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>/ g& a& T+ R. Y. b" j
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
( C6 y7 j2 @2 o+ A. Z$ b7 s<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
: E) c! X* Q- V5 c8 ~: I, m* p8 l<h4 id="281-date对象">2.8.1 Date对象</h4>" P% g4 R8 U& b% p: m
<pre><code class="language-javascript">&gt; var data_test = new Date()
! {9 c* t) D  L6 v  S% y&gt; data_test
9 L: Q$ B2 b: N# [3 I; b9 b( cFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
, o$ d' s" o# J; {( {&gt; data_test.toLocaleString()5 P: H6 e( }- D6 Q6 H" `
'2022/2/11 下午9:44:43'
& A+ ~; T9 d7 w7 |; Y; Y
, G. Y: a% B) d! P" N&gt; data_test.toLocaleDateString()- h  W8 a% |- ^4 F/ B* o! a; A+ T
'2022/2/11'
: N0 K0 E% u+ N2 j4 i& N5 d
! m+ R4 @; h; p) ?3 ?&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 ]7 o) P. w5 b6 Y
&gt; data_test2.toLocaleString(), k# \2 y( L. _6 G: y
'2022/2/11 上午9:44:43'
; j( v: n- \' Q& q5 W7 ]
: j7 d. J1 J+ p% ^& R8 y( M2 u// 获取当前几号
- D3 S1 v3 Y7 h&gt; data_test.getDate()
0 ^* ~% H" |" s  r8 }% H* q% [5 `11
& W7 L2 v0 p+ w, W0 N7 k& J// 获取星期几,数字表示( v" I3 ?+ X: {$ z
&gt; data_test.getDay()  . n' U; D- i& w& V8 V" P' a% c8 l
5& o4 B5 q" X3 s
// 获取月份(0-11)
% ^* D$ W7 K6 i# x& K; {&gt; data_test.getMonth()7 C5 ^) [% Z: t" ~+ Z! s* k
1
4 W4 s; x, n) ~  [( L$ l// 获取完整年份- p  |( D; e, i: D
&gt; data_test.getFullYear()- a( G& }+ ^& S0 k# B
2022: X' @) X! W; y  H/ ]' ^
// 获取时
% E/ y3 P5 t7 Q. {9 g&gt; data_test.getHours()& Y: q. ~/ _3 N' A5 }# I
21
3 V; h1 D0 v! y/ Y" b// 获取分
* \1 z* a6 m: t&gt; data_test.getMinutes()
# U2 U8 Z* X. c/ L# a. z" _1 s# R8 x% X444 z9 v% q3 f, r. K9 N
// 获取秒
0 Y+ g* R+ [$ N  C8 @3 w&gt; data_test.getSeconds()
  s1 G0 d' m- y439 r( d) S2 Z& `& W' X
// 获取毫秒
- {/ L' r" p8 B&gt; data_test.getMilliseconds(), j  @9 w( B0 W! ?1 e+ V. A6 K3 T
290
4 T, D& W' [, \' W( M5 J// 获取时间戳9 K  N# Y6 x: `3 ]6 r+ S4 u/ t
&gt; data_test.getTime()1 y: ]+ b: {  F5 J& [! q1 n2 c' P
1644587083290
- v. k& I: n6 U  u) U0 D</code></pre>7 P8 ]3 ?% |# g; z
<h4 id="282-json对象">2.8.2 Json对象</h4>1 T, q! P$ b! c! F" i" m& H) d
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串$ o2 E5 |# ^" v1 X% p+ k+ m  \
JSON.parse()  // 反序列化,把JSON字符串转换成对象' I$ W5 C9 Y! d( J. p
5 m. |7 x$ r+ x
// 序列化; A  a( A& C4 U5 Y
&gt; var jstojson = JSON.stringify(person)
2 c& r$ g: M5 _7 |: G5 F3 l* e&gt; jstojson  
0 |7 Y; s" w' J* @9 \0 @  i'{"Name":"Hans","Age":18}'
8 l( p+ e+ h( q# E0 _2 ~/ ]. u5 \
- Z9 S5 }; K/ T- C// 反序列化
  i( `7 }, D* d* }4 v' A( H&gt; var x = JSON.parse(jstojson)
# Q$ Y5 J5 u5 R6 b' b  j&gt; x
( L6 B+ p1 S& {3 _2 W( ^{Name: 'Hans', Age: 18}
" m5 d5 L* r% Q& j&gt; x.Age$ t( ]& ?0 _, B3 ]' {
18
$ j' n2 y* w7 p  R6 x& m" D% @</code></pre>
- h6 B4 i4 f# O2 R9 @7 p<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# \; \: W+ \- r: Q. v0 T5 F<p>正则</p>
$ a  p  D9 i  u+ v) P3 _<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");0 t! A6 ?* B* a/ H( Q
&gt; reg1
8 y  o; Q7 |0 A# O8 e& q/^[a-zA-Z][a-zA-Z0-9]{4,7}/4 f& l/ Z% i3 C) y3 P
&gt; reg1.test("Hans666")
, |& c' _6 c$ |: D. {8 ntrue
' k. [, p8 R, ^2 y# L$ v: C; J3 c2 r2 K; M, w; W' y5 M, ^6 J1 y3 k' Q
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
$ M! i+ J5 x! a! m7 j* F- C4 G; S&gt; reg2
6 T3 s' D" y6 @  H8 c3 p: g/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 o- Q1 a' P9 C2 _2 S&gt; reg2.test('Hasdfa')
, Q0 O6 w3 H# d+ _$ F4 A5 e/ Otrue
) V/ p( z* U, c1 Y6 h4 h, ?6 S9 S" C
全局匹配:4 F1 a7 s' O, A. E) l: X# j" K
&gt; name
; j6 x, ^5 o: H'Hello'5 @, }; J+ X" b( ~" A2 |+ p+ \
&gt; name.match(/l/)
7 X6 L" z6 s' ~# \1 X['l', index: 2, input: 'Hello', groups: undefined]( ]2 l: j9 R$ l' \

) h: d6 h) [# o0 p6 y. {&gt; name.match(/l/g)& J  C% q7 r# i0 m, G& b3 [
(2)&nbsp;['l', 'l']
% ~( q, @+ d2 h// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配5 f) g" N4 u5 e- s
0 j/ S' F4 X3 [6 ]; q# l6 ~  {
全局匹配注意事项:
  R% J$ a+ ]  A. {&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
4 A' ~' l; p% c1 n&gt; reg2.test('Hasdfa')' A1 E0 }1 l  X! n3 V" @6 _5 h$ c
true6 _0 a0 `9 w; ~. r/ U
&gt;reg2.lastIndex;, m: ?* T, U4 j# A: v. d
6
! a9 M; J+ S& a$ i2 j) y! @&gt; reg2.test('Hasdfa')* \( O% N% |6 ]7 E
false  x( {, ^& g( [& f& A
&gt; reg2.lastIndex;
- J8 Y% Y$ i! o. I% K* s8 h6 Z0- @7 @7 g6 P/ w8 i- C
&gt; reg2.test('Hasdfa')7 Z" d5 x& R7 |; E9 o' ~
true
; X2 }* \- u  V) I&gt; reg2.lastIndex;
' j9 h6 B- `  w6* ?# Y" i0 H0 u, C  t9 F. Q
&gt; reg2.test('Hasdfa'); f# d6 N5 }  l5 V6 A0 @: S
false
. M* d3 Q+ c/ R- H7 ?5 t&gt; reg2.lastIndex;- u2 h. t& H8 S
0# \3 S9 K7 o$ v: p
// 全局匹配会有一个lastindex属性
$ }. Y& n9 j# d% L$ O7 n( K&gt; reg2.test()+ [1 Q  @4 c' E
false
5 Z5 W4 E+ L& M/ J1 P&gt; reg2.test()0 `" J, S6 t$ B4 t6 j6 x5 N, H& ]
true
$ s# J: k( t+ _" o// 校验时不传参数默认传的是undefined7 Y* z5 |- e1 `( d4 u/ i# }
</code></pre>
9 s8 x! d& Q' V<h4 id="284-自定义对象">2.8.4 自定义对象</h4>* m, V$ S! a4 [: M/ \; i& d
<p>就相当于是<code>python</code>中的字典</p>* _) R* l1 G, R
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}& R) I  P- L3 k/ w1 k& U
&gt; person' ~, F- T6 w9 {$ J
{Name: 'Hans', Age: 18}+ K: \5 ?) I# I9 U
&gt; person.Name9 l  v$ n5 D6 H4 D. }; R. Q/ E
'Hans'
1 r- m0 Q5 _0 i# Q" z+ Y6 c: F0 d&gt; person["Name"]
% D! }$ ^5 Z& \# d( O! A$ m  y' y: ['Hans'% ?+ o  j# Y% L4 `4 @/ Y
* l: d8 c# ~8 L9 S4 U9 t
// 也可以使用new Object创建$ Q/ c$ f* D. r% W- ^5 W
&gt; var person2 = new Object()
  q, }7 W- o- z1 U&gt; person2.name = "Hello"/ Y8 k9 r( _, M, o" h( D$ `( _
'Hello'9 M3 c6 S; z% t& R/ b  O/ F8 X
&gt; person2.age = 20( E, r7 t) P* e. Z
20, Y, s9 U1 ~% `( I5 b# r
</code></pre>
0 }+ G. {/ e1 v1 a<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
# ?. z- z, R1 _1 M( ]<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>- P2 v1 b. N1 Z1 _
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
$ K7 a, S7 Q: l9 W6 q<h3 id="31-window-对象">3.1 window 对象</h3>/ P0 d8 V0 q. \' F9 ^
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>, r* R5 E1 _5 ?& Q* x: Y# T
<pre><code class="language-python">//览器窗口的内部高度
" `" G9 J4 B9 J8 ewindow.innerHeight & l6 g0 |# A1 u; u( L, m
706
; x, n! o' ]1 ?8 P& e9 R1 i9 K//浏览器窗口的内部宽度% K6 ?' a5 ^* {* d6 l9 s9 G
window.innerWidth
: h% ~$ A' W6 L1522
* Y5 N8 V) O% u/ h7 d// 打开新窗口/ W# U$ P& u- O
window.open('https://www.baidu.com')
. F5 }1 a! k! ^4 OWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
( e7 @& C- T7 s- |2 i0 f// 关闭当前窗口2 O7 [0 B' G0 H
window.close() " V, `3 }$ e. x& s+ ?" m' T
//  后退一页
6 l* x1 t: T) n7 @- w4 Y! q3 v6 rwindow.history.back()
3 d4 e3 G  _+ R: Z9 c0 j+ ?// 前进一页% m9 u$ B, ]. e8 N" _" w9 j2 l
window.history.forward()
7 U& V. i5 K( M1 E; a: p, ^2 q//Web浏览器全称& M" p5 r( `, E3 F: b% V$ K
window.navigator.appName# u8 F% L, s) A
'Netscape'
) n- `& x, Z8 z, Q% t! s// Web浏览器厂商和版本的详细字符串
. V4 y+ W0 x: q! \7 wwindow.navigator.appVersion8 Z1 o) Q" q# q' y: F, ]1 B
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ t# X2 M+ U$ O* Z+ Q
// 客户端绝大部分信息
6 a2 j/ q' q4 u% f) m2 f  l  Zwindow.navigator.userAgent
6 H- w% V) U7 F8 E# H'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'. d: E) }7 D6 ^/ @0 ?) v
// 浏览器运行所在的操作系统# k# k8 b+ [; h" x
window.navigator.platform
) ?2 p, x0 n7 c+ ?* y) q+ @'Win32'
$ _% \$ T' b+ G& Q) p* r
# H; p3 n; l' O//  获取URL
4 M* t7 M0 l( h/ R5 jwindow.location.href
" c* f2 o% `- t! ^// 跳转到指定页面
3 y$ X2 Y/ g3 O( }  _8 _window.location.href='https://www.baidu.com'
  q5 l# j7 g0 j' d% V// 重新加载页面3 y: }1 d+ W0 {8 \* P; r
window.location.reload()
! m! S' U+ o. d</code></pre>
  [# a# w+ a! t$ {; Z7 E; s/ L( k4 n<h3 id="32-弹出框">3.2 弹出框</h3>* h, o# v4 u, m& z4 j
<p>三种消息框:警告框、确认框、提示框。</p>* p0 p( x9 S9 J2 V+ l6 r
<h4 id="321-警告框">3.2.1 警告框</h4>
: D" Q; c  ^( C8 k<pre><code class="language-javascript">alert("Hello")
" c* e  o5 T( {0 Q3 S- M</code></pre>
. y  ^6 K, x9 Z0 h5 s& b9 s! J$ x4 Y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>  A) p8 @4 {4 m& P
<h4 id="322-确认框">3.2.2 确认框</h4>
2 J/ s; p. W8 ?( N& ^$ ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>/ d- k+ C, B; u3 U1 }) Z
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
' P+ A1 n# e# f6 P, B7 ^- q# W  utrue; H. |( ]' {1 Q8 V
&gt; confirm("你确定吗?")  // 点取消返回false5 K4 N" |. G5 i% m+ m- w+ u& {
false
9 v8 M, p6 A5 t. k5 B, l</code></pre>- {4 s* @  b* C" |: W
<h4 id="323-提示框">3.2.3 提示框</h4>
+ S6 k/ M/ P9 O9 o) k<p><code>prompt("请输入","提示")</code></p>
" a- V% E1 k2 l<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
8 ^1 @; T2 P5 @$ T2 R- X6 I<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>$ l( C! l( N% f7 e* r' _
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
' y+ ?8 ^( w) h6 o9 o5 v0 S<h3 id="33-计时相关">3.3 计时相关</h3>$ Y3 P2 R4 j7 O% `. ]0 c0 W" k8 X
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>+ P0 y& P' k5 f
<pre><code class="language-javascript">// 等于3秒钟弹窗
; W  I5 _- s7 L4 O% N' A  w8 T/ QsetTimeout(function(){alert("Hello")}, 3000)- B$ h6 K3 H, z# ?
6 E) F4 ]; [' g3 B. {
var t = setTimeout(function(){alert("Hello")}, 3000)1 `$ c# U  Q/ V
% Y3 Y6 F% ^# u9 e8 D
// 取消setTimeout设置1 g) b, I4 }" l) _& L$ t6 r* }
clearTimeout(t)- j8 J; {$ \1 I
</code></pre>
0 h2 Y1 z& w3 H. m: F. n$ ]<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
1 U: u7 {1 Q' i/ \7 t8 S+ e. E1 B<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
  X- c. T+ L* c7 z  B<pre><code class="language-javascript">每三秒弹出 "hello" :
1 ~+ ~' [& n7 [2 ssetInterval(function(){alert("Hello")},3000);
2 N- b' l, W9 |( Q. W  Z3 w6 f</code></pre>
' v* }) d5 P) j6 X# D: C3 y<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>. m6 V, S: B1 m% e) q! B
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
& d2 n' D9 p2 V//取消:
9 z- \( |- [" k0 ?7 pclearInterval(t)
+ k9 \$ O4 J: n1 i, j</code></pre>5 Q2 Q2 y- _. e* x- f: E
2 N# r) U, @5 n
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-9-18 04:52 , Processed in 0.093463 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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