飞雪团队

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

前端之JavaScript

[复制链接]

8019

主题

8107

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

5 g% L' V$ F9 b<h1 id="前端之javascript">前端之JavaScript</h1>8 P% q) T; a0 K9 v
<p></p><p></p>, O) D% M/ z3 j9 N' C0 Y. \' f' D
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>( e$ Z5 V" \9 S8 G3 t* Y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
: C8 E9 v1 E; g7 L8 x" b它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
! F5 e0 Q; R, w9 R8 s+ A/ K' i. G& m$ h它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>0 V# e# h0 _" L7 l
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
9 e- f* ^, n9 h$ I; J/ m<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>. h2 @# |# Y6 ?3 @7 [" e
<h3 id="21-注释">2.1 注释</h3>1 k7 Q8 i9 w* J; h: ?. \
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>2 q) x9 o7 |0 P( I; Z. B6 T- q& c
<pre><code class="language-javascript">// 这是单行注释  A' b1 |: f+ H0 `9 Y+ l6 u
) U; t0 d- W" ]9 {
/*
+ V& i$ r, ]( M6 M7 R7 I这是多行注释的第一行,
& n- \7 l  v7 O& v2 f  @* ~2 [这是第二行。
! h+ C/ I/ r3 W% p0 h1 Z# n*/* G4 G% r% r4 G8 A  K
</code></pre>* ?3 P. c$ ^) Z7 r6 j, L- Q
<h3 id="22-变量和常量">2.2 变量和常量</h3>
4 {4 A# Q8 ~+ T) M/ n<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>6 S+ `) }! f: P) Q
<ul>
5 M5 _. I( m* ?) }0 n: |2 b2 V2 {<li>变量必须以字母开头</li># ^( I  N! h1 X* y; @/ f  N
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>7 j4 R8 K- J9 Z* ~: l; i6 I
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
  Z8 o' Y3 @5 `- o6 N' L* h; a8 \0 v</ul>
( j7 o6 X5 t' W3 n7 L& Y<p><code>var</code>定义的都为全局变量</p>
! S+ H3 G+ v& J<p><code>let</code>可以声明局部变量</p>
, i% f# o$ \& @; s<p><strong>声明变量:</strong></p>
+ e/ P. G; F+ N0 j3 A<pre><code class="language-javascript">// 定义单个变量, s2 c6 ^* q% I# r, |$ w
&gt; var name
/ u+ a! q6 T% l" P7 w% Y&gt; name = 'Hans'
: j6 @' ~, o2 B! E0 T! n7 c//定义并赋值0 i9 C3 m) `6 b3 N
&gt; var name = 'Hans'+ g4 m- B8 o, q5 i* F6 @5 G4 o
&gt; name
; D* p1 l, n9 x4 K+ S6 U5 h! m  v'Hans'
! I7 Y2 h1 L' R3 ?/ t  M0 k; C6 T  }# U4 q# B& Z# U! N
// 定义多个变量
5 p& R' L0 P  c" a7 w&gt; var name = "Hans", age = 18- U+ D2 e; Q* @! D& t
&gt; name# X$ J1 S( t$ p- b
'Hans'
2 @! e) _6 v7 g! C4 G' z&gt; age
& R0 N( v8 H% d* h18
5 k- R6 w' C: H$ x; M0 u+ W. s! A- D4 Z
//多行使用反引号`` 类型python中的三引号
6 B; o$ A3 j" f- r4 Q; b5 d&gt; var text = `A young idler,
7 `8 p7 d- w9 |, p7 }7 wan old beggar`2 b) ?9 p2 N; [/ i4 j+ o4 P( N
&gt; text
( ^7 j3 a. {  y$ O& k4 F. p  ?'A young idler,\nan old beggar'
* M5 d+ ~  E' X8 G. R. Q</code></pre>
7 T, U; L# l: l3 k0 g3 K<p><strong>声明常量:</strong></p>
( q) U. b* P, G2 K3 X0 j<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>' {7 i' ]  q# T1 n. i4 J6 ]$ l
<pre><code class="language-javascript">&gt; const pi = 3.14
! ?1 H& p: X2 k/ J3 W& P. n&gt; pi
9 P6 F6 e- y% ~6 }( v3.14
' r& ~+ O0 _9 w. l% w&gt;  pi = 3.01* s2 j1 `9 a9 F- ~9 W, W
Uncaught TypeError: Assignment to constant variable.
% L3 r( V5 m. U; m# Z8 ?    at &lt;anonymous&gt;:1:4
- b) S- g- d5 Z, W/ Y
  G9 l# U5 l. X( I* Y% ]0 W</code></pre>
$ t* _# Q0 ?/ {+ H3 c2 R2 Q<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
) H6 g4 P/ W7 B  W3 \2 R4 g0 v<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 G5 U4 W8 R# P' N
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
4 b3 L& G9 H% `) c' p! z8 O8 E<h4 id="231-number类型">2.3.1 Number类型</h4>- f  A) D$ X. r
<pre><code class="language-javascript">&gt; var a = 5  G2 A+ E+ \# a9 T! s, U  a4 q
&gt; typeof a   //查看变量的类型  # k" b6 T* ]! I( }' ]
number: S: }* g  p0 K7 r. ]- ?
- U, E9 w4 [$ N: \9 ^* m; ^
&gt; var b = 1.34 P! w4 m# L7 J' [8 ^) m, n- h3 f
&gt; typeof b
' I/ ]$ ]; |' v4 w0 nnumber
8 t4 E+ P4 l: q0 ]  F$ j$ Q. [1 y% b0 n. f, X
// 不管整型还是浮点型打开出来的结果都是number类型! W3 R# \8 ?/ Q/ U

( j$ u# y! |8 ?! y" |: V- |" G/*
- c. ]2 j4 x" w: VNaN:Not A Number5 Q) V; c, n1 t1 u- e- v5 w
NaN属于数值类型 表示的意思是 不是一个数字
4 h  a, A( `0 q2 r0 l( c$ [*/" ?: g* ?7 \  G' Z
1 q$ R. @$ l8 G; w+ V% {, I
parseInt('2345')  // 转整型
5 \* O7 m- e7 Y4 ~( b2345/ s: j6 f, A3 U5 H( b9 m6 H8 q3 H1 ~4 _5 t
parseInt('2345.5')0 ?( V* V, l4 ?+ a# \+ P  D: p2 U
2345
. G3 c; ]! i& l$ y8 IparseFloat('2345.5') // 转浮点型
% o5 ?$ U+ U! S2 }2 c2345.5# |- a; H1 N8 t' z1 }3 [
parseFloat('ABC')7 t! [7 C. k4 E3 j; R
NaN
' t4 I4 c  z& V3 WparseInt('abc')# i: A+ s0 e$ j# s0 U* O3 N7 ?
NaN
$ R# T8 d5 R. l7 N) S: K</code></pre>9 [5 D2 v' X4 C% K
<h4 id="232-string类型">2.3.2 String类型</h4>
* R& Q: `1 E, R" n8 ~1 V<pre><code class="language-javascript">&gt; var name = 'Hans'
1 d' N" B: E. [) D* I&gt; typeof name0 Q' J, h* Z( a. ]
'string'$ o7 R; ]( h7 E( s: e% @' Z' ^% F

" n6 t6 Z" Q1 e//常用方法
$ F5 K: q* x) s2 u# V. ~# j! e2 T// 变量值长度7 ], G4 p: x7 I2 _$ L8 X
&gt; name.length0 `2 k- [- U) S" t8 c8 b/ U
4
- k# Q  m3 S/ }4 @7 G- H8 u5 {// trim() 移除空白! f7 @1 C5 t* n; d& G5 x
&gt; var a = '    ABC    '
7 A$ j3 b9 ?0 y&gt; a% f. S5 G5 v$ B. y
'    ABC    '
3 ?5 U# R! z5 ]9 b" A- r: l/ R4 a&gt; a.trim()( \( t/ a6 i8 C3 `+ h) D
'ABC'
* P6 U3 N) m0 R# ^% y//移除左边的空白
0 @: |  p- D! v9 X: l( b0 h&gt; a.trimLeft()1 G8 O; L  L  S- h; z7 V
'ABC    '& E+ V' z& e4 Z1 n/ _4 C/ h; A. w
//移除右边的空白
) z- ^' F, ]# A6 X  G) X4 x, b&gt; a.trimRight()- P, {4 C& z# x$ V# m2 Y: b
'    ABC'1 s2 v5 j$ J6 e5 e
$ R- K6 F7 J, G: s) e9 }7 [; a
//返回第n个字符,从0开始2 C+ i  |4 I) L4 Z3 P
&gt; name5 n. o) L4 s, j2 }
'Hans'
/ \1 a0 A6 @' M, f&gt; name.charAt(3)
& a0 [5 s% V0 p; J$ f' x's'
7 k: y. Z! `. d* m&gt; name.charAt()
7 f$ d7 o( O3 b$ Z: N* l'H', m) C8 Y, t$ M. N" S: `
&gt; name.charAt(1); {) R, T) ^3 i% M
'a'
; m9 f1 x9 w) P; V, b
6 w* h! }/ O  ^' H3 p6 B+ V' {// 在javascript中推荐使用加号(+)拼接
* S6 O5 V& Q8 q6 T0 M, U8 }% X3 z&gt; name2 ?/ M- @9 r" d( y, g
'Hans'4 _5 j% {  E% N- x0 P
&gt; a( m  X8 z! ~; Z+ z9 A
'    ABC    '
3 b1 b& Y* a* j6 G) Y5 Z&gt; name + a
( }( i5 K+ A  v* J'Hans    ABC    '
' }% \1 K& b  j( b0 U' b9 z// 使用concat拼接
8 [1 v, K& M  w; J5 c$ F&gt; name.concat(a)
6 k1 R2 x5 g( _'Hans    ABC    '
* \7 l/ j" F, X8 t( Q8 X
' @7 A. v/ F1 b3 c4 O  N//indexOf(substring, start)子序列位置+ V+ G8 o, v! T/ O5 B. ~

, g) A. x5 D# t& d$ H+ E$ j' N&gt; text
, }  V; ~1 u7 p'A young idler,\nan old beggar'
, Q7 q6 |: Q0 z6 X. J  c7 y&gt; text.indexOf('young',0)
) g9 i3 l7 q8 A2 h2; C! u9 X' I/ v

6 d6 M8 Q5 {9 Y//.substring(from, to)        根据索引获取子序列! |( d1 @$ X/ d* c$ f
&gt; text.substring(0,)
- O, X8 A6 y2 Z4 s'A young idler,\nan old beggar'
' w" _. a3 W/ R' a; F8 b# Z&gt; text.substring(0,10)9 t3 Z4 E0 f: H$ T5 Y
'A young id'0 i) n  }; U+ e6 \+ M
! h6 T0 B1 o2 _& u! `7 }* H6 Q
// .slice(start, end)        切片, 从0开始顾头不顾尾$ p  D% ?& P( u' s) H* Z
&gt; name.slice(0,3)* ^! j) s0 O$ y9 J
'Han'9 g' k% ?. I8 ]) q3 |( b( x, K: \
, D2 ~4 I# `3 \" H: J$ r9 M0 V: Q
// 转小写3 g2 C' t) K) t' J" x
&gt; name
( q8 m9 @* i0 p3 W$ C5 g  R'Hans'
4 r" @! a7 ?" F$ b& O+ m&gt; name.toLowerCase()% ?% ~. g; p0 V2 O
'hans'. |+ r, E, n3 I
// 转大写- H. R9 D( v' B1 H2 }4 _: n6 U
&gt; name.toUpperCase()- ~; c7 W/ h( z
'HANS'9 d& |3 a: ~& Z

/ U8 Z8 J9 s& |// 分隔+ [0 n! N1 w2 Z0 ]' P
&gt; name
; @+ o- T: j* ?7 [+ M6 I( s  S'Hans'
+ ^0 z5 t3 u7 O" ^, m9 |# a&gt; name.split('a'): E& ^, R" h- {' Q: W+ U
(2)&nbsp;['H', 'ns']
4 z  }5 {5 E6 ]$ U+ W- R% F</code></pre>( V1 T& K8 `" ~1 G, a' ]* \
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
/ ]4 S9 f: s$ z" o6 l* L2 x) D<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>7 Q6 D- Q3 T7 f2 w  N0 k
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>$ K# @6 T8 q! ~
<p><strong>null和undefined</strong></p>! }% }6 E! y2 h( ]! D& p: p
<ul>% l& H- n9 Z0 u5 M( A3 B3 J
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>. P& }; x; U0 [; y6 _' [
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
7 l( p! Y3 c, B2 [" C( T</ul>: _, J+ w& u3 s9 B: M* r# [
<h4 id="234-array数组">2.3.4 Array数组</h4>
) u, L: O6 k: r( ~4 ^* n5 w<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>0 N8 E9 f' U8 o5 i" V
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
' e0 `4 C5 O/ f# s1 |7 D) _&gt; array1
" B- J- G, U. x9 k(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( M1 e$ a! b3 Y, P! p, K  w
&gt; console.log(array1[2])  //console.log打印类似python中的print+ ]- N+ Q% c! t
3
4 k$ n. Q( p( {2 T// length元素个数
# p9 m7 R; O) B&gt; array1.length
; \; K  K" G( N% n" I7 H8 H6) K+ {. y7 ?! k. m
// 在尾部增加元素,类型append
2 S. U7 r% f* _$ ~0 J9 q2 u&gt; array1.push('D')9 N7 Q0 |, O3 v/ V+ d& C
7
$ o  @8 {' Q+ ^/ l&gt; array1, Q2 l* a4 `* {& w. X
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
1 V- u% b$ d8 I6 E6 P  v8 {// 在头部增加元素
- M. p( N, @& f! g9 j&gt; array1.unshift(0)) o4 h7 t/ f" |. @/ m( s
8
6 X: m: D" V- u; O&gt; array1) c& x  i% k) @6 b8 W; g) \
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']+ r4 B% W- ~6 ^/ g; j, E
7 O  D2 M% ~% r
//取最后一个元素
( P; A* k& i1 t; k* r; t&gt; array1.pop()
% p5 i# I! U. z  L5 x" O; ~# `/ H'D'
$ u* {0 w* I! z* Q0 X; s7 N- X  @8 x&gt; array13 W/ j* t  E1 W- L% u2 K
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']7 ^7 S0 T* H# |4 X7 _* c# P
//取头部元素+ P# |  A6 ^  A
&gt; array1.shift()
3 L$ @) L/ Q4 W: w0 G0. P  u1 {1 h" e9 G  P& l
&gt; array1
! ]2 w3 O3 e+ h7 M" k% J(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& ?3 Z$ o& d+ P4 P; }9 Y- X+ U3 K# J* v8 ?3 R. s7 m
//切片, 从0开始顾头不顾尾0 t+ ?3 D8 z# Z
&gt; array1.slice(3,6)3 h6 I: `, m- b) W
(3)&nbsp;['a', 'b', 'c']
' M5 C. J5 [( W" r5 ~// 反转1 `8 C5 m) c. D' F5 D; E
&gt; array1.reverse()
4 F& F# H% d" Z' Z4 a9 N) N(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
* n( J5 x! a; Q// 将数组元素连接成字符串/ Q$ u  }5 P5 I
&gt; array1.join() // 什么不都写默认使用逗号分隔: @  o5 {' c: N" l
'c,b,a,3,2,1'4 s! T* {+ g  K9 U9 F4 w$ l
&gt; array1.join('')
$ `- o  g# T) x" o: i3 y'cba321'9 R7 y2 c3 V& o# _3 {
&gt; array1.join('|')) l& }8 Y0 B/ h( c) @) j  }: P6 {& d
'c|b|a|3|2|1'
: a. w1 |1 _) k+ C1 q; n# U& R& {
1 O3 ]6 [8 [8 R! p* j6 R: k' r// 连接数组0 [' j# ~: p! @8 ]
&gt; var array2 = ['A','B','C']5 B6 _# N7 J- L- y& Y: a
&gt; array1.concat(array2)" G" g. D9 [; x8 L8 R
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
2 e" Z. e  D% Q* d- m8 \0 }6 Y
0 w( j7 G7 x2 ?6 L/ ?* P// 排序& Q" x. ~3 h# s
&gt; array1.sort(). g5 q% q( X2 Z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
9 u* t% w( E, O! |0 x
! I! i1 o5 ~4 U. @- }4 A6 q8 w: ~// 删除元素,并可以向数据组中添加新元素(可选)
3 D- T$ S) B& v; Y( Z&gt; array1.splice(3,3)  // 删除元素% a8 r7 K- g9 f4 @1 K+ `
(3)&nbsp;['a', 'b', 'c']8 ~* C) G% A. P. O, V0 P1 b
&gt; array1
* b3 ]  J0 f6 L/ n" U$ v(3)&nbsp;[1, 2, 3], K! p6 f9 G& d9 k- }1 L, \( t) B
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素* R/ X- Y! Y- Z3 J- `3 o
[]: [7 C! x& Q" K; g
&gt; array1' l; Y/ A  A$ M; W6 r
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']9 m- E+ _( p. a1 j6 G
1 a0 H; c$ D6 Y9 z* h
/*
4 p. ?1 G2 l! v/ y( dsplice(index,howmany,item1,.....,itemX)
% V4 X; G5 y7 Z( d: r3 X) @0 x# Kindex:必需,必须是数字。规定从何处添加/删除元素。: |3 [1 O: E2 y% d0 m( V
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
0 a7 |# |# ~8 K6 K. z# jitem1, ..., itemX        可选。要添加到数组的新元素+ x# F% X: ]# s9 }% X% A' F
*/+ j, d9 J8 F( U7 R: e) p0 ]
% N0 L+ m$ ?: {" {; n. X* s
// forEach()        将数组的每个元素传递给回调函数
: G" t3 m% e" D& |3 D' H8 t3 s&gt; array1.forEach(function test(n){console.log(n)})5 E2 l/ j& }$ d2 o  m, u# R' s
1
5 a: X# J8 j- N& T  Z# m' g' d% V) t 2
6 B, g, `& x. m; h# H! p 3
. t- T1 C8 {& G5 l A, x3 m* V6 i9 V2 \. b9 q1 C
B& ?' M% H" j2 G$ U0 m
C
$ T6 E6 j: v6 @8 r0 e5 g$ F// 返回一个数组元素调用函数处理后的值的新数组
; D* [1 \7 m, \&gt; array1.map(function(value){return value +1})" L' |+ [3 M! H6 j
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']0 h) E4 w' w2 i/ P
</code></pre>3 y, O1 e  ?' ]( s5 q2 p) Q1 R
<h3 id="24-运算符">2.4 运算符</h3>
6 @2 A, w7 T# P5 w<h4 id="241-数学运算符">2.4.1 数学运算符</h4>8 b# a! C2 d: g$ Q1 ]1 C4 M
<p><code>+ - * / % ++ --</code></p>
1 D3 `; U3 ~- N3 o# r+ |0 F<pre><code class="language-javascript">&gt; var a = 6% H5 z2 h1 u- b. K7 p! h1 v
&gt; var b = 3% u: }# w! g) `% d" z/ m0 S( [
// 加0 w/ V6 C' L; O8 ]
&gt; a + b
; }' ?0 a) G- Q2 @0 f- Y" p4 [6 M9
5 w1 b# ?2 H% ~: c# P// 减$ d  ^4 Q, E! F/ C' x
&gt; a - b6 E) V3 r" V% a! V: h2 M
3
4 E7 C. @3 A' ?+ ^5 r" Q5 S; u// 乘
8 \! }# u" n2 V3 U&gt; a * b% U2 f" T5 E- g2 R( p
187 X8 V8 j1 U6 c3 Z8 i
// 除9 @* v) n' J9 |! F& ?; n, a
&gt; a / b
8 A6 ~" l; p1 T9 Z9 |( I9 F' J2
' x6 y  `; n: v" O3 I+ ?" n5 x// 取模(取余)
, f& ~0 l' F/ n1 C* w6 v) D" s&gt; a % b
% x9 Y. P7 a8 A# I) l0, a" J  D$ Y6 y% Y- l* l
// 自增1(先赋值再增1): ?" t: A, d7 m1 [( e
&gt; a++
/ x' U% ]  U& A4 J65 O" R/ l/ R0 [: W' V$ G" ^/ e8 s
&gt; a6 `( o3 j. v) E  X# `
7
. G, h- Q% M  u& |- p5 Z! L9 T// 自减1(先赋值再减1)# w0 k( X, g) \2 Y7 C
&gt; a--
# y: k& g1 D( C, [  V3 R7& V8 q# }$ U1 k2 w, {9 m6 _' x1 C
&gt; a# U. c2 D* b- L2 ~3 }  a
61 [' e8 K7 ]7 N6 U) _7 i
// 自增1(先增1再赋值)' S9 F9 a" i/ G- H8 S% A
&gt; ++a: s$ {0 c( Z$ w+ ?
7! s: N+ A. d; o" K+ r: ?2 x
// 自减1(先减1再赋值)
5 Y$ }0 W' C3 W$ E2 M' H' k- y&gt; --a9 p& n" o' [' ]  G( j" v1 G
69 A. V2 R* A  n+ W/ c! |$ {
&gt; a
+ B6 o6 ~' U0 W3 J1 h1 S: I% a6
+ [2 m/ Z, }$ z. Q# _% B# C
6 C+ |1 F2 Q/ T  E//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理8 `" j( `, B4 P% z
</code></pre>$ P& B  B2 ^* l3 r" b, b4 X
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
' f1 C( I  B: Y8 x' x<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p># s5 u1 O6 W' `% X+ o' O5 W& y4 D
<pre><code class="language-javascript">// 大于. D. g2 }* F7 T- \' J" d9 m
&gt; a &gt; b4 t0 O" \, h$ c9 M! _# P
true1 q: y9 O( Z0 G( {  L" [5 s! p
// 大于等于
: i  r1 S1 c, i4 h  g/ w, o&gt; a &gt;= b7 a2 \% H1 @4 t7 I3 g" T' o
true
1 ~  `* ]+ c* d( O6 c" y3 l- R% l/ Y// 小于% W7 O# `% E5 |
&gt; a &lt; b
3 t3 P, E7 Y3 ^; L. B  cfalse+ X! _" N  y' T: O. j& S
// 小于等于9 h7 w% R) Y7 V, |6 J4 P
&gt; a &lt;= b* b0 R  }1 {2 z- X- ~9 |' {
false
3 k& T$ c+ y6 ^8 E9 I, s1 U, T// 弱不等于
9 H* e" Y) ~2 n) g2 t2 D* t7 F&gt; a != b
" H- w. W+ P4 [! Etrue+ C* j' I5 C$ I4 A  ^% |, d
// 弱等于8 Z; P/ E$ v1 e% @6 Q
&gt; 1 == '1'2 O  i# f1 v( h* ?+ |4 z- d" a5 q
true) o! D5 y. G* b0 l
// 强等于
! ]* t$ q7 P5 R; R, w$ n&gt; 1 === '1'
# Z2 P$ Z$ A' L  Gfalse( Q3 U( t8 h$ y0 ^" c/ l
// 强不等于
& B1 w1 `9 W3 ^) G&gt; 1 !== '1'5 p% F  G3 D: @' s* H" j! a9 Q
true1 u' s( w5 m6 R# z
" x2 t0 v, x" l5 Z
/*7 ~, }+ Z8 J% S* h4 M# F3 d' Z
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误# O6 R% o! }- I$ Q8 z# ~$ t
*/
" U5 s% H0 k! e& S( ]" e6 p</code></pre>
$ [" Z2 j$ d- Z& p8 D! J, D. w<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>2 i% N. E! S' ^9 q/ ~
<p><code>&amp;&amp; || !</code></p>
3 o4 @3 F- h6 `: M2 C, D; D) O<pre><code class="language-javascript">&amp;&amp; 与7 t3 O- Z# R' Z
|| or 7 q/ x$ J% n& X) E5 {
! 非
( V) _& D: x9 f# ?2 N</code></pre>
; W0 \. p9 J  s' N<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>4 p: k3 `" v7 z
<p><code>= += -= *= /=</code></p>( q7 `4 q3 Q; I7 D3 M5 g
<pre><code class="language-javascript">// 赋值9 ^& k# N# S% F$ Z) W0 K
&gt; var x = 3# s# M+ A+ K; r3 H7 K) c
// 加等于2 \5 U( v/ H- k7 M; L% ~
&gt; x += 2: W2 L2 Q/ J' N, Y  A
5; D% N5 B+ g! M! z
// 减等于
5 D  f0 V* `6 l/ T7 q( c&gt; x -= 1
  _% r. |, [/ M' m: M4
- S2 P; ]. {* g, B# F  t  s! ?// 乘等于6 t- q6 M+ d/ g/ i* x; z. p8 L
&gt; x *= 2
: E' y0 x, I  v# A- ]8 D8
; d7 [; @, p5 e// 除等于
5 B5 R. o' S. L8 ]; |8 L&gt; x /= 2
5 q0 k' N( T; r( Z47 U0 n& ?; a2 v" N2 F  [2 `4 c* Z
</code></pre>
- T- |  @& A' s9 Y( {<h3 id="25-流程控制">2.5 流程控制</h3>
4 {% z7 \8 `3 y8 w# ?# C<h4 id="251-if">2.5.1 if</h4>  ?) `, S) i& I" d% l  p) P' ~0 v
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
+ n& y7 B$ T) j7 m$ S( S- n. x, j# @
&gt; var x = 3* i% R; j4 P) Z' b. t( u" ]" j, H7 e/ o
&gt; if (x &gt; 2){console.log("OK")}" f' m3 k2 G3 q  G0 N
OK6 N1 W7 g. j1 x) |
, J0 }/ E% W* S7 m. s4 U  h9 L
2, if(条件){条件成立执行代码} 6 y# d# {. J, D3 ^
        else{条件不成立执行代码}
7 _# g3 x- F. r6 c) w' e* v! A5 u% W* ~" }( ]
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}% w, S, Z& Q: c+ O" d
'NO'
2 ?( m3 \; {( \2 a6 d0 T4 I# \7 I6 E- o  n
3, if(条件1){条件1成立执行代码} ! h7 u  M$ Z, d
        else if(条件2){条件2成立执行代码}
7 X( J: j, I& L1 v! c    else{上面条件都不成立执行代码}$ Z& X7 ?- Y5 X3 A
, a3 {4 Q- b( T. r( G
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}/ m% e5 d9 J6 N% G) z7 b1 L
Ha
9 h. {# J& Z# i' I</code></pre>
8 e& C: t1 Q6 |$ A<h4 id="252-switch">2.5.2 switch</h4>9 q, j2 K4 l2 P: {7 o
<pre><code class="language-javascript">var day = new Date().getDay();0 S3 K8 f* F; X6 p" u# ]
switch (day) {
; C$ i, i9 e) H3 U, T0 k! h1 J. ^  case 0:
. C3 n1 U$ ?: K/ \  console.log("Sunday");
  |  w- H+ i% ~  break;
( f& f; W" g5 {  case 1:
& V7 [3 V- L9 v9 v  i  console.log("Monday");  g& m, D. d0 O; b% m. o2 W
  break;- J/ w! ?: q; k7 V
default:
  g9 b" I$ B7 ^) Q+ T  console.log("不在范围")
0 r* ~$ L3 O2 j  W- K. k  i! w8 w" y& i}, q  t1 A, c/ [7 r, V* d# [
不在范围4 y$ K# Q: l7 v5 ^1 v
</code></pre>2 `5 `& t7 Q9 C$ g4 b
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>6 V  ^0 m' @. S) N4 m
<h4 id="253-for">2.5.3 for</h4>
6 C' G" ^1 A* k6 Q" @1 L; S<pre><code class="language-python">// for 循环
# q+ x7 s9 M* L        for(起始值;循环条件;每次循环后执行的操作){
1 ^$ g. X/ ]# `7 `# O+ l/ J        for循环体代码
" e) A) L5 S: \! P% N    }$ S. D' G7 ]* [  j. f6 Z" _7 z

, n5 O& l0 ?4 [/ B; Tfor (var i = 0; i&lt;10; i++){
# @0 s. j9 A* w- A8 B    console.log(i)
/ W0 u: A7 P" T6 ], G* D; _" y6 [}
% a' H3 K' q1 @        0
* C( m  J  V. y3 M! y, J: p8 e        18 T* \* X) {9 T, D! _/ y
        2' ?7 q; x8 T# Z7 Z) b$ M! v
        38 ~  |" B8 d# d% I/ f! i
        4
5 u- [# ?; E  n0 ^% b        5
9 b! b9 O1 Q. Q: X  [        6* g* |7 Q. l; e) ^" f5 N
        7  x: J' R1 Y8 Y0 `$ G
        8. M! ^* h- f! }1 n2 T- C$ _  [
        9; j7 {: y6 h- r& K) [+ m7 S
</code></pre>5 p- o  b) v* a1 W3 R. |$ I7 _
<h4 id="254-while">2.5.4 while</h4>
3 R& b* @, c' i. w: Z; \/ [<pre><code class="language-javascript">// while 循环) X' [+ ]. l  u& R+ `, w, \
        while(循环条件){
2 v/ t. e$ b5 T& ]        循环体代码& m6 g. H1 K3 s# l
    }
+ s! \/ n5 d( D6 }) K+ \; C0 _. T) T7 n# b
&gt; var i = 0. I. l1 D; p0 F" m9 K( t) {6 M
&gt; while(i&lt;10){$ N3 E& v) M, w* H! {8 Q
    console.log(i)
6 O+ K  d  Y2 x) |! ?1 a    i++4 ]& L. g# y) f( v9 Y! b# V7 p1 [
}
9 B! q% G$ c; N6 a) t$ G# n) h5 T 0
& c0 H) j5 W! K 13 f" \# J. V  c" o$ @# G0 @
2
! P8 h% T) S0 |% a$ m" f& b- ?. l- C 34 {8 ]  e" u/ l2 Y8 J8 F, w; q# h& ~
44 H3 B5 ~; ]* L) o$ a6 `
5) B: J  q3 C* f  N' X* ]* O* [
67 @( |! J: w2 o8 r5 ^; r( P# _
7
) @3 V6 r8 k. |0 v9 ]) K 8. r6 J5 _' i/ L- V2 b/ f
99 T; u) p. X1 }; H2 c1 c
</code></pre>
9 O2 |2 V/ A  {/ y" i<h4 id="255-break和continue">2.5.5 break和continue</h4>
5 C& f+ I& ]/ S9 ?<pre><code class="language-javascript">// break' U6 s, \, g& b2 a6 M4 p
for (var i = 0; i&lt;10; i++){9 S9 f8 F9 |$ b5 i" ]3 a! d  O
    if (i == 5){break}+ J$ w6 A, I* Y9 X8 K  e, w9 o* r
    console.log(i)
7 s; X& t& P% I% I7 ~}
- C. k: v7 ^5 Z/ ^% U0 ? 0
0 z& v! K0 ]  C 1/ z5 ?, u) U$ Q' r# W$ K6 d+ Y$ C" v
2
, d) b" ^: l. J# M, |" s. K2 w- Y9 n3 | 37 n, F: `. m+ O' c
4
) R8 [; |* ~: m' u8 P& W// continue0 U( p0 k1 R( N% ?* p/ J
for (var i = 0; i&lt;10; i++){
$ E* F; f# A5 r+ s$ Z) L: m# r    if (i == 5){continue}
3 M! m- W# M7 R6 e: J    console.log(i)- L8 \& F2 p3 ?, o
}
6 [& g0 c/ \) [! p' l( E  b4 B+ A 0; s- t5 P/ M4 P* Z
1
& y; K7 h: s6 y+ I8 K5 Y 2
9 ^. s% Y9 E7 ~( l/ e) I 3
. x! t/ Y0 _4 o; S+ w 4
3 ]# x# O* c& D0 _ 6: M5 a! x% n( K3 I- G
7) v" x5 V1 ~% n0 V  Q; d$ o
8. [' y/ D5 w+ f
9
% {$ R( r1 Q6 j+ F+ o/ X+ R; w  d9 E( w( a: u
</code></pre>
: g- a7 Z$ V. Y<h3 id="26-三元运算">2.6 三元运算</h3>
+ l% D1 [; ]% k8 w7 H" c& U/ T<pre><code class="language-javascript">&gt; a' L2 O* d6 }' g: d% w6 e4 u
6
( e' f* y8 k( \- L; X% [&gt; b
' E9 B  p0 m: o6 A% n" j39 G/ @% R+ C3 G: q' t9 [  @

6 u* X* t8 j* p3 s% t6 B//条件成立c为a的值,不成立c为b的值
5 I, ^/ d( o4 {9 k3 `6 j7 Q&gt; var c = a &gt; b ? a : b
' m7 M+ O. U% _% q& C/ t. i0 |1 T&gt; c
7 s' o+ d6 n. A+ M- u' z, f7 g6
  p4 O1 Z' y- y3 [+ @+ D: S( V+ I/ l9 N+ T3 n8 L; L7 c
// 三元运算可以嵌套
% Z# w& g: G4 S7 f# {4 \6 e</code></pre>
6 m  [! l, ?3 B  y$ r% w' [7 q/ E<h3 id="27-函数">2.7 函数</h3>% u8 R4 I$ Y$ W1 i3 G
<pre><code class="language-javascript">1. 普通函数
: h8 G# h8 X2 _4 F6 y7 e&gt; function foo1(){% A1 A$ r$ ]1 a* o( \$ m% b3 n3 d$ [
    console.log("Hi")" U4 @! x8 n) d9 [. a7 k1 p; M
}
1 ?* Y1 x2 p% k/ y& O  ?4 u2 I5 M4 {+ T0 g# p& r) o( C1 g) |. I
&gt; foo1()
% c9 L+ A: I. v- ~" F        Hi  X- n6 |$ V+ J+ j0 R5 J# o; K
2. 带参数函数1 v0 v/ |! C8 t4 E+ D$ O8 h$ h% E
&gt; function foo1(name){
" \0 o7 [9 p1 T3 d' q$ Sconsole.log("Hi",name)
3 X  |4 G/ D2 ~% X  R}( h) y7 p3 g# W

; k( k- n, B' W# c$ C&gt; foo1("Hans")
) a! J' l4 W- ]Hi Hans
) K& F' O* H/ K& E+ ^# O8 g+ `; b4 u
&gt; var name = "Hello"- N' b/ k0 [" \) b5 X% ]; ]( Q" g
&gt; foo1(name)
! l0 C: E! s% Y5 R6 M" [Hi Hello
) ]0 w# C$ R5 H4 L
- ?# T1 M, {" f4 B+ Y2 m* D3. 带返回值函数
% T! C# y& X! J! u8 |( L&gt; function foo1(a,b){
* ]  W* H* g, _& w        return a + b   1 c' f  k/ y3 a5 ]  a
}
: S. }# O) t; A0 T&gt; foo1(1,2)& R5 Z3 _0 ^2 u+ h6 M
33 G, b' V* z# T- e& Y
&gt; var a = foo1(10,20)  //接受函数返回值
9 V/ x1 a- ^9 y$ M2 Q&gt; a
3 h+ o; T  ]1 ^' D- k0 D$ S30
8 u+ e& D3 G5 e2 l8 k( w$ n+ t% I
4. 匿名函数
+ _7 B2 T* o- L3 N, z&gt; var sum = function(a, b){- Z! w- @+ a  P8 H
  return a + b;, G% h+ q! x1 \; m
}
' G: t* Y) j8 s8 G9 y/ ^&gt; sum(1,2)
1 s9 |4 i' X: _9 I  m, Y# d# ?' z3
0 l' U6 b, s9 R+ A7 G( `8 j  F! E! F( N' ^1 ~: M
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
4 X# Z7 x- o1 B2 F&gt; (function(a, b){
8 l% |) Q! S8 W  return a + b
, o* g' G* p% N9 V})(10, 20)) l, L  C% `2 y' W
30# e1 o: F3 V: C* j" v
& z3 L0 e' O; _8 W- G4 A/ L
5. 闭包函数
6 p6 t, l8 M6 b% W// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
4 x$ H5 ^4 D- ]var city = "BJ"3 _0 [3 b" W* z4 L2 A
function f(){8 ?5 i% M% g1 s' S- f* o# S
    var city = "SH"" X0 O( v4 Y8 U) H: K
    function inner(){
% n  g4 H' N0 X5 q0 z        console.log(city)
4 e$ u( p5 I$ H; y9 i5 U    }
' X* C% N3 @6 H8 G( L8 N9 _1 q( g    return inner
  q" k. \& T! T}  C8 @, }- ~0 v
var ret = f()
9 y3 s7 s. h+ F/ r9 C; i! L3 x$ Xret()
  `% @& j! e6 c: C& Q执行结果:! R( k$ x) X5 J& m& l& e0 O) ?5 V
SH
, ]" I" ]: U4 O9 P& l& [) x% A! Z) @! Y+ l5 {  e
</code></pre>
- `0 K3 p% O: Q# ?6 d. J<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>- ^3 e  ^. Z! ]' t' ?) O4 G3 V
<pre><code class="language-javascript">var f = v =&gt; v;# e* o& |6 ?) H- ?
// 等同于
; @5 h0 ?4 H& I# V+ g! tvar f = function(v){7 O( F! f7 ~5 C
  return v;
, x7 O: ?3 z" C: C}" `0 Z$ G1 f4 E. j4 f& f
</code></pre>/ d/ ^8 F$ ^7 K7 _
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
" m' h) t5 U0 [. f- v0 M- V1 P' r<pre><code class="language-javascript">function foo1(a,b){
$ ?9 {6 t1 ^% ^    console.log(arguments.length)  //参数的个数 ; Q/ y3 J- s! T% ^( s0 n
    console.log(arguments[0]) // 第一个参数的值
7 ?" R" C& w: C2 e; }: k3 p# c* J        return a + b   
; m* J% \7 t9 Z8 A6 [  _" }& P}3 F5 ~/ h7 ]6 g$ `, L3 e
foo1(10,20)1 l, e' a6 }8 t/ i  n
结果:: ^0 k; y" Q/ v2 H
2          //参数的个数 9 }6 a- q  [0 R- K; _6 e
10        // 第一个参数的值
% P# M+ a& r% q9 \4 V7 u9 K5 Y30        // 返回相加的结果
7 k6 k7 Q- y2 o7 C* E</code></pre>
( R( n% P* A) Y/ T- t<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>8 I2 G5 O1 ?( L$ A8 \7 t: ~, R
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>; O4 ^5 |+ r. ?( C: k' j
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>  `) ^8 i3 e4 p5 c7 J
<h4 id="281-date对象">2.8.1 Date对象</h4>
. z- |7 Q; j) h% a  A% n0 J: S( w! o<pre><code class="language-javascript">&gt; var data_test = new Date()
1 L. Y5 @* ?" x# Q9 Z0 G&gt; data_test
& \8 T2 W. l+ FFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  N( e) S) O" t3 P7 C1 F
&gt; data_test.toLocaleString()
+ h6 x( k4 `1 C: q9 n9 I  \- ?'2022/2/11 下午9:44:43'; }8 Q6 W, U! m9 ?
+ @0 I5 G8 d/ g: I
&gt; data_test.toLocaleDateString()
) h; j! j. l4 b+ O% E'2022/2/11'3 J# r# ?& e7 c6 X! }( S
  j: k6 G$ r( K8 f* S5 c$ C/ J
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
3 p* D$ K) M# c0 j- O; L( G&gt; data_test2.toLocaleString()9 J. C: Z1 F! N# J* U% z* P$ v
'2022/2/11 上午9:44:43'
; d9 U! z& x7 W1 w( v( P: h
  \& Z# u# _% a: H  L0 m4 V// 获取当前几号& T; P' w; t$ `( w; T
&gt; data_test.getDate()$ k- h9 E% F4 u4 T! n. H4 k
11
: ^' a( ^) C9 @8 l$ L/ o: u' i1 v// 获取星期几,数字表示- S* Z: E3 G- @* V( f& ~( s$ q
&gt; data_test.getDay()  
: c+ M2 d/ u/ g/ V* D$ R5
  T+ y/ L+ [  M7 Q( C// 获取月份(0-11)
9 u0 i" P0 }: d( a$ ^( f4 E&gt; data_test.getMonth()% l. `$ y8 Y  h/ z
1: `) U+ f+ E! f/ ]6 C( c$ H
// 获取完整年份* F  w* W! P6 d/ p. H7 d) ]0 y
&gt; data_test.getFullYear()3 I/ g( a8 v# L2 k; Z
20227 Q/ _5 b+ J( e; o8 s9 M
// 获取时
0 F1 T7 x. X7 O/ u&gt; data_test.getHours()
# d8 i: F: c- [8 P0 N. `/ T* G$ o21) n0 r& a3 n& D) \2 `/ ^8 P. l
// 获取分2 D5 y! T, ^" N6 u
&gt; data_test.getMinutes()
9 `; s" D8 C6 S& ~44
# i* x6 \; {/ Z+ O4 ~  D// 获取秒! D- L# m# k' C
&gt; data_test.getSeconds()
5 D( g# _: m% d3 J$ t43  |' M, l, Y! }, M2 Z0 C
// 获取毫秒
3 f% c, s( g' L9 e+ y&gt; data_test.getMilliseconds()7 a5 f3 Y: ~, S/ F1 [  O  a* ~
290
- f& X0 ^, h) U( d: k// 获取时间戳; {8 a. u5 c# O# k* q
&gt; data_test.getTime()- P. P; s& m  Y
1644587083290! S  P1 c9 \% w3 y3 s
</code></pre>
8 q5 f  \* U% \, J5 T4 }<h4 id="282-json对象">2.8.2 Json对象</h4>  q, B, c- i0 C6 r. S, M
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
5 l3 m0 H6 F* j$ D) DJSON.parse()  // 反序列化,把JSON字符串转换成对象  Q. L  W- ?: T! }1 G

: j+ |# {( @+ O( J' [% X3 u; X// 序列化
0 B( M3 w' B. _7 O( b' r0 p, Z&gt; var jstojson = JSON.stringify(person)
# s$ H7 i! J. y' \&gt; jstojson  ' L& I$ l, F8 S
'{"Name":"Hans","Age":18}'  y: `0 J9 g2 i$ `

* C( P/ `; }" Q( W* o// 反序列化1 O9 J# T; a, R! `  e
&gt; var x = JSON.parse(jstojson)
" Q7 ^. [1 b  K) A& V&gt; x
  R0 {0 J/ d* s" X6 v+ k{Name: 'Hans', Age: 18}
8 |7 w6 U. V6 K% c9 n, q6 a&gt; x.Age! W* Z7 ^) H+ \- W& S2 x
18
# N/ E3 g" j8 H, P7 Y1 s</code></pre>
7 |' k7 Q( U+ b) m$ g9 y<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
+ K' Q, b! L2 f* P<p>正则</p>
& _4 H8 e1 e7 @" W, \. n<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");7 L4 O. N) T8 T* }) t: j4 N
&gt; reg1
- K) W1 z$ R# U+ d) W7 B1 _6 ?, q/^[a-zA-Z][a-zA-Z0-9]{4,7}/& D1 o9 ~$ v. c2 B
&gt; reg1.test("Hans666")
# }0 l  A4 i0 x; L6 h  y8 n0 {, @/ K: ctrue
: @0 h0 u5 I8 S& M: \9 I7 u* R6 d' g4 P" ]6 T
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/; Y$ q: H$ U  S; V9 W; t
&gt; reg28 g/ O  {$ z  ?# F
/^[a-zA-Z][a-zA-Z0-9]{4,7}/0 E2 A' b) B. M8 q8 l( a' m
&gt; reg2.test('Hasdfa')
5 P* w+ b! z/ k2 K$ b9 Xtrue
  P/ g. ~! l% n& q6 t9 l' p' P  C4 ?0 P# H7 a( H# M! ]* O
全局匹配:( B- f0 a& v/ P" P: @) o/ _1 E
&gt; name
+ ]8 }9 p. e+ R) m# ?: H'Hello'
8 G0 f1 l: j( \4 e- w' `&gt; name.match(/l/)
) z  w) t: [) x9 U+ ]['l', index: 2, input: 'Hello', groups: undefined]
) v# q" n6 ?7 K: n/ A/ j4 _! G6 ^7 e. g, z, g
&gt; name.match(/l/g)
5 N! {( x& e' S7 \' \; V(2)&nbsp;['l', 'l']
, v- `" [. N2 i8 W- Y$ \! d6 Z  C// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配* u( b: W2 ^5 x5 \

+ E8 `& ^$ ~3 i* t* {! L5 n全局匹配注意事项:, \& Q& w) F7 q8 S3 e9 b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g7 d1 I$ [5 w4 B) q0 U& T9 y
&gt; reg2.test('Hasdfa')8 W* W- d- v' C- C$ l, r: x
true
0 G# A* P: b3 a+ P. T$ o&gt;reg2.lastIndex;7 h% d0 M; H; f/ s) ?+ e1 D+ w
6
! @: z6 `* j1 x0 y4 l9 N- ]9 ~&gt; reg2.test('Hasdfa')
5 k! p9 z# R% {. `false5 s3 p% F( [8 k. y6 Q
&gt; reg2.lastIndex;
9 c, X+ N* O( |0' D9 E5 i* d8 Y: Z  e  q
&gt; reg2.test('Hasdfa')9 [# T  p$ D$ e" {% c
true( ]. P4 w5 h9 S8 n" P/ N. e
&gt; reg2.lastIndex;
* W5 x8 w2 z) \65 g$ }3 `+ T! G7 a% T9 T0 z6 j* }
&gt; reg2.test('Hasdfa'): l1 {& w9 E# l) X- `9 V
false
3 t& i; \# k3 K/ B3 n& J% t&gt; reg2.lastIndex;: G8 e3 c4 s- D
0
" s$ I/ S  ?0 O* |- Z) }// 全局匹配会有一个lastindex属性* X! d% d. ^- T& r
&gt; reg2.test()( B9 d+ O4 y5 k; K1 P: `( z
false+ \8 v) M; x) M* ?
&gt; reg2.test()
) g1 Q1 L$ C5 o8 i- Ptrue
/ t4 E9 e% ]  R% G7 U// 校验时不传参数默认传的是undefined
- z* s  C  m+ i; k4 |</code></pre>$ \9 n" X9 k0 a5 c$ f, V
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>! w5 ?# N# v) ^# r
<p>就相当于是<code>python</code>中的字典</p>
) E9 n* `4 G1 }- w<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
+ B8 f% d& }1 G9 M. f8 Q2 m&gt; person9 r3 s1 {5 G' v5 B( V3 m7 a9 r
{Name: 'Hans', Age: 18}
2 f, G5 Z5 R6 ~+ K&gt; person.Name# c" W) c- L/ n5 j: E+ d
'Hans'; B  q4 E, I7 O, f% u4 o: G
&gt; person["Name"]0 x% M. t' M+ ?! ?2 T
'Hans'; x; v" L9 B+ @6 N. h

. f5 G7 U2 W+ |) P" H; L// 也可以使用new Object创建
+ A' L+ y/ k( G! @, K&gt; var person2 = new Object()1 x$ X% Z* L( Y0 [+ l
&gt; person2.name = "Hello"% k+ {( v6 Y! J+ K% s$ `
'Hello'
- |# G# S) y- K# {3 `* B  p9 M- I. U&gt; person2.age = 20% x5 m* O! g# B# ?- W
20% V" f( t/ F; x3 C2 S
</code></pre>" u  o3 e. Q! M& ?( x- q/ \! O
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
6 q  }# Q* O' ?& U2 B( Y<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>) L. |$ Q# |; R  s# T& w
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>1 ~! R6 W! z- q" e4 Q$ P" i
<h3 id="31-window-对象">3.1 window 对象</h3>/ {' {1 H3 s3 Z, v5 T: b
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>: p5 ^- Y5 b0 F* _- e& w/ S; `
<pre><code class="language-python">//览器窗口的内部高度
& K5 Z% U8 ]( _% F) iwindow.innerHeight ! F$ U; _' C" e
706) g# n7 x0 k6 v% @3 u. s4 X/ X4 q
//浏览器窗口的内部宽度$ q  I# o3 p* n' j
window.innerWidth2 L% G8 v/ ?1 N; u4 g' J' a
1522
, `! w& \! C5 _8 a3 O3 S// 打开新窗口* ]- U& d8 f: i1 {( Z/ X. @, `
window.open('https://www.baidu.com')
! O- c& H" p  ?8 }" R  |Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}7 Z6 k/ e! J6 l3 k& a2 q5 o! |+ {
// 关闭当前窗口$ _6 T* ]2 F8 {4 `
window.close() 5 G+ o6 _0 Y. W2 d
//  后退一页" Z7 V+ z/ [8 ]7 I+ x- e; g
window.history.back()6 h- z; w5 T- y* L/ Z6 ^1 P
// 前进一页
2 Z: P6 m$ h$ u7 b" j. iwindow.history.forward() . E, H/ c5 J( l( X& w
//Web浏览器全称+ R. v) M+ j+ L* c% u, d8 C1 ~
window.navigator.appName
& o7 c/ p3 h+ z'Netscape'
( g* _$ n) m4 o// Web浏览器厂商和版本的详细字符串
% h+ l; D9 G" u: {: h4 Fwindow.navigator.appVersion
& m$ E& V/ V1 |; a'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
9 Z8 b* G& p3 [// 客户端绝大部分信息
; w6 d* o6 Z* F4 N' f. bwindow.navigator.userAgent
, f5 m& r9 k' J/ m9 D'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
; w7 w/ I  o) T( W$ ]+ B// 浏览器运行所在的操作系统3 I! q) F+ i0 x+ }# {7 l. a# o( L  A
window.navigator.platform
: H7 d% o  e* X6 A: d+ |'Win32'# P+ y2 @7 o) l
  i5 F$ d5 w  p7 }* C
//  获取URL
. Y1 M* |+ E* Z. [# H/ }& ^6 L  Nwindow.location.href
$ ]  b! a3 M! b+ E4 n% l* v// 跳转到指定页面% Y$ L0 y- t' Y; |" `) w7 d
window.location.href='https://www.baidu.com'+ J' s' i: |; b9 X1 p
// 重新加载页面
2 I9 g0 e  _% `, m& i  gwindow.location.reload() # O4 `8 i  v: e
</code></pre>/ Y- G% `- t- ^; T" v, R
<h3 id="32-弹出框">3.2 弹出框</h3>
8 P' P* \3 }/ H$ {, F<p>三种消息框:警告框、确认框、提示框。</p>( y& P2 k, g, A
<h4 id="321-警告框">3.2.1 警告框</h4>6 V7 ]  o8 {) }8 b
<pre><code class="language-javascript">alert("Hello")
% W. a+ h& \% ]</code></pre>( M; Q3 j1 Y0 y+ o+ ^" W; g0 d: S
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>1 q! D$ F6 G' x( g) d8 }- D5 k7 {$ w
<h4 id="322-确认框">3.2.2 确认框</h4>4 i! a* g' ]# ^# Y- V# I( N
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>* `0 q2 G: s& L# J3 D. z: o0 ]
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
1 F! w/ B, d/ K7 C' ^$ y/ xtrue
( `4 i- j/ E  h- s) H( \&gt; confirm("你确定吗?")  // 点取消返回false
, D3 @9 v& H  Y2 n8 Tfalse
1 Z8 [/ \, k1 t: v# N8 Y</code></pre>
: m5 U, `- [# h5 ^6 O, F: Q<h4 id="323-提示框">3.2.3 提示框</h4>
$ r, H2 y7 A/ X6 q+ B<p><code>prompt("请输入","提示")</code></p>
5 g3 U( e- T( C! r$ X7 [# j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>5 Q: t* _1 S" s  v9 I* E9 U) B
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>  Z' W' w; B0 ^4 A
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
3 @- \5 p5 k' W  E<h3 id="33-计时相关">3.3 计时相关</h3>' j/ J6 i6 t2 w2 X' j( s9 u. @
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>7 I, H6 O4 k( \/ G
<pre><code class="language-javascript">// 等于3秒钟弹窗
) v( }- g+ d; HsetTimeout(function(){alert("Hello")}, 3000)% q/ |$ q9 h) E

: W- z6 |3 @) W. u% e- Yvar t = setTimeout(function(){alert("Hello")}, 3000)
0 w. O) ^8 A; |) j3 w2 F' s" h5 q( C# \
7 K" z! ]  v& a( e: r, E. u; x// 取消setTimeout设置
0 f5 U! `' |7 H4 H. Z2 qclearTimeout(t)
( x3 A" s" i9 z% r0 K) u4 s( O! w</code></pre>
! S: s/ v. r3 z! ?, z/ T! G8 Z4 J- Q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>: e* M6 N0 J' w3 l6 n8 i
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4># o4 x0 g' ]4 @
<pre><code class="language-javascript">每三秒弹出 "hello" :
' @3 J/ v3 D; f0 M' s8 _+ esetInterval(function(){alert("Hello")},3000);3 ?6 S: B, x+ T! K8 O4 d
</code></pre>
# _& T7 t3 C, T& e, L* |0 K+ Q<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>3 [. P$ f7 @: p8 L) O' n+ S
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);. a2 o, J7 n" v$ `1 `
//取消:  F- A/ U( t+ `' i
clearInterval(t)
, T, e- P7 b7 ~9 l/ c' A</code></pre>
( K5 N' c1 X6 W% l  B3 p+ H  t4 B1 Y, r$ U) U3 K/ t
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-1 20:37 , Processed in 0.077246 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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