飞雪团队

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

前端之JavaScript

[复制链接]

8115

主题

8203

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

7 Y4 b: q  _: I% ]8 t& ~<h1 id="前端之javascript">前端之JavaScript</h1>
! x4 y* ?7 t6 Q0 u) @5 |" [* J2 m3 W<p></p><p></p>
  a5 c* I9 M. g5 V' c<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, l4 u' k! L$ E( |) L<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
7 _( r% V" I1 S) J它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
5 ~# n6 x  _) G; D6 r0 ^4 S% {: o0 @它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>9 E! U' _# j; s" a7 m
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
7 u* B9 ^$ y" Q9 G<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
) \: s( p! Y2 {* p- f8 {<h3 id="21-注释">2.1 注释</h3>7 Q7 c/ g: g7 @' F! f
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
5 ~% ?' m" F9 c! X2 j' \6 [<pre><code class="language-javascript">// 这是单行注释5 `2 E# v$ t4 t# c! t

- r& C7 _6 _8 J& @/*  n# B( U1 W' N' d5 E
这是多行注释的第一行,( c* \7 {3 m' Q' i4 o$ n( K, b! V* u
这是第二行。) M# K  t1 A$ S5 x2 D8 x
*/: N2 C9 N. N+ X4 k* X6 s
</code></pre>' `% O/ m: \- J
<h3 id="22-变量和常量">2.2 变量和常量</h3>
5 c/ l1 a* }9 Q; Q& D5 J<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
+ V! F: l+ k6 n: k# r5 y; [<ul>9 A; C8 u% p: w" K7 S
<li>变量必须以字母开头</li>
- J6 T5 o1 _$ k- s. n; `<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
) f. u% A2 f2 o$ u. Q<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
! }$ |& G7 ?1 v: S3 @/ _8 }; ?</ul>
9 _# M& j! f/ z- @4 V2 M6 ~6 a<p><code>var</code>定义的都为全局变量</p>
; e( K* ~1 d; M<p><code>let</code>可以声明局部变量</p>
- a) E$ J; O% q" k; [* r1 u' U0 a<p><strong>声明变量:</strong></p>4 Y2 ?. [$ o" h1 o5 w1 T0 F
<pre><code class="language-javascript">// 定义单个变量! Z/ H; z# A2 @3 c* x, c
&gt; var name+ Y- X; A2 |2 N5 V. g( V
&gt; name = 'Hans': N* B, ]8 o# l; \" w* \( |
//定义并赋值
. @0 f$ c9 Q) g9 ?4 C1 ?7 o3 B" {&gt; var name = 'Hans'
+ R7 ~* [- S# `" s! b&gt; name. w/ W! Q4 S, t; u6 H! H( F0 e: O
'Hans'9 d/ V( ]" E/ B1 I
4 x2 Z8 m( k3 C. x6 I/ P* Z
// 定义多个变量) [2 e# F/ L! X1 G0 n8 [/ ~" [
&gt; var name = "Hans", age = 18
/ Y& s4 d. B( Y% J% \7 v+ e&gt; name( X: S! s# o* T
'Hans'
' u! Y1 U6 M$ A+ m4 n- F( P5 s) H" ^&gt; age
3 H3 G: Z# K- O$ f1 b0 p; H18+ Y+ O* v. g7 E, D$ \; x0 m$ s* S

: O6 {3 |& m) X0 f' [* k) b6 `//多行使用反引号`` 类型python中的三引号7 g9 B8 l; I# l
&gt; var text = `A young idler,
1 O, b! {: ]8 B) Q# ~& s8 Ean old beggar`+ G# s* {* q( S6 S$ d
&gt; text6 {- N3 @6 _9 o
'A young idler,\nan old beggar'
6 w: s- E  x( P</code></pre>8 ?/ Y: S) L; @: p. g/ v& D6 D
<p><strong>声明常量:</strong></p>
8 k4 n# O; m" v3 Y  }<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
( F5 P; `9 S0 E4 u$ y<pre><code class="language-javascript">&gt; const pi = 3.14/ C7 h' ?8 y3 H! y0 b( e
&gt; pi- p  U8 B% Z4 b2 _; Z2 |
3.14
: W% X) k3 [' L2 o4 q/ c7 b1 g&gt;  pi = 3.01
! X* c% t% d+ `7 ~8 kUncaught TypeError: Assignment to constant variable.8 r; w( C3 ]  l% L9 @/ p0 }
    at &lt;anonymous&gt;:1:4  _- k2 j# d; s4 A! u5 T/ y4 q

  B* Q1 Y9 Y& i: \$ ~* X/ Y+ U</code></pre>
6 I: Z! ?7 B- `% [% N<h3 id="23-基本数据类型">2.3 基本数据类型</h3>% R3 L  K7 V; D. i. l5 q. Y% |, |
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
8 B6 d5 Y, F- r7 C<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p># v4 }2 |# x* N" K+ X
<h4 id="231-number类型">2.3.1 Number类型</h4>) \4 l& @6 {: V5 G! u1 E) u/ y
<pre><code class="language-javascript">&gt; var a = 5
. V4 L  s% c% @/ `&gt; typeof a   //查看变量的类型  : q8 I+ d# K7 z+ c' ]4 c' i
number
+ m& s7 z0 A* O2 f8 X: H9 w/ F, j5 _: h3 s: `% g
&gt; var b = 1.3# x& p2 ]9 T1 G/ G9 ^9 n3 c
&gt; typeof b
# i/ |9 v( Y8 b( X4 D, bnumber( D5 t+ l# ~# f2 t& F

$ N9 x" j3 K7 _4 ^  y+ |% s// 不管整型还是浮点型打开出来的结果都是number类型  c; A2 E3 ~" I2 T( e

" P" J! |" B3 {+ W/*8 f7 K/ B( D$ P6 t8 J0 `: `  c# |
NaN:Not A Number
! `* F# i9 `  y$ H4 m* XNaN属于数值类型 表示的意思是 不是一个数字- A4 v+ Y9 ?+ e" d" G1 n. \
*/& m, x$ o: F) o1 a" p+ p; k6 `# n
6 a# @6 L* @0 i- _9 p" E
parseInt('2345')  // 转整型
) `6 H' D" `' \1 {+ X; |1 {2345
; h" M7 x1 H3 e. t/ l6 J5 P% p* n( @" fparseInt('2345.5')
1 _6 g, O' a( E- O: _2345
8 R  V, l, i) a/ W# `7 a& v3 `parseFloat('2345.5') // 转浮点型5 X3 N+ f& @3 |; p: d- M' `/ P3 J
2345.5& {  X' A8 r6 w
parseFloat('ABC')3 h1 u$ [$ k8 K% ^; v" v
NaN, l* P! {) Z& I' t; i
parseInt('abc')
! N: s* o3 W# ~6 g& _" HNaN5 I" |; s$ }9 Q% |" g/ B0 o, g
</code></pre>
; \+ H9 l4 p$ o8 k<h4 id="232-string类型">2.3.2 String类型</h4>; \4 c: f% S  Q+ d* y# j+ j
<pre><code class="language-javascript">&gt; var name = 'Hans'- l$ P  k& A4 U* _
&gt; typeof name# D  P1 b, z" v  j
'string'
% U. g7 {) U! p- O$ e: i& f, h7 N0 v0 w7 `  `
//常用方法
$ N8 v, B$ J! X3 P$ `// 变量值长度+ P, z) u! X7 S
&gt; name.length6 P+ u  i. B+ C! k+ R1 l
4
5 a2 T. O( {# \: d2 ~/ p: ]// trim() 移除空白
$ N3 ~/ i/ X% o9 V! V2 P&gt; var a = '    ABC    '
- @- d* K+ t* F# X! `; w; `6 n; q8 X&gt; a' V3 ]9 ~0 u8 S9 [
'    ABC    '* Q' Y' y4 o" t2 p  U* H
&gt; a.trim()
/ j: n( y( c0 e2 u9 I* q" L'ABC'& g8 _. N' `# z9 w* Z2 y. c2 ~
//移除左边的空白) k9 c$ ^) {2 E. f
&gt; a.trimLeft()" @, r2 }) i- b" \* n: R2 _
'ABC    '
! l9 E; }. N& ~& V3 @, [//移除右边的空白
7 v0 O- ~3 p+ k" u# I&gt; a.trimRight()5 t& u0 Y: C* V7 d+ B/ Q/ a$ M
'    ABC'
; A6 y; X( ?# n2 g* r; [5 a
# ]% c, I, Q) P5 P; A/ H& E) A//返回第n个字符,从0开始, k! ~4 x) K: U2 n
&gt; name
* X) z# T6 T! B9 v  e$ v; b'Hans'
. V) y- [% l2 G( U8 x( b&gt; name.charAt(3)
( _1 |- m8 y( {5 _9 E. O- q( x's'* g/ [3 @: f1 M+ A- B5 K% w
&gt; name.charAt()
/ ~! D3 I5 _- }' I3 L'H'3 o- `; G! v( l! q( y
&gt; name.charAt(1)  ?: k; @) i/ J7 L" A
'a'
: q5 o# M7 X9 i6 B) v, `/ c1 |
8 b! L& W/ t% C% M, O// 在javascript中推荐使用加号(+)拼接
( ?2 e# @2 G2 \/ m5 p&gt; name* A6 L3 ]$ n/ u* w0 [: T
'Hans'
. s/ t2 h5 n( L&gt; a
$ {: K  u# P! T% m: ~4 O8 e) p! o'    ABC    '6 m9 t, P  P: R" i7 v  g2 n
&gt; name + a% M! P% }4 D: C( |# n" D5 F2 T
'Hans    ABC    '# J& N0 C# O7 \  j+ J5 O* U
// 使用concat拼接4 S& \! P6 O0 u$ z: u
&gt; name.concat(a). K& S) b/ c& A1 r* Q) v
'Hans    ABC    '
/ g. f) p, M. Y# N
* W) L; E# n9 `1 v  G- e$ G2 S//indexOf(substring, start)子序列位置
) H* U  P$ Y" z" a$ f/ k& }7 [- l1 H: l8 K4 q2 b
&gt; text1 }/ c+ g' @- E4 l+ l
'A young idler,\nan old beggar'4 G9 ^. |' W  s/ d8 Z
&gt; text.indexOf('young',0)
$ a3 ~3 x5 J! F3 p; R5 _+ P2, z& ?5 s' z/ F' Y* h4 w

+ _8 e, @( v3 k0 d//.substring(from, to)        根据索引获取子序列* l" ]# x' C& ]( h6 d; i+ n
&gt; text.substring(0,)# R# N( \! c) K! A1 p; y* i2 R
'A young idler,\nan old beggar'
+ X/ }" E, X, x4 |: _) U: h4 Y&gt; text.substring(0,10)
- z# b$ M% b& o( u) B* O! t'A young id'
) z* U1 Y7 i: v
# ]4 e6 U/ R3 e7 y; {+ `// .slice(start, end)        切片, 从0开始顾头不顾尾9 b6 F2 D( K2 J1 i
&gt; name.slice(0,3)' D4 \, _2 A: b2 w5 Z
'Han'0 o+ l8 p' {" m1 L3 k
7 X  ?4 A( U, ]
// 转小写5 C6 X7 q1 o  b7 _8 J
&gt; name
2 {) B9 l# n0 r/ F: K'Hans'2 e$ g- A: j" f: ?
&gt; name.toLowerCase()) H5 J# v/ g- E7 p' G
'hans'
4 j. _9 {: F" O* I// 转大写
* q0 @! r. T$ U7 n6 P7 F$ x&gt; name.toUpperCase()
" P, T2 Y! O1 V& h6 C'HANS'( B1 c0 g& k$ P# i& G9 m

; |6 k5 q! ?) r  `1 C7 f; m7 t// 分隔
/ ~$ `) F& p" u) n6 n9 Z4 x. w&gt; name
$ k9 }0 y  U" k; O! R+ v'Hans'
% c5 ^* ?0 W7 j7 \5 ^/ g) P&gt; name.split('a')
% ~  h3 `* D8 W2 l6 W5 r(2)&nbsp;['H', 'ns']+ C- x7 G0 Z6 z1 H+ `5 j
</code></pre>
) p. j4 I( m0 G8 t& ]<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
# \* }, e6 @6 v% ^<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>- s+ `- h( o$ i* U! x( Z
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
, X. r  E4 O& L+ E% K% Z<p><strong>null和undefined</strong></p>
% [4 Y) w, z( g( _2 y  z1 {<ul>6 Q  n: I" b  Y4 |) Y
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>5 O  m* u& C# K& Q
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>* W# N. j9 y1 r" i* m# d
</ul>' ?7 G# `" S8 a
<h4 id="234-array数组">2.3.4 Array数组</h4>9 p, X. Z6 c& [' M- {: c, Z
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
) z; r' _7 J9 _; h: M<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
$ B9 M$ {, Y+ V&gt; array1
! j* o; f! S8 }3 d5 d8 n(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" G* N" U$ x1 E5 ]4 ^8 s' a&gt; console.log(array1[2])  //console.log打印类似python中的print! A; G" _4 K4 P. v4 {; H3 z
3/ Z/ N4 ]7 Z6 G
// length元素个数, ~6 Q$ w1 z% {
&gt; array1.length2 I. b+ q. W: _0 e7 c8 K7 `
6
9 E- @8 Q2 ?* ^. r// 在尾部增加元素,类型append
' u  X; Y& g4 B, P$ d% j/ ]&gt; array1.push('D')
& G' Z- g! }! s8 f# ~# N' |7
# N: N! t7 ]+ q* o& M&gt; array15 b+ e! T2 p# ~$ J  A- `* Y! _
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']  e7 u2 ^3 B2 p; i! L
// 在头部增加元素( X4 L3 [& r8 p0 ~& G  d
&gt; array1.unshift(0)& k8 K4 H  U  i8 {; U, j$ _
87 e# }3 M2 L3 N0 a0 R
&gt; array1
9 g# Z) I& s. G# ~2 i& N(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']& U0 M& m* C' W: i% [1 l+ b+ y

4 s3 ~7 k5 J4 s% q- h. u//取最后一个元素9 m6 k& x0 r8 y3 b- G2 O
&gt; array1.pop()
6 ^. i/ X$ m6 N0 k/ }'D'
% C1 Y8 F* X6 m; b. b9 Y  I&gt; array1
" Z) K6 N$ ~& i# p: _  C$ B3 l( D1 E(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']4 K6 w  F4 s3 h- Z# W( J' ]
//取头部元素; B, C' O7 t9 A6 b
&gt; array1.shift()
& `/ B4 v& k  i! u0+ b/ {* a4 I3 R& Z
&gt; array1
6 z' G. M) u- ^8 g# {! S1 G1 ](6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" K  l* j# a3 j2 B! z

6 r6 `1 Z. |9 y//切片, 从0开始顾头不顾尾, C4 h8 ~8 G. D( t9 J: r$ R
&gt; array1.slice(3,6): J1 I1 T* N1 `+ X
(3)&nbsp;['a', 'b', 'c']
) ?( E- L& V6 N5 n4 q4 q// 反转
' A! r6 b, ^9 B& V( e+ D2 T&gt; array1.reverse()! N0 s2 V+ l( G5 g2 }8 j
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
1 ]: W( c( o% S8 M// 将数组元素连接成字符串
) d2 u; ~+ u) C3 P8 K* C&gt; array1.join() // 什么不都写默认使用逗号分隔) T5 f6 r* K: I: w0 k
'c,b,a,3,2,1'
% {% c% E' ^0 g3 q2 z&gt; array1.join('')  S3 L' W  u( p
'cba321'# c3 B$ \( Q3 p4 [: U: g. E: o
&gt; array1.join('|')
: |1 t4 j1 t! E0 }. ^3 P'c|b|a|3|2|1'+ D. g. ?) E* X
: ^2 y3 z8 p$ L2 p+ B. x9 u, p6 ~
// 连接数组
5 X1 G/ r# i9 b; c& _' C1 M) p& M&gt; var array2 = ['A','B','C']) c9 F* B- {; l8 a7 ~
&gt; array1.concat(array2)
) p8 R) w7 X. a% c) y' |(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']! u# q& M& G5 j8 p) _

* A3 F: v3 ]8 u; ~; \// 排序
. U# p5 D  |. B7 k5 f' Q" k&gt; array1.sort()  q, F  X% f# G$ s0 r) A& y6 P3 ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ f) x/ R0 n5 [% `0 a' f
; n# f/ q" e& g2 K. K5 s% W// 删除元素,并可以向数据组中添加新元素(可选)7 s0 P( d) g+ u- h6 M
&gt; array1.splice(3,3)  // 删除元素
8 d! B4 V0 Z, a% y/ u7 I(3)&nbsp;['a', 'b', 'c']
3 ~3 }/ G7 ^2 ~; R- y- n$ ^4 ~&gt; array1+ ]% @/ ~/ F- C) ~! _" I" ~
(3)&nbsp;[1, 2, 3]
* l) e" Q6 C5 v- B9 L, y&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素" R! t* q. n: h4 f
[]
7 B9 B2 R9 @+ z2 ^; S$ X8 M1 O: `&gt; array1
6 o3 P4 D7 t! P* d% b$ U) Z(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
; k$ x8 Q! q0 E
  r. j9 E/ K4 O# [/*3 w1 K6 e* e4 ~" q
splice(index,howmany,item1,.....,itemX)0 e$ U, o+ k4 C% {9 P. N+ Y6 D" s
index:必需,必须是数字。规定从何处添加/删除元素。+ |, M5 ~" a# t. T- {2 H
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。' u. p  s( x& g/ _2 b
item1, ..., itemX        可选。要添加到数组的新元素
9 g  M6 e5 W  K5 k7 Z*/' i: T4 j$ A! q$ t, @
! V; |9 f3 |+ p$ U/ O* K
// forEach()        将数组的每个元素传递给回调函数
1 Z1 i, a5 n/ t# G&gt; array1.forEach(function test(n){console.log(n)})
; f$ }: F1 s. U0 P' H  f4 T- l% _ 1
- K3 [1 ?& U% h! V 2
/ u/ U. O% K* n8 M  {  W& s 3
' z9 g5 @! d. r A
% L5 r+ {0 J! c' D$ x B" c  j; Y; T0 M% C3 u6 @7 ^* I# m  z$ R
C
* w+ W5 C+ G! u3 {1 ^5 C& W6 ^3 A9 T- ?// 返回一个数组元素调用函数处理后的值的新数组3 X1 K4 q$ |; _5 b
&gt; array1.map(function(value){return value +1})
5 u, H. E+ F. x3 q(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']0 T4 T2 l8 i# p: e& z
</code></pre>
6 J7 e7 U5 Z. v( Z2 m<h3 id="24-运算符">2.4 运算符</h3>
* _0 f. Q" H5 W<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
( L6 E9 `* \1 ^0 [- o<p><code>+ - * / % ++ --</code></p>
2 G/ I' F! `0 M  J2 ]4 E5 c<pre><code class="language-javascript">&gt; var a = 6$ l5 w' S; M6 I2 w9 l2 |$ i
&gt; var b = 3! w' ~6 Q: @+ T
// 加4 D- A' Y) D1 f1 z" A, @4 e
&gt; a + b
  z* ?8 [) }9 }" W! M94 e, `. X- i! u) U1 N  Y) b& N
