飞雪团队

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

前端之JavaScript

[复制链接]

4137

主题

4225

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14711
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
0 T! _! X& f  g  l2 b- V4 y( {: I
<h1 id="前端之javascript">前端之JavaScript</h1>/ I* e# G/ ]4 G1 x. A1 T" F! N' K
<p></p><p></p>" V7 W6 F" d3 `9 H$ j
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2># J$ _5 {  {) q' j2 k
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>* I# E0 }* O+ ?2 [* E2 Z& S
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>9 }3 {; y! |: e
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
/ i4 \, F2 M8 k" P* r它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
4 Q! l- k7 S+ r) o4 M  `3 r# K& K<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
* A' q: Y4 G7 C, Q4 J1 Z% w0 v<h3 id="21-注释">2.1 注释</h3>5 `" T8 o2 a9 L  V1 f+ h
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>* t2 D  ~) N9 g/ t
<pre><code class="language-javascript">// 这是单行注释
% `& c. L" i$ r; ~  q/ f% e: G  V1 s# _) i/ R) N$ r- T, {" K
/*
: g) j. ]" v0 M8 H( P* K; ^这是多行注释的第一行,! Y& d# d  j, G: J  E
这是第二行。" q* D1 E) Q) k7 `- o
*/# X4 n  U% E* m; S' J
</code></pre>) h, D* S. |5 x2 {
<h3 id="22-变量和常量">2.2 变量和常量</h3>
; ~. ^1 L. r( f<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>8 C/ `, d* W% [9 C
<ul>
/ h$ K! C/ A" W  H4 X' S& J<li>变量必须以字母开头</li>
# ?: o7 f" `% U) ~5 P<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
' Z6 M$ |" `. f, M<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>( u1 F. q  x* h* l% i
</ul>
: S- h2 X5 Z1 G: K& G% V<p><code>var</code>定义的都为全局变量</p>+ X! I! H/ w8 x8 d, C' k% G
<p><code>let</code>可以声明局部变量</p>
6 {: `) N% |# ]9 a* S; C! C+ k, K<p><strong>声明变量:</strong></p>9 P; `) |: k* X  [& z! U
<pre><code class="language-javascript">// 定义单个变量1 n' e* _$ A; C4 H
&gt; var name; [$ S- X. K' [% t6 U0 L2 e6 I5 b7 S
&gt; name = 'Hans'
3 F. t' G( G8 Y! t8 k: Y6 z//定义并赋值2 _8 W1 `: h7 F
&gt; var name = 'Hans'
  p0 O/ O! R6 s8 o$ b6 z; r7 z&gt; name
4 Y& X; t) W" }& M* M0 @0 h'Hans'4 {, T- ]6 z. ~
3 q' m! G3 P$ @) [: X2 g
// 定义多个变量
& t2 Z( V. A# G- G$ i0 d&gt; var name = "Hans", age = 18
+ p! m4 g! x/ V; A! W/ s: l, v&gt; name7 @1 E, w9 `: _* U6 ?4 X
'Hans'
' e+ j9 N- @3 {% D4 n&gt; age
4 r1 T' d0 K( C$ u, Z/ F: c18
" v+ p( K* p0 O4 D" H+ X9 H
' E* D; ~$ b  t% U  f* [6 I" [//多行使用反引号`` 类型python中的三引号- a8 b5 j. O2 P! g* T$ A" t
&gt; var text = `A young idler," R+ t& V$ u, K
an old beggar`
" o4 |4 G& D) k&gt; text
3 _8 e, X! U7 D'A young idler,\nan old beggar'6 ^5 {$ }# v& D" D2 q; g; ~9 Q
</code></pre>
$ D8 L1 y1 b8 @1 F) W+ T<p><strong>声明常量:</strong></p>& J7 J" m  p6 H8 y  _
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
; s+ v( w4 Y0 [8 n2 B" v0 \<pre><code class="language-javascript">&gt; const pi = 3.14
0 A( z) \6 R9 }6 r' e+ X$ i&gt; pi
! T6 n4 H* g) a" t; s0 ~( {9 u3.143 x  t) D6 D' _7 d0 u: L
&gt;  pi = 3.01
' n0 d3 K: |: l3 X' K$ iUncaught TypeError: Assignment to constant variable.
* C+ ^9 D' D+ G$ K    at &lt;anonymous&gt;:1:4
3 A1 e% h0 z! s' V; [: `4 c8 N
  z( f; |5 s# O) n4 s# d</code></pre>
3 `/ t; `0 ^. D, L<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
! t! a0 B- G" V( a+ @<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 F. d) H2 ^% \7 ~' C% }8 x<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>; i8 Z! s* [+ w
<h4 id="231-number类型">2.3.1 Number类型</h4># O% l2 k/ t: j: U  w
<pre><code class="language-javascript">&gt; var a = 5
1 B* w! M( I8 W- A0 p&gt; typeof a   //查看变量的类型  & G, s2 D4 W9 M; ]
number
) P1 W/ q+ n# e  H; x* t' ~$ o! M( ]9 J& m, n2 v5 ]0 y( |4 Q8 b
&gt; var b = 1.3
9 i' l0 W& g* u/ {&gt; typeof b/ P8 u- k' ~! Q0 L/ X: x6 y# x
number
# c* T* @1 r4 @
2 q) X) J& F% V5 ~) `$ Y! R# B; P// 不管整型还是浮点型打开出来的结果都是number类型
( U. j7 n6 k7 U6 K5 L0 |1 _7 M( s8 j1 Q$ y/ Y4 Q# S5 n
/*! @! r) e, \' I; i
NaN:Not A Number3 m- i% C. Y8 g+ a6 L
NaN属于数值类型 表示的意思是 不是一个数字2 f; ^0 q* r# q% B
*/4 @  x) J6 [8 ^. u
& o% n# E$ g) Y9 Y6 u8 {0 w# _: J1 {
parseInt('2345')  // 转整型. {# d  E- V" s" Q2 q7 y5 A; S
2345
$ e: r- `. S% m0 x5 {% ]) l! zparseInt('2345.5')3 d/ N2 }* `, v! T2 y5 P" \; Y8 H7 ^
2345" P. a  h1 Y5 Y4 z+ N6 q
parseFloat('2345.5') // 转浮点型+ o" c0 O, x2 z# I5 D; H0 E& s3 Y
2345.5
: {% G! \! ]8 [6 VparseFloat('ABC')
; `) s8 I* _6 n5 CNaN
% A2 J& W% j, {: H9 N2 Y! ^1 BparseInt('abc')
/ _; [# F1 G8 GNaN
3 b- O1 J  Z8 R9 Y</code></pre>
' O0 S( d: Q1 f9 T( \<h4 id="232-string类型">2.3.2 String类型</h4>
" L$ X7 [. |. i6 g" V<pre><code class="language-javascript">&gt; var name = 'Hans'
; \0 j; g/ m  b; O& b& u&gt; typeof name
8 x# H* k4 W2 G  R' K" y'string'* \- |  R8 D8 d  Q0 X
& p4 `* K9 K$ Q/ @
//常用方法
8 Z7 x+ K2 y" ^( i) ?0 Z// 变量值长度
5 W) V2 G" G: r" E&gt; name.length6 {+ C  e& H! a) U) Q1 S: U4 W9 s
48 E6 u! g$ P" p. ^1 e# Z
// trim() 移除空白- Q, j7 L# \  B) _# M( s
&gt; var a = '    ABC    '
" q( H6 _( |+ {&gt; a
; a  }7 w8 d- P; t'    ABC    '2 T; C! o# Z7 j. H; ]) A. ^. k
&gt; a.trim()9 w4 K8 Z1 m' c  N: @7 H
'ABC': u8 q( z. K  \% H: `8 F
//移除左边的空白
2 [3 Z1 ^, G$ p&gt; a.trimLeft()' l/ I0 p3 z4 F
'ABC    '+ H5 B8 l, c- y; Q1 [/ a/ u
//移除右边的空白/ I( v) L! I) P* `  s, W
&gt; a.trimRight()
: K3 h3 g" Y" V9 D4 O/ K' o'    ABC'1 U; W  p+ T, t$ d& n
$ ]4 u3 a; I5 ~; F. C5 Z2 X8 g
//返回第n个字符,从0开始
8 ^3 S# q; ^( o2 U) }4 {* e&gt; name  L  m) M0 V; P
'Hans'
( ?; A, s3 d/ ~; ]&gt; name.charAt(3)
# t7 D9 x4 m- D's'. k- ]1 [! d% _9 U" S7 J1 [( N6 L
&gt; name.charAt()8 }/ b6 V' C" Q7 ?" _( L- c$ ]
'H'' V6 ?* p6 U7 G% H9 d8 n6 t
&gt; name.charAt(1)
0 S4 A( Q) p* y5 f8 C& E'a'. _! m* @: o3 B, Y; o
; E2 Z2 |3 L2 M5 A+ `- U  _% N
// 在javascript中推荐使用加号(+)拼接  X9 C7 W6 |7 U, p( M4 O) L
&gt; name! A' t. n. z: |; \& f/ g
'Hans'
9 E# D; E0 }2 ]7 x" Q2 q" y5 L& h7 R&gt; a
3 @" v) ^6 r* @3 @'    ABC    ', n# c! I  o; M5 n
&gt; name + a
- P9 Y7 g$ ]( \5 i8 c- `) P& `'Hans    ABC    '
' f( ~+ Y- S- N1 O1 [$ T) l2 B" L// 使用concat拼接% W7 A6 ~) M, G7 ?( f$ v
&gt; name.concat(a)  ~5 r. C; ^/ W1 ~" ^
'Hans    ABC    '- O- n; ~; C4 ~: E  ?2 s' y: d" R

  i" x" }/ Y* g* H//indexOf(substring, start)子序列位置) ?" J/ R  A& o2 t
+ G. E. s& g& g
&gt; text8 e+ e+ C2 ~3 }- h
'A young idler,\nan old beggar'8 T5 J2 B& i- V; K' U: r
&gt; text.indexOf('young',0)
! y& y' P4 Q; j6 v6 v2: o( s9 K7 A% V# s
8 V: G1 [2 Q5 l6 g0 h  G- l; A& w
//.substring(from, to)        根据索引获取子序列2 W9 _! u8 |* b
&gt; text.substring(0,)  @" I; m/ D: R
'A young idler,\nan old beggar'
' y6 H: o. s  f3 U; x# R5 I&gt; text.substring(0,10)6 s  {2 v$ g. p
'A young id'
' [/ W# G" w; c. ~* R
4 K! r) s( N: y// .slice(start, end)        切片, 从0开始顾头不顾尾
5 k" l. z1 I3 H0 ?&gt; name.slice(0,3)8 c% J, c, G9 W6 t
'Han'
, e1 l4 p; @  G/ q- t
8 q+ q  s$ U5 [. H) x0 I! ^" E" P/ d// 转小写
3 K' ]" p# [0 ~7 \3 J&gt; name, l7 l! K/ K0 {0 p/ g$ \5 R$ g+ O
'Hans'
; o+ j9 \; {- N. }9 E8 S* }&gt; name.toLowerCase()# T/ W. U; I7 ?5 t, C1 X: b, {
'hans'
# w" T- E. J0 v; X" W6 H" K9 L// 转大写" y, [- b' ]4 s2 Q, g
&gt; name.toUpperCase()
7 w3 d7 o5 _6 B; F' U+ q8 x- G'HANS'  O7 e. J" S  h6 N+ G3 e5 G

/ w6 p! {: |  ]- b! W% X6 L8 I// 分隔# M3 A0 z! i6 Z& _
&gt; name
+ L" l" ~% d! Z0 q7 s+ D3 E'Hans'
" U9 x1 Q' ?  k: p& f&gt; name.split('a')
! L# D  z6 [$ {% n+ X) Z' C: A9 u(2)&nbsp;['H', 'ns']
# O( L9 n" y5 H</code></pre>3 L* T6 Y( S0 P, c* g
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
5 g1 e6 e( E6 [2 o% f$ w) e<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>  i% g3 m  z- f, L' ]1 s
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>( U0 x: g) F7 E4 {
<p><strong>null和undefined</strong></p>2 o9 h5 T( h5 s- z8 O! C( ~
<ul>
! B: x( ]5 A5 D<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>$ {5 w8 [" [2 o7 i* B
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
/ ~0 M6 o2 A  X) N: A</ul>
) c9 a+ V$ @- ]* o& A5 ]$ x, a+ b<h4 id="234-array数组">2.3.4 Array数组</h4>
1 l5 T% c( q5 N# M/ j; W<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p># d/ ^! J  }- ~- s6 H
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
. \! Z3 w+ S, z/ O9 G8 q&gt; array1
- N( l+ K0 @8 K; H(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& A3 w* ?! T( d
&gt; console.log(array1[2])  //console.log打印类似python中的print& G: N# j; J& ?7 p' M* O" v
38 @& L* ]2 i7 a- i9 S
// length元素个数8 X& @: k& A$ ^0 V5 h
&gt; array1.length% b5 f/ j& S# z( ?% G1 M4 l2 A
6; N7 h* z0 K; j# u6 _+ i  l. u
// 在尾部增加元素,类型append
/ l8 M; l: \8 l7 `' ?% V&gt; array1.push('D'), j2 k: L+ k# w1 M- ?. G
7
4 t! G& D5 X3 L4 s6 Z) J&gt; array11 T& g" K% Q) s1 Z+ G, [# G. x( t
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
# O; e  ?( V) L: r/ ?* x% E8 d- N// 在头部增加元素
1 b; b' M% d+ i&gt; array1.unshift(0)7 m6 e/ ~8 f0 ~
8
1 v5 L, a, E2 H4 A" f2 P: R' O8 J* h% P&gt; array1
5 h0 A; I5 f7 Z: d9 e7 t2 Z(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% \; }6 m$ }6 d5 B
7 a# D; y  o  p# N0 M7 U
//取最后一个元素; h2 f5 o6 ?: G, {) P8 p
&gt; array1.pop()
: {# p$ R, w/ W( E2 J$ b2 X'D'
) u* v6 S+ O4 C7 V$ D&gt; array1' n2 z8 z. s% P
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']! S- x& M, g$ C9 G( k
//取头部元素
" R7 \0 W0 ?4 W6 @' S- W2 d&gt; array1.shift()
$ q& l! s) `8 B7 g0
* \5 d/ R, j4 K' Q  ~$ Z0 Q( B&gt; array16 o/ {( M% ]7 J( O
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 H. u/ G3 t* N) ~3 a5 `7 A' f0 H. E1 o; j
//切片, 从0开始顾头不顾尾
; E2 L- g  e, q+ Q  T! K&gt; array1.slice(3,6)# _' g0 s' j% |, D# M6 s
(3)&nbsp;['a', 'b', 'c']
* [2 I  Y/ M) c0 y! Y& `3 T// 反转8 v/ Y0 B8 K6 _. r2 M# p* {
&gt; array1.reverse()5 K/ S2 L6 N0 ]
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]) }" h  O& T& w
// 将数组元素连接成字符串
9 g7 \% j- ]6 A8 r9 D( j&gt; array1.join() // 什么不都写默认使用逗号分隔; q0 V, p# [: A1 \8 |$ h' R
'c,b,a,3,2,1'8 r% R7 d# r3 D# d7 A8 b
&gt; array1.join('')
2 l$ {5 Y8 \( J1 ?2 W- E'cba321'
& r, x  [3 D0 T" c# ^&gt; array1.join('|')
, r9 j8 i* A" l0 v' y'c|b|a|3|2|1'
) i% i3 V* D/ H1 j
' \9 K. Y. Q* H// 连接数组5 ^! r: i' a! M1 B( [! O
&gt; var array2 = ['A','B','C']1 y- F! k6 W+ b, D7 a* Y; S
&gt; array1.concat(array2)
( P  H8 ]* C- i4 i* U(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
( e  J0 `# y6 Z0 W
: W. ^' d; @6 Q0 N// 排序7 }2 I: a* R" W& v" `! m! ^
&gt; array1.sort()
2 T$ b8 K* s3 L5 V(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 F* J7 X% R% F% {0 k
1 X% F' w- l6 W& R7 U// 删除元素,并可以向数据组中添加新元素(可选)4 I6 I$ k8 p: [7 i, m
&gt; array1.splice(3,3)  // 删除元素7 [& S/ l( O+ w8 P
(3)&nbsp;['a', 'b', 'c']* K# N7 P: D' g+ `+ y# o. R& S+ A) ?
&gt; array19 G) b) n/ |8 I" {
(3)&nbsp;[1, 2, 3]5 c- ]+ ]) `/ `3 N
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
7 y  G" L& W: Q: z" s! u[]
+ L  i6 Z5 O# Y3 [, y! M" Q&gt; array1
& i" E  O" z$ F: E# X(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']+ }' L4 a8 e% c, p7 i: z) h
! E8 N' j! E. C
/*
  E7 `, v# U# p+ vsplice(index,howmany,item1,.....,itemX)
0 C2 M/ Y  p; Qindex:必需,必须是数字。规定从何处添加/删除元素。
! M) ^+ T5 V1 z! E* T5 Fhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. f$ [4 N" C( {/ W* r: F4 _
item1, ..., itemX        可选。要添加到数组的新元素
8 V) y  X1 J- f4 g*/
( T2 I7 _0 c1 @. e9 ~# p; s/ w. N6 x2 {, p
// forEach()        将数组的每个元素传递给回调函数
& |: d7 z5 _3 Q$ o1 T7 r&gt; array1.forEach(function test(n){console.log(n)})
. n7 S* Y& w4 O9 p( H1 I  ]5 ]" _ 1
- V* G% u+ a2 u3 u# E. P' {' S 2
( R! E* o7 g) P( }! r; Y/ x8 Q/ S 3
2 e+ S4 S& I8 J* N+ o# ]4 k' J5 r4 O2 c A
1 k: O- e7 l# n! g, q: q' [ B
7 k' e# Y( T+ h! Z" U/ @ C* u+ Q9 ~6 m# b  b5 H: h
// 返回一个数组元素调用函数处理后的值的新数组% I; x. A! t3 D2 s$ i
&gt; array1.map(function(value){return value +1})
) a/ p/ i2 \+ Y9 K(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']! r, W4 \6 L. S) y" B
</code></pre>
* ~2 |, b4 T- S' G: o% ?<h3 id="24-运算符">2.4 运算符</h3>5 \1 Q& R) L; U% @+ [
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
9 [% {- w1 K- Z+ ]3 h<p><code>+ - * / % ++ --</code></p>" @+ Z" V  E/ v/ t8 H& C' w; h
<pre><code class="language-javascript">&gt; var a = 6
* ~9 i$ _; T" G2 P&gt; var b = 3
9 U( q: X$ o9 F+ L: N  }// 加, t) ^1 ]$ S$ h$ P4 Z
&gt; a + b8 A. p- w- ~+ e2 x& h
9
8 S& C" N; ^7 q/ @// 减: N! _% i+ M! T9 X3 W
&gt; a - b
0 Z; o0 P' M* K! J& p( Q+ y3
( J) m9 S, D6 k// 乘
$ P0 k% b$ z$ w9 B&gt; a * b
1 e# Z: X' N) f18" ^: o0 B  T. b: ?
// 除5 s( }& o! q3 R5 S! d! O* m
&gt; a / b* O0 U5 u8 o0 q
25 q/ A. P9 i8 M* i7 ?
// 取模(取余)7 P4 T; C# F  W) T( i2 T% b
&gt; a % b
9 v8 l* [: [, j; i. D; y3 k0
, ~5 I# s7 e3 s+ ?// 自增1(先赋值再增1)
6 D$ ^, o: a' R3 E3 M- S&gt; a++
$ z! q/ R3 d5 o* V4 |! @6% L6 y7 T% V2 F. ?$ W
&gt; a2 b* u2 W" e5 Y, r! r/ {$ p
7
. w  ^1 v9 L( ~: K4 ]2 y7 h// 自减1(先赋值再减1)
4 x; u/ i' _% f  e. w7 H4 a&gt; a--  g7 ~$ q) E% M7 ~. K2 J
7
. R5 \. u, c! m7 c. W% @0 f&gt; a
/ l1 F% R8 j  s6
1 H7 p. n7 D: A6 R* Z' x// 自增1(先增1再赋值)
4 P# {9 K' U' n. |; u&gt; ++a- |0 s3 g& N' d& \8 ?
7" l" D8 h5 f) Q/ D2 z$ R% a/ h7 l
// 自减1(先减1再赋值)2 y4 F4 K/ [4 o- t
&gt; --a6 w8 x6 @2 E- H9 S7 n  A
6
& `; N% k; r) V9 }2 d&gt; a
/ b. g) @% @% M+ w7 w6+ ^/ Q" _' O7 J! r/ q3 A

( ]$ G5 Q- v# z, d' i//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理" D1 ?& K, ]. g! G
</code></pre>
; \5 y$ P9 X9 n6 C) A) D<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- K8 \. D, n, ]+ u/ s<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" ~' N3 x7 f  y. V7 q" `9 Q
<pre><code class="language-javascript">// 大于, d9 O8 {1 }# D. l, W
&gt; a &gt; b
( a8 g3 {& [. {! l, v6 mtrue! n0 K: j0 D7 F9 i# o: v% y
// 大于等于: F9 t% V6 u$ h0 e8 V2 ?
&gt; a &gt;= b0 x5 f9 N( \) v7 y) W
true
+ S4 |% A2 e1 E: g  H// 小于* v( Q6 b9 D7 B# V. Z& C
&gt; a &lt; b# Z( o& {/ m  P
false% J) k- S3 Y3 P0 u. Z
// 小于等于
9 r. `9 {& N8 J- \- f# B) x* g# k7 x! x&gt; a &lt;= b9 ~" Y4 U% g8 y8 c& `
false
) j0 O* Z8 e& Z4 B. F// 弱不等于
- D% i1 Z' A: v1 e9 S4 X&gt; a != b* i1 b. t1 l+ v/ B; h
true
& u/ b' z% b$ Q5 Q) Q$ F// 弱等于2 p* a. Y& [. O
&gt; 1 == '1': n1 ?! B  ?& Z  y! J
true
7 }2 y7 G6 F1 g  E& R; o" b3 U// 强等于! h/ C8 q1 m1 R$ V. b# t
&gt; 1 === '1'% h, h3 T* h0 {0 O" P2 Z& t
false
* [* F5 A6 L' j. {1 h4 s// 强不等于1 ?; w5 K- i7 J( x
&gt; 1 !== '1'  x, H/ A7 _" A9 @
true/ o" w/ E3 ^2 e% N+ r

6 k. B- g* l- r: \6 q# \6 L/*
- R( `: l/ N3 YJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误+ K: Z% _' F5 K% m: y
*/
$ j; D; k; a6 ]6 U% I</code></pre>4 [! R: k; R; {$ s9 I$ q3 ^
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>2 n, [3 _7 K) H( d# @8 G5 d9 u
<p><code>&amp;&amp; || !</code></p>( c# c$ C' t% Y* W3 j% W+ u) C
<pre><code class="language-javascript">&amp;&amp; 与! Y4 n  h' f$ `- C+ f
|| or
! R8 ~2 Y+ z6 l2 C* F! 非( _' j4 y/ @% z; L0 u5 a0 Y
</code></pre>7 o1 V  I* u8 O4 ]6 Y2 n
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>! `+ X0 A& a8 a' Y2 ]
<p><code>= += -= *= /=</code></p>
# T  n: v. }7 M- W<pre><code class="language-javascript">// 赋值
  b3 o( Y$ Z2 P" G0 t& |" T&gt; var x = 3' S  h: F0 l- R2 N  a& M4 Y
// 加等于
3 A8 K$ e! C- f1 _% [7 Y&gt; x += 22 P) W9 p, p: M- |
5
2 `  R& t) e7 v2 [) ~  |// 减等于
5 D+ \( Z$ ~2 Q$ x) r&gt; x -= 1
. j& d0 D& z' ?! L2 x- y9 f/ p* S4
: g3 a, r! h2 C( @1 K1 ]7 Z// 乘等于
/ U0 d9 V+ e2 c; ?( b' {7 E( N&gt; x *= 2
% k8 F( a) M! w" J8
& P6 O1 M: T* x% |// 除等于: s2 i) C5 R* K/ E! i) y
&gt; x /= 2) S4 {& M9 M- z7 \& Z9 c
4
, N9 j" F9 d$ i; U' j</code></pre>( m- I( j& M  Z1 |8 W& U
<h3 id="25-流程控制">2.5 流程控制</h3>
: W9 z* {  z; `; M& e<h4 id="251-if">2.5.1 if</h4>
6 e2 Q9 c" [9 P: m9 |<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
5 X" E# P3 r4 E0 M" U$ V! I( G# ]& x1 n5 b
&gt; var x = 35 B& F/ b, g+ A5 G& s+ g
&gt; if (x &gt; 2){console.log("OK")}, [4 z; N( J) |& @8 S) [
OK
2 p$ Q: d/ b8 |$ W  z! O8 g) `
: z/ J8 a+ B: T2 ^; K' x$ _2, if(条件){条件成立执行代码} # p* _4 i  N- C% w2 j
        else{条件不成立执行代码}9 x. ~$ `4 w, n. ~
' \9 Z# U0 J9 e. z
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
0 r' v# {3 y( [4 U  e$ L'NO'8 F8 e( S  M/ E
( k$ @( ~6 @& y7 q' q! V
3, if(条件1){条件1成立执行代码}
. N9 B6 ~7 Z3 b% l; i        else if(条件2){条件2成立执行代码}
5 W$ o7 a2 E7 Z1 O+ L. C    else{上面条件都不成立执行代码}- n. A: k6 g4 G9 y* z

( n% A! ~) U" Y1 H& ~. @; |&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}! @: c3 e0 D7 ?. w  {& b4 {, D2 J
Ha% |% ~+ N: P5 P2 h/ l+ ]: R
</code></pre>
# r( X. i  M) t) i% w/ Q6 E<h4 id="252-switch">2.5.2 switch</h4>
0 |5 S4 d  t* M* K<pre><code class="language-javascript">var day = new Date().getDay();
6 @/ @- o# [; ~' o! K' pswitch (day) {4 x! @& J9 p+ \: O' E; F
  case 0:2 u; C3 b% j: ~! I
  console.log("Sunday");
  ~" `- z# s  {" x+ Z  break;! p9 U2 f9 \' z1 ~1 h
  case 1:3 Q" F  @2 @7 S) h" D' U
  console.log("Monday");2 w9 p, K* l) b, [0 s0 p
  break;
3 s0 z! b# E& i& Y& H# x/ d! \6 Wdefault:7 S7 Q- s7 M# J1 c( ^0 T- t
  console.log("不在范围")3 @9 D: x3 A; N0 W# P- D' d. a
}2 w% V; Q. i' b' c) o% k, v
不在范围3 V. H  ^+ l7 j% k0 B& F& ~- j& {" [
</code></pre>
- `  L/ ?0 o, \1 ~6 y( D- D5 q<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>4 D/ K9 p* H. |: p* `
<h4 id="253-for">2.5.3 for</h4>
) r" j& |  P! T2 d" l2 q+ B<pre><code class="language-python">// for 循环
8 b! P0 Z8 [$ M0 X( L# \8 D$ ?6 x        for(起始值;循环条件;每次循环后执行的操作){6 @+ c/ u$ D8 z2 k6 z! s( I
        for循环体代码
# G3 ~; V! I  H& y9 A5 z5 A    }& ]4 S  k/ _3 s) ^. H' j

' J* C. W- _% y$ nfor (var i = 0; i&lt;10; i++){3 h  Y$ N+ i* Q" {' M1 c4 L$ [- i
    console.log(i)
* m* d* b! c4 Q1 C1 r}, k$ V& F2 h( D& w$ ]6 ^
        0
9 J6 ?& P. c6 ~6 E        1
$ m6 T: A' {6 |+ C2 ~1 S        2" Z! s3 a# |. T' m
        3
( p' ?0 F  ?0 X" S        4* r% A8 K# r2 b3 C* K! [! G
        5% v3 J3 k* D# _. \+ x
        6+ o9 |/ B6 g0 W7 S
        7
; \6 H# j, T1 H- ?) w        8
) N' |. b; Q, [4 C# R& H        9
# d) `, ^  A6 L* p( |</code></pre>) J, s5 J* q- }( ]5 D' t
<h4 id="254-while">2.5.4 while</h4>" x6 Q  R6 Y( A0 g
<pre><code class="language-javascript">// while 循环; `; R; O1 ]8 ?+ W+ O
        while(循环条件){6 x- g" _  c" f2 q- o
        循环体代码
( f0 j8 U1 ~/ x' }0 d: P' r# m    }
$ [# n6 b$ G+ b: [5 u" }2 |( [) O% Z: x' L1 y
&gt; var i = 0
# H9 A. i. @) i) X/ Y5 W( r&gt; while(i&lt;10){9 |& ~. R4 h7 _& t4 L: |7 l" ?6 ?
    console.log(i)! q$ A8 {* H) z, M. o1 T( l( t
    i++
8 j: w* d$ a# X& F0 b}
6 P- E( Z1 e9 p9 H3 `  Y 03 l; r  V5 V6 \
1+ {, R: G% A  y7 W2 k4 o
2
0 I+ k$ C. P* ^. T( s 3
4 `9 h; b( [! `7 b 4
# }, B/ q0 w* a( ] 5
+ b; _, p% ?5 _9 W: X8 ? 6
  o% }$ b4 V9 F% m3 M& q 7
3 V# [/ }+ J5 E) w 8
6 X1 V; q! x7 z5 c4 y 9
* I6 F. Y( x- V1 q# F' C1 X</code></pre>
& C! h8 V3 a( Z; ~9 U3 s! v<h4 id="255-break和continue">2.5.5 break和continue</h4>
  ~- L2 m& w. u5 d2 h<pre><code class="language-javascript">// break
; z! b: C, |6 j' K3 [) gfor (var i = 0; i&lt;10; i++){. F1 c1 ^& y: g) h; W
    if (i == 5){break}
+ j3 l& j8 V. g    console.log(i)
0 ^1 E3 {' h4 X8 |: }}9 \: ]6 D7 u; T9 Y! h* \
0* ]0 ^6 ?5 e; Z- \/ Y  n
1* F* F: A( `5 F+ u: d
2, n$ W" _; H+ a# U
3
6 p$ Z, A: ~& C* _4 I 4
2 m$ \$ m  e3 W// continue
+ I# P; D( ~5 y" p/ n6 ?for (var i = 0; i&lt;10; i++){, U# |2 D. p* O8 x/ F
    if (i == 5){continue}/ s. j  I4 e4 j% M6 \, O( [
    console.log(i)
( s7 ~8 C- d6 `7 ^0 S1 l. |' X+ S}% l+ a- a/ X# ~5 S. {( m& y
02 i& I4 T& I$ J* N# E
18 W, N" S' l7 B1 O' w* z
2% N' _' p' ^" ^( S  [# J) k) l
3* L1 n; y" }2 h4 ^
44 X5 A2 u4 G) Q, X
6: a% m6 ]% _0 j% J
7, F$ n1 ?! J6 A  f$ L. D6 s
82 c* y0 ^, ^% [& d& E  _
94 _2 i" G/ e$ `
7 i& P- i8 `' X
</code></pre>
& d0 g5 `! ~8 k$ C<h3 id="26-三元运算">2.6 三元运算</h3>% O$ Y5 \, d" m4 }7 `
<pre><code class="language-javascript">&gt; a% ]2 `( V8 ~8 M! j
6& K! Z. ?& j6 Y0 y& h) i' ]
&gt; b2 [3 R' Q6 x! ^
3$ z+ ?1 V' \0 N9 N% W
  ?. C& ]+ e8 E* V
//条件成立c为a的值,不成立c为b的值
* C5 G, ]; {5 u+ [2 {0 i( u&gt; var c = a &gt; b ? a : b$ n9 @* _9 Y2 y2 I# s" v, b  m& h
&gt; c' w3 n  S) r2 Q
6
. _  u' Y6 I1 r7 q7 q2 {2 e
" k7 |) m! Z- R  P; m# Z// 三元运算可以嵌套: t  X; E( d& U% h% P
</code></pre>
/ c, ]/ E. ?# ~/ F( G4 Z: O( M, ?0 w<h3 id="27-函数">2.7 函数</h3>
& a$ J+ B( v9 ?5 K% F<pre><code class="language-javascript">1. 普通函数2 A* a7 Z& X1 q
&gt; function foo1(){8 P, V" \8 S" u, r
    console.log("Hi")
; m3 l3 ?' E& g! f2 B. d}$ |& v& T- L' G+ j$ y
- i& b% j& u  [# `8 w& J
&gt; foo1()
/ a  ^' L7 r4 ]" Y( D) O. i. ]+ d5 I9 j- h        Hi6 ^- [, x+ m$ n- E8 @
2. 带参数函数3 L3 F: d! M2 M. O+ H/ R
&gt; function foo1(name){) r1 J; k# w0 y6 d, f9 \! J; `. ~
console.log("Hi",name), t6 U( ~. H8 A  t$ Q
}
" \0 _) i9 _  }/ _5 k: H
  z  N( k8 J% m4 ^&gt; foo1("Hans")
7 T6 j; x4 o' F* ^7 h+ FHi Hans
' s) U, g4 J: \! R4 u% w" T
% w$ H% g7 F+ K  I&gt; var name = "Hello"
8 b' H7 _3 M& K  d! }6 u&gt; foo1(name)
( l" H/ A( [( c: FHi Hello
1 w8 P# k$ N  K: F, o1 o
. K7 s5 R2 e+ d, R1 Y3 p: r3. 带返回值函数
1 h, s! e" l) i( h1 \&gt; function foo1(a,b){
+ l7 l6 T8 F2 X! ?0 k1 ~        return a + b   ( X: F: p$ n  [0 V$ |
}- G# }: U; q$ U5 d8 s
&gt; foo1(1,2)
2 [- C, I* b/ N( o& _3 ]5 w$ l38 c$ m/ U+ C9 v, Z' ]; d
&gt; var a = foo1(10,20)  //接受函数返回值9 z3 u2 r3 g8 s/ d$ O& Y# {% b; ~
&gt; a
4 ~7 |) q* a+ d5 Z4 X! a% B9 m30- o" {! d; b9 R
% N% Z' \+ _% y- t( ?9 _. a
4. 匿名函数# \, \; ^4 M+ M) }( ?0 @
&gt; var sum = function(a, b){
( z$ I1 n! P  C& g  return a + b;
! L9 X, u; d( x6 ?2 a8 e8 x" b}5 A4 C) N; q6 ^& k9 j
&gt; sum(1,2)& Q1 j/ h7 |! b% \9 H5 F& q7 S7 `
31 a; W' Z4 H4 W

/ {" _) @! f  i5 w3 v// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
) b# H% c. k  ~; A- z% z6 y: j( L&gt; (function(a, b){
4 y7 M: |* |5 n) y( i' r% H3 t6 z  return a + b: s7 J$ ?. V4 ^+ g% j
})(10, 20)
2 L( o! R0 [' x" h30$ j; `; V& Z4 z! z# R: x
4 Y6 e1 ^8 N3 C8 I
5. 闭包函数' L# W; w. ?! \7 a& C9 Z" V  v3 E
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数+ a- j. b3 K) u2 x, P) @7 d3 f
var city = "BJ"
$ t( b$ I4 Q4 W; V& bfunction f(){% B* ?' L( G  r- C6 o$ O3 O& t
    var city = "SH"
% H7 x$ Y& `# @3 X, q1 o! L6 d    function inner(){
: D, f: |- F# E# u+ n# q; w        console.log(city)
2 }3 Y/ e: J4 b7 c& d    }+ {# Q, `( L4 m3 v6 K/ C) _1 i0 m
    return inner
3 G) G5 g& ?; K}
9 @7 K  x5 T: R* E6 Wvar ret = f()4 L; ]  C8 G' _2 o. o
ret()
$ j% y) W& W6 I9 _' l: k执行结果:
! g, c0 U3 o- U; P, S( ]SH
  w) O4 n  M3 C* x* S* c5 u. }# H4 E% ^$ w5 K& l
</code></pre>6 J0 {7 `8 E5 m3 L2 X+ T
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
7 K& h) B0 a1 e5 F% _<pre><code class="language-javascript">var f = v =&gt; v;
0 v/ i$ v' h( ?+ D// 等同于0 L8 Q% i$ k8 L: S$ ^  T; ?! r3 K
var f = function(v){
3 d$ ]( R4 x; g( Y+ V  return v;
( f8 d/ H) G' c3 M# `}; O4 e' u# J, F$ N
</code></pre>$ Z/ G$ V5 a3 K: j) E1 ]
<p><code>arguments</code>参数 可以获取传入的所有数据</p>& d0 [. D% J$ \+ p" V4 T
<pre><code class="language-javascript">function foo1(a,b){4 [/ N% h1 m3 O6 j8 Q3 q
    console.log(arguments.length)  //参数的个数 . u( y( H( T: A$ R/ E2 v  g
    console.log(arguments[0]) // 第一个参数的值% `( U4 m7 E1 C/ W
        return a + b   
+ H" _4 o1 m( Z" R& k}
/ Q; S0 O: M) ~9 e* {foo1(10,20)6 `3 i& U2 V; Z* i! s: U5 \& s
结果:$ x% U- m, g: c7 W1 h, M0 b/ q+ \
2          //参数的个数
& J. l/ W; u$ d8 O+ E* g! R10        // 第一个参数的值3 F' a# D* ~6 D- I. R
30        // 返回相加的结果6 }2 m0 U5 X9 r8 ~$ V2 |( v
</code></pre>' H2 n+ M& E( c0 @
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
" p- s1 E3 r( d) i+ f7 s<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>- E6 k2 z" R- {& U
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
6 J' H6 q- {8 I# A, }5 y; B<h4 id="281-date对象">2.8.1 Date对象</h4>
9 c# P2 @5 i% u! g% L, i& O3 E5 J9 y" o<pre><code class="language-javascript">&gt; var data_test = new Date()6 O+ q% O1 ~4 p3 m7 O* P6 T
&gt; data_test
0 }& }" j: P# `Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
( u+ ?, M+ x" t1 }9 i4 {) y. ]& R- X, ]&gt; data_test.toLocaleString()3 Y. Z& L+ M8 w& a
'2022/2/11 下午9:44:43'6 {6 a5 a% r( K

( O+ q0 k2 z$ v) {) e# G6 `&gt; data_test.toLocaleDateString()
, x! W* Y0 f+ g  p1 u'2022/2/11'; ~4 m; ^6 X; {
2 ?6 R0 I, y4 T' b
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
& E) _: w, [& \8 c&gt; data_test2.toLocaleString()5 \% K% ]- Q+ b+ [
'2022/2/11 上午9:44:43'
& W9 R+ e# n, B6 r8 P) }9 R6 O. n
3 k$ S8 w; P9 w3 A// 获取当前几号
* A0 O$ M2 O9 U1 I7 z- W/ m&gt; data_test.getDate()
" U7 E, r/ E, I+ t. Q11: Z+ r5 e( y+ C
// 获取星期几,数字表示
7 r# j' z) `: i9 e2 w# K1 _&gt; data_test.getDay()  
# D8 k, C* W* B# _% ?5
5 R- p# f4 a, n/ Z8 e// 获取月份(0-11)+ h& M$ a5 M* V8 s2 ^6 F
&gt; data_test.getMonth()
' _: b$ I. \+ S$ m8 L( B9 l1( Y5 u: r) y" j' }3 s$ c
// 获取完整年份
4 N& Y; c3 k$ c5 r0 O, P$ G&gt; data_test.getFullYear()
( @  o! X& I8 U" R20226 o0 {$ K5 _" ?' o9 w
// 获取时  c) a6 M; G' S
&gt; data_test.getHours()
+ t1 S. f7 A. X) U* e% E21
% W* X3 T1 W3 F9 M// 获取分* B( @  _8 @* s, d% d
&gt; data_test.getMinutes()
, ~$ v, u& x) t9 s$ v44
' q: p  W4 _+ L! U// 获取秒, Y/ V/ @! y) V# a  Y7 R+ `+ ~
&gt; data_test.getSeconds()
* t1 ^) D. b9 X5 N0 @2 P! ~43
: R) }# T- R7 J: t' ^// 获取毫秒) c8 K# K+ i) \: `! U, p; L* K
&gt; data_test.getMilliseconds()
) [/ }% x, A; c" V290
" D! W8 [# Q. p- a8 O// 获取时间戳
: f7 {2 x8 c+ t  o7 e0 X; S&gt; data_test.getTime()/ s8 z! i" j2 L, r5 E
1644587083290
  L! X, e! J8 w7 L  G# b0 d4 U</code></pre>3 {4 T8 b: ?9 a
<h4 id="282-json对象">2.8.2 Json对象</h4>' ^' x! u' \- r$ V; k9 L* ^3 S
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串8 B( _9 r7 K% e4 v
JSON.parse()  // 反序列化,把JSON字符串转换成对象
% L" A4 H" g2 s5 l6 ~3 `& c
6 F" }5 K1 P9 T$ j6 h9 G// 序列化5 C, N2 g+ t9 ^2 z/ i/ N9 B
&gt; var jstojson = JSON.stringify(person)
& V% r& I7 \# l7 s- i&gt; jstojson  
& W1 ?/ H% e2 i" |& V7 V% j# T'{"Name":"Hans","Age":18}'
+ X5 H+ u( H( t1 U  t8 h1 O6 M* g' r& E+ f6 I5 @
// 反序列化
8 k5 M! _0 I1 D# y&gt; var x = JSON.parse(jstojson)/ p( o# C+ U& ~% U& g' w
&gt; x2 d! ~9 U; f* |; [) ?8 c
{Name: 'Hans', Age: 18}
) _% ~( t- I( q&gt; x.Age9 V0 K& z, Y; G" Y3 ~4 H9 L
18. H; z2 c4 S% \- Q5 o
</code></pre>! e; i8 a* X8 Y3 @% }
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
0 k! u5 X0 U- Z# f4 t$ w2 r<p>正则</p>
* A5 l6 ~& A0 {7 B5 c' \<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");, P: M8 C/ B+ O/ H8 q
&gt; reg1
( [6 S5 J* Y, g- b/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 J7 j) O. Q7 E&gt; reg1.test("Hans666")* k( c; M( ]% \3 z, Z: A
true
1 t3 z# G% `5 J" b3 J. a0 V. i# T* I2 \
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
' N5 j# K$ k# u6 W3 A&gt; reg2
9 H: {" i3 G1 i! K  _/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& |9 N4 x. {& u* }/ B&gt; reg2.test('Hasdfa')
2 ]; ~, p8 ^; _2 }3 c( V" htrue! Z9 T- J) j1 c2 G
/ l! z4 ^8 d" {, M9 K, `. I* d
全局匹配:
  a% w5 N& }7 z" T# ~8 @4 i$ S&gt; name+ B4 X0 ]# i' G# W! f6 o
'Hello'( U7 |! }. [) V. L
&gt; name.match(/l/)
. ?; S: y/ E+ ~& J1 M2 `, W$ `: R+ t['l', index: 2, input: 'Hello', groups: undefined]
9 h5 Q" @  b( Z$ Q& C! c
! Y  Y4 C4 `9 m/ c. |! Z1 j) X* h&gt; name.match(/l/g)) v. u# a9 p! b2 K: T
(2)&nbsp;['l', 'l']
! i; R+ C2 t' B// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
& w: p* f% R8 g. I' @% ]5 J8 C0 A
全局匹配注意事项:8 }: k" X# F* L/ n
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. H" @' S/ u- m+ a  S  H, s1 X&gt; reg2.test('Hasdfa')' V- L4 |: X" F( f* h0 X: d9 U
true
" ]4 Q2 R* m. E- v&gt;reg2.lastIndex;9 R2 J7 R( c3 _5 H
6
1 @, h8 Q6 I" j) M8 A$ ~1 _/ j8 r&gt; reg2.test('Hasdfa')/ Q/ _0 h/ E4 {  f
false7 P* K$ \! T2 x- o* a, A
&gt; reg2.lastIndex;% Z1 N% {$ i6 }4 L; E7 v
0/ W/ X$ \% z, T) h& d! {
&gt; reg2.test('Hasdfa')( J$ ]9 c+ k/ C
true
/ d. y! r  t1 m3 O. a: m&gt; reg2.lastIndex;3 x6 w% G9 n$ x5 j; |
6* m' y. A3 ]4 t* o' f' t. [
&gt; reg2.test('Hasdfa'); p0 y  g# ^' \$ e- l
false% j$ j: o7 Q3 {# `+ C
&gt; reg2.lastIndex;8 ?/ S3 ~5 c( |. L; i
02 t# ^, d! {1 y# a3 [
// 全局匹配会有一个lastindex属性
* x% E! \) K, D* M2 B5 u6 _&gt; reg2.test()2 u: o0 p) l6 W" g" u
false( M1 ?& j6 w& N. T# _! P) _
&gt; reg2.test()! Z, O0 ?9 l* P+ v
true" w) J: h6 R) e4 \  D
// 校验时不传参数默认传的是undefined) X; b# J1 ~6 H$ Y$ b
</code></pre>
% }2 }8 c7 I( ]' G" U' I9 ?1 l) w/ u<h4 id="284-自定义对象">2.8.4 自定义对象</h4>( d$ B, d" ~. |
<p>就相当于是<code>python</code>中的字典</p>0 `7 q; {  c" e  `$ G3 I8 `1 S
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}2 `6 n" S" |9 F+ }0 p2 p
&gt; person
) Y& j  [% J$ E0 \! Z/ X{Name: 'Hans', Age: 18}
# m1 u  @1 C- X; P$ _5 ?&gt; person.Name
; f# N7 Y" s2 B8 |& v0 J" g3 P'Hans'6 \# Q) I/ c2 m
&gt; person["Name"]
* P+ W/ U8 y  ]7 f) S6 a) q'Hans'
: }$ K0 d; n  j, w9 [8 U9 @
; t  f7 o8 C4 Y$ F& _7 h  D// 也可以使用new Object创建; E% h/ o- ^: A6 x
&gt; var person2 = new Object()3 Q- {( C  C* g- j
&gt; person2.name = "Hello"! ^8 a* P$ B  O, n. b
'Hello'
3 _! P* e) L4 {8 L&gt; person2.age = 20
1 A% p* D% x( s0 @208 z3 i2 l, B. h
</code></pre>* X* G% o3 H8 b0 z1 R. ~
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>- H7 ^# f4 J# A% m' z# A3 {5 ?. ~+ Q
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>* r1 P+ w- ~, x/ @3 y" U) ]) b/ I& [- \
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>' n; p# f5 ?4 W% [( o; a
<h3 id="31-window-对象">3.1 window 对象</h3>3 _5 J  l" l: F8 C. S6 }" ~
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>( W+ C; c6 N/ p- C2 T5 Y
<pre><code class="language-python">//览器窗口的内部高度
* o2 y" a1 f% k' B8 O( Hwindow.innerHeight : A+ G* ]/ o& @/ V$ \5 t
706& _6 V- M1 w3 g
//浏览器窗口的内部宽度/ U* [% A5 F1 F2 u5 B0 q
window.innerWidth, t* g1 @9 i( \
1522% f  m7 c4 W; \+ p3 o5 W  Y
// 打开新窗口
1 v/ N1 o! J( i. N6 i3 q& ~4 ?( V3 Awindow.open('https://www.baidu.com')
' n7 t/ H( I6 V% H& G( j7 uWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}1 U9 D. T- @! R7 Q, C  ?1 b
// 关闭当前窗口
6 Z# d& W, m- k) _( zwindow.close() 8 c2 I# N! k* O7 ?2 i, c
//  后退一页: @  |5 |/ x5 h/ z
window.history.back()
. T  O* x* N" G// 前进一页0 o) |$ r$ b$ f2 U4 f5 P% N1 Z
window.history.forward() , N3 \% X! X% [! k9 B: C
//Web浏览器全称
) K6 ~( \( S' N* Lwindow.navigator.appName
; D) ?! L' e* x0 ^' k  `; U0 B" `'Netscape'
) z7 Q/ L9 R& Y7 A; g0 ]7 t// Web浏览器厂商和版本的详细字符串
2 ~5 z* L* H* J: K) Nwindow.navigator.appVersion2 L/ v" k4 [" q7 i! J1 z
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. u" Y9 c9 I& I// 客户端绝大部分信息0 G0 W  q) ~3 s9 \
window.navigator.userAgent9 E3 r2 \! O7 M: {) |
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
* Y* I4 ?0 c& P9 z# q// 浏览器运行所在的操作系统- `) w% m9 a, [0 v5 z
window.navigator.platform
# N' p# _9 J; _' D'Win32'3 _* ?- V* }5 m3 [) ~3 t& c

. O$ A: f' R+ s3 R; z//  获取URL9 ~8 O: Y  @( w
window.location.href5 j( [* F$ C% O8 U' E
// 跳转到指定页面
8 G' _( r8 V  l" u' _4 hwindow.location.href='https://www.baidu.com'% y. h$ t% D: X* B  X$ B/ J8 [
// 重新加载页面6 `1 X: ^3 e1 `( Q% p* a
window.location.reload()
- w2 v4 z0 Q0 @- Q</code></pre>* {* n$ W6 G+ I( B9 r& _
<h3 id="32-弹出框">3.2 弹出框</h3>
! o6 G: B$ Z- E! x! m; c9 V<p>三种消息框:警告框、确认框、提示框。</p>3 O' l/ `  J) C9 T  `
<h4 id="321-警告框">3.2.1 警告框</h4>
$ ^$ K8 ?  c9 U7 Y+ C# p& E<pre><code class="language-javascript">alert("Hello")
- `" k- P  g8 v) J</code></pre>. u6 ~  B4 ~7 z  M) R5 T7 O
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>0 @" a( s( L+ e
<h4 id="322-确认框">3.2.2 确认框</h4>9 z+ ~2 v6 c3 \) q
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
0 o6 o* D. ]* l& M9 Z# ?9 b( R<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true# K, d% B' W1 Y4 X/ O4 b
true
! I; C9 G- z. S- h* N7 N5 b&gt; confirm("你确定吗?")  // 点取消返回false+ Z: o. S; I8 s3 a1 R2 w
false
% r1 L) }  V2 t( q1 c& I2 C</code></pre>+ `7 [/ u6 P" U. H
<h4 id="323-提示框">3.2.3 提示框</h4>
. m' Z9 U! ]4 I. }$ b<p><code>prompt("请输入","提示")</code></p>4 p+ b& A9 t1 U$ B  i
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
8 @7 z  Z' c+ \7 \/ I<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
/ p7 x; u* N. g) }<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
3 U; n6 U' Y8 P$ X; m<h3 id="33-计时相关">3.3 计时相关</h3>1 ^: e9 i0 w( w3 r% q/ U9 J3 c
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>8 n  z/ O2 M8 ~/ D9 S2 e
<pre><code class="language-javascript">// 等于3秒钟弹窗
* o" b0 Y* O$ F0 c! E2 bsetTimeout(function(){alert("Hello")}, 3000)
' z! V! l' |3 q* x. d7 U+ o
' [1 t  l  @3 `5 J* \4 ]var t = setTimeout(function(){alert("Hello")}, 3000)
, _  V9 b! G' m, H% Z3 [
/ U6 r  W. ~0 i) ^6 o// 取消setTimeout设置; P: {8 e0 U+ ^+ l$ b* c) h# Z
clearTimeout(t)
' v. V2 ?# a3 D</code></pre>! \. O$ ?. w* B6 O. F
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>8 |& j' x0 f+ D& a1 |
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
& E+ j% m) W# @3 _<pre><code class="language-javascript">每三秒弹出 "hello" :2 V& g  ~  W* P, a3 k
setInterval(function(){alert("Hello")},3000);
  D8 h6 ?" I' w# U. c0 j' `! y</code></pre>
% P7 ~7 |8 I  g/ c* B$ s<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
, K1 R- J' w. C<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
! |# X0 t2 q( I+ A( F//取消:6 a+ m2 Y; Z% D0 [* g
clearInterval(t)5 [6 |& o, N! G; o$ @$ u2 H( C
</code></pre>
8 {3 T" ?$ q9 z- C2 z
9 t2 i( j( h+ x: U
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2024-4-29 15:54 , Processed in 0.068568 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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