飞雪团队

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

前端之JavaScript

[复制链接]

5746

主题

5834

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

4 p) q/ s* D# A<h1 id="前端之javascript">前端之JavaScript</h1>
; p; |/ d3 d, O+ e! z, U<p></p><p></p>
8 a' M3 d; d  M, T5 X<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, c* K: b+ D3 e+ |" e* M<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>9 V, s+ p$ K0 o* j8 D7 i5 z
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
- X" b0 }! W7 P9 M: w" ?8 D它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
4 V' _5 w+ t  \& k. r7 h' m6 Q它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>2 g: O+ X, [& T
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
, g& d4 W, \2 ~. j' l<h3 id="21-注释">2.1 注释</h3>
) M8 Z/ G8 D0 ^9 _/ i7 Z<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
2 T5 g& C0 O# U' y# a<pre><code class="language-javascript">// 这是单行注释. h2 G  }" r9 X( a  o% d/ W& {) f
% z& i, R+ H% W: s/ n
/*
6 }6 I9 ^% ^" c/ X这是多行注释的第一行,
) u8 M, n; ?& p* ]0 v. x, T这是第二行。$ `* h* W9 M: U7 g$ f1 Z
*/, r1 k  j1 u6 R1 A& k5 D2 }
</code></pre>
5 t4 Q% q& M/ `+ \3 ?% N6 c<h3 id="22-变量和常量">2.2 变量和常量</h3>
* p5 f3 F' P. d7 t8 N<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
+ ]% s/ L" Y) T) B7 o) G. D<ul>
7 d; O) i& K/ w4 i<li>变量必须以字母开头</li>
' O9 _- i# @5 {; i  B8 t<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
: o. t; d+ A4 G7 t<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
0 W% Z- y9 q; o, }) i</ul>
5 q2 p2 |+ q7 g2 D/ H<p><code>var</code>定义的都为全局变量</p>
9 O. V8 {/ d3 M( o8 k6 |! a<p><code>let</code>可以声明局部变量</p>9 E" m/ v" o; a+ J/ ]( k) S
<p><strong>声明变量:</strong></p>4 W4 A; t) x2 m! w4 ^
<pre><code class="language-javascript">// 定义单个变量2 k& j& D. I4 ?* M2 m) k$ M
&gt; var name$ L: k( k- @. s" n& }) _$ W3 f* }
&gt; name = 'Hans'
( d9 L  W2 O2 ^4 B  |//定义并赋值. [+ u/ U5 [. `& l7 y
&gt; var name = 'Hans'! G1 b8 p4 N4 z1 f; w
&gt; name$ ~+ Z1 W! Q) a) R
'Hans'- p+ G) u3 j! n9 n. B6 F
2 Q4 b* U# _0 Q+ ~+ q# U/ _
// 定义多个变量: q2 t$ f, A" D2 S/ u
&gt; var name = "Hans", age = 18
0 X; a" D" q. c&gt; name
' d! j- V( l- j; j'Hans'7 ~$ ~6 F1 ^8 X, p3 O3 h
&gt; age  B# `/ T  g( D( \! e5 Z/ Y! s
18% m" X4 u# A1 {4 T* a+ H
7 o3 b) j2 M3 T4 z1 R
//多行使用反引号`` 类型python中的三引号
4 W+ ^  y4 ]/ x1 D' e&gt; var text = `A young idler,, F2 W* Q% r' j
an old beggar`/ y+ @$ P+ u# y5 t; Y
&gt; text. Z, c, _( k+ D' T7 Y, c6 D4 E) b
'A young idler,\nan old beggar'
% F4 w0 F4 o% T+ z  }0 s; b+ j& t  Q</code></pre>
* B  F5 e1 z7 l5 F4 U<p><strong>声明常量:</strong></p>
) Z" F" R4 ?* s% F% @<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
" ?0 n8 p. a1 }<pre><code class="language-javascript">&gt; const pi = 3.14
& Q8 S5 Y% T: H0 W6 }) m&gt; pi# Q$ t& o7 J5 D0 [* d  T! C) N) r, }, I
3.14
! P7 w. R# o7 |4 m) y% C&gt;  pi = 3.01& [' e7 B5 p' L
Uncaught TypeError: Assignment to constant variable.7 g: N% H3 f0 V' o7 _2 `$ K% o+ \
    at &lt;anonymous&gt;:1:4% V8 b3 r, R: w' k3 e

( k0 C% u+ e  ]9 o$ m</code></pre>
- K+ y$ [# [$ p1 P; b" H. H) g<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
& i- o' e+ B* a. z  ^<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>0 _+ Y) R0 |! G) M
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>6 ?# K, E! w6 l9 A
<h4 id="231-number类型">2.3.1 Number类型</h4>  ?5 D( L) }' U) v/ X, P
<pre><code class="language-javascript">&gt; var a = 5# v$ {' c0 x) l# q
&gt; typeof a   //查看变量的类型  3 G9 R! `" z& Y# _
number
( |. }; |& Z0 k: ]2 U
5 F9 X' z* u; H. {* w9 J- y&gt; var b = 1.3( L# h: j& _! ~1 C% l8 Y
&gt; typeof b
! Q, @5 G% a2 y( B& r% tnumber
1 l7 R! N' p3 S; P  y5 U/ P* H) I! N6 `
// 不管整型还是浮点型打开出来的结果都是number类型
% Q! g7 h( F( d" {
; ?" t. y1 K8 y$ a/*
) ~* M9 v" z# `5 f3 l" {NaN:Not A Number
  }7 c3 _2 a+ V. c+ gNaN属于数值类型 表示的意思是 不是一个数字
9 X# r/ M( e  q& c7 B  a*/
# m5 f) [7 ?7 p, j% _% W5 B" X9 h
5 L1 t# U% p& N1 A  Z& HparseInt('2345')  // 转整型3 ]. N5 ~9 K0 {- _  Z7 b9 c6 ]3 j; i
2345
# W  I( P) @0 I+ TparseInt('2345.5')/ m& f! r5 }6 L$ C7 L5 x: R! h1 E; w
2345
. P3 t  s4 Y) vparseFloat('2345.5') // 转浮点型
$ d$ j/ Q% v8 t) a! I0 R2345.5( |9 U8 A1 @1 v+ R* H# D, U
parseFloat('ABC')7 L& w6 Q- d) g% `" p
NaN
4 q5 b$ V4 b1 d' xparseInt('abc')6 [, g0 w! [% n) ^# d8 N
NaN
" w# [4 v6 B/ `5 H; }& y( w* F</code></pre>8 f$ ]* U* `( J7 j8 @
<h4 id="232-string类型">2.3.2 String类型</h4>1 V- i7 P/ r' _% j# ]5 e
<pre><code class="language-javascript">&gt; var name = 'Hans'$ C% A$ P4 k1 H0 w3 X6 \! N
&gt; typeof name$ V, }  W' B/ |$ |' V$ [
'string'
4 f) x" x6 O7 H% @# N' O* y$ ~: l7 ]* y3 z! `+ q5 v
//常用方法$ |2 Z# `4 t2 S- E3 C3 h+ g. W
// 变量值长度
0 a- X  e: B3 o. c1 h- F&gt; name.length8 [& h- M8 R  g8 j! x) j
4: l& T# }# C7 S4 o' T4 I
// trim() 移除空白; L6 j& c% v+ }; v% ?8 f! f
&gt; var a = '    ABC    '6 D) m! V8 v7 T, `
&gt; a6 y2 z! u! w: A' j' V
'    ABC    '
% C! }: h& j( y. s&gt; a.trim()
0 o' M! w( q  X& W'ABC'
2 z5 O+ x* m1 d' \$ H! K& \//移除左边的空白
& o/ K/ S! C: l4 H* d&gt; a.trimLeft(); F$ x* y4 ~$ }' b
'ABC    '" k  _( m2 ]' F& w4 _
//移除右边的空白
$ u9 A. U+ F. D' `&gt; a.trimRight()3 m$ g( L4 c3 r6 G2 }
'    ABC'. t) B' y& W9 Z: m$ H

