飞雪团队

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

前端之JavaScript

[复制链接]

7995

主题

8083

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26315
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
: R7 V* [0 `" w" O1 j" Z4 _9 ?2 `$ i
<h1 id="前端之javascript">前端之JavaScript</h1>
% l1 v7 O* Y3 J4 ^9 p5 U. ~<p></p><p></p>
# Q( D. F7 q  q( @3 F$ p" V6 k# V<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>' g* ^9 i& R1 T  q6 T
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
- g: q1 K  v( x/ u它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>$ w" ?2 \3 r% ]7 E# d
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>! Y4 K+ Y2 d9 R9 P1 V& M
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>, U9 v  T1 e% ^
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
0 z# Q- j* l( o' {<h3 id="21-注释">2.1 注释</h3>/ e5 k8 H, h& ]8 h6 |/ S, G
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>/ |& A: ~$ s# [6 |; |! u* G5 Y
<pre><code class="language-javascript">// 这是单行注释" j* s1 K3 _" t+ B1 h& g

  z" Y8 k$ K9 p+ n4 J& Z* q+ o/*9 n! {0 }6 E1 F. }% ~5 h% \
这是多行注释的第一行,% ^% O/ l8 N, |
这是第二行。0 G8 d! n% T6 ?4 D! U
*/
5 W% F5 e. B2 Q3 d' v</code></pre>
8 }9 z  x$ [" u<h3 id="22-变量和常量">2.2 变量和常量</h3>
- |4 g* K6 l% r' i# ]% |: L" B* t<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>5 M  N( i* [/ t3 z
<ul>
  @1 F' g  K# X/ Q( b" Q2 j" C<li>变量必须以字母开头</li>) [" q, ?+ A6 u9 x7 w* w
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
& k5 x' P* Y# W7 G& h# @3 F<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
  w. |& m4 K% g3 b* G* V& S6 W</ul>* W) C) Y9 o7 f! w* F) x$ n
<p><code>var</code>定义的都为全局变量</p>+ H/ }% q  D: r! G
<p><code>let</code>可以声明局部变量</p>
, c% T9 Y# u! x" @/ ?' Z8 ?, f<p><strong>声明变量:</strong></p>: `8 N$ n! V- E# ^, Z
<pre><code class="language-javascript">// 定义单个变量# W3 s! n2 ^' w
&gt; var name$ l3 p2 k8 E) A; t0 H+ Y6 d! H
&gt; name = 'Hans'  x: O3 E- f& Q- j
//定义并赋值% l& O# o* K6 o* b( n# G
&gt; var name = 'Hans'5 a4 H9 z% ?* s: S+ W
&gt; name( j; y1 Z4 l: T  `$ w( [
'Hans'
3 ]! v% J- d7 e4 Z
$ i7 }! ~3 I! d// 定义多个变量
6 |/ Z  F) ?: I$ ?- u# q&gt; var name = "Hans", age = 18+ H1 N( {# \* ^% u
&gt; name0 |' O/ F; G  Q$ o( J# _; R: K
'Hans'2 P" Q; W& W% U% |& W$ g' ^
&gt; age
- I/ G& R* d3 P4 x7 e. l18
1 A( z! P- d% h8 O1 s/ v' ~0 @8 P) S4 j+ r+ c5 h, }
//多行使用反引号`` 类型python中的三引号
. y6 {! l( {8 ], q5 ~; g% x&gt; var text = `A young idler,; e. C3 C) C% J4 H: E. c
an old beggar`
* E" o0 \6 a# G$ m# V&gt; text
* d; I$ [/ d) v+ L; P6 N: O, o' n'A young idler,\nan old beggar'
' L5 Y% q9 P  ~4 j3 _5 S/ V' J</code></pre>
6 I* I$ m# N( Y/ x<p><strong>声明常量:</strong></p>
. {+ W9 `: B0 Z* o6 C  l3 R<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& C0 b1 ^2 I' S<pre><code class="language-javascript">&gt; const pi = 3.14& m- e* Z- z6 \$ ~
&gt; pi' D, M* p0 t4 {; b
3.14% x: m" Z) f) D- E5 d
&gt;  pi = 3.01
1 K" v7 a! Z( r' VUncaught TypeError: Assignment to constant variable.
/ N8 z: v* o- |/ P! n: c    at &lt;anonymous&gt;:1:4
' r) X; Y3 p& J' W2 A3 `: J! @, R( O% d& j/ q+ O7 S8 E) l" `. |
</code></pre>, c0 S" ]' F. K" }
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
* r, O( i5 J( |. r<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>/ D9 X% X* K$ o1 i% U# p
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
$ H) T% |! n4 V. U' ?- t<h4 id="231-number类型">2.3.1 Number类型</h4>* L- W  m% c5 x, l& e
<pre><code class="language-javascript">&gt; var a = 5
7 P9 v% @5 g1 O# N, Z' I1 m&gt; typeof a   //查看变量的类型  2 q. J& E3 m* T' d! K
number; R0 x% ^8 u% [' T8 S! l

8 j! Y. X9 Q7 b1 b$ m$ R&gt; var b = 1.3
8 q- e# t( l& }&gt; typeof b( }+ j( \9 F5 s9 v- L% ~* z
number: M+ @# w1 I: T' y

2 l: A" @; s6 V// 不管整型还是浮点型打开出来的结果都是number类型' C* y% t( M( e

7 W1 \* P/ q! B: h9 W7 v/*
. {7 h$ y. T* k* QNaN:Not A Number6 n' D: ~5 o, f" {# I
NaN属于数值类型 表示的意思是 不是一个数字6 H* S1 }  Z/ u5 S1 {2 B6 Z
*/3 D5 b# [' ?, e; I/ N8 Z, }

9 O5 R! I  W' x, G* t" R4 c8 [/ M0 UparseInt('2345')  // 转整型
7 }! Q& t. \" _2345
1 _% u; T7 J9 \parseInt('2345.5')0 r1 m) @  q3 [
2345
' n* L- y) i2 y) i1 F  ?parseFloat('2345.5') // 转浮点型
9 V3 W" v, n: V0 m0 ?, V* s4 D2345.5
  h* x" d0 u3 ~- W5 G' C$ gparseFloat('ABC'); Y/ ^8 c+ s" R9 c4 U7 T6 ]
NaN
$ n" ?: A% }/ n: t9 rparseInt('abc')0 W( w! K9 l) j8 u/ C
NaN
$ b: x4 n- T2 G& @. O! h  X</code></pre>
! x1 N& a) L; n+ N4 Z0 V<h4 id="232-string类型">2.3.2 String类型</h4>
- ~1 z* K. z! x' }<pre><code class="language-javascript">&gt; var name = 'Hans'3 Q7 t: k" d* H! T8 r
&gt; typeof name" H( q8 B. m5 q0 D
'string'7 |% L" K1 G0 b! ?. X. K( v

