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