飞雪团队

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

前端之JavaScript

[复制链接]

8053

主题

8141

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26489
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
( H8 v0 J& q1 {$ u& s4 A% n5 O$ X
<h1 id="前端之javascript">前端之JavaScript</h1>) }& `8 @& Z' s' _; `* r6 g/ A5 Z
<p></p><p></p>* e" I+ f# b' h. j" z& t
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( t2 e4 }" A1 h<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>. U/ W, d% ^3 q
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
! o  L2 ^0 u  y6 I6 [它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>. w0 K) {- B, ~) y, Q
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
: N( Q# `5 \6 s6 X+ c/ l<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>8 |# d& r/ C, M7 }! g# }
<h3 id="21-注释">2.1 注释</h3>  p* ]7 E  _+ s* c$ F7 K
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
, ]* q+ J+ M* X' ~! j% u& @3 s<pre><code class="language-javascript">// 这是单行注释( v8 E$ m) i; O  `# \$ T2 ?3 u

" c' T; M. Z# N9 U6 w+ U" u/*
9 Y0 e$ J+ }- }* Q' N9 g这是多行注释的第一行,  O5 l+ K2 Y. N7 ~7 n% M2 q
这是第二行。( Z, q2 |3 C6 p+ N4 L% ^1 {! q
*/
6 p3 B9 v* {8 g: a8 y1 e5 @# v</code></pre>
* C2 \$ F& S  r. K5 B<h3 id="22-变量和常量">2.2 变量和常量</h3>
0 B9 k/ \# [% h4 {3 u% f<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
8 N0 l0 ]0 y/ \6 S+ U<ul>
& g! \2 A, J( Z6 Z( ]3 }( c. U<li>变量必须以字母开头</li>( v3 g- V" c8 c' S7 D" B
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>5 F" F/ b( R8 t% N0 p0 M9 E5 i
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li># X- l: e. }/ v2 C! Z
</ul>
* s  [1 e# k8 r  S1 J<p><code>var</code>定义的都为全局变量</p>
) v5 {2 d2 c" L, |; S<p><code>let</code>可以声明局部变量</p>9 U* r/ g8 S0 L' X
<p><strong>声明变量:</strong></p>
5 Y  J0 L6 Y- b  J6 P) B9 K1 `<pre><code class="language-javascript">// 定义单个变量
1 w* q. q* y: ]* ?. N9 @: c2 A: R- L&gt; var name
" N; Q$ |9 U6 d6 S5 K&gt; name = 'Hans'
& ^* y# D( x2 Q; w//定义并赋值
/ y! e: Z* u4 L& R&gt; var name = 'Hans'7 H1 ]0 @6 S+ S, [$ M0 H& ?% G
&gt; name
6 H) g$ b+ v+ K! p5 O5 R2 l8 x'Hans'% d. ?6 J" o* y2 i- p6 w
7 |% Z0 |; Z$ k5 d3 |1 `
// 定义多个变量7 @7 Z4 M7 b9 v- o8 ~
&gt; var name = "Hans", age = 18
: B+ u& P  C& Z+ u3 W&gt; name% U- e, N% H6 [) ?& T
'Hans'- _% a/ q" l+ n1 y' a" T7 r- x
&gt; age
! R" c6 [' Q) J) e& o: P18
1 Q2 u5 @9 O, {1 R
4 d7 n. q9 a9 W! Z5 @2 E' F( v//多行使用反引号`` 类型python中的三引号/ R3 _: r' B' A2 |' J: X
&gt; var text = `A young idler,( j9 L. ]4 d1 U% J4 E
an old beggar`, i- |7 C; ^0 T( h
&gt; text% D' ?# E: P* Z) ^
'A young idler,\nan old beggar'
4 a! S9 g- O. }7 Z/ ~</code></pre>
' o% x3 ?" n% Q- k( s<p><strong>声明常量:</strong></p>
, _% n0 ~  f# k* R6 K' r<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
8 d. B' k# E7 s6 y2 V9 f<pre><code class="language-javascript">&gt; const pi = 3.142 @+ i( o' ?0 }. o6 V! F% e
&gt; pi
5 q3 z2 ^7 p- f6 W+ x4 `3.14# `0 n3 W0 q. M) x$ ~( E
&gt;  pi = 3.01
; A: N& x/ B# G/ j" p& ?: `Uncaught TypeError: Assignment to constant variable.
, s' u  x- v+ f; n    at &lt;anonymous&gt;:1:4* u2 J0 G! k; T9 L

' }) K) r2 w4 {0 Q4 p; g</code></pre>9 q; v2 G& U- b% \: K) r" i
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
3 W! j, n6 r3 O& g5 H<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
; D/ U# @+ y1 F  Q3 e( x# t+ Z8 W2 O<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
% Z( B0 F6 R' c<h4 id="231-number类型">2.3.1 Number类型</h4>& }( }: J) o3 n- R
<pre><code class="language-javascript">&gt; var a = 5
  h  v  r5 N& h9 t4 L0 v&gt; typeof a   //查看变量的类型  
7 T* j: t! y1 `number6 m$ Y; y0 ^, B$ x
( I* @  K0 x  _
&gt; var b = 1.3' F/ n8 H4 u9 k, E
&gt; typeof b3 M# n3 _" V9 y
number
: w' A3 S3 W7 l+ J" L$ a. |1 t# m- k! I6 m$ d$ _/ f4 D
// 不管整型还是浮点型打开出来的结果都是number类型
: H  C  Q9 I2 O6 E# d4 t- W+ O$ L- a5 p1 U  u+ y% r# ]
/*0 i$ w- q( `6 z6 j8 I% ?" }! B
NaN:Not A Number
! b5 a) s; V5 E! W, T; aNaN属于数值类型 表示的意思是 不是一个数字
6 r3 \$ \  ~3 `' C/ P, R. Z" A3 v  q*/* j# ?) r6 _+ M& Z" b* R+ A
2 ~" n" u8 s. b6 T
parseInt('2345')  // 转整型
  t" J/ a7 x- |$ g' R/ w" l3 o23459 p+ m% h3 l# U
parseInt('2345.5')
" M  B) v" E: |4 |' m2345
2 d8 [! D, _; o8 S( w$ X1 Y5 d3 eparseFloat('2345.5') // 转浮点型
3 V0 [1 W; c  H4 q. n2345.5
0 M- f' J0 A& Z! f, |& J# W' I- SparseFloat('ABC')
! C* I! x' K0 UNaN
% b# U, V( T, b5 sparseInt('abc')
7 R8 r  o5 s0 F' N) QNaN0 M8 d  m# @8 I+ q1 C- l" z) F# J% K  n
</code></pre>
8 d( f1 s' t' J9 p<h4 id="232-string类型">2.3.2 String类型</h4>
/ l& V( t7 H- S& m<pre><code class="language-javascript">&gt; var name = 'Hans'" [# S; K- P& y9 G6 R
&gt; typeof name
5 P! x5 \6 N* N6 d'string'" F9 ?; L/ D0 C

& y( v/ F# i! ~: M* Z6 r5 j8 U//常用方法
, D1 Y7 Y9 D. q! F+ G// 变量值长度; f! n5 K9 j4 t0 [+ e
&gt; name.length, J3 M( P' ]) Z* J3 X1 B) ~
4
* B! m" N7 I8 y// trim() 移除空白' Q0 g' F4 }4 q3 a
&gt; var a = '    ABC    '
6 R& y9 T/ i6 W&gt; a7 v& f1 U/ d1 l# ~! _- x  d: }
'    ABC    '
$ X# F1 B' G- C. ?; F: e8 ?&gt; a.trim()& p& ^, l9 o" P. [4 n
'ABC'1 ^# W2 _. G( o% t# {' z* _
//移除左边的空白
, j! ]# v; A& f# M' Y( ?&gt; a.trimLeft()$ ]8 M( ^3 k7 o* m3 X8 k  S
'ABC    '
; H# ]2 D& R8 b: [0 l//移除右边的空白6 U" t2 ^8 n' B5 Q  o. ~
&gt; a.trimRight(); }, q3 O; G( Z7 u/ n7 M  t
'    ABC'. z5 j$ s5 c. q
  J% l- Q7 P. d  s* E7 {. [* h
//返回第n个字符,从0开始. C2 w# ~: G; U2 |2 y+ O2 b8 x  j
&gt; name( |  b: p5 q  s
'Hans'
5 t$ s# |# U' C* [3 X( V) [&gt; name.charAt(3)4 |" F% I/ |8 V1 n9 h
's'
+ ]4 n$ @# F% D&gt; name.charAt()7 n, ]; x/ \: e, W  i
'H'2 e! t, o' H5 y# i6 L
&gt; name.charAt(1)! W+ r! D/ ~5 g! A% S+ B* [, F
'a'& a4 Y7 m: [# Q
" ~# @' N: n& W8 ?  ~
// 在javascript中推荐使用加号(+)拼接
9 a& t6 z7 Z- Q- O+ L&gt; name) w4 Q0 K6 R/ P5 v
'Hans'; [& ^# o% }+ b6 Q, `
&gt; a
" y% {7 v  `! i/ T; `. A'    ABC    '  J0 U, Z4 j8 [+ a' I  N
&gt; name + a* N& ?/ |$ ?# d. a
'Hans    ABC    '; ?; y+ N8 e( w& v: C- O- ~0 t+ j
// 使用concat拼接
: u3 {8 b1 ^0 T) w9 S&gt; name.concat(a)
) v7 s/ {: A* h$ |# |'Hans    ABC    '1 Z. A' x. P0 {0 N  J( I. F
& Z3 L# J# `9 f. R, i7 J
//indexOf(substring, start)子序列位置
, _, {* G+ n8 z6 B; b4 W' v/ H0 J# S2 t
&gt; text
; F, ?2 ]0 u6 ?1 T1 e'A young idler,\nan old beggar'
6 s0 r, v( P. ^% \&gt; text.indexOf('young',0)6 c, ]2 H: l  O, x) o
2) x4 [9 I4 l9 \1 I
( m" ]# R% c% F0 b& h
//.substring(from, to)        根据索引获取子序列
* _% V% Q, d, L" X( E( T&gt; text.substring(0,)
0 E; ~+ k7 v& o'A young idler,\nan old beggar'- D' O+ }- h! `! D% v7 w
&gt; text.substring(0,10)
+ t- r( ^1 [" n) h'A young id'# |* }3 `* L( H: w
' s; ]. g( C; L
// .slice(start, end)        切片, 从0开始顾头不顾尾5 p1 _/ }$ K2 |0 D4 ~, V
&gt; name.slice(0,3)
/ c" ^: h0 f) _; H" V; ]& C# Y'Han'9 T4 |% t0 t7 L
" j& V. k. G/ p, `% t% _8 `
// 转小写
- i3 o) V( P4 ^# J&gt; name( Y1 n* m0 u$ v# R
'Hans'
( Q/ s4 T% r- I&gt; name.toLowerCase()) A* E# J0 Q' ?2 c
'hans'
4 u: M" Z) {6 d7 [/ n  O* e& j// 转大写
- {* Q% `/ Q3 e- G&gt; name.toUpperCase()
/ X) w6 x9 a* p2 Y8 G: `'HANS'
5 ~. d; m. Q: k. I2 P3 b9 B% e/ ~* ?/ ^3 M
// 分隔: i2 {1 U* M+ x. z
&gt; name
2 }2 P/ I; G, F4 }! |: v, h'Hans'/ U% b% D3 Y7 ^. j. Q: D7 p* P
&gt; name.split('a')+ ?' e8 H, T2 P' _7 s
(2)&nbsp;['H', 'ns']
7 C. u) s% G% b  Q8 Y" T</code></pre>4 y# r. H' A5 i  e; g
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>3 j% P% ]( A/ u8 C
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>- u# `* }! D- O! K
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>- r+ O; X' R" C! R
<p><strong>null和undefined</strong></p>, j0 Z$ `& y! L) F: v
<ul>
1 @! o$ S* o. Y9 x% D% \) Z4 \<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>5 f$ [, P3 A8 y5 q/ d" l
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>. y: x% H0 |) F% m; ]) l+ k: X
</ul>
$ O/ X5 x1 ~. R' h) P! D& v  |<h4 id="234-array数组">2.3.4 Array数组</h4>
& e6 W" N3 f/ t9 q; e<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>! G9 F! o7 Y! X0 g/ l
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
$ U1 T) T  r3 o" P7 k& f&gt; array1: Y$ d% K3 D% T; `8 o3 \
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& |. g- B" D- i9 E+ F1 {; Z&gt; console.log(array1[2])  //console.log打印类似python中的print
: K7 `9 u" \5 w2 ]3 O1 Q7 f3
3 V; e/ |8 j- ~4 y( d. \) I* r// length元素个数
3 q0 c2 I' c& p+ m&gt; array1.length8 t& A6 e2 ?4 k% O
6
3 Q& a% u% I5 L* [/ }// 在尾部增加元素,类型append
5 K" P1 I5 Q5 N. N4 S) U4 W5 l8 \&gt; array1.push('D')0 Q' r3 O0 L0 S6 d6 v. |
7& L: H; n! h/ c- Q: r( X
&gt; array1
* h9 g/ i+ z/ w5 i9 t(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']7 C0 P8 F# D5 c
// 在头部增加元素
1 X: Y# E' w  Y, R5 a&gt; array1.unshift(0)
7 v, p3 `' D: h1 H4 p1 y& U8! |5 [4 y8 p7 j- a
&gt; array1) I* P5 I3 _5 M0 F
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
0 {( Q# c$ v8 E8 y
+ Z! m! x7 X/ b8 L//取最后一个元素& v4 H7 s- t- c- Y
&gt; array1.pop()" `' R' ]) E. n" _$ T+ B# u
'D'8 m  L! ]0 q, U/ u( E/ A
&gt; array1. i1 }% S) Y! x! [' x
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']  l. D3 q0 L1 m5 P1 k% h. D0 V9 U
//取头部元素% a& I& X( _) ^: b
&gt; array1.shift()
2 ^$ K7 e' D3 `5 p# ]5 u. Y0
' S. p7 p4 h' n; s% |7 @0 W6 Y&gt; array1# V& r& h0 b0 p& B8 L! i% l
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 V  P4 W0 o2 }/ S: W/ U) d
0 s0 n) V7 D  q  H" V//切片, 从0开始顾头不顾尾
: [( ?6 b& t) H0 E0 G&gt; array1.slice(3,6)$ N2 N3 n4 `5 ^& t; T$ D7 u4 I# h
(3)&nbsp;['a', 'b', 'c']7 ?6 l/ b, o  R( w
// 反转
2 k$ ?5 N* |: {4 i" I; T# i&gt; array1.reverse()2 J5 G  |5 U3 P- F+ `  k4 \. E) {
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
# m1 z1 i+ O: b) s" S. X: p$ F// 将数组元素连接成字符串( x+ @* T1 W* y
&gt; array1.join() // 什么不都写默认使用逗号分隔
- B- J; t. j+ I6 _& E, T'c,b,a,3,2,1'
, D- z6 Z8 r8 Y$ ^3 E9 @9 ~4 B&gt; array1.join('')
( R' y+ f* s" `'cba321'8 m9 W, j, ?3 ]; q  [2 b8 ]
&gt; array1.join('|')5 ]4 L6 p2 m. d4 ]0 b
'c|b|a|3|2|1'3 g4 I3 Y% y. E$ }$ _1 ~: G