// 减  }3 V* d+ w, q5 d9 b& x
&gt; a - b! R" ^3 K! @( C8 M
3! ?# ]0 A$ Q% {, b6 N# ]) b$ S5 P
// 乘; _0 C! K+ K: T
&gt; a * b; [/ L( @; D4 ~: C
18# w% @: |( b. e$ m$ ^4 t
// 除
( i- j9 B/ k6 D2 U( b+ _&gt; a / b
& S  z" w, B; y3 g2
. k1 ]/ X4 z. c0 `" Z' B// 取模(取余)* f) K6 I8 T* C8 p, W2 h* u8 G; Q0 d
&gt; a % b
0 k2 p. V* e  u; x07 [, H4 W$ T: ?* j; G. d3 |
// 自增1(先赋值再增1)
& J) z" G' V* g+ `: h+ z, ]0 ^&gt; a++
1 p0 r9 N6 g, q! b6! p/ h) N. N$ v# |5 U. v
&gt; a4 [2 r7 N2 Y: M0 \5 X; y( O+ c
7
$ p$ G% [  t/ f- q// 自减1(先赋值再减1)
7 U( P7 J7 O6 A* K, |9 t$ d5 T8 O, Y6 k&gt; a--& B; K* a3 C. F5 W
76 {3 q3 k* y; i$ @4 w# B
&gt; a3 p* _/ b; D0 T! `! s$ w" Z; K
6
! t( X* A4 B. U3 ~+ I// 自增1(先增1再赋值)3 J) n, E- \9 F$ l
&gt; ++a
6 Z. ?/ R: s8 m8 G70 V% _* |7 m' [- `2 q
// 自减1(先减1再赋值)2 @4 I9 F" e/ S1 K
&gt; --a% ^3 \0 K* `( C
64 C8 F; T8 e! }2 E2 X
&gt; a) e: a7 Z) i4 o" `) ?0 h
62 i! g. e. `9 k! K& h) d
4 S/ G1 G' x3 k- c- T
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
4 b) Q8 a3 G1 @8 f</code></pre>
- ^0 Y* p9 I" t* \9 q<h4 id="242-比较运算符">2.4.2 比较运算符</h4>; p" N5 |- f; q7 l( Q  F7 Y
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
7 h/ L: b2 A5 t8 ^4 V% C<pre><code class="language-javascript">// 大于
0 [. c) N+ a% {6 f; c4 ~5 R8 h2 X' k&gt; a &gt; b
6 J1 b! i6 L3 h: w3 f* ^true
. ~& O: g1 _9 B0 h, I// 大于等于
$ P* f7 ^  d" W3 F3 V&gt; a &gt;= b% c% m0 ~4 i# l$ X
true  E. r8 z8 j9 e& M8 {4 c2 _% L
// 小于
0 v5 s! U, l; J& ?: m) z! q- j&gt; a &lt; b( X5 x1 X! S8 X( J+ l5 ]) h
false
/ M4 U4 i" Z$ Z0 E8 w( R// 小于等于
- i$ i1 r, \2 Y  C/ d&gt; a &lt;= b" h# v" E7 I7 e$ f5 l+ v5 O) E4 Q
false
$ ?  F$ V- D% c# d0 H8 h' `; |* t// 弱不等于
+ a& B5 d0 J: K- A&gt; a != b
% S" Q; B' k& d! ^true, L0 a2 _# p$ J, }) V
// 弱等于8 v  w; @" R! ]& U7 h; O% {
&gt; 1 == '1'4 \: D' }4 q; i
true/ q  O" G# \( v1 a# I" {9 e
// 强等于
9 ?9 C0 D( p( J: K& d# v5 y&gt; 1 === '1'
. a: y' M4 A+ }. x1 c- Jfalse
5 Z0 ?7 h9 v- X5 A7 t0 e8 _// 强不等于
2 o/ X; `! O+ f% S&gt; 1 !== '1'3 D7 H2 V, g2 j9 h$ r1 P' f
true5 R: Q8 e4 f6 X- X- b

4 {+ R7 c3 [! Z* x/ c& E, I' i4 f4 K/*. Z1 i, T5 t" ^4 G
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误1 F  Q* `8 D7 K
*/# Y0 a5 @5 E, r6 d! T
</code></pre>4 R) Z. T6 B4 T, S1 J
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>5 s! R  z! E) E
<p><code>&amp;&amp; || !</code></p>
# |& t) h: q+ R/ ^" J<pre><code class="language-javascript">&amp;&amp; 与
% I4 T  C! u. C- ?8 z: g|| or
$ X! r. V6 ?/ B: g4 U& m: B! 非
+ Y5 l5 T; p& X* w7 p' W</code></pre>8 z! d4 K# F3 Z( \% M6 N# ^9 K
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>; V- q( @+ `8 i5 e$ ?
<p><code>= += -= *= /=</code></p>
/ Q2 x7 O' O+ E<pre><code class="language-javascript">// 赋值
& `2 ^. K" O' F; c&gt; var x = 3+ q  }& d9 k; d1 W# z+ l) ^9 F' ]3 S- u
// 加等于
/ M7 _" r5 @2 o&gt; x += 2
6 @; e& b! @* r/ l5, b1 i+ Y! y9 s& [& l
// 减等于
" r8 z( Y  K: Y3 i( s&gt; x -= 1
, k5 t: P3 g4 w: p. y+ D/ `4: R/ a# }5 O* g6 H8 [. ^
// 乘等于
# D) d: V# t/ p, F/ y&gt; x *= 2) X, G; |2 s3 V  h2 p! j
8; [- B) C8 H& V0 M% n
// 除等于
( c0 s. d; F" I3 R/ o9 t0 I. |&gt; x /= 29 p9 O0 \9 ?3 {. ^5 t
4
3 J1 d' j: [! M5 Z9 D; r</code></pre>: M- `& i- W6 {* i( x
<h3 id="25-流程控制">2.5 流程控制</h3>9 z" [* k! n0 c* P5 ?6 Z
<h4 id="251-if">2.5.1 if</h4>, Y  T' F0 K& a6 ?
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
9 J; Y2 m- A  {# D: U, \9 X3 L
+ d& c% ?4 G2 @/ D6 Y&gt; var x = 34 d* }% q/ v, ?9 l5 c
&gt; if (x &gt; 2){console.log("OK")}3 {9 t) a8 S$ x
OK; _  ~. a) m$ G5 D% V

  j7 U& c! O  K( W7 m5 |# z2, if(条件){条件成立执行代码} / \/ b) ]# b7 y& R. C+ B9 X$ {% G
        else{条件不成立执行代码}
! x0 Y5 F4 v, C; t* M! m, L: f- o8 j  T) h  _& _7 G
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
! |) a, ?. f! T) U  n1 z. e/ c'NO'
4 n( m( Y+ a2 k
$ t6 D8 e) s+ U* }0 \" w3, if(条件1){条件1成立执行代码} 5 R! X" u: f4 r# v, ]+ t
        else if(条件2){条件2成立执行代码}9 I; c! M! u- t6 W( Y4 P
    else{上面条件都不成立执行代码}% P% _6 j  T  |0 t
1 {7 G9 z% e' t% g7 W$ u4 Y
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}  Y( R9 _9 d+ c5 x$ z: J
Ha
* d/ I$ z3 c- ?% `2 f- Q</code></pre>9 H9 i7 `* W) a( y
<h4 id="252-switch">2.5.2 switch</h4>
! e. c8 K4 P9 @. G& l! e2 W<pre><code class="language-javascript">var day = new Date().getDay();
# h( u/ F0 }: h  U/ zswitch (day) {1 k3 f0 V/ o0 z/ J
  case 0:! h; U) k6 S) J  z0 ]$ }
  console.log("Sunday");
2 z2 O. Q5 Y- g  break;
7 S9 {4 |/ v2 K. Y. N' k" g; E  k  case 1:- q& X- f7 }+ D" z7 b* P6 Y
  console.log("Monday");9 d( i1 j: z6 L" c2 ~! A2 L
  break;' ~% q1 i( W/ r! d5 @
default:8 K: D9 N% h- q  H- @" V+ c9 @# K
  console.log("不在范围")
0 m5 K/ ~8 Q: t- u  U8 U; w}$ x  \, F6 w) K; u
不在范围
0 @6 N6 G2 k" |( _) G. m+ w</code></pre>5 q2 _5 O7 \, c" p4 J
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
: J: {# M5 h7 x  U6 W6 \- H<h4 id="253-for">2.5.3 for</h4>0 K5 a0 s# c, x2 l0 N: a: J
<pre><code class="language-python">// for 循环
3 j/ u, ^+ \% K1 A0 i) L3 X        for(起始值;循环条件;每次循环后执行的操作){8 L2 T/ M% n, m2 o* T  b3 l9 w
        for循环体代码
3 U, _" H$ Y" c9 [. x- M    }
2 i' [9 B) O) I- W* z* A
5 `* w  ^- P7 s, E6 O8 s; xfor (var i = 0; i&lt;10; i++){
. a; ]# i" g0 |& I( z/ T/ s% Q    console.log(i), f/ j. G  b9 L
}! Z: a9 h$ V+ p. K6 F4 N: \9 G, O
        00 t: M, F; M) K9 P
        1
/ I$ p6 m; w( b6 X5 M        2$ P, v  v) T( E6 f* u: X/ O$ ~
        3' z  C3 d! U8 J' S* _
        4+ C4 W, b4 R/ l6 M9 T2 @3 N
        5) ]! P$ Z9 R) F4 Q& W
        6
& i- d# L3 J) i& T& ?3 {        79 r# L: O1 O& A( c+ X; H
        8
' y5 G5 a1 S3 f6 w, @7 W: h7 u        9- C4 P+ H5 u  ^/ v( S
</code></pre>3 w3 f6 D* v/ w6 W
<h4 id="254-while">2.5.4 while</h4>1 W8 e6 c! V/ Z1 A( {  W
<pre><code class="language-javascript">// while 循环
, L  t( D4 G7 y, H2 B. K        while(循环条件){
& A; O' \8 Q/ R6 p  o        循环体代码
* [! z/ y& h/ M& K% D5 l( F; I. B    }
! j3 r+ g5 s# @, ^, |1 K) G/ Y3 K" ]8 J
&gt; var i = 0
% {" I" i  S: V0 j; Y; N&gt; while(i&lt;10){, T* y2 z, z4 A* f$ ]
    console.log(i)* h+ g3 V$ _) U3 I* S* C
    i++- @5 f% [/ ]1 i  f
}7 g) y/ U8 \( h8 Y
02 V6 g5 t* z& O( @
1
4 I: x; |9 q8 N, _8 v 2
) d; L% i; d4 |7 k3 W  p 32 v9 b0 f0 T) t0 q5 e. l
4
; b" |  s( v8 _/ g 5
3 ~' J' Z- ?- z( `# S5 K 6- L! H, G' x% K" e' _
7
" [- _& ^# J/ {4 ~7 G& f 8
' y2 h$ v0 q& R9 g! | 9
4 B  g* R! k8 I8 ^/ M& h3 f</code></pre>* Z: i9 ]4 F% ?  s
<h4 id="255-break和continue">2.5.5 break和continue</h4>
& ?( ^: s: ]. Q<pre><code class="language-javascript">// break0 S, q) s" C8 r  Y: I
for (var i = 0; i&lt;10; i++){( E. g* _! D3 }9 A$ k) p
    if (i == 5){break}
$ \' I  ~1 {6 ^0 P2 }4 q3 Y; {    console.log(i)
+ y% |* j1 _9 m( i7 {2 A) j}: Y( C% R& k9 ?7 {
0# @8 R; q; h' y8 Z: _
1
  Q3 B1 o" s+ Y# b& Z: s% g, i 2
. f1 }/ X: g4 e% z9 i% C' q 3* N3 `, `' U) l
4
/ o; d6 C: J; W6 ?5 a% N9 _" |+ n// continue
- u0 g$ y4 h. u( _6 _$ {$ {6 Hfor (var i = 0; i&lt;10; i++){
' l) W  I. X/ \0 e/ Q; |    if (i == 5){continue}
9 N: L+ \7 e- ^% o+ _    console.log(i)! w, C- {) `5 g" m
}
4 Z2 y2 B9 i) O 0
+ [* c# U. h2 ` 1) C3 M8 T6 j5 |1 M% e2 G
2
4 J2 ]  ~% k+ @) l# { 3
$ c# O5 B) B& h0 U 4
: s% k$ W2 E" g, j/ h1 p- j 63 B" `4 G3 M2 L* M3 `! }' I( A/ x1 y
7
& X& e. ~1 K: k  i, x 8' ]' B' y! F3 \' \
9
" K& t8 c7 f: \8 x2 F2 q0 S, W2 p
1 L7 e% x" r% t4 R) Q) _</code></pre>
  k) |+ e2 J- p0 G- L<h3 id="26-三元运算">2.6 三元运算</h3>
. c- C; O+ ]9 T6 l+ ^7 `; N9 L* y$ f<pre><code class="language-javascript">&gt; a
% z4 k% J4 v- q. M7 j. r6
6 ^7 q6 h. k8 J) o/ t) V" b+ p&gt; b
9 S1 c2 {9 g# m5 `7 ]' m3# u: T5 s  N) R# _

$ [7 Q! Q" L7 A- l3 A//条件成立c为a的值,不成立c为b的值
; @+ @/ a  S3 o4 h2 D& a% l9 n  y0 s&gt; var c = a &gt; b ? a : b* ^( k6 r  h$ R9 N& f* e) v
&gt; c
4 g5 M+ j* F. L( B0 A. }. h+ C. q6- U+ G$ q7 d* b5 Z2 k% B

2 p: g4 u. O2 w7 b$ Y// 三元运算可以嵌套2 W1 p/ m5 s4 k0 ]6 p) {: Q  v
</code></pre>
0 d- g6 N8 l6 e4 W! e0 ?1 U. B( b<h3 id="27-函数">2.7 函数</h3>" f; O5 ~# G6 C
<pre><code class="language-javascript">1. 普通函数/ ]+ X! V. e& m6 P/ s. H* V
&gt; function foo1(){* @! v  T  Z/ ]* C1 }& t
    console.log("Hi")
2 u' F6 ~* i. c}
5 C) r2 X! N" l* Q6 \( s
, d) O1 ~7 K" F" O3 F- C& n5 ~$ G: {9 }&gt; foo1()
& [% A% |+ e  j" |( V        Hi
; Z4 S& {8 C$ ^. R6 T1 N% ?: l; ^3 K8 R# `2. 带参数函数/ V, Y! e6 @+ D1 E  b5 e4 B  q
&gt; function foo1(name){
6 }! [+ v3 p: j7 e! l7 [3 S! qconsole.log("Hi",name)- H4 t- K& [$ o4 |0 X5 v
}
. E+ T, U/ ~& `/ O
2 `; ]) I! E7 C, e3 y; w! ?&gt; foo1("Hans")
7 m) T8 l$ Y5 M9 {2 [9 ~Hi Hans5 y" r9 S, |+ c- a( D

+ E6 F  g% e% S. k" `&gt; var name = "Hello"
- W$ @9 P* r* E( A# |( O6 E9 k2 H&gt; foo1(name)
8 G  g6 a/ E2 t9 m4 MHi Hello# O  T; M2 O) K4 \# C$ s
9 Y% N# u0 c8 Q7 u2 V; n1 u
3. 带返回值函数( S8 s6 U( j& E3 }& I" L" Y
&gt; function foo1(a,b){6 f# a5 B$ ]2 F. C% G' }3 c
        return a + b   
9 S5 }' Z$ B' n2 b}
! I9 {/ P% c. C) D) e+ Z&gt; foo1(1,2)9 z8 n, J  m  Q7 p. L0 o7 n
3. ]. l9 h$ J5 k* G% X
&gt; var a = foo1(10,20)  //接受函数返回值! r; h' _  D0 x
&gt; a- r- p8 l; W; R: i% B: J
30
. w1 `) y% g$ ^2 h" n* R% W% G+ {
- f% l/ c% H. p/ H% X7 {4. 匿名函数  I( R: ~, U- h
&gt; var sum = function(a, b){( j" E) _* @5 L/ k5 k. i& a
  return a + b;
- C  B1 [3 p) a! J2 T0 L* Y}! q! t+ R8 O6 m! X
&gt; sum(1,2)
& E' r) t* v& ?, I) f3 {% a2 b: ?3
) z: O2 j  Q  X
- ^5 R3 C5 U% ?  R8 w' g7 \0 }// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱9 |5 F9 O- a0 ~9 S. g% x
&gt; (function(a, b){. ]: y, h/ X0 O0 \% E% s: n& v$ O
  return a + b! G9 c* O" q: H
})(10, 20)
0 R2 n. y! M) G6 X0 W3 p30
+ ^: J8 _: o+ D, p1 B3 |& }' G$ |- V  @
5. 闭包函数3 t8 o7 s$ r, H% E: V$ ~! c
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数5 ^6 [5 ^: |* ~0 X# Z3 N: U
var city = "BJ"
2 }- T9 r* x) k9 ?function f(){+ ?( y6 J8 @7 @
    var city = "SH"; ?  F( s! R, x+ V, a; P
    function inner(){
6 N7 F5 l; ~; D        console.log(city)
1 E- v" f9 v3 c, i    }# i3 ?1 I. \# z0 U# i
    return inner
6 I& J' h8 T/ [# _: U}* n4 `! s, D8 E; U  N, l) }8 N4 V
var ret = f()8 A* w& h2 K. u" R0 C
ret()
& O4 b( W8 r( E* e. k/ p2 Y7 r2 ?/ g执行结果:
8 v) Z: B, y3 C) \SH* d# q" W. T( N5 j# O& C
. B% }) q& l8 a+ l6 Z9 ?3 q7 \, w- R9 w2 n
</code></pre># U% t+ s% [3 @! O; z4 v
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>& I, R& ?9 O& @1 a+ p: s3 }8 @
<pre><code class="language-javascript">var f = v =&gt; v;
8 H4 W, G7 x3 w# \: k// 等同于* g: M1 |- L9 L* M5 _8 }) f9 e
var f = function(v){
* ]$ a, Y& u; p5 {  return v;
: m/ z5 y0 V) P7 C}
8 I! k5 f& ]( z- {7 x</code></pre>
6 n% n* d' d, ]- M<p><code>arguments</code>参数 可以获取传入的所有数据</p>
9 a: y. a8 @3 F+ A% o0 J7 r<pre><code class="language-javascript">function foo1(a,b){
1 E( Z" Q+ p2 t- _: {    console.log(arguments.length)  //参数的个数 - f' c( O" ~; @  d5 ~0 V# H' q
    console.log(arguments[0]) // 第一个参数的值
% W' `7 [4 b% d0 |& T1 |        return a + b   
9 b; O, l& D! z" f4 X) Y$ }! @}) U$ @- {* g- p8 Z" ^3 ^
foo1(10,20)$ k4 _8 Y8 L6 |
结果:% e$ I- D  a' n1 @
2          //参数的个数
0 t1 e6 g1 R) p# h6 B. V10        // 第一个参数的值
+ A  Z( ^6 Y5 G) J6 a30        // 返回相加的结果3 r4 @0 e5 K; q8 T* L$ K; v
</code></pre>4 [& f. V) L+ c: U
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p># [9 A% e1 L0 t. m! Y
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
: Y. d- b0 b; J- B3 u! E: ^<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
4 J$ I7 {6 m7 A0 X<h4 id="281-date对象">2.8.1 Date对象</h4>% U- @+ e0 F+ ^% V0 f5 d
<pre><code class="language-javascript">&gt; var data_test = new Date()
, i6 n' Y$ h: {1 T# F8 _&gt; data_test/ \, z( B8 b2 ]  W' G5 V
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  [# s4 C" x" c' l, K
&gt; data_test.toLocaleString(); B4 w# [1 y0 i7 s4 ^* U. `
'2022/2/11 下午9:44:43'
/ B4 @" C# m3 o& R; q. l4 l- [4 d3 L+ c8 C+ R% f/ c
&gt; data_test.toLocaleDateString()7 a* c$ B& B. i3 @, T3 k
'2022/2/11'  V6 Q5 f. U2 [; x1 G& J1 m7 `( `, V
* }/ [9 E) f! ~  ]( R3 F
&gt; var data_test2  = new Date("2022/2/11 9:44:43")) O( v! v- K$ P8 t5 ?% Y
&gt; data_test2.toLocaleString()
; a. m, p7 ]; t8 y'2022/2/11 上午9:44:43'# q: o1 E$ n. x; H2 ]) h5 o
) W" }( h% m. a$ F: N; c$ e4 _3 S
// 获取当前几号) d# z; V5 P9 e" o# n9 f5 f0 F
&gt; data_test.getDate(). |% ~1 h7 i+ v/ C: J- Z
11" R% U0 U; s& {) Y! j1 s
// 获取星期几,数字表示9 O7 z8 M8 z& V7 {* ?( _8 {. T- m
&gt; data_test.getDay()  
0 H" R% T% l% M# M6 u) h9 \5+ W# H" w8 ~& |# r
// 获取月份(0-11)
4 S: ^/ e' `. S4 J&gt; data_test.getMonth()# C" n4 {' ?- e, [& D
1
8 t2 I2 ]# p0 ]$ w5 W// 获取完整年份
0 x0 d' G6 E, c&gt; data_test.getFullYear()
. D( i8 W* |+ U' f8 I+ P. [2022
4 f6 Q' \; j; y  i' h// 获取时4 t3 p# U- W# C' |0 ~- j# k: m
&gt; data_test.getHours()
7 }, P# o& O' j( M$ Q21
0 u$ ~3 k8 ]0 E' M* N; O3 Q! V// 获取分/ f1 z, n$ c0 b" Q4 _- t
&gt; data_test.getMinutes()$ L5 o' Q) f) F; z+ y" k* T- u* T# m
44- a9 u2 e# a( t" Q* W3 \) ]* F
// 获取秒5 p5 Q' U4 F( b' n
&gt; data_test.getSeconds()
, ^$ b- q& Q; k! K, H+ P43/ [3 ~* w, i- A% z) R
// 获取毫秒( x+ g! \  k' O; i
&gt; data_test.getMilliseconds()
* W( S0 [- {4 L* x0 c; `' n* t* r290
. ~! H( j' j/ W- S6 Q2 _2 ?9 |// 获取时间戳. f  ~" H3 O4 \4 X7 _. g
&gt; data_test.getTime()
8 I9 h0 E& s2 V$ r1644587083290
; ]& v/ w% s4 s$ W* A8 b7 |5 S</code></pre>
5 w6 @/ q3 x% N, T5 t; S( h<h4 id="282-json对象">2.8.2 Json对象</h4>
2 R% y; m. w; w* {<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
, S7 z8 i$ y' ~: A$ vJSON.parse()  // 反序列化,把JSON字符串转换成对象
# ^  E' G$ l; J: q9 R( G
& a+ p" J" i+ q// 序列化
* D% U' ~# b0 i8 }3 l$ s* S&gt; var jstojson = JSON.stringify(person) . R7 R4 p" s9 X- Q( V/ e
&gt; jstojson  
0 ^: C7 \* e4 g'{"Name":"Hans","Age":18}'
. u9 ]) l/ ^! A* ^9 t6 S
0 i! a7 [1 h) n7 H1 f: t: }// 反序列化; @8 }0 H" o4 U* H. [
&gt; var x = JSON.parse(jstojson)% Q9 P5 h5 t- J- G
&gt; x
9 ?$ U( ^. T# A# u5 o9 c" k{Name: 'Hans', Age: 18}. X( B, h* i2 i% D) ^
&gt; x.Age
% E0 ?) d$ _( C: ~0 H7 @18
& {$ {  B1 n4 H5 H/ y0 p</code></pre>9 O0 _3 w) ^8 N! M
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>- U- c8 J- U- K1 J1 W( B
<p>正则</p>2 y5 w! ~' E5 Z4 K( o
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ k$ W/ S4 H2 \- T! X' b! _2 R
&gt; reg12 B* e8 v3 w. N
/^[a-zA-Z][a-zA-Z0-9]{4,7}// i8 l& N* P8 ]  A" ^; H
&gt; reg1.test("Hans666")* n+ M8 T0 ]( K1 p4 C# r
true
/ r& D  O5 G1 p) s( Z: E) i& y# k* @5 l" }
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
* c8 o& B6 G9 u&gt; reg2% D# Z" ?) d$ t! N
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* `9 G, l1 S. g1 G$ _) o5 _
&gt; reg2.test('Hasdfa')8 H8 f$ _% _, t% e! u- I
true
* a# \, A3 a7 W0 B' \$ {
5 o% p6 c' p3 S2 E全局匹配:+ f, O- \9 [+ B- K4 j6 @4 s
&gt; name/ G( K( X/ \1 o: P7 b; q
'Hello'
: D! n' J5 d. g  i+ S&gt; name.match(/l/)) H! J# J& G$ u
['l', index: 2, input: 'Hello', groups: undefined]
. ~3 h0 z5 i0 H8 |/ T  D# ^0 G  F+ C2 X9 m
&gt; name.match(/l/g)
: `) l# b$ ^+ O* B2 ^(2)&nbsp;['l', 'l']
" `. H) G$ d4 |  {4 q// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配: s+ Y& ]. r: m
& M# o4 B+ U2 @: J* J! B( F, h& M2 o
全局匹配注意事项:! \1 C# u* m( r2 p! ^
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
1 ?0 x& M; f+ G, N& F8 _&gt; reg2.test('Hasdfa')
3 M3 s+ N$ P3 z9 |5 K# F3 i1 ~true
7 U2 L/ \& B) ?&gt;reg2.lastIndex;
" e, l6 v' D) ~" o3 N6
6 \4 r( L6 C/ v* ^. I" D7 q&gt; reg2.test('Hasdfa')
5 v* `+ x: j7 wfalse+ \* i, H1 [! O1 @
&gt; reg2.lastIndex;% [; F" @$ p9 }$ J# U
0
0 [' y2 X. O' b6 u&gt; reg2.test('Hasdfa')1 X" B* _% v' V
true/ {7 K2 r; `/ u/ i) d
&gt; reg2.lastIndex;
" N8 N% T- U- j6
+ v: _7 X( `! P&gt; reg2.test('Hasdfa')8 f. r" I( V! H- O( k! V" `
false
2 x, _: n, I6 j! |+ S- b8 I. l&gt; reg2.lastIndex;
$ O/ M! i# ]* d6 M. r0 s# _. c0' X! ?$ [$ X) n0 K
// 全局匹配会有一个lastindex属性4 ]# C+ n' ~! A4 c( `6 q
&gt; reg2.test()1 j$ g+ u$ O: j5 c2 V! A+ K) j
false
# \- U( B8 D8 l# L&gt; reg2.test(); V% a0 }) E$ Q# R2 q! [
true8 G/ ^( U( \/ o! S! P: ]
// 校验时不传参数默认传的是undefined+ W# E# R9 d2 K: T
</code></pre># }1 ]' Q, i! s
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' B, N9 B' V' `& b1 `, T. n, `
<p>就相当于是<code>python</code>中的字典</p>. O3 E3 h9 ~+ u* R+ f
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
. B. a' c# J9 u- P&gt; person
' X/ h( n" g" G+ R9 ?& m{Name: 'Hans', Age: 18}8 k1 h: v! e; m( N
&gt; person.Name4 l7 f' Y: w1 \* ^
'Hans'
: _* g: D0 ?* _  I9 ]. c6 `- @&gt; person["Name"]
+ m, V4 g$ c5 ]'Hans'
$ C. j  G" T# u$ n% v' M; O
$ W* ^  v$ I6 B0 J9 @8 o// 也可以使用new Object创建
' l  a) T7 Z( j9 y1 z2 t; M. [! N&gt; var person2 = new Object()
3 J# D- W! K: S&gt; person2.name = "Hello"
3 x! b  N+ ?7 u  k" |0 n& J. @# E( a'Hello'
0 x0 \/ C$ B8 Y, Q8 c8 ^1 e" Q&gt; person2.age = 20
5 c: _' z* m3 i$ P! U20: u$ [. C' A# ]0 K3 X& l+ ?
</code></pre>
7 L- U8 L* ^6 z) q5 H8 }3 o( n/ Q/ n<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
& G1 X# Q0 r1 v" s# H" L<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
, }- ]. c& w. ]9 C<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
* g/ S1 P, }7 j6 Q; |  j) ?5 M<h3 id="31-window-对象">3.1 window 对象</h3>
' E- \$ P$ y( E' X9 A# j<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>% V" I7 q2 X! f% ]/ I
<pre><code class="language-python">//览器窗口的内部高度  ~1 a+ b5 U$ X2 K% ^& z! p) w
window.innerHeight
8 J1 [5 B, Y' D3 b: {706
/ p. t; _- w: h9 _. A//浏览器窗口的内部宽度6 V' ]. h1 i( h7 ~- @
window.innerWidth- f: [! ?' Q& j. [6 `
1522
- j; A9 h1 X- h' C/ {% o+ {// 打开新窗口: u0 ?: T% b& b
window.open('https://www.baidu.com')
9 T2 O- F* R) P! @/ V* u9 `Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}; C# H" `9 [2 C+ g! G( b
// 关闭当前窗口/ C% P3 L6 Y8 c6 _
window.close()
; A7 v1 B& e9 P. h//  后退一页
- J7 H( {/ ?% `/ z$ v+ pwindow.history.back()# v5 Z5 d& A. o
// 前进一页5 d  J+ @. B# M# n3 s  w8 j& H% l/ i
window.history.forward()
  O. C2 K* ?( F9 f: T- Q5 R3 S//Web浏览器全称
7 ^( r+ F1 N( i8 P9 m  ywindow.navigator.appName
0 R/ |% G* z* c'Netscape'1 a6 v, w  F" p6 x
// Web浏览器厂商和版本的详细字符串
/ v9 U; U5 h' f2 v! z% vwindow.navigator.appVersion7 y8 \. A; A9 _+ \
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 {5 N. l6 d% V
// 客户端绝大部分信息6 I% K5 w8 R# U5 [* U: }
window.navigator.userAgent+ b8 h- w6 m3 ^; p& s8 A4 Z
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'0 n7 |8 `- @* ]- M+ L: {
// 浏览器运行所在的操作系统
- L& u! j8 U: v7 R' `" g6 vwindow.navigator.platform
0 H9 l( W7 V& X6 S: f* B'Win32'
1 X) M& H9 }2 T- T3 g' o0 ?/ Y
+ j1 L- C6 f" x6 A$ `& }//  获取URL- {! x+ A' r* ]0 p! R
window.location.href6 O# f+ A: [% Y. i& V
// 跳转到指定页面: U* }* t/ Q- s  j3 I: g) Z, v
window.location.href='https://www.baidu.com'$ d" C8 r* B8 p5 M! n
// 重新加载页面6 }( y2 V( j  f* P1 x0 z
window.location.reload() ; t0 S' |, h% K1 w) X
</code></pre>
. ]. B3 I/ n7 M1 V4 V* A<h3 id="32-弹出框">3.2 弹出框</h3>
& {8 `5 D# C7 y7 L* R2 ^/ ~& S3 u<p>三种消息框:警告框、确认框、提示框。</p>
, L) a% q0 O$ c  t<h4 id="321-警告框">3.2.1 警告框</h4>
' G" }8 L' N5 e' r& J& Z<pre><code class="language-javascript">alert("Hello")1 h2 _; H, R# e* D3 t" F) e
</code></pre>4 D0 U0 N6 `$ C: S+ Y7 k
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>+ D8 h5 T8 c% \& T
<h4 id="322-确认框">3.2.2 确认框</h4>6 b# ?# P) ?5 H* P$ X
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
$ q) G  U, \* x3 N  w- O<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 ^9 `# i: w" ]" I% m# i4 ftrue- Z, _! m2 H7 L
&gt; confirm("你确定吗?")  // 点取消返回false
7 e0 |4 z% x' n+ Y$ J& J: B3 vfalse
/ ]7 l: U3 ~  W4 {6 g; l</code></pre>% ?$ Z' l, j( p- O
<h4 id="323-提示框">3.2.3 提示框</h4>
; C: q: Q$ x0 C: n# [4 ?+ p2 X<p><code>prompt("请输入","提示")</code></p>
6 m! a( j+ {9 r2 h/ @0 }<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
1 Z! ?% j' a  u- ^  d# @: |<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>0 e7 [2 i- A. p! V. U
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>2 V6 {" s" G" {+ b, S
<h3 id="33-计时相关">3.3 计时相关</h3>! Z7 g  A# P8 S* @- J! u8 j7 ^# u
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>$ N7 U9 ]9 M. A/ [; Y
<pre><code class="language-javascript">// 等于3秒钟弹窗
- l+ B% K. f, BsetTimeout(function(){alert("Hello")}, 3000)" `7 k2 U! D0 l3 }  T7 B

( {' A7 |4 f+ C7 p; A8 ivar t = setTimeout(function(){alert("Hello")}, 3000)
( M4 B$ E( m9 q( q4 w; X& r+ K$ w0 X* f* [5 f' y7 Y. r2 s1 N
// 取消setTimeout设置  ]' e. l3 h+ V0 L8 u% _3 G/ _7 e
clearTimeout(t)
, L8 s+ ~! A7 Y6 \</code></pre>
& ?9 ]0 O3 h! P<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>9 M9 W: T5 e1 k4 D7 C  K
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
% W0 }7 |. {5 A<pre><code class="language-javascript">每三秒弹出 "hello" :$ b# g, a# z6 s: x: V; B
setInterval(function(){alert("Hello")},3000);) c8 a3 v( ^* p8 V/ _2 }
</code></pre>
. N% \4 K" F  u<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>8 k" v+ h! R# W3 `# _- ?8 N
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);5 p/ E, J! g: m& y2 p9 I
//取消:
6 j! g$ b) P9 T5 AclearInterval(t)1 e" L/ j5 l, h3 M" F: q
</code></pre>: ]8 n9 |8 [7 E3 Y% U* l7 D: J8 W! _
& A. \6 E* z; t5 A
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-21 03:58 , Processed in 0.069100 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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