飞雪团队

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

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26276
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

/ x$ G; P& n, q1 X. P<h1 id="前端之javascript">前端之JavaScript</h1>+ {5 f" ]! ]4 L8 F) e# y7 I
<p></p><p></p>' o- \- U, x" T/ t
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>8 g. {1 O2 p& P3 o5 t" K
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
$ j& c# _4 x% s" D; ?% c0 v它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>. F0 f; ]! ~$ A6 ~7 z
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
$ I- |" ^1 ?# G1 J: Q* E6 T它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
( t  n+ G4 |6 G5 R<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
; a8 z1 P7 _  I) L( p<h3 id="21-注释">2.1 注释</h3>. _: [  z7 C" v% z+ _
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>/ V6 a4 O7 o, G
<pre><code class="language-javascript">// 这是单行注释
/ }6 l  u9 F! c5 {
6 s" F( k) o- Y' q$ O, D# F4 x/*
( E7 V/ R2 W' M- S9 U2 j3 G0 c6 F9 Y这是多行注释的第一行,5 s" q+ F* p% B2 j
这是第二行。
1 W1 Z5 ]' [5 S4 {0 K& Y*/0 Z8 g" h0 K7 J8 ]& \" [( {$ c
</code></pre>4 b2 V% ~% m* ]% r! w4 A. r1 ?" t
<h3 id="22-变量和常量">2.2 变量和常量</h3>
% ~1 Z: `1 s$ I" g0 R$ ~<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>: j2 C. c) c' h
<ul>+ `! G3 O" @+ i1 H9 C
<li>变量必须以字母开头</li>; ~! M) A3 `/ F
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
5 o  c7 P8 Y" D6 e& x9 |# [. C" r<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
; w% v8 q7 [* Z2 A- W" D</ul>" ?/ ?1 Y1 z. r! k
<p><code>var</code>定义的都为全局变量</p>
. l( j, y1 C4 I& [<p><code>let</code>可以声明局部变量</p>
; }; ]/ \+ |9 k" @7 X0 G" ?<p><strong>声明变量:</strong></p>1 T8 [3 \. a9 f& z8 v# L$ o
<pre><code class="language-javascript">// 定义单个变量
# O' s6 k: A* W' x. T3 |% N&gt; var name) F) [( L8 B! ?; T
&gt; name = 'Hans'
3 _) Q7 b* j$ l; t+ H/ y//定义并赋值- {6 S7 }9 f  e* F
&gt; var name = 'Hans': ]) [* M4 q: @6 n
&gt; name* F% i, A9 d. r) i! N: W
'Hans'
2 f# P7 P) @& t) \& v! B/ O
# ?3 X4 w' M+ p: k- \// 定义多个变量6 _) n: i* K! C
&gt; var name = "Hans", age = 182 \4 s' v8 }5 A' d9 ^
&gt; name
0 B/ u9 P0 `+ x9 e- |% F: m'Hans'
3 n: v8 x( x/ a2 c&gt; age6 b/ @% l) o. W  T5 n/ o' b7 n
18  K8 y# U" W5 U) c9 ?5 o) I3 j

, K- n7 p* Q+ v5 d4 P: `) A8 V  d" x+ N//多行使用反引号`` 类型python中的三引号% E* _9 C/ {/ A6 |2 g) a7 u
&gt; var text = `A young idler,) x( e/ G7 n5 `
an old beggar`
) o4 @1 F0 a1 v: ]' x4 p' g&gt; text
/ r: J+ E' {( y5 U) u'A young idler,\nan old beggar'  z6 Z; T; E- G+ K, _, G
</code></pre>
0 P( s! @, b! p5 O4 |% Z& M<p><strong>声明常量:</strong></p>8 p. |4 K$ T0 c: _
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
1 i6 y5 v3 ^0 F  _. M; e. n# A<pre><code class="language-javascript">&gt; const pi = 3.14
( a: Y, z: H) d5 @. B. }* R&gt; pi# R; `+ ]1 C3 S2 A; O
3.14( Y: T8 x* i8 R. c9 l2 l- a
&gt;  pi = 3.01
. C2 E/ r+ U, h0 q5 @; g) a) x# GUncaught TypeError: Assignment to constant variable.; A- E3 W1 V2 w8 M- f2 V9 E- n( X
    at &lt;anonymous&gt;:1:4