# }, w9 X7 M5 B/ }: A// 连接数组
( h+ l9 H! B, l2 {" y&gt; var array2 = ['A','B','C']# g& O- L, h/ U) `! p
&gt; array1.concat(array2); F" W- E8 P& d
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']) X8 D0 J3 i( w6 v
5 _5 w" |4 N9 s, C$ Y
// 排序
  F+ n* c! D# F5 g&gt; array1.sort()4 L3 \' H9 {: r. ]
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
! O" h- }$ C8 F$ J4 O9 V! {# N" u3 @& I! R& N
// 删除元素,并可以向数据组中添加新元素(可选)$ Q; V( X1 a# |" P/ M- u" [
&gt; array1.splice(3,3)  // 删除元素) ]1 u1 f/ }$ U  `
(3)&nbsp;['a', 'b', 'c']
2 T. m( A  x' q3 i9 K  |&gt; array1
( H% s- o( V9 Y; e1 @, U3 k(3)&nbsp;[1, 2, 3]
0 v! {/ O  x) o4 d# i&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
3 a* b% ]! z& E% G, O[]
6 e1 P0 @; g' e$ F+ f5 P1 A&gt; array1
, q0 W* x0 @4 V$ D, a. L(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']- Z: P' R, ]9 ]

  @( [2 y6 b# r9 h# ^$ E/*
! m7 k, u$ A+ S3 v+ \; b6 ^splice(index,howmany,item1,.....,itemX)
: h: [! g1 [2 w3 z/ g5 Nindex:必需,必须是数字。规定从何处添加/删除元素。" P/ }7 l9 J5 s! \& g% C
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 L. T! ?; F6 }# ^8 ~item1, ..., itemX        可选。要添加到数组的新元素( F' J& d% b! U# r
*/
* M  Z$ v5 E% P, _  ^( {7 s* }$ G) Q8 ^* \% L3 F
// forEach()        将数组的每个元素传递给回调函数
- @- `5 n" r% Y) ~$ B( R+ B&gt; array1.forEach(function test(n){console.log(n)})1 k1 c* C4 d. k% ?% ^4 `$ m, S
1
. Z! ~- ]  R( Y! c 28 U" j# D$ n$ `  q5 {# O1 E. H
31 E( d2 u0 }) {4 y" K0 q) f/ J
A
5 u: j* H. ^; m, X B
% F/ E! C2 w; P' F7 H/ T, X C# b1 C6 n- r8 j8 u
// 返回一个数组元素调用函数处理后的值的新数组
# Q5 X& g+ [0 r&gt; array1.map(function(value){return value +1})
" D6 c2 h- D; p- M(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
' h$ y" r0 f( x$ c- W- x</code></pre># r4 ^7 C2 K6 ]7 \, o
<h3 id="24-运算符">2.4 运算符</h3>
$ l+ g0 q' K6 c) X) C2 w<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( Q: J; z) z7 O+ j0 d
<p><code>+ - * / % ++ --</code></p>
' L" J7 G9 P, [<pre><code class="language-javascript">&gt; var a = 6
% z6 F' G6 g5 p&gt; var b = 30 q! U. i1 t3 a$ k' r, P% w7 w5 R1 u
// 加
1 U/ m) M4 k8 }% p& ?' `+ E&gt; a + b
2 Q3 [3 ~& r- Y& r97 T/ i+ @, [# T- B* j( I
// 减
5 Z3 P; f' N" U9 ^6 G8 F&gt; a - b
3 ^) u" a6 O6 ]- n. L1 t' E33 z$ D+ K; A' R' h; a
// 乘' h6 t6 x" d+ h) u$ E
&gt; a * b0 i) S6 p% X- }0 w! ]7 `0 S+ x3 O
182 R4 d, O5 E! a% m! o+ l
// 除4 D4 s9 f9 h# u# }" `
&gt; a / b( r: R) Y5 k: \* D, S+ X+ J
2
  [, R" Y) H' i6 O// 取模(取余)
3 q, J) _( {, Y, a&gt; a % b$ E2 J7 b- n) v+ E
0
4 Q2 ?, G& D4 V* t, ?% _// 自增1(先赋值再增1)' I& }; Z9 h) v, d3 ^
&gt; a++
! z, F" |8 |: C0 n+ d7 k" ~4 j3 p+ p) v6
+ s+ t) A5 T' K& b7 E: Q7 N" `&gt; a
7 r  D4 F* l; L+ F. d7# A3 |" B# b$ o, y4 X
// 自减1(先赋值再减1)
0 @8 ?4 o* e3 F$ R4 A& T&gt; a--  Z: j5 k+ x0 l+ `2 b
7
# T0 ?& K2 S1 [, P/ D  G+ L&gt; a
" B+ j; @: y! n# c* O$ u6
; ~. f: \+ ]2 H// 自增1(先增1再赋值)' x1 E, V5 u, Z+ l1 W* s
&gt; ++a
) y/ ]" V. ?6 q: _/ d$ l7
1 f0 T+ {2 {' a0 j& ^( S// 自减1(先减1再赋值)2 ~8 d/ |. Z& ^9 j& e- q
&gt; --a6 l, r# X  E7 Y2 C7 ~0 r* o$ O
6
1 {. `+ I3 i1 @# l% Y&gt; a/ y* E! @7 j3 A) ^' E& S8 U: H
6, ^& W+ I; ~* s* Y' @
- {8 W( ?! Y, v5 u% J. _3 X
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
5 \9 G; M! N  G</code></pre>
0 q3 u4 f9 w0 t3 n8 Z* J<h4 id="242-比较运算符">2.4.2 比较运算符</h4>) w  Z, V" e( @" i6 e, q: c8 n+ L* {
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" Q7 F. z0 c; |/ h( @9 }
<pre><code class="language-javascript">// 大于
- O: ?3 ~2 R/ b4 W1 I+ p8 c  B&gt; a &gt; b+ g* w% S/ z2 {  O# D6 X
true9 M/ O: Q& ^$ m
// 大于等于# ]0 G1 M' n( T( F6 W
&gt; a &gt;= b2 J/ K; g2 S' ]% j9 w2 Y# Y
true7 n; J* b1 @( v1 p7 ~# J
// 小于7 J: R. u, ]" a) l$ {
&gt; a &lt; b; b. R- ?) Z7 k- W% \9 P: k
false% N* D5 L5 Z* k& Y
// 小于等于6 p: F* J3 a6 _& U" |: S  B: E
&gt; a &lt;= b
% f7 _. |2 B1 L; S4 A! `false" ^' [7 w* {/ r* {8 {  z
// 弱不等于! R4 U* d4 g7 @3 d6 x
&gt; a != b- s: e: s8 D' L% t0 `6 o& v9 i/ C
true
) a, B  s8 U: d- a// 弱等于
' I: G7 E8 _& `; Z4 F/ L&gt; 1 == '1'
& Q8 ^9 V: q+ Ytrue
+ Z+ w. b+ ?' K+ h// 强等于
6 H% n* N/ z* B% @&gt; 1 === '1'
9 t" L2 M4 L" w1 }* i# Ufalse- s3 c# @3 h+ I9 L  `
// 强不等于7 Z7 x' V: [( k' i1 S
&gt; 1 !== '1'
  h" O2 p8 i4 S' E" |! Ktrue
" u! H* D% ]% k$ ~$ s! N
% P. k7 t3 J( {" j+ z) \/*
' \% r% I5 W) d1 HJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误. T5 ^# ~0 H" u; D# U  \+ r
*/' S6 e! c/ V) K) Z
</code></pre>
3 @  K# p& X! x; ]2 V3 Y<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
) K5 F4 |; z3 ~9 W$ f) m  k; k# k<p><code>&amp;&amp; || !</code></p>
( C1 }' u% C2 K$ B1 U4 M; ^<pre><code class="language-javascript">&amp;&amp; 与, ~8 }6 ~: ~& ]; V+ e' ?& E+ z
|| or $ s# \4 ]0 b* ^
! 非  u* y, _$ X5 {" N
</code></pre>
' k9 L4 h2 Y: Y3 H<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>8 ]2 ]9 P1 k5 [+ I' [, J/ a' \5 S- d
<p><code>= += -= *= /=</code></p>
* Y7 h& E: q, j<pre><code class="language-javascript">// 赋值
" M  |8 `) F; |! b8 `&gt; var x = 3
7 e+ C: B& i$ r4 k  X6 D- k// 加等于
9 k4 F4 p. f! C7 x; n5 v+ C&gt; x += 2
$ ^3 g1 k5 A: h- B5 f) O5, b$ l& |) N$ b6 i
// 减等于
0 V  i, W! z3 y. F' w: O&gt; x -= 1
* v# s( F( }( |- G0 w7 e4+ a+ }. Y9 \+ y. N" l
// 乘等于
' o1 v$ ?" q5 p% {$ }+ j&gt; x *= 2
9 T( Y7 U! D3 K+ n8 C8* e+ A# Q  E  C; z; ?% o4 N2 c
// 除等于
; ^. L& s# C1 j5 B4 H% z&gt; x /= 2& M% e# `5 ~  V
44 D- f% F" [( N; ~2 b  U$ ]# k
</code></pre>
+ z/ }3 g7 i) J* U3 p6 n/ [/ F. o<h3 id="25-流程控制">2.5 流程控制</h3>, F2 m$ f. k, N' _1 z1 z
<h4 id="251-if">2.5.1 if</h4>
5 ^5 e5 a0 s/ }2 ^$ S9 w5 e5 A4 y<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
3 T; S# V3 t% Q# L& a5 X9 Y# ^% @$ O- N: F1 D& D2 U
&gt; var x = 3
; G3 K7 S  M+ m/ U% B) A&gt; if (x &gt; 2){console.log("OK")}
7 @+ @) G6 b+ O3 \ OK! V" I' M. M, E$ h8 l  `
; K7 h& i0 ^+ t8 l  }& p
2, if(条件){条件成立执行代码} 1 d3 y, B2 j1 E5 ?2 ]' h* J
        else{条件不成立执行代码}
