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