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