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