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