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