飞雪团队

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

前端之JavaScript

[复制链接]

8123

主题

8211

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26699
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
3 b: l" J4 F5 v. x6 Y
<h1 id="前端之javascript">前端之JavaScript</h1>/ o8 N! l0 ?4 P) z, `
<p></p><p></p>
. A/ P: s: z1 F0 I( w  g4 D, ~<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
4 g$ Q9 K" f0 M7 P8 p0 g<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>6 y/ A" P, M6 ]% y+ J7 [! ^
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>* s( G, m$ F$ x" R" w1 r( s6 w
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
! c+ ^3 Y  y- b0 n0 J) J3 ?它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
- F% i. I6 A0 B2 N7 s1 E8 a: v<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
. x& G6 @, x: [: F  t  _# |; l3 o<h3 id="21-注释">2.1 注释</h3>+ k% H! P! l2 {( @0 s
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>1 z/ d8 ~. S3 Q5 }/ `1 C
<pre><code class="language-javascript">// 这是单行注释$ w* Z3 v, Q( W" V3 A  A
: _0 h; b$ ^8 B3 D9 ~% E* X
/*
2 Z. |+ L6 l" i) g5 m0 P这是多行注释的第一行,
3 U3 t  g! q2 m7 k/ h- D3 s* H5 @$ m这是第二行。  U/ @$ w  G) Y& y9 G
*/7 p  n2 |) J1 P, o4 j$ a7 O: G
</code></pre>) k& ]! p3 T3 ~: g/ u. W5 s
<h3 id="22-变量和常量">2.2 变量和常量</h3>* t; B7 H0 N  L! _
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
* P7 V1 H9 s8 ^<ul>6 d7 G% C( r" Z! {
<li>变量必须以字母开头</li>
( [' w. L: M( l2 G/ ~<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
) m9 B! Q( w( x' b. L0 Q<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>( }) E( V# S$ E$ ^( f$ l
</ul>1 E6 m+ f' H/ u: E  w" d
<p><code>var</code>定义的都为全局变量</p>+ p! Q$ C9 |- [& g) T
<p><code>let</code>可以声明局部变量</p>- _$ C; m! U6 F4 y# M
<p><strong>声明变量:</strong></p>  t9 Q" v! ^8 e" [
<pre><code class="language-javascript">// 定义单个变量; Z* ?8 V3 s, w3 Y$ C/ d2 W! z
&gt; var name" {& R) E* t8 r; S2 q6 C1 L+ o! z
&gt; name = 'Hans'* l" e  U+ G( u* P0 f
//定义并赋值5 D3 A' |( S8 w* U
&gt; var name = 'Hans'0 O" \. ?9 `7 y8 T( Q) z
&gt; name
* I3 U3 a" L4 I1 V'Hans') {- e' `% h: ~: }

" n; L0 i0 _: W, O// 定义多个变量
# R/ J0 h7 _6 Q- k- \&gt; var name = "Hans", age = 18
9 u) R. f7 H, d+ `( M$ N' F&gt; name: [+ G2 V6 ~# F5 t
'Hans'
, r* v5 ~( `& w# C' @7 w&gt; age
* t$ a9 n- F/ w$ o$ g, @; j18
' @% E3 \( l, F8 `1 W! L1 F$ H2 `  c; n8 y( ^. i6 F
//多行使用反引号`` 类型python中的三引号
! O8 ]: }' E# o* b' |/ D6 A( [&gt; var text = `A young idler,
2 [. N% d- ~% V- N" x* M' c' Tan old beggar`* p3 `, f7 b. V) r; p
&gt; text/ o) v  H9 f  a4 n0 x- e4 o5 h1 v
'A young idler,\nan old beggar'& S/ q% ]7 T" ?3 X6 Z& w
</code></pre>2 r5 c8 O* c7 Q$ a+ H
<p><strong>声明常量:</strong></p>
2 N/ _/ M# f1 C6 ?+ p<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>9 i! u8 P$ O: e4 `) t
<pre><code class="language-javascript">&gt; const pi = 3.14
0 F  J3 |& I& ?- w( {# p+ Q&gt; pi
. j, z1 Y0 d% N- m6 H* f/ L3.14
5 |  x! f$ a0 {9 B&gt;  pi = 3.017 R2 |) i* Q! |% K3 V3 x
Uncaught TypeError: Assignment to constant variable.* w) I4 ?5 {* t5 H) Z3 b
    at &lt;anonymous&gt;:1:4
: @1 p* @# @  m! j( l. U
- \) O4 _0 b% Z# B+ y</code></pre>; m! J7 f4 z4 @0 O- M
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
/ w# X( E  u& f( q. L% l+ X5 J<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
# ?  K/ U# I/ C" l$ |+ B$ W<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
* H" k, A2 K/ ]3 ^. I# v* ]7 y5 O5 v5 |<h4 id="231-number类型">2.3.1 Number类型</h4>9 k3 b, L; @8 W+ z) U% N
<pre><code class="language-javascript">&gt; var a = 57 H6 T2 O5 t5 U5 V5 Z4 Y4 f
&gt; typeof a   //查看变量的类型  % t' A" V# j5 C7 r& q3 ?
number
/ B. g* d" T6 C/ x% D( J: ^0 z
( S' ]! @* k( ~( u( O8 `+ v9 q&gt; var b = 1.3
( Z) j- }" L, D# ^) c7 e- Q&gt; typeof b
4 u) i! q# P% \! R+ `6 e) enumber* p% `- v/ T, @' Y! ^; |3 M& L; h( j7 ]

  z* T4 x; E$ @// 不管整型还是浮点型打开出来的结果都是number类型6 j( C5 A) J) i9 {" `3 Z. R' {; ^

, ?4 p2 b+ \  k5 Y6 G! l1 y/*
% v  S  A- x% ^6 q6 eNaN:Not A Number0 R1 c# n# x! h, p) U1 Y0 V3 R. d
NaN属于数值类型 表示的意思是 不是一个数字, X: r+ P* a( @+ L  O
*/
8 B& I  P; F2 ?; @6 ]. F8 M7 C- n- P, J; A/ u
parseInt('2345')  // 转整型7 k# X$ z7 K0 i2 Y9 ~# X- e; c, Z
2345+ t6 `% O( I9 v) X9 ]) T
parseInt('2345.5')# i( d! y$ n  Y9 N0 w- v3 ]
2345
$ H) }" G" Y3 W! J* yparseFloat('2345.5') // 转浮点型
7 i& S( I/ u4 C/ n; b2345.5* C+ t( O% e! _
parseFloat('ABC')6 o/ D. l6 w% P. P- W
NaN( t6 M0 j6 M( n) ^7 U
parseInt('abc')
/ k6 E: l8 L- w% L+ TNaN; v# S1 l( D- e5 M# b! o7 @
</code></pre>8 y' g3 c! z3 L0 b+ ]
<h4 id="232-string类型">2.3.2 String类型</h4>
6 y/ y6 g0 @1 |* S. e2 o* ~6 c<pre><code class="language-javascript">&gt; var name = 'Hans'
. }$ ~' L' M7 a* o2 f' H3 _+ \&gt; typeof name: A* V8 M. M& r6 ], E2 y8 F" n
'string'
# P' @8 T4 i' `0 N& r
8 y, s- c7 E# R2 k//常用方法, m  w# Y  [: Y9 w6 K7 ?
// 变量值长度
4 @/ x3 K0 x" y4 j& T+ d1 f4 [&gt; name.length1 Y  j/ S! |- j8 E
4
% J8 Y( j7 ^; {// trim() 移除空白
5 [1 ^  v/ O! p&gt; var a = '    ABC    '/ E  N6 h: q1 E
&gt; a; H  H2 N) X2 [0 ]5 ~* I
'    ABC    '" \& P) d% y' t
&gt; a.trim()% a' y' O# w3 b3 _! N8 u: `/ g) p
'ABC'- }0 ]7 _3 X: i3 s' X% {/ R6 A
//移除左边的空白' f! U/ t% ]: v( r% t& j; e
&gt; a.trimLeft()
' _( Y/ u+ N9 F* D'ABC    '
% p0 a" k9 G8 g+ H//移除右边的空白$ I) k/ d5 R+ E
&gt; a.trimRight(): @* h/ V, G2 W1 T. n' M$ r9 J
'    ABC'
( s: d* i( ~7 j9 n9 X4 T+ e
+ j& P, C+ s" c: B3 k//返回第n个字符,从0开始4 G, G" r+ Q$ g' D! ~
&gt; name
& r; R' ?/ k( ['Hans'
9 Z$ f4 L0 t7 x2 t) n, u7 Z9 M* J&gt; name.charAt(3)" Q( l  b5 x( h3 \8 W# s- q
's'
3 a5 x! b9 `1 H- F( Z5 E&gt; name.charAt()
  W& G; ~' P* \  t. F" h9 D  T. v  E'H'
& U; {  B8 u% J$ M&gt; name.charAt(1)
$ V9 K5 }  s: [+ R- a* H'a'* g/ s" O9 Z, ?0 C

6 `( ]! h  c. @2 ^// 在javascript中推荐使用加号(+)拼接, \; I$ X; ~( Z3 d" c/ u
&gt; name5 Z( {. V+ h$ t: v: C' @' i
'Hans'  G$ O4 ~' W# ?' S" q
&gt; a
4 Q2 n  b  y5 X% D+ `'    ABC    '+ C' ~" n' v) R& e# }
&gt; name + a
% u9 a: t# a3 O% {4 E'Hans    ABC    '; R: G' R( r  q3 N: a0 c0 _
// 使用concat拼接: H7 `8 O% l3 L5 J& v
&gt; name.concat(a)# v# L$ }9 a- N- p( |) ~
'Hans    ABC    '
7 S7 w" E# u: s" [7 A1 i9 `! O7 B3 y# G/ M
//indexOf(substring, start)子序列位置6 i% R% K3 u$ @$ a' ~, z7 _7 N$ o/ s
+ `" W2 `7 l4 x/ E/ `+ e. }
&gt; text
0 U* `% q7 ]+ N' B! M1 b) |'A young idler,\nan old beggar'+ f6 n: _! t$ C2 p& |: h
&gt; text.indexOf('young',0)
9 T# y' ]. i- `0 V. K- t# i: `22 M1 b. a/ l' |) t* V

% K$ x" n1 v, y: C  x( l//.substring(from, to)        根据索引获取子序列& Q0 @4 A8 L( s' r6 c
&gt; text.substring(0,)
' f8 l/ k& K  a! j: @0 R, n+ y'A young idler,\nan old beggar'* `8 ^0 n. N& D
&gt; text.substring(0,10)
$ S3 {; }% t' T2 M% |4 e'A young id'' ?! U% e5 h  G
) T% W8 v# r8 s8 [; ~( P
// .slice(start, end)        切片, 从0开始顾头不顾尾. s/ j) d, V+ _( @0 w* m
&gt; name.slice(0,3)
7 M( @* o2 {( ]3 o; v  z. ?'Han'1 q3 U% [$ D. h9 |0 J5 }
' v! @7 J7 d3 t* b9 v+ G
// 转小写
( d- m0 r# t3 W1 M2 l&gt; name" d4 j- o' a3 \  }$ P$ ^' g
'Hans'9 b; e- L2 L0 B  B: k% A
&gt; name.toLowerCase()# B+ y6 ]& @  j- L* G9 s: ]
'hans'
: P9 ~5 [: H: k// 转大写
, a" i$ O( v  m7 X&gt; name.toUpperCase()/ U! n- s# Q/ ^0 \6 B8 n% K: C3 m
'HANS'7 ^/ x6 f0 o6 Y; H5 O( W+ G

9 M' I& R! r; X: s9 g// 分隔
& c8 q2 Q1 O5 h5 N4 J+ E/ g" l. Y# b&gt; name
6 u! B* Z* e9 c2 d  N1 k% F'Hans'+ g3 |9 k0 e. C4 ?2 d9 T) X
&gt; name.split('a')
' Z2 y/ n/ u+ e& D(2)&nbsp;['H', 'ns']  f" ~3 d2 D( w2 Q7 [9 J
</code></pre>
( i  N. y6 e! k$ i: ]4 U" t! w<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>$ ~+ z. G4 q+ I7 d3 y8 h  k
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
* i% l6 @0 K5 e6 a* c4 f- R<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>1 ]3 O  g0 j* x$ M9 x, s
<p><strong>null和undefined</strong></p>; x$ {. f# p- B& L9 `, F( U
<ul>" P. j" u$ l5 Q0 `6 e
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
8 f; M5 _* K6 D<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>( m" G# h) Z, I8 ~- [  k
</ul>
3 U1 J- y3 r4 l. M9 G6 m& J+ l) U2 n1 ^* k<h4 id="234-array数组">2.3.4 Array数组</h4>1 u. i7 ]1 Y& L8 r
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>1 Q4 J4 U1 m, F  X1 Q4 x
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
6 ?/ ~3 F& X0 k" k7 k. W+ B&gt; array1
! x, }- U! T+ N& A( k(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ t1 m2 a$ U/ C
&gt; console.log(array1[2])  //console.log打印类似python中的print8 f6 ^" [5 B( [0 N3 r* z6 J
3
' E* o$ @0 e3 x1 v4 @// length元素个数
0 s" G# x" T/ w8 _8 K5 L8 c&gt; array1.length5 R/ @6 v& I& L8 n
6. _9 C+ I7 H% i. g) d
// 在尾部增加元素,类型append3 X+ n7 W; T$ M. ?! ?( n
&gt; array1.push('D')
: \  Y( `2 N; b$ @: z7
3 [& l( d1 J2 y&gt; array1' {1 d6 q4 R- p- f6 {' |
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
8 M7 e) o3 A! b6 ^. H) u/ s// 在头部增加元素  K0 z* _  u" |# B3 o' m' |/ F
&gt; array1.unshift(0)  X7 C% ?/ U* y' T1 J. M# I/ H
8$ J, ], }6 d0 a# t  I6 t
&gt; array1, ]( D( m3 j3 H, ~
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']$ B5 g+ v% Q+ b0 p

" S8 d" `1 K" g: U4 l1 E& u//取最后一个元素
( X9 ~, `6 R& m2 l5 y. y% v&gt; array1.pop()
( k6 r5 m6 @9 H( ]) G! B'D'$ F9 t) O$ }$ `3 y
&gt; array1+ H, r% d1 h! R
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']! {) E' U; T( A5 m4 J0 }. m7 b* t
//取头部元素# r7 x" Y# e3 l" C0 w
&gt; array1.shift()
" D* D4 E0 r" h: C02 f" e% ]  r9 l" P3 ~" L- o2 [
&gt; array1& P% r3 p/ L2 G  @
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']) q7 f4 U6 ]! w; {
  I  G  S8 L% I
//切片, 从0开始顾头不顾尾
: c( [3 G6 A3 s' N&gt; array1.slice(3,6)  |+ L. |7 {" l/ _, m
(3)&nbsp;['a', 'b', 'c']
. j. h' P! j. _. d/ z# z- N// 反转
: N- \& z! h7 ]&gt; array1.reverse()
6 E1 n4 ?6 T; {1 K9 X(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
0 d$ e6 X* R" F& A# ^( G% X// 将数组元素连接成字符串1 v+ G1 \! u" z4 u, }" G5 j
&gt; array1.join() // 什么不都写默认使用逗号分隔
- z9 A. j3 _" ^9 G% E'c,b,a,3,2,1'/ l6 t% x. f" N* r4 \) n8 e
&gt; array1.join('')& d* [8 o( x* o# q9 O
'cba321'
, Y6 w/ K; p. p% ?& v&gt; array1.join('|')
4 ^$ z) r1 x" T7 Y: g8 I' \'c|b|a|3|2|1', r$ v) G& l2 N7 |* t" @5 U- q
# z5 o' c1 d! b) h2 t: ?1 N+ Q9 }
// 连接数组
7 D+ \! ]+ g$ e- }1 D&gt; var array2 = ['A','B','C']3 L, F7 H7 M1 w$ w7 U
&gt; array1.concat(array2)
" d6 S" |8 G! |0 p% T(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']7 q+ {! E  _% R, q
( M: m  \/ n" X
// 排序
# w( u2 |4 G7 j1 F; ?& W* s&gt; array1.sort()0 ]( v- W1 c/ }8 l" C, W/ B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% i) v! p8 \- X* j# B" d/ r: s1 I2 v) u$ b
// 删除元素,并可以向数据组中添加新元素(可选)
( ~) v/ {0 K7 O( T# K; L: j&gt; array1.splice(3,3)  // 删除元素3 u9 w. w) d/ ^5 f
(3)&nbsp;['a', 'b', 'c']
5 U% @6 |9 y1 L7 S5 m$ y7 i&gt; array1. Z6 e1 i7 G1 [0 A+ l# D. Q
(3)&nbsp;[1, 2, 3]6 c, W8 z5 w4 |5 f- a6 P4 ^
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
7 w' {2 P! t) E; O1 i[]; Y; w1 V7 q; z
&gt; array1; @5 }& ^% N+ {. S1 u$ E
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']& c5 h: c' D1 u
+ t  Z5 L+ o" J. `" `: X& ]
/*
" ]5 I; n$ H/ _1 }splice(index,howmany,item1,.....,itemX)
7 A% P9 o2 D/ C* }% A0 Z- b, g, oindex:必需,必须是数字。规定从何处添加/删除元素。
- t0 s- s( S" R' Q/ p3 H. f( Lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。  O: g) O1 v# `
item1, ..., itemX        可选。要添加到数组的新元素& D  g" B, d% P$ M. Z0 t
*/
! R9 @' E, x# V5 g/ T
/ s' B  J& p/ A) i// forEach()        将数组的每个元素传递给回调函数
2 s7 K5 z) n+ j( b* v( t2 D. i&gt; array1.forEach(function test(n){console.log(n)})
+ `, J+ m7 C- ~- w: K$ R% T4 ? 13 ]7 B, g; \+ }0 n, G3 b- X0 q
2
& n$ a9 P$ h  A% ^ 3
8 W+ N4 G% h, Z1 g7 Q A
& v) P) x* ]6 V  n( x# E" |4 N B
, n6 H, [4 ~5 s6 E& N" u2 \$ H& { C( W  b( m. @. \! ]8 R
// 返回一个数组元素调用函数处理后的值的新数组8 O' a/ A0 b0 Z1 }
&gt; array1.map(function(value){return value +1})' U$ n( D0 G" B& f& O$ A
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
, B) z3 d7 {# J( k6 ~</code></pre>
: R' M5 t5 U& u2 N8 k<h3 id="24-运算符">2.4 运算符</h3>
1 v1 \+ z$ q0 L8 L<h4 id="241-数学运算符">2.4.1 数学运算符</h4>6 K0 r6 x/ `4 M% k/ N' c5 T9 m
<p><code>+ - * / % ++ --</code></p>% D; f* v/ u% C& I
<pre><code class="language-javascript">&gt; var a = 6
  W# a1 G3 e5 g! e&gt; var b = 3
8 |( [* z  ?: g' ^) H# M// 加1 M$ P" l3 B+ f( }8 }
&gt; a + b& w7 G" d9 D9 J* U7 _0 k$ Y7 |8 _
9
, b. ]" G4 b' f! ]// 减. `" P& \, d$ Z# |9 p: B
&gt; a - b7 Z/ P, @; U, o( W
3+ }2 l' `6 X; L' H
// 乘& L! J& P4 K0 J: v* e
&gt; a * b6 l; h5 @' [! Y9 G
184 Z4 |# D: Z- h2 O
// 除1 R* i: E- e5 D
&gt; a / b
5 b! v( U( R: ^4 a6 x( w2
( F5 H% q& L2 a5 d; r: @// 取模(取余)
/ H  y; B- G) S&gt; a % b
. G9 D! x* |0 O) ^0
+ j7 I# [) L4 T4 Z+ i. E9 h// 自增1(先赋值再增1)
* }; w/ H# V' P1 |&gt; a++
  [0 w# w  f. ^, e& ^65 k1 }8 T# Z6 K
&gt; a. E& }; D8 {" A! v3 L5 {* a
7
  j' k# i( a! I0 [5 a. j$ [// 自减1(先赋值再减1)* V+ a$ x% Q1 x3 r. s8 p- R
&gt; a--0 F; ]  f+ ~5 {$ O- ]% c5 x# n& F
7- g2 _) Y& l- S0 H1 d* H, C8 h
&gt; a1 @! o: k% v. l$ p) I3 [% K
6
* x; U, y! H" x// 自增1(先增1再赋值)- b0 A! ?* F1 c  X' u
&gt; ++a
4 w# S+ D( O$ l9 l7
6 j' J8 H% z* Y// 自减1(先减1再赋值)
2 S6 i( b0 w% O4 Z4 \* j&gt; --a
' U3 |- J' X$ C' h# W1 l6$ \( [' ]6 P8 c4 `7 J& b
&gt; a
; C/ t( X3 Q+ }& ~( k6
/ ?6 |0 M3 Q: T; }" g3 X
9 p; ^: U' m4 }# t' }) m) m7 N2 k3 |//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理6 P5 e4 f) O  m8 J
</code></pre>4 W9 a, d* ^6 Y' \% N
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>; U+ f% O) t% p3 }4 s
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>* _4 E# z2 g2 V$ s* C- H5 y
<pre><code class="language-javascript">// 大于
3 O& n5 k' ~! _  e4 r. z2 }&gt; a &gt; b& K3 Z9 O" i* c. z" D0 @
true
% |( B* D: E3 |, o// 大于等于" z$ |: m4 h7 R/ z7 Q
&gt; a &gt;= b3 F; ]6 R; R% M: r1 ~* F) i- `
true
; T$ L( d0 H4 a( \  K* x" t9 Z// 小于
0 h8 [# V/ m0 _" R% o( a- B4 G&gt; a &lt; b
' m7 {% w/ X9 Q) Jfalse! Z$ v6 F9 `* B! s( f" {
// 小于等于; Z( Z* V% s! S
&gt; a &lt;= b
1 Z! }& A- A+ t- M  [' _+ [6 J1 Ufalse4 Z& V# X5 _  J5 D) v
// 弱不等于
$ Y+ L9 B2 I  |- p&gt; a != b( N8 G/ Z: u- u! L
true
: G+ q$ ^8 r, `' b8 Z// 弱等于
1 ^8 M0 {+ y0 O- T5 M&gt; 1 == '1'1 u  \2 o+ k9 }' J
true
, S& M8 U" i1 H9 S$ z. D// 强等于2 f. L7 `6 H% ?, R4 N9 p- w  ?
&gt; 1 === '1'
5 e  t& @+ j' V% O+ J$ sfalse5 u% W1 F8 S2 Y7 _* m7 p' G/ a0 J
// 强不等于6 a3 i0 d( g+ ?6 t
&gt; 1 !== '1'& W+ J' @( g9 ~3 U# y; z( e8 Q
true1 s+ j9 p6 T, ~  |5 N3 d; u# c

' n6 Y% Y& x1 J+ S/ K8 Z/*
1 n& f4 W. B- z5 v& NJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
9 ~- n1 d0 J$ E*/
7 W2 ~0 v2 c! b7 Q6 r</code></pre>: K- w' L1 J% O+ \! @. M/ s
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>' y! s" ~4 [7 B0 x/ Q
<p><code>&amp;&amp; || !</code></p># }+ q: \: Z( _
<pre><code class="language-javascript">&amp;&amp; 与3 _) y! ], D  u  u; a5 L- ]$ U0 d
|| or
, p' ^( O% ~" Q, c: w; N" s# c. U4 `! 非7 N7 o, P" p/ k+ s! {/ j. X) A1 t9 Z
</code></pre>
5 o5 Q: \# J; T: x; J<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>* x0 |5 R+ [2 n0 O; N
<p><code>= += -= *= /=</code></p>* N/ K6 E$ X2 V6 l+ h4 V
<pre><code class="language-javascript">// 赋值
) Z1 t$ e$ B/ c6 z1 ?3 j( V5 h8 `&gt; var x = 3
( i1 J/ [  f4 G// 加等于
1 B/ g+ u! D1 D, Z% S1 T&gt; x += 20 c1 u! h% e. J8 X% K" I; S
57 t& ?+ i# c( e4 c0 J" k
// 减等于2 _8 S6 F* J1 ?7 K. o
&gt; x -= 12 s$ v. ?7 u; }& h3 H7 `. }1 {
4
- v/ ^3 B1 q6 u8 ~8 q// 乘等于
1 I) P* L" L9 g3 t& }3 x&gt; x *= 2$ y# o) r" Z6 `# J
8
: ^1 Y" I) `7 r' n8 ^$ o// 除等于" k8 Z, E7 ]9 l3 p9 d
&gt; x /= 27 P0 P0 `& D* ^0 Q# l/ a2 O. Q' d
4
8 Q7 [2 E8 t" m</code></pre>
2 _/ t6 t, p8 M; i9 L! T<h3 id="25-流程控制">2.5 流程控制</h3>
6 A) |3 _2 Y7 p2 X. n/ _# j9 Q1 O<h4 id="251-if">2.5.1 if</h4>
: F, b& a  t) m; Q8 c  R<pre><code class="language-javascript">1, if(条件){条件成立执行代码}' d+ i! Q6 n1 z* u; X

' R8 V6 W8 x. X' |+ \- p2 u&gt; var x = 36 T$ d( h; t4 _9 }. I4 p3 ]4 S
&gt; if (x &gt; 2){console.log("OK")}0 a7 _* |6 j" r( c, P( D. S
OK' ]/ ^! a: Z& u/ g9 |- D& f" D
' w0 u& N8 P9 @2 h) K2 [% G5 U
2, if(条件){条件成立执行代码} 3 d' g$ K0 ?" U0 ~- b5 h2 }
        else{条件不成立执行代码}' o4 _4 J( O4 B% F" t3 Z

' \" ~) Z% {2 {- O&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
. n- v9 {+ x2 ]- D'NO'# [- a& R  q8 L6 p

! z; J6 C  X. @$ k& U3, if(条件1){条件1成立执行代码}
6 I, @2 `& F. {: F        else if(条件2){条件2成立执行代码}9 {( C" U* p7 L% P9 h: R
    else{上面条件都不成立执行代码}
; ]% ]3 Z  J  K* A& n% \
" ]" u% Z* z$ }&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
! G1 y3 `- {+ @; L! k9 _ Ha/ j7 _6 O7 ^2 H6 \2 M, E
</code></pre>1 q/ L' o- _9 W2 e
<h4 id="252-switch">2.5.2 switch</h4>
( B  ^) A. ?# y- H<pre><code class="language-javascript">var day = new Date().getDay();" k; M/ [+ c: D6 ^0 k& V
switch (day) {
, j* I7 M( o$ O  case 0:1 h+ s" j" h' k
  console.log("Sunday");: ~5 u3 u* ^' r% a  [
  break;) n" Q: f& Z2 m& j, i0 S4 N: T8 A, K& ]
  case 1:) N! H5 D4 h4 J& H
  console.log("Monday");
& Y; U% Z9 p: q1 Q# n. c3 Z  break;
6 p' ^, `. i7 Q% }) \default:) g5 ^. D/ q! w: z( x8 s
  console.log("不在范围")
/ a0 Q+ \; {- N6 M) E% V/ W: R" J* p}
& \2 u  K9 A6 B7 Q( `4 o5 O 不在范围2 y* D$ Z  s& K; E- Z
</code></pre>  y* H5 K* U! \
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>0 s% k3 v4 `9 Y* ^* G; e: y
<h4 id="253-for">2.5.3 for</h4>2 p  k4 o- S$ r
<pre><code class="language-python">// for 循环
5 K! \- O4 a  b/ \) \8 F# v        for(起始值;循环条件;每次循环后执行的操作){4 x; _" }! v2 ^
        for循环体代码% q) F; E- ^. w: {
    }
( E- ^1 ]/ x. S; t
; V2 {; y8 ^( |for (var i = 0; i&lt;10; i++){
2 i$ K$ s$ M- N) G- t; _% k0 }    console.log(i)
6 [2 |$ [7 p6 i2 R% y" I7 O2 U, K}% ]$ |9 V) R: k: `0 v7 z. R
        0/ u% Z. Z2 p$ k/ C
        1, U' _* l+ C" h- v9 Y) g
        2
. E( L( D% }1 O        3
; D; z. r% {6 {9 v" u( I) p        4
5 v" E# I! K$ d8 Q1 V        5
3 y& l, @* ]. `        6, G* M3 T; K1 K: N4 N7 ~
        7" h# p6 L4 S" u. h
        8+ T1 p' R9 ]+ r" [$ v
        9
& Y3 z& g5 j# _$ E* [</code></pre>
4 d4 h) v7 X% ?4 m$ U! }7 ~% i' Y. ]<h4 id="254-while">2.5.4 while</h4>  X. g+ r: d9 q' w- v) R
<pre><code class="language-javascript">// while 循环8 W8 M+ ?9 J2 d
        while(循环条件){! C0 ]0 C( I% d+ S$ \
        循环体代码
/ X, {* e8 [. i! {    }/ l/ v) x+ H3 q/ @& w3 C8 `0 ]
, |4 t2 B: c1 R+ q- a" l$ s
&gt; var i = 0) @3 @0 y7 `/ ^0 V
&gt; while(i&lt;10){4 _9 q% p) N6 t, ^- g7 S' i9 l; H
    console.log(i)
: C  s: N) u) R7 K. i1 f    i++! f, B# L* d* {! S7 ~5 b  L
}
1 h- Y4 ?+ U$ C( l 0
6 g% U6 n1 b3 u( d2 i3 ^ 1
" W' c: O+ C& V0 ~ 2
- c3 [( I2 I& e% o2 B( F! L 3
1 V$ x% i1 l# y% A  J: v9 _" P/ I 4" ]( i+ ^' T3 }" V! H/ _/ s
56 Z: D, _( q- v- ]7 |" F8 X
6
* n2 w: S; H( t: s 76 S* q4 ]* s3 ~8 Y
8
% t- q1 X, Y8 ?/ w& R+ b 9" S2 K0 I7 R% B/ m4 V
</code></pre>; k6 G6 N0 b% L
<h4 id="255-break和continue">2.5.5 break和continue</h4>& l0 E1 n3 [, y
<pre><code class="language-javascript">// break) o. v. w5 l! B7 l9 e9 |
for (var i = 0; i&lt;10; i++){. g# N7 D+ t" X  r6 {7 O' J& a
    if (i == 5){break}3 {# {6 b' O* w
    console.log(i)
% o7 ]8 N5 H8 a7 m9 B% T5 X}+ S! t5 v1 A) M( ?$ P0 Z# t1 ?
0$ E2 ^# R" O7 y
1: S% T" a9 [9 x
2
7 o9 A# Q  F; b4 T4 k 3
" a) S" ]1 C. q$ @ 4
% ]; D4 w' ~& D) G4 c& \' w// continue4 S8 d0 ~/ G# }. c/ E) A1 ~" A
for (var i = 0; i&lt;10; i++){
% Y. k5 L- E, D" d    if (i == 5){continue}1 @3 Y1 B2 H- B9 I6 M  n9 Y' ?
    console.log(i)
! l, `; v! \; A5 q}
8 f. E+ T+ z0 T4 W* B 0
3 y! Y, N; [3 r1 H  y% i/ F& R 1
  Z2 J2 G7 u1 r: Y# M  ^* K 2' e0 l( L3 G- J4 @+ S. C2 P
3
+ ]/ B0 ]1 h$ Q5 K# C1 L; d 4* r1 E) w9 q0 t0 |4 A0 p( C+ I) d
6
. H9 e; U# R5 s 73 C. }" E, G" a7 d
8) C5 h4 {1 [3 Y2 s7 }! e
95 I' j3 G7 A$ C5 s! S' `7 L$ ^5 b
0 f$ ?+ u3 J9 j  u
</code></pre>
/ b0 \% n2 p$ A8 Z; ?! z' R4 x<h3 id="26-三元运算">2.6 三元运算</h3># ^/ M" x4 _3 T" K  C5 I
<pre><code class="language-javascript">&gt; a
5 s8 B) b" W" D5 J% q4 X- I' f67 y0 i8 I2 e) j+ {7 Q/ ~5 N
&gt; b
4 M9 p, b2 v2 G3
( q" f& ?6 Z$ b8 H6 X) ~+ ~( x, k$ a' A% ?/ l; X% l
//条件成立c为a的值,不成立c为b的值
2 w# R' t0 f8 `: o& a8 S$ x&gt; var c = a &gt; b ? a : b% ?1 ]6 q9 G5 E/ ?$ x9 R; v
&gt; c
# l" W9 q$ l0 y# `, i  r( O2 C6
, q/ h1 V. v5 L5 K$ Z3 U9 X' F, O5 x' i4 Z
// 三元运算可以嵌套
, b$ ]4 R' K3 }! Q9 ?</code></pre>4 P- h5 p0 [$ U& \, k5 z
<h3 id="27-函数">2.7 函数</h3>  S, w3 [" ~  l: v5 m" A9 R9 f9 k
<pre><code class="language-javascript">1. 普通函数
2 T* t7 s  j3 s1 r' i3 X' i- f&gt; function foo1(){
" t8 B; j! w! }7 k    console.log("Hi")
8 _1 e+ k8 R# g3 X}7 K% T  e7 H: E# O- [+ C2 Y

, z+ F# X4 g1 s&gt; foo1()! O. ?) \& s3 v" g  V0 Z6 O
        Hi- G* S' \7 _0 c9 r
2. 带参数函数* o: u- O+ e% Q+ s4 v
&gt; function foo1(name){; b3 u& v) _% K' \, P
console.log("Hi",name). a! K. o# V  K" I' g" t
}
6 R' T4 {5 n: ~3 b% W# h' S: [# L7 u& f
&gt; foo1("Hans")
( W4 W6 [, v: B, ]8 d+ qHi Hans
# ?- M! G; C5 n! `0 d' [3 a+ h6 J& x6 L
&gt; var name = "Hello": y; l9 C4 }- |$ W) K
&gt; foo1(name)
# {( U+ Y% H+ d, [9 \Hi Hello" D/ M& E  r+ n9 a& Q
. ^. ]5 n- u% M' R
3. 带返回值函数
0 g5 r' o* ]% P&gt; function foo1(a,b){$ k, e) A- q+ ^+ |
        return a + b   
' @! `2 |$ `8 Q$ |/ |}
; d7 o" X/ E4 U" M7 H& V&gt; foo1(1,2). G8 E+ _0 N- E2 |6 W
3& e2 B  L5 `# n- ?" H
&gt; var a = foo1(10,20)  //接受函数返回值
, C7 }! N5 \1 }; c* }% i&gt; a
. {0 I; s; x  a30
2 f: C8 _: `: k( m. C) I* a% G
& Y0 F9 V. m, _5 l7 i( ^* W4. 匿名函数
7 N8 ^1 ]+ z. b9 K7 |+ w3 E&gt; var sum = function(a, b){- |* D. y/ t, U# W$ D. D$ U/ s9 ^" k; U
  return a + b;. l' H* V- {$ T7 ?$ t
}
# m# q: _( u2 ~) x1 P$ N&gt; sum(1,2)
* y" f5 z0 X. }$ ]6 Q3
9 a. l0 `/ H0 e7 g) A4 {, b! ?
" S8 K$ ~7 X- z# f' H// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 W/ i0 \! X: O) D# M
&gt; (function(a, b){
8 B. v* X  D2 K$ \6 b$ _  return a + b5 e# H1 {4 @( `2 n# r
})(10, 20)
2 ?7 ?8 E; Q. x8 O7 f& g( a- i30
4 ?7 }4 ?7 ]$ u) r$ ^2 i1 @( x4 Q+ Z( t9 m; ~
5. 闭包函数, T" U/ m" S5 J
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数# t/ c- j7 x+ \! _
var city = "BJ"' U4 D& E. P. \6 B( o
function f(){
# k: z+ I5 F7 k# q! Q) b    var city = "SH"
: }0 {: [; L2 C. X/ P0 K    function inner(){7 y3 `8 P( F4 W1 O) B# F/ }, A
        console.log(city)
' s8 f7 U$ e- R3 W2 z- a    }
5 w# ^" @5 m& p. `0 J    return inner+ _, `0 ~5 g; A, d, }7 K; c5 o. w
}5 V9 }) ~: d3 ^, G0 j) K
var ret = f(); c0 [' K  Y7 q: k
ret()& x2 ~8 I& ~3 `  J$ H/ T7 r
执行结果:1 F: s  }$ a2 E8 g) R& H
SH
( i+ L$ G: |, V  ]4 [
7 h0 H% a2 s4 H. z" \</code></pre>
% ^( p; v/ {; p6 n' U" P, n<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>! Q, g0 ^7 J* f/ b8 M9 N
<pre><code class="language-javascript">var f = v =&gt; v;
  w- Z- k; e* D, u; u: q- e! E5 q- c// 等同于/ i; S5 H- |- V+ b
var f = function(v){
: k" g1 j/ b5 _$ j  return v;% `! Q: s# E# k. \* x
}$ y: g- B1 F! y  h. L/ d
</code></pre>8 W3 X* e0 q" J4 Q
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
; E* k3 E- f2 g+ Q9 N* O: \<pre><code class="language-javascript">function foo1(a,b){" i- Y9 p3 K9 s/ E
    console.log(arguments.length)  //参数的个数
1 f& U. B& C0 U4 @9 s    console.log(arguments[0]) // 第一个参数的值+ B: v& W' p; D) x& ]5 W% f) q$ n' t
        return a + b   
! L4 w7 n1 g: |- a: j$ J' e}; \9 W2 N' G8 R- N) i
foo1(10,20), A& s* d5 S  Y5 |
结果:
8 A. x. [: I+ m' Z 2          //参数的个数
& C) z( u4 D, B; L  n2 P10        // 第一个参数的值; c$ Z- @. G: t# y: b
30        // 返回相加的结果8 Y3 Y6 G) ^( D& r2 y" x- a1 V, }, h
</code></pre>
1 I( Q, e$ T' }8 W<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>9 a/ Q/ ]/ t% E' w1 ^" Z
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>7 u* w3 B/ ]' ]' \! @
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>* K; {+ T# k! i) b+ b- Z
<h4 id="281-date对象">2.8.1 Date对象</h4>
* F  F/ R9 P/ V2 L2 X<pre><code class="language-javascript">&gt; var data_test = new Date()1 \2 Q# ^/ R# Z' n5 w. ]
&gt; data_test
6 B& ]% t. G0 z  {  o( B9 j$ dFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)* Y- l+ q3 l& C7 I$ m
&gt; data_test.toLocaleString()) C. w+ ]' A3 ?" F& E9 a0 M  c2 d
'2022/2/11 下午9:44:43'
' C" |; V1 L8 v' v1 A
$ C( w6 @/ Q) d4 H* O9 O; A' q  @3 d&gt; data_test.toLocaleDateString()
. L( P5 o5 I  k0 x. i6 I2 F, T'2022/2/11'& t4 ]- w# D9 e* m

( t+ j5 f2 r* x  W/ H3 k&gt; var data_test2  = new Date("2022/2/11 9:44:43")
( t, A5 z7 G( E4 i&gt; data_test2.toLocaleString()
& b6 \! ~0 H; C  W! l1 N'2022/2/11 上午9:44:43'
! I& j+ ?; U5 m% o* Q4 G& a3 P2 R( O8 x; i& {* i8 K: I# Z* v
// 获取当前几号& L3 o2 n. g! O3 z  J% @) u8 E
&gt; data_test.getDate()
* C& I. _6 _+ Z3 _" }5 w5 G118 j, x6 p  m; D* r6 |
// 获取星期几,数字表示
, G# Q+ M& e3 ^0 M  \$ a6 ?0 \&gt; data_test.getDay()  $ D. p- d6 f9 p7 x: s9 {! q7 F  n
52 L1 i# }7 L" I- g* m
// 获取月份(0-11)% R: |2 a1 g: s2 v2 U
&gt; data_test.getMonth()6 b4 P1 A; S7 d$ a
1
, Z$ S1 z8 ^6 S+ _8 Z7 ]// 获取完整年份
2 D1 G( b9 M, S2 T&gt; data_test.getFullYear()
6 V. D7 ~( f) C: j! f0 v9 x2022
' g# `+ m. Z( [; D// 获取时  C. m/ u8 j9 E6 N, ?$ h
&gt; data_test.getHours()! v5 m% p" e, _$ @; w/ r' l& @+ M* G
217 ], Q: _9 j& d
// 获取分: M) Z% B) M* L* v( i6 E
&gt; data_test.getMinutes()
+ `* @7 _# |! x; S+ G* M! I44
" B2 p' a4 ^; v: v% ?* k// 获取秒
8 L  Z( }$ F: G( D# @4 D% l&gt; data_test.getSeconds()4 Q/ u( W" t- g
43
" \1 }; I' Q1 q// 获取毫秒* g  X/ u, h  x( _; C$ l- ?- I. J
&gt; data_test.getMilliseconds()- E! p! |2 @6 b, O9 J
290
1 a) ]( @! C3 q8 c$ U// 获取时间戳7 o% v$ p4 s0 G3 u) z
&gt; data_test.getTime()$ U& l9 Q7 b- f6 S: C* m
16445870832900 P. P- L0 o% e0 j3 Y" V2 X
</code></pre>
, ?. [6 I/ F" u4 S# }<h4 id="282-json对象">2.8.2 Json对象</h4>6 P, G: D- A* Y; d. m% v
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串$ y% c7 S8 T9 _! R7 M  S( w1 t
JSON.parse()  // 反序列化,把JSON字符串转换成对象
  e  q: R; X! F- u; z# g9 z0 Y! c( }/ \% x
// 序列化# b/ P2 `7 w9 ~; }! w
&gt; var jstojson = JSON.stringify(person)
) j3 h5 ]) j' y2 o&gt; jstojson  
8 y( f7 c6 c1 [+ _. i'{"Name":"Hans","Age":18}'
8 l, K3 S; s7 p8 Y8 p' I+ y  w2 q1 n% Z$ U0 B, d  Q
// 反序列化6 V  [! u6 M$ b. V
&gt; var x = JSON.parse(jstojson)6 L6 S8 F( l5 g) {6 F) x7 `* s
&gt; x
7 W3 {. |+ s2 Z, s{Name: 'Hans', Age: 18}
0 o4 l, b0 U* u' F" \& T1 U&gt; x.Age4 w2 X, F) a* j+ r: o9 w& T
18
( B8 _5 i; }: D% Y" N</code></pre>: l9 H$ Q- e1 X, s; u
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
( k% k# J" b; W* m( p  t<p>正则</p>
$ Z0 q$ z2 D* ^. ]: r2 }1 ~<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
' `6 d5 Y0 f. o* B6 m+ I1 F0 r&gt; reg15 [1 {. {4 O* s$ C4 D# m
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
0 }6 t( y7 B- N7 L! ^0 p+ v' F# h+ v&gt; reg1.test("Hans666")
& v/ T5 n& _) \6 M3 {( K+ ctrue
  B0 z% D4 e( Y0 L* L9 D6 C% n, g3 H' [# U
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
% v* n% E# m+ l6 J/ k% ]8 F  q&gt; reg2- o9 p0 G1 s& P
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- g, X3 G! L" I2 ]8 L3 ]2 N&gt; reg2.test('Hasdfa')
( k3 v+ T! k6 Etrue3 E& t8 b5 g5 E- e4 U
/ ~7 u. W% }' W# ]
全局匹配:
, U' J$ `+ \' T: H&gt; name, m" h+ O. m( `: p$ u6 N1 Z& ~
'Hello'
- K2 a# Y- I$ C9 F6 t&gt; name.match(/l/)5 D, @( {5 `) J$ T
['l', index: 2, input: 'Hello', groups: undefined]
5 m7 U" c* P+ u% J3 }" z$ X; d5 O5 j8 G
&gt; name.match(/l/g)) Y4 ~  c9 l( ^* z6 G6 z; }
(2)&nbsp;['l', 'l']  m2 g4 A& \2 G- _+ T
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配" T; o) L: \5 g! v9 d& K$ `
7 @6 f) o- Z) o6 R; g% k
全局匹配注意事项:
1 d4 C- Q0 W. ]! Q' R&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
3 ]0 t# Y. t% Q&gt; reg2.test('Hasdfa')
4 R8 j$ c9 c9 `3 xtrue
8 A- B) K3 U5 J3 S) _' @# z; l+ p&gt;reg2.lastIndex;/ P3 L- I! v1 y! l1 p% Q
6& i& f% @$ q( y, R2 Z# G0 b) L
&gt; reg2.test('Hasdfa'). ]  ]& o5 R9 F% |
false+ @- x) w' W9 H  s* n
&gt; reg2.lastIndex;. E/ ?5 j& C# t. }
0, ?  R9 I4 a( q$ M4 A2 e( h
&gt; reg2.test('Hasdfa')0 e0 c. T3 E! q
true9 t$ }( e9 L! Q# `, \2 T# B  S$ q
&gt; reg2.lastIndex;
( a  q; q8 m  L! H. X/ d6
% {! t- |" @9 x&gt; reg2.test('Hasdfa')" H3 `( d5 {+ L* e2 \
false
* T" S# \* D+ i1 M&gt; reg2.lastIndex;
" w0 Q8 L1 k2 Z: K9 u) |01 n# |6 Y* r' E- j; u+ V
// 全局匹配会有一个lastindex属性
- }8 a0 s4 x$ Q; C* N: l&gt; reg2.test()
2 I. x* m2 r+ n" ^! p' `false
$ p+ `, g5 t' E# |) a4 N&gt; reg2.test()
% A$ }! ?$ K( b1 mtrue" G1 s# W! T8 @% T; i
// 校验时不传参数默认传的是undefined) t# s. R0 S2 o' z
</code></pre>9 W! D" g* i; }
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>" |7 P) n" x# c5 B
<p>就相当于是<code>python</code>中的字典</p>' U1 k! r/ t9 b7 W
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}4 [! I5 w" G5 c* i( D5 _) k
&gt; person
6 M1 r6 x! ^3 }{Name: 'Hans', Age: 18}; {( w& s. j% T6 [- J( {
&gt; person.Name3 e* H4 H  c  N+ n% Z9 c
'Hans'6 k' h* y2 A( @
&gt; person["Name"]
$ {, u: |8 e" a3 s- L4 p'Hans'0 d4 I& O. v# e( G! Q6 G
! F5 E5 S7 Q( N
// 也可以使用new Object创建
$ q4 l5 ?0 P: M&gt; var person2 = new Object()* Y/ o2 _6 T8 o$ j
&gt; person2.name = "Hello"
. R( G/ f6 n5 r! ^'Hello'# L1 k% ^+ \4 ]5 P6 Z
&gt; person2.age = 204 A+ l. t& g, O" Y0 j9 f6 u
206 f$ l, f8 z9 K7 E. |3 O
</code></pre>
3 `( B2 K; j0 N8 |7 X0 a<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
( v' c+ e' J) ^- Z0 l& u7 F: K<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>7 Y% z' ]5 h- `% _6 _2 b
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
4 c: F5 f# }( I9 k$ ]0 ^* J  X- L<h3 id="31-window-对象">3.1 window 对象</h3>
* @2 u, K0 o3 z' D- B* v<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
$ J" a) x% E3 Y: q: d9 z<pre><code class="language-python">//览器窗口的内部高度, z: \/ u. d- D
window.innerHeight % p4 [% a- E3 E
706: O* O4 F' A; q* u1 w# N6 ?+ H
//浏览器窗口的内部宽度
! I* [8 j2 m) A  E" U( {0 `+ vwindow.innerWidth4 \& T4 j) w+ u
1522
1 x" Q2 Z$ z4 R// 打开新窗口6 [  ]  I; p0 T
window.open('https://www.baidu.com')
+ K) [6 [9 K: Q# [0 P$ M+ LWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
) E- ^( D- D; v// 关闭当前窗口4 u. U& r2 k' u7 n
window.close() 5 A' ~0 Y) h1 t+ Z4 c5 f
//  后退一页
  V) T, i5 \( J, U* ]8 H) L* twindow.history.back()
/ m5 H. C5 `5 O+ s+ m! S/ I7 C// 前进一页6 C  U& `3 }0 W1 n0 a& E
window.history.forward() 5 \9 q8 o4 c: H2 y
//Web浏览器全称
/ O* K6 z) \, x  ?6 U, M2 Qwindow.navigator.appName
: B8 K3 V, J6 e. P1 L. U, e+ M'Netscape'
: O* x5 `8 T( [$ y6 y$ Q% H2 J// Web浏览器厂商和版本的详细字符串
9 s) v. V# R2 ~window.navigator.appVersion
$ N5 ~8 s8 V! ?: i0 q'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ y. u* d( |4 w: W// 客户端绝大部分信息
8 ?% B: m5 }. awindow.navigator.userAgent4 u  y2 a' [3 r5 `3 Y8 W& l
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 c$ i; u. Q% i; o, `7 F7 w
// 浏览器运行所在的操作系统
# d: B3 }! i/ p% @) U% |8 |window.navigator.platform, X1 x  u/ b: Y$ l; }; V) v1 Q
'Win32'
/ z7 C7 ~- `" ~! P2 ~/ W  X$ I* n0 T: J' V& r2 U* `0 V7 U
//  获取URL
* U  _; q- ^% Cwindow.location.href
" O2 q0 l$ R6 w5 v& V7 K+ d9 j// 跳转到指定页面
) x4 F9 x  M; w: J9 @4 K3 q( K& s1 Rwindow.location.href='https://www.baidu.com'
% q$ i' n& g% ?) g, V  w// 重新加载页面5 ^5 R8 T3 q% L
window.location.reload()
5 ~( T5 u! o/ w! ^' g1 N! O3 J" m" }</code></pre>
# K% b( ^! ^: u4 V( S<h3 id="32-弹出框">3.2 弹出框</h3>
! g3 U& n! A, F$ j& e<p>三种消息框:警告框、确认框、提示框。</p>
) s9 R) E; m) o2 B1 @5 M  @<h4 id="321-警告框">3.2.1 警告框</h4>
" t) J- {  ]  i' @- T* W6 t: o<pre><code class="language-javascript">alert("Hello")3 X. O6 q# G  s0 j5 D! G! ^
</code></pre># h/ h! \/ Q: S8 B/ l% Y& O/ |9 |6 i( X
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>  \- T" r3 i2 E* o" d" N
<h4 id="322-确认框">3.2.2 确认框</h4>
4 G2 A% z4 i! T, g<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>% B# Z2 `" g9 E* L
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
- u0 y+ U) |- L2 f7 o, E' {true
9 `& ^; t3 Z) {$ m( B4 A: S&gt; confirm("你确定吗?")  // 点取消返回false
( m( s, t: T" m& H/ @, \; w& _; lfalse
. z. m: F2 W$ @" Z( @</code></pre>, g( z* ?$ r2 }* x
<h4 id="323-提示框">3.2.3 提示框</h4>
  x# G1 m3 c! S; L<p><code>prompt("请输入","提示")</code></p>
/ M  X* m7 w$ W' i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
  z/ |/ I( ~$ {! r* ^* S<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>! j; J! M+ ^# {! @
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
* B' r9 t% ?* M- p/ ]  f<h3 id="33-计时相关">3.3 计时相关</h3>+ W( Z7 C& k% Y% A' w; n. x
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
+ ^3 ^7 O  C: z% I0 e<pre><code class="language-javascript">// 等于3秒钟弹窗
" |9 q  d( C# msetTimeout(function(){alert("Hello")}, 3000)2 ^+ Z0 B( @& O6 J
$ V! y- K: F6 ?3 |" p& Y
var t = setTimeout(function(){alert("Hello")}, 3000)) x+ o. A! C) T+ y2 y

2 e4 k; c! U6 e+ j' g- V9 \; c! |5 @// 取消setTimeout设置. \. N% P( J: n1 Z4 s
clearTimeout(t)) j+ ]( y- [! Y$ x2 _2 Q
</code></pre>
2 u9 I, B. D) p" a  \: T<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
8 u9 U/ V, S+ ^: D3 p8 F) a<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>9 n# e! \# {* m- i: j2 [8 J
<pre><code class="language-javascript">每三秒弹出 "hello" :
# `- r. j/ M/ Q/ a  Y* psetInterval(function(){alert("Hello")},3000);
4 g* `: T9 |: v: ?& o: x0 ^; U</code></pre>
. h* S& R# i0 i( v! T3 e( u- i<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
' `& |$ d, v6 F/ m5 _<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);* j# \2 k, R1 P& |
//取消:
, u# X8 l, S" X1 @8 |6 bclearInterval(t)
0 C* A: \1 d& i2 H/ z( r: D</code></pre>
  C7 L$ Q: }5 e, ]3 L% a3 t# I' E: j- e0 Y6 X# J& T
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-24 20:59 , Processed in 0.072245 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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