飞雪团队

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

前端之JavaScript

[复制链接]

8135

主题

8223

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

* m+ C: V2 V/ W$ w; {; M<h1 id="前端之javascript">前端之JavaScript</h1>9 I1 L( O; U! P' ]( S( ?- [
<p></p><p></p>
( B+ D3 z) j. ~) Y6 O3 B<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
4 U2 v& @4 x3 j! B# c" S<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>3 ?! x" P; r+ R( f$ |& U; ?
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
$ o8 f. Z( P1 R; M$ V8 j它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>: N; k4 i( w- t3 ?: W
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>$ o9 k4 y; e" d. n+ O$ w' ^
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>5 p( f9 P8 S5 |( z/ m4 H% Y" @
<h3 id="21-注释">2.1 注释</h3>! r3 e: Z) w7 p. ?
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>8 K8 P) y. u$ Z
<pre><code class="language-javascript">// 这是单行注释' m- W% I, Y; {) ~( M& r! V' e, I0 x
" }8 n- ]1 e, N0 B0 m  @1 z
/*
3 ?" }" S0 `/ T9 p4 A这是多行注释的第一行,- ~8 [& C8 K% y1 m! S0 i
这是第二行。
8 g( y3 m1 y( z" ]*/
( ?0 c8 K& t; l, c$ h: v$ W8 q3 k</code></pre>, L1 K, r! N" c- v
<h3 id="22-变量和常量">2.2 变量和常量</h3>
, }! U5 M; X! `7 B% B<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>/ M" X$ m7 u. q) s3 r' _) {
<ul>
2 x* O; q& t6 ]$ t, x<li>变量必须以字母开头</li>( e- h& ?% e2 O/ _0 g1 {
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>% J& ]  G9 i9 }- X* m
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>/ ?' t0 K. ?% a: c! m/ h0 f5 T$ F
</ul>, m4 Y# k/ r8 x/ _8 [. b$ M+ q6 Y7 |
<p><code>var</code>定义的都为全局变量</p>9 h" R: a1 n* k9 u: a
<p><code>let</code>可以声明局部变量</p>
+ M" U! T+ d/ i" J6 T) ]<p><strong>声明变量:</strong></p>
6 H0 K1 y. c. T0 D! C+ i<pre><code class="language-javascript">// 定义单个变量
( E4 E8 ~( {8 Z$ p  W&gt; var name
% ^' Z/ p% Z1 h: }&gt; name = 'Hans'
- p, h: _% r. I/ ^//定义并赋值" V4 |2 U4 @5 K8 Q# J5 a1 m
&gt; var name = 'Hans'
: L" S) f: e4 [9 S&gt; name6 T6 i; C/ l. ^2 U1 Y' u1 U  y
'Hans'0 o" r# j5 [) ]; ~$ R7 y
; ^: m/ q* u$ r+ V" r% @9 e
// 定义多个变量
: w+ v. `! {( P& P+ o  Y4 ?6 r8 ]&gt; var name = "Hans", age = 18
/ K. h, s6 a; i2 R$ D3 A# T6 K&gt; name  M- B! r; W( C( Z* T5 `( X$ x
'Hans'& G6 I% o/ _; _9 V8 X# r
&gt; age1 h; g, A/ j( `; Y( f- S' H0 t9 g) |
18% k* h, d8 v! \0 f! k
+ Y2 H( s) G, j! ?
//多行使用反引号`` 类型python中的三引号
0 U5 F2 M' m0 R" W- m* x&gt; var text = `A young idler,
5 J0 W" l- P$ M5 \an old beggar`
9 t4 x+ O, B" x* J; G&gt; text
# C9 ~, e" @  i# A& {2 Q/ k4 H'A young idler,\nan old beggar'9 {; M. Z* T4 g3 l+ R' Q
</code></pre>$ \0 s9 O/ e/ S6 P3 K# q0 ~- D
<p><strong>声明常量:</strong></p>1 R; h, P, L+ n8 V/ h  H5 ^
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
4 c& Z% _; w1 e1 F8 R<pre><code class="language-javascript">&gt; const pi = 3.14
. ^) c! C) k; D& H* T6 ~&gt; pi+ J1 N4 u5 \6 j" [
3.147 }% _( x2 T7 X8 `( o+ [% o
&gt;  pi = 3.01
8 K& j/ I# D' B4 J" P0 v! m% oUncaught TypeError: Assignment to constant variable.
8 l2 f$ w6 n1 @, }+ e$ b2 p    at &lt;anonymous&gt;:1:4  \& m# ]. J- P' V$ ?2 `

1 u* I6 k' U7 a  |* f3 q6 i3 c2 d3 ^</code></pre>
: S' q7 o6 H4 A2 j7 G8 k; J, C<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
7 u3 Q: k& f3 C2 _# X<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
" E2 V8 ]2 ^0 m$ E<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
( ?0 z! G: ^" D, E6 q2 y# Y- D<h4 id="231-number类型">2.3.1 Number类型</h4>- W; r1 W$ C1 A
<pre><code class="language-javascript">&gt; var a = 5  u) `( D3 F0 v
&gt; typeof a   //查看变量的类型  2 ?0 S. A+ c# ~* v" \' R% q& X, ~* [
number
2 ~+ {, S& v& s/ B' j9 S5 I: \7 s0 {3 l
&gt; var b = 1.37 p% m* W$ [0 n4 R% }% i$ ]9 ~2 r9 I
&gt; typeof b
; u, j, u3 U( W. x2 y# `  Qnumber; q3 f" g1 u9 g/ a( I

9 V! j7 T( Y0 ^3 o// 不管整型还是浮点型打开出来的结果都是number类型
5 c; s) z  \& y- g9 L1 B0 @- {# {" l9 M( P% z; P; }6 `
/*' f$ e' N( m3 F" X
NaN:Not A Number
9 E' e+ E6 M: _" A& s( bNaN属于数值类型 表示的意思是 不是一个数字  q9 B6 m3 W# l/ b1 A/ I
*/+ ]6 }& t- b7 h0 R  x# J

0 D. F6 u/ K9 L) }1 mparseInt('2345')  // 转整型! m! I& x! u6 f/ C. S7 e+ B
2345( b1 K2 d0 F; J. Y' ]0 r) J" m$ g
parseInt('2345.5')
! u6 L! e5 b; {! _! p7 g$ J. N9 b. Q0 Y0 {23459 ]; E( o( o) D. G
parseFloat('2345.5') // 转浮点型
$ j1 B. e9 x% Z6 [' t2345.5
! Y, m3 A1 o* t, I% ^, e6 G* AparseFloat('ABC')8 j- M3 s9 f9 g" D9 t; t
NaN
+ U, e9 R. y; F* M6 B& {parseInt('abc')* J" U/ h9 G6 s- V
NaN' l: }1 b: D; F8 d  r
</code></pre>8 x$ i4 J3 _% E9 Q" F- f( y
<h4 id="232-string类型">2.3.2 String类型</h4>
; h/ g: V( V2 r, D8 ]8 S3 P; v! v! j% F<pre><code class="language-javascript">&gt; var name = 'Hans'
* K# h7 L# k/ Y( D( A8 l&gt; typeof name3 s3 T! e/ d! b
'string'
; X, T7 W# [" q
1 z# [) F6 X4 ?6 }/ S//常用方法: X: |7 @$ N, v' G8 r
// 变量值长度+ K! u- q: @$ Y) m8 K# I
&gt; name.length0 e; S: L4 d9 v
4) H/ k/ s- w5 P: P9 f& _
// trim() 移除空白
$ H9 o) n. X# ^, j/ N5 I) ~&gt; var a = '    ABC    '7 v0 E7 N+ {* N
&gt; a6 t0 ?3 n% Q" S8 ?; \6 e
'    ABC    '- }% a8 p: s& c7 ^
&gt; a.trim()
; P6 U3 M3 l$ q$ n5 i% P'ABC') y! i2 |$ E2 G; `; J6 x
//移除左边的空白+ L! b: l4 g! R% F6 h! ?: @4 `
&gt; a.trimLeft()
# s2 {# o0 a/ a4 W: a'ABC    '" }$ z& S! V6 k# V* q
//移除右边的空白3 l( p0 ^  Q& O
&gt; a.trimRight()2 I, e4 ~& c3 m7 Y8 {% a
'    ABC'; }! r7 {$ y" S: E
3 }3 A& j7 q& o
//返回第n个字符,从0开始
9 B' o' J! m) H&gt; name
4 ~, B6 H4 a8 z; _2 {0 O7 H3 w'Hans'
- R& u" C; K) _&gt; name.charAt(3)
7 I) f8 k9 ^. U4 h: h's'
" e) E/ C. J1 I4 f9 ?: M0 |&gt; name.charAt()
; I) l1 [3 N9 C7 S, z" N5 U( ['H'
0 W5 {4 g9 a* s+ i' X( M6 D& N* b&gt; name.charAt(1)
: l' |  B5 j* W' K! z$ V. E+ O'a'
; c1 L2 W$ \8 U% y" g3 d5 G' N
: k1 F& V- t' I$ R) D% n// 在javascript中推荐使用加号(+)拼接
7 c! [; B# C9 Z4 }; _% C$ q6 b&gt; name' s9 i/ h/ h2 S
'Hans'
9 M% _/ W2 g( C3 v4 ?: E/ f9 R&gt; a
) a! G' N6 f8 F: @! H& C0 L1 K'    ABC    '
  |' o; X  O* o/ Z: V* Z&gt; name + a% f+ y# n% m* Y2 T+ g2 m
'Hans    ABC    '
) I% G3 s" ]9 C// 使用concat拼接
* n! z9 t. q. W, R2 n! ?&gt; name.concat(a)3 h+ _  K4 e) Z& L) Y3 d
'Hans    ABC    '
& O; U+ x7 T( ]0 _$ f) H6 d$ h8 a; B/ F
//indexOf(substring, start)子序列位置' _& I9 B; `% G/ |8 d- S+ r. w
) r, p6 i- F% j- S1 S" C
&gt; text- ^% \( N% Q7 @1 A+ ]9 ?4 W3 L
'A young idler,\nan old beggar'7 F/ U) O, [7 k2 i+ I0 T
&gt; text.indexOf('young',0)& l# [) V( |2 S* j( y3 W. h. H
2% K2 R9 P: r0 |, z$ n( t
/ a/ a" D$ p. i) u5 M: P: X2 f5 t
//.substring(from, to)        根据索引获取子序列- L8 u+ s2 A" T. Z  M" e
&gt; text.substring(0,)
9 b3 X$ e. Y, [) q'A young idler,\nan old beggar'" }$ ?) Z+ Z& X/ C# w
&gt; text.substring(0,10)) d/ Y9 j3 D/ k0 B
'A young id'- L: r9 V' Q( I. ?/ I! j9 O

/ \; }4 u. {4 ]& Q* O// .slice(start, end)        切片, 从0开始顾头不顾尾3 Y( `: `: I! }5 s. f4 h: R3 j
&gt; name.slice(0,3)
# `0 _) O( O& F2 e4 s'Han'
; T2 P& e: c' \" `" R% i5 H0 w% Z: L4 U! Y
// 转小写& ?2 I, s5 m; i
&gt; name
0 N2 \* M/ o; I5 M'Hans'' ]# u5 }$ [' l0 B
&gt; name.toLowerCase()
& W2 p4 U5 V/ ^' K" `/ Y  g7 F'hans'1 F3 q. e' Q4 q! a& H
// 转大写# \: D. r' M% i1 D
&gt; name.toUpperCase()
) j$ M8 Z, g; A; X8 O'HANS'- h1 e5 e8 D4 G! a( B0 k
) O# T8 o0 n( ]* F6 \: e+ D
// 分隔
( i1 k$ Z1 M5 Y* v&gt; name2 Q( ?5 \$ O' @- c" s
'Hans'
; I1 ^, X  u( x9 t2 @4 G: p&gt; name.split('a')
5 o7 g! q' s' l* y4 o, N(2)&nbsp;['H', 'ns']
+ k( D# L, y) P2 G1 m! Z</code></pre>; h9 L) m- q# R% P
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>8 Q$ o. R! x8 H; r. i0 [. f
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>7 r3 N# g2 w$ J( c6 G8 q
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
( E3 d$ ~! A; }; B+ z1 V- L( P<p><strong>null和undefined</strong></p>
, L6 N: S3 \4 i8 |; ?0 `. m, p: N<ul>) f3 o" _- a' h* r
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
9 r3 i! f/ r0 }  W, s  b<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>. k% E# v4 ~6 D. @; d% v
</ul>' H" A. |7 P  S$ h: z. T  [" ?
<h4 id="234-array数组">2.3.4 Array数组</h4>
2 p9 u2 K; o! i+ g; l8 l<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>8 v( o' |  Q: }4 P7 [6 h7 @& b+ q
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
0 {0 B' K; b7 F& J9 Q; T&gt; array17 F; x4 G- U4 u# c. c
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# M( R* h2 `  c/ f% l  x# s8 f1 k" N" V; \&gt; console.log(array1[2])  //console.log打印类似python中的print% ~4 g0 r/ B' B* q8 P, @
3. C+ j1 i& N+ Q" s
// length元素个数
: `/ X  y# @0 J&gt; array1.length# |) f% o9 T  g7 k2 ]* Q3 R7 t
6
; d) m' }* e3 ^5 O2 Y8 n  M// 在尾部增加元素,类型append4 ~. \5 x+ x" G( o) Y
&gt; array1.push('D')
0 g4 `, p; p% \( |: L7
- A; \: w* o; M8 s&gt; array15 i" R1 [, J# }4 f2 @6 N* J# A
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
& F2 d- l  k9 `' p8 G7 ?' d1 v// 在头部增加元素; D5 w5 j- X$ _
&gt; array1.unshift(0)
" X8 |! e) Z+ H4 T% \6 i" y8
+ I; ?8 S5 q) ~&gt; array1( d2 S- e$ Y- U6 e* u
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']3 D5 v% }/ v4 X) s/ b! C3 g
. }7 J# h; t6 H+ w7 L
//取最后一个元素
1 N" ]' l2 a4 S7 ?& p( H5 A&gt; array1.pop()
5 t) f( e; G6 i& j$ u'D'
5 L' s, u/ X. o- y7 P6 }- E% R&gt; array1
# c# }3 o) j1 g( D8 C+ w(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ T" o- t& |+ [' c
//取头部元素8 ^! R( U" W" C! J' n9 ?
&gt; array1.shift()8 i8 p2 ?+ Q: F: T6 ]; Y; ^, j
0
3 W, D9 L+ m  c# L, f&gt; array19 ?  G& `2 x" f. c
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 H) D, G, z5 R0 N* s$ d6 ]! }, j! }  q, M: @
//切片, 从0开始顾头不顾尾
/ N# q3 D4 G% v5 _5 @8 T. r4 W9 [% C: i&gt; array1.slice(3,6)# `' l3 A; I! s1 _+ i$ ?
(3)&nbsp;['a', 'b', 'c']
5 Q( |4 L" h+ i$ l// 反转; A: c" G/ o. ^0 v
&gt; array1.reverse()( @; ~; l6 `. |$ q3 h
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
$ x0 h. x3 M! x. A4 y3 E// 将数组元素连接成字符串% a! i7 j+ q1 f/ d' n1 z. S
&gt; array1.join() // 什么不都写默认使用逗号分隔2 V7 M% T; \; x
'c,b,a,3,2,1'
5 j! @/ `5 G4 w3 U&gt; array1.join('')
+ ^* w2 f2 o1 {3 }' N/ m'cba321') |% {9 Q5 `2 \
&gt; array1.join('|')1 t& R' g# ~2 P$ Q1 e1 O. W  b7 z
'c|b|a|3|2|1'
/ f/ a, q# L3 {
) E1 B/ `" B6 s2 T5 d// 连接数组
4 Q5 l+ W  I+ B&gt; var array2 = ['A','B','C']
1 ]# r; W! s. W" A  D$ S7 D1 g&gt; array1.concat(array2)
4 i. o! N/ o# \(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']$ }4 \; x9 k5 W

4 l9 w6 y" ]9 ~3 f, E// 排序
% O+ u1 L: O; h&gt; array1.sort()
* K9 H+ L4 T, y4 V(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 Z0 `* z: `4 ]6 I+ U

( G3 D- J/ V' I( }! M! d// 删除元素,并可以向数据组中添加新元素(可选)
6 U- a8 |% W) t7 t&gt; array1.splice(3,3)  // 删除元素
  {. F; Z) ]3 V" e* n) ~1 x( b& n(3)&nbsp;['a', 'b', 'c']2 K% E& _: E# w" l8 M' k8 V1 m+ ~4 j/ R4 [
&gt; array1
  h% y* b0 s: c8 w9 [8 X2 `(3)&nbsp;[1, 2, 3]
* t" [0 L, C- h2 O, j. {&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素0 ]8 h7 [/ ]3 P# p3 R5 m
[]
3 \3 v1 T' {. A: ]. ~8 r&gt; array1
% A* ]4 m- j+ P4 ~6 _( y# k! `& N(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']) O8 t% b# O7 W- ~! j6 l

$ Q4 V. D' n) D/ E0 x# c/*! z6 S; `4 B) {% ]1 m5 i1 F4 x
splice(index,howmany,item1,.....,itemX)7 h- P/ F$ s  Z! u; T9 @
index:必需,必须是数字。规定从何处添加/删除元素。
) F6 s( L& E! I- f9 j) v) phowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
5 e0 i2 g& k# k$ o- Nitem1, ..., itemX        可选。要添加到数组的新元素* o, i" R! t. y3 P2 U2 v1 p
*/1 K6 @7 o: o; }' n
' ^3 ^, }3 L3 [: v2 E
// forEach()        将数组的每个元素传递给回调函数/ s8 o9 c: h3 g
&gt; array1.forEach(function test(n){console.log(n)})* ^, C) H* a/ ]# v
1
9 `. }% n8 k: n+ T3 U) t0 `. O 2
) S2 p5 e' G& a, m4 A 3  `" \# z8 U$ x, {3 ~1 j1 A* Q& B; U
A3 U/ ?# z, E/ Z, u( I( O. g
B3 G$ i/ z) V( N5 B
C
# t& e" A9 V$ v4 K% x* \/ C( K. k: _5 d// 返回一个数组元素调用函数处理后的值的新数组
* ]3 Q- j% q, R" w2 d( j% A- ^&gt; array1.map(function(value){return value +1})7 q4 R% s: |# ?. r% o5 l) t
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']3 b' W" r. q; }* a% `
</code></pre># q9 e" U) i5 |0 Q+ o3 N2 p
<h3 id="24-运算符">2.4 运算符</h3>5 R3 H& \6 ^7 m" M2 X0 a+ a
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>9 V. c: O; X7 u$ C( o3 |3 L
<p><code>+ - * / % ++ --</code></p>" B1 u& f6 b+ t0 z# ?
<pre><code class="language-javascript">&gt; var a = 6( o: M. D9 }) o4 }+ d
&gt; var b = 3
; W4 U( f: S$ g& s- h3 ?7 h! R  P5 V// 加% U/ z  d0 u  e5 `2 B5 y# q9 n
&gt; a + b
2 G3 }$ Q$ X8 a( g, t0 i5 o: |0 X: l9
6 Y- Z% h4 R/ n5 k( R: C; \$ s, r// 减# x* F* W8 S3 a
&gt; a - b
. E! U# X8 p2 N  M/ @! Y3
7 q, W2 x9 e( h# x% q// 乘
* A  \8 A5 J+ `1 x" @, g&gt; a * b
3 M; r) {; a1 l% X18& `3 o. X+ k' a! l0 U
// 除
, J/ d$ J0 R$ o&gt; a / b% e7 I0 V4 _# D
2+ Q% X$ g+ C+ d/ H
// 取模(取余). c7 v/ \7 A' o5 g/ o2 @$ X5 p
&gt; a % b6 Z7 j, Z+ Q% l0 M! ^2 s
07 \- F/ C% e3 v# d7 [
// 自增1(先赋值再增1)7 n* c9 {- j( q3 T
&gt; a++
: w7 f7 R4 A$ s6
7 J0 q  |: l+ ], i&gt; a9 v" V% `1 h+ `. J! B: y" S
7
" B1 B9 k& h7 r0 n6 W// 自减1(先赋值再减1): C2 J& C7 _: v3 n
&gt; a--
) U6 g+ @3 A' j( c" ]$ ]0 @$ a7
; E; T# O, a* @* h2 d9 R0 G&gt; a8 Z5 t9 L/ ?, ~8 z+ T
6
  }3 P/ ?; S  }7 q: c6 m! C// 自增1(先增1再赋值)
