飞雪团队

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

前端之JavaScript

[复制链接]

6483

主题

6571

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

" V$ \! y2 o& d7 l<h1 id="前端之javascript">前端之JavaScript</h1>
" }6 b! ]8 |& A<p></p><p></p>
' E0 D, D0 a* |/ ?) q<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>  s% i2 I; S2 K& P: W
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>1 H3 c: j# r( P
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 L. g3 G2 s, H; X' A它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 e$ a) }  U- X) D9 Z# X它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
) F# c* E+ d4 y7 d. \7 W<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
3 C( ^0 z. C) s, }2 k/ c<h3 id="21-注释">2.1 注释</h3>* R9 o: ?- G+ L' o
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>- u* [2 A% V6 b) [" Q- S  X/ l2 [/ _
<pre><code class="language-javascript">// 这是单行注释
1 Z2 X+ l. W' K! ?6 R. y- \* H( P3 z3 A
/*
- v( d' m4 V! f. o这是多行注释的第一行,
0 G1 Z, v* L* n/ R1 A5 G: G这是第二行。
( L2 }8 C& ]2 n2 o*/# N' N  q" V) n2 k; N' g  |
</code></pre>
7 l- y- m* b, H1 K  `* I<h3 id="22-变量和常量">2.2 变量和常量</h3>
% [( p8 e8 b" q6 O. T+ |<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>9 O) X6 e. f) U0 u- U' F
<ul>
  A' M0 ^: O+ }, o5 S% @  D2 D2 ]1 ~<li>变量必须以字母开头</li>
2 w! \1 E/ r7 h/ j3 A6 B0 J  b1 J<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>' S! t8 M7 s4 @1 l6 U5 Z7 }, U
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>) P: o* M& M+ w; v1 a
</ul>. S, x5 N& E, e  D, Q; b  A
<p><code>var</code>定义的都为全局变量</p>3 Z+ E$ k/ J/ A8 N  {4 I
<p><code>let</code>可以声明局部变量</p>
* s' _% ^+ N& }<p><strong>声明变量:</strong></p>0 R/ z: |# Y8 q# C0 d) d$ I6 I6 k
<pre><code class="language-javascript">// 定义单个变量8 x! [8 w+ \# B' y
&gt; var name$ z+ C9 K: t) D4 }6 r5 M6 k' x% x7 C
&gt; name = 'Hans'
- k. y% p) H8 d$ A+ S0 I1 m//定义并赋值
$ T$ W2 `* G" O- b2 y) N&gt; var name = 'Hans'  \" N! T$ X" }& [. K1 y. a$ O
&gt; name% q5 f: H& g% [1 y0 d; v
'Hans'
$ y5 T) }  S% z  x  _# D: ^; m; X5 Y/ m2 L( a
// 定义多个变量
0 b1 q3 b. @* F) L6 G( x&gt; var name = "Hans", age = 181 h2 z& ~$ o8 b6 R/ T* B8 H# e
&gt; name
; c* L7 U  s0 y* F  T'Hans'( ]$ H) b4 U5 q
&gt; age
2 P( I  ^2 g. E/ a* @18* v1 c# U  [: g) V6 {
! C6 k6 ^1 y: o6 t$ W3 H
//多行使用反引号`` 类型python中的三引号: C  ^2 K2 I0 p5 H. Q
&gt; var text = `A young idler,) T/ m' {' H4 |) K( T7 b4 D
an old beggar`% C+ G* t2 L& G1 y' L  a
&gt; text
  T# ]* u; G+ ^" l% Z. g'A young idler,\nan old beggar': t) M* W# p/ c; {
</code></pre>
! T/ U0 g" p6 U4 z9 x<p><strong>声明常量:</strong></p>
% L" y; C/ A- D! m5 D) @<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
2 ~( m, N. }) J6 N, O<pre><code class="language-javascript">&gt; const pi = 3.14
; E, T( ~0 u1 _5 X&gt; pi
0 K9 k. B# @$ J! P3.14
" m. ~" d6 a; r4 Z1 ?&gt;  pi = 3.01" [3 q; z& x$ @0 S, r# V$ B
Uncaught TypeError: Assignment to constant variable.6 p7 p) e" `' z* x& ~! z
    at &lt;anonymous&gt;:1:4
0 j0 \9 i  R* B6 A, e+ P. |+ J- e- c6 Q, i3 `* G6 s
</code></pre>
; {# J7 S" l+ Q; |, r: h<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
; A% |% R4 c# w' }2 i* w+ L2 u/ M6 w<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
1 {8 q' R4 _+ q( ^4 s<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
8 e  L0 T% ~1 ]. E. }/ v<h4 id="231-number类型">2.3.1 Number类型</h4># U4 ^- M7 W9 S
<pre><code class="language-javascript">&gt; var a = 5
. }1 f3 t" `9 u&gt; typeof a   //查看变量的类型  
) Y6 T4 l' q+ wnumber9 X# F- p3 F+ }- @  a& x

