|
' e) y+ c Q Y3 U
<h1 id="前端之javascript">前端之JavaScript</h1>
0 K; e) ?7 R* f6 |5 B U- |<p></p><p></p>
2 R T' B0 q% d7 R2 w3 {3 q<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>5 l8 B8 E: ?' h
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>" d) \! V# n% |* ^8 \
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>* g3 [) r. G/ f: w
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>' x- P& M0 l7 k
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>1 W0 J" P) ?( B9 r1 O
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
9 x4 f+ C b2 R<h3 id="21-注释">2.1 注释</h3>
2 X' G6 _. F) c, t) A. X1 q<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
. F* O- J& |5 t# z8 m( N<pre><code class="language-javascript">// 这是单行注释- v1 P g) t, D, \7 S5 q
; \6 I) s0 Q' B3 \. o/*0 l9 U. p0 k4 t x4 P1 g7 w
这是多行注释的第一行,
4 s- G) V+ H7 m0 M; b1 p$ h这是第二行。
5 F+ k; ?- L( y7 ^; e2 X+ a3 y6 d*/( B1 J i+ v6 b& }$ V' G7 k {* Q
</code></pre>1 c7 u! x. U# K
<h3 id="22-变量和常量">2.2 变量和常量</h3>. Y5 M3 I7 H, O' p: _4 k
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
$ n* H8 Q6 c; |# i3 f% y6 s/ d<ul>. d, Z$ I" f2 F; B; J% C4 h
<li>变量必须以字母开头</li>
: V3 E) O' _: H# t<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>" a% x( I4 ?+ w
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>/ k N+ V: q! u( \$ m2 q
</ul>$ h; \' \8 h1 ~' W& \
<p><code>var</code>定义的都为全局变量</p>
, i e: l6 x. V9 s<p><code>let</code>可以声明局部变量</p>) z' }' L8 C4 j1 v0 A$ A _( S# s
<p><strong>声明变量:</strong></p># R2 Q5 L. A& ~- `+ f3 H$ X
<pre><code class="language-javascript">// 定义单个变量( u5 Z$ R: {- A" e2 s
> var name
/ y) h. w1 Y2 A> name = 'Hans'
( F- Y& M; n M//定义并赋值9 v' O8 q% R( M: m: q% h
> var name = 'Hans'
; s a$ a& f2 I) w6 D9 W' c. q> name
0 z0 ` G5 _9 R( ~4 F. \" `% n'Hans'
" l) h7 b z& N% N* X6 Q# z
2 N# r4 h8 F: U// 定义多个变量+ i' ^; L% E$ N" l. H$ q, h' p
> var name = "Hans", age = 18
$ j8 N% G* @5 F, C% X9 a9 N. k: e> name
. s. x8 B) C: g'Hans'
* b3 Y8 ]8 a( ~6 h> age
* q- i- F) ?: F18
. z* q' w0 j7 j( X
' m3 f8 n8 U1 R- k0 a5 C' w//多行使用反引号`` 类型python中的三引号: a+ k4 O8 L. K* O* z
> var text = `A young idler,+ l+ J6 @7 o9 Q. b; e% a* v
an old beggar`
$ c; w, l. [( c8 l> text
0 M- h6 q5 o! w7 B9 ^+ }- H- e% u! `'A young idler,\nan old beggar'
" h) |/ A: C! J, z7 f4 q8 A/ A</code></pre>
6 w- ^& X: C5 w0 Q& G y0 V7 ]$ g<p><strong>声明常量:</strong></p>
% b" B) d: D% y$ A4 C$ T; F4 i3 i. q<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& v( E2 z8 [; ^8 I% `0 f" K<pre><code class="language-javascript">> const pi = 3.14
8 J# F. O2 C2 g+ H% r3 f, m6 X+ v> pi( A' B% `9 y* x, I0 N3 V
3.14
/ Y+ {; {- F( G: I3 N: L; f> pi = 3.016 l& Q S) S6 s% v) \7 {! S
Uncaught TypeError: Assignment to constant variable.
5 H+ u* _. |) h3 X+ i6 {0 j at <anonymous>:1:45 D, a$ _2 |- d/ ^4 v. |% Z" b* B
6 P7 T/ Z: n! T3 V
</code></pre>) U. A" ]1 S, o0 q% ?4 i5 F
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>. o) e! x9 z! ~. n
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
# H/ P. `! y& J& [* z7 Q: {: f<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
) j4 ~- L# {! k6 j( K: ^+ D4 b<h4 id="231-number类型">2.3.1 Number类型</h4>
( z g$ U3 i5 v+ |! i2 ?- A<pre><code class="language-javascript">> var a = 5/ N* ?4 |$ ?: d- t' r- ~
> typeof a //查看变量的类型
( `/ G# X+ R5 K, P# [number- W. k- W/ k6 p& w' E- b
7 G' _% `8 }: w
> var b = 1.3/ A0 B+ O6 t* d/ U2 c& S4 q) [
> typeof b8 x1 s, L% d7 q0 i
number0 o2 _ i+ W% N; l. b4 M0 l! }
6 T& x0 s0 l" ]) f" c/ [
// 不管整型还是浮点型打开出来的结果都是number类型 e& C) h1 j1 G/ A5 T; q+ l4 \; I
& ~7 l4 I- p4 j- t; R; b
/*% V' k: X2 {! \% O) M, d$ z
NaN:Not A Number* s5 a" F% D9 e4 n
NaN属于数值类型 表示的意思是 不是一个数字( l6 i4 K# f7 ^: O8 U
*/" \; e3 F J# L& I4 T
6 V# w' L' {: ^; ]0 d6 {- NparseInt('2345') // 转整型" C' y1 @8 w$ f. s; ^" e0 ?
2345% J4 O- K' ?5 x
parseInt('2345.5'), T7 F) s I# x; _, ?
23457 y7 M+ w- U! O' j+ [ g5 r0 Z
parseFloat('2345.5') // 转浮点型: w5 Z' Y3 ~# b# X* v. @8 ~ {. I
2345.5) X2 R' t: e# q# w2 u& Z
parseFloat('ABC')
?2 ~, X9 W6 [0 T, lNaN. Y2 [1 \$ P& i1 c3 h6 p
parseInt('abc')
% {( I9 T3 ^, q! g) XNaN
& ~* R3 i* [5 k</code></pre>
8 D9 t8 ^. e# t1 W0 [( v. z<h4 id="232-string类型">2.3.2 String类型</h4> o' h$ ?; g9 {; ^
<pre><code class="language-javascript">> var name = 'Hans'
* W! f( B; R; T: ^> typeof name
" I3 c9 @! n# g; M6 ], B'string'
2 ^: ]" Q! }& f: e, {4 G; } D& `1 ]$ ]7 D) ]) t2 b
//常用方法+ [- \. H/ g ]9 y* [- T$ X+ o
// 变量值长度
6 P% Q& X$ {- H& a2 U) n> name.length
: l3 m8 d4 s3 t45 r0 i; b3 I" P
// trim() 移除空白
5 g) E& ]4 W" ~# k5 L> var a = ' ABC '
8 m3 a. u& P$ C/ i& _, F* w> a8 W( ]! {; A9 f% W3 e, x# V! h' h: w
' ABC '
% b* G5 b2 I6 m1 ]> a.trim()
6 B I4 l- x, c: e) ?. `'ABC': _! F9 x' K- f/ ]
//移除左边的空白
. C; y! \; a/ P1 G3 U% t# w( R> a.trimLeft()
8 A% M6 }7 d. N2 d6 E9 z5 ?" Y'ABC '
* o. Z* ` [- j1 {$ {$ [- D( X//移除右边的空白2 D4 z9 z' X5 J ?
> a.trimRight()( j) Z% d5 }. u. }3 v% }; A
' ABC'
0 L9 y7 M7 H- z4 x/ V- a
! F& K' h% @7 V l0 U//返回第n个字符,从0开始
( a0 v( x+ J _3 ?9 S) s& q> name
0 \. \* D" ~, Z% ^) K* E'Hans'
$ e* J: {" @/ c' g: S7 y> name.charAt(3)3 v q+ n/ ]9 K; s1 z
's'
( D$ c2 b% I7 t. r [ J9 m> name.charAt()
* j4 I1 i# f5 _3 ^( ]+ ^'H'! d; O/ o6 H! e- j( Y6 ]7 S; `
> name.charAt(1)8 d m9 G$ ?, |5 i$ t- Z+ C
'a'
/ u/ G8 b* ~3 {. }% h! I/ e1 _& d0 C
- G0 }7 r! o- e// 在javascript中推荐使用加号(+)拼接8 \* x. X% O) I6 z% K
> name9 O/ S/ C. Q; J2 d4 ?5 J, {5 m
'Hans'8 }+ Z1 M8 G4 L
> a
* { B3 n; K) t$ C3 ?' ABC '/ K* X5 ~6 p' U" Y
> name + a
4 [1 W. P6 c4 v7 D5 L'Hans ABC '. T& A6 {: I6 X1 l6 T1 b4 _0 O
// 使用concat拼接
1 t) D& P" [. N6 F6 z+ }> name.concat(a). B6 O4 a9 \% M3 C0 S( [7 _
'Hans ABC '1 S8 G+ q* v" k( Q5 P/ f8 }
- J& J, y: P5 @$ z//indexOf(substring, start)子序列位置
$ I; w7 @& O" {# G8 T" v. Q/ C' i( g) A' ?* ?6 y1 M; k
> text
% l- \# \8 `. c) V'A young idler,\nan old beggar'+ d7 [. C2 ^1 `" X; U
> text.indexOf('young',0)
; h, y0 W" o6 H2 L9 L20 s) j2 h b- A1 ?' P5 u7 s
4 I2 c B% y# W9 E7 Z2 x# j; U) m
//.substring(from, to) 根据索引获取子序列
2 @) @, Y$ n8 b" T/ B> text.substring(0,)
! }/ \& c& g. }+ F, f, X) i'A young idler,\nan old beggar'( p% H" \ s+ e+ u- n
> text.substring(0,10)
6 e$ F& a+ O ]3 _/ H) T9 S'A young id'' s0 Z/ C: f# d/ \! W9 F
0 p/ y; I* r* ~6 x7 U; s// .slice(start, end) 切片, 从0开始顾头不顾尾
3 ]5 C; I. ]3 z) v> name.slice(0,3)$ w* E: e, V ]3 w
'Han'
: g/ c% S# @; v C
+ v' f2 T, j5 J// 转小写
* m5 w4 u6 @+ a# P. ~5 [4 {6 d> name+ A8 w# b) v3 H: k
'Hans'
R/ O, j8 F ]! f, r9 T> name.toLowerCase()
5 B- M4 x8 P: s* i3 N'hans'
- [, q7 ?* e# R) i// 转大写
1 g: m3 d9 K2 g" h> name.toUpperCase()
0 k8 z2 S( y% C'HANS'" _4 U3 o. W7 k$ {. u: s& [# P# B
) c/ B, I- O3 C1 F/ }( b; B
// 分隔
* |2 Y8 o; X/ d$ v x> name
. \* A, \' k; g4 m'Hans'
: ?3 f8 X4 I9 a6 L( W> name.split('a')+ t% T" J Q& q
(2) ['H', 'ns']8 ~5 c0 F: b+ R$ U1 h' d
</code></pre>; j. g" a H8 L
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
3 u: k% B5 W3 D' b: Q<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p># {' c- o4 c: L& _2 W: C
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
/ g+ X% x) p- m- O<p><strong>null和undefined</strong></p>
% W Y7 q9 F6 E% T1 F<ul>! `. A( x0 ?& l* Q# J2 E7 W
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
4 J" C4 g8 i5 Z7 y<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
I2 H; y) c8 S' M) K</ul>
0 q# f \; ?4 G7 l; X v<h4 id="234-array数组">2.3.4 Array数组</h4>: _+ n# u4 b C* G- s
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>6 a6 k, q% @5 I1 _0 V$ C) N) e8 H3 B
<pre><code class="language-javascript">> var array1 = [1, 2, 3, 'a','b','c']
5 |' e8 F! Y. m6 {0 q> array1; b0 e, F, D1 @+ c% u; m8 ]8 ^
(6) [1, 2, 3, 'a', 'b', 'c']
2 P$ } ]$ V% a9 w7 W* s> console.log(array1[2]) //console.log打印类似python中的print# Z5 F; c" u3 y7 ~" ^
3
2 P3 Y* W/ [$ c) j# l// length元素个数. a6 f# h( g* {8 w5 j8 {; j/ d
> array1.length
4 j* d2 O- [4 F, i @& t2 ?2 w9 g* Q3 p6. I! ^' `" k: a, M
// 在尾部增加元素,类型append
$ J! N p4 m- @; V" d> array1.push('D')
. u" H( U) [3 Y& D7
, m5 C8 M& m8 t% ?2 l- }> array1
, s% ~9 Z, [& c0 Q3 D0 N(7) [1, 2, 3, 'a', 'b', 'c', 'D']- L% C' @* u/ Q, J% V F
// 在头部增加元素
U/ W! w4 x. U! Z$ v> array1.unshift(0), V5 ~5 F/ B# @5 }
8; A4 T( F* o1 N" Z8 i$ P
> array10 O' x1 p/ k; L4 k0 A7 k
(8) [0, 1, 2, 3, 'a', 'b', 'c', 'D']
. V; O9 e/ @# _0 r" [1 f6 ~' \# `! Q# A. [+ B6 e. R) T
//取最后一个元素: I1 E4 j) E; E N2 _
> array1.pop()
. w9 S0 D, r; ]' I6 g'D'
; w/ S1 s7 d# \> array14 D' T. j8 _" d
(7) [0, 1, 2, 3, 'a', 'b', 'c'], O- W9 m0 A8 j* N% R5 S
//取头部元素
) o4 H7 Z/ D: S5 ?# H% | h7 N7 T% c> array1.shift()
# b5 V4 Y8 o1 a: O5 a0 r' x* u0
' J9 N2 g, p' }( O& X& P> array1
6 x& \5 o- y4 P, Y: s(6) [1, 2, 3, 'a', 'b', 'c']8 L/ d, |; a2 ?1 Q0 _1 ~
1 a* f) g5 D( U7 m+ P8 `//切片, 从0开始顾头不顾尾* j) f4 n7 u+ _/ A7 `, _
> array1.slice(3,6)1 t0 J% T: j: N# p' H7 h" M
(3) ['a', 'b', 'c']
. Z6 Z5 J! u- o1 a) T; a// 反转
! A' _& f0 \' F: j> array1.reverse()3 V0 M% C7 ~" J- u
(6) ['c', 'b', 'a', 3, 2, 1]
1 t, E; g6 L! \( B' m2 ?// 将数组元素连接成字符串
0 m4 j, M" g1 a5 ^; @' t' K> array1.join() // 什么不都写默认使用逗号分隔
0 V' P5 @' q4 d" N G'c,b,a,3,2,1'! w# @! _, y6 H0 d. o0 T4 V
> array1.join('')
4 u: u$ {" p; B) \'cba321'- n1 d- u% {! d+ U. m5 N: B
> array1.join('|'), @' ?, Y1 r* j
'c|b|a|3|2|1'
; R- {2 y5 t! G$ ^1 b5 e4 U
& I1 E# \: F; K9 t// 连接数组
! D$ v0 t$ O' u: V8 i, P: C> var array2 = ['A','B','C']; o) I! d2 Q# L! o2 q1 g
> array1.concat(array2)8 q- t: C3 a: z; Y5 @- H# \
(9) ['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
" J6 `( w% p3 j# V* q6 ]% P! E0 g+ o1 Q
// 排序
* J8 ^2 k/ {- ?. y8 w> array1.sort()1 E4 v' N- J, ^' N! x0 j v
(6) [1, 2, 3, 'a', 'b', 'c']
. [/ S) w7 ^9 I: i1 X w5 @/ D, E3 `: O1 L/ [# a6 G
// 删除元素,并可以向数据组中添加新元素(可选)1 F! q- b1 I# f1 o
> array1.splice(3,3) // 删除元素7 X3 @+ Z# j8 ^5 N0 l& a: t: Q
(3) ['a', 'b', 'c']
( i# R( c2 a1 x( c" K" x7 C5 T9 @> array1( S. A o6 ?- o2 ?) g% S8 B6 ~) l
(3) [1, 2, 3]6 T' H% }% u4 J9 Z7 K! |
> array1.splice(3,3,'A','B','C') // 删除元素从添加新元素 E2 W7 s0 |7 Y
[]7 U. G7 k: d; x% V+ r5 [2 Q
> array12 {3 B ]4 y& O [: l7 p2 Q" |+ c
(6) [1, 2, 3, 'A', 'B', 'C']
# {% @' V5 s( [+ F4 {
6 I0 i- j' W. b5 R2 M/ x" Q/*5 [6 Y* R L2 l* _' V" j
splice(index,howmany,item1,.....,itemX)
) C& F' J2 P: o6 T) W% A mindex:必需,必须是数字。规定从何处添加/删除元素。4 L8 w; w% s0 }8 F
howmany: 必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 D$ g7 D& Z S4 ]$ {item1, ..., itemX 可选。要添加到数组的新元素
0 H N5 q4 ]: R9 E*/% k+ d. ?, w Z. L# Q
, N' O9 D$ i9 r// forEach() 将数组的每个元素传递给回调函数3 {$ e3 T* ~6 L/ m W
> array1.forEach(function test(n){console.log(n)})9 G3 P, | H& o J; ] H2 H& c# }
1
% g. ^4 m: G& i X 2
3 [. j" I( S: t0 ?* \ 3; D( B; R) e3 h4 G( B
A
" W/ u4 a3 Z) h B
% ]" A/ ~. v1 m' N: w! p; H C; H% Y2 @+ C, F, Z4 |5 @& [
// 返回一个数组元素调用函数处理后的值的新数组: O) {- J3 ^% ~$ j7 S
> array1.map(function(value){return value +1})3 w& f5 f: J* V
(6) [2, 3, 4, 'A1', 'B1', 'C1']6 L& l: S0 O& H3 G- p
</code></pre>
: S, o C$ t/ a9 y! p; i+ B<h3 id="24-运算符">2.4 运算符</h3>
# O; {4 y8 a' S: ?5 L' i% e<h4 id="241-数学运算符">2.4.1 数学运算符</h4>; G7 J4 T% m y
<p><code>+ - * / % ++ --</code></p>7 Y# V# z" T- c4 a
<pre><code class="language-javascript">> var a = 6
! h2 Z5 X2 n) e( R> var b = 3; l q1 m) S a% z. l
// 加
( a( j4 J% Z2 ~1 s+ p8 b0 h> a + b" X R, P) k' S3 [2 A
9
6 A5 G! u8 Z6 o( p// 减5 L. O% P+ e x
> a - b
9 c7 }0 Y' \) o' y- o7 e* y35 c' U/ @2 \7 U
// 乘
$ a. n/ Q" w0 l5 ?; m# q6 L% M" X6 O> a * b
. m3 Y; @$ r" H" J, H& R18& ^( X, u, ^ g# @+ N/ S
// 除' e" G, [$ d: ?/ m1 |
> a / b
* e( n9 P5 e @. Q6 z0 }25 q7 `! p7 t/ n) |! C% i
// 取模(取余)
) a8 Z1 \. N- D9 I- L [& o> a % b
6 L b+ X% v5 {9 |01 ?; Y- j4 P- P7 y
// 自增1(先赋值再增1)( I! C: Z, ^3 \3 |: |3 q
> a++# D5 @. J; I$ C5 X; u1 B0 O- I
6
" q4 p( s. z% {# Y% q9 D- x- i3 u> a
# o8 u; F2 i/ I0 r; n; i A) [7
- V+ I6 @2 `0 B4 T5 n" }% t// 自减1(先赋值再减1)
$ ?/ {- F0 \) N' d: S& c> a--" ?" [/ D$ R3 L% U
7) c4 y/ y$ @+ H- z3 m* l$ w8 u0 x. w, S4 A
> a
; T y7 h: H- F: C$ Q; F$ X4 j: k6. _2 W0 D2 h, b( _; l9 x
// 自增1(先增1再赋值)8 i A) `: |5 B8 K! M4 v0 }
> ++a
2 t0 X. u3 j7 i# U; a- a" r73 s4 h; E) f' e/ k) n
// 自减1(先减1再赋值)' i6 D' H& h7 E* W. X
> --a
' M$ e: ]. V$ I* z$ J" ?; b' L! Z6
% I! h3 G6 Y0 `' z> a0 @2 E$ R0 Z j! F/ f" Y! @
65 K( z+ b K4 T
1 u' v1 E; E _* t, o" F8 Q+ F//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
: g1 B6 b0 n; [0 F: h: _. ?</code></pre>
4 }: P. P. }& N' }. M' h* |' ?" k8 A2 U<h4 id="242-比较运算符">2.4.2 比较运算符</h4>7 U5 V! T0 u5 _4 G" f& Q
<p><code>> >= < <= != == === !==</code></p>
% S/ ~3 d% p3 ?* A) Z6 T* l3 M<pre><code class="language-javascript">// 大于
( S- ~+ T! Q! x: J/ U7 n> a > b
4 T; }7 u4 G0 H/ Ftrue
4 a3 i( @- U$ p$ l, A2 a( k// 大于等于7 L6 \ ?6 I0 m3 U! t Y) [( z
> a >= b" z3 d c& x" B9 w$ P* J% z7 ]
true1 }5 f1 E4 I) m' m# j$ j- y
// 小于, L: j i5 M4 w6 q! ?2 W( l G
> a < b; x$ l/ ] x) W1 B
false
6 n, m( r! g# S- c5 G* r// 小于等于1 t2 J! z5 F7 C" _
> a <= b
7 Q# ~' ]$ _7 R9 z8 e7 |0 e, ofalse4 L( {* ~% B% h& w+ E
// 弱不等于
+ P( r# i j$ r: x: m2 Y> a != b- F7 Y1 B6 Z5 ?2 w, H# i; L
true
0 e8 e/ ?7 }4 ]- x6 _' ?- _// 弱等于
1 f; B h" d$ P, |9 |1 m> 1 == '1'7 M% O7 Z- V! n; P
true
& F5 f: e, U" {" i/ I6 H+ w4 g// 强等于& {( _- R: y% d) [3 V- o3 H
> 1 === '1'
/ ]6 B. Q, A- q" u- Z2 H0 ifalse% S$ \& L: e- ^( z1 ] s+ z$ {! G% P
// 强不等于; C( i4 ` c* B# d6 q
> 1 !== '1' d: D' \9 H$ S C
true
0 d. v' e+ O8 ]1 O b5 f
7 N! Q o$ d( {& z. C4 T$ b; z' {/** E% K9 f0 z1 m. D& |% |7 g
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误! D+ E) j; N2 g
*/
5 ^# c/ C5 _! A+ _& h& q) ~</code></pre>4 F1 a1 b- L% x/ `, O- _; O
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
' b" W @0 s9 B<p><code>&& || !</code></p>) m% T" W. v {2 j
<pre><code class="language-javascript">&& 与! c4 U, ]) Z3 {/ q/ v0 ]: g* D
|| or $ @( d- d0 ?0 m+ ~. m
! 非% F% [9 q8 Q" H1 @4 V! O
</code></pre>
" f+ @1 B1 Z4 n<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>5 o: h& j' x, N1 _
<p><code>= += -= *= /=</code></p>
# F" o; k E) N9 @ [- d+ x<pre><code class="language-javascript">// 赋值
5 a S1 g9 E3 M; g: N> var x = 3) u" G! o/ c2 R1 \! e% a; h
// 加等于$ C* [) B) b9 P3 y
> x += 2! o7 i) H$ ], q- |; U) O1 d
52 H( L7 e% @ X+ U/ ~
// 减等于+ ^4 Y- a4 G1 c' k2 K! q. H
> x -= 1& f3 U4 L, R x# u/ X8 [( d" s. ~6 S' t
49 C% h( L2 j1 a x
// 乘等于
' a6 X& \! v, l4 e8 w, b> x *= 2
3 e3 T$ J5 J' I; S* L4 P/ w87 l4 \' W/ ]2 }+ g* ? Y4 K
// 除等于
$ V! s9 c, A$ n" y$ ?1 o B+ R> x /= 2' b+ B: h% S" L# C: L: B7 L
4( r( x( o& A* A" x
</code></pre>( N: \8 @6 g B3 m2 V" y5 f$ `$ O
<h3 id="25-流程控制">2.5 流程控制</h3>1 j+ K4 ~5 ^# h5 R1 e
<h4 id="251-if">2.5.1 if</h4>
# Z2 A! z7 R! z" }& J4 }6 @<pre><code class="language-javascript">1, if(条件){条件成立执行代码}5 I+ k# i% Y! x1 ?
, c3 T3 b& ~& Q1 O3 C+ u> var x = 3, @' d4 @ v, i, _% @/ }
> if (x > 2){console.log("OK")}
7 z) A5 L3 |3 k e [ ` OK
2 g2 u& O( `# m! _
% s' B9 @- k+ j- g2, if(条件){条件成立执行代码}
0 [1 z1 S+ k# w( h7 d2 F else{条件不成立执行代码}" z7 Q) R4 K u
/ y7 k9 ?+ ]$ S) E6 l+ h> if (x > 4){console.log("OK")}else{"NO"}8 e* L6 B$ q* k+ E
'NO'
* h( I* s$ V! \' F) G
3 r" ^1 q j# q2 o I8 a0 r8 K3, if(条件1){条件1成立执行代码}
0 L% \% ?- y. c9 R: [) X$ z8 L else if(条件2){条件2成立执行代码}
& r2 ]* @; S+ M% K% b S, K2 _ else{上面条件都不成立执行代码}
7 p+ H- {0 @3 F. ~) _2 J
( W! B; a) t: I& x2 F2 G) I& K> if (x > 4){console.log("OK")}else if(x > 5){console.log("OK2")}else{console.log('Ha')}: D4 ^8 ?# C8 r* y& W" f3 z- P- t8 l
Ha
, b5 i9 V: r4 E</code></pre>* f1 A' B+ D5 w* U$ b
<h4 id="252-switch">2.5.2 switch</h4>
+ ?5 t- j) L* K% F* U<pre><code class="language-javascript">var day = new Date().getDay();: V. E9 T- r/ z' @
switch (day) {
! a0 c; R' C$ o" e case 0:
. }6 T8 l6 ~( p# \ console.log("Sunday");0 z! Q8 z0 \0 q/ t N) I7 |* K( r
break;
- I4 S+ i7 `# K! L# f* ]5 S" ~* @ u$ j case 1:
7 m% P8 G! h; v3 ?' I; X( I console.log("Monday");
* i. h# N$ _4 b# r$ p! q break;/ G( `% ^! t) p' d$ J
default:
3 J! s; x) e. X, s+ _5 v console.log("不在范围")/ w, x, s- {4 Q3 @( W6 U
}2 b; s0 }5 e+ T
不在范围2 n) V# O' T" g7 w* H1 B/ |
</code></pre>
: f8 Q) d4 @. R0 `<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
- r! h3 [4 o4 w1 a1 `. I<h4 id="253-for">2.5.3 for</h4>4 I0 L& e# G' h: A( x t' g
<pre><code class="language-python">// for 循环6 T# S& Y6 {& Y+ F3 H
for(起始值;循环条件;每次循环后执行的操作){( g* S& b2 i+ o. J3 V/ J1 z
for循环体代码
V/ Y& {2 x& _# M4 k: q }
' B* l- w% A( V5 r- ]8 L8 E; V* }0 W: b
for (var i = 0; i<10; i++){8 p" }9 c5 i. r' n$ }# Q3 x5 d
console.log(i)
& m) U* ^" ^9 N( ^5 k( l' q; X}
# j- Z# Y7 C- Z3 H; X6 t: } 0
7 {4 J# X) E. ~& v T/ H$ g 1
/ W. d+ Y$ j3 x/ R) {$ B 2
7 ^% m0 g$ Z- N9 c 3, U, y7 J4 t" I& D
4. p; F3 A; t* D: ~6 F3 `( q/ m; k
5 m) s$ T9 g* s* O" r
6
! V; ?' D) Y( z; v: V, s7 o 7+ {1 K% [, T/ ?: o
8+ D) m2 U3 S+ w. p+ y9 T/ v, P
9
: D) b& B$ h" l</code></pre>
5 Y" s6 t) y' a$ `4 f<h4 id="254-while">2.5.4 while</h4>- A8 c; z7 ^; P5 M2 V2 l
<pre><code class="language-javascript">// while 循环
" r, s" y$ D) Q: v B% S4 p- d while(循环条件){
( |+ A+ L. k+ U6 r. c4 ` 循环体代码
+ Z, D2 }/ h+ g) V6 z }
3 w& s9 u6 v' l! b1 }6 N9 V) W G7 z: N) d" W* ]7 A! U
> var i = 0
% b* T8 k+ E$ L. d5 i# q4 Q, `1 K> while(i<10){
$ n7 Q4 X! S: P ~ console.log(i)1 M0 `, D' u" s, S6 Q* x2 M
i++
* D% i9 e- v* k6 a. I( F4 r}
1 {! X0 [7 W4 }2 [2 `, }, \ 0
# z2 z) `( `) C 1
; w) B: i7 X1 s( R6 \ 2- k6 s. G- [5 ~2 j; ]9 H3 ^
3
3 S' |, [% ~! J2 Z ? w1 U 4- Q8 `% r% I: T6 W: c/ I: `# c! }
5
9 ]: z8 n7 T! M0 t3 W7 e 6# S$ N* [ g: P. B
7; v6 h- E6 R. i7 W
8) E2 {; n6 E5 H# w* ~ n+ R. ]
9) J% ~5 X T$ I" E- @
</code></pre>* d+ O1 B! X+ \0 w6 u# a9 I
<h4 id="255-break和continue">2.5.5 break和continue</h4>
" Q' o0 E; D0 ^3 ~<pre><code class="language-javascript">// break J; U, G9 w r: ^5 H( @4 W
for (var i = 0; i<10; i++){
; K& a* T1 H, Y4 ^. t if (i == 5){break}
' _6 H6 I2 _. g& a. u! b4 q console.log(i)
s; _! q( f# S' A/ I% A b}" o* G# r8 \6 V* r% K( u V
0) \8 _, _# |$ j# Q# c% n5 T3 z
1/ E! ^5 y( N* B" X* c: M: p
2$ o- q6 Q2 S5 r7 o( s8 N
3
! y: e u8 N" k$ m+ ~* a% v% c 4
I* R$ O$ l. L+ Q4 `3 U$ A8 F( g// continue
5 ]- n$ k1 u) n$ mfor (var i = 0; i<10; i++){% t7 H" P( P% L6 ^2 p5 W* I
if (i == 5){continue}7 d9 j6 K$ Y5 h% n
console.log(i)' N7 N I5 g* H+ ]
}- z5 i) w2 ]& Y0 ]& o
03 x- x! V" U9 L; K+ G* |
1$ o3 J9 ]( p8 p) S9 e5 s6 g5 {2 [
2
9 V$ y! I! p6 n/ Q9 S! V; ~/ P/ R 3
6 G* s" ]+ ]4 L0 \$ p, Z# ~ 45 G& C) v6 g0 Q- \7 Y- W: |
6+ w- `: n/ R: [1 D" m( U( v2 Q
79 q, W& ^3 h% K9 k' s8 @2 H
8
1 e! u9 {% L. h( v. ?, v# z) f9 ? 9' O6 W4 @; p# h2 t! K6 w$ i
9 N0 z- J8 i( x4 o5 N
</code></pre>4 _- Q' Q& k; p* z; M B
<h3 id="26-三元运算">2.6 三元运算</h3>
, A; `" Q" p. S/ ]% H9 A' H<pre><code class="language-javascript">> a. r$ q: O0 P" D8 A/ |
6
* o( r/ _4 j0 u6 o! J> b; [. H- R& \, L. e0 n0 Z# Y* {7 o/ j
3
2 s' ^1 z& t7 g. N- I" j
+ ^! n) L" R: {* L//条件成立c为a的值,不成立c为b的值2 t ^) w0 Q$ b* s
> var c = a > b ? a : b6 O7 K q, q# M- y* x. w
> c) t% o3 C+ I: \! \6 e
6) O2 _$ l5 F% l) }9 J, b" h" n
7 z: ? O4 d; ]8 L4 w
// 三元运算可以嵌套
3 B" V4 a) B1 ^1 t7 m! M$ M</code></pre>
: Y5 V( [1 h1 ^0 o<h3 id="27-函数">2.7 函数</h3>
0 @5 D V; `" }- x6 M, k<pre><code class="language-javascript">1. 普通函数
$ q0 i, A% I; o( v `> function foo1(){
# U* ]: E3 r9 M. y# ~: z console.log("Hi")& H. d, Z1 d: o& k6 F& S
}
! q" F) ~3 Z. V* |* H
7 y" [/ e* r& b8 a8 |> foo1() E. D6 n# ^) `6 Z; ^' J
Hi) M. R$ \& L8 v' H5 m) z
2. 带参数函数
- @7 ?: W# T. e6 J5 E4 N1 ]2 H> function foo1(name){
6 a1 T+ y: A0 x9 _8 Hconsole.log("Hi",name)8 O' q3 N% M. D+ S g$ x# h
}
$ }- j, r6 m4 T& D) L0 m0 Q: Z2 E$ G6 Z" Y3 V2 A1 f
> foo1("Hans")8 Y. y3 D7 p$ B8 j# A$ X+ @: @: @
Hi Hans
# q6 f% s( N0 P9 m( f. X- j# Q6 r, P/ E) @& ] V' f0 }) j
> var name = "Hello"
5 q) U2 i, r) {> foo1(name)
7 P; q5 e% C! ^/ X( uHi Hello# C" P2 @% O7 D5 {9 a L" D
) C7 J3 o7 F m# Z
3. 带返回值函数
_" l: @4 s: T! m. ?; P> function foo1(a,b){
% U& r2 ]4 ?( @" \1 M! Z return a + b
' |. ~' A6 Z% `6 _6 [}0 }. w! j6 V+ e2 B* M* X
> foo1(1,2)
6 `9 c T$ m2 g0 ]$ W6 Z9 B& w; |0 G3' @& I( V; S, S# z% k
> var a = foo1(10,20) //接受函数返回值
/ z* W0 s% W! X' ^0 |" [9 n: n6 ]> a
5 \, `! K) T3 p2 m7 C) H( b( f) y30
! H0 D5 B, j( b. e7 z: ^! T' F! T' y. o' g% x
4. 匿名函数
" o' R, z* d. e+ i- J$ c% a; c0 B> var sum = function(a, b){2 ]# G1 G# e) Z& g* l" G
return a + b;
4 G2 |$ K) ^" {( c$ J}3 B t4 D2 Y/ ?/ Q; p4 f* F/ @5 Q( ]
> sum(1,2)
5 `9 r6 @# Q& v& x. |3' c# M- U) N, C3 |7 O9 g+ ^
( A* a N# J# K( j- Y) H8 h// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱& ^3 P. T' l, S
> (function(a, b){
& H" n5 i, Z- T' L return a + b7 P( a) `% K: E8 z R
})(10, 20)
; M, N% w3 |- u4 E6 v; D A" d6 T1 ?( e30" }0 X7 X& l6 W* b/ N. S% \# R
3 x `2 M2 r& y0 G! S8 f5. 闭包函数7 |' |8 U+ s2 Y* r' F
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
0 B9 i6 X U& R' m, Yvar city = "BJ"
9 S6 ?4 A! m3 w; p; K# l" v$ t. zfunction f(){# l; S7 R% k/ U, r; A
var city = "SH"% T2 w+ f. A4 z2 x" a; Q' T$ h& o
function inner(){
2 c3 A7 U8 {, U, e$ d4 p console.log(city)
1 H/ ~: y* v3 m F$ |! ^. E }8 u8 j$ X% M5 ]6 |. @! c
return inner
# q/ M+ o) C8 J; s7 Q. p}; r6 i& v2 I$ n
var ret = f()/ ^! I- M8 g9 l& e5 e; b( O
ret()& x- B$ l) h) J4 K
执行结果:9 n2 K8 V* D* X1 ?7 \/ ?' F
SH- A: e0 L5 V3 P% E# F2 y- P) d
8 b6 {4 h5 x8 B2 _$ G T5 x</code></pre> f/ a+ a, J" ]- M
<p>ES6中允许使用“箭头”(=>)定义函数。</p>
6 L2 T9 V; E. S<pre><code class="language-javascript">var f = v => v;
5 Q% t( G) e6 a- x5 }% P1 D// 等同于 p$ _. L3 ~3 R) d
var f = function(v){
& g' H2 S: m% O& C' P return v;
; D9 c; N) H) J! P7 p/ j2 i; ?6 k}+ o: H6 h! K8 B. k8 I1 @. D
</code></pre>
3 B) Y \% c j& \% ~2 c6 V<p><code>arguments</code>参数 可以获取传入的所有数据</p>5 y# @$ n, b0 t' i; P
<pre><code class="language-javascript">function foo1(a,b){2 k; z$ z: d% t% _ O) ?
console.log(arguments.length) //参数的个数
9 T0 p" d2 X& I7 a" y; Z; J console.log(arguments[0]) // 第一个参数的值& j* q/ f7 }7 u' M7 ~ M; U T
return a + b ( m( X' x n2 ]7 P/ v
}
* r$ M0 j* D8 nfoo1(10,20)
k( N# G. ^7 {" N) s' I1 h- R! b结果:
! R, R: q! O Z; J8 [/ V 2 //参数的个数
4 U) T3 d8 l$ X10 // 第一个参数的值
/ S6 ~' ^, U! x) y1 X30 // 返回相加的结果
$ m+ \' q! F7 l! F1 c</code></pre>
( C# d# W+ V; w! a- m<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
1 N3 U2 ], c6 e<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>1 t0 _' r9 s& f* u
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
X) G7 Q" ?- ^1 D4 P<h4 id="281-date对象">2.8.1 Date对象</h4>
$ h9 [: ~# ?# E e$ m<pre><code class="language-javascript">> var data_test = new Date()6 f+ J2 g4 v. q
> data_test
* R" y( E1 z L# AFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间) _' F& s9 |% P
> data_test.toLocaleString()
. ]: @+ M8 Q$ y' R'2022/2/11 下午9:44:43'% Z8 [ ?5 J- W) g3 B& s5 i% |( z
; D' J) M/ o& u: }" F) r
> data_test.toLocaleDateString(), ?( U* v! f- l+ v
'2022/2/11'3 T" |" c- V2 L8 K% S( C7 |2 L
' D( z1 ^: a: V3 s; \8 n> var data_test2 = new Date("2022/2/11 9:44:43")
}# Q* k4 E! w; E- ?; j> data_test2.toLocaleString()
( N2 } J% R+ z; A0 i" L) d( N9 \'2022/2/11 上午9:44:43'4 R3 v7 H( i$ d6 z" P5 k
0 Y% l( L) W: v0 Q$ B6 [/ D// 获取当前几号
. S1 f4 O0 i5 _5 S. m0 g% @> data_test.getDate()
3 {; y% D7 I! I6 O9 @$ \11
( {3 Y- D1 b4 |" ^" v# n// 获取星期几,数字表示- j4 }# ]$ {" r. f( u( Y, c# D
> data_test.getDay() 3 [) @. R$ z! |
53 o: p5 c. o4 v5 o, E9 J
// 获取月份(0-11)& s% y8 O& L7 _ J+ G7 |' T. M8 g
> data_test.getMonth()
8 b; `9 I5 C* R5 N1
" W0 R4 |, @# L. p9 J! h. d, g$ h" o. Z// 获取完整年份+ s( Y' a* W5 c% Q3 l: R! W
> data_test.getFullYear()
. D. [" S$ g' L0 i2 l* c* w; j' H2022
8 D2 K1 [7 k+ r$ V/ R" ^2 G) b// 获取时
0 a+ U# a' e- M# ~4 Z> data_test.getHours()
0 w* c* A+ H) ~0 ` _21& J8 i; u& k* n7 `8 z& R
// 获取分. d( e/ P1 P! b( x5 J5 a
> data_test.getMinutes()" q; x; g$ X/ }7 T. x, m, z
44: ? o/ E3 Y2 ]6 o5 K& p, s; ?+ j
// 获取秒
6 G/ g7 H+ l' U% o& I# U> data_test.getSeconds()4 l9 a" |& Y/ H
43
" [+ p9 C- o% q( q+ [+ Q9 @// 获取毫秒/ l! e! \) q" F+ w% t) c+ V: v5 E$ \
> data_test.getMilliseconds()
; @" d D7 d- ?) p290
& i; v2 k6 P! s$ M1 {; H5 y* E! L// 获取时间戳! S" i6 P; }2 _( M$ R \
> data_test.getTime()' x( E* u' K$ a
1644587083290
7 G* @ ~7 h, A. k</code></pre> M* j' C" |4 r4 N
<h4 id="282-json对象">2.8.2 Json对象</h4>9 I3 t% @2 o! \+ P; b
<pre><code class="language-javascript">JSON.stringify() // 序列化, 把对象转换成JSON字符串
# \" M) P! b8 ?9 }2 b w% O3 X* H3 ^JSON.parse() // 反序列化,把JSON字符串转换成对象1 c j! t+ y, R
, H6 A( y. S& D; l// 序列化* o9 {# `7 |) @# R2 a
> var jstojson = JSON.stringify(person) 6 X+ p, X$ }3 D/ I& P+ X9 _
> jstojson / @- j/ Z- n1 u9 e/ i1 F
'{"Name":"Hans","Age":18}'( `) B5 k; Y' B' h" ?' B* F8 w) a
q0 e* `$ D0 f7 _- e+ Z3 M
// 反序列化/ q( |9 a7 u7 {* I2 N
> var x = JSON.parse(jstojson)
, V3 g7 S7 K1 M/ p5 t, |> x
9 ^0 d2 ~* `/ Z; _{Name: 'Hans', Age: 18}* Y3 @9 c& A$ S# o! F3 Z% m- Z8 c
> x.Age0 p; c' L+ C5 y1 G. H
18$ u: R- u' u1 y, J& R: _
</code></pre>; \5 n5 G$ i# p/ s
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
1 n* [' E. w8 n; i<p>正则</p>
~: a& a5 r! e W+ o: @7 `( H. Z! m<pre><code class="language-javascript">> var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
* n. w, M0 k3 D: ?, v> reg1
: {5 {! H( R! e& q6 D/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ L. q+ \' d% u( `! ?9 q
> reg1.test("Hans666")' j5 X& r4 V; e3 M3 w
true
3 v* F/ A% g' o6 x" x/ m0 |6 s3 Z8 W7 w' d0 G
> var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/ // 推荐这种写法使用 /正则/
; r* Y; c; T! o. H* a0 I# n6 g- E> reg24 X% ^# _5 i5 [; q0 ~# r: c# ~2 ?
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 v( y( ^' C+ H2 T8 _> reg2.test('Hasdfa')7 x+ z0 g9 _ K- p
true7 l6 E! \) e4 k+ L, n* a& K: v- [* g
# F" r8 v& R, V# E$ t
全局匹配:6 C$ `" `8 y7 Z
> name9 ^ d% k8 c& ?/ h) h7 S( o
'Hello'
( s8 Z' `; N7 d0 c$ R! ?+ r! I4 F r> name.match(/l/)2 T8 n% [* Y+ ?. A- W( s. b, o, H
['l', index: 2, input: 'Hello', groups: undefined]
; Y, D) v/ V: K: S, k
- p2 b4 E$ j# ~> name.match(/l/g)& o S8 o, [; J9 Y% h! m! @0 L
(2) ['l', 'l']
P# A2 o4 a H9 y: b- f2 j' R9 a8 }// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配8 `# w# E5 w; w8 w' f3 Z
# |% G- f1 c& H& b' s全局匹配注意事项:. x9 p0 S* J/ u
> var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g y' s6 l: l3 e. H9 p @
> reg2.test('Hasdfa')7 `2 c! @" g. i$ ?$ l H5 P6 {
true
9 r! }- k3 V/ \>reg2.lastIndex;
' A3 E+ a y! b& I/ X6 W2 O6
. {) i5 b9 U2 F. t> reg2.test('Hasdfa')* J' z; w; o- b$ ~1 ~/ u
false. h% U. U: m$ E' ^+ Q; M. E8 O% G7 ]
> reg2.lastIndex;
6 D' C+ ]( g0 [% M0$ w' @( p3 z# D! z3 e Q: H
> reg2.test('Hasdfa'). Q2 d8 ^# U# s) L
true" R& z. U* P( T
> reg2.lastIndex;
9 P7 O$ g, g( L# E) f5 [6
9 D9 w1 r9 b( D: i8 [. ~> reg2.test('Hasdfa')' [" L2 h) s: h0 @
false: J& k8 b B6 L# b: F: @, v9 _5 m
> reg2.lastIndex;
) b1 h# k' g# D7 X) @* H0
/ N* m# T+ j" O* [4 r4 W0 P9 j* e' {// 全局匹配会有一个lastindex属性
0 g G+ b8 r; B4 U% Q) D> reg2.test()
- B+ e$ H/ |) f `$ g! mfalse
- _, g/ r2 y; Z3 g$ c& _# d G> reg2.test(), x3 t8 p# v ^ x6 B& `; ]
true! f# @5 m( ] v# c7 m7 F+ P: ]
// 校验时不传参数默认传的是undefined
: q% |, |5 ?& A$ s$ { L+ X; k1 h</code></pre>
- y$ p3 W2 o; ?) @: a$ z<h4 id="284-自定义对象">2.8.4 自定义对象</h4>% E# x1 r% Y7 p+ d4 ]
<p>就相当于是<code>python</code>中的字典</p>* \% A/ Q8 B" j- q' ~3 ?
<pre><code class="language-javascript">> var person = {'Name':"Hans", "Age":18}. A" i) p0 | M0 t- k2 b% ~! p
> person) O$ a1 B4 j# z& X% f
{Name: 'Hans', Age: 18}. F3 q. ^1 ^3 ]. m+ }) e
> person.Name7 M8 F; r4 S# ^3 S% b0 l6 n7 Q
'Hans'
Y: O# _; k8 D# d: O> person["Name"]
1 y1 H9 F2 V4 {1 K% W'Hans'* C2 T9 R6 {. _/ z7 d
- H. p+ b, Q, H/ m2 ^+ f( {/ F
// 也可以使用new Object创建4 Q9 Y- L; Q* q# D5 v
> var person2 = new Object()4 D# f8 ~/ Q2 ]! n* l) K2 q
> person2.name = "Hello": \, s2 G/ g* z5 p3 q- q0 t! {
'Hello'
# E$ P5 z I& E+ l1 }> person2.age = 202 ~+ V: A7 J v$ X8 ~1 Y
20
) h6 E$ P5 c9 E( y; O</code></pre>( k+ `, S7 H. l) @$ r8 G
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>* M$ Z# ]0 S9 B8 K, W- _! b B
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
/ B& ~- d! k8 l$ b& q+ x- R, |1 \, m<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
' K5 m$ B# q+ {. }1 N$ d" _<h3 id="31-window-对象">3.1 window 对象</h3>
1 ], t+ y0 X- q<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>* Z# H6 U4 `# ~% C
<pre><code class="language-python">//览器窗口的内部高度
7 [: l% h. E( [ Qwindow.innerHeight ( R) { r( w y- }
7064 Y0 a$ S& ]" m$ P% O7 u- I4 ] ~7 t
//浏览器窗口的内部宽度. l4 p: t: c V& [
window.innerWidth
1 E" o" ^2 s1 P: ^& [8 v2 h, g1522
5 N, ^, X7 i* [; A/ i// 打开新窗口+ u7 k/ a' P H! U
window.open('https://www.baidu.com')- f I1 Y8 p/ ^% |. N6 M! c
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
% ~/ ?; `. @7 D4 [5 V7 E% ^& B0 {// 关闭当前窗口
# Z' G2 |7 z, ?% L& k: s2 T" b/ Rwindow.close()
V: y" _ O+ m! K// 后退一页
5 i j% ^, ~3 p/ Y9 J2 @; [# @window.history.back(), ]. ?8 Z& l- n8 C7 s3 r2 |: B. |
// 前进一页$ x" L4 x7 c5 M6 _* X- e
window.history.forward() H3 z. ]) {/ [7 S
//Web浏览器全称
$ s! D0 f4 g" s3 `* o3 ~window.navigator.appName8 `6 f7 ]) `1 x" F& W# T' x0 c4 |0 S
'Netscape', U5 q4 o5 D5 A3 M4 o
// Web浏览器厂商和版本的详细字符串6 I M' c1 u% _3 H- W! L
window.navigator.appVersion
6 x. d! J( L6 e9 E'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'5 } a0 Z& _9 n9 z& A. N
// 客户端绝大部分信息
* s! j$ S# Q5 X N0 wwindow.navigator.userAgent
5 |# c9 u% P5 S( ^2 ]; ^# }. I/ t# 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'
) W V8 `9 b1 r' ] B7 \. l// 浏览器运行所在的操作系统
- @' t9 o# i0 C( m9 T/ ]* d! e wwindow.navigator.platform7 @1 \6 X0 y- \7 L8 Z
'Win32'* \8 D' U$ j* J8 P8 ?* u2 M
. d- |; F" l2 c4 A0 }, [* @// 获取URL
) x9 W- P' y& r# nwindow.location.href5 j; D- z! i- t) L# c S
// 跳转到指定页面
* }, T# V9 B6 t5 L) l6 xwindow.location.href='https://www.baidu.com'3 c. K1 B6 Z4 k6 @$ Z0 n
// 重新加载页面7 D7 Q3 c9 v' D+ n
window.location.reload()
4 p( a+ O: A* W+ h0 ~4 W</code></pre> L# N+ T- I) L* o5 E; r
<h3 id="32-弹出框">3.2 弹出框</h3>$ x1 ]! y. b5 s8 F2 Z+ @
<p>三种消息框:警告框、确认框、提示框。</p>
! V: K6 w: _" |<h4 id="321-警告框">3.2.1 警告框</h4>- x% g4 S& L# }7 k( Y
<pre><code class="language-javascript">alert("Hello")
/ q/ F2 C B# q4 F( F3 ^- Z J$ p# K, }</code></pre>+ ?- U+ j. y+ X3 d. f' t s: ~3 B8 F
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
* ?* e0 E5 C4 p% r7 p' T# d! @' J<h4 id="322-确认框">3.2.2 确认框</h4>
) Y3 Y% I) \1 ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 k' d: f- Y/ Q5 p# p0 ?; b<pre><code class="language-javascript">> confirm("你确定吗?") // 点确认返回true" G- t0 h! I- `; R6 B
true
' A+ K( }' Y, b, r. ]> confirm("你确定吗?") // 点取消返回false: ]' j } S. K! S+ Y* H
false8 j- h4 j1 @& X
</code></pre>1 h8 e2 l* G; R2 _+ f
<h4 id="323-提示框">3.2.3 提示框</h4>
% z) F, Q3 o) M: C. y* l2 W4 Y. Z. _<p><code>prompt("请输入","提示")</code></p>
; j- w; d5 G) S9 q' W# K- H$ S" g<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>2 x, G3 N/ S1 W6 ~8 z% W
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>' g1 z# G8 X% A/ }7 f0 w
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>: ]% v7 I4 ]: C. b0 j
<h3 id="33-计时相关">3.3 计时相关</h3>9 k& v0 |, L& {' s1 ^8 {
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
1 w. K4 E- Q# [$ e4 D8 {<pre><code class="language-javascript">// 等于3秒钟弹窗' Q! O3 f1 e! A) `; r a
setTimeout(function(){alert("Hello")}, 3000)
$ y' y7 f4 ~% D* O2 O# _! x& J" X& i2 N
var t = setTimeout(function(){alert("Hello")}, 3000); C: Z3 E! z0 P" L* [% G) u8 E
6 ]4 |2 \+ D0 O( b& {
// 取消setTimeout设置: Q6 [6 Z5 v# o# U- M
clearTimeout(t); d+ F/ l. p6 U9 R8 o, p( \/ u
</code></pre>
, J/ V) X [% \% U$ `! F# j<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>2 W) B. c. R5 S! y) H1 B
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval() 间隔指定的毫秒数不停地执行指定的代码</h4>* \3 [! d/ T. k+ ?* l! u
<pre><code class="language-javascript">每三秒弹出 "hello" :! D/ L9 u! @1 `
setInterval(function(){alert("Hello")},3000);" e+ N1 [( ]6 S0 ?- F" E$ a* }
</code></pre>
# o, S$ y4 |, p( J<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# S2 {* l) i8 @/ }3 m S0 l/ R<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
+ F, q, u ]. l N. }- m8 q//取消:0 @" U1 Q. f" c0 ~
clearInterval(t)
3 F# v# W* Y% o' ?: g: j</code></pre>
2 S2 y5 D! U$ w9 f
. f+ c" T3 o5 o* ~0 W3 V- u; N |
|