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