飞雪团队

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

前端之JavaScript

[复制链接]

7250

主题

7338

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ O0 `1 W5 B5 H0 E<h1 id="前端之javascript">前端之JavaScript</h1>! T! |. a4 O8 Z" W' D$ S! y+ Z7 d" P
<p></p><p></p>& O5 s& J6 z$ o% t  z2 H0 g$ n
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>* k- ^$ K0 S9 r$ e/ ~, p; ?& M& y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>$ @3 f  K% p0 l* F4 Y  r$ g
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>' |( j3 E9 E$ z
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>0 u  N' w  Q" [5 B+ T/ h6 C& m% ^* k
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>5 @& b9 x0 B5 u2 A
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
1 K5 c/ B: K* p<h3 id="21-注释">2.1 注释</h3>" j4 Z2 K+ d/ a* Q* R
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>. D& @# r; ~: ^9 o
<pre><code class="language-javascript">// 这是单行注释
! w, K* e$ V5 a9 E6 ^
, f: w* S1 }3 Z) E/*  r0 G  z) _+ s  t5 t
这是多行注释的第一行,
3 f/ f, |8 i: u; V这是第二行。
) j! C" J4 [' b- Y& d: u% `2 R*/3 |. C( ]3 p( i# }5 f& O
</code></pre>
& C( \. Q; n8 W# [" K1 w/ t. X<h3 id="22-变量和常量">2.2 变量和常量</h3>
& v" T9 _* c$ `: u, t; v$ o& p<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>2 H( R6 Y! k, O& i: c
<ul>/ w2 t! e* U) r( k7 j7 _- M! d
<li>变量必须以字母开头</li>6 U2 k! n  C9 i. u$ o$ B/ ^
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
( A& }; ~7 F9 s* D) V% B, [+ w<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>1 B" V1 b+ Q9 J) Q, T1 u. O/ {3 G) K) `
</ul>0 _) B* \! ?/ e! X* b. ~2 [
<p><code>var</code>定义的都为全局变量</p>8 B- a: T" s; M2 e# e
<p><code>let</code>可以声明局部变量</p>) j; s; k$ P7 F! l
<p><strong>声明变量:</strong></p>
5 y6 ?  @% t& a; m6 G6 c2 r<pre><code class="language-javascript">// 定义单个变量
+ ~, {5 v/ Y& ^6 d: @&gt; var name
* f# b  A# |! E4 P& p&gt; name = 'Hans'
5 k- s$ d( T% v' I& W//定义并赋值
7 @6 n" z! u% d4 v- x! _# J2 I&gt; var name = 'Hans'
' N3 f; v. t2 t" m' |9 ^&gt; name) n+ I4 A, z2 F# z+ d4 C
'Hans'- L# ^; D+ V9 W

# r8 _/ `! a) s// 定义多个变量4 _$ x' I- h% N% U1 P
&gt; var name = "Hans", age = 183 R1 o1 @9 T0 q# c2 d
&gt; name
( E0 N, |1 r5 t+ X'Hans'; {4 X  m. @1 d) r
&gt; age# E' r- k" ~4 i3 [
18
4 Z1 |+ w  T4 m$ }) I  b* z8 w4 ^( n9 c  b
//多行使用反引号`` 类型python中的三引号
) X. Z; ^+ ~/ X/ v&gt; var text = `A young idler,
2 b* u7 K. t% ~( w+ |; Man old beggar`3 n2 W" m# t" E- J0 l
&gt; text
7 b- r: G- [0 V* O- k'A young idler,\nan old beggar'! G; i) g! D( J! Q: Q
</code></pre>. J& b' r, U7 L, T3 H
<p><strong>声明常量:</strong></p>
. q) V. n' S* }2 W<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
. `3 [& o8 w  g1 `<pre><code class="language-javascript">&gt; const pi = 3.14
' O( x% m5 g$ \&gt; pi
- e. a! e; w6 I3.14
6 H& U" `* ~% H1 ^&gt;  pi = 3.01; V& I" e- B  a) @0 k7 ~
Uncaught TypeError: Assignment to constant variable.8 a- ~- _% k6 Q0 ]! Z
    at &lt;anonymous&gt;:1:4
