飞雪团队

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

前端之JavaScript

[复制链接]

8040

主题

8128

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26450
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
! U2 a$ g$ j- }1 V9 B  H
<h1 id="前端之javascript">前端之JavaScript</h1>% J2 R" G2 l1 ^3 {/ i
<p></p><p></p>
- V0 S8 N/ `+ }% z<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
5 w0 `8 E4 q/ K4 _! K- G<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
) F! m! V2 \9 @' z& r2 a$ z它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>2 F% @% r% r4 J' p+ J
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
3 V  a' @+ z; Z6 |  |它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>) y" b5 m2 S& B
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
1 o0 ?" n; Q% F) u4 x<h3 id="21-注释">2.1 注释</h3>& _! H# |7 v1 D% w# _3 O
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>: A; b5 g* `8 Q  s3 K
<pre><code class="language-javascript">// 这是单行注释. ^% a& ?& T* N6 t/ ?0 o6 ^
8 K/ i( n, d- h& K& l
/*
, Y. v5 {" `: M7 z) F3 a这是多行注释的第一行,- b$ O7 o! q6 Q" b: z
这是第二行。$ s0 v- t; P2 T) t' M$ U$ C
*/2 D9 M. v* j% ~0 l* U* I" A1 Z* O
</code></pre>% Z' t& @* J8 ^* C& p, X
<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 B+ f+ s! U/ d8 P' G8 c<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
7 Q8 Q, X+ Q2 |1 {- i8 Z( N<ul>( ~: o! M4 ~, F- i, ?1 J
<li>变量必须以字母开头</li>
2 r0 R6 K' ^( c. Q0 [- ~<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>% G: M2 k) G$ c3 F
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li># d( ]1 @* m3 x" N
</ul>
+ U- N2 N5 |6 z% V+ P- v<p><code>var</code>定义的都为全局变量</p>
/ ^! p* C( B0 ~2 G<p><code>let</code>可以声明局部变量</p>( `4 E. B/ o! _6 y
<p><strong>声明变量:</strong></p>5 M$ F, L3 }4 c# q+ G* d9 p$ \
<pre><code class="language-javascript">// 定义单个变量
( ^& d( g+ j3 E! ]0 H! D&gt; var name
# X! m! i! s- S* Q$ T9 h&gt; name = 'Hans'
9 u3 ~' W. G( ]; Q, b//定义并赋值
7 b/ J, b$ e2 }5 X8 w# R* U2 M2 v&gt; var name = 'Hans'
1 s) {+ R% g' K& e- n6 |&gt; name; g( E" A% t9 m/ P
'Hans'% ]2 k4 L! T. w7 P& [! [9 u9 p; k

2 o* r) ~* ^  k# x// 定义多个变量+ Q! {: H1 @  E7 z5 W/ U
&gt; var name = "Hans", age = 18% _# b  K) ^* j4 }& C# Z* H  @
&gt; name
4 ], I8 v3 F( R1 M8 n( }0 |) l'Hans'& O5 L9 U. Q' a( [1 y( E% j. E
&gt; age4 I; x1 S7 h# e% |0 |7 e7 ~! m# `
18" C0 ?: N8 o4 h! b

: C. A# f! v( v  v& T: P//多行使用反引号`` 类型python中的三引号
2 ]( E; |; x- Q&gt; var text = `A young idler,  N" k) L- _7 S3 B/ X8 v+ F: @
an old beggar`$ q# a( E% c3 t
&gt; text1 @, ^& B; P9 o+ a2 P; }
'A young idler,\nan old beggar'
8 x2 Y( y7 m9 }9 Z9 ]: {: C1 v% O; w8 a</code></pre>
' P5 I) E3 i, I0 ]  |/ v<p><strong>声明常量:</strong></p>
  U: j4 A3 t. k<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
6 D7 a/ ]- o7 O* m# G<pre><code class="language-javascript">&gt; const pi = 3.144 k# N9 N: R( I6 q: n
&gt; pi
# O2 w6 o+ i, [$ L' V/ u" _3.14. G8 u5 ~0 ]$ q" o4 t( l
&gt;  pi = 3.01: Q4 d7 g7 W0 c/ G& V! F1 x
Uncaught TypeError: Assignment to constant variable.
: P- e$ E: {0 x4 s    at &lt;anonymous&gt;:1:4
, R" p4 b6 d( E$ c% ^3 H
: s" I: J4 o: S& ]</code></pre>8 K- \7 h; {, G3 n% j8 r, ?
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
7 v0 ~1 ~3 l! o& V5 l<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 c1 ]4 E4 ~& ]& d<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>% o5 w- I( T! E7 a  {! t- K
<h4 id="231-number类型">2.3.1 Number类型</h4>
6 {% b! i$ x4 }! }<pre><code class="language-javascript">&gt; var a = 5
9 x  o. n! g$ Z# z) P&gt; typeof a   //查看变量的类型  , F- G: v" T" D7 f+ _8 Q
number! A+ E% t3 R! |$ A  Q

0 X) q6 `9 l  g&gt; var b = 1.3
6 H( L& Y( C9 y% e  `&gt; typeof b9 h7 C" @3 j8 t: p
number
. N+ r0 \2 o7 p% b8 ^' f& D$ h! w1 A9 E8 j% G1 C, P5 y* x
// 不管整型还是浮点型打开出来的结果都是number类型
8 k1 k% c. F: i8 Q" Z, `# v5 t; W8 J& _7 Q& ~; A
/*) C' @  z2 {4 R, G, O0 ~8 j
NaN:Not A Number: H4 E1 j8 s( d) L
NaN属于数值类型 表示的意思是 不是一个数字! H+ H0 I  E/ ?9 A# z
*/
7 k! w+ q- n6 ?6 {9 J7 H
- ?1 S; e+ u5 I9 {2 W6 qparseInt('2345')  // 转整型- d* I4 k) h, i" U
2345% Y# X. }* W6 B1 h6 J
parseInt('2345.5'); y7 q8 X' Y9 `8 J& `: b+ l
23454 P6 o' ~! f1 l3 @. `
parseFloat('2345.5') // 转浮点型
5 P, O! [1 s* Z' D7 _2345.5, c4 m# W; g5 \
parseFloat('ABC')" D2 B+ h( D2 @# Z8 s, B% u
NaN
) L! ^9 k5 B+ m/ S, b& ^6 pparseInt('abc')9 I! h2 r$ }' q; |# G3 I" H
NaN* L: S) s" V6 Y
</code></pre>
- n. N- z" L3 T9 @1 V<h4 id="232-string类型">2.3.2 String类型</h4>; ~) ~6 G. {- ^8 P
<pre><code class="language-javascript">&gt; var name = 'Hans'0 x: i. e: ~+ W6 i8 j
&gt; typeof name
& W6 t! }0 ?9 S6 s'string'0 a# p, @# J, R0 ?; g( E0 G9 k

) c' W) K( f% ?% F6 R* N* @//常用方法
% `* j6 j  k1 B+ m// 变量值长度
; L3 f% H5 ], ~: Q3 v0 n&gt; name.length
' ]4 `# `3 K- }; v& s( L* J0 J4
" F+ }( ]6 q6 V$ M; {- ]// trim() 移除空白- M9 P2 I# {5 N  T! L
&gt; var a = '    ABC    '
2 _2 R$ V- l0 Q&gt; a
8 h8 q, y( c' h'    ABC    '5 {  Q1 }% Y3 p7 l, N5 c, |
&gt; a.trim()
9 r; l# U4 A" E2 y; L7 H' ^, R'ABC'
* T2 m2 e0 ?; R  y# `. s, y//移除左边的空白% @1 b6 h0 R! H
&gt; a.trimLeft()8 V2 a+ Z  P. P- D, m. O5 s
'ABC    '$ t8 g  _6 c7 I' z6 K1 [% }
//移除右边的空白# w# Z+ m9 |+ V( o- E
&gt; a.trimRight()
% c4 C5 @- F$ {' V'    ABC'$ a6 q% T( E$ K

! U! R1 O/ T% {- b/ G+ x//返回第n个字符,从0开始# K3 g" z# h5 y' _9 r# C
&gt; name+ |" r) z* t' S; S8 z- N5 [
'Hans'& [* ]( d( n4 o4 G, I# i# B
&gt; name.charAt(3)
  }0 B, P8 n% Q" A9 ^/ K0 K  f- w's'
; m5 W4 b1 k- f, N2 L$ f! V0 `&gt; name.charAt()
8 A' _; S9 z' ]'H'7 _0 m! P$ D% V: {7 H
&gt; name.charAt(1)
3 J5 S" h% u  L4 R: @; c2 m'a'
% ~9 i' i3 u0 E- O7 Z2 W1 h+ b! S. \) o: M4 V$ ~
// 在javascript中推荐使用加号(+)拼接7 a3 U# h5 m3 _9 R* Q
&gt; name! e0 k0 R/ r- h1 k( y
'Hans'8 m$ X+ R- {% V$ B/ u* R0 ]- X
&gt; a* R- N8 @/ N4 G; C6 R% k
'    ABC    '
) F& q8 W; d/ L# r9 q3 u&gt; name + a
; ?- S$ p/ L# t  Y% S" I% c'Hans    ABC    '
0 t8 [6 _; X# L// 使用concat拼接( Z4 @, T& ^* b% W
&gt; name.concat(a)
3 W8 n( i  y0 b* l'Hans    ABC    '
  M" s% u0 S* l/ E/ k* C2 O0 A3 E0 ^$ E6 f2 I
//indexOf(substring, start)子序列位置
' P6 k1 M8 A3 H& K2 C5 K  Y  K9 f, w8 C0 G* K4 i8 q. W) I& q
&gt; text6 o7 o8 X5 t) v# Z5 k; ^$ X
'A young idler,\nan old beggar'
. ~5 V5 G4 C  S&gt; text.indexOf('young',0)- u: A8 p! q. N% o; c
2
& S# o  [( o9 u+ O$ X" e) w2 N: J) E6 Y9 a5 c
//.substring(from, to)        根据索引获取子序列
. Y  i. J4 q5 ~: p+ E5 \! Q&gt; text.substring(0,)3 E7 e% p" r- |) d, x  P
'A young idler,\nan old beggar'9 j; j/ v+ C6 u
&gt; text.substring(0,10)+ Q3 ^+ ~3 N/ ?1 d9 m1 e
'A young id'
4 X% B* Z' B* m3 F8 Z
, F# ~. L/ y# I  v; Y! t" W' [// .slice(start, end)        切片, 从0开始顾头不顾尾
: [8 f+ f% l: [* ]4 G6 D" k( w&gt; name.slice(0,3)
# V% J% C  j7 f8 t0 d$ X' Z'Han') h" ?; p* ?% n4 M+ y

* E4 h3 H. l6 y// 转小写/ g) B" ]$ N; f
&gt; name
- F$ o- r% X. b+ {8 X'Hans'" J0 h3 s8 q7 K+ @1 V
&gt; name.toLowerCase()% c. E3 b0 B* u4 s
'hans'* ?8 K5 O- L7 n+ t9 ?5 H
// 转大写
% k3 e  S  H' f0 E) y1 O$ P- Z&gt; name.toUpperCase()! J; g% Q/ m3 {* q+ |* k
'HANS'
( U7 j/ [, p, v
; j/ I' _, u" m- V8 k. J// 分隔% l5 V" b! D) N3 r
&gt; name1 }; o! a3 v. r' l' H! n
'Hans'
* }# h- x( p' v, l5 ?* U3 }- U&gt; name.split('a')5 L- R/ F! f' z6 ]5 b' W5 o7 z
(2)&nbsp;['H', 'ns']
% u- L+ @2 V* O0 ^) d* Y) D</code></pre>
2 m4 e  i$ v9 z! o8 N<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
% M, g0 \% F9 q<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
& {; t! p( }7 \( M  y<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
1 }% h1 c; W. J* q% N: r* T<p><strong>null和undefined</strong></p>
1 E' i* D* Z, v+ f' H<ul>) {% H6 V  g+ m1 r
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
8 i& K4 e( _) _( K2 {% ^% n: [( y; F<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>3 h3 J6 e/ e$ F/ N: ^' j% t, T
</ul>
; |8 v$ X, O0 {8 o: X$ P( h# X<h4 id="234-array数组">2.3.4 Array数组</h4>9 n. r- t% h' C* l
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
# s0 u5 Y% e( l5 [<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ! E( `& _7 L9 k$ y
&gt; array1+ g9 C4 C# C+ ~, g, I1 U- b
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 u! z  R% D7 \' S! B( b5 x0 i
&gt; console.log(array1[2])  //console.log打印类似python中的print8 f1 j6 Z9 O( r2 d; T6 c% I
3  K  w9 _8 b& n  j% z% I
// length元素个数
2 e0 B1 p7 Z, c4 F3 W" a+ f2 g5 C&gt; array1.length
  P6 V) L# W+ y" _) R6 ]" b' f* }+ q6% h7 G3 v, p- B$ F
// 在尾部增加元素,类型append9 h4 r  b* h  ]) L4 V. o1 x
&gt; array1.push('D')
) I" m/ z2 t2 L3 t" F' i7
5 J* q) q4 N, ^' @: S5 C&gt; array1
5 ?% G6 t! \0 d% S(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
, I# j4 N" G, k1 t8 s& }// 在头部增加元素
- A; _% T0 R: |- A4 r&gt; array1.unshift(0)
) J3 F' w# P8 X9 j  P, u84 U3 e7 F0 ^  k1 X. ~( Q8 r% w6 g
&gt; array10 M- _4 z0 k: S: w
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( e3 g, `0 X) r" r' Q4 s  L

6 g; F4 D9 B; o; o//取最后一个元素, H. ?* O5 v1 x+ D7 r7 d' ^% Y
&gt; array1.pop()
! r, w0 M2 G/ x+ p: I; @* K1 z'D'
9 \# b7 X; S" ]5 j7 m# a&gt; array1) |0 i/ Z0 ^  v2 R
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c'], P' _# B2 c/ u( `$ S3 D
//取头部元素9 }) i, n( ?1 z1 j. n
&gt; array1.shift()
7 L2 E: m0 i% w1 g/ h0
& P/ f$ X  h, c- M, d5 g&gt; array1
1 L2 P5 S8 y! ](6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" {& T# w4 K. E3 Y& l- v* g( U

% ?* c/ t  |3 [+ f7 I% v//切片, 从0开始顾头不顾尾
- W# e$ W% n/ u& ^4 S&gt; array1.slice(3,6)
% w; o3 C, H  P( H(3)&nbsp;['a', 'b', 'c']  H# y0 {' Z, ~* g$ H$ h8 {6 U% L/ h
// 反转6 Z/ M7 D4 C+ l+ M7 N
&gt; array1.reverse()* l6 N4 X. }9 y# H  W$ h5 L& s$ ~
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
: J( [: F! q2 u// 将数组元素连接成字符串
2 M. d) M/ v+ q&gt; array1.join() // 什么不都写默认使用逗号分隔
1 \3 a* J: f' w0 K: D% D+ g2 T; M'c,b,a,3,2,1'
* \) v! k# v7 W  }2 X! y  r/ T&gt; array1.join('')) d; m; ]8 d, |2 t2 n
'cba321'
& d' |) ?' K  U6 L# Z&gt; array1.join('|')
  A; W( J, [9 U3 }# w9 G5 B& ^3 I/ x'c|b|a|3|2|1'
( o9 f7 a+ W9 w* D0 o* Q  P: q% @0 @  m) N$ y
// 连接数组
8 s1 T: b4 d) _  l&gt; var array2 = ['A','B','C']
1 [- D5 w3 h5 H9 J8 b&gt; array1.concat(array2)' R: t7 \6 z6 k9 ~' `+ Y# t9 j- G
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']8 i- z9 d' d$ o8 d3 C9 v7 B1 y' K- `

# Y% E4 T( f) c4 @8 i// 排序) Q6 {6 L; L8 F! D6 I  V0 g; Q
&gt; array1.sort()% A1 `' B  L) k# r+ }( T. |
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 W. a, ?; A/ H1 Z! R0 B" t
) q' R$ |; B5 a3 h" ^/ K$ [// 删除元素,并可以向数据组中添加新元素(可选); y$ }% ~( ~" I8 C8 \7 q7 U
&gt; array1.splice(3,3)  // 删除元素2 Y. [* m! w# T# X  W7 W; @
(3)&nbsp;['a', 'b', 'c']
- D1 }5 E' c$ t* J* Z( C&gt; array12 o* j, _+ F/ n* u1 u; g7 N
(3)&nbsp;[1, 2, 3]
& o9 j, Y5 Z. q6 `&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
  N4 a$ n% Y1 _! j: J1 \[]
- d8 c' i+ x7 G; F% W' H3 K  n&gt; array1! F9 f# n7 e5 l9 f# {2 n
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']# D# a7 d& A! T
% I! q2 ]9 C1 f
/*
( F: A) M8 p: I% p2 l" Bsplice(index,howmany,item1,.....,itemX)6 f  y6 K5 K1 z. g3 l3 N
index:必需,必须是数字。规定从何处添加/删除元素。
& b- k9 C! z1 N2 S. j5 o  Xhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
3 F, O' Z) a1 s" i4 Q$ vitem1, ..., itemX        可选。要添加到数组的新元素6 J5 z! C3 p1 o/ L
*/
) B  F' G" X4 p$ o" w
4 f4 m+ X1 s1 C// forEach()        将数组的每个元素传递给回调函数& ^( ?  B: r7 _  f' F+ Z- o
&gt; array1.forEach(function test(n){console.log(n)})$ ?( r! k2 |7 d: |" {! g4 s* M
13 V! [: P1 g3 T
2( w* C  M2 S* |. j# `# X
3- X, q2 ?) q, {: Q( b1 c
A# X8 j' [. C* }4 S# J% w
B
2 L/ z# D4 o& _ C
- C( l1 F+ ?* _8 @5 _$ b8 l( V& A; e// 返回一个数组元素调用函数处理后的值的新数组
0 a! W% }6 a2 ?# o1 j; [1 N# f&gt; array1.map(function(value){return value +1})9 v! u# F. }3 N5 w2 ^. l
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']% ^' v$ d* Y+ H$ Q8 {  M+ _
</code></pre>
7 X! w0 {$ W& E+ @9 Q7 E, [<h3 id="24-运算符">2.4 运算符</h3>! @8 {# r' c  x
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
2 L3 D$ e/ u; D0 c. x" C<p><code>+ - * / % ++ --</code></p>
3 p5 S- T7 J+ A4 G* g; i4 l<pre><code class="language-javascript">&gt; var a = 6
& z* {& v$ z8 I&gt; var b = 3. f# R9 D3 ^, D4 D" ~( t- I
// 加
$ V6 f7 v1 N- A&gt; a + b' c5 E4 g- P( [* X
9! _" v; m. ]% V5 b
// 减
  A2 b5 `% a! A  E0 B; T&gt; a - b8 {% L2 u8 N4 A- U- m! m
3
* I2 o, L0 l& A4 {// 乘! A  z2 B  A% h; J
&gt; a * b: o% O, Y; u( j1 T0 v. r
18: i# J, a) @& d4 M6 S  O* g
// 除2 e. f+ O! r& I* a. x& `2 Q. ]
&gt; a / b6 g7 \) b9 J, m) b7 s
2  u" k4 |  ~* Y
// 取模(取余)
" o. x; `1 E9 `) P0 U&gt; a % b$ I- c: q9 N6 ?
0
. A5 m0 K: ?% ?# c$ k& R// 自增1(先赋值再增1)
; T  F* M- M& H&gt; a++
. O* n, j9 n& _7 D; C: N6" p9 t3 T0 K/ t) y& s
&gt; a. w( a! W' p0 ]. }) T
7
* B; v+ S+ N3 ]- x6 [' W& a0 f// 自减1(先赋值再减1)8 s/ w" A/ p+ Z* a3 f
&gt; a--
' Z  U9 ?2 S, C4 X7: v) [: U" V. q
&gt; a* L" ?) |0 M2 c
6
/ F& M) R1 i5 C2 O3 e/ M  \: ]  W// 自增1(先增1再赋值)
# q8 W3 B) R& }1 _&gt; ++a
( l0 X4 s0 i, Z& @2 x7. h/ A; \, |; P5 g2 n
// 自减1(先减1再赋值)1 K0 ]9 q( Z3 Y5 \8 [- Z
&gt; --a
' H, E. \) D# Z& [7 {: t( ]+ Q0 u6
. J4 v7 W- q8 W% c$ e6 f; G2 J&gt; a
$ R* q$ i/ Y8 _/ I6
9 B! J1 [! L9 w2 T( v. y" D. I- D: Y0 j; p% r" q
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理( w, f5 \- K( H0 T/ o
</code></pre>
  Z: j5 q* _* U$ O<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
+ }8 D- f! ~* l7 w<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
9 ^3 |5 ~7 u& h* Z4 ^+ N<pre><code class="language-javascript">// 大于
' z3 r1 Z; j2 C8 a" f2 L&gt; a &gt; b
+ ?$ v% Y5 n$ m! W# [# ftrue& n2 |  F- z1 D9 N
// 大于等于5 ^4 ]0 V) v# a6 f
&gt; a &gt;= b
; t' j5 a# V' i0 J$ z% E: mtrue
8 D) k$ ?" Y1 V% F- ?' Y7 C* A1 ~// 小于
7 B+ V% V) o& S# s8 p( X+ p&gt; a &lt; b4 c  g8 p5 O: s1 G$ f
false
2 d- F" C  b1 I( a7 q) m// 小于等于) o( b2 B, j: c* s" p
&gt; a &lt;= b& Z, }( ]' r4 c3 Z1 U
false
+ O/ ^, [( [7 c6 L( E* w// 弱不等于( L" R- X' I; X$ E0 n4 n
&gt; a != b
0 `7 f; _) `: `! L' ?( _true' ~+ U; e: e+ y( h
// 弱等于* D! J. }* v7 I. l) u; _( a
&gt; 1 == '1'5 }! A* _! t, O& }7 D+ a- B  h: f# `
true6 ?. i1 W* D1 W
// 强等于$ [; q  R+ t1 g  D+ o
&gt; 1 === '1'4 W9 t) W  z; Y! Z3 [; u1 P
false9 M( M  G/ [4 z' U- p+ f2 F$ j& j, I
// 强不等于, j/ k, F* j+ `' j/ l. G( X9 k% V
&gt; 1 !== '1'
7 h3 [6 a- y1 r$ y  \6 H6 Rtrue
! f3 S# b/ k' T& _
% @6 M- L. w) M& I( o/*: `( Q# Q+ W. p, X
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
( F0 i* X4 U% E& E6 \*/5 @" M# H- b) e# |, J
</code></pre>
* Q  `) K% S( k7 x<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>! W. k  v9 ~9 l' T$ B3 P0 x
<p><code>&amp;&amp; || !</code></p>
8 J8 T/ x0 W! J9 j% S<pre><code class="language-javascript">&amp;&amp; 与
6 N# Q$ W3 B: y# A$ G+ m; E|| or , X! f) A4 z, N0 t7 e
! 非( j8 c/ Y  p) }6 S0 s
</code></pre>
1 E; F) i4 u  H  T0 R<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
9 e) e& {# y9 s( G- w<p><code>= += -= *= /=</code></p>0 I" y' E; ?& O1 l
<pre><code class="language-javascript">// 赋值
; g* I. S$ a! r- s% O! J# U0 D&gt; var x = 3: C" U. u7 V4 s9 L
// 加等于
* J- ]( A0 q1 K+ a/ a5 b" Q' c&gt; x += 2, e& F8 S) N: S/ v& n
5
: f# u* o8 O# p+ @9 A% K/ x) o) n2 }* a// 减等于/ h& M) @/ A1 P
&gt; x -= 1" [0 P) M6 `: {# T+ ~
4
% Q9 F% j! l8 }! |// 乘等于
7 T" k( L8 J! r' G9 }* s&gt; x *= 2
; o9 C8 C: N" T3 S! w8
& q2 @' a: v4 u( e// 除等于
4 b; H; ~. [4 p2 M1 s4 R&gt; x /= 29 h3 r& P# ~( _' A; D4 B
4
9 o. U7 I! d, x1 a( _. d! l</code></pre>  l' \$ j) B( ^9 j
<h3 id="25-流程控制">2.5 流程控制</h3>
# C: Y  ?! x( h% d<h4 id="251-if">2.5.1 if</h4>
; |2 Z2 w% K/ w2 _# T<pre><code class="language-javascript">1, if(条件){条件成立执行代码}& {' ], w$ b; ~2 b: z
. g; d  \7 q$ L& u$ Q0 O/ P6 h
&gt; var x = 3; W7 y& H! k8 _
&gt; if (x &gt; 2){console.log("OK")}2 E3 B5 `; E' y# \: G0 ]
OK
; N2 Z4 v9 S4 U6 @, Q! a* G
& k9 K! R& V9 u5 K$ n2, if(条件){条件成立执行代码}
& [; w/ F. C9 n2 ?        else{条件不成立执行代码}
$ @0 E6 Z$ ], S3 Y5 a& v' Z, `5 C
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}: T6 }6 a7 D2 ~6 o% q- P
'NO'
( O6 s5 A) y& W  J9 J3 ?; U
$ U0 k2 P: {5 N2 [  i; o3, if(条件1){条件1成立执行代码} ) f% y: a! f' _
        else if(条件2){条件2成立执行代码}
& ]3 I7 T1 v% N3 Z* r& F    else{上面条件都不成立执行代码}
5 p0 s* m# I# G* V7 z9 Y, y1 g( z  b% f% q; i
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
$ h- |; O3 O! H3 Z- s& z* o Ha
' v/ x; t" W# t* r( R/ z</code></pre>- ^+ |# L& A4 ?9 N# }
<h4 id="252-switch">2.5.2 switch</h4>- l7 S9 i4 y  K9 t2 X* ^% B
<pre><code class="language-javascript">var day = new Date().getDay();
' N% p( A* ]0 B8 F) X! G/ wswitch (day) {
1 F2 r! d6 H5 A6 C  case 0:
0 U4 f/ h: |/ [  console.log("Sunday");
. I- P" m$ O# x8 o% k, F9 ?  break;
6 Z: k1 U& W+ c* a( c& e1 R- C  case 1:
/ Q6 N7 e. ?. V7 Z( \' p  console.log("Monday");
6 [4 Q7 ?/ u- d- F, N! b# p  break;
9 F: N: J3 J+ f! M* `default:& }! H) r- T4 t/ J: d
  console.log("不在范围"). r4 p$ B0 x' r* _, A
}
8 X+ W4 [1 {# y7 X 不在范围9 v1 W! ]' o4 Q6 q5 ?9 N
</code></pre>4 K2 M/ E$ t2 [" _0 w8 ~" k9 `
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
' \% O% C2 U  i5 ~6 o<h4 id="253-for">2.5.3 for</h4># v/ R" o4 n. C& b4 I; i
<pre><code class="language-python">// for 循环
- L8 `. s( W/ G3 ^        for(起始值;循环条件;每次循环后执行的操作){1 t  F. n# {, F8 H
        for循环体代码
& f% s% O& o1 N( D- Z6 }. j# O& }" |    }
" j5 E' [  x# H/ w+ K
* D7 E, f2 g, g( O6 e- n- xfor (var i = 0; i&lt;10; i++){6 w* X* A/ q3 [8 I- ~$ u
    console.log(i)
& i/ ^$ A! Y: i# o( z$ n% O0 i4 g" q}
& b5 T+ }: b! `/ A        0, |2 T% m) ^8 c/ q) a$ }
        1
4 B) W9 h: |: G7 Z. j        2
5 h; n9 b4 z# G- \        3- Y& k; J! d5 S* j( s9 ^
        49 X* q. r' q: o6 v
        5) o7 M7 P+ {% v0 t- A
        6
% o8 i  T% R! }8 e4 S; ^& b        7
7 k- ?$ c1 ?+ D/ L        81 u3 [- }. ^  b* w$ U0 t
        9
0 C5 j" s% S9 j</code></pre>
' O4 ^: J3 b' t* M1 _) h6 y! X  [3 {<h4 id="254-while">2.5.4 while</h4>* ^! H4 T* _7 o. o0 H9 Q+ [
<pre><code class="language-javascript">// while 循环
; |+ V* o) N' w7 e+ A' P6 C. i& H        while(循环条件){
+ x+ D/ L3 z: ?5 l- {        循环体代码
: o/ ]7 F9 }  a1 o2 G    }
! k2 d/ ]2 E. _) A% w* o5 N, M' }/ ~" [4 @
&gt; var i = 0
8 e& g# K2 l/ }) f% c3 N&gt; while(i&lt;10){
& X* S8 u) J2 I8 J) x5 Z    console.log(i)
, B5 f( R5 _% q% j    i++; C' _1 U) w( j. X( E2 \) m) @
}9 Z+ Q9 R  Z+ o: Y0 [$ x: L
0: I% j! @/ X1 S
1/ N9 K+ W* T" S
2
$ w0 Q- S3 T6 V 3/ r, Z- l. f: r2 @0 G- Q
4
: p" V# N/ {: a% Y8 A6 F 5
1 `, o, R$ ^/ }( U2 l! R 6# y# x. `; Z, F1 k0 ^4 `
7
0 b4 P& ~* T0 ]+ ] 8& t6 l7 R& h, m
9" R- G  h4 x# d) Q% C: \: a
</code></pre>9 _' p9 q2 n5 ?0 j
<h4 id="255-break和continue">2.5.5 break和continue</h4>
$ Q2 O# l: \* ~8 S4 \+ S- W+ P<pre><code class="language-javascript">// break
" K% [* |0 L0 h1 K$ b2 Rfor (var i = 0; i&lt;10; i++){
% @) g4 y4 ^+ \- O! k+ I    if (i == 5){break}
' m7 G- o/ \) J% [7 a6 E# |    console.log(i)
4 c( Z8 f6 V' |# k}$ N8 ^# d' d" {) {
0& l  o/ B3 o5 `! `5 Z; Q7 p
17 _6 l3 E" W+ N/ o0 k# E* n5 I
2, O5 c& X; u6 U. l+ @  O' C
3
7 C8 A. s( K6 T  k7 w6 W' z  D 4
8 D4 `& j5 h( T* d: Q$ n2 D// continue
0 n6 \1 C) L7 X% rfor (var i = 0; i&lt;10; i++){
1 W: {: p9 a1 E    if (i == 5){continue}$ s, g$ Z4 P) i5 m4 @- V
    console.log(i)5 {0 R; T1 T" E% f, [
}
7 \$ x9 Y/ u+ J! I 0
/ D; K7 j  p4 {# n5 o6 D 1  a- r, V; K" ~! T8 a+ P
2
( j. v6 Y2 Y1 y1 O 3
) Q: j+ M4 y. X* D 4; H7 Z8 Q4 u' o7 t* w. {
6
5 L6 K4 e# H' y! E 71 u' D+ R5 n0 N" B
8
- U( s, m# \# [  m( E5 Y3 ~ 9
3 q' w- U. j5 Q, w8 b! u/ `( G, n0 H9 Y1 h6 }- p2 I9 v& a
</code></pre>4 Z0 [: p) D/ t2 C' h
<h3 id="26-三元运算">2.6 三元运算</h3>
5 g1 L+ j# g2 J<pre><code class="language-javascript">&gt; a
, S3 |" {$ {3 s- n% |6
; Q+ U4 V5 W5 T1 Y4 {, O' h&gt; b
# u/ f. A3 ^5 @! j2 ]9 n9 L3
: t$ O7 }. G# I) S) t6 U
' g, w/ h* K1 D1 u% l$ {: j) ^0 {//条件成立c为a的值,不成立c为b的值+ g4 R5 [) J0 {3 x
&gt; var c = a &gt; b ? a : b
$ l! V- \$ V9 S7 r&gt; c+ }' M( G" H8 P' |
60 r9 z' d2 Q6 y2 z! {" ?' X) B

" [5 C3 v2 y" U, j// 三元运算可以嵌套
: r7 @1 K9 V' m- W$ m5 g6 M</code></pre>* _0 \( A# r9 ^( |+ N0 _  c
<h3 id="27-函数">2.7 函数</h3>
: Y1 N. S  ~, |# W: _2 q  a<pre><code class="language-javascript">1. 普通函数% S6 K* K2 N& c, Z$ D. G9 b" x
&gt; function foo1(){) l& @/ r7 Z* K& y! e
    console.log("Hi")7 l  P) L6 u1 @) [& z
}
; t/ ~; f' U8 O* `  i( j7 M5 m! {5 q9 z, x
&gt; foo1(), x( T1 I3 F6 }# {+ S1 F+ P
        Hi1 W- }2 j: v) B- W; @
2. 带参数函数
% D6 R2 w4 ]3 V&gt; function foo1(name){
6 w9 O) [2 J  C7 q* f: M  i! }console.log("Hi",name)
$ G9 `+ S, Q1 g+ B}
. {0 a# n0 x" a. i9 d& Z
1 @+ U1 O6 a3 {* w) ]/ k  A* c&gt; foo1("Hans")
- {* f4 ~) U7 W+ N4 m, }Hi Hans
! {, K- P1 s+ |! C$ y
  W' k0 W& [- [% T# C6 u&gt; var name = "Hello"% Q4 b' Z! l* e7 M+ }+ ]+ s
&gt; foo1(name)
+ b2 l$ f1 M2 W. [: E5 PHi Hello" B5 i# F0 L4 F5 [2 S' P
: j  V" y" ]9 }) L2 c2 l( P) S& d
3. 带返回值函数
- O7 e/ d! y8 B" s+ Y7 h6 n&gt; function foo1(a,b){! k3 \! O8 T9 P% |9 z+ t
        return a + b   
0 K. @, V0 ?1 W5 l# I; ^( N}
2 E! a8 ]; k- D7 D&gt; foo1(1,2)
5 \5 W, y8 j& ?7 Y3* T4 W, o- q. U% M% J" Z
&gt; var a = foo1(10,20)  //接受函数返回值
" M- |& _, a  q: I&gt; a  n3 K( E# J* @# t- m9 D9 E. A
30
, _: ]9 l8 d' g" M3 u" [5 x! h; ]  o0 u$ |9 D8 `+ E) q; s7 o
4. 匿名函数6 r  ^( C. a6 S
&gt; var sum = function(a, b){
' _: C2 K& P, k! i3 ~2 ^  return a + b;
, C' Y0 i. q# o$ Y( {}
8 f5 ~8 R! r3 x8 X& H&gt; sum(1,2)
4 {$ Z. m3 j; k& z, N3
8 l. P. _: @0 A6 d. r) g1 l0 }9 ?' {1 E/ s4 n
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱1 O, x5 b! |5 f$ n
&gt; (function(a, b){
$ M( k+ _5 w9 }4 ]" F3 @5 p3 F  return a + b
; z2 k5 {' d# H- f3 C4 u6 q6 p+ T6 G9 B( k})(10, 20)
0 T) q0 f+ S# `+ M8 F30
5 X# \% }7 t7 f" o4 ~( _
. ]/ f. t7 M# Y6 }/ m" b5. 闭包函数
3 ^' `% o% T: E4 r' |% x7 R// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数" _" ~$ ?' M: Q, D3 u& r
var city = "BJ"
* O5 D, x, w1 S2 N! N4 g9 z$ Vfunction f(){
9 Q3 L$ r1 G. k$ f$ y    var city = "SH"
! q7 }- l6 W5 c" i9 t    function inner(){
2 L3 U8 J  \, q        console.log(city)/ @  Q' Q) V$ `' U, Q0 j% O
    }# m7 _9 }* _+ _
    return inner
2 t# d1 L  R( e! _2 f2 e}3 y' f+ q1 x( u/ c) ~+ k9 P& e8 z
var ret = f()
. n5 x1 R/ p6 t4 Uret()
. ], e1 z# b' T: _执行结果:0 s# `7 [; H0 w5 X% o
SH( c' k( d, G% o% V# D$ w
; w: @7 \  g- F$ _; R" W/ V. y
</code></pre>
% M- [% i" H3 ~<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>( O. Y3 ~# p' G5 \9 v0 f  |4 d
<pre><code class="language-javascript">var f = v =&gt; v;; |" m+ r! Z6 c: _& w+ I
// 等同于8 b0 _5 {' |' i3 d  }
var f = function(v){& I* F/ y' i1 Y
  return v;) {6 y/ Q% t$ X+ u. x1 y
}7 X$ J- k+ l8 v6 k4 U
</code></pre>3 U9 J7 a- q# Y3 M8 a/ M8 r7 L& ~
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
' F0 D/ ~6 H$ s7 ?<pre><code class="language-javascript">function foo1(a,b){
! o9 M3 b2 G$ S; b1 \    console.log(arguments.length)  //参数的个数 , |$ ^" ]8 _! ?
    console.log(arguments[0]) // 第一个参数的值
/ @- S6 g; O0 m2 _: d        return a + b   # A9 l2 B  M" q, a
}+ |* E% w* C8 }% o) ~" c
foo1(10,20)
) {" V, v* c; _) z结果:2 J) l+ S- U* Y7 |: w# Q
2          //参数的个数
% U/ j# d0 x5 M1 w1 O1 f4 Y! I7 R10        // 第一个参数的值
$ L/ X. y' C, V! _; A7 q6 `30        // 返回相加的结果  J# ~3 ?/ Y& A! n! _/ _
</code></pre>) U" Q$ K' g0 b6 f9 }  W" N
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
4 x  M$ R: t/ t; l<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
, I/ ^+ J$ M3 o2 R<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
6 d8 G) m% a9 m8 v) i$ ]4 T<h4 id="281-date对象">2.8.1 Date对象</h4># S; B0 O% G/ E6 \
<pre><code class="language-javascript">&gt; var data_test = new Date()
  V( q( [8 m5 {1 E. m# `, o: a&gt; data_test; ^& k8 W! g; \' r% \
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)4 _. u' k, @6 x3 o1 v
&gt; data_test.toLocaleString()
7 m6 c. P" [7 w# [( \'2022/2/11 下午9:44:43'0 I+ ^) X' B: s: m. l+ e) c

1 t, R$ s9 V# @* A&gt; data_test.toLocaleDateString()
* ]; m+ M3 ], ?( l'2022/2/11'
" O0 {% J- T( A7 P: |
+ m: [( D  d& ~&gt; var data_test2  = new Date("2022/2/11 9:44:43")
: q; T6 L' L9 p) X2 k( g6 p&gt; data_test2.toLocaleString()7 }$ C5 C$ ?0 @  G( v' M  {- q. ^
'2022/2/11 上午9:44:43'
* [  c  {8 X0 N( t. L( L
  j' R9 c3 Y  R" O. |7 B' y: w; X4 P# t: m% Q// 获取当前几号3 m$ O2 V& K5 o: L
&gt; data_test.getDate()
. P5 ]; O* O5 }4 }4 w: p4 O  P- ]9 u' w115 g+ R: _  ?- ?2 G+ y
// 获取星期几,数字表示
9 o8 `" C) S, o: Y) Z&gt; data_test.getDay()  5 t8 t# D9 d5 N( n1 V3 \5 U
5
1 Q3 t. n& r' }& U( J' V+ O1 N// 获取月份(0-11)8 U% ?0 h, I: u0 z- f' [1 R
&gt; data_test.getMonth()7 F& X0 e9 g, \( Q; ^# R
16 G( `" C/ j* N
// 获取完整年份
# [7 O" |& V  p: g, ~" E&gt; data_test.getFullYear()# m: }/ Y, H. X" V9 B0 [9 n( u
2022
, c1 Y' i. V# y, a/ R// 获取时
# M6 C" X- W7 U. }&gt; data_test.getHours()
- U. c# Q. y3 w, e# {0 t: l21
" F* J0 k* v' j2 c9 Q// 获取分
" D' A% _2 b; L; M; v&gt; data_test.getMinutes()2 C5 h8 P+ [: |( c2 L
44
) p5 B$ P" b4 H- Z$ ^' a// 获取秒  K0 K; P- h: V' Q9 H& M
&gt; data_test.getSeconds(). A! B5 g3 p1 a+ U. T
43; }6 O, w+ T9 s- c6 J" U  a8 _! J
// 获取毫秒& J( [' H1 N! \5 P3 K3 I' N* I3 ]! g1 f9 ^
&gt; data_test.getMilliseconds()) n3 M0 R8 k" T( Z, g* V0 s0 T
290
3 V- P' t  ]6 A% K// 获取时间戳
- u+ W" b6 C  T, k( |) L&gt; data_test.getTime()- n9 [. W. t3 Z! }  y4 d* t; m
1644587083290
) b/ u4 [9 x$ N- w9 c</code></pre>" j& j% H; P9 U6 c. y+ P' t
<h4 id="282-json对象">2.8.2 Json对象</h4>
  A1 _2 E$ q. j) ?8 @: f% {, E<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
* I+ o6 `  G* h" F; L/ t; AJSON.parse()  // 反序列化,把JSON字符串转换成对象* K* ^. [7 F) E) F8 d

$ K, D5 W4 k7 r2 H# Z' e// 序列化
+ S  x" I) O, U  P&gt; var jstojson = JSON.stringify(person)
% n6 L4 K/ D5 B+ R! E3 r&gt; jstojson  
$ {4 |- u4 A6 Z5 g5 l'{"Name":"Hans","Age":18}'
6 L) v" N( U4 G( Q; b4 u9 ~6 L1 @$ e( Q( ]8 m
// 反序列化
0 }# C4 V; K; g" G/ {" i' n&gt; var x = JSON.parse(jstojson)
+ P. O/ d/ t$ m/ B&gt; x8 J3 ?5 |7 \* J, ]. L# \# i) w
{Name: 'Hans', Age: 18}5 R) s  W6 w7 U8 g3 s) p8 Q5 c
&gt; x.Age. @: i7 ~1 k' ^( ?6 y1 a
18
+ N, l. z' z, k% w</code></pre>
6 J# _& b: Y! Q+ z* E: q<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>% r3 F8 C: a0 W+ C( x% l
<p>正则</p>) A: u1 T, g1 n- q$ r7 `
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");: A; k* |8 i$ E; ^5 e
&gt; reg1- j0 C1 f* R- U, t
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
1 j1 m4 ~0 `# R8 v&gt; reg1.test("Hans666")! K+ B' P- b* e8 Y" ]
true
: Y% }4 |8 e' P4 [
2 C. }0 C& I  ~% |&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/) s3 A" o2 f' y9 t; y7 |
&gt; reg2/ B% X4 m3 i0 _! U
/^[a-zA-Z][a-zA-Z0-9]{4,7}// y. K5 m  k9 ]/ [, i
&gt; reg2.test('Hasdfa')' g! r; T3 s7 q
true( k% q; E0 ]' {4 J0 r4 j- A* X

. u8 J9 a6 Z0 E9 j/ v3 I全局匹配:, ^7 U( y# W$ ~/ s
&gt; name* y5 C0 c& A7 I) R
'Hello'+ Y- }+ n3 c, p$ p) |2 x3 S4 U5 j
&gt; name.match(/l/)/ K! c# Z: J9 p, N1 g; f
['l', index: 2, input: 'Hello', groups: undefined]+ M2 u' c4 ?9 q3 ?) ~( Z

- y* _5 e0 D6 ?; {  D3 F/ ?. N&gt; name.match(/l/g)8 v& e0 S  O9 Y4 q
(2)&nbsp;['l', 'l']
' C$ S  ]$ d  m8 o5 s! Q$ G  Z// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配& \5 Z, C: t% |- t9 L- Y- C# Q( W

3 L8 M. O* u  r# u* I; G' m+ D全局匹配注意事项:9 S/ Y4 g" Z/ u, _( C# M2 C5 p
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g' N& }. W' U7 p$ ^
&gt; reg2.test('Hasdfa')& M; M9 w5 g: {
true; s2 \; t' U6 T% {4 @" q( d( r2 j0 X2 N
&gt;reg2.lastIndex;
4 w: ^; j5 d4 _0 z# E$ D. ?6+ i8 }; z7 _+ w; X. q+ q. g2 X7 G
&gt; reg2.test('Hasdfa')4 t7 Z. G4 t% F
false
5 y  {' O: R1 ^* n  B" \&gt; reg2.lastIndex;
1 k1 O& X* z' E1 G5 s  n- Y0( Q" B& W' K- A0 _3 k  F1 {. ~
&gt; reg2.test('Hasdfa')% h3 t: j4 ~/ b2 K4 R3 ~8 {
true$ P7 W  Q( R- i; ^
&gt; reg2.lastIndex;3 F& P) Z* X* R
6; j3 w" |: |/ z2 X# q# D5 `0 k
&gt; reg2.test('Hasdfa')' z; N  `6 M0 T% T
false
8 s. |9 f0 _3 G6 q' K&gt; reg2.lastIndex;/ S( L' V1 c  R
0# m- X8 \: `5 I' \. J% g( `3 e7 N8 U
// 全局匹配会有一个lastindex属性6 D( M7 ]- Z, V* N6 T
&gt; reg2.test()" H6 _* E9 x, C# b1 |6 ~
false
  A5 t8 u( c) h  u5 ^6 m& x1 F&gt; reg2.test()* q! u4 Q& U7 _; s; ^3 O' F
true
/ M* H$ I, {+ P* L+ z// 校验时不传参数默认传的是undefined
4 f) U5 [4 C! P; l% ~</code></pre>8 [& N- E8 f# O1 W/ ~4 U2 l
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>" j$ @4 x& G) ~! }. Q
<p>就相当于是<code>python</code>中的字典</p>
- G, }6 a1 x) y8 r- t4 A2 L<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: Z0 p  G( \7 n( V9 o- X&gt; person8 t3 L2 c6 P3 _) B, d/ y$ p- r
{Name: 'Hans', Age: 18}# m. d( w8 J; c6 n0 f4 u* d! n5 `
&gt; person.Name' ^" W4 ~; u# |: n4 o
'Hans'
, I: [# {% q" I6 R# ^7 Y&gt; person["Name"]' Y0 s/ T" x4 ^* ~4 ?$ B
'Hans') X' N3 s- S  C

4 e) x9 w  v1 N8 ]// 也可以使用new Object创建
5 p- C2 x0 |; e1 g0 B+ E: ~5 n&gt; var person2 = new Object()
1 F" A# }+ D2 |8 v( Q4 U&gt; person2.name = "Hello"
7 M# `0 I" `! D4 l7 ~+ w- {'Hello'+ K# P2 r. U. g/ x
&gt; person2.age = 20
- Y: E6 P, |7 f20* ]3 e# Y9 r: T- U2 P, r
</code></pre>: g2 S1 C6 y& B+ H
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>3 g6 C+ @6 I* F9 s
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>" f2 ]7 T5 w" G  c
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
7 Z' T" D% A+ ~! e+ ]$ {7 W5 A<h3 id="31-window-对象">3.1 window 对象</h3>4 z) w. A9 |+ C- W6 J7 K$ w1 e
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
* \# k, Q' w; J( R4 F6 r<pre><code class="language-python">//览器窗口的内部高度, F. D+ S: n  F8 l7 ~+ S
window.innerHeight 5 W, u( S% e2 }5 U3 X
706
7 [7 v4 p8 {- w9 f//浏览器窗口的内部宽度8 v; |; \3 \* Q4 b: ?
window.innerWidth) ?9 W6 ~$ A0 q" g
1522
; O3 f8 E- n0 L// 打开新窗口, h: g, U$ ^" t+ x+ F9 [1 c" N$ Z
window.open('https://www.baidu.com')
7 }0 b, g: T% S/ u' A  @% yWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}0 d$ ~% v3 L3 E8 Y4 x
// 关闭当前窗口
% {# N  x: e: O7 `4 U# x* J3 Cwindow.close() 2 l1 i2 X8 y% u2 |* o
//  后退一页
: E8 {9 i# p4 L+ {window.history.back(); ^) X* b3 X, U* o( Z6 w
// 前进一页! O9 F" U6 @; ~8 @/ X2 y9 x
window.history.forward()
( q% J  U/ X1 e* \8 @* ]//Web浏览器全称% ~& V" Q1 _: x3 F
window.navigator.appName
3 {- h/ u9 O, F0 i8 K. O'Netscape'& i# V& ?0 c. W# Q5 A. M1 L
// Web浏览器厂商和版本的详细字符串
& M0 |1 N) @; l; d9 ~window.navigator.appVersion
1 G+ x2 _+ U3 K4 [* w" |'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
* J. Z" C+ `1 F5 k! t6 Z// 客户端绝大部分信息
) S9 U6 ^& N1 ?3 U, ?! F8 xwindow.navigator.userAgent8 Y, z( `  J; Q6 k% q
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ ]& J- `/ @1 d1 u8 }
// 浏览器运行所在的操作系统
8 }/ E" @& w; m! y& twindow.navigator.platform  f( G8 ?5 N7 ^9 u
'Win32'# Q/ D+ \9 j: ~* d- O

/ `; f% x! ~" m8 K# m- Z* Y9 a//  获取URL5 B6 J1 Q# S$ y1 a
window.location.href+ w' q5 }8 ]( U9 n) \" K8 M' W8 U
// 跳转到指定页面  H+ Y: \9 [" w. @; B1 `( ^
window.location.href='https://www.baidu.com'
+ i% J9 C/ A8 M0 U& L- ~3 C. l0 K// 重新加载页面
. Z% j1 `9 [) {5 F$ Twindow.location.reload()
* v( Q9 q4 i! u+ {2 W) l# d! v8 k</code></pre>! v& ?* X( M" E  z0 o& a
<h3 id="32-弹出框">3.2 弹出框</h3>$ ^7 [6 n5 c& \+ ?0 W$ B4 c# Z) \% @
<p>三种消息框:警告框、确认框、提示框。</p>
0 H- V4 y" A9 V8 @6 F" D<h4 id="321-警告框">3.2.1 警告框</h4>
# O( V( y5 J2 {% n$ B' U/ y<pre><code class="language-javascript">alert("Hello")" X0 c! ~( U4 z4 o
</code></pre>$ B1 h, j/ D2 o7 Y* W. d
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>  @4 b& P+ X  E4 G) S8 a
<h4 id="322-确认框">3.2.2 确认框</h4>9 w, H+ j% ^8 d2 ~3 f8 r
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; ?- t, ~5 L3 C7 v$ Z" W<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
' M/ h# H; n' F1 Ktrue, F) h* e, C- j5 |# Y' g2 C
&gt; confirm("你确定吗?")  // 点取消返回false) K  X4 A" T  z4 [. V7 r% V" j
false
* K' y3 s$ n6 {9 I3 N" O4 O0 V+ t</code></pre>
6 R1 u5 B- W& T% Z. K: J) W<h4 id="323-提示框">3.2.3 提示框</h4>
! D. h3 `$ ^* O9 Z# Z0 D/ F<p><code>prompt("请输入","提示")</code></p>
+ X" q% K" X8 I<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>2 d% d( T5 @  l# ]" E2 Z
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
) W. Y- g# V' e! c<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
% B0 _, j) H% p2 l7 C' m) @6 N<h3 id="33-计时相关">3.3 计时相关</h3>
3 E# B& \$ P7 e& V* B<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>  v5 A) u& L+ m2 a9 |
<pre><code class="language-javascript">// 等于3秒钟弹窗
; z; T$ x# e! W7 nsetTimeout(function(){alert("Hello")}, 3000)% Q0 L' G6 Y" f! L* v2 T
6 c& \( t! K* z4 P* {4 ^3 D* d
var t = setTimeout(function(){alert("Hello")}, 3000)+ y0 b( ]6 L7 ^
  r' ?  U- F% p
// 取消setTimeout设置
4 U: @0 D( R' w: JclearTimeout(t)4 ]' ~6 D" O, W, o) b
</code></pre>
) B' {- x5 ~7 P, H0 {, k- L( N! X<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 O; P, [6 y* j- |' o<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
% A+ p5 W) J$ I- N* w! u9 z<pre><code class="language-javascript">每三秒弹出 "hello" :; I9 J" G, r4 u- S
setInterval(function(){alert("Hello")},3000);& i% ]3 c; l! P' F# M
</code></pre>
. `/ i" j+ N8 Z4 a$ F<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
0 p0 x1 V0 x7 p' d<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 U$ @) f. c3 T5 X3 d" f* y//取消:
+ ~9 h+ V1 f% f2 t- ?" f) KclearInterval(t)
) D0 B6 b$ w7 |, L9 x4 N% z, ]</code></pre>& m' }& C& O, g
* r4 H% F! N- o' o+ ]
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-6 17:01 , Processed in 0.070677 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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