飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26456
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
, e; R2 G1 |( A$ ^# z
<h1 id="前端之javascript">前端之JavaScript</h1>! H& O# y* z. s$ D  L
<p></p><p></p>: U- ~* \$ P' s
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
- Z! e% \( t+ h) n) a+ b8 }3 m: F<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
( {: N$ U. Y6 @3 S% r它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
- u* n  w/ V, W  J1 }! \) P它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
& v* U6 H, O5 Q5 ~  n它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
( z) f; j0 w; ^/ i2 B+ L/ v<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
" j* U5 e, ]! W<h3 id="21-注释">2.1 注释</h3>
7 q, I5 s% ?! ^% ~" e+ p<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>! A5 t% r; G0 c; D! B
<pre><code class="language-javascript">// 这是单行注释
5 U. ]5 ?% V6 Z% ^* @! A' J: S- q$ U; G5 v5 n8 f3 D8 M
/*' q" k: i; Z( m4 d. x) _" D( V1 @
这是多行注释的第一行,% y  Y+ E1 E  H% M) ^2 R) \
这是第二行。. [6 E6 X; @' t* G% v; j  Y# \/ H; L
*/
  s% i9 Z3 e5 H4 Q+ A</code></pre>
. z7 h4 ]* f5 ]<h3 id="22-变量和常量">2.2 变量和常量</h3>
* ~7 r( P& g  \7 O1 H- u<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
# V( o6 E# Q6 |) V<ul>0 E, E; Z) E$ C3 g' C4 {3 y
<li>变量必须以字母开头</li>
- Q2 J6 |. \- C<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
% ]6 q* Z& ~( x/ r/ H<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>8 n0 T/ E. u1 ^9 k8 r3 Z# i
</ul>
# [( i2 u7 T" T% D- g<p><code>var</code>定义的都为全局变量</p>* U# s. Z; A# L! a+ E, W
<p><code>let</code>可以声明局部变量</p>' m% W) Y  e/ ~* l& |" L. }
<p><strong>声明变量:</strong></p>
3 M3 c! M1 i8 ]6 M5 o<pre><code class="language-javascript">// 定义单个变量, `& P# R1 ~- @' F5 [  W) H
&gt; var name7 i" f5 |( {& L9 ^
&gt; name = 'Hans'! j7 F5 |/ ]% |* F( @( v
//定义并赋值
  T: b( n8 K( p  e&gt; var name = 'Hans'+ Y, c8 H* b$ W* V$ `
&gt; name
5 i1 g5 Z; d) k) n$ A# m'Hans'3 I1 U. v0 b- T) X
4 j% ~+ L6 E  U$ r- Z
// 定义多个变量6 p. g- r- P4 o
&gt; var name = "Hans", age = 18/ e2 m! J1 m) j9 M; C9 A3 v
&gt; name+ {$ ]& F6 X/ U0 [) X' V- @+ W8 l
'Hans'
) u! ~' t$ @3 M2 F&gt; age
1 {/ ?, v5 V! _+ q8 I181 v3 {, p4 o! E& P9 }
# R5 m& o5 G6 u( G3 A3 V
//多行使用反引号`` 类型python中的三引号8 _" m9 c+ ]9 u# ~4 p1 k& m+ q/ D; a
&gt; var text = `A young idler,
9 [+ p9 D, p$ N' Q& Aan old beggar`
" s. [- v- k# A&gt; text
, h9 M# l( Q. X& ?/ E'A young idler,\nan old beggar'
- E. s' v. p& u# i  V5 }</code></pre>
2 f9 {, E' I+ u: Z' Z- i<p><strong>声明常量:</strong></p># \% s5 u$ \! T7 y4 Y% M
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
* z2 h' C/ \; G1 ]: d8 X% y8 `<pre><code class="language-javascript">&gt; const pi = 3.14
* p) s/ H: }5 z  l9 V9 p&gt; pi3 z. k& V3 {" G$ ~/ x. L) ?2 |
3.144 l: ~  W' V9 V+ f2 k" S; f# z
&gt;  pi = 3.01
9 I4 U- V/ F; P, `  M6 w5 FUncaught TypeError: Assignment to constant variable.
  s5 h; }* r6 m" K+ l7 H. q    at &lt;anonymous&gt;:1:4% o& ?9 c) d. f" M' V

6 S$ ?% r1 F+ k. P( \</code></pre>: @# W+ o' I% [7 E$ K* L4 k
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>0 o) Z) B% k4 x& G+ Z/ A8 P
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
6 p  \! f$ ]9 [. `<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
) N( ?( H2 l3 S<h4 id="231-number类型">2.3.1 Number类型</h4>$ P& E6 X6 C" @$ Q' ?
<pre><code class="language-javascript">&gt; var a = 5
( H- M! j( m2 ~7 Y5 ]3 B&gt; typeof a   //查看变量的类型  4 K- P. S4 |( S* j4 e: N0 R8 C
number" T& R4 @+ A  ^4 p+ a) y& }& D7 ]
' J" q* m$ L* w9 P7 P- D, v2 {2 M
&gt; var b = 1.3
( }( B/ g& R0 ~8 n5 t&gt; typeof b# C. i- D3 b6 p2 j' {! B
number
. t. i4 x$ B% z( `+ U8 f% I, C) [
6 ]" S# S* J1 w1 q3 g// 不管整型还是浮点型打开出来的结果都是number类型
% j4 f( i+ N8 a/ N- ~3 ~4 b
8 \: W- J( Q1 c/*
# Y/ a( Q6 w' a# @) X" C" TNaN:Not A Number2 ^, P. E2 q( Z
NaN属于数值类型 表示的意思是 不是一个数字0 P$ u9 f) ]; }* G4 S" |
*/1 ?8 ^) v3 H* M: Y- D3 i+ o- ?
; R& B# g) T/ v$ H, V
parseInt('2345')  // 转整型: m. e6 k$ X! ~3 ]
2345
0 C9 r2 K0 o$ _- Y4 _parseInt('2345.5')/ Q7 f" a+ L' D! q- N
2345
4 ~* r5 a8 q6 nparseFloat('2345.5') // 转浮点型
; I1 O1 W- D: l2345.5" p0 D: [( }6 B% H$ O2 M
parseFloat('ABC')
9 {; M. L8 ]3 Q  D: A8 rNaN
. T5 J1 U2 k/ f* H6 X% X4 }* o6 g$ tparseInt('abc')
( w6 d4 {  E1 o2 J$ }# T2 [0 s1 uNaN
% \! d% `; a0 T! U</code></pre>6 \  ?! C& K& D* }+ o3 E
<h4 id="232-string类型">2.3.2 String类型</h4>6 `. U  t. ~1 r" y( X
<pre><code class="language-javascript">&gt; var name = 'Hans'
9 C: x8 J4 T5 B7 n. u&gt; typeof name
( N, `: |2 u+ ^4 q5 D8 k'string'
. Q- m8 E' U7 g# ]
8 B- R: e2 m- }//常用方法0 w/ L) r0 E! x/ Y4 j
// 变量值长度
* \7 X+ X$ u5 M7 y& r&gt; name.length
2 e! h1 m; @& D4
' V# C" \$ C2 R* |( f1 Y// trim() 移除空白5 ^  ?9 ^9 z: f4 T* D
&gt; var a = '    ABC    '2 |3 E, P  t1 X4 m" `  f
&gt; a! i! t( \8 q, t" p( C  r- f
'    ABC    '
5 C/ d7 q' O7 L( G&gt; a.trim()
, T3 L0 D, m9 b'ABC'3 Y$ c; W5 |! R. ~' A
//移除左边的空白# G+ r7 I# l* ^5 f& W- g! ]
&gt; a.trimLeft()
1 F7 p4 Z& m: c) `# O'ABC    '
2 S6 g. E" g8 X) F! G//移除右边的空白
9 ^- b8 F$ U) D# W" _/ f$ z! h&gt; a.trimRight()4 X' F) \( t" j; W. z( \- o" r1 Q
'    ABC'# S2 t" [0 A. C% }1 d7 P1 m
' u0 C; p/ q1 X2 x
//返回第n个字符,从0开始9 z2 f3 p6 s. p4 v% ^
&gt; name
+ P8 ^8 y, T- z; X( _'Hans'5 a! y& w5 ^# Y& v$ B4 N
&gt; name.charAt(3)
- A+ l3 R7 @' O's'
+ F2 D+ A5 j% j* k&gt; name.charAt()6 U# V1 l7 f/ V: j9 a
'H'
: m' t6 F) |, ~/ T; p/ ^9 M) n&gt; name.charAt(1)1 v  b3 K* G' T
'a'3 a; z, ~; Y8 _/ r) v. i" w

0 @( Q4 w2 y. c% u6 a// 在javascript中推荐使用加号(+)拼接
; q- j2 X6 h/ [8 U2 [$ C8 T&gt; name" a' A3 e4 C+ q; I/ H. m: l# R+ d
'Hans'+ B+ S  r- [0 o, d
&gt; a8 \: c9 _, y# O6 p1 g& l
'    ABC    ': Y4 G3 ^8 o$ Y7 ?$ f# G9 N
&gt; name + a8 b2 i( l: O1 h/ t- H- d! e
'Hans    ABC    '
3 [( r; t* z* V+ c5 J( u: H// 使用concat拼接
% M* C, J$ ^5 Q0 v9 W% l&gt; name.concat(a)
9 g" N0 v: U2 c, P. g( w'Hans    ABC    '! ]" @3 b/ s, n
# X( q& j: K6 l+ ?2 _2 M
//indexOf(substring, start)子序列位置% n) R! N& G7 |0 M. Q. i

( c- ?' {% P$ Q- m2 F, v, ~&gt; text
7 M( x0 i  b$ H% O; W# O* b' K7 i'A young idler,\nan old beggar'
- s; `( `  E+ a! h# `&gt; text.indexOf('young',0)# W3 G1 |' j9 o: ?
23 ^3 \1 O6 g" X$ g! i

9 h$ ?+ D3 O. ~  l) F+ ]' {//.substring(from, to)        根据索引获取子序列
6 F6 |% s; J4 o  Q% r; Z&gt; text.substring(0,)
+ o8 b5 W& Y9 v6 j, z' }" s/ l'A young idler,\nan old beggar'
( r6 o" D9 r2 w( r2 w&gt; text.substring(0,10)
1 b: @! i+ O! G'A young id'+ L+ }8 q% J  M, a) q. D$ U

0 I( p3 {6 k% r# e. l; `// .slice(start, end)        切片, 从0开始顾头不顾尾0 c& q, d+ W! @
&gt; name.slice(0,3)
% ^6 E& a7 P9 f  Y3 G'Han'. L8 b5 a2 B7 u% |! d' P9 m% a7 C* J/ z

1 w2 v3 b  g4 x" ]+ p// 转小写1 J' q/ Z, R0 I
&gt; name
6 R$ o5 W/ s  _'Hans'
$ n, k: P: M# g2 s) e&gt; name.toLowerCase()' K# w1 L# e& R' A. [
'hans') R( @1 e& s. Y" I* G6 O
// 转大写
0 q  V, ?  R( y+ g$ W3 l&gt; name.toUpperCase()- b' C6 F) Z- Q' V
'HANS'; l+ b, m& L+ o: N) H  p

$ v0 m- X$ _7 L$ X, Y: W// 分隔# o: ]% r+ p6 y/ `: Z* I
&gt; name
  b" o; _* \! c6 V% {( l) ^'Hans'
' N# z* f( z+ F1 `! p2 Z6 U9 a" M* e* D0 s&gt; name.split('a')
9 e0 X# |$ ]; l# N& u(2)&nbsp;['H', 'ns']
4 Z/ l; s) a, k& b- p</code></pre>6 T/ _% _1 y1 J: x# o8 n4 X1 D
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* \2 l# l; @/ \$ i1 ?<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
6 x3 g/ d7 r" @4 M/ i7 ?& k. O6 F<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>' @" K0 t  C4 V& n8 V& V
<p><strong>null和undefined</strong></p>6 Z: W5 T/ I( z( M8 [. L' D, H
<ul>4 r$ @! n, k2 a, ?) y
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
+ O4 {) Y% |; v) t<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
: J) C/ |9 d. `8 \1 Q</ul>2 T9 C+ b  X/ p* ]$ Z
<h4 id="234-array数组">2.3.4 Array数组</h4>
. R2 @/ O  Q, q! _# j7 {" x* E4 @<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>1 ~8 H( F8 R; k8 `+ p. |2 F* c
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
; Q$ u  v/ I  V1 B9 K! N* q! q8 r&gt; array1
. Y% L* @" T1 d2 M" z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 y( @5 ?7 X# T5 V7 U$ |
&gt; console.log(array1[2])  //console.log打印类似python中的print7 E8 Q6 Y6 v( w2 |5 B1 O9 [
3$ N6 H1 j) I$ H0 ~+ Q& @  d+ L. u
// length元素个数
. }+ r$ M/ L% j& t5 J8 p4 _&gt; array1.length+ u% D# d; L2 `7 K' X/ x. E
63 s* m& C+ J8 l8 r1 b9 Q3 `
// 在尾部增加元素,类型append2 v% s$ j# D2 n
&gt; array1.push('D')4 ]2 C/ P% ^$ h9 U, L
7% ~6 A( g) n3 x  Q$ t6 c
&gt; array1+ U/ y% g: p( |2 d
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']0 R2 p3 D. R" C, g5 x+ q
// 在头部增加元素3 x- ]. e: C5 Z$ y0 f
&gt; array1.unshift(0)9 V" H" P6 Y& h; {
86 j3 A* r/ O  i' g$ T
&gt; array1
0 G- i) x/ m: u/ \# y* d(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
! D; y$ u4 _' m/ w( L: u/ a* W8 f; w
1 W) s" v4 g1 k//取最后一个元素
) g& l3 K; p" z% @' N&gt; array1.pop()/ U# |) {' B: `; \; W
'D'
# N7 p: Q' [5 X' m6 i/ x1 D' j# V&gt; array1
/ W/ [, S; E" Q( w( d* q(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']& w" ]+ j" B  _/ }) l1 N
//取头部元素+ H  ^4 r" j+ T
&gt; array1.shift()3 G6 s8 i+ L1 V; t) M2 U4 }
01 [& G  r0 Z: J. T3 o
&gt; array1
* }& F2 `6 K! z+ H& G9 i(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 t- B- _: K& O) l" W" a9 H  m8 b: ~% h4 L  g+ q" W
//切片, 从0开始顾头不顾尾
; S2 N7 E+ Y5 t2 }&gt; array1.slice(3,6). S) P5 u; u6 i; z! F
(3)&nbsp;['a', 'b', 'c']
* _+ \# e9 t% b( u7 x// 反转$ F" b0 O+ n  ^. Y) J) `& c
&gt; array1.reverse()
9 z# R; ]2 S4 J$ i' a, `(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
+ n: A+ K/ ]6 F4 W// 将数组元素连接成字符串" P1 _" q% t2 `6 ?4 K8 H) S' V' a
&gt; array1.join() // 什么不都写默认使用逗号分隔1 C% V: i  R: b- j
'c,b,a,3,2,1'/ t& ?/ n/ a1 A7 ?
&gt; array1.join('')( I% J  o3 v* u+ ~7 ~2 p( H
'cba321'0 s  H8 P; M, G
&gt; array1.join('|')- R9 u, F5 k2 E( v% _
'c|b|a|3|2|1'
  T7 |- R( M& G2 c9 g" g. G1 y7 v+ A2 U- d- E% y$ B
// 连接数组. ]9 U9 l2 \7 \
&gt; var array2 = ['A','B','C']+ ^) ~/ W' B+ z/ A  ~1 r
&gt; array1.concat(array2)
. J" ^/ |  ^" g4 m(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']: i# z! [8 r! S  N! g3 O5 D

3 e1 i; J$ S0 E' q$ h" q// 排序4 H4 w. u' S$ _. H* d) Z' H
&gt; array1.sort()
* G: H( Z% o5 d% C' B" e(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  L  W; t( \9 i6 v, M8 O6 t
6 Q0 I( c) p$ v2 @6 Q
// 删除元素,并可以向数据组中添加新元素(可选)
3 M8 T" |9 U, m/ h, r3 e, [&gt; array1.splice(3,3)  // 删除元素8 b; r$ L9 r: d
(3)&nbsp;['a', 'b', 'c']$ h/ [- E: b: B* e
&gt; array1! J4 R* I) o! @- |  ^; Z$ t; `
(3)&nbsp;[1, 2, 3]: L7 c4 K( E: S* R
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素* |' @  x* b1 d! L
[]8 L9 q2 x% f5 K% a$ W
&gt; array1
$ A; l4 [& j3 Z4 l0 Z! [- a(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']7 X. [& l9 R2 Z$ [7 f+ s: K+ @- {

+ [1 Z, r( I8 P9 i: b$ K& ?* w7 F/*4 s4 S9 B( b! e5 a3 ^( X" T# t5 E
splice(index,howmany,item1,.....,itemX)
" t' }0 I/ G; Q0 z7 r, a4 {index:必需,必须是数字。规定从何处添加/删除元素。- l7 _* k2 u1 y- G  ]) P; p: Q! o
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. n/ c2 t7 y% d( z: c! t
item1, ..., itemX        可选。要添加到数组的新元素
, ?1 w2 u; R+ z* S6 E2 _*/
$ v6 j8 Q/ ?, x, }. d& z. m% W5 c; H- _% x) y1 ?: o
// forEach()        将数组的每个元素传递给回调函数
6 j9 e( i' S& [/ F3 Z1 q&gt; array1.forEach(function test(n){console.log(n)})
4 S+ A; I; k) T/ P 1
. J6 Q1 J7 p; U) U9 z 2' k6 j& S# A, |) a
3) g9 f, p2 v/ k3 i6 Z
A6 _6 R5 W' v6 ^/ w6 `
B2 \" Q2 l" Z' q; [  M& B& u
C% r( ~1 ~6 H0 ?. e3 D8 f; H3 q
// 返回一个数组元素调用函数处理后的值的新数组
7 q- z/ Y$ z4 L&gt; array1.map(function(value){return value +1})
+ g% U1 M+ \& a; m' }; ^3 f& {(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
9 `1 x6 U& h; ^- J; B/ h</code></pre>2 S: O- ~' R' ^6 G
<h3 id="24-运算符">2.4 运算符</h3>
. M5 g$ t, t2 n) n<h4 id="241-数学运算符">2.4.1 数学运算符</h4>" _% ~& i2 ]" T, H3 L3 I
<p><code>+ - * / % ++ --</code></p>) u" g! ~. M  W7 c8 U7 g
<pre><code class="language-javascript">&gt; var a = 6  }* M' f5 S5 m
&gt; var b = 3
* Y6 E% E/ U: n  I" n// 加
. q% g1 v2 j$ w# o&gt; a + b  [7 X( o1 e. |. ]3 z) a
9) n# r2 c' }1 R1 `
// 减
5 T1 W% F: ~2 P8 s! [- _&gt; a - b% f; e8 n6 v. p: D3 o. N9 G! V8 n
3
' _# g% q. j$ s  a6 q// 乘
0 W6 V# ]1 D* F8 ~6 V" A7 K" w" K&gt; a * b
/ e( g5 D+ K1 E" d* r' M$ o18
- ^; s, }7 M+ o// 除
9 z) F# \0 h1 G2 e* {/ X&gt; a / b6 Z9 q7 e0 r0 Y: E% ]  R( i- T
2
* s, X' Y# L7 }: f( C// 取模(取余)
9 T9 H9 X; F9 h5 j1 Y&gt; a % b' F1 V! k% ~6 S; b* w, W
0
& V: R" ]2 S: [! O5 {* y// 自增1(先赋值再增1)0 P% R1 s5 t3 _: k7 ?3 A( z  ]' K
&gt; a++" r% h8 I  p( S$ d% Z& C: e
6" u1 Z, |0 t) Y# i
&gt; a
8 A, M6 z: G2 N1 B- r7
& e( g4 N% l) c' @// 自减1(先赋值再减1)
! I5 B7 V, I# y& |1 z- f/ x, H&gt; a--
$ ^  \% Q/ r. o2 C( z; x7: Z5 E1 U3 i  J0 i
&gt; a+ N: ^! ]8 \' b4 ]7 C
68 [9 L! b! I1 ?
// 自增1(先增1再赋值)
, A4 T* B+ g% E8 F2 l&gt; ++a& h/ V' q2 b" b  B
7" p7 p# j4 L- ^3 ^$ R# f" y
// 自减1(先减1再赋值)
: s, E" Y% G3 ~&gt; --a6 ]/ N, e6 C. ^) c. ]$ S, E3 b
6
% R( p3 {7 G& S0 p. l' R6 w, p# I&gt; a
  ]; o9 L3 d- J( q69 F9 B# n$ f, f  w. D

0 N3 h/ m7 {2 ^% P//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
* D- l+ N. g% O$ U  v</code></pre>7 a, m4 F% p9 H; e5 t& a
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  g8 u  [3 g$ M- d! H' m
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
. _/ D4 @0 Z! p3 b9 c<pre><code class="language-javascript">// 大于
! ?$ {4 \8 X) E$ ?) h9 u2 I* K- [2 c&gt; a &gt; b
% A8 X$ o* \) n  F1 Y) Htrue
4 I4 i  ~2 {+ v1 `// 大于等于+ E" N* G, t% s1 `2 ?
&gt; a &gt;= b
: Q3 P/ y+ U3 |  `% rtrue: w% S' r, q: d9 f) S: X
// 小于$ c4 ]: [4 F  B. I4 W: I  f3 C
&gt; a &lt; b; F" \! u! N" Q9 v1 ?8 U- O
false
/ w: F% l7 y; c2 Q3 G# C// 小于等于" c8 c( B8 B# k) _
&gt; a &lt;= b& p" [8 C) ~; e% @4 |/ j$ X' q
false4 b% g" n- A* E' ?4 g" m
// 弱不等于
: q0 j: X8 j' a3 E' F&gt; a != b8 r  c& P, t! T2 {/ a, k' a
true: t+ N) F8 v! ~" [: W; f- d
// 弱等于
7 L' o) ?% `& J* y&gt; 1 == '1'
1 X& z- v; r# xtrue
3 d$ z6 N5 s( s6 C0 V1 y// 强等于1 }5 V7 v0 @, C" \7 G, V# A
&gt; 1 === '1'
; C  u% G: |" e# f" F8 O& V% zfalse. J+ Y1 a& g; h4 K7 A) {4 r
// 强不等于& E) x, k) q4 O# f
&gt; 1 !== '1'( O5 ]1 a% |! b
true/ n) V: I& I% F" n9 m! j& ~% s
* q" _7 G& w. Y/ ~2 a7 E5 ]
/*
. C- b% g% _" ?  [6 H' E; SJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误* X& Z: J: y$ S  @1 A
*/) {8 b+ y6 o) `; r8 d* p) P8 u
</code></pre>
2 k4 j- P$ x" d- W2 r& M) ^<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>% i# K: i6 L& e6 C' c/ ?8 U
<p><code>&amp;&amp; || !</code></p>  U* V" x  n+ U& e
<pre><code class="language-javascript">&amp;&amp; 与
1 Z! f2 d" D3 e: }! ^/ e|| or
4 ^4 N8 m' C! e: ]8 M6 y2 ~! 非+ U0 q: W2 j3 _% G  |/ a' ~
</code></pre>' r7 A9 Q3 \0 B1 |& s; a! G
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
/ A& V- F. b7 d4 e  Z1 J+ a<p><code>= += -= *= /=</code></p>
( b. P4 p; S; \<pre><code class="language-javascript">// 赋值* W# C9 d9 r3 y" e
&gt; var x = 30 `+ Q, ^  q/ Q* Y/ l( z/ x( F
// 加等于6 A( U8 H, ?5 k* ~- `8 A0 u1 }
&gt; x += 2" Z7 S3 E+ |# q
5
% a, L& @2 Z- E1 s// 减等于; X$ p9 g1 ~- N5 C( \
&gt; x -= 1  z( b; w/ u# d' f4 W
4& N; s5 |% l5 h* U: H
// 乘等于
$ Q5 d& D, ~4 i7 ~- {4 V; @4 ~&gt; x *= 2& ?  _/ W1 Q; f5 _0 r5 b
8
# I/ t) p  b$ k* b/ _" z// 除等于! b; ]5 e' ~4 W' P+ {" d# q7 _7 @
&gt; x /= 2( ~# x* {. d8 G' N( h/ V# T
4; p8 P1 n& Q# j6 b
</code></pre>
, z5 k* A3 m( m6 O# o& G<h3 id="25-流程控制">2.5 流程控制</h3>5 P3 R* n1 \! f
<h4 id="251-if">2.5.1 if</h4>
) v# S% P' t9 X<pre><code class="language-javascript">1, if(条件){条件成立执行代码}  ^5 r- C# i0 F; d
$ ~1 w& s! {. s* }! N' `) m
&gt; var x = 3
3 `% Y0 I2 R8 f% U$ K" n&gt; if (x &gt; 2){console.log("OK")}
7 t. c  H) R3 W OK, n0 [- D7 v+ Q1 y/ A* e

) C# e0 X6 M' B$ C+ w4 a2, if(条件){条件成立执行代码}
) p) F+ K: B! @, K2 @- w% }8 w2 C        else{条件不成立执行代码}0 }% t3 @: U. N2 `, s

' }( s% h( t- P( j+ ]&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
) ]* ~4 P3 l0 ~' ^'NO'
$ E; ^7 E, O3 y+ s1 M5 @9 }1 M& s: O! L1 n$ j; U' R
3, if(条件1){条件1成立执行代码}
: e. j4 m, V. w+ n8 ^# `6 e8 h        else if(条件2){条件2成立执行代码}! @  v) L1 |" U/ {2 ?' W: l
    else{上面条件都不成立执行代码}
7 @: Z7 g, y6 `, y( P; }6 O/ i$ Z1 D  Y
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
1 e- o% U1 d/ R# q( ` Ha9 Z, \9 [2 {2 H5 f" }# {, I
</code></pre>
& t" ], F) P. F7 w<h4 id="252-switch">2.5.2 switch</h4>! \' s5 z8 e% {; T
<pre><code class="language-javascript">var day = new Date().getDay();: x7 ^- L# j9 [  e% f( i
switch (day) {; v% ^: c2 `  B
  case 0:/ P; q9 i  S/ b+ X: I9 V9 L
  console.log("Sunday");$ k7 I" k2 k( g. Y" o" Q2 K
  break;
( ^. A7 R' m5 n/ m  case 1:  S; E' m) ^( I! v
  console.log("Monday");
, C. E: E. J# l6 M: u! S- c; y  break;
) k5 B4 A) H! ddefault:6 \9 p/ X- z) b, M- f
  console.log("不在范围")
' C- h7 F8 q  ^! L}5 y! M& ^; B* q
不在范围
6 r  u1 V# s% ~* P. I</code></pre>
; @: }4 ?, B; \8 F& d<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>; z% e% X( l/ Q
<h4 id="253-for">2.5.3 for</h4>
  E+ |+ Q% w( y<pre><code class="language-python">// for 循环
2 S$ L: f0 n  K- Q        for(起始值;循环条件;每次循环后执行的操作){; u5 a0 M( f" a4 T
        for循环体代码  M4 ~6 d% u" V5 b  F$ \7 a/ \
    }) w3 h+ e$ |1 _3 b2 e0 x( z

/ u, h  o8 E2 {7 b2 Xfor (var i = 0; i&lt;10; i++){
1 F5 Z# g. y4 N4 @8 A9 a    console.log(i)
- B' E1 k0 C9 W7 n}$ q) X9 Q7 i+ Q/ K- S3 S- f
        0
# B, R4 k% X8 P, T* d/ S% ?        1
7 V+ H! \8 U9 k; M/ Z& m( Z5 v6 [        2$ }! g# s, X2 W$ }$ h. b
        3$ V, F6 ]/ r+ z" H$ |; k
        4- T+ n8 G1 s) V" u2 K
        5
; c3 T% K7 ]- T8 H! x        6
0 g& t" n, A: f0 f( r  C5 \  \        7
* F6 ^1 ?3 _4 T8 L0 [* a        8, o+ V$ K# ]- z. y8 T# o. b# w
        9+ o$ k5 S+ e# N, w' b) A- |
</code></pre>8 K2 _8 S5 I1 E- k! Z1 ~$ J
<h4 id="254-while">2.5.4 while</h4>6 ^! A9 K) w- C1 K6 a3 B0 Z
<pre><code class="language-javascript">// while 循环9 O6 f: }: W1 x: P- f
        while(循环条件){5 h( R9 @+ m$ j% F- k" u- R- a# F
        循环体代码2 F6 }: M# Q5 w5 o& P
    }2 v6 ^6 X9 \0 r' b
# ?. e" S+ a0 d+ H
&gt; var i = 0- V# [2 B2 Q/ r/ l
&gt; while(i&lt;10){
* ?( B; z: d# K    console.log(i)
' d9 V4 t' Y8 \- F    i++  }# H/ L8 G0 p. M7 {$ N
}3 \5 S4 }: J! _/ ^$ O/ K
0& B$ t9 c+ i- A$ C
19 W5 w/ @6 @2 n' T  }" Q3 v/ r
2
( x5 O8 }  @* P0 H& [) O! ]4 O6 ~ 3- _7 d# C- I& U% y
4/ B+ y% u( d0 E( Y8 L& A
5) e  M' C0 J1 M' ^" F- H' `# [  Y
6
" X& z; o" L$ a/ ~& t# q5 { 75 b" C7 S' b' F8 S0 x7 _% [. }. ^
8
) |4 C; ?$ {5 U 9
/ A! `+ q6 J- b9 G1 k( \</code></pre>
5 P) a) G" O& Z( f$ G$ p<h4 id="255-break和continue">2.5.5 break和continue</h4>+ ~$ A: U* E% s8 R$ n
<pre><code class="language-javascript">// break
) ]7 P$ N  X/ G9 Sfor (var i = 0; i&lt;10; i++){
; ?# \/ g6 b# A    if (i == 5){break}
# y, s5 O# Z( E/ w$ d    console.log(i)
* R$ y4 x" N, n}
0 T: Q, i# n& V 0
$ e9 d% r# [# B! G  C( K 1
8 v* {, M& z, K/ j) e+ X 2
. Q% d( N( W' }1 h; v; H; U 3" _( I: x; J! `/ ?) {
41 ?( I' R, Y4 i
// continue
, E% G* ?) K+ q5 c# t# ]8 hfor (var i = 0; i&lt;10; i++){: x; {( k2 M) a. b$ d2 ]
    if (i == 5){continue}% \* X( K, ]( A9 t1 w" c  K
    console.log(i)% T+ E; q5 L& a4 D
}1 Q$ V+ d+ @. ~. I/ x7 m8 z( I
0
, m) }% p8 T& {1 E( w/ T' j  }8 i  P8 t 1' Q7 n& f) m2 k' E( d
2
! M' X9 x2 \$ w0 m/ Z& T) A 3
- {! N$ T; ^7 w4 r" j' S& b! t. q! k 4
2 J- w! _1 Q/ I% C% R( K 6$ G* m( o$ J7 m" \3 b! A5 R
7+ k" ~& ~0 c; l; e4 [! Z
8
8 C$ M9 R$ w* c( P, ]; F 9
$ X; q1 s* p" T9 k0 `
2 z$ s4 o) @' v$ c  f4 k</code></pre>' j& Y0 B9 i1 F4 h+ f3 S6 d* A8 m
<h3 id="26-三元运算">2.6 三元运算</h3>0 ~! L, W7 c  z
<pre><code class="language-javascript">&gt; a: e6 d- j9 y$ E: x! i4 E
6
3 M2 c. J3 d$ V7 Z. @# N  G$ X&gt; b+ v! L6 I' H, u
3
9 D: c& J6 ]+ |$ `% d' o% Z# Q8 A8 W/ J, g* D: Y5 c
//条件成立c为a的值,不成立c为b的值
1 m7 S) o6 U! H# B&gt; var c = a &gt; b ? a : b
; d1 O. \- r. Q2 }; \" ?&gt; c
. I0 R, ^8 x8 F3 R" c6
" C: c$ K5 F( S) m2 o: L( k
7 v) g' J: s" J- O, c4 ^& p// 三元运算可以嵌套
3 o: Y' G8 T: w' T# Y. ]0 ~; t</code></pre>0 [1 H6 c0 I# l. [5 k  f( W" c
<h3 id="27-函数">2.7 函数</h3>6 U: C- s7 V8 K  b- R- z
<pre><code class="language-javascript">1. 普通函数  N, E9 ]0 j) R0 D' H# s! B
&gt; function foo1(){* J7 ]2 Z& Z. g0 m& t; t+ G% t
    console.log("Hi")
# R9 J/ ?, w6 s* b}3 X! Y% E$ ]8 y9 L" R7 a5 _: f

8 r! m1 p6 K: A: X" ?; [% |. L8 ~&gt; foo1()
4 ^$ k+ c% U$ r. C7 ^        Hi
) F8 p% d7 b3 C2 X$ R2. 带参数函数
2 |; q. e( o" r# V8 _0 }( |. A6 ]&gt; function foo1(name){
( `5 ~4 D/ ~1 i& H5 ~: H8 M8 a1 {console.log("Hi",name)
& S7 @. M$ T& p}: }* d9 Y" h8 V- d% H3 F
6 z9 r/ N( G. f) I
&gt; foo1("Hans")
- ?* Q( \( \* Z- A/ a& y* }6 zHi Hans
, `: J& D7 S8 a# Y4 Z  M2 ], r. ^" ~: e
&gt; var name = "Hello"
7 ?. t4 R/ K( {6 z&gt; foo1(name)( U2 p; s7 L) X
Hi Hello5 x6 E, s, i$ q8 j) B4 O
* s# f  F& F& p+ W9 q
3. 带返回值函数2 \# k4 y/ [! R% I+ |! C7 {" Z
&gt; function foo1(a,b){
/ q8 W8 ?0 P0 [. r: w1 u0 L8 [        return a + b   
& ~! e( a& t- a8 M! f& w- M. [}
" C% P$ W+ o$ y+ ?. n5 d&gt; foo1(1,2)
  `# y- B1 g0 y+ U* G/ b5 F9 R3
. L; H' p& t- `4 ?( M9 }" G! Y&gt; var a = foo1(10,20)  //接受函数返回值, Z4 t# V3 G: d5 U/ R0 I
&gt; a0 _$ Y( g/ _- q% j
30
5 {9 d/ N7 ^9 Y( X8 u
7 w8 T" ?1 P! t# A# B8 R* v4. 匿名函数, j% m% L) H& J/ J7 l" p* {
&gt; var sum = function(a, b){
$ X6 r" g( z: F8 g4 @$ v& d: M  return a + b;
. p9 i1 {8 T* u}
! ~  p8 E! x7 _" P9 N&gt; sum(1,2)( ], I( X$ S. N1 V1 H3 Q
3
* C% Z# i5 s2 ]
3 c. h% n( h6 h+ N9 ~// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
/ i1 X! _. P2 f: e  q+ P&gt; (function(a, b){5 |/ k( c, e" M$ `  q- q! P/ r
  return a + b* K( \( N5 S8 c# i  _! l
})(10, 20)
2 k, f' ^, X" t30
0 |6 N% B  G/ @4 n: _& D, ~
, ?( l& x" ?3 [, {5. 闭包函数
& l* l4 t6 Q: P3 o3 L// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
3 d/ o  D/ T, v, F+ l. I: mvar city = "BJ"
1 w+ z% c. {8 J& O; R7 S6 n, Ifunction f(){
; C) o9 y1 w# P- M( x3 P% u    var city = "SH"8 ~1 ?$ M6 Z+ h- G
    function inner(){" v4 a8 x# L# \: w1 c
        console.log(city)
2 Y2 s4 t# W; v, k    }
: c. K* A. @5 @' `$ ^    return inner: Z' K9 j  c# W
}" n  |- }' h3 E: v
var ret = f()7 d+ O# q6 f; ]: T+ R& u. D! ^
ret()
- U8 x# T: H# z( h: M# T8 H" [执行结果:
* p" V- G( B4 d7 R! I( M2 HSH
/ M. k0 m3 G! {0 y' m0 A
4 }: i) d! I; Z3 K) c& j0 M6 t  L</code></pre>& Z2 E6 p3 f6 n* P5 i) H  ]
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
- u( d( y9 M9 ?5 |  `. D<pre><code class="language-javascript">var f = v =&gt; v;7 G5 Z( z9 \! a6 c$ _# P' S
// 等同于
) \) m' W8 j* X) Dvar f = function(v){
+ e, P. K( J7 _: Y9 Q  return v;, L2 T8 L. @6 \( \: G
}6 v( V( Y7 [+ u& j/ p: J
</code></pre>
% s7 l9 X2 }0 s$ M2 w" A) M/ k<p><code>arguments</code>参数 可以获取传入的所有数据</p>4 }" ?; a+ A7 g4 J
<pre><code class="language-javascript">function foo1(a,b){
) _# x2 d/ ]9 Y9 v$ Q/ V- c7 k    console.log(arguments.length)  //参数的个数
0 e7 E0 f4 v$ S3 e    console.log(arguments[0]) // 第一个参数的值) L) ]$ y$ `" {3 k$ p2 q$ O3 d
        return a + b   
0 ]; r, Q: }$ C; x$ Z}! h0 z4 M$ Y9 Z0 [2 z5 y- e6 \2 z
foo1(10,20), b1 W7 ]) z# Q$ r6 h
结果:
9 R# o4 \4 `/ q. I 2          //参数的个数 ) S% r  ]. |" h
10        // 第一个参数的值
/ `$ ]3 Z1 T, u5 N& r# |6 H& v30        // 返回相加的结果/ D  i' ~: M+ ^; S
</code></pre>. l; `! _1 n9 t; @. X
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>3 i+ Z& [  x3 I
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
7 ~" r* L9 g& f7 X- G<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
7 y0 m% l) q5 o" l$ e& `6 ?8 a<h4 id="281-date对象">2.8.1 Date对象</h4>; W: p' M4 e+ ?3 S
<pre><code class="language-javascript">&gt; var data_test = new Date()
: h3 p) R$ G) q4 u. U&gt; data_test
4 }2 n2 u" G3 E8 V6 EFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
0 [3 G! {$ @! a1 d$ N. U&gt; data_test.toLocaleString()& I4 J2 h3 |" y5 T$ B
'2022/2/11 下午9:44:43', s4 Z( o* `$ }! J# L

+ I0 s' G# k9 ^9 w9 `/ W% A&gt; data_test.toLocaleDateString()& ~9 T! @2 S8 R. U) S
'2022/2/11'2 m# M; T7 C3 d& `/ Y/ f

4 T; S4 S$ p, [) m&gt; var data_test2  = new Date("2022/2/11 9:44:43")8 }' m4 o: ^: ]+ T# F( ]8 a
&gt; data_test2.toLocaleString()
* B. `# q1 A4 v, F" ]+ e  {# d'2022/2/11 上午9:44:43'% V' \! \( ^3 M! e" f
/ @! u; y7 s' u! ?* H
// 获取当前几号
, W: B2 ]0 R2 u7 Z$ s&gt; data_test.getDate()
# S$ a7 |& ]5 q4 T117 G3 B+ n; V2 q% ]) B
// 获取星期几,数字表示- o  q; O/ P2 l4 }" `/ p# Z  w
&gt; data_test.getDay()  / W. b, Z% v2 A( o. Y
5
" W/ k! G. j1 y' `// 获取月份(0-11)
5 D. j) b8 k5 M. z  B* r# i&gt; data_test.getMonth()4 d) ^4 X0 c- }- ], Z2 @* t
1' l( h: h9 v. Z$ H" r5 t, w- y
// 获取完整年份# h( {- R1 O/ B% A5 M
&gt; data_test.getFullYear()
& }+ B5 A# m( v/ |) d2022
' H% `* U! ^+ V' _  G! Q// 获取时
6 W8 n) T1 H# E0 l& E( B) F&gt; data_test.getHours()* H$ s( [' z+ h8 n* M& D
21
) ~9 `: j, X6 V* Z9 X+ g4 w9 K// 获取分
' f$ C2 E% K% F9 g- a&gt; data_test.getMinutes()
8 g) d9 @( g! ~! i0 y- o  y442 d3 j+ A, b  p9 b  \% U3 d8 g; C
// 获取秒
1 u& a" X2 `; u: W7 F& b&gt; data_test.getSeconds()
6 Q1 Y8 H( `: q8 f. b' m# b, I43
! s4 g- o, `+ Y8 R- \1 y" R- _" s// 获取毫秒! ~* e$ b8 K- E, j" d7 b; ?
&gt; data_test.getMilliseconds()
6 \) x- }6 I" Y8 a  C; n, _290/ a/ `* y. w1 u: |
// 获取时间戳, ?  t8 O- E8 q7 E- `; S0 K
&gt; data_test.getTime()
: U6 L  }$ P3 u; b: P  o16445870832905 Z2 l& L1 L% @7 s, U) g+ w  g
</code></pre>
; Z- _% g  _; }$ M<h4 id="282-json对象">2.8.2 Json对象</h4>2 t! c" @( ]; {7 E
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串* B/ b, q1 o2 w, P
JSON.parse()  // 反序列化,把JSON字符串转换成对象% a! p& s* t0 m) o( [% D
  t4 ~1 s. ~; A) P. S; M6 U2 z# w8 |
// 序列化1 L% E1 s# p( }% p; d+ r
&gt; var jstojson = JSON.stringify(person)
2 Z" D, s, o% l0 C1 f" g; C* Y&gt; jstojson  
/ c2 y7 S, \& ]  @- x; d'{"Name":"Hans","Age":18}'
$ F* z, m. O' N" }5 y4 k6 T3 k/ }4 N3 P- u& x6 z) |
// 反序列化
7 l; e2 O$ l$ q/ u- F5 u/ ?&gt; var x = JSON.parse(jstojson)1 u1 w4 k/ i' d/ ~
&gt; x
& N6 u# ]* _9 w4 B7 P{Name: 'Hans', Age: 18}6 n0 x. ?2 o* ~: `& a: n
&gt; x.Age
2 t* H! i+ s& C$ b18. c  c6 a& g- Y0 P, q
</code></pre>
% Y1 F: M+ ?$ J% e7 p4 G( y<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>  Y1 }+ C) }- e
<p>正则</p>
+ n& B# |' [+ h7 X$ b. Z) Q<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");* w5 m: P& g$ n9 {  Z# ~8 a% ]. _
&gt; reg15 ^! O% Y/ O. B
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 c, H9 p* b% R% ^, J, y&gt; reg1.test("Hans666")
4 D$ c8 s( e+ G. S& x9 Dtrue
2 w; F5 F6 d) y# y& x. I2 R
* @4 B3 X; L  `&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
2 V  w" C' L# c( y$ \&gt; reg2
# M8 d. d& B( A5 j; N/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 j* y8 i  R9 b) D&gt; reg2.test('Hasdfa')
2 d2 W1 @/ L+ d) G$ ?7 I! x/ xtrue7 g/ L* w) h  F# x

2 L+ L5 @, Q' d  r+ P' s. q; a全局匹配:3 N3 s9 I  j0 {8 \7 p
&gt; name
  }. x! i5 Q9 a'Hello'3 `' e8 h7 r8 A' }2 D
&gt; name.match(/l/)
$ D5 T: K5 i, n7 f['l', index: 2, input: 'Hello', groups: undefined]
' k# j/ L! m) K, ^% x- x. U; o% p7 {$ _( k" q3 [# K5 W/ @
&gt; name.match(/l/g)$ G5 E2 L' [+ u9 U! ~8 C- S  r
(2)&nbsp;['l', 'l']
" O8 f+ n2 o8 V1 n. ^// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配9 `; C+ J# P4 i; ]1 l- d$ r6 M

$ g+ V% f# x: W9 e全局匹配注意事项:
6 U9 c+ \3 E! z5 ~3 ?&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g9 ?' ]2 l; r1 p# p
&gt; reg2.test('Hasdfa')2 }8 u0 c6 T- q" P6 Y
true' M  Y# Z& z* G0 n% S
&gt;reg2.lastIndex;/ A  H; k/ b8 L  \
6
1 x- d2 Y5 _  k&gt; reg2.test('Hasdfa')
8 g* [7 {: S& B2 \+ ]false
' T/ t1 w5 D& B$ g  l&gt; reg2.lastIndex;. s% t3 \% @; x* y; j
0+ W  W  k% Z! [9 Z- A( F* C
&gt; reg2.test('Hasdfa'); c9 T  ^* W! \
true
& s! X& M$ e2 _. w! I+ ^! M% O&gt; reg2.lastIndex;8 J. I2 N; C% v2 J
6: P3 f! h3 K* O/ }
&gt; reg2.test('Hasdfa')
; Y, \4 W# L: S& hfalse
( }$ n6 E% L( p' p8 J( c&gt; reg2.lastIndex;4 y. Z, E; M8 U; C3 p
08 \! l8 {4 h$ O9 w+ r, n  X& t
// 全局匹配会有一个lastindex属性
4 M* f- z! Y5 @1 I# I$ Q0 @# J8 Z6 {&gt; reg2.test()1 ?- i3 Q, B/ |. J3 d5 o& G2 z5 A
false2 ?5 S/ k6 s9 B( p6 u: v
&gt; reg2.test()
( r7 m% u6 [. strue
( L, Y, Y$ H7 y5 r. k1 i// 校验时不传参数默认传的是undefined+ E3 M$ P  @2 R5 j+ P
</code></pre>/ `- J4 t: G: J0 M5 D+ K) W
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>7 q/ C: b& ?% f% O4 `
<p>就相当于是<code>python</code>中的字典</p># i3 T3 _! I  J) C
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}% s; j% p$ ]/ N$ x* z1 y7 t
&gt; person- {! P4 i" ~6 z! q! d% |" g
{Name: 'Hans', Age: 18}1 [# K5 F0 p, p7 H2 b. j
&gt; person.Name
" z2 ~8 Q) D7 {: _'Hans'* e0 R6 P' r9 U: E1 ~# }
&gt; person["Name"]) T  t. n5 L+ h
'Hans'
: Z6 x+ F) t% X. N3 e2 ?6 \/ {/ R! ^: }' Y# p
// 也可以使用new Object创建
3 I" S6 @7 y4 }1 Z9 y&gt; var person2 = new Object()* w8 B+ p5 k  H1 D
&gt; person2.name = "Hello"0 ~$ s, C; z8 y& r# O% n
'Hello'4 G) z5 g5 ^& Z# s- g" V* v
&gt; person2.age = 20
- T, b7 s) e7 y/ q7 ]  ]207 `! Z# B* ^9 y! \  F
</code></pre>
6 F) g( F0 [1 y" P8 \3 Y" i<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>1 V# t0 M: a0 z* O
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>2 X) k" E: s3 A! _7 [) k
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
9 _( G8 _; d% o<h3 id="31-window-对象">3.1 window 对象</h3>) |& d0 E+ B6 l* ?: d
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>" Y( _% d+ G  u, @
<pre><code class="language-python">//览器窗口的内部高度! i5 f( A9 v+ R! `0 g+ w$ W- y
window.innerHeight
8 {$ E+ I: m  H2 N! `7069 g( Q* o7 s5 @2 h
//浏览器窗口的内部宽度
0 {2 k1 s& ~+ Y* b) s! zwindow.innerWidth
% U' i2 s0 v; S1522& _; F2 ]# ]  y
// 打开新窗口
- F; f5 _  [' @window.open('https://www.baidu.com')
7 J* u6 F$ i; m5 L7 t% S- L7 ^Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}: k5 o) J% S3 I8 m& [1 j  Y7 [
// 关闭当前窗口
- g+ B1 e! q; \4 T" S2 k2 twindow.close()
, T4 E! q, S0 ?! a* r//  后退一页8 Y7 b3 E# Q4 {  B
window.history.back()7 e$ a1 }5 m! X
// 前进一页% G6 o9 u1 f# p4 [
window.history.forward()
9 g& `" {2 Y! A1 O, c//Web浏览器全称
2 B* f' S5 _( D7 ^4 M0 {. ~window.navigator.appName$ S3 r5 V4 c# Y) e
'Netscape'9 z6 R) @+ a3 ^7 v  m
// Web浏览器厂商和版本的详细字符串
0 ^( z' y/ m! }window.navigator.appVersion
4 n: M$ I: J5 X1 c' g8 \. l) j'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ ~7 r. S7 O2 S4 A# z// 客户端绝大部分信息
# ~! }% J  G8 L  j" J2 J9 Jwindow.navigator.userAgent
/ r/ E& j( ]( `( i" K0 T'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'. W& _' J4 w* Y+ R& s! A
// 浏览器运行所在的操作系统
0 |! U9 v9 ]7 wwindow.navigator.platform
, d7 m% D  p7 R$ Q; j1 ?'Win32'3 U- S/ }" [# A' ]0 R% l; f
; Y7 J$ I+ l- Y- k) Z. U2 u3 A
//  获取URL, f0 {4 ^2 x& [" k1 S
window.location.href
6 Z1 ?5 E9 U' ^# P// 跳转到指定页面
9 B5 V' p. [3 C0 [window.location.href='https://www.baidu.com'! B8 `8 o' A( Q0 P7 s5 J1 N* A
// 重新加载页面) K) \* V4 s. N$ |) g6 ]
window.location.reload() 2 ]* I% S* O6 b3 L6 x! w$ y6 b
</code></pre>
8 {* ~$ X( G% X8 g8 M<h3 id="32-弹出框">3.2 弹出框</h3>
! U9 x5 r- Y8 B* F* e# {<p>三种消息框:警告框、确认框、提示框。</p>& s+ f7 g; L% _1 F% |
<h4 id="321-警告框">3.2.1 警告框</h4>
7 `. _; U- ^! \6 t4 [& U<pre><code class="language-javascript">alert("Hello")7 i, g- o2 H5 ?: I
</code></pre>
% [& u$ b& s, a) X5 g<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>- }( f# U$ D- r: y
<h4 id="322-确认框">3.2.2 确认框</h4>9 M/ f0 D' ?+ V0 h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
( u6 {, \+ k0 D/ i" s4 A<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true7 ^3 v, q3 d2 A- E
true
0 N) p+ H3 v$ j4 g7 b" D, f+ q&gt; confirm("你确定吗?")  // 点取消返回false
6 ~1 M* s( J, j4 g; A5 Z, X1 {false, y! ^8 I/ d0 j
</code></pre>
5 e; i' J. F3 R<h4 id="323-提示框">3.2.3 提示框</h4>
5 i8 a8 V- j# d% D% b<p><code>prompt("请输入","提示")</code></p>/ T3 |/ ^3 O7 a8 z, H; m6 ~
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>  p5 r  w5 _3 T( Y" o& j
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>4 o( \4 P. o4 r* b
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
" D7 H) d5 L0 N1 q<h3 id="33-计时相关">3.3 计时相关</h3>" W' K/ X, V. h( Q) r/ n
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
. w1 P2 h6 m/ ?  _<pre><code class="language-javascript">// 等于3秒钟弹窗
2 d0 |* ]: X* r% \. asetTimeout(function(){alert("Hello")}, 3000)
$ `6 u" `3 ]$ [/ \: t: i1 K, s) f. `, P1 T) L3 m8 @$ R
var t = setTimeout(function(){alert("Hello")}, 3000)# V( F+ P/ A( E0 s% n
7 f$ ?% y1 a5 w
// 取消setTimeout设置- I6 [! q% w/ y% R1 `( p  I; {6 [: e
clearTimeout(t)
, ~, ?9 y/ z( M% g% J</code></pre>3 k# m  b2 M( g+ y8 M
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
- a9 u4 ~" o8 p<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>( F6 h  ?5 l3 \- i
<pre><code class="language-javascript">每三秒弹出 "hello" :
5 y* u& \8 Z1 w& G% p1 QsetInterval(function(){alert("Hello")},3000);
) s- Y$ P' }4 K" l9 {( p</code></pre>4 v; e8 O/ ^) Y, q* `, g5 @
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# P7 b9 g* T3 D; `$ k0 o0 x' V<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);8 K: H: `- I  _9 {* W2 U* Z' C
//取消:2 O7 u3 V% _8 h/ `6 v
clearInterval(t)/ f5 m* @, J. z
</code></pre>
3 {7 @* i% v' ~: ^4 x) L2 g$ m: a6 I( Q/ @* I  D
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 09:24 , Processed in 0.072150 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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