6 @3 ~" B! K# ?' y
+ \. r, q; G: y</code></pre>
3 _4 v5 y0 m# s% \/ |" R; X: h<h3 id="23-基本数据类型">2.3 基本数据类型</h3>' g8 D) X4 H/ A/ k. d
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: i3 e1 r; ?9 s<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>- U# |& K5 z( O& p
<h4 id="231-number类型">2.3.1 Number类型</h4>
3 E8 H0 O8 {% c* d: _: u$ @<pre><code class="language-javascript">&gt; var a = 5
+ @  Y3 i5 h, {7 Y&gt; typeof a   //查看变量的类型  , _. C. b) Z8 ?$ u0 x
number/ x, }4 ]! R) N% `+ f8 s
/ q; \  L$ v& z# X
&gt; var b = 1.3, @4 t0 [; w/ e: [8 E
&gt; typeof b
: m$ a3 ]4 m+ ]/ znumber
( {$ f' _8 n: t3 T( o3 m  r0 M1 S/ I7 ^9 A/ c; Z
// 不管整型还是浮点型打开出来的结果都是number类型
7 K4 g3 Z: f$ e+ Z* b3 z5 b0 {; Q: |+ J" K/ I
/*2 A- j- e5 V9 _4 ?6 c
NaN:Not A Number
; Z! }4 B; y- n* Q1 o% CNaN属于数值类型 表示的意思是 不是一个数字
+ j2 d0 U$ d6 E' M! R1 j7 g*/
1 [, F  S) M0 x: X: i2 |; x# `' N
& r; |% {$ L, W/ R' q. yparseInt('2345')  // 转整型9 u8 I, Q4 V  G& h
2345
! \) E9 B. D$ j/ W( m$ {" }, t; SparseInt('2345.5')4 G( j8 D% X- {# p2 r5 ~9 o
23455 ~8 K8 Q9 `9 E, \' ~# T6 S
parseFloat('2345.5') // 转浮点型0 }0 z! {8 F" w
2345.57 v. g& p3 }, g7 s' Q. x
parseFloat('ABC')
. U1 k' a- Q1 m8 S! O8 G+ C( }NaN$ F' I" y. A+ p  ~
parseInt('abc')' D% d7 F+ W2 P7 |$ X" F" J  ]
NaN: ]# S) e$ ^% `) X9 N# Z
</code></pre>5 q% a) D1 C9 y9 d& u& D0 G
<h4 id="232-string类型">2.3.2 String类型</h4>" H2 C4 C7 R+ i9 {/ F& w
<pre><code class="language-javascript">&gt; var name = 'Hans'
9 [& h0 ~/ r; v' n$ }* k- U&gt; typeof name; N8 o: h2 _) s5 V) }
'string'% e7 p7 f6 N# @" o9 F

, C9 E+ v) m5 [0 Q) u. ?7 i//常用方法- f. u  G+ g( C+ b3 X+ ~& W
// 变量值长度5 r1 A' T9 H# f2 G
&gt; name.length
0 A7 e4 N5 Z% [  o. i47 W, w: m% L3 d- _+ `5 k- v( R
// trim() 移除空白* c2 A9 ~" e7 M  h; b( h% u: c% n8 c
&gt; var a = '    ABC    '3 S2 B3 e" V- p. K8 G, w8 I
&gt; a
+ |6 V9 X7 |/ P5 ]+ z'    ABC    '5 G# @+ X: {, V) h
&gt; a.trim()
# E1 M$ `5 c3 u. J'ABC'6 R5 L( v4 ^, v0 k- @$ D$ Y
//移除左边的空白
: C3 v% c* `! i& z* O! A&gt; a.trimLeft()
- d# h, w: c+ E- z: S- P'ABC    '3 i+ {, |. n; N5 z/ R
//移除右边的空白
4 ]8 o8 `; l) b/ J&gt; a.trimRight()& [/ ?; H# ]2 `! K, _/ }
'    ABC': {. M# Y- k$ D0 A

  t0 P1 {7 ~5 ?" p- }- ]. y//返回第n个字符,从0开始. {  S; J9 x' o2 a! z
&gt; name- ^, T0 _: Y" v/ M. g
'Hans'4 |' K8 K+ D& A' C) d
&gt; name.charAt(3)
& P$ U, w' J5 U4 N+ e9 \* L( ?'s'. g/ n% T) D9 r4 W+ }) E8 k
&gt; name.charAt()
5 E+ S, O" @. V' q' I# l'H'7 ~% x0 F6 L/ |0 j0 P" l( y$ N
&gt; name.charAt(1)' D8 H3 L4 T+ G- a4 n  E
'a'( r8 R* q- C6 |8 e% g

5 f( ?1 `( |& F" `, {// 在javascript中推荐使用加号(+)拼接
' ?0 H% c! x* v0 r2 L8 V&gt; name# `+ ^6 G: B; _6 H( B) A5 L3 S/ z
'Hans'
8 I1 f4 `' t& J& H&gt; a
1 v- i- e- W& z'    ABC    '8 S$ k5 q" @% ~; w
&gt; name + a# p5 j8 Z/ q3 _/ d. j* L9 K1 D+ O, G
'Hans    ABC    '
! e) {( \5 L' Q; K7 ?/ D8 e8 q// 使用concat拼接
# F, c- _$ s+ M&gt; name.concat(a)
2 H% s  y% I% x. K, ~- d/ p'Hans    ABC    '! g7 R" W, R+ k- w# |  e4 i1 x
3 Q. C- j7 H7 Z3 d. n/ k0 V
//indexOf(substring, start)子序列位置
; n, _4 U2 u0 c  g2 M
/ O! }1 c) p% L  [+ T5 d( |&gt; text+ g* g( ^9 ?' `; x) X
'A young idler,\nan old beggar'
4 C; r- T* k' N/ [  d1 j% K' v&gt; text.indexOf('young',0)
7 Q5 q( ^2 C( s  T$ V: @- i2( |  u) K6 [; t8 U/ t; ^4 S4 q
4 c0 l+ ?: }+ ]! b1 o3 n
//.substring(from, to)        根据索引获取子序列
, l6 }& x$ Y* h" k&gt; text.substring(0,)9 A4 f1 Q) i  l* @; o% Q
'A young idler,\nan old beggar'
# b/ U# ~0 F! ^7 \/ ?( b( ~&gt; text.substring(0,10)
: j+ B% W: O* D3 s'A young id'
9 ?6 r3 F0 K% h5 T1 p; e! Q/ j5 f: _  Q& i4 M
// .slice(start, end)        切片, 从0开始顾头不顾尾
' H" R- q. X% I$ v&gt; name.slice(0,3)0 H4 t/ b; U0 F$ e2 X
'Han'
/ r) S5 a0 u; f7 n7 S( a
+ g% N, I( n) j* Y3 z// 转小写
. X# T* ^' s) @; p&gt; name
# G1 B( @3 t4 g. {; o'Hans'
8 U( a5 B; ~* Q&gt; name.toLowerCase()
7 f; v: `9 W" o2 [8 Y% L'hans'
6 T5 @2 E7 _+ b' A$ L6 M. R3 `// 转大写+ w1 ^3 w5 ~( L8 O' v- W8 b3 U
&gt; name.toUpperCase()+ j3 b. q( b( }) l" n' C5 C
'HANS'
# E8 O* w* k3 Q1 _6 A. L! b5 }# d2 O! o) z
// 分隔
7 s$ `6 l1 {  u+ V* c1 {( R&gt; name% a% s$ B$ I* V
'Hans'
- ~! ~7 V- H' h5 A&gt; name.split('a')
* M3 h5 m; B; F(2)&nbsp;['H', 'ns']
- l8 O% e3 x0 q6 r; }, |</code></pre>
6 ?& x+ d0 v$ W% a+ T8 {& @<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
6 ?- h8 Z8 h, v* D<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
& ?2 V7 I6 s0 j: B<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>0 V  U$ A7 X, z
<p><strong>null和undefined</strong></p>
4 Z/ E. Q+ q  W2 O5 }) B2 ]<ul>$ e' z  }* @* O, E5 p
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>' F1 U* ?  H/ X7 d( X; q
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
  H  @, O' j) [( I4 l</ul>
5 q: S  c  y  u) z<h4 id="234-array数组">2.3.4 Array数组</h4>
5 R0 p0 `% ]( t1 v<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
0 v) k* L; u6 d<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] " B. y$ x3 {# W5 H$ Y
&gt; array1
% u. h  d2 T5 s# n* j0 J(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
  }. S: Y# n3 D  g( U7 ]1 M&gt; console.log(array1[2])  //console.log打印类似python中的print% W8 |5 B: U2 [& n9 c& a
3
; W2 z% E6 U1 x' h( p// length元素个数
6 E4 P3 K# a6 I/ y4 j6 q&gt; array1.length( g$ {! M5 P/ y
6  h" ]' d1 P* C  z+ i
// 在尾部增加元素,类型append$ R2 g+ a0 Y6 k/ A
&gt; array1.push('D'), Z" M' |/ @8 J
7
" W' {9 w& ?8 k# H- k) I. h& x&gt; array1
# T8 o$ C8 Q: t& s  e1 u" A(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
. m% Z* _6 o: N* ~) k8 z+ u" }// 在头部增加元素# {  v7 ~" k- j1 @
&gt; array1.unshift(0)1 J5 h- _" v" u: g) H9 U3 m& C4 ~7 h. H
8. v+ Z1 \  n% @0 u
&gt; array1
2 s4 B9 F, m/ ^* X(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
3 F1 O' X7 i- b7 l+ d
! Y$ _+ @$ P4 |: g6 y' @; k8 D) m//取最后一个元素
) D( F) t! Q5 i+ W+ ]& C; A% f&gt; array1.pop()
4 F) ^$ @6 U/ U+ c( G'D'
% s6 R0 T. K; {1 [3 c! U&gt; array1
1 e5 j! K6 X! {* E+ S(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
/ O7 X: U4 D5 V* u) _% F' T//取头部元素7 l* J& O( C3 w) f; Q( @
&gt; array1.shift()7 X( B, t' M: p8 Z5 J5 a
0
& o3 ^6 Z& v9 p$ F: V! ~) T&gt; array1* D% {6 T; F8 T# t! I
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 h* ~4 e# j: i5 ^! j2 t! h

' z5 U. [  x/ z3 l; q1 `3 C//切片, 从0开始顾头不顾尾
! O  F# F5 d, o2 m8 r&gt; array1.slice(3,6)
! e+ K2 ?$ W* l* u. }4 M" Q(3)&nbsp;['a', 'b', 'c']8 o0 |) g0 x# ?9 j) e( B
// 反转
5 ]" C( W- }0 m1 _- m7 ?. I  a&gt; array1.reverse()
% t; P+ E* x9 a* K  e8 s0 i" {% g(6)&nbsp;['c', 'b', 'a', 3, 2, 1]7 R6 {0 }1 Q$ _7 a5 a
// 将数组元素连接成字符串6 D7 P# w9 h3 r8 v) Y2 x+ s; Q
&gt; array1.join() // 什么不都写默认使用逗号分隔
! {% N  Z) Y) O5 t% H'c,b,a,3,2,1'
3 f+ Z) _5 [6 \7 U&gt; array1.join('')
0 L/ r" ]: O0 J'cba321'
5 \9 N* w* v/ x$ R&gt; array1.join('|')* q* l$ m1 l4 W- {
'c|b|a|3|2|1'
  z7 I* n. \9 Y6 W( C, J
3 W5 y$ c# S8 n0 i// 连接数组9 F, v9 F; v' x) {, A5 o# d& v: X
&gt; var array2 = ['A','B','C']
; H1 O! J& S) h2 B&gt; array1.concat(array2)8 h& z) G& W' B; K4 {& o4 _! L
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
2 p2 O, z6 D+ J3 ?9 [/ s2 ^( b' {; y
// 排序  l$ Z6 ]. U  i; y
&gt; array1.sort(). _. o0 b2 {8 J
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" f; N: ?2 w- J. K7 x$ C
; B) |0 l% J: m9 d
// 删除元素,并可以向数据组中添加新元素(可选)
) y+ i" ?. G+ H  c&gt; array1.splice(3,3)  // 删除元素
9 c- U# d# }, ~( b% ~; F# h. p(3)&nbsp;['a', 'b', 'c']
+ B! Q: E4 I  @) c&gt; array1
/ i$ }" p& M: N7 c( T$ Q6 D(3)&nbsp;[1, 2, 3]4 b7 c5 ?. I$ n& b( I! F
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
' f/ y. {4 k' O/ Z! v1 _( [[]
1 @* u- ~  B) |$ q! K&gt; array1% [& B- O' R* M# L; C) Y
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']9 g" [( ?# R: I% X( R' R

) ]' w4 T" b2 V/*
/ g* F/ y9 C# |splice(index,howmany,item1,.....,itemX)
. D7 @7 W+ p2 s  k$ t5 iindex:必需,必须是数字。规定从何处添加/删除元素。
8 c  L: u) Y1 j0 R( Whowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 _; l# X7 P* s. Z: G; ?4 \( Citem1, ..., itemX        可选。要添加到数组的新元素
( r/ q+ Q  f( _5 Z5 Y& r*/" l1 Y1 l2 ]4 o; q
0 t+ z% A+ B- d( t3 y
// forEach()        将数组的每个元素传递给回调函数: ?) e/ y2 \" g" r
&gt; array1.forEach(function test(n){console.log(n)})
( q- C+ }$ T3 d. T8 k0 v% B 18 Y/ {* g9 {* m+ Y$ |& M. E9 H
29 P, d( v% ^4 h. X5 ~, r2 T& z
3
( I  O1 }- I6 G( l3 q8 d4 V A! o" r; q- T3 {& J4 P% r& Y3 ?" |
B
' d% K0 ~) X5 S6 }3 W3 u& l C- M6 k" B8 N  N2 n8 g
// 返回一个数组元素调用函数处理后的值的新数组
2 r6 J' l, G  Q) F1 u! y&gt; array1.map(function(value){return value +1})# v, k* L& w2 O8 g* E7 ?1 c9 ]
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1'], {1 ]1 i5 Z! l
</code></pre>
) z" Q& f- T( }  C1 L<h3 id="24-运算符">2.4 运算符</h3>
& @  f( S/ v+ V* ~6 p8 v' R<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
; m- ]: J1 }- o7 m. M* i0 i<p><code>+ - * / % ++ --</code></p>
; G" b$ \% o& ?! p<pre><code class="language-javascript">&gt; var a = 6) M$ T2 ~" n; }1 D( @8 g
&gt; var b = 3
: ~, X4 \! c9 U0 I* [1 C: B4 _// 加
$ X3 F. |9 a9 [6 e' M&gt; a + b
9 q$ x+ L/ g/ I. B! d1 K9
- A7 J! k( y- G& X2 u" l// 减
+ t3 Q  d7 ^# g! o' y&gt; a - b
5 |5 ?' v! C; f7 ?3
2 o, g6 }. Q, L9 H& V: `// 乘
6 J7 B2 E8 S- T) m9 G&gt; a * b$ r& i$ K; w' q
18
8 s$ ?+ [" w5 a6 m: G// 除
: F2 q: X9 p& z&gt; a / b, y6 g: }# Q1 W6 Y
23 E% `8 X* H6 _- W' E
// 取模(取余)
. c% P- C5 G/ E' G9 `&gt; a % b7 l9 W1 N: J) Z+ m# A) E( t
0  u& ^8 @& v6 V; Y3 M  |
// 自增1(先赋值再增1)- D+ z  C1 N  p
&gt; a++
" [" f. Z! f$ J: ?8 v4 {6& J, ^/ U; O4 u7 W/ _8 p
&gt; a6 l/ x5 g1 w# j( j, R& z
76 s1 r& C1 `5 K8 R+ `; Q
// 自减1(先赋值再减1)6 n) Z# l9 z9 `3 ~  t  a
&gt; a--% w4 Q% D1 g; R+ q0 H
7# ]( v, c3 U# H. M
&gt; a& E# b8 C1 f( F' D
6
1 G7 H9 Y& c( g4 |4 I! p( F  ~// 自增1(先增1再赋值)
/ R2 v+ g; u$ @; i9 @&gt; ++a6 [! o) m5 E5 v, c& `2 E9 z1 s
7" y2 Q. k8 G. @/ U
// 自减1(先减1再赋值)
) W. u  E3 P1 Q$ w5 F&gt; --a
7 a) r7 Y8 W" R/ N  G) r7 }# F67 V6 O8 i* S0 A2 i2 u2 l
&gt; a
' Y! }" K9 }- V* o% A; i6
2 J. R% b  s" @9 u# |$ |) x, k0 N: b0 ]: g
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理+ q/ _% s& E5 ]% }# f
</code></pre>
# i2 Q3 b6 I  N% p0 a$ P% ]<h4 id="242-比较运算符">2.4.2 比较运算符</h4>+ t! t; ~# |; z2 B* X* m/ |( x
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
! g7 z5 G" D1 M& ?! U5 t<pre><code class="language-javascript">// 大于
% h2 C% _7 k! v6 U' W" ]' b2 x&gt; a &gt; b) ]7 v& v+ G" z; A* Y" A2 K
true/ m0 w" N$ P6 s9 X' O
// 大于等于7 `, D- q! G( Z& U
&gt; a &gt;= b# w' g' `  g* m+ N4 m  _' M
true
2 c; A, ]; f( }* _) t& L// 小于' i- S6 f+ e; q# X7 N: J+ B6 ?
&gt; a &lt; b1 d# L/ U# S6 T
false' ?0 z7 I1 o- P7 K9 w% l1 |
// 小于等于
+ Y7 U. H( E& N# W&gt; a &lt;= b( f- Z+ y& B$ B+ }3 T4 I
false
# h9 g3 e0 w$ I7 d" I- r// 弱不等于
0 O' W& t/ I5 v7 Z3 L5 \" @1 ?; o&gt; a != b
( @& x( \2 H5 C; dtrue
" p$ g. {! u5 r* _// 弱等于! |4 O: a: R0 `$ ~
&gt; 1 == '1'
% c+ d: m0 o* n5 L# F# f1 ~true6 |3 b: R1 j7 e+ Z0 R/ x/ {
// 强等于
5 r2 B6 i, r- ]&gt; 1 === '1'
0 @5 I7 @1 j9 Z: sfalse9 ~- V* [5 {' M! W# d
// 强不等于# c4 J1 l% R; Y
&gt; 1 !== '1'+ F9 `! E$ ~9 \- J
true+ v( d8 u- ]4 d% ]; K* u0 Z$ s! Q6 Q7 e

4 h' x" U: d4 n. `  d4 P! ^/*6 d  _/ r% ^. ~
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误3 `/ B( O; H; H/ t4 G$ c) a" x
*/
+ f. n2 a0 o, I9 s</code></pre>
. I, [( t. q( T$ \, G6 X- X* b) l<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
! h! C% B- |) c8 n3 L<p><code>&amp;&amp; || !</code></p>
4 l) W! \& F6 [8 q$ ]$ V<pre><code class="language-javascript">&amp;&amp; 与
- |1 _# f6 y: p1 W2 i. b|| or
" O% Q' P4 Z/ J" ?! 非' [$ C4 m8 Y/ D* o  H. p8 r. l
</code></pre>
; c, u  R  z, q: H4 {+ M<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
6 A- Y* B+ j1 ?# Y<p><code>= += -= *= /=</code></p>
6 o3 }% L/ g1 t<pre><code class="language-javascript">// 赋值6 p- m2 `9 R2 v, X3 J; u
&gt; var x = 3! |/ R8 y9 M7 g0 H* U2 q7 x, C# p) Z
// 加等于
/ [4 x: }' v$ C* P' T; R&gt; x += 27 y: Q" l1 a- ]. |1 E" }
5
: [* H+ x1 j% @3 X8 Q! a3 `6 q+ N// 减等于
. \3 d+ h$ _6 b" [% p&gt; x -= 12 h- V$ P2 i* {- H4 _) j
4$ W- ]0 C+ ^! G  ~2 H" {3 O' w
// 乘等于
1 n# {9 {! a% f2 J1 L: t# h&gt; x *= 2
+ ]+ a! A" o' z! [8
% B/ i) ~6 o$ u6 k% O9 Z. _// 除等于
* I4 X1 |/ B& {&gt; x /= 2
6 {+ \; Q( Z4 ?! }- E4
4 G+ b* P8 w8 P7 C9 U</code></pre>
3 G9 K+ |/ `* `3 ?# G! L3 q. Z<h3 id="25-流程控制">2.5 流程控制</h3>
% Y( l" e; q$ c7 [; m7 e( u<h4 id="251-if">2.5.1 if</h4>- e' Y! c+ ]) S6 V( O& q
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}; l  q; R% B; h/ W# F9 H

. A2 H4 ]9 I2 _8 U1 m' A$ F* B&gt; var x = 33 Y) b2 \9 }0 @$ S3 h1 k' C
&gt; if (x &gt; 2){console.log("OK")}# n" H+ c+ F& i7 O( _
OK
8 F) J+ K2 _2 Y2 I$ l) _/ W) w/ Z2 H2 c
2, if(条件){条件成立执行代码} . p( t2 g/ {7 G
        else{条件不成立执行代码}( |& G) h2 N4 ^" F4 ~: l$ u

- j: b# {! v! K: m&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
) F1 G9 f. u& o8 x'NO'" ~  W: `  W; |* b$ \, z! [  |

% U0 H) l9 ?/ b8 O/ n% F% H3, if(条件1){条件1成立执行代码}
0 S# k( G1 a2 D8 e        else if(条件2){条件2成立执行代码}
7 I  H1 q. H" P( P. [    else{上面条件都不成立执行代码}
( H$ J% i& R  T+ x6 {2 d" E6 X
5 n: ^6 R/ H. U) N; _: N* D&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}# L  n1 d) b, C" f  ]) X
Ha
8 o) ]- R, A# t6 Y3 z: o5 c</code></pre>8 \9 p+ }1 S1 B% p& g/ C/ b- |% {
<h4 id="252-switch">2.5.2 switch</h4>6 r. o7 M# r: w+ ]# N% c( x. f+ b
<pre><code class="language-javascript">var day = new Date().getDay();
% t; D5 m& m: T4 {5 l4 }switch (day) {  ]* ]# N( ~- |7 v; b
  case 0:9 c2 ~4 ~2 {# a" }& r
  console.log("Sunday");5 a7 ?: w, j, i0 n
  break;
+ r7 v2 |! @7 Z  M3 v  case 1:- C  x8 N0 @& B
  console.log("Monday");5 |* G# f+ e* V
  break;0 c6 L' w. g, g3 c
default:0 `% A: x1 Q. [
  console.log("不在范围")( D: M! T2 ^0 M% s7 ?1 T( O, }, W3 I
}" @' u/ c* i( b4 s8 F0 C' A$ p
不在范围
8 S- c9 v; r9 Z3 U) N) N0 C1 u: N% {1 T</code></pre>* ^, d4 x4 P3 W% R
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
2 ?! i8 [" }% V$ z/ H1 ~<h4 id="253-for">2.5.3 for</h4>$ j5 Q5 r- Q2 c5 g9 v
<pre><code class="language-python">// for 循环
' u( z7 E6 s  e* v        for(起始值;循环条件;每次循环后执行的操作){8 f# E4 g! n' @$ [) s- M
        for循环体代码, q6 s0 a7 z! u- d- l3 {
    }
: t- l2 m" M0 e9 f! Q0 r& a2 [0 [! w
for (var i = 0; i&lt;10; i++){# ?9 R# G6 t- k
    console.log(i)8 K0 _) I3 L  a; u  q
}: E* a1 l- N& n, |8 z
        01 w  i7 d. g9 D9 O
        1( H) `4 y; T2 Y' z
        2
4 s3 J0 n" m* p' P# e        3
  e$ E% C& t9 n  V- s% s7 T        4
7 ~5 }! B7 v: J8 G4 Q6 m- w: z        5
; W, Q: U0 ?7 i% U. n4 a        6
. @6 s: b* o7 T/ m+ y& |. E        7/ ^) x" x# L# Y. \/ ?7 R
        8- P! W' s0 f# c
        9
% i4 G+ o' Z; Y</code></pre>" _9 x  P( n! G; w! b+ d
<h4 id="254-while">2.5.4 while</h4>
6 F: A! `+ B' t+ F. c* i6 O* O; P/ k<pre><code class="language-javascript">// while 循环
3 \0 |% Y9 t/ p9 A4 o5 ?& b0 n) ^% h        while(循环条件){  S' U% c+ `" F5 i7 k0 s+ Y0 c
        循环体代码) u1 t0 z2 v3 u4 J1 c
    }
7 V  Z5 i3 S' M
( ?! f5 D- y) d&gt; var i = 0
' z& [, ]" x3 H% Y&gt; while(i&lt;10){- j8 P0 v- C# i
    console.log(i)# b( m3 |; |) A0 F+ Q
    i++
+ ~" m& C# p, a% V. w}* J. \0 U! e0 C& R0 P
01 C8 f5 l% {( S* P
1" f0 U9 e' g6 U
2- U- E% W% c/ f+ [5 g
3
3 t& h- U3 @% T$ h- C) w 4( d7 a! N6 f! H7 u; b0 g
5
" Y/ C; J1 W8 n; m( g1 d- G% e 6
" T) d9 a' l; f0 o; z  Q 7. P: n. {! `  c% _
8- U( d3 S: V3 t3 x" x
9
! o  Z9 A! T9 A2 S& H</code></pre>
, \: [; m( z3 z; E9 s. x<h4 id="255-break和continue">2.5.5 break和continue</h4>1 n% ^) a- M' z9 m
<pre><code class="language-javascript">// break7 E. q$ G- O* T% {* p
for (var i = 0; i&lt;10; i++){
' q+ x6 b3 X- n8 ]$ }0 X; a( |    if (i == 5){break}7 b3 K, S$ O7 N0 s$ a. I+ e; A. V
    console.log(i)
. u) H4 D  b' F' e}
! Y/ h5 N2 L& v) P 0
4 `9 ^) B' q, J* y( W5 i0 [4 l- m 1: f% _( T! j& C% K, v0 h2 N- z
2: c7 i7 i/ ]  F8 ]
30 t6 a0 [, `$ T2 ~2 R* P% X- ^3 S
4" a8 I8 ^* j( b. z" n* j# g
// continue6 W: }( ]6 T1 S  ^3 Q6 H
for (var i = 0; i&lt;10; i++){2 M/ h, i. H1 @- o
    if (i == 5){continue}
: `& r: z2 l% u" F1 b# o) @3 z    console.log(i): L' W0 a8 b8 w. o' s
}
) L' j; P) H: t4 i. D7 K, I 0; }; A7 z3 B7 o  j. ^
19 p. G) T) |6 H5 R' V
2
" f$ }1 u% g5 d5 C5 [1 k 3
) W4 W4 X3 V1 }# y! ] 4) _+ b" J0 `3 _1 @, [& I
6# _; Y. K3 ^. K9 Y( t! {! U2 e6 ?7 M
7
! i9 m- Z* z: G: k" O" C2 q 8
" b; s0 G% X- O  K4 ]: P* Y" g 9
, h- p. X5 \  [. B
% L7 q. r8 J8 r3 f# o</code></pre>
5 D" E% P& w7 k<h3 id="26-三元运算">2.6 三元运算</h3>. P+ v7 c% [' y- m( T8 j
<pre><code class="language-javascript">&gt; a
8 X3 r& h9 b' k9 }6* [  x+ v% L2 z* h% J
&gt; b
) _* k0 D5 k5 y  a7 o6 _3
: i8 U! {& k9 g% P) s5 K
; s) ~) J; L+ i7 n//条件成立c为a的值,不成立c为b的值
( S/ a% f0 n$ B&gt; var c = a &gt; b ? a : b) A, R" a& X* k* k% ]" \) s
&gt; c
; u) J# }% d# ]( F6/ M2 Q/ ^7 F+ H; I* s( j/ {2 O

- ?6 |  w- T4 r7 G7 j// 三元运算可以嵌套
& r5 s( x: o* ~6 j  B; y' j8 L</code></pre>1 ^3 V9 @- f* g- O$ `
<h3 id="27-函数">2.7 函数</h3>
; e* V  D3 K+ }4 Y4 n<pre><code class="language-javascript">1. 普通函数; i2 ^  I# m9 Q
&gt; function foo1(){/ ~# [- G, C$ v8 Q. G+ N, n
    console.log("Hi")
9 U" J. M' [1 P$ E}
* r  g) E( w( ~1 B6 Q9 m; V
- \+ B7 S7 N4 o1 c/ f&gt; foo1()  W4 ?/ Q4 Q" ?  u, w; I
        Hi
4 Q8 E9 |: a# K2. 带参数函数
$ I; q8 L% G0 E# e1 }&gt; function foo1(name){
3 m$ e9 Q% i8 l& ~: xconsole.log("Hi",name)
9 t* w% O* r$ [% M* m/ p3 ?; G# Z# e}" P! n4 p; s) U* d. e' q, ?8 Z

0 \- C/ C; e6 \&gt; foo1("Hans")! A* x& @* A  x* g$ u) ^
Hi Hans
  d8 U. v6 J- m' X7 j6 s  m& v5 r0 W" a4 W: [& j9 j
&gt; var name = "Hello"  A2 f( R3 I# a& _
&gt; foo1(name)
4 I& d$ F* P1 `6 {! M4 a" }Hi Hello
" {& _5 K; e+ o4 @. @* W0 b$ Q0 ^) I  {+ ?
3. 带返回值函数2 I7 G% z" z. m, `" n
&gt; function foo1(a,b){
' M0 `( O. G& g- k        return a + b   8 M% W3 m( m4 k# U
}
$ K( z7 L1 i! ]1 r&gt; foo1(1,2): E9 i3 \% U, O( @
3: O; S: k7 O; e2 X
&gt; var a = foo1(10,20)  //接受函数返回值' K1 a$ a! {6 ]8 G0 @
&gt; a: a; W7 b( e5 A" z/ a. Y7 a6 t
30
/ |7 H" T4 j, {% r% U3 b! E8 Z3 J! A9 ^
4. 匿名函数
: J: B( \, n9 Y; d; @/ s, q&gt; var sum = function(a, b){0 c; E+ a- g- ~' k# D
  return a + b;/ v* R$ ^' |& _
}
* d+ B) W# d7 i; W8 m/ {8 Q1 h&gt; sum(1,2)% u4 |1 @1 C5 \; K7 l
3
2 [! G7 }2 h& q+ H4 P! M7 w' |4 r; X7 b- `1 S2 L- L0 F" T
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱, I( E( B. N$ L, t% X# j6 b$ W! `
&gt; (function(a, b){
) Z% C* O0 t5 C* u! m  return a + b& x7 I$ t/ L' I9 H' f* F
})(10, 20)' ]  ~7 D  @- P* J5 Z
30! X  D$ d1 R9 `$ S# N
5 b! @6 |2 b1 W7 h9 s4 |
5. 闭包函数
, n3 G; Q2 _& b  l5 Y  y// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
' @: J7 `6 R  ?& Y: h$ Pvar city = "BJ"; X$ I1 @" b. g) X6 s
function f(){( v1 R6 G4 H% A* q9 ~
    var city = "SH"4 a8 N7 [; D) `' U0 u6 N+ g4 {
    function inner(){
# h  l; f& I2 t& s. n5 M3 v        console.log(city)
. s2 |/ s' r6 S! W" K) n; O( k    }' l7 ?/ U" r) H4 l& ?7 _+ j3 a
    return inner
' f+ d+ e- [6 r& w) J: s: G}7 L4 w% R( w! W' h5 P. N' h# ~( \
var ret = f()1 {2 F7 R& C6 F" L
ret()0 }+ w7 {' `) a2 R
执行结果:( a1 m* A3 V- d+ Z0 V" N
SH
- y* y! e% T1 T2 G
, i+ P( l  H) N  X  s- A* W</code></pre>6 v% l1 _2 [9 G- e; i6 \
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
* q2 M5 v# M1 S" d" A+ L<pre><code class="language-javascript">var f = v =&gt; v;, Y: T" O+ h- b8 u# ~8 F$ t9 Y& M
// 等同于
) {- f- U% [/ {$ y, Mvar f = function(v){
! z7 I$ q5 b" t1 f  q; q  return v;' }; O$ h/ O0 C" e8 b! S$ ^) W7 V
}+ g3 b* C0 |3 t5 _2 U7 W7 a8 j5 n
</code></pre>/ a$ w& N. }; k3 h
<p><code>arguments</code>参数 可以获取传入的所有数据</p>* D: c9 u" z7 f! r
<pre><code class="language-javascript">function foo1(a,b){
. I- Y. U7 D$ k! S& d9 o% D    console.log(arguments.length)  //参数的个数
0 y/ e7 T1 `+ `3 a  I    console.log(arguments[0]) // 第一个参数的值
, J: C/ ?# z- |8 b  j6 \        return a + b   ( R9 A9 W8 w4 k
}
+ G# `" h! ]2 Z) r% B5 R  Hfoo1(10,20)
% w- \: Z4 `% Y5 R8 c结果:
/ f9 ^& B( Y8 s$ q7 \/ R9 U 2          //参数的个数 7 |. V, T% W- u9 R4 m9 [
10        // 第一个参数的值
% e0 x# h/ x8 Z* K& V30        // 返回相加的结果
! h& _! m) j- z</code></pre>( q7 v7 o( ~  k/ _/ _9 r
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>/ [( ~; f- M; C
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
& l  O. ~+ l/ ~9 e5 z+ [- R<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
; C/ J  B  l5 L+ |7 M1 L) K<h4 id="281-date对象">2.8.1 Date对象</h4>
8 D( R' m7 y8 T1 K" L* ]7 m! J<pre><code class="language-javascript">&gt; var data_test = new Date()
" D, B" D& y1 e( w" n) E4 T&gt; data_test0 I# S$ [# i* @, K0 v
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)) o# e- K. B; p6 P
&gt; data_test.toLocaleString()3 r6 {5 B; e- Z& Q1 |9 |
'2022/2/11 下午9:44:43'$ p& B2 H! P8 l9 f9 J2 }

6 Q/ L# P/ k* r; m' _3 t) S&gt; data_test.toLocaleDateString()
/ B8 T0 H/ o8 y' D- A4 q'2022/2/11'
( e- D& I' i' U3 k5 ~7 d+ J( @% O3 Y( y3 l4 r
&gt; var data_test2  = new Date("2022/2/11 9:44:43")+ ^5 a  O6 u0 c8 o1 [' C! ^* h- d3 i
&gt; data_test2.toLocaleString()2 X" T1 W) W; i5 Y7 P
'2022/2/11 上午9:44:43'
5 b. ]4 u4 K7 B4 J. t' Y9 s) V- O- C1 e. S
// 获取当前几号: O5 s1 i5 a/ C8 y* Y3 m- i* M0 Z1 [6 ^
&gt; data_test.getDate()5 P; l" S+ _6 k8 _
11
& y& B" k: }8 C. u4 m7 ?$ n* k+ j7 b  w// 获取星期几,数字表示
0 N/ c( p; N9 U&gt; data_test.getDay()  " v+ z" V3 r( h4 a" U' r' \
5
1 p  h" Q( n- z1 Y" w! [/ c8 [// 获取月份(0-11)
5 N# S# s8 U* i5 v+ l) L&gt; data_test.getMonth(), m" B+ x: ?, K+ l# `4 x/ U7 e# A
1
& Q  y4 t0 t9 I; z// 获取完整年份
6 ]6 F7 u) b+ l! J&gt; data_test.getFullYear()
$ ]2 I7 c( v5 o' V- Q8 b# o2022
1 ]1 x" r4 c. r7 ]! @% i7 ^$ z2 a// 获取时
; ^* V3 A6 Z9 G" P( v' Z% b&gt; data_test.getHours()
% S- o- @: I9 O" ]' ^21
8 |5 Q1 x& E/ C) H4 B// 获取分7 ]; G; Y' s& }0 X
&gt; data_test.getMinutes()( m% V7 R- p. U0 Z* b0 y
44& P$ d! t- f5 s5 C5 l0 T
// 获取秒( ?; H- Y  C0 w$ `' O1 m* T
&gt; data_test.getSeconds()* j, ~+ |! ]! t3 S) A- A4 G
43
0 b0 W: M6 c- c$ ~. S6 o8 ^% a+ P// 获取毫秒" p; p. L1 s* Q  p; |, r
&gt; data_test.getMilliseconds()( T  {) J) h* x/ _3 N7 v
2906 A7 Z0 U/ L6 D  i
// 获取时间戳: A3 `4 E' F: d4 {+ L
&gt; data_test.getTime()
/ g% d) r$ [/ x. u1644587083290
0 v2 O$ m2 Z/ g+ e</code></pre>
, G' i# Y4 @$ N3 R9 D<h4 id="282-json对象">2.8.2 Json对象</h4>
" k. Z4 r1 t- g) [( R" E7 n: Y5 ]' |<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
4 {2 h1 U+ w; e. L  Z5 p! j+ XJSON.parse()  // 反序列化,把JSON字符串转换成对象
: a3 A6 |: H$ y) L: s9 n
" m( y& K/ i4 C! {3 g) f// 序列化
$ l! X6 ?5 ~% e8 f2 b+ {&gt; var jstojson = JSON.stringify(person) . p# I+ R7 @0 w0 L/ Z
&gt; jstojson  
6 t7 X2 u* d* X1 `: W% b' y'{"Name":"Hans","Age":18}') T+ T7 h9 z6 f" Z
  ^& m$ C" C# x( v2 ^! L4 w
// 反序列化
0 B, [$ w! M) V# {4 R&gt; var x = JSON.parse(jstojson)
" F4 z6 m+ H$ m&gt; x- v1 H& R- t& q6 o6 S1 Y
{Name: 'Hans', Age: 18}
* A; X5 o! X2 O( t: ^( A&gt; x.Age
* q/ R4 `9 C0 P9 R9 h18* s# j! t# D9 ]6 M" w5 n) [  F* K
</code></pre>
- q& H1 U! W% ?( Q8 Y<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>9 W# T) Q' C" O
<p>正则</p>
+ c3 n6 r* o2 G7 X5 r<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");' l, K+ y) W: C7 Z# y9 o( T5 `8 K
&gt; reg1* v) s* t4 v3 N, {: S
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
  T$ U4 z; x' l  B! e8 U; |) `0 S&gt; reg1.test("Hans666"). V' K1 E4 M  o8 l6 U4 c: {
true
5 ~/ t" B/ Y, m1 n8 G) a$ h4 `9 H) \6 E' g9 Z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
" Z5 d. h- }( C8 S8 {9 T' `( r&gt; reg2: k2 }! G+ ]8 C' R8 W. Z8 G9 I; `% c
/^[a-zA-Z][a-zA-Z0-9]{4,7}/% x2 f  Z; ~1 {& j
&gt; reg2.test('Hasdfa')  W/ P9 }( ^+ ^4 ^! y  J, w
true
* q8 f7 C# t. ?3 M/ D. [! ]3 N8 y7 G3 V4 e
全局匹配:, p# L7 i$ _6 e: \+ T" f7 s
&gt; name$ ?: n9 `- F  c/ h; |
'Hello'2 r( u9 G, H- t' V  g
&gt; name.match(/l/)
; h: p8 \8 ?; }$ D+ {! S['l', index: 2, input: 'Hello', groups: undefined]
, M% J7 _+ j7 B" m$ [
) @0 K- x) O$ p; W&gt; name.match(/l/g)" e, ?4 v* K* f- j$ {2 M
(2)&nbsp;['l', 'l']: F1 D, U# Y8 ?4 L! a, E# F3 `( ?
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
2 [2 Y3 U9 V$ v4 M1 ?5 f% x3 z; o' U: I- f2 M6 Q* E
全局匹配注意事项:
8 H- `0 ]5 {4 C- q& i9 K&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
8 C8 l; m. l& }- o! Z' b&gt; reg2.test('Hasdfa')
) A* \- }! V% v4 e( T- t# Dtrue. K$ U3 _9 j0 N
&gt;reg2.lastIndex;
$ Q* k0 G' E1 b0 ~7 D6. M' ?! e# f" W- w
&gt; reg2.test('Hasdfa')
4 F( d9 V  v! B2 P( x: l2 xfalse
4 x  b3 A" l7 ], {&gt; reg2.lastIndex;
# F) i+ E5 U; F: [+ L! v6 Q" Q% W2 ~0% w6 y; E0 _$ `; }$ t
&gt; reg2.test('Hasdfa')
" p2 K" D# N6 \/ z3 ltrue& o  I( N! w. s
&gt; reg2.lastIndex;: R% Z* {; D( n0 |2 A; T4 k( w) s
6% _9 Y' g, A$ A+ G
&gt; reg2.test('Hasdfa')! p- I8 y; T, M# h% d
false8 V6 w) _9 z7 N% I
&gt; reg2.lastIndex;
& ]$ K, W5 B7 i* j2 L$ p7 ?02 `# c* J9 }( x7 `2 T
// 全局匹配会有一个lastindex属性
( J2 a& L8 u$ q. T&gt; reg2.test(): q1 ~  P( M: ]2 o  x
false
$ \$ h9 z8 \6 |0 m$ _&gt; reg2.test()( Z6 F  m8 m5 o# h" ?. W# _
true' b2 M/ b) q% Q
// 校验时不传参数默认传的是undefined+ l/ a, B4 q9 M' @7 G) E
</code></pre>4 j) ^6 P8 W- ?. r; ?
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' W# ?% p: x. N$ b* s
<p>就相当于是<code>python</code>中的字典</p>
1 {7 k7 a( f" [  u<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
( M# S4 @( \9 p  U" d4 g8 h3 j&gt; person) }! h, s$ q+ u6 u  ?  }% q) d
{Name: 'Hans', Age: 18}
, g3 C2 a% q5 w+ o&gt; person.Name6 g0 Q" M  P' H! k2 [
'Hans': G/ ?0 @/ a; X
&gt; person["Name"]) M1 n/ U5 t$ ^7 v! e) v; p1 m
'Hans'% _3 ^+ D9 t! m7 Z

7 t+ v0 K" `8 c/ r7 r+ Q// 也可以使用new Object创建- A) L% }: v* @' @
&gt; var person2 = new Object()
% A  v9 F6 ~" a% `&gt; person2.name = "Hello", I; a. K* V8 I; x& }4 [/ M
'Hello'1 P" e) o' h* C" ^1 a
&gt; person2.age = 20* c8 n( S8 O, U& L
20' a' ~8 Y  X; c4 Y! f: r
</code></pre>4 \8 J6 X$ f7 P* d& E+ j2 U
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
. z# J- q2 P. ]6 _' Q<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
+ O  }6 m9 D2 e5 V$ [# i" x7 w7 }6 P8 [<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>' J% j. f8 y7 ^7 ~" x% e5 f* R
<h3 id="31-window-对象">3.1 window 对象</h3>- P9 x1 F7 X; t1 v: Y
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>( E. ^7 X/ W5 l8 e7 l% k2 V
<pre><code class="language-python">//览器窗口的内部高度) q) Y& F: F+ {8 ^7 T& z3 |' a
window.innerHeight * s% E) K- w  N7 G
706
) l" h# _# J, x! u//浏览器窗口的内部宽度, f  r' [: E% @2 a# Y
window.innerWidth; k9 s1 K& e) T
1522
9 ~4 p$ C4 N1 s+ [5 i, t// 打开新窗口& h- l  S. D# l) m. n+ e3 E3 l
window.open('https://www.baidu.com')
8 I# D5 ~: j; H9 T3 z% LWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
: o( S% n8 P( p* O$ x6 P// 关闭当前窗口
+ f: ^; b/ ~0 K6 ?2 L9 o( v" swindow.close() ( o& z6 J6 f5 U+ S0 X
//  后退一页0 R. M- V3 N0 y
window.history.back()/ G) b. a3 X% _# N
// 前进一页
9 d; R1 L: B. m: ~  ]& V# hwindow.history.forward()
3 y4 N2 N8 k. v. `# W; s+ r- C: p//Web浏览器全称2 s$ ^' Z, t0 s: e; t, _' h
window.navigator.appName  R- ]+ Y0 |; t
'Netscape'
- J8 `9 f" ^9 e8 N. {+ ^// Web浏览器厂商和版本的详细字符串
& E% T/ H4 f2 |, F7 F2 J; @window.navigator.appVersion* j9 e9 ]/ s" H2 @6 n$ S
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' D$ S) W: m6 c% o8 q// 客户端绝大部分信息
2 c) j( S  o" o& A' w( U7 s" @! ~window.navigator.userAgent
  j0 @2 |2 H- L1 ?+ `'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
( R1 I1 u3 ?+ H- A// 浏览器运行所在的操作系统
8 Y3 H' w6 ^* j- Hwindow.navigator.platform$ s7 e6 `9 i; B4 O7 b: Q2 o
'Win32'
1 h: d. W/ ?  |7 L7 t  a, B- g0 e) R& z) i
//  获取URL
& d) h4 `7 i. |6 N) y+ w" Owindow.location.href8 K$ s2 C" s7 ^8 o+ }* w6 \
// 跳转到指定页面
- H7 ?% f8 b# S! v* Y( q! pwindow.location.href='https://www.baidu.com'3 ]8 x7 x; a/ i7 I
// 重新加载页面' ]# k% y! x0 M7 k0 O; i! c" Y2 P4 L+ W* M
window.location.reload()
1 `, c' W% ]2 Q' M</code></pre>4 K0 }* V3 [( H0 L
<h3 id="32-弹出框">3.2 弹出框</h3># J+ p, C& U, U$ Q
<p>三种消息框:警告框、确认框、提示框。</p>
# `' l0 H8 F7 K3 q- A<h4 id="321-警告框">3.2.1 警告框</h4>6 j- x! G' f# R# [" S
<pre><code class="language-javascript">alert("Hello")8 h7 k8 r2 c) R( X2 v/ `
</code></pre>3 W0 u+ l# l$ R+ a5 A% {
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>( ^: }$ Y4 Z' Q- D
<h4 id="322-确认框">3.2.2 确认框</h4># N  G# F) d+ \2 e
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
4 Q; ]- O1 |7 ]2 [<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true8 Q6 h9 j* F% h. }( t: P5 }
true. P/ h- P3 z. i' ]. r
&gt; confirm("你确定吗?")  // 点取消返回false
9 @% p& d* S/ `! rfalse8 X* H/ d2 {, ^  Q" O' m
</code></pre>) A9 \3 P+ ~2 B
<h4 id="323-提示框">3.2.3 提示框</h4># E& w: v4 y/ t! t' w2 g, L2 w( \
<p><code>prompt("请输入","提示")</code></p>. d: f. i8 p5 g
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>5 \% Z) A' F1 a1 Z' }4 ~' o& z
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>- T8 T+ U1 U6 V' [- O9 S; A
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>/ A) d0 @' C! F, v1 P7 t$ J$ k
<h3 id="33-计时相关">3.3 计时相关</h3>
  e+ Z  T* J) ~<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
, o, `. r: t& ~) x' g7 D# t8 }<pre><code class="language-javascript">// 等于3秒钟弹窗
! n# i6 s' E4 a0 N- SsetTimeout(function(){alert("Hello")}, 3000)
$ O9 i, n' Z: S/ @8 C3 {+ S, {/ R5 t3 E" Q0 Y  z" E' d
var t = setTimeout(function(){alert("Hello")}, 3000)1 N0 t+ x( v$ E* ]! Z
6 N3 n4 x8 e% c' c$ S
// 取消setTimeout设置! I3 J& i6 k% \) i. E, {- N
clearTimeout(t)
) ^7 w' H# }$ B6 }</code></pre>% R3 w# v5 t% c) E
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
% b1 Z$ j' j# H" D( Y<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>3 B  n5 l0 b5 E; F% l# \& y. L
<pre><code class="language-javascript">每三秒弹出 "hello" :
  d3 S+ n/ z7 psetInterval(function(){alert("Hello")},3000);, ]/ U/ I' `) D3 F
</code></pre>4 E+ t& \5 y7 K/ k4 H: {1 Y
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>$ @& I6 W9 s  y2 r& a) s6 j# v
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);9 P2 m% P. q5 c# L1 y! c6 W
//取消:
7 k9 T; Y0 t$ |' U' DclearInterval(t)& y- w* ^# [3 O
</code></pre>
; j) i5 H6 W' `7 M! }
0 z! K. b4 n$ @* J6 w
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-8-18 19:44 , Processed in 0.076082 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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