! R1 I5 X/ s2 ~2 b0 B! T&gt; ++a
( t5 }, H8 k0 `  D7
3 @0 ]% r; J: s  A// 自减1(先减1再赋值)7 g  g4 E' Y% e# H: Z3 {0 V
&gt; --a9 I/ A- O2 \$ d  u; g. i0 p
6
- |2 p) `& J& g# w6 ]  q, A' U: `&gt; a
: `* k3 H7 O# B7 b" S6
, ]% U4 |) z! e; c6 [* G/ \2 g
! r) ~" {" v% d% |# k- `3 K//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理! ?8 a) I2 X# A4 ~8 J4 H' ]3 [7 a
</code></pre>' f+ O$ D( @  t4 @9 }8 R* B
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
! S" G2 D/ V/ U<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
' i  A& U8 r/ ]. H/ w% E<pre><code class="language-javascript">// 大于
- p! [% R) p' s& ~% @" t&gt; a &gt; b% A/ N" R7 ~3 b' a& z3 }
true2 J1 j1 L7 j& q+ ?$ `. h
// 大于等于
- J1 j2 \( ^" @- x2 {2 [5 Q&gt; a &gt;= b, y, x7 ~( _0 u) B; a$ x: p
true7 M, Y- u* D3 m5 o* K' ]! l
// 小于
6 S  s* o6 d9 y0 G& h, u  q7 I7 F! G&gt; a &lt; b# _5 ^7 y$ O6 o! @5 U9 A; c
false
( N; ~+ v8 A* J// 小于等于
+ M8 d. @0 E( k% {&gt; a &lt;= b
: P9 t, L; T% }  W- }% W* Q) Gfalse$ M) J  W9 p# q
// 弱不等于$ p4 e4 g+ ?. v$ D$ W& R1 V2 Z. ^) Y
&gt; a != b* W& z" f+ m: B5 m; b
true
3 [. ?- Q7 C% D7 b( H% ^; R// 弱等于
7 s; `; U) C5 o- c- {7 ~&gt; 1 == '1'  h9 j# U& e) u' q1 _
true" \2 _+ O% `, u1 g0 g" d
// 强等于0 s4 N% i6 B4 V* |- G$ r3 w
&gt; 1 === '1'% c# c& u7 q. U5 ~0 W7 q, u
false
: _" U5 t* k$ ]: c' N6 B// 强不等于
8 x; M$ D8 s; v* u5 L# X&gt; 1 !== '1'0 p# c4 \# T) l. K
true9 d; ]7 V. x4 J' P$ N9 u* D$ o7 D

