飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26456
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
  t0 Z0 }; Q5 v' E# S! b( o, E, T
<h1 id="前端之javascript">前端之JavaScript</h1>
) b$ Z  H2 k( v2 {) u<p></p><p></p>
6 s/ \; {4 o# J% B<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>) t8 p3 V3 C+ t( t) @5 X
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>/ x9 e, K) j$ q3 l9 x) Y
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>, r- R; h6 q1 u) G0 s
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
2 c/ i" N2 V1 v, A# M4 i  K它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>7 g2 a8 s9 R# g
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>5 R& K" x1 `+ N# R. ^7 ~
<h3 id="21-注释">2.1 注释</h3>' f$ a6 }% [8 B7 w6 T8 e" f* O
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
' [! A- k- L7 J2 `0 ?1 G  P<pre><code class="language-javascript">// 这是单行注释
! E2 i! }1 H2 E. ~/ K
8 m1 M) W  @( F. d& ^/*5 d: b+ O: j- s" c) j) d7 G
这是多行注释的第一行,
+ R% e* g# @4 T: d( t) l) [这是第二行。) l) A) t4 J, W/ o: m+ ?
*/( T$ a' b$ \& C9 _
</code></pre>
4 ]1 T' I4 r6 I1 b! i9 N: w/ n<h3 id="22-变量和常量">2.2 变量和常量</h3>
. d. F: x& d7 @3 L6 _3 g) [2 J<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>$ V+ w/ @3 j8 K
<ul>
, U  B9 y9 T7 g9 ^) j1 o# S<li>变量必须以字母开头</li>
* y3 D; g6 u4 K7 M; j& d6 P7 w- x<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
6 `6 D5 C4 l3 l# V7 ^<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>5 `& C: t% T7 n% e
</ul>4 @5 f% K) g( U8 d; Y
<p><code>var</code>定义的都为全局变量</p>
' V1 d2 `7 C( S6 V<p><code>let</code>可以声明局部变量</p>- T8 h# `5 c& b0 {6 l* g0 b# W! m
<p><strong>声明变量:</strong></p>
6 p2 z) _8 P7 n<pre><code class="language-javascript">// 定义单个变量
" O5 Z# r# i! e  |; Z0 z( k&gt; var name
( {) x# S& `/ \+ k6 z&gt; name = 'Hans'
" c$ h+ \' t7 H) {//定义并赋值6 ~1 Y1 Y8 e' J# h( u! E
&gt; var name = 'Hans'
9 n1 D# n$ L- C/ O& ]4 C& _- ]( S&gt; name8 v( k0 `. k$ n1 |- @9 t# }
'Hans'
; I  ~% h/ `, q# d8 K- h3 L6 X
& n, B$ h8 a3 E4 h% C; u" R// 定义多个变量
0 {9 W* E2 D) C( E& q7 r&gt; var name = "Hans", age = 18
4 a3 ^8 i8 R/ B8 R! d0 H&gt; name
6 T7 C% T/ N7 w* |* q% z8 z'Hans'; v) I1 ^# O2 Z8 k  h
&gt; age4 x3 d2 s& H. s4 @8 h! h
18
. R  z2 m: K2 `7 ~
$ L" k! A/ }* ~4 w' |4 [3 v//多行使用反引号`` 类型python中的三引号+ \. c4 _" Z' K1 u; |
&gt; var text = `A young idler,
6 ~- h5 o' `4 ^# @) K2 gan old beggar`
4 P( ~$ n7 L- |* c&gt; text
5 s3 [; u) _8 a& q; N' L7 ^7 E'A young idler,\nan old beggar'
3 q/ C* y' C2 O, n) l* x</code></pre>+ O* D- S% g; |
<p><strong>声明常量:</strong></p>0 _* z/ M/ B0 v3 D# L; V
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
) ~0 _. \, C" w+ U" m/ l1 n<pre><code class="language-javascript">&gt; const pi = 3.14: Z+ Q9 V/ j! ?  y8 W
&gt; pi
! Q3 {% [$ ]3 \4 x, e3 d* j3.14
3 h# f8 D6 e% W$ F- H5 X&gt;  pi = 3.01: P+ L2 e! A# i/ h1 }
Uncaught TypeError: Assignment to constant variable.4 [, ?! w/ V. R  \
    at &lt;anonymous&gt;:1:4
8 b3 l9 y( g- D* b! u! d; a. y/ L9 t& i* ]
</code></pre>7 Q1 w! F' u: t7 A- `5 d, e
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
8 m9 `* S( b  q& o+ {3 u6 m<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
( S5 W7 X7 O+ ?% U<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>) Z; _; ?! s0 |. G8 V5 b$ @
<h4 id="231-number类型">2.3.1 Number类型</h4>; d3 i% U% N! e  _- {+ e
<pre><code class="language-javascript">&gt; var a = 5
$ d6 r& a, [' [# D' I5 I. a+ u' K&gt; typeof a   //查看变量的类型  
- @3 s/ g0 c0 _number
  R1 ?: m3 \) D5 n* C  Q
+ j! H  Y9 c1 e* h( A0 e&gt; var b = 1.3
: t" D! l  Y7 h/ l- D&gt; typeof b- m3 y$ Y3 O  }
number! f1 H: @) }, V& Q

, D/ _/ S9 u" M1 `$ e// 不管整型还是浮点型打开出来的结果都是number类型, R% x' W: |* k( I& Y

+ x$ }  R7 A0 w: j% t  x/*2 V: Q7 m' b% {3 C% P0 E7 f8 `9 G
NaN:Not A Number
9 t) Y  d4 U- x) D) S; {% R2 WNaN属于数值类型 表示的意思是 不是一个数字7 c4 I# h' [! \0 _8 D% `8 x$ a3 e& z; T
*/# y% b' o( [3 k8 e4 ~4 S& k9 U
* t7 p; ~: F8 G; ^
parseInt('2345')  // 转整型) P: T, ^3 S7 h3 E/ D1 P
2345# {" S7 @+ n% L  U% M' [
parseInt('2345.5')
* @4 [2 B" J2 t/ d23457 C4 d( Z% c  j3 J% ~) Y  L3 ]) L7 C
parseFloat('2345.5') // 转浮点型
# {9 V+ @3 x  u: ?' U! }- C2345.51 l" u9 O3 @: T
parseFloat('ABC')' x* ~+ ^& ^) s0 x
NaN
$ z1 |9 `6 C8 B* T5 O2 {parseInt('abc')3 @/ s+ Z- b* ^) Q9 R" ^, b
NaN
) u% T2 v$ X6 S+ d/ h</code></pre>
9 ~# M" p) G& c" i/ O* G8 w<h4 id="232-string类型">2.3.2 String类型</h4>
' e8 Z% N. N: P+ |% ~<pre><code class="language-javascript">&gt; var name = 'Hans'
$ m2 E+ ?) b: ]' ?&gt; typeof name: ?2 Z" g% g  K: F9 k
'string'+ D! ^+ `$ Y! T* P4 Y1 z( Q: C+ Z
; t+ |3 N6 k4 D, Y& _5 g: j
//常用方法# X2 m8 l' n; J& [+ V8 `6 i! E+ g4 B; @
// 变量值长度! K% N  y5 w# k
&gt; name.length3 c$ l3 u2 E. C, L$ z9 u
4+ @1 l$ _' x; [" Y/ r8 ], k. b
// trim() 移除空白
2 R" z& a" N) x&gt; var a = '    ABC    '
% {6 {+ i4 e4 h9 g' K0 Z- q&gt; a
1 O* ]. J. r: J5 ]% f, C'    ABC    '2 @1 P7 ~3 A' K
&gt; a.trim()
/ z" C8 b7 n: K2 k; p'ABC'; Z3 Q+ G9 r. t/ [; T1 o% @# u: p
//移除左边的空白7 Y  l; G( l# R0 J  u! j
&gt; a.trimLeft()
# y. y& G" h& n7 }4 k'ABC    '
8 f4 ~, W2 u: [; e0 \; B& `; y//移除右边的空白: [' g* Z: F( }5 B4 ]
&gt; a.trimRight()  U: o/ Z/ T# n) Q
'    ABC'- o& d+ s7 _' g- q9 r3 P  S2 v) O

- d5 i; F4 z" ?( ]" S) _3 T8 i) g$ [//返回第n个字符,从0开始
. i# b6 d4 ~5 j8 y! g0 n& l&gt; name
; J% L0 Y7 P7 [8 P% b# a6 ]3 T; H& i/ \'Hans'1 V2 Y( j$ E" F" k$ e
&gt; name.charAt(3); M3 h2 `# J+ K- g
's'% U5 p$ M0 m3 c( T0 J5 Z
&gt; name.charAt()& N; [# k. X7 R2 z
'H'
1 V% l( U# T3 Z2 {. L( D, U  P&gt; name.charAt(1)7 G& }3 T2 e2 B* v0 |7 v
'a'4 Y( ~7 s0 z* S, [$ F) i5 t/ n, I1 O
# j5 _. i) ^% e. z/ L
// 在javascript中推荐使用加号(+)拼接
+ K! U) |- ~7 u6 W3 m, e! ^&gt; name/ j9 }# J( J3 W3 C7 O
'Hans', t7 ], N. [6 A
&gt; a' v! U4 A: l! C' j& J: j9 D2 A1 S; S, }
'    ABC    '- ^, b% J% {8 m! U( u! W8 Q( b
&gt; name + a8 j# c  ]: Z/ _% t$ n5 Z
'Hans    ABC    '
. B( Z: D! }0 O7 u+ G// 使用concat拼接
% ?5 Q$ \, V5 v9 w: Y5 _  c6 W&gt; name.concat(a)' n6 T8 P( i' a% F$ ^
'Hans    ABC    '/ m8 d- y! Y, f! |
1 m0 F: V# l8 R. o) P
//indexOf(substring, start)子序列位置) B0 `) X' d" e' n; I( j8 I4 O

' Z9 l7 k; Y8 \/ ]1 Z' [&gt; text
5 l+ I1 z& U% ]5 f'A young idler,\nan old beggar'9 q1 `: _& `+ x+ H$ r& D, p4 t7 \
&gt; text.indexOf('young',0)
# _( i- }! X3 N, e29 @5 W5 n! F- B
8 N# Y' X: C- v$ E5 a8 C
//.substring(from, to)        根据索引获取子序列% _) R( H. V9 Z( J8 ~4 K7 J! h
&gt; text.substring(0,)( _0 b* G% O4 ]7 k% h  s% @/ G
'A young idler,\nan old beggar'. F3 T; v- s! J0 Y
&gt; text.substring(0,10)
& G" e; Y6 n' O'A young id'
0 d9 b; A$ N7 ~+ B
  H/ E4 P  T, z+ |( a, J% G! ^) f// .slice(start, end)        切片, 从0开始顾头不顾尾* @1 G, ^8 ]2 y4 s1 z. O  l( s
&gt; name.slice(0,3)
: N: F- g# ~" j/ ['Han'. T' A1 H( X' ~9 |/ C3 q" ^/ n

/ H7 v) N2 m; }# D. I& ?9 Z- C// 转小写
+ h4 R! {4 _6 b7 S8 s( x&gt; name" {* {; Y) f* U
'Hans'
: S1 V" U4 s6 s&gt; name.toLowerCase()
  `% v$ d) _# C% G- k9 j'hans'
/ G$ @5 G; a- n8 w, p) ?  Q// 转大写/ Z- f9 w+ I- d* R! H
&gt; name.toUpperCase()6 o( L& c0 E8 b/ X
'HANS'7 i- ~8 F# s% K9 w7 \: j/ R
  O! p: p$ A; C5 D
// 分隔
( ]& u7 G- Q: F&gt; name
! a  k6 g; ~- B0 s7 H) e; g0 }'Hans'
% o# q# g% t6 V$ p; z+ b0 A&gt; name.split('a')
# h" ^3 F  D+ c(2)&nbsp;['H', 'ns']9 _" U7 t4 r3 Q1 H6 o  m& U
</code></pre>
3 o% h' s4 n2 v& R2 J% S8 _<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>/ P4 H' s% x5 V# P9 @
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
$ E6 k( p3 k7 P3 K2 k. S$ K<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>. N' v& L8 C5 j- I- D
<p><strong>null和undefined</strong></p>
- q0 ~( f- H7 J<ul>
' K# ^9 {( _5 @" C<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>" [: r. w; F, W5 Z( M! t
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>3 b* X% ?4 z' s& y7 f
</ul>+ z& t6 E1 ^0 m
<h4 id="234-array数组">2.3.4 Array数组</h4>
- W) J7 K0 N6 b& A# r+ |% s2 ~<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
$ |+ u1 E, k% W. u7 e$ v# j<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] : u- D: Y2 ?/ y% l
&gt; array1
. C$ o! L# X+ w# F- f, O(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 W+ Z) [9 N: D5 W+ ?. [
&gt; console.log(array1[2])  //console.log打印类似python中的print/ z3 J8 J% _4 E# P# J
3
9 d: a) L' o/ h1 `/ c* K// length元素个数3 Z* ~% Y( T# m
&gt; array1.length
5 n( q7 h1 Q- k% |7 O  A. p6
" `  j- t5 S$ J5 J// 在尾部增加元素,类型append
1 ]6 s7 J8 I" O' R; D8 A) e& ?&gt; array1.push('D')
. V4 _3 E, v. A( @+ [5 F: Q/ A: |6 C7
. `7 k0 G5 u; I&gt; array15 b  d, M! m3 E9 d' w
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 n; p+ `4 \4 C% e! _// 在头部增加元素
5 }7 V+ g$ T0 U1 g3 [+ M) T&gt; array1.unshift(0)
/ G: Z7 T" V5 B& K8- d" c) G+ G/ a& w- L# Y
&gt; array1, `- R: j! [1 U) I/ ~) q, i  h; Q. ?0 @/ d
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
) @3 D0 B5 a' l2 C3 h/ v# Y8 t! }" Q4 i9 t" K
//取最后一个元素& z& ?0 k8 l+ T7 g3 x
&gt; array1.pop()
: d9 b" n: e: E. y/ f7 N'D'/ Q' m, J7 ]! A) |# [' a; ~" t6 \
&gt; array1
% l$ \5 l0 L4 R* o( M; @(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']) _8 n& A: P: {( f
//取头部元素
! h. b- y2 x, A7 ?% @" P&gt; array1.shift()
6 s: @5 @  Y$ P! R' o0+ U5 ]6 a6 {, z2 [; B1 M9 O7 B
&gt; array12 I3 V. D1 s; i( A8 J
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" c2 n- \! R$ q- w4 A7 |; M3 C
- Z) O% ^. \" y; S2 t4 w, p
//切片, 从0开始顾头不顾尾; r+ O: j. }; f6 e1 e: H0 z# G6 _
&gt; array1.slice(3,6)
  ~5 j% H/ ^% C5 B0 \( T0 d(3)&nbsp;['a', 'b', 'c']- h3 n- {& |( Y( z
// 反转* e+ s  s; a! [7 ^8 s8 H$ L5 U
&gt; array1.reverse()
: r0 z( O' ~1 {6 @' o- ~) _0 T(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
. G& z+ z$ {) |3 V3 [# R// 将数组元素连接成字符串
, m. u: T9 {4 V) s5 m&gt; array1.join() // 什么不都写默认使用逗号分隔: N# |" d/ H7 g8 K0 h
'c,b,a,3,2,1'. q* U7 Y/ H: q7 _4 S+ Q$ E& l- ]# M6 F
&gt; array1.join(''), v; h9 d5 w) l3 Y2 b5 C
'cba321'
% z, e7 Q5 g7 @&gt; array1.join('|')
  [% b: T0 K( ]: g# j2 E+ Z'c|b|a|3|2|1'
) I: i4 i6 w" d" e( p$ d% o) ]' x! u) D* e3 a1 |2 L, G; Y4 Z
// 连接数组
& x* C1 l4 G. E2 a1 @2 M&gt; var array2 = ['A','B','C']/ m( N  E$ [' x* W4 N% q4 w" i# |  b" R
&gt; array1.concat(array2)0 `8 U% A+ S: P( B4 u$ E1 J. I
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
' q0 S0 _- ?; A1 g( [8 o* G( \5 K& M+ n; U; E. V: c0 G
// 排序
" k" H7 N  X+ }5 P  _&gt; array1.sort()
1 Z! m( T' s. q(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ l3 x5 G& ^% x& O

7 `" ~4 ?7 P; J  `+ s// 删除元素,并可以向数据组中添加新元素(可选)+ P# \6 \1 @- v" e
&gt; array1.splice(3,3)  // 删除元素4 d& G  n2 d# i) n% \
(3)&nbsp;['a', 'b', 'c']
+ u1 [/ |5 j: h* o( `# w&gt; array16 [: }' z0 r4 J+ c5 c
(3)&nbsp;[1, 2, 3]
7 i( \6 E7 _' s$ I% x" ~&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素9 e" ?4 M+ G1 P; {+ R% [
[]
- X8 w: X# T- L7 G&gt; array1
/ o# V' _- j9 G( Y(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
! N! z5 g, ?) `  L# x
4 y/ o/ S" b: h/*% }) ~) _! _2 g/ }
splice(index,howmany,item1,.....,itemX)  C, I6 k/ A3 k: C! \5 m
index:必需,必须是数字。规定从何处添加/删除元素。" i& n* n: ^" t6 m/ h( ~
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。; l0 [' z, t4 K5 H
item1, ..., itemX        可选。要添加到数组的新元素
/ |2 _2 _& C6 v7 {. s*/) \/ q3 u* l; i( ]% N3 ~; s

) J, |7 _3 i6 N5 P# E2 \// forEach()        将数组的每个元素传递给回调函数
: Z) R$ ?7 z. o&gt; array1.forEach(function test(n){console.log(n)})3 F, Y4 y* i5 ^5 D$ R
1# l/ n* l* w7 d1 i
2
* o8 s$ _+ }" D1 | 3
8 d6 c9 H; z8 I4 R  |* r A
( q) E* a2 ^" R3 _3 N9 r& s B
- E0 a- H% [+ P1 S4 o: `9 E# U C4 k' S/ o. L& y7 V1 u" K* Y
// 返回一个数组元素调用函数处理后的值的新数组
7 Y# i# g2 e8 q& H( @9 z' r/ @2 K&gt; array1.map(function(value){return value +1})3 X% B! h/ ~1 S) B. y! h
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1'], k9 a3 A' ?  v( a
</code></pre>/ A! N$ p% u8 l% L
<h3 id="24-运算符">2.4 运算符</h3>
7 b4 \* [- G7 h3 v2 x<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
; J. z5 z0 w2 N2 j<p><code>+ - * / % ++ --</code></p>
% X  K6 a( @; {" Y<pre><code class="language-javascript">&gt; var a = 6
$ O: P  v& n' R3 P- I&gt; var b = 3
7 G( _5 f1 r1 [- C1 H5 q7 i4 U// 加
) H* o1 S, c+ i! Z* D3 M3 b/ m&gt; a + b! R) k  f! E: i2 o, u
9$ W) Z2 U! P* F7 f$ O
// 减' \7 t. V3 t" N) l6 I' `9 z
&gt; a - b2 C" i0 b* k' a/ W4 X1 |& Y
3
/ v7 H2 C- A  C) e! |4 z5 j$ ]// 乘
. g; R3 D$ C. U+ w# ?&gt; a * b  I3 E& f' ~" Q  C5 f+ H6 Q$ Z: ^
181 J& c0 ?+ J0 `& z! G
// 除: L$ b* P) M+ I  u
&gt; a / b
7 B: I; i$ c7 ^8 Q5 k  X- Q! S2
$ ?& }- |& L* M' t7 V// 取模(取余)
+ N2 c/ k; v2 W; N&gt; a % b
  Z% ]) B6 W* f' ?07 v; l. ?5 F$ f9 r9 q* k
// 自增1(先赋值再增1)1 y2 S3 p: l; Q' |( u: @
&gt; a++! x& _5 W- B' B# T0 a' ^
6+ [2 Z4 e9 c0 h3 L2 @9 q
&gt; a
! _) z# S2 ~2 ~9 K7
- o" P' {" I4 x1 ~% U// 自减1(先赋值再减1)7 H' B/ B, `' G# e
&gt; a--
& [, n6 W+ j; q2 G4 d! l" x4 G7
3 Q: l8 w! D: k4 K% e/ |&gt; a
# ^8 c" j9 P0 s; [1 ?2 X' [6
0 Z& x% T) M: ]* O// 自增1(先增1再赋值)0 H4 U9 J) @+ k6 G! l1 E9 `
&gt; ++a0 I: x4 u# x" ^  K7 t9 `. x
7& p$ d9 |/ V5 l, u) L
// 自减1(先减1再赋值)" u. @: m- z) I. n) h* X
&gt; --a9 s' U  K, T: o& O% T* y' V
6
8 R1 ]" I) e; N6 F% g  o% ~&gt; a! @$ u- I) z& [
6
. O: ^6 L: ^+ |5 d* x* Z
- k5 `1 @4 r' n+ T4 n% Y! c//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理" [% y8 o/ d5 C& r2 i7 a& `  O
</code></pre>
* W% V8 y, c7 F2 @, }, ]% u* G<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
" O& ^5 z! A* W9 K7 ^6 c# ^<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
* K6 h/ d: t' a2 g' j3 ?/ Q; P; p<pre><code class="language-javascript">// 大于) a" Y! T$ m5 ^. T3 I
&gt; a &gt; b# G5 E2 D9 c& u7 S$ O% K* Y( V7 b( L3 I
true; G6 Z2 I$ b! S- x2 o
// 大于等于
( U0 b2 r9 G% J# }7 M: f% q7 ?( q&gt; a &gt;= b
! n3 p  V  s+ W* a% etrue
8 M; D4 }( h; `! C5 a" C4 b- A// 小于
' p% k* m1 Y  X&gt; a &lt; b
+ q4 r/ o5 m/ f, N2 Cfalse6 ~+ K( \3 a/ K5 O) x
// 小于等于
! i' A9 n; T3 L: a- q&gt; a &lt;= b5 G3 i  i& A& m
false/ f# E) v3 n- G8 r
// 弱不等于
# n5 E7 |8 |1 U! K&gt; a != b
; x/ a! r' n+ K- utrue. D' L% B5 w) B- X  n
// 弱等于
2 C9 C; [, u* Q8 O$ e5 V&gt; 1 == '1'
% E/ C) n7 G: q* X0 i. itrue
8 ~  E. Q! @: B- M- ^6 @( h// 强等于
6 e3 p* Z. u2 O5 Y5 N, P&gt; 1 === '1'
4 v; }0 [0 I0 Z' O. ]8 Yfalse5 s- t9 N) B% K/ D4 Q) Y- O" g0 }6 n
// 强不等于
' r" Z, C4 h# w# v0 t+ q8 \&gt; 1 !== '1'
8 ~3 c) I1 Y3 L+ I- Q, vtrue
- ]- b% f& q8 W( [7 A+ W
  y& @' j: M$ F8 e, p  i9 t/ I" ^/*5 z1 ^! Z& o/ H, y
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误: c/ M2 X; g# y! m+ O
*/$ v- {# A- w$ M1 Y1 z
</code></pre>
5 Z  ]+ |! n3 v, O* ~<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>) w- r8 q6 N# z0 `% |% _, ~0 u
<p><code>&amp;&amp; || !</code></p>
5 f  }2 T7 I) q' j<pre><code class="language-javascript">&amp;&amp; 与- l6 h+ `5 C- ?0 v& o
|| or / A! X/ \! t' {" W7 ~
! 非
5 _% j* r( d  P</code></pre>0 H& g! {0 Z* A/ J# |6 }" m
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>  b  k7 o- T5 W" y. k! H
<p><code>= += -= *= /=</code></p>/ M# v- [' w, m
<pre><code class="language-javascript">// 赋值& b2 q1 S9 h0 ]2 F" y7 A- I
&gt; var x = 35 R1 N% I0 q9 x% S, I
// 加等于4 ~7 I2 A" C1 @7 W
&gt; x += 2
7 V8 ~5 h  n& Y, Y5/ k  d( @' [' Y5 n/ Z
// 减等于
( O. n6 I; k! c. p# ~" I6 W&gt; x -= 1
  o9 y5 n) W& t, t4
& [6 h- G6 Y6 I" r// 乘等于
4 l1 m; ^! {8 g9 \&gt; x *= 28 s3 f  ]4 i! ]% E! D* F3 k
8! D# |2 ?, N: q& v
// 除等于1 i8 b" m* i9 \- T; W
&gt; x /= 2
! i5 t+ _" }/ e& ~# K44 z; j- u/ g4 @/ w" ^% a4 X
</code></pre>- g, o8 z( ?3 M+ U" e# p5 \
<h3 id="25-流程控制">2.5 流程控制</h3>. o) H" N8 Q2 `( z( M# M8 B
<h4 id="251-if">2.5.1 if</h4>
$ l2 z/ M+ }2 k7 ], ?' y" T, ~9 P/ o' c<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
% m* S$ {& |5 ?, t5 ^
4 B& x& @" u* G, H&gt; var x = 3
1 M( b- j7 w1 |" e& _&gt; if (x &gt; 2){console.log("OK")}
0 I% b, {5 J2 Z4 p OK- h: }$ f5 m. c- q

5 H4 {5 ?+ s6 P2 K/ n5 T2, if(条件){条件成立执行代码} + u0 a" p: q9 J+ [* T; K& ]$ e* N
        else{条件不成立执行代码}
' O. F+ g2 }# r6 ]" _  I7 u3 u0 [& _1 l+ A
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}; Q0 [  j2 _& {4 R
'NO'
" }1 c: S  H# I. ?! S% G* H2 v! G  _
3, if(条件1){条件1成立执行代码}
$ h- Z# j* @4 d/ a        else if(条件2){条件2成立执行代码}( Z4 _4 U+ h3 {+ @5 r- N: a! d
    else{上面条件都不成立执行代码}6 w( z; p( [9 {1 Y4 F/ o0 C' z
: t: j; {8 d3 }5 _- W( [1 l# X
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}" P* O# z# u  L$ a/ H
Ha
4 t) p6 B$ s2 ^</code></pre>
( y6 v& c: _6 K% o& L3 D<h4 id="252-switch">2.5.2 switch</h4>$ N7 f: k$ \  j
<pre><code class="language-javascript">var day = new Date().getDay();5 Z9 X( u) O1 m3 V
switch (day) {7 y# l. X8 g& I$ A' h
  case 0:3 j" \; K6 q* y# a
  console.log("Sunday");
" ~$ l( s/ ?# o2 Y& W  break;. a/ i1 J8 `$ `* x2 h9 F
  case 1:  r5 D/ |# x' M( Y4 \' E; }) @
  console.log("Monday");
; y7 q. u( o2 n; I# c  break;% V# Q( Y2 Z4 s+ s) X1 i
default:" S1 K# I2 c" R, i- L
  console.log("不在范围")
! t  `7 g5 `6 p( B}
; ~: N" Y4 @% P6 |/ [ 不在范围
; T# y6 ]0 d5 h& e</code></pre>5 a7 f- w7 B* R/ e: ~) l
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
; ?( u7 h+ r! Q4 i- j' y; e<h4 id="253-for">2.5.3 for</h4>3 \8 V  D1 \7 p& x+ Q
<pre><code class="language-python">// for 循环
0 z6 t, i" n* l        for(起始值;循环条件;每次循环后执行的操作){
* u2 Q( f5 K" V: J; i- D) L# r        for循环体代码
6 }$ P; l7 r' |! N) O7 c# T( T6 ^    }. M+ q7 {4 n8 b1 q
  c' [6 c& I& s' _
for (var i = 0; i&lt;10; i++){
+ y3 b6 R. V" V4 ^5 f    console.log(i)
3 h; P( B) P# O3 k}7 O" @! B4 p% i
        0
- e1 \9 V1 r+ s6 O% _        1& k. N! D1 ~  }. O' T% k( F) B% t
        2- d. H( H# y7 |: d
        3
/ ?$ f  A7 @8 o* [' L! o# f        4
6 S5 t$ @1 ~& F- l        5
5 @  [4 B5 L7 S) Y/ b* x1 m        6
' C4 Q2 W8 g4 Q5 z4 P        75 O; h- T2 h( u5 X
        8  }+ v% L( B9 u  `2 Y+ s
        9; O' V7 h9 a" J! R  [
</code></pre>
. H" m# k8 T7 s  f1 b# X% e<h4 id="254-while">2.5.4 while</h4>; d4 l6 K/ r$ V5 J0 O% o' y
<pre><code class="language-javascript">// while 循环
! e3 @1 y( j; d" G/ Q* o        while(循环条件){
  }' Y1 `% S8 m0 ~6 H$ C        循环体代码' _+ I* k: @. Z: `; t* c
    }
& s7 X4 J+ H5 s1 t: h& Y8 o$ F# ^% s# I6 w3 N4 m) Z: b
&gt; var i = 0' ?. X" O4 a. r: _
&gt; while(i&lt;10){
7 r2 Y% V  @+ H. T2 q( r% u1 Z    console.log(i)
4 p" \: V, X5 }4 ~    i++5 w; Z* s- L/ [/ w3 |
}! @+ A' I0 Y: X" A3 k7 a7 |  f
03 e  |# y" }# @( w' E
1. i2 p3 B. V& s' ?" x* I& @
2! e6 V) z/ R! p, z2 }( r! _- C- Q" X. z
3) E# S3 f4 d- G9 W* x
4
3 J$ {8 I2 v; `$ D& p 5. \% W. \1 b! M3 Y7 t- @
6; q+ ?6 u) o; B  t
72 l, \$ _# e' E: F7 C! c; B* B4 H5 x' |
8
+ s! ^4 |: n  V8 W, u) S% { 97 A/ O4 E9 _; f6 j- H! W
</code></pre>
0 V9 A( ~7 y5 S" h2 F# |<h4 id="255-break和continue">2.5.5 break和continue</h4>: h2 {/ h8 a, ^+ ^% t+ r; C
<pre><code class="language-javascript">// break: ?/ h, T. B5 v; [; s& o
for (var i = 0; i&lt;10; i++){
% J5 j: e- D5 k, ~  W    if (i == 5){break}2 s8 J7 Y: J$ n* j; B+ t( y8 w& j
    console.log(i), q+ @% q1 s, h  F5 p( ~3 V, R! N
}  e3 {) h  Z; u8 a9 d( D1 O
0
2 N+ u/ E1 H$ q! W0 L9 V! k; S 1
) D. h4 T) _5 U' ?- v 2
1 t  `1 h- ^1 X9 u$ p 38 ~" I, W0 x$ X
4
& i- |& H8 y/ t: o1 D1 ^& ~// continue
, A3 ?( d* O: Z1 Hfor (var i = 0; i&lt;10; i++){  @$ C+ u. Z$ s& X, U$ T% [
    if (i == 5){continue}
+ o0 ~9 u  B* r! F( ~" d    console.log(i)
3 @7 y3 P) J6 o/ O: y2 L}3 H# T0 ?8 }& F+ n$ i
0& Q5 b7 Q. O' {5 s0 V; j
1, H- F# o) _" p3 A- N
2" P+ Y. s4 J% t
3
& S9 v2 P8 j8 Q- m, ] 4/ |! Y0 p2 T: e- h( X
68 m0 B& t4 l# V/ {' C: G/ k
7
2 c  b2 C8 X/ E0 q- K; W" _7 s 8
( E* u9 }' L7 `8 e9 u, X0 f 90 ~/ X: b$ d* u0 h/ s* P

/ m+ A5 @: S; z1 j</code></pre>* X* L8 f6 |; o/ r$ S3 B) ?. ]( x
<h3 id="26-三元运算">2.6 三元运算</h3>
* g# ]& ^$ ^% }& Y  J<pre><code class="language-javascript">&gt; a
6 [# p8 {# `2 [0 K: N6
% l" f, r( J: _& E&gt; b4 P4 t) X7 L+ G; P# P
3+ A( m+ |$ \9 Q6 l9 s- c9 C

0 D5 `/ X* u  [- c: l//条件成立c为a的值,不成立c为b的值3 I& @& i* w" ]
&gt; var c = a &gt; b ? a : b
3 z- ~' a6 v6 Z: \( f&gt; c8 e3 p! A! }4 F# i
6+ t  w3 e2 q5 y, m9 Q8 u
8 e# L' v" Z$ h! F0 H
// 三元运算可以嵌套
; m. b0 c8 n/ K</code></pre>2 h9 p' e6 a/ j, o
<h3 id="27-函数">2.7 函数</h3>
* ^* f' N5 V) Y. E* k% A<pre><code class="language-javascript">1. 普通函数
9 m9 o% q  r0 {0 \' e  f&gt; function foo1(){
6 _7 [3 x0 E3 o$ j" H, Y    console.log("Hi")
" P9 r7 Q5 x/ [  |% }% t}$ O# _5 u( ?+ K8 G4 S0 P( Q

9 ]1 S+ A3 \8 a4 ^; P. p, B# J1 O7 [&gt; foo1()' N2 k" h6 |- S& T/ R
        Hi
8 V9 @% T, e8 W: Q2. 带参数函数' w+ S7 N' u+ P; M0 l* m
&gt; function foo1(name){5 v) K) Q* U: W% m
console.log("Hi",name)! R7 a8 y7 ^8 p
}$ I2 M  r+ z, |# ~6 r

; a& s- O- x0 V, d) n&gt; foo1("Hans"): p2 z6 w8 o! c: O. }9 S
Hi Hans
0 U& S( i9 G0 c$ e" B& r8 V: q' I( \* g% x* i5 z+ {9 U
&gt; var name = "Hello"
- b2 |7 ?1 R6 n+ S" N&gt; foo1(name)- y# M( n% E( j
Hi Hello
. ^7 H& T/ G! o' t" v: ^+ ]. c9 w2 ?+ S+ I* X" e
3. 带返回值函数
2 G& |0 P. k; r&gt; function foo1(a,b){, M& |: L. J: a: m5 r6 F+ B9 I
        return a + b   ) N+ a' Q/ v0 i, t
}
( ]- v% Q0 @1 V4 v  N3 ?7 ]&gt; foo1(1,2): y! l: L6 F2 B  Q; N
38 Y+ ]) i! Y$ ~& ~2 E* {& }' K
&gt; var a = foo1(10,20)  //接受函数返回值. i/ G# i  r4 J$ ?1 i
&gt; a% N- Q+ |$ x7 j0 R3 ]  D
30* T2 T5 Y# N0 _& k
& c' |$ e8 ?( S- T2 r
4. 匿名函数
1 F1 Q# \$ W. o9 b/ e1 B3 t  W&gt; var sum = function(a, b){
; f1 {3 Q- C3 q, y  b% h0 z, P7 f  return a + b;* [- d% E9 K7 N
}
# p& y) r: t6 m8 V& c  \+ d! v4 c&gt; sum(1,2)& Z0 u" s/ ?! f" R* `. b
3
2 w! M% ?7 }2 k
; [4 [- `, t( _  \( ]// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
  ]4 A2 J2 |/ ]$ N&gt; (function(a, b){
( i5 o7 B1 s2 X  d$ x  return a + b
0 F; x. L3 j% |6 [5 b})(10, 20)# i" T: G& [2 A; U+ `: }' _
306 ]9 D" d- ~* y
+ D+ m+ B# ]9 q0 s' r  g- n1 w
5. 闭包函数8 d# D/ ~; L4 {4 V
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数1 X5 ?$ L2 I+ U$ f! r5 w1 K
var city = "BJ"# Q: k" |7 c, Q% j9 W
function f(){/ s. a  O, `- U: j9 h
    var city = "SH"
1 K, }0 s9 E2 P- c/ }5 f! `    function inner(){
: E$ W6 o0 n. j        console.log(city)
- I4 N; l- v/ T, A: [    }" b3 H$ m5 k7 [3 T
    return inner
8 A0 J$ {+ Q3 {! g  U' J}5 m8 u  s9 u8 ]- u2 C
var ret = f(); h2 Y+ k3 w" ~; m, h2 F4 T
ret()1 D' y8 E/ F5 S8 w" ]0 n
执行结果:
6 ~1 s! O: ~: e: z7 bSH3 k, Y' ]' Z8 Z7 o' K7 p6 M
2 ]$ `1 Y9 |+ b5 m6 I7 e9 o
</code></pre>
( L; ~$ V: X2 e& O/ e<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
& _6 r$ B+ {2 s0 ~<pre><code class="language-javascript">var f = v =&gt; v;& r8 Z7 H2 K4 o( {0 H3 n. I
// 等同于, V, ^, Q5 }$ w9 T3 l" q8 @7 ]
var f = function(v){# X7 w- c3 q" @3 }8 O, _
  return v;- J5 V3 D9 m) m* W* h4 F
}
. q% N) H4 ?' Y) E</code></pre>8 Y4 V6 v! W; U8 l% p
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, D7 g  A# @+ b7 Y<pre><code class="language-javascript">function foo1(a,b){
9 c" r* ~& W4 t' n/ `, D. Q    console.log(arguments.length)  //参数的个数 2 G/ x0 {' Y( o, v
    console.log(arguments[0]) // 第一个参数的值* x0 ?; D/ x8 l3 g" \& |) C
        return a + b   
& X1 U3 [$ f* D7 s; j0 W6 U}
+ F; P) K1 O3 Z2 _6 H6 k# Ffoo1(10,20)
& w! K, V# z5 _* ^, `结果:. U/ Y9 U, N. T. G; i
2          //参数的个数
  @/ L2 L8 n& B+ v% [$ [7 N8 _10        // 第一个参数的值
5 @# H3 i( h5 \1 n3 I30        // 返回相加的结果
3 G# e( P. g. v& V+ S# _</code></pre>) I, w+ j! b' K) n( k$ |1 E( Z, ~
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>) a' B6 d. q1 O/ A* U5 `4 p
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>5 Z* A5 M6 @& }' U1 v. s+ g% v
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
( s/ {0 a4 O# N1 H) q3 N<h4 id="281-date对象">2.8.1 Date对象</h4>- o, G5 M& p* R6 q
<pre><code class="language-javascript">&gt; var data_test = new Date()2 d1 M! w, U: b; v- d
&gt; data_test2 v% l7 i" l. c" n+ V4 F' A. P+ o5 O
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
$ I! k$ o+ M. z( u& X&gt; data_test.toLocaleString()' \1 t6 r$ C- D3 h# K2 n9 |
'2022/2/11 下午9:44:43'; a/ m; j) G2 m$ r

7 T) p4 B" L: s% T&gt; data_test.toLocaleDateString()
; T( Y4 N/ K- z" ~# t( }7 L" D'2022/2/11'
$ z' s/ M4 H+ U9 U: J! b) S- Q
&gt; var data_test2  = new Date("2022/2/11 9:44:43"), P, O  c$ o1 l) D) k. V' s8 m2 |0 ~
&gt; data_test2.toLocaleString()3 c" t  O. k/ R; v5 ]# x+ t5 G
'2022/2/11 上午9:44:43'+ e$ ~+ X0 b, V  _  o
+ X( j( ^) v- O
// 获取当前几号8 f9 D$ N( v5 [6 m+ B5 k
&gt; data_test.getDate()
) {; Y5 _% ^% o% ~: }( I11
' [3 y# [$ _: D0 H+ ^' ?# H// 获取星期几,数字表示. c3 r5 U: \4 c" K
&gt; data_test.getDay()  
2 Y# j$ G+ l! G& Y5
2 ?) m/ ^8 s) j9 k+ U) X8 U0 P// 获取月份(0-11)! [. V! l* a8 H6 h) {
&gt; data_test.getMonth()
5 I, w1 ~& r) S3 e1
& F5 x" w9 A9 B- Y// 获取完整年份
; H, a- ^' P% C( P* z$ P&gt; data_test.getFullYear()9 U6 F  u0 E7 ~$ c7 j4 ?
2022
2 ^+ |) Z+ i( r1 O( Q// 获取时* d7 D; H7 f' q* I# n& O4 ]
&gt; data_test.getHours()  O$ [2 Z0 G" K) S
21) }1 F4 R+ _6 \. Y) f
// 获取分
$ b* F5 f* h( e&gt; data_test.getMinutes()
1 P/ H- W' j  G. ~7 f3 F44
$ n3 j2 `6 P4 q. @# u( ?" \/ R! K// 获取秒- _$ U! p* b* ~
&gt; data_test.getSeconds()
" \8 t+ \5 H4 V+ ?6 p7 ~2 y, x6 W43; g, |6 B$ ?' {/ r
// 获取毫秒" y5 |' V4 N! y0 n6 f4 H* k7 Q
&gt; data_test.getMilliseconds()
. o/ i% l* c% S8 v4 D% h290
4 l: j' c; J! P+ s7 y- x// 获取时间戳' n8 X+ a2 e9 t; _) x
&gt; data_test.getTime()
# e% z/ g& d$ ?0 V2 n# j: X9 A1644587083290
  k: T" A( X  u% {8 ~9 S$ H</code></pre>0 N+ I, m' b8 }
<h4 id="282-json对象">2.8.2 Json对象</h4>% c$ [( d! x6 c( U$ o& f
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
6 d8 {( R# ~% hJSON.parse()  // 反序列化,把JSON字符串转换成对象" `+ ~) n' ]9 c# [) r5 N

0 w' [8 J# M& m; H) j// 序列化
0 _& j, b5 a. l$ u& t&gt; var jstojson = JSON.stringify(person) - N/ M! z4 K$ g" v: ?0 _
&gt; jstojson  
+ i* }: X! o- [8 m2 Y) c# A9 p'{"Name":"Hans","Age":18}'
/ g5 t. O( B) w  J4 H
* S% \+ t/ y8 G9 D// 反序列化2 C4 L9 e5 ?4 L/ I8 ^5 l* j; ^
&gt; var x = JSON.parse(jstojson)
/ u# i8 w* O* M&gt; x" |4 u$ m2 x; r& q; E1 F2 e
{Name: 'Hans', Age: 18}- b  l% m- U) S
&gt; x.Age
+ d4 U4 l7 q9 k/ c180 F* U/ W; c6 a& v+ P+ o
</code></pre>
3 ^, I  J$ v0 I<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
  B8 t, A5 Z# T2 ?0 _+ d3 c  M<p>正则</p>
6 a; \! P0 L: a- Y! H<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
0 q( G- c7 j9 L8 l1 E&gt; reg12 P# i2 U  K3 N  F
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 u9 c  s6 T* ?; T0 e* ^&gt; reg1.test("Hans666")5 ^0 F* Y) v( ^
true
' e+ A& z( Q% L
. Q( O3 h+ m4 q# g&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
8 z- R# p. L9 q% `5 e# T$ I&gt; reg2$ ~6 w  z+ H: J6 N
/^[a-zA-Z][a-zA-Z0-9]{4,7}/  Y" ~6 J$ |8 l3 S6 }2 N
&gt; reg2.test('Hasdfa')
5 d4 O. N2 Y4 z2 ?' ~0 ~2 ]true0 d, C* P# L1 u4 R& A

! E: p4 b0 h9 K8 X! j全局匹配:+ _9 K  ], }! T' p/ B% T1 z8 W
&gt; name
3 f2 r; R. Y2 o'Hello'5 h1 R! I' b' r! B  T2 c& `3 P% D
&gt; name.match(/l/)
& l$ b' Z$ L9 ]8 r% G& e$ ]& V['l', index: 2, input: 'Hello', groups: undefined]  c& W, g9 T& r2 B! f5 d

$ p- Y: f# J2 V& C* f&gt; name.match(/l/g), z* ?9 p7 y1 w% H
(2)&nbsp;['l', 'l']
/ J/ V2 M, o" C/ H2 z4 M; M// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配' ], k1 K3 L7 g$ Y, h
& j* D; }3 L) t( a
全局匹配注意事项:
8 Z" Y8 q% v7 C&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
  [) {) }: l  |* C&gt; reg2.test('Hasdfa')
. v# p8 f+ V1 d2 K4 C# O) C8 V5 htrue$ r2 @! H! Q  X* A& J) n" }; a" w
&gt;reg2.lastIndex;# |* K, @0 M% }1 R0 H
6
4 z% b8 @$ c5 N0 s/ n6 S& H&gt; reg2.test('Hasdfa')  c* K* ~1 f) e
false; ~( J7 q. g9 t+ g& E7 P
&gt; reg2.lastIndex;
8 _, P* Q, i: Z8 r9 o6 z! b: e0
! ]: Z& z4 [( p  a&gt; reg2.test('Hasdfa')# v1 Q  ]0 F+ x2 A7 z
true; f" x3 p; f. v  u# F
&gt; reg2.lastIndex;! Q! U' F/ Z1 G, P/ B4 z* U- F6 A
6
" e! `4 m" G5 U8 G&gt; reg2.test('Hasdfa')
* m# z* X8 u* Q, ?) h# Sfalse: h% W+ w' n" h
&gt; reg2.lastIndex;0 x- ~$ }+ `" P) n6 Z0 e  c
0* S$ D, |4 F# J$ q. F6 ~% }
// 全局匹配会有一个lastindex属性5 D( ]$ |$ Y1 _0 t0 A. H7 p
&gt; reg2.test()
1 m) T  A3 K! d$ Afalse
; D8 q1 l$ ?- i: z&gt; reg2.test()
2 I% r7 S  W* T+ r6 |* h8 |( Ltrue
1 _4 m& b. D2 ]: d8 r8 n/ y// 校验时不传参数默认传的是undefined
7 F3 T, X3 N$ `' E' {; n  n</code></pre>
/ [, G9 L1 `4 d2 t1 a& Z<h4 id="284-自定义对象">2.8.4 自定义对象</h4>: {- o3 j+ P! J4 z
<p>就相当于是<code>python</code>中的字典</p>
: t- v$ V6 E7 @3 u- m: n1 W<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}7 E8 q; E* g7 N$ Y
&gt; person0 f1 g6 B' l  y+ j, i- ?: R2 G# f! d
{Name: 'Hans', Age: 18}* j* ]6 M+ O( t; q3 s
&gt; person.Name
" V( T+ N' X) s'Hans'
* k0 n; T1 f6 g4 i; u&gt; person["Name"]
" B* y( K: }5 |# K1 ]'Hans'3 X! _8 K2 Z! N) W: P% U+ x

3 ?! [9 o" x/ z  y7 q" Q* t$ r' }// 也可以使用new Object创建8 v) H& J: H- B  b$ p% x
&gt; var person2 = new Object()" e- D% u7 v( m( k! G: b
&gt; person2.name = "Hello") V$ K) v# G: t& {3 G" q7 w
'Hello'. n! v. G  B+ B4 x& J
&gt; person2.age = 20
" C7 Q7 _% d1 b4 L/ L20/ x2 D9 J# O/ J  o0 A
</code></pre>
7 @& T; {! K8 b! z7 _& ]8 |) L7 ?<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
% z. p3 p8 N7 `( Z; Q# |<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>! q! I( I7 L! X
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>1 e* ^. k6 ]% k
<h3 id="31-window-对象">3.1 window 对象</h3>
8 w6 L1 {) B  V$ ^0 v: P! T<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>* o; s. z$ ^1 ?' d+ t# b) m! Z
<pre><code class="language-python">//览器窗口的内部高度
' p* v1 l$ d$ O) {window.innerHeight
* a8 s: \5 l, F- m4 n7 D706
  E1 n: ?: o4 x% B8 y" e' @//浏览器窗口的内部宽度
2 F/ N$ m3 P5 {8 W3 Qwindow.innerWidth& m$ u, s* w9 a* e4 P+ q# |
15227 D& v: z  `( R3 b: p+ M5 _# }
// 打开新窗口
& z$ a* |2 {8 y% x0 R' Twindow.open('https://www.baidu.com'); e" V% o' L/ P$ w/ W/ R
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}" ]" O5 K4 }& J  L
// 关闭当前窗口
& E) I/ e: z: N: Bwindow.close() / ]6 U  h; V0 \: N0 E
//  后退一页* t2 `2 M4 I2 d; C9 a6 ?0 k
window.history.back()  |/ G3 V$ P+ S4 Q9 @; E
// 前进一页7 k! q( ^3 C' m
window.history.forward()
$ \; o# C9 v# X6 @, j2 g2 m% ?//Web浏览器全称' B* }4 v6 Q5 @
window.navigator.appName9 P4 Y7 O0 }6 W( ~: g1 {1 o
'Netscape'
; N) ~( W  }# ^1 P& _, l// Web浏览器厂商和版本的详细字符串
  ~2 b0 V3 w/ e" I9 iwindow.navigator.appVersion
& H, s2 S0 b, W; H! a- U5 t3 g. i'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
0 x8 B( _% r* \8 {// 客户端绝大部分信息
; L4 |8 {5 m3 b3 ^2 c/ ]window.navigator.userAgent
; |1 P/ e& T4 t'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 u  @) c7 a- }. H/ M
// 浏览器运行所在的操作系统
" o- ]; j4 Q9 }, w& vwindow.navigator.platform3 Y% d' L. ?& G6 a& r
'Win32'# r9 h  a6 }+ A
* z6 Y3 U- f8 _: K7 f! R
//  获取URL
3 r& o) H. g' h# y8 N$ j( lwindow.location.href
, a+ m- `- v% \  @% v/ `// 跳转到指定页面
1 v  }. W; K9 M3 ~window.location.href='https://www.baidu.com'
! ]: \; |' p& U/ w// 重新加载页面7 V( _- z0 u, T! e& Q
window.location.reload() ! R! s' J1 D% `5 i. e
</code></pre>6 y1 c0 k8 l8 j& G+ L; Q- w
<h3 id="32-弹出框">3.2 弹出框</h3>
, _# S) G% ~; w/ j<p>三种消息框:警告框、确认框、提示框。</p>
- c0 l* x5 z7 r+ l0 X( }<h4 id="321-警告框">3.2.1 警告框</h4># G6 I) M* h1 l
<pre><code class="language-javascript">alert("Hello")1 B- E; t4 l( l7 F0 Z+ y) r
</code></pre>+ z% ^( S- B5 G- f6 x- w8 r- @
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>7 y9 L7 W, o; A- N1 `
<h4 id="322-确认框">3.2.2 确认框</h4># t, [- F3 O- G/ D0 o) M* ?1 a: ~
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>) A: I- T8 V# L0 A& K
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
5 y+ T; e. a* M8 E4 {8 G) Ptrue% G6 [  ?6 R9 O+ q" s% s
&gt; confirm("你确定吗?")  // 点取消返回false# e$ N$ @5 Z) h1 ~1 y1 Y
false
/ N' ^8 p: h2 G4 P</code></pre>% Z' `) S0 `) j, ?* U: |
<h4 id="323-提示框">3.2.3 提示框</h4>
4 _. r3 _5 E5 u<p><code>prompt("请输入","提示")</code></p>% ~  k3 Z/ c$ Z. b* R7 e
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
+ \/ U5 z, }5 `7 @" |. K2 v( F2 j<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
: Q" Y" w4 n4 h6 B# o) }9 b3 g<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
, k7 ~! ~) p. f& P<h3 id="33-计时相关">3.3 计时相关</h3>
* m1 c9 I/ L( s" w" a* {<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>& R! B; F; D1 t% Y9 i
<pre><code class="language-javascript">// 等于3秒钟弹窗
. I/ O3 g+ j: _* s6 |, LsetTimeout(function(){alert("Hello")}, 3000)/ i$ ^+ |4 ]+ }. h
% y& z& p" o' \( d- z
var t = setTimeout(function(){alert("Hello")}, 3000)
  F' p1 `5 F4 ~2 B" m
  ]4 {* U- ?$ ?! p) K. H; f$ A// 取消setTimeout设置
% Y* b/ \) A0 j7 Z! JclearTimeout(t)3 g' n: Z; s4 i, A& Q& U, D1 E# R
</code></pre>/ _; k7 K$ D, i$ W
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>( K6 I- T2 r! T- o0 V' |
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
4 Y/ [$ m& _3 x5 z$ ~( z<pre><code class="language-javascript">每三秒弹出 "hello" :+ P" p0 j  ~% ^7 J: j& b, n' a
setInterval(function(){alert("Hello")},3000);
3 y6 n% K6 B  P4 A7 V2 M) n  X</code></pre># H  F7 U! S3 ]$ X) ^, c
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>7 D: Q5 A" Y* j+ r: ^% _" d
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 D, l. Y" d4 n/ n3 Y! \//取消:
& ?* `9 U3 {* X" d+ a  m* P1 @0 D  X# \clearInterval(t)
5 e2 D# M$ S, O8 `1 |8 ?</code></pre>2 y& B; U+ R, b

4 n! h3 H+ w# b
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 02:32 , Processed in 0.072687 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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