飞雪团队

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

前端之JavaScript

[复制链接]

9321

主题

9409

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30293
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

; j6 U/ i" \1 l% b. p<h1 id="前端之javascript">前端之JavaScript</h1>% B# _7 J. l  T% p8 _4 Q
<p></p><p></p>3 r1 z. c4 E4 Q9 r: b
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
* J2 n& w3 P$ J( y4 c2 e# p2 [<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
  Z: O! y7 W% B7 M5 I7 Z6 {0 K它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>; W- F  r8 P8 _1 C
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 O- e" Z. R) t% h& F
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
, S& u/ |" J, P0 {0 V' _<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>2 P4 M1 C7 S3 E7 o5 A( T$ l
<h3 id="21-注释">2.1 注释</h3>" I6 D" n4 D# V  x( B
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
& C4 g& E' S  c<pre><code class="language-javascript">// 这是单行注释: L" n/ o4 K; Z: W8 {
  S$ D. q4 }( I; \/ _) G% f
/*
) E8 r$ q1 w9 n( u6 Q2 K2 f# V7 c这是多行注释的第一行,* i+ a4 O' o; Y3 D3 ?
这是第二行。" Y" \5 c& p; F- ?9 L  o
*/* h! o& F" q- f2 c& N: \
</code></pre>! }, a" K0 z# Z' ?
<h3 id="22-变量和常量">2.2 变量和常量</h3>, T. U9 \3 \- g1 f: Y6 L9 G/ w
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
7 j3 ?5 Z6 f  K" a* t" E<ul>* _/ j! B, V3 a  W' F- P# v2 g
<li>变量必须以字母开头</li>2 K, C5 H2 y& t" }: v0 q
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
% T0 ~" W+ w) c- U3 X% z" H. s<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
0 g, s3 f  x3 I7 a. T</ul>& `! }( S" c; w0 b+ i
<p><code>var</code>定义的都为全局变量</p>
$ }* L6 n/ g, V- ~& i2 y<p><code>let</code>可以声明局部变量</p>% c- y: S0 G+ m- t4 P: G4 `* h
<p><strong>声明变量:</strong></p>3 C, r( a, }0 ^( `! G
<pre><code class="language-javascript">// 定义单个变量
6 A  }8 i% C+ m. a/ j3 z&gt; var name
% X) F' i0 s/ c! r1 R7 H&gt; name = 'Hans'# l' x! D2 e# l6 K( `( V
//定义并赋值2 y- }) Q+ O; D1 m
&gt; var name = 'Hans'
: v6 \: q# i" O' G. q# S&gt; name/ ?/ A: X; n: o# a+ _
'Hans'
7 Z5 G0 u5 e, B7 \! B
0 N8 M# [/ j/ n' D: i. S, @// 定义多个变量$ C* y) e; D, ~: G6 w
&gt; var name = "Hans", age = 187 a& l# J$ y9 C+ j9 P& K! W
&gt; name' ~$ v4 M4 L( e4 O0 G4 i$ v" X
'Hans'
  y8 Z8 s7 n2 Y( i& b/ L( c&gt; age
- z5 j: y$ w' s# W18
) w$ g& \' R( E7 ~, v3 z$ a% W- I
* s3 ~+ u" b' q5 C" A# K//多行使用反引号`` 类型python中的三引号
% ?+ o: m: |1 |. q5 @+ J&gt; var text = `A young idler,' B0 F( h1 [) ?' p  H5 K
an old beggar`0 _0 u. [! v8 X0 P- h* g" \. i6 A
&gt; text
; j9 S0 C3 {2 D8 w1 |: H'A young idler,\nan old beggar'7 [- @; E9 n3 E$ H0 k$ B  C
</code></pre># O( S6 S: |' X9 K
<p><strong>声明常量:</strong></p>
6 i" u+ @2 M$ f  r) J' s6 Q<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>; ^9 W1 [, j% S1 E: U1 @
<pre><code class="language-javascript">&gt; const pi = 3.14
# F- z1 V; A. L2 W" D% _&gt; pi$ t0 a: Z  H4 H, J- C
3.14  o9 X, X- P/ Q# R) L5 A1 g6 S" [
&gt;  pi = 3.01# m. w( Q, U/ z  n+ L+ d" o4 m) {
Uncaught TypeError: Assignment to constant variable.
3 Z6 E! ?. C+ Z. f    at &lt;anonymous&gt;:1:4; d) H- y+ M/ g  o+ K

+ l, P! e3 @, }' S, i6 T</code></pre>
3 O& y) Z1 H& U0 h7 X' V) C9 x; J<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
  ^6 L  H1 m1 p5 `  h! b$ o<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
5 C  f* ^3 M. T4 ^+ z- T<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
) ?' c4 N6 z4 I7 ^+ L4 F<h4 id="231-number类型">2.3.1 Number类型</h4>
& Q! q) e+ O8 _6 y) \! ?<pre><code class="language-javascript">&gt; var a = 5- @. e/ D, M; p+ A
&gt; typeof a   //查看变量的类型  1 A+ t; g5 |3 f& W8 q
number$ ]6 f# a& l1 I% K
3 \/ R# G0 C6 T! }- I
&gt; var b = 1.3
, B* r3 T- O& L  D% v8 U&gt; typeof b/ h  ~+ J/ i) i( i
number! t* Y# w$ a6 w2 B% ~% a7 s7 t

* k- o- ?$ P, v* Q! D" S" {. m// 不管整型还是浮点型打开出来的结果都是number类型
% Z0 P4 l& Z& }9 z. p( _/ J+ I3 |
6 C8 |" I5 p: G" l% o: J/*
/ m+ ?2 r( P4 d8 `3 ]/ a$ SNaN:Not A Number
- y+ j; s8 {) @5 l; F* |  K& {$ aNaN属于数值类型 表示的意思是 不是一个数字
: u* }. s* i; M& Q( L& B*/4 \: X; A% M7 {' N

- g4 [% D& `- h( M& |* j3 W6 H8 k5 |parseInt('2345')  // 转整型, w6 I' C+ m! K' |, A2 ~  a
2345
% E( a' l8 q5 L# }  ~parseInt('2345.5')1 \4 ^9 s: u1 I, x6 R: V, |. k7 y
2345% I$ _) S, A" T8 V, @6 p2 q. ~" q
parseFloat('2345.5') // 转浮点型
% X: P2 z6 o8 y5 @0 w2345.5# w1 I, P, d9 U: q. E) W2 D/ N0 H. o
parseFloat('ABC')/ m7 u5 h3 [# u9 ?& M
NaN- [; s3 I" \2 T) N' ?
parseInt('abc')
2 P3 j% K4 P( U4 x+ KNaN9 w1 J* V: ^# b1 j3 u# L9 N
</code></pre>
' @9 Y3 _' W3 ?2 ~2 O. B<h4 id="232-string类型">2.3.2 String类型</h4>, {  G& |. v5 f/ }; T  h
<pre><code class="language-javascript">&gt; var name = 'Hans'9 v; ^( _& n& Q: C
&gt; typeof name+ w+ X3 r7 O4 l8 s
'string'/ h) f/ l8 z7 t" W

. V2 }8 d8 D$ ]! `& H. n6 W//常用方法; `0 s8 ]. c# P4 W/ Z* g0 t
// 变量值长度! t5 o7 i: L; J* Z) K
&gt; name.length( a4 M" a* v/ x
4
' x2 _% i+ k( R! z1 f// trim() 移除空白
& N: J' b* f/ R&gt; var a = '    ABC    '
9 J$ o$ b2 B, K. M* I&gt; a! W, N/ }1 I3 G% s: P
'    ABC    '
, Z, R$ N* G; {6 s* x&gt; a.trim()
5 H# i' P2 R! S' U! @; O9 |8 I$ o'ABC'
& N8 y  K% h; y+ A; d+ i9 \0 [//移除左边的空白
9 p0 t# d# t6 M&gt; a.trimLeft()
: s( g0 q+ l  e'ABC    '" i4 ^3 ?, Z* q& H
//移除右边的空白1 K0 S0 P% {/ m' [9 O8 G
&gt; a.trimRight()
+ P! p5 ?2 @8 y& ~, X4 g6 c1 `'    ABC'* t1 r/ N# M/ I( @' {
/ K, d7 ?7 B0 w8 g, u4 z
//返回第n个字符,从0开始
1 @+ c9 n6 A& K&gt; name
# r- K, D6 j- k7 Q8 c  F8 J& S7 y, q'Hans'( R" M/ L; Y2 ~9 J! M, Q" h
&gt; name.charAt(3)6 I, Y2 o8 w2 D3 R4 v1 e/ l
's'  L4 T0 ^+ b: Q" {$ `
&gt; name.charAt()& F  z) w2 S# V9 D  C0 _' w: d
'H'
$ L3 d) f' k) w% Q7 h&gt; name.charAt(1)
2 g2 Q8 j% D9 u+ w: i'a'
1 C: \( ?+ B6 A% B; l9 N" |
3 X$ `( w+ Y3 B$ \- J// 在javascript中推荐使用加号(+)拼接5 j1 [2 z. `8 y
&gt; name4 k. F; {6 A" q0 f) p
'Hans'
/ ]& j) B5 d0 J9 K0 i0 w) j" E&gt; a
1 g" s3 Y, I. a1 b' P2 o'    ABC    '
3 Z( R2 r# Z0 o& J, E&gt; name + a
/ L1 G+ y& D" v9 I! O& ]'Hans    ABC    '
( s+ @3 Y4 m8 s8 l$ B$ ?5 }// 使用concat拼接# N& y5 Y3 ^3 d/ x+ W
&gt; name.concat(a)9 A/ |. N1 m8 u
'Hans    ABC    '
6 F# p% Z) R% D  `$ Q1 }
( @0 b& U6 B& {5 m% J, C" i//indexOf(substring, start)子序列位置
; T' i8 k5 [; K: I  |& b6 G0 n; q2 w- T
&gt; text
+ N  L3 S8 B, `/ ]) d% S8 S'A young idler,\nan old beggar'- C# b" ^. u% S& K
&gt; text.indexOf('young',0)! r2 W* T2 D; T6 F9 f. U
24 e0 r4 e. v9 a5 p* t( x2 F' {
2 u0 S& u. a3 o  b7 J9 z& R
//.substring(from, to)        根据索引获取子序列# N# j# U' R& F$ q+ z
&gt; text.substring(0,)
  q  ~/ g6 N- Q; `'A young idler,\nan old beggar'4 C$ \; k7 V. _& A
&gt; text.substring(0,10)( W/ W& s: c6 t; ?( o, T, g
'A young id'' S8 m6 `$ @$ }, Q, a9 v, I# s

6 G" B$ a, i; F- y+ d// .slice(start, end)        切片, 从0开始顾头不顾尾6 `$ U) U4 C9 ?0 D: B
&gt; name.slice(0,3)) o5 f, R7 J/ z& b7 A4 h
'Han'* G" O) [: ]1 o

5 L9 ^2 U2 r' ]0 ^4 V# L- O// 转小写" k: ?# A# ~" M6 f8 Z# {3 J; p
&gt; name
# Z1 R. W/ K# a/ Y$ e'Hans'
) x" M/ U$ B  Y&gt; name.toLowerCase()7 W; l% m) I+ ^1 x+ L3 |3 Q
'hans'/ ~# p( W; S1 i9 @
// 转大写% M- Y* p, r, \! Z1 @. b: l
&gt; name.toUpperCase()9 \3 A" }1 _7 `/ K
'HANS'. K( g: p( b. W4 T6 Z2 k7 y! ^4 I
1 G6 \( U" ?" s7 A! F3 d
// 分隔' A6 A- X9 P$ i( a0 m/ j. j
&gt; name
  U/ r: f  m& L0 b" m1 Q'Hans'
' r5 Y2 Y1 w. v( b+ I5 d8 u% J&gt; name.split('a')3 R4 w( ]6 ~& s5 P
(2)&nbsp;['H', 'ns']
* M  u' V$ L! `+ Q</code></pre>" I  f1 f; N. g, Y  \9 y: f) ?
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
9 p" o+ e9 [+ L2 j& t4 z1 j- w<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
9 q# j0 j# Z2 f! k<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
' O% @2 D) X  e9 Z8 Z<p><strong>null和undefined</strong></p>
/ L7 [% ]8 s7 l8 x/ o<ul>
4 F0 o. r1 O* @8 y# T' Y  m: j- }& h<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>1 `/ Q! s5 ?+ a. X1 s
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
7 X4 f! E+ f6 G4 ^8 }5 N/ c</ul># S+ y0 S6 T) [6 [
<h4 id="234-array数组">2.3.4 Array数组</h4>* v3 P7 K/ [: P9 O2 T$ s& t
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>8 Y2 s( w+ u, ?5 z3 ?
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
" N& [2 N$ S- f9 k; B8 Q2 `0 ?4 Y&gt; array1
' Q! F: j/ L4 i$ _2 }% \) a(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# h3 s1 ~/ m/ E! W1 P6 E9 W&gt; console.log(array1[2])  //console.log打印类似python中的print3 @2 Q+ i( ~$ O7 G# w! ]6 I
3$ ?, x$ @" q- ^9 y& W
// length元素个数
/ ?! [0 L- H# z+ k&gt; array1.length# p/ p* t8 g2 h, L
6) c4 m  g4 s" c: J$ U3 y
// 在尾部增加元素,类型append
8 l9 ?9 T* k% T0 M&gt; array1.push('D')& X6 ~8 N6 e/ E) P$ x/ D
7* t$ I0 O9 f) ]
&gt; array1
$ k, H* z+ ?! O. j(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
% t2 I5 a+ w7 d: U# p( H, \) h// 在头部增加元素
. S3 \  [, t) c&gt; array1.unshift(0)
% O, p' O) ~) ~+ ~# P- ^86 }2 C) t& H- g  p
&gt; array1
/ k8 @; g! j: L* F* W5 w(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']! r' ~5 S! X7 _7 H6 W
' }  S/ \( {: E* \2 ~( Q
//取最后一个元素2 _- B. t5 @6 x& V4 l/ B
&gt; array1.pop()
( z8 g2 F" ~. G9 O$ p7 |'D'
) }! ?' u; c: e  M5 A&gt; array1
' }6 o% o1 q( M! l- _+ Q  R, K(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
# i, ~% q" P$ k//取头部元素7 I" ?6 o* l2 M6 r* y) M* w/ d4 Y8 y: f
&gt; array1.shift()0 m6 r7 \# W" S9 R
0- L6 X8 z1 `  P% O3 I& q- n8 M1 u
&gt; array1
" A2 L* d, D2 [( g8 I' e(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 d# B% p" @4 m/ X+ m8 G! S: o2 `5 j

* I3 g* o. a; Q  o& p* O7 z  W//切片, 从0开始顾头不顾尾2 B4 k3 I& J6 }9 I* ?% O+ m
&gt; array1.slice(3,6)4 [- E5 n' C4 s
(3)&nbsp;['a', 'b', 'c']
4 M. e" C2 }5 V1 ~9 L// 反转3 v0 [1 _2 T6 k- p' n
&gt; array1.reverse()
: g$ z7 j  d3 Q* f/ x( p(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
$ c5 N. J. v# O; B, ^! v// 将数组元素连接成字符串
$ D$ c% E7 N( H$ c&gt; array1.join() // 什么不都写默认使用逗号分隔
. E  l- \; v. J+ c* V# S. I'c,b,a,3,2,1'
: ^5 ^* n0 J1 V$ r0 s9 h+ C( E1 v0 s&gt; array1.join('')
# w/ }6 L5 w8 {; V4 b& L+ D" A'cba321'& I, H: A4 G; m. L
&gt; array1.join('|')% I" I8 k# d( X2 O
'c|b|a|3|2|1'% y4 R$ b8 _2 Y

/ N# g  W# t  K// 连接数组& H* r' N" s: P+ @- r/ z
&gt; var array2 = ['A','B','C']! c; Y) T( F: h4 G$ q( J/ C1 {
&gt; array1.concat(array2)
4 w4 q" E& R% b/ d- q4 ]# y. q(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']" B3 N6 G; U% L) r3 ~$ b8 W4 D
7 p* E- h& S2 }9 l% U
// 排序/ L) O3 ^, x" G' i0 p! M
&gt; array1.sort()
* ]0 B" p5 d# b: N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' C5 ~* q* Y- K  |  Y# p# r7 O0 v  c# o1 k% ~5 _  r) O
// 删除元素,并可以向数据组中添加新元素(可选)
& N" P) g% z% n. s& U1 q&gt; array1.splice(3,3)  // 删除元素' e+ V% X& ]# _" N. Y$ {  B/ p7 P
(3)&nbsp;['a', 'b', 'c']% j4 |5 G  w8 R/ g: r! ~( G
&gt; array1& M0 l  D4 Y* ?
(3)&nbsp;[1, 2, 3]2 i% j/ _0 T1 n% Z, z
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素7 m, V) M+ g0 w9 S- }" ~
[]7 a7 M& m+ X3 y% J1 l* a- N- B' }
&gt; array1% N1 k3 d+ V' ^3 v1 ^. w
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']. E/ S( F9 s7 d8 K  J
' F. a6 N! I4 U" h
/*
6 @# a6 T5 s5 g5 wsplice(index,howmany,item1,.....,itemX)
8 O/ t- D- ]6 o( o2 i+ Q5 Cindex:必需,必须是数字。规定从何处添加/删除元素。
# Q3 N  u( t$ p3 U$ O0 Lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
8 U  ~/ A1 _, k2 M' z6 Zitem1, ..., itemX        可选。要添加到数组的新元素, s0 P' `, U. G4 v" P
*/
: [1 C1 S3 w" L- K! K4 C8 ]! w+ L) ]" |9 ~: o' C% E- b* c
// forEach()        将数组的每个元素传递给回调函数
) Y2 D7 \/ e8 E&gt; array1.forEach(function test(n){console.log(n)})
9 b+ K5 f. U9 S# K. B1 N1 e% S 1
0 F* `% h( x  m2 a: O  L/ X( Y 20 h, B; c3 f' e" f7 S2 @
31 u; R7 y6 H6 p3 A' t) z
A# U$ i0 y# _: `2 Q( D$ C
B6 x$ n+ Z0 [/ G* Q: v8 ~
C6 p" M/ r- |* I* c5 \0 `$ a
// 返回一个数组元素调用函数处理后的值的新数组# R; H4 D" M3 b4 Y6 C! _% K# e) L
&gt; array1.map(function(value){return value +1})& X: L& g7 p/ R, {
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
: e- P! O$ L" Y( e</code></pre>
) ^- S' x$ ?, W* o8 n  c<h3 id="24-运算符">2.4 运算符</h3>7 w' ?& i; h: f* P0 @  j
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
, d# _1 Y" O  }! c6 {5 c$ p! }<p><code>+ - * / % ++ --</code></p>  G+ d1 B7 t- e6 }7 w1 }- ~6 O
<pre><code class="language-javascript">&gt; var a = 68 n% M) d3 u5 b
&gt; var b = 3( w7 e( |& z1 d2 i$ E
// 加  `  A/ e- i) u, B4 H7 s6 m
&gt; a + b4 \# v+ x7 E5 f: h8 a
9! I* q9 F, N5 n- ~. z4 D8 ]0 n
// 减0 S) X+ c  @! v  N
&gt; a - b
4 Q8 p( |9 {3 p- u0 i3
/ h$ J/ g9 E; c3 ~% _: ?* W& T  W// 乘$ b8 Z$ _4 @8 G8 l/ A5 j! N
&gt; a * b
1 `2 |4 e1 y; Y+ j9 `& v- m+ X18
/ V! [$ q1 Y  N5 y, s! v9 N// 除! Z' e& w- w, f7 u7 z8 E& j
&gt; a / b0 u# F0 ~% F% l$ K8 U- S, r* E' e% j
2" N8 M+ z: k' i
// 取模(取余)5 W  G; a  t# S0 t
&gt; a % b6 Y* P& E9 U2 [* S
05 a& _8 w& e: }
// 自增1(先赋值再增1)
( m3 u' _4 u5 n9 L! }&gt; a++, G2 l! ?+ I* @+ [
6
' I* Y- z# R+ n  _2 K, r8 w&gt; a4 l* v  @7 @" h4 v. ], D# o0 q5 C
73 M0 k) A5 {9 z6 z
// 自减1(先赋值再减1); A, w  v. ?1 P+ \
&gt; a--' q1 i) I& A% b/ J& ]* [$ x
7, c/ W) y& ~$ S* l* O! b4 \
&gt; a/ j) X- b- X4 J
6
7 L7 \1 M7 [) G// 自增1(先增1再赋值)& c, v$ U9 s4 A' ?
&gt; ++a
" U% B& G3 v$ }77 y  C  v+ g. P  ~7 e' T$ N3 U
// 自减1(先减1再赋值)5 G3 x4 o6 L' d7 y2 W! R
&gt; --a/ d, n* z0 v1 Q& m# }: E
68 z0 s/ I# T/ g- h) n3 J$ W' z' k9 K8 f
&gt; a
) {  e. s1 e/ d& E- A/ t& i5 w7 H6
- O6 Q  E: r" H8 y  o
# A9 Z! |' {1 P# t5 Y- e//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
- D/ A. v0 X, W. h% ~</code></pre>
5 p/ X, E, I2 T<h4 id="242-比较运算符">2.4.2 比较运算符</h4>* ^3 X3 u. c! D. }3 X
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>' v" k- x$ y: w* R- z
<pre><code class="language-javascript">// 大于6 |5 W! m. M3 E& ~
&gt; a &gt; b+ R1 M" {" I4 |% T5 P( }0 b
true1 J0 \/ q7 P" B& G) L" F; ]1 Y/ q
// 大于等于
! o( r! Z0 T' _. ?&gt; a &gt;= b
, |* @: F: O  ?& F9 Itrue8 C* r6 P! g$ F% ~' d1 h
// 小于, `2 |; F: p. j, F- H0 m
&gt; a &lt; b
/ [$ u3 f0 v9 w6 G6 n: H) [false
4 m. S" Z1 Q# I" Q+ Y# {( e+ w% r// 小于等于
6 ~7 r% U! ~1 r&gt; a &lt;= b; d1 v8 K( Y. m" |  ]
false% n7 q  J+ M2 K% W
// 弱不等于8 S0 s9 Q4 d6 [
&gt; a != b
' }; b0 t. \5 }" F  Qtrue
, l& ?- ~# v- v% T6 M// 弱等于
  C: V! S: g3 X0 T# P3 I7 c/ o( V3 H8 r&gt; 1 == '1': q$ M3 l% q$ l
true
0 p% v; J  \4 g4 L" D% ~$ N5 i// 强等于: S. {* S" }( F+ G$ Q2 a
&gt; 1 === '1'& _* {4 f( }6 a* x) y- M: i' K: W
false8 t5 K; ?1 v, f5 l
// 强不等于  N: G$ J5 X' C6 F) n! {% H
&gt; 1 !== '1'
! N' o( m5 ^  X6 }2 \, K3 ~" `true: s+ l3 {( W3 f, \! `+ u/ m6 C
) m6 U# l- L/ c% v/ ]% ~0 @
/*
% Y* v4 }8 W1 ~* s4 ~1 [3 ~JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
2 Q/ \; F: _) C! w+ t*/( R6 p% S$ \* h6 m2 `$ T
</code></pre>
8 |0 i1 x7 k. D  B<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
9 d% P( P9 r/ O+ K<p><code>&amp;&amp; || !</code></p>6 b4 u# m7 A( }1 g1 v) m; x- Z
<pre><code class="language-javascript">&amp;&amp; 与7 o6 n! I9 u! B' ^/ k
|| or
, i3 O/ j' ]" x9 p* _+ v' v  K) h! 非2 U' ?" }' P+ D# G; j/ \
</code></pre>& C1 c. |: f- Z. I4 Q
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 M3 [; v. O! T6 P3 F8 Y
<p><code>= += -= *= /=</code></p>
) G' t2 c' w: t<pre><code class="language-javascript">// 赋值
8 I( S5 I% ^; b5 u$ R' m: @) Q&gt; var x = 3* U6 [% k, ?9 p3 \1 \) r
// 加等于
/ E3 m4 g7 R0 e$ g- Z- Z( S&gt; x += 22 a$ S# Y! G2 P: K
54 P# j1 F% ?' o
// 减等于  ?6 G& t/ M! m& L# n  Z* |0 N
&gt; x -= 1
7 ]* B& P, h- O* ^% I: N7 J6 P/ Y41 R- b0 D0 X# h
// 乘等于
* w4 P# G/ P( h' i5 N&gt; x *= 2
- a' m& t9 H, F6 ~+ U8! h5 O1 l! q& j% C7 A
// 除等于
  W, d9 w) ?3 O8 h&gt; x /= 2
' [" W5 N* @' J0 Q) C4
- v) }- z  l7 a+ U8 g</code></pre>
, U1 b6 |% H7 x& i<h3 id="25-流程控制">2.5 流程控制</h3>
; \7 m  W) ]5 Y2 u- O<h4 id="251-if">2.5.1 if</h4># O9 r# V4 a8 v4 \
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}0 h) M6 A  k: O2 Y
) ]  j: A( U3 U# W! l/ @# ^& h
&gt; var x = 3
3 ?9 W4 ]3 k0 K. V5 s2 g4 i&gt; if (x &gt; 2){console.log("OK")}
' z  ~. B% `5 `" r; V OK
/ u4 F+ i7 |! ~/ {! A5 Y& I) ^$ e  @
2, if(条件){条件成立执行代码}
. t7 e; u* A, b0 J1 T        else{条件不成立执行代码}
( _" g) u% a$ i: h0 N" Y- }! ^6 V6 e
( l9 m' Y. n1 Q  i5 q&gt; if (x &gt; 4){console.log("OK")}else{"NO"}2 M3 j$ u" n/ R2 _
'NO'
& _9 O, _0 f( a  ?' a/ _
: `& ~/ r6 r. K3 W0 }: K0 L# e" i3, if(条件1){条件1成立执行代码} & b6 `3 C; A1 ^' S; k' ^
        else if(条件2){条件2成立执行代码}
. ^% q! y# k6 Y& a    else{上面条件都不成立执行代码}
* q" ~" q- w& t- r! b4 r6 N- B1 m% c: ]# ?- Q# o& \3 {" A
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}3 g) f7 y% [$ D
Ha
1 `* Q" |4 D- @. _" T! G( X% k% Z</code></pre>, @0 [- L. g9 Q( M2 _' ^
<h4 id="252-switch">2.5.2 switch</h4>% j: c3 L- R: i
<pre><code class="language-javascript">var day = new Date().getDay();8 i+ E* @% N8 M7 i
switch (day) {
- w3 w# B& U! N0 f  case 0:+ \6 e" p& D" S+ A$ t
  console.log("Sunday");
  y- k7 B; R0 i) Z6 c0 k1 E  break;1 C' [& C9 i- ^2 ~1 E
  case 1:2 T# L2 Z- F  o
  console.log("Monday");: d: q$ L& B) X* C3 Y; m
  break;
* z8 U$ u% c: n3 v  fdefault:% ]: ?: p; w' J. @9 N1 g
  console.log("不在范围")
5 }6 T8 ~$ n. t: _; c) U5 Z}3 s5 D4 |! j' m+ k
不在范围5 M/ q( W( |% X4 X
</code></pre>, V% s- Z' d6 [4 c2 W; |4 B6 k0 i
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>( ~# V, p# ?. Y9 @5 y
<h4 id="253-for">2.5.3 for</h4>9 {, _/ p3 ~2 @5 G
<pre><code class="language-python">// for 循环
$ O& z7 N4 a7 O* M        for(起始值;循环条件;每次循环后执行的操作){2 E3 A$ x, U. Q
        for循环体代码6 a. p4 O- ?+ i) ?
    }! b6 p: X( [/ }

, }& K8 H3 Z( N. c! Sfor (var i = 0; i&lt;10; i++){0 U& L3 w2 i' X! }6 f0 g7 y
    console.log(i)6 ^" G" W) c' \9 H
}
4 ^$ F5 L$ P/ S; M        0) w$ Q+ l, C5 ]9 M" w7 E# i
        18 w, v- s. W, b9 {! B
        2+ K7 G/ e- c9 ?( |2 J( F, R( G
        3
' k8 x! T/ |% \7 h! h        48 k6 t( z% G# X3 J1 I
        5* K( Q& b* y: o# a8 r
        6
9 M- @5 u* d1 w3 b) H2 m! I        74 ^7 g- [: n: V3 b
        8
+ a  V! z$ j; d        9. Z5 M  O" s3 r% c) C8 U
</code></pre>: o0 H0 P' \& {* M  `$ ^( d7 h
<h4 id="254-while">2.5.4 while</h4>% U/ J# U: t6 u! R% |* j
<pre><code class="language-javascript">// while 循环/ C7 {1 ^) `2 U0 j0 J  x1 L9 @
        while(循环条件){/ D2 f9 Z- T* `
        循环体代码/ X) G& d+ _( L! ?( Z( l+ ^/ d9 ~
    }* Q( C( d- Z% R' p5 G- ~( [! P2 w

' J& ~3 ]9 g& H  K&gt; var i = 09 w' q5 T; b2 s
&gt; while(i&lt;10){
9 Y8 E% K9 X0 U+ [, p% b8 f    console.log(i)
8 L8 g# R* ~  f  C0 k    i++
# j7 V# t% m5 Y8 S}+ S5 [! ~2 J! x
0
- a- G0 m  H, g  c! A4 R2 _ 1
) V1 l6 z: L" W8 t 2  g+ F6 x& ?3 M: J
3. z- X4 V! E) p4 I5 v- I: O
4
7 \" o! f0 O! v! w! { 5, F; Q' q# C. D, H+ b+ o: y
6& h" V/ K( L% g9 {( Q* V; C% X4 n
7, B2 C3 k7 p, k1 b
8
1 u2 u) I$ r* f; L 9  O. A/ C8 h) F6 X5 v
</code></pre>9 j3 q8 L- w4 `8 Z( x9 Q- [$ r, e
<h4 id="255-break和continue">2.5.5 break和continue</h4>5 ?* H! o0 _" _
<pre><code class="language-javascript">// break) @# d, i) r& I8 b& V& Z: e% r
for (var i = 0; i&lt;10; i++){5 W! B: C$ H' N- _+ B
    if (i == 5){break}7 T* S% w5 [" e
    console.log(i)
4 b! m; U9 e% Z+ g! V2 R}
' R% O0 s4 J9 g( |0 n) I( B 0  P3 t* n( {( m: N$ D
1
8 v% C! c- x# V* d2 R 2
8 O# k; Q# f) r1 ?' Z 3
4 N9 I6 |8 M& R( G 4
0 ?! @- E1 p+ R3 N* y// continue1 y0 I2 t# N; {- g
for (var i = 0; i&lt;10; i++){! d+ _* }: W: U6 |( b0 i
    if (i == 5){continue}
; W" X9 t( K# k0 g9 I( l5 b    console.log(i)9 O% w3 a& ]" b5 l$ {5 `$ M" r
}
" J# p  l, O( a- `" H- z5 J 0
8 ^2 d! x4 f& ^" u7 r 1
, d  z, r3 W) C4 r& j 2
; T6 I6 s3 w' Y; t/ k) w) ? 3
* K& G( E4 \+ S+ v/ `) Z! S* d 47 A8 N$ S& c# t9 j
6* x2 ^5 r$ C1 v, B. T
7
. [! c$ L6 D( h+ V$ h" Y 83 ?  R" v3 v2 ]+ r
99 R+ E  y& A5 |  u% Z) M

! `  ^- r' k/ Q  W</code></pre>
7 k% M& n3 l4 o  J/ z<h3 id="26-三元运算">2.6 三元运算</h3>
! Z# t3 l4 `  n4 Z8 P! y+ d<pre><code class="language-javascript">&gt; a
$ r- Q4 Q. ~# }6 H. {) [+ C6
6 |; T# S3 G& P6 X9 y&gt; b2 y2 i8 ]! m3 P- }
3: p* G+ d* u/ d( U* c& x
9 g8 O8 h' c. j2 R
//条件成立c为a的值,不成立c为b的值
" Q. J7 m  b9 {' l&gt; var c = a &gt; b ? a : b# l. q5 ?% k3 J' _9 T
&gt; c
/ u$ v0 Z( [/ |7 w$ s7 ]) D6+ P! U3 ]; i7 y. v1 V3 N
4 L6 k# a! [7 o4 b% z
// 三元运算可以嵌套
5 c6 n( J& y8 I4 c' H" h</code></pre>; _( s1 O, d& a
<h3 id="27-函数">2.7 函数</h3>1 `' t! d- m' ]( p( V
<pre><code class="language-javascript">1. 普通函数( W% V% V5 [6 T8 S( Q; k
&gt; function foo1(){4 O( g3 D3 ^' H6 `: I: r2 X) B) m: p
    console.log("Hi")0 _# G8 F$ Q+ ]5 W! S5 n; S0 q  J
}( d) _7 \6 r* V' I3 z2 A7 C+ ?

, |! j* k/ R: w# V&gt; foo1()0 K: J6 f+ _: C) r; Z! R. d
        Hi: a2 Q' U3 j  p+ t- z3 W
2. 带参数函数
4 ]+ {7 l4 S% G* K! D&gt; function foo1(name){
# t7 p8 w) P* y9 v. nconsole.log("Hi",name)
! k: l& H% ~0 {9 w! f. K}
5 ?( ?0 |. R1 L: k7 [
* `# X3 S8 M* b&gt; foo1("Hans")1 D0 ~7 p' e; ]
Hi Hans
* ^( z- W3 n0 l5 o4 N# a' H* p+ N4 Q) a* X
&gt; var name = "Hello"7 _- {% y0 P4 O5 ^/ O3 J: N
&gt; foo1(name)0 z  s9 F2 u. t: i1 \$ U6 |5 x8 l
Hi Hello9 l1 L8 L0 M# H& K4 {( v7 Y

# |: q, Z; ~. V4 y  J; G* \- G% L3. 带返回值函数, c7 b( A" V% F0 T6 _
&gt; function foo1(a,b){
5 S: {( T% a! ]( I9 Z        return a + b   6 k" I+ Y  }* _+ e3 O
}
" b& O; m! M8 G3 ~$ G( I% \" P&gt; foo1(1,2)0 w; `2 i5 u$ N( X) G2 h
31 m% G( i" v9 ^5 x  i* d3 F) o# w
&gt; var a = foo1(10,20)  //接受函数返回值$ h0 T1 P2 x( J' K* }, t
&gt; a
6 e0 X% `* y2 S& g0 R30
  _  R) u3 t" U5 y% q% P& t
7 A" f% B* h( f( \% k) g4. 匿名函数
9 H$ F2 g2 R% m! I&gt; var sum = function(a, b){
& y9 m! t% Q# i+ d; k1 g  return a + b;' c, `% r2 V+ ]' c, L+ C4 \# T# m
}* w6 D/ z  f# |: S4 D; R) V3 P
&gt; sum(1,2)
; p) J% Q5 J6 h$ P6 d3 q& w3" m- [# c; t* ~2 z0 \( `. t% j/ t
4 i' I# i0 J* M  T3 E' X/ c
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱% }- }- C2 @6 r) I9 I( r
&gt; (function(a, b){9 s0 q, F* n0 n. V! k2 L" W
  return a + b
3 N* J: S! C8 ]/ h2 b5 l$ k})(10, 20); V( z; y) \: L2 l
30
4 @% K) h5 K0 W( u* V
6 t8 g0 F" M! w, ^0 s" o2 {: \5. 闭包函数
9 H" n8 G* g, i// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数  G3 T  _+ e7 K& w: I
var city = "BJ"1 d5 _0 K4 U) q' X8 t* H
function f(){5 G/ |9 O6 j5 C0 _! ^; x, f
    var city = "SH"
. q+ Q; W$ I/ q5 s' E    function inner(){% k! b$ s2 u0 U8 p1 g' O" ]
        console.log(city)
0 a( L1 L6 N; E+ w1 q    }
; t* G* p' L5 z) p    return inner
* U& P' v0 E1 k( E}" E/ a5 Y1 d2 j- N
var ret = f()
2 T/ X+ v! s" H5 \ret()* p* ^  ]- z) H1 a- h* j% I
执行结果:
4 b( s% z5 x# |% ^SH# q7 U7 O: p* g% j. d

5 e: G+ E. J1 b( d</code></pre>
5 d5 W! R7 ~0 \5 _; g<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
4 e& ?- j# `. ?' _<pre><code class="language-javascript">var f = v =&gt; v;
! ^6 O, c0 q* h" W+ J) v" S// 等同于
6 [; K9 L/ D4 m2 jvar f = function(v){
: I# j& ]: u0 Q$ H  return v;: t& _( v7 `, C! }
}
3 W8 r! q  \- `: P  ~</code></pre>7 j3 {/ _# F: v1 o5 [9 g
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
: O# U5 S. G* s' k. d: H<pre><code class="language-javascript">function foo1(a,b){$ ]( w9 M# h) Z9 `; p
    console.log(arguments.length)  //参数的个数 0 }# [( R- i% \9 p. [
    console.log(arguments[0]) // 第一个参数的值
( J/ O2 ]$ v) G0 N        return a + b   2 i: t$ m3 C0 n/ p9 W* j$ _. b
}
) R/ ~7 e! L9 N& O( f3 jfoo1(10,20)4 T3 S' E/ Y0 T" {' e% W2 ]; F
结果:+ r* u/ j% `- s# _2 D
2          //参数的个数 ) P2 o8 l. e; J. u/ W
10        // 第一个参数的值
7 `0 b2 y. w4 v! a) W& G: l30        // 返回相加的结果
" {& `" A8 q  {3 h4 T9 Q0 K2 e  p1 E8 B</code></pre>
* u! N, I) Z, H6 C<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>, Q- [+ F! W1 w+ f+ [
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>) F1 h7 N  w  n* R) t
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>& l0 g1 h; Y) m$ V: q
<h4 id="281-date对象">2.8.1 Date对象</h4>  _2 L- }* J6 _+ k
<pre><code class="language-javascript">&gt; var data_test = new Date()
! d* A& i5 |, u% F; l&gt; data_test5 C7 T) o9 V& C5 N! L* }" G) H: ?
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)5 ~2 p& U7 a6 I2 x
&gt; data_test.toLocaleString()
: `" ~. ~7 B5 p'2022/2/11 下午9:44:43'$ {1 B7 d( O8 P- j* }3 ]

8 K! ^5 ]* b  i, R: Z1 ]  m; y4 X&gt; data_test.toLocaleDateString()1 z. W* D( Y% Y- u' x- J; ?/ z5 T) |
'2022/2/11'  _7 S8 `1 i: c+ o& l4 L% N$ [

& }6 T  V: _+ `&gt; var data_test2  = new Date("2022/2/11 9:44:43")
6 w& ~. m6 u( m% k7 c7 G&gt; data_test2.toLocaleString()$ Y! g2 p# M) b' v
'2022/2/11 上午9:44:43'
, Y7 W% f' Z0 B) Q2 t, ^5 s% h# G9 D( h- n, O, |9 I8 ?
// 获取当前几号
  T' w9 q4 ?, {7 `! p( m+ I&gt; data_test.getDate()
  y8 f( e' a6 h+ S: x" }: k9 @% O11
7 m  j/ s9 V, x5 T* Z. P2 D$ ^) I% x// 获取星期几,数字表示
0 j; w7 |; y9 y&gt; data_test.getDay()  # k. Z* I: Q. n3 i9 K# w
55 `: G6 D) _9 _$ P7 N# y
// 获取月份(0-11)
, L- G5 I- R. [$ C+ a+ t9 f&gt; data_test.getMonth()
1 c1 i5 {% Q! }( ~1
; `" K8 A! ~0 H1 v; X8 @& z& r// 获取完整年份" [9 F' ^  z% U& S5 h. O, U) x( }8 {! [6 U
&gt; data_test.getFullYear()! Z4 j: q4 A" `9 |) g4 J' |
20226 r% d6 q1 ~6 g; l* j4 b- r6 o
// 获取时9 |5 ^0 L$ S, @3 u9 H1 d0 I9 X
&gt; data_test.getHours()( ]6 Y# j. t( m! A# ]7 p/ x+ @
21
2 f, a' S/ t5 R- y; c  i/ T$ |% o// 获取分
& Y$ j/ w' @* y- {! v: x&gt; data_test.getMinutes()
9 X5 N! h0 i  z8 ~& P5 N: z$ d+ a449 v, [4 \) w3 r
// 获取秒% z6 a% k8 H+ O# G7 ?" A" f/ R+ m  p
&gt; data_test.getSeconds()
5 u! Y# _3 q& Y* R, V) B1 ~5 K43
0 m1 D1 Y; |0 ]/ y+ U( H5 A// 获取毫秒2 K. ?5 P2 W: y6 H3 w) ?+ C" R
&gt; data_test.getMilliseconds()
7 e  E2 m. q9 t2 {2 ]2900 B. Z1 E/ m2 f
// 获取时间戳
7 o. \: Y# |9 c! G" I&gt; data_test.getTime()8 C' M% c4 N+ u
1644587083290
7 t- `, O) l1 E' \</code></pre>
9 T4 N5 f, V4 V5 b1 _1 J<h4 id="282-json对象">2.8.2 Json对象</h4>
0 D3 w8 {+ M. q; p* x8 k6 d- ~9 I<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串6 z3 V( [, U  L2 E9 m8 E7 K
JSON.parse()  // 反序列化,把JSON字符串转换成对象- |' c0 I& a) n! o
' n; i8 n: x8 u( J1 a7 \6 r
// 序列化
9 v  @8 Y7 [' {&gt; var jstojson = JSON.stringify(person) % @4 k: ?3 _/ r9 {3 P! @3 z+ W
&gt; jstojson  
- @; k* P0 i% f, ~$ s'{"Name":"Hans","Age":18}'
  |9 i+ b* u+ S# W6 y1 _/ l9 A- Q% {0 U% z6 ^4 u, c
// 反序列化
- z1 {7 Q9 ~% _: V0 t9 j$ _% ^7 P) K3 o&gt; var x = JSON.parse(jstojson)
! M2 N5 d# M" R) x( R&gt; x
, C/ L- h) |7 G% a* u; w. R5 X  E6 H{Name: 'Hans', Age: 18}
5 j9 ?- g5 e+ k/ [/ l7 c&gt; x.Age' k, F" b1 @% T9 Z4 m$ |9 q
187 ^3 f9 {. ]. R& B. M
</code></pre>5 d6 @$ c* _# z; i$ L
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# J9 f* x8 v3 i8 Y; q<p>正则</p>
, f7 O+ U" G: P1 ]! q<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");" U7 J) i: o" q
&gt; reg1
. o* m! |. u! @* a1 k) b0 ^/^[a-zA-Z][a-zA-Z0-9]{4,7}/% n, [2 y" i( i6 S& o4 ?
&gt; reg1.test("Hans666")2 S9 J/ X( j3 t5 {7 c% [
true
; Q7 @; |$ V4 m2 O- J1 O+ D, `
+ n3 K8 W$ N# [2 s&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
" n. Y& k. k5 S: \8 E&gt; reg2' t! G3 F( m, t# J
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* e5 k" M" e: A
&gt; reg2.test('Hasdfa')
# ?/ D* \- ^- o, o( p& z9 [true
/ W% J4 i& ^! `9 ]
2 q! @5 X; b/ P  x, s' Q3 h- M全局匹配:
* I0 T' {9 A: _  B2 a1 o&gt; name
8 y4 {! r! y  s- O6 E: X'Hello'
- U: s* C9 T5 w- T4 ~3 Q( l# ?&gt; name.match(/l/)' x1 _7 w# i$ N$ Z/ T+ \
['l', index: 2, input: 'Hello', groups: undefined]' k: I8 F+ W3 R9 H' ?$ s# o( M
8 U9 e0 g$ _8 O, d) g& c- m3 K7 k
&gt; name.match(/l/g)( g3 E$ w- y6 M% |5 p( C
(2)&nbsp;['l', 'l']
: N/ B5 p& M  V1 O) e// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配0 _! E- H) q3 `- W. P# w1 G% w7 z

, s$ j7 q, U+ Y6 n! e5 d- _1 U全局匹配注意事项:# s; c4 ~7 \$ k+ o% s; a' j
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 h' B4 E7 p2 ?, C2 m
&gt; reg2.test('Hasdfa')
# x% G; f2 Q, b7 n  d- @$ [( ctrue
, N' `1 M( t2 V) y&gt;reg2.lastIndex;# Z  y3 T: T2 ]+ a& C+ n! E
6" v- B% ^8 {" D
&gt; reg2.test('Hasdfa')
+ d) @6 c3 ]% w5 u: w9 N- `false
1 ~4 P+ U, z8 k% v" k* N&gt; reg2.lastIndex;& S# G9 n& b- M: x6 G( L$ X- M
0" R/ l# x, W3 |) ]$ b) }
&gt; reg2.test('Hasdfa')
1 `0 ]! A, W4 h7 ]! }true. i3 U+ @+ z- a; M+ ?7 j- K  [
&gt; reg2.lastIndex;
8 ]' S8 s& I6 a+ R; x6
' `# J8 g9 M& t+ B&gt; reg2.test('Hasdfa')6 t3 Q0 y' {6 P, z( @- i8 v
false
( A5 Q3 p. y" z  h&gt; reg2.lastIndex;/ W! p- q+ B  [: i( I
0
, V0 p8 I- `# }  I3 A  {// 全局匹配会有一个lastindex属性
8 m0 |  P; F: t' X&gt; reg2.test()* e, R  o$ Q/ i1 J( k
false
: J5 {3 W' ^9 d5 R&gt; reg2.test()# V3 s: P, x) p4 R
true
; d/ j" G* e- g// 校验时不传参数默认传的是undefined7 V1 {( L( W& s+ K; j- d
</code></pre>
& Y2 f8 ^, ^8 s3 r7 k6 t" {<h4 id="284-自定义对象">2.8.4 自定义对象</h4>4 _; D' p3 Q" J! P$ Z8 \, k
<p>就相当于是<code>python</code>中的字典</p>
4 Y3 n0 W* W0 w6 |4 G4 N# |6 z<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 `7 c( n! G. d1 \* C&gt; person
7 _: o9 H9 o  l$ f+ b{Name: 'Hans', Age: 18}
: t8 E) B6 f4 y&gt; person.Name: T5 s0 I$ J% o/ R, [% }5 S
'Hans'
- \$ J& w! ~# ]/ g/ _" W+ y&gt; person["Name"]
, @0 r  [! G8 `" A" T: ]6 U4 U: L'Hans'0 a- S3 c& k6 x
1 z: [) j$ e( u; x5 Z5 i) y  R' T
// 也可以使用new Object创建
' T* z' u- q* X" [! K" O&gt; var person2 = new Object()! e- Q' b  F% |( S0 B9 P2 a
&gt; person2.name = "Hello": ]3 S2 N& Y/ X' x2 N$ k* t
'Hello'
# g' ^6 Z1 _6 U# z) T&gt; person2.age = 20% n& h1 r& R8 ~
20
9 Z: H6 x% U+ _" Y7 L</code></pre>
  c! f7 R* N2 f2 e<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>% {" {7 B9 y/ y  t- z; S
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
1 j% P0 [! B9 d, t<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>! e; {5 U. P' O  Z: q3 ?
<h3 id="31-window-对象">3.1 window 对象</h3>$ v" [9 _9 r; u( ?( S8 u; M' N
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
; M' `7 k8 s" d* r& l* o<pre><code class="language-python">//览器窗口的内部高度
+ F6 `; n* {  H, O+ |- `% owindow.innerHeight
, Z, K4 W) d. n3 d* C7 _( q706" i$ k3 k6 ^. D. Z% [' Q7 B7 n
//浏览器窗口的内部宽度% E& S0 |7 ], v8 A5 l
window.innerWidth
7 z" L! [; e. m1522- }$ t. d! a# K/ f) a, d" c* ^
// 打开新窗口
6 w8 [% P- g" hwindow.open('https://www.baidu.com')8 t; Y: n; N8 C( |: V+ R. _; K
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}; }4 s, n* |- V
// 关闭当前窗口
- y, g# b; g% a! A- n" ?& kwindow.close() ( @2 R. \! M6 R7 i7 r$ B. W
//  后退一页( L0 _! h& \- ?: i# ^
window.history.back()* i; `: q/ L  ^# ^5 s
// 前进一页/ O( a6 q2 t) g% i! E/ y2 y
window.history.forward() ' A. |, d0 O, i4 H/ g* g8 P6 D
//Web浏览器全称3 R( A& L0 p, @! |3 `4 v
window.navigator.appName
. M7 h1 `' k3 g7 m'Netscape'
1 I" b5 i. {+ c4 k, p, p// Web浏览器厂商和版本的详细字符串
" L) Y9 b0 v: }6 A" Dwindow.navigator.appVersion( `; B1 s: F) g
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
7 u$ p2 Y7 q! j  \  p' a. `" Z" p// 客户端绝大部分信息( ^' W3 W: x' `6 U1 L6 W7 ]- O
window.navigator.userAgent& e5 p* r" q2 l% k7 V
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
; |' S; H, z) q5 b6 d( ]0 l( N// 浏览器运行所在的操作系统# z2 q/ K& A# N% A. \! e9 O
window.navigator.platform5 j- f9 L- }* ~$ ^; b) R" q7 N
'Win32'
* \9 ~) H8 Z& v% S5 o; ], h. }( }! Y! U/ L2 l7 n
//  获取URL
1 A- U0 O6 g- r( J3 Ywindow.location.href6 c/ b9 P: F+ s& x
// 跳转到指定页面
% _4 W" z; g4 C6 R3 f3 N1 F9 V" xwindow.location.href='https://www.baidu.com'
8 Q, {8 I* U8 Y( E& ]1 d// 重新加载页面7 C* t; t+ h3 D- J
window.location.reload()
$ K4 J' \3 x7 @# |" e6 n</code></pre>/ V" {+ L* p, _; S
<h3 id="32-弹出框">3.2 弹出框</h3>! |6 ^# @- U& L0 k6 a  N
<p>三种消息框:警告框、确认框、提示框。</p>
( G+ @4 f* d1 T( Q& |<h4 id="321-警告框">3.2.1 警告框</h4>1 p. C2 c  l5 H  t5 q
<pre><code class="language-javascript">alert("Hello")
! m9 ?. o- u% f  ?</code></pre>
9 D( P) Z$ ?% ?/ l1 l<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
9 y& a/ y2 t0 }+ H4 h% R) N<h4 id="322-确认框">3.2.2 确认框</h4>. P2 d2 A1 u& u, D/ u
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>" i7 H# @- \* |* w! m, F! S! T
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true/ B  N& B$ f1 }; l
true0 r) E, F6 Q; x" b
&gt; confirm("你确定吗?")  // 点取消返回false) s% ]: h) l$ c7 j9 u
false9 G# k* F- {; o+ \) b2 j; ^
</code></pre>
& y) L3 g- P* T8 a9 W# V; ^5 {/ T<h4 id="323-提示框">3.2.3 提示框</h4>1 l, `7 v6 I' r% P8 i4 J& T, g' d
<p><code>prompt("请输入","提示")</code></p>0 W0 Y; F7 v. v0 V
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
8 i% _+ a5 {+ Q+ M4 V) c<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>6 M; f# e+ t: S9 Q3 d* l4 Y2 g- R
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>- P+ b! Q8 D2 S8 k
<h3 id="33-计时相关">3.3 计时相关</h3>
3 o8 i/ `' Y/ v; w# \9 W1 s& b<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
: M: e; U/ X8 T& }# @<pre><code class="language-javascript">// 等于3秒钟弹窗& m) t' X; T4 C6 c
setTimeout(function(){alert("Hello")}, 3000)( D3 |0 U, v: R/ y; K
0 q' \! z! F7 ~0 W/ {6 w/ k
var t = setTimeout(function(){alert("Hello")}, 3000)
3 h3 b( b6 H1 ]4 m& g5 T7 m; ]/ w( E" W
// 取消setTimeout设置" {9 @' T- q; J1 C7 u  [
clearTimeout(t)1 X, g% Q9 R8 F) O. r4 E7 T
</code></pre>8 a0 I& \* b& I) {& m1 [
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>0 a+ o6 i$ @( h+ h' [
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>3 G! L- e& v* r8 h% O0 }
<pre><code class="language-javascript">每三秒弹出 "hello" :
5 G; f" X; o5 ssetInterval(function(){alert("Hello")},3000);
0 b% O$ z# v5 M9 D7 z/ O</code></pre>/ _$ D  j5 @- i9 X: U+ C
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
+ P) \7 z8 \9 a, J3 i$ U<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);; `  T2 j) b( o* [* S% @* o& J( u
//取消:
* M2 f  a2 B9 V3 j1 t" k6 }6 B+ VclearInterval(t)
% ~! m2 V8 {/ ~+ I; A% ^0 V</code></pre>
5 J7 |% D+ y' x5 n$ P$ H- n; ~6 _& P) I, j
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-11-5 14:23 , Processed in 0.071444 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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