5 b% f8 |1 Y! o- B/*# U$ ~4 D" d  r" p( r* X$ w5 O2 j+ e, r
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
, d! J3 H% R0 m: A*/
9 \; P/ C# s; ^% T5 b</code></pre>2 }! y: w2 A$ t+ z7 ^
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
7 O, I0 b1 z# N2 F  h<p><code>&amp;&amp; || !</code></p>% v+ x: y: e  A: i9 d
<pre><code class="language-javascript">&amp;&amp; 与) p' ]: k6 C+ M: T
|| or
0 R# x8 q4 R" L& z' s" i! 非, X; v* o7 k7 o' S" L* L  ~
</code></pre>& \* v; N* p/ V" B2 u& M
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, I; w% {. g, H<p><code>= += -= *= /=</code></p>- {5 k+ {! w; ~. \8 m
<pre><code class="language-javascript">// 赋值
( q" Z$ d1 f1 |9 Y&gt; var x = 38 V# r9 ]" K! f5 p* ]+ }
// 加等于. w* m' M- v/ Y  J- \  d# C
&gt; x += 2: O/ }* d% a! W3 q2 F
5
3 P1 }% E4 s  n: Q0 T( ?" w  q// 减等于
$ o9 b7 G; @/ w4 ?- [; [&gt; x -= 1
  w! D9 j$ e7 ~; e4
. e+ p* q, }  \; o+ r* t& Y// 乘等于
0 u0 r" x' ]) J! v) q1 O$ M2 m4 m+ R&gt; x *= 2
$ B' D, M+ e1 a$ b  E& d8
7 ^4 J6 U8 D2 X+ M' S1 v& E// 除等于6 `5 G% j  _( E
&gt; x /= 2
" J4 h+ ?* S* h$ o0 F4 k4
3 E* Q$ Z- [1 }0 u</code></pre>
( e% D  g  L) r; q  Q<h3 id="25-流程控制">2.5 流程控制</h3>
1 p- E5 n0 {* ?9 l- s1 D" y<h4 id="251-if">2.5.1 if</h4>
* y5 u1 p# Q( B<pre><code class="language-javascript">1, if(条件){条件成立执行代码}8 d0 @: c! F7 \& i. q2 Q7 @/ |

5 e/ V( t8 [7 k7 j! A  }& e; U0 g&gt; var x = 32 ^$ E5 S% }& f+ D( x  {6 g
&gt; if (x &gt; 2){console.log("OK")}3 P# C6 R- c  G% X# j
OK% j8 C, |: }% @* B& T$ {" `( o
  ?4 @( B1 C: l9 @
2, if(条件){条件成立执行代码}
# _3 c+ u* e  _5 r. ]8 k        else{条件不成立执行代码}
$ C$ d, G7 S, A+ |( M
# q7 y6 X  G: v' W* V) g* x0 g&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
# N+ R- j6 E4 k+ D'NO'8 J1 Y1 w  q! y5 B$ T

9 D% t# z3 n" ]% }3, if(条件1){条件1成立执行代码} + I1 o0 d' t4 s% \% Y1 V  p
        else if(条件2){条件2成立执行代码}; s# U& K4 d: }
    else{上面条件都不成立执行代码}
. B5 F  A+ o. h- G! W: ^2 V1 F! K* c0 N- J/ T! v/ _- ?
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}- ?/ p# m. g7 G+ ?' Z
Ha6 s5 P" K$ M. Q3 m# q
</code></pre>2 Q2 g0 t+ F: u2 @
<h4 id="252-switch">2.5.2 switch</h4>
& t' L! E& _0 L% i+ x' B8 Y8 |3 c<pre><code class="language-javascript">var day = new Date().getDay();
9 L- [' g& `$ E! jswitch (day) {
  r- I/ c8 |1 O( e, f) ^9 }- ]  case 0:
; U& C: z. S# n6 Q! J  I0 A  console.log("Sunday");0 ?8 _& G$ n% n: @+ K5 s
  break;
' Q; x6 o8 ^+ n8 ^: b  case 1:
* s! t% [& h0 u. V  console.log("Monday");
: a' X; e7 c# k) z- x# ~! ?' S  break;" q+ ]. u& |3 e
default:  ]! t9 N. a; s- K
  console.log("不在范围")
* G  \1 |: ?' E! X! f  A1 e9 [1 M}. ^$ R+ |* N4 w) n
不在范围
  i8 H% Y$ O. r  t</code></pre>
" w, f; j1 _, j7 {6 N- G' i<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
3 @$ ?" U$ g( C9 U<h4 id="253-for">2.5.3 for</h4>! O" j$ v4 V$ S" K9 [5 d& Y
<pre><code class="language-python">// for 循环8 w, J" _7 ]: q0 y; z0 r
        for(起始值;循环条件;每次循环后执行的操作){) B3 |+ x0 z; M; S/ V: n! {) v
        for循环体代码
4 j- _2 O  d7 h7 O    }
! A5 c7 r5 p$ w" P. k1 X" J, x& n# J2 @, _
for (var i = 0; i&lt;10; i++){
) b: P: R& {. h! N# q7 S' ~& E) X& u: K    console.log(i)
% B/ K; {7 [: b6 V  z" t' Q3 h% B}
' K0 _5 P- M* X! b        0
  K9 t& I$ w5 q$ S        1
5 S$ Q7 w# n( x        2
$ u6 c7 g* \( O  b        3# Z' ]% \9 T0 c8 t& X! c# e
        48 a! g/ M9 m' y" \: e
        5' w3 d3 J; @) T6 h# k# M
        65 J$ m+ w% c/ C# g: n2 \8 @. b' U: t
        7
8 Y+ E5 [( i+ {8 }" T3 o        8
  Q8 }8 ?; e* d5 k; E3 i        90 i" o  \  F! n% }8 @
</code></pre>
8 ^8 \+ R2 t+ S9 t, l( }# }<h4 id="254-while">2.5.4 while</h4>. A8 K9 M2 H) z% }% h3 q
<pre><code class="language-javascript">// while 循环
) `1 x$ Q/ l) }  @2 t        while(循环条件){9 V0 a3 E/ I0 J# G2 D
        循环体代码
8 A; Q: B8 c1 {, t1 N    }- V2 a) `1 `5 B

5 c8 L- o7 v( J&gt; var i = 02 S# r1 l% z% z3 ?2 R! }! V! H) W
&gt; while(i&lt;10){
1 s& v& {! E$ v+ l    console.log(i)
/ z0 F% \8 }+ \3 Q' T2 P# A/ X    i++, `4 W" f0 w' L3 h) d6 ?6 r$ L
}# F2 @! l- l4 m: l$ m- u3 ]$ S/ }
0
; v) L* D, ?+ V0 |6 Y 10 O6 V, I$ h2 H$ X& n7 w( ]0 i
21 t5 H5 K4 A, \: `, q+ O
3
& g8 G$ i, a; J4 p2 c' f 4
* H$ \7 P8 J' O# |+ W 5
' d3 i; U" t7 h  z5 o( C 6
( j0 t# ~: q5 |; w! T5 C7 b* j 7; V& \9 C# s# i6 b
8) L: e- {  j: m& E* I5 q* ]
97 V" x. ^/ q  W" Y
</code></pre>7 V& i5 J. E' c  r- e5 w+ f
<h4 id="255-break和continue">2.5.5 break和continue</h4>
) E1 [, b. U% u<pre><code class="language-javascript">// break
5 P; f2 a9 b1 R8 |0 d) Wfor (var i = 0; i&lt;10; i++){& d0 ^* K  H; U/ m
    if (i == 5){break}
7 |; V- }, c' U" [4 c' ?    console.log(i)
% B% T% K. n+ b}; G7 _% o$ t9 h  z/ j  ]" G
02 e7 b. E6 u0 D3 T
1' Y( ^2 f- n6 e7 E3 C- Z
2
: R5 o) J- x/ H9 ? 3
9 g4 u' H5 S9 f1 a% |% f4 R 42 h/ C: a0 |- `5 L/ w
// continue
* ~, b2 N) ?' z. B5 B4 T; wfor (var i = 0; i&lt;10; i++){/ B  G0 q6 f4 ]$ o) x' c+ {
    if (i == 5){continue}
$ Y$ V. g3 l5 M* i2 S    console.log(i)
% P$ W5 p5 k0 ]# d% }3 ]}
% B4 Y6 Z' }) L5 Q# C, _ 0: R+ X* S; V  T, O- K
1! n( v+ U  O% Q0 c' v7 s0 t4 j, R
2
8 z% [) \2 i: G1 }  k: z$ S 3
+ ]# m! G5 D$ S7 ^ 49 ~+ g! u- A$ v4 V; C: W: \/ k8 U
6
/ W! Y5 [. J8 E5 c- y  C; ~ 7
6 }; ?+ H( V. V! O 8; c  {" I5 F' W6 \/ a3 I0 d: O
9
& V; u( l- j: s; |8 m
. Z  e- {! N8 k+ N4 A% W  K. o</code></pre>0 H: p5 `3 Y0 T& L2 \* ~( ]- ]
<h3 id="26-三元运算">2.6 三元运算</h3>
. A  G4 ]& @! |7 u! _5 \( z<pre><code class="language-javascript">&gt; a
9 A. P  E7 l6 t% ~$ [6- ~: _, x/ o/ _+ j1 R
&gt; b& j( Z$ j- z7 ^5 g8 w% j
3
8 I9 P5 Y; D* R6 A' U, e2 z
  M& Q5 y3 \- \' N' O//条件成立c为a的值,不成立c为b的值
4 l# J( l  O3 j$ v$ P&gt; var c = a &gt; b ? a : b
* `7 G4 K- R0 W$ [+ k: P1 t&gt; c8 Q  N/ `+ N! t6 e0 K5 f
66 m; j% H+ a& l+ S# c, y- l& e! M
. \6 n2 p9 X( `
// 三元运算可以嵌套6 C* \' V1 B9 M3 m6 {( Q
</code></pre>
; @+ D$ F8 a2 u& f<h3 id="27-函数">2.7 函数</h3>
# m# @. d6 z7 m7 {, Y5 k+ |<pre><code class="language-javascript">1. 普通函数! e! ~/ }5 O. E" G& E6 Q4 l+ X
&gt; function foo1(){8 ?) e( |: C' C: `) m% g
    console.log("Hi")
5 p- s- _( T# o1 l/ ^}
0 k5 M# j% J# X; V* V$ m3 ]! u) D$ k. x  E6 S& }( n% k
&gt; foo1()
; X9 p; M2 x( P' p1 |        Hi
8 _6 Z' q5 \( k4 r2. 带参数函数
* z5 i: l1 R% r1 o&gt; function foo1(name){7 L% @7 {  ]( R
console.log("Hi",name)
6 u/ ~. M, ~& f  t( z}
4 _2 Y2 V0 |! e! W
% Y( G1 V1 r9 b# ^8 j* Q&gt; foo1("Hans")% G( l+ f2 N% Y
Hi Hans8 Q) d- w0 u6 H! w, b
( U% g! a4 k4 x
&gt; var name = "Hello"
7 w4 k% J' k( @8 `9 Q&gt; foo1(name)8 Z% E& D& l! c( h1 e* T
Hi Hello
+ i; Q2 N6 ?) i, h9 t/ {/ j3 I* M& b( P
3. 带返回值函数
9 T1 |6 n7 N4 [" i9 z&gt; function foo1(a,b){
& t3 {' H+ a5 u        return a + b   
4 k; }& G0 E# l, C}# k; I0 o5 U8 w% y
&gt; foo1(1,2)0 r: K* i8 K4 {: j
3
3 g! @5 {+ t) B% `# F7 N- o&gt; var a = foo1(10,20)  //接受函数返回值4 f- E9 C) \' D4 H7 W6 M
&gt; a( n$ C+ I0 s) _6 Y" H8 I
30
  M& R- \8 M" a! q$ O$ A( C
. S* z  v( N. N9 h. w% L+ t4. 匿名函数; w! j  d5 t  X; j
&gt; var sum = function(a, b){
! y+ V; M8 K/ C6 g# N  return a + b;
5 ]0 x/ r+ c! m4 n}
9 t+ E$ z% _, V  K3 c* G8 T&gt; sum(1,2)
0 F* L7 _/ J, T3
% p) t0 c5 K+ Q3 a
: r+ u! N+ x5 y/ t% d// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱) T9 ]! D4 q5 u5 v
&gt; (function(a, b){* e& [5 r9 \" O$ i. {5 o
  return a + b/ Q; r% _" L$ S3 V
})(10, 20)
9 R0 T# x! N0 W  J( ], @) ?307 V6 U/ S* q9 p9 y/ F0 T
4 A" g1 |8 u8 f2 i
5. 闭包函数
6 F: e+ v+ u, E+ k. l) ~, n5 ?; a. y3 ?// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
5 i  d. @( K, Y# h% cvar city = "BJ"
# F# T$ d( V7 Q- y$ }9 ^function f(){. |. J! E9 w. C" f8 N! y
    var city = "SH"1 j1 ~) I& ^4 g) D/ Q
    function inner(){
" l3 G) u$ }% h$ H" }        console.log(city)  V1 r: Q4 v9 J# t7 y2 E1 t7 F
    }
: `& @1 W- b6 \2 ?7 F3 D( C    return inner
" a5 @# B8 ]# _9 {: }! Y2 O- }}
/ [6 e; _. b, {' ~; A$ U$ bvar ret = f()  K: p# K( b( ?& s. L- f5 D
ret()
$ Y- Q; g- p( V8 D执行结果:% U, g+ w' D0 }5 z+ \$ D5 s8 P
SH3 A. b! a) D: I1 D4 J8 a) }3 q

9 A$ \- D: |6 c- q: ?7 d3 \# B) F</code></pre>1 H9 R7 E2 M: T7 _$ X' g/ [5 Z
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
7 h$ Y4 U" O: \& [) g0 b3 ~$ T<pre><code class="language-javascript">var f = v =&gt; v;& r* Q* s# v2 O- G9 S3 o
// 等同于
( ^, h' }- G. T3 P% avar f = function(v){
+ z- P4 X$ m2 g# _  return v;; W1 G- n  D5 V- M, D! g& n& x
}
2 M4 @( v8 q9 C- D5 r! }9 t( u* i+ U</code></pre>
' m4 G) d1 u4 B<p><code>arguments</code>参数 可以获取传入的所有数据</p>7 t3 s' q1 Q% ^3 C# \
<pre><code class="language-javascript">function foo1(a,b){4 Z+ U* e# Z/ D# m1 H$ P( o
    console.log(arguments.length)  //参数的个数 + m; C( h9 a( P. A5 }
    console.log(arguments[0]) // 第一个参数的值; Q2 t* Q( ]4 W
        return a + b   
) ~8 i/ [4 O: P, @/ a: `}
5 h0 `* m. N" b; k! bfoo1(10,20)
( u) p8 _/ N1 A% w1 H* y结果:
  }# T6 @' V4 u6 n 2          //参数的个数
( t$ X$ B7 t2 v! F" O" e5 f) P10        // 第一个参数的值
9 I" m6 U3 w6 [30        // 返回相加的结果
' y3 B& q. p! m& }0 v/ h/ K, a/ M3 U</code></pre>4 t1 D; X0 S! U+ q) J. c% j
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
. f9 q# \3 o! J* _<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>; t* y9 l- |# U! \0 F3 _# ~
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p># T( P- ]" F9 ~
<h4 id="281-date对象">2.8.1 Date对象</h4>
8 ~; i6 k: E* I# \9 Q<pre><code class="language-javascript">&gt; var data_test = new Date()1 j$ l1 R0 s1 X5 N! C3 L) X- X4 s
&gt; data_test5 c% l. d( I% O! y
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)7 K! T% B2 U5 O! ]' f  }
&gt; data_test.toLocaleString()
. z, X/ g+ V& l: C5 }'2022/2/11 下午9:44:43'4 k4 j; ]+ y$ g' A! [( O
$ P9 J1 H7 a  X4 z. x9 O/ ^
&gt; data_test.toLocaleDateString()4 m9 e2 u" r+ M) b9 L  T
'2022/2/11'( P$ v/ z( q% g6 ]( D

% ?* S  O. j! `- m9 b# W1 L&gt; var data_test2  = new Date("2022/2/11 9:44:43")
6 n; ], R# f1 V; h&gt; data_test2.toLocaleString()! |! k9 J- {  @2 U0 K6 w( \
'2022/2/11 上午9:44:43'
( A: }2 S) Q2 u; D+ K( N
, B1 Y2 V+ K/ S# G" g6 Q# M4 x  a// 获取当前几号
7 E2 T+ c: u' c4 n+ S9 ~; d&gt; data_test.getDate()
# Q, x( n! g- n11
, n) J# [8 t  B- r* B* P6 h// 获取星期几,数字表示! G( y2 f: [+ @9 @. W
&gt; data_test.getDay()  $ k% A- q  i2 t9 x
5, S" }' N0 f. ]" E
// 获取月份(0-11)+ Z  s. ]: |6 T5 e& V
&gt; data_test.getMonth()* B8 e9 j& E! J2 U* D- A4 b8 k% D5 z% \
1
( O: \, a9 l/ ^/ [5 Y! E( L// 获取完整年份
  m- d7 g* ?& r2 b# ?2 [, m&gt; data_test.getFullYear()
0 }* U4 m- z9 }+ H) }- |2022. Y; c: s: r4 |* M
// 获取时( ^% c/ L% Q% B
&gt; data_test.getHours()
4 M4 f" ]' s7 F, g& c21
5 W  t/ g7 y% t. Z3 F  q6 B& d; K  S// 获取分
4 Q; _, ?( P; `; M' |/ W&gt; data_test.getMinutes(). X: ~% f$ M/ u* X+ @0 [; S
44) B# r9 H" @- a/ _6 H) C
// 获取秒
5 |' r; l* s# g&gt; data_test.getSeconds()
; @! r. s3 j& b, k4 M436 v% N7 m9 U4 K/ j. {
// 获取毫秒* H# A- P: p3 G
&gt; data_test.getMilliseconds(); \) ~" _! @( k! J2 B/ C
290
, S/ G) y. Y. ^! U// 获取时间戳/ a5 {* w+ H! [" U5 C
&gt; data_test.getTime(): g4 w4 k" ~* C! L% n- k' U
1644587083290  J& R5 u" s+ i; z7 G' x
</code></pre>
9 C8 Z- P$ S* h5 ~<h4 id="282-json对象">2.8.2 Json对象</h4>8 G6 x0 B9 d( u* Q1 t5 T
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串, b2 _  @" O7 W: `3 r% a; X
JSON.parse()  // 反序列化,把JSON字符串转换成对象, P# a3 f! i; g$ d1 V/ U$ p. s- a
4 q( x; a0 o4 S  \5 [
// 序列化# z9 ^8 I7 j# f5 A6 c" X: x" q$ ^7 I
&gt; var jstojson = JSON.stringify(person) % y0 q1 Z% C  R& G
&gt; jstojson  1 H! s1 [( R8 A9 f0 c
'{"Name":"Hans","Age":18}'( c( T1 e1 d9 q8 S8 t6 s

; ?9 |5 E) U1 m* T// 反序列化
, I' a( e) I# p" j) K&gt; var x = JSON.parse(jstojson)6 x/ J( h, }: y: l- b
&gt; x
5 y; h( j; M2 l1 l( B+ n{Name: 'Hans', Age: 18}$ K2 P; d0 k1 t0 `' E
&gt; x.Age
( v* s  J' Y5 w  U% W9 S  |18
$ H& N1 e  x' S$ W</code></pre>7 s( u9 @: t  h7 u/ m% S  p5 ]7 ^8 s; S
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
; |- ~: K  T% Y$ L<p>正则</p>' @) m) o5 l7 q
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");! v, D0 V) x$ S/ c1 y# W$ _
&gt; reg1
3 W) S+ d% G* @" o0 W3 P/^[a-zA-Z][a-zA-Z0-9]{4,7}/
# {3 C! |; ~* P8 @: P7 M&gt; reg1.test("Hans666")4 N0 {; f0 {) `1 }1 i/ Z) @$ Z
true0 w8 ~9 @* P) y
- p- [4 _- h. p' N( L) h$ `; I
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
' D6 S7 F/ o& ]& k&gt; reg2. Y# e: K- L7 F9 _- m6 @6 a5 K
/^[a-zA-Z][a-zA-Z0-9]{4,7}/- u: Q8 G$ I# d
&gt; reg2.test('Hasdfa')
- L; s# U, j7 t0 k9 d8 H& ftrue: y$ b: }4 c. m; ]% `

3 p- {  b# Z( n' |+ G全局匹配:
) M% l7 t- z6 o% Q+ s&gt; name- q3 K/ A" Y5 s5 P2 m
'Hello'2 Y; M/ B, x1 m$ m; Z9 K  ^
&gt; name.match(/l/)/ P! g+ U+ U+ E, W5 D
['l', index: 2, input: 'Hello', groups: undefined]
+ c: d% ?: K9 {) N, K* D  k1 S' N9 x9 t( L8 }2 V
&gt; name.match(/l/g)
" c  S8 ^( s$ [  w) U5 R1 Q+ _(2)&nbsp;['l', 'l']
* A% ?* k$ M4 w. N// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
7 G; z- d- \% E" J6 k, I+ U5 a# W8 L- U0 V; W  n+ ?' u
全局匹配注意事项:# l0 @2 a% e+ @8 O" x
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g1 Z( D* T2 [* G) Y
&gt; reg2.test('Hasdfa'): M8 }7 E, x+ P' e( q7 e
true
7 d2 a( |5 j) W" Y/ m&gt;reg2.lastIndex;
# D3 E% x2 I# ]" g60 d1 T5 S! [; o/ ~( a4 d
&gt; reg2.test('Hasdfa')
) A" [" T: L: Ifalse: v" q$ x0 D5 w, V
&gt; reg2.lastIndex;1 A  X  J- ^, o$ F3 j0 O/ t
0% O* P" n) Q4 h7 r
&gt; reg2.test('Hasdfa')5 r/ j6 w% `% m* V, J- Y" A
true/ f: S4 L% N- M/ ~2 s0 h' y. @4 P
&gt; reg2.lastIndex;
  N* \) J2 \5 W6
0 }+ K! B7 {1 b: X&gt; reg2.test('Hasdfa'): i+ ]7 T7 k% Y- @6 I/ s, \
false
9 G, Y+ A( }3 {& y& b&gt; reg2.lastIndex;
! B8 b. r3 Y; P( s* e" f# s- R0
6 G5 n! c. O1 a- @8 B7 l2 b// 全局匹配会有一个lastindex属性" d" o0 J6 J3 @. V2 ?
&gt; reg2.test()
) H2 y' B, s! w. l7 ^false
$ r5 ^  E. m8 n3 c" }, _5 r$ D&gt; reg2.test()
' g# d; y- S* h, k2 Otrue
& `3 G% O: C6 S9 w// 校验时不传参数默认传的是undefined
, d$ C+ n+ Y; Y% H</code></pre>
# o8 l  b  v' r# X<h4 id="284-自定义对象">2.8.4 自定义对象</h4>; }+ n& q7 Z& N1 ]5 V1 o
<p>就相当于是<code>python</code>中的字典</p>
8 `4 J$ P; i* `7 o, A0 F<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}  d0 c+ |2 x8 H
&gt; person
+ [  s7 J' O. o- P{Name: 'Hans', Age: 18}. J/ O. f' b3 J
&gt; person.Name; D9 b9 E. T2 k8 g" n) `
'Hans', K# J; ?/ Q  P: c1 g/ h
&gt; person["Name"]
, k- E/ S2 c! S5 [$ G" W9 f'Hans'& ]: c; }$ t7 \# M

& c6 }0 r: _% Z' j; Y. [// 也可以使用new Object创建
# o9 M3 u* a! g&gt; var person2 = new Object()* n* s8 H9 ^) W( ?: U1 ]
&gt; person2.name = "Hello"
7 [% X& R9 N/ S6 u'Hello'
8 U$ |3 \8 ?/ J- ~6 M' T&gt; person2.age = 20! o! p' M, r% t
20
2 l) z% G5 r8 t6 K</code></pre>4 }- E+ O7 [, o0 j+ q+ ?/ D; ]
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>' W$ s  \2 G& m# I5 x4 b+ d- i
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>( j- C" T2 {3 D) ^( a4 P
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
. @% V6 O/ m; H  p<h3 id="31-window-对象">3.1 window 对象</h3>
' e  s3 p5 @4 e. P6 p<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>, ?$ M# g7 L6 v, e; S( q1 r
<pre><code class="language-python">//览器窗口的内部高度
' L, \; W. L+ H" @5 qwindow.innerHeight 6 X7 E- V" Q2 z0 ~. l4 b
706
2 K! w; I. h, k' O7 ^; H  d//浏览器窗口的内部宽度
/ c3 A4 @9 A7 U3 z: @- r+ _window.innerWidth
, W/ d4 t& q2 Q! z1522
& Q. O. O; Z! j" v; ~7 \1 y// 打开新窗口8 V# I7 H2 ~& N6 u/ H
window.open('https://www.baidu.com')9 e4 Y9 R5 k+ \3 b$ z
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}- Q* W3 W5 i# U+ L% Y+ p  P- \0 T
// 关闭当前窗口3 J3 o0 X' a5 p- R- v6 \$ o! {
window.close()
, C+ P( Z$ O9 a4 Y/ B3 e* R6 }//  后退一页
$ H* t4 \7 @; ?1 h- W2 q# Bwindow.history.back()
$ n7 ^3 U! a$ h+ {1 {5 p// 前进一页6 h' E# J; @) g2 }2 m
window.history.forward() $ l% c& \. `" C. f& R" y# z8 Y
//Web浏览器全称1 W- t; x# S) M# |/ w) O7 ~7 d6 A
window.navigator.appName2 K" U0 Z4 J2 ~# n0 p
'Netscape'* u, i, {- R% |6 L
// Web浏览器厂商和版本的详细字符串
. f" w; _5 _& H4 W# l/ K$ v# `window.navigator.appVersion6 g9 A# h+ C: R3 M
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' L% i" O$ T2 n// 客户端绝大部分信息5 X) M' n9 Y9 Z; Z0 L- R6 Q
window.navigator.userAgent, U' w  F& i4 _8 p! e2 {9 C! |
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" `/ W7 X; C: y( [// 浏览器运行所在的操作系统
7 K( m0 \% Q7 ]window.navigator.platform! T/ l+ W( F2 G) z/ Q
'Win32'
$ c) w+ ^) k3 x
7 k) e+ y, A/ F' g* }3 b//  获取URL7 O9 I& q6 O! k  [
window.location.href4 B' B2 q+ z0 k7 ~% n* Q  _5 w
// 跳转到指定页面
/ K* H: i  y) V* G' y$ m0 A8 fwindow.location.href='https://www.baidu.com'$ e6 ?6 Q, X/ B, p' j
// 重新加载页面# ?  i0 p% l1 F5 p; V, X$ w8 ?
window.location.reload()
/ O$ Z0 G5 t. n4 K2 g</code></pre>
- l( O. U7 C/ Z, r# N! Q<h3 id="32-弹出框">3.2 弹出框</h3>
% `' V) c. Q' c+ d+ j0 r0 E<p>三种消息框:警告框、确认框、提示框。</p>
+ v% q, e6 }* B<h4 id="321-警告框">3.2.1 警告框</h4>
; _$ H+ M  f% @* i<pre><code class="language-javascript">alert("Hello")0 E, S2 O- B" [# _# J8 T2 R( ~
</code></pre>
, c) Q5 R& x5 R<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
6 y3 n7 ?! n" G9 `6 O<h4 id="322-确认框">3.2.2 确认框</h4>
; d/ Q/ ~9 `% ^' \& E4 L/ X7 {1 ^, c<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>3 m& @* W5 Z1 I! u
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
- _: f: a4 [3 ]1 ptrue
2 y  V2 K1 o, o&gt; confirm("你确定吗?")  // 点取消返回false: N! q8 o- m& i  `% [, l
false
+ S2 W( A1 J- R7 `% q</code></pre>
" Z2 o$ e3 X7 V$ Q( G2 y<h4 id="323-提示框">3.2.3 提示框</h4>9 ?0 o) E% ?+ X/ S: ?( n: O
<p><code>prompt("请输入","提示")</code></p>% \9 D7 S  M! Q! a5 `% z
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
9 G  @" \+ m6 g- i3 g<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>0 w4 D1 K4 W9 h! D
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
$ b. ]2 C* Z' ^3 n<h3 id="33-计时相关">3.3 计时相关</h3>
8 i4 R/ S1 ]: I8 @; f<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
3 K, I5 q( H& c" F" n3 s* R<pre><code class="language-javascript">// 等于3秒钟弹窗5 q( Y6 U' s- |* P4 q
setTimeout(function(){alert("Hello")}, 3000)7 w) G* u% X1 P8 \: v; [

( u5 w+ |! S* z9 G1 bvar t = setTimeout(function(){alert("Hello")}, 3000)( N" q0 }: D$ Y# y# ~' x

4 W! {6 x; d1 {: }* |# U// 取消setTimeout设置
# r( f5 n" t  A2 cclearTimeout(t)) k6 `/ z. E/ p, e; @, ?  ^
</code></pre>( t! y  ]% ?6 L  A% j
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 Y& p; v: h0 p# ]. y$ f" {6 G5 r<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
/ k9 ]# l2 C3 X1 |/ {* @2 S( G<pre><code class="language-javascript">每三秒弹出 "hello" :8 P' d2 {1 R6 h1 o0 z# ]/ O
setInterval(function(){alert("Hello")},3000);" W+ B/ x8 S) O7 Q+ ?
</code></pre>% {$ U7 `& z+ C6 R. Q
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" Q: n2 U% j$ f  e  K
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);$ U; Z5 J7 m  y. i. f7 C- u8 }
//取消:( a" {; t5 U5 Y% g4 F
clearInterval(t)2 p6 U$ e( w# _% F1 W
</code></pre>! n- d7 r! h# q& j

( i9 P$ l' V1 w" Z* e
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-28 17:26 , Processed in 0.073449 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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