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