飞雪团队

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

前端之JavaScript

[复制链接]

7992

主题

8080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ I; _2 P/ E# H+ h<h1 id="前端之javascript">前端之JavaScript</h1>
: W  R3 r. ^$ N7 i4 V% x/ b/ z<p></p><p></p>
5 W7 ~/ ^- T7 W2 Q<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( e0 e! ^! [+ t8 h5 s<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
; @/ i& F4 ~, c, u2 _它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
: n  f) T! a' e4 f5 `8 g它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
+ J: o5 u. _: z+ v7 v它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
1 [9 Y2 r4 }' p2 X8 _<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
0 y# x& @3 w9 d6 M$ o: [<h3 id="21-注释">2.1 注释</h3>2 Q8 O' V& ~! ?  N7 Z% d# |
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>$ M4 C' V. H- s0 H* u4 ]1 x
<pre><code class="language-javascript">// 这是单行注释/ D; e) U. r. x8 Q2 ]3 ]) p$ J' ~. S

8 Y! E8 {2 |+ y: E# ~2 ^" U/*
2 k+ `. ]) i* b; q2 N这是多行注释的第一行,
! L  h& c& n% X1 W3 S这是第二行。
  K2 Q4 O0 b8 N, U*/% @& q1 r& O& T
</code></pre>
/ G0 d% S3 K2 A3 x' H<h3 id="22-变量和常量">2.2 变量和常量</h3>( M5 z0 }3 S6 J" L7 z1 @# y
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
- E+ _7 H) q; n, N0 m: X6 x<ul>7 n  @1 S4 p8 x1 \: R% m
<li>变量必须以字母开头</li>. n9 b, i3 Z, o1 |( H& l
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>& s2 ?6 b& X8 m1 O
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>- b- s1 p1 A6 Y- T
</ul># g( w1 b; m1 N; a5 r0 \, |. D4 \. w
<p><code>var</code>定义的都为全局变量</p>
2 a, d7 o( b7 v9 u/ C. D<p><code>let</code>可以声明局部变量</p>( Z4 Q3 T4 S& I3 n) F; a) u
<p><strong>声明变量:</strong></p>
, |: a$ B& |4 A, d" ]% o<pre><code class="language-javascript">// 定义单个变量
% v8 z7 _& [, [6 q1 I&gt; var name2 @8 f. m+ ~! X, _: R
&gt; name = 'Hans'
1 F2 y( D! F. c$ y# X  D//定义并赋值
! [" S7 P* X4 B4 S- Q&gt; var name = 'Hans'
2 C, B4 [0 i  [&gt; name3 R* Q2 O8 D/ B- z" {9 D; S* I6 ]
'Hans'
0 v1 p$ p) H7 H- a
, ]* A- q. o) J+ C2 u3 R/ m// 定义多个变量/ X- Q3 v  \% g/ G$ o
&gt; var name = "Hans", age = 188 I) D( J# k  Y! w  I+ Y/ h' z
&gt; name" P1 _9 n4 R+ x7 V5 Q6 A) g
'Hans'
5 O- s8 n1 I& ~  l$ @) m9 p: K0 \&gt; age
- p# L! v1 W/ Y% ^18
3 o2 x' ?- l& ^( j$ k( k" M
0 a; ^$ ?1 r/ ~( c3 B5 n4 q//多行使用反引号`` 类型python中的三引号+ @) r  C1 n! E
&gt; var text = `A young idler,' `8 u3 D5 ^) P. s9 e0 G
an old beggar`( C$ \; v6 A: a
&gt; text
$ ~- i$ E5 `3 P7 j; J'A young idler,\nan old beggar'
) H# {" P* @  H</code></pre>
1 Q0 B% F8 \& V3 b% A* f1 {<p><strong>声明常量:</strong></p>- z+ z, m4 ^: Z; j  j' T7 \
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>/ ^: R; M) @# m4 i4 w; A$ F  U# v
<pre><code class="language-javascript">&gt; const pi = 3.14
0 N/ D' G9 X( C6 A. |8 K3 S3 K, J7 A&gt; pi
, r" j; @, x$ t3.140 k$ ]% ~! ]7 w
&gt;  pi = 3.01
1 i; y  }5 [+ tUncaught TypeError: Assignment to constant variable.
, {0 R* g$ C* d3 x' b7 Q. S    at &lt;anonymous&gt;:1:4
0 M3 L+ }: D+ m; T1 Q# h/ m9 G0 Q6 _9 Z
</code></pre>
* s  ]9 f' O& C' f<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
6 {5 E+ U7 }" ~8 F4 v9 J# W! y<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
. n) [6 Y$ i) \5 D<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>0 c( W/ m$ u- o3 I! b& X3 v* c7 j
<h4 id="231-number类型">2.3.1 Number类型</h4>! c, S& ^" B1 i
<pre><code class="language-javascript">&gt; var a = 59 f. M7 `) X: u# B2 I2 [+ I1 F
&gt; typeof a   //查看变量的类型  3 t1 j. r5 M. q
number% w( x6 V/ c1 c3 {
2 R& t; A9 F/ \$ [8 d4 U3 F) S
&gt; var b = 1.3
9 Z/ f% ^/ a( d" ~0 l; O; K' R&gt; typeof b
0 w7 k: {0 z0 rnumber5 X& H" m' e+ ^' s: l

3 r0 s0 B' L/ O: g& Q// 不管整型还是浮点型打开出来的结果都是number类型
+ R6 _( n$ J( v3 _  a& k( Y: l/ f
/*9 M( u5 ]5 B! @3 b6 O
NaN:Not A Number3 {& A. s  R" R/ D7 p! D2 o7 H
NaN属于数值类型 表示的意思是 不是一个数字3 z6 Z8 p: H& j* A) u! g' i& l
*/) t! q5 B  _% C2 p1 i) V

8 w9 A) X; J% l1 |9 nparseInt('2345')  // 转整型
7 n- S( k6 ^4 \: h2345$ d" q  C& ~' }) @: v/ J
parseInt('2345.5')( j1 g5 X) o3 `; F
2345
, Q" [8 j9 o5 f  e2 WparseFloat('2345.5') // 转浮点型* F& S6 }1 B. R: d0 g
2345.5( ]  ]1 X, m% z
parseFloat('ABC')
! Q% o2 T) x1 aNaN) }- F. f! A6 A, t/ A- ?
parseInt('abc')
8 l1 R! W1 d( d" B4 H; |NaN
$ l# @+ O3 o8 z) U* J</code></pre>( [# Y/ S+ b* z3 ~$ Q+ w) d3 p' T
<h4 id="232-string类型">2.3.2 String类型</h4>
$ d4 q/ o- V3 l/ W4 O: w. H; k<pre><code class="language-javascript">&gt; var name = 'Hans'8 r) a9 Q  h) l* ~' {" ?" C
&gt; typeof name
0 |5 B( y+ j9 i$ T3 l2 d. x- E'string'9 x1 r7 W2 N* t8 u6 ]5 K

