飞雪团队

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

前端之JavaScript

[复制链接]

8040

主题

8128

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26450
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
( z) z  f- w+ c  I% Q  o$ e& D6 c
<h1 id="前端之javascript">前端之JavaScript</h1>
2 P* p6 v( p* D6 R9 u<p></p><p></p>0 p. _" a) A$ p; m
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>. y9 Y; a: h. ?# K7 b* v
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
2 P$ y9 B6 R( [( y, f它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
5 @8 |. e! B7 v' ?; E& L: U& |它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>% Z& f9 e, F5 }& w7 P# X
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
/ s; p' k& Z2 ]& V5 l<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
: e% U. ^* Q% C$ D- c<h3 id="21-注释">2.1 注释</h3>
; d& a' D) N, n& k! X<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
( Z% D' Q( |/ x<pre><code class="language-javascript">// 这是单行注释" L  ^8 x! I( O; }

. {. w3 h9 r( [4 r3 Y/*( x  w; g* `- x; k* a& a. Y
这是多行注释的第一行,
" ]4 Z0 y7 ?; T+ ?3 a这是第二行。5 g/ K% }( C% k% Y3 F6 I7 Y# M
*/3 i* D% B  H* v" P0 J  @( ]5 p
</code></pre>
6 d) T( z! i2 [  ^<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 f# q, M/ s, R0 J$ {5 C) ]& ]<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>9 H: O, C+ f* s+ G' @# o# u
<ul>7 c* B  c' x6 n0 k" R) w5 W" d
<li>变量必须以字母开头</li>
" a( I# N1 m6 h; L8 z: F6 n<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
+ a  N2 H- H: s<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>7 f4 n8 ~7 n' Q3 ?0 Q- C2 w
</ul>7 q$ G8 ^7 ?- A0 K) e
<p><code>var</code>定义的都为全局变量</p>% ^+ B2 f, A8 E+ L
<p><code>let</code>可以声明局部变量</p>
4 X. h% T3 ^+ O" y) f0 E<p><strong>声明变量:</strong></p>
9 C  q, C4 _7 p  K<pre><code class="language-javascript">// 定义单个变量) U" ?+ {3 P/ c& {
&gt; var name
" U: e# S' _8 r0 W3 m5 f&gt; name = 'Hans'7 M. `% K7 Y) C; F
//定义并赋值% \7 |0 P" @! t# M' B
&gt; var name = 'Hans'& T+ y7 X; X7 E% B' f: F; R0 Y. f
&gt; name
  x8 d; j  e6 f, F'Hans'% A$ D! O/ N5 ^4 ~
0 s, }$ J# P) R% l% N
// 定义多个变量
1 _, t( o+ ?, v9 }: x- O: {&gt; var name = "Hans", age = 18  i, n2 Z, f) g5 A- L
&gt; name
# z3 f+ F' X3 Q8 R' k'Hans'
! y3 H; @  t/ l. X. q2 v8 c&gt; age" t5 _$ H7 O/ u& i$ }
18
% Z* g8 R4 t4 P( M; {" G9 ^& b8 o9 y. {$ u- C$ B
//多行使用反引号`` 类型python中的三引号3 U9 s4 ]" P) E" Z1 R) }2 {
&gt; var text = `A young idler,1 }( o3 I. k. }9 A& [' C  J2 A
an old beggar`% z  D1 l, O) d  u/ R' o3 N
&gt; text; W( i9 J2 c3 B6 P, E* J
'A young idler,\nan old beggar'% Q' k5 D/ G: I2 S
</code></pre>
5 b0 N9 K5 f" {) C* A9 |& k+ l<p><strong>声明常量:</strong></p>) F# ?4 w+ ]3 J/ p) ?
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
( f. j% N$ ^: O4 ^; V<pre><code class="language-javascript">&gt; const pi = 3.14
  Q7 I# a8 O* i&gt; pi0 X+ A) _- [$ p3 B/ g
3.14: M0 w% ]9 e2 a
&gt;  pi = 3.018 `2 d+ a' s, d. r4 h  j- a( v/ S
Uncaught TypeError: Assignment to constant variable.' n& B4 J/ A7 A- b
    at &lt;anonymous&gt;:1:4! ~9 t, Z9 _% i% a3 c1 g

* y$ t: G: ~9 V, s& d% J  U0 m3 L</code></pre>
# Y9 {! }3 r! F- t- m<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
1 w  R' p9 C4 o  T2 ]<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
* Y; y# ^) O0 s; F1 |<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
8 I  T# L- R, F, M<h4 id="231-number类型">2.3.1 Number类型</h4>9 u/ [& c, z# C4 d; u3 g
<pre><code class="language-javascript">&gt; var a = 5
  \. g: W4 F  Y5 e; e2 K) u&gt; typeof a   //查看变量的类型  $ l. Y' S% Q- |! r
number
* _4 x7 q- `& y5 ]: Y& d4 i
/ `5 A9 A  Y3 x3 `4 P8 Q&gt; var b = 1.3
( v) s) X- n& D7 D* v9 w7 q. v8 o&gt; typeof b. p# U% u3 h# p$ ]# h/ @# s
number& E0 @7 R' C* J; R( @0 s2 ~
2 }: a3 `" r" H7 d' u, b/ ?$ h# d1 i
// 不管整型还是浮点型打开出来的结果都是number类型
' q6 O3 D8 @5 j$ |$ J+ d/ s. Z3 D5 h( U8 ?+ M
/*
+ {/ [! R6 i  Y/ ?2 T+ GNaN:Not A Number
6 [& w# Z# S! F0 lNaN属于数值类型 表示的意思是 不是一个数字
2 ]: q5 m! v# J% T5 I0 t0 X*/+ K, f- Y4 b$ {+ A- Q" k. Q8 g

1 J7 T/ l  }+ T  o) O1 f6 G, |parseInt('2345')  // 转整型
% ~6 |( G  N9 I, y* F8 F' c2345
. X4 p+ M) K2 q7 x* b9 V; Z- cparseInt('2345.5')2 T' ]5 @6 ]' ^% g8 X) ~+ }0 M
2345
1 P; G! u: G' lparseFloat('2345.5') // 转浮点型
# Y6 h# i- p. g2345.58 b" l2 h1 {9 p) p- ?" L
parseFloat('ABC')
0 K" x2 V6 t7 {: h& |NaN/ ?) s9 L9 J, L5 k, W
parseInt('abc')
( z# W3 ^' n" R' H7 n, ENaN
$ ^$ J7 H4 C/ C: T  k</code></pre>
( u, T  ?. T2 U6 L" B<h4 id="232-string类型">2.3.2 String类型</h4>
. ]5 e# L. K1 j, L- B' l<pre><code class="language-javascript">&gt; var name = 'Hans'
1 f/ A% f$ v) {7 U' [% B9 n. b&gt; typeof name& A4 O$ @( O4 ~: I! c
'string'$ O9 l8 e; l# l& T& E# _% y( }# h# X

) w7 f  x3 c8 j; x- o//常用方法; y9 l* q/ t4 z: W6 N* G1 G
// 变量值长度
- q8 ^. ]6 z0 H+ t& a&gt; name.length7 t1 y3 l: z1 E. S" ^0 c
4
5 o6 ~! C; C6 ]9 i// trim() 移除空白
" z" X! `8 d% D( ^/ s, X4 u&gt; var a = '    ABC    '+ Y) W" B( u$ l0 S! y
&gt; a  `- f* T/ L+ U. g7 d
'    ABC    '; |7 L. u  J" h' b. u0 O' h$ `
&gt; a.trim()2 P2 t* v+ q/ Z% S% x
'ABC'+ S/ l! t4 v1 q2 m
//移除左边的空白
& `# M7 O/ r+ Z9 h# ^2 d&gt; a.trimLeft()
& x3 V2 O. R. Q" c2 @# T( M'ABC    '
* e4 H/ x6 `& j0 `; N//移除右边的空白9 l+ U, I4 T. \8 _% J$ l4 p
&gt; a.trimRight()" J7 N1 t8 A* D- `- t$ x) G; A. J
'    ABC'! k/ F; W+ x6 g. H

/ q1 T* N1 V: Z( `) h$ S# g5 ]//返回第n个字符,从0开始
' E# Y* x4 N" g. f# ]5 T5 b&gt; name1 E: y$ T4 y( L* G
'Hans'
' I5 C$ W+ Y( u# I2 M: B&gt; name.charAt(3), u  O1 R1 c# [5 u( @4 L- t* p& u
's') X/ w2 r) U; A" j- v% {) ^
&gt; name.charAt()7 n! D1 K0 ~/ M1 |" g# G$ N# X
'H'
# q9 x5 Z2 {. N+ \&gt; name.charAt(1)" e, A7 W4 X% C4 h: q/ _
'a'4 \8 ]6 Q2 L8 q0 {" E" @6 M0 C4 d
9 s- N3 T) x2 |. |: z
// 在javascript中推荐使用加号(+)拼接8 ]  k5 x1 e8 i, K3 q
&gt; name& L% v2 ?; p0 }: b
'Hans'$ {9 H! D' J2 L0 x
&gt; a
9 R8 `; @( L- Y. G: F" j' S'    ABC    '
+ H9 w- m( i' ^8 e) @! p&gt; name + a2 E6 e) \2 [* q) X% Z  L
'Hans    ABC    '7 Y, V- J6 d# ?) ^
// 使用concat拼接
: G9 H3 N2 F$ B  Y/ j( m1 p) Q&gt; name.concat(a)
& q% _/ N+ f7 v5 p: x) i'Hans    ABC    '; U# A3 u: @4 v' V( Y
/ a# }5 C7 V4 j7 B4 r5 O- v( i' C8 r
//indexOf(substring, start)子序列位置
# h3 l# T, O! V0 N! v9 b- q3 P& ^+ U/ w
&gt; text$ I- _2 d/ }/ }
'A young idler,\nan old beggar'
, L# I3 c5 {: p&gt; text.indexOf('young',0)
; Y* x8 v+ v" S; [% ?7 I' a2/ ^# ]# @  Q/ V* m
" z7 n7 a; ]& J- }- x7 H8 z& f) [' U
//.substring(from, to)        根据索引获取子序列! O5 i! r' c) X& S% S
&gt; text.substring(0,)' n" r" G! ]) O5 ?1 \1 k+ o
'A young idler,\nan old beggar'* B6 V2 u4 N* q, p
&gt; text.substring(0,10)$ R1 W" p# H  m; b) t1 B7 J; t
'A young id'. S; \/ f8 ~' a  A

# ^7 D2 Z9 I: o// .slice(start, end)        切片, 从0开始顾头不顾尾
8 E/ C4 c6 ~$ p. a/ g  ^&gt; name.slice(0,3)1 ?' n$ X: p# N% V: G, s
'Han'
3 G4 q& w. H$ d$ f' m! g, U+ E% v) [
// 转小写
* y$ K& j% C2 w* u. m&gt; name3 m& D& Q" z+ g6 ~7 O0 ?
'Hans'( B5 [4 S/ D& p. _" s
&gt; name.toLowerCase()
# S: t; Z; T3 z5 }4 n- |" r' m'hans'
- J( z7 B, i+ _  }$ @& _* ~% M) W4 w// 转大写5 l9 Q& v$ }* S4 R+ E  k2 m
&gt; name.toUpperCase()- d" d. R( Q7 }( X7 F
'HANS'! D% ]: x% {0 \- ]; z: D" S7 g
: V5 H; d/ a2 x5 Q1 m* }8 E
// 分隔9 R& ]" x. t4 ^# ]2 I0 Y& H# I8 P
&gt; name- X5 {& W7 ^; r' G1 Z9 \
'Hans'9 h! M2 d; N, V7 @9 K% p4 U
&gt; name.split('a')/ M' {! m3 `" s; [2 }
(2)&nbsp;['H', 'ns']2 U4 W* Y) w) [1 |) J. C
</code></pre>( b$ P, Q" ^2 N* [
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
, x9 ^7 v8 p- ^( L2 i: Y7 Q<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>7 S* J0 `5 g: l7 R. z
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>6 I5 b' r7 H; `( l7 d8 e
<p><strong>null和undefined</strong></p>! I+ F0 F- q8 {1 Q& W/ d( R
<ul>
3 i0 z- R$ J8 \" F- K  M<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>* S$ @" x; U* W9 r: x5 |8 b
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>! ^& _* G3 P4 b4 W0 `
</ul>
0 c" u" j9 t# _* i2 i<h4 id="234-array数组">2.3.4 Array数组</h4>
: U% d1 h2 H6 W4 J/ z- k<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
5 E9 o$ G, K+ M+ `<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']   D! x8 z5 p7 @7 W$ ?
&gt; array1
7 p: k8 s4 N$ b0 a1 m* Z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- H6 D$ B  |+ ?' r/ k- w4 Y0 k&gt; console.log(array1[2])  //console.log打印类似python中的print
4 r$ K. q; W7 u+ o* S( X3& c- N6 y& x  G& d  O( L3 K
// length元素个数' g1 n" Z8 l" P: C  ?
&gt; array1.length% l; b1 u: D6 p2 F
6
( F5 r8 i. ^- j$ A; F// 在尾部增加元素,类型append. m( |( P  D! L* }) ?  Z
&gt; array1.push('D')
! a5 O! f" ?; u7
! j& {& A$ W* q, K/ K* b( M2 `&gt; array1, x3 \% i3 J$ ]
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']: D$ F) O' s8 J" Z# ~# u1 a
// 在头部增加元素5 N! S1 y! d) T% s1 l
&gt; array1.unshift(0)
* @5 j6 s+ h1 v7 ?, |, @8
' }6 `; s% Z* ^& i  o&gt; array15 m- s3 {0 W; N8 n) z6 c
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']1 H- f) I1 D, R; N/ |
  b: o$ B# s2 e& m3 p7 P
//取最后一个元素4 x% g( Y1 ~5 Z1 Q7 E' r  A
&gt; array1.pop()
5 E* T# u$ g! p& I. t# [9 ^& u8 H1 B, H'D'
. S' Y3 |$ z. N* d# K, u&gt; array1
, c) v1 i. X$ h! `0 |  ]! C& y! u0 }(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
0 a3 E1 g  F& i3 k//取头部元素
; o7 c! b9 n# y# ]0 {2 }# N6 R&gt; array1.shift()8 Q; ?3 E, F' B+ x& S
0
% Q* f7 `7 v, l" e4 Z* V( u&gt; array1
6 B; h8 w0 K" ~(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
: G5 q9 e5 D1 p
+ f  G# G& b1 u3 Y//切片, 从0开始顾头不顾尾
7 U' z+ T1 }; N7 `&gt; array1.slice(3,6)1 x/ r6 D) l- S. ?' N/ L% h
(3)&nbsp;['a', 'b', 'c']( V; W" e! a, X+ {8 E. [
// 反转
5 B1 k8 H1 p5 h( d& T$ O&gt; array1.reverse()5 Q: N! V' F% y5 N
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
9 P% j) p+ `& T3 B) q3 V2 l4 L9 O// 将数组元素连接成字符串  ^; z! J* Q5 w5 L8 c9 r) g% K: Z
&gt; array1.join() // 什么不都写默认使用逗号分隔, Z; w0 R1 h9 D  ~) N6 i$ u
'c,b,a,3,2,1'
/ [) T  N9 H' k1 @&gt; array1.join('')
5 @. e  ?0 _5 j9 ['cba321'* d) a+ i' y( s6 b8 u# h4 b$ K
&gt; array1.join('|')4 u! [8 J; S$ }7 U9 h7 M) d8 H6 L
'c|b|a|3|2|1'
. M9 y, Q. T( W4 O; M# _
* O2 N% w/ Q3 P* P7 p4 N" J9 ]- x// 连接数组
; ?& n  N' ]; H; O/ C2 D&gt; var array2 = ['A','B','C']
% Z7 L" n9 |/ h5 Z  T; y/ Q7 p&gt; array1.concat(array2)
# u9 C' \0 l% G$ T(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']" d( J2 o$ g; K1 \- H
2 K( ]% G! W6 D  r
// 排序
2 A* L/ c6 t7 `&gt; array1.sort()9 c% c% N* o( j
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& h0 x& Y. j4 H5 F
  a' Z" L1 P$ t; G7 C
// 删除元素,并可以向数据组中添加新元素(可选)
6 M6 ?' i% [  h$ @0 g; C/ d&gt; array1.splice(3,3)  // 删除元素
" w  v3 F3 m8 M7 P# }(3)&nbsp;['a', 'b', 'c']
/ w$ I' }6 R7 L, v: T&gt; array1
1 l! _) {4 z! ?4 G; H1 R$ M(3)&nbsp;[1, 2, 3]
9 z$ ?9 _) ?, u+ u  ~( @$ g% K&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素: {, T- s8 l9 S0 c; N) D
[]
  `5 x: D- }; |2 t' a&gt; array1
1 S1 k9 q% \2 @  Y& U$ E9 l(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']3 o+ n' M  |- a3 L5 H

% k$ [! S& |, Z: P) U3 C) E. r/*
- I0 T% E7 X7 |splice(index,howmany,item1,.....,itemX)
8 ]* e' I6 _' ~& f& ]: sindex:必需,必须是数字。规定从何处添加/删除元素。
7 [5 e5 a- ~& Y& J  ~8 A' }howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。2 y3 W1 {, p. v$ O& l3 A
item1, ..., itemX        可选。要添加到数组的新元素* \4 G8 j% x0 _) R0 m8 I5 C
*/
* R' m0 C- m3 s  o& ^" d% m2 ~) L9 d2 \% @, t
// forEach()        将数组的每个元素传递给回调函数. s8 [8 H$ h- z5 Y9 @$ d, \
&gt; array1.forEach(function test(n){console.log(n)})
' O, f6 e, E% l9 G 1( S) z0 k2 p9 H# _2 O
2+ C* e, N5 [  f7 C
3* R" f$ r& {7 @% _/ d
A, |5 R0 C0 u2 C4 s/ O  B
B
8 D# @' j- d5 A) n' m C
4 t% \. ~6 f0 B) l3 a// 返回一个数组元素调用函数处理后的值的新数组
3 _1 F$ Y& k% d&gt; array1.map(function(value){return value +1})! h4 e* Z  U) |$ N/ k- k
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']* d. _' k: O: f% e& E
</code></pre>
1 Q1 ]" f+ y4 G! b<h3 id="24-运算符">2.4 运算符</h3>& l& I( E$ w+ X
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>" C$ [$ }6 E% L2 b6 ^
<p><code>+ - * / % ++ --</code></p>
: q* y% ^3 H6 O+ h9 b9 {: J<pre><code class="language-javascript">&gt; var a = 6
) j' D5 x4 n2 m& o& h&gt; var b = 38 k0 a" [: I! N. t% e+ F
// 加. Q1 J6 O% I$ ]/ o
&gt; a + b
- Z; M7 {8 j) q! c  I; U$ [  r: l( n9
# K) B, z" w" t  A5 I% E// 减
- c& S+ x3 n8 ]7 i  q' q&gt; a - b4 t  G: ?3 W! G- F" H. S
3
  _- J, ]$ F! ?4 \! x  T, `& b// 乘
3 M7 f( Z* I9 n5 \8 O4 B&gt; a * b- C3 X  C4 q( Y( Z" f; q
18
1 f# O& a  H. G4 x' V// 除2 T" ~7 H, X  g6 n2 j
&gt; a / b+ ?4 ^' u+ {4 B) O& c" A7 k
2: L1 A* i% `8 s/ x9 u$ X
// 取模(取余)
: m: v9 @/ m! k& V&gt; a % b
) {& V+ D4 a  R2 U9 i0
1 z! L5 R- I6 D" M0 K1 o: d, Z- p$ P// 自增1(先赋值再增1)
# q( l* a; E) D7 e  ]&gt; a++! ^' a' X# u5 i8 X! @
68 {/ g; w) Y& I) I
&gt; a
0 ?" Z7 W, }9 B* d5 a  n! c4 C3 G7
/ C3 x4 _3 B1 z, {6 t// 自减1(先赋值再减1)9 c# @% q& T) {& z" S$ i" G
&gt; a--
! O: `' }4 S0 T9 L  E9 _1 j7$ Q+ F6 F; `9 K5 T8 O1 {7 l
&gt; a
- S. _( R: y1 r$ `& i* v6, V; Y/ J( \; D! u7 A3 H
// 自增1(先增1再赋值)
! \0 f& s' G$ _! W) U0 x' W) n1 `&gt; ++a5 A* W" W& D2 y, R$ X5 x
7
5 F) ~4 Z- x3 a5 t/ f5 N// 自减1(先减1再赋值): o  v, @. c5 Z; V, q1 O
&gt; --a
. b$ a3 X+ U* ]/ @; C( K6
$ r6 r  N0 s4 p4 \7 w; J0 B) s&gt; a( J' e9 W5 P5 R  |& j2 V1 n
68 \% J: C8 R! ?+ N
* k4 h0 R5 o! Y. |" w7 {. ?
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理5 P* ]3 |$ ?& E/ i
</code></pre>0 U  _* e: D* h# ]1 L3 {/ U
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>- a$ K, D( W7 M
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
2 s7 V5 u8 |$ |<pre><code class="language-javascript">// 大于
1 a1 N! ~) `3 U6 E&gt; a &gt; b
; p3 j, u! w) e8 v# W) _5 g  mtrue# ^, ^' ^) d' q" m; l7 r" H1 S7 K: P
// 大于等于
# U% v8 W: j' g&gt; a &gt;= b% R# A' A4 E2 e- a1 R; G8 T% \9 R% f
true) t, ^8 T* y0 f
// 小于7 D' s+ O7 A% Q! D+ z$ T
&gt; a &lt; b
: ]3 F3 P9 [$ [2 y& ufalse
8 }$ K7 w$ U$ z% c% V// 小于等于
& x7 e) Z! p8 w8 `4 D* j  A( |&gt; a &lt;= b
. X7 e+ p, e$ J4 d; Z, _7 Nfalse
) Y8 G) O) ]; v% ?" ^* e. m// 弱不等于$ K" Q4 r4 K2 ]
&gt; a != b' C3 _7 l' N# S! L" u5 t
true
2 m& e9 B, M& `8 B// 弱等于: M5 M8 G  ^9 A# H
&gt; 1 == '1'" ~. C% T$ G3 l( Y% |2 W
true! C3 @" h' S4 r. p& [
// 强等于
5 S. [8 t$ d  i&gt; 1 === '1'
4 [' {4 V+ O( Bfalse
# l3 S$ I8 W2 A  D7 G// 强不等于
* N6 f- R' g+ S5 A% A&gt; 1 !== '1'( t- G8 f# a8 v) a! Z: E' Z) N- `
true
4 ^! U! Q) g5 n8 E+ E$ x
2 d3 ~2 Z% H: E( B& v/*
& r1 I! D( x# i7 |3 T% q  a, DJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误, {, y5 G- p, j! o$ F
*/
: A# u" [" \% V8 o7 w2 ?) r; b/ p2 S</code></pre>% ^9 ~! Q8 x0 K& A
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>' p$ ~; R2 v" D! j) x0 z
<p><code>&amp;&amp; || !</code></p>
, \4 W* `5 l2 y1 v' K2 ^* `" V<pre><code class="language-javascript">&amp;&amp; 与
# K; _( b; R6 e* Y3 a* Q|| or & o1 i( t/ w1 t! v( f
! 非( t0 J; T/ }+ h2 _4 w& n6 X# P
</code></pre>
- D9 f  |4 ~- k6 |4 g2 Y; x) C<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
# H5 A/ V' {- G4 n* y<p><code>= += -= *= /=</code></p>
" d& n, C7 b& `0 r5 j6 S! b<pre><code class="language-javascript">// 赋值
" d; r/ w. L: [( c&gt; var x = 37 I0 _6 J2 _3 G' w( ]/ U
// 加等于7 h0 \  a/ C1 N8 G0 ?7 {  W9 S6 r
&gt; x += 2
5 T# M$ `7 L2 C  @; A+ M57 b- Y5 J$ @: \; `. Z$ Q! p* Z: M
// 减等于
# P! {/ W8 K6 k&gt; x -= 1! w  w4 }% E4 Y% C! K( [3 @
44 w6 q# g+ `* e  l4 K5 m% q( X" l$ B+ \
// 乘等于
" c" J# k9 R* m6 f* N&gt; x *= 2
/ `2 }) `5 o1 q3 f8
. r- l( ~3 D. l! r- W" j5 g// 除等于. @9 W! z" y0 V6 w8 `
&gt; x /= 27 N8 S3 Z8 m2 x
47 X$ p0 n, h  O% i
</code></pre>" e: t, F6 g& r4 V' f0 x
<h3 id="25-流程控制">2.5 流程控制</h3>
: _4 y1 c. N% Q! O$ h6 m  ]<h4 id="251-if">2.5.1 if</h4>9 a0 i( b' M* K, Q- b+ R
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}  V# D4 m9 I; [* q; Y
! [. |5 Z, ~+ Z& d, l% x% E+ t
&gt; var x = 36 x. n! |$ P+ ^! R5 k
&gt; if (x &gt; 2){console.log("OK")}
4 |5 l, `( C+ w9 ~: p OK1 X) z8 q" N2 `+ _* V

* {3 ~, Y+ a  ]0 [: I2, if(条件){条件成立执行代码}
( Q. b2 `7 X; q        else{条件不成立执行代码}
  B  E% v& G8 I! s% `  |3 W( }, ]0 a8 K" ^
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}! n* U; Q0 R7 J" Z" A2 _
'NO'- g( o5 F2 B) c+ |

5 b# q' W- j: ]. l3, if(条件1){条件1成立执行代码}
4 z, T) ~$ t$ L6 A        else if(条件2){条件2成立执行代码}
- _4 u# B1 Z, w+ ^    else{上面条件都不成立执行代码}
/ [% w- O9 L* r0 E
% {" o- S' Y5 ~1 l5 D0 U2 Z' O&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}& a4 y% V9 j+ F
Ha
+ ^4 U/ f2 K7 k</code></pre>
7 x& ?" y0 I! Q2 D<h4 id="252-switch">2.5.2 switch</h4>
( f6 M6 z% I3 o<pre><code class="language-javascript">var day = new Date().getDay();; M# B+ V# K0 n9 l2 q7 T# A3 P
switch (day) {5 B+ E( ?5 m  O$ k6 p% S
  case 0:
. s' t6 |4 x" f2 Y6 v! [4 o  console.log("Sunday");6 O7 o. }# L4 _# H( k4 S
  break;5 W! t" w( ~! w
  case 1:
' ]# r8 D, G" n( r. |3 C7 W. W  console.log("Monday");
# U+ Y; O0 G3 Q, r0 O. d& K% o  break;5 l: _! ^9 e4 _1 S* v$ g$ X
default:
) x) X* Z: C' L2 j- ?  console.log("不在范围")1 @4 c/ r: h0 s2 ~8 p
}7 e  |0 s( M4 n/ {
不在范围
9 X$ `* j2 o( U& t8 @; m</code></pre>
3 ]. W3 m0 g% I3 V<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
! o8 U& C; a7 F2 A<h4 id="253-for">2.5.3 for</h4>
1 i& A: y) k$ Y8 S) i<pre><code class="language-python">// for 循环
4 j, C! u% f8 C" J        for(起始值;循环条件;每次循环后执行的操作){! }/ E- ~" L3 }9 L! [' _
        for循环体代码
* V3 {0 K4 r. F2 d4 r8 X% S    }
* r. w! a' F$ _) B  E# }" {( Q) o6 E; d9 `, k  R& ]
for (var i = 0; i&lt;10; i++){
4 I, u& u9 c5 d) B+ w    console.log(i)! z6 ^6 w7 y0 o/ n8 I' J7 i$ y& Y
}
/ j/ g- ]0 m, V' Y: ~9 P5 k        0
( k6 ^' m( x5 z9 D& `        1
; a& g2 D+ d) d& C% |        2
  [! n6 k/ u! [6 b* g        3
5 }3 b2 n, W) t7 K9 n9 U  t        4
/ s( A$ o2 l- E% E        5  T8 |! q0 A5 o0 n. B
        60 r; d3 O$ U- s! r! ]0 K
        7  O9 T( M- ]% B
        8# [$ m3 F' }8 ^7 ?
        9
6 E& c2 v6 J4 u0 ^</code></pre>. v# e% b7 L* q8 Z
<h4 id="254-while">2.5.4 while</h4>* a- S; C! r( h% q" A
<pre><code class="language-javascript">// while 循环. T; I* y, z- w6 ]
        while(循环条件){
% r: h. I; V' g/ |3 {  _        循环体代码* ?2 M  c4 x+ w9 n
    }
4 T3 u# N4 j5 C* `
! q  M! W$ g- o1 s: O! ~( y9 s4 p* [&gt; var i = 0
8 Q, m1 a5 j2 i2 U3 m&gt; while(i&lt;10){
% C( d2 [8 W' j+ ]    console.log(i)
8 t" A4 `& A; ?+ T2 m    i++
' c0 k7 J8 a% L9 w8 R}$ g$ {6 @. q, }) o0 ~
05 t/ _+ J; m' S* [& V' M0 b9 {- q
1+ Z$ N) Z9 u: @6 F2 H; O3 G& T
2
3 e+ W1 s) p1 A% r# b 3
( P3 V7 I" _# \0 r6 U6 a 4
3 D4 D' ^# W5 y0 F  X$ }3 w 5
8 O( A1 ~5 ]/ r: u; x7 Z 67 P" j. P% B  l
7* Z* \& t8 {, t' b
8
* q; J. Q5 ?- A  z$ B. r 9
( y7 N( z3 h! C1 s</code></pre>6 f6 g8 l' i( K( Z+ T1 K9 j
<h4 id="255-break和continue">2.5.5 break和continue</h4>
4 N3 ?6 T: w8 Q# \<pre><code class="language-javascript">// break: k- o/ |9 L: f6 ]7 X& c3 ~& H, g- K
for (var i = 0; i&lt;10; i++){
$ y6 C5 x/ S/ N* a    if (i == 5){break}
2 O7 l( U* h6 ~4 e6 E' x) ?    console.log(i)
' ^" p, O& P9 Y' Y( O) z' o6 @9 ~}- U7 P; e, ~% k  r5 D
0% Q# v5 a, c) O. n* Q, D" O6 I7 z! M2 b
1
: {" `8 a( P0 B- M7 H& G 2
" M5 [3 ]4 h6 `$ b9 `+ D) ? 32 U: ]" Z9 \( o$ X* E; |' z
43 v' O1 f& ?7 k# J7 @2 B
// continue) ?0 a6 s) K0 U9 X6 z" S  A) T
for (var i = 0; i&lt;10; i++){
. E/ L+ E2 n! u% C, |    if (i == 5){continue}" |. x; \% w4 h; W
    console.log(i)8 l. c% w6 Y: S5 H/ d) q$ ~
}% m: z) t* {  \0 v
0
+ b3 X3 ?+ l# a) O# F0 s 1
9 K  D- r. N. ~: K. U 2
8 y! P+ f; d' \ 3
# E8 g/ }# s) T% w8 w' V' A4 ~ 4+ h- L7 R1 ^, E0 R$ t
6
/ w0 q% W9 ]9 X0 y2 ~5 E 7* w' w- i+ w1 g6 a0 \! ?& o# N
81 O9 L, D( H# B
9* s$ R3 l% n) C' }8 Q* ]; l

3 W6 l. ^$ f* \$ V: ]( ^; k6 F0 C</code></pre>
* ^8 K# P* {# }3 M: V" j# f<h3 id="26-三元运算">2.6 三元运算</h3>" u- ^2 J4 E- h! H/ M$ s
<pre><code class="language-javascript">&gt; a
% F  u! a- N: g2 ]9 d8 }$ m/ w6
5 D0 }% j: P7 P8 }% N  ]&gt; b
& r- I& T, d# }7 G* ?+ S3
% Q' d3 V3 ]$ |5 ?/ n/ \
0 @2 q% c6 ]- o: d2 I//条件成立c为a的值,不成立c为b的值
/ r6 F( O( Z2 @% d" |: V&gt; var c = a &gt; b ? a : b
; [5 b" A4 V0 q+ H, A# J&gt; c" p9 G2 k7 Q! R- W
6. @. Y- [* F1 X, b( Z; n

" K4 g8 S# x* ]6 i/ m" d8 i1 N1 q6 {// 三元运算可以嵌套: h* \3 _/ O/ _6 p
</code></pre>
+ ^1 R! ?+ ^9 \" Q. Q<h3 id="27-函数">2.7 函数</h3>5 k; f- t( j* Z: ?5 P' C5 i9 {2 T$ B7 |
<pre><code class="language-javascript">1. 普通函数( m" N6 n( d5 p1 }3 p5 c
&gt; function foo1(){
4 a+ T: g3 L* n    console.log("Hi")4 C$ T7 Y% ~! M
}
, Q) W0 P* U: }: n6 S, Y0 s
" O6 _8 \. y/ Q. l: ]2 q. x) l& g0 F9 F&gt; foo1()
# W$ F; n1 x2 c' h3 Z1 a  x* D, s        Hi: S7 }6 N4 r  G. Q$ G
2. 带参数函数
/ D4 [1 Z2 d: S1 X' S) g6 _&gt; function foo1(name){" S7 l7 U8 w7 h, }
console.log("Hi",name)8 T# L9 l) U" l4 S
}
9 [2 j9 D; E6 j3 p! L6 Q
4 ?4 Y% K! l8 |3 L- R& F& Y! Z# p! \&gt; foo1("Hans")
! t) R$ o6 z# }. M. rHi Hans! B7 c  G- @/ A' v) i, }

8 v  `) ?" S! b" t&gt; var name = "Hello"
4 x- |4 F. d4 `: Y&gt; foo1(name)
5 U/ ~9 z9 j3 rHi Hello
  s2 w! I4 Z! U0 m8 I( [2 a2 H  F, i! U1 m
3. 带返回值函数9 i0 n- F, g4 N5 i
&gt; function foo1(a,b){
: m) C5 n! V( p8 R! }( A        return a + b   
! _( r8 A* D9 @2 l}
' A/ U  c' u/ O# M&gt; foo1(1,2)
2 L2 N) N9 J; Q# z0 E% D/ C" ~/ [2 a34 M( q4 U! O2 ]* s' h+ C
&gt; var a = foo1(10,20)  //接受函数返回值
0 E* ?3 B  s7 Z$ ^& d. k&gt; a
* s5 R# w' N/ k7 g# b# d30+ Q; _" w) s2 {; ~
2 g5 A9 b* i. Y8 x8 }
4. 匿名函数9 f) R4 P; X1 y7 s. {  R$ H3 I
&gt; var sum = function(a, b){4 c+ D. z: F$ f% G; ?% n2 Y
  return a + b;
$ z  t$ Q, H( s}/ p' P( ^5 F9 N: p6 T3 N
&gt; sum(1,2)
  X7 M( s" O- L+ Y) k3
  b* M7 X  P% H
; X' z( E! y% ~- C$ p) z  |4 @// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
8 \2 _+ J& d" Z/ U&gt; (function(a, b){5 d. @, ]$ U7 k% P! P6 T5 h4 e
  return a + b
- Y% @: e* A( a, _% ^})(10, 20)
3 d: }1 n" G+ F* `& U  h0 H# Q30; K. S/ I9 t: X) G4 U

2 f4 Q5 J  a5 p3 x. ]+ ^5. 闭包函数
* W( K9 w6 }" _$ b; R// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
) f1 ?9 T( \! P2 G3 T) g* c3 cvar city = "BJ"
7 V  A- J5 R' A. A  Rfunction f(){; w/ i7 H4 c' |( S0 J
    var city = "SH"3 D, F3 Z$ s0 Y, q' U  A; W
    function inner(){) C4 r" [1 K* L
        console.log(city)  @) U# G+ Z9 K  ~
    }
: x) \3 d& y/ H9 h- p8 _    return inner
4 I; A6 @0 A! e}
- A" G1 X4 c( [) q; q+ Kvar ret = f()0 c0 X! w! k7 s, G- U, n. `
ret()9 G  f9 s& V7 |4 ]6 e5 O$ @
执行结果:
( M/ q- i- c5 ~& t# N: k" hSH& A' M+ F7 ^7 m* N/ a" R

4 Q  g" y' z! }% V! \</code></pre>. h& X7 s9 j0 ]* ]9 V) c
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
# ~( K3 g6 Q/ H<pre><code class="language-javascript">var f = v =&gt; v;
  T# i! ~1 i$ {; T% E. @, }// 等同于0 x- r" U8 g: ^& N
var f = function(v){+ Z) e$ D$ h! e" {  v
  return v;
6 v; e$ g6 U- \* g+ X3 L}
  s% }* q( Z1 [8 B. w0 X</code></pre>
: |/ Q7 r; F- J. f1 |$ R<p><code>arguments</code>参数 可以获取传入的所有数据</p>2 _, w# W; m7 ~) T# A
<pre><code class="language-javascript">function foo1(a,b){0 r% o! v+ [8 B
    console.log(arguments.length)  //参数的个数
# J; s) t$ ?" N# w0 l7 K# H4 n    console.log(arguments[0]) // 第一个参数的值
% G& ~# b9 t0 C& ?        return a + b   ! l, n% e8 e/ v
}
/ e+ K% R9 C5 X) z+ h. Hfoo1(10,20)) z# x: O+ U! U* Z3 d$ _( o2 F
结果:
. h1 B. [3 c' P 2          //参数的个数   f* ~4 A0 B3 t& K) a, |. S; ~5 r
10        // 第一个参数的值1 I) ]$ `$ e/ y: T
30        // 返回相加的结果! G+ w5 m2 n) u" o) h2 A+ ]
</code></pre>
, G' k! D" O; t8 G<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>) s& g* U1 g2 A8 f2 _
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>* `, c( o3 K3 x8 |& |7 {
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>& o, c' w4 G& `9 T2 v
<h4 id="281-date对象">2.8.1 Date对象</h4>
) I% v- @* [' Q' u: f% d" F& p  t. R<pre><code class="language-javascript">&gt; var data_test = new Date()
$ A2 n- h7 |# u& A. z&gt; data_test
7 W, f3 {) ~2 T" E9 ^4 D+ [Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)" j; [# L; e$ Y  C( x1 K3 j
&gt; data_test.toLocaleString()3 n6 \% E3 f1 g. ]
'2022/2/11 下午9:44:43'
( I8 z' y' x* `
( S2 ]$ }; u, i) `: ?3 x- u: w- j&gt; data_test.toLocaleDateString()
# z6 l5 ^# M, Y" R'2022/2/11'
1 I. p+ @( `) L; P5 _# B( L! w( `0 T2 g( j, G& @
&gt; var data_test2  = new Date("2022/2/11 9:44:43")( C) W0 t: p' k) Y
&gt; data_test2.toLocaleString()
- J( P: h9 E1 G  e8 d'2022/2/11 上午9:44:43'9 E7 w, t8 Y% X. n# k. h- w4 z* j' u! \

7 P6 s# F2 J1 ^9 @( M* ^" h5 v2 Q// 获取当前几号
2 S5 n5 v9 [- o8 P: U6 A/ d' e&gt; data_test.getDate()
$ A5 F# t7 s& s" R" O6 m# `11
8 j, r: g4 X1 n2 b// 获取星期几,数字表示! P/ L  Y  S( h' I3 g( J
&gt; data_test.getDay()  
" j7 f) A) D+ |7 A* F3 o5
" H7 l7 Y2 z( p  D5 n// 获取月份(0-11); F2 v$ N1 e3 R5 O( B% L
&gt; data_test.getMonth()9 d# u9 D( M( }: D- H. O7 ^% J  a4 i& T
1& \5 k: G2 ]1 V# w$ O8 s2 A( U
// 获取完整年份/ S0 ]; x& P( S1 V, M. z- [3 \, A, b4 U
&gt; data_test.getFullYear()
5 r: p! B  `% G2022
" Z- L3 I6 f$ d! |, D, e$ U// 获取时
& L( z9 p4 m2 q; Y; \2 e( n' M! y. I, v. Y&gt; data_test.getHours()  }4 L: `+ E2 \6 ~, a: z
211 D2 J3 F' S" I# A6 ^# P
// 获取分
2 J/ _- }! _/ k+ B5 @9 }4 H: {&gt; data_test.getMinutes()
$ K4 k% X: d1 R7 u/ _  J# {44
8 D8 m5 v0 w6 _- _- m// 获取秒
5 k6 @# r7 J" p3 J" C3 f/ t& g4 p&gt; data_test.getSeconds()! A. i3 x8 u5 T" r/ h
43
- \" P3 y$ ]; h8 }" E// 获取毫秒) o7 [3 `6 x# i' X" m
&gt; data_test.getMilliseconds()
  k$ m( V4 P) {; V# E/ y1 J290
9 _" c# K' S7 c% r4 s# W% K// 获取时间戳2 H1 U/ g% {/ c6 S: {2 U) z
&gt; data_test.getTime()/ o9 X- o2 ^% o! K- ]( U
1644587083290  X1 D; y  l( N0 L: F; k
</code></pre>1 T$ s  I% I& R5 ]
<h4 id="282-json对象">2.8.2 Json对象</h4>
. Y) Z/ i/ ?& U% p- L) o<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ A" T5 F( g1 T: S: ~, YJSON.parse()  // 反序列化,把JSON字符串转换成对象0 `- W7 v4 S# Z
) G) a1 L0 }1 p2 W
// 序列化" r! G0 O) e# L5 z- b( m1 Q( b
&gt; var jstojson = JSON.stringify(person) ! b% K% w- N, g8 s, T) t& P
&gt; jstojson  
8 m- s' o- p* ], \7 H'{"Name":"Hans","Age":18}'
  {9 F/ Q& F& J' I9 \  B1 B+ E  c5 W$ |& F+ q3 }
// 反序列化! H+ t. f6 A- I; d8 I  A
&gt; var x = JSON.parse(jstojson)/ O) q1 _0 _% i4 Z# n0 q  n7 w
&gt; x( F! j$ a( L- Y6 s0 x1 R9 d
{Name: 'Hans', Age: 18}
0 b; r: v* H' t5 B( x, m&gt; x.Age; L5 v& W) G$ P8 o2 O
18
( G8 O' O& l* Z, R# C& H2 e: k</code></pre>  |5 x0 x# k+ l
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>- `7 L7 x; f# j3 H, R  Z! Y2 C
<p>正则</p>6 B; J2 G4 o: p4 d
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");. N2 B# w0 b4 d
&gt; reg1
1 h# N/ w  I2 e5 |8 B9 w6 n7 ^/^[a-zA-Z][a-zA-Z0-9]{4,7}/- t) _/ s2 x5 a
&gt; reg1.test("Hans666")
" F3 v+ x. D9 q$ D& i- Htrue
- O2 `1 X$ u5 a6 @; Y
" b% s/ N; c  J$ B&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
" L2 R) l  o+ c4 S$ w( g&gt; reg2( k& [$ }" R3 e/ W- G4 w8 M
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* u# x' `7 M2 L  \8 S/ n9 o
&gt; reg2.test('Hasdfa')
1 N7 l0 }3 q) W# ^0 E. m% qtrue
& d- q( j* q. S/ L, f
; C: d- m3 H# N7 V, L3 h" c全局匹配:/ E9 z; i" Y* q+ y
&gt; name
2 v% q0 I3 p4 {; T'Hello'
1 R, Q' v# m2 Q+ f&gt; name.match(/l/)
4 c- h  R6 G$ c) Q['l', index: 2, input: 'Hello', groups: undefined]
( T' u4 m/ j. D$ O( q$ t( }
3 D4 d3 a1 j" g9 m9 ^4 ^&gt; name.match(/l/g); H, ?8 Y6 [- T2 u5 z. u7 z8 L6 F
(2)&nbsp;['l', 'l']
1 [6 Z( f- \: {% N4 y// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
3 {" x! r+ c9 m; F8 ]7 P
% X- k* f3 k6 L1 |  O2 E3 N# X3 c全局匹配注意事项:% O. W) B7 n; |5 P  \7 \  L
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
6 W  l" i' f5 h; {' T" M( q! m  s&gt; reg2.test('Hasdfa')
' I! ]! J! E; y1 t0 A& j) _true
  ?- n* n7 {' x&gt;reg2.lastIndex;
! [' {7 Z, X* o" j! Q7 Q6
; O4 ?" U8 g' O7 e# G&gt; reg2.test('Hasdfa')
% s9 J% M/ P/ J  |+ q7 b6 Z' [false
* r& F+ o, ?2 A/ v+ ~! O7 t1 t( C* k+ z9 r&gt; reg2.lastIndex;( g0 a6 g3 f* t
0# v: F5 r2 _3 S+ i; P. y0 ~( T" I
&gt; reg2.test('Hasdfa')( x  H! W. c( t- A# y: B* E4 {
true
6 r+ b" p0 `% B&gt; reg2.lastIndex;
/ S6 k3 N$ R! {; k' p& K" ~6  i& M) s* _) W9 r1 Q
&gt; reg2.test('Hasdfa'), I  x7 J" `0 V+ Y7 ^6 \
false
7 \# p9 u# O4 I6 F&gt; reg2.lastIndex;0 b8 V( K' t, @, b4 I
03 L5 l( ?2 L3 g2 ]; W4 {
// 全局匹配会有一个lastindex属性( ?1 ?: Q) T/ i" U) O$ }. H
&gt; reg2.test()2 L/ G/ n! f( g5 P+ Z
false: l$ c/ L2 s' [2 ]9 T' d: z
&gt; reg2.test()+ A& _& Y, E" O# o
true+ m  p6 D  n$ J' B) I
// 校验时不传参数默认传的是undefined
6 c* {; E6 H' l</code></pre>' f3 d* B+ k9 Q- o; M' }
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
* X! c+ G! V7 ~7 y<p>就相当于是<code>python</code>中的字典</p>/ e% f% F8 ^* H) ], ^( q" _8 S; ^
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}( z! u1 d: Y4 w8 f1 ^" i1 }: v" h
&gt; person: m3 k2 ?+ ?" G/ G  O+ C8 V
{Name: 'Hans', Age: 18}9 O4 q' O5 O9 k7 l. z
&gt; person.Name% |7 i4 _# H+ \; j
'Hans'0 Q. l9 j  {, {: ^
&gt; person["Name"]
& O/ ^+ `+ O# b'Hans'. z1 `7 {! Z% e' U# D0 B
5 x3 z0 [  N1 Q
// 也可以使用new Object创建0 e7 {/ [! q4 ?3 c0 C
&gt; var person2 = new Object()9 p/ Y* v) v3 x( B
&gt; person2.name = "Hello"2 ]. }3 j( |! B9 X
'Hello'& ~8 r5 K% o; s4 f: R
&gt; person2.age = 20
+ o, @! G7 \. M' ^( J. w" p205 p4 R/ s0 e+ M: F' J7 U# T
</code></pre>
0 X4 m& q. r2 b. T4 M5 @- n% D<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>1 G/ c6 \$ D- H) z
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>' x; ?$ ]* \8 ]# I+ D! E
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>8 g% h2 ^6 E, K4 g8 g
<h3 id="31-window-对象">3.1 window 对象</h3>
; L, V) D# d+ c1 v: p! v( @<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>: o6 a8 M. |$ L9 N' K
<pre><code class="language-python">//览器窗口的内部高度
, D) G# T6 f, C* L5 ewindow.innerHeight % C4 d; N% u; S, g7 J5 v6 q9 x. N, m
706) r# H0 h& H5 q- ~. `
//浏览器窗口的内部宽度
3 V1 e5 c+ f8 L: z' awindow.innerWidth
+ S+ |8 b5 @3 m/ _7 f1 Q  F* n1522
1 @" ^) i0 y& ~9 o1 l// 打开新窗口1 a! X) @7 ~7 ^& x6 m, x
window.open('https://www.baidu.com')
- L$ N8 c6 a* mWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}0 v* A  ~: n3 C. {# _/ T
// 关闭当前窗口6 ^9 s/ F$ d, s" x
window.close()
) p6 l( J& }" _/ k! E//  后退一页; h: e% n! `" b9 d& G( x
window.history.back()$ ]; e6 [# J; ]' j7 ]4 \
// 前进一页
) z# Z9 |( a8 E/ ?  |" iwindow.history.forward()
( p1 N6 W  w/ E" @  O  Q1 ?//Web浏览器全称: H" h5 e6 A$ b; }9 ~/ N
window.navigator.appName3 g, z- a/ S% [8 W& e1 d) e
'Netscape'3 t* A2 ?/ L4 T0 V
// Web浏览器厂商和版本的详细字符串0 Z# j) @7 S; d
window.navigator.appVersion# A6 r* K& q1 k: I1 J/ B2 @
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'! T/ Y2 t# N) H: F" K. n4 }
// 客户端绝大部分信息  A0 J* |5 m) O
window.navigator.userAgent/ s' o3 Q% g  L. |! h8 ^- a. _$ ^- j
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
: k" q, U0 g' k5 G0 w3 d2 k: @// 浏览器运行所在的操作系统
. P  ]" a6 V0 v# @window.navigator.platform
! e2 K- |& B3 ?3 }- {7 p# S'Win32'
0 F$ b4 ?6 P. d- @2 ~5 `
2 ~; B9 h& h" Z& L) Q5 m//  获取URL
4 \5 E7 h( E- S+ z& d1 l# \8 Mwindow.location.href4 r1 y% h1 M$ z
// 跳转到指定页面* `! E4 E( W" S& u6 y4 y" @* x
window.location.href='https://www.baidu.com'+ X: p# X, M, _
// 重新加载页面
! l. Q' G' z0 I4 j2 [. _5 R$ [& Cwindow.location.reload()
( Z, V- X/ J1 X: F: x* v</code></pre>
6 `' x% B8 ^& g2 E, x6 J; {$ W<h3 id="32-弹出框">3.2 弹出框</h3>& r: \: b3 ^8 |# P
<p>三种消息框:警告框、确认框、提示框。</p>
$ z& a' v! q& \' I$ w1 i- n<h4 id="321-警告框">3.2.1 警告框</h4>
  {! L8 n7 o: m1 t& Z<pre><code class="language-javascript">alert("Hello")
, e" m7 L0 \* f</code></pre>
! \* f8 X. D8 _<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>+ y7 ]1 H4 W, B1 Y
<h4 id="322-确认框">3.2.2 确认框</h4>5 f" H0 \0 q: M! w1 v: q
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>1 A2 y: V4 _( y5 ~
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
3 [8 B5 q5 q7 atrue# Y( k+ `2 Z$ ^* k, r! E
&gt; confirm("你确定吗?")  // 点取消返回false
  X. Y& [* l# p6 Dfalse
3 d. e8 `! {  `0 M6 l* Q</code></pre>- i4 V4 M$ _) j) }" ^. \% |
<h4 id="323-提示框">3.2.3 提示框</h4>4 g. k& i$ u/ r* A
<p><code>prompt("请输入","提示")</code></p>1 U5 {, p# K% M. ?
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>( H' G6 \" u6 X0 `5 s8 o1 I
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>1 Y4 c; y" G. a- G
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
/ y* L1 r/ w7 _8 w$ j4 \<h3 id="33-计时相关">3.3 计时相关</h3>8 F9 m8 v+ o, F' j' F; r
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>& @# Q, h% N5 v
<pre><code class="language-javascript">// 等于3秒钟弹窗
$ _. c8 n8 z. \. [# p4 i$ SsetTimeout(function(){alert("Hello")}, 3000)$ |. l. Q) ?" Z$ W! i
, N' Q/ \. M" u" E4 z1 _! T- F
var t = setTimeout(function(){alert("Hello")}, 3000)
: I2 j! E$ D  Q6 W% _3 Z( C+ ?* F; ^. R2 k) R8 p& h
// 取消setTimeout设置
9 Y4 p; b2 l1 UclearTimeout(t)7 ^# h( ?8 f6 i' a' Z. w
</code></pre>
9 E" k" [( T; K  m<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>' D9 E! Y/ f' n, Z# F2 `: z
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>! z  g4 A& {6 |1 M1 e* v
<pre><code class="language-javascript">每三秒弹出 "hello" :; @" m. U/ x6 F8 q: m' M
setInterval(function(){alert("Hello")},3000);
) R% e8 n# h8 U& z</code></pre>
& ]4 \1 n! a& D) F7 r; o<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>0 ]& f- D5 d) S" E/ F$ B6 N2 D0 n
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);; m9 K4 h, ]# N7 a! ^1 X
//取消:
1 I% ?5 G' J& F& T/ ^' RclearInterval(t): Y- K" o4 B9 {
</code></pre>
+ o+ M: x4 v. j' i! p1 i" h& c- d1 s' A+ t* n9 }0 ^: n
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-6 23:46 , Processed in 0.074402 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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