飞雪团队

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

前端之JavaScript

[复制链接]

8237

主题

8325

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ q9 S5 x1 h0 C! _0 z( _* g# R0 J<h1 id="前端之javascript">前端之JavaScript</h1>9 g' V* p( o# e) z
<p></p><p></p>
/ U. P% A! k4 K9 l$ ]4 c- |<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>* Z5 d2 [6 Z' ]4 d, j' ]
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>% |. U( d/ q& U9 _: O# C) V& Z
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>$ _( }0 J5 o- r5 O& n) ^+ ]8 ]9 h
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>4 U  {# s& w+ @4 Q/ N. Q
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>1 c1 d& p3 |7 \9 Q1 [
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
4 v2 q) }. N" I+ M<h3 id="21-注释">2.1 注释</h3>
- L$ P# q. D/ Y. g3 }5 b. ^5 ^<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
% K8 c' l! r4 k. M<pre><code class="language-javascript">// 这是单行注释# Y; J+ u' j/ }* a' f: F9 s7 t
: X# _2 c5 Y2 D& A% p
/*# Z7 t/ H3 R3 n3 e9 Q2 `# K- k
这是多行注释的第一行,
- y, n9 }# w' L这是第二行。
; i& R; Q) V6 L( X( P3 P*/
' [9 w& u  P0 R  M# U: R) o$ E</code></pre>8 u/ ]  T  f3 S2 W* E- E
<h3 id="22-变量和常量">2.2 变量和常量</h3>3 N7 C& E+ y0 ?6 W
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
, ]0 q  M  J1 w4 n<ul>3 m. c( }* v$ ]! B: O8 E3 e" A
<li>变量必须以字母开头</li>: x: V6 p& R9 _0 b; d4 ?& P( n2 o5 }
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>4 }, e2 T8 V# M# w  e
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li># Q4 x! J8 i8 h. n2 G8 R
</ul>9 B5 N+ C) y3 }3 ]' ?, K8 A3 c
<p><code>var</code>定义的都为全局变量</p>
! n% v8 _- _* F$ U" t3 R<p><code>let</code>可以声明局部变量</p>  k! l/ q) ~+ g( y0 l5 N4 A
<p><strong>声明变量:</strong></p>7 I& m2 m2 D3 s
<pre><code class="language-javascript">// 定义单个变量
8 ]9 m; A) K1 t1 I& N9 P, a&gt; var name. Z! S2 @4 r4 `" m( Z/ ^
&gt; name = 'Hans'5 U7 @* P) y  v' ~
//定义并赋值* G* C/ G: L: K, _- ?- A
&gt; var name = 'Hans'
+ d3 x5 p1 y8 R, q9 f, T9 ~&gt; name7 Q# X  l4 {* v" p/ j- p. h8 Q
'Hans'8 J# d% Q& v; D

  k9 \3 p: `- k// 定义多个变量
1 ]9 F0 O% M' `6 O  F* n) L&gt; var name = "Hans", age = 18
5 @. J: j0 x. M! H, J&gt; name' G- s, u. E% V
'Hans'
8 c5 U" d/ F7 |. F1 b3 ?# n) T" S&gt; age# Y) ?3 X- \: h7 W) J
18: p& B& C& ]7 n/ r

6 u; l# A9 Y" j- k//多行使用反引号`` 类型python中的三引号
" `' v; r* i$ ^2 A- `&gt; var text = `A young idler,- r8 ?: j  M5 T/ `6 X
an old beggar`
# `* A* }) p* P* n: D4 F, z% ^&gt; text! o$ E$ f  Y+ `2 [5 O% N0 M0 a* p
'A young idler,\nan old beggar'9 j+ G  @7 v5 A5 d9 @/ \
</code></pre>
( c3 w! Z) F8 r2 @<p><strong>声明常量:</strong></p>" s; R8 t2 m8 h8 d" V" ^' j5 v0 G% ?
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>% @0 l! }8 H& H- Z" B& k6 O4 \
<pre><code class="language-javascript">&gt; const pi = 3.140 `7 f* D6 D) ^/ |2 F3 Q
&gt; pi
! ^; w' P- H6 {3.141 ?+ T9 A3 n5 n! ~8 M: J! U( }6 ^3 f3 d
&gt;  pi = 3.01
. X4 p, w" a+ W$ xUncaught TypeError: Assignment to constant variable.
3 n' H$ F1 D1 K; \9 F" g1 `    at &lt;anonymous&gt;:1:4
: t) V  H  B' v' L5 M3 h! w% _) O
</code></pre>
# d( [8 @- f8 E4 \; C2 G7 u1 ~<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
0 Z3 {6 |. s' ^' V" O( m5 {<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>9 u( L' ], w0 i5 z
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>. L6 e1 P% L# D1 B* e: o6 E* M, r
<h4 id="231-number类型">2.3.1 Number类型</h4>
) I$ k. m; }, z: T, m3 n6 ]<pre><code class="language-javascript">&gt; var a = 5( _! e) \- x2 U8 n3 d# p5 `
&gt; typeof a   //查看变量的类型  
# f. ^7 W) e3 ~# Snumber2 w8 _1 q5 X2 e) i

% z8 v" k8 F1 k4 a) @&gt; var b = 1.37 b9 f1 l3 s  e" K% t8 n
&gt; typeof b
6 D5 Q. a; Y8 Xnumber  ]$ |  [! v6 |

, D, m9 w5 @% L$ m" J1 \7 w// 不管整型还是浮点型打开出来的结果都是number类型
; G9 }; E9 }' S0 \
( Y* }1 f( i% J/ [9 x5 _, D/*
  h8 u# b) }) W2 v3 T) {" j9 z, UNaN:Not A Number
9 w# Q; q" r( R* R) jNaN属于数值类型 表示的意思是 不是一个数字
' J% l) V, [" W0 g/ b* M2 j/ _*/* U7 Y- t! B! p* i$ v

