飞雪团队

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

前端之JavaScript

[复制链接]

6379

主题

6467

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

+ p' z! j) m- A9 d- A! w<h1 id="前端之javascript">前端之JavaScript</h1>6 w& |- _) U$ m5 `+ A1 O7 g
<p></p><p></p>- [3 ]! N" q! C% c
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>; I2 a% A- K$ d2 y$ I* C6 x4 `% d
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>1 T9 M( `: O; }3 L& L4 _  t4 Z
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
; g& f2 S  Z: A4 J它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>2 x0 a3 z; B/ l2 f4 r7 G/ |
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>& A9 G9 e/ x. W8 P" [
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 r- Z* s" |+ [. }; A<h3 id="21-注释">2.1 注释</h3>
2 e) N" o7 ^5 i8 R# Z% o8 v& b<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
6 M; x2 C+ e  P. L- [" g<pre><code class="language-javascript">// 这是单行注释2 Z" I& W* x0 D/ \
, f+ _6 T+ X' B8 h9 B6 [' n* F' D
/*9 |+ [! c% y7 @7 t6 i: t$ H
这是多行注释的第一行,7 p$ H( Q4 u! Q( @9 u% B" q
这是第二行。
8 ^: S, j" X& ^0 v# D*/
6 O6 a2 y0 P% U$ r! K</code></pre>
) d( s4 `5 S  R' T# `<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 f; h0 l  Y+ c2 k$ V7 N<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>3 S5 \. ^- q! S0 m( e
<ul>
- w  `6 v2 R# r7 t<li>变量必须以字母开头</li>
5 x! m2 c) T$ e( }/ }8 ^<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>  M+ \3 l6 T: z; H6 G$ q. `
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
5 {5 o0 ], M2 J- a5 R- @- ]</ul>$ S" p. j+ R: Y  ^+ W
<p><code>var</code>定义的都为全局变量</p>8 E* {( U" w% A! `# B0 ?, l
<p><code>let</code>可以声明局部变量</p>
1 R" d/ r' {- E& D/ _<p><strong>声明变量:</strong></p>1 L. D, `" G  O+ c8 R) L8 P" P
<pre><code class="language-javascript">// 定义单个变量& Q$ L7 q& ~. j6 ?
&gt; var name6 {3 s$ l/ F4 ]$ {# c8 ]! W6 W
&gt; name = 'Hans'; I% ~  O. m: y9 f8 Q1 [- K
//定义并赋值
& c& j/ K" p% D" K& O&gt; var name = 'Hans'
" Y7 m* S* N4 }# W4 k" a&gt; name( s0 f5 _% U; {: r
'Hans'
5 `1 h" _* t& z1 ^+ d( j) \7 }$ i; J( G
// 定义多个变量+ q: T( o; R' n& I
&gt; var name = "Hans", age = 18& [, P1 K+ U2 \  S7 u
&gt; name
  O# W8 e( V- y: K+ Z'Hans'1 Z) R5 A: u) u2 U, J
&gt; age8 B7 a* h! w9 f% t. I" Y
184 Z1 U9 p/ F; `8 x

2 Z; o2 o2 J3 p5 F1 O0 Y6 ]% U/ g1 A//多行使用反引号`` 类型python中的三引号9 [4 s7 k& y6 j5 I2 d, @( i
&gt; var text = `A young idler,
, d0 j5 o& n8 _! ^an old beggar`
" f' x; U4 G% _' Y&gt; text
# D" v5 W4 T0 t. n8 s'A young idler,\nan old beggar'0 g/ U- j$ Z- f+ ^2 _  p1 s+ W
</code></pre>" E# }7 f1 w8 X2 W1 K7 O: l3 s
<p><strong>声明常量:</strong></p>; T, D  T5 f% D3 \6 Y
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>6 f# q3 I4 A; z7 t3 @, g$ |' b
<pre><code class="language-javascript">&gt; const pi = 3.14
2 d! v  s4 O; e) s# K; E, n&gt; pi
" R% o! S( l  C* k* X7 X3.14; u7 X7 s: t; \. |# ]% @
&gt;  pi = 3.01% l% m5 `, W: v* W5 j4 G
Uncaught TypeError: Assignment to constant variable.
" z; ?; U0 m9 f7 f: K( K  g    at &lt;anonymous&gt;:1:4# K7 K( m+ m6 i, a" ?" V$ @# q
8 r2 j5 Q0 z) G" L/ r. N
</code></pre>
- ^& W! i  C; i7 V0 k<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
$ f* w4 _# w5 j* E- q. }% U- q<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p># S8 P) b+ ~) k- w7 x
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>5 @( T) k5 }1 d: U4 D( y  N; M
<h4 id="231-number类型">2.3.1 Number类型</h4>$ Z; a4 F$ p5 l* `3 l: j' O, y
<pre><code class="language-javascript">&gt; var a = 5! j' ?0 u5 x6 [3 i" F
&gt; typeof a   //查看变量的类型  
( V6 r9 G) f) f8 s) O! x: C& pnumber
5 n  c  c! ^' h) P" u# y4 a: Q) Q) H% D' v. X5 r3 [% ^1 T
&gt; var b = 1.3/ g9 {" P% N: ^1 H- O2 G  K
&gt; typeof b% x. ~; R: f6 v& ?  v' Q' M7 \8 x
number
6 D! |2 n# r3 r1 l8 p# w. E+ ?, D3 f: F& ~
// 不管整型还是浮点型打开出来的结果都是number类型4 _0 w; M  E; y  u7 Z

9 K' ^3 N7 J6 W: x6 v: @+ I7 i/ A. @/*
" [" g: G7 m; o7 _NaN:Not A Number; e/ O5 c. L* F! G' ?& |
NaN属于数值类型 表示的意思是 不是一个数字" i- f. W7 E  p( U
*/
8 _8 o# O7 [. J! r% O) @
3 j7 G/ T' p2 R4 Y/ p2 a1 W  AparseInt('2345')  // 转整型$ F1 }/ A: T7 q$ \- J2 A8 @; `
2345
& y6 A& j8 [9 H- yparseInt('2345.5')
, ~- a5 h' [8 _/ Z+ S2 z2345/ h6 `1 ~$ Z" S5 Z: A
parseFloat('2345.5') // 转浮点型- y9 o6 G7 D: d7 b
2345.5
/ m# Y* ^/ T) m& @+ c8 SparseFloat('ABC')$ ~9 R* [. F7 `. p
NaN! i8 b' [+ W7 I; x5 Y: b
parseInt('abc')
8 \8 f0 T" q$ W7 I9 wNaN) p, X9 f. C" G
</code></pre>
; N+ B* T. s, [* [; K! q1 K- m( j9 e<h4 id="232-string类型">2.3.2 String类型</h4>( u# k8 X5 n  F7 w9 o/ H0 `
<pre><code class="language-javascript">&gt; var name = 'Hans'
# ~; o) I+ ?% M# O&gt; typeof name* Y3 t, z) k, ?: v" V
'string'2 {& {. A/ [# B& L

0 W! F4 N2 r" n3 @" ^( x//常用方法" q8 H8 T7 W9 W3 z
// 变量值长度
9 X# p  A7 x  J' Y: D! g&gt; name.length: w( w& P3 Z3 E7 d
4
, g) I/ _$ @" s( R1 c2 o: A// trim() 移除空白
0 h, X0 S/ J& r&gt; var a = '    ABC    '
8 m$ J) I) m7 E5 B&gt; a7 X: N1 \5 {0 I8 Q' M
'    ABC    '! z  R) q& @' K2 p$ H" U) M
&gt; a.trim()
( ?( z  A1 a% \) n'ABC'( H' A' W0 t  W# k
//移除左边的空白& ?: [  b6 Q" Q
&gt; a.trimLeft()
# Q8 V2 `# b1 s* }/ Y'ABC    '
& ^  j& h, G& ]1 j//移除右边的空白
6 d1 r( q7 l9 n% I8 V&gt; a.trimRight()5 R( l$ l: i( ~0 _1 b8 f
'    ABC': V' Z" f3 I) y+ Q, w* D0 l

! E7 F: K3 ^4 D2 g0 U3 n& l% _//返回第n个字符,从0开始
- h, T; n7 L- [2 k7 }& m4 R&gt; name
7 w" L9 r2 j* h  m'Hans'2 j. M6 ~, _8 _% f' M7 G0 a
&gt; name.charAt(3); I9 l) u( X3 x/ y4 J5 p8 v3 D
's'1 ~- M7 N; G3 V1 g4 z$ g
&gt; name.charAt()
* Y9 K& r7 U4 q8 W1 L'H'& @5 J! {: Q5 L
&gt; name.charAt(1)
9 ^3 c. z) x8 X) Q. v! f: M'a'! v& i, n) H% ?* v- ^
9 B$ X* N0 |; T7 p; m; V
// 在javascript中推荐使用加号(+)拼接7 y8 h; ?8 B, s1 e) G2 S1 ]
&gt; name+ D+ W8 Y' t6 l1 I" \3 x( Q
'Hans'% ~- N3 l/ F  ~; F) U% m% i
&gt; a
; [5 g3 f- N# a- X5 @* l1 K'    ABC    '$ R( ~/ A$ C( O: h. {
&gt; name + a
" g+ e9 p1 h; ^; }'Hans    ABC    '( m" L$ T+ s! l
// 使用concat拼接  b# A1 h: K& q" o( O" z+ V/ C6 z
&gt; name.concat(a)
( d9 y8 i0 y; ~$ n+ `'Hans    ABC    '
* l* ?- }. Y' k% _+ O2 p0 [2 K" u
2 T4 `& F( c* V: R//indexOf(substring, start)子序列位置1 w& _  c4 o) _
& e1 {. H: B  B& W( e9 v( ~/ ~5 ?
&gt; text
9 G% ^( t  T4 \# X9 X3 \: Q6 Y'A young idler,\nan old beggar'+ L7 }* Q/ z4 D1 X& i) D1 f
&gt; text.indexOf('young',0)
5 m" L0 D8 w- \  J5 r& q2
5 y* S; @3 `6 U: D
' j( P: K9 s3 [6 ]1 A, l//.substring(from, to)        根据索引获取子序列1 q0 d2 o5 Q$ A7 I& e
&gt; text.substring(0,)0 }2 E' `# U: [/ W/ T9 p
'A young idler,\nan old beggar'
8 v9 O# N, R+ |" E&gt; text.substring(0,10)
, t8 f$ _5 a0 y; Y% {6 y'A young id'2 D1 b& w# T& |

1 B& _* I# \7 M5 l9 h% v// .slice(start, end)        切片, 从0开始顾头不顾尾1 x; p! s; |1 |0 a
&gt; name.slice(0,3); d( k7 y$ [* M
'Han'
% j! C8 i$ S! W, V. _" K1 X4 J, C
// 转小写
' D7 Y" S% i& f1 Y4 [9 p: x# O0 h&gt; name
. v+ \! G+ O2 h; X'Hans'
# {5 o& b* O# F; [% d; Q- l/ L&gt; name.toLowerCase()
0 P. f. J' @; J7 g- v$ P! a$ ^* w'hans'
& B+ t2 P! j) ~% F2 ~- i// 转大写) g$ }/ _  D. P( b! i- L
&gt; name.toUpperCase()( G4 T" q! J$ U- e$ p1 ]& P1 o3 l
'HANS'
% k7 @. ^$ V- x$ S! X9 n9 W$ d. p1 H: f7 O& w
// 分隔
! b8 _' d" O1 d( p- e&gt; name. _( `8 ?  ~& s& ]! X0 a
'Hans', N8 w' ~# w) C' h
&gt; name.split('a')
9 H# U7 r1 f% h9 u(2)&nbsp;['H', 'ns']& \# \- }1 A4 y! i( o. @) p1 ~- v
</code></pre>
/ B/ I1 F; ?1 s- N/ m<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>" w( r4 C& H! ]" y" ~( m* q0 f
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
4 {- Y- F9 d% d/ y  z1 @; g" w+ c# `<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>. A7 }: v) p& D9 P  [
<p><strong>null和undefined</strong></p>
6 L8 {. J5 A" M# M9 t' f1 }% U/ z<ul>
+ }1 j* f/ e; z% t* r<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
( t! q" q9 Z1 I) @  r<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
7 z, h1 K& R/ F4 h, s4 D2 E</ul>
( q$ W% V2 B8 o<h4 id="234-array数组">2.3.4 Array数组</h4>; @" G  }" r9 y" h& ~2 J+ @* \
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
& y; m9 E) B8 G1 y  I, F$ e<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
6 y: A% U8 \2 \& E( s&gt; array1
; j/ b& L6 W0 m7 r3 {# _. B9 Q(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; I+ s+ }6 R) b# H/ D+ G&gt; console.log(array1[2])  //console.log打印类似python中的print
% n3 g1 q( E, n& f/ Q; V3
* D" p# ], n9 w% d8 s// length元素个数! x0 ~  F9 _5 b) @1 h; g$ u) B
&gt; array1.length! {) w! }4 w9 ~& `( f
68 M2 O2 _3 x$ p% v) ^* A: h
// 在尾部增加元素,类型append
" _$ T+ i  w! D' w&gt; array1.push('D')! E# g# k: ?9 o+ ?
7
4 i. s+ a% ^0 z* [' {& T9 F&gt; array1
. }6 a7 X0 Q" A% [8 E  a(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 i" U) ~  z. R( d- B. S7 }2 u// 在头部增加元素7 k& k9 M$ G1 s% U$ v3 a
&gt; array1.unshift(0)2 m4 k$ v7 G" ^0 }
8
$ V5 B% w  ]6 e/ k9 k, }&gt; array1
  E& n5 v6 f' b, c& t8 x(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( K/ ?" T7 U3 r3 c4 g) o
( F% x/ M4 ^, I' n5 u; ?0 U+ o
//取最后一个元素, d$ K- x2 I( K$ f5 X5 N) D. |
&gt; array1.pop()
8 ~. o) L" P$ ^# @7 s% w'D'
7 Y4 L( R  e$ T; I&gt; array1) b4 b2 L8 Z0 Y% C9 C' B
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
3 {  R% U8 r" n5 k. D//取头部元素' L3 v. T8 m, K
&gt; array1.shift()
: E* D. T8 [: G3 K0
+ l& ?* j5 x5 j' ~8 ?3 V! X# H&gt; array12 x# ?. q/ X0 k8 }
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% W6 S% z4 y" U5 N9 I2 c, U2 \
* ^! j0 ?- x) e# d//切片, 从0开始顾头不顾尾
( X$ Y; x- F5 ?! \! D' B&gt; array1.slice(3,6)
' ]; j5 X' K( E2 U(3)&nbsp;['a', 'b', 'c']
) }" H1 V( p- V' J8 d- g8 `2 n// 反转
0 @5 F& H1 h. o# _1 j# S$ ]( Y1 P4 |&gt; array1.reverse()/ S  D, Z9 `! L: d, v0 ~1 z
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]! V/ J5 O# U7 e" y4 J! s" A
// 将数组元素连接成字符串
2 u0 P# g6 Q( I; r4 d! v1 s% x&gt; array1.join() // 什么不都写默认使用逗号分隔
9 v) s/ |. w& G7 `) t5 c) B3 ~'c,b,a,3,2,1'
/ s+ K, }; \% U% H: K6 y&gt; array1.join('')4 z6 ~/ T5 z; w7 Z
'cba321'2 s3 q  U* ]! I( o( V) b! D
&gt; array1.join('|')& _8 X: u4 X" |. E
'c|b|a|3|2|1'
4 ]1 D5 s: n# v2 M- H6 M
2 s! ?- X& v& ]+ t+ m" ~* l// 连接数组6 d. d7 J! ], a) r: `2 V
&gt; var array2 = ['A','B','C']& P- r7 \$ j/ |: v3 }% x
&gt; array1.concat(array2). ~; v4 J) Z4 ]/ i/ I0 k0 c. F. K2 r
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
0 c9 v/ ^1 h- p7 c  N; J6 O5 n$ o) i1 u
// 排序  u- R+ I5 I7 v, p
&gt; array1.sort()2 _& Q3 A' _8 f, @; f
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], F1 q  @0 C! i% u
7 W$ U0 ~' w  p+ o: G
// 删除元素,并可以向数据组中添加新元素(可选)' D. f1 H2 b0 ~+ Q8 N6 r$ z% l
&gt; array1.splice(3,3)  // 删除元素
, A, ]1 v* ~% [1 Z4 p(3)&nbsp;['a', 'b', 'c']! p" a6 [; b, A9 X" S
&gt; array1
3 P0 S0 L4 F& ?2 a(3)&nbsp;[1, 2, 3]
: H) B: B' k, A& _0 d&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素+ _# Q4 V6 q$ M& k! `/ v3 y0 ?
[]
1 X% }* h5 ?: J&gt; array1
2 `. ^7 X' x) u% `! V, o+ a3 M" ^(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
+ z9 _1 G( V4 [+ d  C
8 k8 }! j6 p' W* {/*
6 ~8 x! n/ [, _6 C/ O/ ?5 Q) h5 g2 vsplice(index,howmany,item1,.....,itemX)
5 R! {3 i( Z1 r5 Kindex:必需,必须是数字。规定从何处添加/删除元素。
. t+ A% u) M, Showmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。( H% U$ i3 N! X! w. q$ m, h
item1, ..., itemX        可选。要添加到数组的新元素
% X7 K- ?. X7 Q*/
" z. ?+ h' G, S+ ]
2 B( f" y9 w8 d% l# l// forEach()        将数组的每个元素传递给回调函数
* c+ V$ G0 G8 i2 x&gt; array1.forEach(function test(n){console.log(n)})& m2 D  s$ d7 n4 K' g0 e7 ]
19 [) Z/ p' j: }0 e" p
23 N1 R3 a. L8 C5 N; R% s* u! D
3
+ v! K% C( u3 K1 |, R/ W4 M3 k' d A; S, D  a, b3 M/ a
B. p! z2 {$ R0 S, _# Z/ ]& H# `* }6 a' V
C
2 E! D. H! A- D% r// 返回一个数组元素调用函数处理后的值的新数组
# y! f4 D2 M: e3 g5 }( G&gt; array1.map(function(value){return value +1}): c8 X5 Y2 U3 @' l  R
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']# {; `6 F% d+ D, I
</code></pre>0 k9 s; N) D3 @4 ?
<h3 id="24-运算符">2.4 运算符</h3>
4 C( n$ U& J  ]3 W' W<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
! d" B% U& S. T, N0 A1 F<p><code>+ - * / % ++ --</code></p>" a: B% m/ D5 q5 k7 a4 E& q
<pre><code class="language-javascript">&gt; var a = 6, m, W+ k% J% L, ?
&gt; var b = 3' q% Z2 U0 R' @- Q# H) Q
// 加
4 O3 e/ X6 ]& H' m- J7 o& Q&gt; a + b& a! Y) q9 o" [* d6 K$ H
9
6 D7 X9 _+ e4 w5 Z4 S3 Q: @// 减, o( R- L% S0 |! b9 B: w
&gt; a - b
% U: }+ |! |; p$ K: t( y, P, l38 E% D8 ]9 Y6 h2 V7 P7 \
// 乘
0 w4 ?* N1 q6 C! ]8 M&gt; a * b7 S2 o1 ?& m# M! }
18
  k# S' Y- R7 d) f// 除' G- Q6 G3 P/ e
&gt; a / b6 B5 {7 `6 K; E6 [( t7 B
25 _/ Z3 o* o- K
// 取模(取余)* z+ G( S2 _1 ?+ h2 n
&gt; a % b8 I, j7 u1 F+ b  P# W
0
: h6 p2 l4 {; S# [* B// 自增1(先赋值再增1)
4 V  M! C8 b1 d" v8 Z$ Z; |&gt; a++# t% W* z+ H) g3 ^& n0 N) T( I
6
# k. L- v# j3 U&gt; a8 w: c9 F+ g6 n/ l) ]
7
7 p/ P7 A) F" @// 自减1(先赋值再减1)
9 q: c* O! `& c' f&gt; a--
# p8 q# u' {) p* D3 a: ^$ g71 o4 n1 h! f( [* X9 i4 Z# S! R
&gt; a& e4 S0 w, i2 r3 I8 l+ D9 ?
60 K1 i$ k0 F5 O: o6 B
// 自增1(先增1再赋值)
. t! F5 ]& p. N: G2 [&gt; ++a1 w/ U4 Z; H+ j, E) r
7- ?( C: M/ e* h# m# s
// 自减1(先减1再赋值)$ X$ H: m* k3 w- l! q# M5 R; w
&gt; --a$ v8 _2 \% E! K$ N
6
: s' }' z8 W8 o4 Y& t&gt; a/ {, ~, I0 d* F- d3 w3 K) A1 p
60 u& a0 W: e/ p5 q

) {! f; K: `& C+ [9 t3 w//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
$ o% [5 t& c0 }; s8 p" i% E! ^</code></pre>! }2 {6 Y2 S1 ~' V. h7 t
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  _: G. b8 c# r
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>) f) K: o- H8 t. i! ~7 Q
<pre><code class="language-javascript">// 大于
) S! H; ^9 ~  Y&gt; a &gt; b
- O; \; P( {  R9 m/ jtrue6 _6 W7 u. J+ a. E% R" A" ~
// 大于等于# E7 O& K. p8 m% Q! T
&gt; a &gt;= b4 A, O% O: \* }/ O. U/ c
true
. E- L" g* a5 I/ p$ s// 小于
* p( u; X! R, L% W" o&gt; a &lt; b2 M- f6 d  \; T: W2 d( X5 ]
false) x% b& I7 ~6 \: Z, {# I
// 小于等于
) v- s- J/ j& V1 S5 Z&gt; a &lt;= b
1 L' V' j+ x" Kfalse) |7 K5 P: V' ?  s) [$ ?
// 弱不等于) z7 b& B' ]) e6 C5 H  e3 L
&gt; a != b2 i( q8 s# W  Z5 Q; s* n% P- \1 w
true# d/ w6 O8 ]$ E/ S9 f4 Y7 r
// 弱等于( c' |. F8 t+ x
&gt; 1 == '1'
6 g4 ^4 p/ _! e1 O; {0 P! F8 Xtrue7 @% I( j  c" _) @: j
// 强等于
5 j$ A; b4 q5 t&gt; 1 === '1'* B- L& T7 ^2 Q3 u8 F% j$ {$ x
false
) Y- {" f8 T! T: n7 n+ W// 强不等于" c3 b- A3 v7 v! m3 n+ Y: _' p
&gt; 1 !== '1'2 o5 t. b+ h, U1 d+ V% V
true4 B- S4 V5 I0 D& m! j4 V
8 `/ Q) l/ j% d1 U* D- ]( l. ~
/*
3 q% t  ^$ d& F1 o. C0 MJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
4 Z& C- v2 d; N+ X" c7 l# I*/. X( b8 W0 h8 u4 L$ I6 R0 W+ A+ ~
</code></pre>
$ Y$ X. z) k- j# O, [0 ^! s) G6 f" L<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
) S8 d1 [" ]" h# J<p><code>&amp;&amp; || !</code></p>
6 S! ^9 A% N* @7 e5 @<pre><code class="language-javascript">&amp;&amp; 与! a! H" Z$ ~. z8 i. A7 z3 d
|| or
5 n! E9 q" Z3 s! 非
& U' o5 t# Q$ l; a$ E3 n; O( V</code></pre>: j2 W! H& n% H" t- X
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, p7 k4 d- ]. ]- U8 r+ R<p><code>= += -= *= /=</code></p>
, I8 D9 }  k! Q3 c* T<pre><code class="language-javascript">// 赋值
! p6 @+ F* e9 g9 g6 |&gt; var x = 34 G* g1 P0 q6 |" v+ c3 l8 G
// 加等于
# j3 S$ j- o. K' l  n&gt; x += 2/ z: h( w; S) O0 d
5. O0 ~0 d1 v& q1 ]; w, i" {4 z2 a' x
// 减等于8 u7 s' ~; B: |* {
&gt; x -= 1. m  r$ T  u1 u5 Z$ e
4
& W: `7 S9 y; R& c7 `// 乘等于; Q5 \% m" g# v2 }/ g: z1 Y
&gt; x *= 2
/ J$ ]/ G7 w2 b1 v& @) g3 Y8
7 v- g3 y9 K# G# F; E// 除等于
) v  E8 M1 B5 P% o( X&gt; x /= 2% ~$ Q$ h2 E. C0 C% G* q% s
4
# O/ w  {+ n  U4 r  B</code></pre>) p+ ?& h1 k% g0 t
<h3 id="25-流程控制">2.5 流程控制</h3>
  ~- ]( {$ `) C. `  Y<h4 id="251-if">2.5.1 if</h4>8 V2 M) ?) e7 ^  H
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
( ~8 `3 s# J1 c/ G
5 @8 H) g. e6 k* u% v* B4 _&gt; var x = 3# E  w2 {; T) e. g# g, _3 ^% d) j
&gt; if (x &gt; 2){console.log("OK")}
" v! @6 C0 \$ c; ^$ K) q5 v1 y OK
! o0 e5 `" R2 \6 c  ]* t0 \! r: i6 t' N
2, if(条件){条件成立执行代码}
  P9 O/ L& e( x/ E  b6 C4 t$ c. d5 ?        else{条件不成立执行代码}
2 n" l) O# L. f/ @% p2 u2 ^
5 d4 x5 G% o( C, b&gt; if (x &gt; 4){console.log("OK")}else{"NO"}' V% q! N- m, t% A) j( I, R
'NO'
) v$ t0 X; G% `9 f6 q% p: Q# W! }  ^. a8 P3 |7 x
3, if(条件1){条件1成立执行代码} # x/ q3 Q$ O( v6 w* P; i) q
        else if(条件2){条件2成立执行代码}/ u, I7 ~$ Z9 \4 }
    else{上面条件都不成立执行代码}# J6 p# B/ `5 Y& f9 t" T4 q
3 ~: R& V( N7 g# ?& s1 E% o2 P! W9 b
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}$ n; d( ], [5 t; M8 e1 o
Ha
7 n: |  h+ _* T3 S9 x* D</code></pre>/ Y" Q* N- V5 w* J7 S$ Z( A$ ]% l
<h4 id="252-switch">2.5.2 switch</h4>
- @3 R) k3 T, D6 Z% L' m% O% A<pre><code class="language-javascript">var day = new Date().getDay();; w& @' C6 h( [2 p' J
switch (day) {& ^8 |4 @/ [- S' S7 ~7 g7 l3 ?
  case 0:
+ E% \' j' P8 q3 b  console.log("Sunday");; l& p0 {* e3 b/ _3 J
  break;9 M4 h0 z$ D* V: B
  case 1:5 ?1 N& r( N! e0 O8 D3 _
  console.log("Monday");4 z7 o7 Q. ~" v: }5 p$ f1 q0 a' Q9 M
  break;  q7 [% K3 o0 |: D- z9 R4 E, P
default:5 a3 b$ D9 i9 J: }5 i9 y
  console.log("不在范围")
$ |2 e+ w9 a9 G, ^& y}7 O! I  Z0 c( ~( \! a
不在范围' E2 S" x" _/ m8 N$ a
</code></pre>; ^/ \, U5 Z, {' ?
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>3 [0 [. T. e+ v9 i2 P
<h4 id="253-for">2.5.3 for</h4>' M* U8 \1 o/ g
<pre><code class="language-python">// for 循环4 L6 {% b( C; t, Q; [
        for(起始值;循环条件;每次循环后执行的操作){/ i% n- I1 q1 m( S4 g$ S
        for循环体代码
) S/ a0 Q+ ]8 {' [1 w6 j" ~9 I    }
/ x5 g: R3 t4 U, ]" J0 Z5 l3 C& M' R1 f! {1 J9 x6 x2 j3 ?/ r
for (var i = 0; i&lt;10; i++){; ~7 |7 c& ^9 S; w9 f0 c
    console.log(i)
' n. E5 f. A( e; D0 }$ y}6 b4 f) k7 O" e  j$ h6 c4 W
        0% k5 [. K; D- ?7 S8 P
        1
3 @0 D+ w; y0 l# G% Y# D        2
3 r4 Z: `) g1 d: F# C2 T* S( w        3. t6 n5 X1 |$ i9 j" K5 `
        4
. {/ M/ j; e/ |        5
1 O  h. P) |0 X) A$ f  }  ~        6' E0 W, X* W& N8 D, R
        7
( H, D- c5 F5 M7 n* r# `        8& K6 Y+ {, g0 n. F6 E- Q% T6 Q
        9
0 O* e+ N  F4 i</code></pre>5 j% {" m2 O! s! p3 [
<h4 id="254-while">2.5.4 while</h4># i6 [3 [* G* @' k
<pre><code class="language-javascript">// while 循环9 ~2 z4 a- K  f: o/ S+ G. d
        while(循环条件){
9 v) U. g0 g8 b1 d/ l" t" m5 t        循环体代码! K+ F' g0 D8 J- B; X
    }/ _, e. e5 `* o& |! r

' \- E: `' t8 I) E# C+ s3 d&gt; var i = 0& Y$ e0 a8 ^5 [$ o1 M, H
&gt; while(i&lt;10){- a7 B& k" b9 N  P9 E
    console.log(i)3 c- m: ~  W5 Y& X( Q/ o, O
    i++" Y- S" g1 j# d& x0 E! p
}! Q4 S6 T9 l5 Q8 l
0
1 K7 C1 j$ b8 p3 O- q 1
7 @+ T2 @) s1 E8 U 28 W  l8 e6 t& v% z8 D% B* g
3
! `* y# b" x' S 4
0 l. I6 m6 c3 i8 F9 m 52 l9 L) C/ D' b: ^6 @
67 ^  o; b9 z6 n2 @
7
9 {/ i$ O  z) Z! j# Y 8, _4 {% \6 h/ T- |# f9 R. G
9
6 h# \) N* z. w2 o</code></pre>: R2 f8 f8 s7 N. G$ a
<h4 id="255-break和continue">2.5.5 break和continue</h4>
$ E* W2 V- {: Y! y0 b<pre><code class="language-javascript">// break( g6 J. J/ n4 g
for (var i = 0; i&lt;10; i++){' [9 ?2 W! K- [6 N2 ]2 o
    if (i == 5){break}
% s$ q2 S2 \1 D: X# C    console.log(i)* F9 y& Z: [. c* H1 q
}. j/ [8 z- Q# v
0
( z  b4 p. V9 r( l9 E 1
9 f  d7 l  a8 b/ @8 o  \8 [ 2& \& ~. R2 T2 g# X( k
3: h8 D' C" {; t9 o
4) M+ m0 `5 N0 Y1 x2 q' |! t3 J& h) a
// continue6 {: O) t$ E6 ~
for (var i = 0; i&lt;10; i++){5 C2 W1 J& N% V/ h" ^& T
    if (i == 5){continue}9 o7 T! N0 J: I: ^3 O: S
    console.log(i)  D5 L# i# j/ n5 e
}; u1 r; Y1 t: v' d/ D  a
0
8 V! K1 K1 t6 }" a 1
' G% v% {& l. d9 V, w 2
# m, `. ]5 D( }9 A7 N; p8 I 3( |5 e: V9 s6 w0 ^$ \, e! I
4
. K8 ^- c  m6 t! e1 r; J; d 6
0 c& T2 O! M  Q$ K 7
0 T9 K- ?( l$ z* @5 L+ _- I6 Z5 G 8
) _+ v; Y4 O- w" }  f; b* d9 I 9
) r" n8 m8 y4 P! D
! c$ ^, m# a: p! j</code></pre># C. q) M3 D4 I% {3 R
<h3 id="26-三元运算">2.6 三元运算</h3>0 s+ t& e3 W* K8 X2 ^
<pre><code class="language-javascript">&gt; a) ]- `  v5 C" U, H4 P6 K
6
* M6 E5 _6 b6 x* U+ ^/ {- W&gt; b& ^8 F" o8 A7 @+ e$ I) B% S9 W
3# v% X& k" F& g3 A

1 b: y* z7 O. e//条件成立c为a的值,不成立c为b的值* s- ]' e! m! l" f
&gt; var c = a &gt; b ? a : b/ M8 V; V! ^7 _
&gt; c/ F% T% f6 G0 Q( j2 X$ [
69 J/ E& o4 G) b/ n9 d8 [

  e$ ]7 g: W7 @$ M4 U) Q// 三元运算可以嵌套
" b3 ?! t7 m, z: x, ]" G* h2 m</code></pre>' c" J2 ?" G" S  o
<h3 id="27-函数">2.7 函数</h3>
, _" V! w% o9 J: U: P& q8 h" c* u<pre><code class="language-javascript">1. 普通函数9 ^( v7 d6 I. f8 N# X) i5 J$ m# e
&gt; function foo1(){
6 u5 S( ~, _5 D4 H8 P& O; {. {    console.log("Hi")
  g. ]# a9 `& I% E- Y, }- }! H4 _9 [}
' s. {. v+ l# L4 W) D1 J9 v  G2 y6 l3 J. ~
&gt; foo1()1 ~$ }- _- M4 u0 d, E( c- B3 t3 c
        Hi
) c4 L& I$ i2 R8 \0 M" b' ^  r2. 带参数函数% ?  P, S, M# d/ u
&gt; function foo1(name){
2 V# L; x+ i  J* _console.log("Hi",name)
" o9 x( U" N7 Q0 _$ `}* r* m4 D* \" k6 _' _% W7 j

5 ]  Z9 U2 j4 x&gt; foo1("Hans")( `! X, ~$ V6 @+ `% C" J
Hi Hans- \8 y' X7 L- V4 }

( G# a& |+ h1 \7 ?+ W&gt; var name = "Hello"6 k' r( M$ a. b1 F7 w  e4 ?
&gt; foo1(name)( |  ], o; F) ^( |$ _, f( x' X
Hi Hello. k# w* r/ ^5 g& s8 ?" J* K8 [

) @' W7 d3 \& D; C' k- G3. 带返回值函数5 e& X+ N/ l, _2 g! _  [* R% ~) |/ o8 j
&gt; function foo1(a,b){7 f9 I0 q; y, T/ E0 N
        return a + b   . U4 w0 f  e  R) [) ^& e5 f8 j) v
}9 {+ y9 g$ W  X6 R' Y2 q
&gt; foo1(1,2): U/ Y6 L; \4 X( l+ I+ Y
3* M" U  k# n% \- @
&gt; var a = foo1(10,20)  //接受函数返回值
, g$ V( ^1 |/ c2 ^! O+ n" A&gt; a
  u* {) }) Z- _; c30: b, X( Z) F: Z- g

7 P% K& Q3 S4 V/ R- K4 V- `4. 匿名函数
; Y! @8 O( I: K" j  F. F! b0 ^) d  `, D&gt; var sum = function(a, b){: R4 y$ T$ B7 G6 t
  return a + b;$ A4 `9 G! g2 ]1 U
}
2 \0 v9 O2 c: I9 e& S&gt; sum(1,2)6 N7 R6 [* z, t% c3 s: g& O
3" j; ^# |: J9 Q* U
( o6 r3 i! `  Z9 A
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
/ z# P2 ]% p! B&gt; (function(a, b){. t! p  e* Q. F# P) F
  return a + b
0 ~9 _3 M! G, y})(10, 20)2 _# f3 [( J2 O
30
. s0 A1 ^% ^& T% [% B- \2 ?* a2 }8 F& P
# F& P* T2 z# R" M1 v5. 闭包函数
- E3 N( h* q* `7 f) B// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数% N( g, T9 T) g9 c! l# `
var city = "BJ"
% x! e# }/ {2 ?& b( x  W; d5 m7 Efunction f(){
# r9 b9 O# u  ^4 q+ c- W9 b4 l    var city = "SH"
( _! G  A  y/ @2 f    function inner(){
" y& f) [7 H/ c8 Z( m        console.log(city), I7 O# L. \6 f1 m
    }7 K  K8 L* Q# ^( U6 V
    return inner# ^9 p$ ^7 K5 c; K9 q# @
}8 S5 }0 h& X7 d6 g
var ret = f()
! T3 X. T" A8 n" P. [ret()
2 [, j1 Z- M3 e& f4 B- h执行结果:
  M/ G: g8 Y8 t" ^! lSH
* }* g# a3 _$ ?2 s+ C6 E
7 ^$ ]0 N$ B4 d% S</code></pre>
, b( p( G" j6 u<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>/ V& H" C5 R& d2 ^6 w
<pre><code class="language-javascript">var f = v =&gt; v;  m  j$ k8 j- K& G
// 等同于6 X" D3 c* V3 a5 J0 ?
var f = function(v){: o$ n5 b  U0 \) g
  return v;" J" @$ h0 |2 z1 D  [: n
}
- [) i/ B5 b6 `& p</code></pre>
) }0 P* B& q" \1 d' T- a<p><code>arguments</code>参数 可以获取传入的所有数据</p>
; C" {( c5 r0 M0 J! I# n<pre><code class="language-javascript">function foo1(a,b){' ^# Z2 X! ]4 i$ [3 A) K5 l! S2 _
    console.log(arguments.length)  //参数的个数 ; n: w. q. q9 u2 r( _' ], ]1 c  R
    console.log(arguments[0]) // 第一个参数的值
1 E9 W" I: E0 }  C8 w& y" }        return a + b   
- u: G. v# l7 g6 c- H. u6 G0 L: t}( m: C3 r" |( d# u
foo1(10,20)9 {" s/ |/ d. O* y- q
结果:# D, [) Q* |" w
2          //参数的个数 ; A, d% I: `  C) k! s: O
10        // 第一个参数的值
' p& P. A3 z% H! n, j- y6 e30        // 返回相加的结果/ e' H6 z5 G5 D1 l
</code></pre>
( Z( s7 e1 k2 l, K/ C+ A<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
* l6 g# V9 f3 ]  A4 l: a<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>! ^, i' m; Y( u0 n
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
: K( M2 X0 U8 ^2 Y2 y4 L<h4 id="281-date对象">2.8.1 Date对象</h4>
3 a5 n( [% z( _) L4 b& i# y<pre><code class="language-javascript">&gt; var data_test = new Date()
( V9 j  H2 r& k- W( r&gt; data_test  e8 Z, r8 q8 w4 r
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
* \- N! Q$ N# o5 c1 f! P; j# Z&gt; data_test.toLocaleString()
8 ^: e8 i# L: b'2022/2/11 下午9:44:43'
- u4 S: j6 y' M1 j* t4 I" Z" L! k2 x/ U- Q* k$ a! |6 r
&gt; data_test.toLocaleDateString(). o4 m/ C! _. g& W$ Y0 F
'2022/2/11'
2 [4 s5 N' e4 ?, Y2 M1 Q' m* ~( h( H% ~# ^: Q, M
&gt; var data_test2  = new Date("2022/2/11 9:44:43")+ e& {. I) O! q% N$ Y3 _/ u
&gt; data_test2.toLocaleString()
; l$ Z5 J' W9 @# ~'2022/2/11 上午9:44:43'( M/ ~' c  u) B& ~. ^" D4 h2 \! l3 U
3 y. |! U' s; J. e
// 获取当前几号
7 z# F% F% }) |% N1 R: c: k5 f&gt; data_test.getDate()7 ]6 f; A: F# y4 v2 d& O; _
11  S8 j  A2 M$ T+ |& P* u
// 获取星期几,数字表示) w1 r+ ^* d  I
&gt; data_test.getDay()  
5 C# W& y- @( s/ [* L0 B5
! }, w* Y: B+ Y  O& ~0 ^7 J// 获取月份(0-11)4 F7 F2 |6 X$ X. g- w  j' _
&gt; data_test.getMonth()
# C9 W  X& i/ v! O1* K; j! ?! [& _) D9 r& g
// 获取完整年份
8 \# {; l9 {5 i. n# E  P&gt; data_test.getFullYear()
$ T, h/ T6 B! d3 |  A: h2022
, F7 a$ Z, u  j' U; \* }4 J// 获取时
8 k- g" N( Q" g' o# Z! S&gt; data_test.getHours()1 `+ I5 l; ?( c3 @
21" c8 K& o& c1 T, f- U
// 获取分
% k4 x+ {- Y  W5 T7 [: G* F&gt; data_test.getMinutes()( P. r7 E) V7 Y+ V3 p" M
44
% q7 j+ L5 N+ r$ b) Z- ]. J// 获取秒
, x" `; U4 k/ S5 F% I' K&gt; data_test.getSeconds()
- a# _8 j3 a% e8 C43/ @; u* J( r3 l3 D3 K. ~
// 获取毫秒
  c- ]5 G1 G4 T+ j0 g&gt; data_test.getMilliseconds()
. c. ^- _+ W) V290
9 v( O/ g: A3 U* o" e- p' `// 获取时间戳7 J& V: o% K" d0 i$ a& _
&gt; data_test.getTime()4 q; P2 q: u5 m! b0 {0 w6 I0 A
1644587083290
+ S; {6 U, A3 }0 J7 F. b8 j! o</code></pre>( \- W3 ?  T9 C) t7 d0 F
<h4 id="282-json对象">2.8.2 Json对象</h4>5 n/ w  }- p* }) K7 p
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
, D* g) L+ v" n: n1 N6 vJSON.parse()  // 反序列化,把JSON字符串转换成对象
2 @8 B  e: {5 K- l) @. Y( X  s
8 l% p8 A; Y$ C  d0 R// 序列化4 R) L7 `- O5 E' E4 G# @
&gt; var jstojson = JSON.stringify(person)
- O# z# |+ g& g! C  S( Q0 o( ~6 ]&gt; jstojson  & F. K- i, J2 v1 I6 Q) f0 [
'{"Name":"Hans","Age":18}'
+ B2 n1 H1 [& K" `
; Q% M* X4 D  D. d! N1 x// 反序列化# m& F' z) W, j7 c5 u
&gt; var x = JSON.parse(jstojson)
- T  a* R4 U9 P! f& n- a&gt; x
! k! c& b' }% R: T7 K! `{Name: 'Hans', Age: 18}( K7 v# K9 [6 t1 O8 T! H
&gt; x.Age; e0 A! ~' ~9 H/ R$ g4 h
187 ]$ i9 G4 F2 ?! ^! O/ T  G, O
</code></pre>
# v6 i" X9 r+ j9 f$ F<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>1 {; L' D0 N/ W3 }
<p>正则</p>
7 |( b' W) c: s1 z% x( e<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
: s. f5 [  C. i" a4 _&gt; reg1
  b3 e$ B/ a, I/^[a-zA-Z][a-zA-Z0-9]{4,7}/
/ K: f) p, U2 f9 A% N# T&gt; reg1.test("Hans666")3 C- L4 ?: x% z% l4 J) q
true
* |5 t/ |, u- k) }5 R9 \& l. V& X- p
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/7 s( p+ y; f8 X" F2 t  |
&gt; reg2
, w; a1 o2 O6 L' e) b/^[a-zA-Z][a-zA-Z0-9]{4,7}/
* N3 V7 M; l( i6 p) |&gt; reg2.test('Hasdfa')& ^2 }4 w$ D3 l/ G* r
true# S3 I2 _  ?. N/ _. V/ M7 L5 Q+ k" u

4 _; o! I& T; F; V- b% ]. U全局匹配:
5 o( n: T5 b# D! E( H* g' Z&gt; name. y/ D- h& {% ]! z
'Hello'
' s3 r! C. y8 G( d- j&gt; name.match(/l/)
- q7 W# x* ^- r; O/ j['l', index: 2, input: 'Hello', groups: undefined]: V  ]5 O! i% z0 G7 p+ k4 B# J
' z" R! r# _7 }/ O3 ], H4 E
&gt; name.match(/l/g)
0 ]0 d6 V% J4 W1 g% w2 v- A(2)&nbsp;['l', 'l']
7 q3 ^0 k" }- N+ p// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
8 R0 W0 Q, W+ `0 r; G! `: L
6 R2 D# L: J% ^4 E; w% _7 V4 F全局匹配注意事项:/ F) C/ C) ]; S  Y' \
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g& V6 q! d5 ~9 x7 i
&gt; reg2.test('Hasdfa')
2 P/ _% t; {, o5 I3 Jtrue6 a8 e1 `4 t' ]: p
&gt;reg2.lastIndex;( \2 ^5 E. }* R/ d/ w
6- j% r# ]: q* Z: X6 r
&gt; reg2.test('Hasdfa'): u7 M/ @: R+ O4 Z. U7 i" k" \' v* W
false
; X' Y  Q% L" a7 ^5 t" t$ y+ |* @7 Z&gt; reg2.lastIndex;, ~" P. Y9 T5 m
06 O. ~3 c5 W2 D+ h/ c
&gt; reg2.test('Hasdfa')8 I: ^( ^% J8 U+ q
true  x. B+ Z) V( W- J, b; `
&gt; reg2.lastIndex;0 O8 X2 [$ E0 k4 r: U
6$ p: N# D% k9 ~: j
&gt; reg2.test('Hasdfa')
; G9 s2 r  M9 q. y* h7 L( x, ffalse( ^6 l3 x9 e2 F% x& h7 J  \
&gt; reg2.lastIndex;
- u" j" W. G( M6 @2 l2 A! b  J0
9 j; E& U6 B9 V- Y# c+ a/ I// 全局匹配会有一个lastindex属性
4 K- z# m+ G: q0 P: Z&gt; reg2.test()
, c& x$ Z, x# _, o3 X! N; lfalse% f0 n* F) |: _$ x$ _3 \
&gt; reg2.test()
1 b& u' Y/ c' w3 z4 J- btrue
, W1 w9 b+ p* @// 校验时不传参数默认传的是undefined
" }+ G. ?3 i* w0 U4 ?</code></pre>
0 b  U& v; b" X, v$ c' a<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
: w8 e  i  i; \& b<p>就相当于是<code>python</code>中的字典</p>9 c/ b+ J+ h+ G4 H1 j; |
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
/ {/ N3 r5 l8 E+ Z' V&gt; person
" j# p6 j. {9 N* u{Name: 'Hans', Age: 18}7 q4 L* K) x9 j. P- J
&gt; person.Name
; Z3 Z  W" F  Y) O- w- M! i'Hans'6 c( B1 E  C) ~& Z# i3 \% ^  F
&gt; person["Name"]4 z0 R6 Z7 Q, P2 L  X: |8 }
'Hans'
1 [& l+ n6 a; I: r- c6 H& r& f
" z4 y+ h* ], i% M2 j) e6 r& r$ R% u// 也可以使用new Object创建  S5 d& R' N6 o8 z, G$ f
&gt; var person2 = new Object()
. B. g  }- |9 c0 A&gt; person2.name = "Hello"
. X4 d- V) s0 J% p4 M5 V0 D1 U* M'Hello'( B' I  Z/ J' B# m+ u/ |
&gt; person2.age = 201 h7 S2 @' u6 y& z8 t
20! p5 J% l' D, L9 C. s( g! p
</code></pre>8 u0 h2 A$ Y, j6 V8 O) \; _
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
$ m) J1 o2 y; i$ q! {0 I<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
: |& z" }7 j4 p6 I6 D; A<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
0 F, p) Z9 x8 O* m<h3 id="31-window-对象">3.1 window 对象</h3>1 \4 F9 J0 c% p
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
9 R( Q  q' Y! V% z  S' P<pre><code class="language-python">//览器窗口的内部高度% i! R) d. c& _/ k1 t5 o
window.innerHeight & _$ W9 G! c! [5 H6 q: O* z- e- G9 W
706
4 {* d' l5 _; B2 R) C. @//浏览器窗口的内部宽度- I; x8 i1 K' J8 T! i& Y5 x. H9 R
window.innerWidth, s4 @3 b* J+ c( g+ H
1522* n9 f! p' S9 o! [2 s
// 打开新窗口. R+ T' d- Q9 Z% R  n& v
window.open('https://www.baidu.com')
+ C4 h5 ?" v9 M- l) l: jWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
. m8 U- r; {) o9 ^) S0 F6 ~. ?  x// 关闭当前窗口: }1 t( h, K9 V) b, o0 y/ k
window.close() ( ]# c0 ]$ M6 s( z6 R( w, ~
//  后退一页
0 e+ F& R5 e" owindow.history.back()
  w$ w: t5 Q) T5 P+ ]6 Q/ Z, ^0 H// 前进一页
( \+ x) C- \, K7 dwindow.history.forward()
4 Q& \- Y' m" q3 A# h0 I2 {9 b//Web浏览器全称
2 p! J) @- _1 ^3 X  c4 i2 qwindow.navigator.appName
3 D( Q+ |- ]% V'Netscape'
8 P; C! _* c4 [' j& C1 T& s// Web浏览器厂商和版本的详细字符串
" y# p: Y: y; R& d0 Ywindow.navigator.appVersion8 W% l. Z# W; `! k7 v
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( [3 [4 f0 S. v8 n
// 客户端绝大部分信息7 R4 n3 ]" B/ t
window.navigator.userAgent9 O$ w, j- _/ ^
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
5 A/ b- R0 F/ X+ q8 F// 浏览器运行所在的操作系统) d4 [1 D5 f4 c
window.navigator.platform! i- L9 O% S  q8 V/ v! N; ~- C- r
'Win32'1 N5 C& ~& m% J' U, `, c% u

( t2 v1 |2 j0 H5 c//  获取URL/ j. e# b+ Y( E! c# q
window.location.href
$ P' u+ g) S  O. K! `" _0 c// 跳转到指定页面( R1 q: E1 ^! H; g# X0 }6 {
window.location.href='https://www.baidu.com'5 s1 w4 d* [. u& w3 x' @7 b
// 重新加载页面
: J* R( P8 w2 ~& twindow.location.reload() 1 }0 I5 t, L# u, Y
</code></pre>* I5 R" x  R; D& `
<h3 id="32-弹出框">3.2 弹出框</h3>
; b3 e, b3 b7 M4 T. w$ S<p>三种消息框:警告框、确认框、提示框。</p>& L/ B  z# e% B/ i3 l
<h4 id="321-警告框">3.2.1 警告框</h4>
0 h, m! h# Q4 g/ A<pre><code class="language-javascript">alert("Hello")
  j$ q0 E) q- g# {$ }. J$ r</code></pre>
% P" w( v/ o8 G: Q) `) Z% Z$ e<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
3 e/ f; ~% g  m8 }+ Y- R<h4 id="322-确认框">3.2.2 确认框</h4>
0 F1 Q' T, I: `0 N9 j. K, t9 M<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>8 }% i* y0 C$ C) X
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
( O0 ?3 x# p2 _5 o1 D7 Otrue
& q: ]6 k9 |8 d! Q$ G$ x&gt; confirm("你确定吗?")  // 点取消返回false
  W$ M: u! U0 n# k  pfalse
/ \& B: O% w  I& t( m% Q. r5 G+ {4 A' j</code></pre>
& N- W) [  Q) h7 C9 D0 L<h4 id="323-提示框">3.2.3 提示框</h4>4 F8 a% K6 c6 e  `0 K. H
<p><code>prompt("请输入","提示")</code></p>
% y5 g4 D" x. V% y* |9 T: ?<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>* N7 A- `: q0 j# u0 q  R& U
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>% G& J# t, D  E) W5 C8 g6 K" ]+ @
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ M  X5 x( y* T5 c( f( ?5 L
<h3 id="33-计时相关">3.3 计时相关</h3>7 s" c- H4 A! y9 p6 n
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p># e( U7 P4 D- G# E. g
<pre><code class="language-javascript">// 等于3秒钟弹窗
/ R/ g/ ?' J" d5 S+ n2 z* [setTimeout(function(){alert("Hello")}, 3000)
. k: M4 W: k' S" \' w
% J' D5 I% Q( R/ [var t = setTimeout(function(){alert("Hello")}, 3000)
3 Q$ P* f: y# Y! `9 S% C- m
1 L& c/ Y" g- L: S# ^- ?// 取消setTimeout设置- X6 d& w2 f& r8 E# C4 B
clearTimeout(t)
) B  l" q" r5 j* v) M" B</code></pre>9 S. w$ Q8 x# @7 i7 F, R: P) }
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
3 \- F# g8 @4 b9 B8 r6 g3 A<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
& R  z" R: n: v$ [/ n<pre><code class="language-javascript">每三秒弹出 "hello" :
3 r" j# d- \' C) r+ vsetInterval(function(){alert("Hello")},3000);
/ y+ x* l; f* f. }" f( \5 a3 f</code></pre>& q" ^* ?" B0 ^& [: e
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
+ U% [0 A5 P& ]4 P3 R<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);1 X5 W8 V/ X) O
//取消:
! l$ ~0 l8 [. F6 S. s& KclearInterval(t)- O( |1 c! g2 |( \
</code></pre>
& v9 M& c+ G1 d2 f. [5 n4 Z! ?. o
  `0 A" k- m( [0 U/ ?2 S1 K
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-4-17 14:47 , Processed in 0.122016 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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