$ v1 c/ \4 ^% `5 A% N//返回第n个字符,从0开始0 x% _$ W. Z1 a+ L* b  o
&gt; name
: \& r7 T6 w, k' o'Hans'
5 K& e7 [1 E& v5 ^&gt; name.charAt(3)3 g8 v7 J* G3 {5 G
's'7 I8 C) q8 {- G$ k
&gt; name.charAt()6 A  |8 _( U5 @7 l1 t: [
'H'
* m! F. G3 @+ c  J1 q, @% |&gt; name.charAt(1)4 _7 y" I' \5 @% g( I; c; ]) X
'a'7 {* N! p7 ]% h6 v/ @8 @: y
9 u; E2 D$ k) h- G9 h. O
// 在javascript中推荐使用加号(+)拼接! ^3 f8 i' B$ N: s! I
&gt; name
8 S" v- U/ G; m/ G2 W# b2 C% F6 j'Hans'
; K3 [- X  C+ A# u. S&gt; a4 ?+ f' L+ v/ |) R+ S
'    ABC    '8 j& F8 F' |. W  ]* z/ R% S
&gt; name + a5 R! h0 Z: ?" q' i' y! x  W$ k6 {, {
'Hans    ABC    '( U9 v- ~! ?* k6 K1 e
// 使用concat拼接, ~" |, w7 L8 l& Q$ N
&gt; name.concat(a)
' v. f: ~* X0 Z* r; C'Hans    ABC    '
5 q# ^5 d: J! U- H0 d9 D, c9 x/ @: p' p* S! p- J) {8 E
//indexOf(substring, start)子序列位置
1 P6 e' G: U" g" N/ U% l; w
4 J0 G( R- [: \: j* A  M&gt; text
8 ]/ c/ K# ]& W  B'A young idler,\nan old beggar'
# C7 @' D* u4 [( r# x3 d&gt; text.indexOf('young',0)
0 n7 K( f1 n. t" d, U2 p% h1 ?2" W' R) t4 Q- f0 J' b+ ]

; y, x3 q3 _3 W//.substring(from, to)        根据索引获取子序列
& P& W4 z) \# L; {" F& a9 j3 j&gt; text.substring(0,)
+ q- o: \) S4 {" A'A young idler,\nan old beggar'
; ?5 ?; |; D; \&gt; text.substring(0,10)
* g& f2 I2 D9 D% O'A young id'* m8 ]- n3 k9 S2 n1 V! a

+ M( O. O& y8 k// .slice(start, end)        切片, 从0开始顾头不顾尾8 F5 ^  h( G- ]# Z% h% M2 p" A
&gt; name.slice(0,3)
  x+ D3 d9 }& U7 E: M0 A3 `# D'Han'4 A) ?. O, X; m4 K$ ~8 g2 V
/ ?- _. C6 K# e, G4 q5 `
// 转小写
1 Y8 G/ A; F# H# |7 H# W. e3 i6 h&gt; name
  D" a2 u( {, B, b'Hans'
