飞雪团队

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

前端之JavaScript

[复制链接]

7995

主题

8083

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26315
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
& b9 r( o5 [2 g+ I1 v
<h1 id="前端之javascript">前端之JavaScript</h1># S' {2 @2 D# k+ C
<p></p><p></p>
  f+ c4 l& t$ m% t4 ]<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
) j7 n% ], ]% N3 w<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
6 D9 u: W: x3 b  s它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
: K0 C; H- A2 }. P- p它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>/ `* J- f3 s* Z, u* D
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>- y2 c2 L& a2 n: J
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
4 e. L) k' S$ C1 d( _9 G1 l<h3 id="21-注释">2.1 注释</h3>
0 n& Q7 b" t% m1 \* P" t* y<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>1 b; M) G+ Z  f3 R0 C7 O
<pre><code class="language-javascript">// 这是单行注释/ f; F; ^  ]2 l' P3 G

9 g+ V& W9 m/ l- i/*4 {! e- n1 ~7 r7 z
这是多行注释的第一行,$ `. d# ?4 t& O1 r
这是第二行。$ M/ y5 T7 {  v+ _$ C: C( `  c8 s$ {
*/1 A% E7 [( C$ d& V+ P9 P
</code></pre>
/ j* T  q) b: s" R<h3 id="22-变量和常量">2.2 变量和常量</h3>
  H: `( Y. Y- a: o& T7 @7 h<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>5 q& e" T. a# s( b. o' j' F
<ul>; \: S6 I7 m% l/ ~. g) h. o( d
<li>变量必须以字母开头</li>! e: r- r/ F8 }8 ~- Z; _/ b0 W
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
8 c3 K0 C8 O0 Y( N2 e% ~<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
& k* N  J# C3 {! o</ul>9 f2 k* a& H8 K5 o6 r7 P9 [
<p><code>var</code>定义的都为全局变量</p>
3 ^, f/ Q! e9 n<p><code>let</code>可以声明局部变量</p>
! c5 n$ y* m# g<p><strong>声明变量:</strong></p>
  F* H3 c" a& Z. z<pre><code class="language-javascript">// 定义单个变量
2 @5 `* w. _. t/ V/ q&gt; var name
0 z& U7 {# \5 i) k# U7 d4 T&gt; name = 'Hans'1 ]' a& Z. P/ ~6 m0 ?) J* N
//定义并赋值
' [; Y+ E# W% j&gt; var name = 'Hans'
( E2 G. Q$ j1 f&gt; name
$ t' A* S/ T* v+ \* `'Hans'8 w( ?6 X: v5 S/ ~8 Y
) @6 t0 ?; r" k" z
// 定义多个变量
: W5 y+ w0 u/ o* u& u" s&gt; var name = "Hans", age = 18
, L- H5 T% ]' _6 w&gt; name
1 W! r3 \" I5 O; }'Hans'
( [3 s# w: K% m: R4 p: t# f&gt; age% c2 g+ |' O& j4 z8 g  B" r9 i
180 y. Y; T( W6 @: a! c3 ~

6 g5 `7 N6 m4 G8 t1 C$ K3 x//多行使用反引号`` 类型python中的三引号' m$ T/ x# w* s1 o
&gt; var text = `A young idler,
' d( A( N$ V0 R  y0 L, t; D3 O* can old beggar`8 ~3 d+ t' G- `7 d" z& S
&gt; text) V5 N( T( d5 s  \& \  e( \
'A young idler,\nan old beggar'
' v7 Z& ?, {; M% e6 v</code></pre>
; U2 c" y: a/ V) s) N$ p* N+ k<p><strong>声明常量:</strong></p>1 E9 h3 ]* f$ @' N+ P* M) ^9 w
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 I9 b' d" |4 o1 {
<pre><code class="language-javascript">&gt; const pi = 3.14% m6 |  U% W$ ^% X4 g- R& [
&gt; pi; x( e  I; I) c, l
3.14
6 f6 S3 f: d7 q$ w; ^  c5 _) m&gt;  pi = 3.010 C0 N3 a9 v( j( A
Uncaught TypeError: Assignment to constant variable.
9 n' b" d) F: Z! k5 n    at &lt;anonymous&gt;:1:4
$ O* n: e) D1 H' [) Q% Y
0 r& m- r4 ~6 O8 b# t</code></pre>
+ }; [# ?! K- ?2 \* p: k<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
: p- I9 v) G: m: o( u<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>: h* Z+ l% N$ A! s8 o
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>+ M7 b3 h  C# A! N; \& Q
<h4 id="231-number类型">2.3.1 Number类型</h4>/ c8 ~  N$ a' {$ g
<pre><code class="language-javascript">&gt; var a = 5
, X; O. }$ Q5 Q' I3 b: {+ s&gt; typeof a   //查看变量的类型  * z4 {  I' |7 f4 R7 g* j/ A
number/ b! s5 t7 p6 t2 Z+ l( q2 Q
6 K* g0 U6 F5 Y4 k
&gt; var b = 1.3
5 Y, F+ n, v2 ]* l5 o&gt; typeof b2 o4 V( O. M- X7 s, T5 J, ^  R& @
number: S7 k" {2 k  z; L! T* I
8 r+ c( d' n" s6 E; j" ]5 [
// 不管整型还是浮点型打开出来的结果都是number类型* t9 X; G3 `- d/ N7 |' d. U; n
/ w% A2 N* E4 z9 g6 S$ s
/*
# V1 U  ^- @- j) m9 J) p8 nNaN:Not A Number0 W( S7 w4 G1 R2 p/ C
NaN属于数值类型 表示的意思是 不是一个数字
. Y% g% K3 d3 c& q*/
) V$ S7 m$ u# R# s, U$ y$ M
4 K/ u* W; ~* {$ G" z/ ]parseInt('2345')  // 转整型
3 e! ]: `/ {% v( M' B# u2345" c& A( [% S( I2 X1 B
parseInt('2345.5')
' A% s% o* u+ O& t; ~- c23457 |& ]  D" W, X+ A" d
parseFloat('2345.5') // 转浮点型
8 ?6 f/ O- Z" v% S) J2345.5
8 p% C- @6 M. uparseFloat('ABC')' r: q) B! w1 ^, s
NaN
/ ]. ]9 U7 A) J5 j! L  S3 BparseInt('abc')$ K7 M; n6 n# K# b9 r- L
NaN4 ?& \$ @  n# R$ U4 X
</code></pre>
/ ~5 A& s' l0 X' K% F" ?+ S<h4 id="232-string类型">2.3.2 String类型</h4>
; o+ n1 d: Y: O; G  f. X<pre><code class="language-javascript">&gt; var name = 'Hans'# \& a9 z! o# b4 v' a
&gt; typeof name& T0 G7 Z9 x) n
'string'
; ^9 g, S5 }. d" [/ w# B) n; K6 G  d/ ?8 b" U7 ~2 P
//常用方法* _( m7 _7 V2 n8 P" }: A' ?; p
// 变量值长度
! L- `) ^# R0 F$ G&gt; name.length8 U- h4 X3 u- m+ E: g# r3 F- x
4
, o8 {7 D6 h7 X// trim() 移除空白
+ x  q0 k: g) W&gt; var a = '    ABC    '
" @3 i0 }4 Y% K+ N2 t& U$ e&gt; a
6 @( C* O: C9 R7 M' l) f, w1 H'    ABC    '8 }: w% b; h& \1 T! ~* M
&gt; a.trim()( F6 h5 C- w# t2 s; }8 {/ I& y
'ABC'
/ {: d' ^* O% b2 m  ~7 u" q//移除左边的空白
  y6 C% R9 L# L* T  A& P* A&gt; a.trimLeft()
3 n* Y1 M8 R: S( w( K: `'ABC    '% z# s: p& ~" F9 w5 H3 O1 Y, r
//移除右边的空白+ ~& X! C* Z. u0 B+ Y. B
&gt; a.trimRight()
! E0 {+ t! s0 N% M/ D* b% k'    ABC'$ N- u' Y$ A; n. ]

1 ?, H, i6 I, Y. _' |2 x: C//返回第n个字符,从0开始
* \) N* s- f& _, {) a" w) B8 W&gt; name
. }" T  g& A6 Q$ d. P' v" g'Hans'
$ m; a) K. b# a0 F3 ^2 m/ j&gt; name.charAt(3)
$ @- P" l3 g+ H$ K- q's'. u! G; [  i+ D# R* h% S
&gt; name.charAt()
* C' J( F8 R* |! c. Y'H'
: E4 S% V, ?  P&gt; name.charAt(1)* {2 z7 b( j) F- q% X, Z
'a'9 c  T# z, O  B/ t; g  F4 k

- a$ F& B5 a* m- g1 c3 S/ H# j// 在javascript中推荐使用加号(+)拼接" U) p8 W$ {! g/ R5 h# p. L4 N- S
&gt; name. \' Q/ i& ]/ [0 O+ w2 [( h  }
'Hans'8 M& F' F  ^. L/ T7 x: _
&gt; a4 j8 G# S8 X2 @8 d
'    ABC    '
- d. a) {/ r! G&gt; name + a
2 \; g2 @- l5 P7 N3 G9 K'Hans    ABC    '
1 C) G) f* \' ~% e* G9 D// 使用concat拼接
# B9 S5 U8 S( |, z+ R$ H&gt; name.concat(a)
" e8 y6 u# U1 B'Hans    ABC    '
  B" ]) n$ H5 z+ L$ a2 Y7 \' A( N! a  x1 K
//indexOf(substring, start)子序列位置  Q4 @* T, l. L6 T9 b9 S% a

- H7 t  I" h7 c+ Z&gt; text( U2 V# D6 P# S
'A young idler,\nan old beggar', h6 J6 y* D5 p% I2 R" C- x
&gt; text.indexOf('young',0)
8 w2 ?& [1 t  }( s; q6 ^+ U- z2
8 n0 N7 m  ^* D  q" B; Q7 q! Q5 t+ L3 g: a
//.substring(from, to)        根据索引获取子序列4 |: S& P( J8 ]5 c9 _5 Q0 H
&gt; text.substring(0,)" G2 _- P, i. r
'A young idler,\nan old beggar'" T9 }3 Q; z0 m( w7 X; I0 G
&gt; text.substring(0,10)
9 M8 p5 ^6 \. ^! m! [0 J. h'A young id': q" z* H' y: J5 F
( V5 y/ E$ s+ _  {( o
// .slice(start, end)        切片, 从0开始顾头不顾尾5 d5 ?5 P, z6 T, C# ~* f% H  ~
&gt; name.slice(0,3)
: T. G# A$ E( T1 r3 a3 s3 h'Han'! N% V9 M& ^7 W+ g1 y5 ~# M
8 [$ z: A1 ]& ]% Y; x1 \" e5 @
// 转小写
# o' e2 u* b  U* \/ x5 ^&gt; name" e9 Y- Z8 ?" q8 m! C, V7 {
'Hans'
; g: G$ W# c1 @&gt; name.toLowerCase()
; d2 Z- h# i1 J% k" @4 i, K'hans'9 Q4 V, t. h9 ~$ j
// 转大写. x1 q* g; z2 D- ^$ l5 Y) B# s
&gt; name.toUpperCase()2 h9 ?% r9 m! U& E+ m
'HANS'
$ A. F$ _4 Q. N' H& j# r" ~1 R8 y4 _7 r4 y, J; r! m
// 分隔% ]4 Y, f6 \9 E  |9 z
&gt; name5 {) K) a8 j" c+ `, G4 S6 `' I4 v
'Hans'
) K6 z2 G" x, N/ e&gt; name.split('a')7 U) O; G0 j3 r( l$ x0 R3 Z6 n
(2)&nbsp;['H', 'ns']: V: A. @5 l' O# U
</code></pre>! R7 k1 A4 S" Y
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>; Q9 L( }. v4 \4 r
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
1 P; a+ [+ V3 V$ M<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>4 n: E& H; R1 U9 z
<p><strong>null和undefined</strong></p>
  B! D' N  _; o6 E% i6 O9 W<ul>4 L- J9 L9 k+ Z( E7 ^# \
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>* H- ~0 ]5 w8 }
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>* i# J4 M1 P% K2 j" F; U
</ul>
" D' _) {& N! T0 p- e<h4 id="234-array数组">2.3.4 Array数组</h4>% a1 T/ Q4 o9 v7 {
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
! e* N" S6 g. \, C3 t<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] & J" j9 M4 L3 \$ E+ w1 r$ Y+ F  C
&gt; array1
! b  V) ]3 M: ]1 E8 D(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; e+ C0 ~$ r; ]" ~, i% ?7 Y4 B. M
&gt; console.log(array1[2])  //console.log打印类似python中的print. Q  R0 N5 a2 s3 G
3
* J2 x% O5 V' X. ]8 C! T( }0 N' j" ]// length元素个数% c5 T$ |# `: U" O
&gt; array1.length9 j0 i- e9 j  \# l  z/ C
6
$ q4 h, |( t+ S6 Y9 A// 在尾部增加元素,类型append
- p8 w; @5 S( a; _5 T7 X&gt; array1.push('D')
' T8 U1 H2 H0 u0 H8 s! S) B7
! X; j  B) W8 ?: z7 B4 A, u0 {&gt; array1
' i- P# B! x3 P/ q(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']% A! ]' ?, z6 l% j! u
// 在头部增加元素
3 t* m8 {7 X0 c&gt; array1.unshift(0)
; g/ A& c8 y3 h  Q! C0 t0 C, x8
: w' y* \( a) c% ~&gt; array1
. g, |* q9 e9 z(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
& x: y( W/ _) a; A
# `+ k9 R1 i; R4 Y4 ^4 _, J6 ?//取最后一个元素
( @1 D! W" b: W1 |1 S' r6 w& g  I, z/ d&gt; array1.pop(): f1 V# i  K% c3 C/ P2 i4 L/ I
'D'
" f2 n$ }( r; g, w, _) O&gt; array1& E6 w( {2 \$ n" x% Z5 t/ G
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']7 N8 Q5 G) K, S) F% I
//取头部元素
$ K+ d& I" U& z' [& f5 O&gt; array1.shift()
2 z, m/ R3 b; d+ }0 b3 W0
' h6 _. i2 o: P&gt; array17 |* S4 e1 x9 ?# h2 ^9 T$ l
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( a/ S: V7 G& ]# V& h( X9 ]

# f2 _+ P1 ^; {  p5 {7 I9 Z% d* w) B//切片, 从0开始顾头不顾尾7 s% w) I6 t; H4 [) ]: m
&gt; array1.slice(3,6)# @: t2 R% F' J+ Q- i4 D
(3)&nbsp;['a', 'b', 'c']5 I5 H/ y7 N" E* J0 ]1 g
// 反转$ m4 W1 ?. L! C6 Y$ ~: x
&gt; array1.reverse()/ v* \' g6 x# Q6 F) P4 I
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
! J7 m6 `: j- |& s2 q1 f// 将数组元素连接成字符串9 o9 }+ w3 e" f$ C  K
&gt; array1.join() // 什么不都写默认使用逗号分隔' R, Z  o5 O% M2 q0 H0 K9 F, Q
'c,b,a,3,2,1') Q- I$ w+ s3 M0 d- b1 B9 V( N% Z/ Y
&gt; array1.join('')
+ m6 S- ~, A, {  b'cba321'5 V$ `& b% F- z# c8 b/ m
&gt; array1.join('|')
. v0 H6 J) y. u. U5 B5 M'c|b|a|3|2|1'
* T5 Z! j! ^5 r! l; H& \8 O+ p  ~" f" e* F. @" Y
// 连接数组
8 s1 W! F' m5 Q0 l&gt; var array2 = ['A','B','C']
9 {' Q9 q4 c5 r3 D: L. M&gt; array1.concat(array2)+ N$ k) T! f; n0 \9 V& p& s
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
; @5 J5 T: v& n' P6 u  w# `! F! H1 R! F) r6 H. }
// 排序( S+ j5 Y% [  n
&gt; array1.sort()
0 T2 }, r+ e) R, P(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ m' K4 w8 D( x* V0 ^1 Y8 |: R; a  I% d

$ u; e, m$ @+ Y! z4 M4 j% r) E) U// 删除元素,并可以向数据组中添加新元素(可选)
: q1 x2 A6 M+ Z" I; H8 w&gt; array1.splice(3,3)  // 删除元素
6 i# X/ b& N' L3 h(3)&nbsp;['a', 'b', 'c']
* l1 G3 E, X: C4 w' K' i&gt; array1
0 F" O: @% S1 \2 L8 I(3)&nbsp;[1, 2, 3], w% K) T5 I# c1 m& C* B3 h/ R6 C
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素8 d2 b  R4 n0 i" W8 \
[]
/ {2 Q5 Z4 h" |* I3 L&gt; array1
- n" l3 p! n0 V% {7 z# q(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']5 N  a9 K& y' E1 O4 v1 k+ L$ \

0 P. v5 f# ^! j3 n4 p/*
3 u! e' Z5 M* C3 csplice(index,howmany,item1,.....,itemX)
/ Q: e$ A4 Z6 ~4 aindex:必需,必须是数字。规定从何处添加/删除元素。: ]$ K# v& Z5 f0 T; w# O* `! ]4 s
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 P" J' E9 T, k. r  w1 M5 N8 x
item1, ..., itemX        可选。要添加到数组的新元素
# n9 H6 Q2 q/ k9 T7 N  H9 m6 t$ K*/
$ B- [+ X' D9 ]! Y: H/ G) X; V9 V# U# H9 `8 @! C+ T' M
// forEach()        将数组的每个元素传递给回调函数1 R- R; o: i! W. T3 \
&gt; array1.forEach(function test(n){console.log(n)})& ^$ e( W# O' y7 v$ e2 J
1
( t: v' a; k, R, w( n- A) L4 G2 S 2
: k0 i8 \& v# ~% z$ I  E  [ 3
. T6 f9 _# D! P A: Y' w/ f' p* m
B
% K  \- m* i% }5 j& \ C
0 Y* D9 ^9 ~  r$ R* [8 w// 返回一个数组元素调用函数处理后的值的新数组
9 g5 ]* n( k0 g( K1 S" u&gt; array1.map(function(value){return value +1})
) m+ R! ?4 _# ]- J(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
- A7 Q( f& U4 w8 y+ |</code></pre>- m4 x, n$ U' Y, E( }6 y
<h3 id="24-运算符">2.4 运算符</h3>& y' u/ h: [. K1 ]1 q' _
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>! B( N" A+ z* i; M( e
<p><code>+ - * / % ++ --</code></p>
( m3 U4 J" u, p# q<pre><code class="language-javascript">&gt; var a = 6; L6 z/ y. @3 c
&gt; var b = 3
4 m; V, X% k& X4 {// 加- T% F$ e7 \$ ^
&gt; a + b  k, K: a6 d3 ~1 w
9
! T5 f+ u% a* x. l4 X3 U3 `// 减
6 o3 T3 c/ i# f2 o' j6 q- E8 R&gt; a - b
! @5 ^  P! E! v3
2 R; L9 R- r6 D+ ^4 V+ N1 q7 u0 ?// 乘
2 e+ ~* I1 d1 e& @&gt; a * b- ^% t6 w7 e2 j3 n
18# l; }' A' H: N- _+ J! z0 j$ q
// 除5 c* e7 I0 V9 n8 }" K# y" R2 a
&gt; a / b
, g9 M) H7 b6 f, \7 w9 r+ F22 N' W6 Q" i9 F. `! o9 Y
// 取模(取余)
, }4 P( L7 r* [- ]& U&gt; a % b  E0 l  J% L/ O% L, O) \6 p
03 p0 o- ]: Q+ b( f0 b! ]/ d
// 自增1(先赋值再增1)
1 _1 C6 Y* p3 J, T, S&gt; a++3 q2 ^1 C* `4 L5 u6 ]) M  E
6
3 v# C5 M! @9 B. v! ^3 J4 Z&gt; a
. R4 S1 |1 f6 x: s# p  Y# G& U' R7
5 _5 M! b. ?6 L$ _* h// 自减1(先赋值再减1)
: a3 s1 p) r2 L$ T4 @# ^, b&gt; a--  W! t- ^' R  |0 F0 Z6 S
7
* Z8 O/ g5 U% l! W&gt; a& k* |; Y7 l/ ]) ]
62 o( h- h& P* o
// 自增1(先增1再赋值)
1 v4 U6 K6 T9 o# h&gt; ++a
  t# n; I" |7 U70 w2 t; d4 n9 Z5 I5 q8 `& v
// 自减1(先减1再赋值)
, X" G/ y8 R, L8 b" Y# T&gt; --a
( |# f. e( Y3 V$ S6" k4 \8 [7 ~* e- s2 a' P8 W
&gt; a
1 j$ n8 z8 i+ \$ Y5 e0 t6! t$ t7 X, _7 [

2 v. }7 M& w; ~* I2 {6 i//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理- ^, b0 q- l; x# x8 A8 @2 o- j+ M& t0 w
</code></pre>4 O5 n$ `: ?5 h9 E
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
% C7 ]! ]4 m- H1 f4 u$ ~) b<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
# T1 e% J/ k+ D<pre><code class="language-javascript">// 大于
: B7 Z8 k* f$ ]4 I! v&gt; a &gt; b
! q7 U9 C( m6 `$ X9 Ftrue
$ O! x: S, K* R// 大于等于
. r/ K$ j- r3 ~) G, U0 R0 g5 c&gt; a &gt;= b
! ~; Q$ i1 S* L/ T7 n) o9 l$ utrue8 q" {* K: n  A/ C" ^7 S, Z
// 小于3 u3 D. D+ c7 A# M: T! a8 N
&gt; a &lt; b
( q, J9 \; `) Z7 O# j3 i2 B1 Gfalse8 V* \5 R/ ]0 }2 F- l. ^5 {1 f
// 小于等于9 S0 {  o& t, S) a
&gt; a &lt;= b5 U( }! {* G' n- Y
false
& J9 S6 |5 B1 e7 y4 R  t% \// 弱不等于
1 m5 C) n9 v7 p5 B&gt; a != b, J4 v" H6 y/ m
true) a" Z! H( t" x1 L& n/ t; j
// 弱等于
9 k- t. M7 F9 W* ~1 I5 l&gt; 1 == '1'
% |/ M, f/ C. q8 C  m; ^$ x2 l5 strue
1 |$ ?4 d$ W+ K8 Y) \8 j  c9 W9 J3 x// 强等于7 @1 i& t6 _$ d5 A0 j3 \
&gt; 1 === '1'
# b5 M# t* L! i" _+ |5 Z; Bfalse
8 X' U3 r1 E/ }& q// 强不等于) {  @" |* t; G/ V, G4 M0 O1 x
&gt; 1 !== '1'& T2 Q8 x8 G" C# t- e
true4 o& N0 e/ Q$ I+ Z

- y5 ^+ @; e8 o! |- Y/*& U- D1 k) X) G; {
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误9 B0 a) X) V5 Q! t/ V
*/! a7 e2 U: B& b3 h5 C/ m
</code></pre>
4 J# |, o; V1 ~- E( T<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>; m  H& D. {1 {6 D9 u( Z& v8 d: B* E
<p><code>&amp;&amp; || !</code></p>4 [9 D4 _/ m# Q' H. z! V) k- q* u
<pre><code class="language-javascript">&amp;&amp; 与
4 _8 W; U! v1 f3 ], l0 z6 F3 P+ c|| or # }5 R+ r6 \& X4 \7 O4 p' p
! 非
. V5 H# Y. ]! b</code></pre>! V# H" D$ S3 x9 O# v2 j
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, g: b( n! F- W' g<p><code>= += -= *= /=</code></p>
2 r  f1 g2 Z. f; ^  L7 d  R8 \<pre><code class="language-javascript">// 赋值9 O) G7 ~) B) T' S
&gt; var x = 3
2 n4 \1 C5 P( R9 N7 L5 b// 加等于
  K6 h) L# |8 `0 x&gt; x += 2/ U- E( {& O" w" }: s4 o
5
' N, n% \- T4 @// 减等于
0 W4 k' ?: m1 O. g  N1 t&gt; x -= 16 A: S) d/ g. {
4
2 s, Z( v) O$ r6 \// 乘等于. z$ y- S) P" e1 i# H
&gt; x *= 2
- ~- P( Z' J$ F1 s& T% a% P9 G# v8
4 o1 X+ `* K' C  n0 N) X& f8 f// 除等于$ I2 N( i+ |  N. c: h
&gt; x /= 2& v# Y# a! l$ M2 E! v6 E1 U! E
4
& K4 \+ F, D  ~9 m/ {4 s, I</code></pre>% U0 K# D8 F$ g+ }* ^. [  B) ]
<h3 id="25-流程控制">2.5 流程控制</h3>
/ w' J9 c/ Y  @<h4 id="251-if">2.5.1 if</h4>( O% i# G1 B. u6 [" I! p
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}. H) [- S2 b6 ?% x0 C% \
- n7 m& u# j. c+ \4 a+ g9 T
&gt; var x = 3
+ s7 i% r8 [7 }) F&gt; if (x &gt; 2){console.log("OK")}% G% f% z. g" y  k& A* H
OK
- D# m. e/ k# b$ I
& I) H: k  B! M0 A5 H2, if(条件){条件成立执行代码}
; q" U/ V# w3 q) v% Z3 [        else{条件不成立执行代码}
& a# O# W% K6 d$ t5 e
1 q" k: q" ~" h* h4 y; ?( X% {6 {# k9 E&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
; L2 z+ x$ C/ {5 N'NO'0 \8 |8 {* W# j

- W$ e. E) O  U# A* N3, if(条件1){条件1成立执行代码}
5 g: G0 j+ X2 j* _+ v0 @- U        else if(条件2){条件2成立执行代码}( H" j: ]; S1 T3 Y! g' I' X; N
    else{上面条件都不成立执行代码}; B/ E. A, R' v8 l
% ?! c& \7 m6 u
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}* R( W* c3 `, ]5 R0 ~
Ha
, H1 l( {- L! o9 D) T</code></pre>
$ F' y$ K$ K( D' J! c# }# R<h4 id="252-switch">2.5.2 switch</h4>9 k: R0 V: C* G3 p2 x
<pre><code class="language-javascript">var day = new Date().getDay();
! E9 K/ _  u6 v/ t( b5 M: Jswitch (day) {1 p' U- k0 j, S4 N3 b/ z
  case 0:8 h6 A9 h. y) C& Y
  console.log("Sunday");
* P8 _+ c+ B' ?1 F5 G  break;4 D0 p/ P1 c4 M3 b$ |+ O2 F* d
  case 1:
9 w# X1 k; L8 I  x& V+ }: t" C: D5 ?  console.log("Monday");
& |2 B, v9 k! H: Q- h$ L& q( N  break;
- z8 C- r) K! m3 u  gdefault:
$ R) e) X8 Q9 s; U! y  console.log("不在范围")
/ T( A' `, |3 A/ Q+ B9 `}0 z9 m6 d7 g% z' n: u0 m
不在范围
, |9 ?/ s& i9 u9 H</code></pre>
6 I- P# k, h' k( h5 I1 I: j<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>( G& f6 a0 ]0 X5 f) x+ Y  [: n1 f- R
<h4 id="253-for">2.5.3 for</h4>3 n& u& {' ], J3 u( }$ R$ v% b9 `7 W
<pre><code class="language-python">// for 循环! U9 R7 }' r: }, v
        for(起始值;循环条件;每次循环后执行的操作){
/ g% I3 l1 m% M( o' n        for循环体代码7 @# R9 U1 }( S
    }; }% T3 ^+ P6 u, v
' g) e( X1 |& P0 O4 L7 }
for (var i = 0; i&lt;10; i++){
. ?4 N+ S, k  I4 a; x4 O0 d    console.log(i)! a  c6 q9 C% j& @% U. U& H$ C. @
}
3 N2 L- G) Z0 @0 i        0
; p. E- ^3 X! ^; M, m        1; L# t( b1 [' a7 f2 t* G: r2 M4 l
        21 t  d/ r& Z7 x0 b; V& D& j7 W1 [
        3
. _& m' L. Z4 }- }: V6 Y5 G3 V        4
1 Z+ a& }- ]+ y1 c6 `& q        5
6 V6 K% ?$ h- M# a+ w        6
' X% y( B8 W! S3 \! y        7
" P0 a% N  U% D        8
# h/ K  X1 ]0 m) X  k        96 b% f3 ?! t& ~* b/ r. v% i4 M. `
</code></pre>
$ f8 i. f- {$ D- V! b4 T* n; F  q<h4 id="254-while">2.5.4 while</h4>
  `! b6 [# [- J% `<pre><code class="language-javascript">// while 循环
, ~  ~: e9 [* e! h        while(循环条件){# G0 `; G4 {9 {, k4 x# A
        循环体代码# @2 Q+ p( G+ M( [
    }
; Z$ y! m& u. I/ }( v. }( D+ ?
6 V0 p7 h3 k8 D5 y/ t" M4 Z0 L&gt; var i = 0
* I5 ]2 V! K& n) W* Q! `&gt; while(i&lt;10){9 u, ~- k$ |' \0 s- Q9 N
    console.log(i)# T3 Q6 x0 a; Q4 n. W, S) i; S/ A
    i++
  _% P+ x+ N+ c* W}
7 d. X* U5 K0 ~8 i+ v$ T7 y! T 0: a8 W. A6 g) P8 ?& a
1
- U' h( d9 f+ r( s1 i 22 A9 Q2 H8 l8 g& T. H
3
+ p+ Y/ ?/ A) u" I% ]9 n3 | 4. g4 J0 A% \  {# ~) j! _& w
5
% b, V; c: v) c2 h, T 6" s6 E1 @" t- J
7
% I6 c" f( J0 R9 e7 j' Q* o 8) k9 _, J1 @( l6 y: }5 \
9
8 S/ _! s  i7 k; d1 u0 E</code></pre>1 S5 `1 e) F3 o" z! v, a
<h4 id="255-break和continue">2.5.5 break和continue</h4>7 c( C, V: g) J) n% Y# g1 `# h
<pre><code class="language-javascript">// break2 O4 V* C5 ?1 g1 u# O
for (var i = 0; i&lt;10; i++){3 Q, \4 C( x% i  B8 J( v7 q6 @2 e
    if (i == 5){break}4 A' N3 `! m4 X7 O( T, u# B+ S
    console.log(i)
2 Z# l0 A( R, M1 i5 m$ u  X3 A  Z5 p}
3 e) n3 P9 Z7 L8 @ 0+ F! A1 T0 L( r) I; k  x& i# ^
1$ K! g8 O, f( u6 U) j; X; C  F& R
2" O5 B+ B/ N' r5 I7 R
3
4 O8 u& D# A! i* f( p8 a0 o7 ^; H6 V 4: |" _  o; P( t, s
// continue
' i) j3 m& v) n$ ofor (var i = 0; i&lt;10; i++){
7 Q& T* \1 t+ p2 _  v    if (i == 5){continue}
- Y* w6 a  A+ u) i$ z; j    console.log(i); B/ ?+ D  I" a' y
}
  C: R. D7 W! z+ P1 f3 l9 k 03 z( W1 b+ g. d) Y. h6 D
11 i% T  f) {* j, ^' x
2
6 T# G. G2 }3 [4 O8 z0 _: W 3; z% \8 e4 `1 z% {
4( Q' @7 J9 z  f4 y# U
6# Q" Z  k$ {$ r$ z) ~
7
. A  D: B: }1 K' J 8* r6 F* Y; v7 v/ }) }; ^/ {
9
- I: d: o) j' ~
& J/ M! @: b0 g, S</code></pre>4 b, T4 t, ~# S" b; h
<h3 id="26-三元运算">2.6 三元运算</h3>% m& l9 r& z7 w/ i. s
<pre><code class="language-javascript">&gt; a
+ u& L; }0 |% D& Q, Q: U4 E6/ ~+ s% C  }5 N9 d/ I6 ^- N6 c
&gt; b8 `6 z4 t5 a  e+ [
3
; \5 Q+ b$ D. p; R- X
+ ]0 p) h4 r+ [6 @; S2 G) A//条件成立c为a的值,不成立c为b的值
: Y$ k* W: v# _% _: e! r&gt; var c = a &gt; b ? a : b
0 F& }6 W3 }& a! ~&gt; c
3 Q( U- ]  B- ]3 H1 s6
( S4 R8 v' S- F5 S
2 V! m; d# s0 X0 p9 h// 三元运算可以嵌套
8 G5 i& h" M+ {7 [: A8 A2 L</code></pre>6 `: e5 q' [6 u. d- t9 \8 m
<h3 id="27-函数">2.7 函数</h3>+ x! r6 Z& q* ^. ]. {
<pre><code class="language-javascript">1. 普通函数
: M, p' q* r( J&gt; function foo1(){
1 E, x6 U: X( m# d9 \3 K0 |    console.log("Hi")
$ N& y' v( `% `}
# V) \7 E4 s3 z9 p9 H6 E% k5 @* }, \5 a+ R  a
&gt; foo1()
  f' |& o9 K% J; A, q; i0 S        Hi
% n2 ~5 h5 ?4 C, d# K2. 带参数函数5 G/ k- u3 b* n+ x% u2 E" ^/ s
&gt; function foo1(name){
1 ^$ U9 O" W* ^' `1 p4 \$ Yconsole.log("Hi",name)
$ G5 R. a: _( V% t( ^}& T4 G- [2 l! i1 S% d2 F
" f2 e; s8 ~9 e* m% j
&gt; foo1("Hans")0 U5 Q$ @0 u4 }- t1 P( D9 G3 p
Hi Hans
6 ~& D+ k: s3 f  Y% T8 f4 \3 f( \9 b7 V: T2 Q
&gt; var name = "Hello"
+ ]8 V4 @) ]1 r! C&gt; foo1(name)) k& B+ t* M# p1 b) l) C7 e8 [6 E
Hi Hello; {2 V4 X& d3 L
9 ^8 m3 M8 n3 b% t/ O9 K
3. 带返回值函数
; p& b! h* f2 C& z- H9 M&gt; function foo1(a,b){$ @# Q7 s/ u/ P1 s4 m6 p) R
        return a + b   5 q, V5 _2 q) u4 B
}, c. R) V6 @. g4 n) z8 m" h
&gt; foo1(1,2)+ q' g% T' ~# E1 u
3
5 A/ ]( F" T. a9 V&gt; var a = foo1(10,20)  //接受函数返回值) f7 E& w2 n2 j9 {
&gt; a
+ r; W! v( @- z6 o* K% o30; {1 f& T0 h- v9 L9 r

1 w- I7 {- `" T3 \& _4. 匿名函数
7 Q) c5 B, N$ P* X, p$ h&gt; var sum = function(a, b){
4 R' x2 U: A* X( C) b+ U; E  return a + b;
; x4 U" D3 V. p$ u8 y}
; l% |& ?9 S' q7 U6 l6 Z&gt; sum(1,2)  n7 n' Y2 D; K2 |9 a8 ?
3
: m% C2 E' Q" L+ D1 ?8 n% a' U# |' A# c* o
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 a/ q+ T5 e+ i2 x8 ]
&gt; (function(a, b){
. G9 P- R/ [' B, ^' C9 D6 k  return a + b5 ~" w- N  M) @6 A; v, y0 i
})(10, 20). s/ e+ H/ a: {
304 x/ U$ b- Y+ `* r# o3 |, `9 ]

- C! F+ V9 s  P: W# l& }5. 闭包函数
% c0 z- r0 l$ ^" E% ^. W4 O2 p$ {& v// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数2 v; T' G) O+ I' o1 _3 X4 y( Z
var city = "BJ"$ K3 T# O2 X: D( h, b
function f(){- r) W) Q2 u4 n
    var city = "SH"
6 Y( _: A1 Z+ B! _3 {    function inner(){
& P  U' S! W( I% U        console.log(city)
& T0 m! w& [6 ]; v) i) S    }
2 H0 V1 N% a, q& t- `    return inner1 g' a* F9 x! O5 D7 K& G# n
}" }$ A: ~4 L: N0 f3 F
var ret = f()
! q3 v% D' m& ~" n% \ret()/ R: {8 ~8 ]) Y( ^7 I- G- v- h9 Z+ s
执行结果:' P5 w) y6 a1 J3 t, Y( m3 b' m
SH
& ]- C) I" a/ x0 W8 m& l4 {. M7 p; j: B
</code></pre>5 ~" v: |8 D# x* G6 p4 w
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
; Z  {2 p/ y! y% z4 y, {<pre><code class="language-javascript">var f = v =&gt; v;
0 t2 \! T* Y# [3 ]6 \. D// 等同于
/ ^+ G0 d6 d8 _+ ]# x2 ^var f = function(v){* K8 H" K8 }. T7 z5 u6 z
  return v;
. i+ J8 v! {2 f) d}
6 y* |& v! k: ]  n9 c+ ^' c1 I</code></pre>$ Z) z# {2 g3 u7 X6 q+ X
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
! T+ u: ^1 q6 i6 V" E<pre><code class="language-javascript">function foo1(a,b){" n+ u& b) w' M
    console.log(arguments.length)  //参数的个数
- H4 I  g7 o7 Y7 Y    console.log(arguments[0]) // 第一个参数的值( A6 A. _9 u" j
        return a + b   
/ ~0 c: x& ?& P' M, M}7 B! W4 K( m0 J4 A- }
foo1(10,20). E* h  y3 A8 z8 A; m, `
结果:
8 K" b, \$ N% y2 O0 l- D 2          //参数的个数 1 l% @$ \/ l1 c' g
10        // 第一个参数的值; j6 E' m0 ^4 T- T! V
30        // 返回相加的结果: S- t5 k' Q- K( g
</code></pre>% p* r; B6 Y( ~3 d
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
# m+ V5 `! g7 c3 N  L2 `* o1 y<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
# D* b; e* ]' k<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>& y* k1 i5 Y1 j' F! w9 q7 i( m
<h4 id="281-date对象">2.8.1 Date对象</h4>6 E" ?( Q# C8 X' G
<pre><code class="language-javascript">&gt; var data_test = new Date()) e; u5 t2 _4 E* Y8 ~2 e
&gt; data_test# H5 _" L4 X# ~9 K
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)1 D# g) [' K, L% L
&gt; data_test.toLocaleString()
* a, c) a6 }8 {'2022/2/11 下午9:44:43'
) J1 m& z0 V" H; R4 Y# O- M/ s6 `1 M2 K4 m
&gt; data_test.toLocaleDateString()
8 ]' N0 I4 o5 G! a; g1 m0 @3 C5 F) X'2022/2/11'
& ~( n0 d( M7 ^' L/ W$ d% K5 f% X' e, {
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
/ v- U- s' w( G' k- R5 l! t; p+ R&gt; data_test2.toLocaleString()) I* S( J  h* ]* H/ B
'2022/2/11 上午9:44:43'
7 T4 a( `. O- \9 K9 r2 I( ]- w* c
, d  Y( a6 B# @* F. b// 获取当前几号
$ A; j. i- E9 ~' q9 m&gt; data_test.getDate(), `1 K$ c5 Z$ x/ y% E
11
+ F2 R. V7 B9 H% \6 q' S// 获取星期几,数字表示
* v3 s% b. ?1 d4 h&gt; data_test.getDay()  
" R: c' I7 a# n+ |, J, t5* R& W9 E' z1 m( }- J3 P3 r2 K
// 获取月份(0-11)
6 q& I# e0 l  }6 Z&gt; data_test.getMonth()  s. z0 ?& U  t
1$ E& R/ }" @7 O6 P% v- C
// 获取完整年份
, u. i$ e6 ?* h& H4 u# X6 s' \9 U&gt; data_test.getFullYear()
. h- _6 U+ @5 \5 }% y, H/ P2022! x8 t7 q3 H9 e
// 获取时
7 q9 H; X+ d* K2 o- p1 Z# I6 g$ D&gt; data_test.getHours()
/ e9 g' R2 X( D0 H: M" v21
/ [5 `- h* L# Z3 y3 j( B// 获取分! L/ v, \; R  V: _% C. @2 V1 r
&gt; data_test.getMinutes()
, I. n: u, b; S' V# {  S# @7 [; m, w440 ~" [, L* U- E; E' G( m: n7 x
// 获取秒% Q4 i! @$ B: T. _8 b4 v6 |
&gt; data_test.getSeconds()6 l7 Q" ?, [. @( ?" l
43# G) k6 u" }% o2 u/ v) i
// 获取毫秒. |- X! X) x# Y9 X
&gt; data_test.getMilliseconds()
7 u: K/ t! U( q, E9 W2908 E! |& o; D% {0 y' N7 A9 l
// 获取时间戳; U" [1 b2 d" P& ]
&gt; data_test.getTime()$ [3 ~! ~) c8 l  r* v1 s
1644587083290  w$ l8 Y& A* |
</code></pre>
# j5 x& W% b2 F3 h# q- L<h4 id="282-json对象">2.8.2 Json对象</h4>
9 H$ y/ W% l) G2 O<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串1 {; V4 @5 C3 Z* ?7 N6 w
JSON.parse()  // 反序列化,把JSON字符串转换成对象
# n, Q/ X$ {3 |0 `3 Z
3 J. c/ Q% C& a// 序列化
& H* u/ t4 Q9 r6 {. F&gt; var jstojson = JSON.stringify(person) $ j" K9 Q8 D$ ]/ o
&gt; jstojson  # i2 ~) @: f0 L& S
'{"Name":"Hans","Age":18}'
2 I* G5 ?7 \5 }" J% y! i: L# E5 ^" {
// 反序列化6 i# C5 w; q/ P9 P$ a: l3 p
&gt; var x = JSON.parse(jstojson)
7 V7 r! @' r% W2 k" H# ]&gt; x* Q: f, Z+ W( r$ q/ d5 P) y! {
{Name: 'Hans', Age: 18}
3 h& J' n3 I( F6 @$ G&gt; x.Age
$ F5 N2 ^! P5 A7 k/ Z5 F, k18
2 C8 o3 s9 x* c% B3 o2 R, h</code></pre>( Z8 N" a3 ~3 c+ r
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4># ]9 ^' t3 ]2 v* M7 {
<p>正则</p>
2 i2 {) V1 j* K' y3 j; k<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");; e% D2 s" Y; V7 Y
&gt; reg1
9 f0 H. u+ e; S! Q- \* O" C/^[a-zA-Z][a-zA-Z0-9]{4,7}/
% p* `! b+ S4 W: L1 X&gt; reg1.test("Hans666"): O% z/ h* v9 Z
true$ l5 |8 `# s$ I; d  D7 Z) |
- t' ?2 G7 `+ `- q; Y( A! k
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
3 U0 w: H. c' I&gt; reg2
0 Z" I9 B; R3 i. v2 t& f/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ c* R2 V4 U% Y4 w+ l7 F
&gt; reg2.test('Hasdfa')
+ o9 ^4 N9 i6 C% Z6 itrue
3 Q5 ]: J* e0 Z, e/ E
0 k; R1 w7 f3 B6 f2 f" ]! f; j6 e全局匹配:
  I5 k* ?2 S* c; m' ]&gt; name
* h" I7 ?7 ~1 z7 ]& u2 w# @'Hello'7 A/ {8 p  J) N
&gt; name.match(/l/)
% C# x  O! v8 F% o6 y8 r['l', index: 2, input: 'Hello', groups: undefined]
) B$ h3 f) }) K% z
! W  T! j; I3 [1 f' Z. U: [& V&gt; name.match(/l/g)
' \( ?/ h- u. a1 z  b4 v1 M(2)&nbsp;['l', 'l'], F# N& P6 t/ W' W0 }; O5 S
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配3 i' H% M- E  N' ^" P4 O# g

" n. [/ [+ R  C, ^% _+ n全局匹配注意事项:7 n" ]  u) F( B+ H: A7 Q, C5 x
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g$ D, S' k0 k- p$ p
&gt; reg2.test('Hasdfa')7 [- l& }( u& y0 b3 y) g
true
2 g- L4 K0 c8 w9 |, `+ M1 S&gt;reg2.lastIndex;
, f! p/ M0 q4 ~/ J66 G" x) x8 D& H' c. \
&gt; reg2.test('Hasdfa')
- L3 S( M; [& |) M. F3 Xfalse
) a7 w/ d' f% ^- [6 w" e&gt; reg2.lastIndex;' A: S& b' g9 e' v
0
8 l! Z0 E, i7 G&gt; reg2.test('Hasdfa')
6 p: B( C8 v& f$ P! j4 r- g7 _true; \; ]! p* t2 @0 Y
&gt; reg2.lastIndex;
0 B  L2 j: S- I6
$ @- [; h, n( B9 B( [9 _&gt; reg2.test('Hasdfa')0 a( Y' S2 V: }. ^% I$ @+ u' o
false
+ n; Q  _& b: R( @# o0 u&gt; reg2.lastIndex;
4 D5 O. l- b$ j# D; o. Q0
# A7 ~4 F- B1 Y; ]// 全局匹配会有一个lastindex属性0 ?: @2 D- t! q3 C. a8 [8 l2 _$ \
&gt; reg2.test()# x& h4 U$ g6 ~# f. a2 K
false% S8 T& ]% B1 K* V. F
&gt; reg2.test()2 [: ^8 K' ], `9 ~# x
true
9 o9 s9 _' B4 H  i6 C// 校验时不传参数默认传的是undefined
+ V0 V( y$ E' f3 W8 {4 t1 C. Y</code></pre>* ^  B: S: N% ]. V9 S& V
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
0 C! f1 I7 P9 [6 o  C# w<p>就相当于是<code>python</code>中的字典</p>, p5 X2 X4 d+ @
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
) `& u# [0 S' [# |* P&gt; person
, P2 }* O7 P9 P" b4 J7 K( r" k{Name: 'Hans', Age: 18}
6 _* [$ j& q+ `0 P' C9 w6 w8 C&gt; person.Name
# P$ \$ [" ~' l: m1 Z'Hans'! y( _6 U( q/ a3 u/ P+ ~* c
&gt; person["Name"]
, w; M1 C2 x! ['Hans'& J+ D+ F7 \) A6 O

# l& B2 a% z: `$ K; F) q  g1 b// 也可以使用new Object创建
) m- M4 w, H# m* y* f&gt; var person2 = new Object()
5 [/ ?3 J4 n# A+ l6 Z' {+ u+ l: c&gt; person2.name = "Hello"
# z; Y; V9 M1 E& ^0 n5 P& |'Hello'2 _1 ^+ O0 ^1 h0 U
&gt; person2.age = 20! p0 H0 {" c0 Y# b
202 J' Z- _2 u$ e
</code></pre>
# p- v3 b3 s5 G<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
$ U7 O( ?! J2 A0 k! K1 F<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
+ o0 F% z  G( Y" I; \0 d, b$ m<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
# y* v$ p% m9 L* n" L0 y2 E% t<h3 id="31-window-对象">3.1 window 对象</h3>
- q9 F! W8 }) C+ C; o<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
' q4 s6 V9 `1 b- Q2 S* U<pre><code class="language-python">//览器窗口的内部高度
4 D6 {9 [8 Q& f% c- Q+ {( M0 Mwindow.innerHeight 9 ?7 K- [. B+ R4 T4 f# S) {
706  ~0 U* L* h1 h2 `% D
//浏览器窗口的内部宽度
: z; z, B- H* h, ?% `4 D$ Lwindow.innerWidth
; W- t3 w8 c* y1522
% n& E# G3 i3 v/ \. A( }+ A// 打开新窗口# i' X( z( X5 [) [( V1 F7 U- D  _
window.open('https://www.baidu.com'): O# I" V4 K! d0 J
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}3 g3 O5 y9 k) W6 ^( y: p& T- d
// 关闭当前窗口$ Z$ o* b5 W6 Z
window.close() 5 d0 \9 M; l. {1 L( d0 k% p1 U
//  后退一页! u+ C9 c& P% v% F. |% R- X
window.history.back()
& M3 i2 m& X$ t# z4 Z0 {. s2 v! z/ N// 前进一页0 F/ r, v. N" M. `" G
window.history.forward() : _' s4 o% E  {' M% U' \+ V, v1 e
//Web浏览器全称+ ^0 y0 b, U# C/ F/ r6 n" B2 }+ G
window.navigator.appName
( Y+ o, B- G4 Q0 B8 T0 a: f5 ]* q8 u'Netscape'4 L$ T7 }. ]0 A0 h  A, T; T, j
// Web浏览器厂商和版本的详细字符串+ O7 m% s9 Q& ^% l; b# a: J
window.navigator.appVersion" l$ V: b& Z! Y% _
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
9 z  {+ R# k8 ~" E3 Y3 d// 客户端绝大部分信息1 ?  m8 f0 T# G, A6 _, `! b
window.navigator.userAgent" h: B7 |& l& H* N4 w6 w* i
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
: |2 y* \4 F/ h, J# h3 g- D7 G// 浏览器运行所在的操作系统  X' h  O  e( c0 }1 m" a( T* m: W
window.navigator.platform
% ^3 F, ]4 P6 |8 ?'Win32'
& K2 c' T: \: D+ b) d, W1 X0 C" {1 e2 O6 l! m% x4 P8 R' }0 }
//  获取URL7 ?/ y5 _" T% \
window.location.href7 H6 X8 e) ~  Y; d4 B. l. l* `
// 跳转到指定页面2 l" ~( _* R6 {: H$ p3 r
window.location.href='https://www.baidu.com': u+ D( @1 i1 h0 N1 f
// 重新加载页面
' J6 h9 q3 r0 a, Owindow.location.reload() 5 g0 a, j% ]$ x" l& }: ]
</code></pre>9 I2 {7 d: k: G* u- k' [" A) E  M
<h3 id="32-弹出框">3.2 弹出框</h3>5 Y) k* p6 }1 s, e: S$ O0 z
<p>三种消息框:警告框、确认框、提示框。</p>( e) ^3 G& u( a
<h4 id="321-警告框">3.2.1 警告框</h4>
- B1 H' J4 u$ G8 u) L<pre><code class="language-javascript">alert("Hello")
+ c9 T1 U; R& a; G8 D  c7 q( N</code></pre>
- N" c5 `' A. w, b; ~; M; h" n<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>, a1 S5 l, I* ]1 g8 G
<h4 id="322-确认框">3.2.2 确认框</h4>8 I6 [) h* f/ @% Z8 l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
& _! j6 O& C  x; J: \5 Z& T<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
# c+ v7 \% w3 q" J. Ttrue
' P, U# o& Z; P$ l' v&gt; confirm("你确定吗?")  // 点取消返回false
) i0 @# r) `! u7 r7 I6 nfalse
) O0 ^8 n* t6 c6 [2 D% O. m: G</code></pre>
# z; E/ D8 u; w% s- |<h4 id="323-提示框">3.2.3 提示框</h4>5 g1 L/ }8 K; T6 M% g
<p><code>prompt("请输入","提示")</code></p>9 Q! ]* |% M9 p& g' `# U2 r; w
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>* t% l5 e  T8 I# v
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
1 K# Q5 g8 K$ _9 z- o: C% V, t<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
- \3 p8 j7 @; n9 a. V# q! ~7 E( U5 w<h3 id="33-计时相关">3.3 计时相关</h3>2 |/ V* K7 ?4 Y4 y. R% O' w
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>- ~9 N. c! s+ ^  d# O4 {7 t# K
<pre><code class="language-javascript">// 等于3秒钟弹窗
. Q+ Q; d; l! _setTimeout(function(){alert("Hello")}, 3000)
- ^& h$ c* e& V7 u5 O5 [
" z8 \  f1 {/ y) D( _var t = setTimeout(function(){alert("Hello")}, 3000)
$ ~: j$ g! j! m) J7 k+ K0 }8 i* C" |, [
// 取消setTimeout设置
" @8 b) B: I* eclearTimeout(t)
: R4 N. E3 E4 A6 k5 P7 O/ G; i</code></pre>
, ^- j- E  [& Q' D+ R, m* ^+ \- T. w<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>- g% o9 N/ @& r+ j9 @; ^( P2 Y
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>3 {  y) _2 C$ _! D0 Q% A- L9 e
<pre><code class="language-javascript">每三秒弹出 "hello" :* g0 ^/ G- d" d2 g! ^, d. q
setInterval(function(){alert("Hello")},3000);- O- C  u. s) t( Y  N! Z/ O8 X1 N
</code></pre>
" Y* C9 B' a6 ^7 K<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
5 e' _4 c) p' r$ C$ T<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
1 ~2 u! z/ f3 k+ {% J: Y4 T; R//取消:" q' \; D1 b, ~5 p
clearInterval(t)
; |8 S: w  ]6 F</code></pre>
! V5 F; v5 M- L! p4 ?0 o( n  b  o4 R8 o) l
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-1 03:34 , Processed in 0.108090 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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