# S1 o  P- e) K& U7 }% F* b( `: U&gt; var b = 1.3, B! e; E8 a0 U/ h1 M0 |
&gt; typeof b
/ D* O4 F& Z2 k/ ]3 Gnumber
* }3 f  i4 {0 ^9 o1 h1 R' `6 M4 z- z9 ]" I! x
// 不管整型还是浮点型打开出来的结果都是number类型5 A; y7 E8 o; c8 b
$ ~3 U  r& q! V
/*
/ [% k8 @" q0 \5 J$ [% ~; B# E  p  hNaN:Not A Number! j: Y8 k3 R$ E! g" {
NaN属于数值类型 表示的意思是 不是一个数字6 J8 q4 F8 i3 o- ?7 x) C5 ~
*/- ~3 N% V7 @+ s8 J# @. _( u

7 J2 C8 e3 i' q. eparseInt('2345')  // 转整型+ A5 ^3 {2 Z0 C! R- n1 ?' c
2345
: [4 k- u& I  c" A( AparseInt('2345.5'). Y6 J! \: i3 z" ~
2345- f3 n$ C8 m2 Q6 w2 l% d
parseFloat('2345.5') // 转浮点型3 y7 l6 y8 m# N# W. Z
2345.5/ t" ]7 T1 }  ?! K4 n$ H
parseFloat('ABC')
  q5 V( R9 y+ c9 i* o$ s. Q& ENaN- U: ~2 }. v& l" r: o
parseInt('abc')
- `0 ~2 o: E7 h" ?0 zNaN; R0 G- P5 z- l' E
</code></pre>, _, ^/ G$ A. G2 y9 L, w
<h4 id="232-string类型">2.3.2 String类型</h4>
5 I$ p: ~: ?  h! Z- `) G<pre><code class="language-javascript">&gt; var name = 'Hans'
0 }% s6 N! ]$ ?&gt; typeof name1 Y+ h3 e2 V0 @9 t
'string'
( t* Z# s9 `4 |
- V" g9 m0 P9 s* ]" P7 h//常用方法
: p- o( M3 Z0 e  _: ]& _. y% v// 变量值长度
, G6 z" X1 L9 r  [5 u) |&gt; name.length
- E/ \7 a. _" M0 ?0 }6 i4
0 `+ J, H% q5 L8 h// trim() 移除空白
3 T3 ?% t% x8 v3 s& X+ @&gt; var a = '    ABC    '5 x1 [- Z) p# F4 r
&gt; a
3 r# h3 D& Y$ A5 C'    ABC    '
% G& G3 d; c) I8 Y&gt; a.trim()
/ A7 y( d0 b0 _6 M7 d8 X* i; L% D7 B'ABC'
' ]" W% Y3 U* s% T//移除左边的空白
  k3 ~  Z2 ?& d&gt; a.trimLeft()
: z) x* n' L) _  r; k! i, m'ABC    '
: Q& m% u" c) t3 c( T//移除右边的空白7 C& r: L' Z  o" s& R
&gt; a.trimRight()
* ~: f% F: u/ T7 j'    ABC'( L2 e7 Y4 t* U+ n( C- Q6 O5 H0 d

) ~9 g* _3 J  @) r4 S, j; A//返回第n个字符,从0开始
/ A% I% k( M' H% E5 j&gt; name( ~1 N" [4 [) K3 Q
'Hans'. j2 z/ @( `  H5 o5 G8 }
&gt; name.charAt(3)2 T! R+ j0 |5 W0 m
's'
$ S5 j' B) s9 E8 b* P&gt; name.charAt()* n$ s  t7 X6 ]
'H'
4 h. r, _3 q% O* K3 t, g8 e$ w&gt; name.charAt(1)& B. T6 H9 \3 G6 \
'a'! d* U5 M) S, d5 ?
5 q& o( a6 U' r2 [% i5 G5 ]( V* \
// 在javascript中推荐使用加号(+)拼接
( P/ V0 t. T0 ~+ }7 O& b" o&gt; name
8 {1 k1 s( k) }4 e'Hans'
9 j, v$ I" l/ A* M$ D* m&gt; a1 w: p( Y; W; u/ I* v* W
'    ABC    '
' G; ?8 m! {3 H8 x&gt; name + a9 L6 v: E, r" L; L
'Hans    ABC    '( ^# p6 t5 l' T8 \4 g3 Q; `; ~
// 使用concat拼接( {, N0 S. ~  m: V4 t3 q
&gt; name.concat(a)+ `  Q, h6 r$ j/ u
'Hans    ABC    '
: Q" W0 ^4 Q! w! F' X& M# C9 Y6 a6 b* B! Q. \+ \
//indexOf(substring, start)子序列位置; U1 u; N, O* L
# H6 `. A* `, @
&gt; text. p- s+ s2 P( {- r$ I8 ^# i2 m3 |& _
'A young idler,\nan old beggar'
3 i4 W( U2 W; h; [: |% t&gt; text.indexOf('young',0)
1 W* L6 O5 ^# L6 W24 r" Z- ^( F+ d, J3 g
: J" }# G- W0 L- I9 c
//.substring(from, to)        根据索引获取子序列6 _) m$ Z& l% @( U
&gt; text.substring(0,)
& y, e* }1 E7 |: v'A young idler,\nan old beggar'
: }; G  M3 n: j. h7 R" \5 [&gt; text.substring(0,10)5 B" d0 d( {0 A' V  k
'A young id'' I1 Z0 e4 p: ?; ^' Y
: T3 E6 T: x* W: w. W4 J- n
// .slice(start, end)        切片, 从0开始顾头不顾尾/ ~0 |: b( v$ @9 M; r2 E6 Y
&gt; name.slice(0,3)
* S5 l, u6 s, p' i+ k+ R, T'Han'# `7 b  M1 h  g

8 S  L+ h' ?* K! o; ^4 G0 `5 o1 l// 转小写
, H( l5 n5 b3 y" N&gt; name
% Q6 y) w; I6 B1 H' Y& a'Hans'3 b% m# d% N7 ]( P' {& k! v
&gt; name.toLowerCase()
4 [; R7 A# J9 t! V'hans'
4 j4 B: {! `! P- ^// 转大写
- k& R5 g9 p6 D/ p&gt; name.toUpperCase()1 x' d' r6 |: e' }. o! }5 ^) G
'HANS'& A' i& n/ {2 ]; [9 d' m
2 _, h. t0 \8 C! t* j- }
// 分隔) a+ b! S( z; T  {, H8 k
&gt; name. }5 l2 h& v0 |* h
'Hans'2 R! z* f# L* e7 X: H* D: b
&gt; name.split('a'); F# E. ]+ _$ j8 X0 x
(2)&nbsp;['H', 'ns']
7 g% n0 [8 [( Y; ?3 U0 q, _</code></pre>6 @6 j! t4 v2 M% a" ?
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
$ V0 s; t: P+ o. k3 s<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>2 r" S6 c' ^2 u6 M9 ^/ g" A! n
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, d4 d+ a& r0 U, C
<p><strong>null和undefined</strong></p>
6 h  @. I/ y9 w: U<ul>
; H0 V5 B) _" A; r1 f9 s7 o<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
7 t& M4 c( C7 X2 Y% V<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>+ W. `, D: I& d
</ul># R/ y, s' ~4 V4 O2 y  T
<h4 id="234-array数组">2.3.4 Array数组</h4>9 d. E* t" Q$ M+ d2 t" B5 Z
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>5 c; ], ^) Z' m) I/ H; Q
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] . }- X7 S  V* J4 g. s  ^
&gt; array1! n$ b! M! j* c" ?- z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']* r. z2 I$ _/ l; h
&gt; console.log(array1[2])  //console.log打印类似python中的print# `& M6 W" c! D! Q) Z( c' D5 `) N
3' ?7 L* S- M; E) G2 u' ?
// length元素个数
" Q% a% z5 R  a) u) \6 O& V# R" o6 L&gt; array1.length6 l5 I: a+ k9 n) c3 c
6" W4 y1 Q' P6 S9 _- ~2 t
// 在尾部增加元素,类型append9 C2 `0 m! c3 C
&gt; array1.push('D')8 |4 I, [) n( V5 C7 F; b7 _: n
7
. p9 L8 x* y* m&gt; array1: P# J+ _) A3 E% y/ C# q* M/ {
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']! K3 Z- N; _5 \2 [
// 在头部增加元素
2 |: N3 z+ Y: [5 K+ ^&gt; array1.unshift(0)
9 K! l3 Z2 y9 A0 m8 U5 M/ q* g8
: h, g6 v: A& `7 e3 y&gt; array1# B; M- [" t# k6 o# d# [: s5 Z, G; R
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']- y( I' r1 s. G3 o: E0 J& ?% x4 `
* _1 M$ x: S% G; e3 j
//取最后一个元素& r" A9 J+ F# c; ?. w( d
&gt; array1.pop()
0 @* c! z: o9 v  T2 }'D'
" z4 T6 I9 ~1 A. m1 |. N' b&gt; array18 G5 Y9 ^, G( s5 V, a2 H; r9 p+ J
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
/ B  a0 u' z0 r7 B# Z) L//取头部元素
" @" B; s- z& ?- b! }4 O9 C6 C2 g: \&gt; array1.shift()
% w, a2 U. Y. T3 X. @4 U# i00 r& t1 i' W# W8 G* [$ P, N5 A; S
&gt; array1  c: K, u# [8 E% n* N
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
+ w+ p- Q( i, ^4 V  x3 o  z% G/ O4 o( u2 ?
//切片, 从0开始顾头不顾尾
$ R8 U$ i6 c8 c6 s1 R" w; @8 y: M&gt; array1.slice(3,6)5 K  E$ w* j' U5 T
(3)&nbsp;['a', 'b', 'c']
- M0 ?9 ^% U2 ]7 C3 @* G+ [// 反转
0 a+ w) {2 Z; g&gt; array1.reverse()
' ?& m& O  m; w(6)&nbsp;['c', 'b', 'a', 3, 2, 1]# q9 n5 U+ `- ?5 c, Y$ H* C; O' D
// 将数组元素连接成字符串
" H/ s% g& Q: w&gt; array1.join() // 什么不都写默认使用逗号分隔6 M6 Q- k* |* ^
'c,b,a,3,2,1'% G; X' D8 j9 ?7 h, w
&gt; array1.join('')$ a5 Y/ A; y$ Q( s" ?2 y
'cba321'6 e. O4 [, O3 t  H' J
&gt; array1.join('|')" o& J  e+ m8 W# G
'c|b|a|3|2|1'
' P+ i$ C5 |0 h+ o* J' ]- Q$ o, [
4 L: \& Z3 E+ @# I( X' @/ h$ p3 B// 连接数组
) u. J2 g& e8 o1 H; V6 G& r* K" s&gt; var array2 = ['A','B','C']
* e5 E& L# q$ `& ^, K&gt; array1.concat(array2)4 s$ L. @$ @: c% K- Y' r% b3 u
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']9 d9 L$ ^3 s0 p4 z6 r  l" C. P& u
" b, \' m4 T/ d" _) e! N0 q
// 排序
* l1 j9 I4 b# X&gt; array1.sort()& E9 ?8 L7 h- h) q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- X4 Q6 K" K' ]5 m
2 E" o( w7 C- M( `; j# Q// 删除元素,并可以向数据组中添加新元素(可选)
- G2 T3 W5 N0 L/ V. _( ?8 `7 e  Y&gt; array1.splice(3,3)  // 删除元素2 V% l  e9 ?9 I7 N' J: L& w
(3)&nbsp;['a', 'b', 'c']
; s* {1 V* P. P7 N6 r3 p&gt; array15 O: f* f  a0 M3 Q  G3 _
(3)&nbsp;[1, 2, 3]+ ~/ @7 p" @. s! l6 [& ~1 n
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素# ]  g2 g! C, E; c$ F% X
[]& u7 M1 s5 |: N
&gt; array1- b. Q6 y# G, e' Q
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']2 x2 o) {" L9 r% a) K, l. B
* x/ f7 I/ A* C2 G* |
/*
8 c6 n3 V( U+ T0 Gsplice(index,howmany,item1,.....,itemX)7 h. R" F+ a1 _4 F! A9 f
index:必需,必须是数字。规定从何处添加/删除元素。6 K0 o9 R' k( g- O6 e' Q
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。3 q. [/ q9 K3 @+ h# c' a
item1, ..., itemX        可选。要添加到数组的新元素: Y/ k8 P4 ^2 r  [4 S/ w
*/
4 `" e8 D! R1 o) Q1 T# {$ `7 y( Q  M' d' a9 X
// forEach()        将数组的每个元素传递给回调函数0 S6 T1 a- T/ @- t
&gt; array1.forEach(function test(n){console.log(n)}). @6 U- D( a4 D
1) F. g6 o, i: C
2
: D6 {% ^' d$ P% u 3' d! C2 l' ^$ j2 X/ ~! L
A
9 j9 v: q8 Z- o1 s' J3 A% B B1 U' }, C$ Y3 |. Q6 i" A& n/ ?
C
: y5 n7 r& Q% v3 m2 {// 返回一个数组元素调用函数处理后的值的新数组
- G! \  w+ J( j! ]&gt; array1.map(function(value){return value +1})
1 K# l  f% t9 b(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
' A* {6 t! y6 f; a; x</code></pre>1 ?7 [1 \8 _4 n) o8 O5 X
<h3 id="24-运算符">2.4 运算符</h3>& v1 z. u( S7 a! ~
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
* u" M9 C1 f& J4 k<p><code>+ - * / % ++ --</code></p>* B% y+ [( n( w3 p* k, O2 U; t
<pre><code class="language-javascript">&gt; var a = 6
  j; e4 ?- s4 p&gt; var b = 3
) v6 {/ g  r1 k: m& m* U// 加: S! B# ]- m4 s6 A3 R; q
&gt; a + b
" m. c2 q: {- W0 j$ H7 l* H0 d9' h- s9 m" Y6 j' R) [
// 减" E5 o) Y7 m9 a5 S  `. H
&gt; a - b( |6 p5 M% n* `- T/ Z
3
0 J# w( O* o# m) a" @# M0 X// 乘
$ ^3 f# K+ B! a+ L2 @" s' k&gt; a * b
$ ]" w" j1 r- r5 n4 m' }3 y# V18
0 B' R2 G6 h  v' J// 除4 b( a( q% _2 N  B
&gt; a / b7 g& s+ B$ g: p9 K0 s2 y; a
20 I. l/ O( X$ C, k3 n5 b% [
// 取模(取余)
1 y' H$ Y; G' D$ U; ?# `& w&gt; a % b
; x& U9 t- `2 [' E/ r, |0
" a( T/ h2 I2 R1 D/ A1 s// 自增1(先赋值再增1)
9 U& J9 t: ^: j5 B&gt; a++
; ^$ b+ E2 b  R" G9 h6" ~( ~4 M  V3 w; a& I
&gt; a5 [* q3 U4 M& i. U
7
2 U/ z! n8 v2 l/ O7 X// 自减1(先赋值再减1)7 o2 Q" J% A- s$ x% [* c0 O+ V, u1 N( Q
&gt; a--
3 s$ U) z- F6 G2 {7, M: S* y$ \, ?' o
&gt; a1 s% s$ k9 E2 Z; T
6
, Z2 N! Z  H+ P  [0 U// 自增1(先增1再赋值)
; z9 m# F& }' X, ~1 J&gt; ++a
" L2 b. U( r! |% R7" d+ p) T$ C. l
// 自减1(先减1再赋值)* ?% T% n7 x3 F+ L3 q3 r
&gt; --a' o! m  P* c5 N) H! _8 d6 R
6
8 T' f6 F& T1 G  k. v&gt; a
& T, R4 j) V# S' u: p8 a6
5 P4 g0 ]; x% g9 a3 i6 W! d* Q, P# \' h7 j
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理: p; i' g  @  f  C$ [
</code></pre>
7 O6 P+ r/ ~7 U" j6 D9 D<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 I1 m+ v# M0 b4 t! N% c6 k) u<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
5 Q& p# \" ?7 [. x' p. O<pre><code class="language-javascript">// 大于1 ]& h- h7 s. Q2 V" B6 w- R; G
&gt; a &gt; b1 ^9 {9 ]; w8 G1 A5 X: w" w
true7 k2 R6 u1 A& a' y, d$ s9 Z9 s
// 大于等于
. ]4 `0 d, u' a3 l0 x; u&gt; a &gt;= b# v1 Y. A+ N" ?
true# A- l, D+ H2 J3 T4 o6 g. U: I
// 小于. |' w0 @' b4 m( _9 u
&gt; a &lt; b/ W- ~% K: o, D0 Q8 z5 Q
false
6 N' c; d  z$ G+ u$ z. l" O// 小于等于
. W: W! D2 W! v5 D9 P3 s  Y8 M- j2 G&gt; a &lt;= b
! F& H1 D' ?, p: I6 |4 d/ Jfalse% E6 ]- G, o' h3 w- a" y# F1 x1 T
// 弱不等于
6 R+ s+ z+ C! y2 N) c# H&gt; a != b4 [% V1 T9 R* n- N+ T
true
) o) L- a( B5 ^// 弱等于6 H8 i% I. }& p
&gt; 1 == '1'
: f0 {7 u, e2 K2 o' s4 o2 Mtrue
3 {$ H% i4 _) j// 强等于
( O, p% Z! V8 i% w9 b: ]" J8 k  H&gt; 1 === '1'  C. ?* K5 l+ `/ C! l9 t; E
false3 c$ z+ a; C" y" v* k& f4 t
// 强不等于
+ V  j, k; ~2 b$ ?! S&gt; 1 !== '1'
7 ~. w* ~" F0 [3 H6 vtrue/ Z( T2 b4 i3 l) [- k

5 v5 {8 ?, v# h7 x/*
  G; f* g4 [; |( ~JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误2 r  m4 W# g  i8 j7 E1 @  u$ q
*/' V+ Z7 p. ~6 b4 ~, u* D- E7 s2 ^( }
</code></pre>
6 T3 V; c+ M" a( L& E2 @<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>% f) P/ v2 b# @: O- G* ]- v
<p><code>&amp;&amp; || !</code></p>
! t; @& E5 a7 t3 D7 y( x4 F4 U<pre><code class="language-javascript">&amp;&amp; 与$ x% M+ u) L+ i& L5 E- g
|| or
, j  l: x/ ~" n  ^/ Z! 非
* ]4 b9 y- n$ e6 K. ?# b. @1 s* F</code></pre>
$ D1 g  U1 Q  }' v6 g* B0 T! d# I( u<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
( f& W: U. S1 h: }& P8 b( g<p><code>= += -= *= /=</code></p>& y* ]+ p' M6 y3 u
<pre><code class="language-javascript">// 赋值# q: E% o" T2 x. f: t( P5 n
&gt; var x = 3$ A, ^6 ^0 ^" R2 V7 U+ E
// 加等于
2 g( z* J( C2 {6 h+ U&gt; x += 2
! G, S  o) V- n5' [: P% R$ E6 m9 N& A, t9 ~# K
// 减等于
9 {7 m4 O/ g6 Y' v&gt; x -= 1, F2 R" c- ~% J- ~  u
4# Y( M' i; ]) C
// 乘等于
: z9 r2 D4 q( t. p0 h5 J! s&gt; x *= 2
( q& C3 a7 u* Q, w# u: z, S8) F5 U" ?  j: h7 k7 ?& T
// 除等于' a9 k, q  p6 t3 ]" r
&gt; x /= 2
) s. k# D# u( Y) M0 o& y) i4; ?( c1 z, E" R& {* a5 A
</code></pre>
4 k% J( }1 }( _  Y5 P; N<h3 id="25-流程控制">2.5 流程控制</h3>
( Q  ]( W/ }: Y2 Z, }8 n<h4 id="251-if">2.5.1 if</h4>
' G0 A* P8 y3 b& `' ~3 o<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
# D! |1 J( H2 e1 T  E; f  F$ Q* Z; j
&gt; var x = 3
; N: h; M5 y/ T0 ^9 [( A5 u&gt; if (x &gt; 2){console.log("OK")}4 ]* J2 m' I5 {* J0 A: p  x% m
OK6 D! k5 f( N. H0 ~# J

3 L. z2 P  N5 n+ n, M5 z2, if(条件){条件成立执行代码} # j) s, I2 q6 V! L$ p
        else{条件不成立执行代码}
' G1 T" Q  T# Z: q1 d- ^( I
4 ?  i8 M1 T' n' e5 n* H&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
9 q6 F5 x+ ^( P'NO'
" I9 x4 S6 B5 C7 A1 d
# P. L0 I6 [2 [9 O; F* r3, if(条件1){条件1成立执行代码}
0 R0 D5 b: R! E3 v8 Y0 a        else if(条件2){条件2成立执行代码}
6 Z' t: \" S% l    else{上面条件都不成立执行代码}
, a" r- }% F: d1 q) d& q; a9 U, q+ I/ N
6 ^9 _4 B5 |3 e&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}4 j: c+ ~/ A0 [& }
Ha
' T/ g8 I: q7 d9 J" z</code></pre>
' J, u" B# t4 K<h4 id="252-switch">2.5.2 switch</h4>
' s9 j0 ]/ `; w; \<pre><code class="language-javascript">var day = new Date().getDay();, t3 |/ Z' w  C) ^
switch (day) {
8 R0 u9 e+ Q" j% K& G, @  case 0:- z0 B8 z% r* j8 _
  console.log("Sunday");
0 G9 F( q7 z' E8 i# M) z# j- J  break;$ k4 s9 R/ r( b: ^0 @
  case 1:
4 B$ A2 K7 v8 S! o. m, @5 o2 W) e  console.log("Monday");
/ @  L$ A: D) _# G, a3 y0 u" @6 l  break;
6 O/ z. h$ R  G( ^: T$ ]# ?7 |default:
; K$ w- ?2 D2 W# B( ~  console.log("不在范围"), J* F" l4 Y& H- m% j& P0 w
}
, `: @% V! k) U* v/ \$ l 不在范围2 r+ ^. S4 E$ Z
</code></pre>
; h. {! g+ ~. c<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>6 M4 g, a) ]# V9 X
<h4 id="253-for">2.5.3 for</h4>0 Y$ |! o. ~0 M# u! f! Z
<pre><code class="language-python">// for 循环
+ m; z/ l% b( n7 u* g# d        for(起始值;循环条件;每次循环后执行的操作){0 \+ G4 @; b8 T& C) j, P
        for循环体代码# s3 t4 O; @: k
    }3 Q. `- M/ r* G8 @+ o: x0 f
; C: k6 M9 H  ]8 }" W
for (var i = 0; i&lt;10; i++){
. L9 ^: U; S4 b# `& v- O# E    console.log(i)
% Y; T8 k0 n7 p2 z! r' ?9 J9 L}6 E( l1 ^& s! F' L! S0 z6 g
        0
( g" O  W1 Q' w        1
- G. h' |& [" ?4 L8 D- L        2( K/ w$ D( k( z$ B: S; }- b# {5 u
        3
! X, Z5 V' M- \& \        46 c' r3 W7 H$ \8 h/ f
        5
: }; w( E# V0 [9 }( i. J! k* L        6
: Q, C% }4 X, N        7, l, k1 P6 U  E9 Z2 `
        8/ K7 e& s, x2 r3 ^
        9
4 f1 `. u& b, h</code></pre>
2 V& b$ i2 X, c' ?<h4 id="254-while">2.5.4 while</h4>+ k. v( x5 t7 ~8 p. h
<pre><code class="language-javascript">// while 循环) U2 B6 ?; t+ U5 I5 [: r; i
        while(循环条件){; b1 J5 }; [! A2 D% [! E
        循环体代码
! s. ^. J% W$ b! |# B! x$ I. b    }
  y7 ]6 e- |1 u! C
& H9 T- o  z. z# t5 q9 e&gt; var i = 07 j# y- O1 [4 X: K
&gt; while(i&lt;10){, O+ R2 r( y3 T6 G$ Q
    console.log(i). \, W# E! |4 |1 ~! G  C
    i++, n, k1 z! r* d9 d
}. L% h% e! |; ~
0
" d) l  o7 y$ p' V5 A 1
7 M6 E- R( X) K# J5 j( l6 W 2
: W8 h7 h6 _& Q: H" N+ A 3
5 f+ x# h  Y4 M* A7 p& i 4
4 T" ~  G$ o1 q0 P 56 n6 t/ i0 j, d7 O) Z* l
6
7 h$ d; K- L% v# s; h) c) u4 a 7
. r$ L8 S. T- p 83 |  [; x( n5 z& H
95 r! v$ S. I$ d8 s3 J/ T
</code></pre># r5 N+ ?& Y/ e
<h4 id="255-break和continue">2.5.5 break和continue</h4>
: q( I+ T! W- t% j<pre><code class="language-javascript">// break
8 k0 J+ f' l- M: e8 X0 ~+ h8 c& Qfor (var i = 0; i&lt;10; i++){
7 d$ z2 q" p5 G0 o* _# W  V    if (i == 5){break}
7 Z0 d" ~4 B# t/ `) {$ A    console.log(i). ^; {1 Q* B  T- B( F* d3 w
}
, Q( w* `4 ], O! a7 s& w 0
$ |' M. W% I+ J& _- ~: M 1
  h; q4 [1 v1 R% S$ g 2
% O( Y1 V- Z, B2 ]8 \ 3
" {5 E" ]. ^) h- {8 y$ C2 U 4. z: Y/ t; _7 n3 e& `
// continue
1 [) ^" P" _7 B5 u- Z7 \, n! afor (var i = 0; i&lt;10; i++){
3 U% f! ^! C: [0 f) Y    if (i == 5){continue}- ?* H& G( T# {5 c- n% _( O* V
    console.log(i)6 I" b5 H0 @9 @% u' a! g% `* w
}7 W8 r( r! r( }; i. d) z& F5 a
0
! y' f  a  S. `* K 1! r. X- Y% E) L9 q' J* }
2/ x' n/ I. d. w) ?' b
3
8 x) C1 S/ V! q( M" T- y 4
- T, Y' ^( i  Z' g* P2 T% Z 6
+ t. i: o$ r! V' S( u' H% Z 7) t% V% j+ S- e, P/ v3 f, z
8
9 x# @; O# ?/ J$ i- L  G 9
5 b3 u7 z* t' M  O- f  f- I! I( q, A8 ~0 C- @
</code></pre>
% w7 S. S- V2 e( D" T<h3 id="26-三元运算">2.6 三元运算</h3>
' b  g" i5 s+ a+ `1 U<pre><code class="language-javascript">&gt; a
- [; \0 s0 o1 ?68 P9 b  [0 i0 J" V6 G: Y7 E- M
&gt; b1 w3 V( q% |. C  v
3
2 @6 Q; L+ z" v/ B; `! j' J7 c. w
//条件成立c为a的值,不成立c为b的值' @5 e, w7 f6 O  S/ v6 L/ Z
&gt; var c = a &gt; b ? a : b2 l. k8 n/ b. s, _( P5 F
&gt; c
& Q" B6 l: C( g7 Y) H6
3 D1 z, `8 r9 j7 {' |' u' e) l* y( O0 t
// 三元运算可以嵌套% I7 }  o& @& B; i! k- b5 x+ p/ B
</code></pre>: P/ H: }" b& \: G+ U0 o3 C
<h3 id="27-函数">2.7 函数</h3>
& B* T0 [4 L& ~/ @1 J<pre><code class="language-javascript">1. 普通函数# X( o0 h" b: s! N, ?) w
&gt; function foo1(){
' d) d' h1 y- n! A- w6 W5 k    console.log("Hi")$ f) w: V! s0 a: O7 `
}/ d+ x; h- I+ ~4 E: J) p
3 r3 |" B% N. ^7 Q
&gt; foo1()
6 h4 ^: c- H- E( ^. j. @9 _' \, w0 a        Hi4 S) h1 W) B# y4 L! b
2. 带参数函数
( B3 [3 A0 O% r3 B& w&gt; function foo1(name){* r5 [. z( \$ D6 Q/ h& a8 M
console.log("Hi",name)' I7 v& A/ m; Y, d: ^" [5 L9 V
}
0 v' H1 e* b% O  P+ Z% }# R. k' p/ O/ O+ j6 a0 A6 ^# s
&gt; foo1("Hans")% }1 T; n+ j$ g+ p. w6 v
Hi Hans4 N. B1 G: t+ P7 K/ |

- s: L. G' v& A&gt; var name = "Hello"
7 s6 Z* s+ D" w/ H* Y  y/ K. O&gt; foo1(name)4 J* K# @! `! C
Hi Hello
6 u. r& N5 V& ]' I# P7 S! \- b2 _# m* S/ S5 a
3. 带返回值函数& {' |' R7 m+ \9 S- A
&gt; function foo1(a,b){& d, M- [5 }! x3 d' |# X
        return a + b   
' a5 Z, J, h, V; z}' R0 h  N, ]0 S1 M7 B2 x+ p+ C
&gt; foo1(1,2)
1 _7 M  G% C# R) X- T3, R( k; ]/ I0 X) R) h0 \+ B
&gt; var a = foo1(10,20)  //接受函数返回值
% d' M2 k2 ^0 B& _&gt; a% F( {1 F( e2 P  Q; ^
30
' e- j2 C! ]& G. p6 w7 R9 ^# E, u" b1 v
4. 匿名函数: o  M, x" n5 B0 V: R+ ^
&gt; var sum = function(a, b){# X) e; W! |+ Z* N! O$ X) W) S
  return a + b;& a# F0 O4 @. O& l. n3 `
}- h) x. g( B3 b! p# M9 f
&gt; sum(1,2)" }$ `5 `8 c! k/ i/ e8 ~+ k5 Q
3
; h0 ?! x) @- y, S  ?" P# n, Z# ?8 B" E* L
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱! a7 s4 e3 R' x* {! a4 s
&gt; (function(a, b){
5 Q) s* o. O3 i9 c8 e  return a + b
7 J" l7 P- o% y) x# \7 J. S/ \, ]})(10, 20)7 ?/ l# P+ w- i/ L
30) i6 Y% R9 T* @; r# u

1 Y+ v- Q0 s# c; i5. 闭包函数
1 Y/ h; h% u" ]; S" o// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数/ H; |9 W6 a" `  E
var city = "BJ"2 f5 U) @: l+ R/ L' J6 `# U4 t
function f(){
) {1 g0 V9 T3 b2 e    var city = "SH"& J( @! j$ o! j3 i7 B' ]0 E" `3 v$ s
    function inner(){$ b% J0 X- }' u0 o/ y+ c
        console.log(city); p* o0 `/ t9 i$ x- h7 _0 r
    }
; [9 I  C2 _- ~6 U    return inner3 Y. v6 H; d( [! \2 B3 d2 X
}
9 ~5 t* l3 V2 m8 \; y  O# mvar ret = f()
, W9 p+ B1 U" N9 X- r8 g. aret()0 Y. J- `9 V. n4 M. i# h% W
执行结果:
) a3 O3 [: i! e9 X' O  E4 ySH
# {- c" y' P4 g$ B) Y& ^. h: r! \% |+ w# Y2 R( x6 V
</code></pre>( \1 a8 F1 r( `) H( m, e) L
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% \6 b( V; E6 X0 D/ {/ e<pre><code class="language-javascript">var f = v =&gt; v;
( ^9 a% q. v, H6 E: l- A// 等同于2 @  d6 H* o# z
var f = function(v){* y) D' g0 o. F  r1 `. k+ ?
  return v;/ ?; r4 K" q3 `6 {) R* E
}
; S3 h& w7 @, f% x# ]5 t. B) L</code></pre>
# B- M, }+ o4 r2 H& ~3 v3 Q<p><code>arguments</code>参数 可以获取传入的所有数据</p>
/ ]/ X* f' D9 E9 k! w9 |0 q<pre><code class="language-javascript">function foo1(a,b){4 E% A# n; I& E& }6 x; Y
    console.log(arguments.length)  //参数的个数 % m  ?+ Z- `* j2 p/ ]
    console.log(arguments[0]) // 第一个参数的值
) x8 F' O% O: W/ n* l+ W( V; ~: p9 \: h        return a + b   ; c' `! \: S( V! A1 M# s) R2 y' u
}: g6 Q, x5 t$ F: T/ \) b9 `
foo1(10,20)
% t8 P, D4 j2 Q结果:) C5 f& W& D# }7 ~$ c# q5 d
2          //参数的个数 - e6 e% Y. Q# y; q6 Q
10        // 第一个参数的值
7 z, |. l5 j6 v30        // 返回相加的结果
7 o/ U* Z4 ?7 z7 |# D</code></pre>
0 B2 A# y8 W# Z' ?& i3 }<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>( E3 I+ @2 l# d) \9 D7 e& e
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>1 l; C" o" V2 A5 q! Z
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
. i1 R' \/ ^5 K( f4 j<h4 id="281-date对象">2.8.1 Date对象</h4>
6 ~# N. {" W4 O; \9 p0 H<pre><code class="language-javascript">&gt; var data_test = new Date(). Y; T. }+ @6 D9 J& H$ }
&gt; data_test+ d0 \! P& O) K  s  r: P' [6 T
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)% q3 v; |. k0 S) g
&gt; data_test.toLocaleString(): s, p' U8 ~3 ~9 J0 m( c' _7 ^
'2022/2/11 下午9:44:43'
& Y2 W9 W1 A4 E3 B6 R
# q4 z  a, q) Q&gt; data_test.toLocaleDateString()( ~% t) Q7 x, I
'2022/2/11'3 j2 n8 m/ l8 u0 M- b
2 d9 `! N# K, w+ l( Y
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
- x. ~0 |' J. H0 R/ x9 S&gt; data_test2.toLocaleString()
* U/ O# R/ l1 S+ s( H7 P'2022/2/11 上午9:44:43'& s" H: F/ v( f/ Y# W! k

( d' Y, s  i( \+ H// 获取当前几号
1 u9 L! p( c1 `+ u* M# R* P; z&gt; data_test.getDate()
3 ?4 X- u+ C: f$ J3 C114 y% f8 Z' U3 u7 @: v4 |
// 获取星期几,数字表示
3 Y3 q: x' B5 x0 o&gt; data_test.getDay()  9 b& i. S+ o* t) V( i
5
7 l: x. @. K1 ^( ?. ?1 w, W// 获取月份(0-11)
4 u0 o: i: a# Z" S% [, O/ A&gt; data_test.getMonth()& D4 A% j- P8 @2 m4 p) |2 b$ Q1 ~
1
2 x; Q6 W2 U3 P// 获取完整年份* f- @3 o( P" k: p0 a
&gt; data_test.getFullYear()
. ~- E' V5 T1 {+ [( k2022
0 @( z  g  A; a5 z; P8 A; L// 获取时
2 P. l4 Y8 e7 X6 P8 z&gt; data_test.getHours()) Q5 a9 X8 R6 ^8 P
216 [! J% b0 t. s* Q+ p7 D1 ^
// 获取分
2 ]2 o/ s% ?( ]6 u  T&gt; data_test.getMinutes()
# o3 L" i7 b' N) c; B3 H, G% ?44' u" S* |" _+ C1 o8 C
// 获取秒! I, T. {/ z; Z9 N0 h. ?
&gt; data_test.getSeconds()
: `3 [& S' q* G  F/ C434 j, I1 k% l% b0 r
// 获取毫秒
4 h- S: j& D7 e& K  ]&gt; data_test.getMilliseconds(). c. R# ?  r7 T2 K- F
290
5 B5 E3 s, X5 Q0 ?! X// 获取时间戳; F6 \- U7 Z4 I( s4 F3 R
&gt; data_test.getTime()7 T# g8 c  t+ a: g$ p* N  I: x
1644587083290
( R  B0 g% M0 W# r6 V& e7 _) g</code></pre>
% R2 N0 N. D) x% D<h4 id="282-json对象">2.8.2 Json对象</h4>6 k. e6 a( n2 e9 C; l$ D
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串# I0 A9 s, d8 O: e1 E* ]2 n
JSON.parse()  // 反序列化,把JSON字符串转换成对象
: \# W3 M; U/ @0 f% u7 w+ b& M; v$ j( Q' q# F0 @3 h
// 序列化2 }! b, h& j3 `: I' p5 [* J  x
&gt; var jstojson = JSON.stringify(person) / d) D( U) y/ {
&gt; jstojson  * _4 J: y) Y5 p+ a1 o# E. j" ^
'{"Name":"Hans","Age":18}'
& Q$ _6 `' X8 Z, O+ r2 @& K- X  R
) G2 B6 `. ?( Q8 V3 v1 V* v. L// 反序列化
" c9 @/ e3 T) \/ q$ X3 I&gt; var x = JSON.parse(jstojson)4 p5 w$ w6 T" R
&gt; x
8 w! T# b7 |" v6 H{Name: 'Hans', Age: 18}
; g# a6 S/ L; Y; Z: ]7 h&gt; x.Age0 \! K- f8 @9 n, g
18
6 [4 `* j0 G$ F( A</code></pre># {5 g! v. x# F( i: G: F
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
' P1 v6 N% O2 S- b4 Y7 g4 H" P6 G<p>正则</p>- B5 `$ L% T7 y' ]6 y/ H
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");; V; r& \' l* R7 w! U
&gt; reg1& j! l2 g3 m9 o* ?! ?
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
! e. N  r3 {2 `" c( z&gt; reg1.test("Hans666")  |- O; t' L) j7 P5 Q' o, v
true
$ f, M, @" m* G  h- }) F( s
$ S, f$ p6 _2 u! R&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
  Q9 g# ^; P0 Y) q&gt; reg24 e5 v" l! L" f. u# K
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
  x$ [3 R2 Y; |7 ^$ B&gt; reg2.test('Hasdfa')7 R! R  o& k8 u, {, \( y# A- L
true$ {( g$ Z0 P8 h0 ]; p% x

, \* g, Y4 N, J2 @全局匹配:
. D8 ~6 ^" Q0 c" [( h2 Q&gt; name
# G' C4 g$ }" j+ g8 N'Hello'
: z, W8 Q$ Q4 |9 A& }&gt; name.match(/l/)
3 K; t: m( ~' J['l', index: 2, input: 'Hello', groups: undefined]
4 x3 h# W. g7 G7 l* L9 a# B* [9 v9 _9 y7 Y) o3 k
&gt; name.match(/l/g)
9 b8 Q" _$ z+ X7 E, d(2)&nbsp;['l', 'l']
7 A! y4 o8 @: ?$ b4 \; E" K4 e// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
. z9 [5 s& \  J2 _5 G
1 S7 d. F7 t* J+ ?全局匹配注意事项:$ a) f( Z$ E& G7 U$ a% y  q* g3 @2 w
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
4 o; Z, x5 @6 \% [: j&gt; reg2.test('Hasdfa')! F5 I1 x( q2 Q7 X2 u
true
- I3 t; @" {4 K1 _3 P&gt;reg2.lastIndex;5 I* `- ?: \7 d# }
6
. j! U4 O2 V2 c  ?: |) |1 S&gt; reg2.test('Hasdfa'), z. }7 A. s" ]! `* k
false
- r& w, l9 c2 i% e  d) Z7 H; F% W&gt; reg2.lastIndex;& a; q# ]* V; w7 M6 {+ L6 B
0% u9 h. O5 ?+ t+ G1 M
&gt; reg2.test('Hasdfa')
  r; l3 P! ]0 c9 e; \true
: [! `  I$ `1 _" S+ f+ G! p4 R&gt; reg2.lastIndex;
# N; i& h) Y' v% v8 P5 P; s6' F0 s+ L/ k6 |$ h  f
&gt; reg2.test('Hasdfa')' g1 x) {5 i% w) s- @' ]7 k
false
% j9 t7 Y$ L3 Q7 s+ c&gt; reg2.lastIndex;( _) X3 i, k# [' D$ n
0- d2 E  d7 ?/ N' x2 ~) n3 @5 ?5 C4 f
// 全局匹配会有一个lastindex属性% K8 z; h* A  D; H2 ^( K9 B% O
&gt; reg2.test()
: x( R! H" T. a9 ofalse. e, Q% K, Y+ e# y  @( y. E
&gt; reg2.test()
7 v7 Q; e7 E; l) p# I( |" p6 btrue, j7 P. D+ c8 B. ~: k& m
// 校验时不传参数默认传的是undefined9 O! {2 o( @  v6 D# o0 C2 F
</code></pre>0 q5 I9 [7 I* v/ ~( ~9 y; T: V
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
9 ]: A  F1 r, W2 k5 H, A, Y<p>就相当于是<code>python</code>中的字典</p>: t( q: p( c. o9 c4 ~! T% R
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
1 b* O: ?, ~6 j3 h% x% |&gt; person
* ]! I+ n4 b! W1 a" d; T{Name: 'Hans', Age: 18}- w" R) S5 S' `4 z
&gt; person.Name, s- G1 }1 w/ H  L+ C9 ~% E
'Hans'* z; Q9 K- c* E3 n' {, P" s
&gt; person["Name"]
' g6 y, I! N! R  X- ['Hans'
" ?" ]# u5 z! p! m, ?, H: i% T  L/ U5 s  |# l" r
// 也可以使用new Object创建
2 S6 U! V$ |/ P' u7 I&gt; var person2 = new Object()
, b5 O. z! Z$ Q6 w. w) ]7 h5 ^&gt; person2.name = "Hello"
1 H7 p: z$ q1 c( [" H  ?& ['Hello') l5 |2 i. ]  B2 [0 i4 a
&gt; person2.age = 20' T$ h: H! s( N* B9 b
20
8 h4 y: C* l! a7 c: [  `</code></pre>
% Q$ g9 T; x# ]2 T' W<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
5 m, t2 h+ W: G- @/ m' r<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
! h8 a5 c3 X5 `  s4 e# o<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
& M: o/ k* X7 o1 J<h3 id="31-window-对象">3.1 window 对象</h3>9 N- s/ |3 B# C, F
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
) f5 Q4 u- ~8 b( u2 j+ ]<pre><code class="language-python">//览器窗口的内部高度- z5 j8 C% I6 q& w
window.innerHeight % [* Y: f8 e8 P
706
# d2 s$ w& f* r- L//浏览器窗口的内部宽度
+ f! C2 p  J; C' q$ Fwindow.innerWidth
/ l: X- i& i; `: P1 w) g- O$ X1522
. l* N) G1 R% Z$ h2 V// 打开新窗口
& [- b; v# s9 L" Dwindow.open('https://www.baidu.com')* \& ^% o; v, {" l. Y' n
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 a" X6 G4 U/ Z! X$ \" {% }1 w// 关闭当前窗口
1 ]( I4 o+ J5 K9 Y: |) H  Hwindow.close()
. D0 x: D: e; E9 T& g: O9 u7 [//  后退一页3 U5 _! X' e- s! }3 h
window.history.back()
, O. {& Z' v3 L5 c$ P* V+ `// 前进一页
, K' ^9 U5 Q# Mwindow.history.forward()
! X5 P& B7 q7 Z% K4 I/ \: X//Web浏览器全称
; D6 U( m5 E* u3 I0 b/ ^, }8 O7 Awindow.navigator.appName$ s$ n4 N6 [' L
'Netscape'
* g9 P7 [2 g- [+ a% }// Web浏览器厂商和版本的详细字符串
; x7 r! O) J5 E% Bwindow.navigator.appVersion$ Z& x$ G5 x8 \+ j( C5 J* A
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
! v6 Z( L9 i2 B  F; L# i- c$ U9 _% L// 客户端绝大部分信息- H- h1 L8 ?- e+ C/ H
window.navigator.userAgent, N4 m* u$ \* B
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'! W' q2 O+ K$ ~  j9 _9 S  b1 o
// 浏览器运行所在的操作系统* L. f7 ]) h( t( J# ^' s# S
window.navigator.platform
& s4 m6 @9 [$ z, `5 L  K# _'Win32'
- v0 ^( u: i/ ~, W8 }) P4 u! I+ U6 @8 |6 J5 [! y
//  获取URL9 ?" B& ?' R8 \0 P
window.location.href0 K  i% e; m' _! \
// 跳转到指定页面& w( ?4 ^/ S$ B7 L; f4 ?7 Y. ^
window.location.href='https://www.baidu.com') K& f! z6 z6 B; O
// 重新加载页面
1 H9 r" S" f: `9 jwindow.location.reload() 6 p: m% c! K0 G7 Y7 H
</code></pre>& K5 w8 W# ^+ ?7 B
<h3 id="32-弹出框">3.2 弹出框</h3>- J+ g# J- Q1 `; I7 H
<p>三种消息框:警告框、确认框、提示框。</p>
; u6 _% x0 K0 n; d<h4 id="321-警告框">3.2.1 警告框</h4>
7 P' E5 e6 z5 L3 i* a<pre><code class="language-javascript">alert("Hello")
5 ^% Y" T! m7 l. ~$ ^6 f</code></pre>
! X. v. @# K: {8 G5 b2 R4 ~2 \<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
4 Z, z0 F" ~$ ^) ]<h4 id="322-确认框">3.2.2 确认框</h4>
. z9 r5 f/ q; `+ V<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>. l6 b; G  `) O6 q% ?* o
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
6 \1 P5 ]- X2 F+ d  }4 b) `true
& _6 O; \7 U$ g" `& c&gt; confirm("你确定吗?")  // 点取消返回false
# A" w; l# i* v* x+ a; Pfalse7 O+ g3 Q3 ?! h& d0 {) }6 Y
</code></pre>
  c+ B( _' _  c<h4 id="323-提示框">3.2.3 提示框</h4>4 s$ @; h9 H% c
<p><code>prompt("请输入","提示")</code></p>) A! W7 H+ e& y& }- U9 [3 i
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
, c. ^. H. U: n( `! r" l: t8 U  X<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>+ Q3 p1 W% i/ c* V
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
1 `6 O% a; {6 F3 l& G2 N<h3 id="33-计时相关">3.3 计时相关</h3>
2 w& E; J8 k$ J6 D9 l<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>4 V( L, b4 Y) a* q4 D$ d9 B2 ^
<pre><code class="language-javascript">// 等于3秒钟弹窗. A) \' O- T' T1 a
setTimeout(function(){alert("Hello")}, 3000)2 Q/ S: u; ^9 M' ~1 \5 C% {% a

9 v( r" k9 t. F/ H0 Vvar t = setTimeout(function(){alert("Hello")}, 3000)
3 _' N1 o$ A+ ?3 f' z& H' O- }1 n  H1 w* a
// 取消setTimeout设置
2 I9 H+ Z7 F# BclearTimeout(t)& Z6 X, J& n  R5 Q
</code></pre>
, i$ k) t3 Q! a0 I0 o3 H<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>- c, n) t  A$ H' n
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
1 k$ t0 v& m$ I7 L4 A. y<pre><code class="language-javascript">每三秒弹出 "hello" :
1 }. `; y4 @+ {7 w" Z! T, u6 asetInterval(function(){alert("Hello")},3000);
( s4 R4 K% A! |/ V! u6 {( u</code></pre>" {3 v2 M0 O, g: a% o0 w6 Z1 N1 m- f9 ?
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>2 Q' ^0 y- W* M$ \2 Q- {
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);/ u) O9 D' v/ r) X' \+ C4 t
//取消:3 K1 o2 `; Q7 h9 \: y9 P/ x
clearInterval(t). P2 Z' J  F+ I- R: f- K% l
</code></pre>& C4 O( I% m) Z; m  }, q! ]/ {

0 W8 b; V4 d4 s, w  W, v. {
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-5-1 16:04 , Processed in 0.069378 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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