飞雪团队

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

前端之JavaScript

[复制链接]

8049

主题

8137

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26477
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

9 H% u: F+ S8 m( X4 y9 |<h1 id="前端之javascript">前端之JavaScript</h1>- _/ b. c3 g2 x& N0 R! @! m
<p></p><p></p>
6 _! j' J' A5 t2 g5 k8 \<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>' K2 U2 N* h" {4 G- n
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
& P( [8 A2 ^8 m3 i它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>; t; O: i# n0 D  x" k
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>( d1 s1 i, H/ ?! r, O
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>/ h/ K; }* V9 D( I" p7 T; }& Z. |* f
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 R0 `/ P# V  a# a2 O<h3 id="21-注释">2.1 注释</h3>
* f2 v5 }# Z' i1 i2 d<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
; |& |6 X" a* o2 j# K<pre><code class="language-javascript">// 这是单行注释  B, f2 C& ]  X$ L

, l# b8 ~/ P( `/*
' Z3 B! |* O$ I: r& `, m这是多行注释的第一行,/ t/ m9 T9 _7 ?9 i/ {) ?0 I
这是第二行。
) `5 d* b4 J$ a& @9 I" R*/
# s% e# K/ o% d/ O* a. K</code></pre>) {% _; ~! t, j, B
<h3 id="22-变量和常量">2.2 变量和常量</h3>
  J2 I4 U* ^$ v) P7 e<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>% _. \: j1 {; s* R" L
<ul>0 @2 q/ X6 q* j) I
<li>变量必须以字母开头</li>" G. J. x$ P4 \; {0 a
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>+ d* V6 N% X2 Z, n) a, j
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>* [" L; L% Y) U, n- O  f3 ]: t
</ul>& J6 W, W: U4 Q6 }+ l2 [
<p><code>var</code>定义的都为全局变量</p>0 U+ [- G' V) p7 A0 i4 S
<p><code>let</code>可以声明局部变量</p># K2 m- ^; i4 g7 u0 ~
<p><strong>声明变量:</strong></p>' \( O, l+ T- `7 w' m3 J: c
<pre><code class="language-javascript">// 定义单个变量
7 S* @4 e9 ?/ M&gt; var name) n2 k  z$ L2 n# M6 h
&gt; name = 'Hans'
. i" g1 u4 w; x  J/ \: A//定义并赋值
8 i& u6 L' b+ E9 _* y, F&gt; var name = 'Hans', Z+ s/ K8 n8 |2 Z3 r
&gt; name1 @* @! F0 y5 {" z& S
'Hans'# b6 A/ F2 i1 @; r& s0 Y- v: ?
5 U/ f9 J) W1 b. I; e
// 定义多个变量/ g' c+ ^! x! N( Z6 v. h( T0 p
&gt; var name = "Hans", age = 18
5 u. Y3 I* P9 N$ W! V# ^6 q6 a&gt; name+ z6 W, A) j7 L. L8 J" w' n9 d
'Hans'4 @# D4 M4 A: [* N5 F  t1 k; m( ]
&gt; age1 U7 I# d* p0 X( ?3 s  h7 O( f
18
2 ]9 x  P: p. `
) R3 ?3 c4 ]" i* U7 P7 a& w//多行使用反引号`` 类型python中的三引号# C" U, F8 X6 `
&gt; var text = `A young idler,
; }; E" }" Y0 han old beggar`
' g* A" I4 v+ n( _8 F&gt; text
. S& Y! X% j& h6 k) i'A young idler,\nan old beggar') e8 B; p$ |, q& z
</code></pre>' \8 t: F( N9 [
<p><strong>声明常量:</strong></p>: v& A7 B# r7 z, g- _
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>* j9 B( X! M9 m$ s0 e
<pre><code class="language-javascript">&gt; const pi = 3.14
+ i# ?8 X. E3 n1 z% h8 o- I&gt; pi5 K' B1 D3 G1 o* {, y/ j! \+ ?
3.14  n* Z+ j, ^5 k5 n
&gt;  pi = 3.01
5 o5 j7 M% w3 }+ C: O, PUncaught TypeError: Assignment to constant variable.% d% m% r. l" C$ p& G
    at &lt;anonymous&gt;:1:4
3 w! w  o8 U& D' f- w' F2 t3 J8 L3 B# w: a' M, E! g
</code></pre>( }: p( F7 N7 Z/ a! V, }
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>& c: ~' w9 A2 b. s3 B
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>! @* E! |4 z# L, b
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
  D1 j3 o% r5 i- J<h4 id="231-number类型">2.3.1 Number类型</h4>
