飞雪团队

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

前端之JavaScript

[复制链接]

8292

主题

8380

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27206
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
/ Y* |& j7 s1 X9 N
<h1 id="前端之javascript">前端之JavaScript</h1>
" P; K' Q8 h. q8 a<p></p><p></p>6 t2 g  C( R5 k" H
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
: ^* N2 S5 h4 M% }7 t; {<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
1 _: S% G5 d* s% S2 F( f+ {6 @' {$ ~0 t它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>( }! R  s+ @' B3 a/ ]4 i; {1 h( {3 F9 h
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
- `) c8 ]1 k/ w3 u, ^  _它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>4 @3 |, H2 y, W1 @4 {. o
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
5 d, b$ c) f  j( o<h3 id="21-注释">2.1 注释</h3>
# l+ q4 t) E- }7 u$ g2 W3 U<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
9 V- E1 k( P2 d/ B9 a<pre><code class="language-javascript">// 这是单行注释8 {- u+ @# S8 d' ^
: e& L. L; N% F" V
/*
# [4 P  Z# T# M( }* W6 ?: j这是多行注释的第一行,
1 C0 V$ {" q/ t1 `这是第二行。' N1 Q$ H" S; M3 s0 f
*/
* I" N2 n+ u( i( v( c$ i4 h</code></pre>  R# g# r% F8 q8 }
<h3 id="22-变量和常量">2.2 变量和常量</h3>- m; u* N( M, l; j, q
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
  E+ D& K9 W' H3 \; p6 T<ul>/ H0 D4 K7 h& e" E- q* u
<li>变量必须以字母开头</li>
. ]5 M' E7 O6 e' }* d1 A<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. I, Q: f3 n8 G) f1 E: j<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% z! U; p2 t8 O1 }
</ul>/ _  c- E/ J2 Z7 Z
<p><code>var</code>定义的都为全局变量</p>( V" s  N6 b2 |; s& O
<p><code>let</code>可以声明局部变量</p>) H+ f& O2 W, ~) B
<p><strong>声明变量:</strong></p>: q5 l. X. L* n; D# e
<pre><code class="language-javascript">// 定义单个变量
  z' j: L0 X) }1 ~&gt; var name
' `# l& i; y+ p1 y: y0 k; D&gt; name = 'Hans', x% ?1 z. O: e  V- y. t
//定义并赋值+ w" w# |5 m3 D- V& r, ~
&gt; var name = 'Hans'% T2 o3 R+ X( X$ E5 [# E/ v
&gt; name9 N% E9 |8 B" O7 \  M
'Hans'' _- l0 P4 @9 ]
" H" I- P  ]! J5 |$ i7 C% o
// 定义多个变量/ }* ]6 n" r& J* p
&gt; var name = "Hans", age = 18
$ a% L7 ^. Y8 i&gt; name+ Q& w0 r1 e; I! k/ i0 M( a" G
'Hans') j- k1 _7 T5 H( O' A
&gt; age
# N5 z1 N" F% k1 X4 N9 T( x18, ]2 s. ~5 j$ T/ g) D  k0 t
/ y+ g( ]1 j" l4 Z
//多行使用反引号`` 类型python中的三引号
: u5 h, g: B7 C* ^* K5 v, H/ i$ Z&gt; var text = `A young idler,- }' j* ^) o: L- \& n- J9 ]
an old beggar`* K0 O* }8 u* `) q2 `5 a* l4 T
&gt; text
7 }/ `1 n, T+ [/ {'A young idler,\nan old beggar'
) K( J4 O- o# j& p, y7 J- m</code></pre>
8 _* d1 X% V) n0 B/ s5 n3 M2 S* u<p><strong>声明常量:</strong></p>/ C7 w) q: b; P' G# ^: u
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>- t! ^4 M. r" Z! y
<pre><code class="language-javascript">&gt; const pi = 3.14
4 c+ G- J3 H4 v1 Z( c- N&gt; pi
0 ]1 S& ]' P1 a* W7 l4 _3.14
" l0 w. {0 O$ O& N3 c4 Q&gt;  pi = 3.01$ k3 A8 r- `  x8 {8 G4 |$ e9 J/ x
Uncaught TypeError: Assignment to constant variable.- L) h3 ^: M: |
    at &lt;anonymous&gt;:1:47 E" k0 J; }3 e% r

: r7 D  D2 e, ^# p" `' `</code></pre>7 s0 }+ O9 \* _6 V: O; G
<h3 id="23-基本数据类型">2.3 基本数据类型</h3># U) @% U* }* d) C2 \# c2 w
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>6 D4 r9 E4 v; l1 W# r( T
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
9 q$ S  |' s5 ?/ ?! A( i9 Q4 K0 q<h4 id="231-number类型">2.3.1 Number类型</h4># |/ e  A  ]; B/ P: ^
<pre><code class="language-javascript">&gt; var a = 5
& R/ O0 Y1 D7 i, A3 t+ f/ Z&gt; typeof a   //查看变量的类型  
% q+ W5 q) Z- V9 T' E) lnumber. ?% U$ b  G2 n3 p0 r. x
5 g0 V& y$ U& n& k
&gt; var b = 1.3; K0 m( |$ {  |& M: j
&gt; typeof b3 A) c3 p6 \  E: V; I/ U
number! P: Q9 t; c' x& O( L2 E1 a# z) q

5 n! i- x( z" z// 不管整型还是浮点型打开出来的结果都是number类型0 |- S: |8 G, f" h$ I
6 K6 `# o* V. ?+ v3 w7 u2 i# m
/*
5 D6 m! o( f1 p  G- g1 SNaN:Not A Number0 C% C  y* `6 b: ^% H7 e- D4 W% C! s
NaN属于数值类型 表示的意思是 不是一个数字6 J( X) K8 J; E9 k1 v( A: n# Q1 ?
*/
8 s) y; k2 N! [  a
6 x# K9 _4 p/ @+ ~1 F9 YparseInt('2345')  // 转整型
4 S# f4 n+ E0 E* `( u% y9 ?3 h2345
! V0 U% }( D$ p8 U9 T' k" FparseInt('2345.5')% C4 H: i$ [( j( ^1 H4 q  {
2345
0 {/ v1 Y, b$ _, LparseFloat('2345.5') // 转浮点型1 W" L+ e& \9 b0 z" h4 \
2345.5) f4 r. S( \; V) h5 Z) t3 b- q
parseFloat('ABC')( p) \5 Y7 ^/ q3 q/ k
NaN  }( X( e5 O. l" \
parseInt('abc')
- J: H- r3 T* Y5 g! n4 hNaN0 n# \8 H6 \; e1 {
</code></pre>
# w1 n6 o' `6 Z# {3 X! n! c<h4 id="232-string类型">2.3.2 String类型</h4>$ k" ~! U7 E8 S9 B1 H- d
<pre><code class="language-javascript">&gt; var name = 'Hans'
: x& c1 g. E7 a&gt; typeof name* Q: Q( a" I- M) o8 {
'string'
; c& ~0 r2 a4 \6 E7 q) q; _% n% A- s0 |6 g7 E
//常用方法* C& i3 Y( v% z7 B0 o1 U. T8 `7 X
// 变量值长度5 o+ l7 \" ]  I
&gt; name.length7 w/ t3 M3 X6 w% |! v: Y! M4 W% @
4) m- f1 {$ R9 m/ g6 K
// trim() 移除空白. T3 D4 h( L1 h( U' d
&gt; var a = '    ABC    '
, E: t* t( |. A  J9 H) ]( D; h9 f&gt; a6 n- d' }# q* w- T
'    ABC    '
4 J) |! s: q/ n$ q&gt; a.trim()
+ E, K, o4 ?3 R2 S6 ]) p& t7 f'ABC'
1 Y) |2 {( X& j//移除左边的空白
4 R  q- s/ `- C& I; ~/ z" i: P&gt; a.trimLeft()
0 g: @0 y( d8 E- r6 z5 t'ABC    '5 h" q7 f9 A8 K4 `* v7 X! E
//移除右边的空白
! g+ {; M& ^8 N5 u8 _+ C&gt; a.trimRight()
8 }) `$ Y- U, g) d* u'    ABC'7 w7 k8 ?( M; _" s: y8 k

6 S# ?* J6 v! ?//返回第n个字符,从0开始/ I$ m. @- F1 B5 K2 d2 v, p5 R
&gt; name( Y: t  a' J2 x2 M4 _- R
'Hans'+ i+ O% Y/ s4 T7 @9 }- d8 ~$ ~7 ]3 a
&gt; name.charAt(3), z2 S5 F  e, C5 h9 x
's'/ o' @  A- [7 ]5 I; f0 T) @4 C% E
&gt; name.charAt()
3 y; D  ^# E# F2 J3 u- s; ['H'
8 k7 K# n2 }* R5 M&gt; name.charAt(1); y; h! P% s$ l9 i: x
'a'
# |% v, a9 _# U% Q- ~  f; z9 }4 x3 p6 o
// 在javascript中推荐使用加号(+)拼接
+ f* \0 k% c. @, `&gt; name
# Z* u* n( B: h. K' n( C- j  g' H'Hans'' l6 r" P0 v& |5 ~% t, k
&gt; a
: {9 `2 O1 x0 v+ L7 j; q'    ABC    '6 ]8 R8 w- y& o0 g  z5 K
&gt; name + a
5 p4 c7 }) r" y'Hans    ABC    '  }2 c* A, E: A$ I; R4 F% s
// 使用concat拼接
% Z5 q3 Y  \" [6 J  j, @3 k&gt; name.concat(a)/ m' ^6 E$ X, i% s
'Hans    ABC    '
# r% [9 x( m2 w3 w' O+ c! b; V8 S# m& T& C' N4 b8 y% z# Z
//indexOf(substring, start)子序列位置
$ X0 Z+ c+ T' R# X: U) k
0 l' I3 J. _* r  ]) B" ]. l+ K&gt; text
7 x2 z/ V3 e, c0 f( F# m'A young idler,\nan old beggar'
9 n2 X/ f8 Z4 o! v0 D9 u&gt; text.indexOf('young',0)
! d' z; D5 }- G6 T4 O- `2
6 @, A: l- O% q8 R
5 e1 {) r5 K4 r- E; J6 Q8 |//.substring(from, to)        根据索引获取子序列; V+ D0 m7 ]! Y2 P
&gt; text.substring(0,)
3 G/ `! I7 w% [* F; j'A young idler,\nan old beggar'
6 Z3 {) e- V4 G! M, E2 u5 g2 k&gt; text.substring(0,10)/ C, s, K) y4 U5 _4 z9 v
'A young id'+ J% }  x. m0 o" M0 H7 v: ~
, l6 G- j6 y4 a; k3 m8 j, J
// .slice(start, end)        切片, 从0开始顾头不顾尾
+ r0 |$ O; C3 u2 H&gt; name.slice(0,3)+ k" W; p& D* \) o: W% M
'Han'- Q* q& I( a2 c

9 H' D; `) d( M( p// 转小写9 ^: D3 y, _7 \3 o- V( F. s
&gt; name$ n  x1 E  f# t" a" _
'Hans'# g9 l$ s3 V+ B, V9 b
&gt; name.toLowerCase()
% i7 q1 U" X" b8 `" J9 w# `# P5 N0 Y'hans'6 }% v' D# v% d6 z1 i
// 转大写- @9 z' {  H# r$ [" ?; Z- ]
&gt; name.toUpperCase()
2 X. ?/ d/ A7 P+ }: J  p$ C'HANS'
9 n+ }4 N: E7 _6 r& m$ k, ^5 h0 R. u; N: w. ~; X( c/ G
// 分隔
3 |3 X  C9 `% e- F9 y- q&gt; name7 J) Y5 u, t) z- s& U
'Hans'
3 _; D1 u/ ]4 ?( [4 a: X&gt; name.split('a')+ [- d) g/ H) O9 r0 W9 B, a& B
(2)&nbsp;['H', 'ns']
  ~2 g: z9 @) E" i& F</code></pre>( v( g: U% v0 W. m' {
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
  S' ?8 }2 Q. v- w<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>5 h! J+ u: E( _2 X, M8 f
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
5 {" W& G+ U. T<p><strong>null和undefined</strong></p>
1 N" [# ^8 L$ y; L<ul>. i1 r+ d( i1 L+ d6 j+ A! v
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
% W% p! i; }, l' N, ?<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>/ z# _1 y5 h+ n+ R6 X" m; h2 ~' G) T
</ul>& Y3 @7 ]6 @* [" D
<h4 id="234-array数组">2.3.4 Array数组</h4>  m4 F" s) B: j. I% ?1 z
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
$ z# h4 s6 s! I8 {$ v8 B0 k<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] * G: t8 a6 V* o2 v  I
&gt; array1% `& p$ h( R0 S/ }' q2 o6 _
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# c8 \+ M7 K# t
&gt; console.log(array1[2])  //console.log打印类似python中的print- I  q: e- ]& [$ O2 q/ U
34 Y/ P. b5 s/ ~, E2 O7 R! {
// length元素个数
* V' ]' t( ?( @9 G  }&gt; array1.length
6 V! j8 G  B0 @, D6# {+ w- K- v, H) ]2 S! h
// 在尾部增加元素,类型append
2 m" k" I# @. q8 v/ ~: U&gt; array1.push('D')
0 {0 W& ?0 W; [' x# U; d) I1 E9 v7) ~# Y2 K. F3 q  x) p4 v' A/ f$ p2 ]
&gt; array1
2 o2 s1 f4 M' L3 v0 e(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']+ z, E2 }1 ^" g% x: O3 K  w
// 在头部增加元素7 o4 ^/ e" Q0 w' e
&gt; array1.unshift(0)
+ O2 ?( h) ~+ V/ c/ A8/ b2 q2 N( T7 @; y2 q
&gt; array1% F/ Y% U+ l* D: K- H/ ]+ {7 e
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']! Z- A1 a. k2 m1 M+ K. U
* E# ?  a- \4 b( b9 o$ a, I
//取最后一个元素
; n- ~* J" D" C) c&gt; array1.pop()8 [  ~5 \" R' S/ S% k# |7 e* b3 L
'D'8 g9 s+ A; l1 m2 s. X# V
&gt; array1
- E+ i" k. X% _, @6 m. ?4 A(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']. I9 q. S* u7 H9 F' h. \  c; u
//取头部元素  g* M8 x. x5 s- c; \# a
&gt; array1.shift()
! g( p1 `& h1 H8 g. A8 }4 j. A  E0% F0 D) ?( ^0 T& B3 e: `% l0 `
&gt; array1
! g+ ?" _; e6 x( I, A" I(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 T5 S$ r6 l9 I3 g& n( r) [( r) U! S" {( Q
//切片, 从0开始顾头不顾尾$ B/ B" V9 O; o
&gt; array1.slice(3,6)
7 _7 {1 p1 K( U7 N( q( q$ M! o(3)&nbsp;['a', 'b', 'c']' ^6 f' I+ t% d% e  h4 A1 Z
// 反转
# v8 P3 t: O) Q. w&gt; array1.reverse()
/ K+ d6 S; O% h6 z(6)&nbsp;['c', 'b', 'a', 3, 2, 1]1 L2 L" B- L( e! Z
// 将数组元素连接成字符串+ }1 Q4 B- U5 o. T1 L  ~
&gt; array1.join() // 什么不都写默认使用逗号分隔$ q4 t$ v. L" `2 c
'c,b,a,3,2,1'' u0 S" u# h) _/ X6 Z
&gt; array1.join('')
6 [2 F8 N6 j5 ?/ M* w1 Z* {'cba321'
* ^+ i3 [  d5 e, A&gt; array1.join('|')
, ~4 l4 F( a" J* H8 l; L4 b'c|b|a|3|2|1'
) l2 I" c2 G, j0 m6 x  O% j9 G; G) T& f: N  i: Z8 |
// 连接数组
( ?) a' L8 X% b7 k&gt; var array2 = ['A','B','C']
! D0 T2 w) J6 ]  \% X8 `8 \0 f&gt; array1.concat(array2): r: a! E* d6 R; x3 p
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']0 |) N1 ~) x; Q7 R( T( R9 S: b) m
: M. T9 g5 f" L8 v5 {' L8 L
// 排序
% p, Q, N& H9 I8 u0 _8 f' f&gt; array1.sort()
0 M$ y; V- i9 h3 Z: P7 M(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 e4 p2 p8 F3 z7 f
+ C" ~; A& X3 \% ~- o5 X8 v// 删除元素,并可以向数据组中添加新元素(可选)
& S" `9 l& W: B&gt; array1.splice(3,3)  // 删除元素! _" Y. `6 v, J: w. o
(3)&nbsp;['a', 'b', 'c']
+ i% N3 J0 F1 j  l% k& }+ k&gt; array17 A$ p! J$ a( y" K0 R
(3)&nbsp;[1, 2, 3]( W6 J8 t. h0 t$ F1 D* g5 V; B  E6 M1 l
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
8 K5 M; n. o1 H' i, Q+ _[]0 u! z! ?; ]4 g# M4 X& \
&gt; array1
; S$ X" G2 h0 S(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
6 h# O' j6 E/ R4 M" ^" x8 O$ ^0 T! d: E, x( E
/*
6 Z  B- b" |7 {splice(index,howmany,item1,.....,itemX)
! ]9 L) P/ L7 y/ Windex:必需,必须是数字。规定从何处添加/删除元素。
# T6 Q- r8 Y' e- Yhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
, O) F$ Y1 j- [item1, ..., itemX        可选。要添加到数组的新元素
9 R+ C! {; M2 P1 h4 s6 Q( v% i*/
. v9 S" ^8 C% z# K$ z5 \) r, e# [2 V8 @) R+ Z5 h
// forEach()        将数组的每个元素传递给回调函数
+ M, x- n$ |0 z2 L/ D0 G+ Y&gt; array1.forEach(function test(n){console.log(n)})
. p% V$ I1 U4 f% o/ ~ 18 Z5 e& N% Q: j. w) s: u4 Y5 d% T
2
5 p- o# |# [0 l3 U1 W 3
) g0 Z! @8 s6 J* J% Q  Z+ Q6 b6 n A
. y6 y6 {* J7 ?5 f B
1 T% _4 ^2 ~) `4 G6 b1 v C. i) B2 c2 g( n$ B: I5 L
// 返回一个数组元素调用函数处理后的值的新数组/ x+ C5 }3 v$ `7 q3 }& P; w7 b
&gt; array1.map(function(value){return value +1})( d- Q! e& A' Z: l: ^$ J. [7 x) ~
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']9 ^$ e0 C* x% j, O
</code></pre>2 T- g% {3 y# P% X$ f9 ~7 K4 Y' O
<h3 id="24-运算符">2.4 运算符</h3>
' A8 P7 |% v9 e; \5 q$ U<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 z" n. N8 J( B* w  L<p><code>+ - * / % ++ --</code></p>6 w2 `7 g; ]: U( [6 W
<pre><code class="language-javascript">&gt; var a = 6
- b+ {6 U1 r. ~7 T) ~&gt; var b = 3
' |0 i; t$ f$ k// 加5 {5 r) E0 L, {2 @8 w
&gt; a + b
6 W* F5 e7 _9 ]8 x1 ]2 _2 s! `9
/ V9 k$ g3 W3 o/ \// 减
+ Y  {' y+ J, y0 b&gt; a - b# {: l. _4 }/ W, H) f8 r
39 J  ~: X  R) ]
// 乘
* @2 ~9 ?% H5 t9 G6 a+ M&gt; a * b$ T: X# T; A# V! o. v/ @- Q
18
3 h5 @# z$ {1 Q) ]// 除
# j" f' y* {7 O' Y# Z! O% Y4 @# |$ F&gt; a / b9 }# S' W3 [' k7 t
2( A0 `3 b  D: p* D4 M
// 取模(取余)
% n8 P- q& v, s/ e) J, w) s&gt; a % b
) ]+ Y. G2 J. Q" o3 |- b0# W9 U3 K  U; S  Q. i; d0 w3 [; P
// 自增1(先赋值再增1)7 P' B" `* i* W4 S1 v2 f
&gt; a++
  |! k5 Z' X" x* ?& C( A( n8 E64 V  a/ T; S$ u4 N2 s* D7 j7 a' ]
