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