飞雪团队

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

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26276
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
8 ^. V+ G, \! l- }* w
<h1 id="前端之javascript">前端之JavaScript</h1>
, G. d5 R. K4 I6 U& R* w' a# N<p></p><p></p>2 X- _0 T+ R2 ^4 I7 C( j7 S. D
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>( V4 \  }/ n2 m% g( }9 |
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>+ g% z: v- j4 q$ N
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>' K# w0 b0 {8 n: T4 w
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
* G, }9 P/ B/ F( c3 p它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>+ g9 n! q- P6 T9 j
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>- L7 a- D7 ], `# Q
<h3 id="21-注释">2.1 注释</h3>$ e" \! [6 X- Q
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
; n7 J6 N, g0 ^  K<pre><code class="language-javascript">// 这是单行注释3 ?3 ~! L9 j( E/ a

3 l/ o/ N! v& s. }4 Y% j# L/*$ S: M4 n& p7 K3 ~
这是多行注释的第一行,
7 ], E7 g2 K$ x- f' M, `这是第二行。
- T% O! |& F: w/ H8 H* [- A+ x% R*/7 {' J0 y# U$ m! U( p0 B
</code></pre>8 J& r8 J! N1 y7 _* g
<h3 id="22-变量和常量">2.2 变量和常量</h3>
  \- G! b) A0 k3 Z, u. p5 ?<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>! |- T' P- E3 z
<ul>
  k/ V9 m! r' ~5 \; \  |) H( g<li>变量必须以字母开头</li>
9 V5 |' q2 J. B<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>- p" V0 @( I' l. N* G) K3 R
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% A/ u  m: e) D9 b0 {2 \2 Y5 r/ b
</ul>  h  u' D4 |! C5 R% k& A
<p><code>var</code>定义的都为全局变量</p>$ F% i3 Z' F  s
<p><code>let</code>可以声明局部变量</p>4 L; g( J. O+ }. L7 j4 k
<p><strong>声明变量:</strong></p>5 k/ x2 k% d8 X# D
<pre><code class="language-javascript">// 定义单个变量: N* k( e2 I+ U0 U
&gt; var name
0 T* q( A3 |( U% T5 M& Y( ?& p&gt; name = 'Hans'0 F+ N, X, m5 \5 B3 l! W0 k* _1 `
//定义并赋值$ t; n  Z6 t& A5 F% n
&gt; var name = 'Hans'
3 Y( F6 M/ O9 z+ G% B' n4 c- s&gt; name5 q( \$ G5 V4 }1 h8 @% C% W) ?
'Hans'
! O  T  k: q' b0 t% J0 @) _1 V, m. g' ^
// 定义多个变量
* Q& v/ N8 `0 h. g% U+ M- T&gt; var name = "Hans", age = 18: ~1 j! |8 M4 U
&gt; name
3 H9 D3 @7 {8 H7 y2 U  ['Hans'* L& _# r- F3 |: c" y% _4 J4 `
&gt; age
7 p7 S* P4 W( E4 S189 ?( B- {9 D7 y
$ `/ I$ D, t% P" I
//多行使用反引号`` 类型python中的三引号% u$ r  b! `5 i6 H' b
&gt; var text = `A young idler,% j% y- `: x, L2 X
an old beggar`
( _) v; G  u, `% Z/ t$ F&gt; text
+ H# D- m! o1 {'A young idler,\nan old beggar'( I; f5 Z! t. _, K
</code></pre>
8 F% s. \( A; [0 D<p><strong>声明常量:</strong></p>; i9 X, _4 H+ h- a
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! K5 O! m4 b5 h9 A8 I  z<pre><code class="language-javascript">&gt; const pi = 3.14
7 P; U2 d" M- L&gt; pi2 n8 C  F) D* V# P5 H% N3 U
3.14  R! H" @9 V3 f: r! Y+ e, M
&gt;  pi = 3.01
  d* M; q& S8 `% {& m- f, GUncaught TypeError: Assignment to constant variable.
2 W/ y* O: O7 f6 |6 A    at &lt;anonymous&gt;:1:4
! f1 i, j! z$ [! y- m1 c, o- H( a4 v( R4 R: N
</code></pre>
8 @- i- _8 X# H" \$ R7 }<h3 id="23-基本数据类型">2.3 基本数据类型</h3>5 G1 O+ I2 j. z; X: ?
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>2 t% S  U9 b/ I& Q- P/ r
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>; |7 `/ d( ~$ V2 s4 e! J: [2 S+ K
<h4 id="231-number类型">2.3.1 Number类型</h4>
8 A0 P- C. B3 ]" L3 h* q! f9 G) @6 S3 u2 n<pre><code class="language-javascript">&gt; var a = 5
) d9 t$ ?' N3 D  @: ~&gt; typeof a   //查看变量的类型  
/ L; }7 h$ a. z$ h3 Xnumber
' |0 @; T" v( s
; d$ a' O0 m6 Y% f5 u: q&gt; var b = 1.3. u( T% S& s6 S* \
&gt; typeof b$ E9 U: Q' S5 l% n  @& l
number  l8 Z  E1 L) r0 Q0 O, L6 d

8 v8 k% y* t5 C2 U// 不管整型还是浮点型打开出来的结果都是number类型3 S3 o+ C  {8 c- G, z: ^

( H/ O1 K( {2 D: z; r) L/*
9 o% y# w/ o; UNaN:Not A Number
- o" W" g) F* }+ PNaN属于数值类型 表示的意思是 不是一个数字" w/ i, B) U' Y0 _+ T  ^8 j- k' p
*/0 e1 h0 v/ n$ P, T: f

; r7 _, t& @" ]2 K' l, zparseInt('2345')  // 转整型# y0 W! I; x9 m' ^/ |6 q1 u# ~
23458 ?% n" q; J1 ?+ @2 q
parseInt('2345.5'), E3 E7 p+ ]8 w( s2 V4 q
2345
8 p  Y) A5 f* ]% n; N$ IparseFloat('2345.5') // 转浮点型
) E& a% S+ s5 Q" a3 w& j# Q2345.5( j, @" @! U$ H; m% ?
parseFloat('ABC')1 O, y+ |+ i5 i# O' p2 b
NaN
/ q0 u; b; B# bparseInt('abc')) h; l$ }2 J- O, f3 o+ @
NaN6 E9 K* j5 j: \
</code></pre>
( n0 V9 }# W% \' Z- h7 [<h4 id="232-string类型">2.3.2 String类型</h4>. N% V' l9 R! ?! Q1 K
<pre><code class="language-javascript">&gt; var name = 'Hans'; n/ o6 r! u+ n- X+ T# V& ~
&gt; typeof name6 c9 }% |  \' p$ A) V1 Z; f
'string'/ X# j' }3 @2 `, J5 F$ w6 G
6 b* i4 H! d. H: t$ Z
//常用方法  |: ^$ W( h, |. O  P! `
// 变量值长度
0 C: V8 M7 b1 Z& r&gt; name.length* o! i0 v" q; d# N; d4 F6 [4 M5 z* b; _
4
2 {! U" E( o8 o. t* ]// trim() 移除空白; @" _0 e0 q8 b7 N
&gt; var a = '    ABC    '0 q! C/ G/ j( W. h- |
&gt; a& o+ C8 Y% W+ A
'    ABC    '
5 `* X' f) {; c0 T- D. K&gt; a.trim()9 b& w3 h* P" s& y* }; L2 @
'ABC'
) e. a# U. w- L( y//移除左边的空白
7 T# R- b$ J  a4 V: j( O, E&gt; a.trimLeft()9 |4 p$ s  z) Z1 o1 I) `3 C
'ABC    '- H, \% C  v# b- Q9 G& `
//移除右边的空白
9 ?9 L; `) Y1 c: R/ U# `&gt; a.trimRight()  v. W+ h$ W5 ^
'    ABC'0 d; X: Q  C  v. w0 V
2 S4 N7 ~, ^( m2 u: S
//返回第n个字符,从0开始
" {, Q4 c* Y: {2 a1 s: f4 g1 w&gt; name
/ h3 C/ \0 M% x2 T! m9 c$ Y'Hans'9 k# s' x5 Q* {
&gt; name.charAt(3)
% g3 p3 K0 C5 G6 Z7 j1 q. o's'
8 p0 T9 _" E* D6 r, j/ R: N# B&gt; name.charAt(); [& z+ {. W- d: C4 q. |
'H'
( x2 N1 e) }" T4 H2 F6 v&gt; name.charAt(1)/ c2 m4 K2 T1 V. G
'a'
( l% F& }1 d& G9 C! @
) U& `9 K  G8 e/ f2 k// 在javascript中推荐使用加号(+)拼接( z1 L3 w! [; \
&gt; name
  s! L* z4 A+ ^# F. s4 H/ H'Hans'
2 ]+ z( M# m* _% Y&gt; a
1 ?8 d) Y/ Y, I7 e'    ABC    '
1 m% s/ ?: m. o% ?, _. B  n&gt; name + a
2 ]% e6 n" R  @'Hans    ABC    '( J. K! [7 H; k, C: n
// 使用concat拼接
2 O* ^6 v5 w' g2 A9 }&gt; name.concat(a)6 m0 T6 Q% I  f
'Hans    ABC    '% o) E9 X5 g; q2 g$ q) _) [* @

9 }6 R- A. u3 x0 t//indexOf(substring, start)子序列位置
7 F( _7 ]: R9 C6 E
7 F- ]4 J1 B8 G4 |  ~# ]- v# R&gt; text
$ `; D# R9 W7 H( l'A young idler,\nan old beggar'
7 r' G3 `7 F7 D2 C&gt; text.indexOf('young',0)6 [; s3 O6 M  Y% k; y6 o
2
/ @) m4 e, p8 |  Q) W$ R* t- t9 G7 b
//.substring(from, to)        根据索引获取子序列& I5 B/ l) ?! }
&gt; text.substring(0,)
& W8 `( R6 a0 T, q'A young idler,\nan old beggar'
! _4 K1 ~1 t4 h&gt; text.substring(0,10)
1 b6 B/ Z$ X! h( n7 C'A young id'/ I/ I6 W, v+ j  s# C$ q
4 ]2 j9 Y+ N7 |* z
// .slice(start, end)        切片, 从0开始顾头不顾尾
/ J/ i+ K/ J, h, g&gt; name.slice(0,3)4 y) x; x7 \; l' I3 x8 ^
'Han'* t% e: I; E: @& u
8 f& Y& w; C( p8 H: _5 I
// 转小写$ ^, l' L; x1 d
&gt; name. O+ N2 s" h$ k, n. w% R9 c+ x
'Hans'+ O3 j0 m  ^' R& {9 J1 ^4 S
&gt; name.toLowerCase()$ [! a. p& z+ o" X- _
'hans'9 K# p7 [% v8 P. h+ Y% g! U0 J
// 转大写
/ {0 p- d& @. n- F' i7 c&gt; name.toUpperCase()$ q0 h+ @1 i/ g, t; \
'HANS'2 `- j7 x7 [/ i
. A; @, W0 Z/ F9 f+ a. X7 b
// 分隔( k/ X9 \& f1 _1 Q
&gt; name
8 D: t1 \' |2 D' m% o'Hans'% |* w6 i5 [( Y7 P
&gt; name.split('a')
! a' j. l' L$ Q' D& X3 C6 Q) t(2)&nbsp;['H', 'ns']
" n7 l) ~5 q+ G0 `: ?- r. ^! ^</code></pre>
/ `) V6 o% l- B7 s, G. _4 m7 q) m<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
7 B2 [* m$ M# P# v) Q; I<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>' @) H0 J+ W; B, t
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>* e) a' N: L- S, e7 W/ p, w/ V
<p><strong>null和undefined</strong></p>5 n5 ~9 V# a1 M1 q0 u) {5 G4 Y* j
<ul>
1 r- j) R3 E! Y7 u; i: S<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>+ T: z0 ^+ _( G" x% B4 y" f2 _( L
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
4 `% G; }1 w5 x8 ^) g4 `3 m</ul>
- F7 |& N+ U( r* t( n9 H, @<h4 id="234-array数组">2.3.4 Array数组</h4>
# p0 ~: t$ o7 Q  X4 |3 \9 q( q8 N<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
3 Q+ V  \1 \6 I! l( s" B! D<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 8 l0 k0 Q4 K8 B( K9 m. c: ]9 S
&gt; array17 e- N0 E/ m. E7 a9 n2 {, M/ f
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ @' {) j$ i! x9 l( {, H&gt; console.log(array1[2])  //console.log打印类似python中的print
; R$ C: F# u% p% r$ B$ k3
) c) I- ^. n0 |  |// length元素个数
, V" u$ m2 K" d& D. d: L&gt; array1.length
" H. m6 c# E6 Q0 q1 i/ N/ K6
; O/ N. R1 `: [// 在尾部增加元素,类型append
5 u; I0 K$ ]% R7 m7 f2 I% B( N&gt; array1.push('D')
' G$ |  I9 B( e& L7 D7; }8 ^& }! K/ w8 V- l& A
&gt; array19 `# X+ i% y0 o& v5 ~* }
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
3 \' x4 w2 @, s) p6 e+ d, O2 g// 在头部增加元素
! F0 V; L9 p: X8 W! y&gt; array1.unshift(0)3 @) U! ^% _0 p( K) l3 S! ]
8+ O9 U: t5 C: \3 [2 R5 M  _
&gt; array13 m8 c8 q: F0 K
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']) P$ I/ ?+ r  Q5 D( v8 v& `
/ b& i* J- \& y3 i& e2 t8 y
//取最后一个元素' T* e9 G7 p* M  w/ J# @& ^. M7 L
&gt; array1.pop()* P! t1 s% D& f* b0 H7 B+ W
'D'4 L/ V( C7 w9 h& T$ O) T
&gt; array11 S" o2 ^4 Z  v/ P0 B3 l
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
7 U) Z( b2 S: p+ r# T1 {//取头部元素" k4 F7 R2 s" K
&gt; array1.shift()" A7 Y4 o  E1 j3 y  I
0
+ Q8 }* p0 I" S) O7 @&gt; array1
0 B7 d% h6 c! R4 [(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']: k# w7 T- R9 A& k0 ?

! J0 Z9 y2 ]& N//切片, 从0开始顾头不顾尾+ w' k5 g# K! q
&gt; array1.slice(3,6)
- g( j9 k+ d- E+ v" M; M/ r(3)&nbsp;['a', 'b', 'c']9 b- s) R6 D2 e& j/ J
// 反转
4 b  H) [3 {1 ]( D&gt; array1.reverse()
; R! M0 X4 P4 i# j(6)&nbsp;['c', 'b', 'a', 3, 2, 1]% W6 `! Q* K" K% R. L
// 将数组元素连接成字符串+ G' Q+ H8 M: Y! B! \) }
&gt; array1.join() // 什么不都写默认使用逗号分隔3 |; C: h- I1 ?2 T6 D! a
'c,b,a,3,2,1'3 C3 I; ?. E( }3 h% }- U2 }3 z
&gt; array1.join('')
" |/ u4 U, L$ v+ p5 E, ~'cba321'4 O' b1 C* T* \7 Z. G. }
&gt; array1.join('|')1 J, u  ?+ N! w; v" I& @
'c|b|a|3|2|1'% A$ Q1 C5 w8 R% f. l

! P" }7 Q! @! A! m// 连接数组
) a) ]0 _7 r, N, W7 {; \( E&gt; var array2 = ['A','B','C']
& u) S5 g, w. H- w&gt; array1.concat(array2)8 g5 Q+ y. g- D, P% p2 k* p) Q9 X
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']9 s9 M- A4 d2 \0 R" f$ F2 C

9 j; x7 {8 T1 K) T// 排序
4 S7 Z/ M  `7 R, A) _. t- R  \&gt; array1.sort()# j* E! z1 ^0 Q; v$ U7 }
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 x" Z, r. V6 i1 D5 W& ~6 D2 E$ |
+ y7 b% }& q0 k$ s* c: @( @// 删除元素,并可以向数据组中添加新元素(可选)  g1 I! t* n$ g# Z6 L/ H+ y
&gt; array1.splice(3,3)  // 删除元素8 {  i! [! q. f
(3)&nbsp;['a', 'b', 'c']
" v7 i4 j# C; ?6 |" a/ h: O; Z&gt; array1. t5 C. P" z: N
(3)&nbsp;[1, 2, 3]9 A3 |1 f8 _( t  \% D( R# t
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
0 ]7 S- r! Q1 i6 x2 j" j" D[]
- U+ O  Z2 Q  x&gt; array1
1 t6 Q$ ]: \7 @* o(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']; W3 l' ]5 n+ N
  x4 ?9 q1 J7 ^3 G1 }
/*
; O, A& j! l! ^" D$ o) S) ksplice(index,howmany,item1,.....,itemX)
( y1 Q/ ]5 ^8 L% ~index:必需,必须是数字。规定从何处添加/删除元素。( D$ h0 c, k* A) F" r  \
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。& D. V& i9 d  l
item1, ..., itemX        可选。要添加到数组的新元素( D+ @3 c7 t; b+ k9 L; F$ p
*/
+ O2 L; G) O* b* M  ]5 }1 `8 d' t& k: B/ g5 B/ D: j, s
// forEach()        将数组的每个元素传递给回调函数" z# o8 W  S7 r. Z& h1 n- h+ F
&gt; array1.forEach(function test(n){console.log(n)})$ b. x8 {$ h; n
1- L; C9 l! i3 N& a% P
2
( L$ y# R6 U& O4 Y! }; B! C 3" E& I2 D! `2 I1 V
A
' ^/ u- P* T' D' s( l# a) p( { B
1 R+ m* w* G6 B+ a% s2 |4 B C
  D. J' J1 B! O" {+ L- ^+ K/ \// 返回一个数组元素调用函数处理后的值的新数组7 u% N) ^1 z# o4 @  e5 X; Z8 |& H
&gt; array1.map(function(value){return value +1})% f: Q' N5 ]! B2 K+ K0 n
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
( T  K+ U) z( T; S</code></pre>1 i: L1 p  c- p. e! d0 r8 a% J2 b
<h3 id="24-运算符">2.4 运算符</h3>
$ ?0 `* c$ J5 _7 l<h4 id="241-数学运算符">2.4.1 数学运算符</h4>5 k8 u/ {- O" T# R6 T8 f- ]
<p><code>+ - * / % ++ --</code></p># N: s9 I2 B1 D6 m' M0 m9 P. E
<pre><code class="language-javascript">&gt; var a = 6
0 Y+ c0 B  Q' W% y2 ?&gt; var b = 3* K1 }, [4 O, j
// 加( ^& q4 I' S& E& G6 S6 v( N
&gt; a + b% q6 ?$ d7 k2 Y, J, e+ A/ W3 r# z
9. _, n, |- b& j+ Y3 g
// 减
& y" G. H' ~% ~1 |&gt; a - b
9 @; G! O8 J' p: L31 ?: m0 m7 i4 Y' J# V: h6 f, x" Z
// 乘7 l4 _0 ^" q% @9 N. G% V" |! B* p
&gt; a * b1 G% Z1 F% n3 M4 M4 z
18  M% ]  b# s( O( g
// 除
8 U) J" R- y8 V; A2 I" e% s7 @9 J&gt; a / b2 B& `3 \# `% U/ z8 u6 n8 r! x
2- X% a+ H. B  ?; @" j
// 取模(取余)- D* C* w: Y/ X9 w# }8 n
&gt; a % b1 i9 K- a" e' y5 H
0! [; e$ F# S3 f; w
// 自增1(先赋值再增1)
) T2 {. p  K2 {& R, O4 H  P2 T&gt; a++5 U' ]0 c% R  Q- C- X, P
6
4 w) ~7 U/ }! y  g4 v4 o&gt; a
) O, k/ ~8 m6 l: W8 E$ E. W7
& i$ X! Q; g$ t, y$ t4 q// 自减1(先赋值再减1)* {: g( o; M8 f& ^' a
&gt; a--
! N& l/ B6 m/ P. \" N1 B7
$ h' [% }0 \2 y&gt; a
0 q$ p7 i: E% U( @5 f4 E1 b+ l67 I6 X) w" p: @: W. E7 z
// 自增1(先增1再赋值)/ n2 }% [& n' d& `
&gt; ++a
0 x* X+ h& p5 }8 r* l0 |7 ~7
+ W* v5 Z0 G" M; \- |// 自减1(先减1再赋值)
2 h4 X- p! W4 }& \5 [&gt; --a
, y7 @2 \/ q8 ~$ ?6
/ z1 d3 R. S3 X) L&gt; a
4 i7 v# y+ l0 A1 i6
1 _/ z1 t3 {- j5 v  E2 Y. k! [" n7 X# S5 r" g
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
5 L" n7 [& ?! O0 P6 k7 v</code></pre>' S$ Z4 y5 |! n% Y. I
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
2 Y( Q* t8 ^) B4 B<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>: F/ b3 v& {) r" l
<pre><code class="language-javascript">// 大于) K& Y/ k, t& i( d) n4 n
&gt; a &gt; b$ M( {% l* S1 J9 x
true
$ U: u+ ^" t6 w* T$ o' n% T// 大于等于0 v( ^1 V4 e5 Y1 f
&gt; a &gt;= b, D' |& o4 q$ p0 r% r: b% T
true3 `) }% X7 t. b' }0 l* v
// 小于$ M* T' Y  g$ n  }. o4 b& f
&gt; a &lt; b
8 i, n. e6 O5 l) ^; `  l5 N! lfalse
, Z% s) I# T; l! w/ |7 s6 `% `// 小于等于
3 ~7 M0 [' i0 G5 Y' J, c) L&gt; a &lt;= b8 L" P& D! |8 C: n( j" `" B
false7 _; B; w! d0 X
// 弱不等于
7 G9 t+ C0 K+ @. m&gt; a != b
* S4 \% i, Y7 h3 ?; D& y" l& }true! Y# C! h5 a, Q) _, Y
// 弱等于
% Z) n) s% N5 [&gt; 1 == '1'
; V7 `; E3 ^: `5 B) Z5 M0 mtrue# ]; a/ Q* \+ j& O2 M
// 强等于9 s! P  |  ~1 m7 J
&gt; 1 === '1'
' }* }( }  z- O4 n. Pfalse. M8 a3 Z2 @' I/ v% S+ _* _
// 强不等于% N' Y5 s+ S: H" ~+ M* Q
&gt; 1 !== '1'
2 N) N- N4 ?0 k! S5 ^true( z% i- d  N- [1 j) v" `1 N/ J
; A& N0 M  E( d; @! c- u: C
/*5 G# t, ~+ r" T" M' x- Y
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
+ r. ?9 M8 f0 ^6 k- k, z*/
4 m* b) T% z  ^% a/ L, @: J% Q</code></pre>8 s# t+ V! O" f2 x% h7 g
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>6 u7 O4 T& o3 }/ _& W" f/ i
<p><code>&amp;&amp; || !</code></p>; Y2 R) w3 l5 T
<pre><code class="language-javascript">&amp;&amp; 与" h: y$ T9 }5 }' D( n
|| or
0 w( h/ U9 k  c, _1 X7 B/ t* y! 非
# e: C) Z' Q. O' Q9 c5 N, Z0 j6 d6 t</code></pre>
+ l8 G0 o# R& l5 t9 P<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
% S# S% J! {; h6 l4 A4 j<p><code>= += -= *= /=</code></p>3 u% a6 b  N+ _/ A* f" ^
<pre><code class="language-javascript">// 赋值" K" N8 I2 i7 e) [) d, A) L
&gt; var x = 3
- c' j3 |' V. o5 z6 }# h& ?4 c// 加等于
9 M" C' t/ s1 N' u4 M, {4 c&gt; x += 2( C: m& H+ Z. v7 `3 |
5
0 S, {2 E6 F0 p0 m1 e+ f2 r) A// 减等于: C1 B: b4 E& `! Y; B. x
&gt; x -= 1
( _8 b" X* ~6 ^( |5 ^2 n4 I& i! Y9 q4
! j4 U" j* b( D- k, m& E- m// 乘等于- k( B4 w, Z& p3 S
&gt; x *= 2
& q* V+ \. d8 u, V' R6 F( O4 ~& M8
/ r, y2 V1 m; ^, \) r// 除等于( n/ J; S7 ^; j8 h; a
&gt; x /= 2  B5 ~, v! ^& n" i7 F. Z% z1 Q
44 Y' ^4 g- g% o8 m# N
</code></pre>
! u3 J/ w4 ?/ w2 ], w9 N6 s<h3 id="25-流程控制">2.5 流程控制</h3>
) z; n1 u, S- I; R<h4 id="251-if">2.5.1 if</h4>9 f  Y7 j: _7 h* c' e
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}6 \) Q5 i. P6 e0 ^

5 G- m9 ]4 D* U, F3 R&gt; var x = 3) b2 w& B0 O$ H) e4 i1 b+ o( s+ z
&gt; if (x &gt; 2){console.log("OK")}
3 i) t. v" I8 c0 L( b$ h7 g0 f OK
9 u/ A$ |2 b7 C9 F* s& z
$ o- Q+ D5 b) M3 o2 f2, if(条件){条件成立执行代码}
; k5 I# r4 p! H' v; Q( O        else{条件不成立执行代码}
3 I: e8 p" e$ g& ]6 A" I  X- M# b: p2 B) ~6 J/ S9 R, E* k
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
* I" ~: W& q& q8 Z5 S0 K'NO'# F" H. f/ y5 f- Z) k6 ?  I

