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