+ D- Y) ^0 l) q$ T<pre><code class="language-javascript">&gt; var a = 5; A& s4 T8 u) _. B* X
&gt; typeof a   //查看变量的类型  . D0 o- x, w, H( d" b! K
number
7 Y: x" {3 {$ Y2 e7 o  l0 H3 R5 y/ F, r- z" Z! ]& g
&gt; var b = 1.3
% z' ?0 d5 ~) q0 c# t5 y% n&gt; typeof b
7 ^/ [, Y3 [* I, v1 J) jnumber$ t% y  `6 i3 `6 V; s# ?7 V0 \

& x4 g5 |8 Z7 a. F+ m; J' ?, ~8 A// 不管整型还是浮点型打开出来的结果都是number类型
; E3 A, Z/ z: H* T  u" `7 Z5 w0 c. i. f
/*
8 F. z% s  f( y! P/ p" ANaN:Not A Number6 [2 ^4 X7 \) y3 h6 f( ^$ c
NaN属于数值类型 表示的意思是 不是一个数字
  y4 Q6 B: m' p6 G6 t! F0 {" `*/' N+ O* J! @+ a* z$ X
% U: H. n! G7 i8 p  @9 U8 d* B
parseInt('2345')  // 转整型# Y5 J  E. [  m, S- d) B: F9 _
2345& X8 z2 x# s- ?& r
parseInt('2345.5')
0 B, \0 o3 G5 g  l  x5 R2345
# q% k4 g$ t0 |3 QparseFloat('2345.5') // 转浮点型$ X( o9 g/ f1 L: V# l% Z
2345.59 I. ~6 e5 Q7 p$ ~/ J. b
parseFloat('ABC')7 K' }) v2 Y) u( q, V
NaN- n, l9 V$ w" T
parseInt('abc')5 e( e1 w. m# `
NaN; A: r1 b% Z& V$ R3 c: O; M
</code></pre>. D. y& A! ~6 M  Y( }& }* R
<h4 id="232-string类型">2.3.2 String类型</h4>
$ x2 H% d; f7 u% I( Y<pre><code class="language-javascript">&gt; var name = 'Hans'
# o# B* V9 ]  t; ?0 [: U6 Q5 f&gt; typeof name
& b/ a* S; T3 S( r: g$ o'string'
: X. @8 z8 x, m; u' N8 w/ V/ h/ \
8 ^4 ]4 I: e! l/ g//常用方法  E8 a3 T: _% N. |; }  `
// 变量值长度8 g# ~. p/ J) F2 @' j' c/ {3 R
&gt; name.length
6 G& w  F4 S* g( s' E" A7 U4" v' Y: U* ?! V6 |
// trim() 移除空白+ ]: C! T& d- {- f" d9 r
&gt; var a = '    ABC    '% R' n4 p2 v6 p0 J% E8 ~
&gt; a
4 M( E5 J  B- V- O& }'    ABC    '5 p8 t8 h( S. Q
&gt; a.trim(), T3 g# E% Q& H9 w( d& U  g
'ABC'5 u  B% R+ r5 @1 \1 i
//移除左边的空白/ l3 ^. t1 I0 o/ @' F
&gt; a.trimLeft()
2 J: Y$ Q6 J5 L, s8 s' P7 r'ABC    '
, T+ R! z/ m6 M$ |; R//移除右边的空白, d( [  N1 o, }' U8 h
&gt; a.trimRight()7 }+ d+ t" T/ W" r
'    ABC'# f' i2 C$ u6 ]: b# k

/ b  R1 P# \; C" [3 V//返回第n个字符,从0开始
+ \5 z2 z- @/ ]8 i6 ~& W&gt; name/ T' q' _+ ^" C
'Hans'' D) @6 Y9 N/ R5 |# D; C! E
&gt; name.charAt(3)2 l, @3 p1 z  s
's'+ f. s+ ^. \7 G$ T
&gt; name.charAt()
( n' I8 t) Z% o3 R! g* h'H'  v: H6 G' Y7 q6 `- ]: v* ?( m+ N
&gt; name.charAt(1)
2 v/ N+ F* i" S2 s/ U) K'a'
2 e- z2 u7 D* A) @6 {6 ?0 I3 _7 k" ]! H. J, O. b+ ~
// 在javascript中推荐使用加号(+)拼接
5 C- {$ }* E% w$ }6 P. V&gt; name7 s, Q9 Q- {( _
'Hans'
6 \, f2 ?* L: m+ ?5 Q  n&gt; a- T# T) m4 J7 v9 u: o9 V/ l" k8 s
'    ABC    '
/ ~6 Q4 G# @3 r% _+ J* D' T+ H9 G4 n&gt; name + a2 Q$ i7 j, O* P) `8 |
'Hans    ABC    '5 e6 p6 u9 O$ L1 e9 j* F9 u+ R
// 使用concat拼接( S/ @7 I* D/ o% _
&gt; name.concat(a)
2 U' ?9 j; Z! y7 N8 J& K'Hans    ABC    '  U- x0 K+ q, k, [( c, o" t

2 |7 D+ z( U- I//indexOf(substring, start)子序列位置% e/ s2 H: p1 P9 I2 D; X1 B

) k" ~, H5 ]9 f( q) n3 I1 M9 T&gt; text
  v' \# A8 \' r'A young idler,\nan old beggar'; r* X) Q/ `: ]
&gt; text.indexOf('young',0)
+ D' {. ^+ {& X/ }21 y, M: B& n) _5 m5 W3 X$ G& m, D6 U

8 u. s0 j' m5 f//.substring(from, to)        根据索引获取子序列
6 J, L- `/ _3 ]( g&gt; text.substring(0,)% I7 v; Q; m3 X, |  n0 }
'A young idler,\nan old beggar'
* x% e! Z' g8 w6 o! n" W&gt; text.substring(0,10)8 c2 u  I+ D( V% I9 @; d4 Z
'A young id'3 g3 U4 u- [8 ^: y1 }

" R' O9 q) I$ B$ Y// .slice(start, end)        切片, 从0开始顾头不顾尾
$ V4 @9 R0 @% J8 h! K4 L4 C&gt; name.slice(0,3)
- ]3 \5 a' q1 p6 @: H5 F$ R'Han'
( [3 B  D; I, P# m2 J! t/ S- ]$ U: X6 `& s- R8 t4 v$ \& I, t+ v1 k
// 转小写
# I( z( S8 [$ G; A& F) C: e&gt; name1 k8 L) @7 h( u) ^3 j2 S" S  d
'Hans'
3 d, V8 a9 j9 Y! q! e/ t&gt; name.toLowerCase()0 w, J: Z( F/ ]# n% M0 R1 e
'hans'5 d, F7 h3 g- `# s; ~  i
// 转大写
7 |6 F/ b$ |9 V  j4 q&gt; name.toUpperCase()- ?' B. I5 K  U' [! P
'HANS'
! |2 j4 T2 a* V8 s# t+ d, M3 y  K8 m" b& o7 S2 s2 m
// 分隔/ ~4 r& Y! T- n. p
&gt; name
5 z9 R4 l: V9 L% ]: V" v( W'Hans'
$ H: _! S; e- Z5 [$ J: D" i&gt; name.split('a')
/ [$ X  ?1 h( l: g$ ~  g) _  a(2)&nbsp;['H', 'ns']
9 M  S2 t' [8 ^; l</code></pre>
5 p# l) B: q, y7 J! N$ A4 R6 B! W2 _<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>* U6 B$ e- R3 m8 P/ U
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>3 W0 p  n! g- C& }5 _0 y
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>+ v) Q" @9 l6 O
<p><strong>null和undefined</strong></p>
$ V9 s  X: l# {2 _4 q" ~<ul>
; A$ d' X" G* o7 J<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>9 k# k1 U. }( p8 J; m2 i6 x
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>2 y- [+ X8 E" ]$ q
</ul>6 [( H- w4 b8 U4 m1 ]6 U9 \" Q+ }2 u3 b
<h4 id="234-array数组">2.3.4 Array数组</h4>
; n+ o5 y4 d1 W9 E<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
. E, s7 Y" M1 w<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
$ V! N. d+ T# j- E& v&gt; array12 ]3 Z) w: T) c4 S
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 Z6 `# R& X7 x1 C9 A$ k
&gt; console.log(array1[2])  //console.log打印类似python中的print7 X1 p/ u, w1 O) x) Z4 q& D5 K  f0 N
3
+ O$ s, e; o/ ~! h// length元素个数
$ N3 b! ^3 C5 w( k" K5 z2 K&gt; array1.length$ W; n& {& E) K  R: w
6
( v' R5 Z) {/ F% R5 U* i% E// 在尾部增加元素,类型append" P% z  V" }/ F+ K4 i* X* C% f
&gt; array1.push('D')/ Z+ V# K3 h, a6 C
7
$ O3 ~4 W2 ~% [" V( s/ r&gt; array1  W8 t* v& Q. g) h4 f
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
+ {7 ]; ^; K# J! V; [// 在头部增加元素
  S- N6 y9 w3 X( @9 O2 F0 t+ i&gt; array1.unshift(0)
; h& W' T- c; o9 ]4 X. I$ e0 V% L8
# w+ X% [  q) n1 p" c: L# i&gt; array1# H, T+ a' O0 H
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
: L  N" p$ G2 v; X+ T! t% e4 M5 w: O3 r/ J  k- [8 v
//取最后一个元素: L. }  j% Y- J# A
&gt; array1.pop()
, H% m: F& |9 S& P8 T/ d'D'' Q5 R0 W- ^" Y/ ^
&gt; array1
' v: T! J$ z4 `# f(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']7 R5 Y- G6 B/ h: `
//取头部元素, `  K; n; H% F8 R" u
&gt; array1.shift()1 z$ U( j" g# ?: }! ?
0/ E3 H, K  M# G4 F( e& a
&gt; array1
& B; b2 a5 q# q2 {(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 V3 F& t. h8 q2 ]' m! M& m* s9 k
) N, |, m( v) @! d+ N5 h//切片, 从0开始顾头不顾尾0 u8 d$ M; s. b3 m
&gt; array1.slice(3,6)
$ Z/ ~0 w9 m1 Z% W0 n# v: _4 n(3)&nbsp;['a', 'b', 'c']6 g& e9 q" Y+ r! ?$ P+ F
// 反转* g, A+ w4 c! @% w
&gt; array1.reverse()
0 Q0 z! T9 _' ]3 x! v" o(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
) t# U& W+ @, ?/ d// 将数组元素连接成字符串2 N( o: {4 f" A* o6 d& M- K% H( p
&gt; array1.join() // 什么不都写默认使用逗号分隔( H& d1 W3 H8 x2 s, u, E
'c,b,a,3,2,1': i9 k2 }" a! |
&gt; array1.join('')
4 Z4 v& M1 g" X. y. X# ]4 p* Y& E0 j'cba321'
! Y) b/ i. p) |! Y&gt; array1.join('|')# s5 ~" a5 o( y! E3 B. h
'c|b|a|3|2|1'
2 H$ x) F+ ^4 C" ~' c/ c% f5 E, M: r4 x; ?& T. O) n+ H" N; s/ j. V
// 连接数组7 P8 B, s7 e$ D" n7 v8 J
&gt; var array2 = ['A','B','C']$ B5 E* C7 a9 z+ x# z$ x+ p3 ?5 D
&gt; array1.concat(array2)
' v% X; a9 O0 u* J5 F(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
9 \) ^1 n7 M  w4 W. ^; x9 A4 c. a8 s0 \6 j
// 排序
8 s  m& R! z. k&gt; array1.sort()0 M. X! q$ m+ S! N$ l
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' P0 ^1 x; M4 Q" I( |2 u" u
9 I* @9 ?( u4 V; {
// 删除元素,并可以向数据组中添加新元素(可选)
6 Y) F7 ?( i) U9 u* F/ J! w&gt; array1.splice(3,3)  // 删除元素
! c5 t1 K/ ^+ Q6 D' s(3)&nbsp;['a', 'b', 'c']9 Y9 t4 }" |: Y+ {
&gt; array1
) n. _! N! P' h1 {! [; h! }(3)&nbsp;[1, 2, 3]
, v% @, ?1 l% @0 f& e&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素) n( f+ e, [( F1 B9 i
[]
! A: ]/ O, r; s* }- J  `&gt; array1* r% J; A: ]/ \8 u/ ]! `% X9 g
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']' }: w$ A/ q8 c5 y* @
" a. v& z) C* ^( _5 T3 S6 c* V0 @
/*
" |  D; c+ c  ]) B5 G$ n7 ^splice(index,howmany,item1,.....,itemX)
, ^  X7 [/ h- [/ B# Mindex:必需,必须是数字。规定从何处添加/删除元素。+ q1 H8 j& h& A9 L9 F0 o. c! z9 P
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。0 b5 ]1 O" Q( R$ G3 }
item1, ..., itemX        可选。要添加到数组的新元素
3 A. V% Z! L  e/ f& m*/
, v. {: ]4 {5 k& v/ p% h; F
, o( \6 `# C. D2 c* e// forEach()        将数组的每个元素传递给回调函数  f3 l6 f! d8 W/ J
&gt; array1.forEach(function test(n){console.log(n)})6 Z! z' w3 i6 d( V. i3 }9 [! [6 u
1" y4 x4 y! ]" @2 [' L2 T/ I8 O
2+ B* C7 p8 O6 n
3
, [: |' p/ z+ p9 Q0 f/ K5 B! r A. Q% [3 D2 h( k8 Y: V) Z, t: i
B3 l! D2 d9 f5 Z' y/ A2 N1 ?3 B
C* x" [8 p2 H! c4 Q- X1 v1 B
// 返回一个数组元素调用函数处理后的值的新数组1 x' x& S9 [/ G9 K7 D2 M
&gt; array1.map(function(value){return value +1})+ B4 d( w! P8 {$ i
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']' |6 \0 [6 p9 v5 R( E1 z/ o$ f
</code></pre>
/ B: b4 Q# o* y/ V<h3 id="24-运算符">2.4 运算符</h3>9 E6 t2 K2 [: M
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>! h" E9 H, M; E( c6 |/ m2 V/ A
<p><code>+ - * / % ++ --</code></p>" @  s+ n, g! Z/ z% M3 g
<pre><code class="language-javascript">&gt; var a = 6
/ A/ @$ P, U+ D6 U" c+ D' W&gt; var b = 3
" I4 \: T; v4 M// 加
( `3 K$ }( r) k: F&gt; a + b
* P! d5 o, y) o9
1 x# I1 e8 T0 n* @1 R// 减0 v  A) d/ J) j1 M$ G- o
&gt; a - b; a+ n; N; k2 s4 G" l6 M
3( u5 G$ U% ?$ A6 `- q' E0 B
// 乘3 p( H7 z* `6 L( c- F/ X
&gt; a * b
6 }( [4 p3 f& {) W6 N: s) y18
' H8 F# V* ~. z/ g3 @. N0 {// 除
( ~5 a" t8 G0 I6 C&gt; a / b
5 f6 W8 n& a" ~( n8 N6 l2
8 l, N/ r! M7 _" s// 取模(取余)1 \& u5 {+ x& J6 D6 s
&gt; a % b
5 |5 w" D4 T+ n2 g0* N0 y2 P3 v( L* V3 T
// 自增1(先赋值再增1)4 n! e8 {8 k& A
&gt; a++2 s: J1 B; C5 m! Z9 D
67 X+ m* P, \8 B5 j
&gt; a' a  H6 i5 r" Q. S6 {
7' z7 u+ l" l( l0 U% ^
// 自减1(先赋值再减1)
- S" d# r1 m8 I: \0 W1 Q  x3 l5 _&gt; a--' K7 X1 q* X4 a: B% X6 l
77 l; }1 m: d$ S( N
&gt; a
* k: u) a% t# z( @5 y6
' \& P9 Y' a/ Y// 自增1(先增1再赋值)
7 D6 I$ @8 v& b- l1 i/ D&gt; ++a" |4 o  R8 _8 X  X1 G
7+ w  }. ]: m) W) n& s3 Z
// 自减1(先减1再赋值)
$ V' e$ `( r; s7 `; h/ v&gt; --a
5 O( v4 T- ~3 o$ r7 f6/ _7 \  ~! D+ c8 E. h3 R& Q, }& \6 c1 Y- |
&gt; a
3 M" J3 e6 c9 m- N66 u* u0 T0 J, B9 r* V9 @3 D

