飞雪团队

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

前端之JavaScript

[复制链接]

8566

主题

8654

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

' u# I* U! Q+ \0 p! K; S<h1 id="前端之javascript">前端之JavaScript</h1>
6 w: t! l+ F' c7 s/ f<p></p><p></p>
3 E( Z: V, L1 X- i8 d  {9 b) w<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
) z, q1 k- b. ~- M<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
- j$ Y- T4 d: d$ }  D1 P# G, L; k它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
- V! M8 j& |& o. q/ M0 `. ?4 B它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>6 F( {& [) ?, f7 Q
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>* P/ x& r  A: h% h% i
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>* L  s$ v) L# w  }
<h3 id="21-注释">2.1 注释</h3>
8 h" e: o9 ?% O+ e<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>( F/ l' h: g& G/ A+ A
<pre><code class="language-javascript">// 这是单行注释
+ g5 M# _; R/ a* \' S# Q) i
3 s! s7 H' U+ [3 D$ n! }  S/** A' r( a: p4 x% M/ }$ U) E
这是多行注释的第一行,
: b! Y0 _$ {! C0 ?% [这是第二行。. s8 w9 {  Y" [: u; W7 t1 S3 O
*/
9 I/ s: o4 C; ~5 ?2 u</code></pre>
+ G3 [/ F' a$ \<h3 id="22-变量和常量">2.2 变量和常量</h3>
. l) w& ]9 g2 p% f( i4 c0 E<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
9 u2 ^, ?! X+ ^8 o: d5 L<ul>
0 p9 N# V5 }  y: q/ _<li>变量必须以字母开头</li>
0 f& t6 w8 J& h1 S) S7 ^! L<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>2 g/ E/ ^) q# W, k0 }# |
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
) n+ B0 m8 Y( f# N* t% F</ul>. B& k; t; w: P) [" z
<p><code>var</code>定义的都为全局变量</p>
: q2 ]& K9 q4 E: x+ x<p><code>let</code>可以声明局部变量</p>5 d& Q* x6 b$ Z2 \! |) D
<p><strong>声明变量:</strong></p>
' q- F* V6 M& X<pre><code class="language-javascript">// 定义单个变量
( W  i7 J; _7 b&gt; var name
2 ^8 m# w0 v  H& @# t&gt; name = 'Hans'6 ]6 x) P' U6 B! l% M, y+ }3 t3 M6 z
//定义并赋值# ?# v5 U8 b) b9 M" [9 n% J
&gt; var name = 'Hans': z5 h( F2 U/ I" e4 j
&gt; name$ j- m* |8 _, {! C- F* a* I
'Hans'+ Y7 [+ |$ h9 a8 K7 O2 J

" V+ C6 o' J) P( j// 定义多个变量
2 }" d; d: n% A$ v; [  Y8 u3 x9 m&gt; var name = "Hans", age = 188 j! [; E3 W! a  A
&gt; name3 u+ w7 A# ^% A
'Hans'
! k; k7 j5 r8 x$ y0 u&gt; age5 b( F# H, D; ~% z
18
/ @: i  I  l) C& T9 H
* |! A9 |$ s: Z//多行使用反引号`` 类型python中的三引号: R) t- P; C" G1 z1 K
&gt; var text = `A young idler,# e4 T2 m2 W3 Q
an old beggar`
& W; Y; t/ h8 L1 a5 m' g&gt; text$ M$ C! e' J, q8 `
'A young idler,\nan old beggar'
1 o0 n$ P/ k/ x" |, t</code></pre>
/ ?4 g7 L6 B1 J* A4 ~: S' `<p><strong>声明常量:</strong></p>
4 f% x( |+ p9 c$ E# A) K<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 L/ ?  m# S# X' a3 P, _$ y: h% |3 d. n
<pre><code class="language-javascript">&gt; const pi = 3.14
: [4 d8 E3 E3 L- H) c4 M&gt; pi* Z0 R5 p2 o5 Y1 p, T
3.14- c2 b$ O3 U" b% z5 r2 l
&gt;  pi = 3.01! S/ m5 {% j. s. D
Uncaught TypeError: Assignment to constant variable.0 V6 j3 l% D6 G+ B  z) Q9 K
    at &lt;anonymous&gt;:1:4
" e0 H. A; C& Y- Q2 e2 E3 c9 v2 w
</code></pre>: ?. m9 d# p" L! z0 ^# g4 Y
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>+ V& @& D. S, U) M
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
5 \; N- W* X$ _* `" @4 Y0 U' ~. T* R<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>( O, \# n0 z2 k1 w0 ]9 v
<h4 id="231-number类型">2.3.1 Number类型</h4>
$ t) U) C3 k: R3 H<pre><code class="language-javascript">&gt; var a = 5* [& w- a9 p; W& x
&gt; typeof a   //查看变量的类型  ; o8 r! ^) B8 v8 n) [
number. ^: R0 _; P7 J' {7 K  s: `