! k& f, L3 G" }/ ]4 @- C$ PparseInt('2345')  // 转整型
9 K- O/ Z& E, B2345
; X, L0 ?7 Z" T: D. G1 H3 I( t* rparseInt('2345.5')
1 f  I) o" T6 i5 D! O23455 w7 K+ h7 A6 m  k) s0 }
parseFloat('2345.5') // 转浮点型& @, ]8 ~5 y3 p$ A
2345.5
6 |; l2 B7 _- o9 W+ V& O0 zparseFloat('ABC')1 j( q1 l# X1 d3 B
NaN( g0 X: ]+ C  Y5 m* k3 f+ e
parseInt('abc'): o- b: [5 d' V) \
NaN" K5 X, R2 X3 S8 Q6 Z! e
</code></pre>/ N* i* Y$ H# s1 a( g; m
<h4 id="232-string类型">2.3.2 String类型</h4>) m* ]1 D7 t1 Z- E* n. o
<pre><code class="language-javascript">&gt; var name = 'Hans'
$ y, L9 J9 z- p/ e6 L* G- k) V* Y&gt; typeof name
6 e/ @  @  U4 a) ~+ m6 t4 W; l'string'( U" _' F! g5 a( I- U' U' m

: e( n  B! g$ {  d* M4 @//常用方法: ?5 I1 Y" [/ y- X: q7 Q- }
// 变量值长度
8 p! A8 X- {9 |* T&gt; name.length% Y  ]* E. X. ]1 H" H  [
4+ ]% z6 B) v, [0 V1 U, L
// trim() 移除空白
8 Y3 m$ |/ S# V# e# Q2 U5 |&gt; var a = '    ABC    '+ b% w8 h6 E5 i" l8 H% G% M
&gt; a
! E( }8 p5 [* W& o'    ABC    '/ [% Q; I5 ^( L; P; U  z0 j
&gt; a.trim(): L: n8 P0 ~- Z, v
'ABC'! o9 M3 H1 b  z) L9 I2 E
//移除左边的空白
0 G2 ^! P7 ~) R! E. F&gt; a.trimLeft()
9 I3 C$ g, v% ]'ABC    '
0 k; |2 y0 e3 [+ `' F+ v: h//移除右边的空白# Y% j6 B5 ~& b$ d/ ~
&gt; a.trimRight()# S; A  j& p# `3 B1 n& J
'    ABC'
7 B# L6 t# Z$ }0 u% l0 q; x) j
" Z+ n2 I; y5 t//返回第n个字符,从0开始- i4 c/ d  ^6 r! X0 O7 j
&gt; name
/ e) b# h4 C3 z: b/ c4 Z! v'Hans'
9 [6 R6 r7 e4 u2 |2 ~&gt; name.charAt(3)8 B  i! ?* V, Y. S1 ~& _
's'
1 |9 J/ E8 X/ K&gt; name.charAt()
; M# [4 n5 O1 g0 U' j'H'
- J. ]0 [  o' b: M4 u, _8 P&gt; name.charAt(1)
# N/ C6 W3 A: N5 ]5 v+ m1 Q1 w'a'/ l. F; S% ^. ^! B/ {& P/ {0 E
) d* S0 ^& i$ `0 c
// 在javascript中推荐使用加号(+)拼接
6 {* G( c+ O, F" s# r# a: ^&gt; name; b  g# H1 }* `% [" u
'Hans'
" _" W6 P- M1 O6 \&gt; a
3 s  `/ N7 d! ~7 o# }" f# S, B% `'    ABC    '
  m4 W) [' Y# w. Y&gt; name + a
/ N0 }/ m" z- l1 V, F% ?- R'Hans    ABC    '5 ~) m7 P. T$ a, [% m
// 使用concat拼接
$ L& U6 W' W1 \" u: s/ j9 ~" F) {&gt; name.concat(a)5 c2 j  Z( w' }/ o( T4 W
'Hans    ABC    '# |. l* \1 M9 E* F% V
' T! O: G- ]( g( X7 b0 D1 Y, r% p
//indexOf(substring, start)子序列位置  A" I! N# I. M; D- P5 `, u2 I

7 r" E. A; l2 F* K9 K&gt; text1 e+ v: ?, t* n; f1 d! ^( T/ d
'A young idler,\nan old beggar'. [0 c( k% n0 h- w
&gt; text.indexOf('young',0)
. Z* v8 s4 z3 Q$ B" B2; [2 o7 x8 E/ F' @, {+ A
3 O5 s; P+ j* q8 o8 q& k& E! o  R
//.substring(from, to)        根据索引获取子序列- K/ T) B7 B, E9 l5 D8 E4 S! f. r
&gt; text.substring(0,)+ `' l( ~, L. Y, C+ I! o7 z
'A young idler,\nan old beggar'
8 A" S5 w- R, z: R  X&gt; text.substring(0,10)+ v& }; j2 ~6 R) ^
'A young id'7 J/ B6 [* L5 z
* R7 c1 x4 G" \# k( I  p
// .slice(start, end)        切片, 从0开始顾头不顾尾$ u8 I" E1 k- Q) g3 w3 d
&gt; name.slice(0,3)
* u' e0 S) e9 y# A0 ?7 U'Han'$ L" ^# K' [7 M. E" z

! `+ ?3 A* q$ @3 w6 s// 转小写  c2 @0 y# I; c  o( ~, h
&gt; name
* I8 U4 A7 S$ p! H; d'Hans', U! ^+ M. h- |; {- I& I
&gt; name.toLowerCase()3 |! a1 q  ]0 {0 s. {# s
'hans'  V* J# \$ K( O: F7 N$ J
// 转大写
! b2 r6 G4 U9 _, }, h* l; e&gt; name.toUpperCase()2 t$ J4 W1 }, s9 N
'HANS'( q8 s' a. g( x- u

$ Q2 W$ S9 v* S" e5 ?0 ^  P4 Z( U* y// 分隔* E5 k6 p) N. r  U
&gt; name+ o% s0 w( |. z& v
'Hans'
6 v! }: L" p* G; i0 F&gt; name.split('a')
. G& K! L% {  o( o) ]$ o7 Z(2)&nbsp;['H', 'ns']; c# A4 J9 e0 b; D  Z- |
</code></pre>
" Q8 N4 x3 P  f5 l* ], g$ c$ @<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
% o. R' C" `: d2 t) f$ U<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>! A  m% Y" ~6 F; U) s5 }7 Q0 z
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>- f; s2 E+ r/ c/ i. R8 M
<p><strong>null和undefined</strong></p>
, T4 I1 U5 \: r( F) _<ul>
' D+ [1 C: U0 A3 T8 a<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
0 _* W: y4 L7 q+ t8 ]<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
- O. m! |% t( W3 X</ul>: u3 _* q7 a* e. W3 E& j+ v% U! A
<h4 id="234-array数组">2.3.4 Array数组</h4>. ~+ ^# e& s# P) m
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
8 i# g9 m" J" |7 q: n, W<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
9 g0 B+ j( Y/ F* [! f&gt; array1
. G- K$ l. Y/ K! E3 F(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']5 p5 N/ ]9 a1 [2 L* r
&gt; console.log(array1[2])  //console.log打印类似python中的print+ }% _6 ^3 @) z! y
3  V: M$ Z- x4 g+ q" ]: }- I* N$ N
// length元素个数5 m% b+ i1 |) p
&gt; array1.length
" J* A$ C6 c8 L( i5 S- Q6
) R3 g2 N8 H6 ?7 |; r6 m// 在尾部增加元素,类型append0 Z& s/ Z& v2 |$ Q4 q: ]
&gt; array1.push('D')1 g! M( o+ d/ B+ b- W/ P
7% J$ U! Y7 }' r. z0 \
&gt; array1
* F( c6 _6 Z* `(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
- a* H9 p' L: b4 t// 在头部增加元素
0 a3 |% k/ L; b+ }% J&gt; array1.unshift(0)# `3 D- u% i( }( |8 E$ Z
8  S; t; t& D4 F' X( B$ [; d2 J
&gt; array1) f: `/ X1 w8 a  C3 _4 S
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
+ A3 U9 P7 m4 A' K) G( v3 z: B& ?- k0 M: Q. E
//取最后一个元素* A6 a' k9 m( S
&gt; array1.pop(), R5 H5 b$ @! U/ w5 w9 r9 k  x
'D'
0 i$ k! A6 n3 r9 u, J  H&gt; array1; g- s8 Y6 [' V6 P/ z; P
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
+ }7 o8 M: |! n$ R: s( [: j//取头部元素
6 ?: u% c  s. A* L% f! P&gt; array1.shift()
! n$ [  k" V+ a; h0
, f/ ^; l* `2 _. E& l&gt; array1
. \# v; D7 \3 N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
9 [* \2 Q9 ^, W+ z% R8 W3 q$ U5 F) ]+ e. Z! l
//切片, 从0开始顾头不顾尾0 V4 m+ S+ U" G; R- K
&gt; array1.slice(3,6)
' [  I$ B7 z2 Q: M+ v7 O2 I& S3 b(3)&nbsp;['a', 'b', 'c']9 n. R- v- k2 m, o8 F9 m
// 反转
/ O( [+ h6 g) D; b1 w3 w9 |2 I&gt; array1.reverse()
( u" g  d% P7 D( s: q' Y+ i(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
7 d7 `' c$ g; B// 将数组元素连接成字符串
$ r# o6 D1 W  t3 s; b! W5 A&gt; array1.join() // 什么不都写默认使用逗号分隔
! @) C3 @5 @5 Y% h% X6 }$ e, e'c,b,a,3,2,1'  m+ n9 b9 ^: T, _  \
&gt; array1.join('')
) V/ U: _7 k! s  G# u) T* g'cba321'% a: u9 y: a5 x( @1 W6 ?
&gt; array1.join('|'), t! w$ e9 }* w
'c|b|a|3|2|1'& _3 g2 x9 R' V9 X6 ~
5 ]/ C: V; e5 c" V" ~5 p$ G8 M
// 连接数组3 h4 r$ t" U9 p9 R* g
&gt; var array2 = ['A','B','C']0 P7 u# e6 I- ]+ [4 d
&gt; array1.concat(array2)
- w2 z3 q# P8 [3 z4 |9 H; G(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
9 p; {0 L7 N  N: L4 j$ b. p; ~! q" k# P; A% A
// 排序! @3 V7 L# |/ L5 I. M
&gt; array1.sort()/ p( j7 p- d& Z0 I" K. T
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" k0 Q; K1 F% O: B

' ]0 I6 G1 r; j; k& ]// 删除元素,并可以向数据组中添加新元素(可选)
. [' x) x0 Z, {/ @/ T: o6 x6 b&gt; array1.splice(3,3)  // 删除元素/ ]% H- b4 _7 h; h& T$ o, g
(3)&nbsp;['a', 'b', 'c']' b* |- y( ^5 h, N3 \3 K( ~2 O1 c$ t
&gt; array18 T8 [, P2 p  y) O# D1 t% I
(3)&nbsp;[1, 2, 3]
7 {* Q0 p. t) S4 [; {  l3 j' }&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
, p8 z# \: E, V4 z' P3 u* K# ][], E" a% m& p& k# g/ j' A+ |
&gt; array1" z* @5 `+ i- h# f$ K" z$ N: s1 I5 k
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']) v$ m; o) P5 [7 T

$ _, j5 ]/ U  O' G2 w+ j/*
# \' f: U# y: E% U5 T" L1 Vsplice(index,howmany,item1,.....,itemX)
- l3 N) @& J- x) X- T9 pindex:必需,必须是数字。规定从何处添加/删除元素。
3 G! @. S: B+ z' ?9 phowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
& c* v# K/ u) o% X( j  ?item1, ..., itemX        可选。要添加到数组的新元素, h1 @6 \$ h& z5 _
*/! @. i$ W# O5 e+ i  W% K1 f$ \6 r
6 R4 F& z  o5 `+ q4 t
// forEach()        将数组的每个元素传递给回调函数
% v2 R+ P- r* [. z8 n8 M&gt; array1.forEach(function test(n){console.log(n)})
6 ^. ]8 p1 }- Z8 K2 j 16 `% v/ T5 Z( v
2+ A8 z" c2 n0 r1 N6 Q# m' O0 }
3: A$ v8 b! }) {3 J
A0 C! `; d* D1 y; H, s
B+ l5 j8 h0 W  S: f8 J5 A
C
4 `9 c+ g2 L9 j& S9 j1 s4 [// 返回一个数组元素调用函数处理后的值的新数组2 e3 U, |# s) P- r. U" K: B
&gt; array1.map(function(value){return value +1})
, G/ H- \. G) L(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
% p+ m" F: q/ d. W6 Y: o) M</code></pre>: M/ q% F9 u$ o, q' _7 [
<h3 id="24-运算符">2.4 运算符</h3>; \# w3 |3 c& c: Q5 f. r7 @
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>- F5 }0 H' E* V6 `
<p><code>+ - * / % ++ --</code></p>
% U; ], E" ^% N/ }1 V<pre><code class="language-javascript">&gt; var a = 6* z; r; j) {" }! q
&gt; var b = 3
  v% W2 x. i4 w9 E// 加* `1 O$ m$ N( e$ ^7 z- J# d$ ?# r; o
&gt; a + b5 A" f- P$ {$ D
9' V; Y/ C6 D& S9 {2 O
// 减5 R+ x- X4 }" u  M( X
&gt; a - b
  ^- @4 Z/ a/ H/ B1 h3 O37 y$ q" n4 q7 T4 Y
// 乘
9 z5 n# A$ P' Z; w/ |6 J' Q&gt; a * b  {9 U0 j2 v2 r1 i& f7 K1 [
18- Y/ y1 |; S# h+ S- h' d% W
// 除
, v% i' b4 @5 Y5 U&gt; a / b8 R2 d: l' A& d- e+ n
2' w3 Z, D! U$ P1 J) Y
// 取模(取余)
# X, \1 J9 E: o# O, E0 `7 w&gt; a % b
0 X) m! {9 {/ ^9 H- w0
' y9 _, N. d" U* g" K" x# B* h// 自增1(先赋值再增1)4 M$ y) `4 f, M! B* r& b- m) B2 }
&gt; a++
5 m( O, a( O* S8 ^% H# W) u6- ?/ F2 H) l/ b/ X3 Q3 D
&gt; a
5 b) x' v7 R9 g7
0 M6 V9 n; G: f1 E, Q% X// 自减1(先赋值再减1)
9 A& ]# h' R& b&gt; a--8 V0 q; y, a5 I; z+ X5 O8 e
73 D# R4 x3 }# Y- ]! B# n
&gt; a: r& [2 Q: k( m8 x  }* C; E" A2 P
6
5 Y1 ]2 m6 ^; ~  V// 自增1(先增1再赋值)
2 z4 A! u2 b- ~( y3 p- L8 ^&gt; ++a5 E! ?4 \. e& h* q3 n$ `
74 F1 `; Z$ ]: K. \
// 自减1(先减1再赋值)
9 Z4 Q% Z! u! P&gt; --a
' R, M- f: A8 H6( w7 K' z5 G! C- C& R4 z, Y7 r2 ^& x
&gt; a
8 Q6 Y1 i7 u- ^/ k8 C% j6
- Q4 k8 K) T3 @( Z7 }' j, L
, P1 N- n! _! `9 [  B. U/ E//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ |$ U; ^: ^! D</code></pre>  i# n: \, ^2 c4 l5 ?2 e7 b
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
( R6 T9 U3 N0 q/ q+ H/ @/ p) K<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
; \4 [2 T- E- z<pre><code class="language-javascript">// 大于
* p( V9 ]8 [( ]% z/ r&gt; a &gt; b
  X% _$ m& k& M) }6 |true
2 R1 l8 g) z# ~- V- I// 大于等于
# l) q6 ]  P4 x2 k&gt; a &gt;= b" q9 o9 K9 y/ Q$ V7 q7 {. O: ^
true+ }+ @, _3 W# a3 B, K, Z; w3 X! S2 D) p
// 小于4 l( D9 g# l" A& S
&gt; a &lt; b
$ i1 G/ o6 r3 z) L3 T" Afalse! P9 Y4 z# R3 j2 i% ]
// 小于等于/ Z& Z% t9 |. a& \
&gt; a &lt;= b+ \* J$ I: S" H. O# E7 L
false
% p. Q( N; Q6 F. J" I: P- a9 ^// 弱不等于
$ {8 O% A4 [' x3 L. H& T&gt; a != b) V, z  `0 x( ~2 A% K
true8 P7 v1 ?/ `, G1 o
// 弱等于# d3 W9 }6 j1 p0 b
&gt; 1 == '1'- x- n$ }4 L+ `7 x* Q  x
true
3 D! p9 ^- G  [( p& [// 强等于6 r% N( H3 T! {& U5 G
&gt; 1 === '1'
8 v' E) \* {, P- K6 `0 o- |false4 h! R6 O, K3 d7 O; C$ ?
// 强不等于% P- \; i# R* r: \
&gt; 1 !== '1'+ Y/ H# a" O0 e  l
true
3 A+ J  Q) W7 b( a
3 U4 G; J: K4 K$ |0 x1 B/*% C2 _8 A/ H  o( ~) z+ k- S5 H& B* q; t: O
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
) Y7 n$ h- J" J( i*/
. S9 Z1 V/ N0 ?& e% [7 Y- T</code></pre>" {  V3 b: a8 B. F6 |6 E0 S  }
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>$ u6 x3 z# F8 F1 \* F2 _- P
<p><code>&amp;&amp; || !</code></p>9 z1 Y2 i3 x/ w/ ~# D3 j8 p- r; `
<pre><code class="language-javascript">&amp;&amp; 与/ N- I7 T% n0 A  m8 i' P3 M
|| or
' f0 Y8 G+ _+ [6 E3 _. m! 非& y+ l, w1 s4 }. Y$ P
</code></pre>
5 y2 X7 r4 C# I( d<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
" A# P. A! C* I, i$ D7 s<p><code>= += -= *= /=</code></p>1 P' `0 m2 f  P6 U
<pre><code class="language-javascript">// 赋值2 R; G% k( e- O! l
&gt; var x = 3$ a" K/ c* H2 j: E) `
// 加等于
( G6 A" n$ T- I&gt; x += 25 `: ]5 ]+ d6 t" g
5
) E% N9 [: j$ L9 U0 K3 h& w; b7 A// 减等于
5 F0 g7 t1 i% Z8 v2 C+ |1 `&gt; x -= 13 K8 T6 Y4 ^& P! @* S2 H2 v4 Z: P
4
& ^8 a0 b* r' _6 Z8 t// 乘等于
0 \1 X, _0 c) L4 T0 E& a" e- z&gt; x *= 2
1 z, a' n$ E% R  k8
! ?! N) g/ ~* j// 除等于
& b/ q% |4 |& f. d  X3 }&gt; x /= 2
9 s' S- W, [1 T1 @* {& X( O4& b0 @2 L5 f9 X  O8 N- K0 h3 J
</code></pre>
6 f! g( Y; V9 O6 O2 c<h3 id="25-流程控制">2.5 流程控制</h3>
* i% ~  M5 `7 N8 _8 Z9 n<h4 id="251-if">2.5.1 if</h4>9 R  h  ?7 c# m6 _8 Y7 L9 O& p
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
9 Z" D6 k7 e! A' e7 U& D/ {  o* x* w' F
&gt; var x = 3
6 m7 h% e" q5 _* M6 A&gt; if (x &gt; 2){console.log("OK")}
7 ?4 \" N2 a; E5 {; ^# g' ` OK
/ x% }# I6 X8 V5 y  v3 U+ {9 V8 Q1 o$ ]3 w6 D* R$ `" k' X
2, if(条件){条件成立执行代码}
( K4 b! C: S" j  C        else{条件不成立执行代码}
. c! f& u  k" G( ^
5 g2 o, ~/ m# z. W. A8 T3 T! i&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
* X4 b# b& _2 _1 l1 i5 L'NO'- K' q6 {+ z! p1 G( M4 p

# f+ U- c* A0 v  }3, if(条件1){条件1成立执行代码} ) N1 {# v  k3 P/ g+ p
        else if(条件2){条件2成立执行代码}
- \* ?( j2 P$ o: S    else{上面条件都不成立执行代码}& O: j: }  F: @, X0 m
( p  I0 e4 W/ N
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
1 F; M& b4 Y' X Ha
' p2 ]' i5 S2 s</code></pre>0 s  d" }$ E3 R) j0 o
<h4 id="252-switch">2.5.2 switch</h4>
; ?! W* c" Y3 }% {4 h<pre><code class="language-javascript">var day = new Date().getDay();
, h6 K! z2 ^) X& A+ Z7 wswitch (day) {
$ u* o- t' K7 ?* l+ g) n  case 0:$ p! {1 M6 E( V$ Q2 Z, E
  console.log("Sunday");! v2 i5 [( h3 s) O( y. ]
  break;
2 J3 ~, K3 P5 R' h* M9 e  case 1:1 |: t( z+ g* E; k" T1 }- z
  console.log("Monday");7 \( U+ y7 l& X0 `) N7 r
  break;
5 V  g: u& y* v4 Hdefault:4 _9 ~0 P! O- Q9 U! m
  console.log("不在范围")( M6 \0 k$ h9 N
}
% n2 l0 a% V# B 不在范围6 y. {7 |& d+ c# s
</code></pre>
7 x7 e$ @& F& o9 g. j/ h  \<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>4 M9 L& U! \9 o0 j6 K/ t2 ]
<h4 id="253-for">2.5.3 for</h4>
9 Y6 i# [) K* Y<pre><code class="language-python">// for 循环4 G$ A- G, [' i1 q! E
        for(起始值;循环条件;每次循环后执行的操作){' `- z6 }! o$ ~6 n5 E
        for循环体代码2 P8 N4 n( H, Q  _+ \
    }
6 A* T$ a) b; f! p% i
+ `& K2 N7 }8 J- lfor (var i = 0; i&lt;10; i++){
" ~, o0 E# w/ P9 y3 I    console.log(i)) i& N3 u5 Z" H$ n- h' p, x
}
. Q( M  z& B+ K, l        0
; B& ?& [  \6 @; ]6 }        1+ [" j+ @( R7 L
        2
8 \, G, m% z6 ^) M' n3 J9 A        3
8 W% F7 t' M, D! q& s8 f1 i        4' Y# ~1 D7 G/ y. Y& [+ c
        5
  _8 h9 j/ {& L( o: ~3 i$ w        63 o! r% F: Q" I+ x' a7 C% J
        7
; q9 h& p  b" |6 U  R7 X        8
/ D! f6 i& a* m; J        9
$ ~) K' e& Y1 G0 }! @</code></pre>  X* U# M) [: z  \$ _# H6 p! N
<h4 id="254-while">2.5.4 while</h4>
+ W" I, I) p5 F  L) _0 ^<pre><code class="language-javascript">// while 循环+ R% r! ]/ K: E, Q
        while(循环条件){# N$ k! g8 K7 m6 n8 W
        循环体代码
) @- k, [+ a7 B    }; S5 a% Z. v% Y( g  l! H* V/ v
) C- b) }! B: r1 e# N0 l
&gt; var i = 0
! {) o9 i0 n4 @3 K# H& W&gt; while(i&lt;10){
) q, C# M+ W- z; T+ q7 R    console.log(i)0 U9 Z+ V- o8 ~$ y5 N
    i++& }+ D7 e! Z8 d( s) U
}- {. S% T2 q& z
0% X/ h' i- x4 r) M& L
1
, a2 ]% N  y6 \2 f/ l 2
; j* I# r9 x: `; Y5 J* `4 u7 i 30 w1 I0 G2 R9 }7 p
4; I  s9 b- V0 J8 q. b0 E
5  o  Y( A* D& ]# o9 N
6
' i) [. ~6 a) n- ?7 d* [/ a 77 M; U& I7 P6 i# Q- c) N: E
88 X5 O9 G3 @* l5 |1 h7 E7 P
9
- [  v+ t: K: A, z</code></pre>& {8 N8 [- l2 K6 K7 r
<h4 id="255-break和continue">2.5.5 break和continue</h4>, m/ |6 E& n9 A# G$ L/ ]
<pre><code class="language-javascript">// break: M: s3 ?+ `1 h) |1 e% Q& `
for (var i = 0; i&lt;10; i++){! d8 }% U5 X+ Y4 W* |1 f. x, C
    if (i == 5){break}6 R; L+ g3 N7 r; m; y
    console.log(i)
# x( R  {: Y) P5 l/ w; l! m/ K}9 E& U9 T# P8 ~: H$ }+ B
0
% K( A9 ~! l! u- V9 k  ? 1
2 _; u. c+ a9 j5 J$ g  N 2) S0 V( n0 n) }& V% T$ z
3; y  [$ C. H  G- N, S/ _, z. A, N
4% N/ Y* `) g( ~4 W$ R
// continue2 g6 m- W2 c$ I* x
for (var i = 0; i&lt;10; i++){
* c$ J7 |& k8 h    if (i == 5){continue}
: k, |  k4 M% ^6 a5 A    console.log(i)
, k; B/ L- m6 W}
, d8 x. q& _# ~7 X1 a 0
) j7 {1 U8 d* A; T 1
# ~5 Z( q/ i3 }0 Y+ d 2
: j- {/ l, C2 `3 Y! ]8 F 3
# s" t: p! ]( h/ l; Y: m 46 V( Z" e1 t  g, P0 ^2 z) n
6; C' J. O. Y+ U; ]1 U
7
- G& d9 A. T4 [; v& y8 M% M7 i 8: }& S, N  M6 {9 o
91 b+ S! j) q; T- r4 q3 |

, z3 f9 x& L+ ~* j% L</code></pre>
1 e" [% K; K; ~  ]<h3 id="26-三元运算">2.6 三元运算</h3>
* E" V  ?; R7 \& e1 c<pre><code class="language-javascript">&gt; a9 b5 b2 e' V: i# r
65 ^4 C. w, H0 ?/ @( O& ^
&gt; b$ U5 C" `- y/ E' {" l8 k$ a
3, p0 j, s4 A2 M' S0 R! c
- L1 l7 Y! D0 q0 c0 G( l$ Y
//条件成立c为a的值,不成立c为b的值
  m/ P+ F5 t0 k" w0 x! \: }&gt; var c = a &gt; b ? a : b
# |% V) d$ a" ?9 L* @&gt; c2 N7 e$ c' }* a$ V0 K0 e+ X3 g( ~
6
6 r6 ~1 M2 ^/ [' z* X4 D
3 K- W( f" E9 K6 ^& }" y// 三元运算可以嵌套* F5 a' b3 n- N
</code></pre>* ?8 Q3 W7 o! v4 c5 F- i
<h3 id="27-函数">2.7 函数</h3>4 a( y9 v7 `( E
<pre><code class="language-javascript">1. 普通函数* U, M2 F+ F( u
&gt; function foo1(){
) P6 U- u* j6 j8 x" w    console.log("Hi")& Y1 K! ], t- W2 M5 Y5 z, R) b
}6 S# k5 c, i: A: p# q4 n

' X* m6 D) q, A" W6 Q&gt; foo1()  K0 k+ b9 J& L1 ?' f: j5 [* w
        Hi
. o. b; q* D' n, r6 k2. 带参数函数
4 J! w6 ]$ ]) {/ m- l: P: {7 b9 O& j4 x&gt; function foo1(name){4 [  S" U/ i/ d2 u
console.log("Hi",name)
8 v$ ?2 H! f# P0 d}7 J& A* S6 U+ L+ }5 d
) K; R/ P: O! T. o
&gt; foo1("Hans")/ {5 O2 E" H' s3 V; O" U
Hi Hans
2 [6 {* E! m6 g4 Z, H* a& o  C* x, A) x% n! n/ G8 e
&gt; var name = "Hello"
$ t# ]7 |2 r2 }&gt; foo1(name)- ^! Y2 }. a/ e- v
Hi Hello
% U/ b; O7 b' T  C, G/ e! }4 l7 D  `! v6 J2 s0 X( s/ }2 t
3. 带返回值函数" d$ X) D1 @! {7 K) _+ E4 x$ A
&gt; function foo1(a,b){' h) y( h, j, X8 e2 x/ T
        return a + b   
/ Q% B+ V: Y+ ?; E; z}7 A  p8 c6 D  G1 Y
&gt; foo1(1,2)
% s, j+ m# J( C  y8 U- Q; ~3) X' Y- v4 X6 ]6 s# j, p. f3 b
&gt; var a = foo1(10,20)  //接受函数返回值' r- P/ z- k2 `# x9 M
&gt; a
$ ?( W. G: K9 g# X30
* W/ E) _$ _0 ]( V& x3 K
0 G. x1 p3 ^0 O4. 匿名函数
6 k6 Y' h0 @  D, c  P2 Q&gt; var sum = function(a, b){" E" h$ q# ~% B1 \+ s; o1 t- X
  return a + b;
  E5 V- {6 w- R2 t! k}# E/ w) E/ Z- n2 W4 g4 ^
&gt; sum(1,2)& c, R: s2 p' O. {5 _0 b/ e
33 D) ?0 O1 M4 w- T; h" ^" A/ N

/ h( o' K( ?1 T// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
6 q! b& M2 B0 C- U1 ^- p% w8 _&gt; (function(a, b){/ q2 }8 x2 k1 Y6 o1 }$ B( H) D
  return a + b4 `4 r! ?+ W. n6 F$ z( j' M
})(10, 20)
, C  a3 e$ h( g3 W* H! b2 U4 P309 d+ Z+ @% P4 d) |" b3 e! b

7 t# j% I9 f4 e0 C! {1 G( Z" s5. 闭包函数
2 W" g% V! L. \& A1 U// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
0 y( X% |3 T* d* S$ \var city = "BJ"
" ~7 o- i3 f: Ifunction f(){
; n4 b+ b! m: K2 p- Y) w    var city = "SH"
: H+ |( {& }4 A9 |) a    function inner(){
' P: U3 W0 k9 F; v. h        console.log(city)* @+ _; b' j0 u4 W8 ~
    }
5 r) L; c' F# Y& ~/ Y2 t    return inner
9 c& k# F# f  i5 d  c  c1 d}
3 u4 o& N& I& {; Y+ N* D# Tvar ret = f()
% u' f" Z3 j; Y5 g+ Y+ n8 ~ret()
7 I! R, L( T! ], ]7 Y6 j) `% U执行结果:" ^1 P9 D! q; N. h/ S9 e" w3 H
SH. B& ^) q. h# e* S5 c

" I0 d/ u' B6 }6 K" d: G9 D0 X</code></pre>: K5 M  c! F: s0 Q9 Z- t( u
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
/ j( M( g. [# U! T6 v& S0 S- g<pre><code class="language-javascript">var f = v =&gt; v;; ^0 Z0 R% l( k" f4 M* W; X
// 等同于
3 T1 H: g* o+ u! p# svar f = function(v){% s" c4 q% `3 `; `( B" D
  return v;' L2 l* H1 a  P9 r( ]9 _& M2 z
}/ Q0 v# l& A4 `# h* m+ R
</code></pre>
6 T" K* z1 F/ @6 r* n) J" K; ]3 V<p><code>arguments</code>参数 可以获取传入的所有数据</p>4 `; y2 X! W$ }4 F% E3 s* |3 e- X
<pre><code class="language-javascript">function foo1(a,b){
! p" D, f4 }# v% k6 G" P    console.log(arguments.length)  //参数的个数
/ B' w) {7 v9 g$ K. y. I, F    console.log(arguments[0]) // 第一个参数的值
" Y) t8 I5 G( y$ _; U$ I, z        return a + b   - f  _# P9 O- z) \6 `: b
}
5 y# t% Y+ X6 ^  Tfoo1(10,20)
3 X- Z9 d: b% f. b结果:
& N# C% A6 b+ v/ E 2          //参数的个数
; P5 B- Y7 M% N/ ?  M; v! x10        // 第一个参数的值
& ^: m: }; O1 r/ H. ^# i9 s30        // 返回相加的结果8 Z$ j- p) X9 k$ ~
</code></pre>
- X  W7 T1 J$ u/ L; X, o) `8 ?4 M<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>2 Y" D4 U! z' k8 R4 Y( }; s
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>/ p% v6 |$ A! D# w1 c# k, ^1 R
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
- o  C3 I5 U: S! M+ Q. F0 G<h4 id="281-date对象">2.8.1 Date对象</h4>
# p0 r* E7 z7 v/ u! f: ^0 s<pre><code class="language-javascript">&gt; var data_test = new Date(). j3 e9 a. m( t* }' v
&gt; data_test" V" u/ M, l3 B) {; R
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
  o0 [+ f" ~+ N+ _5 s- G& `5 p3 l&gt; data_test.toLocaleString()( t( r9 G3 r# P; `6 j0 m
'2022/2/11 下午9:44:43'. E' n* u/ I3 ?- w% b* s' o( M$ h* A

: @5 S6 t  u$ x# u4 b) I( s: H&gt; data_test.toLocaleDateString()! `9 B! |' d4 n; c0 m
'2022/2/11', [& P: d$ e. y6 P; m

7 ^: p& I+ R# q* b4 |4 q  }9 R6 u&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  x' K" U, x# m; }' I/ M) ~&gt; data_test2.toLocaleString()) ~; ~+ C7 q* f% V; G/ T
'2022/2/11 上午9:44:43') ?/ O; ?; p8 }' N
' h* R7 v+ R8 b
// 获取当前几号3 O, u# w4 y1 o, F* x
&gt; data_test.getDate()
# z' R$ Y3 i  _' G6 N1 t4 w113 F) z* t7 |! I
// 获取星期几,数字表示0 E' {2 m4 n/ s- b# ^" Z
&gt; data_test.getDay()  
& z) s. D7 A' p5
: Y- Z- K% K: S# v5 f3 M& x// 获取月份(0-11)) T: b! Z. N( |6 S8 w
&gt; data_test.getMonth()( W/ S; S8 K; s+ Y1 i
1* {. B3 h( \# K2 I
// 获取完整年份$ v/ k* L( W3 m, }0 g
&gt; data_test.getFullYear()" w1 f8 k! y/ q1 M) g7 c
20225 m; _$ C2 O/ G$ _. n, H7 |
// 获取时& z1 f3 L; T+ p3 Q( q
&gt; data_test.getHours()
( y+ X( V0 Z/ O' X& t+ h21, ?, L5 x) `9 V+ ~; G
// 获取分7 {/ I! N& U- U! T  l
&gt; data_test.getMinutes()
3 L8 s6 j- Z$ K: k) A& x2 Y( b445 v$ j5 [# y6 t! Y; G3 c# N
// 获取秒- P, D. Q/ ~# p* D
&gt; data_test.getSeconds()
6 N/ `0 B$ d: ~# m& f' e43
. _- t( ?" T( }1 Y( N2 e/ f// 获取毫秒
6 ~2 c7 A" ]: z5 s# ^7 Z&gt; data_test.getMilliseconds()
' \' {. `( Q5 h+ K290
( i+ J: q  w$ d// 获取时间戳
; `% |, b% t3 ~) [( L6 @' y8 K" j  Y&gt; data_test.getTime()
1 S: y# z/ X! }& f; S, M. Q" ?1644587083290' J) n- G) W% D
</code></pre>
1 y/ D7 U: ~* @" j8 e<h4 id="282-json对象">2.8.2 Json对象</h4>
9 q" J: y! m$ y. ^- o<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ t4 h: l; X6 K1 pJSON.parse()  // 反序列化,把JSON字符串转换成对象! \$ x! j4 i7 i

8 v0 S* N$ V5 w* w$ G/ _// 序列化: H2 E. p- {# D* A1 d
&gt; var jstojson = JSON.stringify(person) 3 {' y6 @* J1 l! _8 Y. c& A
&gt; jstojson  8 _( |: y6 }$ u
'{"Name":"Hans","Age":18}'1 R2 j/ m+ K! S% i, q

! {9 @+ E2 h" L; X5 l4 [// 反序列化
: H- `4 I% l& t* ]# B&gt; var x = JSON.parse(jstojson)
& n4 x" I8 G0 Q( G" z# g/ W&gt; x
6 O/ C9 g. T8 X; R( H{Name: 'Hans', Age: 18}
5 B- P0 k2 H; x* Y&gt; x.Age% S  m) i* ~! a/ ~( {, Q* f
18+ `/ S9 t2 y* R- D' S& R1 t
</code></pre>0 ], t/ {" C( t4 o
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>9 J9 ?3 E' ~( Q+ T/ {) v) v
<p>正则</p>
5 d; V1 ?% n$ Y1 o<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");- i& p' M7 d2 o) ?
&gt; reg1& f3 R! B7 X7 _5 Q- z1 q4 k
/^[a-zA-Z][a-zA-Z0-9]{4,7}// l' C: c1 g( C6 F
&gt; reg1.test("Hans666")% q0 m+ A) g. }, K
true
* v" D. e2 X' g3 I! z- C# K9 ]5 c+ Y8 }! O% D1 F
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/# i/ j& u4 y  s# h4 N/ N0 r
&gt; reg2+ T' t2 Q! v8 ^) ^& E
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
  T9 [7 z% Z# w( z9 L8 _$ b&gt; reg2.test('Hasdfa')
6 T% s3 A! [! w  J8 Y" Wtrue5 S& |" T& T. F+ Y# J# _* D' N

/ A3 a7 `6 [, ~# t$ s) }全局匹配:& r9 ]  _9 u3 b6 n8 ^& \8 B
&gt; name( I: J2 n$ l' }; I/ L3 O
'Hello'9 q- P, p/ f' v( ^$ n1 x
&gt; name.match(/l/)
# g6 {9 ~; t6 S* K1 F['l', index: 2, input: 'Hello', groups: undefined]
8 a, ?8 @# C- M
, G3 F( {6 h- |* N&gt; name.match(/l/g)
+ G, t+ d) b  |(2)&nbsp;['l', 'l']; d! h, I9 J6 P. A' o2 A1 b" O) }0 K( M) G
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配! T3 s* A7 k3 `  D
0 Q% W$ Z0 K4 i" W, i3 b8 K1 ~4 S
全局匹配注意事项:% d4 g9 U. A7 n
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g: b0 }% y$ X: Z4 |
&gt; reg2.test('Hasdfa')
9 b: i$ N1 s1 ?5 y7 Ctrue, z8 L/ g8 _. Y1 _
&gt;reg2.lastIndex;
2 F9 `: z( C( Q- d( Y) N6
- L8 r. |7 F9 d1 t8 A&gt; reg2.test('Hasdfa')" k6 B. N0 `2 R6 Y& F
false
& |0 E  K) z* |. R* ^% l&gt; reg2.lastIndex;
8 C, x  e( i; Z! s3 ]* D- p/ v0
2 _9 L8 R4 a$ X3 f9 c, k2 o  J&gt; reg2.test('Hasdfa')
0 p8 V$ S- i4 x$ z: Itrue4 ?+ N( j; a. A- g0 P% F& m
&gt; reg2.lastIndex;* B) E0 i8 w7 J$ \9 `
6
  f" F! m. d8 I9 |3 e&gt; reg2.test('Hasdfa')2 @- X' B5 a4 q7 ^- G
false
; E6 G1 O# K- z' Y$ F: ]# @&gt; reg2.lastIndex;
1 J/ I8 m" p! J3 }0. l# E6 O" b. n7 o4 y5 L
// 全局匹配会有一个lastindex属性* I$ p. F2 T6 f2 E8 ~
&gt; reg2.test()& i* d* `9 u: b6 R- x
false- M. d) i) @5 E, ?$ X, D2 a! m
&gt; reg2.test(): w) C- r. G3 `( z
true
  K" @( Q6 z* U4 N# i8 p1 E// 校验时不传参数默认传的是undefined# d0 Y9 h. Q; g& I
</code></pre>: y1 H5 f: A5 \( B$ ?; s8 [
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>& {% `% ]2 T8 z8 G. b6 t
<p>就相当于是<code>python</code>中的字典</p>
$ }6 M7 r& K0 d& E" @<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}0 [( {" b% |9 q
&gt; person. p; ~( T! H7 Q! d; s' {& C
{Name: 'Hans', Age: 18}
! C. K: d" I8 J! v  C; S6 `&gt; person.Name4 q  i7 v1 v! S( O
'Hans'/ k/ q; P% g/ q* m/ }* O  b6 ~( c
&gt; person["Name"]
+ Z$ \: }4 R7 |+ }7 g% E" W% {'Hans'4 ]. m+ u! z8 ^# S$ S3 Z# ]" v/ U

2 L% `. I% @2 G) l" _// 也可以使用new Object创建+ M( b6 ~4 r$ J
&gt; var person2 = new Object()
- |; T0 T$ i6 a2 p+ @6 N&gt; person2.name = "Hello"
  P; o8 W4 y. j' s'Hello'
$ L/ J5 P' Q  h1 n&gt; person2.age = 20
6 k: ]) e( w6 T% A( z0 |20
( b, S( E9 V& `! m, Q6 R$ {</code></pre>
# p. w  i* S. J) ]( B0 J8 w<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>- X( g/ L# O5 l( E8 ]3 J
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>$ @2 A5 b; N2 V5 ]( G
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>, M. a$ k2 ^- w% A4 G
<h3 id="31-window-对象">3.1 window 对象</h3>
& `4 H* c4 P' R9 E% c<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>2 O! R5 `, X! m/ C7 ]8 X8 F& y
<pre><code class="language-python">//览器窗口的内部高度
! Y9 }, P0 ^7 ?6 Fwindow.innerHeight
" k" V, M" A' h% y' T4 T) e706
8 n! Y" e! n: H4 _//浏览器窗口的内部宽度0 b& n1 j$ l& b6 r7 Y
window.innerWidth6 \' V+ K( j5 W/ Q% g8 f
1522& ?! n, r7 f4 P( l) ~
// 打开新窗口
2 s2 `2 u, D, O5 X; kwindow.open('https://www.baidu.com')
! s% F4 ]1 P, G( i9 z9 p- Q6 HWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
) X, p' r6 b7 z& Z+ h% p// 关闭当前窗口9 j5 D0 s3 B! @
window.close()
+ L9 U0 h; X& C3 x//  后退一页/ Z, ?4 M& H; {! q; N% X
window.history.back()3 M9 w1 S' h# \3 s
// 前进一页  h. W' F! w. ~1 D
window.history.forward() ) \6 Q! b3 c! z: \; e: D
//Web浏览器全称& ]6 f9 v# {2 v+ \3 G1 ~
window.navigator.appName  [; F% E" H" z/ B6 c
'Netscape'
: l; q; L3 Z& l, l+ k4 v, ]+ ~% \// Web浏览器厂商和版本的详细字符串
0 V8 x; S# T4 A* d) \* Uwindow.navigator.appVersion% a) j! K7 `( f- N+ s
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'. @. u: c+ g- f; \
// 客户端绝大部分信息
& l! m4 M' D6 t$ Iwindow.navigator.userAgent6 q" c. `) V$ c( J* O1 N
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
+ j  Q- e) m% p: a// 浏览器运行所在的操作系统
  \; M/ L8 [- b3 q, pwindow.navigator.platform6 e# Z8 G; @6 \8 b
'Win32'
6 _) h4 W! h5 {3 d$ [
; g' A6 Q" E% T2 x# p( Z" G! p//  获取URL
8 V7 d; D9 [8 xwindow.location.href; @! t; b; Q/ S4 r
// 跳转到指定页面
5 A% P/ ]5 L6 Ewindow.location.href='https://www.baidu.com'
, [. k. w; z' R: u- V0 I2 Q// 重新加载页面
& o3 d! B2 @1 ~" h2 p# [: awindow.location.reload() / c; |6 N( w8 N% H1 g* h( D
</code></pre>
. [, O, C0 y- I3 w4 {# ?<h3 id="32-弹出框">3.2 弹出框</h3>& A8 R. O5 T& m+ V$ k- |; ~
<p>三种消息框:警告框、确认框、提示框。</p>. z) {1 q( q, i. x' r: A0 ~
<h4 id="321-警告框">3.2.1 警告框</h4>( o" I  g/ r* \5 ]0 X
<pre><code class="language-javascript">alert("Hello")
+ t4 C; l; ^& k0 w</code></pre>2 ]2 ]7 b8 p; H4 S8 w  `
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>: V6 s& [- V- i9 x/ I
<h4 id="322-确认框">3.2.2 确认框</h4>/ f8 t/ ]' m2 x+ W
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>4 B8 U9 n4 f! a+ \; V! U
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
9 w& o( k7 t  T# J' G- K7 a+ qtrue  f2 C- t8 i. i! z8 W8 u: a: i9 V# Z
&gt; confirm("你确定吗?")  // 点取消返回false  p' I$ g2 O" `/ b
false
7 P, j) Z# n  y$ E- J</code></pre>
1 d$ ]5 ^0 l* y& x<h4 id="323-提示框">3.2.3 提示框</h4>: q' s- }( [; m( F( H! ?, n- |
<p><code>prompt("请输入","提示")</code></p>7 L9 x3 [* j3 A8 H
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
1 N9 T6 [5 m5 `" m8 {. [<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>6 P" u) @% o2 s
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>: O' v# d" d0 {6 F) q
<h3 id="33-计时相关">3.3 计时相关</h3>
- H7 l" ~' o7 {& G<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>  k$ I8 T! _& d" ^
<pre><code class="language-javascript">// 等于3秒钟弹窗8 z" {1 F3 Y% u: t* v  v. ?
setTimeout(function(){alert("Hello")}, 3000)
) {7 t" R: i  x/ b- T
& B. ~# ^5 W! i4 T! Bvar t = setTimeout(function(){alert("Hello")}, 3000)
  d% s9 ~& z0 }0 n1 D/ g. R  x4 x% j" e8 x( h2 `
// 取消setTimeout设置0 a5 Z0 h! T4 W
clearTimeout(t)9 ~6 I4 }% i* }( d9 ?. q
</code></pre>
8 N6 ^# b7 V7 \  B4 E<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>, O* l  O* H' l" y! A4 R7 q3 p
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>; h) G' x4 b  ~2 Z
<pre><code class="language-javascript">每三秒弹出 "hello" :) F" b1 t* y! Y7 F' b8 \) V0 N# r
setInterval(function(){alert("Hello")},3000);
  k8 b  c2 V& s' N- L/ V5 N( E3 H</code></pre>
- ?! E8 f! ~  G3 @* o<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>( b2 X- P$ A  n$ Q2 f5 e
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);  h5 q! \; p2 w& H: z
//取消:
0 X5 Z8 d. j2 s+ g7 }clearInterval(t)
; F/ H4 L$ f2 Y</code></pre>+ E$ s% F4 m: H" S
1 f( v4 c6 B6 A5 P/ z* n3 H% Q0 b: s
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-1-10 18:40 , Processed in 0.070743 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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