飞雪团队

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

前端之JavaScript

[复制链接]

8560

主题

8648

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
28010
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

8 p" I  r2 g4 E0 ^! t7 p<h1 id="前端之javascript">前端之JavaScript</h1>0 U+ z( R% N( M
<p></p><p></p>
8 f; e" g$ L/ M<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>9 G( z1 _; ^/ ^6 B& o7 f
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
# ?7 ~4 B+ R3 B2 J- f9 @它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>+ a8 _/ ?, H8 u
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br># g- \+ i$ W; R% n9 s9 N* S* P
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
' p' q1 B. y' O# Y3 t<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>1 e4 ], p1 r& z
<h3 id="21-注释">2.1 注释</h3>
! W" h% [7 P6 c, P$ t<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>, O# n  J3 M( I- o& A, s& h
<pre><code class="language-javascript">// 这是单行注释* |6 u$ W& @& i% y: q! M
! k* ^' I! R& Q4 m0 I3 s. I- T
/*; B% d9 X' ^9 O5 }
这是多行注释的第一行,
4 v: @2 i1 E+ _4 n  a这是第二行。5 O7 ]' M# Z7 j" @; m+ \/ W: K
*/! g6 S1 V3 o9 n; m3 e
</code></pre>
, X: g) a+ z; ?# n) x) ?2 B<h3 id="22-变量和常量">2.2 变量和常量</h3>
0 y! y" C' {$ `; E6 v<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>, [; V& y% \0 C1 g
<ul>6 m5 n, r% p, L0 A' f2 i7 y7 p
<li>变量必须以字母开头</li>
. W6 z3 O6 o( S! B( C<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>, U- @- a: E" N
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
, C2 r/ j. Y+ P6 \</ul>
; j/ d7 Z& u, L$ @) O<p><code>var</code>定义的都为全局变量</p>
7 a2 e. X: E6 g<p><code>let</code>可以声明局部变量</p>
4 B1 Z8 K$ g. h% b, t<p><strong>声明变量:</strong></p>
2 o  {1 h7 b; F8 }; p<pre><code class="language-javascript">// 定义单个变量. S/ l" k: l. h8 _
&gt; var name
4 v% u$ Y  o6 t( @&gt; name = 'Hans'( J; {1 p6 C; K9 G+ t
//定义并赋值2 f, E0 l8 N' F+ q! \
&gt; var name = 'Hans'& `! [( r- b; g3 f
&gt; name
9 m3 I  u7 Q4 e: Y7 ['Hans'
( N$ |9 {4 W- {4 ]5 X! U/ ^: n9 S8 P0 a; j9 i8 O
// 定义多个变量- y* ?; g" K2 `) T
&gt; var name = "Hans", age = 18
- l5 W* A( N+ k0 J/ H&gt; name# j1 u* W/ j1 a) V7 r: `
'Hans': s4 U, _& |) m. a' s
&gt; age/ M( M$ {, ^/ o
18; E4 {" `: \" s* _% I- A9 |
3 B" V) M7 g" i/ S! o+ ^7 j
//多行使用反引号`` 类型python中的三引号2 @% e' `+ V; }; ]
&gt; var text = `A young idler,! q/ J) A5 d* S5 X& A3 K2 ~5 w. {' z
an old beggar`5 j0 A" @7 W% k( F2 q4 E) C' K
&gt; text. K" \" F. c& c9 \/ E6 y3 X
'A young idler,\nan old beggar'6 Q  g0 g9 v; i+ Q4 n" F
</code></pre>9 @5 C) N5 {' w6 B4 ~- s3 y
<p><strong>声明常量:</strong></p>* O8 p: \7 g; E; Z+ }% p
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
  |+ y" E) X- U6 y<pre><code class="language-javascript">&gt; const pi = 3.14# t' ^. r8 X! k( C9 k( |/ ]
&gt; pi
! m& u: [# y. }' d( I# w' a3.14( o5 M# B% [+ o" Y: k& T
&gt;  pi = 3.01
% a( `3 @- k6 U6 Q$ S6 ^4 d) iUncaught TypeError: Assignment to constant variable.- ~1 ?& ]6 J4 k( J/ C$ K
    at &lt;anonymous&gt;:1:4
, a/ c* f7 i+ m( r- H1 U. Y, `- g* x+ \) D1 c! G
</code></pre>. x% t6 H* }) o" P/ ~, o0 n0 Q
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
- Q  [5 |3 ]6 f1 m$ g/ I- i<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 `5 o1 z5 _7 b! b/ ~5 M4 ?% [
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
8 L: f- I6 y9 w1 ?( D0 g  [<h4 id="231-number类型">2.3.1 Number类型</h4>
  G9 g  l' q9 B: z8 \; \4 k<pre><code class="language-javascript">&gt; var a = 5
- C$ U9 E% q+ U3 a7 L8 s&gt; typeof a   //查看变量的类型  / t6 f* `6 g" R& ?. z
number
' z3 X( i6 Y* h4 w, Y( \
! v$ I/ k1 d: l* |( ?&gt; var b = 1.3! x4 N( B9 h* V- w
&gt; typeof b
* [& G+ r: T) I: bnumber
% j% F3 {$ e2 T2 I. I% g0 C
% P. f2 c1 s! G+ I# |) E) t$ V  j// 不管整型还是浮点型打开出来的结果都是number类型
5 S& [8 W: v, \$ A
2 J% {' z0 a* {$ I% d% N" l. E# r! p/*
. X, a# \* N6 r4 iNaN:Not A Number
1 f& f3 p' l& j4 ]; l4 oNaN属于数值类型 表示的意思是 不是一个数字+ Z! s4 r. Z* A# c  X
*/, [( p% U6 }; Z% W& E( T; U
$ i, I% Z7 d! r% w+ z- H
parseInt('2345')  // 转整型
( _5 J8 E8 m, q8 z2 o2345; X! Q7 K* D& \1 l+ h5 q+ O
parseInt('2345.5')7 b5 t0 A( C7 ]2 U5 @# T
23451 [6 W% @6 v  A# i6 f
parseFloat('2345.5') // 转浮点型
. b5 r; m. Y! l2345.5
+ v7 z7 M7 m" C: a' ^/ S, G8 ~parseFloat('ABC')
, Y$ f" ]) y) Z9 P, ONaN
4 M8 W' }9 b* J/ gparseInt('abc')
2 e" s9 p5 E0 P( v, |' RNaN' W7 c- p1 P: e, @, W( n
</code></pre>
. x( T4 I' g$ C9 C2 @. n8 B" o4 C# c<h4 id="232-string类型">2.3.2 String类型</h4># W* a; e4 W1 L/ Z* E0 i% ?
<pre><code class="language-javascript">&gt; var name = 'Hans'7 |& r. Y1 @4 A
&gt; typeof name/ _% O* k, J  c8 G
'string'; r& {; d3 H5 y2 W0 P% m0 c% ^1 Q

2 E' @7 q* S9 L/ c//常用方法
2 n) l! z! C% u! v// 变量值长度) v5 \2 T$ h5 K
&gt; name.length
8 e6 w4 E. M! e4
$ p2 W# `  n  ~& m% J' e2 B% L// trim() 移除空白
7 C/ ^8 t$ P9 s&gt; var a = '    ABC    '
% f8 [9 y# e; f& A&gt; a; b' e: o3 I/ d( S" t3 d2 c/ P2 W
'    ABC    '
& w- h" U6 P8 y, E3 [( x&gt; a.trim(); @- W/ N/ J5 [0 }* x
'ABC'
) \9 C. H2 }( T5 [6 m( a1 t//移除左边的空白
6 A6 X" {% X9 t. y- E0 X3 D&gt; a.trimLeft()! [: ^& i1 t' {, Q: ?
'ABC    '
0 j* O! g# s0 s! m% n! e# g9 I# u//移除右边的空白8 W1 T& u$ L# h, S. a
&gt; a.trimRight()( s  P8 Z0 F! }; s! a% O
'    ABC'4 C( b% _, I8 s$ H1 M: z" j) a
4 O. f: M! o: s% q/ g* T
//返回第n个字符,从0开始% Q: L8 @3 f+ ]4 \4 I
&gt; name5 i( K4 S7 ^8 b; s
'Hans'
0 p! b3 Q+ I% Q  E&gt; name.charAt(3)& f1 [' l% s4 r4 k3 X) u+ b
's'' f& |9 \9 G; {. c, U6 f
&gt; name.charAt()1 U) D* ^. v+ n& r2 b% f% C9 o
'H') @' b, W/ _7 n
&gt; name.charAt(1)
4 E6 ~2 w( u0 [3 b7 z1 ?, n'a'
0 E1 |8 a# y4 X0 C  q, m  F  R+ v  k! l, y' l; ?8 {
// 在javascript中推荐使用加号(+)拼接
, t* u4 F) G: H0 C3 g! r&gt; name
( O7 ^/ ^! j5 P0 ]'Hans'3 ?+ q0 D8 J  }6 u& R
&gt; a0 @$ i. n) _; w' a" h* g1 T! M
'    ABC    '$ @% G0 V. b+ w# {( b( d
&gt; name + a
9 t- q; T- e/ k7 D'Hans    ABC    '
9 T- K8 C; C2 |. r; {) B// 使用concat拼接& P. i, f8 v8 U; D% J
&gt; name.concat(a)
- o, y% @$ }1 w( t/ }'Hans    ABC    '  a; J9 T  w9 A. T
$ }- O7 p9 O& T4 G6 b& P
//indexOf(substring, start)子序列位置
+ m% y" R, B- T' i9 v5 i. i: q" X4 c/ Z3 ^6 ~$ b+ i
&gt; text5 q  s, z7 u9 l1 x) U
'A young idler,\nan old beggar'
$ D7 _7 d: @( `" j& N&gt; text.indexOf('young',0)+ d) r) Q: E" S; M
2
& V# r$ @0 |: U
" s* h; B% B* u0 I, }$ v//.substring(from, to)        根据索引获取子序列) Y9 S  n7 n* O# N- L( `0 w/ @
&gt; text.substring(0,)8 c. X# d$ i2 Z/ R
'A young idler,\nan old beggar'5 n4 c9 K+ ?! t# E8 U/ f* I* O# Q) X
&gt; text.substring(0,10)# w6 A3 _% _; s. b3 g' ?
'A young id', O1 z: u# O- r0 L

2 C  p& ?1 g; G6 I* i. S// .slice(start, end)        切片, 从0开始顾头不顾尾
6 Y& e* B' A$ d; ^- X&gt; name.slice(0,3)
  t" z. r  x8 }( d2 T1 k'Han') N3 x5 S( s# ^# @4 [3 t
" [4 q* g+ ~6 i+ b4 C1 I
// 转小写
; H1 B( ]0 Q( e! R/ k&gt; name
5 z9 [0 m: g! h: [7 g'Hans'
+ J, B5 W/ ]+ s# U5 U# I, y&gt; name.toLowerCase()( [! |; ~& R$ I. f& W* E* ]4 q
'hans'( U" V" P8 R- D6 l% y: @
// 转大写" A* Z: p4 }) y, G' l. k- ^+ M$ |9 }
&gt; name.toUpperCase()+ p1 Y0 d+ I( ^  D! l8 J  L
'HANS'( C) r# @" M8 N/ g

0 N/ }  L. T9 k5 D! Z! y+ Y6 u. q! u5 J// 分隔9 T3 f+ M5 i( U% |2 T
&gt; name
3 Z: y; `+ D! m3 _* {' I'Hans'! l6 _- U7 p+ y! {+ b; r0 e
&gt; name.split('a')
$ ?" o, M5 o: @- n(2)&nbsp;['H', 'ns']
( ~' y+ k& ^! v  T9 |8 i</code></pre>4 G6 S; q! y% ~& w" F' k
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
; ]5 M0 M# N& u! I4 e<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>! H' D5 U+ a, i( a
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
% b5 p* n6 V7 b; G<p><strong>null和undefined</strong></p>
! j/ F& B) \1 F- B. k' s<ul>
  }3 K* V7 t: ]<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>& s0 h4 ?8 o- w/ T% s
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
! s% {+ ?* d% j8 F( Y* K7 ]- N5 t</ul>$ X) ^. F/ m& X! N. h% ^- R  I& O6 Y
<h4 id="234-array数组">2.3.4 Array数组</h4>2 j- n- B- x' V. Z
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>* {. }7 Q. _5 L$ P( i
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 7 P! X7 w, ]. q- Z. x/ w2 @% |6 y# I
&gt; array1
( Z8 s' A7 T$ Y; [% e' h(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']% o  i# U6 [' y6 f  m
&gt; console.log(array1[2])  //console.log打印类似python中的print
: K  o2 a- T! [/ }+ L8 u/ p5 F3
) M7 T9 G2 `, e8 C1 C3 W' N8 m0 y// length元素个数! l$ I" S. l3 A8 j
&gt; array1.length
( S4 A. ]  l# c6# i# a" C' A$ k5 W
// 在尾部增加元素,类型append
# }4 \4 I5 h, L* ]7 I6 p3 X&gt; array1.push('D'). K& P$ p* F5 W) f4 A
7+ ?4 ]" i' C& l, f' a1 x) M; `
&gt; array1
; z* h+ X$ y3 A+ Q  y: O) b: A(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']" L6 ~/ [* ~6 N- r! ?/ V7 J
// 在头部增加元素4 |8 K: u1 K4 U5 X8 H5 J; u2 Z' [
&gt; array1.unshift(0)
( o' v! R, P* T83 X8 T, @* g" u" z# Q! j- Y9 D
&gt; array1
# _6 U; N7 r% }7 ^7 I4 H1 h(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']9 f: c6 d& M0 ?" O& ~

4 V6 F3 r: z& s9 t& Q5 S; d//取最后一个元素
1 m7 Z" m- e. [! L3 A/ x3 V2 M&gt; array1.pop()
5 O& ?7 H, i1 I8 X* x" W'D'
7 h* T5 A) u5 p0 W) C' Y- V&gt; array1% Q2 U) ?7 x! U1 v0 L0 ~
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']0 S: ^/ Z* b. K
//取头部元素" e- b8 t9 b- d4 ^+ ^
&gt; array1.shift()
1 v1 g4 `3 T% \- h; Q  c7 I! O0
3 L/ g2 f5 Y) X5 G&gt; array1/ d+ x  z; K; [# u0 A9 i
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& G$ G# e/ [" i$ P; V, J
( F( ?" I  T9 |/ A6 q! t
//切片, 从0开始顾头不顾尾8 {9 k4 ?9 S( j- G
&gt; array1.slice(3,6), q* h& q' m6 m4 b
(3)&nbsp;['a', 'b', 'c']$ J$ B3 I# Q( l; \2 g; W! [
// 反转
; E/ T5 G* s4 C5 @/ r5 ^0 D" J&gt; array1.reverse()
& ~' V& P9 H$ u% w: W(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
6 b% O( R; G6 K" g' Y/ Q. O: A! f3 H// 将数组元素连接成字符串. H4 u+ s/ _4 Y% M
&gt; array1.join() // 什么不都写默认使用逗号分隔5 \; v% U" E" Z
'c,b,a,3,2,1'
* s. n* t. a% [8 t* T9 Z&gt; array1.join('')
/ C# y# q, q  d5 a( E'cba321', [! S& F# i. o9 B( f& T& S9 Z# P- {
&gt; array1.join('|')
6 V" ?: j# D3 M) d% o'c|b|a|3|2|1'
2 d5 x$ i1 _# Q4 a0 Q9 Q9 ~2 y! h, j3 K9 F7 C7 x
// 连接数组
& l9 T2 `+ n$ z7 g. L7 |&gt; var array2 = ['A','B','C']3 K/ f( Z) k- Q2 ]
&gt; array1.concat(array2)+ u. |4 ]( ?. E# n2 j4 \) [7 \4 r
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
% r3 A9 ?. ~. u/ s
6 \- g0 D0 U3 S, M9 F& @// 排序. w+ I' P4 ~$ c" y  r0 r4 V0 v
&gt; array1.sort()6 [0 H0 P7 m( z" }2 j0 p/ O# M: p
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']* X, j  W& j3 p/ G5 y8 s

7 @% c' [6 h, b* w// 删除元素,并可以向数据组中添加新元素(可选)
& ^9 O( d8 }. k+ R4 ?# C&gt; array1.splice(3,3)  // 删除元素
# P, V6 L( A  D0 ]! P- c2 k* j(3)&nbsp;['a', 'b', 'c']( H7 Q( i" _7 v& c; Z- i+ F3 z
&gt; array12 i) u' O1 W5 r
(3)&nbsp;[1, 2, 3]% o1 P' m/ C) S
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
# ~; X( O+ Z5 y5 w: {& W# ][]
! l+ P( z, @" w&gt; array1) [- _5 K) P6 t1 x+ I7 W( D: E. ~
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
$ L! k3 x0 C, T8 W
" R# q5 J9 {4 G9 K! K* I! _0 k/*
* n2 A1 j9 t7 w4 D- r5 x0 G. a1 H+ Bsplice(index,howmany,item1,.....,itemX)* a2 b( g$ w; }; z( q7 J
index:必需,必须是数字。规定从何处添加/删除元素。5 H  A( |5 M0 L9 k4 q
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。& z+ H7 P( ]$ z, i, B4 D& m+ Y
item1, ..., itemX        可选。要添加到数组的新元素
" w0 D1 r- ?( z) Q7 k$ X* h: c*/
9 w" ]% P, w5 `7 G5 e4 G! [- \4 p* ?. O
// forEach()        将数组的每个元素传递给回调函数
5 g4 Z+ K0 v! ]0 T% W* H0 B" o&gt; array1.forEach(function test(n){console.log(n)})
, U) [) j1 Z2 Y+ v 1
0 m8 O9 U  z9 \2 D8 X' z  Q 2. A, h* X+ s9 c/ L8 |
3# ~0 a# R( _& e: _; d
A
8 G7 \3 a0 {# I* p. v B* g9 a/ I; G/ O; _+ l
C
/ N+ a  E+ j6 Y, u! E* M2 x4 w& J// 返回一个数组元素调用函数处理后的值的新数组0 c; V( A' ]6 v/ R3 b- a4 V
&gt; array1.map(function(value){return value +1})
/ u. ]2 |4 t; s(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']0 z) w# m" m. ]! S# e9 f
</code></pre>
" ?- e2 |5 S! f6 c# b+ [9 ]$ r<h3 id="24-运算符">2.4 运算符</h3>7 }0 X1 m) b! ^
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>6 |$ S; M- r- O; @1 Q& ]
<p><code>+ - * / % ++ --</code></p>
' T' k2 l6 Y# I8 U5 r<pre><code class="language-javascript">&gt; var a = 6. T! {8 u# o& W4 b
&gt; var b = 35 [" \. T6 a9 e9 K7 X* E+ u
// 加9 k, s- [$ V; [6 M3 ]1 c+ f
&gt; a + b, v  G. g2 v+ b
9" G) o9 W& U+ A2 Z. B. j. O% K* i
// 减
( ^+ n$ t; i- |. G) J/ F- B& H&gt; a - b
2 h+ u: U5 l8 W3 B" X/ b, N3
3 A  |, ~2 y+ L2 z// 乘0 c( E  i% \) t$ I
&gt; a * b/ f2 m2 Q8 W% A9 I3 T: ]  G1 o: p) y
18
4 A* b" Q5 r; X) V// 除
$ o' ~4 G8 j: X. r( F&gt; a / b1 s* K# |4 z- t/ I' F
25 o7 {: s  Z# m& P, |
// 取模(取余)
: D! }3 `6 B6 k&gt; a % b
6 p0 I* b' Z$ X5 P1 O04 ]# U5 \8 T: V9 ?  {# d" U2 }
// 自增1(先赋值再增1)
) N& K9 P+ J- N2 b  m  b/ U; `$ e&gt; a++: S! m' g: S6 Q- s* X; B! \
6$ w4 F+ K+ O* s
&gt; a
/ V' L6 g" h5 `% V9 s/ C# f78 g9 a7 M# E* V1 g1 |, J
// 自减1(先赋值再减1)0 s0 X0 ?/ r3 B5 g
&gt; a--9 a  l) r6 r5 [& K& l4 i
7
9 p! }: ]/ p0 M+ ?! L&gt; a
( @- u2 p, j' O% S  E. A+ X; E  f6
+ ?5 S, C+ q5 Z( C& [. S) B' S6 [// 自增1(先增1再赋值)
7 F- X5 @6 N' v5 k&gt; ++a
- X! _3 e% r, M9 _. ^: G7
' S3 ]5 H# t% t" K// 自减1(先减1再赋值)
. g4 q& G! Z8 T# b' O! G&gt; --a0 T$ t/ d; p) d! l. T8 `. m
6/ C+ z1 d8 z1 v# R5 E. _
&gt; a
6 a. R! o& ~5 k/ C1 [' h3 P6# l6 c! Y5 S+ p, l

# k' {! L' i$ \' ~//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
1 L0 i' r$ O; \# M3 I& K</code></pre>$ W. u4 `' I& S
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
+ y# e3 A2 G0 n$ i8 }<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ I3 J% I1 @! b6 P% X& C
<pre><code class="language-javascript">// 大于$ M3 q1 N5 B* n3 T( V0 Y& n2 l
&gt; a &gt; b
$ I4 J" c) m9 d8 J( j3 P' {true
: v4 l: x! b; t) W// 大于等于1 y. [: o6 q$ e+ l: ]
&gt; a &gt;= b9 T. n6 o, U  D0 ^
true
6 s6 l+ v; j! A9 z8 ]6 a8 J- a// 小于( a! r9 x- N  h+ B
&gt; a &lt; b, l9 S1 m' y0 U4 S! \  s
false
- a( t. E. ]9 S2 ~; D// 小于等于7 z( w! H7 }! b6 H# M) c: `: r
&gt; a &lt;= b$ U1 z; L& y( j5 h1 q
false3 C9 b: E( Z, k8 @3 U/ s% [# F
// 弱不等于* H. ?! n% Z, r- W7 u
&gt; a != b
! s% P6 o0 }. `; \* qtrue( F' m. }2 Z" T5 m0 v8 W9 [* B
// 弱等于2 F. ~. m: D/ B7 }
&gt; 1 == '1'9 y& H7 L2 D% y
true
7 [9 p5 }6 M# @% R0 \$ G+ Y// 强等于8 P/ h6 ?& ?, ]6 X7 b; i% H0 B
&gt; 1 === '1'% f" C" m9 u7 G+ G. Q
false
5 w4 C8 p* B- \3 T// 强不等于/ P& d6 ?( Z& }& M0 u
&gt; 1 !== '1'
% {5 N/ b( l  J, ]. o! ~% `true8 z3 v' q2 ?; x: @8 m

: C+ ^8 `7 i. L8 m  j# R/*- q3 R% q3 k& {: `
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误  V0 a9 R+ P/ S* F& d; n  d
*/
# D) \' [; K2 z</code></pre>: g* @, z: h  X2 ^' w9 S! X
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
1 F8 ]1 Y6 s( m<p><code>&amp;&amp; || !</code></p>
' z' R5 A8 o; z, m<pre><code class="language-javascript">&amp;&amp; 与
  ^$ y  b. r8 [2 `8 V|| or ) _* q3 n' m, Y6 I: U" h
! 非* z% s: G5 z5 l7 L1 O
</code></pre>
1 S3 \/ Z7 X( @& ~0 Q5 L: g<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>. ]$ A2 M+ ^1 O: x2 D
<p><code>= += -= *= /=</code></p>
2 c( P' `5 e8 |9 X<pre><code class="language-javascript">// 赋值
$ E3 q  Q2 Q$ g' F9 Q# `2 n&gt; var x = 3) Q- `; \6 O, W3 S" S! Y7 y. L
// 加等于( T/ i; b' ?/ Y6 _& I
&gt; x += 2
7 ^8 q& u' I, C3 C: f+ K* a53 a- L2 W6 ^4 M, }8 _4 P: |) \
// 减等于
3 e0 a  ~, S  o2 F) j8 ~&gt; x -= 1
* l& U. r# K0 I9 Z9 c- }/ G4
( r# @! U, t: j5 {& C7 _. t// 乘等于
* `, v- v+ U8 f&gt; x *= 2* I- t1 k9 \. l2 a/ S  I
8
$ d' K% ?, B  a5 p+ r* u4 g+ y// 除等于
- F3 t) q# s$ B$ E&gt; x /= 2. l9 S# h: L5 k3 E7 m! w
4
& D1 w7 {% n: |- `' J) \; {! Y" j</code></pre>
6 F% b/ u) ~- `2 i9 G* K<h3 id="25-流程控制">2.5 流程控制</h3>
6 t8 w0 W! G. G0 c9 M3 n9 U<h4 id="251-if">2.5.1 if</h4>! g- h, _- K5 \+ [
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
) m5 N4 z# w( m: [
! G1 i, h/ J+ q! C) ?&gt; var x = 37 @, T$ H( w' i: f
&gt; if (x &gt; 2){console.log("OK")}
) I2 K5 X( y6 J OK$ m' I6 R* P, S/ H4 W

+ G. {3 q) N& S; j. e, g! j  |7 y2, if(条件){条件成立执行代码} ( [/ @6 h( u- X! m3 G' A! |- N' k
        else{条件不成立执行代码}
" Y- A9 W  j, ?2 b7 x8 a1 I  x
, k& T1 g9 {' o$ b$ Z( l&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
0 z6 n; N7 g3 B'NO'. r+ s- x) r- O# b2 S3 R3 z

9 s3 C4 |) C8 M2 Z; j* m3, if(条件1){条件1成立执行代码} " @- T; G0 L. r8 p5 l3 g  Q
        else if(条件2){条件2成立执行代码}, H0 `6 d$ A+ }1 x* w8 L# Q
    else{上面条件都不成立执行代码}# E% K! u  @1 R5 p' P

9 k7 ^# D. y. s+ p. P1 f' j6 T6 s$ i&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
) o# I8 {. p2 y3 O; U* B9 m0 ~( t Ha7 \- y/ ~! ?) x0 x. u
</code></pre>$ |5 m0 `  [  e% i1 P
<h4 id="252-switch">2.5.2 switch</h4>
- W8 m2 |$ y+ [<pre><code class="language-javascript">var day = new Date().getDay();9 Q+ w: O8 X8 c, V
switch (day) {  S- w& Z# ], k. F
  case 0:1 ~6 w9 C$ D5 i' X4 b2 U- K
  console.log("Sunday");3 f4 c' H- O9 I
  break;8 n0 ]7 a2 B6 |+ X% h3 H. r
  case 1:. n. M, F$ Y0 F1 R2 J6 L
  console.log("Monday");
; d; B( m& x5 s1 i4 n6 }, N) F  break;9 P+ \  n% y  ~
default:
$ n: F$ z9 Y: e* Y. s$ e" }  console.log("不在范围"); r! u% o- e0 L  L- P4 {
}
2 m$ F) m% d3 j* ^( { 不在范围: R: C: `( G+ ~# W) F8 o
</code></pre>* }: }( N/ d6 U3 y" m) B$ M' x+ P' N3 V
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
) d" J9 p1 K8 R+ l! ~<h4 id="253-for">2.5.3 for</h4>
9 J. s5 C& }# q8 W% B<pre><code class="language-python">// for 循环
/ n4 Q8 m! l& k! Q4 q        for(起始值;循环条件;每次循环后执行的操作){
! I, d/ p3 r2 Q        for循环体代码6 L- c5 y, K! G6 |2 h( l
    }
) ~( a- O6 V" A- z3 }# F( |2 T. s+ T: I5 n5 C. F( m) V5 N
for (var i = 0; i&lt;10; i++){
5 a. ^9 A+ U: L- W    console.log(i): B! a. K" Y, A; {0 E
}6 _* q( q/ o' n- G+ ]3 J+ J) c
        0% e) {! \( d( ~& Z2 L2 W+ E
        1
- @9 N( ]% m) J5 d( m5 j" m        2) N# ?, L+ v! |- t+ J6 `
        3
5 }# V3 P& {8 H* K2 g* s- q  \2 F        4
& C" P1 f* t, n5 o# ]        5% m% ]* T( \& p3 |
        69 Y" _7 a# K0 w. `: ?. b5 n" U
        7- D$ D9 E# N* M, O
        8
0 P5 E0 }- G4 C( `  ], }! N        9
' P1 _$ q' a$ ~# s, n+ K</code></pre>
# q2 J8 C4 c/ P, U7 q<h4 id="254-while">2.5.4 while</h4>5 O, t- A) d5 q( x
<pre><code class="language-javascript">// while 循环
. N$ y9 p" z4 D; I+ m+ Q9 _6 O        while(循环条件){
: r9 m( O. W; n        循环体代码
' J. u0 j# V8 X  W3 ?, `% d- v    }6 t4 z( ?7 X7 J( b3 x2 }4 y
$ R/ S; l$ h- B
&gt; var i = 0% ]/ f4 ^5 B9 s% W! z
&gt; while(i&lt;10){7 c2 x8 k4 j7 J( I* ]
    console.log(i)  `* H0 j+ B. @0 H; \: C4 Y# R
    i+++ L: j: x6 c$ ^1 j  ?0 p7 n
}, y$ G0 u: ~1 E! v
0: v% x4 t7 y$ Q) ?; i  o, A/ C
1
3 o* T1 W2 ?+ D 2" X7 R* K- p  ^8 k9 N& R0 z5 T; Y
3) e9 K+ u& `  ?7 E
4
% h/ f9 E9 j  N+ J7 a 5
/ u& {- ^4 j0 q+ N2 e% u1 {1 F 60 ^' \9 Y; t  U( n4 m4 U
7' D6 Y3 A6 D/ f# n! M
8
. X+ Y4 [  d7 \: u 99 C4 }& l1 k- `* X% K. p: B# G% Z% p
</code></pre>
5 m9 J- `+ ?' Q1 D0 `: o9 ~<h4 id="255-break和continue">2.5.5 break和continue</h4>
: t0 |- f8 k' Q4 d- {1 f; w<pre><code class="language-javascript">// break
% h7 S% o7 B4 A  k# ofor (var i = 0; i&lt;10; i++){8 C2 w2 j& Z, O. ~4 F3 t
    if (i == 5){break}
1 \0 p& }2 L* G; F8 R7 j    console.log(i); _, J" e# `7 a8 m
}
! [' H. m# N* M5 ]) N( h* ?9 t+ t. t  m 0
& P9 L; N$ T# A. x1 X 1
6 B. R* j/ F* u/ F1 J: Y 2. w; r' Z. s+ C% W7 y$ W% S  |& r
3
! M# Q/ d' V" d8 T8 A: j 4
# R' q4 h" ]' G- t// continue
  a5 i, i; k; Wfor (var i = 0; i&lt;10; i++){
: c% z& h3 t! w7 V& R    if (i == 5){continue}6 z" Y, {$ S( J0 X; W1 s* A: n
    console.log(i)
% D# R5 U/ U# `/ z' o}
3 }. q: @" l4 |* A2 [. T 05 K$ z' }1 z2 w  C
1- b" T0 l, @2 S% y
2* T( v( b  B: ?0 g
3
& c* _4 M7 H6 q1 d/ j& s, _ 46 M" G0 x3 z; J+ p
6; j8 I" h4 F6 |$ b6 P
7% e2 A# L1 R  W* _4 k
8
+ Q4 s; }5 B0 t% q- W1 g( t 9* j! f3 _2 m0 ~; J7 g
; v& X2 D" d8 j7 N1 e0 P1 j# C$ x
</code></pre>
6 Z% P4 E" s  |% C- V- p<h3 id="26-三元运算">2.6 三元运算</h3># q; k- f, h7 \
<pre><code class="language-javascript">&gt; a
& |  X4 y- P8 K1 a# t3 ~, X6  A# \9 L& n2 X( X2 v
&gt; b7 U3 k/ M, C8 C# q8 f% t2 I6 E
3- Q) ]# w8 `) P6 O

+ Z# q( P" W$ U( P7 s//条件成立c为a的值,不成立c为b的值4 r8 T5 X& Y: H  h$ G. L
&gt; var c = a &gt; b ? a : b
2 ~( `( W+ n9 R1 ?# E* f&gt; c. ?5 Y" B% g4 u5 a- C  J) y/ o
6# w7 u- ~, Y  n0 U6 m* j, B9 a+ I

* |% }) i( u3 i* o  Z// 三元运算可以嵌套
% C6 Z) Y; l$ S  ~</code></pre>
2 f6 L! e: G- _. w! n<h3 id="27-函数">2.7 函数</h3>
1 `! Q  H+ F" Y7 X4 A! ^8 T<pre><code class="language-javascript">1. 普通函数) C3 V# R; e, Z; i' p4 \2 u
&gt; function foo1(){/ j, d( _" S0 K+ L" d0 O
    console.log("Hi")
4 `( x. d7 f. p}
& R1 e2 U) i3 _6 l- d: @. B! E1 y0 b  O% s/ v% M) C
&gt; foo1()
5 ?  H  @2 N/ {! b# ^' A$ X        Hi
8 N/ w( d9 k7 b' x; F2 b2. 带参数函数
2 p9 a+ y6 N+ w/ W( ^&gt; function foo1(name){
2 D) k! w: V7 e4 Y  N8 \/ Vconsole.log("Hi",name)- U9 l6 H( {! u! I; {0 _2 K5 M2 L
}
4 H- w, E" @* N6 W4 i1 Y
1 f$ Q" x, _/ [&gt; foo1("Hans")" E/ a: N4 h" F# |: h
Hi Hans
: ?: ^3 }' m: V% E! J; c+ I1 y+ {# J0 D. X
&gt; var name = "Hello". V! u3 C$ f) N0 M- G% I- f8 f
&gt; foo1(name)
! q) i) {2 k, d7 t1 ^; lHi Hello6 \$ E: |" g5 @& N- ^6 H

/ p% L; U8 z3 A3. 带返回值函数( p& ?3 n+ B9 t7 h3 q2 J- s
&gt; function foo1(a,b){
; d" u0 U& U1 y# ^. B* b+ Y1 e9 {        return a + b   0 J1 y8 X, G2 ^+ t& ]1 ^/ t& g3 t! S
}
( [& X# {/ `& ~6 z1 O6 w' c5 C/ a&gt; foo1(1,2)
3 x7 J" |- _" H" \/ V3
, A% t( n" b4 ^* D* ~- @&gt; var a = foo1(10,20)  //接受函数返回值# G" P% C. j  @) U* F
&gt; a
, a9 _9 e/ }  ?$ Z$ D30; e' Z" l- v1 p1 V
# ~9 F9 l" E7 c; W# I
4. 匿名函数/ D8 S2 J, B9 S2 w  Q! O
&gt; var sum = function(a, b){
! z( \. U5 q0 B/ S: c' P" e# q  R  return a + b;
$ G$ w5 G5 M, w5 y- T4 ]8 j}$ O1 b/ Y  I1 `% Q# v7 p
&gt; sum(1,2)+ ~4 l  @3 O  T. W. s/ e
3; z. X) g$ \3 t& _

3 K  I3 z8 t+ s9 L% U& _// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱! v. T; u5 O6 h& [
&gt; (function(a, b){0 ]. D& ~  E4 u+ x+ L
  return a + b/ j7 q. b$ F, v- t1 L
})(10, 20)9 R1 }, m3 A. V1 W
30" c' {% E8 f5 C) y$ r
/ ^; O. l5 F6 V% S' R5 Y/ p5 X
5. 闭包函数
/ ~/ Z- V# {7 V: K2 \3 S& E// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数3 b: b2 s) Z, r/ Q! G  p% @
var city = "BJ"
# f8 S: e! \5 ?3 _9 [function f(){
: E; Q& d6 h' f  y4 |    var city = "SH"* }, x/ t: a- }
    function inner(){
! m+ Q  g  H2 O, m0 L        console.log(city)
/ p# w  w% T7 K9 n, d    }4 E* M& l8 F: N7 }6 A" Y+ T
    return inner& p. _% v3 V# G4 t
}( s- ?( h6 t2 j: p
var ret = f()0 Z9 C5 g( A0 ^7 z) }; R7 b( \
ret()
( N1 L$ E2 l2 C1 [8 c执行结果:
' `0 p& D# ^6 Z' a; ~. [$ w. ESH" b0 C3 K( h6 d2 \1 \! G
9 q- \) t( V- P  v3 A' N
</code></pre>$ r! K7 l; l( {  d
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
$ ?" s7 O4 w, R1 u  j- p& k" O<pre><code class="language-javascript">var f = v =&gt; v;& y) r- f* G' l6 R; l5 H+ k
// 等同于! d: X" z# _- @& w" c  }+ Q
var f = function(v){/ {2 O( ?" L4 e
  return v;% ?" j- t' Z5 S9 k5 p/ Q; |6 Q
}
' O% v; A  Z& O; f/ |</code></pre>! ^% P3 U# Y6 B! Y, ]( T# p. E) d
<p><code>arguments</code>参数 可以获取传入的所有数据</p>! M3 U& H/ D: ~1 b9 Z
<pre><code class="language-javascript">function foo1(a,b){' J& N: F- n9 x0 a6 e2 W4 x% I
    console.log(arguments.length)  //参数的个数
9 |0 m$ ?/ H1 L# X6 f2 k    console.log(arguments[0]) // 第一个参数的值$ A1 d. l2 [: }: U& Z7 c- M* K
        return a + b   , w" D  N# |; a) @, ]
}
0 i  f5 {! w) ?8 ~! ]3 @# Pfoo1(10,20)
- v! @5 {1 e, I. x4 s+ s# Z结果:3 o8 Q3 L8 ?( D" n% a7 t
2          //参数的个数
2 A% \0 R$ z, ~! o10        // 第一个参数的值) `/ q! F% O" B3 ~3 ~
30        // 返回相加的结果
! N( G3 i3 l. F% ^* O' ]</code></pre>
  b' _$ {$ ?  a/ \% y<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
- x/ ~  R5 _) x6 |" Z: O' Q! N<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>& d' \5 V" @1 w) [5 v$ L
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
/ M6 z6 f5 m: w, q' K( a- D3 D' ~, ~<h4 id="281-date对象">2.8.1 Date对象</h4>
+ U( b: b7 m' U/ R<pre><code class="language-javascript">&gt; var data_test = new Date()% o; R4 b9 {$ B# A  {6 m, Y
&gt; data_test
& ?, h6 l4 w- c8 p6 n! N4 JFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
! t+ C* |& y& q/ ^&gt; data_test.toLocaleString()
! R+ X! g& K' i4 X& f9 q2 D'2022/2/11 下午9:44:43'
0 J) G. V' T. v+ A1 _+ g# D. }, S! c7 N7 ~3 c" x2 i: B
&gt; data_test.toLocaleDateString()
; F+ o- P! X3 u2 _7 O5 j'2022/2/11'# H. Q) ]9 Y% q9 E
' D. P8 J: u3 W: b; P- B" v
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  a1 m( d9 U4 l6 a; `+ _. x) \* L&gt; data_test2.toLocaleString()
4 f, k8 |/ a+ W7 M: k- {& T9 W. Z'2022/2/11 上午9:44:43'
7 N5 L3 X; n0 h4 J8 p& O) T* W% X! r7 Z- V
// 获取当前几号' f5 e  d/ [/ F+ C* y4 }6 |
&gt; data_test.getDate()3 o& h+ n( y& ?9 a! w9 n6 w2 z
110 n' ?  D9 \( e
// 获取星期几,数字表示+ H& ]; r7 B1 x5 ^  K/ H& X" ~7 A
&gt; data_test.getDay()  0 P& c. K+ H( D
54 D9 @6 s, [* U$ M
// 获取月份(0-11)8 A: w( h( ]) g  n. q: v- T
&gt; data_test.getMonth()
+ I( B% V- @( j, P$ ]/ a* n6 K1
3 k/ p. c  V; d( w0 o// 获取完整年份+ g4 z% m& R1 L7 K: Z) Q* O: m7 |! h' y
&gt; data_test.getFullYear()
* K! C: w% m; }) u6 P8 f) v/ K2022
0 [# h4 s$ A2 e. S9 [! _: m3 ]// 获取时2 z! N/ n7 f6 i5 U% E) g
&gt; data_test.getHours()) l. y) s! }" J! h: c8 n$ z
21
% M. b, t! i* N, `0 ^) Z& w2 }// 获取分
5 |. @" I/ Z2 m4 Q) X&gt; data_test.getMinutes()* g/ H) t4 Y" g: p5 J5 Q
44
) m4 s( ~/ @7 i" `# P// 获取秒% R7 h5 g: z2 U# Z
&gt; data_test.getSeconds()
. @+ |* m9 {9 p' H; {43
0 w) v2 b" k" z' q, q// 获取毫秒7 G  K4 ^; y$ N1 `$ E
&gt; data_test.getMilliseconds()* u# s  F% `% F- a- [3 q
2909 S' ?- h4 E3 @1 ]" B7 }: B
// 获取时间戳5 S. i0 E7 }- ^$ z# e) ^  N+ m+ ]
&gt; data_test.getTime()
7 X* `$ ~; \% \. {  M: K$ G1644587083290
" p( ]3 {( B$ _% ?</code></pre>
: R) a& n7 ~* c& p$ z# B; K9 V0 [<h4 id="282-json对象">2.8.2 Json对象</h4>6 y6 @+ S" x2 a9 @# c
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ ^$ }. y. G* l7 y/ Y) K9 @JSON.parse()  // 反序列化,把JSON字符串转换成对象0 T  @0 Q! l2 S* ~; J1 g" x$ V) n

- m7 \3 o' N( g) [// 序列化" K4 w& I1 x! s) ]
&gt; var jstojson = JSON.stringify(person) 8 P, R( E4 O0 L
&gt; jstojson  . y: w6 F  [$ t- w: X# S
'{"Name":"Hans","Age":18}'
0 h. x0 {0 S5 w, A- z+ ~* y+ e/ H* j$ H. t+ L# M
// 反序列化' l6 Q" Z. c/ W: ^* L, J/ `: c
&gt; var x = JSON.parse(jstojson)
6 l: }" t* s, Q) G' S% |&gt; x
6 y, o; n. U' ~, f' M{Name: 'Hans', Age: 18}
9 m: h' [$ S7 M1 [" D&gt; x.Age
: A, W( P9 b% Y4 \18
4 L! H. i& R+ y; D</code></pre>1 @8 A, r& }0 {- P2 W8 }
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>6 w5 o2 |3 }( S
<p>正则</p>1 R% d( M6 [: u* |2 u8 _: g+ \7 p
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
7 I- r5 F+ d3 @# [&gt; reg1
2 a1 _$ E7 l7 a8 A/^[a-zA-Z][a-zA-Z0-9]{4,7}/
4 {  H0 P: L8 f. {" U8 x  v&gt; reg1.test("Hans666")
- e5 r5 t; I& N) xtrue( v( F. t. e% Z1 C
6 n# b4 H9 _/ o5 j# e3 E
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
3 L, G* L6 S' m+ z* [) _&gt; reg2
2 {; O+ J$ a; _' T5 f/^[a-zA-Z][a-zA-Z0-9]{4,7}/5 {, s. F( V. [6 u
&gt; reg2.test('Hasdfa')& ~! e2 g, C5 `0 d$ l' b! a' o
true- C) H1 w' }# Z2 o
# i$ z8 X  }. o/ B5 c: p
全局匹配:
- I& w4 h3 U* [( |, z; q7 _5 G- u; Q&gt; name
$ ]0 Z3 H3 g+ N7 Z; {% M4 @% j'Hello'3 E/ ]! H0 ?9 Y& p/ }* `( ?
&gt; name.match(/l/)
5 Y1 _, F, `! i. N8 M  r$ S7 F9 R['l', index: 2, input: 'Hello', groups: undefined]
5 M8 C9 A7 @1 M9 E0 R) }7 q" B! L1 L8 j; n
&gt; name.match(/l/g)% ^  b, s3 |- I
(2)&nbsp;['l', 'l']" Y5 b, v( Z1 P
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配$ r$ O( p( M& B, }( V) x+ q
/ ~1 W& ]/ {" B! `8 o
全局匹配注意事项:% @* y  ]0 q, M& y  O: Y$ z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% Z2 M( p8 h  ]1 S' h) M: j
&gt; reg2.test('Hasdfa')
" v7 O! k. _/ `9 w+ T, x+ A$ Ztrue
, N* a5 J. N; w) f- R&gt;reg2.lastIndex;
" l* q5 b6 X+ R8 E# n  j4 Z6  ~* h* ?1 e1 y  B
&gt; reg2.test('Hasdfa')
6 Q; {* v$ N0 r; h7 u, f& E% [$ bfalse& ~- @) T# e3 @. ?* q
&gt; reg2.lastIndex;
9 F8 \) e: [7 M0
: f0 l! v, e. _) [+ t6 f9 [( o&gt; reg2.test('Hasdfa')# M7 E( T5 C0 _+ l2 x4 o
true! s+ O0 @5 ]" k$ m1 A6 c
&gt; reg2.lastIndex;0 v& C' N' m$ M1 O( Y0 |' A
67 t' s6 |, n. \# B0 ]
&gt; reg2.test('Hasdfa')
' E" @- x2 O, q) l) f# ]false5 e7 A- a7 {1 x& y, Q' K, O/ Z
&gt; reg2.lastIndex;8 x+ `4 j7 M% L! q6 A
0
0 v8 ~; j  j3 b" `4 ]) O// 全局匹配会有一个lastindex属性* R: m2 g$ X, e0 T. U2 X
&gt; reg2.test(), Z$ L3 u+ [/ F4 V
false
) V% i+ ?; ^% Z- y( W&gt; reg2.test()3 L+ O6 v1 e, a9 a" a
true
  f3 [% w, F0 h! C0 E: ]8 T* d// 校验时不传参数默认传的是undefined! B1 L3 r) h2 k8 d
</code></pre>
6 U0 r5 t# E6 n  W" m6 ~6 y" h' _2 m4 P<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
8 K. w0 {% k* R9 b0 q' Z) t6 t9 A<p>就相当于是<code>python</code>中的字典</p>
6 R9 r6 y7 A/ _3 p- @<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
* V! t& `$ S* N7 R! {&gt; person
5 _/ t7 A3 T5 d{Name: 'Hans', Age: 18}! @# `7 S6 G7 S" s! X# K! y$ r, E  E
&gt; person.Name
4 V' ]" T- U: Q+ i0 v* c+ F'Hans'
' X) G2 J$ l5 m" F&gt; person["Name"]
. g/ o8 z" }0 g6 S) u6 S'Hans'7 F) `6 v' H3 K+ p

0 I, q+ }8 k. _// 也可以使用new Object创建  I* @% a/ z6 n, n' j& Q
&gt; var person2 = new Object()# f* \, x. [/ @$ z- M
&gt; person2.name = "Hello"
2 m) m- m4 t: D4 ?; a7 Z1 E, `1 Z'Hello'
# s$ j. n; R4 O&gt; person2.age = 20& U3 G. n) U. U1 c4 v
20+ V. N3 J, m5 b$ s& ?
</code></pre>
1 u, B4 p; `# b- A; W<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>5 p, N2 V0 _& e0 N) x
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
5 \3 b/ x+ _0 I5 L$ a. Z0 [<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>+ z+ ^0 ~& Q) w0 O/ K6 l
<h3 id="31-window-对象">3.1 window 对象</h3>
* b, W2 T8 b6 D2 D4 G5 G6 N' ?2 P<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>1 |- r' l/ ^, v2 T9 X# p
<pre><code class="language-python">//览器窗口的内部高度
4 \7 M8 I! T8 u* `5 Y4 \' p; Nwindow.innerHeight 4 n. H( R0 u1 j
706
, B" t* n! H* X% l//浏览器窗口的内部宽度
* P5 C! y# Y4 l& G% \1 F. Xwindow.innerWidth
0 ]3 A- a/ R" Y" e6 X1522
) M6 K9 U4 O" j5 m/ }// 打开新窗口
% i+ c! v6 T, n4 J: }9 jwindow.open('https://www.baidu.com')6 Y6 `1 V8 N. |  L# ]4 i- y
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
, i" W- h+ x" P" E// 关闭当前窗口
6 ?/ \. f. [# w: Ewindow.close() 1 P$ s# B: R9 V, C! d# k( U# s
//  后退一页
- U9 O5 N1 K# S3 U9 E( O- rwindow.history.back()
) H3 m! e5 b2 C# B) _- t// 前进一页" l* V& x2 Y) ^  l
window.history.forward()
1 t. v8 v- {" k# Y% h' X3 W//Web浏览器全称/ h4 Q; y4 i$ H
window.navigator.appName
! j7 j! X7 K5 d7 Y- Z) _' J'Netscape'
( g6 @: L$ ?9 G* k: g* v* s// Web浏览器厂商和版本的详细字符串
: X% M( Z! L+ z/ u* Q! w+ Swindow.navigator.appVersion' q6 r& _' m! u. U* P9 V
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
* o! k# l& |$ ^: i0 w; t// 客户端绝大部分信息( Y; U: b/ i6 [- Q  }
window.navigator.userAgent
1 ~9 X+ |3 v" x" r# d% n'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'  _( @$ |  p+ N! Q
// 浏览器运行所在的操作系统; s6 t. V5 o& H6 Y) a* L9 g
window.navigator.platform4 I" b, w4 r/ N* w# V3 Y8 G0 [
'Win32'
( j8 t9 \# b3 g5 w% n' ?
1 c! l- u2 ^  `& I/ }7 U$ ]; u6 x//  获取URL
: G1 Z1 f3 v# N# g9 U3 k% \window.location.href
9 A& {8 N0 S* j! l$ I// 跳转到指定页面
/ L+ Z) e6 ]0 t: q, s$ Kwindow.location.href='https://www.baidu.com'
5 _; E6 d. B; w( \/ p! H/ }// 重新加载页面
9 j1 F# U& x" ]: L) \window.location.reload() 1 A! r8 B! U, Y* I  l
</code></pre>
% Z4 t( N( d3 h6 E* U<h3 id="32-弹出框">3.2 弹出框</h3>
* G8 d9 [* V( W<p>三种消息框:警告框、确认框、提示框。</p>
' e) A  {# Q! q7 p6 i$ n* [3 z<h4 id="321-警告框">3.2.1 警告框</h4>6 u7 f* @- |- s2 S+ S/ Q4 X
<pre><code class="language-javascript">alert("Hello")" s& I: n6 |' y1 ?, o
</code></pre>
* P1 P: b5 x2 w  t  e<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
' n8 S1 L- B$ q3 U" @4 T- q<h4 id="322-确认框">3.2.2 确认框</h4>
0 n6 x6 ~- R$ h<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>: A9 j" h+ `; U+ u7 r: y6 T
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true5 \) I9 e  }: x4 q
true
" J& u( r5 v) S+ Z3 ?3 \&gt; confirm("你确定吗?")  // 点取消返回false
' U( U3 h, q2 E7 ?* g' H9 r; r  ifalse
; f# l' {% B+ o</code></pre>
: c6 {6 E4 S: H: @" D) Z<h4 id="323-提示框">3.2.3 提示框</h4>( i' V# D9 _& t: V: w
<p><code>prompt("请输入","提示")</code></p>
, q0 c. U0 }. ?- W, n# t" a<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>) j  r% S1 g' [# h
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 A& j! p5 D& A: O0 S: e9 E<p>如果直接点<code>取消</code>后端收到<code>null</code></p>% {) R3 w$ @: {
<h3 id="33-计时相关">3.3 计时相关</h3>
) R' z' M# w+ C  g9 [1 n<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
$ ^8 p; \# }2 h4 o5 I1 W# p7 T<pre><code class="language-javascript">// 等于3秒钟弹窗' {: s; T+ U3 b& T1 T5 R3 w# v
setTimeout(function(){alert("Hello")}, 3000)% v7 i3 H" s5 o5 q  r0 I1 d
! z( z$ n) g6 M: l; s1 p( O
var t = setTimeout(function(){alert("Hello")}, 3000)0 A- f2 Q" T) j4 R' e1 C8 [5 G

3 l% m+ E6 _" t; Q& j& T% i// 取消setTimeout设置
/ ]+ a7 U/ o6 M) Y" zclearTimeout(t)
6 o8 R' i/ J3 m" c) R$ w9 a</code></pre>& e; t) o, q1 [0 n
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
5 A/ L( _' Q' j! o( E! ~# _  H( |) Q<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
$ K8 B) d6 F2 g/ H) `<pre><code class="language-javascript">每三秒弹出 "hello" :% ?! ^4 x7 A0 ~
setInterval(function(){alert("Hello")},3000);8 _2 F4 Q7 H% ]% B  [- r$ U
</code></pre>
+ `6 z6 P+ c2 N, Y0 ]( C8 o( i0 K/ p<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" E: n. }5 p% c; t0 y
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
* X2 D, l* \9 X3 L& k//取消:
5 Z. h9 ]7 l7 b& p1 HclearInterval(t)
5 u. u' E$ b9 J7 G% H. G! f</code></pre>; b" r1 V; b0 C6 r+ y4 J* u2 D

3 Z# N: n! {2 Y, y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-4-13 04:30 , Processed in 0.453340 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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