&gt; a
& E5 _% V# B; j5 N7  ]6 _# Z" F4 n
// 自减1(先赋值再减1)
  g$ M4 R0 c2 }6 M$ G; P&gt; a--! r! [; R* m: @6 q0 O
7
$ f! h. r1 w' l8 A$ A&gt; a7 f) A: t7 X% g
6
$ D0 Y- |! R( O( d- x// 自增1(先增1再赋值)+ l3 p0 b( s- [2 W
&gt; ++a
$ y( b$ @" I1 S2 U7. ~, R* i" i% }' C
// 自减1(先减1再赋值)5 i0 h4 J: f3 m8 J" b( m9 m
&gt; --a
, c( O# c1 m5 G# K66 g1 y4 X3 @2 j
&gt; a, q( ^5 P! Z; m0 Q( K9 L
6! b4 A; S; C$ G# N1 u+ B8 C4 V% @( {

3 |& i0 A' k, D1 D% \//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
* k; N, x3 ]0 u& F7 U9 G7 ?/ s% \" a</code></pre>1 l6 n- x' E, e: K8 U: ?
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>- d  y' F/ M* q4 _, V
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>+ D( y4 ?' A( i3 A( T" P: `+ L
<pre><code class="language-javascript">// 大于# U/ L' r$ Q/ K% |
&gt; a &gt; b
9 _# W" j3 G0 @9 Ftrue
8 W; K) u2 O. p. q3 N3 J* D// 大于等于
% ^1 T: n2 i7 O% X&gt; a &gt;= b" ]; d" H  U# b3 e) s' ~$ R* E
true
$ H" H2 W1 O) E( H$ Y// 小于- }8 k/ z5 a9 Z4 e' r& n
&gt; a &lt; b. N/ Z% y4 r9 D3 [6 K1 T
false
1 ]8 [& \( H9 R6 q% g2 }// 小于等于0 B3 c# z) ?) s
&gt; a &lt;= b
* U. _: x" B+ K- @false: q* n4 {3 f8 h- p
// 弱不等于
0 b  V$ h% O. R9 Q9 x; V&gt; a != b  B' B7 S6 i" E! \" j
true
* @$ l8 ]1 y: E// 弱等于4 s% r* c( r7 Q; D0 A
&gt; 1 == '1'
/ J8 P2 d! \6 a( u, r9 Utrue
9 _/ P. f/ r$ O# X) f2 d0 i. P0 ?// 强等于
7 M7 l/ J! n) b7 E/ m' [&gt; 1 === '1'
: i5 Q' G* P4 \6 C$ C7 }false$ z- }6 a5 ~$ p0 b( t; q2 x, J+ h
// 强不等于+ B3 f! \! s, r5 w# H
&gt; 1 !== '1'# k8 t6 d( {  B8 |- h
true
& O& i5 H9 r, j0 t5 s  u& L
/ Z* {1 o5 v/ l$ Y8 L/ V/ @5 ~* V' l/*
5 F3 o- H  n0 ~9 uJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误, \$ [. u% v2 R0 L( `( m
*/0 Z3 O9 f' \9 a1 G! I
</code></pre>
  \" Q$ t& U* n( K9 G$ R<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>- E, [$ {. R; z; a: i- j6 z& G
<p><code>&amp;&amp; || !</code></p>' s4 `- m% k) {. T: [9 k
<pre><code class="language-javascript">&amp;&amp; 与. g; y; P+ i# h) |+ G( L
|| or + Q, s+ `& b: O' g
! 非: o1 |- q! u  f3 `, M
</code></pre>
) ?) ^3 E4 A9 E' n<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>4 c  J- n! U) G& t; O& a" G. [
<p><code>= += -= *= /=</code></p>* {, t) X* [; w" W5 G" f) O/ W+ m
<pre><code class="language-javascript">// 赋值1 v  K. ^. _- f/ p
&gt; var x = 3
+ `; ~! m3 r+ i* `// 加等于
4 s5 [- j* M2 N; j6 q&gt; x += 2% {; m/ m# `% l, w/ x
53 K( u" I2 P8 V/ ~3 j8 X
// 减等于% }. h. [/ r# I$ a  x' ?
&gt; x -= 1
/ Q& n" t* r" R. k" o; q' I4
( e- ^) ]) s: E& D, S// 乘等于
' r& r- l8 J2 h0 Q) o" D5 t&gt; x *= 2" B1 {$ ^! w) j+ S
84 O7 }& v) K. k; j- {7 C
// 除等于
9 [' i& p4 S. a* b5 |5 X&gt; x /= 2
! x0 K& C4 H0 x& F  K! H% x9 M4
. x& d  }: z$ C- ^</code></pre>
& P( M/ ]2 k: Q- b; W0 W( t<h3 id="25-流程控制">2.5 流程控制</h3>; P4 W; ]0 v" w/ k3 g4 M
<h4 id="251-if">2.5.1 if</h4>
, q5 _9 M( F! o# A6 @# Q8 B7 a<pre><code class="language-javascript">1, if(条件){条件成立执行代码}& f8 v8 _1 A9 z
1 }( p9 @0 q# Q2 N8 e3 C+ l
&gt; var x = 34 i% ]8 p+ t9 i$ W6 t
&gt; if (x &gt; 2){console.log("OK")}+ ^& E! m8 s/ }) k
OK
+ T  a, [  g" v: ]3 ^3 v
% I; Q$ j: J- Z* @( s2, if(条件){条件成立执行代码} 0 Z! s: [+ l9 H( Z8 h- t! w
        else{条件不成立执行代码}
$ A2 h: j4 ?; y4 N4 i# k7 d  B4 O& r  C5 [8 i: o
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
+ Z! T' S' w" ?'NO'
2 w& O( t# a, q$ I! A6 V
4 c7 O$ |9 p2 K5 h1 X3, if(条件1){条件1成立执行代码} : u/ ]* e; S2 O$ S2 x' c
        else if(条件2){条件2成立执行代码}, X8 R9 J8 s6 A3 z8 d, H
    else{上面条件都不成立执行代码}
# T  t/ J& C' O/ V) p0 R8 D7 `& d' v$ I% f
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}$ P2 e9 B9 Y; [$ s# z2 \
Ha
5 r( ~/ @, J* _" e</code></pre>* m. n: `4 ~  Z: G5 n/ B2 R5 I
<h4 id="252-switch">2.5.2 switch</h4># m) y/ ~1 H6 v
<pre><code class="language-javascript">var day = new Date().getDay();4 q& M. N7 K- j# ~
switch (day) {
" w4 c. a9 b( _  \( @# v: Z  case 0:" D5 M2 g1 t" B( {
  console.log("Sunday");
4 c/ X- M7 H. g4 F6 Q3 d; v  break;
3 o) n: L$ p' T3 T  case 1:4 s4 m' ?7 Q" }: {& R- x7 K
  console.log("Monday");
- S9 V) F" T4 e( s3 {; \: ^  break;
( G; L5 C5 h+ z& D3 H3 Cdefault:
& _; C% h: Z0 [  I! \  console.log("不在范围")4 _# b( g  H) i, G1 g
}+ Q" Q0 J/ x& U) \, F% S
不在范围% ]0 l( b5 N! K7 p. T
</code></pre>3 O7 o- ^, M% c8 }) v% X0 g6 s8 m
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>( P$ P# s/ p- @7 k" B2 E
<h4 id="253-for">2.5.3 for</h4>& V+ }& G+ x% t2 y9 s# }$ ?& m
<pre><code class="language-python">// for 循环
( \8 h! h8 `$ F- B: g& D% h4 S. {        for(起始值;循环条件;每次循环后执行的操作){, R4 ^- D' J0 [7 z7 Z  @  O4 I# G
        for循环体代码2 A  J. |; m% W' U! r; R, I
    }  H; Q; G! ]! D3 G; x7 m& O
& N. Q! a: T/ x! t
for (var i = 0; i&lt;10; i++){
: J: Y" `4 i* _& w    console.log(i)9 G% q3 `, H% E) b- t5 |
}4 v  b1 `6 x: g8 O& r
        0
0 O, f% J$ d: o        1- {  K1 U0 z# ?7 ?3 h- t
        2* G: M* s* s" ]9 c
        34 s2 y0 ~4 f6 ~5 D3 e
        4
7 g& w/ g. N2 F2 n, k6 B6 z        5( }8 q; j) C0 b8 Z2 z* T: p" q
        64 k5 ]. Z( X% g2 J( n& w
        7
) w9 B9 ?4 `4 s" L        8
" @3 H5 b: V- b* h9 a$ A; D        9
: x; u5 v9 A+ y5 }$ j</code></pre>2 T* A& N2 h+ D, Y. Y& |, N
<h4 id="254-while">2.5.4 while</h4>
; x  v  x+ d0 ^<pre><code class="language-javascript">// while 循环5 T/ o6 {, B. s( c2 ]
        while(循环条件){" |( e, z9 C) R( U- U1 _
        循环体代码
  |  b. _' \1 K, C- q$ D    }; [+ m( o4 X: F* T

" ]4 l- Q1 h2 p+ u7 X: \; H: ^&gt; var i = 0
/ x2 u  p2 U; Z+ Y# b9 L4 M&gt; while(i&lt;10){
" v! k1 J! M. u, E2 ]$ ]2 m8 f    console.log(i); [) ~* p# p. a
    i++0 l) W/ q# j7 b5 @6 d
}" X' f6 r3 v- w# [# I3 W) r
0
" N! Z/ O) ~+ d9 V- H- k- d" {  p7 p  p 1# X0 N% C) f8 {( N9 q
20 k/ l7 M' f! ~1 t9 J
3" |( |8 A6 }5 v9 U" }8 d& \; ^" D
4- M7 @/ v9 [% r$ s0 ?# f
5
9 B0 j% Y& v0 ]- k 6
4 q# ^% e7 H9 y6 \0 E 7+ C: P2 j# f' o' ^$ [, @8 T4 X& ~
8
# T. w5 N. E5 R3 j, t. v 9' m! A9 b1 Y& o8 N' v5 E. ^. A1 g9 K
</code></pre>
' s1 g6 n" ?) J9 ]( r$ h( T<h4 id="255-break和continue">2.5.5 break和continue</h4>+ T; H8 n, G$ x
<pre><code class="language-javascript">// break
% a3 W* P4 K4 Yfor (var i = 0; i&lt;10; i++){9 G9 Q: I% y. E; X
    if (i == 5){break}) u  B" w1 k$ Y, k
    console.log(i)
1 ]2 g! _/ N/ Z: P% C- O}" w8 m6 ]/ _0 I* z( Y: M# W
0% f% Q( d, t9 g
1% U8 M8 Z% H) z& L4 g0 u, k
2
2 C+ v3 e  m9 m9 b9 ^0 ` 3
2 d  a' j( W: |; X) h4 c, ] 4
! Y; q6 w9 D  V, Y, g7 M& k// continue
5 \! `1 J+ H# Q( a' o2 Lfor (var i = 0; i&lt;10; i++){+ r2 _; E: S1 U8 G: M! Z- {) S8 _
    if (i == 5){continue}6 P( q$ M7 w; A4 S3 v' w) y- e& \
    console.log(i)
( k  b9 \7 t# ?$ T}0 i! C+ u% U4 D0 b2 e, e# y$ f
0
3 R/ [, G( I5 e6 q: D5 T+ I 1  K' h, K; `# r
2) l" v2 k( [8 J+ ^8 L8 h
3
7 u3 f6 ~/ \5 t8 P9 @ 4% q) H, h3 U5 V2 `* W9 r: X9 G: f. g
6( v5 V; w/ X# c% W( g
7
9 E2 Z6 K! E; r1 R0 I3 Y 8
+ B, L' r5 m5 k! Z0 n 92 F6 U5 k# F; R- f" o. o2 b

" l6 o! J1 i5 Q# v7 r' z0 I/ l</code></pre>5 i9 i6 J! A+ p2 e2 ?3 e. \" y
<h3 id="26-三元运算">2.6 三元运算</h3>
4 O( G( j7 _6 f0 |& A# I; z<pre><code class="language-javascript">&gt; a+ e7 E8 C: b: y2 p& @
61 l# p# ~. [. ~0 Z  h& \
&gt; b
9 l7 J" ^) d: F' B! @: s" R  z30 v( t1 J' S/ T% N
' h* m& a) n7 M
//条件成立c为a的值,不成立c为b的值
! Z# _' w2 K. L, F/ }* u&gt; var c = a &gt; b ? a : b
1 I" B7 O3 S5 i1 ]0 R+ `$ L# o# E&gt; c
2 D$ R5 H: N& o$ H6
# u7 \6 ^7 x: e! j0 @6 z4 I! t; C
& [1 c( F3 P) j# f* z: m( z// 三元运算可以嵌套
+ T! `/ r; A, G& B& H! r# N8 E! \</code></pre># d9 f0 s  J: v5 x3 t
<h3 id="27-函数">2.7 函数</h3>. e. o) }. H. y  z' @
<pre><code class="language-javascript">1. 普通函数
$ o& ^& S/ t: s% a$ U&gt; function foo1(){. T5 J' e* K% ?  I0 W4 T8 x8 [
    console.log("Hi")+ z: U2 s3 o9 X5 j1 A! G; N
}7 j; D  Z6 D$ f6 B- }, n

% h* ]- L5 N: a" ^1 E  S% ^&gt; foo1()8 |; I0 y2 A0 N8 Y0 V( [/ o
        Hi
3 N7 b9 B) [8 e8 X: Y2. 带参数函数2 A9 q5 X# R4 ?/ g' X- k
&gt; function foo1(name){
& k$ t* S3 m+ J* }/ H; A* |2 zconsole.log("Hi",name)
" [% Z, Z& q  c6 S& j}# h! V- @7 X! s8 M' R& i2 p, a
+ K5 P, c* a2 B# Q1 Q+ l" a
&gt; foo1("Hans")
2 C! b2 Z; I3 e2 yHi Hans
$ K; R9 v3 i' r; N- Z6 V4 L' @1 D" ]& s+ V, W
&gt; var name = "Hello"
& |, L5 _1 V: H* V$ ?, Q% R&gt; foo1(name)
, w, h. w' Y( X% }Hi Hello- f9 P2 A: S- ~7 p" Y
9 i3 g+ H$ q5 A1 `3 x
3. 带返回值函数
# `" K' D* i- u" E&gt; function foo1(a,b){( H0 M3 s8 W3 m& s
        return a + b   
6 b& z8 Z. l1 r3 v5 {$ L& m* L}3 F- i% Z: n# B- z3 X( r
&gt; foo1(1,2)
. t6 b" C7 Y7 V6 M$ l33 `2 f. |" h+ t
&gt; var a = foo1(10,20)  //接受函数返回值6 I2 w3 `9 }) s
&gt; a. d# Y$ o, w3 [
30
  f8 n: ]4 R* p, W) X; M5 T7 q# ?
* O, p7 f) _: ~' {4. 匿名函数5 c6 M" }* u( W, m9 T# [
&gt; var sum = function(a, b){" D" M# L% K5 U( }, d/ z! K
  return a + b;
* P& B$ Z4 Q5 r  x4 S, X) ?}
3 m. i. J4 R: ~* X7 F, p&gt; sum(1,2)% N( T0 x: j/ k9 \% A
3% b, T( Z1 M; t$ A/ f7 k3 c# z
5 e5 @( T1 F8 Z3 Q& ?
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
' P- b  \. `' @&gt; (function(a, b){
; ]) t/ |( F+ U- {' S/ `# B+ z  return a + b
4 w  n8 m6 v* N' c+ ?})(10, 20)7 @8 O$ g% v; N7 y+ O" P
30
4 ]8 _2 J: k  ]) k8 z0 l  T) p# W* e$ K* J. I
5. 闭包函数2 G) W7 s6 J. G! A3 ~
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
3 X2 m# j) F( ]var city = "BJ"
0 a% n7 F# \3 J4 M1 l6 X6 [  }function f(){' Y$ \% e: a+ e/ [  M! J3 |" X! q' a
    var city = "SH"8 W! I6 z" C: j; [0 l
    function inner(){
  N, A7 p. ~+ S4 p        console.log(city)3 M9 ]4 O% f8 [  _. E; w
    }
# h+ t, w* L$ s8 t    return inner
8 E' k5 Z. w- V" i1 N}
8 c1 C  o* A( Q* N* e: n$ `; Rvar ret = f()
5 r5 Q& E" z1 bret()
0 ?+ I& ^- n# I/ |  g4 \执行结果:
7 j9 s. O& a8 z2 w7 H+ z  T5 O/ iSH7 z3 Q9 r' J: [6 ]

* x; z3 P* }8 Q</code></pre>' h7 n8 f; u) r0 t1 k4 m
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
  F  c( i) q; J) W4 y6 B<pre><code class="language-javascript">var f = v =&gt; v;
( T# k' f& X" n- V. O5 I// 等同于! r6 c7 V& P" Q3 g. }
var f = function(v){
6 G1 i8 @* Z. K$ t1 I# Z5 i  return v;& ?4 \" I. \9 `4 j+ _
}& W1 R; K9 \' k$ j: u1 P( p
</code></pre>5 n1 A' G9 |* f7 k  i7 l
<p><code>arguments</code>参数 可以获取传入的所有数据</p>( V( Y+ ^2 F" o2 e9 d4 I
<pre><code class="language-javascript">function foo1(a,b){
" o( A& d+ X0 a6 W3 B* q8 x# }" s    console.log(arguments.length)  //参数的个数 1 F0 D0 _2 I) V/ A
    console.log(arguments[0]) // 第一个参数的值
0 D) A0 y4 \4 B; O" ?  ?6 |* S! J        return a + b   
9 m5 b1 U# _9 J. D, ]/ a}
8 c) o' O0 g# }0 h; V+ K  a) R. C3 _foo1(10,20)
# v8 c4 B+ h* I+ y7 F$ }结果:* M' A# S$ Y' }
2          //参数的个数 : p6 G& U. m" u2 ^" I2 D9 G" Q
10        // 第一个参数的值
/ d/ {" v0 l, {1 W30        // 返回相加的结果" ]' j; m" c& f; Z0 M
</code></pre>
$ b1 I) a8 _9 `4 k; w; p7 r- n<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
" a7 h" e( ?3 w- a<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>0 A7 J2 C+ T% r$ p) ^* H$ j0 I
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>  ^& T: q# K: T
<h4 id="281-date对象">2.8.1 Date对象</h4>
# R3 Y# R! f( C) H<pre><code class="language-javascript">&gt; var data_test = new Date()$ t/ m8 N8 a8 i
&gt; data_test: q5 l) I' N& m+ v% C) `" w
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
/ O7 r! Z) M/ n; Z) }3 T&gt; data_test.toLocaleString()
4 {4 `( w5 x& a" i7 i1 Z'2022/2/11 下午9:44:43'
( H. }; x5 E. c: `- z6 V
' N$ g- @/ q  S7 d4 h! D- s; j9 `+ V&gt; data_test.toLocaleDateString()5 ~7 Y: Q$ v1 ^3 W2 w1 I+ W) P
'2022/2/11'
* v4 F) q0 c7 L8 M$ z6 }
! C* {, V8 T+ v7 j; G  g&gt; var data_test2  = new Date("2022/2/11 9:44:43")
4 Z. P2 y: {/ _3 S. N&gt; data_test2.toLocaleString()- G- ~9 _! G1 y4 f6 s
'2022/2/11 上午9:44:43'
% i# ?. ]! G1 B4 Y7 }: n3 v; Q( }( b7 e/ D
// 获取当前几号/ _4 I. K- F: b, o+ d0 m
&gt; data_test.getDate()" p+ [1 s" x5 ?; l5 k) o2 q
11+ k/ n7 e5 P, b: c+ ^
// 获取星期几,数字表示
1 Q0 J9 p/ A$ n6 L&gt; data_test.getDay()  
4 \4 d; b1 n7 |& p5 s, C5
3 ]% F5 A: K5 N# a  a3 L8 }// 获取月份(0-11)
* ~) r& g+ `+ g# k&gt; data_test.getMonth()
+ Z$ K& S" u  a. ]) f1
+ q( D' R9 P! \// 获取完整年份6 N& r5 F% K: L2 T
&gt; data_test.getFullYear()! ]- O0 P2 {3 V& e/ g
2022" }. s- V4 |3 y  v2 L( E
// 获取时
8 v% ]  f2 ?, R9 \% ^&gt; data_test.getHours()
: A& P# ~! H' V; l216 m8 r  ~' g( X2 b3 C
// 获取分0 M( U% A# p. o+ v4 g
&gt; data_test.getMinutes()
/ {, \9 d7 e9 }& b- L# s/ ?444 U) H1 D! A7 o2 q
// 获取秒1 c# H( q1 j/ S. o3 }' k) N# A
&gt; data_test.getSeconds()
6 }! x" K* e3 x. [' g9 }* a$ I& `+ K8 }434 Y# N% j& ~8 q* l: k( E7 f
// 获取毫秒
  \5 {! k6 g$ ]* L- x&gt; data_test.getMilliseconds()
