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