+ k% ?9 L" r% c2 y2 P//常用方法9 t+ k2 O2 Y' l) u9 n* r" a
// 变量值长度
/ x1 q: l4 R9 Q7 s&gt; name.length
, S4 b  r1 Z. O# D; F4
2 C+ P7 V* z3 W* M// trim() 移除空白* k: c7 T$ ?% \  C2 i
&gt; var a = '    ABC    '6 X) G( y8 z9 s" k& J8 K  e# t+ y
&gt; a
1 `* P3 j! M0 e# L4 Y! V'    ABC    '* Y6 i- k  c6 n1 y& x4 Z* T
&gt; a.trim()
" S! P8 {. e9 e" O# l$ U'ABC'
  |6 p) p$ Y4 _+ x. o- R8 x//移除左边的空白+ s8 X: z7 I1 ]
&gt; a.trimLeft()
  p9 Y8 {* _1 O$ Q  r7 w8 A'ABC    '
+ x3 ?  u! T! W7 N: f//移除右边的空白
3 U- B7 ]  e- T5 V  A&gt; a.trimRight()
* G7 I! O! r) z( u'    ABC'" X6 t+ C: e6 o8 L8 Z$ i

3 ]8 K9 d. }. P  t//返回第n个字符,从0开始
/ H. I2 K8 ^0 K' T&gt; name
( r* A" x9 t! [7 ~'Hans'. [' Q7 H) b/ t  I. e, q
&gt; name.charAt(3)- I' O1 R( K6 r6 K  y! U
's'
) n, K/ G/ `% e( I! z&gt; name.charAt()+ M4 v/ N1 S. z4 W
'H'( a7 I- O4 L! ?7 j9 `
&gt; name.charAt(1)( R$ c- j  `% J4 `7 m( ~) L# V
'a'
' {6 v  @: q$ ~8 p) R5 C( \* J1 H( ]: V
/ f& K0 l  V9 W// 在javascript中推荐使用加号(+)拼接9 ~6 o  Q# P5 L* n8 c& u$ D
&gt; name% @4 @7 f  N5 Q' f. F% W
'Hans'4 k- a  a# }+ x. W1 G% x% l+ u+ E
&gt; a6 M: }) b8 y. t, B
'    ABC    '( \6 r( D& Q0 |
&gt; name + a; Q' p! \: u& f0 r1 F0 E% m" n
'Hans    ABC    '0 p* `0 [1 i7 N& o& s6 b0 G
// 使用concat拼接  }) \! L# O; g! C$ {/ n3 S
&gt; name.concat(a): v/ ~( ?/ O( o  m) ~3 }1 `
'Hans    ABC    '
3 }$ W0 T1 U3 V0 p
, _# }3 e2 x/ p  y9 `& o; X//indexOf(substring, start)子序列位置
$ |9 p# E, N, \& o6 u
5 I6 y. c& i$ A0 z, H7 ]( K  u4 {* _&gt; text
2 j3 S, h3 m- a! ]% M9 Z! b. L; ?'A young idler,\nan old beggar'0 F, w' g8 f) @: F2 S. O: [
&gt; text.indexOf('young',0)) N2 a* X( b. h; V, X
2
3 `1 l. Z! S& p; ]! U: _1 V. X
; I0 g, j. d+ R2 S; D  p  ^4 l3 A//.substring(from, to)        根据索引获取子序列
* w$ s, ]. U/ r9 M+ w&gt; text.substring(0,): P: p- @* j0 G
'A young idler,\nan old beggar'
+ h* T  Y% H: [) t) ^0 y0 S&gt; text.substring(0,10)
0 r. y6 i+ R! ^. r'A young id'' H3 b8 p( E$ m9 v  d# k
( K* O1 g% d  j
// .slice(start, end)        切片, 从0开始顾头不顾尾/ I* A# m+ K3 T+ s
&gt; name.slice(0,3)& b6 k4 k8 ]4 m' U
'Han'5 `5 W% D% u; N4 Y' z% G& j+ R
1 h( a4 K6 C4 T4 L# p
// 转小写
9 L5 U- [- r* r; A5 _&gt; name% \4 W4 a/ w  J' @8 X
'Hans'
# }, B# f/ d; P$ H" S: i. d7 s&gt; name.toLowerCase()4 r) B+ }- a% l: d& V! t
'hans'3 u" y! o0 S! K: [4 Y2 X/ j
// 转大写
+ `+ L9 ]) Q6 i% |- j* [+ h&gt; name.toUpperCase()
% A8 ?7 J& I; p* j. i7 x- j'HANS'$ @; o; m& h7 z. g6 L' ?
; ^& G/ J5 ?& W
// 分隔" @9 {3 {7 `% T' P7 c& \  n+ _
&gt; name
/ v; n4 v+ q/ l$ Z' i. s'Hans'* F, c# B1 Z5 b8 Q7 M. h
&gt; name.split('a')  l+ N( S7 `; N! n
(2)&nbsp;['H', 'ns']3 H# l. L  Y6 f+ x5 _  Y
</code></pre>
  x# G+ U5 q( ]( |+ [( ^! l1 }<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>7 @! n5 `  P; o9 P# f  h
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
, i+ C3 d; x) U* p& {<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
2 g& s6 l! H9 W! w8 B<p><strong>null和undefined</strong></p>
- q- J9 o4 U8 P<ul>: \! o) |( J2 @& W" S* b
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>- R1 l# v9 w5 H" s9 r$ d# e
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>$ ?5 B. ]- N2 `' C4 j( o: ?
</ul>" ^: f( s; {7 m+ h2 u* i8 n8 ]+ m
<h4 id="234-array数组">2.3.4 Array数组</h4>
1 e! g1 T# b+ o5 C* x  s<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
, V* q: B  V4 _  N<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] " g9 X1 s; D2 k$ F3 n/ O, Z  g0 P$ o
&gt; array1' v* w  t; U+ o4 C4 k
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- `( g1 q) z6 Z3 ^0 D&gt; console.log(array1[2])  //console.log打印类似python中的print
6 ^( e- _3 [/ ?' ~  D3- L% ?  v' _% I( h
// length元素个数
6 b7 x2 e1 m8 F4 G&gt; array1.length
& ^9 d9 _9 g+ W& ]4 [6
; @: n( u1 @) X. ], e// 在尾部增加元素,类型append
6 B8 m! y3 i$ F- ~( v1 `+ z& a9 L&gt; array1.push('D')* l5 G& t3 F, N; e+ e
7
, y0 |" ]) z, q# O&gt; array11 l) W/ Z( N! g" _
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']7 P" E- M: [0 ^9 o- h7 @, _0 L
// 在头部增加元素
. O" N) j8 X0 `/ t' R/ k& g! |&gt; array1.unshift(0)* n- N, E. R, ^2 k, l3 e
8
' |5 \/ D5 G, c% F' |5 m&gt; array1) U% v/ @2 }& \1 E# }
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
1 u% {( g% h' [
! m0 x- t/ {9 C$ q4 k//取最后一个元素
7 R9 {" S0 v2 _- i. g  R9 j&gt; array1.pop()
# C7 _& f8 p$ J, G9 z& m) ?'D'
; ^8 b2 ^; n$ a" L1 ^* x&gt; array17 _. ^% k5 v8 n1 r7 x# a3 U
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
- m8 q! o3 Q3 F! u7 L//取头部元素3 Y1 r1 T6 Y6 U. C
&gt; array1.shift()) s+ c( \& K3 _
0
  N  G( F" }# x% g" S&gt; array1
2 R$ p! Y( Q" T2 D" T2 S/ m' _; R(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']% s, A5 N; e( n( g3 k
" N6 I3 z8 K' `6 ^) D4 J( K
//切片, 从0开始顾头不顾尾- Q+ R8 s) u) ]' {/ M8 f
&gt; array1.slice(3,6)
$ {, r: x  i! u$ g(3)&nbsp;['a', 'b', 'c']
1 N( ~0 F9 x; C3 t. m; a7 v// 反转
' M. X# p4 l; u! y( t5 s&gt; array1.reverse()
$ _0 m$ i9 }* F2 S; G: X5 V(6)&nbsp;['c', 'b', 'a', 3, 2, 1], n, X! h; u$ K
// 将数组元素连接成字符串) Y) n1 f7 J. i7 H7 ^
&gt; array1.join() // 什么不都写默认使用逗号分隔. `% y( o8 C8 N3 D* ?  j9 A& q
'c,b,a,3,2,1'( h$ [. V5 O0 a) ^8 A* \
&gt; array1.join(''), D$ y  v: B; \, }
'cba321'8 A, I2 X$ B, {* e) `6 o# w
&gt; array1.join('|')9 S  n  B% G7 k, Q1 S) o8 T2 ]
'c|b|a|3|2|1'
7 M- h5 n3 J8 F! f& w
5 |/ Q6 B$ q) `// 连接数组. L, V3 c3 a7 w& X
&gt; var array2 = ['A','B','C']8 P. v( Q5 y; d" D) q. w8 h
&gt; array1.concat(array2)
& w& n3 g/ [  ~( i2 k* U(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
( d. w; [8 @/ Y  K9 A
+ g6 U$ K  t) O8 B// 排序/ S- n3 f; V+ w% \0 G
&gt; array1.sort()5 F+ J3 P! l; a6 B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 C2 K, }+ r5 A& p9 U/ O& R/ ^# a& F; R3 i2 d
// 删除元素,并可以向数据组中添加新元素(可选)/ v1 w, P8 Q& ^! q, H
&gt; array1.splice(3,3)  // 删除元素) _  @" }+ \' _0 C3 t- C
(3)&nbsp;['a', 'b', 'c']  x) X5 d! A5 J8 z/ G, E
&gt; array1
( Z3 q6 A+ s1 Y7 Q" W% b+ k4 T(3)&nbsp;[1, 2, 3]: J+ y6 P8 X2 ~; v4 y4 ?; a
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
* y4 a- D" o/ i( m[]
" h+ m( r2 V& z( u# a; [/ K1 h; H8 {&gt; array1/ x" s$ c' f0 a5 \0 h) i
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* T. H& b  h8 x% ~5 i

. q0 W& [% }( B' K, l/*2 o7 P/ d9 {6 @" l
splice(index,howmany,item1,.....,itemX), k6 u) b: A9 i
index:必需,必须是数字。规定从何处添加/删除元素。
' h7 ?! E( |2 ~& |4 c4 Q( L- Phowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。' A: }1 u1 Q: ]! |
item1, ..., itemX        可选。要添加到数组的新元素/ _, R2 p! p; i( ?6 q
*/
4 }4 u5 ^  o& w6 J& [* r" d: U  A( H& L- j  `' ^4 s
// forEach()        将数组的每个元素传递给回调函数9 \5 n. s8 L2 ~' y) I0 H
&gt; array1.forEach(function test(n){console.log(n)})
+ O- n  M# ]  P6 r; G 1
# t6 e9 f" k5 ?3 T5 L8 p+ p 2: d9 q+ r' U' ~' P$ T. ~0 b' w
3
1 {" J" L; Y3 k5 h+ K8 C9 {1 i A
4 ^3 H' B9 x2 G; j, ]/ Q B
+ Q9 n( [) m/ V C3 l/ U) O' A& V# y+ t
// 返回一个数组元素调用函数处理后的值的新数组
2 C. a2 W" m. i9 q) Q&gt; array1.map(function(value){return value +1})
' m2 }9 B6 \) N: l8 P(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']! \6 h' U" I6 {! c/ s
</code></pre>$ D3 O- K- t6 c
<h3 id="24-运算符">2.4 运算符</h3>
( ^$ ~0 r" k4 J& U- X<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
5 P# G8 z" U: w/ W0 \* z<p><code>+ - * / % ++ --</code></p>
) P6 m' M. A5 ^* g<pre><code class="language-javascript">&gt; var a = 6
1 d2 s$ ^. s: v$ u&gt; var b = 3: {% [$ U: v9 e, W4 p( Z4 \
// 加" j; k! I/ O; p9 o
&gt; a + b0 `3 T9 r+ m0 R9 C) [9 g) T
98 B6 i; D8 T) t1 U
// 减
5 Z4 J3 J5 G* g2 v, Z! Z$ p' @% \&gt; a - b
8 v  x8 I8 @3 j  n# S; |34 q: m0 S2 O; i' e! g$ u( c
// 乘
& e, u/ ]* c4 {4 X% f% [&gt; a * b
0 _8 k$ R& R) U& o: Q/ z" v6 S, x18
4 f+ e, B8 f; V4 @5 k, j// 除
2 `0 v7 s7 j  j0 n2 ?5 ~4 N# l- _&gt; a / b
- d+ k% P' u/ j& L2
/ o; {6 _8 n* p// 取模(取余)
/ K$ A7 m; L" ?&gt; a % b% u3 G: l% K. k
0
3 g' A+ L$ z7 k; ]( @; J+ E( v// 自增1(先赋值再增1)
' ?1 R$ I+ k( f: ?8 F&gt; a++
8 g- ]" F3 n+ A  ]6
, R5 V- [( F* A% M0 w7 }&gt; a" W* H2 P5 f1 y3 @7 s
7
/ Y* _% [0 }* u9 _+ i// 自减1(先赋值再减1)
1 z/ I1 U( p- C&gt; a--9 G. [" \( [. k" o
7& F, z( A: `! F
&gt; a
! z3 y4 P8 `, c" |2 T6 P' I60 e1 T) d& t3 |- m/ D: |. U
// 自增1(先增1再赋值)
. F# c: t/ C' U&gt; ++a8 F0 d; ^) C$ N; B
7
$ z% v& Q$ F' b- |# K// 自减1(先减1再赋值)* N0 r  M$ v; ]  h+ @3 j* e
&gt; --a
- l$ g" o- k3 v) o6
, b2 x' W) p2 h&gt; a: B8 |  {6 i( E. j
6
/ O) H- L' S1 ?" n6 ]6 g+ F- y1 T
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理1 h1 I) t) \8 e
</code></pre>, Y+ B: H6 x# _) v8 K5 K
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>/ w5 {! }! E+ z/ z
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>9 s0 g# b3 A# V& N4 u
<pre><code class="language-javascript">// 大于* H4 C; }! H  f/ a' i; b0 n
&gt; a &gt; b& b+ L2 b! A: \; h! `2 s; M
true
1 i( L* u# |* R! |( o. _; s// 大于等于  z" ]1 H6 o1 n1 W, ?
&gt; a &gt;= b
, L5 s+ Y' H( X2 I; d6 I$ @true
7 c- N6 c9 F; @; H8 K  S// 小于
* y8 S7 P, d0 K4 n" H&gt; a &lt; b6 h1 @- q) C- K0 W: c% E
false. q  K6 u. R7 z" u" l2 k
// 小于等于7 a3 A0 ^# y; x% i5 f
&gt; a &lt;= b4 w- r* T" y/ P2 e3 m( J
false# B, }1 A. R0 O& G8 \
// 弱不等于2 F# ?& B& U% s) H7 K0 Q
&gt; a != b
9 ]+ Q% d6 G2 Q* U' b4 F8 _! }) i0 Z! [true  Y. W! ^. y* Z1 e) l* s$ k3 }
// 弱等于  k# i# c' C/ u* w* a# i& j9 s
&gt; 1 == '1'
$ z3 Y/ c" g6 E' q  V+ `/ P0 ]& ptrue7 p3 {, z( \1 Q  G  b- D' o
// 强等于
3 u" {+ W9 ~) A+ H4 `&gt; 1 === '1'( F" M1 I. _: Q4 b
false
0 C0 g4 _$ B  K) v9 x: G2 o// 强不等于
, a2 _" H2 `1 E* q# Q&gt; 1 !== '1'$ G1 e& n" g" E; Q7 Y; |" y
true
% Q: ^+ K3 w$ `, R7 h/ y9 H! {, g/ ^, a8 p! F
/*; ^+ M: E# x# m: D; M
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
# N' _- j8 M, R" C* e*/
: `3 W" a6 P% S% F; \2 |9 A</code></pre>( o2 W- I* q3 M! t
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
+ B5 {' U6 j* w- x<p><code>&amp;&amp; || !</code></p>
: L; `7 k( _9 R. e/ x( p! p! u<pre><code class="language-javascript">&amp;&amp; 与
; O2 C/ Z2 P4 {* d- a+ i" x|| or
! t7 b' Y* d' H* q* A! 非
5 V$ i4 q/ Z- U* T! C</code></pre>: H/ h4 k, v6 p. o2 }; }. Y
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
9 k8 r3 p! i/ |: ]4 i<p><code>= += -= *= /=</code></p>
9 a' q, K2 C( l3 K<pre><code class="language-javascript">// 赋值, r( j6 _4 t: T% R
&gt; var x = 3
/ h9 V7 D0 R* [9 X// 加等于0 w- ^$ b2 p: U% g4 ]
&gt; x += 21 @8 m7 g1 h, j- K! t
5
1 _+ y, T7 p: X  l4 u- H2 q, i% m// 减等于
2 ^! I; {- s! ^) u7 [/ C&gt; x -= 1  t4 c# t( e0 W
4
4 b+ ?+ P& Q2 I5 c. j" @// 乘等于
+ H: y2 _; f5 V. i&gt; x *= 2
1 E0 d% Y. B+ @; m2 M2 [83 u9 o" Y5 b: C/ D0 T) K
// 除等于
' A* |2 n. `& [; T&gt; x /= 2
9 ]4 N6 n$ W; U: U4* |. w! u9 d, G9 c# A
</code></pre>) s: s& p$ X; L4 n
<h3 id="25-流程控制">2.5 流程控制</h3>
# e; K" P2 v! x" T8 L$ {1 N. H<h4 id="251-if">2.5.1 if</h4>7 E, S/ N( v+ a' g
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
, W( c! M# V; K0 O* `9 Q* e! R: X8 o+ i4 Z- V
&gt; var x = 3% D: ^! a# ?, t) b( M  a  c
&gt; if (x &gt; 2){console.log("OK")}
/ [; k! x5 p/ K3 x OK
; h/ z- K8 i7 Z  C6 ~, N# o& N9 J! w( k* @  t$ D: l! J# n7 S3 R
2, if(条件){条件成立执行代码}
8 r; c6 K: y0 W4 G5 @' b6 G1 X- P        else{条件不成立执行代码}
. M6 z  L* Z$ P) T% B# g
: T2 C/ o( k# m9 K&gt; if (x &gt; 4){console.log("OK")}else{"NO"}1 o: ^8 Y! `/ |  U( S9 s
'NO'' ?: ^/ q+ I% o7 R
) W8 {* @" n! P3 j
3, if(条件1){条件1成立执行代码} : t4 Z9 G# G. d
        else if(条件2){条件2成立执行代码}: @! H+ L6 P% C! R: r) ^2 i& v7 i
    else{上面条件都不成立执行代码}' e5 V: d( O' w3 w$ X

, x' |1 r% e6 z% u2 h% j8 j&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
) q; s; c3 N2 O# w Ha* o! v% v" c- I8 z7 ^
</code></pre>- s) t, B# i5 `* e# h4 R4 T* k$ D
<h4 id="252-switch">2.5.2 switch</h4>
$ n9 u$ t3 i1 i& ^<pre><code class="language-javascript">var day = new Date().getDay();2 t5 t( p* V( O: G7 e
switch (day) {. u. g2 f+ Y5 a% A7 F  l
  case 0:
  M) Y; G- V+ {  S0 ?  console.log("Sunday");
5 C9 x/ {+ [" I  break;( w1 K& b0 J1 d! b3 T
  case 1:
9 c1 d& m: m* Q8 N# \2 Z0 l  console.log("Monday");' R5 b' ?* L; A+ U4 R, x5 `9 i
  break;
8 D, W8 m$ z& R9 M% Ldefault:/ W6 N0 T. ?# D& g4 Z% D
  console.log("不在范围")+ ^4 Q% }0 j* N' j2 |9 B& X
}6 f, N+ h$ }/ k; @  V) [5 Q4 E
不在范围" ]6 i& z5 r# M. k
</code></pre>" H& Q! \" d+ D4 H/ t4 V# _
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
; O  S  `9 {8 H<h4 id="253-for">2.5.3 for</h4>
' K8 @6 ^9 }" r6 k1 Q2 y6 Q<pre><code class="language-python">// for 循环
' B: B- f0 d9 G5 G0 R% M, V. U" C- b$ P        for(起始值;循环条件;每次循环后执行的操作){: ~7 F* z0 |2 J9 t5 @& S5 o
        for循环体代码- S1 H. [: K5 P. j/ d- `% e& l
    }
% b2 G$ r! Q, s9 S+ l) v2 X& Q  U8 ]$ k4 W& O4 s" _
for (var i = 0; i&lt;10; i++){* h2 V# R) ?6 g2 ^2 m- A
    console.log(i)
, ]$ N3 v4 \8 W# k. e8 k$ F6 K}
8 C- p& H; B2 Y  l; ?        0
. j' r: O9 r5 i& U" l' \        1
: E' c* L) j# \        2
8 u9 y; ^1 r, ?' H5 p1 m        3
( S  |; w0 o5 y4 [        4
- V& }' }* d1 m* N6 T( M- L9 e7 V        5
( T+ W$ c' o( ?, m& e        6, f3 h4 E5 y7 m
        7
& Y3 O/ W6 Q+ k) }        89 m  }$ S6 `  ~
        9
6 l1 K2 @) `7 P1 I1 ~</code></pre>
: N' O+ r: c, b2 X<h4 id="254-while">2.5.4 while</h4>
# t4 V' b" @( H$ }  c" i<pre><code class="language-javascript">// while 循环# x, Y' r) f. |, p8 s( b+ ?
        while(循环条件){6 U+ [; u  M1 f! O& `) K# T
        循环体代码: C& y% k' r* r" q
    }
6 f* E" q, T; o& g& E6 B0 C
0 p- X) ^8 j) h: i% J&gt; var i = 0
$ G) E. _" N3 M/ N4 A&gt; while(i&lt;10){3 ?0 ~# m, [6 w( X* h
    console.log(i)
* U6 Y& u7 l: t, h( o    i++
7 z! `  M- J$ H0 W# Z}
# H& a2 p; T6 v( w+ m$ C 0
: h3 v5 E2 n3 I. B: a$ K 10 M' w: Y' D8 w# W; g! w( F( t
2+ S0 a, V4 t6 x, w' y1 h% s
3" @  Q: S- K5 Z/ _, `
4! Y( p2 E. [; P5 Y
5
; K  i! ^5 w2 u$ _ 6: X/ L' t$ {1 o+ C8 j/ H3 h
7
% f* S+ g# n1 ^- ~- c" n- N 8  ]  |* B  D+ ^6 I* g% N; v! a9 V
9
$ b- T: F' K, x) e/ `  e</code></pre>
* |) L! p- J- }( @! J/ b<h4 id="255-break和continue">2.5.5 break和continue</h4>
* Y& n( y$ G/ |( M) s$ B<pre><code class="language-javascript">// break
* W, z" d/ h; I6 T, Wfor (var i = 0; i&lt;10; i++){; l# ~/ u, V  K4 g. x6 v
    if (i == 5){break}
' x# T( S3 f2 P    console.log(i)
6 b4 w$ V. Q2 p}
8 o+ u( k) E  K; v7 e% ? 0
! }  H* ~5 A2 v) I- s6 o6 v 1. _0 s; p" o3 O. H+ S% Q0 a# h
2
/ i5 R7 D, S2 x0 n 3" N/ I$ w( h! B2 b: w' {1 M
4
1 ?' k1 e4 ~! ?; W9 C! q/ ?' F// continue( o. W2 F; w7 M! {9 l/ [, g) F" P
for (var i = 0; i&lt;10; i++){
& R- W$ ?4 {% |3 k    if (i == 5){continue}) I) Z6 g; E: @: H- v- U
    console.log(i)  E6 {- A' p: o8 W
}& h7 ]0 r% W3 D4 w7 Z! o! l+ {
0
3 k- ?4 n) j+ ?( B 1# e& i; U9 n; v9 [( L% {8 }
2; i. D2 v' T) Z3 I- B
3( H6 e% g& a3 v
47 Y# g: `( i, }' Z+ ]. v' H9 H
6
& G, _. Y$ z" I3 A' ^; o0 ~8 s) h  J+ Q 7- [1 Q# w! \& q/ \, n9 N
8
# ^5 v6 E0 ]7 Q  D 9" G; t5 o% {' v

7 e  Q6 B. O# e</code></pre>
+ f) i8 c6 n0 C* p( z5 G& b$ A0 G* g<h3 id="26-三元运算">2.6 三元运算</h3>
+ |" X  O  B6 i$ C$ k<pre><code class="language-javascript">&gt; a
& Q" j5 Y- i4 l' {. `# X  X- U8 a6
& D+ o4 w  G7 O3 V&gt; b
; H4 p' x6 ~. [! S# p: c5 M37 z6 B9 @5 I% O

$ n, I8 e% f: u( w+ h6 v/ r//条件成立c为a的值,不成立c为b的值
$ m. m8 f# m9 w- f: j&gt; var c = a &gt; b ? a : b
5 @+ f4 n& B0 M" U. Q&gt; c# b: z8 _2 P% Y- g+ O$ s
6% D( ?8 h' ^! P5 v
* J% ?/ V# J# _+ S
// 三元运算可以嵌套9 {  u/ T1 U. B3 v$ C
</code></pre>
. |7 e$ p* k' D<h3 id="27-函数">2.7 函数</h3>1 |9 F; g; |+ U, s2 l9 v" g* T
<pre><code class="language-javascript">1. 普通函数
- r5 c6 I+ |/ y&gt; function foo1(){
9 w# h! p$ a- b2 x' t/ |6 i    console.log("Hi")
; b$ x: ?' c. H* y' S}/ q  X2 X7 H5 v0 [
) Y9 Z5 ?. ?2 ?/ m( ^0 a
&gt; foo1()
, ~6 o4 G, a% {+ M5 a8 `        Hi
0 E* ?" n# P# T! V$ X& f7 j2. 带参数函数1 U% T) V7 @! w+ j/ P/ a
&gt; function foo1(name){4 S7 A: M& |+ E6 ~" Z: |
console.log("Hi",name)
6 h- F; V% j: m& N/ e3 D& L}" C: \6 m5 L: e/ D4 L
8 f! {% ?( m- N. o
&gt; foo1("Hans")- v# o, Y' A7 s3 _$ T: b% M7 v0 T
Hi Hans
' j5 w7 i, G- ~8 ~& o' z& a7 F3 y7 E- u4 `
&gt; var name = "Hello"# a! ]; y( z! n: p+ v
&gt; foo1(name)
9 |3 W+ @. j3 \$ \$ {! J) wHi Hello
( q2 ^1 X/ h2 o& z/ w% K. r# J0 I6 L' \7 m9 W
3. 带返回值函数
( j1 [9 Y- H+ C1 p% Q7 `&gt; function foo1(a,b){$ ^6 A9 L0 Z2 ~9 D, x7 h4 Q3 i/ {
        return a + b   7 y" A& \0 V# w0 P! C" u
}
' S3 D$ {6 @- _9 y! U! Y* H&gt; foo1(1,2)/ j0 u$ K1 i0 `3 r5 f9 I) M; b& _
3
# T. R. w3 e6 E( r/ c&gt; var a = foo1(10,20)  //接受函数返回值
3 \- |* U7 Q( w2 q* W&gt; a( \8 ?! t8 n8 N/ e  C) b0 U
30
6 A9 }7 Y9 `, o2 a5 H0 L  j' n4 Y
( Z8 C1 Q* |. j+ r# N, E4. 匿名函数
7 g3 Q8 ]6 C1 u" W&gt; var sum = function(a, b){* l/ M2 ?6 r  T) d, v0 H
  return a + b;
: ]4 X% j' v, H7 h7 K& G. F3 K1 y- _}
( v  ^: s/ I0 L" _) p* d5 I& P&gt; sum(1,2)7 \) M: s8 V: W6 I
3! L4 l5 O  k) c1 z
9 r& o1 {4 n! e' b- u! G: H; i
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱0 s8 _3 H! Q. k: A
&gt; (function(a, b){9 O0 c% v9 H1 q+ y
  return a + b( v- _: ?. e( d3 b1 w; E+ u$ X$ @
})(10, 20)
; j1 |$ Z; m% C/ @2 ^6 H6 S: w30
, h4 C1 l! O# p7 ^0 ]' i
0 j6 ]! R. r. k) p( f3 c4 n5. 闭包函数
; \% |" s9 q( N0 ?7 I1 @* e8 `// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数( w, N* V1 Y- m/ @: h3 N4 l
var city = "BJ"
- J. E+ i: p' t7 E6 `function f(){
% C; Z, V& j; Y$ ]    var city = "SH"
# m% S4 J4 i( r1 r( f* i0 I, K    function inner(){4 ^4 E) M/ ]* @2 W/ C; v/ p+ Z6 ?# j/ Y
        console.log(city)
2 ^8 x  [! b% m/ ]! T+ R    }- R8 T' D6 E8 u+ Q. s, B% t
    return inner3 w# N  O5 V# W! p/ w
}
5 z4 b8 U$ C# G4 g8 T4 [7 \var ret = f()
4 x: ?7 m, O* X7 _# Y0 gret()
( S; J/ q3 _- v执行结果:! O4 F% x; r  C7 l
SH
6 Q2 o. _4 n( U0 C
8 H' }( @8 |: B+ j) m( J</code></pre>
* v3 v( V/ v0 N# P& ?4 A/ J0 ]3 `8 I2 y  i8 @<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>; `; K1 `/ y) c- k! U
<pre><code class="language-javascript">var f = v =&gt; v;
+ u4 F! d1 m5 f/ ~2 U' t; g// 等同于
7 U1 c; }( k; u7 evar f = function(v){
7 z: g# h) z" }  return v;: G& P/ v4 s; ~% V9 J5 q
}' K: A" l3 V! ~8 i% f2 A
</code></pre>
4 u- a0 V( j; t9 @<p><code>arguments</code>参数 可以获取传入的所有数据</p>" P9 q/ A) g- b/ r" l, G9 f& E5 T
<pre><code class="language-javascript">function foo1(a,b){9 Q; Q$ |' C$ x5 K8 [& S% S& R; y
    console.log(arguments.length)  //参数的个数
' \% _3 L/ o2 b1 n# w0 @    console.log(arguments[0]) // 第一个参数的值
6 k# i- X" h5 b: C+ B" y/ [        return a + b   
  y" ]8 ]! B! f0 [. a- [1 J}& S: C+ I, K: q1 L* c8 `$ u
foo1(10,20)7 X/ t* |4 _! y. \. W$ W5 G
结果:1 H2 a9 C& p, ?% F% u6 M* l
2          //参数的个数 9 p- ], J/ L2 v! R& f' K
10        // 第一个参数的值' t' ?8 m6 {" q/ P$ I5 N
30        // 返回相加的结果1 o  N  }8 J: G% J2 p
</code></pre>6 L$ ]# T8 y9 ?$ m, Y. e  @- F
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
; Y) `" E8 R6 s0 B/ J" |4 x4 H# j0 e<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>! X7 _1 ]" e& A1 Z4 h
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
  A( T* s' h  g<h4 id="281-date对象">2.8.1 Date对象</h4>
7 i+ k0 M0 E: O2 a* T- b<pre><code class="language-javascript">&gt; var data_test = new Date()6 O: u: S# |/ s. b
&gt; data_test( ]- F( D" J' R+ e6 U
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
" X! w2 e  d6 B: R$ T8 G; f&gt; data_test.toLocaleString(). h" }8 Y+ E; Z
'2022/2/11 下午9:44:43'
9 Q/ O/ @/ d5 }4 d, I! X$ v/ M
2 ]  P# O# ~- p; K. r+ J0 w8 [&gt; data_test.toLocaleDateString()
# h) C- S! m4 O8 H& ^( o'2022/2/11'
: V" \& Z1 L% ~: n3 }1 R$ c3 R$ r8 n7 X3 U! v! f& Z& H; D
&gt; var data_test2  = new Date("2022/2/11 9:44:43")5 |& J, \% h8 @# P8 E
&gt; data_test2.toLocaleString()
0 {& y9 v& X% c- |2 A* d'2022/2/11 上午9:44:43'
. E3 L: h' f$ L6 B/ A; G( J8 n2 ?
- ^0 T' H' E) T; ?// 获取当前几号
" Q6 ?0 q0 x; M+ I* ]. y+ h% C&gt; data_test.getDate()
8 ^  u: C, m3 @/ u11
! v* V( k2 V: ]% X, w0 a// 获取星期几,数字表示' y5 \3 Y0 d! u- W/ e5 d# U
&gt; data_test.getDay()  # D' e6 y* H) y
58 o* `# d* l: _; G) J; @
// 获取月份(0-11)
( d; P, t8 t- b% o* M9 W&gt; data_test.getMonth()
6 c/ u  S* D* _! t1 ?3 s! O& t12 {' C6 n  R$ H
// 获取完整年份) v! L7 c) I3 h; E! v
&gt; data_test.getFullYear()' u' n" E5 J% G0 U) ^
20222 e0 Y# A9 s' P' w- q2 I. s! r! i
// 获取时
+ x% t7 t, Z0 w/ F+ o- \" I6 `&gt; data_test.getHours()% \5 C3 P" }: S
21
7 Q! f6 g2 l; t) H! ?; M! A( ^) l// 获取分2 B% y/ J  \0 x: K) n' ]
&gt; data_test.getMinutes()5 L1 b6 e1 J4 x) \+ D% j
44% ?/ F1 e, w+ W6 ?
// 获取秒7 e/ V1 a4 p. D3 L9 c1 S) v
&gt; data_test.getSeconds()
4 T8 J! ^4 r1 {1 s' w43/ i# ^0 F9 S" T3 z2 p
// 获取毫秒
, U% \$ x0 f1 M' O8 |3 ?* r% _. c, _&gt; data_test.getMilliseconds()
, C9 e; s! J1 e8 Q9 }- ~* w: R290
4 _4 S+ N6 J8 }+ s// 获取时间戳
3 U. ~" P+ l! j  m$ k&gt; data_test.getTime()
8 T1 c6 N& F8 v% B; c6 i1 g, a- A1644587083290
  N. R2 h  M+ P</code></pre>
7 w6 p! s0 ^9 B<h4 id="282-json对象">2.8.2 Json对象</h4>
8 J# C7 x" o% `9 k<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串4 y& ^5 }3 u  |' Z" S+ d3 N
JSON.parse()  // 反序列化,把JSON字符串转换成对象& U" v5 N0 Y- [0 l) o2 C2 Z

- s2 G- I2 R1 i& W! {' `// 序列化: D  B1 j! e4 }2 E/ i9 {
&gt; var jstojson = JSON.stringify(person) 4 a4 E$ l! J4 Q( I
&gt; jstojson    S% x/ m) E% l; t+ H* m0 X
'{"Name":"Hans","Age":18}'
/ {: j- m0 {  l) @4 z) F% t- d& W& I: T7 G. l" n
// 反序列化! M; i; N* U- t
&gt; var x = JSON.parse(jstojson)
5 |5 o6 ?' @& L3 q&gt; x
/ L# s) s$ V  r9 N{Name: 'Hans', Age: 18}
5 f, d. M6 w) D&gt; x.Age( g. z7 v& [. J) F9 a0 u) o
18
9 o( I* v6 ~, r2 `2 ~3 Y</code></pre>6 O! Z( c  P1 E. E
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>6 P* B6 {+ g5 z. I- I; G2 w
<p>正则</p>
/ Y4 h7 h7 X) }4 \) M2 i<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
) Q' j0 Z+ b1 K4 I, c' S( ~  s! y&gt; reg1+ g) B7 B! b' D" ^
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& R' R; V, L  p+ H- q  C1 v7 ]&gt; reg1.test("Hans666")
. }- W( M) c9 P8 G/ y1 a/ Wtrue
* L5 r# C! K, \( S" z5 b
9 Z# i+ h; M' \&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
3 S5 n: Y+ I% @: W8 ?  r+ y&gt; reg2
7 r4 T3 v& S; }5 s7 O/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 T# z* q2 N, R9 F7 y
&gt; reg2.test('Hasdfa')+ z# P  K7 g9 Y
true
: f* ?5 s, ~% V% i% b5 B7 b
& D# ?% k' q/ K6 C4 ]全局匹配:8 l, F- z% X4 x1 B; u
&gt; name
: S* W8 O, a5 z  t'Hello'
( w8 [7 C& ?$ [  a- p5 m2 C&gt; name.match(/l/)
' t+ w/ G5 C' G* x9 f4 y['l', index: 2, input: 'Hello', groups: undefined]
/ a9 O  G6 \4 Z1 W$ |4 M- w* Z
* [" B& W9 k+ o& _&gt; name.match(/l/g)
& i$ M$ b; ~+ C1 ?  a5 `(2)&nbsp;['l', 'l']  p, X3 \/ N- S* C0 A- I' u
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配! L+ i1 Y+ D/ D0 n  }- b) B

; T) V: I5 J5 y2 L* @* u全局匹配注意事项:
" h8 M3 o1 R- e&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g1 O. T5 G* i; x* T
&gt; reg2.test('Hasdfa')
8 Z. |# ?7 B' q! `true
( T" o4 S" ]4 O% b& e# ^9 r&gt;reg2.lastIndex;  D8 a0 C$ d( y9 T& q# H" l4 c3 K! i
6
! X$ @$ }! K' j0 t( i& k&gt; reg2.test('Hasdfa')
' l% p0 U; P) L7 F& \9 ffalse
; `' I3 u8 N, \7 {/ L4 G) q&gt; reg2.lastIndex;
9 [& d, }- R4 m7 ~5 v. Z06 p' @7 e& o3 ^: H2 G
&gt; reg2.test('Hasdfa')! ?3 C+ @( v) o7 {
true7 i! i5 x- c4 a5 w1 F
&gt; reg2.lastIndex;
, ^! e4 s" X: I1 @& ?/ _6; C3 t0 P2 H2 j% s: p$ A2 I+ v
&gt; reg2.test('Hasdfa')9 K% \& L" |( d" ^9 P, \8 c* F& I) n
false
. |9 a$ [, u" j9 Q0 f4 V4 L6 r&gt; reg2.lastIndex;
/ Z1 |" |: }# m3 q0
. `6 `+ C$ f5 a! Z1 v7 w; S2 P// 全局匹配会有一个lastindex属性) n) s' ?0 ?" j' }
&gt; reg2.test()
  u% Q3 y  g. I+ ]! gfalse
9 h5 V' \3 w/ l, f  w# p&gt; reg2.test()
) @9 H0 u1 k$ t( l+ P& ctrue/ T2 y' c3 B# V* s
// 校验时不传参数默认传的是undefined$ A7 L8 B5 T  r9 M% m9 ~2 h
</code></pre>
  L' t/ e3 i3 g. L<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
4 T& d. b# N/ w1 V! d% l  B7 j+ u( \5 B<p>就相当于是<code>python</code>中的字典</p>
* ]* b2 Q7 Q4 J6 P$ C# N) }<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}* B: ~9 X/ C5 x2 |8 G* N
&gt; person
0 I2 [; ^% B& z9 m{Name: 'Hans', Age: 18}, s* S5 b; \5 b. _- x
&gt; person.Name
; F% S/ ^# j% b; k4 g" [+ s" v'Hans'4 d! u& T' d1 {) j. t, i) S
&gt; person["Name"]) F& J3 ^8 A6 l0 |" a" v8 p6 @0 D' W
'Hans'
% F6 h2 S0 G! `. U# L" z  k5 k3 O+ e  q8 ?9 y: r3 T
// 也可以使用new Object创建
+ ^+ q; S) h1 q; c" J- ]&gt; var person2 = new Object()
# A1 g( |" v) v9 G&gt; person2.name = "Hello"
# R$ p9 a- R" y5 N'Hello'
* \6 n9 _) R0 i&gt; person2.age = 20
+ z0 _: D0 U% N& _20
" Y+ L) P8 \- A/ j</code></pre>
' ^) y1 F+ Y; r7 l<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>7 ?- X) ~4 y. e) D
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>; [% t, a8 d. N7 U2 ?$ X" v- _- ?
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
4 |  e# z5 y& D2 R8 p# Y8 }<h3 id="31-window-对象">3.1 window 对象</h3>
5 R2 g# S; k5 u3 a, `: `* k2 j<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>; g5 z+ H4 @: T3 u( V- |+ H* q
<pre><code class="language-python">//览器窗口的内部高度; a, N7 N' W& \9 h
window.innerHeight 7 [- a. w$ J/ M
706
( F5 z9 {7 G" p$ u1 d" D; q( U, R2 F//浏览器窗口的内部宽度( u1 [8 O; m2 t! O; {0 a" B) ^* ?
window.innerWidth4 x2 e+ r: \, t9 Y; P  w
1522) ~# ~/ @/ E. ]
// 打开新窗口5 f& E' {- ]- g, Z, y
window.open('https://www.baidu.com')
% |7 S, u; }$ Q' b- dWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
  j3 |, r3 z( D6 Q$ e5 ~// 关闭当前窗口3 Y# J- Z5 D& Z4 q  ^: ?0 ^
window.close()
9 [* z% g4 A6 H( t4 N6 {" A8 W' d//  后退一页
" N  \$ T2 C6 n  o7 p6 [" n2 c- Uwindow.history.back()- O% @. X* q. @, _
// 前进一页- K9 O6 M+ t1 W& y
window.history.forward() & _5 x# O- m0 v& B) i
//Web浏览器全称0 v2 H8 s2 X  e) \
window.navigator.appName6 e  w, v/ D4 x' c. H
'Netscape'/ h* x( C* w9 n1 w0 K
// Web浏览器厂商和版本的详细字符串
! m' z0 }. F( O5 N$ t5 K7 Hwindow.navigator.appVersion
: O  P7 a2 B+ v8 k- Q( a1 W  S" }'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* {; o4 S% J, v5 L. X0 o# S/ {
// 客户端绝大部分信息( |) ^, M; o8 W5 w: N
window.navigator.userAgent4 W) ~1 p+ ?& R
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 U/ I5 {5 i1 h/ l+ }6 k
// 浏览器运行所在的操作系统. e) m& h& f. z+ m3 v) f$ s4 j
window.navigator.platform
$ H$ j# x3 F: G4 Z9 h'Win32'! r5 i8 y+ S: ^3 P' f

4 y  ]9 @: W, S6 ~4 [& |$ k//  获取URL" c' R. b! p- O6 {9 g
window.location.href
+ R7 X5 }+ b1 P! x& `// 跳转到指定页面  G5 J6 K* u: {/ x+ ~
window.location.href='https://www.baidu.com', D1 i7 o6 b( \; C
// 重新加载页面0 W9 P; P5 m9 v$ {$ \* R
window.location.reload() , V" s2 n# P, S; _
</code></pre>
0 J9 D. f" A: Z' z$ W<h3 id="32-弹出框">3.2 弹出框</h3>) ~- [# b- y/ q* S
<p>三种消息框:警告框、确认框、提示框。</p>! m, `" k9 M: L8 o
<h4 id="321-警告框">3.2.1 警告框</h4>
7 }) W: K0 K! `& ]2 ^% H/ q<pre><code class="language-javascript">alert("Hello")
. N9 k% e( X" V: S3 i</code></pre>! w% R' _  Z! l5 b) u) {, n
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
" k; k( r' F2 k9 ~. D/ n<h4 id="322-确认框">3.2.2 确认框</h4>
! t7 K6 `7 e3 X7 r1 L  z% E; H<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>, T9 J* ~1 \. A6 M2 b
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 }4 h5 ~' C+ \2 C5 c5 ~true
! [' M7 S: A* R' u&gt; confirm("你确定吗?")  // 点取消返回false
. `( ]' t5 v: zfalse# _3 L* P/ E5 R* S
</code></pre>
: O  Y+ A# l0 G* K<h4 id="323-提示框">3.2.3 提示框</h4>: D4 Z/ ^1 k( b+ b) S
<p><code>prompt("请输入","提示")</code></p>8 v8 ^5 ?* U- l$ M6 {
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>! t; O4 X0 O. v% ]! Y) Z  \
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>5 H$ z( \/ U9 b7 z6 {! ]1 r- P
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
$ y. M/ a2 p+ k3 h1 v<h3 id="33-计时相关">3.3 计时相关</h3>& R* y0 U, C5 J! A+ ~
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
: P. q# P( \  w; X6 T<pre><code class="language-javascript">// 等于3秒钟弹窗
5 D+ C% ]- |  }) }5 o* isetTimeout(function(){alert("Hello")}, 3000)
7 {4 q: G' d* o6 E2 C
8 i$ V' u2 X' C  o& }$ Zvar t = setTimeout(function(){alert("Hello")}, 3000)# [& T$ L: Y! t4 \! u

+ I( G, F6 U: H# b) k// 取消setTimeout设置
) ?6 g8 s% ]4 c9 V2 {clearTimeout(t)! x, }) w) Y) i  p3 Q; F
</code></pre>
+ U7 ]# \. s. t9 N3 b" U<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>8 ]0 e! h2 C8 t! g7 l
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
+ Q5 p- I0 O2 ^9 I2 Q. ?: [<pre><code class="language-javascript">每三秒弹出 "hello" :/ I0 c3 v% E- K& w% y- W, e9 C
setInterval(function(){alert("Hello")},3000);
) X* ^5 A' v( N- C; [* m</code></pre>
7 u# Q# e, ?; b9 V# M  V<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
+ T2 N9 Y4 a, b& U! E( m<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
! S8 d% Z$ N: v//取消:5 x1 @9 N: m. Y
clearInterval(t)* z  e9 A( l' f7 F; @+ K/ f
</code></pre>
  ]+ l2 S( H( h; U- B. y4 z
. L4 j- y* z0 |: }; Z
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-29 03:20 , Processed in 0.071702 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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