- W+ e, k) E- \//常用方法
# y. P, m8 c; I2 c& |. Y// 变量值长度4 g) _1 g/ ^8 W1 v: p8 S6 V
&gt; name.length5 A* v0 Z  S: ]; }( s1 B
4; C8 m" p7 t1 o9 a; j& T
// trim() 移除空白- q- g9 |& l* p; f, ]. Y
&gt; var a = '    ABC    '2 D2 m: K9 x/ A: m$ r
&gt; a8 y) k. }1 C+ `8 b! y5 H
'    ABC    '# f2 j0 l0 y; |* b8 I2 F! K* T5 e5 @3 Y
&gt; a.trim()8 t7 E6 e' W' L7 D  L' t5 E- o& B1 Y
'ABC', U1 R6 d! d0 ^9 Q+ S
//移除左边的空白
9 J! s5 o/ G5 H6 ^" _0 ]&gt; a.trimLeft()% b" N. z8 }$ C4 P: M& k" l
'ABC    '7 p+ c- w2 s7 c
//移除右边的空白; Q. s+ q2 Q* M3 t5 q# s& v+ |
&gt; a.trimRight()1 `* R4 N* L+ a8 C
'    ABC', w7 c- a( h$ p+ p! _8 A) i# a) p* [

+ G9 s, f; `3 |' B//返回第n个字符,从0开始
' a2 w$ j, x! \/ ^' A" w&gt; name
& [4 e. ], d4 z0 O# {, G$ g1 @'Hans'
( m! g$ y7 d7 W/ V&gt; name.charAt(3)
) i. \  E+ G9 t% R/ }' F. u/ a's'6 _0 L) U' W% B) ^
&gt; name.charAt()
  h( P4 e# D: y" m'H'6 L# ?! H9 _1 V8 |
&gt; name.charAt(1)
* ^3 |* Z& X4 v9 Q6 L1 Q1 D$ s'a'
6 W& x. }# C" |9 ~
' [' T/ i6 T' Q6 [* L// 在javascript中推荐使用加号(+)拼接% }. x4 m, Y) L0 S! o* M8 E
&gt; name" N# y: _5 y8 a# K! m
'Hans'- D6 a- p! J9 q5 a
&gt; a; N* n6 H+ W, j! g
'    ABC    '
: x4 K8 Z: Z' i&gt; name + a1 u9 I- o0 d0 P2 S
'Hans    ABC    '6 D5 E2 J3 W+ n, I" [; l
// 使用concat拼接" T1 d& Z$ ^) D$ R& ?( Y, J
&gt; name.concat(a)
  V9 r/ l% m8 K+ l3 z: w6 I'Hans    ABC    '
5 b1 W0 A6 f: q/ j: u6 {7 [+ v6 W8 a) M3 a
//indexOf(substring, start)子序列位置9 K, h0 X/ g. ?9 [5 _# L

  ^. L5 Z% J& x&gt; text4 c: \; D* B: [2 o3 P
'A young idler,\nan old beggar'
+ \# H+ I# H- D8 `& q6 e$ h&gt; text.indexOf('young',0). X3 h( y7 n" I* I
2
! k; J+ u, R! H6 J: ?& K7 Y
, E" w, b' @# C- ^* h//.substring(from, to)        根据索引获取子序列. j4 ^7 i# C& k  O/ f) f- g
&gt; text.substring(0,)
, Z8 P* Q! W3 G0 \, ?'A young idler,\nan old beggar'
: s3 d+ t- }5 f5 {) E, m/ E4 w, G&gt; text.substring(0,10)
. o; P5 Z7 m$ ~; h  z1 o6 `'A young id'. a4 D1 m2 O9 ^# g& Z  h+ H6 y& |

3 {4 r. [( g5 N0 d* {; m// .slice(start, end)        切片, 从0开始顾头不顾尾
* X( v; X6 ]3 F&gt; name.slice(0,3)
; B# ]$ y3 ~2 K5 }  A'Han'
0 ?( |" ^( ^7 t9 O' H. \$ Q. I0 p& c: I) v3 x; G; W5 R3 x
// 转小写6 c/ E, D' U9 H, t" p2 t
&gt; name
) M8 J  H1 a6 J& I'Hans'
# t, L- W2 A( \- ?&gt; name.toLowerCase()
: `9 `$ {0 A  ~: b; \'hans'
" L5 S: M, A$ |! U1 r) l9 r; \# T// 转大写
3 ]9 O. m$ g( E. n% x# u4 R4 l&gt; name.toUpperCase()- N& R8 @0 O+ d3 N9 k
'HANS'
( P0 s% M6 z' P* x8 d
+ u; g" k6 D0 {) y( `// 分隔/ s" a$ x' a8 R
&gt; name2 _5 _" R( T+ ~7 t
'Hans'
! D# S5 F6 ?( ?7 ^$ k* P&gt; name.split('a')
" ]0 T" j( X, n+ \, s7 U) S8 |(2)&nbsp;['H', 'ns']7 R3 V2 u( z0 c3 q& B) C
</code></pre>
. t, U6 ~7 g) ]- W<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
0 U& I3 v2 g* d9 S$ b<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>. B5 z* x) L  K7 M+ F
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>7 C! L' Z' G: H
<p><strong>null和undefined</strong></p>1 X9 f' e: q  Q8 v. _
<ul>
3 U) R1 Y! h# H* B<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>  C3 m8 N2 I$ ^( K% M
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
2 D0 Z% @  n( a9 S</ul>
$ g) m' ]# `2 I: X4 n5 r<h4 id="234-array数组">2.3.4 Array数组</h4>
. ?# R2 b. s6 K8 ^& C<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>/ D5 q- v# E6 T: M. m5 \
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
! T/ b8 c. q3 y7 E&gt; array1
* n5 y% V) C2 K" x" F3 T(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 N4 c9 r5 f2 g; l0 b' S
&gt; console.log(array1[2])  //console.log打印类似python中的print
; g  z' H; ?# @1 k& T: p# y3* s# [; h* r% c" }% K$ @
// length元素个数( n' _. [# _; ?: r  I- e
&gt; array1.length1 I4 k0 Y6 R* h3 Y$ {  c
6. s0 ?" D2 s4 F( I; ]
// 在尾部增加元素,类型append% C8 s* s1 F4 ^2 y& o, {8 R4 k4 w. t
&gt; array1.push('D')
9 H' r1 I2 B4 f7
0 |% v" l1 M7 }: z4 u7 e3 d&gt; array1( Z$ _/ X9 o( L. l$ @
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
2 ^& [6 f8 N9 |- d5 |% d// 在头部增加元素1 Z! b& n. p2 P9 {
&gt; array1.unshift(0)' Q3 j" J7 ^3 w0 c5 W& [/ y0 D
8
  ]( B! u: ~& ~/ Q3 v&gt; array1; {. w3 G6 N; I9 y7 K
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']+ f" q- f* a# o# Q1 A

. a2 ]! T1 F) o5 W2 u//取最后一个元素
2 ]2 Y5 M/ T# j&gt; array1.pop()
3 E9 O5 t& z' D: Q% u% E'D'
! h' a* ^7 ?" s' O9 m. v- Y0 `1 z# X&gt; array1
; ?6 O( ~! X0 i' K% e2 L; o(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
1 H( W9 B/ s: C% z# S//取头部元素
! G! k+ Y# ?  ~' d9 t&gt; array1.shift()
6 v+ q) I6 K7 ^5 T0
& \% `( _" q7 @- H0 ]&gt; array1
, `! b! [+ C. T6 W* @(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  F: U9 T8 l6 I4 g! u0 w
6 q' J3 ?1 o6 ]/ p( Z; L$ X
//切片, 从0开始顾头不顾尾5 B7 _; z; x8 H% |9 _% \
&gt; array1.slice(3,6)
8 J# j! F! t+ r+ ?! o(3)&nbsp;['a', 'b', 'c']
; ]9 j/ T7 U* a, [// 反转
0 D# C3 x$ k/ i. h&gt; array1.reverse(); x8 r! ~9 j) u2 U0 x1 a
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]- O0 H2 x% o- C9 _
// 将数组元素连接成字符串
1 c" k$ P/ o+ o" U&gt; array1.join() // 什么不都写默认使用逗号分隔! M: J$ }8 M! j3 `& d
'c,b,a,3,2,1'% z/ g- P2 i0 z# u9 G6 G
&gt; array1.join('')% ~" S' H2 q$ J. s- o
'cba321'
3 J, u+ ]" B( o* P5 ~7 V&gt; array1.join('|')* k7 v" z4 n( h5 C
'c|b|a|3|2|1'
( I& c1 I. P" y- [' K8 Z$ R) B% Z- j' E6 k
// 连接数组
' f( e4 j. M1 ^( S7 B9 q' o&gt; var array2 = ['A','B','C']
$ M* H5 w. G- e0 |0 A, x&gt; array1.concat(array2)
: z6 W. k- d( e! }% C(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
4 l/ n' u2 P% @+ r, S9 G! p3 }" h& \$ u
// 排序
1 A+ c' A7 t- f&gt; array1.sort()
8 O' |' @  @& q( i- m(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']) S3 m1 P$ ]* a/ X8 z

7 y$ ^, S4 O6 @* F( S: Q// 删除元素,并可以向数据组中添加新元素(可选)
4 Y- K" s# }: L! F  h+ `&gt; array1.splice(3,3)  // 删除元素4 |# X6 M% v1 i
(3)&nbsp;['a', 'b', 'c']
: u6 S) D2 _) W; T  }' ^% \' z&gt; array1: G6 b' G& t3 C# H$ ]  E- W1 Z
(3)&nbsp;[1, 2, 3]
- U$ X3 o* |( N. \&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素' ^' n: G9 m5 z. g( b
[]9 U$ G! a' q- ~1 m+ r
&gt; array1& q0 x" [  {0 v5 s# }/ }
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
  Z4 x$ }( ]  j3 m0 g, w$ w7 Q  o6 L9 D" B
/*
' H6 p& A( h! v8 xsplice(index,howmany,item1,.....,itemX)
! F3 q8 n, V+ i6 A5 F4 g. w5 Xindex:必需,必须是数字。规定从何处添加/删除元素。7 z, n5 Y' ~, a' P5 T( a: B+ b
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 f' H1 F7 @' P) v" w0 t
item1, ..., itemX        可选。要添加到数组的新元素
% l8 K% A) X2 M% a/ v8 I2 D+ K*/
+ C( y9 i$ b' p( U8 h2 f9 A- D- t% d; H* p* o4 H) y
// forEach()        将数组的每个元素传递给回调函数, \. z) v  F: y2 o; C, ?! Y. w$ I$ W
&gt; array1.forEach(function test(n){console.log(n)})
3 Z* q- o+ ?" h8 b( v9 x0 h- M* i4 ^ 1, J* @; j. |# _' H( h# Y9 x
2
. f$ s; ~$ y, l" h% _+ { 3) F. V: s# {# X! Q: r$ ~, b) y1 k, E
A
: m5 S, f8 G, v7 G) y6 \- L B6 `# v3 j4 {6 |! Q
C
' |+ p8 g, I% {' X// 返回一个数组元素调用函数处理后的值的新数组' D" P/ S. J; _0 t4 V) N
&gt; array1.map(function(value){return value +1})3 K6 H7 V" |/ B. P3 V. D
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']6 Z  P( z1 m" \/ u9 U. q
</code></pre>* z7 j- G& x/ c  m
<h3 id="24-运算符">2.4 运算符</h3>
1 T4 i- |' D- P/ H<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
9 p% P7 q; D% Z" `4 H<p><code>+ - * / % ++ --</code></p>
% Q, K% y& _+ E+ I' J" Q4 o+ k<pre><code class="language-javascript">&gt; var a = 6% X5 s$ J1 F$ G8 c" b
&gt; var b = 3
" e  A( |+ z% ?( r- S! v( A1 I% h7 g( g// 加
$ y! t6 G% F# z8 p/ o4 {&gt; a + b
, b& y% j+ q/ N) @2 R, z9 v91 x& y' V9 Y; U! k2 \) k# S& x; y
// 减
% H8 Q% O3 I# F) r* l0 c&gt; a - b
. h' w  A" c1 {7 F+ @6 ?3- a+ L$ ~% u/ n* g
// 乘
' p% j+ R! M- |. R&gt; a * b
3 e/ N- W) O- ?; ~: o; W' S3 C18. G- s2 f2 f' K: K/ {/ i) ~! q
// 除
6 S. J4 y; p3 O) C&gt; a / b% b' C+ d  {9 W  H6 b( H( h% m
2! n* R6 x" g( s, `% \& Q- t
// 取模(取余)
5 |! d3 h, M( j  M&gt; a % b- j: x7 _; Q; [3 B$ p; A, u$ i4 L% p
0
  b( l% M3 l* J5 Y" E// 自增1(先赋值再增1)5 A* E; }; s1 m, V
&gt; a++5 ~3 U) ^, h" x6 u7 j, J
6
# b- n9 S" q6 X- [2 g# d# m& U&gt; a4 Z1 ^0 }& v% l8 ^: W0 f* b% \0 I7 z. ~
7: S4 V9 t" x+ k  r1 X2 e. C
// 自减1(先赋值再减1)" u% P4 Y% D2 S8 z; F, b- M: Q
&gt; a--9 D- X7 F4 D" c0 o' i. E
7
  ]0 E8 ~9 @& H* E0 X  ]! t&gt; a
' L3 C' Q3 P6 H2 n3 I60 |8 ?; F( r, g0 [# `
// 自增1(先增1再赋值)
% E7 r1 [, P+ X" o0 `&gt; ++a
' W# m8 O; b! Y0 i1 U7
4 L) h% ~  p! a) z2 K) T& r2 O// 自减1(先减1再赋值)
) o/ j! r# P8 E" g  [&gt; --a
. J. |' K+ z& }# f% q3 d0 V6
- a: A- T1 a6 g( R, N&gt; a
! @$ i" d! v+ u8 E( _66 \8 h( V: T" s! Z) E. ~

- k$ R( u% ^. t6 W8 I" z//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理+ d! b4 `- ^5 i  [0 g( C
</code></pre>
7 c; c' Z0 ^, T/ d9 b/ t<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  X; V3 f0 \2 w5 S, P
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
, r+ m4 x  m- z% U<pre><code class="language-javascript">// 大于. _5 H6 T6 X# o* {
&gt; a &gt; b
: A1 ?- e, ^, Z1 e' S% c5 ?' }true
" f% F! y7 U) n1 C// 大于等于& Y4 O4 J: \1 w- G, T
&gt; a &gt;= b: \- G+ X" Z% p
true
, `" _' k5 I: ^1 L2 w// 小于
+ L" Y, C& Y+ g/ `  A2 R&gt; a &lt; b
8 G( s$ t8 O. gfalse* U1 m2 H$ H. f) L0 w: D
// 小于等于+ f2 z0 t# u4 x3 E( w3 `
&gt; a &lt;= b6 U# i3 u, D7 i  C
false
4 i8 X; n8 v0 h( Z5 W/ L// 弱不等于9 ^; n( S% Z, M5 }6 X" r
&gt; a != b
1 ~% x) y1 a( j  Dtrue
' n) I( ~7 D+ `  U& R// 弱等于4 q5 L. L7 i; H7 Q- k* i) J, y) p
&gt; 1 == '1': A1 [% r% W: \
true
5 i6 M% u8 Y; Y// 强等于5 B" y+ O0 e0 \5 e
&gt; 1 === '1'( Y  Q# s" s2 k
false% @1 ^* h8 |! z1 g+ ^& H- C
// 强不等于
. ~) \  Y( m  {% g2 _, G&gt; 1 !== '1'
0 u- _) i& O( `+ [  j$ `true1 J6 u9 e! P1 ~, G' N

' |. U9 o, O- ~% l9 y  Q/*: t6 z0 ^8 ?9 K3 R
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 q' _/ y; F* r6 q
*/, v/ t9 }/ v% F. F" E8 D$ s
</code></pre>2 J$ ]3 A* `! c9 C# h
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>9 T: K6 \& v& W" \  m+ K2 E6 S. [# K
<p><code>&amp;&amp; || !</code></p>- O/ {1 D$ Z2 v$ R6 `
<pre><code class="language-javascript">&amp;&amp; 与
+ W0 x: R4 d( V|| or
8 k8 s% _) o6 ^! 非7 ~2 B0 x6 g/ z; L  d- W
</code></pre>
& q, r' s  b6 P: G" `/ t<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>& f$ p6 I6 @3 f( z
<p><code>= += -= *= /=</code></p>
- w% Q. I; ?( ]. X& m; X( F<pre><code class="language-javascript">// 赋值
, a9 q* p! `6 F1 E# k&gt; var x = 31 E7 H' S/ T  d! I5 ], n- V+ y
// 加等于0 c0 J" a! c$ \* D. O
&gt; x += 2
4 {3 \$ K+ Q/ v( ~' x) ^5$ t% Q6 F# F0 T: ?0 U7 p5 V
// 减等于
% E! _; S; a& l  s&gt; x -= 1& E; ~3 {+ p  W  P2 z
4
7 i9 o5 j4 E. Z" m) O9 j8 W// 乘等于
: I" X$ o/ u& t  L&gt; x *= 2$ h0 z' U, O! o+ ~, m& s
8& I0 z' [8 f$ L" Q
// 除等于( |; I' Y+ I5 S3 ?2 N4 o. o
&gt; x /= 2# G8 \3 Q/ w3 g6 v8 E* g
4& p# b' r- m; e  e6 O
</code></pre>5 X# R4 @/ m2 |! p6 n
<h3 id="25-流程控制">2.5 流程控制</h3>
, K  T) z9 `* Z# }2 q' O, C<h4 id="251-if">2.5.1 if</h4>
( Q: [0 S" H/ J) \6 S: D<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
+ v# l4 L2 {9 J3 L7 X( v% c& J1 q, U" f8 p
&gt; var x = 3
! M5 }% c5 [* h. y&gt; if (x &gt; 2){console.log("OK")}, J3 S; {" C8 y, ]; P
OK( L8 H7 b: W9 S: }2 D7 j& A! E; N

& o" P! d/ U( n2, if(条件){条件成立执行代码} ; U' G1 w9 k1 r7 O7 b+ z, L
        else{条件不成立执行代码}% ~: A) Q! D/ n: F( L  {4 O6 F
( o. v' k# }+ P3 x& ?2 B: B
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}: a( L' s, w. A) s
'NO'
8 B! X4 j; x6 g+ w* {' j! [( {2 o4 E/ ?. M
3, if(条件1){条件1成立执行代码}
  u' c2 `) ^0 p7 T; \0 a8 i        else if(条件2){条件2成立执行代码}
* T; Y$ a, k/ T4 W" F. L    else{上面条件都不成立执行代码}
( |7 f- J+ i* z6 T5 x# ?4 S' l, A! t! V
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}% b) G' |+ f& R! Y0 J
Ha- t2 X0 S3 a& Z. O
</code></pre>
6 ~" t( `+ E2 \4 A<h4 id="252-switch">2.5.2 switch</h4>
, `# b8 S2 w- U<pre><code class="language-javascript">var day = new Date().getDay();
  Q8 `0 s& z; O0 s) \6 E+ |switch (day) {; S% @' F' r( V5 P. a6 N
  case 0:
3 H0 `( F$ |6 b$ o7 @1 ]  console.log("Sunday");
# ^$ v5 X+ d) \. F7 ~4 x# |. c  break;8 @1 |( ?, V' ?1 e6 u
  case 1:9 V) u( d) S2 Y: T; x, |
  console.log("Monday");* u$ p, a- j2 u' [8 W' i% Q
  break;
- I! `( D3 s  s  X! ddefault:* O6 `8 k2 J' w- @' m) d
  console.log("不在范围")- C' q! D' ]; {( ]6 X
}
/ n2 ]( H9 ]9 Y7 J9 o4 ? 不在范围% w. ?/ b5 N1 e0 z" _
</code></pre>
* t8 ~) p( g* l2 }<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
2 v1 {3 {! w. a8 x<h4 id="253-for">2.5.3 for</h4>
6 X+ S, X0 D0 T$ c  i; V- S<pre><code class="language-python">// for 循环
( [  Z1 {" c, Z; x& q        for(起始值;循环条件;每次循环后执行的操作){! a' G! E' A( T# y
        for循环体代码
% i9 F3 g- d& ?+ R! h    }# s% S  y# k; m% ?4 g

  n( d  ]# V8 f! A8 l8 L1 D2 V- q% F7 Wfor (var i = 0; i&lt;10; i++){( h' p3 ]; ?3 I8 Q& ^- j2 ~2 F+ P
    console.log(i)" A' n0 D- ]' U0 X: |  I* U" [
}
* ^. N& m- E+ y6 Y! P6 V6 u        0
1 Y6 B: Z# h0 `6 c' Q; u5 k; ^1 |        1" B- T$ r/ O/ V
        2
+ K9 q" |8 N6 v        3; v: F) ?7 W; r& u
        4/ X/ k% A2 e! L6 f" M. E
        5
4 M' ^; H0 _( J$ W  v, y- Y        6
' f% k/ y: A4 J0 P; I2 A, _. g        7, S8 ^9 ~% {8 k8 e
        8  K# w  a2 c; U; u! N
        9* ?% ^% g* E0 D) V/ O2 z
</code></pre>
; }( P' Q" H. G: k# [% Z<h4 id="254-while">2.5.4 while</h4>
! T1 Z3 l! g; T! Z1 C0 U1 [<pre><code class="language-javascript">// while 循环
4 M9 u( Q! X2 ]3 r" A3 i        while(循环条件){$ h' ^: b8 I( e' u
        循环体代码
" W9 [+ l4 G7 H4 I0 j* ]    }
- D- e" T: I' Z$ H$ m: P' H6 c; d8 i/ r0 P
&gt; var i = 0
* Z. s2 y$ t, [1 X( U&gt; while(i&lt;10){3 r3 i; y8 }4 u6 v& A0 d& H
    console.log(i)
: z! n4 N6 i! j9 u% P- p' `    i++# I. ~$ m$ o' v& a3 j
}
1 {+ i8 a8 T. K  M: ]( X3 p 0( Q' J: c& \' ?# i
1
$ ]+ l# Y) K5 k7 _: N 2
; O8 `2 |3 s- F) H1 y1 D! Y 3
3 ]' D& N7 N, L6 b 4
9 l$ k" f! z: }1 w+ }+ k 5
5 {5 T* Y1 R  L' u% B! [3 h 6
' @$ b' `" W" [7 t1 S) G 7
+ ?: [, H% X7 U2 k6 J 8, v! e2 T4 W, l8 o
98 T! \2 m9 [2 k
</code></pre>
. H) ~* P! ]/ _: r; m2 m8 \7 \- o<h4 id="255-break和continue">2.5.5 break和continue</h4>
7 a* l; \4 A- [& \$ n<pre><code class="language-javascript">// break& Q1 ?# j  q; ~( s& O# h
for (var i = 0; i&lt;10; i++){+ x5 h) D( N5 n* t
    if (i == 5){break}
! ?. ?! l; U6 S& S0 \% H    console.log(i)7 @: Z6 R- q) E" O
}
  A+ [2 L# g! }# L3 C+ E7 y" A 0$ p; P- R/ K" K/ I$ w% T& J/ Y
1
8 v  }7 R# F  Y 29 R3 r3 D' {" d" Y
3
  L, D9 _+ R* j  N. F 4
- Y1 t# f2 z; Q) R0 n// continue( Y* U$ r5 x6 e) e# m
for (var i = 0; i&lt;10; i++){
9 K+ |/ P8 c* I+ ?$ c    if (i == 5){continue}; F; D: D& H9 c2 G
    console.log(i)
2 Z+ h/ k0 u- p}+ \+ X& y4 Y% m- D
0
& X9 l! `: B7 I/ B$ _ 1
$ W9 d( x* E, e5 A! o, U( D 2
; O( \( x' V- R, _2 P7 F% K 3# R1 u& U, h+ b+ ^& u4 J
4' c6 S3 n% _) M$ s  \  ?4 `- O: T+ E8 n
62 v* }* j, b* f- y2 I. B
7
; `9 l/ {$ y( \; m 8
9 u* h! L$ n6 k; ]5 K' w 9
! k' c2 `9 {. X: H. `* X, o7 F6 {& e: w/ v2 p' B" b- q. Z9 ~
</code></pre>3 ]3 J5 T8 |9 Z& Y9 p% i/ P, W
<h3 id="26-三元运算">2.6 三元运算</h3>
/ L; U7 a9 U, M& }$ b<pre><code class="language-javascript">&gt; a
: P' ~+ f1 `1 {! L5 I2 O6
/ y1 B3 k1 L- n' i9 x&gt; b
' d; r( c  Y0 f& Z  U/ c; E6 Y/ ~$ U3: l: t% B( C+ t% R  I

" S) n4 h9 s) \1 b2 n4 w% u' [: J//条件成立c为a的值,不成立c为b的值' Y$ c1 c' h' @  i
&gt; var c = a &gt; b ? a : b! }5 K. d6 a& e) [8 u( d9 [
&gt; c7 y# y8 r& _" J0 `
6: I- O" _5 v7 C, d
8 l: {- a! m' E9 c% y
// 三元运算可以嵌套
' b1 y& R3 N8 V+ D, `( Z0 [& q! Z</code></pre>
3 d/ p% V9 t2 v5 v5 ^9 E) M5 \# y<h3 id="27-函数">2.7 函数</h3>+ \, r+ V. m7 |% x5 E% T
<pre><code class="language-javascript">1. 普通函数
4 j1 E  W; m' T$ W6 H5 v&gt; function foo1(){
. v5 G8 W* Y" m+ x, l    console.log("Hi")1 [/ E+ |- P, q& b; Y$ W
}4 s& ~2 ~! V' [8 B) M% R/ v

- T, X( ~  ], u1 ?1 R4 V3 w&gt; foo1()% {' S, \! M1 ~( G+ u7 p
        Hi
4 p; Q' J" u& E. _  S: @2. 带参数函数7 }  D- ^5 @+ A) `/ B' Z
&gt; function foo1(name){
1 w9 ]7 V2 P) zconsole.log("Hi",name)0 p" s4 @8 q: L4 q0 l( g% S
}
4 Z  P9 {5 U5 D7 }, X
$ M+ w; |7 z' {' F+ L&gt; foo1("Hans")$ `9 q: M( p9 {$ ^! T1 F4 }
Hi Hans$ q1 F& U/ F, T) V7 {  O, g7 L' `
- _4 ?1 [4 Z1 ^/ o3 h/ b
&gt; var name = "Hello"1 W* b7 v( O0 D* F
&gt; foo1(name)
/ x  u2 [2 i- ~' a+ s% l% ^( t0 \Hi Hello/ S  a# x/ [; X! [5 u
" c6 `2 F+ E& R; F  ^" k" c
3. 带返回值函数
0 W* h* [9 G2 r7 ?: W: s3 f/ u" A5 k% @&gt; function foo1(a,b){
  q! p* Z6 c; T  a% k. m        return a + b   
" {2 p) W3 s( z* L* Y; T}4 D6 Y. Y( K$ l
&gt; foo1(1,2)( _, K; W4 x/ w/ q) q6 |
3+ u% O' l1 \( R; t8 Q- @
&gt; var a = foo1(10,20)  //接受函数返回值2 r% ~8 ~+ |% C, S
&gt; a8 x4 B2 l& M. U; }2 ?& M
30
1 n0 d6 F4 o! g9 m
1 Z; l/ |* ]5 M+ N* e$ ~, u4. 匿名函数
9 S; n4 f8 i2 ]4 E9 q/ d% J&gt; var sum = function(a, b){0 ^5 Z, o" a! G7 a$ n
  return a + b;: {8 w/ a4 t" M2 E$ D
}2 V) i( S$ ~- Z! y7 {/ P" s& x" c
&gt; sum(1,2)
4 X9 y( p9 E& o" e& a8 p! L- v2 c3
! `8 g5 W& w" H6 ^/ V& Q3 n7 M) O+ b8 A" x8 D, L
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱6 O! P0 X4 M# {( j* Q
&gt; (function(a, b){) n/ r% r; K. o' R+ x
  return a + b# g, Z6 K6 w, |
})(10, 20)% E: {( R1 |$ m  s/ t2 a1 e' q
30( f( `' T. w& D7 C" O; c& {
  f4 z. i" ~; s! Q( w& B: l& P
5. 闭包函数9 ]. z3 }5 e8 W" Q3 D* B
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数5 J) O' I: y: g5 Q) w( `+ z
var city = "BJ"
, ], Q. [  i& Lfunction f(){2 H1 b. [- c! T( m6 a# _- Q6 n
    var city = "SH"4 m7 R. @  M) l  C6 i7 z
    function inner(){
% d9 H8 Y3 A5 ^( n$ i  f        console.log(city)
4 W, s: ^' i: \: g+ [) K    }
7 j- b$ P) h1 l: k4 V3 P# ]    return inner
/ h6 B' S8 U1 h; v* k4 s9 v& \3 C}
8 S  g) _/ e' ^& c. kvar ret = f()# ~3 p' x$ g7 X" ~- h
ret()+ @+ `" m; H! o1 C
执行结果:$ ~1 n5 X1 Z/ o& |
SH
7 U  k, I4 @: h/ F& P" @
' p! L% ~+ q8 [( ~</code></pre>' i* m; K) S  m; s
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>, a- f; p' O" A" p5 N
<pre><code class="language-javascript">var f = v =&gt; v;2 z2 Q  V( d7 O) @- e! F! Z
// 等同于
6 w0 _* @. y% `; [var f = function(v){
! @9 h$ Q4 ^+ F! ]: P% X  return v;* F+ P. t, p" o" M$ D0 ~* ]
}1 h  |) p5 ~3 n6 G+ t+ D$ y
</code></pre>% S/ v6 o( @! h6 u/ v4 h" b
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
2 `; L( m9 E* m5 }<pre><code class="language-javascript">function foo1(a,b){
9 ]' X/ f7 T" k# Y, g. k    console.log(arguments.length)  //参数的个数
6 S7 m7 z( }1 s- P7 U# r    console.log(arguments[0]) // 第一个参数的值
1 S) g: f& L  h        return a + b   
+ M; b( c1 v$ }/ G* Q}9 I- S& ^5 k' k$ ?3 h6 h
foo1(10,20)
+ y2 c% E. T) H- h6 ~结果:! `, d4 e! i  u; d. r7 c
2          //参数的个数 5 o$ U# N* O% Z) `  O
10        // 第一个参数的值
3 e, \0 ~8 C3 D% g& F7 z. T6 `30        // 返回相加的结果4 I6 U; x5 W4 |, g
</code></pre>
1 W4 R" {: m) n! h  t. p: z5 S<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
+ d5 @* j1 A4 m& v<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
5 o5 ]# J3 ^2 {7 y<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>/ T6 ~" U% b! t- R# H
<h4 id="281-date对象">2.8.1 Date对象</h4># K5 T2 G( t2 O
<pre><code class="language-javascript">&gt; var data_test = new Date()4 Y1 `6 o" s- }2 E" S3 g2 `2 z
&gt; data_test9 A- v; N) {1 R0 m! z% D
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)% i/ y% ]4 e2 ]2 D2 T
&gt; data_test.toLocaleString()% B& ?8 c4 I, k. W3 c% i$ r  {
'2022/2/11 下午9:44:43'
3 D8 r& w5 ]. A4 k8 [, m6 j# V: c  _- T; ~
&gt; data_test.toLocaleDateString(): [$ e/ ^' T- \
'2022/2/11'
8 |& V& x! Z* a8 ]* G1 |3 j, _' P5 ~9 O
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
. X+ W" ^) B7 n7 p&gt; data_test2.toLocaleString()" d+ a: {, J! C2 B( g- R3 Y
'2022/2/11 上午9:44:43'4 G1 R/ I' y# T. @
% S! {( N) a: d3 w- O# d
// 获取当前几号
9 X; N, g* }$ e6 t3 @# ?# {  p1 o: k* o&gt; data_test.getDate()
& l% p, Y7 v3 `  A11
* q  {  L" f/ A6 [: A8 l4 B// 获取星期几,数字表示/ U& O% N5 `* b/ `- d* a$ c, f
&gt; data_test.getDay()  0 l" Y0 s& W2 k3 a% c
55 N) ]# o8 c/ m4 V: Z
// 获取月份(0-11)7 d  t4 g  y2 w4 F. R* Z3 a
&gt; data_test.getMonth()" k9 j/ `/ f+ g+ V% k. e8 P1 Y
1
. _4 I) G" o! s* Y% O+ G: J// 获取完整年份9 S/ z: C! W3 f" q5 i7 E
&gt; data_test.getFullYear()$ W+ Z& `! p7 X
20229 x; p& d  G% D6 s% f
// 获取时* X1 j1 ?" p4 L( }7 U( i. [
&gt; data_test.getHours()2 m8 k; u+ t! ?
214 h8 K: V& O. j7 A3 C$ _% q& j
// 获取分
) t, X: J/ v8 {+ t( K7 w6 i- x&gt; data_test.getMinutes()
7 _0 Y6 m/ c- J4 ^( Q44
. j) `! U# B$ x// 获取秒
# Y3 ?( b3 |+ N2 E&gt; data_test.getSeconds()' l3 a! b# N1 }2 e3 i
434 X: s5 L* m& m9 k3 z
// 获取毫秒
3 W& e3 |: K/ N( b! x0 g&gt; data_test.getMilliseconds()
) }/ _) C6 \1 I290
, \/ Y( ?3 ]. d$ D  C/ D// 获取时间戳
7 B, `) U  r0 z* v  o& a4 ?. c&gt; data_test.getTime()$ L' t" m* o9 I+ @5 ^
1644587083290
/ g* j1 x& G( q1 _  z1 C</code></pre>  e- g( ]! {2 e4 ^! w8 a
<h4 id="282-json对象">2.8.2 Json对象</h4>. |" L( a# W5 s! A1 _" ~
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串. h$ i1 J/ u, X% y) M
JSON.parse()  // 反序列化,把JSON字符串转换成对象
  v6 ?2 O: |6 k, e# L* U
( J- i5 w) U8 m$ I" F- j// 序列化6 j: L2 J8 z7 }8 B& O
&gt; var jstojson = JSON.stringify(person) ( H8 ^  Y# g( L+ i' m
&gt; jstojson  4 R" z( D( D- A5 e3 L
'{"Name":"Hans","Age":18}'
. F9 g2 X! j* U
/ \$ _& }# B% l. ~. C// 反序列化
4 n( \: L/ w# U. L9 V; m9 m1 C&gt; var x = JSON.parse(jstojson)
" a! P$ P0 T* h&gt; x
% R$ p$ `9 E$ O/ `( G/ {{Name: 'Hans', Age: 18}
' }; n" J" C! D) z  L! ~&gt; x.Age9 d$ m4 t5 ?, Q: U2 E
18
8 }* I! j, b9 p$ r7 {</code></pre>
6 w" t6 S( V- g* ?<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
2 O0 P# T4 p  w; I0 M( B2 D- ~; h<p>正则</p>
6 w: Y- \& m/ `" g$ [<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
! S# X$ m5 D- C  q; n&gt; reg1
# ?  V% X, Y8 R% U  b6 N* B1 u/^[a-zA-Z][a-zA-Z0-9]{4,7}/
, c# [. _- Z- D9 V7 o7 H- u&gt; reg1.test("Hans666")+ C7 P0 _4 D; a
true
/ O6 |: A" ~2 ^# m
' i0 E: F- k4 ~&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/9 L5 o" \6 a5 M
&gt; reg23 X5 h/ M' ~) H9 J; Y- ~/ r. X9 R0 _
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 n) c' x2 q" h  m3 d( Q&gt; reg2.test('Hasdfa')  \2 P. n+ u( Y" ?! n& |8 n
true
/ o& l( O/ B2 W% I& D( G( [
2 {2 U/ U2 W0 h" n全局匹配:+ a' U7 I' S$ u- d1 T
&gt; name8 C% k5 j- ^1 H/ [
'Hello'( n# g* p2 X; ^- J4 j- `
&gt; name.match(/l/)
: _3 q# S* ~1 v, d7 ]3 b9 _['l', index: 2, input: 'Hello', groups: undefined]
2 c* f/ {: U( E" Z5 W+ B4 J) |  h  G- D4 G' ~0 h
&gt; name.match(/l/g)7 d8 _( P2 F, U/ L$ W. I
(2)&nbsp;['l', 'l']
' P$ [; m) h' e// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
/ B% d# B- T) }5 y$ G' |4 Y
! h/ U1 L, `0 Y) X: G# i! V6 z全局匹配注意事项:
/ A( ?1 W. ~% _&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g4 c2 B3 ^! i! e
&gt; reg2.test('Hasdfa')
+ d- ~) o: p9 Q6 J% l' u3 xtrue
+ {9 o% `7 j8 A% U&gt;reg2.lastIndex;- A' j; h0 }: T
6! R9 [* G2 q& J" _3 M
&gt; reg2.test('Hasdfa')2 l7 k# P# Z/ H
false
" Q) ]* _( ^: _/ `0 m, `4 m& N&gt; reg2.lastIndex;
, k# f. h* f( N9 e% c$ E0
0 j) G1 ^' f( U+ o/ m( G&gt; reg2.test('Hasdfa')
5 O  ~7 _0 }$ e( o( ?; F% dtrue
; U4 N0 @1 T" `# C9 g% w&gt; reg2.lastIndex;
. P+ R8 @6 R. B2 ]6
9 L  I& V9 P+ H& k' `&gt; reg2.test('Hasdfa')
  F9 w, C% O$ ^1 ^' ]( }9 Sfalse' n& y. ^* K, @) t  [
&gt; reg2.lastIndex;
# [% K, d5 H& A5 @  d! y! Q0
! a' x& |+ _  a# ^// 全局匹配会有一个lastindex属性8 X, M  r. A% z0 F
&gt; reg2.test()
0 K+ M3 n6 t/ j* L7 gfalse
' I/ P4 `$ G! n* L&gt; reg2.test(). j, h$ w5 _$ A5 Q# U" v7 d* M
true
' f  s% d% g% I% \9 x7 Q" E8 `// 校验时不传参数默认传的是undefined  a& p' m5 _# U0 e- e$ Y6 _) ]- D
</code></pre>
; F, X- n( e9 Q4 W6 w! B( }+ ^<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
2 C& U1 {4 d. ]( F& F& x9 ^<p>就相当于是<code>python</code>中的字典</p>
" g- O/ I" B  A/ ~0 t0 X* a<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
6 p1 @+ A: l0 p* f% b+ l&gt; person8 F" @% w0 e, ~/ N0 P
{Name: 'Hans', Age: 18}
9 m8 Y- m) O2 |. G&gt; person.Name
. {' {6 U# W7 X$ V- V! a1 G, W'Hans'6 B" y8 g  O* D  M: G
&gt; person["Name"]
! o% `  h5 s' n! O3 B'Hans'
$ Q- c' Z5 x- C7 s/ g
2 C$ A$ L' X! `6 h" v' C  M// 也可以使用new Object创建8 H- w3 o; }( J& \% z
&gt; var person2 = new Object()
+ B( _/ S" i. J. f&gt; person2.name = "Hello"
' l+ U6 p' a& M% S' S- @- ^5 \'Hello'
! Q8 T% b- ~5 x6 q* K: n) _0 V&gt; person2.age = 20- G1 C+ l( a* T* l1 ^
209 P) ]/ w" `6 p/ t  Z) w
</code></pre>- t7 c& \) {" u# }  W. I4 h
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
" z. y( r5 m8 q, _! I9 E* U- I# A6 i<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
$ H& c$ E- e3 H<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>3 i* s. _7 t( ?" V* U, G
<h3 id="31-window-对象">3.1 window 对象</h3>
- I7 z  B' ^1 m" m& L8 \<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>6 \4 q$ y0 U8 ]0 s. v* N- x+ V' H) \
<pre><code class="language-python">//览器窗口的内部高度8 o6 `/ ]. N# m0 Q( f8 N  q' j; U7 Q
window.innerHeight
2 ]2 P0 b* y3 d' n" y706
" Y4 \+ @2 D  C7 m, n$ F9 Y: x6 u//浏览器窗口的内部宽度# i* \  a* j: N. j3 z" q9 y  P
window.innerWidth
, k9 j9 [# V8 H, u( J1522
! @) R, t- F, M// 打开新窗口
/ ]  W0 \1 w7 b, [window.open('https://www.baidu.com')
2 F7 W7 }( h2 SWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
9 `  g2 s" \- I& |( }3 O! b// 关闭当前窗口1 j: O" n8 U- Q; y' `4 o
window.close()
' O, Z* V( r; a% z//  后退一页/ S6 Y" A% @/ E: B! W' Y2 M$ l, b7 X
window.history.back()2 h5 v1 n5 E$ Y7 Y+ c* H# U  I
// 前进一页
- N7 F8 C) D* _/ r0 I9 Uwindow.history.forward()
0 Q8 y$ J3 o* q& M8 Z, {8 Y- e' T//Web浏览器全称" b7 `" |% T# K5 s7 w
window.navigator.appName" a/ r* H9 @0 T5 W
'Netscape'
+ Y( @5 V$ e$ u2 N// Web浏览器厂商和版本的详细字符串
( L: i/ X0 U' s' X% xwindow.navigator.appVersion
$ F- o8 }% A/ ^- P+ x" g'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" u7 z, o- A. a" K- q// 客户端绝大部分信息
+ V7 J1 _) @5 u/ w* |1 q/ Dwindow.navigator.userAgent
" P' D% n9 {( B4 |2 e'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. I5 t# r9 R5 r// 浏览器运行所在的操作系统
) l' I/ z* @3 q5 Jwindow.navigator.platform0 d$ ]5 d( m( D& k0 `- y
'Win32'9 |$ m6 k: w: l' F2 |4 D" ?

' X: a( a9 B# z2 ]//  获取URL
0 b3 H' m! Y' w4 H! ^) mwindow.location.href
1 h" u; \. W; h! v' N7 U) e. G// 跳转到指定页面' Z; [6 f5 x7 b* {
window.location.href='https://www.baidu.com'! u- W+ L, h+ R# u8 N1 G
// 重新加载页面
# q! x+ f1 S3 j- T. Iwindow.location.reload() + r$ q% n5 V! g/ `# ?( B3 x. I  s
</code></pre>9 I, U" K" `9 N' E/ j
<h3 id="32-弹出框">3.2 弹出框</h3>
* ?! q# L' j, H. O/ T2 P. ~0 k8 K<p>三种消息框:警告框、确认框、提示框。</p>4 W% c! n4 P# j, r$ `: K- z
<h4 id="321-警告框">3.2.1 警告框</h4>
6 A. q& t- v2 g+ q( C<pre><code class="language-javascript">alert("Hello")
3 i* i  R1 C4 H" _9 _' a7 j</code></pre>! _  y: `- k8 G4 O- [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>, t" f7 R* J$ R# i7 |7 \
<h4 id="322-确认框">3.2.2 确认框</h4>. G( r8 m! h7 a6 n$ Z- N9 U
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
4 e! ?" Q% P7 i. w<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
) P, `- K* \- X, K; R# qtrue
) a+ Z4 s. t1 X# o&gt; confirm("你确定吗?")  // 点取消返回false7 c: Y& Z" l. n0 L6 j0 v0 v
false
4 m; h, W* q/ L% R! w: k</code></pre>
  k  z2 s, u1 S/ x* ]<h4 id="323-提示框">3.2.3 提示框</h4>
( Q' f; {  [( T<p><code>prompt("请输入","提示")</code></p>
, }0 I( w8 X1 m<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>7 {" ]. }0 Y" q# A, n" _
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
- p: ^2 s+ n/ ]2 l" j" }' k) f<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ n5 t, W, P5 o# [2 {5 _
<h3 id="33-计时相关">3.3 计时相关</h3>
  Z/ v7 C/ `0 {$ l+ n<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
, l2 o4 [  M7 {$ l0 @4 ]1 B! ^8 P<pre><code class="language-javascript">// 等于3秒钟弹窗1 ~0 e- P# j5 H
setTimeout(function(){alert("Hello")}, 3000)6 Z6 p! c% F! Z' Z/ W6 A

$ X% x  @/ q! B* R- e7 Yvar t = setTimeout(function(){alert("Hello")}, 3000)
6 T7 C. K- E# c6 K+ R  u! R+ ^- B! X( Q" d8 c5 W
// 取消setTimeout设置3 \; |7 @7 O# g$ }# ~
clearTimeout(t)' V0 Y, Z7 I2 O
</code></pre>: {' o8 U3 V( h5 j3 X- i0 y
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>& o; j3 ]8 F" I* Y* B
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>2 Z( F! \- p* Z( P1 T
<pre><code class="language-javascript">每三秒弹出 "hello" :% U% L/ [6 N- y: Z
setInterval(function(){alert("Hello")},3000);
' j/ @* Q6 i, U0 G, n</code></pre>) g# \6 R4 ]( c
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
% b+ L7 ?% r$ Q% Y<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
* |" n: C0 x6 c0 d. L" b//取消:
' d, U4 t* E6 M! b9 o2 XclearInterval(t)
( e: i- h& e6 Y; G  N% q* }</code></pre>3 n0 l. o8 C8 d( B/ {  T

" B% J) S. m" y/ Q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-1 09:21 , Processed in 0.075044 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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