0 ?, n1 \* Y0 c8 ^% N# V, H8 ]/ p&gt; var b = 1.3' t( b# ~, B/ f$ a# C9 N9 _" W
&gt; typeof b
2 t5 ~* F1 ]$ W6 t- C% Vnumber
* l; y+ D- g0 r+ q5 \8 T: U( B0 P: N
// 不管整型还是浮点型打开出来的结果都是number类型
+ M' k) y* h8 A( x: m9 t) L+ B
2 |& U1 h) h$ U0 y1 {( N& d7 k/*
; v8 [& L$ q5 ^' L9 z8 HNaN:Not A Number
- x, U: _: T6 t3 S3 q" h9 _$ }' iNaN属于数值类型 表示的意思是 不是一个数字
& O. Q/ `3 [2 C" W( s$ Y8 U5 {*/# z' D& L* v6 Y3 A1 P$ h
, p2 ]! D$ U  G! T' l8 Q
parseInt('2345')  // 转整型
, k7 G/ g9 q  S2345
3 P7 ]+ I& ~3 c; e  ?3 r( AparseInt('2345.5')) W7 b' x4 v& k, ^2 i
2345* ]" _4 H& z$ M  _. Y* p5 c7 T# H
parseFloat('2345.5') // 转浮点型( S/ e1 N; e! O8 @. X2 f7 b
2345.5# D( x* P; ?7 D/ g
parseFloat('ABC')
# }% h9 H! c6 H$ ?3 m2 x" D& QNaN1 Q8 V5 i% {, m2 A4 v- @
parseInt('abc'). C7 L" @+ I( R  Y) P+ A" s9 }
NaN7 ^6 x0 A" Y7 Y3 F& q3 ]3 N& E
</code></pre>
: [- F; e; D4 \; {) Y/ g. O' _  H<h4 id="232-string类型">2.3.2 String类型</h4>2 @# ^) D0 H7 t  P- \
<pre><code class="language-javascript">&gt; var name = 'Hans'! H3 a- E- d; q
&gt; typeof name
* n2 J9 k! Q  F/ d8 S3 a'string'& r4 A5 t( O% c) s: t% \
7 [- w$ i8 N5 S2 s2 r" `
//常用方法6 V* w  q+ n8 S( d1 ~# [
// 变量值长度0 f* q+ U% ]; D7 X4 M; a
&gt; name.length/ y1 V( `5 x' ~! y$ [3 b
4
. Y) b* c. l" ]# B// trim() 移除空白
$ e7 M& Y9 y1 N" j&gt; var a = '    ABC    '/ I+ Y2 Z# Z& F9 x
&gt; a7 K! f4 n3 _3 Q
'    ABC    '
8 Y8 V8 v3 q4 i5 t% S&gt; a.trim()) O) c( Q/ S0 U/ J0 A
'ABC') U" L6 o5 I' m3 y( M, j
//移除左边的空白' ^' [# z$ E+ \) F3 F/ z) {1 N
&gt; a.trimLeft()
+ p* S/ y: d, r6 d" R4 o. s'ABC    '
: d. [/ n2 W  q& T* g: s* y//移除右边的空白, B# Z- Y2 l& t+ u
&gt; a.trimRight()% L: {. t: o$ `: h. o1 r- [
'    ABC'. l# a: _5 `/ Z: D% ]! M: y8 M

; D" C9 _' k/ C; a; L//返回第n个字符,从0开始
) |5 y% G3 L  z( v9 K6 d! R&gt; name
; q3 x1 B- k/ P' C! @, l* _% E& M'Hans'2 z: n4 w2 i4 H* M( ?2 q) u! B
&gt; name.charAt(3)
" W" ?1 N/ n8 P2 I: q- A! A's'' y. b+ x! Q! D" s
&gt; name.charAt()( |3 O0 u  O7 \# A( E# x% m( e
'H'
2 D0 |% G3 G$ G% ]" c&gt; name.charAt(1); d8 K* ?, p+ ~+ R% D3 e% R& @
'a'
$ k' O3 A6 c0 C: i* c4 n' J* ~
$ }- y' L# u9 r# h1 Q, y// 在javascript中推荐使用加号(+)拼接& h# i1 o0 v: C: q" b3 m: n
&gt; name: h. z0 W# t. A: V* W9 T/ I* B9 Y. \
'Hans'
: F2 |* e/ j6 e* m2 F* {&gt; a
( S6 Q2 u! a6 I0 |0 T$ G! z* d& v'    ABC    '
+ f) N( u( d  n3 u6 T&gt; name + a
/ T9 m: j. S% C" L5 N'Hans    ABC    '
4 w; ]8 w& M+ {. H// 使用concat拼接
6 H6 z: D; u# e1 V&gt; name.concat(a)0 G* Y- }: s5 h% U. c. H
'Hans    ABC    '- D7 m7 b: J, B6 J; g7 Q8 t7 k0 j! s# d% k: H

% f8 ]5 V$ v: l: M8 y//indexOf(substring, start)子序列位置
; z0 n! H; V( H! b' i: ?3 R0 H9 x# o! c/ G8 y: L. K
&gt; text' p2 ~2 ]8 `4 t3 J+ W% n) r* Q
'A young idler,\nan old beggar'
1 M/ w$ ^7 m4 V$ b% u9 {" i& t; ~&gt; text.indexOf('young',0)
+ t, x6 R" {; d. t7 `6 c2
  C) ?$ U0 C0 }7 |: u- a, @$ j/ v# \. T$ i- P
//.substring(from, to)        根据索引获取子序列9 U# i  U( I$ a
&gt; text.substring(0,)1 d0 z1 [' W1 p2 U: V, r9 O
'A young idler,\nan old beggar'& y) g0 U* r+ M
&gt; text.substring(0,10)7 |+ ^* r8 \# K
'A young id', {; `+ S% V9 \* V" Z8 z
* [1 h* p  n9 m. e" B% \
// .slice(start, end)        切片, 从0开始顾头不顾尾
: H! p' T# C0 E5 V&gt; name.slice(0,3)
# v7 A4 L4 |- }  j" O0 H3 X'Han'. q, O8 B, e7 _- R5 |

3 h  q& I% L5 x" Q+ J) w. ?& q// 转小写
& I6 N7 p! }5 e. r, \&gt; name" t! P9 A& G& L
'Hans'  ~, r# X7 E5 M! i) F$ K2 m
&gt; name.toLowerCase()
8 }3 v7 l" T; K5 z'hans'% Z8 W! t* `: }# }) ~
// 转大写
( b" T& l9 ]0 S/ V&gt; name.toUpperCase()2 r, W9 H" I) a5 n/ U. Q$ A" E
'HANS'
5 m3 z8 V# F( T: L5 D8 ]* E/ P
// 分隔
  R4 D# _' s$ [4 W&gt; name
( G; ]8 j& {2 ~  V8 S9 S'Hans'+ F- [* d# q8 {5 o/ e/ T
&gt; name.split('a')
2 S6 F) z5 E" ?9 V% l/ V: g$ D2 W(2)&nbsp;['H', 'ns']
1 @  ?7 Z) |2 E  f</code></pre>6 ^7 g$ S8 g- v5 P6 x) t2 m/ J
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
9 T# P9 I7 [0 b4 M) n# q7 ?<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
+ x2 B* {5 m( L) i<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
$ y% V0 J% s/ ~3 ]<p><strong>null和undefined</strong></p>
- A6 \8 V0 o" ~8 O" |<ul>
5 A9 P7 D: Y" R5 G- [<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
" [0 ?  d& u3 S. f, T. I7 B<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
7 k+ S' }8 p7 y  t( B</ul>6 d) |' K% b6 g7 V/ I
<h4 id="234-array数组">2.3.4 Array数组</h4>
" ~+ k0 a. Q( _  g# }2 B<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p># }* q; `9 v* J8 \
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
1 \( O, q. t, ^7 l- Y; t5 g&gt; array1, @" r' Z- Z7 l  e$ `" H; t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  |) z/ E' g& A% m
&gt; console.log(array1[2])  //console.log打印类似python中的print
! C) s% v. I1 f. T! W2 W3: a/ G6 q) j$ }  U
// length元素个数9 @% o- n/ i; h1 S* M( Z
&gt; array1.length
0 _7 w- U8 a( t+ V; U* O: q67 ?1 T! Y+ {: i
// 在尾部增加元素,类型append
2 N: ?& j8 Y1 \4 k# U- |&gt; array1.push('D'), K! L6 l- s$ O% Z. x# B! W3 `2 r/ X
7
1 P2 L7 W( I) D  O% q, E8 H7 \4 i&gt; array1! d! R& ?$ _2 V
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']; {& b) N0 n* j
// 在头部增加元素
: g6 q2 X  ~( Q- s9 `. z! j&gt; array1.unshift(0)
- k: W( p$ q8 z& P# I8 a8
4 b& H& v! c' A$ {  q- I&gt; array1
: S7 `3 X& T; L$ Y& b(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']+ ~+ m3 N" V( c" z) P, e

* S4 s: |, Z/ A( X5 X  j9 N//取最后一个元素$ V' E# O7 l1 J1 R
&gt; array1.pop()
# X* ^4 u$ g; I'D'
6 j  O+ k5 ?: |&gt; array1. \& K( G: Z" a! d" R9 y
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']. r7 v9 Y: n# a" G2 h, R
//取头部元素9 {( x8 z: C, q
&gt; array1.shift()6 Y, q' M$ \0 ]# |( A) r
0  `5 M; V3 }; [- |, m$ z
&gt; array1
, k! v" f# r1 C0 N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, {% a* M; x0 R! Z) l, V
# j/ E2 p" j1 X: Z. X% }' r0 K//切片, 从0开始顾头不顾尾
1 M& V2 {! m7 l$ I/ r% U&gt; array1.slice(3,6)3 a. x# _* y: r  o- u- i- ~
(3)&nbsp;['a', 'b', 'c']
! @- g. q0 _# S* m0 d# I// 反转3 a0 o: p/ v5 d5 q$ n% A* }# g
&gt; array1.reverse()
4 E7 F8 ~% I1 [7 [. T  l(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
3 K7 v7 c0 }* V6 |+ j- j" g/ W6 l// 将数组元素连接成字符串5 D, U8 l: q, U
&gt; array1.join() // 什么不都写默认使用逗号分隔
6 y8 s1 b: m8 Z'c,b,a,3,2,1', j. x& f, S  A2 J9 T6 u7 l6 k
&gt; array1.join('')
2 l& t5 J  O. J. {'cba321'
1 k9 K- M- [% K. B5 T- Q/ j( m  w&gt; array1.join('|')1 A/ ]: u3 @& _
'c|b|a|3|2|1'2 z! D) L! `  r7 s" M' y+ M
+ ^& T/ t9 [7 o' a$ z7 a
// 连接数组
6 A% @1 g) ]# ], l! `4 c# p; N&gt; var array2 = ['A','B','C']5 q0 q3 E" L+ L$ z- Z
&gt; array1.concat(array2)
$ b( f4 Z7 t( g0 j* ]% m(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']8 K/ z: p! R% T& }$ y* @' D

) n, @6 h) u7 x. ?3 \// 排序
- `, ^& V# F5 h; i: d. ]) Y. A&gt; array1.sort(); z2 H: m* q% {, m$ E# Y
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ K# |" M5 n+ J& r; f: o* m# e/ l
) B' g- O, a$ E5 ]% @# m
// 删除元素,并可以向数据组中添加新元素(可选)& z# F7 q$ V/ R; g" i
&gt; array1.splice(3,3)  // 删除元素
7 s, L+ [! E1 s" E  v/ y(3)&nbsp;['a', 'b', 'c']
) [1 r' A0 ^9 ^* ^) ~/ A6 [&gt; array1
+ f" J. J3 W; K  a5 v' t(3)&nbsp;[1, 2, 3]
" x" H, O' j1 u& ~! \6 c&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素2 z6 Y2 M: z; p* G  m/ ?
[]2 \  v% F  d  b
&gt; array1$ `! |; S+ g6 e' H) J
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']# L6 g% O1 z! J0 c; `- J1 O
  Q/ B4 `: f6 E7 I# Z# P0 q
/*- a0 W) Q) U6 w: ?2 C% b
splice(index,howmany,item1,.....,itemX)
: D+ p# `0 d3 L& @index:必需,必须是数字。规定从何处添加/删除元素。
0 |$ `$ d  N% @howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
( A1 J+ T; e' j" gitem1, ..., itemX        可选。要添加到数组的新元素) Z7 B6 x9 j' p5 _# j
*/
" n! Z2 B( {9 L" p+ j
7 u! v" u8 a5 O2 R// forEach()        将数组的每个元素传递给回调函数
9 _$ N0 Z" q/ m( Z&gt; array1.forEach(function test(n){console.log(n)})
) u; \% u6 f* T) E$ q" v 1
9 m  C/ G& C+ W 2
5 S4 P1 D/ f9 N% G 3
! D* H1 h8 a- v, ^* Z, k3 G% q A# P  g0 a1 e7 t; m: t
B4 `) K" p! N! ~' z9 ^. V4 m
C* K  C) H4 L* h! u. J7 W
// 返回一个数组元素调用函数处理后的值的新数组
+ A6 C/ {% R: J% g&gt; array1.map(function(value){return value +1})* m% y4 q2 p1 Q* A# M) T6 H& L5 s( C
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']8 B* j5 b. G5 r2 T; H( f/ A$ b' ?
</code></pre>
3 \% j+ Q3 O0 G! T" E# ^<h3 id="24-运算符">2.4 运算符</h3>
% }5 B6 D; }- Z' j* `! W<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 G& t  \5 f: H0 h<p><code>+ - * / % ++ --</code></p>  h1 B0 K0 T, {' R# d
<pre><code class="language-javascript">&gt; var a = 6
- ^7 ?2 y5 N% L3 w8 G' B&gt; var b = 3
0 m* {  G& f& s# ?$ n% C1 ?' m// 加
7 h3 W# t9 q2 {) h! E&gt; a + b/ e" J* \; l5 @6 ?& K
9
) o" e$ w2 K7 g// 减
" U8 J" ]2 m  o  G- v0 D&gt; a - b
# G  @8 W/ H( l5 z  R2 ]  A3 Y, b32 f; W" j+ D  S% [7 R7 Q
// 乘4 E! s1 r" i8 {/ E
&gt; a * b
& [, x% x* R* X" n& z1 O& H18
2 m) k* E8 L8 E: [// 除; g0 L6 G- k  H9 w
&gt; a / b
% @4 P% V; v2 w2% ~# w* _9 ^, S% G& w' S
// 取模(取余)
' ~( |; w& f" x! |- k&gt; a % b
& v8 Z. d' Z% a0
* F% d7 [1 H$ k// 自增1(先赋值再增1)* Z# R) B( X# {
&gt; a++
; w6 J) ^5 H3 ~0 R6
' r0 C* z) e' u' @4 X$ ~- M+ ~# h& h&gt; a3 I1 ]/ g1 s8 Z( Y% e# D: C4 _8 |
7
0 `  P; w' L' P  ^& q/ g$ i// 自减1(先赋值再减1). j4 f# {- p$ [- g1 B
&gt; a--
/ I/ h% b3 N9 n& g3 A) f: \7- L1 w$ P, s3 z  A: A" s) w
&gt; a* |2 C' _. W/ E% c; S( b
6
- W' u4 S4 Z% W9 L6 z// 自增1(先增1再赋值)
' g( {! d! Q, ]( L+ ]&gt; ++a6 W1 ^. W- ]. M
74 ]9 Z8 X& \+ ?$ g6 p  \+ ?4 X
// 自减1(先减1再赋值)# U+ C$ A. ]7 I
&gt; --a
6 ^6 A0 C5 Y- f$ L. {6
# h8 G) I% c1 o5 `, c&gt; a* _5 h" A5 p+ }+ c" G" b, M
6
9 T! ^6 e# x" |3 E1 T3 Z. F6 z! S2 Z# N9 b4 g1 L+ y
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
3 Y  g1 \4 N9 V! o</code></pre># A: F3 f% A3 [0 U+ F0 ]0 h5 @4 k* L/ U9 i
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
: ~0 R% J6 }! q0 C! _& O2 W0 G<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>, n& P! U* d5 I
<pre><code class="language-javascript">// 大于
7 q6 h1 \: R, N, W+ V8 v' J&gt; a &gt; b5 ]; R5 w9 y0 @& @1 ?* T3 t" g* ?
true& F) [# |8 Y- Z6 L4 d% w
// 大于等于' S6 g' M) z$ {: p
&gt; a &gt;= b% g2 U: Q' ]9 e' j! v9 v$ n
true
. t/ E, `: O1 y3 x. x// 小于" ~' @! ~! d' G  l- l2 o
&gt; a &lt; b
5 x' A* _1 S& V3 Y& wfalse
3 a2 X5 o0 F* Y8 w! D" V* R1 D// 小于等于! S% ]4 M8 M- H/ d+ E( T
&gt; a &lt;= b9 f' Y, _+ L9 ^; h% m: V9 y2 }& m" [
false7 v9 D7 f4 B( o" l  j: Y
// 弱不等于
6 C1 y% F" \# n7 U/ W# s1 X  O9 }9 R&gt; a != b
7 J# w2 F7 ]# u! G# w, g& d1 ptrue
, l  n0 I# c1 @4 ~1 C4 _: M// 弱等于
8 R0 m/ E; N* b3 H* k3 w&gt; 1 == '1'! u6 y) R+ M0 b
true
2 T" [# U' E8 B3 o( h/ V// 强等于
0 a; c0 A. x+ B8 J. _2 r&gt; 1 === '1': S4 \1 O7 L6 c4 U
false
% }; I( D+ H/ u5 X( R$ [// 强不等于
2 X2 Y* _/ t8 X&gt; 1 !== '1'
1 X4 z) q- i3 j3 ]6 Z& X! Etrue/ R9 ]& W0 ^3 c* m( i  `0 j! j6 u

7 Z* p, e- {+ ?* c2 t3 e2 y2 l/*
0 e+ `) a" P0 d0 GJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误+ L1 m2 t$ w/ t- _, _- h: |0 }
*/
3 E0 J0 S0 b. e" b1 ~* l</code></pre>
0 a) f/ v  O! `<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
# Z& C- T1 m" z- Y3 w+ y' v9 a" ]<p><code>&amp;&amp; || !</code></p>
  D  B3 B/ F2 b<pre><code class="language-javascript">&amp;&amp; 与+ H; a, V3 `+ `4 M5 Q& j
|| or
" e7 m* t2 B, U2 N$ F- Q- M! 非! h& d( Y  Z+ Z% w7 t6 [
</code></pre>
6 [' U, x$ k- H<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>- f9 L3 x. J7 {# _1 i$ E7 f/ d
<p><code>= += -= *= /=</code></p>
& v3 s/ A" g7 O+ [" U! T* u: _<pre><code class="language-javascript">// 赋值
' S, q+ t8 U9 y& }% t& K) A/ H&gt; var x = 3; F* X2 x" Y* m- h8 v$ O
// 加等于1 R8 O6 |4 g, @( L. I/ L% O
&gt; x += 2
2 A1 Q+ W+ _* ]5# U: g. z) m; F( U
// 减等于
6 k8 W, [2 I6 ~% t4 U# F# N3 y/ \&gt; x -= 1/ W# y# R! @$ e$ s8 i2 T) g% a
4' O* A! r4 u; f7 [  r# S8 X& M: |
// 乘等于$ k9 A" W3 r5 ?
&gt; x *= 20 H0 a( v7 N7 S& n4 e
8
- Y4 w! d7 R8 p// 除等于& r% e, r# |, i
&gt; x /= 2
! `( F" i. I  [# p4 X4
# q' F$ u- l* C, Y; F; v; i! W! n</code></pre>
+ E/ g) m% B7 X* h/ ~9 }<h3 id="25-流程控制">2.5 流程控制</h3>
( J8 |1 i/ X- z3 v" U<h4 id="251-if">2.5.1 if</h4>
+ j* b/ k! R; M' z<pre><code class="language-javascript">1, if(条件){条件成立执行代码}+ o- Q: c, S8 g

! ]' a6 g: K( X&gt; var x = 37 X' m& Z4 n: a( Y- [- s* E
&gt; if (x &gt; 2){console.log("OK")}
9 Q% m, f8 I# m! \" k' Z OK: x0 I8 y, R' x- n3 A
; {$ s% T( T/ ~4 e# M9 p1 B7 z6 ~
2, if(条件){条件成立执行代码} 5 U0 N# D$ Q, m. O) y$ |
        else{条件不成立执行代码}3 v4 K# A/ x* e- W- A+ D3 Y
7 l0 J& t" _& w# M# @! ]
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
% X  ^/ s7 ]9 }# t( {% S4 Q4 ?6 ~'NO'; W6 B' ^2 B8 q+ J0 `% K/ g- y

& X3 V: W. q) E' Y8 |8 p1 }3, if(条件1){条件1成立执行代码}
/ ?$ Z6 Y: g- M        else if(条件2){条件2成立执行代码}2 Z: b# t$ q+ \  @; ]- a
    else{上面条件都不成立执行代码}
0 o; c& R- C; m8 d4 \$ ^4 c; Y$ U
, n5 Z8 j- f' v. f7 w7 d&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- @2 C3 R: p4 U7 j) q8 M& n" L Ha. }9 @' h1 c8 Y* X4 D
</code></pre>
- K% Q, [- h! J1 c  z6 V1 g( k<h4 id="252-switch">2.5.2 switch</h4>9 e+ n! w* T  ~/ F- {
<pre><code class="language-javascript">var day = new Date().getDay();
3 w; L  L# }# X" yswitch (day) {
1 m2 z- }- V. x8 P2 l% v  case 0:1 W, P# B: x. |* L$ p9 o
  console.log("Sunday");$ o  p/ O2 o/ c) a! g  b
  break;
( N- T8 g, U& c0 K  case 1:
  W6 a6 @! c8 o, |3 g, {  console.log("Monday");
2 k7 a( S' D1 ?2 R( N" n  break;/ X8 ]4 @* w+ {) Q" x. q. j
default:
4 r$ u; p9 F3 S. ^/ t# A  console.log("不在范围")
. C3 u& }% a! @% D}* n6 S' j% n# d+ n& @
不在范围
# a, e/ g. D4 m1 U/ o</code></pre># \7 _8 i$ R. s0 t  [& v
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>( [& d0 b& t/ ?0 T
<h4 id="253-for">2.5.3 for</h4>
: v7 A7 |& P# d6 `6 b<pre><code class="language-python">// for 循环9 `# h! ?6 x: T9 @2 L
        for(起始值;循环条件;每次循环后执行的操作){
* x4 V! H6 _$ V9 R* U0 ?        for循环体代码1 m9 h( D  G! r6 R8 J' b
    }% N' ?: B5 R5 F9 z4 ?2 l' U
7 b7 Z+ z/ _+ }  O! R& {( X
for (var i = 0; i&lt;10; i++){
( F; N# A  U; }' j    console.log(i)) ^( n3 [) _) @, T5 ^3 B
}
) C: x$ y  j. J  b6 y% w5 ^        0
5 v. X0 n/ D% n% W) I, H8 e0 f        1
. f/ l- A9 _! k  \- Z1 A0 P        21 R5 \8 v( ]3 O* n' V$ R! B
        3
/ i9 e. j* z" u! G        4, L  c, t% v/ a8 b! G. W( V9 D0 R
        55 G3 f- J$ d1 x- C
        6
+ F: L# I7 }: ?% {( y        7
8 m- O' |3 T$ h1 F! _9 \6 `0 @3 z        85 G' Q! U5 r: J/ y
        9
4 x$ k+ x& H5 G$ r  Y/ [</code></pre>
$ y) n9 z/ ]* I5 H0 X/ v3 V7 G5 U$ T<h4 id="254-while">2.5.4 while</h4>  q/ P3 ?- L* z5 k) a5 Y
<pre><code class="language-javascript">// while 循环! V4 v! R/ ]  U- L- }( y8 J% I
        while(循环条件){! I0 G8 a$ u# _* y. a# \
        循环体代码4 d7 J5 U8 x, k6 U3 `) W
    }6 e5 Y) e8 u1 y, x7 i$ z1 R0 ~
: h4 h5 Z. ~; N
&gt; var i = 01 \; W+ t: b& }$ q, T
&gt; while(i&lt;10){
0 b7 U3 I5 C+ u/ {. ]    console.log(i)0 H8 ]& d8 z' e5 a/ a! o0 N8 b( ?
    i++- c) g7 ^" @' Q
}
1 ]; `4 x3 `6 V7 T1 h, f 07 u% g, O" [! b" M1 w
18 I0 \' Q$ |/ L+ _. z  I8 V
2
: g8 X0 Z& B3 n: T 3
$ H( i& f9 {, u' h# M 4
& ^0 A0 `0 z! A6 n0 y$ ^* X 5
! _3 U; I3 S7 S1 ^7 r 61 k$ L0 B  Z& B
7
; i  F3 k0 {) Z$ q# S9 [, J 8, }% J. n5 c( B, |" o
9! n! ?: |" t" A' Y; o5 I" x
</code></pre># U; C! _. G: c/ a0 x$ P+ ?
<h4 id="255-break和continue">2.5.5 break和continue</h4>
& C9 e4 A( h$ S+ u5 d+ q<pre><code class="language-javascript">// break9 o. v6 T1 a+ E0 q  L
for (var i = 0; i&lt;10; i++){
% Z) H" h+ R( K1 E3 [* I9 q6 T9 c    if (i == 5){break}
# p0 x& A4 d/ D/ d( V0 u    console.log(i); i2 |. @6 i, R2 O
}, A" ]2 }, _" i
0
3 Y* P, H2 C5 }2 O+ S 11 T4 N9 n3 O, W
2, a( i. N8 W& i+ k
3
8 x  D( q  |9 n. L0 V 41 H. D& r; j9 I0 ~) d
// continue
0 X9 n4 Y3 j9 y# nfor (var i = 0; i&lt;10; i++){7 i5 d7 c. r/ r- i4 O' q2 ^
    if (i == 5){continue}
3 f! D5 W; @4 A( P  O0 B5 Y1 c    console.log(i)  F6 p7 h6 u; B4 i% w
}. [( ]6 q/ z4 a
0, o6 H3 n; N$ G! T4 H2 Z9 D8 K7 d
14 s: a, J7 |5 J* v1 Q" }0 a7 W+ P6 O
28 @" q; }; m3 J& e) n. e" S
3
' z; e1 `1 y0 }! K: | 4
  H- [9 [1 W! N5 M' N 6' N; z+ q" i0 V; [
76 h; S7 Z8 l# i: q6 m1 c7 M
8
5 q) s' c( s. \! ?! N- O+ Q 9
  s0 Z' W# |! j4 l, U" `
; b' }& q7 C( Y( Q& A</code></pre>4 g7 V' k* f# y) g* \& _
<h3 id="26-三元运算">2.6 三元运算</h3>
  O: F' |, h. j8 Y<pre><code class="language-javascript">&gt; a
7 Y0 u- f( f# {' U% n1 E6
' |* `- }+ U- _- Z: a, Z! I% E&gt; b0 d" |& Y- y; F9 @: b1 b0 f& r
3, x+ T: m0 q. J; b
8 Z/ ]' p' r4 ^0 R# w# D. I# \. v
//条件成立c为a的值,不成立c为b的值0 E$ }3 y' S4 S  o3 F5 Y, {7 k
&gt; var c = a &gt; b ? a : b& _* w& h; q0 O
&gt; c
' m, Z' k+ d3 p8 g6
; x6 i) r" E3 a2 G
& C5 f+ X2 F& T3 T" x& O9 I- d// 三元运算可以嵌套
, r3 U' K. P* H</code></pre>3 C* P- {2 E4 J
<h3 id="27-函数">2.7 函数</h3>
( C- C' ^9 z; L& S<pre><code class="language-javascript">1. 普通函数+ w9 T; m5 a( R% E
&gt; function foo1(){
# |# j. ^1 t: }0 b) u    console.log("Hi")
% M( R" o1 _2 H( [' S5 ]4 E8 y}  I( n8 i) I/ y; j( m$ L  b

4 y/ Z  `- ]- W" ^&gt; foo1()
6 U& c& D+ B  w  ^        Hi& t; L8 V) A4 r. a) P" {
2. 带参数函数- z% V& ^( i- K( O1 E" [% m
&gt; function foo1(name){3 n& p* s5 q' ?
console.log("Hi",name)
, T9 s0 P2 F3 h) t5 Y& }. h}
) s+ E7 Q9 |5 t6 t4 U% j2 w  s  p" m" K/ v# s: d' X7 G
&gt; foo1("Hans")0 M  A* _8 }6 U) E4 U6 [: l: [
Hi Hans
  }. I: x# A+ _! k
$ n9 o0 }4 R8 t* L; y/ \&gt; var name = "Hello"; M$ S, K5 i) H; ]1 A8 n# P
&gt; foo1(name)- U3 ?* T' T+ h8 F# ]/ o! H
Hi Hello! N2 O- B! S) H: B( W

  @4 N+ M" b$ l( F3. 带返回值函数
8 `; ?+ i+ o# K+ `, k6 u4 u&gt; function foo1(a,b){
- [' C! R$ [5 {% ~/ u) ~3 T4 Z6 ~  Z        return a + b   
5 y3 y" u- k* |% z! A) ?}: l" i; Z$ [! b. ?
&gt; foo1(1,2)/ F4 q7 \4 e2 I4 x3 g8 e' o
3
1 f7 u, O% Q1 w; ^' k&gt; var a = foo1(10,20)  //接受函数返回值' e" k/ a+ X+ R. i4 {
&gt; a7 {! s* T: _% l( [: |5 K) G
30
" R& l# z8 i! ?: `0 R' j  z1 x! ~
4. 匿名函数
# i9 ^# B1 i% c# |. a, w&gt; var sum = function(a, b){
* k3 d: J+ F$ r2 e: L  return a + b;$ B6 M  x) Q& B
}
, M- Y4 a, ]. m6 j&gt; sum(1,2)
: Y% Y$ i3 y5 h- X  C3( o, O- f( |  H* w
2 N) p! t5 \; Y* e4 ~
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
3 c. y( ^# h5 R& a) @3 u3 m&gt; (function(a, b){
8 G* A4 f1 O* p  return a + b3 f, Y) I- B1 Y
})(10, 20)
& ~7 c9 c6 d; D& T30) }1 J* _, L2 @- ^! H4 U

0 p3 i& u5 b$ Z5 T  P6 U5. 闭包函数
+ X0 [) a1 e4 B# n. p$ T  R// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数; l  \) n3 H. v
var city = "BJ"
8 S; Z$ T# |& N7 g" Zfunction f(){
# {! ]& P$ X# i2 t3 y0 ^    var city = "SH"
& p9 c6 z  d6 [* Z' s$ I    function inner(){6 c$ K2 M5 r( I5 y; m+ l" B9 `- [
        console.log(city)- B$ D7 ^" u& a% G; v& V# F
    }2 g% `* i0 i5 W: [# P  m
    return inner% N9 d" Y- m  L: b2 N
}  m' h0 B$ S+ R8 w
var ret = f(), a2 w4 u8 Y- N7 u( P
ret(). s- ]/ ?5 A  {9 ?
执行结果:5 n& d5 S) o6 v; N7 z3 g1 b2 G
SH" {7 O5 ]  s, q& L

7 \& W7 w! S2 `8 x, f# j) ?</code></pre>6 `- s& l& h5 ~! k: A4 f  K
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
+ r" \+ b5 R9 ?! W<pre><code class="language-javascript">var f = v =&gt; v;
0 F- d. k% J& W( {// 等同于4 g% y7 n1 l2 x# A; T! R: f) w- x% O
var f = function(v){4 E: j& F3 n6 a2 x0 A( O/ x3 {
  return v;# r# i3 O- X. r: ^: y9 u
}+ J( [* A+ D# M5 {
</code></pre>! }, N6 p# }* F" S" Y# M
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
7 Z5 Y; P8 E( O4 s2 {0 m5 M<pre><code class="language-javascript">function foo1(a,b){
2 T) F0 X( j! u- @/ U    console.log(arguments.length)  //参数的个数
; [) \+ Q/ Q" D, D6 e    console.log(arguments[0]) // 第一个参数的值
2 m( C6 m2 K& @/ `        return a + b     }& p* `+ O' P  Q
}
* U( e0 i+ ^9 pfoo1(10,20)4 f+ g- S! z2 D4 Z
结果:
$ R  `: J" x# B% m* q 2          //参数的个数 : o6 y8 @+ a( E& w5 b8 N1 _
10        // 第一个参数的值- U, u6 P7 `1 W4 c9 `
30        // 返回相加的结果1 e; u( K. @) {  D0 K, P# B) j
</code></pre>2 K. t  k0 f6 c' z4 i
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>2 Z7 O4 |: E& h5 R
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>/ J: L$ q$ f5 z
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
) g$ A8 d" _5 }/ H<h4 id="281-date对象">2.8.1 Date对象</h4>' d& j, l' q5 a6 ~
<pre><code class="language-javascript">&gt; var data_test = new Date()  k! B6 V+ \/ H2 m
&gt; data_test$ r, ^( M: w, J. }" X" `+ j; j8 N
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)% f1 B+ w* ?3 |
&gt; data_test.toLocaleString()* |  Z/ C0 L% b- K. z
'2022/2/11 下午9:44:43'( P% Z+ Y0 O; n

9 ]8 b0 M, a" f/ H  a. d& c&gt; data_test.toLocaleDateString()9 q: [& o  i6 @9 w
'2022/2/11'/ s# y* J) m3 Y9 _& c

0 y/ W0 N* N' @! w&gt; var data_test2  = new Date("2022/2/11 9:44:43")2 e$ K! u3 ]( L! h! g1 m
&gt; data_test2.toLocaleString()% P2 V2 i) M0 P8 ^7 M# B9 x
'2022/2/11 上午9:44:43'
1 N( C& |! b3 e# t4 Y5 ]3 }- S! f7 U  [, `& {& ]
// 获取当前几号
% r2 U( |' z) z( X( {" X&gt; data_test.getDate()
2 ~9 }- l) p) T1 D0 L11" {2 e& i/ r/ u
// 获取星期几,数字表示1 W7 g5 s# v7 @" O3 W. h) w
&gt; data_test.getDay()  
6 y2 c+ H/ R: H/ F+ I( J5
5 W7 u# ^4 E  g// 获取月份(0-11)
. F: Y2 Z) t3 l+ L0 `1 Y&gt; data_test.getMonth()
& {) Q- B5 Y4 W8 Y+ R19 ^  n' N! B/ N! C. ~* a$ E4 d
// 获取完整年份8 F8 Z3 s, ?5 c$ @* G, Q
&gt; data_test.getFullYear()
2 u! b) o! z/ r' W: C1 _20228 C9 {  X- G6 u: H+ k# M+ w1 E
// 获取时) ~+ s) x4 B3 j5 Z% u1 m7 v3 C! P
&gt; data_test.getHours()
, w, I1 m; e3 \* \# N213 m, T3 ^3 i. D4 C' d: g% |
// 获取分3 g: M8 a; i8 U' s- P: L
&gt; data_test.getMinutes()
! A# f* S% E; M% `44, f- D  D# d$ h2 W$ C) B
// 获取秒0 j- s9 f+ a2 U2 Q) H; @
&gt; data_test.getSeconds()1 V" r+ A0 A, P- O" g
43
% t" }+ H& d: }// 获取毫秒
- k. q. u9 A) n6 f6 N3 ^8 q&gt; data_test.getMilliseconds()
, ]" I* ~$ W/ Q4 Z3 j4 U/ K' Z290$ c2 f2 f5 V( v' g* E9 n$ N
// 获取时间戳$ i' x3 D" y# ~7 Z
&gt; data_test.getTime()
0 F1 B, d+ i9 o/ X0 w16445870832907 I( b: b9 Z9 @
</code></pre>
9 y& ~3 W9 n8 b3 Z$ L! e9 z0 O<h4 id="282-json对象">2.8.2 Json对象</h4>+ n2 e$ b' m' V7 }0 J7 O2 H* H2 B
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
9 s1 ]$ O# c2 R+ c( DJSON.parse()  // 反序列化,把JSON字符串转换成对象
5 ^, R& Y' _4 g! g! n) s9 ~2 J2 s% G% q
// 序列化
/ h) k3 R; K# @5 w: D0 q&gt; var jstojson = JSON.stringify(person)
1 i0 `* G# \. U# v- I&gt; jstojson  & i( W6 I  e+ H8 R3 ], ~+ W% r
'{"Name":"Hans","Age":18}'$ J, w% {& K: ~' H) R0 x$ M+ G

/ b7 S2 ~5 @5 c// 反序列化
9 q! t, Q0 _7 ~&gt; var x = JSON.parse(jstojson)( G$ d! `$ ]9 j) J+ y7 G' |
&gt; x
6 a8 U! I. [# a3 \7 N6 A2 B{Name: 'Hans', Age: 18}/ N) f' p2 j- O
&gt; x.Age
0 r. z2 `) o$ M/ ~6 v& ^: Y2 ]18: ^) i: B) {6 h" Z0 d$ u
</code></pre>
2 K/ h3 J1 K. [2 e. G<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
4 D" ~; y; y% b9 ^% X<p>正则</p>
# V/ H( {; A9 o8 M<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
2 W* b3 Q# q) S& C&gt; reg13 Y! L* \. ^& ^/ e5 H
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 p: z' H$ A( M# e2 \&gt; reg1.test("Hans666")1 h  K1 T7 A; k; M& E8 g
true; t( D7 G/ \& L2 L) B
7 d0 q' `9 H7 s2 d* S8 R2 w0 f/ ]
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/( k- K3 P) x- H3 C$ `8 I
&gt; reg2
# U: y" Q2 C2 H5 M/^[a-zA-Z][a-zA-Z0-9]{4,7}/3 B% T4 I; g# T- ^' m
&gt; reg2.test('Hasdfa')
6 V. b- }2 I: }true
4 O$ `# P, x$ @  X+ b5 g2 `; l7 I1 Y, e" h2 F
全局匹配:
5 U8 E* ?- M5 F& O& I&gt; name
& ~- k( ]% v) _; u  P'Hello'
2 ~: ^3 m, r3 ]% v& I2 |&gt; name.match(/l/)0 Q' M8 d& G  D% e: L
['l', index: 2, input: 'Hello', groups: undefined]# X" f1 N7 P. z9 K# ]% q  q
' T/ C: r: q% C' `
&gt; name.match(/l/g)
6 `$ f! o' p3 X- R* j5 k) g# r(2)&nbsp;['l', 'l']& H) v- l  h6 }8 {; J0 D7 s
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配9 T; |9 R- z9 X3 A9 f) k- P. I

$ ?9 J; Z# g) J5 x全局匹配注意事项:
6 j- \0 x) |2 B+ G5 h&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g/ I% X5 z$ @, u5 s5 B; x  g! D
&gt; reg2.test('Hasdfa')
+ v1 x3 ^/ q1 |8 Xtrue. p& n& a2 j) ]8 ?8 i, w9 L
&gt;reg2.lastIndex;
) W" p$ h- Y% }6 N7 E6
+ v; s7 z+ v% v- ?$ ^/ @3 O0 x&gt; reg2.test('Hasdfa')1 q* q2 ^9 E5 `
false
: Q  U# c( \5 Y% t5 b3 h) z7 S&gt; reg2.lastIndex;
7 _8 n: b) `9 J8 F- k! b2 {; h( q0
+ ^7 F- o# r0 P3 A% B6 ]7 ]&gt; reg2.test('Hasdfa')) V% v9 Y; z" r- C) R
true! o7 o/ w; f) O0 `& A: z/ s
&gt; reg2.lastIndex;
' c+ G, P& V8 L2 w3 U6# p4 j* r+ K/ Z# Y" T' B! ]
&gt; reg2.test('Hasdfa')  R* j+ c' E. K8 v1 }7 t
false/ {2 `4 L( [7 W2 T% S# S
&gt; reg2.lastIndex;
# P, d/ ^3 P" i& l3 P4 ^, b0
: B. c- \( b& S% n// 全局匹配会有一个lastindex属性3 c# a  o. A0 @
&gt; reg2.test()
: C8 q9 x7 x8 f3 `3 }false: ?  z7 U$ P$ B$ X1 N9 b) o
&gt; reg2.test()
6 S6 Y8 W& W, j% B0 R5 R3 i" xtrue
# p' V2 U* n& V1 A  U8 D  V// 校验时不传参数默认传的是undefined4 K* L4 ]% Q( L; O8 @7 K. w! O& x4 z
</code></pre>
& W8 h5 `4 r5 p2 g# _! E<h4 id="284-自定义对象">2.8.4 自定义对象</h4>* Q/ C3 [* A6 n8 x% G$ @
<p>就相当于是<code>python</code>中的字典</p>
# A% @7 y. d, T( ]+ }  |4 p<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
2 _5 m8 p, C+ a. C& a) S; m& z&gt; person
7 B& k# n6 V: p+ R+ X5 W! I{Name: 'Hans', Age: 18}
3 U) e, P; f! n6 c9 m9 I- y&gt; person.Name: l' s) w/ ?- w: B# @/ W
'Hans'
2 N$ u6 K+ @5 B! Q- N/ a9 r&gt; person["Name"]$ Z* ?) J- u# `  j
'Hans'
* n2 F' @$ y8 [% X! p7 |
( c; v" q3 S- I' m% d* X2 Y- z  p// 也可以使用new Object创建& V2 k; L6 l) T" Q
&gt; var person2 = new Object()
2 h! E% f0 X8 Z' G  |+ x&gt; person2.name = "Hello") k9 a; Z9 b9 b# A/ l; P/ h  ^
'Hello'( ~6 H- E4 n# Y
&gt; person2.age = 20
+ ]. F, f2 J0 X  g205 `  P, m! O# A3 X* G
</code></pre>* U* I0 l# c& m2 e' k3 D5 K
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>: m0 y/ x3 H9 K, E$ f& e
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>- A# @* S6 w  T3 x' s0 J
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>) b* N" j/ ^( D7 V* J+ }
<h3 id="31-window-对象">3.1 window 对象</h3>, W2 A6 z$ r8 V7 r% s
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>" H9 N7 K9 a* z8 c# w0 O% O' o
<pre><code class="language-python">//览器窗口的内部高度9 J  Y- U$ b. u2 l  K
window.innerHeight
& F$ _9 L, [3 m/ ]/ n2 z706
; Y$ H9 J. Q3 b( c: w" \//浏览器窗口的内部宽度
5 T5 G5 }% f. n* L! a4 N, Mwindow.innerWidth3 c" D3 a0 B2 Z% \: }! C3 E" S
1522/ ]5 |  Y2 W! P- V) r$ i
// 打开新窗口: l' z9 [) c. {1 C) l! N$ u
window.open('https://www.baidu.com')
8 l. {9 r8 ]( a( z0 uWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
. }$ g5 ^* ]* f9 B2 f5 J8 M// 关闭当前窗口
' y# S" r$ O4 p7 c2 k6 t0 X" zwindow.close() 4 o5 N" h8 R& B  c
//  后退一页
9 Z% x4 d: Z6 X% _6 }- Pwindow.history.back()
+ ^- E% g0 |/ E+ H1 ~- ?// 前进一页( I9 ~! G" ^  r& F) o
window.history.forward()
9 Z- [$ Y" l( r//Web浏览器全称, y( u, j) Q; n% ^' b( r2 M7 j
window.navigator.appName3 {+ z7 v7 i. |/ o1 u+ _
'Netscape'
: \; J) L. O, ^' y8 Z; {, ~1 Z// Web浏览器厂商和版本的详细字符串
7 k+ Y+ B- g& W5 m6 T: ]! v2 I) f5 twindow.navigator.appVersion6 y. v0 k% d: q0 J
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36') s1 y# \4 H( [/ `6 w
// 客户端绝大部分信息
3 n) x9 m1 H+ L4 H, V+ q: wwindow.navigator.userAgent
* o+ W6 J( L* U0 X4 ^/ w# s'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
+ Y7 i# a. q( l  q+ F// 浏览器运行所在的操作系统
) e5 O2 A3 w; Y; twindow.navigator.platform  I8 Q# u; t3 C2 v9 T3 ~9 K
'Win32'+ R" j# G/ e* Q, X

" Z5 K! v8 f+ L) U9 o& @0 d7 c//  获取URL
" h, c0 M0 m. f( l, c9 `& R1 b) twindow.location.href$ f7 @4 T  Q; C! V* s
// 跳转到指定页面
% w5 L/ @4 {- K6 X9 Wwindow.location.href='https://www.baidu.com'
% T9 i% ?6 Y' N7 U/ |// 重新加载页面# f6 C1 b% h' F, g4 V
window.location.reload() ; M- O  g7 N2 S
</code></pre>; W! |4 Q+ [/ E) D- r8 o" N
<h3 id="32-弹出框">3.2 弹出框</h3>
2 X) ]$ H! R4 E<p>三种消息框:警告框、确认框、提示框。</p>
: s# ?* O- G' `/ E! ?  E<h4 id="321-警告框">3.2.1 警告框</h4>
2 h. l, Y4 G# y$ F+ X<pre><code class="language-javascript">alert("Hello")
- [, m- i, S5 Z9 e0 X# j  L4 a</code></pre>/ g: G+ e6 a) \9 y' y4 Z* \) M* ~
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
7 R# m8 Z9 [8 r<h4 id="322-确认框">3.2.2 确认框</h4>( z' i6 z% \+ _
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>, [1 _% ~& q' W5 c+ v
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 j) S9 F# W4 F3 c0 G2 htrue  Y/ V  }8 Q, P. |* {/ W. y+ N( E
&gt; confirm("你确定吗?")  // 点取消返回false4 L1 b, O. A: r( z' p) a
false
. p& v9 j- m0 r2 i, K6 \</code></pre>
+ _( b& S2 f3 @4 m* i& }. g1 J! L<h4 id="323-提示框">3.2.3 提示框</h4>
( ~& E. p* u- f& ?<p><code>prompt("请输入","提示")</code></p>
) y* S% X' T6 F" Z0 P<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
. X9 ^* |% A, f; N1 H( Z<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 k- Z! A) b( Y<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
6 s+ t5 V0 ~  m/ J' ]+ ^<h3 id="33-计时相关">3.3 计时相关</h3>
, X- s7 [+ P$ f. F9 g0 U8 z+ Y<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
7 g, c: u/ O/ |4 W, o( Q. \<pre><code class="language-javascript">// 等于3秒钟弹窗
4 ?! ^5 K, e! \  D0 J# VsetTimeout(function(){alert("Hello")}, 3000)& S: @4 q( I3 Q8 r. `3 t, ]

) N+ {# e0 J5 H7 B* N% Qvar t = setTimeout(function(){alert("Hello")}, 3000)
/ G9 _! j/ i9 q' {4 z$ D, P$ |5 S6 e$ |
// 取消setTimeout设置  E: y9 @! b6 u9 ?+ m6 a! e
clearTimeout(t)# \- |9 q' i; |8 ?) l
</code></pre>
; S8 b% k* I' Z: i; G, C5 ?3 a<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>6 B7 O* z1 F, h8 X( R: }
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
" V0 t8 T0 Z- w) t' V<pre><code class="language-javascript">每三秒弹出 "hello" :  g1 m6 |2 f" _% v, }- E5 _2 V
setInterval(function(){alert("Hello")},3000);: n7 {( y% I; i4 P& B( U6 b3 w
</code></pre>
) A$ ~2 _6 J9 a/ [) f<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>9 J8 Y$ z% c7 F$ l
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 G) K& \  e4 R' Z1 L* r4 o//取消:3 ~) F' w- Q) m- @1 o1 L$ _, ^
clearInterval(t)3 r  d* S9 ~6 Q! W0 w
</code></pre>
$ j6 P* w; G) v( u8 J, k  I+ |
) N1 O6 l  r# X# U* Q! D
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-4-16 23:26 , Processed in 0.073795 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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