2 [8 d* ]0 M6 n0 X/ _( s2 H5 ^  l) R1 ^/ [" F3 Y+ f
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
0 U, O/ v! H$ U/ J! h! p' Q'NO'
9 |$ d5 d/ a5 |% \7 \# o0 k+ t! b( @- |2 P6 S1 E: e
3, if(条件1){条件1成立执行代码} # G. p: @$ R5 p4 |1 B$ i/ G  Z
        else if(条件2){条件2成立执行代码}
) I) a& q6 p/ V. U, d9 f8 ^) k    else{上面条件都不成立执行代码}  b* R" O; X9 V; `! d
9 f' C' E' p" u1 i- b
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
) y! a3 `0 H, `9 {! I( f3 R* L Ha1 T) O, b1 D+ I& \# I
</code></pre>
) u" I+ S4 Q# |" T7 u<h4 id="252-switch">2.5.2 switch</h4>/ B. e: t1 A; y7 h6 o
<pre><code class="language-javascript">var day = new Date().getDay();
6 _  ~1 K+ ?! ]$ c8 k: m) @! bswitch (day) {
; D" ?5 y0 n! T  case 0:
' R5 [: I7 H8 S" D  console.log("Sunday");- d" T) U$ X6 o, H
  break;9 ?+ ?) j5 a- r! _
  case 1:) \) d6 f2 M& _& C. N: |
  console.log("Monday");