; \! p8 g# V; M# ?//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ s! O7 \3 o/ H0 e</code></pre>
* @# E/ k% S9 f; K<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
% ^$ H$ N# ~) N8 i. T<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
# |. ]1 P3 V5 k, J) v<pre><code class="language-javascript">// 大于
' G: S- o  _" f$ \&gt; a &gt; b
, X+ ]8 z6 D+ n- n: U" L% j, @true  U+ k6 u4 X6 b* d( ]& [' c+ s
// 大于等于# E0 U  ?; M, d6 M
&gt; a &gt;= b
$ v% W0 W& ]( \# D! L% s( [true
( u, D- O; m0 e5 F/ I5 [1 J5 w2 h6 R// 小于2 \5 ]+ w  `- W4 }% g/ @
&gt; a &lt; b) o/ H$ ]# \, k: k8 L6 C
false
9 _% r  r$ Q' j! P3 n$ `, N9 u- i; |// 小于等于4 \/ F4 P0 O: ~  u( a( j
&gt; a &lt;= b) I7 z6 u0 E2 M: W" b8 J
false
% T( }% }( G" w( q2 V// 弱不等于
8 u& i) {: L; `/ c6 c% u&gt; a != b
9 N1 l; G9 C: M! n& v" Etrue
$ E  p* W0 S) y4 R// 弱等于, ~% M2 D' F: k; V4 ~% p
&gt; 1 == '1'! g% ~+ h: n0 B" u3 V! B
true
0 m# t0 k) F0 z  L2 V) s* X// 强等于; M0 D1 z9 _, k0 e& t1 q
&gt; 1 === '1'8 m# Y/ |& p9 E% z& x: J
false. D9 [3 V" z4 t9 Y6 F% N
// 强不等于
' \9 q/ t/ L/ k, T: j: r&gt; 1 !== '1'% a% K8 {+ Q7 `* }1 Q4 w) x: O
true
2 v- n9 h/ {+ t- E  _& g
! u9 K. u; [6 `3 |/*
5 u- w: l3 I7 g( {% L+ M: VJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
! X9 e4 P$ f7 K! a/ D*/
% f' Y5 C. }4 K4 s# T5 O, b</code></pre>
  L6 u) t! e3 {1 Y5 e- O$ {8 v) b: i<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
  v8 H. d: A/ o<p><code>&amp;&amp; || !</code></p>) M5 H) [& V% R, q, M9 O0 k; Y
<pre><code class="language-javascript">&amp;&amp; 与0 H# B0 e& A$ a* D: [5 i6 N0 v
|| or
! V6 P7 W$ a, j& y( a8 J2 k! 非# j' m& S" I# l4 }
</code></pre>2 C: Y4 d7 Y. w. b9 j% i9 o5 P5 Y
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
8 J7 e1 j/ G, l! T<p><code>= += -= *= /=</code></p>( P6 f3 o/ ?' m: }* I
<pre><code class="language-javascript">// 赋值
2 R* f0 j, I% N6 H- p&gt; var x = 3
. [! [" Q& J; Y9 p  N. U+ Z// 加等于
; q8 s# O  _0 E# C9 E8 P&gt; x += 2
- P1 t6 p. O+ q, P# R5
& C! n4 k5 Y' j0 n// 减等于
* i; U4 F# k+ ~&gt; x -= 1* B5 c' u' O" p2 j
4
7 R# t  w$ Y, Y$ m// 乘等于
3 X' h" b1 V& _5 N9 i% K&gt; x *= 2/ P( `& m. @8 ]; n- L
8$ V* C* y4 p) z
// 除等于9 z5 \  g- E- i) X+ s( I) C1 _6 Y8 Q
&gt; x /= 2; V1 x. E  O  K1 S* X
4
, b$ w3 T6 P, X6 h1 k2 F</code></pre>
  |. c; [: T. v6 d* ~% f3 S6 }<h3 id="25-流程控制">2.5 流程控制</h3>8 ]. l- W; D2 p# R