' p5 ~8 ]8 w/ M4 S&gt; name.toLowerCase()4 K* C- S) e" J) @2 j
'hans'
. L0 @8 G' p4 ^' ~% D// 转大写
0 W% g- [, O- o, L% s& n/ Z4 v+ B3 x&gt; name.toUpperCase()
: P+ x' h: n9 I! `4 V1 f6 f/ p'HANS'1 f1 X9 ~$ R- D5 N9 _2 ~; {
( i0 U* G& j. T; e2 Z# Z) P4 I
// 分隔
& H! x! h* W; [6 S0 h8 B&gt; name8 k' Q- t  T& N) L' d0 A* r) u
'Hans': z$ Y) M( g; t
&gt; name.split('a')2 a: y: j% B* V
(2)&nbsp;['H', 'ns']9 a* C6 h! z9 v& r/ t+ Q
</code></pre>
' E! y+ [' ~9 d7 k<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>7 y" ~2 F+ ?4 M0 s5 d
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
3 E! I' f* I5 a0 w  u, n<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
/ z2 S. B( V' P9 H9 W1 q0 y1 H. p& a% G<p><strong>null和undefined</strong></p>
! Y, Q# a; m: V: Z# `* f<ul>6 d- N# {9 \" Q) b3 [6 l
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
1 @1 X$ F- m. {+ ^& w3 b3 ^<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) b/ ]. }9 j2 s1 D$ V. d</ul>3 J$ k7 W: \0 v# Z; i) A  W* X
<h4 id="234-array数组">2.3.4 Array数组</h4>
& \- v( V2 c% u<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>1 f; H" q& p: ]" R) I, q; r0 E% I
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 5 x. e1 U+ o8 q9 q4 f6 I
&gt; array1
, B+ C& ?9 T. U: w: h9 \(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']1 ~& C' r7 L) J0 n# A1 G
&gt; console.log(array1[2])  //console.log打印类似python中的print
& W/ r$ r- K+ Y! l/ _39 E1 x% B2 G1 _$ j, ]1 f4 F
// length元素个数" Z9 V+ v9 ]3 s8 |: S
&gt; array1.length$ m1 v; {6 k( l( K8 j
6
0 v$ Q% O. C& C" e' ~$ q. C// 在尾部增加元素,类型append
- G* V" v4 U( \. F" x/ W1 l&gt; array1.push('D')
: F! z2 V' l4 ?5 I79 E9 ]; [9 i. O" U# r
&gt; array15 R& H0 G3 E/ I# x% @
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']9 G: Z% C8 G# g: F% n$ `8 o
// 在头部增加元素
- ~; t% J5 ]+ }&gt; array1.unshift(0). y# O3 d8 O0 [5 R8 D* B5 V& u
8
3 a) \8 z9 H; c( M9 F2 x) B&gt; array12 D: g% A5 P' ~( k  f
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
5 f: ]( V: M# C
- h  |2 \% w$ Z0 u6 b//取最后一个元素" I. _, e; w& v* p% B
&gt; array1.pop()
: k* }, W# j' i& R. A; R) s'D'
% S9 {" i, i* u+ V, j&gt; array1
4 o# S' T% `3 v* G% F  \# D(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
& Q9 U/ I6 l( g! v* h//取头部元素/ U0 y% V# ~# M2 l. [+ {
&gt; array1.shift()
- I/ n( W* m! c! G6 [( |0
$ Q2 _$ G! v. d/ g% q' }&gt; array18 n$ D; p) H* t6 ]: _* \
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 L2 h# t; r9 {. u- M" i: `
6 s% s& j1 \8 G( e5 L: c1 c: L% J& z//切片, 从0开始顾头不顾尾. k2 @, x8 J" g* Z
&gt; array1.slice(3,6)
4 @5 d+ e- |; j(3)&nbsp;['a', 'b', 'c']
: K/ s' n  N7 x  t( U4 q  z// 反转
$ a4 m% ?8 r- e4 F% f2 y5 Z&gt; array1.reverse()
- P- s- g( k* T+ H1 ?(6)&nbsp;['c', 'b', 'a', 3, 2, 1]/ h* v1 f% Y' r; V! _6 }2 }
// 将数组元素连接成字符串# b/ v5 c4 t- ^4 _. R+ {/ ]
&gt; array1.join() // 什么不都写默认使用逗号分隔+ f, O: [! B0 J) n6 l% W4 v
'c,b,a,3,2,1'
% q$ x- l1 n  [' f2 d) |4 E( q* H&gt; array1.join('')
, a" Z& k) O& O4 N% q7 C1 o% j) a'cba321'
# ~4 S% @0 c% z% [1 w! Y&gt; array1.join('|')
( M0 w; y! |3 B2 G$ k# i2 |'c|b|a|3|2|1'1 P' R& O' M" \- z& ~- E
/ J9 Q" o0 |3 n& M1 Z5 T5 ~3 U9 U
// 连接数组8 G. l0 ^+ i" W/ q
&gt; var array2 = ['A','B','C']$ K7 P- N5 I" i/ j# b
&gt; array1.concat(array2)
3 C- [* g: ]* B9 }8 ]4 i: K(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']1 ?& b) V$ O, G

" z7 Q% C0 C" M/ m// 排序& Z1 y% c' d8 z3 Z7 N6 @! d  G) e
&gt; array1.sort()
& X$ m6 _9 o* r(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']: n9 N5 W$ e! N5 u/ r
: m" _7 `% ]! g
// 删除元素,并可以向数据组中添加新元素(可选)
% O8 |$ H; n7 R1 {3 A4 H6 Y4 U: d2 J&gt; array1.splice(3,3)  // 删除元素# u; S; X( l) F: N5 Q  F
(3)&nbsp;['a', 'b', 'c']1 g, w  p* c% v8 ^( y
&gt; array1, `: n8 [7 T) {5 m+ y
(3)&nbsp;[1, 2, 3]8 Y# Z) X  w& I: F5 B" ^% a2 k4 j
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素9 Y. g8 R) |/ u1 I( _: ?
[]' L/ p* E/ Q1 G5 z7 }- Q  J2 f
&gt; array14 B0 T- S$ {' O  o* l3 N
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']1 C/ S9 u  G* W2 o4 a+ n
! y0 Z3 F7 C4 W1 i' o) T7 G! K
/*/ G9 b0 J, O3 Q, u+ }7 e6 Z; v: J7 d
splice(index,howmany,item1,.....,itemX)/ a1 g0 W0 x* |" k1 j5 \
index:必需,必须是数字。规定从何处添加/删除元素。; C- ]4 ]7 i0 [, i1 m& J" f! a
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。+ r: y; F, R2 s+ Q4 i
item1, ..., itemX        可选。要添加到数组的新元素
, W, l6 o, C) b*/  G" t, a( H% h
0 J- d. f" w8 K6 f: ^( v8 ^9 }
// forEach()        将数组的每个元素传递给回调函数
! [' ~' d7 A7 A: a; d$ z&gt; array1.forEach(function test(n){console.log(n)})& G1 a. l& J7 K0 z& u3 J2 x
1/ U$ d: ~% }0 E7 Q( l! ?
20 x+ t, J% t# p: T# N. }
3: p1 O5 [' m& t
A/ H0 d1 i1 N6 }+ C& V3 R% W8 K
B
9 u  X  U% q! p% r: w+ f! N8 J C
  G& f5 _5 l1 f8 S% n' T// 返回一个数组元素调用函数处理后的值的新数组' L( T" ?  P$ T
&gt; array1.map(function(value){return value +1})3 M! t% B4 C( r/ Q' x; A$ r$ M2 Q0 X
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
3 Z% g3 e: A. y( @0 l</code></pre>
1 ~2 l- Y4 q- V1 a- u<h3 id="24-运算符">2.4 运算符</h3>
1 }8 z4 J4 U  u# H' H% Z<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
. {( N% U1 k* J/ c<p><code>+ - * / % ++ --</code></p>
. z4 x6 E( _# g5 i0 T! M, @+ k<pre><code class="language-javascript">&gt; var a = 6' O6 B+ n" Y& r3 Q7 q
&gt; var b = 3
9 j4 I5 `" I" P: f. Y1 F% n5 Y// 加
- I( _9 g8 E2 j: o) G  u& ]. x7 i( H&gt; a + b
8 @# K6 V! E8 p0 e9 h, B( ]97 c1 s  A; Q) U1 _
// 减6 [" s% n) I8 o5 r* ^4 w3 ~" L
&gt; a - b
# ~7 v; Q; M1 l3- l, H: i4 I  Z  y) a( M! W; Q# K
// 乘: @, N) z1 R+ y0 S3 g2 E
&gt; a * b
8 ^/ G* }9 N  d18
# K( P7 p. g# P8 `2 N// 除
5 O8 Q4 u2 \+ c5 t7 Q4 }. n&gt; a / b
7 d6 B! J# V7 x( j2
4 D1 b, t2 H; e2 ^// 取模(取余)& e4 x$ |( w$ ~& ^# G# e
&gt; a % b6 M9 m: Q3 l( H
0* N1 _% J$ c7 ^/ }
// 自增1(先赋值再增1)
3 a$ E1 Q  U2 W7 @) p&gt; a++% A( x7 t. U9 I$ h" Z: C$ L
6
3 N9 P) Y# c8 z* |8 L3 F&gt; a
$ S2 V6 D/ |- ~2 ?& k0 |0 \7
1 R2 {3 L5 n8 `- V# f& s// 自减1(先赋值再减1)- R7 u, m1 h: C# M
&gt; a--
4 m( z) j2 I# E% F$ y  j7
# Q8 f' C* f: r&gt; a: _1 ^, R# k$ @( {9 B4 }# j: s. L
6# A  c) M5 {; ~, l8 K6 L3 @, |
// 自增1(先增1再赋值)
( S% o* ^- E& h! M$ f/ s3 s9 L&gt; ++a
, S' V% N  T1 L7 w7+ G4 N0 `9 ?6 L8 f) H3 A
// 自减1(先减1再赋值)
# j. ?1 f/ p/ W6 S- R- a) R( X&gt; --a' T; `+ g  Y/ r; C: H! N
6/ z8 G: l3 O5 ]: q. E" N4 o
&gt; a
7 n- m7 }9 y. J9 t: b) [5 m6
  z1 z/ X1 H* S4 H% Q, r1 X) Y6 X, G$ b' [1 c$ v
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
0 v. s- k" Z9 n, c</code></pre>: @. ]9 h8 L9 Z! A* p$ k
<h4 id="242-比较运算符">2.4.2 比较运算符</h4># ]% g3 `/ V4 P5 l; O6 w
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p># ~3 {/ K. V, v; i) ^% |3 K6 F
<pre><code class="language-javascript">// 大于
9 N9 \7 F0 Y$ h0 X; z: N  o&gt; a &gt; b% F. H0 p& P2 {) J7 z5 s% P
true
( d) _6 y# K( B! `# H6 T: h/ z// 大于等于% l4 v( z5 j+ L- r
&gt; a &gt;= b
- }9 L, U& v8 ^( h- w- C* \" atrue
* s9 `8 l/ k/ E  f6 ^& z// 小于
5 {7 Y' E1 k  W6 T& {' l&gt; a &lt; b  ?/ u$ c5 n9 G+ ^( w
false4 E4 c3 g" }% s; S4 s. _0 J% \
// 小于等于& C* ^, {. l$ E8 q: L( [
&gt; a &lt;= b* R% g8 ]$ x# L7 j" p7 z9 {
false* K/ t( A6 F" O' N4 v4 T5 l
// 弱不等于, C/ d! p" L3 ]; o) o
&gt; a != b
+ C6 W3 d) V6 {3 y* N; N) Ptrue
4 o/ `0 q1 @' l: ^2 v, ?8 W// 弱等于! k( g+ y  n/ R, C/ e4 |% q) c; Q
&gt; 1 == '1'
( m: u" U( f8 j3 s4 Y5 a( otrue) U) |6 |/ w: R3 K( v! r+ u* j
// 强等于, k0 i9 ~; e: E5 }' f
&gt; 1 === '1'7 D. Z0 ]% e8 C
false  a7 V0 E# l' z! q4 s: O4 N
// 强不等于
; H2 b# \. |( O5 e' G& y" [# Q, l&gt; 1 !== '1'# }* G' [, |! G. L* z+ j
true0 b0 a* P; k4 J/ P# T- a

8 O& u) W: T  u7 Q+ C/ L' y/*4 C! ^( D3 P) p+ v4 {: h
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误  s+ j3 I3 M8 S* D- J% k
*/
# Z, X. n, Y# c  ^6 o</code></pre>: g2 q: v8 l3 `' [" a1 H' Y9 s
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
3 D6 z; a' ~2 s<p><code>&amp;&amp; || !</code></p>4 y" I/ E, n: G
<pre><code class="language-javascript">&amp;&amp; 与  ?+ o( R3 G* B, M- R) G! ^/ ^
|| or
; E$ C9 y* T6 i0 t6 @( \! 非
! F2 M% b1 V& p( m/ P</code></pre>
0 F8 A- v0 K5 p2 q+ F<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
/ `) `6 d5 Q9 w4 i- d) v# n2 N<p><code>= += -= *= /=</code></p>
) N) T. `. D0 I, `, H6 G1 c<pre><code class="language-javascript">// 赋值" s" x5 x$ C3 o& k! b
&gt; var x = 3
$ b+ y/ Y- F" X, w' W// 加等于
! A! {% q* F* ], |& D( Q&gt; x += 2
3 [: w* Q, r( ~- T% x& x5
2 o# q$ e! S! p! E; X// 减等于
6 F( c6 s( Y" Z3 X% C5 p&gt; x -= 17 {  W* J! w- N, _
4) |7 \$ H; ]6 y- t" r$ |2 D
// 乘等于
) ^5 o* F) v$ p) r( L+ }&gt; x *= 2
3 V) m1 I' p  k8
/ y6 {3 t- h! g7 b2 r2 b) l8 p// 除等于& M$ M2 X. Y. E( v2 o
&gt; x /= 2
, \& P6 ]9 T0 R" \  R) j2 P% [' ?4
' m0 E; h" h$ z3 K8 ]</code></pre>- p2 \  w1 v) p( r; C
<h3 id="25-流程控制">2.5 流程控制</h3>; V) t2 h+ [4 d' E4 h& T' v0 |" V8 d
<h4 id="251-if">2.5.1 if</h4>8 N$ h2 c1 k( t# ~
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
+ w. Q5 |1 G# m& T+ L
' O5 C; n- o% b6 x&gt; var x = 3
# d; y  n8 L7 ]% o1 _# x&gt; if (x &gt; 2){console.log("OK")}2 B- u% l, u; x$ D: G4 U
OK
; \8 M  Y& ~6 D: D3 _& _
( R6 B- g$ G  t& {- U! @6 G7 k2, if(条件){条件成立执行代码} 0 L3 y$ O. }# ~5 F# j& B
        else{条件不成立执行代码}5 @2 s" G' j% [0 N6 \9 ]
) }; Y) m: x4 B) c: S9 z
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}0 r3 k" n) H, F1 Y; U* z' E
'NO'
/ H& a! ^; C8 S/ }6 D% T6 U
& a4 {/ ?: V& U% H1 C, F* Y+ W. s3, if(条件1){条件1成立执行代码}
. X$ ^6 A4 [; o9 m2 u; X* [        else if(条件2){条件2成立执行代码}
9 ]$ V8 n+ J, l4 z( \    else{上面条件都不成立执行代码}% F* C0 r, Z  L0 M5 _
' G2 V* z7 ~+ b: j  m# \
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}2 B* _) j/ s# S1 H/ @
Ha1 A5 ?6 K# p4 O& u/ @
</code></pre>
. M  D0 e+ o% H, U& K* L& n' H<h4 id="252-switch">2.5.2 switch</h4>
/ W) L8 }( ~8 ]<pre><code class="language-javascript">var day = new Date().getDay();0 p) I  I$ A& h- F# g
switch (day) {4 Y$ M. U! C2 P- U5 z3 B$ s- y
  case 0:
+ U: E8 L' e; E/ w% O  console.log("Sunday");; J) H! @3 a6 b2 P' B5 }
  break;