$ }3 \3 h0 L, A* I1 P9 s# t  break;, I5 f6 J' l& ^. C' H0 ~
default:, k: u7 [' ?1 {2 D# K
  console.log("不在范围"); C# `" G5 m$ T  s
}$ J1 {/ ?* T/ l
不在范围
2 B( j' q* F7 T4 w</code></pre>+ v6 X  G2 d8 f9 w& O: p" v: l6 m
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>) R' X4 r' Q) M9 Z9 O, Q/ j
<h4 id="253-for">2.5.3 for</h4>
+ `* Y3 F, t' Y! I* q5 x/ L( b8 J<pre><code class="language-python">// for 循环
% z& L' t6 T% q" R" g1 M+ u# b  L        for(起始值;循环条件;每次循环后执行的操作){
, p0 D( v$ j* l, d4 l, F3 J% N9 l  G; J        for循环体代码. t1 A+ U3 e6 h, ~  \
    }
2 G% A" P  ?- U* L! U9 I% d; v. m6 \. [2 \8 p: c
for (var i = 0; i&lt;10; i++){
; F. O9 s# B% y* V. R, w4 f    console.log(i)
2 E" e0 [/ g5 E# Q}) Q2 z# i' V  s( t  a; j7 l
        09 m7 B0 s7 L) y% l# C  L
        1
8 z# W$ c2 M; w. N1 B% A        2
, T0 r9 P* r7 b. n7 l  k  T        31 R9 ^2 g) N+ N6 L& n! M
        4
& g/ ~+ }5 ~& z% O        5
; k) S( X  o" M" S7 L( r: J        6+ o! C" n& r9 g/ P  P
        7+ T4 q: P: _+ v# F. N
        8
, `6 R2 F9 @; T& ^* }& F        9( n+ d. L, c9 \9 ]
</code></pre>
( G- g: m6 Z8 W8 p3 z/ K<h4 id="254-while">2.5.4 while</h4>) f5 T  x1 Y" W* Q
<pre><code class="language-javascript">// while 循环) Q, _5 M2 V3 H  h
        while(循环条件){5 p' X( _( q" C, ~: m$ @
        循环体代码
5 S/ p+ L% Y  m, r# m( t) a    }. v: p9 Y- L, K. p" V) C, N

3 n1 D( p9 U+ m  j( v( u&gt; var i = 0
% _6 k9 E$ Y/ [# ^9 `* T7 S&gt; while(i&lt;10){/ O4 }( C  k% z$ p2 v% m/ z3 H
    console.log(i)4 [' ^4 _# h( y+ Y  q& F7 k
    i++
/ S1 V3 ~  A5 e. W}4 }9 Z4 w! n2 v# }- p: D( r
09 n: o6 ]) F! D3 w: L" n! E/ b
1( M( X% Y" o& q7 ~4 y4 T: n
2
, d! z& H, ?0 S: M0 g3 H( d" ] 3
) [# ]# |- O4 [0 h1 ` 4
4 O3 l# T7 h+ F" ~ 5
& Z" Y4 r+ @" v  H 6
% x4 s* s- y  \9 j1 [( i/ \ 7$ R/ W+ q* Y6 s; \
8& L7 X3 m+ _1 m
9/ s) o5 `- j' I8 }' a) X
</code></pre>
2 E  n: y) K  r<h4 id="255-break和continue">2.5.5 break和continue</h4>
7 q8 N" U4 ~3 U2 m3 W. W0 U<pre><code class="language-javascript">// break
: [# |) v+ c+ \% e. Dfor (var i = 0; i&lt;10; i++){
4 R) ]7 m' a$ G0 X3 b    if (i == 5){break}
- N( d5 l) g- T7 H% q' \    console.log(i)" i* I" |) v3 l/ }
}
6 d6 o" [5 N8 e, o 0' I4 K. D. e3 d+ b& L  z- r
1! \- L2 `4 g2 O/ _
2
1 V& ?9 T; t- m 35 a, ^7 t2 a2 Q8 S% \
43 R. l' P, p- o8 B4 M
// continue' [6 j: s! s; x& A3 q' t
for (var i = 0; i&lt;10; i++){( @% K# C1 W- D7 J1 }
    if (i == 5){continue}8 k2 l7 v% I! d& n
    console.log(i)' e/ p# d: G7 f' P# T" Z  Y! R% E
}
5 I; W# d' _# [' q4 u 0: S9 J# ]  q4 V  f- `) N8 L
1* m- `' M. P: C
26 B, _6 c& S& G8 l
3( [, I; M& K+ r& Z3 y( D
4
+ i2 U2 I1 ?4 a2 I# Q( o 6
2 e! Y. h' a( D1 t! T! A 7
, P; D3 `, g7 D; H+ O9 ] 8
1 |3 V+ A& Q0 [! [5 H 9
) p2 |1 _9 N# A) F
# i, r4 a0 L( w+ J7 s4 k! d* I. G</code></pre>
& Q6 x* p: }  E" F$ A4 u1 Q! l<h3 id="26-三元运算">2.6 三元运算</h3>  x, t" ~; X. T5 h; s
<pre><code class="language-javascript">&gt; a
3 C; x7 p6 Y; G) _1 W& Y6
" Q, y) f# c$ e* l1 O7 B&gt; b- f; E# N3 S3 f% T
3
" j9 i! \5 L) H+ p6 O1 c
: u$ d- h) [1 Y% G//条件成立c为a的值,不成立c为b的值
4 `* P5 j3 j( M, `7 J$ {&gt; var c = a &gt; b ? a : b$ i, Z* w0 y0 L. H+ m/ ^" V
&gt; c3 l/ p7 C8 I/ P* E  a& f) S1 N
67 L& g% O2 m+ z. \, p+ T+ v

7 U' ^# F* T$ r! a+ W! G$ F3 H/ l// 三元运算可以嵌套
- b; }+ S3 [/ p% P' }2 m6 m</code></pre>  T/ w9 e" k+ T* q- ?# x1 J' W9 ]
<h3 id="27-函数">2.7 函数</h3>& y* `0 q/ T6 w- k7 H
<pre><code class="language-javascript">1. 普通函数
6 U8 L: Y4 X' f&gt; function foo1(){
4 A$ M) ]3 M  J6 n; }& v    console.log("Hi")* P) |) C; h. s
}
3 f2 n  d( R/ ?. E% `; J2 j7 K/ B
&gt; foo1()" V: D* n; r& a: ]
        Hi8 q8 A' N4 ?7 {5 H' x7 r, [
2. 带参数函数
/ {5 Z) R& h8 r+ |  k& h&gt; function foo1(name){
7 N. n9 z- _5 c5 z+ a; r9 oconsole.log("Hi",name): F- r# k( K& `% N( Q. L. `
}, g! @7 L! T7 N( a6 V  H( e
* h, ?- i" Q/ l4 K% a8 H& I
&gt; foo1("Hans")3 F; w% E& [& Y. V1 \5 E
Hi Hans% G+ E" I8 ^5 s5 T; E4 y

2 y. ~4 n/ @' H&gt; var name = "Hello"
5 a9 e$ T- c9 P&gt; foo1(name)
! @+ X  q. |8 D3 N7 S# s1 OHi Hello
; t/ h; B0 ~  N9 g+ i' y3 g+ b9 _7 m5 o; I7 V" n
3. 带返回值函数
) M# i& p& L* e&gt; function foo1(a,b){
$ C% c8 K5 o7 c* _        return a + b   5 {8 X. p, z: z, B4 h3 T/ V9 L- P$ _
}. n! q0 g. _6 ]1 }
&gt; foo1(1,2)
0 k6 ~" x: w, T( j3" y5 w: z( |) W( `
&gt; var a = foo1(10,20)  //接受函数返回值
$ ?. ]" N- x: Z, D9 ~( H; k5 X  Q&gt; a
1 y9 M4 U* }6 W# M9 a8 Z30! _# |1 Z: j! A4 U0 m0 T$ U; P1 Z
6 Z. p- N! Z% t! @
4. 匿名函数9 R9 I5 Q/ }* z4 y, ~+ ~% _
&gt; var sum = function(a, b){
3 d- B4 P: k" P6 s0 \  return a + b;! m% c* Q5 G, r
}5 ~5 x: z. }, ]/ \: `0 Z+ Y
&gt; sum(1,2)$ N2 f8 M! ^8 {; N; u
3
4 [2 r! m( E- l& _/ d  J2 w: e' E- ]6 x* m
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱( b) H$ @& K" G  f! x
&gt; (function(a, b){
; G& x. `3 `5 e, o3 f  return a + b
4 f8 P2 H) t1 N+ K/ R8 ~  |2 g: F})(10, 20)3 M; Y  r1 w% s/ M
30
2 d6 o- L" {! x: V, A# @8 C8 e( y8 {
5. 闭包函数  }4 }. l, n% t' F$ A, H
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
- k  O8 J5 S, P( g6 `+ Uvar city = "BJ"
+ y- c5 k- k' u$ ufunction f(){
, N5 `4 `1 L8 ]. [6 f    var city = "SH"! _- \1 C% u# |: S7 b
    function inner(){& O& @/ F- j2 |* ?; _" A7 |
        console.log(city)# o+ j6 g) I1 {1 x4 v$ R
    }8 G. L+ T7 q9 M4 c, d/ X% Y, n
    return inner
# ~4 C  R4 R7 X7 T}, S3 {. C1 l9 U- o
var ret = f()$ ?5 G9 s8 P& u+ d& O
ret()0 H$ t0 `* V# a- f$ v
执行结果:8 j4 g% P3 V/ {
SH
! T8 e. C) `5 I. F8 O4 ?, C/ P0 C& U6 h# ]
</code></pre>
+ i  k8 B1 m: w3 W5 h, a( G0 Q<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>1 ~8 F; B1 q' C7 f! z
<pre><code class="language-javascript">var f = v =&gt; v;1 S5 L8 x6 y8 u2 t2 |/ o' Z& P* {
// 等同于
9 D5 }: ^* h' d% V. P9 P7 p. j: _var f = function(v){
$ R; K& {7 K+ I  K  return v;# E3 m  q4 \- F$ Q) D' H
}7 x. q" n' }+ z6 O
</code></pre>" H$ C; e& p/ H) l5 {3 ?
<p><code>arguments</code>参数 可以获取传入的所有数据</p>% }1 \$ o! \/ N6 ~- T
<pre><code class="language-javascript">function foo1(a,b){; I1 H* G; y, o; H4 }3 L$ a
    console.log(arguments.length)  //参数的个数
& C# g  k, M5 [' x0 L: }    console.log(arguments[0]) // 第一个参数的值
. {0 W( H% ^5 O        return a + b   ( C& Y" D! b2 O- ?
}; L8 Z. E. X; Q$ |* x, b
foo1(10,20); J2 x; k# d) R
结果:" @" @" Y( j/ z6 ~
2          //参数的个数 . x$ c! R& B4 p* A8 U8 E: ?# @* F
10        // 第一个参数的值
2 i6 H" l+ \1 h; m4 Q4 k30        // 返回相加的结果
1 n) I3 x/ h2 b) }& B8 z  c</code></pre>- ~% W) H1 @" u% z% T# P
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>% A9 A& z/ g) _2 w  I( Z
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>9 A$ r& A3 q& [, d3 V& y* @; o& U
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>; h$ v) ^3 F% D; ~
<h4 id="281-date对象">2.8.1 Date对象</h4>
% K  p1 v9 F( j1 e& F<pre><code class="language-javascript">&gt; var data_test = new Date()
5 h* r+ ?) H7 {& E2 P; k& G&gt; data_test
- R, p$ s9 f$ _& rFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)/ `% F2 Y: c$ \% \! R/ m, }
&gt; data_test.toLocaleString()
  p( Y) T. l6 W'2022/2/11 下午9:44:43'( l: a. c6 J* E8 i: F, F
6 p( X; w" V; o6 x# M& T
&gt; data_test.toLocaleDateString()
) z% S) L% G* p6 h; w( L( T'2022/2/11', R+ |* q$ B, ^# D/ A3 O! i1 @
! i5 q, B- L( V  L
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
9 O2 d  E1 C. s& t( t3 h9 q& }) J&gt; data_test2.toLocaleString()" ?( k# @# J; o
'2022/2/11 上午9:44:43'1 d( O4 f( |$ I/ m' q: D  G# F

3 Q1 F1 I2 X7 V- e// 获取当前几号
+ L" g2 L: U7 E  w$ P* g&gt; data_test.getDate()
/ j' E+ v7 M* \! s3 @11
% \# R- D- l( U6 e' f& J// 获取星期几,数字表示5 t: r0 h1 H# D. p' k
&gt; data_test.getDay()  . G0 p" }6 O* x. `) B# E
5
: g3 b. h4 k  @" A# |4 w// 获取月份(0-11)
) H1 s6 R! m0 C* G( L- F2 M5 x&gt; data_test.getMonth()6 R( g) O; e3 F" i7 D3 O
10 T  @/ S! p' {" I, G
// 获取完整年份
5 @4 B/ V  i4 l9 B( R&gt; data_test.getFullYear()
+ j3 c; ]0 `7 f' n% \$ a2022
) z2 m% E; q1 T% P, ?& b) q9 A// 获取时
  u$ D; v. I, C0 l- p2 j; X&gt; data_test.getHours()/ `% _& n) C' h
21
1 |$ Y% r" u4 v# I" h// 获取分
  J9 M* n( b$ f& h&gt; data_test.getMinutes()# y; S; w+ w: l5 `
440 V( {% |; m2 ?7 Y0 ?% G5 \: ~% v
// 获取秒
4 m3 \7 f, Y! A) E&gt; data_test.getSeconds()0 A+ U/ L  i& k
43
! Q: A/ J; s' n! z& f; y$ D, m// 获取毫秒
7 h2 R4 G& j: }# F% `/ }. e&gt; data_test.getMilliseconds()6 l( H4 R( w) d3 j+ C- V
290$ E1 H1 X5 {% J' E
// 获取时间戳6 h2 k  T% o5 R
&gt; data_test.getTime()
& m1 W6 X) O7 |/ t1644587083290
/ C, {5 f8 A5 K9 K  y1 }% n% A</code></pre>
- `9 A6 x5 f$ V8 i  r2 n) a<h4 id="282-json对象">2.8.2 Json对象</h4>% T4 s6 ^: i, T$ ?9 _, ]
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
6 d1 m8 a# ?) M+ tJSON.parse()  // 反序列化,把JSON字符串转换成对象
2 f& V" }2 G# i: T. u7 I9 E0 s8 I' ~2 _6 v4 t
// 序列化
! P7 x0 t$ p7 X+ {&gt; var jstojson = JSON.stringify(person)
$ s5 _5 C  c/ A&gt; jstojson  
& o7 c  i9 d/ T; D3 Z6 D( b/ d'{"Name":"Hans","Age":18}', I5 T0 r/ ?  N8 X; X/ O' d

8 v$ B, c6 ]& W) Q3 ]// 反序列化! Y: u2 N. f* u& M2 k
&gt; var x = JSON.parse(jstojson)& J+ q6 O2 B) f1 o! [* N5 R( a
&gt; x5 c! C/ J# C" D7 C+ h( A! t
{Name: 'Hans', Age: 18}
# n1 P9 C; `' {. V3 G&gt; x.Age
) h7 ^, {5 ?1 P2 G5 ~+ B6 Y8 ?181 |8 P8 K" s3 A3 X; B
</code></pre>( m  k- Z) @9 u8 m' L
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
9 a) f' N' I( S" U' v  @8 B<p>正则</p>5 m; z! o' U, k$ O
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");" @( v7 X2 j' v+ Y' f
&gt; reg16 ]6 g0 P  K# b' x$ L; g) a9 \% [2 _: e
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
0 n; \& _: v3 o& E7 m  `5 M% g& d( d0 k2 a) V&gt; reg1.test("Hans666")* p1 o3 T3 M/ v' k! ~$ o
true7 L! N8 w% Q% T# [4 A5 |  t4 s$ w. ]  k

$ B3 r) B5 F8 w# h0 s&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/+ n, d; @! [% g
&gt; reg2
0 F% ?- T- L# w- s/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ x! W- r: ?1 h- O; u7 s# |&gt; reg2.test('Hasdfa')
0 ?% M" t# K2 `& Jtrue
* L2 b, ]! v( l) u: j0 Z
3 i( z  A5 {' T) E% a0 c2 N全局匹配:' k5 n6 j8 e: ^. k9 F8 j# O7 ^8 v4 u
&gt; name
- I) t% I+ B  b; m'Hello'
$ h8 ~/ N' d; `% v* g&gt; name.match(/l/)
7 o+ ^% L* |: s" G0 Y['l', index: 2, input: 'Hello', groups: undefined]5 [4 _; v. y' j) b! s

8 }$ _% d- E8 B- i% x&gt; name.match(/l/g)
; m8 }' v+ P( A) @. |& i(2)&nbsp;['l', 'l']
6 v- ^+ e& L. B// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
) r. p+ Q. ^% I" |, m* f# G8 D
. G/ j1 J- e' _全局匹配注意事项:# W" d9 Y, _* F, e( ]4 B8 L; S
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g) M# Q+ G. W1 |
&gt; reg2.test('Hasdfa')
6 C2 @, X) ?$ u4 [2 b$ mtrue
& T! I# v' o8 j1 G8 s# w8 Q/ y&gt;reg2.lastIndex;
( O& m: D) C5 i$ }/ p2 E6, _1 X9 ^. R. |6 P$ k
&gt; reg2.test('Hasdfa')
; R. j" ^0 k! b3 R. ]0 X0 [false
6 f, x, a. }; U" B; x&gt; reg2.lastIndex;
- z- ~  C. y4 i9 l2 C: a0! K" m0 }. }7 a9 k" ]
&gt; reg2.test('Hasdfa')
- [* ~3 T; s' Ytrue
- m- h9 s+ v- e' t&gt; reg2.lastIndex;
9 H7 H5 F9 |5 V9 S6
- y! f0 k) I8 c* T- W&gt; reg2.test('Hasdfa')
. S+ b5 |! k, j# v6 u/ e6 Gfalse
2 d9 n$ \. `! Z% T* i* t. L&gt; reg2.lastIndex;
4 D5 M, L7 J9 r  r  y0' F- B7 J3 A. N
// 全局匹配会有一个lastindex属性9 {( j3 b7 s( I) A' x+ M+ p
&gt; reg2.test()
: o9 L! X7 Z3 Z1 G1 M3 ?false( ]4 X) A4 U, b% g# [0 M) R
&gt; reg2.test()
6 s+ S0 e/ x6 Ztrue
" y& t1 I, I4 m  U// 校验时不传参数默认传的是undefined- k8 I) R5 @" h0 P+ }
</code></pre>
8 c" C" j, b- w3 R1 c<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
8 }% A) _3 k4 O: D<p>就相当于是<code>python</code>中的字典</p>, O/ o: u% m4 i& F. X0 f
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}) D4 y/ m) C" \- w3 Q: Z, U7 P
&gt; person
& t8 v: Z% Q! U{Name: 'Hans', Age: 18}+ J$ u  d( w$ P" B
&gt; person.Name- ]; }$ @* L/ Q$ d
'Hans'
" v4 z- t0 {$ M, [&gt; person["Name"]% g( w+ P* {' P9 Q9 _  p' Y
'Hans'$ ~; @. t) d* O4 S/ p( ^; {( y

1 t- q) H' X: h" v// 也可以使用new Object创建
; \/ ?( k4 {( H' ?" ^&gt; var person2 = new Object()4 Q' [  F) v: n- V4 g3 ?& \5 I- u+ e
&gt; person2.name = "Hello"
5 Z. I- d2 O( p' ~1 B'Hello'
* Z: D6 Y4 i; x) i&gt; person2.age = 206 g6 D4 m5 b7 ~+ C( S, x+ g/ A
20
0 w# r" j( f6 Y( l1 F5 o# V</code></pre>
4 a5 y9 h5 `0 y<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
; K5 F. l" t& u, L; d<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>5 @+ ]! Z; P$ b2 _
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>& j: C7 s$ e7 B1 O- _( q, v( ]7 S
<h3 id="31-window-对象">3.1 window 对象</h3>' g* R( \$ ?. L' _5 z% s) W, z" I
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>" D; e' _+ t) S0 b  a
<pre><code class="language-python">//览器窗口的内部高度
& t. |  n: r8 o. U8 lwindow.innerHeight
8 |$ o4 j# p2 _& F" b, ^706/ t- g: j, {3 `8 Y
//浏览器窗口的内部宽度% s1 P- r/ E$ u1 v: n
window.innerWidth% K0 p. \# x: k: O
1522! t' A( z5 F; w, j0 w1 ^/ x2 B
// 打开新窗口
# F/ j1 {. ]/ v* i) K+ `% O' Jwindow.open('https://www.baidu.com')
$ J" j' g! u( P% e7 Z) }Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
2 Z, G, L4 O; s' \$ A3 h// 关闭当前窗口. f6 x7 E. t0 }
window.close() : ~3 y/ e! ]' D6 Z, t
//  后退一页& S5 Y/ M& J; Y4 k8 m& e
window.history.back()8 X$ M  `( f+ J* F" J! C5 l2 T9 e* m
// 前进一页
5 ~- ^( N$ P6 c) v& F5 ]3 ?3 \$ Bwindow.history.forward() 3 H: P' R( Q$ Q, Y: E1 b  x
//Web浏览器全称9 n% c1 L0 b$ U, s! d+ D) v
window.navigator.appName
4 C6 e9 o" z9 R  }'Netscape'
! Z2 G; J, F) e7 `9 O// Web浏览器厂商和版本的详细字符串
9 }9 {) u& X" _/ {5 Nwindow.navigator.appVersion5 c6 p" q. v( E5 X0 }  S+ |
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'; R. ?! E2 w+ Q3 ~& K. y2 v
// 客户端绝大部分信息
4 d+ m: p" I, j- `1 }window.navigator.userAgent6 S; O% l) G3 E: s9 [! F. Q* E% o
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
( t+ [) r; h- O1 u- Q// 浏览器运行所在的操作系统
/ {" \# M1 H+ s- Wwindow.navigator.platform6 |' [9 E' B, z# M) w
'Win32'
0 _* J7 A$ V+ z- o1 i: ^  ]
5 p/ Z# [8 v; j//  获取URL
$ N7 Z; }" x6 z' |window.location.href% K! ]' l8 Y0 ^7 x4 o6 a6 Y
// 跳转到指定页面. G' ]8 ^6 }0 z
window.location.href='https://www.baidu.com'
! n$ D$ b! C( Z& ?' f; q- G& |: r// 重新加载页面3 m  e" N  t7 A# W$ e. R
window.location.reload()
5 X+ g6 @; ?/ j* z8 q* E# ~% l6 |+ [</code></pre>+ k! ^' x; e% o
<h3 id="32-弹出框">3.2 弹出框</h3>
3 _. d- b3 Z; D4 k: u$ r8 W<p>三种消息框:警告框、确认框、提示框。</p>* R6 {* d/ N6 `$ O
<h4 id="321-警告框">3.2.1 警告框</h4>
, V% a9 z: {9 p<pre><code class="language-javascript">alert("Hello")
* c$ s. w+ w/ a6 H6 \</code></pre>
5 X& x  k3 G" l+ D7 C<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>- z7 M3 k( t# y  V& `
<h4 id="322-确认框">3.2.2 确认框</h4>& T, C0 `' V0 a3 ~2 Z
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>( i1 P$ `& K1 t6 s$ u% _7 k8 A
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true- d) b3 q2 u- w9 O+ b; r- t
true6 ~6 p  f: Z7 _" I
&gt; confirm("你确定吗?")  // 点取消返回false
9 c! Z4 o* H: mfalse
9 l" V/ K3 l$ `  S</code></pre>
; Q' D5 o* [" d+ `<h4 id="323-提示框">3.2.3 提示框</h4>' z0 y& q4 }& }" c: V
<p><code>prompt("请输入","提示")</code></p>
' D. |7 U" b5 T* |% i8 X: b<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
! w' j9 `$ I) g+ E0 h9 t* u<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
9 l7 j. E: s3 c4 |7 \<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
; D! x- o0 T8 x+ R<h3 id="33-计时相关">3.3 计时相关</h3>) C3 ]$ Z: G. W4 Q# k, M6 t# c
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>* |$ s' f4 B5 j1 {# g
<pre><code class="language-javascript">// 等于3秒钟弹窗6 Z$ f- L% \+ m3 U
setTimeout(function(){alert("Hello")}, 3000)
0 n! X- z. W  \: t2 b) W$ _
+ g; E! |7 |( j! I3 gvar t = setTimeout(function(){alert("Hello")}, 3000), \0 \+ K( ?! b0 q7 p: T

6 \1 ?. s' B0 ?2 O// 取消setTimeout设置0 h" }% y- {: ]4 ^0 [- ?2 m
clearTimeout(t)
1 D4 F  H$ G8 B# ~4 \( d* C</code></pre>- ?' q' ?5 ~% m3 I
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>3 C; D% V8 G9 N) ]# p. p
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
4 V# E8 i% J% _  g1 s8 p0 c* i9 e, r<pre><code class="language-javascript">每三秒弹出 "hello" :
% O. `$ i- ?/ T: }setInterval(function(){alert("Hello")},3000);
- h( u+ d$ {( ~; \. X1 E/ K</code></pre>6 @) Q7 l) C, t$ k
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
( Z, |+ t1 B+ C3 u<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);# F  C( C, |* Q3 K
//取消:9 Z7 ]' t8 f0 n
clearInterval(t)
& L9 A5 r8 Y* M! W7 J</code></pre>
2 E  Q+ R2 R& }) f  s+ q/ i0 ]: n1 v
# s, q+ |% y1 S
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-11 19:21 , Processed in 0.067688 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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