<h4 id="251-if">2.5.1 if</h4>
  r/ p3 i: j7 p5 [5 Z! W# D<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
& x# i* r# E, Q& [1 `7 X9 v; {+ x8 P. \
&gt; var x = 3
4 Q! e5 Q3 q5 a8 \" e&gt; if (x &gt; 2){console.log("OK")}1 p& ?, i, Y- t5 p
OK7 Q7 u, }8 a- X

: t6 j. ]; K6 E  T  }' t2, if(条件){条件成立执行代码} , T5 @2 |$ r) @* d8 L, U3 L% d
        else{条件不成立执行代码}, z# t9 ~* F( S+ d3 A) O! V. G

& w' ~" b# M7 B$ N! w$ L0 E2 R&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
+ M8 ?* g% m2 G# ^; J'NO'. i: D. {) n$ |; S! o
) B3 ^7 M# [' j+ s6 m
3, if(条件1){条件1成立执行代码}
9 n7 {% y9 z2 `1 d* N        else if(条件2){条件2成立执行代码}: b; \+ |( F: ]/ c9 W% `2 j% g) @
    else{上面条件都不成立执行代码}6 W. N- w; @. V, o) h# C

  O. J# f3 O+ {$ w: U; w+ R, \3 W&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}& O* [* I5 H' w* A% }
Ha
( ]7 u; g& C( z4 a</code></pre>
! a5 I" H* |9 v, z7 X. o<h4 id="252-switch">2.5.2 switch</h4>- d. p5 {5 f  o, I* V$ A$ K3 Y* Q5 {) K
<pre><code class="language-javascript">var day = new Date().getDay();. ^, s: ?" g- w7 p  q! j% C& `% t
switch (day) {
& K, T8 @0 x& A. C  case 0:3 S1 ]/ y$ |1 l1 u' S' y
  console.log("Sunday");% p0 n  \0 k6 a* g$ X: W
  break;/ N$ i4 L9 x) ^
  case 1:
& z. G. W" ~) R9 ]: h  console.log("Monday");4 t5 T; d" N! o! Y5 N# e3 o* z3 n
  break;9 E3 [% ^! n/ z0 h- {# P
default:  J/ a# O3 G3 ?- `
  console.log("不在范围"); j: k) S9 r3 i% c
}& f( ]& ^. s! e4 b$ K( V8 s5 e
不在范围4 k. M7 [- S& B: S$ s' ~. z  V$ E8 r
</code></pre>
4 q6 D% j6 k* x# o/ l<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>3 F. R7 y7 y2 y  H4 x
<h4 id="253-for">2.5.3 for</h4>
7 F. T5 f% m* s' j% O/ K1 s6 n<pre><code class="language-python">// for 循环
3 ^/ j4 h- x$ h        for(起始值;循环条件;每次循环后执行的操作){
1 F) N% S& H% M6 c  A8 T        for循环体代码
1 c% r( G& X3 K. `" {    }
; @, j6 t* ]' S4 H( f0 g. p& B  g" J/ [; J  q
for (var i = 0; i&lt;10; i++){
+ f" M% i# o& w. t7 p! h    console.log(i)* b; D8 [' ]4 ]6 B$ S
}
* {! y# ?4 Q) o8 f3 a: s+ P        0; y* [7 f6 ]7 ~
        1
9 Y4 H* V. l- e/ V' m        2
4 c9 v. R- P$ k' t5 T3 W        3
/ W: u) ~8 Q" s5 r        44 l6 J# p/ }- O4 J9 J" p
        5
  v6 Y# f* G9 H5 Y. p3 f& l        6. b* e$ e0 y2 F0 Q: C
        7
$ K7 K. x) @6 p9 H( C; T7 x& s; O6 a        8
( ~( v- C+ J2 @% _7 D9 w& K        9
- D/ w- |, u8 @</code></pre>2 P8 W) r) N3 ?! e
<h4 id="254-while">2.5.4 while</h4>
; u: L" x% }+ {/ q* Q0 _% v/ z8 g; l<pre><code class="language-javascript">// while 循环- l* J8 K' U1 ~) }* U
        while(循环条件){/ \/ K0 R9 A, R% M
        循环体代码7 w- d+ }6 T. j' W! i, j" m
    }
7 P7 M1 m, p) D- V# N
8 p( T3 `; e9 g; T: J&gt; var i = 0/ m) }8 \) W# G5 p9 [4 [
&gt; while(i&lt;10){
; @1 u6 [2 C& L% u0 x    console.log(i)" Q0 j5 ^( z0 S+ U* A
    i++9 }$ |9 s3 Y1 j  g
}
6 c" G' z' q7 ]' v 02 W4 |/ b% o8 p! ~
1
9 a4 N1 ]% l& N( Q: @" a 2
& L/ _" J) E  S) C; |# E0 b 3
6 J$ Y1 H" N1 U, K2 i 4
" r& g8 H6 q9 K/ S 5
" x. H) q/ Z- B* \! I# T 6
: |$ e' E, h+ _2 \: F5 v/ ~ 7
3 w/ P- ]4 p2 y$ v7 h 8: _7 `1 P4 `4 Q
9% U# _3 T) l& v, y* P
</code></pre>9 s4 p8 f5 L- {8 c; N  F
<h4 id="255-break和continue">2.5.5 break和continue</h4>
8 i; z2 y9 V3 K' h. I1 V<pre><code class="language-javascript">// break
9 [4 @9 P7 x% g/ Z3 H* Z1 ~# V) V: x  l+ Ffor (var i = 0; i&lt;10; i++){
, `, P4 W! M& r6 A) y* a( U$ F    if (i == 5){break}
( i) j; W" }8 M    console.log(i)4 J' s# `$ ~& m6 m# o2 X- p
}
9 R) F, d! f( X1 p 0. t0 v2 E# M5 W7 r
1
; D. l5 Q& i3 T' @4 p 2; r9 X: f- _2 g- U, d& P
3
- z) a# E# D  x$ P9 W0 ^ 4' B3 j1 V1 e! O& R
// continue4 [' G* N8 c; l* J$ R+ y7 g* ~% k
for (var i = 0; i&lt;10; i++){8 C* r- y1 ]" g: @4 h  j
    if (i == 5){continue}
