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