+ H& J4 I+ y+ r( a* q( ?. E/ x, s9 R. F& L3 z
</code></pre>3 t% A7 \( f( _& G
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
" c% g! D, m9 [8 X: M; \3 f# u<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
# k3 C$ x% k( d0 N7 [<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>. X- K# }" W  k0 E
<h4 id="231-number类型">2.3.1 Number类型</h4>
. }1 i: F' S0 x( b<pre><code class="language-javascript">&gt; var a = 5
% W. r  D. ~: @7 D1 s0 A! \3 M8 m&gt; typeof a   //查看变量的类型  
8 N& w& ?& m0 p6 t; p! Znumber
( a. w" {: F) v; b! S4 ^% Y
, K$ ~6 t2 U7 P4 Y- W&gt; var b = 1.3
. M* B4 _3 e, e& W&gt; typeof b& D" k0 [) I- e" D4 I9 _5 Z" }
number
8 ]) p; I$ j6 W5 B) ~
! Z* D9 k& D" F& y% p! q" n// 不管整型还是浮点型打开出来的结果都是number类型
, K: u0 W0 f- y, z! B+ ?& s
5 ~. R& D2 R- @/*2 s5 B$ q+ x/ U5 m+ p' v9 r
NaN:Not A Number( S, V6 A7 j5 J: g- O0 o$ J
NaN属于数值类型 表示的意思是 不是一个数字
) ^" i6 t$ F7 A* F$ _, s% j, j8 E* v*/
& w  w7 h. c) B8 j( d( @" S' i) _' F* g5 m6 Q7 \$ ], f
parseInt('2345')  // 转整型
7 K3 [8 }0 R3 t  R, _$ v2345. C7 W# w- O0 e, C3 Y# c
parseInt('2345.5')6 Y3 F. Z+ @( `( q' Y/ a# z
2345! m+ w5 O' y2 y7 x# J8 \6 P9 D5 a# p
parseFloat('2345.5') // 转浮点型0 [% W) f: ?9 \$ a
2345.55 c- z( Z9 L+ w+ C/ {
parseFloat('ABC')
% g/ [( h0 k5 i  ]/ ?NaN
2 D* {; z, O; O: F& CparseInt('abc')0 c! ~- w/ u1 a
NaN
- f) B1 h4 `0 R' `" [  k</code></pre>% L2 I) {; z0 f+ L
<h4 id="232-string类型">2.3.2 String类型</h4>
1 D3 _0 D1 J9 [( P3 z<pre><code class="language-javascript">&gt; var name = 'Hans'
% T0 P1 j# P; n8 W) u9 U. h1 v&gt; typeof name0 G5 r8 E; k+ J0 M+ q: Q6 m
'string'+ k" G- E5 C2 [( P

) D. S" L2 w& |/ [6 Y$ q//常用方法
3 \7 A$ p- ~2 Z, K) S" V& G// 变量值长度; k! {- Q$ u; h- I. o
&gt; name.length
  e# {8 S, ]1 G1 j1 P' Q" B( K1 S# u4# `" }- r/ R# B" D' }/ q/ p2 \
// trim() 移除空白
: a) f/ T, `; |) q&gt; var a = '    ABC    '
) i3 `5 h. A5 T" l" y5 `: a8 r, g&gt; a# b& x. V& e5 }- I; |; W1 P
'    ABC    '9 D- B. B7 z1 w5 a( e, E& {
&gt; a.trim()
4 M7 X# d4 o' L8 }: k8 L2 ['ABC'
  r* |( A& w7 x3 K- v' v4 i//移除左边的空白
5 \) k5 o$ G1 \5 ~% Z+ J1 n&gt; a.trimLeft()6 ?( E9 N" t4 F+ D2 p
'ABC    '2 {; V' B9 _& L: g( L
//移除右边的空白
! G5 c1 f: a, ^: [$ W6 T8 J, |. N0 ^&gt; a.trimRight()9 ]9 p2 B, o/ |
'    ABC'
0 t$ Y: W* y, N* j2 n! ^. k! p' I6 O
8 x! C& s+ o* {( F* Y7 I$ N//返回第n个字符,从0开始
9 W2 B3 f# u! |" F&gt; name6 k" h  Y+ T; N- T% ]" u( X6 c
'Hans'
- X( h# E6 {- ~2 d, L7 P&gt; name.charAt(3)! F# Q! R) P4 d' l
's'# s. O$ x+ l, n! a
&gt; name.charAt()& ]( Z, ]) W! \; k9 ?, r0 m' S
'H'
' L% G# o! N' b( W& ?; h1 m( \&gt; name.charAt(1)
" M9 o; f6 w/ a# L'a'
% D; t! y1 u% L& ]! w3 c. k- E3 m/ D% a5 H" z* B
// 在javascript中推荐使用加号(+)拼接
; A5 ?/ V' [/ ?- `; m  \&gt; name
2 B: p9 o+ g9 h- X, n& F2 P* b0 K% }'Hans'
# S5 Z4 h$ Q' k4 j* p&gt; a
; U3 E; d( ~6 s' d: L8 F1 z'    ABC    '
% ?% T2 K( n0 k4 z" L2 E&gt; name + a
& A: y/ z, T$ Y5 }; A'Hans    ABC    '
3 I6 B0 X# U: Z$ H6 ^// 使用concat拼接
' `4 J1 l' r7 ~( {6 B&gt; name.concat(a)7 T& t9 b* k- ]- Q' t" U- H4 h# ~
'Hans    ABC    '( C1 |/ R& l9 C9 {8 W" a: V( G

1 C# F- v3 b. _4 r" E- u6 u3 ^//indexOf(substring, start)子序列位置3 a! k1 W: P  C8 u5 h! K
* g( `* n4 N  C9 I9 r# Q" @1 J( X
&gt; text, H- ]8 Y$ a/ p5 `' ?( s0 g5 `
'A young idler,\nan old beggar'
% \! x5 t  ^2 K+ v0 u3 B( w&gt; text.indexOf('young',0)7 ]% l* n: W) }, s% {- Q- P1 u
2
5 x5 l+ d; M' ~/ K
: J2 n3 O( t' ?//.substring(from, to)        根据索引获取子序列
4 J' m- `  ?" S! K; [: u; Y8 e. q7 q&gt; text.substring(0,)" F1 s; j" `/ ?6 i- P+ J. D7 t/ d
'A young idler,\nan old beggar'
- C4 T  Q% g  d0 u% C( D  w&gt; text.substring(0,10)
, r  }$ X  |' N2 w. g4 @) z7 }'A young id'9 C9 A" ?" z/ R

1 v6 n, r8 @9 a7 L9 s// .slice(start, end)        切片, 从0开始顾头不顾尾1 d8 W4 J. W/ O4 J* U* D; `
&gt; name.slice(0,3)
) n* l% \9 y8 D/ e4 j8 L; \! }( m; J'Han'
5 C& Z, T. u( A/ L3 s. a  h2 r7 @: E9 a2 S- V6 J/ e( j
// 转小写: N8 N* E5 O* Z) a
&gt; name
4 Q# y4 k) w, D  Q$ t8 m. L'Hans': k: V. w: `+ y
&gt; name.toLowerCase()+ o' F' j1 }- W6 K. L# E
'hans'& n, f% j: f. o% F9 V5 x$ z, U3 y
// 转大写: I$ H# a+ ^; g2 @! ~* A
&gt; name.toUpperCase()# X% z- |" }8 r3 r% @
'HANS') P* j1 J) G* a; M0 r0 `; u

* s" l* h4 O2 p// 分隔
" `' z3 X! d6 D5 g&gt; name
5 Q8 b8 }# w% T, s4 p5 v9 ^) U'Hans'4 G, @- \( ~! P8 b' a! m
&gt; name.split('a')
3 Y. x4 w% M$ {. Q  q- V% t: O(2)&nbsp;['H', 'ns']" m5 P' h) s4 t) Q( b5 N$ u
</code></pre>0 P; G7 E3 m- g2 u& C! R. m8 C
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>3 e( G" |3 Q, u* |/ M9 _- M
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>1 N7 N! \& y" d! h5 ]
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
0 e; j( V& I0 V) L$ f* O7 S# @/ F6 [<p><strong>null和undefined</strong></p>
- g+ P, Q9 X' ]+ o1 Y9 a<ul>
8 e" \" v# c, W4 C" J- v( K) c<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
3 j- N* r9 i$ l5 B<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
  V7 Q0 |0 y0 X2 j0 B. `) U3 Q</ul>
: c4 l0 [# ?  }" q& I2 R<h4 id="234-array数组">2.3.4 Array数组</h4>( K7 A5 Y0 ]7 u6 m$ K- p+ Y" m
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
! T- _. R: g6 y( n4 Y( S+ E, e<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
1 E) O8 W) _6 N5 D( j&gt; array16 \- m1 h7 w% U; h2 |# d/ ~% {4 z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 e- F( r6 t4 W" A&gt; console.log(array1[2])  //console.log打印类似python中的print9 @3 A" ~$ B+ i6 Q. N: |
3
8 m8 ?% t5 G4 I  x. ]* K// length元素个数
8 @& c/ W" i" [7 H( w&gt; array1.length# A- b9 E6 J/ c/ ]) t3 V
6
0 b) U7 O" g6 C! s// 在尾部增加元素,类型append
5 @; v" D! y' a5 @4 v/ Z&gt; array1.push('D')  [0 f5 f5 \: z5 w+ [# P* n  A* g
7
  w$ L% L- y$ K" b&gt; array1
5 l+ x, ~" p$ h7 l# A(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']. M4 Q" C/ O3 |* }3 o: l* t
// 在头部增加元素
2 f( t" |; o& ]* g4 z5 u5 K( ~&gt; array1.unshift(0)
0 M1 v) R* ?) c$ b  E2 [8
- g; K  o. B; o% H6 T" ~; S/ {&gt; array1
' B% ]+ k) k6 I1 t(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
  D$ b0 P# q! l  `  I* K  x2 U7 p
) t, q* E, S( j9 t: ^' y; v) m//取最后一个元素
# ^/ p7 q& \, x% K: g: ]) W&gt; array1.pop()
; _) }" `# _: @% k9 y'D'
; ~) f# G- r/ @( H- l$ O+ i( I&gt; array17 N4 H3 [6 g  b4 C
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
. ?% d5 m' [# d2 L2 E//取头部元素- Z7 m* @6 U/ ~  {6 U! g
&gt; array1.shift()( o* [! f) n7 N& c' C" ^
0
+ J* s6 W9 D7 n( x&gt; array1
8 R& I; T. _0 g  @(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']) e" s& T: F; J/ G  T8 ^0 o

2 V+ Q5 P* W/ B//切片, 从0开始顾头不顾尾( n2 g8 Y& C5 U3 J$ x, v2 j
&gt; array1.slice(3,6)4 j* T7 V) y$ [( o
(3)&nbsp;['a', 'b', 'c']
! b- H5 m, Q  ^# T5 \+ D// 反转- F- S" `# X7 E6 [2 T: w- v
&gt; array1.reverse()
( R1 @3 {; M8 ]$ P8 N! S0 G/ V(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
2 a' ]" l2 Z; C; ~// 将数组元素连接成字符串. X# [8 q: D/ Z; A0 b  }% {
&gt; array1.join() // 什么不都写默认使用逗号分隔
; g, w4 ]( L, g+ S* ]! D2 P, P'c,b,a,3,2,1'* D6 c6 p! m% ]: `$ L* x) j
&gt; array1.join('')
5 k. @0 [5 o$ I' G' K: w$ _7 ^& c'cba321'/ @5 J! ~7 O# X/ G- l
&gt; array1.join('|'), p. N- N- C; j( y( `% g
'c|b|a|3|2|1'2 E; J3 i1 n% ~7 I7 j

+ m( `' u* l# Z! ~8 G  F& N- i( y* e// 连接数组' `+ `7 w# y% u$ l5 ]
&gt; var array2 = ['A','B','C']
# [8 j9 H1 P- X  u1 T9 c, W2 B&gt; array1.concat(array2)
+ v% l5 l, w) D; r0 _(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']+ X7 Z2 R4 q+ }3 _9 t

( a3 m) s2 K2 r) K' s, u0 s% _8 v% U// 排序. N4 f' P$ q& B8 a7 M
&gt; array1.sort()/ o# B: G, j6 S  }' x
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 _* w  O$ h' \, b/ H! g( Y1 }" F7 H0 m, y: q7 C
// 删除元素,并可以向数据组中添加新元素(可选)' }0 q5 r' h3 j$ [
&gt; array1.splice(3,3)  // 删除元素) a, ]' l+ l! Y, Z' u: x; g9 x
(3)&nbsp;['a', 'b', 'c']
2 A& n2 Q4 g( t2 w4 U&gt; array1
4 ^2 |5 l/ P3 U2 v3 I(3)&nbsp;[1, 2, 3]
; V  M0 }+ k, p  u) ]3 p&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
8 }! P7 N! d; \[]! c3 g' g8 f- Z; h2 c, A
&gt; array1& r! C4 }' E$ `: q7 W
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']" Y" \& X+ n! ?, [5 b8 d
/ L7 w* \- ~. `: f
/*7 F0 P1 c1 N; ]5 G
splice(index,howmany,item1,.....,itemX)
9 ]5 L: _& A) `9 p2 _6 @3 c% Aindex:必需,必须是数字。规定从何处添加/删除元素。
  E2 i2 ]$ o$ F0 G( l  \howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。1 p! T( J3 r, f$ H& v- A- a$ y  q
item1, ..., itemX        可选。要添加到数组的新元素/ E, K. M. ?! a: X, G. t
*/. H+ Z& h; [7 ^: d" Z

5 m- ~1 a+ H# E! F// forEach()        将数组的每个元素传递给回调函数
6 t) u( [; A- @# s&gt; array1.forEach(function test(n){console.log(n)})
$ G4 {" @- n$ i, ?- [ 1
, Q% H, d' u6 X* M 2+ B" }8 Q+ A3 \
3  R3 j3 |; l$ y& g! ?5 i& C" U# @
A! L7 R% ~3 W  k$ Z: i9 w2 l) l
B5 r) n& Q* i, t( o, E
C
' U& ~4 ?! Y2 M# t9 ~// 返回一个数组元素调用函数处理后的值的新数组" A! Q4 W: J  f5 e9 W+ Y
&gt; array1.map(function(value){return value +1})9 q: U9 _' u/ o, f  n$ a, S
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']" x" y1 |- A  F+ H) N
</code></pre># m; M& s% g' E# i" J8 o
<h3 id="24-运算符">2.4 运算符</h3>' n# o" V& D& N; ?/ |1 E
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
; v/ }; e0 {5 d( n# r1 z/ M/ M. S<p><code>+ - * / % ++ --</code></p>1 S2 b+ k0 a, }1 E
<pre><code class="language-javascript">&gt; var a = 6
! z& V0 K* R+ [7 l&gt; var b = 3
  @- b4 i. U9 m// 加
5 \! U4 ?- q/ w&gt; a + b
& B- ?1 g1 |7 p4 `! n% q& ?9
- N5 @; E9 m7 u& r0 o1 c// 减
  F: {# I  G, X, G% I) z. T# N7 Q&gt; a - b0 |/ A- |( q5 w4 d0 U! l
3* U& g  A! M6 u+ S4 e
// 乘5 u' J& t: `. k7 y8 b
&gt; a * b
4 s6 H! `3 J# I- T, }! S8 ~/ c18
! Q& L8 x( n( i- O7 s" \// 除
% i# D9 q- |# ^1 Z&gt; a / b4 }% d. x4 E* Y/ g% d
2
, _  H" A' O8 F6 D8 N8 ?// 取模(取余)
  ?! `2 m* ?( O&gt; a % b
! Y5 b% N& r; m6 z1 z4 a$ b% X0
/ F( B, i1 ]6 V// 自增1(先赋值再增1)  [: |7 |' h; R
&gt; a++
% H+ G# A0 S' k/ I6/ N6 n( t% z# Q3 o  L8 b/ Y* h
&gt; a
2 p7 h5 j5 e" X* l7
4 O5 V* X1 ?$ X9 i; Z. p2 u// 自减1(先赋值再减1)
' e! c  x- {! I5 C. y+ J&gt; a--
, r. P5 Q8 E$ O5 }* F+ t8 G7$ p/ _% S$ M+ L# w8 b" d0 p! L! X
&gt; a
9 I% t! _2 z3 @! s  v5 m+ c: K$ a9 B6
. m# z, d7 P% S5 V// 自增1(先增1再赋值)4 ?3 n( G3 g7 c, s
&gt; ++a* g; ]3 x$ v& |6 h  o
7) b( [: I: C  W  ?4 H1 G' V
// 自减1(先减1再赋值)! o6 g9 K( M2 ^" \) n& Y
&gt; --a' @0 g% V0 f% o$ i' x3 e
6, x9 ]' ?9 a4 R. V& N
&gt; a
2 m: X7 z3 l. u1 Q0 h9 C6( b4 A) c6 `% N7 q: \* l) w0 a% O
- q# p/ T# W2 I
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理8 h  ]' z- O& A7 r
</code></pre>% b8 {5 B5 }$ m8 E1 k6 o
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
; l3 k. |" @8 y( s<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% c: Z' K6 w; U) }<pre><code class="language-javascript">// 大于
. j+ R+ I0 X; z0 [&gt; a &gt; b' Y% H2 d  p: \. f/ e# [# n" r
true
* R- L) k% L8 p% ]& x+ ?% c// 大于等于
# E3 R0 b* [6 Z7 G" {) \&gt; a &gt;= b& Z8 a7 J& }' c+ r
true
7 u- l% u9 i: v4 S// 小于3 Y' z6 \: ]! s7 [
&gt; a &lt; b7 J% Z" N3 o3 ^
false/ K9 t. c* |7 I+ L- c  p8 ]" }
// 小于等于( r: B1 l' Z  E; {/ J4 m
&gt; a &lt;= b3 W( y* p# I2 K& p; |" y# J% Z6 v
false
0 V9 d" ?0 U4 p" u1 Q/ `; ~// 弱不等于$ A8 @7 ^$ s- s/ A
&gt; a != b5 a, o7 w* V/ R% c; y
true
: J3 U+ \5 K$ O2 P& ~// 弱等于
$ E5 `: @- U; P/ s5 U, v&gt; 1 == '1'
8 O" H/ j! ?% ]& s( I- otrue
' P/ s1 j' a) L5 k0 F# }- b$ ~1 s; Q// 强等于" S( e1 X5 ]5 }/ g, L3 L5 K- T4 j
&gt; 1 === '1'# ]- l8 s$ {: G; y4 u
false% }' @) j8 o' u$ {* X
// 强不等于+ M! f4 I; ~! ]2 k
&gt; 1 !== '1'& ^% |# K3 ~: M# R
true
; E* T% S9 D+ \% J. [" }* d
2 x4 d( F/ A0 M) d+ A/** j) v" ]( f& K. E( Z& o
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误7 |3 p& z, e- T( o2 b. h/ E
*/
! r  W: ]2 W$ ~5 k+ r1 [4 [</code></pre>8 j% t6 S1 [9 s2 f. B
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
* r  G/ s+ u! }; b$ V<p><code>&amp;&amp; || !</code></p>
, Z& Y8 d8 ^6 j6 I<pre><code class="language-javascript">&amp;&amp; 与$ c4 G, ?! a9 d  |
|| or 7 }/ I; Z. ~  a! ^+ ?" J
! 非( I5 }1 L/ [) N, Z) w) N
</code></pre>
: I  _$ j9 S9 w8 p2 r& d<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
/ G) q5 k! q) A<p><code>= += -= *= /=</code></p>* D  g6 d& F. g7 E
<pre><code class="language-javascript">// 赋值* r5 ?( R( U! g5 X, l
&gt; var x = 3
" b3 Q5 E; t# q- h  [7 T+ S// 加等于
) {) Q) Z1 E% r3 a' J& {# n( H&gt; x += 2
) A( P, B) w4 c5
3 e! p; `& i( `: p' U3 r// 减等于
% `" d2 T& m7 s&gt; x -= 1
2 `  t; {2 }+ V- V" j1 j+ p3 i4$ Q8 V! \* \$ b- i4 L
// 乘等于' Y; t7 T, a2 l. ?( \! g' }% w3 M
&gt; x *= 2; o. K. T$ V) g
8
8 F9 x$ B4 G; K- o% l9 Y; Y// 除等于, \0 Z4 J2 `6 N) m' e
&gt; x /= 29 F+ M) ~8 C& c: n: [
41 q! j1 t% G4 z9 B. p9 j
</code></pre>
4 d: a4 r: T& D& B$ l<h3 id="25-流程控制">2.5 流程控制</h3>
  p( k+ K. R0 R<h4 id="251-if">2.5.1 if</h4>
$ Y, L; u3 d/ K9 n( q7 T<pre><code class="language-javascript">1, if(条件){条件成立执行代码}9 \  C2 u) d% r4 d
6 U! V8 ^. P5 ^+ i8 z
&gt; var x = 3
3 [1 T& \& s" s4 z& Q8 G- P3 r% o8 m&gt; if (x &gt; 2){console.log("OK")}& G; ?- G, }. x$ z: x4 K
OK" y1 E2 X% V# m1 l. _7 n

# \- r+ @/ U, [  A2, if(条件){条件成立执行代码} ) |; S2 h& S. \' r  q$ c( c& g
        else{条件不成立执行代码}
2 C' O1 t0 A( a  W
( m5 o  n2 M3 l1 b: E* b&gt; if (x &gt; 4){console.log("OK")}else{"NO"}+ O1 L0 f% K8 R  r+ o
'NO'0 m4 r& `2 N4 q5 A4 X, O3 G; O0 P
1 S+ P! ^. N/ p* L" }6 y2 Y8 K
3, if(条件1){条件1成立执行代码} ' R+ P- }# T7 A
        else if(条件2){条件2成立执行代码}
6 P$ C* o- K- F8 g0 f! `    else{上面条件都不成立执行代码}
- R% w. N! V: W" w; O
, q7 C& m4 c! |0 N" D8 n&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}- q& c/ r7 }! Q" J0 M
Ha# x' N5 H) e8 y
</code></pre>
, A, Q$ J, O& z  I- f* `* y<h4 id="252-switch">2.5.2 switch</h4>
% o0 p) c6 i- G. H- T6 T5 u<pre><code class="language-javascript">var day = new Date().getDay();
% B9 F1 d( U/ v* zswitch (day) {
3 V7 W! @3 i3 @% ?8 c8 ]: h! w2 R  case 0:
2 M: J1 B# ~) S& l  Z1 H  console.log("Sunday");
5 C2 s, l3 o) Z7 i6 B  break;
+ z$ \0 u& a$ a# I$ _  case 1:+ ]& I: |& L5 \, l8 W; S1 g7 I
  console.log("Monday");4 m! R+ Z7 e4 ]$ t
  break;
1 D1 l8 b8 m  Kdefault:+ z" o  l% ?. O" i- P3 D
  console.log("不在范围")
8 e7 T9 s2 `" e! k}9 L5 B& N8 R, S) {6 A
不在范围8 n7 u% h' G3 K- H' d8 ]- H
</code></pre>
" t& f& I, D) p# X7 Q* L0 h$ l7 A<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
' r3 }' m: L  _8 a7 i% m& r- u<h4 id="253-for">2.5.3 for</h4>' k6 w& {; K' |3 F3 z- v6 e
<pre><code class="language-python">// for 循环
: H0 T. r& K% V3 ]2 \& ?! `        for(起始值;循环条件;每次循环后执行的操作){: a8 o! O0 u. G; g. _
        for循环体代码; Y  P$ l+ f( p5 c' l1 ?; {4 p
    }
: k! J2 o) k) T5 P+ Z, D# m' x7 W7 w. E7 m
for (var i = 0; i&lt;10; i++){) H5 z: h+ E$ [
    console.log(i)
8 J* n, _* y, k: |}  e. u/ E- Q: `- D
        0) s/ S8 e% G. t7 U0 u/ P
        1
1 {3 T' _7 j' [- x        21 b+ F! A9 C1 I" {: q7 |( C) R8 P# I
        3
* B3 J/ {: G+ n, w        40 r4 W1 b( P+ W9 D& Y6 k7 ^
        52 ^# T. s$ F4 S$ N! `# v& `
        6
. r- G( r: X! M: F3 S0 U5 C        7
& _8 @1 ^2 R: Y4 R        8
$ a2 A5 _/ g$ P" ]        9
9 X. ~, q+ q9 ]1 R/ u& I9 i+ L6 t</code></pre>: S" v. g% ]3 Q* G7 C! o
<h4 id="254-while">2.5.4 while</h4>7 V! h3 @5 X. \) r2 R. L' `. b
<pre><code class="language-javascript">// while 循环
2 G  u3 A, l; z$ V9 x        while(循环条件){
  c+ V7 F  F: h        循环体代码2 Q& U. [7 N. `
    }' y3 M6 P3 Q2 B+ r2 ]

6 V/ z5 A% }/ n' _2 S( c/ h&gt; var i = 0
/ I( u" O% M8 S$ z! g! L& T&gt; while(i&lt;10){( c6 e  e7 |* A& e# r. s' H. m
    console.log(i)3 T6 S9 X' p. M9 X. j; k
    i++! ^8 N0 F4 h) ~5 P% `1 {* L
}, G! O6 b% \  i
09 O  W# x8 f8 }, V; ~& C
1
" w" I1 y$ p$ `; ~% y 20 T- q6 A& _. w2 a& y
3! o6 z0 ^9 z6 B- N0 {3 T2 t
4. J+ v2 b8 t2 [" L- E# q9 W
5
2 a) o/ z. u$ B3 w, u9 d' K 69 a' M+ G/ B, u2 A1 l5 u7 Q0 K
7# r- p1 X3 F$ ?$ W
8
) S. P  S/ |/ c7 y& V9 y  I! ^ 9
# Q. e! z. }' `- Y9 m4 w</code></pre>  w  ?0 N) B2 ^% `. f) N- B$ p
<h4 id="255-break和continue">2.5.5 break和continue</h4>: m) |0 ^' i8 D7 m
<pre><code class="language-javascript">// break3 E0 N! Y( V- ]9 T
for (var i = 0; i&lt;10; i++){
3 N& ]& g& Y" O0 |    if (i == 5){break}# s1 L7 n  V8 F$ a) U% A
    console.log(i)2 h; g. l# \! C8 o
}" z- d9 x3 y0 n# a
0* i) u& H$ h9 J; k) G$ f
1! f3 I) J$ ^, T5 I9 }* v) ]4 v
20 F5 E. ]/ g% a( r( \/ X/ ~
3
$ ~+ ?- z$ K- M" D9 ? 4$ x# u4 i# r8 H+ f! D
// continue; ^3 }+ g8 r3 @4 I# J
for (var i = 0; i&lt;10; i++){9 O! L" Y+ ^% _; _
    if (i == 5){continue}9 k/ c, X2 [/ [  g2 T
    console.log(i)5 b" j/ N# s. P8 z! \
}
8 n) d4 b  Q* P, {/ B 0
6 y9 I4 |. P6 t7 [  o+ ^ 1
- j+ U+ |+ y9 p' N( r 2' E# I* J  t! Z! D% T, a! t, T! }
38 V. b; n4 G8 s3 B4 Z& m% |! T
4. u  v* B+ B8 p: G' f1 b+ y9 w
6
3 s7 f) |2 I( t# h 74 k, a2 h' r- K( K: C# s
80 X( {, M- h) g- i  Y
9* M1 i: q$ `) m0 D+ x
, g9 v4 q) B0 I# B9 W9 y8 v
</code></pre>
) r% k- t7 F7 {- T; o<h3 id="26-三元运算">2.6 三元运算</h3>
5 g9 x) B; N9 T- [- {<pre><code class="language-javascript">&gt; a1 y0 [: N" f  n6 S- u
6
9 t- d8 N8 R, x3 w6 p&gt; b
. s( ~+ O! w! e1 a/ x5 _3% I1 v/ |8 y3 m$ `

5 H" i7 H" {* g9 O; b5 e//条件成立c为a的值,不成立c为b的值' _+ v! ~* x) Z4 Y: ^* S
&gt; var c = a &gt; b ? a : b
" U  e: h- X; h! ]2 P7 N&gt; c
& K, w1 R5 V& n) C; P6
$ \; i% ~! E7 f. _. {6 m! S2 i# _& i$ I
& A+ @9 K& ~+ ~// 三元运算可以嵌套
4 P# H7 q5 L* s* I- X: E/ a9 M</code></pre>
( H! b5 O2 b) `<h3 id="27-函数">2.7 函数</h3>1 f* e# D# `. }$ V% V0 s) p
<pre><code class="language-javascript">1. 普通函数2 T2 m" H3 N1 w( a% f  o
&gt; function foo1(){
. P% A6 p6 n5 ~4 N: ^( I    console.log("Hi")
3 c: |, s8 r4 T6 C0 N& {}1 {' |/ s+ {; q; S$ v, w0 q! H! A" ]
$ Y" ~0 x! |/ H0 B* L* F8 e
&gt; foo1()# L# n( G$ j& q
        Hi
2 U- @. P* Z2 [: T2. 带参数函数
* g. a5 o0 C2 ~& @/ G&gt; function foo1(name){2 b7 J* z# f) F8 d4 ]( k
console.log("Hi",name)
2 o$ O8 T: `2 g2 C* B4 H}
8 [3 ~: L# S0 N: I9 u+ n+ j" u. [. u. G- B
&gt; foo1("Hans")5 Q9 K5 t  E. U+ K; Z
Hi Hans$ q0 V, W# x* u4 [  o
+ ?: j( O9 n$ |" b5 S4 Z' j% W- _
&gt; var name = "Hello"! _5 r- E7 }5 F& v# u& _( m
&gt; foo1(name)0 M  J: @" }- u% c5 u' \: O! m
Hi Hello7 Y1 l* q2 C+ Q# q2 e; x; y

" _! |) D! i3 F- I( X3 {3. 带返回值函数; j1 n  h" {4 d0 }6 m, s
&gt; function foo1(a,b){
0 a$ W8 s2 l2 f3 k" v3 X- j        return a + b   
! ^3 D" ]$ a% Z$ E) K}. }- q4 C+ |# t7 H! ]2 i6 r% }8 f: u% K
&gt; foo1(1,2)4 }" g9 ^4 Q$ N; Q) H% _% m' z2 o
3% ]" E: o* l8 H
&gt; var a = foo1(10,20)  //接受函数返回值1 m6 K% z, U2 |# l
&gt; a3 {& o8 i8 y9 N/ p1 Z
30, q! H/ f2 E; f, ?

/ \7 b3 T- G7 ?% S4. 匿名函数
( u1 h! e% q: N. \1 b  ~4 y- O4 ^) j&gt; var sum = function(a, b){( |! |9 _  `  p7 b( l
  return a + b;7 v0 m$ B! }! f& B4 n) ?3 }+ Y
}
& D/ @$ _1 H0 v( x0 C&gt; sum(1,2)3 I/ p; \7 X7 V" x, k2 K
3. T0 u1 ]. Z, D9 }- V

- [" Z" g: K" V' P% L5 w// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
$ e) C% z. L7 C3 i! I&gt; (function(a, b){
9 Q" K+ w, F& _  return a + b
% M2 C6 O$ ]- f) B& \- ~( I})(10, 20)
+ [; }) x# w" K* i& }- C& }2 |3 O! m30
, D# ^! Q" J' [7 |1 N2 M; x* s$ ~9 A/ m( d/ X  P; ?! @3 q! p
5. 闭包函数3 u$ |" A$ h! Y) z7 ^
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数) b# s& F: `% `2 r) x0 W* [5 t- S
var city = "BJ"
/ Z: s3 W  J* rfunction f(){
5 q' ~6 [& ^" b; E7 n& b    var city = "SH"
7 {/ L, M- e  @4 a/ B- G3 x1 h: o    function inner(){9 M& w9 S7 A( m/ E, S& m" ?
        console.log(city)
: q" e) C5 I* J) G8 Q    }& Y. I( w  ?( O+ r* L& Q: I
    return inner
0 n5 V1 y' ]( {. X, b: c' C& r5 Q+ w}5 w# r; W/ h1 W1 v! J$ m
var ret = f()
5 d( y9 @0 L7 C9 O1 iret()
$ N. Q! Q$ h6 ?/ x执行结果:
3 S0 B+ f# g& A7 gSH
! `9 k' l( q& v9 F4 d% r
/ f" O) c$ f/ R- f  b6 j1 }</code></pre>
* k! n, u2 A6 a+ C! ?/ s" M<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% l" J% Q$ {* V<pre><code class="language-javascript">var f = v =&gt; v;# p/ O) K5 U4 D, a% t4 G" U8 _& P* c
// 等同于$ O! K3 v1 z1 m) N" o
var f = function(v){+ r3 `, {5 b3 q8 b* E" T
  return v;
& ?7 [: q: u' j5 p/ I& F/ w}
3 q7 F; ~* Z1 b" F. n, P</code></pre># c! r# d1 a6 u+ j0 y; g
<p><code>arguments</code>参数 可以获取传入的所有数据</p>" u# J7 S2 j, b$ v9 s
<pre><code class="language-javascript">function foo1(a,b){' Q9 m( Q* ]! w% X
    console.log(arguments.length)  //参数的个数
0 p( T5 i9 X: N+ c7 w    console.log(arguments[0]) // 第一个参数的值* I7 S' ~7 y: L! c% ]
        return a + b   : H7 t8 h6 q% @/ U
}
8 P. _2 P; N0 l1 F' }foo1(10,20)
% k6 V" w* _. C; U% U4 _) ^* O: z结果:
! [' X, e* k& s# I 2          //参数的个数 , W  i. C3 L) U* j7 t% g1 o
10        // 第一个参数的值: k6 N) i; o  {4 y/ B6 k6 L9 ]
30        // 返回相加的结果  W/ h' a; k" a$ z5 w
</code></pre>
3 g( Y. T! F$ F<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( Z9 \; p( @. V4 `( p<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>% Z/ `6 ~0 d3 Q
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>2 Q+ ?$ c/ S' ]4 g- ~7 _- d
<h4 id="281-date对象">2.8.1 Date对象</h4>
" J5 p4 P4 ~6 C6 G0 R<pre><code class="language-javascript">&gt; var data_test = new Date()" Q3 Q- `+ N& B! W3 F" W6 L
&gt; data_test
8 e8 S4 j8 Z% G  I6 h3 E3 A& ~& s3 m& _Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)2 @7 {3 r8 `  N
&gt; data_test.toLocaleString()* N( ]) E) U1 Z: |
'2022/2/11 下午9:44:43'* Q) B1 f! t5 i- q" e% o

( i4 G3 o" D5 C+ h6 v2 p# ~0 s&gt; data_test.toLocaleDateString()
* E; f  [5 H9 x$ x1 i. S'2022/2/11'1 W1 K2 C% t8 K* c3 Z- ]! @

# T' F5 y  V: O% ~' A3 r+ |&gt; var data_test2  = new Date("2022/2/11 9:44:43")4 V) I! l3 E0 R
&gt; data_test2.toLocaleString()
) P5 ^6 g& L# @9 L8 o  f'2022/2/11 上午9:44:43'
$ G) w; _. |! I3 E2 I. n# I3 T6 [6 p1 o6 a6 X! f
// 获取当前几号
; O0 W) ]3 t9 `4 q& m&gt; data_test.getDate()" z) ^. X% _1 z  {
11
" V8 z' R2 _/ z" H5 {2 N, S// 获取星期几,数字表示
7 D% X' s7 T1 b  |&gt; data_test.getDay()  0 K$ t7 ^" }& b2 {; T
5
5 r$ X( L; W5 E$ b% A// 获取月份(0-11)3 @/ y# |1 x1 P( K% G4 T
&gt; data_test.getMonth()9 K9 Q: b" H3 z- C: b
1
3 }5 Q1 y* h8 u' w# b// 获取完整年份
' Z5 H$ i% o3 _' [' k&gt; data_test.getFullYear()
! R0 O9 ^7 H' K' g2022
* X8 W* S- @2 w  p# {  b// 获取时, p0 V; O, \' B- m
&gt; data_test.getHours()" g' U! O4 I8 q  S, v; K; w
21
3 u2 G6 G% f- e4 |! x4 B// 获取分
0 I: n5 j/ @* r% k; F3 M&gt; data_test.getMinutes()
' I" r1 K2 m2 I& [6 g440 v/ i5 Q9 s4 m6 s$ A
// 获取秒" j- I) h- T5 Y, q
&gt; data_test.getSeconds()
* \$ r8 i* l7 [43
8 b3 l: a" g% w) w! W// 获取毫秒  ~, }* a! P5 `8 I4 A" l/ M; o/ |
&gt; data_test.getMilliseconds()8 {! `1 v4 l$ v. N& ]. |. z
290* Z$ m; i6 N8 I/ W; d# A
// 获取时间戳
- h* L3 S( X' ]/ ]& H$ `3 k&gt; data_test.getTime()
( y7 x: h4 f& [" O& ?, i  B2 C1644587083290. O- _4 Y* f  \' W
</code></pre>
, C" h9 ]+ Z, ~. G<h4 id="282-json对象">2.8.2 Json对象</h4>1 [: o" j) {* c$ p# o3 z
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串, \9 i: X7 p& }' m8 W: G3 _
JSON.parse()  // 反序列化,把JSON字符串转换成对象
/ v# O6 t2 y. K. V6 l  O
" R% J0 x; ~+ `" P, T! T+ Y& S// 序列化& Q; B0 a* `) S; v; ?# `
&gt; var jstojson = JSON.stringify(person) . I5 s9 o1 @# y* x) a# K5 p
&gt; jstojson  
' E3 K. k& r6 J" o8 d  q% W'{"Name":"Hans","Age":18}'
, [$ c% p9 W: \2 M+ V7 Z8 u" G# ?* V, j. T) d' r8 N; s
// 反序列化% v6 a" w* Q) G; c, J  ]& o
&gt; var x = JSON.parse(jstojson)5 U' \% K% {1 `8 [+ G
&gt; x5 n6 [7 }' R4 S( Q! n. n
{Name: 'Hans', Age: 18}
1 X: i/ r3 P1 V& x  v5 T2 X4 G&gt; x.Age
& ~- {. e, m7 W; H, _7 ?+ p181 h( @  w' C0 O, P' F/ @
</code></pre>" ?; v: n2 Z# |
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>5 j0 V; I  J6 u) D: m
<p>正则</p>* r" @% k) A9 M* Z( Z; S
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
* U6 n" G3 d' j' `/ U5 c&gt; reg1) O3 T9 C" J8 _8 a
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- u7 x0 l: `1 \9 D! z1 j&gt; reg1.test("Hans666")
& K+ x: G9 B3 Vtrue. O9 ?- `! u9 `" F' }( E6 w6 X5 x
  J# ^  u. {% K" I- r% [2 Y
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
7 s; m5 I. ~( g$ c&gt; reg2
1 ?" \9 z4 F( b' k) k) M& V/^[a-zA-Z][a-zA-Z0-9]{4,7}/# ]5 ?4 q. M, C0 N
&gt; reg2.test('Hasdfa')
1 i: v' }1 N  I6 u/ e: R/ Btrue' E# }$ v3 G5 O- g! ]. x- O
0 P& l4 |% H; F& E% p' }0 B2 Q
全局匹配:* M0 L9 E4 e, X7 p8 _
&gt; name
' K9 z; K- O& q; Q4 f& {'Hello'
# v6 A, X# u6 b. ]& V* ~&gt; name.match(/l/)/ A. c: w( ~" W. A
['l', index: 2, input: 'Hello', groups: undefined]6 X5 t0 q$ `1 x4 o& d! c( k. q
$ G( ]2 F+ x& [* E+ _
&gt; name.match(/l/g). p$ \' N: i4 O
(2)&nbsp;['l', 'l']% p) V' X* D, v4 R1 G8 k9 ]
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配, j$ s  [4 [& N/ I( f) X& j  ]( v

. F$ ]: _& e' S0 {4 m- u全局匹配注意事项:! t# t1 g6 E1 Y+ x4 [7 Q  t- N+ T( T
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% j5 a7 ?8 p  l* U% j
&gt; reg2.test('Hasdfa'), T' z: _/ P8 J4 k( d' L
true
3 k( ?8 D: h; j&gt;reg2.lastIndex;# H: G' K% a/ v7 _: R% Y
6
! n! Q2 @( d2 Q: K0 Y&gt; reg2.test('Hasdfa')
! Y3 @' [7 \2 K4 c1 cfalse
' ]5 f# B: h1 W4 Q+ V) C&gt; reg2.lastIndex;# c7 K' {2 V1 t8 {# U, a4 d
0
& h( g& n3 {0 y# z# x- i&gt; reg2.test('Hasdfa'); [% g: w  f5 n) T: g& W: n
true
4 H2 M' C9 z% S7 M&gt; reg2.lastIndex;
8 J# n+ q# a5 R2 p5 @4 }7 ?62 P2 V  D  |* Q3 X7 M# P
&gt; reg2.test('Hasdfa')+ M# W! ]; m: L) t# M) m. `  w! G
false2 Y: U: p( ]5 P
&gt; reg2.lastIndex;
* I6 X- K& n. h: G0* W5 x' |8 D' M$ |* E& Q+ B
// 全局匹配会有一个lastindex属性) M3 {6 w  E( V- P/ `* {; q8 i
&gt; reg2.test()- Z* A" E1 B; k2 U4 W
false
, m7 D( L% t/ A&gt; reg2.test()
7 E  ?# \+ d  L3 Btrue
6 s- k) n  s3 S# ~+ k+ n3 B// 校验时不传参数默认传的是undefined& ?( F; i. B+ I8 B$ t1 y4 j9 n. p
</code></pre>4 i! p# o' b5 a) S& ^# m
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
  q4 G1 V6 H9 d; w- Z# L, M. [<p>就相当于是<code>python</code>中的字典</p>5 y9 N' n7 l: B/ h, h: P9 Q
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
4 v* a; y" n0 }! h&gt; person( I) K1 m) y: Z
{Name: 'Hans', Age: 18}) [$ c5 r* R, M7 j1 I7 \
&gt; person.Name
: K9 U  u) f: q0 x- a9 L& P: O'Hans'& L1 F" t7 F2 h7 r- B( U9 Z' X- O8 C
&gt; person["Name"]
2 }3 j  c7 c8 X& j( G, v0 U'Hans'
, u8 e0 c+ d2 V' n6 [" [! C4 e- K9 n# m+ q& v  i) a
// 也可以使用new Object创建
* e" f$ R. W/ k( g- D&gt; var person2 = new Object()
9 i: j2 L  `$ l% Q0 y$ K&gt; person2.name = "Hello"" {# [( L. z! g7 H: a$ J0 `  o
'Hello'
6 V" f$ g: ~: a2 S. Z&gt; person2.age = 20
( p, U2 z+ ^8 j8 P% P. \/ ^/ W" q20
8 x$ _+ z" B  K" `& f</code></pre>) n9 h% M% |5 R
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>2 J( S2 M0 J0 ]4 l* h- ]+ t0 y
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>- J( C0 O8 C# l( S4 T
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
3 S7 r5 U. Z. n' H% p<h3 id="31-window-对象">3.1 window 对象</h3>8 M3 y6 G8 e% s1 j4 V
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
- N5 h* M& R/ c9 ^' k) s<pre><code class="language-python">//览器窗口的内部高度& h2 N: g( y9 i4 M4 F+ M+ `
window.innerHeight
! m" E) c/ ^% v( b7 s# h1 \706
4 v+ A& _" `( u6 M4 u, |//浏览器窗口的内部宽度" F6 _  k) T' b& O+ d% F
window.innerWidth+ d" U7 k3 {9 }0 R6 u
15229 b, Z/ h1 `+ G; i2 E' a) J
// 打开新窗口6 ]2 H0 n/ \5 `& y
window.open('https://www.baidu.com')
9 M" q) l! e: ^! e% XWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
  R$ u0 j% a' z% i* g! p- n6 a// 关闭当前窗口
" _( ?4 X* |& |, I, b. \: ]  ^window.close() 0 A% h! t" g$ a
//  后退一页6 E' x2 U' p, W/ Q0 J
window.history.back()
: y4 n& g* q; i; u// 前进一页
1 S+ ^, }$ [# N2 y3 S& o6 Z. W; Pwindow.history.forward()
& c: G( f; y, |  Z//Web浏览器全称; q  `0 w  z; x# [) k$ I. D
window.navigator.appName
. P1 N5 T' p# g; `: o+ w'Netscape'
5 q* s* O7 j' m4 P8 h  d// Web浏览器厂商和版本的详细字符串
+ ?' R* u6 y) @0 R. t2 T, s! kwindow.navigator.appVersion
0 o  }7 N7 S* {, ^'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ C* D( h! j0 @! K' B4 p/ K// 客户端绝大部分信息
% w' @" G- G* Vwindow.navigator.userAgent
4 {+ |+ g; p0 J" _' f6 \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& ]# D% t2 @, w" c# b9 X% U4 s
// 浏览器运行所在的操作系统
/ _0 n7 u: @# u1 {) x2 ~4 pwindow.navigator.platform8 R6 b2 ^1 L* L4 H7 i6 T( z" e
'Win32'2 U  _8 [0 R5 ^) [: ]) h% ~% A

1 {/ U, @0 w0 X3 A# }8 D1 i//  获取URL9 X, s2 v$ w! D# G  m  e1 Y
window.location.href
" U* f/ U8 C, w9 y// 跳转到指定页面
. a( I7 {1 z) f6 R' K- \window.location.href='https://www.baidu.com'
6 J8 T* J, E' {1 l1 [4 l// 重新加载页面
' F3 z8 I) \& d, d( w* P$ h$ Nwindow.location.reload() ' q8 J; x$ [1 J1 C
</code></pre>) B0 g. Q0 g% Q* m. I
<h3 id="32-弹出框">3.2 弹出框</h3>+ Y% p3 }3 J: g
<p>三种消息框:警告框、确认框、提示框。</p>
" F. F5 A- y( v) n7 J<h4 id="321-警告框">3.2.1 警告框</h4># r& ]. X. i8 ?# u2 R' X' o$ N1 u
<pre><code class="language-javascript">alert("Hello")
2 X5 S0 D9 @6 l* \9 e9 F9 o+ X</code></pre>
- G3 U) K. ^  _7 n3 ^8 K* @<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>' R% [8 ?' \0 K" o, c
<h4 id="322-确认框">3.2.2 确认框</h4>
; M* ?9 Z1 c$ }1 f9 f( k8 y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
* p  n$ }2 }, l$ G  k5 G<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
8 i0 D, A0 ~( @6 K& z- m! [5 Strue
! ^9 A. F+ `" U&gt; confirm("你确定吗?")  // 点取消返回false
+ S0 k9 `5 U3 |" E( [false/ ~; e& H7 P3 N% c, \; i  d
</code></pre>* b  Z' f& T5 y0 Q" f( N1 ~- S
<h4 id="323-提示框">3.2.3 提示框</h4>
4 _3 Q) T' D8 O) \2 H" \<p><code>prompt("请输入","提示")</code></p>
/ M6 ]8 t" o/ g6 z" k<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>" j9 C" p& Q0 G
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
# W( F8 }& m8 I<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
( |+ T  ]: s9 S6 E! T2 Z' i<h3 id="33-计时相关">3.3 计时相关</h3>
6 G" I  G$ \9 q" m. U5 T<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
/ S2 W* O& I( J; V2 J+ G0 n<pre><code class="language-javascript">// 等于3秒钟弹窗! d- Q, a( A' [6 d$ |
setTimeout(function(){alert("Hello")}, 3000)
: h1 q& i$ e- s  j' Y9 Z
8 |" M. Y. G- Z, {  N! ]' {# v4 P) Yvar t = setTimeout(function(){alert("Hello")}, 3000)2 V0 Y6 N6 ?! a7 A9 v5 A1 {
) v7 a9 Q& z- K; [& d# s# I9 F  p
// 取消setTimeout设置
% H5 h* ]# D, P, k* X- X. x2 oclearTimeout(t)
( E7 K+ {! K. [& }& ]% D( v</code></pre>
( N3 A( |  w( H- @" b( A<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>0 U) w6 [! Y3 f4 I# z6 u
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>/ \- }/ Q) u/ S8 l8 F% `+ [" ?5 v
<pre><code class="language-javascript">每三秒弹出 "hello" :- v! n5 y6 @$ g& l9 K* J: c9 b, c7 d
setInterval(function(){alert("Hello")},3000);
& \/ ]# c3 Y7 X9 G3 X8 w</code></pre>
3 Y5 `5 x: _# b3 I0 ~* I9 [<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 ~3 R& ?, N$ c5 X0 T<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);6 R1 N4 c$ ^* y
//取消:
7 A- h# Y4 c1 B* J# L# B  EclearInterval(t)
6 N& d4 {; \+ w4 G) A0 F</code></pre>5 z& J- C+ ^1 T3 L
9 A0 ~- y. H6 D# {) P& [/ n- b* d+ H. i; s
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-27 00:00 , Processed in 0.078601 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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