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