飞雪团队

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13989|回复: 0

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26276
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

2 j- F! {. @( E2 t% b<h1 id="前端之javascript">前端之JavaScript</h1>$ }' Y6 _; b$ h  @# U  q$ _& `
<p></p><p></p>; t! X; I. }6 a6 I, }0 i6 |& u
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>; p# j( x" P- ^$ X6 Y. H; r
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>7 W8 q3 R0 }# S2 W3 k
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>9 i4 i* l5 J8 c5 l
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>3 p; P9 ^& z2 {8 [) ]9 z
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>4 `& W2 e, a$ y4 W
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
$ ]. q/ j7 y: Y2 ~. W% E" z2 A6 {8 m<h3 id="21-注释">2.1 注释</h3>
/ M8 D" b/ L: A1 {8 [5 B<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
: c) w# o/ O+ G- Q<pre><code class="language-javascript">// 这是单行注释7 D- p" u9 w! k5 e2 W! \

/ P4 @) ]3 l3 c4 m/*' L$ ]* |: u0 y: n' R4 y
这是多行注释的第一行,4 L( p5 q6 |" x: m4 D! T2 v  _
这是第二行。- O2 o; A1 n  K* \9 R$ g
*/7 p$ M0 i8 i' a* |: d
</code></pre>, r/ E) {: Y( B, r' F, E( Y1 m! G
<h3 id="22-变量和常量">2.2 变量和常量</h3>/ Y, Q4 s- q5 D3 D
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>: Z( u# f! V3 @( p) x! V; C# p
<ul>9 \/ S. v0 @7 a: Y0 J( H  H
<li>变量必须以字母开头</li>
1 p5 H0 k# m1 ^8 F<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
9 [( a3 z, N$ D<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>& o! u2 t& `. k( N& n( ?
</ul>6 d3 u8 k! k$ _! g4 l* q. {
<p><code>var</code>定义的都为全局变量</p>
. O8 N6 O$ X8 t$ `8 z. f5 L<p><code>let</code>可以声明局部变量</p>
1 w" @5 ]3 k; ^8 e- a<p><strong>声明变量:</strong></p>7 o5 t2 k4 _7 a0 X1 m- u
<pre><code class="language-javascript">// 定义单个变量
1 ~1 ^+ L% m) ^( {) g' W&gt; var name' Z+ M: c* s7 {% j5 k/ I
&gt; name = 'Hans'% ]3 z+ z( _3 |; o; T/ h; Q
//定义并赋值
! s7 U) c0 l" A% v; S3 N&gt; var name = 'Hans'1 m" [- r  t. X3 ]
&gt; name7 j+ C! k) ?/ e4 R& i2 V$ p
'Hans'
( K# T7 l2 c5 [' ~, K! D
/ q4 L3 i7 O: ~9 ?2 x// 定义多个变量
- j( y8 g& a. ]  e* |% ?9 o% X&gt; var name = "Hans", age = 182 t7 a7 Z$ E" a3 [2 M- t
&gt; name
# p; M: ^' T8 G3 t1 u# S6 U0 J/ k/ U'Hans'" m. N  x/ f6 |. L% m/ s* q
&gt; age
; q# |4 j5 t: Z18
/ h6 T9 U* }1 m* N( Z$ T6 C( u$ f/ _( v& _# @5 L, p; V
//多行使用反引号`` 类型python中的三引号
9 B! u9 f4 L$ C9 E* n9 n! m4 v; Q* ^9 q$ [&gt; var text = `A young idler,6 L8 X% x9 ?& q% x& [& S& _
an old beggar`
+ a; K6 C/ h# _: ^&gt; text3 H% x  F3 F0 h7 F
'A young idler,\nan old beggar'. Y2 z$ T3 j+ z8 v) q
</code></pre>. l$ p+ |5 l7 z+ d8 b
<p><strong>声明常量:</strong></p>$ D; `" t4 @) ?, @4 f
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
9 Y' x) R' {# r1 z% W  n<pre><code class="language-javascript">&gt; const pi = 3.14
, q2 k; C! c8 f. `# |&gt; pi- R$ X# m% R, Y3 E
3.14
! p  M+ X& x8 z0 d* m&gt;  pi = 3.010 V/ M' L7 j" r* L  f0 p- \
Uncaught TypeError: Assignment to constant variable.  l# Y4 h' P! ?$ x# O! R
    at &lt;anonymous&gt;:1:4) U; m+ P, g8 {8 b
+ B) C0 F2 G/ Q
</code></pre>; U1 {5 M- t" G) Y- |/ b, [. y: l# D
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
) X4 ~/ _+ _) Z<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
1 t- B. ^# o1 ]5 D8 E<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>% I% O1 l& C" N  T
<h4 id="231-number类型">2.3.1 Number类型</h4>6 V; Q1 O4 x5 _$ u( t5 U& l
<pre><code class="language-javascript">&gt; var a = 5
% }8 d4 n* a: d# ]- j0 p, E&gt; typeof a   //查看变量的类型  
7 _; m+ b) I+ @7 k* c/ e- x9 e/ Jnumber
" ~+ J7 u% w* m$ {! D; _) p8 B; Q( i) Y" n
&gt; var b = 1.3! p* U9 d, g  c' j" ?7 Q
&gt; typeof b
# _3 Y7 p4 \; m0 q5 n7 g, Xnumber
3 P5 z3 \. A7 D# [: r
7 i: R4 g, x. c' B' x7 Q+ ?  Y1 e// 不管整型还是浮点型打开出来的结果都是number类型) n% V5 B1 c. r' L- i$ P
3 G* b' d' l$ E
/*6 l( k6 c6 V7 P
NaN:Not A Number6 G0 u& A. e! l+ q! w# G8 F1 y; ~' I8 X
NaN属于数值类型 表示的意思是 不是一个数字6 z' ]  e0 m: h1 K/ C" X
*/3 J( h; `9 }# e6 C9 a) h
( E  s% j( S& Y+ m7 I  w
parseInt('2345')  // 转整型1 N& Z7 l$ v( ]+ b9 K2 f" J
2345$ L+ {) q# U5 O  e  o
parseInt('2345.5')$ Q/ u6 i' S5 _/ s
23453 d" b  |. E2 O7 Y) g
parseFloat('2345.5') // 转浮点型
4 g/ g1 l. w) s( G2345.5% S0 Q6 a: J3 p) N7 H2 u
parseFloat('ABC')
; R/ B" h9 H3 i& G2 J1 P- BNaN& ^4 J; F1 x$ d- @, }
parseInt('abc')
. O+ e, c! i! XNaN
- I  R1 j& x8 x' @. o</code></pre>
; P- w. v- r1 c' J: B. Y<h4 id="232-string类型">2.3.2 String类型</h4># ?( g1 u6 T/ c* o' T7 k
<pre><code class="language-javascript">&gt; var name = 'Hans'
' U" V0 J5 O$ L. @9 Z&gt; typeof name
& i) e  J7 M) t. f$ [- D& t8 g'string'  p, d% a4 H: {% |, b, ]
3 Q$ L* S# g& Z
//常用方法% s) @$ A8 @7 n+ W; e( c. k/ @
// 变量值长度
) |8 @9 L- S! @- Y, L&gt; name.length3 k" ~1 \" O2 _
4
! `% `4 Y! h" O; \5 U& a' L8 F  B// trim() 移除空白1 |4 }4 @2 w/ k/ r
&gt; var a = '    ABC    '; O9 D7 ~9 ?/ h- E1 t) u
&gt; a
6 E7 h8 Q: x  j( J' d2 m'    ABC    ': D. B9 c& T( p" S0 c
&gt; a.trim()
7 K; v% j6 `) t3 a5 B6 }'ABC'" k. N8 }1 n/ t
//移除左边的空白# b0 @( W* t' \# |' C- J0 U
&gt; a.trimLeft()( w: b/ Q. Q& C4 H0 a- M! U; F
'ABC    '/ d& U, z; I9 Q9 E
//移除右边的空白, ]* T( |2 p" h/ ^  J8 S* a0 ?
&gt; a.trimRight()
; W  h& ?- F, n( u* z* h! U2 v'    ABC'
7 ^+ _7 f5 F9 z% C. v0 a7 B
% \+ d6 @" Z" i3 s/ F/ L3 i( R//返回第n个字符,从0开始
0 I* o. u* [9 E&gt; name4 [9 A; N; }* H# u1 R, v' @3 N
'Hans'. w8 b! v7 |. j1 m; l0 {; v
&gt; name.charAt(3)( F" A5 _' ~# ]+ }2 r
's'/ r' `8 s: I7 b# [7 w6 @" ^
&gt; name.charAt()8 |* a" X# [: c
'H'2 h; |8 h# i, H& E+ V6 r6 \
&gt; name.charAt(1)
; p. m; A- `* u3 i; y; K1 h/ a'a'1 C3 h( z+ M3 I

& }' B; ~4 i+ l. q// 在javascript中推荐使用加号(+)拼接
5 v0 h7 F6 U4 `0 [5 `) F; F1 A&gt; name" L+ B/ }' a9 w) n
'Hans'6 T( O# F6 Q1 [7 H% E! O& G
&gt; a: h3 ]' Y# _, l
'    ABC    '$ Z6 r3 r9 g1 O2 A! @
&gt; name + a
$ C% ]9 D# \3 k, B6 `'Hans    ABC    '/ l) h& a% U5 G6 R+ m5 d/ d# e; L/ R
// 使用concat拼接: V) D4 o- Z" U& n( j) z; p8 T8 k
&gt; name.concat(a)
! y, B! w% j* {4 E'Hans    ABC    '/ Q! v; Y' ?- ^6 u0 P. L6 f

" E1 `- W  N2 o' ?//indexOf(substring, start)子序列位置. O. @) Q& w2 R& t: G
5 G2 ?- v1 L+ W4 I
&gt; text
& T+ [% u0 V+ L  l'A young idler,\nan old beggar'
* `  N$ U5 p* Q9 J  O3 G, H&gt; text.indexOf('young',0)% B# C& e/ }. q( e
2& B5 o, x1 G/ k! I2 G5 J' s) e
8 E$ R) d4 z  B, |
//.substring(from, to)        根据索引获取子序列
% M" [$ _- S4 a$ _2 g2 p&gt; text.substring(0,)
7 U* L" ]0 _" |: z6 U% h$ Q) f  T'A young idler,\nan old beggar'; p' H5 _% k0 K! B/ t
&gt; text.substring(0,10)" U7 B' {: Z; S: @9 V, J' `' Y7 R
'A young id'2 J/ P! P/ L+ Q5 d% S" t3 Q# n
' w! w% @) w# a+ J6 d; \3 \$ a% o
// .slice(start, end)        切片, 从0开始顾头不顾尾
0 M% g, U  I3 n/ t1 W" j1 N&gt; name.slice(0,3)
3 b8 g8 Q+ i; o. f! g% B; U# ?& j'Han'
0 Q6 ]0 z5 E4 d9 b! }
0 J% O$ M2 Q1 p// 转小写
. }7 n; T$ b* Q7 T&gt; name6 E, n5 n) b6 l' M+ Y7 P5 f5 N  n
'Hans'
0 b5 g% v3 e# G' h- Y&gt; name.toLowerCase()' W$ K5 f: t. ^" \0 R; ^" b, ]
'hans'
8 f, B3 p' X( O4 N( w  c! x// 转大写
5 F/ r: Q' `& V$ m4 R) A6 y&gt; name.toUpperCase()
; @( ?3 x% b0 A+ k! G( I3 t" O1 Y'HANS'
* |: G6 M2 ?) n. p. \! R. v, G9 ?& c/ @
// 分隔
/ ]8 H1 C! S" @2 F) i: f&gt; name0 n; K! ?% {. S- b9 f
'Hans'- G- s- \9 s" f! \- e, T8 _$ K
&gt; name.split('a')
9 d- ^  ^3 x+ R- W- A6 ](2)&nbsp;['H', 'ns']( a4 k$ a5 _0 J: s1 U
</code></pre>  A2 i5 d4 S$ H" z+ a# w
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>: r3 J; v, ]7 G
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>9 o3 C* ^/ I+ r: |; R. ~; k
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
% k2 B  h2 a( H$ `! G; c- d<p><strong>null和undefined</strong></p>
* c9 e8 Z  E  y8 o1 x+ |<ul>6 N" ^; M% O: K8 o$ h
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
5 O3 O! T4 P2 Q8 `<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
6 [, V* h/ w" x$ @7 a* i/ A</ul>2 Z0 N7 x1 ~/ X+ C! e; `# J
<h4 id="234-array数组">2.3.4 Array数组</h4>- }& H* U0 @$ }5 y8 j& M+ X2 S9 K6 H
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
- P8 E- C# Q" l9 `<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
/ {# B1 |( l( |" g. l0 F&gt; array1
5 K2 Z  V- L  r# f(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. [  V, M% \1 S1 ?7 h" h& t
&gt; console.log(array1[2])  //console.log打印类似python中的print7 I5 |. `  x  {" j+ Z) V3 }1 S! {
3! T: t- F9 W7 j8 f$ t/ O
// length元素个数
8 Y! r. M: z1 j; I. o&gt; array1.length4 T- N: D  j7 T  R9 |0 {- X
6
. |# l2 _' f) J0 B: W8 l// 在尾部增加元素,类型append; t6 o1 A4 P( p& r
&gt; array1.push('D')6 h7 ]8 p8 u/ c6 w2 H1 {
74 e( O! h9 i0 Q/ j8 K: U& Z- s* ~
&gt; array1# e' @* a2 G* L6 v) Q, d
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
2 P6 k0 `& x4 _) F/ I- f// 在头部增加元素3 E+ J# `+ J$ L7 \9 O
&gt; array1.unshift(0)' G0 N* W3 j8 \- h8 z
8
( D7 g. D7 k9 A4 Z" c5 b5 e1 J; \3 ~" X&gt; array1
& |5 J7 Y3 C9 Y* C(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']8 a+ ^1 w4 R# k! t1 Q4 ~; X3 f

0 q# G; S4 r6 n# m) g3 W5 P//取最后一个元素" h' f3 Q! b8 N) f+ U
&gt; array1.pop()- i# E, \5 X5 L3 ]
'D'
+ X/ C& V/ N* Q2 l" `1 ^&gt; array1% j5 E( M5 H: h. b- D$ f1 ?
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
8 B- Z6 B/ F  l, |- I% u8 {5 g//取头部元素
9 R9 p' K& e' ^) Q3 i  T&gt; array1.shift()$ n8 Y9 N! z' s4 V
0+ a+ i- M( L# {# P2 E
&gt; array1/ ^9 G; p0 k* @2 A" O
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 F  h/ A2 }( F; L. u" @, B
6 t# d2 a+ S$ n5 z6 F
//切片, 从0开始顾头不顾尾
3 ?7 D- {) l  Z: _/ B&gt; array1.slice(3,6)
% |3 D. x9 v: @' t+ d" U' b(3)&nbsp;['a', 'b', 'c']
2 E5 Q* C7 Y, ]2 C" i9 C// 反转6 f0 i- K# k1 i9 R! E2 |
&gt; array1.reverse()/ @( ]/ e  k- {6 t
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]; z8 }! ~1 U: i; P. {, b
// 将数组元素连接成字符串4 _' `% P! U5 J2 G) t
&gt; array1.join() // 什么不都写默认使用逗号分隔
( i7 {8 J8 b& f. L'c,b,a,3,2,1'
. o* r1 N3 {2 ?% r- o, d, }% V&gt; array1.join('')
, c+ j3 K5 h& p: f/ ]6 r) V* d7 a) O, C'cba321'
) c, S9 S5 z2 r&gt; array1.join('|'), W4 v4 }0 W6 V+ |7 h' n, C: b  K' _
'c|b|a|3|2|1'8 F& n. ]+ M0 n- {3 f" z- U

+ y- X& l; r6 G+ q6 |// 连接数组
! D  I; O7 h7 o* @&gt; var array2 = ['A','B','C']
9 _! `* ~8 t+ t- b+ `' t+ ~3 U&gt; array1.concat(array2)( `( `2 X' c! z) q, {; C
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']9 i; R$ r% o- r+ Q8 G
; q  @4 z/ K9 P) ^( g( O* ^7 o7 C
// 排序7 O7 j) K% w4 M4 y6 M
&gt; array1.sort()  m$ }2 n: a" b& G
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 k. y' g3 b6 e8 r# G$ l+ Y9 W
$ H2 b0 B, c; `) }% i+ s// 删除元素,并可以向数据组中添加新元素(可选)
. w  n% ^7 `6 o5 Z; b&gt; array1.splice(3,3)  // 删除元素
1 E1 Q2 j) l( ~/ `2 k3 K7 R(3)&nbsp;['a', 'b', 'c']1 p# h! @& r6 a: f5 q$ Y2 F3 v! W
&gt; array1
  N' q+ J" P1 D: a) [+ i(3)&nbsp;[1, 2, 3]2 v) G$ k, N$ v
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素. R1 G, C4 y1 c8 m
[]( z- f/ ~6 s1 k: r$ ]3 f2 m
&gt; array19 ^* h( Q- s% I- y. C$ T
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']. c4 a4 ]7 u9 z, A

/ _4 f' R- W% Q/*1 U1 d5 A) l, ~
splice(index,howmany,item1,.....,itemX)
" J( }( ?' s# F3 m1 a- I6 {) yindex:必需,必须是数字。规定从何处添加/删除元素。
2 E- H" ?% {4 \9 R# uhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 p: U" t" _- X. c' }: t
item1, ..., itemX        可选。要添加到数组的新元素
. W6 u9 k' l# {; _1 m  p* ?*/
0 k$ c* X  O& o
+ H# t& e  G! e: |7 v# {// forEach()        将数组的每个元素传递给回调函数. n6 I$ X9 t3 f0 B
&gt; array1.forEach(function test(n){console.log(n)})
# d) u$ I" n/ o 1
6 t2 `9 q( u$ i% S2 n 2: z* m; M7 P. ~
3
- k- j( A) l" q) b( L A6 C- q$ b! [: B' D, ~% i" t- U
B5 @7 c1 x6 [+ g5 \. g, ~7 z
C
8 y& x6 P& T9 }' G* M// 返回一个数组元素调用函数处理后的值的新数组
7 y5 U  U' J  I4 n( _3 h  J! W9 O&gt; array1.map(function(value){return value +1})" a- Z. O# A9 |( E7 H4 C
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
- q6 }& E" R# T" r4 Z& t$ H7 v* ~</code></pre>4 S4 G  s- D, c5 z" n
<h3 id="24-运算符">2.4 运算符</h3>& e. T% V! s# }1 O9 G6 k& Y3 ]
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>3 \& E+ ?6 e8 z& j
<p><code>+ - * / % ++ --</code></p>
. i' S& ?- I" o" V# u* `<pre><code class="language-javascript">&gt; var a = 65 d) E0 W. [6 K+ m6 w9 b  {+ ^
&gt; var b = 3
# a6 Y' y* s8 o" ~// 加  b7 V* K  ?0 u5 k) @" p5 |
&gt; a + b
3 P9 p1 ]( V4 K95 I( B4 z* p4 j& I' R  |
// 减
5 v7 s7 l( [* Z# Y; ^0 L: E&gt; a - b
3 |' m" n; i6 W+ ?# H( l3 T! U39 x- I, e4 c% e
// 乘! ], f& {% ]: ~
&gt; a * b
# ^3 l" r1 N8 Q. d18
  B1 n2 l* b+ E3 ^1 l// 除
+ ^# C# r. T" D8 j% L&gt; a / b
+ {- f1 z7 N* Z7 f* y28 s8 m  L& |  M
// 取模(取余)9 R. ]4 z/ }7 B8 i! J! S
&gt; a % b
, c( X, [% C" J; J1 G2 L0 l! t5 Y0
' D' A. i* k! |6 ^// 自增1(先赋值再增1)+ A# u, Z# K, h
&gt; a++
- s0 `. c( u! K& r) A: Q63 f: G, X* ?! U
&gt; a" _4 X/ o! h2 a* L9 k
71 A( O9 ?( e5 t
// 自减1(先赋值再减1)
# V) E* d. U$ a&gt; a--# ?9 ?0 L8 d' \( D. s! r+ D
7
8 R: B. {6 O1 f1 \7 b&gt; a% y! z* L4 P, Y- D8 o; {% s' l
6) O  Z# `) d$ B- }' ^- X
// 自增1(先增1再赋值)$ e3 q( N9 q- h) N
&gt; ++a  U( p6 I/ K: l& q5 i, c/ B
7
& k+ o7 g  i* X5 |( T. R  \// 自减1(先减1再赋值)* G: S: [+ N; U+ X  G2 [
&gt; --a
  p+ c4 G1 i, o/ P/ C. J6 Y. @: K6- Q4 C9 k  C& u4 ]- D( H
&gt; a
7 u* L5 d  {" Y+ T. P8 c6) U, l( n1 j& N9 T' n

, C# Q) N; b8 T1 i$ E) Q//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理1 \$ u- T" o0 w3 ^
</code></pre>1 j0 k" ~7 U" k0 a/ p7 W) x5 w- H
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
2 X& s! D6 }/ E5 P: S/ r<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ r+ Z  i9 ]$ D! u5 k
<pre><code class="language-javascript">// 大于+ O) @3 b9 M9 W8 m- O
&gt; a &gt; b& i0 z& ^! s# |  w
true2 ^# [! ]3 A' g& w$ Y) R# v
// 大于等于! P3 N* f+ p9 g% ?; H
&gt; a &gt;= b
' R; k# X+ b6 e1 M0 y' Ptrue
! l+ h5 N* @- d, w7 [// 小于
* }+ J) ^0 v6 Z! `$ i- P( E$ l1 u" `&gt; a &lt; b4 O+ q6 r" }+ z5 s+ R/ J5 a. x" R
false
/ k# g+ K% o9 W1 O, z. l// 小于等于
9 c/ U, S/ \( n" Y&gt; a &lt;= b; Y1 b% o: r3 f0 e3 E* B
false0 U. J- N9 @/ a, J$ n! R. S( R
// 弱不等于
# G& n2 A/ X' A* T# I&gt; a != b9 t' x: O. [' ?  u
true: Y- t3 g1 ~( ?+ f& |
// 弱等于
  O+ y5 ?- c+ z8 C; c  |& n# m&gt; 1 == '1'
; ~! N3 \& V- L0 }true
8 X* }0 n$ S8 n% k; }# U// 强等于
# H' I$ [" `, J" h& N: c&gt; 1 === '1'% W( N8 T9 h% J! B
false
0 F9 W( G: M$ d9 I// 强不等于
" w) D8 f. }# K, n+ L, `&gt; 1 !== '1'5 {; g( Y5 n/ O
true7 Z4 ]4 k% @! L: F$ ]0 T4 Y
4 V, `$ L( B4 J; r3 b
/*3 P) R5 b) Q7 j/ F2 p( E$ S4 R7 f: ?2 [
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误2 O% e9 k  j% S" ~
*/# ^9 o" x$ Q) d: b3 _' L3 J7 @
</code></pre>
  q$ V, w: H% I- \9 T% x! P9 ]<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>6 g2 \5 n( p/ E. J* }
<p><code>&amp;&amp; || !</code></p>
8 [- s; v3 p0 j<pre><code class="language-javascript">&amp;&amp; 与
6 N1 n0 D) ]- j) m. z: S, q6 W0 ?|| or
1 P& R5 c3 I  ?! G7 Q! 非  D; \$ r8 j' \: e6 {% j+ v
</code></pre>8 o7 h5 A! W& g4 b: K8 w# D( G& X
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>/ F7 w) c( v2 l2 S) D' C
<p><code>= += -= *= /=</code></p>0 e3 ]* {% \$ I7 F
<pre><code class="language-javascript">// 赋值# E5 ?6 u5 L  E  K+ O% }3 [( [
&gt; var x = 37 i. C0 R0 }4 F9 p3 c1 }% V( M; V; \
// 加等于
' A& X/ r  Z- R' ?( ?6 u&gt; x += 2, p6 ?3 Z3 \4 X5 d
5
% o# j. H; Y0 K, T/ V1 g0 k9 E// 减等于
& k, a. N4 S4 `5 l/ d9 u) x- w( l; e&gt; x -= 1/ C7 u0 e) F" q$ M% `
4) u$ K/ O9 b8 v/ p1 c$ K1 p1 H
// 乘等于  q. k- r# W4 P( l
&gt; x *= 2
0 x8 ^% J  e% R. d3 {8! c0 d. Y, q( Q5 d" M; n1 ]* p1 V
// 除等于$ `4 A- I/ v6 G1 n
&gt; x /= 2
& W, h  d9 @0 b& e8 S4
! f6 G: v: _% j: m$ I( d& A0 n& g</code></pre>7 S) s) \% a- _, Z# f
<h3 id="25-流程控制">2.5 流程控制</h3>
0 g, N& ?+ N2 l9 ~<h4 id="251-if">2.5.1 if</h4>
0 M+ c- `+ J3 r4 q" Z: D, g# L<pre><code class="language-javascript">1, if(条件){条件成立执行代码}4 z! j- D4 }7 o  F* o

: h; N9 S* K. u0 f" T# ]1 q2 c2 ^&gt; var x = 3
, B# a& O/ K: d, D&gt; if (x &gt; 2){console.log("OK")}/ N; p# U) F$ Y
OK9 N+ j/ c4 i. A! ~. W9 j, Y
* @1 F% x9 j/ M% y/ l. B- r  ?
2, if(条件){条件成立执行代码}
9 ?, Q5 X9 ~8 n+ R; Z' `        else{条件不成立执行代码}
+ R- h: ]0 d6 U% t' B! B; n9 E" m6 ]7 I# Y7 Y: I9 `
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}/ `) c0 V( `4 z& ~" T* {' T8 s8 i
'NO'% ^8 o- C$ G( r  F4 A2 v3 I  e
. {9 q) H) g9 |9 ?0 z. \
3, if(条件1){条件1成立执行代码}
3 p. k% A  m  w5 J' K$ e0 k  Z. i        else if(条件2){条件2成立执行代码}0 F6 T) a) V. @: |
    else{上面条件都不成立执行代码}. Z' t' S% D6 o% L

3 a: ?' p6 X- E, b. m&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}3 O7 D3 h1 f) N3 \" d
Ha
1 o& d! T1 J& K2 U</code></pre>/ p+ W/ T; k& {
<h4 id="252-switch">2.5.2 switch</h4>
' n! |1 _1 M* d; I! O" r<pre><code class="language-javascript">var day = new Date().getDay();
; G" c$ o0 y  ?- \# l- jswitch (day) {
0 @- V. t& v6 D8 ~  B" Q& R  case 0:- D+ d6 e) Z! M) y
  console.log("Sunday");- \8 s- i/ o4 @
  break;
7 k1 r0 W/ @5 ]! }  case 1:
: U: U/ O3 B1 t& k- x  Y! Z- [% z% f  console.log("Monday");4 H( K" ^. B: y/ A! Y- M
  break;
4 a& N7 X1 e1 k/ _" Xdefault:
, E* o. H, _/ t9 T3 X7 `  console.log("不在范围")4 w) |# m1 l' b- u! ^3 C, z! U
}: ?6 J% |& f) p& G
不在范围6 B* r0 i9 W/ b
</code></pre>+ K: r% v4 p% D: I* F0 U! _
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
4 f# `6 c3 o6 |9 {- Y8 v; ~' F/ ^6 S<h4 id="253-for">2.5.3 for</h4>
4 a; e$ ?0 h/ u- j5 g6 O<pre><code class="language-python">// for 循环
0 L+ Y  g- a4 j8 L        for(起始值;循环条件;每次循环后执行的操作){# ~( m, {! t; f' [) n7 J4 x
        for循环体代码6 i: C4 u/ L# D1 N9 n' K- G
    }$ i% U: ]- }, t; n4 L6 J+ O$ F( F
) ]' V+ X4 x; D! U9 B$ g4 M
for (var i = 0; i&lt;10; i++){
5 A+ _0 O+ F2 S2 P# g. Z8 S* D    console.log(i)
9 _  r) t* J# \! r4 G  C4 K5 h6 k}
' c3 r$ X9 `$ P/ T+ ?9 E        0
3 U0 A: `' z6 N- r8 h        15 ^# S0 p$ a/ A7 u
        2
$ j5 g. B6 D( m% \/ ~        3
% n* C6 P" k/ d% ~) a" I! t        4
: h' x# D2 V5 S* K        5
- g( r1 b- I" E) X* F& D        61 q# p8 u% [, {" d7 r* P- r, t
        7" {  L* _' ^' t# L; N
        88 ?  @/ u$ e2 }3 Y$ E; Q
        9
; Z0 s; X5 L/ ?% Z+ r6 ^3 _</code></pre>
/ P0 l$ s5 q2 }& F<h4 id="254-while">2.5.4 while</h4>6 f) Y; w& c$ g( t8 z
<pre><code class="language-javascript">// while 循环& ~- b7 J- J) ~5 a6 h: [! A
        while(循环条件){' |5 H- W8 h& f8 ]/ t; m
        循环体代码" m8 K* G  W) D8 C
    }
+ o8 ~& q# d% A1 j
. `: b5 z9 }. K( S) u&gt; var i = 0* l' h5 ?4 v! V3 e
&gt; while(i&lt;10){4 O" v4 l0 |. @4 R- [
    console.log(i)
; I5 f, W7 i7 z: H    i++
6 U# }' Y% g, q- v. i# l}7 o( m" ^. f5 f# u# i/ a2 R
0
2 W3 C' f7 N2 v 1
3 y. k: b6 _! n/ J3 S$ Y! k 2
& b8 d+ P( y$ Z/ E3 q7 U 3# r! d: W' U$ k5 [9 W! W2 G
45 w4 w' A6 v% b) j0 ^
5
7 r* O* V; ~. `/ c' L( o% { 67 M9 W( V* }3 d1 R
7
& ~# H# _6 }: S. _( d  h: L 8# T6 j! `* G8 o% C! P; ^& R3 G
9
& i3 r; Q) v/ c</code></pre>. n# U1 g/ I( `2 ]" Y4 e$ ]
<h4 id="255-break和continue">2.5.5 break和continue</h4>
' }/ X& ]7 g. ^<pre><code class="language-javascript">// break% Q' N% A0 q4 u; y: }( W1 k7 m
for (var i = 0; i&lt;10; i++){, O4 w2 U6 t0 h0 G! ]- e
    if (i == 5){break}. ^# ?8 [) Z) u# b+ u
    console.log(i)( f9 E) j9 l7 i3 `0 A. J
}
, i. C( R! p' w) x 09 \8 m# `8 y2 z1 P2 ~
1
# M* F" C# A! b+ m7 F 2
1 r! K7 T; l) Q+ o" u 3; h2 S& v) ^  l: r" r' m" p
4
- ]- C+ l8 W' c- C// continue( L2 E+ G$ }' c5 Z
for (var i = 0; i&lt;10; i++){' C0 A. {1 m" ~) D
    if (i == 5){continue}% y- c9 }4 S1 r% R; @
    console.log(i)7 H7 p- R! k% }9 m" ]& W$ F6 W" ^6 ?
}
4 V; x" a* a% |3 m- B4 U 08 N' M6 G6 g1 c# Z  P
1
7 d: i: t/ Q. r1 J$ J" t4 H 2- Q: H, v# ^( Q2 \' ^
3
) b( n& s% u' x) ?8 i, p 41 a  j- \8 s3 b
6  l3 b( y- E- A9 D* h9 W
7, {6 V% A& f  F% n2 k
8
; b' J/ r- P6 ~+ y+ |- T! x6 |4 @ 90 w- q* z0 T- {3 P. Q, Z; W

+ Y  e6 j1 M; ?0 J/ x" a</code></pre>$ }0 `  C0 }  W2 I7 ^
<h3 id="26-三元运算">2.6 三元运算</h3>
, g: z; c) s$ B<pre><code class="language-javascript">&gt; a: z% O5 I% {- w  S: q" q0 m) i
6
+ Y0 @; |4 s4 f9 D5 }&gt; b
  W3 t& F! m; I% c5 g  I' {3 S) x30 f5 Q7 _) O6 {( l; F. s4 @! M
6 ~% E! w  m* y( B0 e$ P8 i
//条件成立c为a的值,不成立c为b的值
  m/ f$ R, w; A( k) v8 }1 m&gt; var c = a &gt; b ? a : b$ B# Q0 z: o3 s- `* `- |
&gt; c/ `8 w- G* S1 A7 t
6: {+ h# t3 N2 c% a
& M7 K# q  j4 ^; I
// 三元运算可以嵌套
8 G7 U$ i2 _3 a/ Y</code></pre>
& q! V2 e; L: g. b# E) e% ?<h3 id="27-函数">2.7 函数</h3>6 }! T8 O0 I$ K5 `: t
<pre><code class="language-javascript">1. 普通函数% X! b8 ?% c7 C$ w3 Q
&gt; function foo1(){
* `; G9 k, O: H1 s    console.log("Hi")
& a  J" \2 P' }3 r}8 c* c- V% n0 m  {7 j7 \1 ]7 Q
0 l" d# ]7 \6 E
&gt; foo1(), h7 O- ~" _1 }$ j- Z1 |0 T
        Hi
& A2 G- O+ V! S- V2. 带参数函数
8 Q' o( U$ g, G' N" O. i; Z&gt; function foo1(name){
( j0 @& X& h9 O+ C& g) c4 L) x" J5 Fconsole.log("Hi",name)1 u; B0 S, D8 e4 C( h
}* f- ^: [' ~& B) P

) l3 L# \4 y# ]) }8 l& J&gt; foo1("Hans")
) w: {5 j7 Z( ^5 w0 a) ]+ iHi Hans
" B# S. I5 D9 \! \( c4 q" f
8 l; K( B  z# Z% _# M&gt; var name = "Hello"
2 D& S" h% P+ q5 l* o( ^# m&gt; foo1(name)
4 Z' p: ~# B- T. ]Hi Hello! E9 n1 L: M9 \3 V" c

# D# O7 D5 _; P* J& l3. 带返回值函数
) v+ A% r3 N) N- F! Q5 s; ~, _" l&gt; function foo1(a,b){
, ~9 H9 _! G: ~, w$ U- `+ t8 c! l        return a + b   
1 x- B$ D- i4 L6 r4 l0 N}! N& x) C* |+ V7 ^
&gt; foo1(1,2)
) k* K8 M8 d1 x# A3
3 {, ]3 e) d& s; q+ r&gt; var a = foo1(10,20)  //接受函数返回值% }9 C$ H8 ^: c3 B: N; D
&gt; a. T0 r% P5 T: E$ ?. @' b; R- h$ s
30
+ j: Y0 |, v0 Y8 A; D+ G
* i4 A/ o% q. Y" n6 u0 @4. 匿名函数
+ z8 c$ F7 J( p&gt; var sum = function(a, b){
3 G. z+ Z4 q+ ?; i3 L2 B. z& ^  return a + b;
2 z8 a( d9 A2 h8 I}$ w6 o# B- a# j$ V3 N
&gt; sum(1,2)
! y1 z- B6 i+ `" w7 X, l! |2 v3
; b8 D( k. Y8 G: Q% A# v1 q
2 M  M  U& I/ J# e* [3 z. f// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
. A* d& ~: c1 M6 d5 G4 A&gt; (function(a, b){
8 F7 N5 H5 O; A& E' i9 h  return a + b
' D6 M4 z0 C3 N9 W, ~3 s})(10, 20)
! D9 N0 Q' t9 Y. @& U$ m" g' T! u30
/ {" f' B2 N! f0 N- I: m
8 a0 `5 A5 u9 z# n, [; [5 f5. 闭包函数
# c: s- I4 H  @  N" ^' W( M% r. o// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数1 v# Z3 m6 h  K# h
var city = "BJ"3 Q2 p9 C/ J% M. w- d2 f
function f(){( D9 P! m$ u* B. f: t& x! q
    var city = "SH"
! |: h; Y& K, M' @    function inner(){$ g+ A) k$ `! y& n6 \
        console.log(city)
& T/ I4 D7 ~( d: i9 ~3 k9 g    }
3 Q$ ~" E! ?  d+ L. R* J; X9 W    return inner( f- W2 q" U& M# N* X
}
* |+ t! M! V  Qvar ret = f(), A; c' q; ]  f8 K5 U# V; B
ret(); z5 v9 g) O; P" x+ b/ [1 b* i
执行结果:4 X( }% F5 B- W8 @
SH/ F" {3 K. A8 `( J# u6 @& W9 l) e
  o1 \2 e; q- g% u7 i( K  d
</code></pre>3 E9 t2 F0 x; r6 z
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>3 ^3 M7 x+ T4 h8 S* ]- b6 Z
<pre><code class="language-javascript">var f = v =&gt; v;3 S9 S2 c, g. V: E$ U
// 等同于, E/ `7 ~, J" D" e$ f' Y- o
var f = function(v){  I4 K2 N7 {6 t8 l( [( {
  return v;+ y5 g: K" r8 K6 a  O
}
- P& X+ i, K/ s% H* s! j  H</code></pre>/ p. c+ t! `" T! D6 c! @- R
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
) R& J5 T: G% F$ Y: t<pre><code class="language-javascript">function foo1(a,b){  g% j, a2 t0 B
    console.log(arguments.length)  //参数的个数 * ?+ |$ }2 f! f( |: _7 k3 M0 D- A
    console.log(arguments[0]) // 第一个参数的值
' X8 ^: H6 E7 M* W$ q$ M. S2 S$ ]$ r& \        return a + b   ; Y( j3 \8 `% z/ `( Q! k
}
! [) V3 D) S! ]+ C+ z0 b+ v3 Sfoo1(10,20), V7 c( k! q* Z0 G% ~
结果:
% b7 }* i8 M4 y1 x 2          //参数的个数
1 u9 b. i9 Q: A  z" H. k10        // 第一个参数的值/ o7 B+ J1 i8 S- r
30        // 返回相加的结果
8 i0 e% _+ ?3 L) {5 Q- |3 H</code></pre>- q. j$ Y4 [" d* F4 X+ h$ }9 ^
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>- O# Q6 X& h0 n6 t3 P+ \) k
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>0 r) w. M' Y* Z, R% D( Y
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
8 a1 B/ l* }* m<h4 id="281-date对象">2.8.1 Date对象</h4>
. k/ L% r# K; Z7 a+ r<pre><code class="language-javascript">&gt; var data_test = new Date(); [* m) S' U! @6 c
&gt; data_test: C/ k9 c% c" E' \5 x; Y
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)& ~9 @5 ^3 M5 N6 P
&gt; data_test.toLocaleString()& w: ]  j, Y' `& o4 D. t8 e1 ~
'2022/2/11 下午9:44:43'0 d' O6 ^3 I) ]9 V- K' {' S7 N

) q; m1 {0 f5 z. M1 D) B&gt; data_test.toLocaleDateString()
- t2 a7 F4 e7 C1 B- {! K7 a'2022/2/11') Y/ n9 |8 C2 r1 _. N$ t

' p( P1 K5 _! }7 ]&gt; var data_test2  = new Date("2022/2/11 9:44:43")/ ^6 b% o, y1 h: Q5 N, T
&gt; data_test2.toLocaleString()
0 x2 j% D  J3 v  R$ r% X( @. s'2022/2/11 上午9:44:43'
, v# P3 o+ ~9 C" R7 S4 f# y" p; K: x( P) y
// 获取当前几号6 b2 e4 ]# T' u
&gt; data_test.getDate()0 [- `% b/ |/ h, U! c
110 i7 a( b& Y4 }& j& Q
// 获取星期几,数字表示8 y$ a  W* a1 A+ ?1 Y7 }% D0 `
&gt; data_test.getDay()  7 n0 W6 j' K8 g+ n! i2 m8 b: Q
5
9 w3 }) R3 Z  A$ S7 X; |// 获取月份(0-11)
. V) a$ _* Z2 [( o9 j( o* s&gt; data_test.getMonth()
; Q7 P( ]1 @% m( @) S; w3 S1* g3 z- v/ C9 @! i
// 获取完整年份  r0 v  G6 M# v$ n2 d5 G6 |) ]1 X, p
&gt; data_test.getFullYear()
* J  y( L$ `( c5 D$ k8 N3 z! j$ }# w2022
% k) s. F/ _3 T9 P// 获取时
. Q- @, `+ k5 y7 s7 k$ i: G5 k&gt; data_test.getHours()
9 J( K4 b# t& O4 y5 r21
+ `2 [, _4 _1 Y% Z- [% k4 X// 获取分: k/ D3 W0 |# ~( x
&gt; data_test.getMinutes()( f+ S# G- `4 J3 s
44
3 K; H. u2 a3 Y) t0 }// 获取秒
5 s" d1 K7 P; b  W: X$ a7 ]&gt; data_test.getSeconds()
) Q! M. n4 z" b43+ E- d3 N) G! U' V3 U, \; y
// 获取毫秒6 }8 W& H! y6 b. z  f
&gt; data_test.getMilliseconds()
8 j5 c" L4 K: s! y- d290/ P5 W8 j9 I) d
// 获取时间戳
( u* p0 \9 l9 z) b&gt; data_test.getTime()
5 t7 s' ?$ p# q& |' _1644587083290
5 i: n! i6 i" j1 l, n( s' a. F+ {</code></pre>; y8 H( k# l, R& n+ o: a% o( ?
<h4 id="282-json对象">2.8.2 Json对象</h4>
5 @% D' e. J4 P<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
4 U- K. g/ p9 s) b6 GJSON.parse()  // 反序列化,把JSON字符串转换成对象
3 Y$ |1 d& h# D7 {4 w: v, q6 }  U
// 序列化5 ~2 y7 ~* ?  s! d& f2 v
&gt; var jstojson = JSON.stringify(person)
3 Q3 p9 w1 U& Z5 N&gt; jstojson  + B0 k- V3 M) i5 g2 ~* S9 e! ?0 J0 m
'{"Name":"Hans","Age":18}'+ i& }* N* r' e: ]
) ~0 u5 k% e1 ^: V
// 反序列化# `7 Q1 V2 b. D  [0 i. R0 Q; m
&gt; var x = JSON.parse(jstojson)& }8 R% v7 S8 ?; A% o5 \7 J; N( h
&gt; x
- u  m6 A7 K) L% ^' X8 ]{Name: 'Hans', Age: 18}
( E; V5 l8 \5 i7 [&gt; x.Age* a3 v# A8 E) ]8 m2 h: G
181 q) b- {' L: Q6 x9 ]- n3 T
</code></pre>  z4 b) Z/ I; p1 B; ^' ~
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>3 n7 ]) M) w' E7 T' \
<p>正则</p>
4 ?+ l4 V# N6 S5 n! |<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");& H+ }+ c% J6 Q4 I+ t/ U% M' |$ ^; b
&gt; reg1& H$ o% P! s! O8 B2 V. ^( Z
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" |" N* E# U: g' {9 C* b' i! B&gt; reg1.test("Hans666")
! _* [/ l- S# \1 qtrue
; A' V" k6 k4 E* s2 E( b
8 h* y& W' E" B$ [' l$ q: u( _&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/$ V. d. s) {& X4 c
&gt; reg2
$ \) v* r! H; W9 [+ x/^[a-zA-Z][a-zA-Z0-9]{4,7}/
3 x: n, D7 r7 L&gt; reg2.test('Hasdfa')" F6 q. q" E) ]+ p3 z% H
true8 i4 a) j9 V4 R( y% w
0 o9 R8 C, u. u. Y2 w& q% K! y$ K
全局匹配:
  O: w# m3 f+ z; o0 c2 I&gt; name1 z' ?. ?6 c/ I
'Hello'  u! W* l; U! K$ O" S( u+ I
&gt; name.match(/l/); x3 H$ ~7 x+ A: z+ t& r# M. M" P
['l', index: 2, input: 'Hello', groups: undefined]
% d1 f; Z& u! Z4 D% g. S
. D, t! a; m. c2 l&gt; name.match(/l/g)
" U0 D: T  O) e(2)&nbsp;['l', 'l']
- p) G5 C: T) j' f0 {9 \// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配) U5 L4 A7 v* @3 T- X
' y% ?7 P# k  w( a8 i9 C
全局匹配注意事项:! i% l7 d* q. h
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
$ B1 i- d% e: C; s7 m' |. ]- S&gt; reg2.test('Hasdfa')/ s2 }1 G" B$ i7 d) D. C; o
true8 V' C2 h& T9 C
&gt;reg2.lastIndex;
; J. h5 Q0 _% l. {- h. x; r4 J6
, f' v. P3 V" ^&gt; reg2.test('Hasdfa')* @6 D4 ]$ X( f6 ~
false
7 }5 g3 |! J. K5 i! }& f&gt; reg2.lastIndex;7 H+ ]$ _5 X& y2 m' c7 g0 L: H) ~& t
0
5 b/ G; R2 R/ X&gt; reg2.test('Hasdfa')
5 @2 u2 q( i! T. ?/ N9 D& d$ z0 Mtrue6 W9 t( `3 B# [; g( c5 C# u
&gt; reg2.lastIndex;! p, a- {, n- N
6- k. j2 h+ Z% E2 M" a& r8 b' s
&gt; reg2.test('Hasdfa')  Y) s- Z7 h4 M# K6 e. T
false
, D0 f5 p# M( h5 E&gt; reg2.lastIndex;
# l( [& q$ r+ I' _0
0 z0 Y9 _* q; l2 K% E% _' ~// 全局匹配会有一个lastindex属性2 A; X2 c; d' p% q" t
&gt; reg2.test()8 r1 b+ N8 y. _/ t& \
false
' ]. ~- O0 S% D3 H& X&gt; reg2.test()# e" R# k" l% Z/ t6 P/ r+ J
true. [% {2 n( ^$ S. V
// 校验时不传参数默认传的是undefined
. I& Y7 R- ^) L9 T: q</code></pre>
1 M: B) v$ S0 Z. N+ `) H$ y& e6 C<h4 id="284-自定义对象">2.8.4 自定义对象</h4>! K) {: X2 ]0 V6 Y1 Y/ c
<p>就相当于是<code>python</code>中的字典</p>- x% e$ G8 g* A' G' J- B8 ?
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
+ X5 O- p, p  R6 B8 B4 P4 l3 W&gt; person
1 E% Q1 D. O( t' N. y7 ?+ r{Name: 'Hans', Age: 18}) A; k% t9 v( Y# ]$ j: D
&gt; person.Name$ Z$ x# l3 s5 E0 B, K- Y+ ^
'Hans'! x  T* Z* O* \/ G
&gt; person["Name"]' d5 T, j  M3 V8 o% F7 }
'Hans'% J$ G# D" `  F% }' U

9 n1 J" B: T$ q- d: y7 h// 也可以使用new Object创建
! M* f) o3 v1 o! h% p&gt; var person2 = new Object()
$ H$ U' g7 u6 }, N&gt; person2.name = "Hello"
+ P& G* ^; i2 K6 Q* ^'Hello'
/ m# S3 e* m. v" n/ A0 W&gt; person2.age = 209 m( s/ o8 g0 x, s4 T8 _; I; y
20
! B, Q5 f4 ~; I. M4 R</code></pre>$ Z! B3 g0 F* J* H/ t
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>, W! {! F" I) z9 E# j  z
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>5 B9 J: P& b  H9 i/ L2 K9 }% ]
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
# ]% E! u4 g5 d5 _* b) C) m7 `4 K<h3 id="31-window-对象">3.1 window 对象</h3>: F% J* r. C; S$ ?- e7 ], h
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
3 B! u9 Z" W! _8 g; P6 V2 Z* j<pre><code class="language-python">//览器窗口的内部高度
  S8 n1 Q6 X; [' S  I# F0 Z) awindow.innerHeight
# H  i# Q+ F& Z: C: J706; E4 B) P+ L6 w* W4 g4 m
//浏览器窗口的内部宽度; [+ ~2 W% ?) q$ I/ D8 R
window.innerWidth
2 p+ b$ h+ z& [) u: n& `) O4 n1522# Y  S9 K0 j0 W4 h% X4 s' K/ C
// 打开新窗口
; U" F; u( y4 t* l( Rwindow.open('https://www.baidu.com'): H& J% I( x( K3 C1 `
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}  S  d  d* p/ f7 ?
// 关闭当前窗口
6 B" Y/ @4 m4 H/ A0 `window.close()
* ?! R1 L! x0 x, c//  后退一页7 m+ a+ P- s$ ]  A5 Y- i8 @
window.history.back()
, \+ R' ?- W% O3 l// 前进一页
8 J1 f" U! c( P5 dwindow.history.forward()
6 n2 b3 t+ |/ q' e6 c# y" v1 Q//Web浏览器全称
; a3 P: J+ a4 M" a9 E2 O" S2 zwindow.navigator.appName
, l7 _, ?) ~* Q- p' G'Netscape'9 s6 h+ V7 b# N5 m% i& D
// Web浏览器厂商和版本的详细字符串% D( O: v' @: J. L$ N- a4 [7 M
window.navigator.appVersion9 _! [( {) L7 z2 ~
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 ^) {3 R) d# s+ C3 b// 客户端绝大部分信息; J6 n- v6 K) L7 k. |* L
window.navigator.userAgent% c" u3 c6 }" b# ]( s) k0 ^; y- g
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36') h/ o! x1 z& H/ m
// 浏览器运行所在的操作系统+ Q4 N. K/ n3 D. X( g/ J# K
window.navigator.platform
$ L0 h" Z9 A- V  t# [9 v'Win32'0 w( v' J3 n! i- t" a5 h

3 ?1 |2 |* O$ G6 n1 l//  获取URL
0 a8 l& U4 o/ Z: zwindow.location.href
9 u% x' d, F4 @$ J) s8 K; D* ]// 跳转到指定页面
% l4 H1 l6 ^1 M! Uwindow.location.href='https://www.baidu.com'8 q2 }0 @* {1 u  R! q- Y& _: q5 F
// 重新加载页面  K8 V; B" h& X% A' [, i$ M  m
window.location.reload()
# \$ w3 ]" P, b5 |- P, @8 C7 r</code></pre>8 g) T) J& ^9 B1 m
<h3 id="32-弹出框">3.2 弹出框</h3>6 {% a  O+ H* J
<p>三种消息框:警告框、确认框、提示框。</p>
9 n" s  [3 W' ^( M<h4 id="321-警告框">3.2.1 警告框</h4>
" a+ z2 \+ L! e1 v3 B% z<pre><code class="language-javascript">alert("Hello")
$ S3 M# i/ @0 F$ d" r' ]</code></pre>4 D  T. `1 s! x0 o8 q
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>" g' X: y4 J7 W7 u* T8 I
<h4 id="322-确认框">3.2.2 确认框</h4>
- Q5 @5 q2 z1 Q<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
7 q0 U9 A: t9 M/ ^+ j" O<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
! C' Q' C5 [0 Ptrue
5 L5 i# ]* k. E4 v& N&gt; confirm("你确定吗?")  // 点取消返回false. y. b6 z" u& j$ m
false
" N, G8 d! k- n+ i: Y</code></pre>: {& [) S% G. G2 X4 J
<h4 id="323-提示框">3.2.3 提示框</h4>
4 v' H2 O. c0 O7 j) U' w( h<p><code>prompt("请输入","提示")</code></p>3 \% _$ |3 J4 p% ^; T3 H2 R, D
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
; q* e! P7 k( X9 j+ P<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>9 @3 j" C# Y4 w  Z! ^$ T# z
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>8 m' C6 m) `( X
<h3 id="33-计时相关">3.3 计时相关</h3>
. x" t! ]+ y" z" @<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
8 y4 O  _% l1 P) u6 z+ l<pre><code class="language-javascript">// 等于3秒钟弹窗" R6 P! E" M$ [& W& D, a
setTimeout(function(){alert("Hello")}, 3000)
3 z: X4 [# W6 I- J* l/ V6 Z
$ Q- P6 j6 u  {. r+ {$ avar t = setTimeout(function(){alert("Hello")}, 3000)4 m9 m5 T( Y! [6 {- m6 ]

6 p' A6 |5 r. z; g* |// 取消setTimeout设置4 N' |5 `7 `# a
clearTimeout(t)* K- z$ t+ F3 [3 @4 q; E
</code></pre>* b4 A% K0 X- G% j6 f$ v
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>4 D; r( p8 k0 W: H- c: J
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>5 q4 F: g2 O+ \6 i" T( M3 h4 G) a, [
<pre><code class="language-javascript">每三秒弹出 "hello" :* h: c% U; b* s3 ~  c# N
setInterval(function(){alert("Hello")},3000);
5 w! a+ m. W+ p7 X" ~</code></pre>
6 J3 O" W" J7 }0 `2 Z! f<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>. d" u- m/ i3 X$ K3 R8 ?0 O
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);/ t9 Y+ ]5 x" x
//取消:* P, F4 X. i& J+ c
clearInterval(t); Q" }9 {2 h7 q" @* L" Y
</code></pre>
& _2 N- i& O4 _% Z2 a8 p+ P1 ^2 a+ m! z0 A) O- P
回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-27 00:11 , Processed in 0.075819 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表