/ U9 R/ F9 y# s7 I8 q, o  case 1:
, L1 J  x& s! N3 L/ W7 i" _" v  console.log("Monday");
, C6 W" Z0 I* s# E5 Q- r# N  break;) {' f( l, v: `4 Z& d$ e
default:3 z' C' I5 r6 C! u7 O, {2 J
  console.log("不在范围")9 \: A0 d+ R0 u- r+ Y  n
}! P; E) N% Z4 k/ `# @
不在范围, x5 o8 I3 M3 u
</code></pre>
. z% H( C* i" A& V4 U1 y<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
0 O# p8 b; R2 [0 I8 S: k9 h<h4 id="253-for">2.5.3 for</h4>: r1 m. W$ c! i" s! B0 K
<pre><code class="language-python">// for 循环5 c' b' A$ G0 D* E7 ]( i
        for(起始值;循环条件;每次循环后执行的操作){' S" q% N- e: v; ]
        for循环体代码
8 O, X8 }4 k4 `    }
+ @! q& w, c! W/ t+ j5 [) E8 I
( M: K/ Z+ ~% Q9 c+ _# G. T5 vfor (var i = 0; i&lt;10; i++){
* S- \. J9 |" B. ^! q. \) t5 F    console.log(i)
' C/ S! H. N( u0 i( A8 _}
8 N% R: S, @/ C9 P) Z! G        0. i' _% }' p+ B" t) z/ \5 u8 U
        1
