飞雪团队

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

前端之JavaScript

[复制链接]

8058

主题

8146

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26504
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
+ Z% H( C* G. `% t) L
<h1 id="前端之javascript">前端之JavaScript</h1>
+ s7 o4 a: _( D3 V: V<p></p><p></p>
; K, d) S9 {# x2 C$ I0 h<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
. `: ]" h" k+ U: k% G) {7 s' G<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>6 K1 M* b! ~0 S% v
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
0 T1 O1 }( t# }# \# |# m它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>+ @; t5 |3 E% E" @. E
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>, U2 G/ u/ @6 {: ^# Z
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>3 M: h- @% e$ p% N& ?
<h3 id="21-注释">2.1 注释</h3>
" b! c5 [# q9 p3 G* T4 h<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>' q; j% S1 g9 k3 K
<pre><code class="language-javascript">// 这是单行注释
' C7 B8 i: D: [4 q: \  n% V
) q; i( n- }: m$ ?" }! f: A/*
* G( W: O  @# T- b  O这是多行注释的第一行,
" X0 U5 q% _1 S' A这是第二行。
. Y3 a  u  C, x+ W. C4 Y7 H*/
8 G5 t# |, d3 f9 m1 r/ ^</code></pre>) N7 V* ~9 R# ~& u
<h3 id="22-变量和常量">2.2 变量和常量</h3>4 h: h$ R: A+ Q) V3 z
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
' ]6 @, M7 [# J<ul>& [: w! u' U1 D
<li>变量必须以字母开头</li>
+ p! n6 V; F" }# o* |1 F; L( {<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>* C5 T8 k) s  k7 e: \) Z
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 J& ^3 P: z4 g/ g</ul>5 V$ H: A1 Z% w3 w% J; h7 V
<p><code>var</code>定义的都为全局变量</p>
4 A& G3 T) [0 |* q<p><code>let</code>可以声明局部变量</p>, @2 m0 h9 y7 m* j1 V* p; P
<p><strong>声明变量:</strong></p>
6 `) e- b) S, i3 C9 X* @& C<pre><code class="language-javascript">// 定义单个变量, {; g, A9 J+ b0 q) }5 J8 S! L
&gt; var name# K2 z* f# `6 a) Y0 C7 |6 @1 }
&gt; name = 'Hans'
6 u" u/ l. w! I4 ]5 p- i* H4 E//定义并赋值
' ?5 F1 Z* A5 O& V% ^&gt; var name = 'Hans'
1 v. F& q4 s5 ?' d&gt; name
8 `8 z- D6 \5 E8 V; j) G'Hans'
. {' c7 x& U* Q; D  X" R- U
/ f# y, }+ E: F3 w: m// 定义多个变量# e1 g1 L& `% a# |5 M/ h
&gt; var name = "Hans", age = 18
1 R1 u; e2 J" l) ^' ~&gt; name; C, v) X5 T' H; _, D
'Hans'7 ]# [! U, o3 A9 z2 G0 s
&gt; age5 `6 ]2 j6 W6 r$ `! Y; i
18
2 _/ d% H/ M2 J$ N6 r$ a- K- j! ^$ R! N# _1 {
//多行使用反引号`` 类型python中的三引号
8 ~0 b. C9 t. _) t" }1 Z&gt; var text = `A young idler,
* A0 N; @; v# C. i) J' uan old beggar`
' `* m9 d- F& {# H5 ?0 c&gt; text
& B* q* f$ G; t" @2 X7 v; L'A young idler,\nan old beggar'0 J$ `3 M. R3 ?" ^  n
</code></pre>
* F. g  V7 W3 r% y: ^<p><strong>声明常量:</strong></p>2 \% U% F; @. G" g4 H" d1 L
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>4 Z8 L3 T9 a0 P
<pre><code class="language-javascript">&gt; const pi = 3.14! V. B! t3 ~! V6 S8 ~
&gt; pi
; c5 T( U# N" _/ F3.145 I7 I( g& ~- R% e1 w1 m
&gt;  pi = 3.015 m0 V, _9 [; ?7 p
Uncaught TypeError: Assignment to constant variable./ H- Y  s' h( Y+ J
    at &lt;anonymous&gt;:1:4
; t. ^; _; X* s" u
8 C; _. p3 K. ]& X</code></pre>
; J' x9 j  y# o1 j2 T' x<h3 id="23-基本数据类型">2.3 基本数据类型</h3>3 {$ @6 c% a) A8 d3 H
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 S% x6 l! @1 p) V
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>4 F% a& V. z8 b2 D0 T7 U
<h4 id="231-number类型">2.3.1 Number类型</h4>7 T! b2 x* v9 V0 j% }4 {
<pre><code class="language-javascript">&gt; var a = 56 H2 S1 Q& ?( E% m* ~
&gt; typeof a   //查看变量的类型  ( z% E0 \# `  ?5 v
number: i7 G( j- n" {7 \

% X  |1 W4 H6 ^1 v6 D! D&gt; var b = 1.3
  b) e) r& z& i9 G&gt; typeof b
% n6 X# M* G2 L8 J1 I4 qnumber+ ~9 O6 ?6 o+ K1 `

9 ^! h* ?0 J( [) n3 t# X% `// 不管整型还是浮点型打开出来的结果都是number类型
0 C$ s% c: n' ?3 O& A( t& h, O
& t7 `/ s4 e9 K& q% r% \/*7 }4 n1 k! F1 P: R" |0 `+ `: }
NaN:Not A Number
- G1 f; Z  {) h7 PNaN属于数值类型 表示的意思是 不是一个数字
* i, a- H" ^8 X- ^*/" V) g% i  F' Z" J2 u4 l

. a5 l: j" `/ x4 o; [! WparseInt('2345')  // 转整型6 Z. Z" S% [1 i, k5 O5 a
2345* X* G( H/ [# |
parseInt('2345.5')! V+ |4 u7 L# o8 K
2345
/ H% o( ]5 V/ m9 k$ I$ a- {parseFloat('2345.5') // 转浮点型
' e& z& |7 a8 E8 l, C2345.5
* K2 D$ f) D  |3 S7 ~4 _parseFloat('ABC')- z4 {3 H: Q% Y' Y- [
NaN
6 n; l" X% p3 f! t: _parseInt('abc')0 r0 ?2 I/ w6 k' B
NaN
/ r! n5 Z( J4 ?. l8 ?! q</code></pre>
1 n, i+ \2 {9 X  q' R1 h$ d<h4 id="232-string类型">2.3.2 String类型</h4>! @* L. g  n6 b/ e: m+ U- d. I
<pre><code class="language-javascript">&gt; var name = 'Hans'
5 @0 _3 D7 _4 D. X. x- q&gt; typeof name
0 |% f0 s3 h1 x5 Y  P/ K'string'! N; _' X) }; K8 B9 y* L5 M

/ K( y; b- Q. `% _( O//常用方法& _6 A, n# [5 g4 s( Q& w
// 变量值长度
/ ^+ p" x# q$ }" z&gt; name.length" y* [6 B7 E3 ]) J
4  u* y; j2 a  Q
// trim() 移除空白
7 e1 K, e! P- d' O&gt; var a = '    ABC    '/ {/ e6 o% D3 I$ F( j! N9 W) q
&gt; a
- V6 z1 n: B/ v, u'    ABC    '! Y1 d. H6 g' |7 p7 ~
&gt; a.trim()3 y: w& P% N4 g; _& N& U$ ?6 g
'ABC'
8 O/ W* a9 z8 F: b" Q0 V5 e2 l//移除左边的空白2 f3 n( a* S# @. K- q2 d
&gt; a.trimLeft()
; V5 n# x* h9 C# w( \1 {'ABC    '
+ m: {) `+ X* [- F5 V% l//移除右边的空白6 A7 x7 G# I: x) n9 f" j" G7 |
&gt; a.trimRight()
/ Y8 m. T% S! v4 Q, w7 T'    ABC'
' j1 ^$ H( ~# z6 L/ e
: g; q8 }: x3 p; r  y9 a//返回第n个字符,从0开始
% V' x- k2 W, v* m+ i/ T* A& C&gt; name1 Y# J0 f2 Z# C1 Q2 c' y
'Hans'
& m9 B. L- N6 l3 M&gt; name.charAt(3)) L' h+ b! W2 x8 U9 r
's'
" n2 p; d1 E1 X3 ]5 k- ?: H1 ?&gt; name.charAt()" d2 R6 P, e0 D& v: u4 P
'H'
/ g2 v: j: m+ d0 w; |- X: N&gt; name.charAt(1)1 f" l+ O8 n8 s
'a'* k/ {; L3 B8 q% O6 r: q5 F

1 J7 o7 {: |; j5 }; e// 在javascript中推荐使用加号(+)拼接8 ~4 H5 l% G* s! y/ v- t
&gt; name
! O& l) O* ?" I% u& ^'Hans'7 ^# p& {8 L0 C4 q* s
&gt; a( A' _+ E- W4 n5 v% H* B
'    ABC    '- o1 X& U  z; l! K3 R' {  R8 l; n
&gt; name + a; g) b! s; H0 U* b/ S* z
'Hans    ABC    '
5 p+ w7 ~/ f6 m% k! e- Z: p% X2 M// 使用concat拼接  w. S0 n$ S: d( ]
&gt; name.concat(a)" t9 ]+ {4 F9 J# k* `
'Hans    ABC    '* E* }4 f; R: o3 v

& ]% o& h: c" }4 \* S  [* f* a//indexOf(substring, start)子序列位置
5 y# a" L2 ~9 f  s$ @9 `" c! x& G8 `  k; R9 a$ W& E
&gt; text
1 o! V/ C/ g) |) x" ?8 T'A young idler,\nan old beggar'1 Y: m  G" J3 z: }' n
&gt; text.indexOf('young',0)
* D8 Y8 z% V) k8 T: S+ y2- ?3 i/ B3 u7 y5 ?* C5 P, s2 H; |' p  q

) e; H6 m& t; r4 u3 ~//.substring(from, to)        根据索引获取子序列, h7 [9 Y: ^4 P6 F8 \& d/ |
&gt; text.substring(0,)% n! Q& ^# M- x1 q2 {6 a1 v
'A young idler,\nan old beggar'3 [  x' s8 V4 F& G( h3 B) B
&gt; text.substring(0,10)
+ o) A  F/ O5 B/ x& i0 `  R/ G% x  I'A young id'
8 Y4 e7 s- Z( E$ g$ O
( ]% H. u. W4 o- \9 n, ?: |// .slice(start, end)        切片, 从0开始顾头不顾尾( c! x. ^+ e) T. Y+ J+ b: Y
&gt; name.slice(0,3)
, X3 c# t/ v" @  ?4 C! s4 n7 P'Han'' i2 y$ W7 h) H% t0 _' X
7 K1 m/ @# ?& P1 u$ q6 B
// 转小写
1 t- @' e! i- `( `, {&gt; name
/ T" T% q5 b) U) }) [' P'Hans'' }. ^) Z1 K7 ?0 M
&gt; name.toLowerCase()- B5 P& L/ m$ L, e& U
'hans'
) C/ s  z2 l% k// 转大写
+ I% b+ W! `4 M0 ]&gt; name.toUpperCase()
: `" a' h, n5 T. X7 F'HANS'* |/ S- O: N) u+ @: \0 N

: S' ^! z7 a: N3 M, G5 o% B# J// 分隔
; J+ h4 a. G% @0 ^&gt; name0 j! K" ]8 r5 W3 N( `: n% r$ Y
'Hans'
" w0 T9 Y3 U! a; R# i&gt; name.split('a')
. j* O- S; r8 O/ C(2)&nbsp;['H', 'ns']3 \) o- M' r# x' L2 F
</code></pre>
" m& s" @8 g# b5 k* E<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>/ g+ W5 L3 Q- h- c! K2 D4 c: E
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
' d' S* A* t8 b3 @' ?+ X' b. ]8 t0 F" K* X<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>* z2 p( X2 }+ m7 s
<p><strong>null和undefined</strong></p>, r+ o8 @( e2 H# G
<ul>
1 x+ m  Z$ z5 W! w! Z<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
/ A) ^' K) j; U# x& g: o1 v8 L<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>- T+ ~  C5 r; R- K7 p# X  J+ r. D! q
</ul>( ^6 K% [9 ]* [9 X
<h4 id="234-array数组">2.3.4 Array数组</h4>; A; Q- F8 {$ j  }2 Z+ L4 |
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
' C9 Q7 o1 F% _! I* @. \<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
: o$ B# V; o& {# x9 w&gt; array1
/ o1 _3 f2 ~$ d(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, {' q/ i7 a' k2 t&gt; console.log(array1[2])  //console.log打印类似python中的print
8 Q( q/ }! n9 [6 O8 A3
+ b$ f: g: y7 P0 a% p8 l9 W// length元素个数
: R, G$ K; g. t) D0 L, A, k&gt; array1.length/ t3 ~2 S# x/ [) b- L
6
* S# E6 U) E0 o// 在尾部增加元素,类型append
) j! u1 f6 S! i. }1 q0 h. s&gt; array1.push('D')& K1 [( m3 V! g  p
7
% x- c1 a4 `$ w) Q( i&gt; array1
, N8 T! P* v1 t) K- \7 t(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
: K: r* W: r; z+ z// 在头部增加元素
$ a/ \0 {  r4 T&gt; array1.unshift(0)2 G9 E" N( B  j3 r9 H+ o/ r+ [! k* v
82 N4 ^" N  X1 z8 T7 U/ ~
&gt; array1
) f9 C; h) c" a0 t' i(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']1 E' ]* F. i$ r0 p, i

) i7 y. \- k  _; s//取最后一个元素
2 e0 n3 N  T" g1 G, O. o&gt; array1.pop()
8 G" w6 y/ U& f, t'D'
1 O% M) n$ C( M3 F& Z&gt; array1! G: j7 y9 a% S% ~
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']" n0 t  A5 q/ G- x
//取头部元素
4 R3 p) b( K$ Y) k; M% t&gt; array1.shift()
/ n% Z0 N5 G1 J& p- m: B0
! I' S4 Q& r- [, D&gt; array1# q: y3 [) ]9 D/ F# Y" ]
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 R, J" f# m# k! R

; V6 ]7 r+ _# i1 H//切片, 从0开始顾头不顾尾1 @' H7 @" s. Q# R0 ^0 v5 C( V$ }2 S
&gt; array1.slice(3,6)# L, d) g) C& j/ }; H* k; [
(3)&nbsp;['a', 'b', 'c']6 W2 P5 v- q4 l! j
// 反转7 s1 h+ e' b, E; @1 U, g0 C0 d
&gt; array1.reverse()5 @. k0 F- L; }) i. K" J6 r
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
/ V8 w5 \7 }# Q4 u7 A// 将数组元素连接成字符串
* H6 V+ w* G! ^/ D9 P% F&gt; array1.join() // 什么不都写默认使用逗号分隔+ t/ [4 k- M& q' `  |' |
'c,b,a,3,2,1'
4 N3 V% ^+ @7 Z6 a8 K&gt; array1.join('')
- ]0 |7 d( l1 i2 y( ['cba321'4 s) |3 F: ^! t  p
&gt; array1.join('|')
3 P# i4 `4 v" A9 R4 a) E'c|b|a|3|2|1'
: \- h; U( |( @+ S) C# m) O8 V; b* H& a0 j& R* e9 \+ m3 w( [3 ^
// 连接数组5 `1 K  F" X. s2 n9 ]: N$ [. L4 `
&gt; var array2 = ['A','B','C']7 {. H: n, O! z$ l+ P! t1 z5 x# A9 S2 j: Q& k
&gt; array1.concat(array2)7 K( }: W2 T( g7 m! j1 b
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']8 F6 T) O  z1 ~* h: B3 P+ W4 H
4 [6 Z$ f9 m2 Q. e5 }& A7 C
// 排序
% z* D9 Q8 R" r: \&gt; array1.sort()0 j8 S5 J; Q& W* e; ]
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
( C/ m4 ~+ o7 N0 Q8 D5 n6 W: m, n7 q$ n/ z$ B
// 删除元素,并可以向数据组中添加新元素(可选)5 N2 D0 N, ]4 D. v
&gt; array1.splice(3,3)  // 删除元素
  S! a+ U/ ~5 b8 @8 C; S( D1 [5 O(3)&nbsp;['a', 'b', 'c']
" _+ `. |7 t* x9 u0 l2 x* r&gt; array1
3 \/ |( k- r: n/ @(3)&nbsp;[1, 2, 3]
1 n  D; J. Z- O! J& F&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
/ o. \) }' K$ `[]
! W2 K1 ?! L( b+ r7 L. b$ P- Y&gt; array1+ H* b, h* a, ]0 e( D9 S
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']2 e  |  E+ c0 Y; X

3 ?& p) s0 }. V! e/*% u6 f# V4 |1 }6 G
splice(index,howmany,item1,.....,itemX)
1 Q( R7 |% A0 R5 t) ~5 Vindex:必需,必须是数字。规定从何处添加/删除元素。& b- m1 K8 v1 l& K9 {
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
' j: S; h( ?7 D# P5 ritem1, ..., itemX        可选。要添加到数组的新元素) \9 v3 \0 S+ ^5 ^4 T" g
*/
. p; s% z$ R. v" T6 ?3 a% b
6 {) k& ~1 C  W4 M2 f# I. }6 V/ L9 D// forEach()        将数组的每个元素传递给回调函数. c/ M3 y- V/ z: N! e
&gt; array1.forEach(function test(n){console.log(n)}), G* a0 S9 w* c- ?: @
1) d- R8 ]. h; x7 O, e+ k
2
: S; _0 ]/ \0 r2 x- a3 C4 w9 z 3$ c+ B) q3 G; F+ p) l
A
& B6 ?2 `- k4 d1 I- b7 N B
8 @7 }$ [+ C) z1 [1 A C
6 ~* u* o9 H. G// 返回一个数组元素调用函数处理后的值的新数组0 v, a, ^( y8 x2 B5 e9 s
&gt; array1.map(function(value){return value +1})
8 Z8 q3 O; K' Q& b4 Q; g  w0 r(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
: P' J5 |  V0 r: I+ F6 q& p  N</code></pre>
8 X5 x! `: o" V8 h/ I' z5 c2 |1 C5 q<h3 id="24-运算符">2.4 运算符</h3>
$ Y1 T( ~$ @0 d) X5 }2 r0 e<h4 id="241-数学运算符">2.4.1 数学运算符</h4>, c* w7 S( w! `" W  o; J+ d
<p><code>+ - * / % ++ --</code></p>
2 Z: S, b% o. Y0 }. o  p<pre><code class="language-javascript">&gt; var a = 6
+ M& t, b4 @* K& e& s+ r/ b&gt; var b = 3
% `# _4 E, J& j// 加( u/ F3 V5 B4 Y- V) ]/ G' a( I
&gt; a + b" t* V3 j7 s7 ^. r6 Y) }
9
4 n2 w3 u: [" G1 \7 W0 T// 减
9 K2 `" `) U8 S5 v+ V/ q0 e&gt; a - b
; _& Y& r% F! w9 E# L7 k3
+ H6 y. p: P9 q/ Q* X- @// 乘
9 f8 q5 @! O8 M1 m9 t/ h&gt; a * b
' T7 X. B* i& w1 i# M$ t; R18
9 f' p. W5 `8 ~! b8 P# ^% D8 A// 除
9 t! {, ]. i( @) ^3 \4 q( h&gt; a / b( V, h  M) \3 o4 u
2) T- x5 w% N" H9 d1 z' k; \
// 取模(取余)! I5 D/ k6 n( n) F( c
&gt; a % b
6 D! [: g& {; `! ]" c6 P00 ~9 [1 t" R1 r
// 自增1(先赋值再增1)
( N* |8 N( k/ ]. g$ Z* i&gt; a++" n7 G$ q4 ^) O0 N
6* D5 {+ p6 h$ S: U" _
&gt; a
3 [4 g! q5 t& ~+ C6 S: r" w, B7
* }4 y! [9 x5 J6 E6 ?' y* z& t7 M// 自减1(先赋值再减1)) D* i6 _6 L+ A0 w
&gt; a--
& j1 I0 B. |0 k( @3 v' S7
: N2 O0 Y( i5 ]2 q& Y&gt; a$ j3 O) e4 i( k) d/ m( Z$ C
67 U/ \/ H) x& Q% e- X2 _
// 自增1(先增1再赋值)
* T; T& B. P0 [" \7 A2 L  y: `- T&gt; ++a$ }4 [: g" K+ z" ]! o! l9 _
7- p' e+ x! Q0 K# Y6 l( e) \
// 自减1(先减1再赋值)0 }  Z! x6 u' @( ^$ Z5 R! c
&gt; --a
, T7 S3 g+ L9 [. K/ a6: t6 H5 }0 P, [7 ?  Y+ C
&gt; a: R' T' I$ M  O; h& C
6  m2 k& N4 \( o9 x

( p7 ~3 W1 o! f$ A$ k//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
* y3 H! k/ d( @7 C2 `0 Z9 \9 k2 |</code></pre>
- d9 d: W+ z% n1 h<h4 id="242-比较运算符">2.4.2 比较运算符</h4>0 t+ b/ U9 z2 X: }) J) V
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ c% ~$ k. q+ J. b. K* U
<pre><code class="language-javascript">// 大于: L4 ~4 H# q6 m0 d0 D' k  a
&gt; a &gt; b4 H1 M. h4 J. x) ~
true
# R! R3 o& w# n2 B5 z3 Y' X! e% a// 大于等于
* D) M1 V# S5 M# f* w&gt; a &gt;= b2 Y2 q4 h2 H& T
true
' Q$ R  b7 V) @% ]// 小于# h4 _& T1 z" p  @3 }
&gt; a &lt; b' O4 Q8 D7 G- k
false5 u& u; T' u9 o$ O. ]* E
// 小于等于6 `$ }7 d' F6 H! t5 m& J$ w
&gt; a &lt;= b" M/ v3 f- x5 o3 x
false
1 e: Z! D$ f( V: p* J! M0 f) u' s  e// 弱不等于7 l0 A" |9 r1 @/ A! ]% ]! O8 O
&gt; a != b
- h& l2 K+ q2 U8 ~! |# Z8 itrue
! X% T" T9 L* E/ i4 F5 \6 z// 弱等于9 I: \9 `+ y4 }9 q: m+ r
&gt; 1 == '1'
8 p# `7 R, I6 h7 h* ?1 I/ Dtrue
7 e5 b7 e: E4 }$ S6 R, _' r! u1 m: c// 强等于$ b( g7 l1 O( |0 N0 i% G+ B4 P
&gt; 1 === '1'
% c9 ?( ^! V9 M; a1 S( P3 d6 P- l9 Tfalse. b- t! P+ `, F
// 强不等于
8 `/ @. E1 F; x- ?&gt; 1 !== '1'
: a6 A5 u* D- b; J9 j* W* Htrue+ f6 ], K* s; K- S
, u, e$ X8 u2 y5 Z! Z
/*
7 F! Z5 q  \  JJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误5 k/ P* r! V7 C/ g6 k1 x
*/7 b1 Y  E/ t: \7 ]
</code></pre>% V. L# @8 @/ x
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
/ J; c: u4 P0 Y4 `<p><code>&amp;&amp; || !</code></p>
( R  S  d5 B! Y8 Q" K0 {6 S7 u1 c<pre><code class="language-javascript">&amp;&amp; 与5 v1 I1 k. s6 ]' \8 r) S4 x! T
|| or / K+ B" i: O6 C: c" Z/ s& t
! 非
( `6 r9 Q2 I: ~- ?3 R( [  x</code></pre>
- [9 t6 w, f: q/ s- J<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>) b8 M9 U  }& R' D5 g
<p><code>= += -= *= /=</code></p>
; I- x' S2 v# |3 a<pre><code class="language-javascript">// 赋值2 [) b  R- e3 Z+ }1 s" ?$ C
&gt; var x = 3
5 b; `+ j' |. n( W// 加等于" n2 L1 [0 _) C' {/ ^( W6 f/ o
&gt; x += 2
' R' u0 g5 P. t7 a  d# s5 p5
% s& b" }8 |! n; G// 减等于) N' D- ]6 c. b( `
&gt; x -= 1
6 q9 b4 Z# V* H+ F" I# ]4
* l' N1 ?1 h: Y6 p5 A// 乘等于
9 v9 w8 F  }: Z7 `; P0 t&gt; x *= 2: Z9 F( y1 W  u$ L. h
8
* |9 B, S: X0 _# V) V8 h: \  b" H// 除等于' z5 J4 `7 }" c/ x
&gt; x /= 2
/ y$ \+ Z7 E; C3 P4 R- v. y+ V$ n4
; ]  w/ Y% {0 f5 i) z& T</code></pre>' S# i0 _: N- U! U# N# z
<h3 id="25-流程控制">2.5 流程控制</h3>1 a5 L0 m. ]8 v( N% _
<h4 id="251-if">2.5.1 if</h4>6 q1 N0 I  ], l" S% p' h
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}( u# `& T! q: @" C. L

) `1 s5 R7 n2 s8 q- m&gt; var x = 3- U1 F; Y" ?# R) X
&gt; if (x &gt; 2){console.log("OK")}( q7 W7 |/ s/ k" l9 U( I
OK4 y# o: B* b2 x6 W2 T/ D1 g3 n

; I# b1 `. Q) P" n/ R" L2, if(条件){条件成立执行代码} 5 u" d2 ]/ x* B! M
        else{条件不成立执行代码}% _9 d$ F9 t' o3 D0 H- w5 P

5 u( f3 q7 O8 v5 w7 o&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
( P. m. Y7 d0 v. i7 a' G'NO'
8 H/ i4 Z& O7 S$ @. E0 J& ~- p' f; }% Y
3, if(条件1){条件1成立执行代码} 8 ^. w5 J( m& _6 r( C& ^
        else if(条件2){条件2成立执行代码}
( |  x, K" P3 g/ K! p9 \4 J    else{上面条件都不成立执行代码}$ N- z  O( @3 X3 {' s
! }" I" W# A# F
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
1 i' o. \( C" N1 i, J* o Ha
* ^5 k% k5 u/ a</code></pre>- r" U) o5 T/ X5 o+ Q2 Z
<h4 id="252-switch">2.5.2 switch</h4>
: F% q& w+ s# X  z. U( u* d<pre><code class="language-javascript">var day = new Date().getDay();
( R1 p4 P; A; [. D4 ^switch (day) {
0 l/ ?  z+ c) t" w( O5 Q5 }: t0 {1 I+ r  case 0:
% n6 D# o5 A: _( o6 c  console.log("Sunday");$ g( \! E' ]8 d9 y* C
  break;: Q9 P2 d( `4 k1 d" j. ~
  case 1:
; h. J% A% w3 g( ~. o0 O6 j  console.log("Monday");# @/ [0 N& u5 ]) _- B( b
  break;
. r- `0 x6 Z( i; e& @default:
1 y1 L8 Q5 b! u  console.log("不在范围")
6 S' G+ A! t2 W' I4 P6 @& ]}
- {' l  l2 J8 q5 i+ a+ ^ 不在范围
: Q( t+ O  w0 E' N& u9 y( A</code></pre>
) t9 `4 I0 l- l1 Z$ F6 B<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>; d  F' o8 `2 n7 v- y0 l3 r& Z: N! A0 F
<h4 id="253-for">2.5.3 for</h4>0 [' C$ i; z4 H, ~
<pre><code class="language-python">// for 循环4 C3 B5 Q$ Q4 X& L/ A+ Q! e5 g6 C4 k
        for(起始值;循环条件;每次循环后执行的操作){
# X8 g" ^7 H; v+ @8 C+ j        for循环体代码$ K2 B9 |, r6 R% n/ @- K
    }, Q8 D0 w/ k6 c) A$ x
4 g, k0 M! V" y5 I( i/ b) E4 t" I% Q
for (var i = 0; i&lt;10; i++){9 m" t" ?/ Q9 s, K1 }1 K
    console.log(i)) J  x6 c( X% E% ]
}/ ]1 G- E1 ~2 c/ S* G" U
        0
3 c" _5 b1 |* \" y3 A        1
1 d8 x& B- \( x( Y        2
' p3 q! r) n. W0 K8 t5 U4 d        3+ h. k7 R: g: e9 M9 O
        4
' A' r& A8 v* N        5
/ F1 W6 ^% l$ x- c: {) D7 g8 o+ z# r        6
$ U6 x9 I( e/ k        7$ D2 {  Z, J  {8 C/ B! b6 k
        89 T, B2 Y5 l% {( L8 Y6 C+ I
        94 ]1 {) T' w. a# F5 ^* V& Q. X  ]
</code></pre>
; j" l( G* C1 Y( y$ n<h4 id="254-while">2.5.4 while</h4># Z  Q  ~5 x9 x7 [
<pre><code class="language-javascript">// while 循环! [$ E' S4 I* `! S- F
        while(循环条件){% w3 A* k6 Q6 K; I/ c
        循环体代码
- ]( v; _* Y; h( {    }( y% w/ `: X4 Z4 v
! C: S( d% [$ t# J& A+ p
&gt; var i = 0
6 x3 {- V: e/ U( T& @; u" t  h&gt; while(i&lt;10){' m8 k! l3 L: t2 ~' \% C4 I
    console.log(i)
! e+ w$ ^2 c8 ]- n    i++
! s0 x9 n% }3 i% P/ R* c0 j. x}; W1 b& n' _) Z
00 H' c# w; w' g) y& n0 Y7 h* U. J
1
. l7 J- p* V7 l. n+ v 2$ ~+ J3 j5 `! ?+ }( @% ^* Z& {
36 }" h$ s* ?- m& @
48 r  G) e" o7 P$ y. z# u$ f  x6 y( k# {
56 |4 y4 y" r; r# }! ^
6
" x% t  O+ |) T; K' c- f 72 I: W% A4 ]. \: ~1 N
81 U' u+ r' i1 Z# ~. R# x6 |
9
( V' s4 d: u# O9 Z6 J</code></pre>% @* I$ L% t$ s# O5 q! k3 `$ ~7 Y
<h4 id="255-break和continue">2.5.5 break和continue</h4>  X( a- ~& t5 h" I
<pre><code class="language-javascript">// break3 r1 r! ~- K. c( B# Y( V
for (var i = 0; i&lt;10; i++){1 r) l2 g) `4 q( F2 q" d0 O
    if (i == 5){break}
- [7 `/ U6 Z* d+ i6 i    console.log(i)4 ^  C# L3 m% D
}
: @  y% v9 b) m0 ^ 0
6 d0 [* `3 L* _5 Q3 y; I 1
# Z( p4 n1 K% |1 ]% j& z; F 2# `+ V$ \  k) |0 ?- D9 n2 G8 N5 {
3! S+ L2 K  d3 ~9 Q
40 f8 l! k) W4 I6 ?( \2 z
// continue" J% j" R% r7 g; z! e4 j
for (var i = 0; i&lt;10; i++){
9 _( H# e/ z$ S" I    if (i == 5){continue}+ B+ f0 K8 f) L; v1 Y% ]
    console.log(i)
0 O: N0 S* T2 @3 s}
- e2 d- |# H& H7 J2 O% A 0
4 |" U; `# b2 K  z# S! ~) K# M# | 1
* K0 N- |( D. s% R 26 J  f3 ^2 D( u% n0 H" T" H
3
2 s! f; r' @8 w/ r4 o) b 4" @0 Y- A" _9 \
6. ^- r/ k' \( S
7
4 ^) r% {6 V* q8 o 8
" `5 S, s+ [5 v 9, {- V" s- ?) @( k8 j: f
4 G, a# L3 L; J5 q1 P
</code></pre>
+ X/ X) }, L+ K3 X# o<h3 id="26-三元运算">2.6 三元运算</h3>
" D5 Z9 {  l$ K<pre><code class="language-javascript">&gt; a5 E4 `/ ?, Q% y1 [
6' e" b: f/ w  c! M7 R% \7 }
&gt; b0 x+ D( o1 ?! M/ V1 E: g; ^. e% u
3
& {( q: S# _' j8 u
$ d- ?* G5 F* `9 v5 x# r- C- Z//条件成立c为a的值,不成立c为b的值9 T( H$ a6 L$ U+ K" O, Z) |
&gt; var c = a &gt; b ? a : b0 h2 d' K5 m1 D
&gt; c
2 A, b+ ~. B. ~$ e0 j6
- b8 y- i, S5 F
1 G3 G& C( E( Y  c& L// 三元运算可以嵌套- Z* q) X: y3 N! s$ X9 x
</code></pre>+ K' @, f3 J% F1 C( W0 b
<h3 id="27-函数">2.7 函数</h3>
( C3 x; y6 `9 k# c<pre><code class="language-javascript">1. 普通函数
  I9 g; ^/ X# a1 a3 K* {&gt; function foo1(){' |# J. L- ^! K
    console.log("Hi")
4 Z0 o: C% c+ o) ^}$ V  @3 C% F  M  m' M4 R
. l5 Q) X3 b- D
&gt; foo1()
' V9 g; P2 O5 M4 x  |. k- U- y        Hi
7 w9 c* J% O) ^2. 带参数函数
* z9 G  p6 M) D  x1 y9 a&gt; function foo1(name){
9 [% z; F! n; Kconsole.log("Hi",name)
! S$ z! _: {2 M2 x4 s) n; @: F( ]}+ y9 w* X' R: I5 W2 p* q
6 }" l9 {( E- ]- Q. J; a
&gt; foo1("Hans")
# l  X) o  J& F3 XHi Hans$ @6 L/ P3 L8 \: [0 t; z
; C* I5 N5 Q) J& G' Z$ T
&gt; var name = "Hello"/ A, [. I" w, q( l& A- R
&gt; foo1(name)6 h9 E  C& I+ I0 S
Hi Hello7 S9 F% u9 m+ C% w; x/ {/ ~6 \
3 ?$ G5 ~7 P$ Z9 l4 ^0 m
3. 带返回值函数2 ^! C( Y' c" G7 @1 {& G0 {
&gt; function foo1(a,b){+ J6 v) p( Q9 x
        return a + b   
# i+ k$ D" Z3 B+ ~# G: v% n4 X( W$ x}
, H2 o9 O" Q. M&gt; foo1(1,2)0 \. B5 b* U0 Q9 X" D. }
3
4 w9 t; e2 b- h# ]# N/ c6 `2 E2 |&gt; var a = foo1(10,20)  //接受函数返回值
4 k3 U4 Y4 d5 i/ e. L  |&gt; a& G$ a% {6 \' O) s3 L2 e
30
, m0 b2 @0 a$ s( S" N4 o1 K- ?# i( a! Z4 Y0 ^; ]/ S5 u
4. 匿名函数; _1 @. v6 a/ a$ H$ ^" @2 e& N
&gt; var sum = function(a, b){
' y- T9 t  M5 I) R& U$ V' v: z7 t# i  return a + b;9 p  }. q# p9 P1 i4 ^1 i  i$ @
}+ T- Z5 X0 ]$ C- s6 F# i6 `
&gt; sum(1,2)
7 I8 N: B$ L  U; U8 V3
0 e  s4 y) r) }. t5 b3 @2 g0 e1 |, d# `7 j+ W2 q3 y; @! j6 l
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱' t3 D( z" J4 ?
&gt; (function(a, b){
4 v* r4 f! U* \1 Y. S7 y  return a + b- B$ z( @9 j% ]6 x* p1 G- [
})(10, 20)$ P& q9 k  R9 A0 B9 Q9 m) L
30
; Z' j% `2 r4 F  p. U
1 E8 o; u; s3 ]3 A$ u5. 闭包函数
$ |7 ^6 W5 n2 }$ T// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数8 t0 a/ h* f' }6 k2 \' U
var city = "BJ"
' x8 k2 F8 c8 R3 W  q2 L! t# f: wfunction f(){
# E+ d4 b2 Y; |% e9 e# w- Z; z    var city = "SH"
9 w: Q# `: d' ^. ?% @5 v7 F    function inner(){
( C4 l% X: A0 B        console.log(city)# k1 g, S, Z% w0 |) q
    }. n0 ~& ]! L1 T9 F7 p
    return inner
7 ]( b& M, H- D* u0 b}( v5 h, ]( S% E. l! |: Z
var ret = f()
, H8 [3 E  D+ j) w4 l7 mret()
  {& |, L3 o0 n% m: T/ b+ D执行结果:- h: {0 j( ]( s5 [! u" t0 Q* r- w
SH
6 K1 h9 q  z# f; z
2 R" s7 v8 {. ?</code></pre>* Z: c- s  ?, X8 G. S) e& _  |
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>3 F4 M; d/ N- o9 Z- Q) f9 t
<pre><code class="language-javascript">var f = v =&gt; v;
6 y7 g2 _& g& B! |// 等同于0 X) W- ^, b5 k6 U" }
var f = function(v){9 N6 P5 X% X0 w5 n- ~
  return v;8 t* H1 e: M7 ?9 s& R
}9 K  P" k- C- q7 j
</code></pre>
$ F# A. W2 x. L1 P' s<p><code>arguments</code>参数 可以获取传入的所有数据</p>& A+ ^: j9 M& g7 |! V
<pre><code class="language-javascript">function foo1(a,b){7 C, ?4 D8 y3 V3 x
    console.log(arguments.length)  //参数的个数
( {" x% J9 J0 \. g! c" n( S; R    console.log(arguments[0]) // 第一个参数的值
/ A$ c* I2 ?& {! v: _* M' f' q        return a + b   
% V& U5 o* P2 a. s}
/ W0 v5 g6 y; z$ gfoo1(10,20)
3 {* `& X4 t" Z5 m结果:& @  F3 ?" h7 G0 w7 M
2          //参数的个数 ( v. a( ~7 n& f, ~3 s- f, N) s
10        // 第一个参数的值
3 H0 v) L5 G# h  @3 h30        // 返回相加的结果0 L6 R( T$ B. O' k0 s) V3 e
</code></pre>
6 k4 |! Y  u6 X: Y0 T/ N<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>8 u2 O1 ^1 i9 x8 d) m! Z
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>- s2 @# C; M! j/ u4 Y2 a
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
" G9 g% D( ~  p% L0 k, m<h4 id="281-date对象">2.8.1 Date对象</h4>1 W5 G; v  x2 {1 M& \# `6 n3 S1 L% _
<pre><code class="language-javascript">&gt; var data_test = new Date()- v2 S( k* g0 }6 p
&gt; data_test% k8 A' t$ M* m& N: b, f( j4 i) R
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
: h/ _5 n5 Z: s* N7 F&gt; data_test.toLocaleString()
8 A( C4 w- \* J. X' L# k0 ]1 X'2022/2/11 下午9:44:43'' D7 f/ G! o  r7 F" d. r

% T( w1 N/ a" }4 r&gt; data_test.toLocaleDateString()
& t" U9 Q3 D1 L. Z( D7 H0 ~6 ^' w- \% u'2022/2/11'
4 u9 X$ N' k; h9 B% d/ A; p* ?, b8 K. T4 T& }7 R  E
&gt; var data_test2  = new Date("2022/2/11 9:44:43")$ S9 }9 v  f! l5 ?% n
&gt; data_test2.toLocaleString()
1 V  n5 L- N! [& e8 b( ['2022/2/11 上午9:44:43'. L: y) r! y1 @5 r9 \3 x6 d
7 X( P6 w2 _+ Q  `' @! ~. P( m9 J
// 获取当前几号4 v% Z8 x4 h% E
&gt; data_test.getDate()" q. l2 \  n* ?+ W
11
( E+ g& _/ N! x- L7 l5 W// 获取星期几,数字表示
$ E* |+ y9 k9 E  Y! H) o' J8 a, Y&gt; data_test.getDay()  
! N1 x( g- h7 P3 T  q; {. U6 G4 `5
# N7 h7 v! t: b: m  D: x* F// 获取月份(0-11)
4 @4 R# r2 a" S  r( a8 L# v&gt; data_test.getMonth()9 c  K) j3 E; c) k
1
( ~) u1 }, i, f. Q: G) Z// 获取完整年份
; m& |3 [2 b4 i, V$ n&gt; data_test.getFullYear()
. m( ?# [( D9 K- B0 l8 m20229 D5 M; `- S- {0 G
// 获取时
( d% B5 [4 N2 L' y, y+ N3 o" l&gt; data_test.getHours()
* G; h* \/ V2 g6 G- @8 I218 \1 F* b- R, y+ p# u  c6 G
// 获取分
9 }3 ?  h, Q2 d8 B1 J  ~* l$ F&gt; data_test.getMinutes()
7 J5 R, y+ D; M44  {% Z# U5 Q6 q' s
// 获取秒
8 n, J/ J6 d$ x- ?' H, F" q5 p3 T. [3 i&gt; data_test.getSeconds()
# u: ^4 @/ W# S) d6 I/ U43
) R) m& a* Y5 w' v// 获取毫秒4 t) P8 s6 \) C: J( x, J
&gt; data_test.getMilliseconds(). e/ T/ A8 Y8 r1 r
290& t; K* E7 N) e) G* n$ f% e
// 获取时间戳
. t( L0 M9 s9 f% Z3 W2 Z% ]&gt; data_test.getTime()
. v/ W" m% P" w! B; T1644587083290! j+ N8 G3 p0 t+ G1 B- b
</code></pre>
" L! i$ ^  T2 r<h4 id="282-json对象">2.8.2 Json对象</h4>; T: h+ _$ O8 ~
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串  E/ S% q, r& c2 a: C, s* h
JSON.parse()  // 反序列化,把JSON字符串转换成对象
- r9 _; ]# |" K9 r, V9 P' I0 N8 t# Y8 C/ S& b' _# @) g8 S/ C/ r
// 序列化8 U% c& t2 F) ^. y
&gt; var jstojson = JSON.stringify(person) 5 `* X& [6 }3 \& D
&gt; jstojson  " z* e6 H, {! j. o, [' `7 d+ F
'{"Name":"Hans","Age":18}'$ p! @  F7 E7 I  |

3 l/ n* B$ Z! O6 L% f) [& t// 反序列化
& V- w+ f; }' ]( _. z% S# r5 o& w&gt; var x = JSON.parse(jstojson)
0 t- N; @! B7 V&gt; x: q- t# i* ]7 d1 T* @
{Name: 'Hans', Age: 18}$ r  v6 }" n" ]* ~0 `. a) n  j
&gt; x.Age
2 w' E: f+ G" }1 C0 Y: Y18" s  g! u- S  `) g# L$ k/ j, b
</code></pre>
% A, Q6 Y* v, f/ j<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# D' }3 j9 y  G<p>正则</p>8 ~" @. A2 P6 B/ w9 l! O9 ?* S" ~
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");! D! V/ _$ x0 J( n! y
&gt; reg1' I/ Q( H7 X! _! E* J
/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 a: I9 E2 k1 K& H( G6 b
&gt; reg1.test("Hans666")
9 N3 h7 D- t* F* ktrue- H. t% M9 u( ^9 F' M" E8 D

; ~# D- q% k' X/ I- c&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/. u: J% r, x3 Z
&gt; reg2
. ~$ b( o: f0 J/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 W5 M; I+ q& B+ I+ u& t&gt; reg2.test('Hasdfa')
( J2 ?( x5 S4 B4 ^4 }0 v# {, a' j% dtrue
2 }) l* e$ ^1 W1 R# s  m" R5 ~( @8 i- H0 i: p5 o# |
全局匹配:- i: U7 Z- ?% ]( }
&gt; name
2 D/ ]6 B0 A* ?5 {'Hello'
7 n! w- i; e( F  z3 i, [! N8 W&gt; name.match(/l/)
6 Z! i. |  I6 U' m['l', index: 2, input: 'Hello', groups: undefined]! _) `, i* G5 i0 C+ M; l

$ i' y$ Y+ k3 H&gt; name.match(/l/g)5 v7 w7 ]- _, \- P8 u) q9 F, Q6 n
(2)&nbsp;['l', 'l']
4 Z2 x( |: O3 J// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
( P2 k; I$ @* j2 F) t, `! v0 U1 F7 }1 t1 ]9 B
全局匹配注意事项:
3 S) o  g* A- L; _&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
2 U- p5 P2 I1 v. O&gt; reg2.test('Hasdfa')
( k! B7 R9 D: L3 D- N/ `3 z/ etrue
9 V. D/ y8 `9 C, O) i$ ^&gt;reg2.lastIndex;
/ l* L0 `& K" L5 A9 x  i6
1 l+ n& |8 {, R) u9 L3 m&gt; reg2.test('Hasdfa')
2 \' f9 y, k  ?! O" }! gfalse
$ b+ {0 `8 n; C* t* J' j&gt; reg2.lastIndex;
4 c( M( B: e  D( p9 b! r4 j  K0
- o  o: _  V1 C" V&gt; reg2.test('Hasdfa')" i) X8 k; P* j% O+ ~9 f! |
true
  |# j* k* k7 D1 @1 G&gt; reg2.lastIndex;( M$ M: p8 b2 c' t
6; ^+ d5 {6 o& T5 K
&gt; reg2.test('Hasdfa')$ O7 `0 X* v; t! R3 U3 P
false. [3 c3 m  G- R% w! I
&gt; reg2.lastIndex;
( A* P3 X3 r6 a$ G& P) a+ P0
. M- ^. y: [* ~// 全局匹配会有一个lastindex属性
1 s& a5 P, H( ~&gt; reg2.test()& y+ @* z* E, ]6 \
false
0 R6 P" @8 w4 I: f4 n6 p% U&gt; reg2.test()
& A7 S7 P2 o7 R* }- `) E% Strue) @( \4 f% g+ @2 j1 n5 v+ B' R3 I, R3 t
// 校验时不传参数默认传的是undefined. Z9 |. F- E0 l, ^
</code></pre>8 N4 h% R/ Z' m* x
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
% }2 T9 q/ e/ M* _. _) ~<p>就相当于是<code>python</code>中的字典</p>
8 T6 G& |+ S( M' W<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}6 }  q6 E5 d+ k. T1 _% X+ G- l
&gt; person9 z% ^: |1 F% o: k
{Name: 'Hans', Age: 18}+ h& }8 N) o0 ?. Z
&gt; person.Name
- ^/ U- V: j- m7 @/ A'Hans'+ P- r# q( `/ c  o; U
&gt; person["Name"]5 V" O0 K+ r6 p- T+ g7 }% d! ?
'Hans'0 ^% |% m+ G5 D) q/ ?, e
/ f  q2 R2 c& h  o  ^9 {4 }( C
// 也可以使用new Object创建0 G) Z3 ^0 l. }+ K, L% P+ L& u
&gt; var person2 = new Object()6 m' C0 c# Y% Y- I! f
&gt; person2.name = "Hello"
1 I- O8 c9 M2 e6 k' D'Hello'
1 g# y- ~8 i6 I6 J' ?5 d&gt; person2.age = 20. P. g8 J) y! l& a
20! s" m5 j8 H  N( a% T$ J
</code></pre>
# `* g$ H  u3 C# Z4 E<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>% ^+ Z# T: o5 H5 i2 {2 d
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>$ B6 i. b1 W$ k. P0 Y" v. V
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
$ |- x& A1 i! j* O0 D) s; e<h3 id="31-window-对象">3.1 window 对象</h3>9 Q8 a( b& d3 q2 c$ S1 m- q
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>- a8 y5 z0 y) Q! T9 r8 w9 |3 ~
<pre><code class="language-python">//览器窗口的内部高度. E! J  L+ E. N/ t
window.innerHeight
& X, X# u: R7 ^2 B  u706. Q9 B) }# X; {6 }; d# D
//浏览器窗口的内部宽度+ c2 r' |% {) e8 \) o
window.innerWidth  Y$ _: ~3 G) k: m; p
1522
% B% s1 w8 h$ E7 X2 K! R; O0 Q; A// 打开新窗口
! e. C# u* @+ Jwindow.open('https://www.baidu.com')
, x  o5 B6 T( m( T! hWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
5 z, y$ O7 i3 Z$ ~# @  j& e( ~// 关闭当前窗口
" [* ^; L7 I4 w6 w; zwindow.close() : }, Q" K* p' H& b" m
//  后退一页
3 h/ T1 c0 V8 y* I0 g& bwindow.history.back()* b! L0 _/ [1 {* h) t
// 前进一页9 b  h7 K, A: D3 y3 `
window.history.forward() # M; a9 \3 ~5 S
//Web浏览器全称% k' `& G5 C8 r4 j1 |( T8 r
window.navigator.appName
; S; M0 M: p/ L" `- ~'Netscape'* Q% y( ^% E6 h8 _( Q; H
// Web浏览器厂商和版本的详细字符串
5 }) k  E) M7 V* Y% l2 g+ Rwindow.navigator.appVersion( T$ ]. {& S& o' o& [& J
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 M2 A- c* M9 V' d2 y, v
// 客户端绝大部分信息: {) m: a" I2 M' `/ Q- W4 r
window.navigator.userAgent
+ R3 ^1 _6 j/ K' N'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'" q$ ~' j# k7 s1 a; G! I
// 浏览器运行所在的操作系统
- S; Y5 W( d6 k8 o- nwindow.navigator.platform2 W) x: _( e( D% C& K; }- @
'Win32'  o$ O, c* u  p

. N. {& H+ f. Q//  获取URL$ b' p, @" X7 y: W& U
window.location.href! J% H. v& [# L* L3 d+ a
// 跳转到指定页面
) \! j. H# o: M1 v3 \* ~window.location.href='https://www.baidu.com': T1 F2 A3 a/ _$ |% v! L# A
// 重新加载页面
; t  M. C) j" P0 T- ~+ ?window.location.reload() # e! g1 t; T/ w3 U7 n; T$ n
</code></pre>) N7 Q/ w) k( i4 D
<h3 id="32-弹出框">3.2 弹出框</h3>
6 l! t3 q) f+ p<p>三种消息框:警告框、确认框、提示框。</p>
  H( i/ }" ]$ o% P) l  R9 _) g0 s6 O<h4 id="321-警告框">3.2.1 警告框</h4>
1 |5 j$ B0 R9 M- V$ B<pre><code class="language-javascript">alert("Hello")# {: W4 I+ ^1 j$ O
</code></pre>
, y9 q  Z9 h2 X/ p9 t# X# R<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p># o# _( n  h0 p
<h4 id="322-确认框">3.2.2 确认框</h4>, s% Z) R4 @6 w$ w: L$ s! m$ ?2 H
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>, ^8 V( U; C2 _
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, g2 S+ O. I2 }9 [$ C$ x3 Q8 m* Mtrue( `1 Q6 v3 S0 {% b, U5 V
&gt; confirm("你确定吗?")  // 点取消返回false) V/ I9 B! q2 H( D, h2 u2 n6 z  |
false
5 W: V/ X/ j: D/ h</code></pre>, y3 r1 b* u! d; Y& x( z- Q
<h4 id="323-提示框">3.2.3 提示框</h4>
" `; o$ x, h) A+ @/ A# A( c<p><code>prompt("请输入","提示")</code></p>
9 a! i# X! y! t- {! v; c<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>+ ~% @2 Y7 B+ I! T7 ~3 Z2 Y
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>7 J, c& e7 |3 [# X. h  t
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ Q% o, f% y/ `
<h3 id="33-计时相关">3.3 计时相关</h3>- C5 R6 j; H$ |6 E# e3 z2 c5 k
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>$ I$ [% }7 @# t. v+ M4 l% o
<pre><code class="language-javascript">// 等于3秒钟弹窗
/ a4 q2 x; P* z# U& W+ O6 `setTimeout(function(){alert("Hello")}, 3000)7 F: b; b9 d/ w9 H; Q7 r; I
4 ~( |( t! h5 ~0 C* u
var t = setTimeout(function(){alert("Hello")}, 3000). h- K4 E; l+ `+ q
, L1 J5 J$ s5 B8 M; w+ ^" O
// 取消setTimeout设置3 j& O9 m6 Q  N) Q3 f$ Z5 Q9 t
clearTimeout(t)
0 T' [# Y. X. @! H! f</code></pre>, A7 z( I) C/ l0 u" x+ e! w% g5 s
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
9 C" }, u, ?6 Y1 N  v<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
: l2 v  W8 h+ M8 P6 o- s<pre><code class="language-javascript">每三秒弹出 "hello" :
$ `) B% [6 Z; m$ PsetInterval(function(){alert("Hello")},3000);
. w9 n1 Z" P+ f1 T  F</code></pre>
. o6 |' O+ U1 t; G9 E7 m9 K9 H<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
4 F. H, j! z3 P/ y( n<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
! K* t9 k6 s# t2 E& Q7 p//取消:, `) Y1 s4 ]9 p7 Z" i4 Y
clearInterval(t)
/ U! S5 t; S, H</code></pre>
$ B+ q) ~/ [, ]+ W$ q& W# R* R1 {, S; F
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-14 05:56 , Processed in 0.075130 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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