1 V1 o: r6 w3 S# x3, if(条件1){条件1成立执行代码} ' e' ^* [, T# s4 `( V# K! K. t
        else if(条件2){条件2成立执行代码}0 _0 J/ l/ s1 A: i' r9 O2 ^0 F4 Q
    else{上面条件都不成立执行代码}; \0 x. o9 h; U* S7 p
* [# G+ U% N# A& z/ k
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}4 I/ D7 X( \8 z1 D' N% B
Ha
/ C8 f; ^5 ?7 O( t/ I: v</code></pre>8 x2 Q1 v9 y9 X5 V. E8 b
<h4 id="252-switch">2.5.2 switch</h4>
1 F# ^4 a; P2 o# C/ K+ d: g/ i<pre><code class="language-javascript">var day = new Date().getDay();
8 _0 P+ q9 p8 X3 a+ ^switch (day) {# f7 P8 G/ w! I/ s3 h; V5 X
  case 0:: P/ ?; }- T' E& a' Y1 ^3 y
  console.log("Sunday");& w6 }' ^: F, H# t8 ^& a$ m7 @
  break;) Q9 j+ e$ R4 ~4 p0 H
  case 1:
  ~/ D8 t( ?3 V  console.log("Monday");# c% K1 o/ M- Z; J# O9 U9 w. U
  break;
' I! y  b. }1 _default:
/ {! |  ~; C" q) p( x8 f/ n  console.log("不在范围")
" e% r* m, ]7 e/ K* M$ A}
1 W. a& _  F9 p4 `$ r 不在范围9 q. F. Y: Y* R7 t! s0 [
</code></pre>/ j. Z7 j* t6 E
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>) J- a" {0 u/ ^7 ]' ^
<h4 id="253-for">2.5.3 for</h4>
& b$ |' k( T  R8 \4 ]<pre><code class="language-python">// for 循环$ B1 ^0 L, [" N: F3 }- z, e. i: |
        for(起始值;循环条件;每次循环后执行的操作){) T' `, U/ P- `( F# n; _8 E
        for循环体代码
$ o1 H4 K5 s0 r% j3 B    }
5 J! E- i' c# g8 z' D: T& O6 R! _9 Y6 ]7 Z1 \, ?
for (var i = 0; i&lt;10; i++){# O+ ^! S0 [, W4 x. `, ^( J  d1 a
    console.log(i)" q( v( i- b9 A
}9 w9 w5 m+ T! d/ G4 Z! m$ v
        09 E& D) ~. F9 |' H
        1  x, W5 ~5 `' _5 w( C6 B& ?. M
        27 b, z. m( Y2 I
        3
' M, u& p& g# Q- Q$ U* j0 D- Z        4
( m+ t  t+ P, S) T5 c        5
9 w6 |1 p8 @  G2 n% m1 o( K" y  |        6
! Z7 r2 u+ D0 W. x7 y        79 H5 V6 s1 [% P5 ^9 `( i) S
        8/ ?/ O+ @$ y0 i9 @
        9
1 N/ _; D! \! ?6 m9 ^</code></pre>  d4 ?9 e# v9 ~1 ]1 U5 T! B
<h4 id="254-while">2.5.4 while</h4>
/ a2 @# l4 q7 |- p6 s) a<pre><code class="language-javascript">// while 循环5 B5 o6 X4 j- c; P9 R0 G
        while(循环条件){( Z% O0 |1 X5 O" U; X
        循环体代码
7 }% _9 @3 s/ b7 B& V: ^+ e# r8 m1 |$ \    }3 }! V8 j) _8 S+ X; x3 l
+ z- K8 C7 l! I9 l
&gt; var i = 0
: E3 q/ o4 {9 ]8 F4 O&gt; while(i&lt;10){( a8 K( g! O) }, b0 r
    console.log(i)+ t4 i; X! {! D) N- v: L; E
    i++* S& Q' d3 h  p5 B
}
' i; ^3 w5 }* F0 s/ Q 0
% E' `+ a+ ?! R; V2 m$ I4 m 1$ T6 V6 }  i: j5 f6 H' A+ u
2
, E3 U4 i; x0 z6 X3 s5 V" O) w" F 3
" [- R0 I1 f% z2 m; r/ A: I 41 i2 g' f  b/ X8 M# j; p$ K
5: Y; P0 w' N, g! M5 B) ^
67 C5 I! l/ F; g
76 |" _9 R5 g. V1 L
8
+ J  |% U2 O+ i# h  Q/ O$ {$ l 94 P5 {2 l; G. L4 @! H0 J+ l+ D6 w
</code></pre>
. j4 b3 p3 [# f& e1 a/ |% j1 G8 ^<h4 id="255-break和continue">2.5.5 break和continue</h4>. D5 b+ }4 p8 i0 b' `" q
<pre><code class="language-javascript">// break5 I0 M3 r$ i# z
for (var i = 0; i&lt;10; i++){
+ A- |# z$ ~* s    if (i == 5){break}
+ K. J2 R6 f# e; H2 J    console.log(i)
. A+ g2 b% P* @' {/ r8 g}6 |9 r/ K9 r. S
0
6 \; z( C/ @0 f; p 1
3 H, D( q$ Y# k0 i# ~7 @ 2
; M8 e8 B4 ~; n6 x. ^& o' M 3
0 S: Q; X$ A3 q9 ~) z' _' x 4
- L" F( d: u2 a! Y// continue
$ |! g. R7 p7 E" B' {$ Q$ W) v, |for (var i = 0; i&lt;10; i++){
' N' D6 X& I" P9 z! a4 Q    if (i == 5){continue}
) g, `" o" i% b- o% G5 f    console.log(i)
% t+ c: m* j" h3 i* v( g}; b4 [. D5 l4 Q0 Q- [
0
7 m0 U$ A. a1 j) k) ?- ~) m) g 1
, J& O! i2 p1 h' _: Z 2
! W3 [0 [* M6 w+ F; @, q 3
5 W2 P  o* x4 b! c 4) f- @0 k% V- @( s2 B$ l
68 Q% Q! h; o$ _
7
: K; n; ^! s: C" {/ Y 8
) ?+ L. [. v8 g( w; A0 } 9/ {2 E# @! Z0 T( E( n% h
2 q2 ~" Y2 K7 `5 S  {, d
</code></pre>
) _6 F1 K, c/ E* }<h3 id="26-三元运算">2.6 三元运算</h3>. s5 c8 c, R5 \0 m
<pre><code class="language-javascript">&gt; a
# ~/ I! T' W) r5 n8 G% S; z6 n- |: {. i67 X# p' R/ C6 Z# [
&gt; b2 F% @/ ^, U4 }2 ~
3
2 J. {5 w  q; |! u' C+ C. A& n- h
//条件成立c为a的值,不成立c为b的值
! Q9 I4 e( t1 ^' I  R6 U&gt; var c = a &gt; b ? a : b, q5 U2 A4 r$ r5 j% J
&gt; c& V$ S: w2 b8 T" x
6
0 L7 {  M3 n+ j& k8 U
# B8 i# n' X) Y' g- Y  t! o$ ^// 三元运算可以嵌套
9 w4 e& w  z. Q- i! q! _! K</code></pre>
$ R3 g0 V& Q# \0 Z% M1 B<h3 id="27-函数">2.7 函数</h3>4 S0 H+ b# E9 f" v% y& A# n
<pre><code class="language-javascript">1. 普通函数' h4 _! r5 Y+ u# N  v# N
&gt; function foo1(){. x% N0 T$ u- H5 _0 ^
    console.log("Hi")( ]! Z) t7 B$ X! @) \- Y
}
9 P1 [! S( R! `9 A, _9 a( w
+ }) G* I+ g: S4 ]&gt; foo1()
# ~  t- H" Y- l        Hi% Q$ ]. Q% X* h$ Z
2. 带参数函数7 R+ A# }* u6 R0 s$ n2 H
&gt; function foo1(name){
; p* b% R. S; A1 a/ ]. {1 Cconsole.log("Hi",name)
) y4 t1 w# ^) s}2 S$ o3 `; I' ?; s
6 O% v* h( Q! ^' X) \* J+ Q% Z4 b
&gt; foo1("Hans")
% w9 ^9 n1 q/ j" f! K) rHi Hans8 @$ R2 i( g7 p* ~% E
4 X9 R/ Q! e5 S1 o
&gt; var name = "Hello"+ z( @$ a4 {9 B0 p1 w1 c
&gt; foo1(name): ?: M" x  S9 o0 M
Hi Hello& Q2 z: j" I, w8 v/ I% c
6 [! }3 _. G* K
3. 带返回值函数
2 L% n3 p9 H, j3 {% f&gt; function foo1(a,b){
: v' M/ _. N( o8 {/ @# p/ _        return a + b   7 y, I# Q5 A9 m5 x) q7 s
}! ~# g; L1 f! C* D: f  Z9 ?
&gt; foo1(1,2)2 [7 C6 G  A3 e0 B8 z+ r
3$ N( o* T4 [! J* y, c
&gt; var a = foo1(10,20)  //接受函数返回值& h: S  P- n! s* I' z
&gt; a
6 K9 n* n  @0 Z" t304 A( `4 n, b- W
& C5 O$ z* \8 L) F+ `
4. 匿名函数/ P# U, x3 z( f2 e
&gt; var sum = function(a, b){
5 K! y6 z1 \7 L  Z7 O  return a + b;# Y9 P% ]7 A+ Q- h! n: t% Q+ {+ Q
}) E- r- i7 i+ S! p
&gt; sum(1,2)
' r2 k5 o1 j7 I8 c7 r0 n/ {3/ s1 Q, N* ^1 [5 X% J6 C. y; }
, }1 _" ?- a9 y8 b+ ?& @2 }
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱, j6 }# F$ J& T# [1 `3 g# V
&gt; (function(a, b){# S2 E7 T! N8 t$ h' u
  return a + b
* e" K* Y) V: `6 U})(10, 20)
" v0 K4 w# `. r: t# x30
* M9 X; L; ^# I0 w) ]
7 _" y% V7 r/ L- |5 D8 M2 c7 P5. 闭包函数
1 P& C* u0 b; M% m4 {// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
1 ~5 [% o  O* U; T" Y& T( Tvar city = "BJ", Z# g  n. A! h6 B* S& R
function f(){0 e. r+ v- S2 i  U
    var city = "SH"
& C/ t7 a+ E' L4 G" [    function inner(){
! L9 M9 Q( ?. Y) K/ e; r; c        console.log(city)
. _' A1 N' [# E2 U8 N8 H    }
! @. x6 n2 u$ q& i3 i    return inner  R1 g% j8 ^, b0 U: w
}
" C" }( _- W, D2 M! @' V7 F" E" Gvar ret = f()- L" M9 [+ h' C* d
ret()% r% n$ d' X1 {4 v) ?  j% W
执行结果:
+ E( r$ F7 R2 B& f8 d, TSH9 V) L2 ^3 S% G$ l

1 O( d# q) I2 h+ t6 f. F& G</code></pre>
1 `* ]3 G! L: j4 C" N<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
, H# j) w0 O* Y1 P% P" |7 Z<pre><code class="language-javascript">var f = v =&gt; v;
  a' y- b2 w  N4 f// 等同于; e# J2 _- h( a3 L; [
var f = function(v){
& y: _$ n& s+ z, X  return v;# D- {& b7 f3 ?
}
7 i+ N$ }, s9 P, z+ n3 a9 s</code></pre>; [' L2 s! E. ]
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
/ w( z; r8 ~( o; x<pre><code class="language-javascript">function foo1(a,b){4 p! n# _' y) W& X4 ?0 f
    console.log(arguments.length)  //参数的个数
# h1 i+ M+ v' c3 [& c% u3 W    console.log(arguments[0]) // 第一个参数的值9 H$ b4 B5 {6 W/ M
        return a + b   ) e: _) _  N2 c  T
}8 X& [0 j" [7 ~3 m* E" @/ B! Q
foo1(10,20)7 t' i& \: F- F# s  s! z; J
结果:
5 i( n/ J1 z& @* _5 | 2          //参数的个数   y% O' @' q! P! J5 q
10        // 第一个参数的值
8 D% q7 e8 }& ?, n* s; T( \30        // 返回相加的结果
% O! `* R/ K6 i9 ?  s/ g</code></pre>
* v! }+ H$ I  e$ W1 Q0 U* s<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
; ]4 s3 x( B! y1 f& b1 _4 q<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>$ L* P& |3 K( ^* W) p- A) T
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% x# r$ z, w8 p$ R
<h4 id="281-date对象">2.8.1 Date对象</h4>
, D) Q! c( U5 ~% v. p<pre><code class="language-javascript">&gt; var data_test = new Date()( t# l. D# |" ]. X
&gt; data_test
' s5 O3 k6 U1 _+ x3 E5 wFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
, _: ~( `$ w* u&gt; data_test.toLocaleString()5 E$ e* [9 ]5 x
'2022/2/11 下午9:44:43'$ d' `: H: c7 h7 \% ?. ]0 d4 _; J

, a; `- u* s8 v&gt; data_test.toLocaleDateString()/ ]+ d8 N4 I. f3 j
'2022/2/11'
) m! ]) Q8 j5 |2 Y. F, f
$ E  D$ h0 R8 @- y  V&gt; var data_test2  = new Date("2022/2/11 9:44:43")$ y% k$ S: E/ N& S9 ]7 e
&gt; data_test2.toLocaleString()
' R, K- V$ \8 M4 x% o1 c'2022/2/11 上午9:44:43'* |! T# {' O' h- t6 T

  _+ @( Y3 C6 `& u$ L* G& U// 获取当前几号
+ e) o# x: Q& J/ J; t# _&gt; data_test.getDate()! \0 ]" T: w- z; k  e
11
, u; \! V0 b9 R// 获取星期几,数字表示( l; \+ E5 j9 N4 S  G% c) a
&gt; data_test.getDay()  3 V5 ~6 c2 ]5 J$ n+ L/ f9 i
5
8 b' ?6 w; i" e: ^/ F// 获取月份(0-11)
9 y7 @0 t/ N1 f2 Z/ D0 n&gt; data_test.getMonth()  w& h& f- U" n$ W' C$ Z
1
- q. F1 X/ \; M, Q0 l// 获取完整年份
+ f; Z# n; W% u&gt; data_test.getFullYear()' L( y: W" a+ g7 I% ^9 F" W/ G4 X
2022
4 D/ p- F/ {2 @% H: ^9 B// 获取时
5 F6 l& F1 \7 A+ c&gt; data_test.getHours(). {- L; Z- f$ E( H
21/ i3 R; ^/ ^* E0 g& T8 C8 u+ O
// 获取分1 r# z5 o. }# L
&gt; data_test.getMinutes()* b, ]4 q* B: z9 p2 j
440 M( X* H9 N) f  U7 r, W$ k
// 获取秒$ L/ {, s; g7 x9 n6 l
&gt; data_test.getSeconds()  q5 r) d5 B+ y" V
43
+ e6 Q- o, ~% ]+ |/ G6 s, J// 获取毫秒- K" Z! Y. V; H0 ^" U- E$ _
&gt; data_test.getMilliseconds()# M0 G; @3 N7 W* l9 O
290! H4 P6 n9 [4 Y9 S1 B* E1 H
// 获取时间戳0 ~' j3 J$ ]/ t& ~
&gt; data_test.getTime()
8 k# `' r2 `+ _5 c( B; l  C1644587083290
- C1 \' [) E+ {. a</code></pre>! i% `' @- E# v$ a) w
<h4 id="282-json对象">2.8.2 Json对象</h4>; M% c0 k) i1 i! e' i7 w
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串: C8 O4 }) V( r$ l
JSON.parse()  // 反序列化,把JSON字符串转换成对象
3 C* M' J& w. q1 p. N/ t( T
& U5 @3 H1 u* K6 w6 B6 X# l! d// 序列化1 \- g' W: ~0 _
&gt; var jstojson = JSON.stringify(person)
6 @5 o# q% x/ V&gt; jstojson  ' c8 V3 e8 u  S
'{"Name":"Hans","Age":18}'
: }: Y5 q/ N. N* ?8 p3 Z: j7 v# w) o1 e- \
// 反序列化9 n) Y6 U* _$ T
&gt; var x = JSON.parse(jstojson)
8 w* O4 F+ J; B& q; d- X4 E&gt; x
6 X( ~5 L+ K0 h$ v; `6 X- k! z{Name: 'Hans', Age: 18}
, D% F7 ~+ a3 {, _7 ^&gt; x.Age
1 y/ J/ U8 _7 R" [; G5 y/ w18
. b; q/ G+ K7 C& A% ^& o" ^</code></pre>
6 s7 m4 N8 P3 {6 G5 u4 H( c<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>/ f/ |: N  \3 o+ s( u4 `' I
<p>正则</p>' }9 B) m# d* X- r6 |
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");  h, n( w2 U5 r" X& Z
&gt; reg1. s- G: J1 `) I& Y' \
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
4 d2 O! G; P/ `) l5 C&gt; reg1.test("Hans666")
/ j8 K+ v" ?! {2 ]true8 v8 Q; U" y! y

: L0 G4 K( R+ t: E" h$ A  I&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/# s( g. r9 l- X
&gt; reg2
3 K" T  j7 K& }0 I; B9 q/ C* ^: X# W/^[a-zA-Z][a-zA-Z0-9]{4,7}/( v- x& |$ a' R" O, U
&gt; reg2.test('Hasdfa')
( L, v5 _% D* D! ]$ \: Btrue
) V2 K$ z+ b: c. X& q) `9 C, `( P' l
9 S4 V/ f2 c2 j2 T2 i) x; E/ o/ E全局匹配:
$ O( \& r  f6 _$ S4 D. R( ~&gt; name! ?0 P( \0 d2 ^
'Hello'( m4 W+ [3 s7 M1 {. ^* C% k5 ]: M8 z4 C" E
&gt; name.match(/l/)
. D9 k+ K8 `8 a# B['l', index: 2, input: 'Hello', groups: undefined]! g$ ]& O# {( y6 d5 f2 i# t( `# R; d
3 V& H9 V% n/ l/ _/ b
&gt; name.match(/l/g)
' ~/ l4 y% z" ~8 S% Z. Q4 T(2)&nbsp;['l', 'l']
) ]* E7 I# g3 w! N$ U// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配8 S) |$ K* F! l3 J
, i* [. C, Q+ _5 U# r5 ~% z3 I+ J
全局匹配注意事项:' T! u8 Q2 `) Y, N
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
: D9 ?& {0 D) y8 v&gt; reg2.test('Hasdfa')
- x. o% H* X4 M! F+ Ntrue; s, D* X* |# c; B# t$ Q
&gt;reg2.lastIndex;
* r5 u, S+ {3 p+ i( h, F, ~. x6  O% n+ ^. J) K, k) w& H
&gt; reg2.test('Hasdfa')
/ r# U6 _  i# |2 @8 P. X/ J# W# A7 K) _false0 b; ~5 D; |6 e! L/ j6 Z7 e, H
&gt; reg2.lastIndex;# F8 x' j8 D+ i# E4 W$ f
0% J6 Z( a% f4 C! G
&gt; reg2.test('Hasdfa')
: z9 w, o: x# q1 x+ o. H( i  b5 Ltrue1 t# {+ O4 D2 j+ u/ g  `5 [: t
&gt; reg2.lastIndex;
6 R* i( Y1 {# ]6 o, @5 A+ W0 p6
& W# w6 ^2 S) d+ S  z6 p, a- X/ O&gt; reg2.test('Hasdfa')
. |( ~3 t) |1 `( P% w# ofalse
+ S- |( ?7 ?' T: O&gt; reg2.lastIndex;' [3 F5 Q( G# {, u+ G5 d
00 N, b1 s& |& z# m
// 全局匹配会有一个lastindex属性
( D( R2 s0 l, k% L( P0 s! }. j&gt; reg2.test()- u1 h" C+ o2 V6 K* H2 q4 N
false
( A; z- Y; p% Y/ G  k&gt; reg2.test()
; R2 E9 _4 z$ t9 |$ q' Y3 `true
' j0 i- w- M" [) I, ^+ ]# k) k+ `// 校验时不传参数默认传的是undefined- C6 o: A5 W0 {
</code></pre>  F" R6 p7 G$ D& l
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>% ~5 t6 O$ C6 w/ `
<p>就相当于是<code>python</code>中的字典</p># H! O7 h! J8 C4 n" ~# k* X
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}: X6 m5 u% H1 P! H0 K# {+ Q0 p. K
&gt; person' P( G1 f) i! ^* x1 b
{Name: 'Hans', Age: 18}6 r+ ~: l+ x, J& u' A( }
&gt; person.Name4 n& }) a; T$ r% p
'Hans'3 v+ ?" `- k- i& j* a* G: E
&gt; person["Name"]
: g  r7 `/ ]; A" w' \9 q) z5 ~2 H' n'Hans'
  a$ P( l6 N: P$ c/ ^& _
' j7 ~% t. F9 n* \8 `2 |// 也可以使用new Object创建* `) G( b1 l0 Z
&gt; var person2 = new Object()
' K2 H; g0 o( r: L&gt; person2.name = "Hello"
8 o# s" _$ ^6 S3 S/ h3 r'Hello'
8 u/ d6 R% B! q: K2 r&gt; person2.age = 208 b! }8 D/ ?  {$ u
20
+ a  r0 _& k5 k$ d( l9 I2 K</code></pre>/ W, J# o* t- q4 W
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>3 D& `6 Y, B/ e8 o9 _' I
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>: S+ ~7 B5 b, m7 g* V- ^
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
# S4 ^" ]. Z& W+ I. A  S! _<h3 id="31-window-对象">3.1 window 对象</h3>. C' `$ r% V( a( e- j2 Y
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
/ _: f/ {' W! h: V+ S5 M9 `<pre><code class="language-python">//览器窗口的内部高度
& z0 J% `* E+ D0 P' Hwindow.innerHeight
' {5 e# v! l5 d$ }5 ~706
. J: I* x: G" y! ?" |" g( s//浏览器窗口的内部宽度
: s: f) U+ k0 @! {1 ^window.innerWidth
& }* ]$ Z( q2 `; w1522
# \, |1 ]8 t6 A: `7 J9 O// 打开新窗口; W  l, w  r, c' m3 H
window.open('https://www.baidu.com')+ q2 v% ~0 C5 f; @! M7 l& I
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}. h! h9 d- i  {1 R2 F* l6 ~0 q
// 关闭当前窗口
3 y" u2 v' D3 N- R% R( D. ~window.close() 8 h) R+ \, l2 z/ g( p3 J
//  后退一页4 O5 L5 c1 f5 E/ Z: ]
window.history.back()
- c/ ?# A  \, e. \* z; J! W// 前进一页
" l- q2 {+ z' Y* @& Fwindow.history.forward()
' |4 ~/ P* Y; e  n//Web浏览器全称5 ~) q3 E6 i! s" V% s( u
window.navigator.appName# E4 X& `5 G" u% q
'Netscape'4 |" Y2 D3 p! b' q4 o& l/ G
// Web浏览器厂商和版本的详细字符串# R4 Y. |: v) I) C9 }( D7 `
window.navigator.appVersion* q; P1 l/ f* f  R
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* {5 z) P4 m# x% C7 B
// 客户端绝大部分信息, ?2 B% R1 v0 q9 u
window.navigator.userAgent
: V' K; ?) Z6 l2 `& ^6 h' x! }'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
& U* a$ J6 h! M// 浏览器运行所在的操作系统( F( L* ?! x' n* [  M5 h
window.navigator.platform( ]1 ]6 p' K- _7 \3 X
'Win32'5 p" @$ T# A4 \

' M  x7 w; i" Y9 L; W//  获取URL* P* o1 z2 T/ M( L8 G8 \& g
window.location.href5 F& ]8 E7 S# v: J. I
// 跳转到指定页面' I9 y+ [1 k. _9 d
window.location.href='https://www.baidu.com'
" l% I, o+ Q5 G7 _" ?// 重新加载页面2 k' ^, S/ w7 B- `! C. j
window.location.reload() 9 |; K( R3 ^/ m  k
</code></pre>9 F' T3 z# a2 O3 Y" P7 C! ?  y
<h3 id="32-弹出框">3.2 弹出框</h3>+ |# l' O7 o6 v' y, n( K
<p>三种消息框:警告框、确认框、提示框。</p>
; {9 z' ]) I- ^4 m. n: H# ^2 G2 Y" I3 A<h4 id="321-警告框">3.2.1 警告框</h4>
; |2 b" l; ^: E5 S- h<pre><code class="language-javascript">alert("Hello")
0 e. `. H# V( h9 I( p; t</code></pre>
4 Z" ~7 H) t, k<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
$ c  Z8 W2 p; S8 m: {* x- ~# V<h4 id="322-确认框">3.2.2 确认框</h4>
" f$ _/ _' m7 y4 e- R' F! ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>/ y; R+ K& @( ~$ K' C
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
% V( P; i. \  O  f3 o8 ptrue. ^' w# Z7 j- G
&gt; confirm("你确定吗?")  // 点取消返回false
- {6 f4 u! U2 [# H# U1 Ofalse, J9 P, h( G1 Q
</code></pre>/ \% u8 @7 W  v; k( Y
<h4 id="323-提示框">3.2.3 提示框</h4>
5 V8 ^5 k2 ]/ m8 [% f$ q<p><code>prompt("请输入","提示")</code></p>) ?* b+ K+ |: j8 o% t
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
( w5 K8 X. \. {5 ?1 G<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>+ t2 Q  {' H7 W$ e' R! x" O5 d" G5 F
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>( s! W- [0 x( C# ]9 Y: Y1 Q2 c
<h3 id="33-计时相关">3.3 计时相关</h3>$ c# O, D, n1 Y% ~, l- _
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
( K; m3 A" l- X9 i2 w+ W<pre><code class="language-javascript">// 等于3秒钟弹窗
& f( E8 D5 W$ \setTimeout(function(){alert("Hello")}, 3000)
, X, Y! o! r) F$ B
  Y% I: t  L: m- f; P! \- J9 Gvar t = setTimeout(function(){alert("Hello")}, 3000)! O: s( ?. F4 P3 g2 e. s& K
9 j/ d4 }9 S7 j) C. W
// 取消setTimeout设置9 u& v$ j4 G( ~
clearTimeout(t)0 f. y3 ~/ O) H0 P
</code></pre>
* E- |& b( D3 n4 D4 C- v<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
: w) s; Y7 ?" W) J8 W<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>+ `1 d+ h- f3 o
<pre><code class="language-javascript">每三秒弹出 "hello" :+ ^$ W* A/ g/ J& b  [0 r
setInterval(function(){alert("Hello")},3000);
) J, m/ @2 O* P; ?3 N</code></pre>: K# Q4 Y  a% ?) `# l  D( |9 O
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>$ B$ b7 i/ @8 h2 n
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);) ?" v+ ?+ s% T- T6 ^  `6 }
//取消:
2 U$ N& a% ]6 _) kclearInterval(t)
' P! {) F0 p: T/ i7 o</code></pre>
& W2 \; f' }4 B) r" C& w! |
) c5 a# A) [' O' o. k2 ~4 K3 y! I
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-27 09:15 , Processed in 0.074708 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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