$ g5 u( p: o1 ~- A+ h        2; r/ o/ G8 {7 {( u8 Q* b
        3
4 e( @% f: I- p        45 f% Z, x8 a( ?2 S3 S1 H; t
        5* n" _+ k$ Q+ c0 }
        6
. o* A, y: C: h" w4 T0 W2 X6 J        7& r* Q! G  N6 b% s
        8
7 [* m$ y/ Q8 g* e+ }" r% a        9
7 R  N/ m6 @" b' `. p6 c" v' k) @</code></pre>
- ]5 S2 a$ J1 l( y( T; Z' B<h4 id="254-while">2.5.4 while</h4>
0 V  e  A% B3 Z+ X8 C3 E* I; ]+ ~' {9 D<pre><code class="language-javascript">// while 循环
1 c0 _6 E# j! A* Z6 C% y3 z        while(循环条件){. @& e9 ^- L; H; y3 y
        循环体代码/ }) V2 |, a  q
    }
, f8 N6 q; t  H: i. m" S
( O; \5 V+ }, Y3 e8 o% n&gt; var i = 0) b/ d- N+ m  b0 d6 X9 ^
&gt; while(i&lt;10){
( b4 k3 b1 G7 \) m    console.log(i)
5 |; b4 _- Q. m+ ^    i++
' C+ N" u, s1 A$ y}4 n/ N' J& X7 y- w& T1 |$ X5 h1 `
0
/ @& V& I4 W/ }" Z, Z1 T2 {; y0 [* R 1+ g) L8 v0 J* i9 A
2$ L$ @: y2 e; D2 A6 ]* c; X
3
! D% ^. R3 L( F; O4 a) i( A 4/ k0 o1 {  P# F! W
5  C) g7 X; G* K4 j3 R8 b# U
6
$ Y: B! I( Q3 R6 z/ k 7
/ n6 D. V- M/ X' [6 t 8: g9 a; B& g; K' X- J! f/ }7 h3 d
9
7 U9 x& T" X- r1 m; j) ~& J; V</code></pre>  h$ a& c5 h4 @/ @# ?0 L
<h4 id="255-break和continue">2.5.5 break和continue</h4>. D" |" j) Y2 q1 |7 m' b# B) a
<pre><code class="language-javascript">// break
6 l' Z7 X% Z# z2 Z! Q4 G8 j& gfor (var i = 0; i&lt;10; i++){
" ~/ A5 a& z' A; n8 j2 {    if (i == 5){break}
& V4 G9 m. \/ m    console.log(i), W% u/ H4 u7 G- Q& L% u( s
}
" w: E! s2 Z5 Q- x; N9 C 0
, y" R" g2 N* r7 _. M- S" ` 14 K: N5 ?* s  \3 e4 o6 ]- h) I
2
5 r5 y+ k8 t9 r4 v, R  l( N 3* k  r" @7 d( R: c0 }: ~
4
5 T+ E2 ]  E# [0 v+ F: ~// continue# j: \; a) t- W
for (var i = 0; i&lt;10; i++){, X) o5 N( Q1 u% x1 A3 w. y
    if (i == 5){continue}
7 Y" c) `. w) y  q) o" b8 X    console.log(i)  r& ~% Z4 v! M9 C' q7 F" i
}
! s  ?; e% L5 v4 n# Y' n 0+ o+ ~' Q' j; ~5 S: j
1( p/ k& b6 R) ~- Q* q* h/ H: m& V' w
2
5 e- D% m% U  W9 N* [+ E  y& D  s 33 N3 H+ [4 H+ C8 t3 a+ t0 O
4" K, q+ e0 L2 M/ G1 F# f
6
  H2 l* ?4 K  m" M 7" h9 l% D0 V9 t. Y* B7 B2 Q
87 _* z# A" E& `) f. ]+ J' Y
9
( M8 P3 N+ T! g$ C# \0 m7 J6 J6 {
9 S9 P5 d3 ?& o: H1 }</code></pre>' U3 x" J4 E. P5 g/ @! E; C* F/ ]
<h3 id="26-三元运算">2.6 三元运算</h3>3 M! m" i- k* f% n& Z& H
<pre><code class="language-javascript">&gt; a( O" l+ d' k: y
6
; A7 Y* b+ n, t) A&gt; b
; E5 g) g9 x' Z7 O6 S. g! {; }3
3 m, Z8 z9 ?4 s4 L
7 [# x' q8 W/ ^7 Y+ ?//条件成立c为a的值,不成立c为b的值
! T3 M0 \4 }0 b6 s* @& M&gt; var c = a &gt; b ? a : b
+ G" Y$ s/ u6 V2 I3 _&gt; c+ @( X- Y4 r" ^
6
( Q' _  O  N4 ]1 P
$ m/ K( f' B6 O3 Q3 L  w// 三元运算可以嵌套
, u, y7 C3 X3 D% b</code></pre>
7 B( m, H: h/ Z* D<h3 id="27-函数">2.7 函数</h3>
4 w, \  e# \8 q" W- I: R& U<pre><code class="language-javascript">1. 普通函数
- a+ y1 G' U$ ]  R0 _- G2 [6 L6 |1 ~+ t&gt; function foo1(){
0 U- M% z0 W4 J6 ^  h    console.log("Hi")
1 D" m1 ^/ m! f}
6 x' m1 L& J) \) f$ d
3 X( F; B+ _, O&gt; foo1()
0 f/ L% j6 E2 W# L        Hi
  r# N% K& L/ a/ ?6 n2 F0 z2. 带参数函数9 g; |) f3 z1 g) ~# q
&gt; function foo1(name){
% s, E; C2 M6 e" Gconsole.log("Hi",name)
& s6 |4 D/ M+ _. e# ^  x8 U}" Y3 {+ X: @+ }- N" ]

. S, h- W- S9 @8 S4 ]& U6 H$ u&gt; foo1("Hans")9 n8 S  ~; D5 K$ U7 e! b+ c
Hi Hans
1 p& N' z  E, c9 b/ n
2 y0 Y- v1 l4 Z7 w5 f! U&gt; var name = "Hello"/ L; e( Q  n5 L7 [9 }: U+ H* Z
&gt; foo1(name)$ [9 m$ Y3 W% U# F
Hi Hello+ |% w, E# I/ E/ }, j

8 w, y3 a* y* t& T" q3. 带返回值函数
0 w) M$ i1 E$ s. o& H&gt; function foo1(a,b){
4 f; S; |2 m  H# J4 S        return a + b   
0 O& I6 b3 h- ]1 U* f}, l, j4 _/ A& ~% U7 ?
&gt; foo1(1,2)
* Y, a& S; y0 ~3 ?% u$ p) i3/ f* Z! i  [& C/ b
&gt; var a = foo1(10,20)  //接受函数返回值
# ?  ?3 g: x6 F9 ^) P+ Y* m3 Q&gt; a4 q" {1 C. ^4 k" R
309 Q2 Q1 Y6 }" o2 Z9 R

1 v! P* T+ g0 e7 M4. 匿名函数( i) w9 f- C+ Q* o- ]
&gt; var sum = function(a, b){$ e" }9 r6 D  _, l6 u/ R$ h
  return a + b;
" B7 F% p7 m5 R( d1 V}) l6 @( B& [# o8 h! r+ R; N
&gt; sum(1,2)
0 g, @! r3 b+ b& L  v2 j  c5 K39 F+ |& b2 N9 x, N: R! k/ L

! O1 p5 I# }1 K// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱% H) O( U0 V& d
&gt; (function(a, b){
. O% M) W. u; C9 ~# J/ [  return a + b& z& y% E( h2 l6 @& y* x
})(10, 20)
- W, P: y6 h: E" m! u30
# G1 M' n$ W0 o
0 s7 ~0 ^* i# a# Z+ J5. 闭包函数
* ~" w7 n% l5 o3 S, @// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
( V2 C6 y8 K+ Q8 t, O7 vvar city = "BJ") u2 K! c4 K$ G  [3 l
function f(){
: C; y, H2 R! B5 u% C1 z( m    var city = "SH"
7 {7 m4 ]$ T& W$ K( U    function inner(){
, d) M7 `# S* a9 p        console.log(city)) f" Q1 g. n% o7 q3 E! j0 q% a
    }
# h6 E1 Q6 q4 o* h- V1 V    return inner9 Y  G1 C; r7 p/ P- ^! ]0 e
}! t6 y; [' V5 Z0 D8 N7 b9 F
var ret = f()' C" g5 E4 p/ n$ @1 y$ a0 ~( v; U5 i8 M
ret()
5 i" w1 M; f- H* `) W  J/ ^执行结果:  d3 d+ R1 ]5 w$ u# I6 T+ \6 e
SH
  ^) d0 ^9 `2 x* k8 n8 E  Q+ L; P, B% [, Y  W
</code></pre>
: e' E7 j. J* Q+ o" d( B<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
3 v8 }7 H2 B5 G4 t<pre><code class="language-javascript">var f = v =&gt; v;9 q( `" F; z& Y1 @
// 等同于. L8 |8 n& O6 M( r: X
var f = function(v){
- s' u( F! n& w+ Y& Q: O+ [  return v;
0 h$ V' Q( m) w# h}
9 p8 d8 I( H0 [</code></pre>8 o* B( E" C  f( ]
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ U5 _( v" G3 l8 d; }4 _
<pre><code class="language-javascript">function foo1(a,b){
% I; {( @4 O! }+ S; x: J    console.log(arguments.length)  //参数的个数 ; J1 Q5 }* ~; A7 k
    console.log(arguments[0]) // 第一个参数的值
7 I/ e* b6 }& A; v* ]: \! F! m; z        return a + b   
' F, {$ [) i9 e, U/ K}
2 O/ I5 @6 k# ]$ Vfoo1(10,20)
9 V* M4 I) @( [2 m结果:
8 r( X% t0 K( u5 W- p9 J( r6 a 2          //参数的个数
4 X, q( Q# B) @2 c- P10        // 第一个参数的值. A- k( U9 d+ W4 ?0 x/ E/ _8 m
30        // 返回相加的结果9 X7 B8 f+ A( R- ]7 [" B
</code></pre>
# ^; u# c+ l$ y" W, l$ ^<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
8 D2 I6 j4 p) ~$ v' _<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>+ _5 y! O  f3 I
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
9 A1 I$ D5 Y0 F- _! ^1 e<h4 id="281-date对象">2.8.1 Date对象</h4>9 l9 v0 m1 Y1 Q" ]* R' c, B
<pre><code class="language-javascript">&gt; var data_test = new Date()
) W, {3 X% h. U/ h5 ?0 y' M; {&gt; data_test. i: ]( F  Y3 ?: g3 |! C; P8 H
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
3 g/ ^; U  g. b7 t: i; l& [&gt; data_test.toLocaleString()
7 a* B9 P" z( g, q; a'2022/2/11 下午9:44:43'" F$ z- d- w; w; [) x

  O+ P. g/ R4 A: ~% y&gt; data_test.toLocaleDateString()6 c, i0 B* `  {, s8 U* e
'2022/2/11'
; G7 q- x' X; @/ n3 L& s2 S
0 T% Y% |5 o4 W$ j1 u1 S2 s&gt; var data_test2  = new Date("2022/2/11 9:44:43")
, `- D5 E* M! I/ H" a% N. O3 K&gt; data_test2.toLocaleString()7 Z2 {# ~( N/ b
'2022/2/11 上午9:44:43'7 W1 Z( t2 d( R5 B% u0 z, Q8 D
& D- g$ g' D. T% Z- F
// 获取当前几号
' ^  ^2 X" M7 l6 l6 x/ ^8 t&gt; data_test.getDate()' T, K+ x0 \/ F* A1 _
11
* ?0 T* ?/ T+ d// 获取星期几,数字表示6 A- U: I. U7 O
&gt; data_test.getDay()  + w* M6 `3 Q6 ^1 W/ \( H
5
, B. D" m( G) p' s. L" O// 获取月份(0-11)2 }( K- j: m* t8 ~7 W( x8 A
&gt; data_test.getMonth()
& b# {" ?5 ]; N% O1- R8 s$ n, q) w" V- y
// 获取完整年份
# I, T1 P; c% {" m3 w&gt; data_test.getFullYear()/ f8 K0 I, k* n4 n1 y
2022
% I3 |! B& u. O" q6 }$ T// 获取时' Z0 J- @) c* z+ N! Q8 M
&gt; data_test.getHours()
1 W/ _$ C2 _+ e21! v. l, M7 I% `6 U5 q! t
// 获取分
% W# D; C6 j% I- g. K&gt; data_test.getMinutes()
( W% K2 Y7 [* f; K3 W# g44
/ J  z1 O4 T3 @// 获取秒
9 q6 B& ^1 V/ \) T&gt; data_test.getSeconds()
/ r* ~4 p2 z9 H  Y43
6 \/ }- P6 t" ]8 i& R5 _1 o8 [; |// 获取毫秒8 L2 N! C% T: W) n7 u1 l5 M+ l
&gt; data_test.getMilliseconds()
$ e: n/ Y9 A. t. ^5 i2905 S+ |! C" o! k* U3 p) a
// 获取时间戳
8 w; A" H2 r: o0 Z& }- r, L&gt; data_test.getTime()
  [, I/ a- x% }16445870832900 U6 ]# b: u+ ^/ s: [& @
</code></pre>" V1 Q( P* a7 I% n# T# o. W- S' x
<h4 id="282-json对象">2.8.2 Json对象</h4>
  D- k, c5 R# @4 v5 u' h4 o<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
  h9 z1 @  x7 H/ V: gJSON.parse()  // 反序列化,把JSON字符串转换成对象' T2 Y# r/ |% t9 }' P$ P# ~7 q

+ W: n* i/ l: I% U9 s  w3 }// 序列化. f* a$ G3 H( \5 M* C
&gt; var jstojson = JSON.stringify(person)
+ i% Y" E  R4 h&gt; jstojson  9 b, V6 d- z, w7 u' n
'{"Name":"Hans","Age":18}', F$ T2 v% p2 u6 P/ c

" o# z" c! b+ G9 F4 f) m% g" |. \// 反序列化
- C  P0 Y  F" F# R$ s9 ~; y&gt; var x = JSON.parse(jstojson)
4 g0 X) \2 C' T; y/ {3 ^% a2 C&gt; x# `/ d6 J/ N! l) w' S! a  J  [
{Name: 'Hans', Age: 18}
6 E- o8 C0 N5 X  K+ y: k5 V. r&gt; x.Age& R" _& \+ j) m8 W* C
18
3 I  \- Z9 J8 ?0 ]' G: e</code></pre>$ {6 j" ~- g, y; ^; B& L6 z) i5 }
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
. z$ i! v3 s5 F% X0 P. V; [* ]<p>正则</p>
3 i% r, ?* c/ X) I<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
+ {8 u# J2 y7 ^&gt; reg15 n" Y. `1 H  n3 F0 a; ~# v; z
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- H4 A% @5 O- _' k) X) N&gt; reg1.test("Hans666")
$ k- x5 b: \6 `true
+ c: s6 A2 I& k5 F0 U; Y- w; |! }- E+ ?" H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
# s' W8 C) ?5 P' d$ ]&gt; reg2
, S$ Q7 V6 }0 [8 J# B6 p/ ~/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" l8 c- B5 L0 B% o/ H, H- N&gt; reg2.test('Hasdfa')
7 s$ [6 u# F1 {, k5 H! X  dtrue
" `2 p- e8 t' y6 m0 o" S1 R, Z0 f# P
6 u) u1 N5 J5 ^+ S2 H) t+ `+ {全局匹配:
8 i- a5 r1 j$ k9 o&gt; name% D. ]& C$ `5 g" f. Q  W& K
'Hello'
( `- ?/ f4 c% I. D* V+ F# m2 E2 f&gt; name.match(/l/)
, ?6 W: P+ d$ C3 @9 z['l', index: 2, input: 'Hello', groups: undefined]
0 ]4 W% p6 u6 t% u4 C3 U5 `; V1 H$ R  @7 j9 Y
&gt; name.match(/l/g)( w7 _  r% L. i( P4 L
(2)&nbsp;['l', 'l']  R4 D4 B6 _8 c; x# E6 S+ t
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
! c( |# I9 e, W
& K. `" m" z/ M% ]) t: P全局匹配注意事项:- d0 c$ o& V: q% r8 c& f
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
& n7 r% ^1 Y! S3 z# U: v) L% I&gt; reg2.test('Hasdfa')
% f/ T9 N# ^- c) m+ x9 `true
" C: d) c  V0 Y3 Q&gt;reg2.lastIndex;2 d2 l: ?. W: N3 Y+ D. e0 \
6
2 I8 K5 L4 A0 }" I. w  Y5 y0 J$ o&gt; reg2.test('Hasdfa')% i3 V# U& \& s5 ]# `% r( ~
false* ]1 {" ^) V" A9 J; [
&gt; reg2.lastIndex;+ v" t7 @6 W$ U: y
0
& ~* K& }0 |! [3 e&gt; reg2.test('Hasdfa')% v+ X6 P; l% y7 s0 }
true7 h  {3 Q5 q' f- Y1 H* y* o
&gt; reg2.lastIndex;4 l# j: R# I8 t
6' M" V* F; `9 y- D
&gt; reg2.test('Hasdfa')
8 m/ f# z4 _* q7 ^0 h! s, `. ffalse$ t% @* f' {/ l9 v
&gt; reg2.lastIndex;
4 E" }. n# S, ]( s2 z( e9 t+ |+ m05 [$ [2 h( H8 J, F
// 全局匹配会有一个lastindex属性
+ }( H& n0 [8 z' M* c0 F' I&gt; reg2.test()) C* H2 c" k; h' y/ C. S
false/ ?; Y+ p' J- m! V
&gt; reg2.test()  a9 Y- ^/ C% h& l: t+ k! s3 X
true
0 W% u6 J  v, m" n// 校验时不传参数默认传的是undefined
5 P. p! J# U) Z- x2 i</code></pre>
# v% G( z. H' V- A( x4 O) U3 x<h4 id="284-自定义对象">2.8.4 自定义对象</h4>5 U/ P/ t4 r3 ?! _) w* u0 a1 d
<p>就相当于是<code>python</code>中的字典</p>' O8 |$ @' K4 J' \
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}1 w! n* h( P( g. Y4 Y" m* e/ z
&gt; person1 a& z$ T8 C# ^7 o# F
{Name: 'Hans', Age: 18}
9 q# A/ A, N. t&gt; person.Name
! ~# B& R( Z" u* g7 V: S- c'Hans'& l! Y  E3 j% o" _0 N, p& S# \
&gt; person["Name"]1 Z! P& ^: D( k. S
'Hans'$ \+ W  m2 M7 @0 I/ ~6 M) f' y3 ^
8 @, @0 n6 _: o- ^6 t+ s
// 也可以使用new Object创建
3 M1 O% g6 C$ S6 f&gt; var person2 = new Object(), W# j! ^% O' P% c4 @4 c, D
&gt; person2.name = "Hello"9 g6 D+ J2 {9 |6 }2 d/ p8 R
'Hello'
$ B5 ~4 X1 h; P/ E* b: \&gt; person2.age = 204 K  C" P' B0 j. c" d7 }. |
204 C# ?4 Q# h) H8 C" A5 n: u  w# e
</code></pre>/ W) F5 {7 ^* i% `+ p$ E0 O2 {
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>6 T' j! ]- o! Z" r- e2 L: V  u
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
2 Z' N9 N" V- [; |# B<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
" x' Y5 A9 T' c# ~$ j+ X5 @<h3 id="31-window-对象">3.1 window 对象</h3>
+ P$ @' v, e, q/ h. D. v- `3 D! W<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
: \& c4 Q" a% M0 a' |( P" G, f<pre><code class="language-python">//览器窗口的内部高度
' o% G* q/ z+ v% a7 r- y5 _1 i' P& Pwindow.innerHeight
8 i* t+ @0 ^3 N6 [706; C" Z0 O' n# M- G9 o7 {
//浏览器窗口的内部宽度# v7 q; w) Y0 r* W2 ~
window.innerWidth0 u8 |% s, X2 I: f0 Q) I
1522* @4 h8 g+ u$ j( `- U1 i' R# \( {1 x. Z
// 打开新窗口
; Z, Y+ v6 _) D; I4 U& zwindow.open('https://www.baidu.com')
1 }1 O. e2 h: [( W0 I  `0 C  g( KWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}! S0 d2 J, D& a4 c4 v9 W% _
// 关闭当前窗口
* O; B  v+ Z" t; U" s" Awindow.close()
% i' N7 P: O, z3 Q( b0 y* z//  后退一页
/ P0 t3 c5 S5 {4 e% T8 |' dwindow.history.back()
( @, M. I) Z& [4 U; e, e// 前进一页& d' |* g( m; e2 ?3 t3 y  S
window.history.forward() ; V$ s3 u0 x4 l/ Z6 ?
//Web浏览器全称
, o2 j% i$ r+ v% [/ I' Ewindow.navigator.appName# P: |3 R$ z- ^
'Netscape'
+ w3 b$ p- t8 t" c7 t% |// Web浏览器厂商和版本的详细字符串
+ |9 K9 c. B8 ]5 O  s+ Vwindow.navigator.appVersion
% x2 Z. t8 }6 s7 B0 p'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'  w" s1 X6 W" T' K) e
// 客户端绝大部分信息
: {& I" z8 h' P. `+ q  G# Mwindow.navigator.userAgent' V% a- i; g% d5 }" e9 `
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'! q; H1 A% w% }/ R2 L) N
// 浏览器运行所在的操作系统
( e  ^2 W1 b: H2 n& m/ awindow.navigator.platform) W- I/ _! Y/ b5 u/ v- v7 d, ~3 C
'Win32'( a; e  |  B8 z. l5 g1 i5 P9 P# v) `
  a3 j" G" k" E# p( Z* P0 g3 ^
//  获取URL
1 a8 k3 I* M6 a) Z. Qwindow.location.href2 ?# q# u0 M. k) Y4 P8 T
// 跳转到指定页面
2 S7 a! F9 {5 L2 @: owindow.location.href='https://www.baidu.com'
; }5 n4 e' \+ k2 ?7 ]; c6 m  u// 重新加载页面
5 F4 }: \0 e& o5 `window.location.reload() ; R* g+ f" o* }# R; D8 y4 q
</code></pre>! |, {$ f% m. `9 f& ?/ q; V
<h3 id="32-弹出框">3.2 弹出框</h3>
5 O6 Q8 M, `. I) S( p- a8 k<p>三种消息框:警告框、确认框、提示框。</p>
# D! ?+ j# j! r. @) `1 h<h4 id="321-警告框">3.2.1 警告框</h4>3 W) J* D7 i* R
<pre><code class="language-javascript">alert("Hello")! u. v% I) r- T+ I& c
</code></pre>, t; I- `5 {! R6 e, L: m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>4 v& R7 f2 @% f3 K. u( G
<h4 id="322-确认框">3.2.2 确认框</h4>' v8 I4 J0 w% S
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p># R# \! W! F/ Y2 L$ [7 F: Z1 G
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
* P0 [) X5 |* [true
3 [% X; l9 V# q8 c3 {5 s% r&gt; confirm("你确定吗?")  // 点取消返回false
, }& a9 J0 I$ e! L1 qfalse
8 L% ^; w3 Q, V. i7 I' _</code></pre>
6 y& O5 b* \2 x% K<h4 id="323-提示框">3.2.3 提示框</h4>. d" N5 E- Y& b& {
<p><code>prompt("请输入","提示")</code></p>
$ K# o8 u6 J+ Y$ `- L<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>% d% l6 q+ U- J* m1 q1 B; P
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
, G- M; Y& Y+ n" o, Q<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
% S% e0 u: U7 h# a<h3 id="33-计时相关">3.3 计时相关</h3>
$ w  o0 q; k/ z# [, w* z<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
4 ?2 Y8 y8 m+ Q! b3 o1 N# c9 g<pre><code class="language-javascript">// 等于3秒钟弹窗% b! C$ s2 G# c0 d' T
setTimeout(function(){alert("Hello")}, 3000); [$ S+ p4 T7 b/ _& N6 y2 a

; S, _% a  Q/ x1 dvar t = setTimeout(function(){alert("Hello")}, 3000)
  V# g9 h4 s) \
8 a& C! m  G+ i" g; Y// 取消setTimeout设置7 P: }: U* ^  R
clearTimeout(t)0 L& z' H% s2 K) f, f
</code></pre>6 O* M0 f% r" V5 J7 u  K' [) [
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>( o4 G; h- S  O
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
/ B& s8 o: V& d" c- P( N3 L. T<pre><code class="language-javascript">每三秒弹出 "hello" :
3 A! _; w$ h# Y, YsetInterval(function(){alert("Hello")},3000);- P8 k/ C5 w; B5 `1 o+ j* G
</code></pre>
' ^* Q2 ]: }+ h: R* i5 z<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
% O' f, ^6 Q8 f4 o<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);& [; u1 M6 u* H5 H
//取消:& Y/ z% o+ o, M$ @0 J8 L
clearInterval(t)# j" v" }% p7 Z: N% L6 r
</code></pre>
6 p& ?4 o2 p  O# C5 F1 W% i2 s) t; O8 @  j) V
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-1-26 17:35 , Processed in 0.074294 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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