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