飞雪团队

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

前端之JavaScript

[复制链接]

8117

主题

8205

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26681
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
* ~8 C' k1 H, j3 s
<h1 id="前端之javascript">前端之JavaScript</h1>
# C  R+ r6 L, }' w( S% N( n8 U<p></p><p></p>; w& r9 l9 e2 h/ y% C! s0 k# j9 E1 k
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>1 q3 ^( t+ K' ^, j/ d7 J
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
: ?' s7 U  b& U$ X3 V2 }5 G它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
% {2 b; M- w3 k. |" m它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>  b9 m8 k) x1 p8 k4 c
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>; `* t5 ^; v6 E* I' L; P
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
$ I& ]. V( _3 a% M<h3 id="21-注释">2.1 注释</h3>
& f* c! x4 k, b2 z<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>2 g7 h/ p' h* _  m( V# r
<pre><code class="language-javascript">// 这是单行注释
% i/ {4 C* `/ `' V; }0 x1 T7 _, ]! F# V
/*9 V' U1 x. c8 {# Q
这是多行注释的第一行,
1 p) c7 Y2 m/ J* n这是第二行。
( _3 `1 G- h# U& |2 Z*/9 h7 w( P& p( H8 m, q
</code></pre>
5 B  Z3 t, C8 r, U/ F7 e<h3 id="22-变量和常量">2.2 变量和常量</h3>
6 l$ ]- ?: j2 L9 \$ p<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>& z2 c5 }" m4 Z; l! q- A' q& ?
<ul>4 U7 O% C8 \' k3 k
<li>变量必须以字母开头</li>8 n) E4 I  ?9 F3 \
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
9 O! t$ V& z# t: f" C<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>: M8 W( x! l- e
</ul>
; X" m$ Q, P$ j/ v$ G7 a; X& v! _<p><code>var</code>定义的都为全局变量</p>6 `( V# v# p. h1 N9 w
<p><code>let</code>可以声明局部变量</p>
0 Y8 j! x% L3 \<p><strong>声明变量:</strong></p>* i6 o1 K1 G! w& m8 K" _
<pre><code class="language-javascript">// 定义单个变量
1 S8 N+ Y$ R$ e6 ^&gt; var name$ {5 o, G$ j6 Z. Q* y) X
&gt; name = 'Hans'
; a% w, m6 c0 W3 J4 L//定义并赋值
4 a+ c+ k- ~+ U&gt; var name = 'Hans', n/ L9 J  `+ m, ~7 G/ B
&gt; name) }0 J+ M& ~- ^6 {; I$ a
'Hans'9 Y0 _  |, y2 _5 U# Q( u2 K
& u) y7 Q! u5 a1 M; `
// 定义多个变量
, c4 V, A: m" ?: B&gt; var name = "Hans", age = 18% `% U* h, n# j! @$ i6 ]8 }+ t# ~
&gt; name  z1 k/ o1 ?) b' L
'Hans'
3 I% ?# _7 K- i5 T4 I6 _$ A1 P&gt; age
$ g, |& [, n1 q( L18
. k' J. {* }# S4 b+ ~4 G8 G9 ]* U, Z
7 j1 G5 T2 K+ w; _3 C6 U- R2 ]8 j//多行使用反引号`` 类型python中的三引号  `$ ^# a; s5 ^" n) k- i7 J
&gt; var text = `A young idler,
0 N+ R- ?* A) C; t0 }2 l" tan old beggar`
# r9 i# g$ \1 e* w6 G&gt; text8 P0 G* D. u* |7 U+ e
'A young idler,\nan old beggar'; ^! y4 b. I" n/ ?- l
</code></pre>
* B. h. v) K/ Z6 N- r+ w<p><strong>声明常量:</strong></p>
: \) C5 n3 N0 F2 m7 ^- X5 S( c<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
/ `  a- m- ~7 P" J. A<pre><code class="language-javascript">&gt; const pi = 3.14
) Z4 [5 k1 }: y&gt; pi
' n4 ?0 a1 ]) m$ E1 a4 y0 }2 I3.14
, N7 a, ?* f. S& y&gt;  pi = 3.011 [- r/ v/ `8 y6 d" j2 X
Uncaught TypeError: Assignment to constant variable.* f8 v) @: @8 |/ G; y" `* E8 G
    at &lt;anonymous&gt;:1:4* t" t( \/ K: `, e( r" d+ O: r