( S( f3 F2 E( f5 l8 [* E9 x290
4 ]! O! x! Z/ _; p: L$ w// 获取时间戳
% A- V& C5 |6 c&gt; data_test.getTime()0 Z* B/ Y. [0 {( j- Q+ Y
1644587083290- x4 T/ m3 C( X) b% `" ^! [9 S
</code></pre># n  I0 ^' K) r
<h4 id="282-json对象">2.8.2 Json对象</h4>
& J& F% e2 R* h! j8 l0 T7 f<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串7 E! i3 ~7 ^4 B1 _6 g2 w
JSON.parse()  // 反序列化,把JSON字符串转换成对象
; ?2 h2 a/ b3 b
% y1 r& Q; k* {, y- N  |1 H2 s5 T// 序列化
1 r3 s! h1 }- q2 M7 ]2 }" d&gt; var jstojson = JSON.stringify(person)
# j' f/ T* b$ w5 ], i&gt; jstojson  
* }2 Q( ~1 _4 Q1 h1 w7 r6 J'{"Name":"Hans","Age":18}'" o, N( a3 G; W% s7 P$ \+ m2 P" \
- j$ {5 F4 N. a( P. v  Z
// 反序列化
% S( j9 Z4 G$ z7 v" b2 Z) U0 W&gt; var x = JSON.parse(jstojson)6 D% I6 U2 A! `/ o& M# {
&gt; x# r* P  r# t8 [. m/ ]" t5 L2 ]
{Name: 'Hans', Age: 18}
3 {; W- i* I1 D&gt; x.Age
; p, t% {+ q- ^! D+ k18$ s2 R6 I7 r7 p2 w/ D! [
</code></pre>
- X( s  c+ M9 b4 z; l<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
7 ^& R; U- o9 L( i- s: B2 b<p>正则</p>
$ E: ^& O# L4 P) K, O<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");0 b! \0 t* D) E
&gt; reg1) w4 j" a7 i3 H; B' d# F9 |
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ J. }/ z* j6 D, j0 S! ~& x2 U&gt; reg1.test("Hans666")) T' F: G' @+ T3 i& e$ R8 N
true
2 s0 `' [  p* E4 T3 o6 m) P3 o1 n5 N
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/1 a, ^  f2 r7 _) ?+ Y( K9 v" [
&gt; reg2, K* q" @3 U- m" w+ ?' _5 e; T* e
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
/ _) ^+ q- g9 o# F) y: v  B&gt; reg2.test('Hasdfa')
" Q* ^0 k( p: d# Q) D4 Ktrue% v! J& r7 D  h' l" Z% }2 s( ~: H7 y
  M! |! g0 Z% v! g  j7 N0 Y
全局匹配:
0 f, q9 W$ r4 C' l1 g4 ^/ I&gt; name4 ]9 ?: l. t0 ?( ]6 m. L0 E
'Hello'0 ]: s, v) i  X$ w; |( M8 {5 b
&gt; name.match(/l/)
+ X( S1 e, u: n7 H['l', index: 2, input: 'Hello', groups: undefined]
7 \6 g$ @! _/ g' L: G
. y* |4 g$ D! L  v- [: ^2 K&gt; name.match(/l/g)
1 h/ M( |! T6 @' E  V- i9 T" R(2)&nbsp;['l', 'l']
% n" z. e# v6 N, o9 c// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配* B; x7 E/ K2 a( X8 h6 f* r: n6 Z* t
- c1 e( \( ^: K' {
全局匹配注意事项:3 ?; m5 \. s% @9 T+ k6 g
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. W  X5 ]( R! U. w* z+ W&gt; reg2.test('Hasdfa')1 t+ U/ M- n1 g" U& c! o
true
  G) n. t2 l+ i# K* ?3 `! ~7 c&gt;reg2.lastIndex;3 [( M; u: l4 Y4 r+ ~" F, S
6+ p$ Q- p2 _! v. o+ `  I' f& `
&gt; reg2.test('Hasdfa')' d4 }- A5 n1 T  N# i
false
. G9 L6 C- S% d/ j7 P&gt; reg2.lastIndex;1 @) q; A7 m% t7 L$ s% ?
06 g' L& N, U+ g5 v; p, y) U
&gt; reg2.test('Hasdfa')
: C' ~& T" C( Ctrue
! [. H7 m- H1 n9 ~  a; A&gt; reg2.lastIndex;
$ {: }- m9 }  g6 @* Y) Q6
. B& [& W$ z$ w&gt; reg2.test('Hasdfa')
- f; b4 D1 }, D1 N2 Q0 `; g* z% Cfalse4 q1 I% e9 ?& H. b
&gt; reg2.lastIndex;
' u8 P" q3 [1 m/ K0* T6 ]2 U( v2 F# M1 O; l# C' U8 C2 [2 \/ z
// 全局匹配会有一个lastindex属性
5 A% j' M! I$ @# n+ I7 U. M% |8 ^&gt; reg2.test()
/ Q5 [1 k! J" Y& N$ a! E% wfalse
% O" c$ `  r( q" k+ k. N( b&gt; reg2.test()
: X- f  Q; s  Gtrue8 p" |4 d( i1 t/ o  a. m
// 校验时不传参数默认传的是undefined2 X  G  p& \# e" j6 V5 f+ `
</code></pre>
; Y) q$ I: L: I+ {& {. _<h4 id="284-自定义对象">2.8.4 自定义对象</h4>( l8 H- E3 o* H. y2 d8 \8 \4 U7 z
<p>就相当于是<code>python</code>中的字典</p>+ v( |; p' x2 g8 l5 |! P
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}# l% m8 y$ W+ C% f  k  e" k
&gt; person$ p! O+ v( s  }( T
{Name: 'Hans', Age: 18}
" e3 R+ g& r1 E1 T& f7 K& P&gt; person.Name  Y1 g4 S) N- p8 Y+ j
'Hans'$ u& F; v# n! e0 h) K
&gt; person["Name"]
2 W& k, ?: T( J) C'Hans'
) J+ m$ t4 ?0 E" Z+ K; n2 H0 T9 W3 d( V  f$ A- y
// 也可以使用new Object创建" X7 }% s% G/ p) `
&gt; var person2 = new Object()1 E2 s! y4 A( K1 r  Z
&gt; person2.name = "Hello"
; U+ R% \! N2 f: z9 {  a) `'Hello'2 l( E. o/ ~, ~! ^( E
&gt; person2.age = 20
# Z) _% v6 X% x  S0 V% t20
: V; I1 ^/ ~' ], b& E1 q</code></pre>
! \, A) }8 C6 z/ D<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
3 e% \' |0 \; k4 C8 y! g<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
$ z5 w8 ]' |$ e5 s) f. k( U<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>3 M4 |0 s2 `# t8 P
<h3 id="31-window-对象">3.1 window 对象</h3>
# s  x# \; P7 q. j" v, U& {4 J2 [<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p># m+ e! e. e: S3 H
<pre><code class="language-python">//览器窗口的内部高度
3 _) X8 u# m8 F, k6 P4 V  ywindow.innerHeight
5 c7 E* B2 t0 D: u706
: o* i& X  h! G& n8 S//浏览器窗口的内部宽度8 r7 F2 \, v; `
window.innerWidth- }  q0 x- `' Q
1522
3 N1 g6 z% R+ L( G, Y" V, \' x// 打开新窗口
" L- S4 O7 O$ Y5 m! Rwindow.open('https://www.baidu.com')
  U/ w* K- _0 k! JWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}1 Y9 k; U$ J9 d* k4 {; y
// 关闭当前窗口
; y# G! W) v7 V6 X# Awindow.close() 0 _3 l: K6 @. @
//  后退一页3 h* ]* F6 k8 d! \
window.history.back()* o! C& E, l1 l9 a7 Y
// 前进一页
% Z( y6 v6 i# fwindow.history.forward() & f7 |1 g% d+ T  n3 J7 ~
//Web浏览器全称
9 Q/ d* N, c3 }' }window.navigator.appName$ u9 u* ~# S" J2 T0 ?
'Netscape'
* M+ E) R$ W( g% E7 B9 a// Web浏览器厂商和版本的详细字符串
6 {3 `" B) k- F" G5 }. Zwindow.navigator.appVersion
2 z9 `1 e3 A# e& o: i" I) w  r* R$ f'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ k" p4 y4 ?. M0 d// 客户端绝大部分信息
" o# i) N6 Q1 O# K/ X- K! N- Cwindow.navigator.userAgent
3 \! p& R5 h2 i$ e* `1 t& n'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
# K9 f1 N  S1 x* w& n- [5 r& Y% c// 浏览器运行所在的操作系统
; w/ q: r4 \! @" Twindow.navigator.platform
; e: G7 C/ C& ?8 u, g0 D'Win32'
& O1 h0 Y. ~2 @0 X
4 T1 m$ t: }- ^& L$ i//  获取URL- K- X" Q* b' u3 I2 ^) M; _; {$ T- R
window.location.href/ X) u" R' c0 a8 b8 j
// 跳转到指定页面
0 F( k& {7 y. V+ O" G5 xwindow.location.href='https://www.baidu.com'
0 T' y4 V3 r: O// 重新加载页面
7 l/ n6 [" X  D0 x2 T( U1 qwindow.location.reload()
( H- Q% x5 g0 D5 W  c</code></pre>
& f& ^  `3 ]# k9 h' l2 j: Q7 |<h3 id="32-弹出框">3.2 弹出框</h3>* H8 V/ ~" e2 n: T! d
<p>三种消息框:警告框、确认框、提示框。</p>
7 ~" V& ]: d0 J( v& t. U/ ?1 m<h4 id="321-警告框">3.2.1 警告框</h4>) T, v# m6 S1 Y' o5 Z* Z
<pre><code class="language-javascript">alert("Hello")/ `- Z; m. S/ f+ `
</code></pre>' z+ C- m" U% c" p
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>- X/ J' I5 r8 g8 D  _9 N! c+ K
<h4 id="322-确认框">3.2.2 确认框</h4>" ?8 W9 L2 u1 p& G- b. D& e5 h2 m0 m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>* e2 n; v! c" `3 q( K9 D
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true& J5 {- Y5 v- Y7 u
true0 s$ ~$ [; C5 o! l
&gt; confirm("你确定吗?")  // 点取消返回false% R. J- z% S; O5 }3 V6 d8 V
false
# t0 }$ F, C& p% \0 X4 e+ H; G</code></pre>: W  x7 E) i$ E% }5 N3 y6 h
<h4 id="323-提示框">3.2.3 提示框</h4>3 v' F5 |, J& A4 ?
<p><code>prompt("请输入","提示")</code></p># V6 i+ b, Y# G5 [- r2 p" c- o
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>! J8 }* A$ B: q- r/ h6 J% t) t  p3 k
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
* Q, ~% w# Y# ]* w9 q<p>如果直接点<code>取消</code>后端收到<code>null</code></p>0 {* p4 R% N7 j. G. I6 j
<h3 id="33-计时相关">3.3 计时相关</h3>- B" ^) A0 I/ ^+ O( \! ~- s. t
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
" {0 G4 S$ B6 w! n" }<pre><code class="language-javascript">// 等于3秒钟弹窗+ q0 s* {( }1 \( ^
setTimeout(function(){alert("Hello")}, 3000)
. z8 u2 w$ E. \+ c$ s8 k- i/ V- R0 L* i. G& H
var t = setTimeout(function(){alert("Hello")}, 3000)
, F6 z, \7 q; e" g
' \5 \; k8 e. `7 g6 I// 取消setTimeout设置
$ \3 j* @3 {. P$ C5 Z* TclearTimeout(t)
3 M0 S6 ]/ a# ?% P3 l1 |6 g7 ^</code></pre>
; e# q0 t* s6 [<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>$ e9 N# P2 w9 D: p! V" T
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>6 n6 C+ F/ X' K
<pre><code class="language-javascript">每三秒弹出 "hello" :6 K, K3 D6 [; i/ h, R
setInterval(function(){alert("Hello")},3000);5 W$ e) X' d, m0 R) g4 c, `# c/ t3 h- p
</code></pre>  l+ s+ D; ?# R: f
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>7 M* ?; P0 e' b' d
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
: ?; M) T; k9 v//取消:/ B. j; w% H) H
clearInterval(t)
; X' c  p' D3 ~  N+ N: R</code></pre>
: j. u$ [1 ~! g8 v  \; r. f
: y4 @; P0 o6 f1 i) S5 n* t0 A
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-2-28 14:41 , Processed in 0.556455 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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