2 _$ Y2 I  j. t    console.log(i)
9 m( m- X0 |. U. ~}
) l" ]6 a4 m9 y5 r3 N2 t  y) w" o 0
+ G3 @1 W# \' h2 j9 v' t 1
' R( R$ B* L' w/ q+ I! O 2; _6 W4 ~/ {, E
3
" W( \) w( m3 Y8 |& ?% X' d. @; C 4
3 L* @8 y3 B( l3 i 60 K5 L$ P# ?9 K* r9 C; _  a
7
; f* M( ^( v" M5 u* g% L 8+ [  j2 `; ]. _  L
9
6 a9 `. r# V; V% H: z' S5 t/ f3 T; m' N: T- a
</code></pre>
% `7 k+ ?% d$ k; E5 E<h3 id="26-三元运算">2.6 三元运算</h3>
$ Z. z) `( v( k' r$ l- |<pre><code class="language-javascript">&gt; a
0 u3 F0 K9 S  P( |" m6% V) i% M# u; r9 T
&gt; b
* ?! m7 O& k! C9 U  D: c+ V3& B9 P; {, m) G* v2 w
0 f! J, R! Z/ ?
//条件成立c为a的值,不成立c为b的值
) v5 j3 ?* w& u&gt; var c = a &gt; b ? a : b
' C" u- I) D$ r- W&gt; c5 `8 h' h3 Y( {
6
$ z5 _" I5 {- f# R& }7 P0 r7 B" k* E5 ~$ w
// 三元运算可以嵌套6 V# T% L2 H3 l
</code></pre>2 j/ h( B7 g& R1 e
<h3 id="27-函数">2.7 函数</h3>
$ [6 X+ K3 `* d4 z# r: ?6 p<pre><code class="language-javascript">1. 普通函数* e  z9 [  q% s5 a
&gt; function foo1(){' h% t; u7 P2 i3 I; \% q( O
    console.log("Hi")$ C% x$ t- U' |
}
2 \: l* I: X: b9 \! w" V1 z% A: j! [0 i) x0 p
&gt; foo1()  t- i2 ~8 y) P8 I9 O) T
        Hi
7 [" c/ [' ^9 {; ?# d/ c$ M' u2. 带参数函数
8 N1 x" [; J2 V3 u* b5 @. Q- V&gt; function foo1(name){8 s, [. E5 _* x  m" i" Y8 i
console.log("Hi",name)
  e# e1 S/ T+ j}
$ `! J) O  h+ q; Q& e) U/ O+ e' y$ P$ s% N5 r4 ?
&gt; foo1("Hans")
9 S9 W. f6 O1 @- a; S' hHi Hans( X' L& |( H1 s# G$ G) P# B0 o

  e. O- {: F, ^: z; u&gt; var name = "Hello"
3 x- s/ i  l3 _" v  @) ~- P7 j; L, x&gt; foo1(name)1 o' {* r. ^3 E/ `  A
Hi Hello  v, j+ G. x1 U8 b  [; s
2 v& w1 T0 M- q& d  w0 ?
3. 带返回值函数
. `; H: \9 P7 G. ~# D&gt; function foo1(a,b){
6 @6 D4 [7 E8 \- d, t6 m$ y        return a + b   
; r. T- p6 {  v! T2 a}8 p/ W! f" Y. s' F
&gt; foo1(1,2)
& ~: _; ^. x& [; L0 c35 [6 }" u7 M/ [7 S) b/ U
&gt; var a = foo1(10,20)  //接受函数返回值4 ^$ O* D2 ]: V, I" S, A! ]1 y
&gt; a
% E$ ?, x5 p  _- y+ K30, D4 y7 k4 l& H. B! W1 ]" U
; H# Q2 a6 Z. A% \: z
4. 匿名函数# L4 x5 l0 |) \8 y
&gt; var sum = function(a, b){5 e. q, D( ]5 J; L# K
  return a + b;
% E4 X$ }* F) e5 F( R2 S( {}
9 b& o8 U) A. m1 ^2 D&gt; sum(1,2)5 i8 h% b; t3 r$ n+ e
3
7 G7 H$ B' u0 V
( _3 b5 h# Y" [, @4 L6 u; f// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
3 W0 }# B. w% Y&gt; (function(a, b){7 }' @7 n* |8 T$ E
  return a + b8 q" N1 C1 S4 P, K4 C! Y, y
})(10, 20)
9 g5 Q. C9 M% D' |0 ~6 h30! v( f8 l4 p! c# E! i5 [

7 o* w2 E6 z) _/ n) y: Z5. 闭包函数& J2 G. [4 i5 \8 p) q' ]
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数3 \  A/ r# Z1 a' }* Q$ C- G
var city = "BJ"% c' y' B" ^& ^" G+ e: H
function f(){
( f8 p# Z- H9 {# ?& ]    var city = "SH"0 }; b! [# ?& P: Q* w: z, _  S
    function inner(){2 o- X8 G+ ?  L1 w
        console.log(city). g/ |7 D- ~; j! ^  y+ }) I  f/ b3 {- I
    }5 R: t- s3 v) j2 g7 [/ u
    return inner, P  o- J: v3 w
}9 U1 H0 Y" Q, x' Y: H$ z
var ret = f()' ^' D2 ?: U" l5 m+ @7 Y( U) W4 |" |/ n
ret()
" O0 i, E4 M/ ?执行结果:
& R( G( @: X0 _7 o/ ySH$ R- k. d1 J6 e0 Y1 L9 E  b
  n; F7 a8 Y& c9 a$ ?3 E+ R5 p
</code></pre>1 ?) c4 F' T( d6 C
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
! x6 n8 V1 d- ~$ h" \7 q<pre><code class="language-javascript">var f = v =&gt; v;/ s+ l. I' T$ p% J# P
// 等同于4 b. I$ p2 s1 K* ?9 b1 P
var f = function(v){
! j; h+ s) C; `# i7 X  return v;3 b. m3 E; E, D
}8 X7 h' E* w( W7 o" @
</code></pre>' J, [3 j3 U: M$ }8 K
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
9 q) J# p# v! [1 b% _- q<pre><code class="language-javascript">function foo1(a,b){$ w, |+ e) H- G% X" I2 ]: Y' D: @. L
    console.log(arguments.length)  //参数的个数
! G0 S2 a& H: e* b5 `    console.log(arguments[0]) // 第一个参数的值
& `& k3 e( s7 V1 l  P4 J% X2 Z4 K        return a + b   * e2 Q) \2 f1 }
}' n' J; i2 y; ^& ]
foo1(10,20)8 h2 x5 Q. O- X4 }; N8 j5 L6 I7 N; a
结果:: ?' y  u9 p  C
2          //参数的个数 2 ^/ \: X; e: u
10        // 第一个参数的值
4 F1 y3 }2 t/ y. [7 m30        // 返回相加的结果
) Q# x6 k8 S, ^  }3 B/ I2 D" R) h</code></pre>$ C  Y6 m7 \9 ^) U$ S
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>* C0 ~# |* g8 q
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>; f1 |7 L7 f* v* B# K( t% W
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>/ C' n+ H4 E* n- B
<h4 id="281-date对象">2.8.1 Date对象</h4>
8 j1 q4 o' @/ h  L- j9 [1 Y3 N<pre><code class="language-javascript">&gt; var data_test = new Date()3 y# q3 G4 \8 u
&gt; data_test6 s3 n1 L+ D; j* P1 G
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
. q( q& L! y: q, K&gt; data_test.toLocaleString()- ]  j1 b: O, W0 u
'2022/2/11 下午9:44:43'
* S0 H. o5 ^' [9 [  X8 h+ T7 j
. W! ~$ p& Q8 P' ?7 ?5 O$ C&gt; data_test.toLocaleDateString()
5 Y4 G1 z% @( o- r'2022/2/11'
7 h) j  J# R7 K; C; A$ x  g- t% t8 y$ N1 s3 \5 J7 Y
&gt; var data_test2  = new Date("2022/2/11 9:44:43")  l* m' r3 H7 ]
&gt; data_test2.toLocaleString()! ^  v8 D5 C7 V3 p# Y( {
'2022/2/11 上午9:44:43'
* s& J3 t! e1 u% V+ U3 c/ m1 K+ T% e4 ^( |7 ^
// 获取当前几号
% {% t  A( v& g% k' t' u&gt; data_test.getDate()
+ O3 i# ?- V% i3 R9 F4 ?& t11
7 n% L5 m9 H# O// 获取星期几,数字表示
! O# c2 e; y7 `; ^# s( A4 z( R&gt; data_test.getDay()  
7 U7 w! J0 i/ O: y7 I56 ~6 L+ i+ _; M
// 获取月份(0-11)
  y( b4 i- v0 d- X: |) i&gt; data_test.getMonth()) \4 k+ A8 L1 j) D9 P
1
4 d" h: F. }1 P! {' b// 获取完整年份: p% r# T  l; [+ v1 [) T
&gt; data_test.getFullYear()
9 Z3 l/ t4 O- P: @* |8 b. {( Y( m20223 ]( K5 D/ V9 o% i( `
// 获取时
) C+ E4 h: P* j7 y" ]( }&gt; data_test.getHours()0 w' z4 a, k3 ^+ O4 B
21
1 r+ U4 _2 g; v, n  L// 获取分5 p) _3 ]+ R5 h. j" e" M' G
&gt; data_test.getMinutes()
9 }7 y7 ^2 m. _( |; v448 S, `( F$ F$ t8 Y  s# U
// 获取秒9 R) U0 ~* A( h( n' S4 ]# f$ T
&gt; data_test.getSeconds()+ q5 o, E$ a! m( ]
43
+ l9 O. h3 y9 x9 N// 获取毫秒, {# V6 p+ X  c+ G
&gt; data_test.getMilliseconds()# l. W  @; V8 |, Q
290
! X, c7 ^! P. Q/ X) d- I; y// 获取时间戳) q* D7 @( t7 I$ D
&gt; data_test.getTime()( ~+ T/ f& M" ]) i
1644587083290
$ U1 u. m$ A" y3 \& r& ~4 f</code></pre>; {. X0 L: d' r4 ?4 p7 a
<h4 id="282-json对象">2.8.2 Json对象</h4>0 N0 M: ~$ g  B# o; P( s; x0 h& s
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
, N# P! K  W9 k# s" S" G; c( [; WJSON.parse()  // 反序列化,把JSON字符串转换成对象
6 k' g0 G( E" b
6 X. t! h4 V3 o- G, g// 序列化
: U4 T' h1 V: F6 x/ I) C' x&gt; var jstojson = JSON.stringify(person)
) O8 q2 T' ^5 U&gt; jstojson  % `. a  M+ m* Y. R
'{"Name":"Hans","Age":18}'
7 o: e! A3 g' d; w; G
* R0 _. `* z0 `" b0 t' @; U// 反序列化
! U) _1 Y9 A1 }( p9 f&gt; var x = JSON.parse(jstojson)
' u- }( o# e" o' d8 P/ z9 G/ R! F&gt; x2 o) Y; U1 q' g) {/ F2 G, Z: N
{Name: 'Hans', Age: 18}/ Z& x/ H9 t# F. w5 E4 p5 H
&gt; x.Age
$ r* ?# u! r+ {& ~/ \" b1 d$ z18
0 R' I: j0 Z# L& }3 |+ r</code></pre>
5 g. W9 r0 h! |; z2 r$ s<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
* f4 w4 u( ~& d$ h" u5 t# K7 P<p>正则</p>
( p% G0 d& F- J, x1 h+ [<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");, d6 {6 K0 \  i
&gt; reg1
, s. t+ A( I( C6 V8 Y5 [. r/^[a-zA-Z][a-zA-Z0-9]{4,7}/
# T# M$ K7 o1 `9 r&gt; reg1.test("Hans666")
# K5 E$ g/ I" B5 rtrue
, O" @* z1 s: b6 F' n, w( ?/ [& ?: K/ j4 Z6 `0 K1 J  s
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/1 l9 o: t. X: T
&gt; reg2% W4 A" C: H# o  W
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 g3 y" F; z1 l&gt; reg2.test('Hasdfa')5 s& [) I% I6 ^/ D) f. j  g5 F$ b
true
, B2 A% M* i8 ^0 c/ S6 M9 M
4 k, x0 p# C2 T2 I: \6 ?8 A全局匹配:# u0 P- Y: ~+ Y
&gt; name% g: n# _& b5 {' V7 v
'Hello'' ]! R' U* w2 @/ {; s! G
&gt; name.match(/l/)
( e2 c2 z" _1 ]/ ]2 i" K( Y7 U% f['l', index: 2, input: 'Hello', groups: undefined]
+ G% g3 U* u( F# j4 G
+ B6 L" U) {7 t/ h- ^+ N* t&gt; name.match(/l/g)
5 g- I* o7 m5 |(2)&nbsp;['l', 'l']
9 u8 c" {# t5 I) n// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
# J4 \7 Z- x, ~; I: |! S) q  b: v5 N
全局匹配注意事项:4 V% u9 R# A1 `% K. |" R8 m( Y) ?
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 ^1 {7 X) g. h2 C
&gt; reg2.test('Hasdfa')1 }/ o9 B: t* X$ u( q8 t# x9 x
true
0 m0 Y1 B; j6 B  q% O&gt;reg2.lastIndex;
7 d/ ~. b: a7 }  P& p5 e* x' b6
( v( W% d, X: F  y, k! F9 v7 B&gt; reg2.test('Hasdfa')* o7 n7 m/ T, Z- o% z6 ^: [
false! ]$ u' r) l) Y8 A
&gt; reg2.lastIndex;2 _2 T) }* s8 p# P
02 }# Q* q- k4 E9 b5 ^& s+ e' e
&gt; reg2.test('Hasdfa')0 I4 n5 @2 G0 F
true
7 _$ a8 m, h* ]3 Q" _&gt; reg2.lastIndex;
, k: x! u" W( C" k) J" }+ ?% {5 ]6
8 [, A. I4 _' E&gt; reg2.test('Hasdfa')" p1 g, N' X. g8 K1 p
false
: j2 d" `& |( T6 I&gt; reg2.lastIndex;
* o( p2 f( B- b: V/ Q- r* V08 a; J( w6 f; S! E( r
// 全局匹配会有一个lastindex属性
6 Q1 R. A2 |$ z3 M( F&gt; reg2.test()
! T2 j0 p1 v1 ]; w( T: K. `9 t. O" Nfalse* [7 u, v6 \1 J) y8 Y1 i3 ?
&gt; reg2.test()
5 {+ `; J$ L  O% n: b0 R( y& qtrue$ }  x3 h* ^8 a8 g
// 校验时不传参数默认传的是undefined5 R% D4 C4 j/ z- B& V! I1 q5 J
</code></pre>, ~; J2 y5 X- r  Q( l1 W4 v
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' j5 Z7 Y. b: v, e+ ?
<p>就相当于是<code>python</code>中的字典</p>4 P0 @  F" _7 t5 [
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}* ^5 A2 S: ~; l% x0 \+ z& `; O1 _
&gt; person& B2 D6 s( r" f! i
{Name: 'Hans', Age: 18}
, v! {! `9 q9 S* h8 [/ f) c&gt; person.Name
, M8 E3 ~" P& z# \/ P+ J'Hans'4 ]% w  ^/ ?  D8 W) h  t7 d
&gt; person["Name"]9 L  d9 E0 x" E/ ?2 D" _3 ~
'Hans'& P7 B: y/ `: ^9 |4 f3 Y9 o5 |6 a
& Y8 R1 Z) H. Q- ~1 q, m' m* {
// 也可以使用new Object创建( F( B4 N3 _- ^4 P, A( q
&gt; var person2 = new Object()
9 U7 y, q6 D$ f&gt; person2.name = "Hello": u. r7 E" X# M. V- ^4 s$ |
'Hello'
6 m" V, M) n; v6 _' p% i: k; G&gt; person2.age = 20
; n3 D( O. d* U3 A* T* e+ O7 ~20
6 R2 e! m0 n- h  B; u" _% }</code></pre>* |- P' s: _4 j' `6 }# ~
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ f% V0 n  q: o' H, |5 k+ q; o( b8 W7 r<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>' B, X4 d. F6 w+ B
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>2 o) j, u+ s, w2 J
<h3 id="31-window-对象">3.1 window 对象</h3>4 _0 n( I1 M2 D$ ]3 m# d8 i
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>8 {* a4 ?* b' e
<pre><code class="language-python">//览器窗口的内部高度' v; ]: X( y" v+ x2 s/ r) ]
window.innerHeight
; o' L( R/ o3 F* f  k+ W* t706
! U5 f3 X' E; k; K//浏览器窗口的内部宽度
. l2 C' k, p8 Z( R5 R$ K, O6 ~window.innerWidth
$ Y* X1 b& u8 S- H15225 R4 B; W: T6 i
// 打开新窗口
3 G3 c0 x5 q3 @5 i# ?+ Kwindow.open('https://www.baidu.com')/ i! d3 h0 f6 R8 j0 e
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}$ q) |, T. i. p( X
// 关闭当前窗口, e4 G+ \0 j: {! K( h1 K% ?2 U
window.close() 5 ^! g1 ~+ s. ?
//  后退一页; h: \8 [& p, @( w1 a1 K
window.history.back()3 V; p/ D- g- }  m8 s2 Z
// 前进一页. O: ~$ ^. M+ y* _" }  I! O
window.history.forward() 5 b: E% b6 a2 n3 n
//Web浏览器全称! a. g" y4 A8 G
window.navigator.appName, d0 |6 G' l0 `* _# o$ ^
'Netscape'
9 p) z$ y+ ^+ u; t  q// Web浏览器厂商和版本的详细字符串; U; D! f; k9 h
window.navigator.appVersion
% L: l9 B5 I8 H5 s# ]'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36': t4 E* X: _$ t+ Y: h" Y* u
// 客户端绝大部分信息" |& l0 Y* J2 k. ?7 l, w  K
window.navigator.userAgent
7 U9 A3 i1 c5 r# n5 J/ \$ ^$ Y'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'" G( n& O( t1 p  F* s4 @
// 浏览器运行所在的操作系统
/ ^( N, }3 {- H5 awindow.navigator.platform
: _- c* M' K( l4 v. e6 O) N'Win32'
) P# e- Z9 H& N  y! S  ?; {3 S' G8 `2 Q4 ^+ G! U# K; v
//  获取URL2 M2 `2 f, }, c( y" O- \6 ?0 ~
window.location.href
$ _7 }# X3 h3 D1 T( G1 u// 跳转到指定页面
& O6 b' w. z; c0 B0 x' mwindow.location.href='https://www.baidu.com'
- p2 d  [& l5 j5 c; m4 H( Z6 f// 重新加载页面0 z; t( W! s) N" |
window.location.reload()
& u- A# r" u9 T- ~</code></pre>
3 T! Z# Q; _( T9 R' h" X' i2 y<h3 id="32-弹出框">3.2 弹出框</h3>2 A! W* D8 q6 ?' d' t( N2 A! }
<p>三种消息框:警告框、确认框、提示框。</p>
! k- E$ A( Y* S4 q8 s1 u9 `<h4 id="321-警告框">3.2.1 警告框</h4>
& S/ o7 E5 j. C2 b<pre><code class="language-javascript">alert("Hello")
+ R8 s8 a+ h( W8 g! o</code></pre>
% P& Y/ R5 p; ]8 l' E8 ]1 R& ]<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>8 j! B2 ]9 r1 A. M/ o  E* N4 f' U
<h4 id="322-确认框">3.2.2 确认框</h4>
' c1 Y' |" c) \) O+ l<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
8 T' S: {2 ?6 N0 R+ J: W/ d4 X- X<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
( G) p7 a9 k4 \( u: ?: E. Btrue
2 q# S  ]1 e; ^& \8 J. V) C&gt; confirm("你确定吗?")  // 点取消返回false- K: n( E6 t/ n. O5 _1 l/ i
false
. \/ _. I. `) V</code></pre>2 L8 |* M. C8 S  V1 M
<h4 id="323-提示框">3.2.3 提示框</h4>
4 \9 S) P+ _, C<p><code>prompt("请输入","提示")</code></p>: u' g  _% u/ H, F' a7 d
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>! D; W" Q3 l* p8 T' u  G
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>; ?- u( `8 j5 W; W' t
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
! p2 u) e; y' D) e8 J2 Z( E: s<h3 id="33-计时相关">3.3 计时相关</h3>  [# O5 y% X' V7 a  ]" N" l
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>/ g% q, M* Q- e" j- _0 v+ o+ j5 T2 R
<pre><code class="language-javascript">// 等于3秒钟弹窗
4 s4 ?; C- s: h, A7 IsetTimeout(function(){alert("Hello")}, 3000)/ K% x. \" Z+ d8 L: t
5 q$ n3 ?3 l) k4 {% O: x# B! a9 h
var t = setTimeout(function(){alert("Hello")}, 3000)) A' y7 \: _2 j* l& {9 ^

4 _) |5 N0 \9 m1 V9 _, I// 取消setTimeout设置" r  e' |! C* E; r  n
clearTimeout(t)
3 {% q4 \5 g( k- j' s7 {</code></pre>
0 O, L; y- u9 j( ^# r4 e<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
7 w; r. U' Y' N/ \9 E<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
; a) \$ [9 S$ U' ]6 u3 p<pre><code class="language-javascript">每三秒弹出 "hello" :
' u2 m- {  G3 ~* v9 ^" R2 zsetInterval(function(){alert("Hello")},3000);& x$ p/ y$ N" V! K
</code></pre>
8 o) X8 I5 h/ }0 f7 a6 V% e<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>5 b" Q0 [4 W; W' _" o& e5 ^! W
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
1 {0 h  ^8 ~% B' C; x//取消:& g$ ]! v$ B0 q" q
clearInterval(t)4 q! V5 P5 r+ U2 @: T% G' x
</code></pre>
9 ^4 [2 E2 }3 ~$ T
9 R& @8 x( Z8 I! _, u9 ^) a
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-11 04:32 , Processed in 0.070732 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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