, ?7 E: D9 \/ ~& D
</code></pre>& A6 u0 G# L) l. Q
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
4 P% c0 B( S1 t% ~& z7 d- E<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
+ O$ D- G& G3 q- k" F<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>0 V9 F7 |4 v0 U
<h4 id="231-number类型">2.3.1 Number类型</h4>  j, }3 f5 V8 }& @" K
<pre><code class="language-javascript">&gt; var a = 5
) ^% N9 V* N; s0 v8 q( L  K5 Q&gt; typeof a   //查看变量的类型  5 B: J8 J6 z4 |9 o( `  w# x- s
number
$ M' f* M4 o5 |2 ]2 ?: Y: ^
% f# r1 }, D) h6 Z" L" }&gt; var b = 1.3
, w/ N" @  ~' n&gt; typeof b0 Z3 P$ ~: E' d" p. O
number( w) L4 y& h1 n" ^2 c" D& a9 g9 W

$ M$ @! I% ^0 e* L// 不管整型还是浮点型打开出来的结果都是number类型# n# k0 [: D1 W' r) l6 o

. A, B" z; l" l6 {# d/*
5 [* l! f$ ]8 B# INaN:Not A Number
2 J$ ?. s$ p; J9 vNaN属于数值类型 表示的意思是 不是一个数字
; f) M; u% j" [& ?; j* C; B*/
4 Z3 M) ^$ A* w, x
1 Q( V& `0 N! g, E2 Q3 r$ t+ uparseInt('2345')  // 转整型/ Z- |; Y. X( N8 M0 i* R
2345
9 R2 s+ v& [  G$ D& WparseInt('2345.5')6 V& l5 g& d$ C- X
2345$ P- T4 n! ]" R' f
parseFloat('2345.5') // 转浮点型
! S- f3 \: U* g5 R8 l3 r& @; N2345.5- L4 O/ R6 }# ]9 B
parseFloat('ABC')
9 u" u7 l8 d3 ?NaN
- t. {% {6 E) I7 qparseInt('abc')
) e( ~4 M, C) l+ h! F8 r6 ZNaN3 ^; o" g8 S5 A! A( Q' T- L
</code></pre>
3 D7 {6 z0 V" K4 x2 j<h4 id="232-string类型">2.3.2 String类型</h4>4 p$ y6 E5 z5 i0 r$ N4 U, p3 N- S
<pre><code class="language-javascript">&gt; var name = 'Hans'
2 x" M; e" `$ K# V+ e. d! ?! r&gt; typeof name2 D, G. w8 w# G: f
'string'
$ T: A! H' e  V6 ?% G! U; s$ ?2 i0 c+ R$ h
//常用方法
: x% g0 B& h* O8 X" l// 变量值长度
; ]2 S  ^; W% U! p&gt; name.length: O' o, u7 n% Y) x" l
4  a4 Y% g0 ^7 d6 E# _; l
// trim() 移除空白
2 W* F9 c- Y, }+ s' s5 ]&gt; var a = '    ABC    '+ m0 `0 j- |4 Q% U! x. X
&gt; a
3 i1 C1 b: S; q  x" v* c'    ABC    '( a3 n! [( t% G4 V" z& Z
&gt; a.trim()& B' C, @5 a8 R4 G
'ABC'+ k3 b5 f1 m3 A4 L
//移除左边的空白6 |; i/ |8 [0 Q3 N( Z' P" E
&gt; a.trimLeft(), |& T) _$ i% a( J9 p$ D8 S) Y
'ABC    '
+ S. N5 U6 a; H& f( r0 ~//移除右边的空白0 P+ k5 h' O4 b4 p5 G' y
&gt; a.trimRight()
/ j) ]" V" V8 p'    ABC'
. V. P2 A% D+ z8 V
$ T# w5 r5 ^2 S! T! w3 Z//返回第n个字符,从0开始
$ X. a/ L. m$ V5 r, `+ E&gt; name$ x1 W: M) S0 F! j2 i, M
'Hans'$ F' |8 X* F- B' h" a7 t6 A& X$ X3 c
&gt; name.charAt(3)& @) ~! l, D6 g
's'5 J& Q& g" m5 h! ~0 [, [! q" f
&gt; name.charAt()
: s4 G' H  ?2 r$ C  X) f2 x. c'H': F, [0 Y  f. k3 N* Q! P7 x0 [+ `
&gt; name.charAt(1)9 J0 f  F$ _: _- [& k
'a'3 C" {; O% r' M+ A# A- o

# Y; S' ~' X* M, D( l8 u% E  i// 在javascript中推荐使用加号(+)拼接4 M& q# H+ \4 a6 k5 [
&gt; name
% @+ O: f' G2 C1 D' n'Hans'/ ?5 x9 O- b0 o# ~8 H0 o; z- |
&gt; a0 g7 c8 u: v2 v& h+ A
'    ABC    '
' \+ ?" |2 v5 X+ F& N/ t' }, q&gt; name + a
" I. I7 u; `5 ~( j1 }* o7 G'Hans    ABC    '
" u* Z& u! H# C" j/ m2 s9 j  u# Q5 }// 使用concat拼接6 O! W# Q5 E2 |2 k5 H
&gt; name.concat(a)- f. d& ?2 S- X2 Y7 R% Q8 D% R- D
'Hans    ABC    '' b* J! m4 u7 f& ^; ^5 _
' D( F2 r4 S( F. R7 n4 e: G" g
//indexOf(substring, start)子序列位置
) s7 o& ]& e/ y) o. G
3 D( g1 b7 O/ Q7 J; J) C; G, L&gt; text
8 q$ ^- e$ q) m: ~: |: i) `'A young idler,\nan old beggar'
' J# S1 r& e/ q! i# O5 b&gt; text.indexOf('young',0)
7 N) H  ~0 O. _$ e# {) [+ ^- X2
# Y' Z( V5 X7 v3 L6 e! P4 n# L5 b9 V# t* N
//.substring(from, to)        根据索引获取子序列
( C6 a8 O1 i" b&gt; text.substring(0,)9 I6 M( ]2 u) S6 T
'A young idler,\nan old beggar'# _7 l. {2 r( B9 K7 Z( N0 _
&gt; text.substring(0,10)
$ q$ O( q/ ?  T1 t. C'A young id'
' @  s3 W) i& S  D" B6 |7 ^* Q/ {
5 E4 b$ G% q( P  Y6 l. g1 x// .slice(start, end)        切片, 从0开始顾头不顾尾- |6 S9 L/ y* q) E' \: M( u; K8 S
&gt; name.slice(0,3)1 K* c& u3 O" ~& q6 D) B8 }/ ~, F
'Han'
' \1 z9 ~0 c6 F+ l' I
' q' o2 w+ M# [! L! u, P// 转小写$ S. |/ z( K' c9 y
&gt; name! l/ g9 ]! W& ]. [% K$ G! {8 l$ S& ^
'Hans'
# f# @& n3 y7 E; C) R8 g* j; }7 t&gt; name.toLowerCase()4 u$ R! e1 {5 M
'hans'
: S3 X# @* i6 @( H6 s' g// 转大写
7 A% u! n* h$ [# \&gt; name.toUpperCase()
' |& ^0 G! S4 f: s& m! L'HANS'
% l1 d- M: S0 z7 F$ z9 g9 V
# P% m  P  T' _, x& x& r; K; B// 分隔
: a, k4 B! x$ T/ U( C' K( B! m&gt; name
9 Z. O  Y- r% Y4 l7 U; P) l'Hans'$ p( K) K1 A' P8 Y$ H
&gt; name.split('a')  M: S* X. [1 x. {2 b3 X
(2)&nbsp;['H', 'ns']& W+ z0 p7 y# R( f. D
</code></pre># L1 W6 {: G' V8 p; D5 z  `
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>0 c. f/ K$ R* R! O! M9 ]* U* D
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>4 d6 M4 f1 h0 b/ {7 ~& ^
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>' V. p% h/ Y) y- A, w, M' M9 a; N
<p><strong>null和undefined</strong></p>$ q1 q7 n& e! d& f) r0 P4 [0 ]
<ul>- r; A9 f1 D. F) X
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>: d+ [7 f: d* y, a
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>/ P9 J; {& s& V$ l
</ul>
9 F" m3 [0 K3 x4 ]( G' L<h4 id="234-array数组">2.3.4 Array数组</h4>
" E: a  `: l" d<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>( S5 m1 w; G% b, e/ ~8 m: L8 T
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] & V. ?3 Q% }$ o6 c% ?; K
&gt; array1  z' a7 g8 p$ X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& l. ^: n  }4 l& Z3 F, T&gt; console.log(array1[2])  //console.log打印类似python中的print. V! {0 A, A; b3 Y; Y! ~  f
3) Z. v+ H' _$ E; R* |- Z
// length元素个数
( R, q  {$ O' f, f% z2 x* s3 P&gt; array1.length% Y+ E2 b/ z9 z7 [
6/ _# f- s. I. [5 x' g
// 在尾部增加元素,类型append
2 l/ Z: t) N. d&gt; array1.push('D')2 D3 r0 z  H" S% C, ~' G" ^
7
( \  K" @; s/ F( B' h&gt; array1* c' Y4 Y+ D, w- A! {
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']' a& o  y% b; e* U& m# C$ R& M
// 在头部增加元素
9 _0 s& k/ D* @' p% ~' V+ u! p&gt; array1.unshift(0)
) s8 z3 j5 [( N  A2 a' f8
7 _  D8 w+ V% c" p$ L% F' }&gt; array1
4 m+ C. }: m) L; q(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']4 F" ^9 d) |& j  g, o" \1 ?4 t4 E' T
. w9 U' g3 |' }/ G, S, N& ~  e
//取最后一个元素! y9 M) F3 a5 f
&gt; array1.pop()# _5 H% v; o2 t
'D'/ m  b9 |# Z6 n9 A& x) |
&gt; array1
5 _/ c( R% E& m1 @+ j; e(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
3 w- Z8 E; F; r1 k# j//取头部元素
6 x- ^4 ?$ |6 X/ D* G7 x&gt; array1.shift()% M  D5 m( E+ }$ v
0
; ?+ s: O) E% g# ~&gt; array1
" h% M+ ]% r: `# Z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 b" U$ g5 e; X8 Z8 k& J5 b6 C+ b
/ c6 N/ K% ~8 Y! _7 _. h
//切片, 从0开始顾头不顾尾
0 h1 T' b# ^0 Q  U: {&gt; array1.slice(3,6)
. d( ?7 z0 d# X+ V% ^(3)&nbsp;['a', 'b', 'c']
! v$ \- E( A' @4 L8 R. f( K& @// 反转: P. a( r  N8 D* ?
&gt; array1.reverse()8 {0 Z' `7 h8 c# B  X
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
, z5 ^+ q  T/ {7 {// 将数组元素连接成字符串
6 J9 F+ n2 D4 ?: I; G&gt; array1.join() // 什么不都写默认使用逗号分隔
& ?* a) E! a1 m! `' ?8 F'c,b,a,3,2,1'& t4 P; y  G  Z2 k8 ?  N
&gt; array1.join('')
0 s7 ^1 Z) ?. n: C5 @& \4 U( ^'cba321'
  c% b; |' I0 h8 Z&gt; array1.join('|')( H& I/ v" Z% I' T6 E* X5 n# M; Y( L
'c|b|a|3|2|1'" g1 T  @7 m2 Z
2 d: `; k9 c. P& K
// 连接数组; Z& e6 j: G6 s2 R2 |' ^
&gt; var array2 = ['A','B','C']/ D( A9 }1 ~9 ?: |. L7 h: V* u7 Y
&gt; array1.concat(array2)
- c2 X5 k/ i7 M9 ~- r' H0 _(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']7 y! s7 I5 {/ e: D
6 ?' E6 k9 E5 d, l) f; A! K
// 排序6 ?' t- y2 K1 Y8 l0 I' ~6 k+ [
&gt; array1.sort()
" v/ T/ y6 x$ o2 a(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 C5 V* Z' D/ q* `0 {
8 Q$ @7 M  W% ?9 u0 g: C2 \3 O
// 删除元素,并可以向数据组中添加新元素(可选)
& z: C# w/ B- x' l&gt; array1.splice(3,3)  // 删除元素
" V) M3 c. ]7 V- V9 @* I(3)&nbsp;['a', 'b', 'c']& W# j6 O. T' E
&gt; array15 n6 R" w' _' i5 |  V7 M
(3)&nbsp;[1, 2, 3]9 k, e  @! }- O; R
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素$ D2 H, w: |9 O) j- ^! v. R$ _- M4 b! N7 ?
[]
: h( H' d. ?. B8 T&gt; array1
1 u. x$ J) ^! k$ [; [# t(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
1 [- a1 M: g; k1 b$ M$ [% p; @7 m
6 g7 g5 I! [+ j" ~* N, \/*7 R) v) O; N  u! W2 t
splice(index,howmany,item1,.....,itemX)
) r+ k) h) h' Zindex:必需,必须是数字。规定从何处添加/删除元素。6 C; ~" p5 _+ O
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。( p. B/ K5 E# N/ ~9 R) I8 r
item1, ..., itemX        可选。要添加到数组的新元素4 x. {* Z- f" [8 j& ]( Y# r
*/* c! _. ]% g) G  K; P
% N/ g8 b4 U2 K* H: `
// forEach()        将数组的每个元素传递给回调函数5 S# a5 e8 C- ], d; X/ K
&gt; array1.forEach(function test(n){console.log(n)})$ }6 o8 |; e4 ^5 H  a8 H+ Q$ R
16 B# M' }% p8 t
2
7 H- C) G+ ?8 d: s; @" Z8 O8 o 3( C% ]1 y8 ]( a  a  ~* J
A
5 X2 S( w  v  [4 F, ^* I3 j B, H0 R) x6 d; b- d5 ?# m* S' ]
C# \8 C; Z1 r/ Q
// 返回一个数组元素调用函数处理后的值的新数组
, ~' I1 e7 e. H& z( H9 h&gt; array1.map(function(value){return value +1})
5 w/ ^7 J2 h6 Z" y, ]9 \9 Q- c, ?$ |(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']) t- f6 @4 L1 s) [" {7 ^3 E( d
</code></pre>
6 M' k5 Y3 J: U2 @<h3 id="24-运算符">2.4 运算符</h3>
: \) }; N. V: b! S<h4 id="241-数学运算符">2.4.1 数学运算符</h4>! |0 F; ^% C# l! K) @5 z8 [
<p><code>+ - * / % ++ --</code></p>
6 K) E: X1 [0 D. j1 x& i<pre><code class="language-javascript">&gt; var a = 6: M  ?2 b7 J' ]4 S
&gt; var b = 3
" W( S1 l! i4 h// 加. I2 i; T) s) z# ]8 Q
&gt; a + b
8 p, d2 `: T, r  {; U4 ?+ R9, N4 p) _# Q1 O; v3 r
// 减* v# @3 Z: v0 R6 V( R
&gt; a - b, Q' d6 R5 j0 ]. X5 F9 F6 Y, s! d
3  x2 ?# B; m7 l3 s+ U/ ~: I7 b* B, @
// 乘6 O/ ?1 R: w" Q1 \: W7 o# F
&gt; a * b6 K" s, L- e0 l8 S& W/ [
181 o  g! H; p4 E" O- f1 ?
// 除
2 i* |5 u& a8 `( D; Q3 h2 N&gt; a / b
7 G7 ^" w. x+ W7 G8 K9 T3 c2
! t) |' j( N: r0 B1 m// 取模(取余)
/ U; Q' k/ s6 y&gt; a % b
- @5 S$ F& Y8 V8 X. t8 `# U+ G0  S+ }+ ]/ l2 f7 i. C+ I( p
// 自增1(先赋值再增1)
( h; G* \4 E% |2 g&gt; a++
5 W9 z+ Z$ R+ f( b; |6
) d! L; Y! S# w0 H5 E0 X; O/ y4 n0 }&gt; a/ v, L/ k3 U( D7 l7 U8 w" \, S  M
7. s8 X  I. G$ @( s8 I
// 自减1(先赋值再减1)7 G4 _- x3 s. ~: O9 Z$ E
&gt; a--0 i  ?+ ?4 }" p* l" P
7: p) k  e: Y* o; u9 K
&gt; a" ~( {" f0 L: t' q8 E5 [
61 m9 i2 M' J0 K' O9 k$ G
// 自增1(先增1再赋值); ~% b7 S1 e; o: U# [
&gt; ++a  t& Z% S* n7 x/ d0 U; u
7% K: ]7 e- l& q* J9 F6 T
// 自减1(先减1再赋值)" S- W0 J; t1 Y, b7 p
&gt; --a
6 I: A# k1 z& B% P6
# g& X9 p3 @) Y" B&gt; a
: S7 j+ {: v8 L4 L7 S6
- e. u* E$ N9 }" R3 S" s2 T4 ~# I, z3 k! b) Q3 o1 ^# H
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
/ S. D$ d! j" l) Z3 m</code></pre>; e& V* G* m  l) _- ^
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
) ?. v( T  }. Q9 ]( _9 N<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
8 J+ w3 T9 T1 \/ ?# L/ Q<pre><code class="language-javascript">// 大于. i2 X/ D2 o. O3 J; X" ?: V$ P
&gt; a &gt; b
7 G' q* f& j, Y5 [9 Xtrue' Y9 Q! Q4 r7 V2 W& K& ]) t
// 大于等于3 w- w% j5 G+ N. Q' @/ g. ]6 M, h
&gt; a &gt;= b9 p& [9 {3 _) p) K! r, T/ X3 ^6 N
true
2 O! Y6 x1 ]/ r+ q4 q, D; [8 [// 小于% ?& r# T* r: x' I7 t" o4 A" |
&gt; a &lt; b
3 h) }* O: n8 K% Sfalse6 i* b2 V, P; x# S
// 小于等于
$ l& R2 n0 U! P' @&gt; a &lt;= b2 Q8 b8 m& h: A3 [4 y# H1 F
false
% i5 W' }5 r4 D1 @: {// 弱不等于
7 A, @: E# U  u/ e+ L&gt; a != b7 P1 i5 F" [# z
true
: X  \0 @% i/ p// 弱等于; s0 C- K- `" n# q' `
&gt; 1 == '1'
- s8 H- }" G' i& P$ f) Q/ j- Ttrue" @8 ^7 D% Q2 j0 J( K3 c3 N
// 强等于
/ G3 Z5 U8 @- J) v7 Y&gt; 1 === '1'8 t6 \0 e7 U) Y2 v6 y1 N% p2 {
false( j& o6 _8 x; J0 H9 I
// 强不等于
4 s+ {  k0 @* F# d, O&gt; 1 !== '1'! X# R5 p2 }" t
true
, k5 s* _" s( G9 B9 e1 ?; X) m, ]9 C+ Z- Z- g) D8 a; z
/*/ T" f2 q+ _7 l9 q! K1 u% C
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
* n6 z3 |6 H2 N, m1 e  j, f4 H*/, X0 w! d0 v) ^6 C( O
</code></pre>
( x* g( j. m6 t5 ]5 B" I1 A% w<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>. U+ z; {4 J% z' \. D5 k
<p><code>&amp;&amp; || !</code></p>- J) J& \% Y/ q2 @. y, M$ [3 i
<pre><code class="language-javascript">&amp;&amp; 与# q1 }" o# D5 s+ B* S% H, q8 v
|| or 0 r) M3 @, e  N
! 非8 b5 k4 z: a+ M+ q$ a9 m3 }+ F
</code></pre>7 K6 w" `. c* x) x
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>9 _; ]1 G% Y. T$ h: p2 W; r
<p><code>= += -= *= /=</code></p>
$ B2 i# X6 q8 j+ |, x<pre><code class="language-javascript">// 赋值
, f( ]% T* {! k) V$ l; O/ J&gt; var x = 3: N( q6 Q; L7 y( l" F
// 加等于  z" U3 w3 J, R; x
&gt; x += 20 y( m6 b! U/ F4 A
5
7 w  s, G. Y: B/ a7 s// 减等于
3 D" `2 c, |: D( m5 o&gt; x -= 13 H- z) N4 W* E, n% i, @
48 p7 F3 v3 Z8 {  Q/ b; v
// 乘等于) b# l' D2 ?2 I+ T0 q8 u
&gt; x *= 2
. O; l6 u4 I8 k" ^0 G  [81 \6 v# ~( \% L, s% V0 D! r9 g, F* ~
// 除等于
. {3 P6 ?6 F* _2 H3 B" f&gt; x /= 26 j- x* a* G/ m+ z+ e$ P
4+ F0 R. l- K* M" ~
</code></pre>
" d) y! ~. k4 x7 ^$ A, G: F<h3 id="25-流程控制">2.5 流程控制</h3>
: P! I- q. n4 F* L0 E  r6 z<h4 id="251-if">2.5.1 if</h4>- K: J; Z9 d8 @, ]2 T0 g) w
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
# c( |- D& z6 q7 K8 I/ Q! A/ }! @0 ~4 U+ V5 e  T7 a
&gt; var x = 3
) X5 W; L0 ]! t9 y" @; i&gt; if (x &gt; 2){console.log("OK")}$ U7 d) D9 |; f' C
OK
2 G$ ~( x# B' y5 D) \8 v( J
" [& {  f# o6 m2, if(条件){条件成立执行代码}
2 B- i( ^' I! O        else{条件不成立执行代码}. B: J: x- {" j- C3 I: x% w8 Y

  B' T6 h& d# `6 z/ e; T&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
4 b  `! Z, ]) Y: y8 j* r9 m2 k'NO': ~6 k4 K" m% M$ Q, g& J# R  k  R

& e0 C5 J, R1 U# L" V3, if(条件1){条件1成立执行代码} % E: f8 [0 ^* I4 Z& |% r
        else if(条件2){条件2成立执行代码}( g) M7 q& u2 P4 `% X
    else{上面条件都不成立执行代码}
$ c5 U3 R! ^6 ~4 U6 }/ T4 d9 |7 C  R7 t2 c
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
6 Y. v; l( S( F& u Ha
; l# E& }" E6 S9 Z# a</code></pre>5 U9 P/ Z8 [( D
<h4 id="252-switch">2.5.2 switch</h4>6 M7 \) n+ E5 s% x' |" N& ?9 q
<pre><code class="language-javascript">var day = new Date().getDay();$ F  }8 Z! g6 |* D( O+ o( b
switch (day) {  g1 r2 E/ P4 [
  case 0:
3 n1 X+ x7 s3 a+ o  console.log("Sunday");$ j2 ]+ e. x4 O1 Y9 G7 f# v2 u
  break;, B0 y& e" f$ b4 w8 C7 ?
  case 1:
* l2 W) K& I# {1 G) L- \! ?  console.log("Monday");
/ X! z: T& I- r* q( \/ {3 m: x  break;* M% z1 y6 ^  Q8 z' R) ^
default:
  J, p1 m! T1 g1 _& k  console.log("不在范围")
+ l8 _! @; ?# P4 Y/ J$ K}1 O3 R+ E6 z' f+ Q4 E
不在范围/ {& _. u# y: u& D3 k) t% X. E: _
</code></pre>
8 `: a- Z. C" E<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>" T8 ^2 `) `2 @; d8 C+ q
<h4 id="253-for">2.5.3 for</h4>
  q% H& J$ g) N; k<pre><code class="language-python">// for 循环
: k" T' t8 A, B/ r3 w7 }        for(起始值;循环条件;每次循环后执行的操作){7 ^! V, O; B# `) }: B/ M3 x
        for循环体代码% O3 o) V% V3 T& w$ ^, i' m
    }
* n9 F9 N  w* I- @0 H' u- h* G: Q" ]' [* T7 f
for (var i = 0; i&lt;10; i++){' L: Q: C1 ~+ v/ ~
    console.log(i)4 w- q/ ?5 S) D, [) S" F6 z
}: _  r: H0 i! b
        0
# T7 x7 d  g0 }9 ?        11 g# R9 v5 J5 N6 H
        2
5 U7 x. w2 E, ?1 W9 ^, Q) G        38 y' s# o- |. n* U7 B: [
        4) b, l  _# B: G% a% X' W9 R% a7 S6 }
        5* p$ z4 {+ k) C$ h4 @
        6
; o7 a/ s( L2 q) k2 [        7
" M% R4 a- `& A, K* J- e1 P; [. U: q        84 s8 P, o+ z9 w/ F+ ~# J% ?0 w
        9
% P. v) H* t: |- m( o</code></pre>0 k+ Z0 N8 `# ?
<h4 id="254-while">2.5.4 while</h4>
! n+ L' I+ d4 u6 Y4 ?" n<pre><code class="language-javascript">// while 循环
3 T  g4 ]6 \0 R- r        while(循环条件){
# J, y- O: \3 A) p# C* o9 T' B        循环体代码( u0 O. G5 e% b/ N
    }
6 b1 X$ h1 O" ^* e5 l& f! `) y: l7 U7 S; z3 w$ v
&gt; var i = 00 C6 [9 i9 D' I8 ^: t
&gt; while(i&lt;10){/ @3 @, C/ U& K# s
    console.log(i)5 C3 o9 \; N5 l* x
    i+++ x+ d4 h; @  H- C2 r+ K9 q
}
: Z1 Q' O  F* l) d! c0 v8 d% d 0( u4 }6 e5 I7 s& ^$ `
1
9 M+ M8 Y& v' l& ?+ h$ u7 v 2
# [& t8 f5 ~( U1 a 3/ ]- B6 B  `- O% O- `5 H
40 D+ w% M, {( k9 f  c+ [
5: H. G0 s% y4 V0 t7 W& i$ X9 j
6' _9 Y. \# i- b" X, l+ [, o! v
7
5 _9 i4 ~$ j3 r# |0 t6 t 8+ m3 u% v" Z7 ^: o4 o/ ^# M  B7 j
9
/ g# L  F, d" m% X</code></pre>
$ m7 L! g0 `* \/ B) X6 _5 D<h4 id="255-break和continue">2.5.5 break和continue</h4>& a0 ^: M) L$ ]3 R9 W- b+ T4 z
<pre><code class="language-javascript">// break
5 A: V$ k( |& ?# X/ v& Xfor (var i = 0; i&lt;10; i++){
0 T7 ^8 i, F! O) ~- |0 B# D. C    if (i == 5){break}
' p$ w8 g# c" f2 E9 n3 I! z    console.log(i); ]; B2 `: ^& ?1 ^2 K+ j% d; x
}  b3 G+ T. J- {9 R0 `8 }) w" w
03 G' F& [+ E* ]& N1 _7 G+ C
1
4 c/ I) Y4 F4 S5 q, j8 Q( P 2* z$ a; ?9 n" U- Z9 L' p9 u
3" @0 b# w6 V: w9 k
4
; V# B9 |1 K  ]1 k% W3 @6 r// continue8 q" n6 b8 Z& l4 r
for (var i = 0; i&lt;10; i++){5 f: x. _; e, S% i3 W, U
    if (i == 5){continue}
5 X( m7 N8 h& _6 f( _    console.log(i)5 {9 K$ @) P2 I$ T' y+ d; E
}5 n* t# X6 H% f* o4 r# q! d
0  N5 C+ U& D5 b/ X& l
1
8 `: @6 J7 R. q5 f; G: [# O6 h 21 C, K$ [+ c* E, v
3
5 H9 r" `0 T+ Q2 d* w3 h# r6 a 4# W& k- P* q( D$ J' v; @
6* t7 M& A+ ]9 X
7% i1 L7 r& g- W1 x
8  M$ S, q$ u5 F* P6 `8 O3 j* {
94 }7 k7 X1 N8 ^8 E* X4 [6 }1 O

. K- m( O4 C5 R</code></pre>
0 G% k8 k* e: Y, n" X* ?% u<h3 id="26-三元运算">2.6 三元运算</h3>
4 t' V" s1 Z, `1 ^! n, ]<pre><code class="language-javascript">&gt; a0 U/ M5 ?- a* a, L& o
6
& U& h& Q; s  B&gt; b
4 q! z5 t' f8 T3 Z3
* ?9 G( x2 s2 H, x
. u* s( a, I8 q$ I8 `5 o) w//条件成立c为a的值,不成立c为b的值5 A: j0 m& U7 ^$ ?0 R
&gt; var c = a &gt; b ? a : b
$ g& y5 g# H2 C6 {3 M4 X% \0 Q, v* h" g&gt; c9 ]5 S+ Z9 A( {0 B2 Y0 B
6
1 ~: d. Z: F, i5 N4 L9 [: q
* P# {: x4 z* U* Y) [6 i// 三元运算可以嵌套
; u* ^4 p! u. r$ Q& W</code></pre>1 m" p+ B9 V, ?% o. j: R/ W& C9 m
<h3 id="27-函数">2.7 函数</h3>
! M1 u+ v$ ]! n/ K6 M. I<pre><code class="language-javascript">1. 普通函数) l- ?/ s7 u5 R
&gt; function foo1(){
( ]- c) ~$ Q3 S$ j7 J% c    console.log("Hi")
% k/ @  _1 H; M5 l: c7 n6 g}3 \. D- ?0 H- k% p6 |
- h: z  Q0 d+ ^' n" t
&gt; foo1()* l( p3 k/ u1 j, B! B5 f
        Hi( _/ t; _$ b) x. j+ a$ A3 b& \
2. 带参数函数
$ F4 z4 p& l) N$ o8 U) |* g9 W5 C1 A&gt; function foo1(name){* ?' _* g8 S" p( m, L; U8 O
console.log("Hi",name)2 W* p8 v1 }  n6 k: s/ v4 f( i  G
}
9 Y" x2 U$ S  Q& r% a3 [# g1 X3 A7 E7 ~* n! y
&gt; foo1("Hans"), U% K( B. U4 v' b  W
Hi Hans
0 [/ ~4 g- P  ]7 R( y7 I) n; g: F( m- {
&gt; var name = "Hello"# {( _- T; R" x; E' E, B- b
&gt; foo1(name)+ s1 I- `! g% H/ K2 i( D
Hi Hello3 h" `, B: r5 L' I- F9 Z
# e* @3 j. w3 @' x0 [
3. 带返回值函数
0 t9 }) M9 L$ X&gt; function foo1(a,b){9 m- v0 k  ]' p2 j
        return a + b   
2 N. C( E5 b  x( {. O}
# P& s* W3 H+ y5 i&gt; foo1(1,2)
4 _  p! R5 {- o5 {+ X* t7 g3) J5 n' H& j" |  F' S1 ~- {
&gt; var a = foo1(10,20)  //接受函数返回值
: @. K# {. x. v( ?* N# e2 \( |&gt; a
0 K7 a8 Y8 `- \" y& w( O7 F5 T, W308 V. d1 K: X$ b# B

/ G* Z4 h0 Y/ u' H7 s( I/ f4. 匿名函数% M- m3 M  R9 o4 G# H+ Z; P8 [
&gt; var sum = function(a, b){
7 E' h. |" W% d  return a + b;
+ v# ~  P( S3 y- k5 v! Y}
7 N. w$ q& Z0 J- G9 j" W&gt; sum(1,2)
+ n% X4 e, Q4 d3
+ H/ Q: v& Y# U' P2 k- T) E9 ]& I& X
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱! w  j2 B' ?" c- D/ Y% f
&gt; (function(a, b){
. K, C, g5 g1 R. h' P, E. p  return a + b
& \0 O4 W; a  I; C})(10, 20)
: s5 z0 s, ]: n: ~0 \30
( P8 g0 \% b' F9 q0 N: f
. A2 p' S! P! Y$ Z5. 闭包函数% n% ]: ?& n4 J$ P
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
. U7 S3 d1 I; f( ?! @6 Bvar city = "BJ"
) t$ m8 e8 Y3 M. `$ Ufunction f(){2 m% H! c3 A$ b, N' u
    var city = "SH"0 N+ W) l9 l+ l+ h% e' i
    function inner(){9 h) t) j4 N1 v0 ~: l. ]- _* V
        console.log(city)
2 S. v2 W& i) K# G! h    }$ V6 H1 a0 h- H' J" b, A
    return inner  m- k& C) G0 O, j
}
, i; t8 L. u$ B) Ovar ret = f()! L8 U! t9 C: o4 J3 E0 ^4 R
ret()2 f7 l6 K5 Z: N
执行结果:
7 Q+ P6 v/ f6 w" z  PSH
9 m! L. g: j7 G3 J, `* g5 [$ L( z. o0 E& J$ r
</code></pre>
! O) k; C# S( M<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
6 {1 g& ]# e! W0 S<pre><code class="language-javascript">var f = v =&gt; v;. l. }" r/ G* l8 _4 \7 K/ `1 y) `
// 等同于% y) j  v* g# p0 c* m2 t4 R# Z
var f = function(v){
$ M, L. L. A; n* u+ |  return v;
. r  p6 a1 _* Y; d}2 g" \7 u0 j+ o3 C) s
</code></pre>8 Z7 d" V. k" ?  @. m; q, [
<p><code>arguments</code>参数 可以获取传入的所有数据</p>4 A+ }" _/ m3 {6 V: Q8 c1 s
<pre><code class="language-javascript">function foo1(a,b){
1 k) Q9 h9 _, y    console.log(arguments.length)  //参数的个数 3 K1 ?. ~0 @) h+ j
    console.log(arguments[0]) // 第一个参数的值
4 ^4 h0 H) k! I: t, k2 z2 V        return a + b   ) v) f9 n5 S- l1 Z: X# x9 q% o. S! U( G
}
7 y0 W4 R; m# Hfoo1(10,20)
% _! l( H' d2 @0 q, H! K结果:
) q5 C& S5 f, k! [) t( [ 2          //参数的个数 3 O' t, n0 a+ l5 z+ {
10        // 第一个参数的值7 L0 K" C7 t' {; _6 f
30        // 返回相加的结果' p4 V; k) {$ p6 S8 U
</code></pre>
+ K& a  D* X; ?( {9 ]2 E<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
/ X9 B8 n: k" u! \- V* g<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
% d6 ^5 Y$ N' t: q4 A3 @, _<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
- x( g' z. f9 J; |3 C" C<h4 id="281-date对象">2.8.1 Date对象</h4>
5 ?$ l. @5 D1 `3 n0 f' K% n<pre><code class="language-javascript">&gt; var data_test = new Date()( L4 Q6 v- K9 z  d, u+ F" w
&gt; data_test* ~: ~( G4 T, g+ j, \' r! B
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)' f, F% N) _# K9 x
&gt; data_test.toLocaleString()
* F4 Q+ P8 k& V$ H'2022/2/11 下午9:44:43'9 \( y! _  g- k4 o3 ?

, O, [$ j. Z$ S& |# L) j8 k&gt; data_test.toLocaleDateString()4 E9 M2 y& \4 x
'2022/2/11'
% M1 t$ n: U$ d9 X
% J& f5 i" l! Q& s&gt; var data_test2  = new Date("2022/2/11 9:44:43")
5 p* E5 x! ^, ~&gt; data_test2.toLocaleString()
0 [# E4 Q5 O+ Z9 r( U% u'2022/2/11 上午9:44:43'1 ~& x1 f- c0 V5 a' v# Q( q& g

; R: ?3 E& N" n1 V// 获取当前几号9 C+ Y+ |  e& a  M* V2 \
&gt; data_test.getDate(): S( f9 U- a9 H1 J- B
11
: ], N- B. S: t9 Y" x// 获取星期几,数字表示8 m6 B  ?' I: N9 Q7 H$ o
&gt; data_test.getDay()  
/ b) u% b3 Y5 x6 R$ T3 W% j5
. p0 b6 k+ {6 x% C// 获取月份(0-11)
1 q. g+ h9 |- k; e0 n&gt; data_test.getMonth()) ]; [) I7 u- D: P
1
$ R' B" M; S- N// 获取完整年份, U7 R+ a$ W& V9 r# R
&gt; data_test.getFullYear()
8 r8 h7 n/ a! B5 l20225 T8 i2 g. E, L% B3 r. V
// 获取时
5 h  w" K' H- N&gt; data_test.getHours()5 m! h5 p# P# K
21+ u1 k& k$ d4 H0 D5 S- l9 d6 d
// 获取分
9 P$ x2 c- d" p7 `1 e" r1 K# y* A' {5 O&gt; data_test.getMinutes()
: y/ U- A4 w. @2 K4 b44( y* m; U" }/ c  {. S8 s
// 获取秒& k* X/ t. [+ G& Z& W
&gt; data_test.getSeconds()& g2 e" u, N4 O4 F# C( Z
43
% |, B3 E0 H  x1 B0 G1 ^$ d// 获取毫秒
3 O2 V" @  R- B9 ~5 W$ ?&gt; data_test.getMilliseconds()  f' e2 I) {4 i+ E, Y5 P& d
290
! F! I  k  |6 [% v: ]* v9 M( ^// 获取时间戳
! v- ]4 ~. I' ~* \/ a5 e&gt; data_test.getTime()
4 R0 q; n) O, H/ B9 K9 D1644587083290% |/ A7 f8 _+ D
</code></pre>: T8 G+ P8 E% _. M' T* V) _3 I
<h4 id="282-json对象">2.8.2 Json对象</h4>
) t, A! I3 {6 ~5 E( Z8 ~<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
( ~; ]4 P' l- iJSON.parse()  // 反序列化,把JSON字符串转换成对象
- d. @* Q( V* K  C" U
2 z9 K$ F0 {1 W// 序列化8 w8 J  q; v: W! Q
&gt; var jstojson = JSON.stringify(person) / q( E% @; V* H' e- K; ]
&gt; jstojson  
0 O) e: @+ f2 V7 R, r3 y% `5 c'{"Name":"Hans","Age":18}'
( W. D/ e' S: Y/ M7 l, i0 v& |0 G" g  \8 J
// 反序列化
8 U! d7 Q7 C% `: y&gt; var x = JSON.parse(jstojson)0 a2 p' i, c8 w6 M0 I0 y& m- I
&gt; x
$ U. J2 g% S+ N- z+ B" V8 h/ U) X+ Y{Name: 'Hans', Age: 18}, p$ H0 p5 d6 T$ S1 s
&gt; x.Age( j) q+ G+ n- q" i) C4 E, U5 l5 }
185 S2 \0 Y- x$ V; `/ N
</code></pre>4 D- V2 D0 Y5 ?* M# j
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>! }2 a9 L7 V2 f6 K; E
<p>正则</p>
: i1 @" y. m( Y( t0 o. W5 l<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");! ]$ _/ z+ L" [# j6 k- l
&gt; reg1
. Q: _/ w3 q! Y- M8 @4 l/^[a-zA-Z][a-zA-Z0-9]{4,7}/( X) e: w: Y: o0 ], Q! p2 z) i7 {7 B
&gt; reg1.test("Hans666")
! u1 s* {0 d9 z; Gtrue& Y5 z3 ?) A2 E
. q. `. b* W& n; W% Z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/4 a: R( w4 u4 \* R8 R; Z" K
&gt; reg2
- b0 V2 @+ J0 x4 [' u! Y/^[a-zA-Z][a-zA-Z0-9]{4,7}/; n" i" }! Z4 Z% t# t: ~4 B
&gt; reg2.test('Hasdfa')2 u. V0 K8 i' R
true
9 Y* z; A) w- D
7 A6 d1 Y/ Z6 ~* t+ l全局匹配:) G6 A3 h+ \* |( Y( l
&gt; name
4 Y4 f& O  R1 }& i: y'Hello': x) n" f- k2 q
&gt; name.match(/l/)
5 W4 F: F$ U, @1 }" U['l', index: 2, input: 'Hello', groups: undefined]
4 S% P- h% \" M4 H8 T# H' V- K7 m7 Y) i
&gt; name.match(/l/g); J. a! ~+ }! i! A3 D7 e
(2)&nbsp;['l', 'l']
) c3 i+ \! n" R& O8 J* Y* P// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
' A5 F# J5 m1 W& y' B: R# Y( P+ H- O, g; }, K9 Q* f
全局匹配注意事项:
4 T, o) q0 S- A3 v0 ?&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
  f( J+ K6 R" E4 x. ]: m: @&gt; reg2.test('Hasdfa')
$ g9 g8 R; {  E6 x6 Ttrue
+ Y# l4 c0 f& U" t&gt;reg2.lastIndex;1 ]% ~5 L9 L' u
6" N% Y$ O' n: |; r9 o/ k$ F: O
&gt; reg2.test('Hasdfa')' q- v4 b. d2 K) ?6 n- f/ i: C
false) O/ G% {1 v6 Z; ]% W* s! t
&gt; reg2.lastIndex;( D2 W/ y3 O' d2 A% j
0, U: w6 h/ T( V' ?) m$ D& s% f
&gt; reg2.test('Hasdfa')# u3 L# W- }1 I1 q' n2 v
true2 Y; q4 r* F; o# J3 H0 S$ a
&gt; reg2.lastIndex;' W2 x/ a2 i; r. v: ?6 C# R
6
& L; f, q" G( K* ^1 C6 K0 p&gt; reg2.test('Hasdfa')0 ~* h; k0 Q7 Q4 H7 K
false
  m& w$ T+ n0 b3 N5 Q&gt; reg2.lastIndex;
8 @2 ]& `, r2 r0
. I$ b& G8 c5 h5 s4 d// 全局匹配会有一个lastindex属性
, Z3 m$ U* ?5 p+ r/ f&gt; reg2.test()4 _$ R8 e8 c0 ~9 v
false
! e7 q) P, s0 M&gt; reg2.test()
! p: f, N! @( V' X6 Htrue! _  ^, w& t4 G3 a+ l7 K
// 校验时不传参数默认传的是undefined+ v/ Z5 ]6 R- l  Z( B7 N& \. y: y8 D2 Z
</code></pre>
) |- Z% X4 g1 r* b$ h' W- u  @( o5 u<h4 id="284-自定义对象">2.8.4 自定义对象</h4>& y' w- a! p/ ~6 Z+ k, A( s% l# f
<p>就相当于是<code>python</code>中的字典</p>
: r& N3 ]6 N/ I# U7 y1 {1 I<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}9 M0 ^  [5 L! N! B" E; s8 W5 _
&gt; person
8 }8 n+ W' X( x" a. V$ \{Name: 'Hans', Age: 18}. I2 O- a" F7 @: F8 p) h4 _
&gt; person.Name
4 h1 V$ q  x0 ^% C* y/ G'Hans'
) R6 X3 M% s" ?$ H&gt; person["Name"]
2 l* J0 o' A. |; |, \. Q3 l! A; k'Hans'+ }5 |3 t2 p" [6 {
0 b0 z7 Q/ f: ?1 e
// 也可以使用new Object创建, U% O1 ?; [" ?: U! P* s4 W! n
&gt; var person2 = new Object()
# P9 _; }$ {- d- W) n! E, C&gt; person2.name = "Hello"
, Q5 q) O- H4 G0 b3 {/ f'Hello'' B6 a/ {- R: l( z  V
&gt; person2.age = 209 y( p* r' F& w7 \" ?
204 Z! [) g( }) @7 X
</code></pre>" s+ h: _2 p7 R) N( v
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>6 a! _4 O4 e/ A. V& U) W
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
; K  g& t9 ?; {<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>8 I2 w2 Z% U0 T" z$ U8 C
<h3 id="31-window-对象">3.1 window 对象</h3>& j+ m2 [% I( Z( B# r# R
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
6 D" Z7 }2 _! p4 j<pre><code class="language-python">//览器窗口的内部高度
( C/ B! R6 v( c: t, B& v4 Hwindow.innerHeight 3 \# Y# I, T/ [7 {5 f5 w
7067 O8 a5 g) n' J+ i
//浏览器窗口的内部宽度
& Z5 Z4 o9 c9 x( L, }window.innerWidth* _( n% J' S0 a8 B! {
1522
2 a" q) W2 F6 N: D// 打开新窗口+ |) _# L% Y& c7 ]( V+ N
window.open('https://www.baidu.com')
& U; |) |, [" p/ F/ d# kWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}) W' a, z; }7 X/ B
// 关闭当前窗口
% L# @5 w3 a% C( |: A" uwindow.close()
5 ^7 [1 x' @4 r8 `. {9 a) V9 s//  后退一页
' P; W( s# x7 g( E0 M9 ~6 A5 q, \$ uwindow.history.back()1 g7 P" }6 [0 g% X, _/ k
// 前进一页/ y# K8 |2 o, B7 f
window.history.forward()
  ~% X4 J( M' M# B5 W. b/ x) R//Web浏览器全称" F. r# S2 V) r
window.navigator.appName
: u& R8 V6 R: T9 |# B' z+ a'Netscape'6 {2 k0 A4 ~) c, X0 |6 e$ \2 y
// Web浏览器厂商和版本的详细字符串
5 }8 t, E: |% l7 W* P- J0 cwindow.navigator.appVersion
, R# D9 m& @2 u/ t'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" u0 i: ~$ I, T; P// 客户端绝大部分信息' k9 u9 f1 B7 o
window.navigator.userAgent
( D, s( {' w5 F; i7 r( Z'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
4 v! L- @! `2 p8 ~* o: R// 浏览器运行所在的操作系统+ |5 W. ~" T4 l% Q  Z3 j7 q
window.navigator.platform
( l% L0 \' N- t; z# l  q" ['Win32'
% R+ u# ?* V) B2 J2 Y3 H
  U% X* e& P6 f* A( X' m+ z//  获取URL: }9 V8 w5 b7 S+ T: D
window.location.href2 G0 E9 g! u3 i
// 跳转到指定页面
. P- y* U& i! [/ W3 f: @" W. Mwindow.location.href='https://www.baidu.com'
9 A- C9 K  e8 g, W// 重新加载页面
$ X4 A7 Q( d5 Z0 D; u" {% G9 _+ owindow.location.reload()   u0 J, \6 e* j9 y( ]* B: \  K
</code></pre>
2 k. X  z, x$ b<h3 id="32-弹出框">3.2 弹出框</h3>
$ c& b" n4 g+ @! v<p>三种消息框:警告框、确认框、提示框。</p>
) s3 \2 c: C4 {7 ?0 S<h4 id="321-警告框">3.2.1 警告框</h4>
3 W7 X$ \" a1 f1 @- I8 n" a<pre><code class="language-javascript">alert("Hello")
6 r9 r/ _+ |! P3 N# x# H</code></pre>$ p8 ^4 [9 x8 j4 P6 u
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
- ~3 j5 Z$ i2 D; ^9 `<h4 id="322-确认框">3.2.2 确认框</h4>: l* L+ @* o" F; L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
, Y; C0 N: j2 r) X: M% |<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
. p: U+ o' n8 q) N; J+ o) ltrue1 j) p! o# E# v6 C2 g( C6 W0 I8 u; ~
&gt; confirm("你确定吗?")  // 点取消返回false
7 {. d+ o0 g6 O2 B4 g9 G! jfalse+ h/ T, M7 [% q! ?7 O
</code></pre>
) F9 R* P. y. n/ N9 H  W9 B<h4 id="323-提示框">3.2.3 提示框</h4>, {! B! y9 _& ^* b% X
<p><code>prompt("请输入","提示")</code></p>
7 {! c, f- m( q4 C+ ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
* h. q( Y1 }" Y- F1 O<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>7 d- u% D3 e0 Q6 S
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>( ]  x3 y  h: _% {, \% D4 k7 ?6 T
<h3 id="33-计时相关">3.3 计时相关</h3>
; \% p# R8 E1 @$ _; F5 y% k<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
0 K! H1 p. b/ e; [* g& i. E<pre><code class="language-javascript">// 等于3秒钟弹窗
8 s- ]4 ^8 q  ysetTimeout(function(){alert("Hello")}, 3000)( O" ^5 l" ?/ B; L' l! b( |9 N
* k5 M9 F  [& A6 C
var t = setTimeout(function(){alert("Hello")}, 3000)
4 s: z+ N" A1 H; ]0 P& \5 ]& t7 L
! ^, n2 c: U/ Q! E6 ~// 取消setTimeout设置% P) P; x# E2 ~
clearTimeout(t)' u7 u8 C; p' H2 T1 F+ V
</code></pre>; f* E& @9 p: ]' ~3 q( W0 N/ G
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>7 T1 |9 A0 }7 `' l( G
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>, s4 ]- f  ^0 M( w
<pre><code class="language-javascript">每三秒弹出 "hello" :
: E0 G  X" m7 Z& Z1 N1 m, u  Y" vsetInterval(function(){alert("Hello")},3000);8 Q2 v5 w( u, \2 W5 V# B
</code></pre>
; O& ]: K  X2 C/ ]& q7 e$ ?<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>! Q3 {1 M5 V+ N/ \
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
% H, ~) p/ A3 u% ]( C4 i2 L//取消:
, `: T1 t: s6 k* D2 W& XclearInterval(t)! F5 t4 S, k7 s8 S' C
</code></pre>
5 \+ \6 J. R- b4 K6 z
8 |$ N' F3 N) Y% K. s# P9 o/ `( p
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-23 09:49 , Processed in 0.077319 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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