飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

8 n, z+ h5 w- \* A<h1 id="前端之javascript">前端之JavaScript</h1>
( V6 T* i& Q3 L" o$ K<p></p><p></p>
7 }7 J+ \: y  x2 _, ^1 {/ h<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>$ {4 l* f4 j) H
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
! K5 d0 P$ o& }它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>& ^1 a( K; Y3 r5 \/ Y
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 i- C7 i. _. v
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>7 G9 G* m  T; n! ~+ C+ |% j
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>  z0 Z5 s9 F- p6 M) G- C
<h3 id="21-注释">2.1 注释</h3>
$ ^9 N9 U! I* Z) O<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>1 y+ u/ W& O% I: J9 w
<pre><code class="language-javascript">// 这是单行注释
& `+ z) @: i0 ~! t' h; o3 x. [
8 y" P7 N+ ^% [% \/ }/*
+ B; |0 i! T0 i3 R+ ?3 O) z这是多行注释的第一行,
0 H  i0 B& ~- F' w3 u' B+ G1 R' k这是第二行。9 m! I* m) U- m  x; X
*/
4 h$ Z0 E/ u- g- d. I6 |1 p' D</code></pre>
+ F9 {& u: U( v$ g6 V$ h, i8 Q; J# Y<h3 id="22-变量和常量">2.2 变量和常量</h3>/ R6 T0 [1 ?& Q- D2 e4 G
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>3 |5 @4 {; J/ j* U& [
<ul>
8 w8 T6 E, Q/ ?( U4 E1 u8 O<li>变量必须以字母开头</li>. L: r; [& e/ c% g7 r+ R+ M
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>  [' Q1 E0 L1 I5 _! ^1 t5 L
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>: p6 O- `# ~- A1 S
</ul>' p7 a/ N0 s. T; t1 |0 M
<p><code>var</code>定义的都为全局变量</p># k# K3 R3 P) [2 `6 }$ {! u
<p><code>let</code>可以声明局部变量</p>5 X% w% F6 G7 T$ O! m$ Y" P
<p><strong>声明变量:</strong></p>
" x9 \% c& j* p6 u& u9 ~<pre><code class="language-javascript">// 定义单个变量' Y2 o" ~( P, B) U- u. o( V
&gt; var name* G% p3 n  `, R3 `4 a7 b
&gt; name = 'Hans'
  b$ v& C0 W! u! ^" k//定义并赋值2 i8 ]+ d  P9 c4 C. E
&gt; var name = 'Hans'0 r' F& x: v, ]0 Z6 t
&gt; name  I) X  h- k# ?8 _; ^7 O1 S; v6 e( V' V8 o
'Hans'
6 w0 T( W$ \" S% x) i0 h, ?, F8 Q) K) j" e
// 定义多个变量
8 N4 {# W; r% k2 _/ \6 l&gt; var name = "Hans", age = 18: o/ K* v  |% O
&gt; name
! @( t' k3 L/ y/ o0 G9 X'Hans'
. l8 l3 q/ L% G&gt; age4 q: C$ T9 I! M0 v
18
: M; R* I  u  O0 t+ M
" D( b1 N- R2 }$ }8 |//多行使用反引号`` 类型python中的三引号0 v& h6 j) R+ K0 `) }2 ^
&gt; var text = `A young idler,
7 [: W! D- E1 f/ k; R+ oan old beggar`
% X% k% A8 S! N- u3 W0 q8 ?- R* X&gt; text. E* ^7 v' j5 X, S1 d: l) F0 N
'A young idler,\nan old beggar'
" ~/ }! M+ q/ B</code></pre>. C; z! G. _* x- g3 @$ O
<p><strong>声明常量:</strong></p>* j: y  c& q- b! j3 \
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>* z- o& z; T1 j( G
<pre><code class="language-javascript">&gt; const pi = 3.14
. h5 G( z6 F& P( {& e  t&gt; pi+ Q, P4 Q" B+ u$ Z$ t% C/ g( t
3.14
. E/ [* k; j+ X6 ]# Z&gt;  pi = 3.01
' j( Y: B' z: s' y/ k: }Uncaught TypeError: Assignment to constant variable.! u; \5 l5 ?0 I
    at &lt;anonymous&gt;:1:4$ v) {" l6 P1 F. H+ ?& g. o

$ j! K% N( x; m, f& j  K3 J</code></pre>- A& H& b7 G0 ~0 w. L" Z
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
$ s0 i. K$ T  r( G% K<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>; l1 L; z' D$ Z7 O
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>* }. `8 h+ q5 ^; U+ S7 }8 s
<h4 id="231-number类型">2.3.1 Number类型</h4>) n, `) I+ ?9 t/ }8 S& u* b0 U
<pre><code class="language-javascript">&gt; var a = 5
* y) F5 F* x* G& H&gt; typeof a   //查看变量的类型  $ J: \9 r4 S/ \. X# A5 q
number
; C* a  x3 R* ?' |- d+ h+ B' r
7 O- i0 A6 L/ K; ^/ p&gt; var b = 1.3. ]$ X: ?. i' U( C0 F- w
&gt; typeof b
' [( s  ?' p& j* |8 znumber
2 Y% _1 v& K/ A* W7 E6 N
7 U. C% p% w8 P4 b& T  _// 不管整型还是浮点型打开出来的结果都是number类型
: y1 {% [3 I+ `/ B7 U& t
- e: \  n8 r0 A4 Q% K( k' y8 ~/ u. q/*
4 n7 _' Q$ C* Z# j9 E; mNaN:Not A Number
$ h, N: T2 `4 Z8 C- sNaN属于数值类型 表示的意思是 不是一个数字. v4 M7 g1 M, X, f, @
*/& k/ _+ W: i& Y: ~' S

2 ], H! F( h' d: uparseInt('2345')  // 转整型
7 d/ C; _- q. ?* J8 b2345$ _6 d0 W' B0 C" P$ J
parseInt('2345.5')& @' T6 |( A  @" x( X
2345
# r& y  ?2 X  S" O$ ^$ rparseFloat('2345.5') // 转浮点型
9 t! m& C% t1 `8 G2345.5" i, \) a' H0 ?8 b+ @0 o  Q
parseFloat('ABC')4 X) H! r( {! b' `- ?& p$ F
NaN1 a! e' Y" r1 I1 H+ k; M" J# N5 L
parseInt('abc')( o1 {% s, {5 @( s) X. N
NaN
$ V9 f9 X  @( ?8 g</code></pre>
7 f1 f* z8 ]6 x: c7 ^% c1 \# `3 G<h4 id="232-string类型">2.3.2 String类型</h4>4 Z; n% G  w( q- ~, Z2 P
<pre><code class="language-javascript">&gt; var name = 'Hans'
) ~; n3 I9 {1 q$ y&gt; typeof name: F6 E5 d$ r4 {! R
'string'! x% Q: k" [; z2 h8 M5 S

% d5 g, C% M1 Y. W//常用方法
6 f; P+ H- w6 m' ^4 D// 变量值长度
. i  f0 D+ p4 p' \! Z&gt; name.length# U% Q* S% j# A  c) H
41 }6 H6 U" {/ @# ^3 h1 k3 }
// trim() 移除空白
3 Y/ f$ n# T" A) V/ P" ~( @, S&gt; var a = '    ABC    '
! ^0 A( T& I* o" O) C* Y&gt; a$ r' `/ C2 V+ ~+ Y
'    ABC    '( M: q$ K% O, z
&gt; a.trim()4 h+ q( {: ]! k: x0 }3 L% n2 I
'ABC'
4 A( ?" _" F+ ^# ^2 c: W% @//移除左边的空白
! y2 R/ M3 N8 |&gt; a.trimLeft()
- P0 B& B7 ?: G% x'ABC    '' W: C$ z/ m2 u( n
//移除右边的空白. ^# q- M' I7 v
&gt; a.trimRight()
+ O$ `" A! m* @. I( v. \'    ABC'7 B) z8 u$ g, w$ n

$ A/ u- Q3 B$ J) r6 p6 N//返回第n个字符,从0开始8 `- Q  ]' q# n: a% H
&gt; name
& P$ J/ F  ~" i; ^0 S& H'Hans'! z: Y6 U0 I+ T4 c
&gt; name.charAt(3)
- `$ n, S4 k% Y2 D4 n- M, i# n's'
) ^0 w" T3 \' }% h# p% _&gt; name.charAt()
) v# O: o4 s; w& P0 s% }'H'
5 z$ }3 D1 P/ H8 B: l7 d&gt; name.charAt(1)5 M: F/ @5 I% O# b* Q; ?
'a'
1 ~, U0 T5 W4 a1 b/ p  u; P/ N1 Q1 f0 b
// 在javascript中推荐使用加号(+)拼接" }! l7 h- A5 H) f- `- A) I: O
&gt; name( r3 s" q1 N( {' E/ U4 S0 f
'Hans'4 f+ _) R' V% ]3 R* m
&gt; a
/ p+ w+ T7 G4 J/ o/ t+ I'    ABC    '
. v$ C$ r4 C) [&gt; name + a- v( ~6 o0 x0 V: M" Y
'Hans    ABC    '+ D4 }  b2 m8 i" F1 s( @" K2 d
// 使用concat拼接5 z7 P# e5 C: V; Y9 F
&gt; name.concat(a)
4 F  _0 a) X& r) \'Hans    ABC    '0 d) }9 S( T  r; `  L
$ p% B( V8 p3 ?
//indexOf(substring, start)子序列位置
* n5 Y& g, K2 ^  L; o$ Z
! J! m3 _: [: u7 ^&gt; text
* I! t# H" z, \& H: ]* N'A young idler,\nan old beggar'! S1 D2 j2 N5 ~( i" V
&gt; text.indexOf('young',0)
- O6 j. w: x! Y# ^$ I  T9 }; W3 u* i29 L1 N( v( g, e7 O( S( F
# k+ G1 [2 L, e! B: K
//.substring(from, to)        根据索引获取子序列
- E6 l$ ~) V7 X' V( r! Z&gt; text.substring(0,), h1 D& `, Y; S+ x. {3 [
'A young idler,\nan old beggar'
, H. H; i; S! R& h&gt; text.substring(0,10)$ p! t! ^% |" [8 d1 s) N2 V1 e/ ]
'A young id'
1 _  }- L9 y- _* n7 n; C% e$ O! [# L* k  w
// .slice(start, end)        切片, 从0开始顾头不顾尾7 ^5 t7 N0 m( U, I" ?4 r$ ]
&gt; name.slice(0,3)
8 d2 z: w$ L8 L6 v+ G'Han') U2 L3 f" j. z  |: c! Y

, R; M# p2 V+ Y1 v// 转小写' P: B2 a! y1 b7 D
&gt; name
1 ?. M2 h' c3 t$ Q2 y0 |'Hans'* j6 s; n- i: `" `! B  w# ]
&gt; name.toLowerCase()
- X+ b) Q& d# D" l6 ~, x8 D/ W5 {  a'hans'7 m" l7 E! W+ _: e3 P% M
// 转大写  @3 |) d1 {$ \" |6 P
&gt; name.toUpperCase()5 w: W8 _" y0 I: h0 f7 j) T, R* Q
'HANS', P7 F! q; M( j/ S
4 g5 @/ ^9 \" Q, {0 y0 {) w
// 分隔4 b& k- w# h  [3 Q' _
&gt; name* Z& w+ R  p1 U5 ]6 ]
'Hans'8 }' s/ V! T9 k
&gt; name.split('a')( O9 d- |2 l8 N, S$ T
(2)&nbsp;['H', 'ns']  L/ D5 F0 W% E# r0 ]# D! t
</code></pre>
8 p% X  a$ o1 ?& h) K<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
9 ]  J7 w4 k" |2 s8 k5 I/ B0 k& ?<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>: m/ Q0 b7 D$ B: `
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
# v. D6 \1 Y( M+ D! H  W8 j<p><strong>null和undefined</strong></p>
. e, ]# @. S* j. q  J8 C7 d$ r" V<ul>2 i" J" j3 ]  D( \: z+ ^, \3 J7 n
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>! j1 y( u+ k# T2 ^4 L  |
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
; |' p; w, T8 `) Z4 @/ W; K</ul>% f) e8 B* v7 t& M: i
<h4 id="234-array数组">2.3.4 Array数组</h4>
* l/ \! y2 U+ ^) I) h0 D( T<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>. f8 H" y8 a6 \: Q7 l/ ^5 ]2 I
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
' f8 o9 W1 s" w5 {) a# S&gt; array1
& W1 w; Y7 k/ L( z0 [6 S(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ q% |8 {+ `& l: |/ Y3 U0 L&gt; console.log(array1[2])  //console.log打印类似python中的print
2 W4 A  C! B3 @* Y- q% w) m3
& z1 Z& Y) C# S+ E5 Z// length元素个数
* A) C$ G( q2 J. L" L1 a2 t* {&gt; array1.length8 p! {* U8 ^1 }6 \
6
) _: K& [* Y# z+ u- X: ?2 i* |// 在尾部增加元素,类型append
* r% Q2 p/ H7 E  D8 R/ r&gt; array1.push('D')
' q# H3 C$ g" j" E& a8 `2 K7& V0 k1 |4 U  U  p  g
&gt; array1( `/ c) N" j+ t* D! G% ~
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 k5 z* ^- X% I// 在头部增加元素% ?& U7 C4 H4 j2 W9 I
&gt; array1.unshift(0)* j# Q# \; [( v; i
87 f: e" ^# ~$ Y# }" A7 Y* {
&gt; array1
' x; t- I' c- C4 b  `0 u(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']) Y$ R" I9 n8 E  O7 _# l/ B

4 u6 t  ?* }+ f% q: O# U//取最后一个元素
/ [( G1 S5 Q; ^  A' E; ~&gt; array1.pop()1 W, q" l  T5 I0 r
'D'
) x6 B+ t: L" d* P3 p&gt; array15 A3 ^- V: A$ q$ s' u, Z8 Q1 D/ ^5 y
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
/ w6 z$ Q$ }  V& t$ W: x//取头部元素
$ T- l" n! d8 V! a6 ]- R, T8 P&gt; array1.shift()  x. F$ g; e" E4 e# f% T* N
0  `+ H  C$ w4 s4 [6 l8 \
&gt; array11 y, W. w" y5 f' v; }3 {! H' q* H
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* b: V8 u9 `& r# S8 y! _7 }8 ]( p( J6 K: A3 @
//切片, 从0开始顾头不顾尾: b* Q* j  R$ J
&gt; array1.slice(3,6)
/ [+ ~  [8 x. h( E3 ^2 G+ L' d, h(3)&nbsp;['a', 'b', 'c']
2 T3 c. H7 L6 M3 W. y, f// 反转
' m' S7 t% F: o&gt; array1.reverse()' P1 `7 M) L' u5 |/ ^4 P
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
4 e6 N1 _( X3 Y: D* |3 T& E2 d+ b// 将数组元素连接成字符串
$ |9 \8 o0 z) W5 f1 H&gt; array1.join() // 什么不都写默认使用逗号分隔& g0 C6 c5 U! v% Z6 `+ ^
'c,b,a,3,2,1'
" N$ F( b1 }1 p3 t2 d- c& U&gt; array1.join('')
* t. o; S' @6 o: P/ D. _'cba321'
. X9 O0 m+ i8 E, `1 s8 d5 [6 i' ~&gt; array1.join('|')
5 z3 X0 c+ Q) c: Y$ L3 A'c|b|a|3|2|1') u( h% W" ]- `( q* v
6 K. T! {4 y4 H& m; s+ S: t
// 连接数组
' z1 l' q; s% i1 e$ n, F&gt; var array2 = ['A','B','C']
. G4 B( w) V) j' b" q&gt; array1.concat(array2)  z+ L  O" D* |8 [
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']! D1 P) X2 x9 G/ N, ?  }6 ^- \

( Z- o! o: N1 @9 b// 排序( g/ D; s( P; O
&gt; array1.sort()9 z# j, w8 `& T. h4 |; G  a
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']5 J& c  `& n. D) \  r( i/ O
& F1 v5 \2 i- R
// 删除元素,并可以向数据组中添加新元素(可选)% X0 \: U1 g8 a, p7 L
&gt; array1.splice(3,3)  // 删除元素4 I! @, p; }$ d) |" Q- H5 P+ n8 y
(3)&nbsp;['a', 'b', 'c']& i0 C0 J' G. j0 _' ]" |
&gt; array11 _4 |' j, D6 J) Y0 G7 k
(3)&nbsp;[1, 2, 3]
9 m3 `  Y* e0 i&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
  V1 X" ?# d& N- V$ i[]4 ?% k0 r( ]  K6 i% Y$ z" P
&gt; array1
' a% \3 t2 Z% {* l. A(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
0 n: k$ O. _$ k# e8 ~- r8 G- g
5 g9 V1 }1 H' T% E/ \; Y/*! v* O& S) l* R, p. m. h
splice(index,howmany,item1,.....,itemX)& B- d( E* F  O
index:必需,必须是数字。规定从何处添加/删除元素。
7 ]2 U( R: X0 dhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
. L4 D3 Y  f. zitem1, ..., itemX        可选。要添加到数组的新元素
1 V0 h3 Q/ e5 B* z/ r$ L1 f5 Q% @*/
# `  ?7 W2 _' x5 [, h8 Z" r* `
1 D: [3 h- |; ]+ T: F// forEach()        将数组的每个元素传递给回调函数$ B  A6 r1 y+ R; Q1 C2 K
&gt; array1.forEach(function test(n){console.log(n)})
% S, w% C1 N' x 17 C6 L  d0 d. p% I( |) L
20 A/ v' B# [4 K4 s
3
* I; `8 G- P! }! c2 k5 A% | A7 i- ?6 z- Q6 K) f3 W8 k
B
3 ^; H3 A7 C" k* `7 K& G7 O C
9 U! D' N/ V( d% G8 |8 X9 j// 返回一个数组元素调用函数处理后的值的新数组
( B6 v' ?/ y/ m6 d&gt; array1.map(function(value){return value +1})7 F$ O1 Y0 }8 j, h' d
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']- D5 Y) b  T* Y- {0 @, V
</code></pre>  D# `6 Z8 p" `- }
<h3 id="24-运算符">2.4 运算符</h3>
7 f+ M1 I2 i! {1 Z<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( l; j& U4 E$ A
<p><code>+ - * / % ++ --</code></p>
8 c1 y' W, [9 m; i9 h6 G. A<pre><code class="language-javascript">&gt; var a = 6
+ e9 c: Z" d! ?6 ], |6 Q9 f: I&gt; var b = 33 t$ L" z# X- V1 E
// 加
+ v% F8 K! `" `9 D&gt; a + b% H, ^% ]" t/ E
9
) ]- r" g$ @, z; G) L// 减
# H6 a9 i) H2 e) ~% \6 n2 O&gt; a - b+ @: P: v& U: |0 t5 n; M6 v
3
) t! x" I  t1 Q" d// 乘
& v; `& m, A; S7 _' E/ U7 A&gt; a * b# Y  u9 H% I4 a2 c' q
18
( M1 C9 E; P, |: T. V0 x  R' M// 除
! A" _8 R3 ]  o# I( n6 o5 C&gt; a / b
7 }# I" t& H3 d4 C0 q2
" P( `! h) j! N9 p- O// 取模(取余)
, n$ f! h8 m' `9 |&gt; a % b. a  `% M; z# a8 E* [5 Z
0
! |' [' n0 l/ j$ k// 自增1(先赋值再增1)8 W& M: F8 H- G* c1 C
&gt; a++
4 ~+ u: Q6 [9 L# F3 i, w( D0 V$ n6
9 n: M% B6 P6 ?& o( m+ Q8 s( Y  G, a/ G) H&gt; a
( Y% h! e# i! e- E0 S* z& A& r# V7
# c: F( h% t% j) d1 F2 F// 自减1(先赋值再减1)# p9 E! I7 }0 |' S+ e  R# K
&gt; a--9 v8 |6 Q/ [# G2 G
7# c2 L: P$ y- e8 G% \& R9 N' @
&gt; a5 A& _" g4 {& f6 b
6+ d; ^4 |, r: a7 l( U) U) K! H4 C
// 自增1(先增1再赋值)% Q! a& M" e0 d' Z* j( ]$ t) L
&gt; ++a3 a& S2 u) C; T6 I
7
* J( j& K1 i) @0 x// 自减1(先减1再赋值)- K; ]  ~- N. ~( C' L8 h) v; R
&gt; --a
( V. U( q. y  S% x& u$ |: m6
7 J- U  G! ~4 d7 t$ e2 [8 E&gt; a1 J3 t( ]  R/ A0 |/ d8 {) f5 j
6
$ p6 w0 c- S* m1 L& S' I5 S7 ?
& r3 A# N# @$ R8 ^//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
2 F7 c0 K# b2 s. x</code></pre>1 w" f8 V3 ]  F; D" h+ s
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>2 N4 u+ \+ i7 h+ u8 i7 b" b
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
/ e" O7 H- h- P<pre><code class="language-javascript">// 大于, d( W' z! T' j
&gt; a &gt; b3 z) X2 X7 j/ n' S
true1 |, D- b( s& I, Y9 c8 m
// 大于等于0 _! ]/ o$ M. y, ]. Y$ Y) j
&gt; a &gt;= b5 ~( b, n& p% Z( c- ]. O' D
true7 R/ P+ a1 ]# r+ l9 q6 Z% |
// 小于) u' |. I9 N8 ]2 \6 w9 Z6 \1 V
&gt; a &lt; b
+ ]# A6 o4 g3 ?3 b' Y5 jfalse8 K+ E9 M1 c6 M0 P  ?  s8 ]
// 小于等于
0 x& Y1 c9 }7 @2 d4 [4 |7 w: g/ Y&gt; a &lt;= b
* f) C& I! \  B2 z6 M3 y; bfalse
7 K5 G$ B5 _$ ?0 A1 Q2 Q// 弱不等于
+ T  W5 I' z! ^4 R&gt; a != b' |0 d( I$ r# O4 A7 w  s/ A
true3 {" x5 U, ?* S1 l
// 弱等于, \( [: s. J9 S7 K5 x: c' E% A+ b7 M, ]+ V
&gt; 1 == '1'  S% B2 I& ?% e4 \
true
3 T( Q6 |) h0 h6 |' O/ S5 C// 强等于3 J: ^& b9 t1 I: |6 c0 J3 M
&gt; 1 === '1'  [2 ]8 h% i% ^* C' Q' o! B
false6 ?: u3 P: W. q$ w8 d
// 强不等于
& V1 h5 b7 G* L  s&gt; 1 !== '1'
+ F& [# |2 H5 c5 G" Jtrue
5 b: f' p* s: X8 A5 ]% K1 ?! H8 j/ q" X4 p7 h3 A3 h" L, L
/*/ F& B8 u5 A2 C; g6 ^, F
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误- ^0 R2 M% ~- a7 _: d
*/
6 H* m- ~, }$ S. d! J</code></pre>
! m1 k5 ?* r6 f<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
. S$ n  G. O3 T* K; O& a+ p3 T<p><code>&amp;&amp; || !</code></p>
- O2 }. @% s8 I( ^# L& ]<pre><code class="language-javascript">&amp;&amp; 与
  [- p. W0 f, Z! o+ X|| or 0 _, Y! Z- h0 F
! 非
6 ~9 z) l! W  t</code></pre>
8 {7 B/ @% x9 H- g! X+ B8 y<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
; [  b% n6 Q  u% f8 \9 r<p><code>= += -= *= /=</code></p>5 V5 @6 z: {4 P2 H1 V
<pre><code class="language-javascript">// 赋值% Q; u7 s) j  E$ v/ ]2 R4 m
&gt; var x = 3
, s2 i& S5 `/ E/ D. _: I# d% L9 o// 加等于
. j$ q% J7 K# x&gt; x += 2, \/ q' b: p1 f8 c' T% {
5+ v8 B) F8 c, D# ], I8 t3 Q  {
// 减等于# d& ^8 R& T$ h  C, j- J
&gt; x -= 1$ o0 X* V/ R5 n. @5 b  d9 ?7 m
4. i- {+ U- }" l  c$ s/ I- [3 ]: {
// 乘等于  [2 G! ^. c; G; b* f1 D5 U
&gt; x *= 2
1 ?" }0 j* `4 S9 a- R8
& e# B1 f% V$ q// 除等于
+ e2 c$ j$ M1 A/ Q9 }&gt; x /= 2
( w; A1 o/ e3 `' X: O4' `+ U9 k6 l& z5 ~
</code></pre>
6 S' |  n$ s+ V+ J<h3 id="25-流程控制">2.5 流程控制</h3>
# ^& v4 E. n: I<h4 id="251-if">2.5.1 if</h4>7 N# v* g" h' ~7 t
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
# K5 ]! X7 Y( ~: I( E6 I4 w9 |# @
&gt; var x = 3
5 O" y! [! r" ?, }7 `: @&gt; if (x &gt; 2){console.log("OK")}
8 H( m6 y/ S& X7 D OK7 @1 R' g" E/ [* E2 b

5 r$ R1 T) M- k  F2, if(条件){条件成立执行代码} ! j* r) B8 z+ p* t
        else{条件不成立执行代码}
5 g4 j# u  D2 F: F) ?# o, }: c4 E! d" |! o% o* @8 M6 w( [
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}$ q; h5 b! o' E' l6 \/ \# c5 ^8 v
'NO'' A: Q* A/ \. l% Y

1 L( `# E7 M7 V6 F3, if(条件1){条件1成立执行代码}
/ r! c' f- ^9 V2 X5 R- Q$ P        else if(条件2){条件2成立执行代码}( Y, Q7 |3 T& ^3 O: L2 m
    else{上面条件都不成立执行代码}' p' f, |# s/ g2 |& O) K: t& Y  Q

) |6 \* m, p8 E! f6 u- y* r! c&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
. F" j% I( h- N: S, }; C3 s3 s Ha
& t. P8 H: w; p7 T# b</code></pre>
* z% Y& g* D+ `. g<h4 id="252-switch">2.5.2 switch</h4>
+ F6 S3 F3 P  B0 O0 S7 o' V" r$ e) R<pre><code class="language-javascript">var day = new Date().getDay();5 a" X2 C+ k# y2 l
switch (day) {% W! O' @! r- K9 b2 C; t+ N
  case 0:
; G: r, z/ z. N+ T6 A  console.log("Sunday");. ~8 W% Q" x/ C8 R8 ^
  break;4 e% u2 B  ]0 [8 _3 Q( V: o
  case 1:& T5 o- M4 O  y' m0 h* V
  console.log("Monday");- K' d$ J+ q4 D$ X. I6 V( R, s
  break;- }4 ~1 e1 X+ X" w% Y
default:
! M  Y/ d0 e0 e" C+ E+ ?  console.log("不在范围")
/ e; b! m& E" `/ {}0 a4 c* f0 Z/ Y. k, l+ ~9 g
不在范围
0 m, d9 [! N$ _; f9 R</code></pre>
) J6 n& t9 A6 E0 v- p2 y# W; }<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
) I% z8 C, V- Y/ w2 U8 K<h4 id="253-for">2.5.3 for</h4>
3 Q* g8 P- h: i6 y; v6 `<pre><code class="language-python">// for 循环- d- S; `) M! s/ F# p! \* Q4 i5 c
        for(起始值;循环条件;每次循环后执行的操作){" M  M( \* f* G8 V& u
        for循环体代码7 {$ h: r! l; q4 C$ K; Q( f, W
    }
  N* h4 S1 L- ], ]/ F1 g/ q' N
" \2 V3 y, q6 X2 ?8 t7 t9 Ufor (var i = 0; i&lt;10; i++){  d3 I0 z$ X% R9 _; X
    console.log(i)1 [/ i( M& C2 F9 Y
}
' j! ^, }0 S2 H) \2 V4 P6 o        0
& i. |& l& e) b! o2 g. p  l; h& k" u        1- c) R0 N7 L5 R" k. i/ J
        20 @4 m: h- g, q+ E# w1 F
        3
5 Z% e) ?* g* {# F        4
! \% d' Q; I1 @+ G9 X4 G! a7 f7 F! @        5; G% z$ X1 N# @4 U
        69 _! Z# T8 D% ^8 O  e4 H+ P% ?
        7
: H( M! [5 R' b- e  E# F        8$ N/ X/ P! Y2 V- A& A) n* s/ r
        9
9 h9 z- H7 [$ X5 k! u" _</code></pre>" n- g4 l; o; O  e; u, s
<h4 id="254-while">2.5.4 while</h4>
: j0 E# c  V5 P" {<pre><code class="language-javascript">// while 循环
6 Q' Q0 i, A( H2 Q  s        while(循环条件){* U1 W2 O2 d% n" \/ b
        循环体代码5 ^7 |$ @/ t/ D: R% N
    }
) b2 h  B  Z( g; y: ]7 K  S0 w  R, r# A1 w2 {! F
&gt; var i = 0
7 K( I. ]- n+ d6 X3 R4 J&gt; while(i&lt;10){9 M2 ]! _1 u- m5 g: k
    console.log(i)& @6 {' {! q8 E' N% j6 E
    i++; O' r6 g. u) V& N1 i
}
/ V( W. O/ y  ^# r% p5 e' G 0  T) d( \4 C) A% C
14 ^1 s+ h) C$ ^# E- `0 S2 ]
2
7 V5 n& l/ z) U: E- v" f 3
( K- E4 d1 M8 d9 K% b 4: S- V3 x  l) Y
5
( I; g9 h7 |) J( Y( h 6+ f& y& D  H/ G
71 {7 [; R) ]$ J; u, i) Q. ^( [/ {
8
5 D+ t( X5 F% O. b) ~% a( Y+ `. H 9
6 z& o. N  O) I# @6 B2 M" `6 J) p</code></pre>
* N) y* `" B' q2 F  N<h4 id="255-break和continue">2.5.5 break和continue</h4>% J/ P' I, R% g/ {: B/ \* n
<pre><code class="language-javascript">// break
/ K3 r8 q* A9 J/ }1 Efor (var i = 0; i&lt;10; i++){& l% M, w& y3 U" b
    if (i == 5){break}+ {3 w1 w& C1 P4 M; m" i8 H; m1 Q
    console.log(i)! [; o3 X% s* t4 {1 ^  }
}
; b$ X3 U( U8 l/ ]: \2 e. _ 0, j# k6 B7 j, X  F: W0 ^
1( T5 Z/ Y$ R, H3 Z
2
0 V* Q4 O9 I7 K! ^: h 3+ |2 ^4 j4 R4 Q, i9 n
4
6 e( e0 \' I* Y& X6 {// continue5 Z0 u8 U: u3 h- a" [0 {
for (var i = 0; i&lt;10; i++){
; E+ Q" l6 M# `+ ~8 {) O    if (i == 5){continue}
9 ]. a! C( L2 p. f4 K    console.log(i)
: `6 _" V. S' S}
- u! s2 ~9 h  D4 j2 O 0
# Q# g- `- g9 h0 k$ C& F1 [ 1
! N3 l" c* ^: a9 t 2
( C+ W1 G1 o+ k- s 3
% V, L% I  o) P: _! S) ?  A 4+ E+ t7 E3 s- _, Z* q8 W* ~( z: Z
6
6 G2 N8 w# S' B+ Z) b% W 7+ X# I9 ?/ |- |, v6 c+ a% u
80 {6 S$ X8 l# i* v) v0 w' D# {6 D. Z
9
% G7 P8 l! m- f" A! B6 f6 p; u& e+ N  _, A
</code></pre>
' k3 P; a$ O4 F8 K<h3 id="26-三元运算">2.6 三元运算</h3>
8 E" V8 [5 q8 w; t! t  B7 O6 R<pre><code class="language-javascript">&gt; a
# V1 M5 A0 r3 Y1 e4 V- ~6, y/ A9 U( I: ~7 b$ y
&gt; b6 y8 `. Y  O( m+ c" z5 e
39 }" A* a5 ^; Q) x1 Y$ H

& ^& Z; b5 S+ K* D) k+ k//条件成立c为a的值,不成立c为b的值
( t3 F4 D5 X7 y* E% V; j" L&gt; var c = a &gt; b ? a : b
: h% ?! f+ Y1 ?0 C/ G) B5 t&gt; c7 [/ g. j2 h% a! p+ {1 Z
6
  a2 F- Z9 y, T! {* [  i: n3 g6 r3 H) ]7 A- j4 N, M2 w; b6 u# j
// 三元运算可以嵌套) ^) y! W; U/ u, p$ P
</code></pre>+ `1 J% i  x$ L. D
<h3 id="27-函数">2.7 函数</h3>& B! W6 p# H6 b( Q% V; K/ C
<pre><code class="language-javascript">1. 普通函数
6 C4 K6 \! N2 b9 U9 h) w&gt; function foo1(){. h) |6 }$ J# @! `3 i
    console.log("Hi")# F. o$ S5 N, Z) i  S! X" S
}5 \$ x- u* K) K" a7 U
2 d% j4 Q1 E2 w' Q6 [
&gt; foo1()8 M- Z2 d  v; W
        Hi
! W# d4 x5 i. I; |  {9 a2. 带参数函数# ~: ]6 B- I4 t
&gt; function foo1(name){' W+ ~+ K4 X' F7 M
console.log("Hi",name)- o+ e" i( b$ @$ I4 A% s7 ^
}
/ K0 P, e  Q" a1 Y7 m1 m2 ]" X# f* Y6 w! v' ]% e6 W8 t
&gt; foo1("Hans")8 M) l' f5 y3 t# z
Hi Hans
, t1 k' b; F. G# X! Z2 y; _# V- k( C& J7 f- Z
&gt; var name = "Hello"* `' C0 U" Q6 o5 O% V4 j/ A
&gt; foo1(name)
: Y9 Q; R+ }; S. c7 f8 ?Hi Hello
2 P: q! Q% `- V& {% q" f! D0 C
$ @  u- D2 q: _) Q' }; R3. 带返回值函数
" I7 R7 q& m% ~) l5 l) l& \4 R&gt; function foo1(a,b){
/ j7 o2 q5 Z" v6 `/ ~1 C4 A; ?' c        return a + b   % l( \, t) |& T' }* [
}
9 B* L6 {: {. }: N* n* s8 V) N&gt; foo1(1,2)
9 f  \1 p* R! f# R- s3 _. R3, U9 n& Y0 W0 R2 V
&gt; var a = foo1(10,20)  //接受函数返回值9 e/ ~# G  o* @$ I. R4 v
&gt; a: |# q' k4 G. B3 `
30
& B$ r- z+ i+ r% M: c. T( [7 i- A  K2 p6 U$ `3 J/ E, n  P
4. 匿名函数
! ^7 o' v4 @# P* b2 G* |; |' G' H8 w3 X&gt; var sum = function(a, b){5 ?; @. K* z+ k
  return a + b;' i+ ]( D& @7 S! T# r: [/ I; t, M  ^
}
; Q1 m/ U- r. J9 s1 F' A# F&gt; sum(1,2)
7 e* n; ^" o8 W: Z; f; \6 ]( I3
6 n4 T/ h. ^8 g3 O8 O0 L& m3 t4 r' J$ i
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱4 y7 |& P8 w8 e/ e0 F5 C% T* A
&gt; (function(a, b){
- @% M, ]1 I, g7 n/ \  return a + b4 C6 g, H9 v$ D  J  v* Z! f* S
})(10, 20)
9 W+ f: n/ t$ ~* K5 C) P30$ a+ M2 I( W0 q

3 ~1 n2 w; M9 V  J: [# F2 m5. 闭包函数
- X8 w& q; a( f2 V* x" }5 o6 V// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
9 ~/ O: y4 Q0 t: t7 `var city = "BJ"8 N3 F" `. S7 u* K
function f(){
3 a/ H% J) U: L- q' B$ _    var city = "SH"+ o4 s$ j2 `1 \6 v
    function inner(){
+ {4 o9 e$ @- D. ^: u1 P        console.log(city)
* [) Z- n* a- V" G6 W    }
; `+ F  R1 J+ v0 m3 p& \5 g    return inner
. F3 [5 A+ f# g6 S  Z1 ~7 X  |, [! m}" F9 J1 S8 \0 D7 q% A
var ret = f()
! D- ~( d' e8 L" z2 zret(). |; R! a) x. s/ R7 F& }. }
执行结果:
% G2 ?; R9 \+ }5 L; R& cSH* t, _6 T! o; P1 v" I9 t6 e

# _  f: C; Z  \' ~# K, W( K" z</code></pre>7 W! }6 m& D9 @
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>8 i+ s( _; \9 y7 w' `6 k
<pre><code class="language-javascript">var f = v =&gt; v;
' O' p/ y$ o- Y8 v/ p  g- h  W// 等同于
1 Q/ C: t$ a( ]# Y# Q( qvar f = function(v){
' x# k% ]9 ]' U4 r5 t: ?& p" _  return v;% }& b2 d, }* q7 a1 ?# r$ U5 G- h+ K
}/ M# f7 m4 c. l, r8 N- }
</code></pre>
6 ?- C: S( v0 ~( g* L( y<p><code>arguments</code>参数 可以获取传入的所有数据</p>
1 i' }' r% Q% B. p3 A. q9 I2 Q<pre><code class="language-javascript">function foo1(a,b){
3 [# L# w% O: a# O5 b4 T$ v    console.log(arguments.length)  //参数的个数
' F2 ~/ v  M1 \8 k7 Z) }    console.log(arguments[0]) // 第一个参数的值+ ?% _& s/ [, ?; w
        return a + b   
+ `+ u0 N3 e  o8 o7 e}
: z8 S) W# W4 qfoo1(10,20)
& j& b. |  y. A. b  v. r  r结果:
7 A9 V8 o. j, p) U 2          //参数的个数
* \3 n6 J) s9 x) }) _/ x2 E% X0 A10        // 第一个参数的值
5 o! o; k) X, W/ B  y$ ^30        // 返回相加的结果! O" a0 Z+ }  ]  t& {: a
</code></pre>
5 W* e2 ~5 V$ C* B! `<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
0 w3 N* b6 s0 [7 D+ u<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>( N; x, \: R( m1 o" M" r0 S/ b. C
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>* I% U5 \- F5 b3 Z5 e% \9 n
<h4 id="281-date对象">2.8.1 Date对象</h4>; _2 x4 w2 M" _9 K& D: R8 r& V* M5 L9 l
<pre><code class="language-javascript">&gt; var data_test = new Date()
% [4 o1 U$ j6 }0 O; m& Z( M&gt; data_test$ f3 ~* r# q# ?1 q
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  w, y' y) y; X0 A2 p2 ^# `
&gt; data_test.toLocaleString(). ^; W1 V( [/ I7 ?. S
'2022/2/11 下午9:44:43'
' o! O/ o, C. J; `
3 H# M9 R; F0 Z7 O&gt; data_test.toLocaleDateString()
+ P! v# |2 s; S* t( L( c4 d- l'2022/2/11'/ g, s, m: t# g7 |' D
# S2 P6 y! X6 v. z2 Z5 J( `
&gt; var data_test2  = new Date("2022/2/11 9:44:43")# B* ~# u0 Q7 A3 d3 N  W
&gt; data_test2.toLocaleString()
3 }( F+ \* U" f; t1 Z& s! F2 t* }$ n'2022/2/11 上午9:44:43'
7 R+ l; n+ o6 z& N& ^' C4 O  W/ G. I$ M( [
// 获取当前几号
: C( i! y8 b. j  g&gt; data_test.getDate()
- M9 Z/ `. C" |: }1 S/ |% @+ y115 G  K- E% z$ w) a: ~
// 获取星期几,数字表示2 l9 p+ M: G3 C9 Q5 X1 y( ?$ R
&gt; data_test.getDay()  
1 Z# y4 j! Y7 x59 P8 r% M: S  _- V
// 获取月份(0-11)
6 p7 D( Y7 L0 q5 D0 m4 `1 \&gt; data_test.getMonth()
1 e; K$ N( y6 z1 t# t( k  b1
* l- T! J) n& E, R// 获取完整年份
; X% P3 y  t9 u0 ], i- c% H&gt; data_test.getFullYear()
2 o" c/ r8 t0 z5 n: Z6 E/ F2022
  ?6 L1 T1 q% v7 s; w% U. a// 获取时
# p& b2 O, t, a$ ?2 Z, z8 i9 F/ c&gt; data_test.getHours()9 [$ t. h) Q: f0 V  j
217 d8 @% @& K) ?% m7 R2 H
// 获取分1 V7 A) x3 u  O7 V& X/ I% i
&gt; data_test.getMinutes()5 K8 y3 V& K8 y- \% `' v9 ~9 m
443 O$ R; p+ m- ?& G' y" |
// 获取秒6 Z$ q  U6 e: {# C; ?1 K% s- B
&gt; data_test.getSeconds()
9 I7 d: R( n' q7 E3 s- ]/ G# ~0 o43
# C$ l4 q9 C+ p9 [1 A4 @3 ?// 获取毫秒
( d+ g7 o1 \, M" ?( _: r&gt; data_test.getMilliseconds()( |9 ]- a5 O' h( {9 W
290  d4 A* g+ Z9 c9 O' G5 X
// 获取时间戳. G' Y8 j% a" j; r* N3 \
&gt; data_test.getTime()
) e0 |! l1 @& {$ v/ d/ {" r, I16445870832901 V$ O6 ^+ A/ ^$ g% R7 [
</code></pre>
6 P; O3 }$ {: F7 _<h4 id="282-json对象">2.8.2 Json对象</h4>3 @! i1 I/ D' ?3 W; M
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串- J8 J# I8 J' ^6 R
JSON.parse()  // 反序列化,把JSON字符串转换成对象
3 u( m; O& }7 F, e% |' D
$ y9 F( l' l8 I+ q// 序列化
' T( S( y0 i  q&gt; var jstojson = JSON.stringify(person)
' t5 y2 o) _% m# N; U; T; i# V&gt; jstojson  
& V: s2 H6 d) k'{"Name":"Hans","Age":18}'$ J! V# k: f9 r3 B
, {5 k, N' E7 [+ S$ Z" E
// 反序列化
; v, m9 |5 h/ N+ k) i&gt; var x = JSON.parse(jstojson)+ Q3 M$ f  W# e9 @
&gt; x# w: s8 W( W6 n) C6 ?8 b) i6 P
{Name: 'Hans', Age: 18}0 p* r; m# }* {: w  r
&gt; x.Age
6 Q- y4 n4 Q9 K. K9 n18) V7 [9 _. [& N, ]
</code></pre>1 H$ N9 f9 l  D" i8 u, K
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
4 B7 ]% U' w6 Z) r<p>正则</p>
/ u! D/ \* b! v! i/ A  a" F2 k<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");% p: G( p+ K% }1 G( l2 C/ Q" _
&gt; reg18 \5 ~, `/ f" P; P/ R
/^[a-zA-Z][a-zA-Z0-9]{4,7}/- P6 n$ l9 ~8 a: z( i" H& _
&gt; reg1.test("Hans666")& S+ R2 G1 F( ?8 F) R2 S
true1 @. B6 F% b) D
7 I6 ^+ ]; T, j
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
' O$ y, L; K# |0 e5 ]4 S8 S$ i&gt; reg2& i7 L. E, U7 K( Y. Z7 V
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
/ {2 F$ q0 U+ h( Q&gt; reg2.test('Hasdfa')
; e- @8 Q2 T. h) F4 Strue
4 N* q+ z( j5 M5 o/ F2 m
+ X. r. m+ X& J5 w全局匹配:
  N: L7 ?% I3 `/ P&gt; name# x# ?- \( ]. O0 S' L0 H
'Hello': v+ ?+ [/ P, G% c  I: R4 t! I
&gt; name.match(/l/)' z8 {# F0 F  \3 ?! t4 J7 p" X
['l', index: 2, input: 'Hello', groups: undefined]) y4 n9 {8 K0 ^/ `8 b6 ]
& I. Y; `9 k4 S  `: c. J; z" y; d
&gt; name.match(/l/g)
' _; [9 F% E) ~% o! w9 B& D(2)&nbsp;['l', 'l']' I% H8 M5 |0 @- E) _5 ~" l0 M4 w
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配; J- U3 Z7 u/ A- V* y1 J
( P/ N7 y# p5 y3 |% l
全局匹配注意事项:0 F4 @* I8 j( f( u- S8 n" H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
+ i/ T, @5 I1 ^# m4 h3 R&gt; reg2.test('Hasdfa')3 H) o' [' B1 {
true
' V3 ?6 A4 Z! S: a8 r&gt;reg2.lastIndex;7 I% i* h- G6 [" e
6! E$ P" `# e, s) G) D2 E
&gt; reg2.test('Hasdfa')/ H8 v- S( @2 n
false
5 m0 U3 W  |( L9 a/ H&gt; reg2.lastIndex;3 g: c) J1 j8 [$ V- W6 F9 ^
0, r5 T" g2 O6 N% }0 g* C% i: F
&gt; reg2.test('Hasdfa')
; [( {1 H# o$ Q; R" Z2 J: `% Ptrue
+ d- p  r0 k' C&gt; reg2.lastIndex;
) n$ p) q: A% a6
) s7 E3 R3 V, G. \7 `&gt; reg2.test('Hasdfa')/ m8 m5 T. c$ L9 V# Z. S; s
false
3 l- \0 ~1 @, d+ H) A6 V% c/ a5 q7 j&gt; reg2.lastIndex;
9 s1 w1 S% a( A: z. V* O1 X& c0  t$ f5 C3 |" L7 E: g
// 全局匹配会有一个lastindex属性! r* f( U7 L5 J- z/ D( [- {/ C
&gt; reg2.test()  ?  L$ n3 p% M7 y# t. R# ]' N. B
false7 ~% N' D, N  v/ B
&gt; reg2.test()" i4 l; f; B+ |+ i# m! ]2 q
true9 U. y7 {7 P/ j4 B6 S% |
// 校验时不传参数默认传的是undefined
3 A: x9 o5 M$ h" ~: |</code></pre>0 a: Q; j0 [, [: u
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>* [: D3 ]8 N8 h6 i. U
<p>就相当于是<code>python</code>中的字典</p>
4 R( o0 |$ w0 T  M0 ^6 F9 L<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
5 @( ~& q8 j$ E6 f, P+ U&gt; person) I2 P, k" ~4 ]
{Name: 'Hans', Age: 18}3 W3 v( f7 q) Q9 E
&gt; person.Name& ~9 a( N! Z1 V) t
'Hans'
: x* x9 v: |" F$ a+ O: ?* J. Z&gt; person["Name"]9 X. f6 J! |3 w" Y4 f
'Hans'4 j: j$ y9 S  ^' `7 n
+ y" d) |' j5 Y' M; h2 _
// 也可以使用new Object创建
( G6 k$ I* f1 o0 C- R&gt; var person2 = new Object()- d* }/ {; u* P: M( C, r
&gt; person2.name = "Hello"
1 T( S# J, w3 e0 b6 j'Hello'8 |  j* {9 a" n* d7 D
&gt; person2.age = 208 o4 p% F2 k% Y# O% W: z# l/ g# ~
20# c* K6 E/ o- N; [, b
</code></pre>) ^4 K& L4 k3 ~) V8 x/ u2 r7 f& B
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>. g( a2 ~- g& h* R4 G# \: h
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
* K8 b" c! h& f( Z( s<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
' h* u! s; {) o3 J<h3 id="31-window-对象">3.1 window 对象</h3>
% r  Q# _. A- ]3 h0 G( Y1 a# S<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
! F2 t- p( m& L3 P8 g# J, V<pre><code class="language-python">//览器窗口的内部高度* U8 c( h+ v# ^6 l
window.innerHeight
8 s4 ~  X1 ~% v& n706; q) c( r8 e% B2 K  b: P. {$ i
//浏览器窗口的内部宽度
" ]3 t- P- Y; ]% H  s. iwindow.innerWidth
* H$ J% _2 j7 C0 X1522
* P- S* t% ]- r  w' l1 H) r// 打开新窗口
0 e- d2 \. M( [3 p. C4 d" o3 W; `window.open('https://www.baidu.com')& ^! J& I8 f/ f  O+ t
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 d# e/ b+ b9 a- W/ T6 A; K1 G// 关闭当前窗口
! ]8 n7 C: P9 c9 q) _window.close() 3 r8 N, e: M- f% h. v2 B: {
//  后退一页; e9 D- P! n2 P
window.history.back()
/ n  D! _+ _9 n1 L// 前进一页
& ~' L/ n: Q, p$ N5 \9 k+ Mwindow.history.forward() 7 d0 V& T! C; Z  O3 f! v6 V
//Web浏览器全称* ]' C; ^  Y3 e  v. \4 Q! v
window.navigator.appName
/ g# f7 o: v' @% P: K! U6 \5 `) E'Netscape'
. ~) m5 m- y: I/ {7 c7 l// Web浏览器厂商和版本的详细字符串8 D9 y& L9 U0 _& Y' Y
window.navigator.appVersion3 x! V2 h; g" I/ I) U6 k9 L# {
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
  t: R6 d; @, N& X1 X// 客户端绝大部分信息) d6 T/ S, A4 Q
window.navigator.userAgent
1 n/ f2 t6 \% j2 Y8 p% u- O'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
5 x: {0 T4 Y3 V& O7 q// 浏览器运行所在的操作系统0 U* O: d4 {6 |$ s: L* C1 L
window.navigator.platform
8 B) _, h# Q  L'Win32'
* o% W5 \% }7 e& s" w: P/ e' ^$ G  l2 i
//  获取URL) h) G8 S0 Z# B" _4 X  z
window.location.href  d& n, x% x: `% `% J8 s2 a
// 跳转到指定页面
6 {" r- }! P5 mwindow.location.href='https://www.baidu.com'
+ c8 g; k+ T# \; ?& j- {' ^// 重新加载页面& x8 P" l4 N4 i8 I' @) K
window.location.reload() 6 M7 U5 Q) N$ B$ D, |
</code></pre>
# w1 x; Y, m' _, g4 Y<h3 id="32-弹出框">3.2 弹出框</h3>
, W4 D- j# x4 @/ o9 w! b6 J9 Q+ U<p>三种消息框:警告框、确认框、提示框。</p>
8 [8 \) C  X5 O. d: o3 g( x( c1 k<h4 id="321-警告框">3.2.1 警告框</h4>' O" r% Y8 K3 ~2 ]0 Z
<pre><code class="language-javascript">alert("Hello")' H& J/ D* M0 e  F  W: m4 p4 F& @
</code></pre>) H/ G# z; k/ Q0 t' \5 q1 [+ O
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
! J3 Q( c, w$ J* T' }2 o<h4 id="322-确认框">3.2.2 确认框</h4>: A7 c# a+ B$ F8 i& K
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; O+ k* I0 B2 ]9 h<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true$ j( j+ h; H' ]1 e% d, B* y1 A
true) ~3 m4 N3 [0 b, P0 @1 ^+ {
&gt; confirm("你确定吗?")  // 点取消返回false
1 `5 N. J. W, ]! Ofalse" u* d6 U% F- R$ ^# J
</code></pre>! n- J* F/ w' ?8 R1 m8 d, ]
<h4 id="323-提示框">3.2.3 提示框</h4>
; Z$ P& L/ ?2 n+ Y% L<p><code>prompt("请输入","提示")</code></p>
" d& O- W# i: s# J1 _<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
) u" T+ ^6 |: G5 m' j<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>1 e: a$ _8 L( p/ t+ A
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>& g# c) R6 q" l% _9 N8 Z
<h3 id="33-计时相关">3.3 计时相关</h3>
  M/ {9 F% z1 `3 r+ j5 f6 D<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>5 w) F2 U+ n- D8 z! \! Y
<pre><code class="language-javascript">// 等于3秒钟弹窗; ]. m2 k! W' b7 t" r* Z1 v
setTimeout(function(){alert("Hello")}, 3000)
+ [6 P& Y- {6 x3 y
" z* N+ [" Q  p2 m6 U5 J+ Vvar t = setTimeout(function(){alert("Hello")}, 3000), l0 t  J  X* Z" R' h& h
5 G  E2 l) E1 m$ `
// 取消setTimeout设置/ |; Z0 D" Y# g/ K+ r( W5 W
clearTimeout(t)
/ }# P8 W  O* Q* J4 R: k: L% V</code></pre>
' M8 f1 @7 ?; G6 i9 O9 B$ h- I+ ~$ X<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>! z: s/ {" `9 W4 V: Y" \' x! c
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>0 l" e+ u, G, a* F* P. P) D+ X% \
<pre><code class="language-javascript">每三秒弹出 "hello" :* t2 f5 a/ [8 P+ i+ b! l
setInterval(function(){alert("Hello")},3000);; v" s7 s6 ~! L3 C# `
</code></pre>8 }8 h0 |3 m; Y3 ]2 b5 ~
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>% R2 G& {- C2 C7 A
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
% N( Y, E4 L1 v: G% \. K//取消:9 J8 h# k! Q8 z2 ^) h
clearInterval(t)
8 X, M# w9 s4 W  t</code></pre>
& w, A. I+ k6 t( M7 ~1 g. Q9 v/ B+ r. ^# }# Q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-7 23:13 , Processed in 0.074424 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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