飞雪团队

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

前端之JavaScript

[复制链接]

8062

主题

8150

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26516
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
0 |; B  t; ~! I, Q+ @
<h1 id="前端之javascript">前端之JavaScript</h1>- q1 P3 U( ]! _6 _
<p></p><p></p>' m. g- S: u. |& P( c
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>9 W7 K8 Y% Z6 |$ g6 K! G6 ^& j- m
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>- k* m; s' k$ q4 w; D
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
6 R/ S. a+ v: s, N它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>2 s' H3 {1 V" V0 y% Y
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>& Z. B9 e, B/ Y, L1 g0 J( {
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
& a( b, O3 x' a4 V& a4 y" y5 z<h3 id="21-注释">2.1 注释</h3>
8 I7 B- k5 I' G  l' K<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
# l2 _# u; D- w. e<pre><code class="language-javascript">// 这是单行注释
3 U$ l- F, `  d8 r* l* k6 k' B+ f7 P2 R) P* m- A' b
/*
+ @* B, `. Z! Y2 d这是多行注释的第一行,
9 X& @' O9 a1 z( }这是第二行。
+ f6 p% `) U# D+ S; O7 V# [( A*/' J% I, G/ U' L9 o  z# W: R
</code></pre>
! M% }3 s# B3 C# N2 ]" G  y% Q<h3 id="22-变量和常量">2.2 变量和常量</h3>
# r9 Q% S$ {) D' P<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p># _% z2 H/ g7 C( v
<ul>! Z7 V7 J! [* u
<li>变量必须以字母开头</li>
0 o3 B+ r. v+ }0 Y4 B3 T# e# c<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
7 ]# b9 i7 }# r2 P, w8 g1 ^7 b6 N<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
* w7 n5 g5 f$ S% L</ul>
' l5 m* j5 B2 z& d4 r" O  z" _<p><code>var</code>定义的都为全局变量</p>
$ r& z& h4 h# _) D& ~<p><code>let</code>可以声明局部变量</p>9 I. ^) z8 ^: g- M4 X5 a+ f
<p><strong>声明变量:</strong></p>3 F  [- q1 V1 I2 c# P) B
<pre><code class="language-javascript">// 定义单个变量- \4 q3 g5 d/ J& [( A
&gt; var name
8 l% K2 N* \; _, w* k8 Y, x3 M&gt; name = 'Hans'
6 t) Z6 l8 i: Y# H& [7 U//定义并赋值5 q& `: B* t& k) B, B( m; j5 b) c" O! T
&gt; var name = 'Hans'
3 @+ A9 Y  o/ J7 @& h: G: {' j( U&gt; name6 P! T* w6 m3 u; r/ r  Z$ w2 I
'Hans'& Z; d! V' h% W: E7 r6 y" b

; j! E/ t- ~, A! ?& Y// 定义多个变量
4 {/ m0 B  a( H, r- l+ _&gt; var name = "Hans", age = 18) z$ K0 }- y* C3 E! n6 S
&gt; name
0 U. P+ W0 q. `# Y! M6 |'Hans'
6 I! \! |) |; b0 r. J&gt; age2 g2 m$ ^) q/ w" @% G& e; U- I
18  e) `' c4 s) e: Y+ C. X3 J. A
* x- v  A  }. P: S/ f1 @* d
//多行使用反引号`` 类型python中的三引号
$ e5 C) J+ S1 x3 [&gt; var text = `A young idler,
( C/ d; K! C! X! w& `. K/ V! }an old beggar`
1 F3 ^8 H# ~4 F; n6 [&gt; text  V$ L  l. H. ^% A; O. T. [! i2 _
'A young idler,\nan old beggar') I: V( d/ x0 Q
</code></pre>% ~/ T1 [( _  ^: t# d' [
<p><strong>声明常量:</strong></p>
& ?' e# g  y1 ?/ Z<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>( d) N: {, q9 Z4 F8 {
<pre><code class="language-javascript">&gt; const pi = 3.14& Q, W  K1 P5 R- z. J- A% I& s3 q
&gt; pi
$ l. \' M2 C% K# e5 D; g3.14
; @+ z. a0 y5 z/ M) ?&gt;  pi = 3.01
( B9 d4 w/ e6 }1 L3 xUncaught TypeError: Assignment to constant variable.
, b5 z& S& m" a4 y" t, Z5 `    at &lt;anonymous&gt;:1:41 t! Y# r) \; p; ~" F3 B/ s
5 o: R9 l( A. ]
</code></pre>
( G, n0 `% [) @3 Y7 A- b<h3 id="23-基本数据类型">2.3 基本数据类型</h3>! A6 A5 A) b* h3 R
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 d! Q7 b9 S0 @, F% f
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>$ f+ G8 x( h3 R; V. A9 k
<h4 id="231-number类型">2.3.1 Number类型</h4>
/ J+ W) r& M5 @<pre><code class="language-javascript">&gt; var a = 5. N6 g8 d7 j8 x( T* t" L
&gt; typeof a   //查看变量的类型    R+ @6 C( F5 ?
number4 p( L$ V: ]3 K" r  M' d

$ u' u% N2 H, W; h&gt; var b = 1.30 f0 U& T3 N, y# f) s: U/ R$ i
&gt; typeof b" h. n/ s7 P; G0 k( d
number
5 r6 c) H! a) S- j# L; q
8 ?, h% ?0 q" l! U* P// 不管整型还是浮点型打开出来的结果都是number类型
( p) S  t( W8 R* X4 D& R
& _; O7 @" j) A; |/*0 \1 C% d6 Q% k6 J- s; v
NaN:Not A Number
2 g- M0 h2 x2 iNaN属于数值类型 表示的意思是 不是一个数字
5 K4 @4 O5 |4 m; v*/" }# C$ O1 b6 G

% _; [/ ^" w3 u/ ~; X5 {parseInt('2345')  // 转整型9 S+ n4 j$ j7 s( a9 q/ S7 E# W
2345
( O1 C% S: H$ ]. E' C0 zparseInt('2345.5')
: Q1 m/ t, L1 o' l2345
9 S9 u7 v9 c* z( \parseFloat('2345.5') // 转浮点型
6 Y' }, U2 {2 ^" u' x* \2345.5
) C' @* R) Q. u1 @5 LparseFloat('ABC'), z' K3 [; h& V, V5 X
NaN8 N5 f; [8 d8 O, N
parseInt('abc')# N' L5 x/ Q" c2 J9 w
NaN$ Q9 \) f( c0 S* D: ?- H
</code></pre>
: ~' |: ^& l) J+ o; N/ v<h4 id="232-string类型">2.3.2 String类型</h4>
$ @3 t+ i/ a0 r0 i5 j! F6 J<pre><code class="language-javascript">&gt; var name = 'Hans'- G, d5 v" o/ S
&gt; typeof name8 _5 z3 @) r! r" O
'string'
' A3 T% n* `+ r/ J. H( K7 b0 m) b3 a5 ^& V
//常用方法
" n- ~9 r1 s. h2 Z// 变量值长度9 L9 z* E- e  R1 i5 z
&gt; name.length7 ^' J& \" q' x
4' o8 X- R" a# |4 E/ ?
// trim() 移除空白- K5 u1 s* C" M3 }+ D
&gt; var a = '    ABC    '
0 \7 ?3 {+ L1 X! e0 ?0 y! ^' p&gt; a4 Y7 z  m% y4 c1 i
'    ABC    '7 n1 B8 d4 v! }) j6 ^
&gt; a.trim()3 |' n* I% c+ [( Z
'ABC'
( p( N+ P* F  J: R% L" q$ q//移除左边的空白
+ r: P9 [1 G: i&gt; a.trimLeft()
7 [' m6 \: b' ]. G( r'ABC    '# `' o, ?* _3 F/ v, r
//移除右边的空白. q7 @! i1 }$ [  }3 v6 h# X( z
&gt; a.trimRight()% C% ~' G2 F- b( j
'    ABC'7 w. @/ m/ N% B& \

$ w8 M& v' Q8 O/ h  h/ v0 k//返回第n个字符,从0开始7 F  S8 M, c. D5 T
&gt; name/ n2 @7 N# {% j
'Hans'
+ ]) y0 H) u7 w&gt; name.charAt(3)# o- W$ ]- X7 T) e3 _) T8 ~" H5 v
's'; _' f! k# {5 y7 z/ R
&gt; name.charAt()' |$ V: U0 r! {" y/ F  b
'H'
: R/ L& o. b. Q# T5 `" m" v8 o&gt; name.charAt(1)! T+ j& s4 a+ M& f4 k( Q5 F9 W
'a'0 M/ i- R' P! V
; |2 @2 K2 r5 u% s, t9 \
// 在javascript中推荐使用加号(+)拼接
, Q# `2 o1 l  m! `&gt; name: p% b2 J9 \, X% E' E* h
'Hans'
& y2 M+ y/ G- C* d/ F7 m9 u&gt; a
1 n% N& {& C/ x9 }, s'    ABC    '+ c6 q2 R) a" q* w# o! J: a1 b& v3 \
&gt; name + a" p) N7 ^/ o: H9 F
'Hans    ABC    '& e( a+ Y" a; i
// 使用concat拼接
; q9 @9 y# Q7 l" a! O: ^&gt; name.concat(a)
# J6 a( m) Q6 X. q2 i'Hans    ABC    '$ K7 ~6 q) }5 [! K* r
7 B  F2 y+ L3 u' H# }% R
//indexOf(substring, start)子序列位置& [- l1 g9 R+ z: I% `

" `4 k! L: I+ b% @: W&gt; text
/ m: r! f6 r2 P3 r  a- K2 B'A young idler,\nan old beggar', Y, b, H7 @9 y+ v" j$ ~/ P2 U
&gt; text.indexOf('young',0)$ C/ p, W3 z8 n
2
5 ?5 F; t3 ~7 B: ]. [' `1 h& o( h5 ^) p' |0 e
//.substring(from, to)        根据索引获取子序列
2 Y! h2 d8 R9 H8 W- {% F! W( y& w& _' @&gt; text.substring(0,)
- `# k" C/ K+ b( J'A young idler,\nan old beggar'# p) \5 E2 h& ], n& q! e
&gt; text.substring(0,10)
$ E1 x, ]" u1 H'A young id'& ?+ D8 Z3 y. `8 h

) `: j% D! c; g// .slice(start, end)        切片, 从0开始顾头不顾尾4 l. |& d7 R1 m& i+ ~3 ^5 B
&gt; name.slice(0,3)% U: v6 Y1 G6 O
'Han'2 A+ G# H8 k  z6 W1 j

! F; E, f4 _$ G4 F- c: |- y7 W// 转小写
5 B4 k# e7 O) Y  H5 c- {&gt; name
4 H5 v% b- d% O( G7 v'Hans'5 y6 h" A* _' z) t0 ^! i5 n4 y
&gt; name.toLowerCase()
2 y$ h$ q& c3 S- @'hans'7 V7 ^" d; L4 U
// 转大写1 I0 R6 m& S/ a( L8 v8 M8 @& C
&gt; name.toUpperCase()& d, G$ \* |" |4 a$ b& `0 N
'HANS'5 z) b6 w% Q7 F2 K; o& Y% {
( A$ O- J; O" A' F
// 分隔
3 |0 P% u- c: o* X. X" s. \&gt; name
) S+ p6 w8 N5 l1 ^'Hans'
1 |7 W5 a2 N  X- V4 @) b9 R&gt; name.split('a')! o/ k0 Q7 G: q3 Z
(2)&nbsp;['H', 'ns']
" |! O- j4 g( d% Z- u* g% D</code></pre>
. \5 `/ N* u0 }<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>( d" u8 {$ r  B8 _7 M9 r. G
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>8 ~* b' R- M, n- G
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
" ^% z! u$ O( j* x<p><strong>null和undefined</strong></p>
( }+ L5 G" Z# F0 `& `1 C0 y<ul>
9 J* _4 X. w3 m& O+ B<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>: |' W3 `, \/ n# O. R
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>0 I* H8 K' Z& L9 H4 M' a
</ul>
9 X& e, i5 m: j9 I$ ~7 o<h4 id="234-array数组">2.3.4 Array数组</h4>  I# B7 j5 ?0 G2 ]1 `+ c6 t- F
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>' I% a4 p% W1 \- ?; J0 l
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
4 J0 X8 f6 b5 Y. e% N&gt; array15 m  }5 }1 S" Q; i4 c) W
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# |- M; c  {; |  L3 \
&gt; console.log(array1[2])  //console.log打印类似python中的print  Z$ |1 b, `8 b  N! {4 N  N
3
( h2 w% E" x, Y9 `8 S// length元素个数
- G3 P2 ]7 H" @6 c&gt; array1.length
' p/ X' Z: X( m/ Z7 h6 W6* i" I& }2 }2 J$ d9 i
// 在尾部增加元素,类型append# i8 q2 @" I; }  X/ a
&gt; array1.push('D')
; @* ?+ ]4 `6 b5 n5 P/ \7( \& V$ |# u8 f7 X/ x
&gt; array1; d1 T$ H, H, v) {2 L+ D
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
/ t' h) q5 u: w" x1 L5 w3 A// 在头部增加元素( l! n/ B. C$ J- d9 g, D3 I
&gt; array1.unshift(0)
3 V$ k/ \6 d( y. o  Y+ T3 V8% ]2 t; l7 w$ x" Q  V# y* Z. d
&gt; array1
' j! D( g& c  K- G$ {# Z(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']- \. Q% h- X# }/ L2 \. P5 a  t
% T* s7 Y! r. X0 y7 t
//取最后一个元素, |6 O; t5 O* p' Y) q
&gt; array1.pop(): y1 T* Y9 J0 l/ H9 h1 x2 ]
'D'' P( v- S7 A# s! r6 ]6 ?: y
&gt; array1
2 \" p* R2 T7 A1 [(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
. j9 r+ Z' F9 p& G//取头部元素
% v& C7 d  X; ~6 l. j$ a6 t+ c&gt; array1.shift()3 _( G+ U1 N2 n6 R% m
07 F" p  S3 J- K5 ?: c" B- J" m
&gt; array1
( {  |' X, i% V/ e# {* G(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 @" K$ @8 ]3 V" L6 L0 X) L4 |
% _* d$ h7 n; R, G& q
//切片, 从0开始顾头不顾尾. z( l4 ]3 p5 n9 f$ U4 K
&gt; array1.slice(3,6)1 B5 E, X, \1 k2 `; y
(3)&nbsp;['a', 'b', 'c']
; j3 ~/ l) Z% T1 V- V: p9 ~! ~// 反转
8 V8 D# X& D: u- ^&gt; array1.reverse()1 ^  @2 E1 j) \7 V5 d
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
! Y, ~, [" J% L7 @( M- m" W// 将数组元素连接成字符串
0 |0 {6 B* d, e, J5 n&gt; array1.join() // 什么不都写默认使用逗号分隔  C0 A: r0 G4 i, V, |) J. ^
'c,b,a,3,2,1'4 T6 E5 P  d: v5 y' \
&gt; array1.join('')
+ c, T3 m  D" d'cba321'  G  k2 l/ A$ Q3 d4 N
&gt; array1.join('|')
8 @( h# V) R& n: M/ C'c|b|a|3|2|1'
3 I; t3 S- S* U
8 d5 w8 j4 @9 V3 u1 X+ h/ Q// 连接数组0 M  ~( F: j8 w( l0 w
&gt; var array2 = ['A','B','C']
2 \+ J* I( ~/ C$ _; X3 a2 j! |&gt; array1.concat(array2): w8 ?: U7 u& i! T, H" U8 f
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
) R& Z9 l4 K! U- ]2 V9 q0 L" P8 w5 r& S" K
// 排序
( l7 w* y; H: G# E&gt; array1.sort()2 b3 }# Q" `8 z( H& ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']1 v9 L- [/ q3 o5 z7 D; b+ L1 r

& J' @* W9 v# g" X, o. R( C// 删除元素,并可以向数据组中添加新元素(可选)/ Y+ z3 P, V; T3 _# j6 D. \
&gt; array1.splice(3,3)  // 删除元素! x# h# O* F2 M' ]: J+ D7 {+ J
(3)&nbsp;['a', 'b', 'c']9 Y8 _# D! Z- d: R4 }  S8 b! s' H
&gt; array1+ b4 e, @! K: M3 _! u
(3)&nbsp;[1, 2, 3]( T, j) o4 p# \5 I$ a: G; w! \$ a3 |: m
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素/ r) Q9 g- e  v
[]$ G9 z+ d$ @0 l- `# b, V) n
&gt; array1
& W% _" O) |" U" D" E3 t7 c6 W(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
0 a. T& R9 ]- x: o0 o8 L6 X# D; j& o8 Q' [" b* o1 k! w8 u7 Y6 O
/*1 i: @* B3 y. M0 T3 z5 i% S
splice(index,howmany,item1,.....,itemX)
+ e# I. C" \6 o( y8 x9 J" Mindex:必需,必须是数字。规定从何处添加/删除元素。
2 O! b7 C1 W9 Q; p, s' z6 k( `# Yhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。& Y4 _- C" L' ]" Z* A
item1, ..., itemX        可选。要添加到数组的新元素+ Z* i8 W( \# E! {, x$ _
*/' _4 z( R  x' z2 z; V2 k+ A
4 c% a  s/ a0 ~+ j1 |" p
// forEach()        将数组的每个元素传递给回调函数
$ K- k( z" N+ ^  W; r9 G&gt; array1.forEach(function test(n){console.log(n)})4 |& J; y/ \8 |; k4 z+ v- W
1) l) b9 p- E! w7 x- \
22 l- S/ H% C2 \# E  |+ ?2 F
3
4 {4 Y. b! M% p" F8 y$ U A
3 v* T5 P# b1 l4 [) C* M B$ D) `7 I5 M$ z5 z2 k: }) c
C3 ^' v0 K6 w: ^7 Z! W7 U  O/ I! R
// 返回一个数组元素调用函数处理后的值的新数组
6 e9 H1 m# i8 n5 W7 W0 p&gt; array1.map(function(value){return value +1})( F$ c1 W' l7 U! g
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
; n5 A/ }4 }2 `& [. x; l0 t6 N</code></pre>& ^6 C+ L. O) u) \' M* {: B0 }! g
<h3 id="24-运算符">2.4 运算符</h3>
+ O$ F, K8 \4 ^- _4 `/ r<h4 id="241-数学运算符">2.4.1 数学运算符</h4>6 Y# i' m; u4 q
<p><code>+ - * / % ++ --</code></p>
. D% P" X' R! Y% i! d<pre><code class="language-javascript">&gt; var a = 6
! _1 L1 X! y6 m9 o' N( h- F&gt; var b = 3
! r+ G; s" O7 e, E% u$ Z0 Z+ s// 加! ?) V$ F0 h2 Y* q( u* y
&gt; a + b
. H6 Q- g; O( ], o# n94 ~0 \) v6 C: V, ~0 J1 [
// 减
7 e  ?0 A; w: j2 v8 U5 p3 P&gt; a - b0 z1 k, n8 W4 J! y% G: X. p9 k; ^6 H
3
  w( R% y7 X9 `8 W0 N* G" x// 乘
- b& ^4 P% P8 M) `  M" T/ Z# i&gt; a * b
7 b6 K5 S7 o3 L5 Y. |* M18
4 H) G  j/ x; b3 p" E// 除. C* n/ v$ A) C  c, O  S* T, U4 Y
&gt; a / b4 Z* {& R' F# U9 b- y' _
22 r% C8 A6 B# y# Y. w0 y( ~' [
// 取模(取余)
: u# y5 N% F- p4 x. P&gt; a % b6 O6 _* p' R: L# \
00 q8 a) {5 X7 t  r0 O7 Q2 q
// 自增1(先赋值再增1)
/ m3 a3 g- r, I# e4 {&gt; a+++ b4 w, k* l' v) z
6: _/ a; k# _4 @- g
&gt; a
( x7 F. ~3 ~! A8 q7' O' L( N* ?' x/ g& U5 l! q
// 自减1(先赋值再减1)
4 O6 D5 y- {  N/ p9 ~9 A&gt; a--1 w+ V: s) U7 Y1 ?
75 p" ~0 X# f% j& d, y& G( U6 g6 D% z3 d; g9 D
&gt; a
3 i: k  v6 J! B/ n6. R5 w# w  Y+ {2 |( d+ @
// 自增1(先增1再赋值)$ M/ d2 J1 t, s& W
&gt; ++a
  D/ r* a- q, ~) w7+ t% q! o, n$ _5 k$ a
// 自减1(先减1再赋值)% [" c; y: w' h1 c+ [0 @
&gt; --a
1 \) e. l3 Y9 l+ v6 l' E2 z$ e6
1 d9 z% B2 g& U; l7 f: `  d% M&gt; a
( A3 ^) y7 ~9 `! a6
3 h( Q% ?# G- R! F( p
3 H# \3 |8 [1 s- v$ R//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
- B3 u4 ~  O2 G4 P) x* y</code></pre>7 E0 {  p% w0 a. w  r
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
; R' M. J6 B( i& E# V8 X9 Y( [$ c<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
! P+ _8 I8 M0 ?  v0 C  z8 a<pre><code class="language-javascript">// 大于* J+ t4 e  ~0 B- }
&gt; a &gt; b  ^9 j' m& ~% K/ Q
true' r; K1 x* K* @
// 大于等于
1 P1 }' a/ s" N' ?: b( Q" G# q&gt; a &gt;= b+ ?# W# R* `% P- e# v
true! ^! W- D" f: s) @- u: a6 T, r
// 小于9 f* W' N- @- m. n; ?  o
&gt; a &lt; b9 i6 A* D  c; E4 {  n
false
+ d0 W" q& Z# |& c6 b. m// 小于等于
9 Y" L0 t) d' j3 P0 c( v/ G+ e&gt; a &lt;= b
2 V( E& ?5 p4 ~) T! afalse; r9 r2 U1 n) {
// 弱不等于) g8 H# t$ E) `4 ?1 Y! G8 h
&gt; a != b
3 y/ i- o/ r' A% X5 o+ Ptrue
, P3 l2 H: I3 T% F! d5 t0 a, r// 弱等于
% {0 H# x, }) G/ L&gt; 1 == '1': k+ A$ n% _' T: _* {
true0 v0 C6 x9 G# _" b7 _
// 强等于
5 W' [. ]1 d0 ^& }  k6 _7 O&gt; 1 === '1'4 C3 H, Z- }- h+ K+ L4 y3 O& V2 L
false
, f& u% a/ m5 |( c' g: i& J// 强不等于5 K  V7 Y  j1 n6 C6 N
&gt; 1 !== '1'' I$ h- g: ]/ {. ~: |
true
6 S7 P( _! Y2 {7 Y; @! @
  o. B, u  u% z' L. P+ Y/*9 T9 J2 y8 m4 |- F
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误4 l$ ~9 M. a8 _( W1 C- y) m
*/
- h' Y, K2 w2 M2 C% g</code></pre>
4 }: B+ \# t% N7 ?! M: V<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>3 X$ l0 T5 g+ t5 [
<p><code>&amp;&amp; || !</code></p>) }( q, P6 Z# J) p3 l4 J
<pre><code class="language-javascript">&amp;&amp; 与* ]. }" o5 v- k5 g( }* @
|| or : S; j( h: D/ ^& O) r6 G
! 非$ `9 r1 ~" `9 f
</code></pre>2 ~! I. [! Q4 E- f% d- E3 e
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
" N# F3 p9 [( [. q) r2 Q1 Z9 G<p><code>= += -= *= /=</code></p>. O; U9 n+ t3 [; i! _; F* }7 P$ @* z
<pre><code class="language-javascript">// 赋值
  @6 ^: b0 n7 y&gt; var x = 3
% R. `/ i; w2 ^% ~. ~% L// 加等于
4 V& d, d2 p8 E$ D/ ~( ?% ]&gt; x += 2- ]. _7 s' E/ {# T5 P1 u% u4 B, t
5( B  U- m; k( l' [& Q0 m" j
// 减等于5 K: b5 ]2 S; }( o' F& `# r) P' ]' K
&gt; x -= 1
9 C! b, t" s0 z5 H2 @# D4, E- \& W* ?. @$ z- M; S5 G, Z
// 乘等于: \/ V4 W& {) B* y* G+ q( \
&gt; x *= 22 _" N; U$ r7 U/ F; k2 H3 [  y
8
1 g& q7 p( t) y" V// 除等于
6 d+ }3 u# z  h&gt; x /= 24 B( r/ B3 x( T% m& _% }& u% d
4& z9 D( ~3 Z, t: f
</code></pre>4 X6 K" L2 ]. v0 U: N8 u5 b# y/ D
<h3 id="25-流程控制">2.5 流程控制</h3>" Q, G5 e; Z( J, v9 ?" V) a8 H
<h4 id="251-if">2.5.1 if</h4>
/ e9 E* \/ `* G/ X, ?<pre><code class="language-javascript">1, if(条件){条件成立执行代码}+ D* e% E4 }, b& C* X
' T+ x. t4 F3 E' R( m+ p: V
&gt; var x = 3
! N8 b9 X0 X# M) n; E  l&gt; if (x &gt; 2){console.log("OK")}" C) \- ~4 _) L" M
OK$ l. }6 V' j! N( c5 G
/ o$ U( D% {1 x) U
2, if(条件){条件成立执行代码} + m6 O3 v- G4 ]6 \: x# x. l/ E/ o
        else{条件不成立执行代码}
! Y0 `' s: @* T
" l# Z. B3 E( X: e- R% T4 n&gt; if (x &gt; 4){console.log("OK")}else{"NO"}! q, R6 K9 S: }
'NO'
- A" x+ s% f) d1 M
) _, ~4 m' {7 v8 W7 X) k" \3, if(条件1){条件1成立执行代码} 6 m4 ]$ a/ p9 ^8 a& m+ r
        else if(条件2){条件2成立执行代码}$ E) F& ]+ u+ w- U
    else{上面条件都不成立执行代码}* p& {( m" k  Y- e. K" H$ y5 p
1 i, ?- d/ q# l% f! H
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}/ v; ], `& l- S3 i) x" N" l# Y" C
Ha8 s2 _, }0 d; ^5 {9 T
</code></pre>6 Z0 ?1 C5 {3 g8 L# o7 ^! r8 K/ ^1 L
<h4 id="252-switch">2.5.2 switch</h4>
0 a1 O% l" ]2 E! F2 [2 r& E<pre><code class="language-javascript">var day = new Date().getDay();, E1 g+ B3 _( r$ L5 _9 z/ S3 K
switch (day) {( c+ ]9 c# H( J
  case 0:! l' b; [) S- \# z
  console.log("Sunday");
" w/ r( e- w7 b2 L  C  break;
0 O0 d& Z* J+ L) [8 V  case 1:7 }5 w3 q' R0 |# ?9 H( G
  console.log("Monday");2 k" S6 f3 u6 N3 x
  break;5 w/ @# ]& i2 e* a
default:7 E) |1 C, n3 O3 W
  console.log("不在范围")
: h1 ^! j  s: E( ?) G  T7 x}6 Z" }. @6 Z0 }1 e
不在范围
0 W* L% g4 G' X! M$ r4 G1 E</code></pre>
  Q5 t2 l% ^+ m" J1 |<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
4 O% l3 ?+ s# D6 Z) V<h4 id="253-for">2.5.3 for</h4>% V9 `1 Y0 f* D$ j8 O
<pre><code class="language-python">// for 循环
5 l  A* c# l7 g  N) X        for(起始值;循环条件;每次循环后执行的操作){; ~' r- `! O5 V$ J* e
        for循环体代码
% L5 B: J% G- G0 y. `. H    }% c$ O. t  V+ |. q: n+ X* J
$ E( N" |  x, y
for (var i = 0; i&lt;10; i++){
9 H$ d5 Z  O, ^/ P8 D    console.log(i)0 t- r( E: H& T0 W% {6 l) \
}
3 X3 ^) W8 D' C* J) \" b. p        06 H# F: s& F8 [0 S) g
        1
$ _" K6 c. ^  j$ C. i+ n4 g        25 ]4 V# n9 G6 z! f8 f8 j8 S# @
        3$ Y3 T& Z, J9 i- I+ u( j
        4
% ?5 O1 @2 ^2 [  t$ U! t$ L        5" x4 f9 \' a% s/ X, d
        6
1 u8 d8 x9 U% b2 U        7
' P  f7 |, n' A+ Q        8
; z. i6 j% C, e' a. W3 t( H        9
+ K; Z) _- [$ s, R) L</code></pre>$ S+ L( f0 o$ C) {% j( I
<h4 id="254-while">2.5.4 while</h4>0 c/ M! D4 c* r- \6 C) v9 R
<pre><code class="language-javascript">// while 循环, `' b# m; }7 v7 z* x# c
        while(循环条件){1 g' e( `7 W# Q  b7 d2 l
        循环体代码5 @& }% j. G- j
    }7 p, d9 T7 \/ K9 w/ v7 u" J

& R: T" M# E7 d0 \$ x* `( Q) @&gt; var i = 06 z" V& h/ M; v/ B: @
&gt; while(i&lt;10){5 N1 r3 \/ c9 N: Y" A+ |+ }
    console.log(i)
' k3 V+ u  v) |# z- E    i++& X9 f. p+ [1 k7 g+ B7 B3 ?6 j/ U
}3 n) B7 n6 J: z  v; C- e
0+ O8 T) K3 Z8 ~" t, o
18 n# f" k0 j# ~* l+ F
2# ?, M) g; P+ U/ w/ v
3
) J, U1 a+ K7 n$ _% W" r4 O 48 b' n& n6 g8 f. b" Q& r
58 v8 G8 p; f+ m4 J1 w! V
6
- a/ f) t$ p1 J2 o5 ?/ [ 77 ]/ o% U( X2 X
8
- u0 E- s6 e- F9 } 9" o' ~! c+ f5 M9 _: v
</code></pre># o7 O. g. Z+ d6 ^: K
<h4 id="255-break和continue">2.5.5 break和continue</h4>
' a: y! s$ K: D. j, O) a: s9 Z, t! H2 U<pre><code class="language-javascript">// break
: r  G" I4 T0 z, A/ B5 K$ Pfor (var i = 0; i&lt;10; i++){
/ ^8 E& m: U1 ~; w5 W7 Y, M    if (i == 5){break}- ~6 j7 ~7 m# P% b
    console.log(i)
3 S) I0 J/ @* w4 ], a7 }4 F- {}1 h$ |# ^9 R& q4 E; }
0( @" \  ^1 e' {" D9 @3 n# Q
1
2 M# g! Q" s+ c" I' S 21 U( g8 }7 A! t. Z6 x
3
3 N& d$ g# {8 B2 D5 z" V7 \) G" L 4
& }, v$ L$ }3 s6 h1 C  n// continue- X. g/ F+ M9 v& ~, v( [8 b
for (var i = 0; i&lt;10; i++){6 A) }" L6 [3 T- V! j6 Z
    if (i == 5){continue}4 Q8 X$ r1 Y! i: b" d  ~; c
    console.log(i)
+ ~, A4 o/ G6 e, A9 [8 E}
1 v  Y, n" C0 k6 r; z9 o 0
( I) W) W) |( a9 N& j$ { 16 b2 U3 u1 b2 H. x7 q
2
2 w9 O" B9 t0 E; \5 f0 i* L 3' S+ ?8 F) P" n- r. ^# n' t
4# q& Y1 a1 B. Z# |! \9 V  U
6( d$ R/ o& d7 h
7! `4 c% t" X5 X! ?, @: S
8- Y; ~4 `9 K% W  w& s9 J
9+ U3 v& s% k( R' \/ V) T+ l

  _$ u6 W$ c" g( o- [</code></pre>
1 [. E5 Q$ Q9 j6 c<h3 id="26-三元运算">2.6 三元运算</h3>
, W$ V( Y$ v( ?0 F8 ~3 c( \6 Z<pre><code class="language-javascript">&gt; a
; e- n4 j2 P% \1 q( [. R6
) a, z( B& }! V& ]  [&gt; b& c) J- H  X3 i1 t6 ?
31 s2 d! g( h( L1 H$ G  L/ ]+ f$ D

+ }) e4 p2 [) {/ \& C0 B. f//条件成立c为a的值,不成立c为b的值1 r# E. W2 n9 P
&gt; var c = a &gt; b ? a : b
9 c2 _8 p! v8 L! Y. J3 U3 P&gt; c+ E' S* r3 u9 F6 y9 _( X
6/ K8 U! ]; V3 x

0 Z- f6 y/ j" o- }* c, A' E% x3 u// 三元运算可以嵌套
6 R* |( S) {8 F8 I4 y</code></pre>
! e; u8 Q" v9 Z( R) |8 r<h3 id="27-函数">2.7 函数</h3>3 Z. F6 i6 S# x% `8 o# ^
<pre><code class="language-javascript">1. 普通函数
2 ~  e# o% Q6 u&gt; function foo1(){4 o- v( p. P, z( j# t
    console.log("Hi")
3 \' C9 ^( Q" h: P2 l# F: x}3 A! @" e6 h: L1 z

4 o  c# ]7 `- }* r1 a9 S* r: g&gt; foo1()
, |4 Z3 \7 j3 D! t; B+ o8 P5 I        Hi, O7 e8 [  C$ F$ d. }
2. 带参数函数
$ P1 G, B0 W: z) ~&gt; function foo1(name){
% Y+ m% n$ s7 j- ^0 lconsole.log("Hi",name)7 f' ^5 W% S  t* S% Q2 r
}
" M. v' O1 f0 }' U) C2 `8 l# s# Q
) E6 Z9 F  b( ]% z$ e! ]&gt; foo1("Hans")
) P& T2 p8 j! FHi Hans
' L& L1 X0 K, k; ]1 t  s) v8 y! P$ V3 q3 h1 ~. Z* J- c
&gt; var name = "Hello"
) H+ f) D; A5 Q3 U3 ]5 |* A&gt; foo1(name)
3 Y" g9 b1 r9 n6 `Hi Hello
6 J; o2 S& j8 y7 c# R. @% B2 g5 b% q; Y8 H4 O  e) C
3. 带返回值函数
4 B5 s* ]* O1 P: T9 H! v&gt; function foo1(a,b){  S; I: j$ O$ V1 U: D8 U
        return a + b   
& b' A3 x5 @+ p8 l0 q}1 ]: `# u: V6 r. k
&gt; foo1(1,2)5 Z3 D$ `- _: i) M: X" t) ]  Q7 R$ T
3
5 t! i3 ~- ]% S1 c&gt; var a = foo1(10,20)  //接受函数返回值/ \& R1 u. G7 d, ~) @  @. o  S
&gt; a
2 \5 l; N$ C7 M! c; b( O5 `) y30
! E- U3 D& M' A$ P2 A1 g0 `. m) Q5 K$ R
4. 匿名函数
* o) k" o6 _3 L0 z&gt; var sum = function(a, b){0 S; [4 b1 W8 M1 @$ G  N8 q3 _9 ]( ^
  return a + b;
0 _0 W  |2 r) |2 F}5 ]& ]7 @$ B) d) S
&gt; sum(1,2)
0 B$ @% |: Y# B$ c: Q) m% U3 z3; n5 ^8 `( w+ P* N( ^- R
9 j5 g7 n, H6 D1 Q$ }6 G
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱( ~: l) q$ X+ r2 I$ f- {
&gt; (function(a, b){
; O8 M1 C/ o, e$ f* @  y  return a + b
" g3 S0 C) {3 E. u! s6 H})(10, 20)
! |- h* o) Z( N- r. a, [30
2 j9 e: h3 b  Q) R$ r  d
! v" t9 D2 b: n% u5. 闭包函数
/ }/ B7 B1 g! X// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
% x7 ], X1 Q( C7 z5 q6 nvar city = "BJ"9 j: R" [6 T& q9 a
function f(){& J7 @- B$ P2 S. G, p5 p3 L/ p
    var city = "SH"
. n3 m6 ~3 L# u    function inner(){
: H$ f+ L9 g, Y        console.log(city)' M  D, r: _8 o0 r) L
    }# |( ~+ r2 W- h2 Y' V
    return inner; V0 A- W/ w! D4 u1 {
}
7 c: y- P" ^  E% S' y8 Svar ret = f()3 Z! p& [: I* Z3 g8 h
ret()  D1 X; `  t( C
执行结果:
( W( v2 r0 z3 ^& _SH
9 U3 a* U" h, q# |9 V) ]. e
% V& H. F/ Z5 r</code></pre>) O& s/ g) w+ q5 K& ~9 C; y% j3 m$ e' V
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
' j/ N) b" Q3 U) V<pre><code class="language-javascript">var f = v =&gt; v;
4 a4 A: |4 l: t# V3 C// 等同于2 P" _6 k3 f/ ]3 ]/ M1 i
var f = function(v){
. U6 l, a9 S" N, d. v9 B5 p- F  return v;
- O1 @' n& \" p7 @% v}
+ N& D* J# g( r( U</code></pre>
/ q( v# s/ U& T& Z: s! P<p><code>arguments</code>参数 可以获取传入的所有数据</p>
3 y0 Z* Q6 B3 C/ c& X& m<pre><code class="language-javascript">function foo1(a,b){
9 ~+ E6 C. C5 E! p# O8 T& g    console.log(arguments.length)  //参数的个数
' L( o/ B" @1 C2 V9 a4 e; |0 W    console.log(arguments[0]) // 第一个参数的值1 _8 L! F. w/ R2 w4 c! S, H5 r
        return a + b   
5 N+ ?8 S5 c- r3 b$ j}1 |, ~- B' M$ m* T& `$ @
foo1(10,20)
  j# v3 x. ~6 Z9 E! R( B/ Z结果:
, P, n& ^3 x- Z1 {3 w9 A7 s, }* s 2          //参数的个数 ( n  K4 N$ f1 r5 ~
10        // 第一个参数的值1 t: U+ {* c7 ?4 G3 t
30        // 返回相加的结果
7 Z; X3 ~- i  [  E7 s0 T</code></pre>
5 k; l/ {, b: u1 d% ~& m; {3 v<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
" y/ s0 j3 n8 ^+ I" Q<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>  j2 e% G8 f" h  ^( X' m
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>0 j4 R" E6 V. @
<h4 id="281-date对象">2.8.1 Date对象</h4>1 m/ C% ^& e$ E7 P# h
<pre><code class="language-javascript">&gt; var data_test = new Date()
5 m% q7 Q7 j# I&gt; data_test
+ R- u( {3 F7 q' p/ q$ g9 p1 H# rFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
" n! N: _  G# k&gt; data_test.toLocaleString()
5 h9 c8 t$ }* g/ W# @'2022/2/11 下午9:44:43'
1 N* E3 x3 E6 m, K2 ]* {  N) v) h) Z' v8 ]' Q& O
&gt; data_test.toLocaleDateString()8 z0 N3 [, f5 c4 A1 }7 R) T: C
'2022/2/11'" R) T- l* R0 j+ [; ~
4 M. A9 L7 m* m1 n1 i9 o
&gt; var data_test2  = new Date("2022/2/11 9:44:43")* j, @$ ?  I. \. f
&gt; data_test2.toLocaleString()
* B0 F. q- _. b5 Z- e5 C'2022/2/11 上午9:44:43'
7 U9 N6 `: [' ~5 O: M; q+ v' l6 l/ z# m1 ]. h" x& r* z
// 获取当前几号9 |% r9 v, c; G& r1 ~5 \! C* g
&gt; data_test.getDate()
3 `3 k) e7 Y% D11/ z: o0 B0 }/ _: ^( R( L/ u
// 获取星期几,数字表示
/ e1 R- ^: W2 V7 B5 Y  v&gt; data_test.getDay()  
6 ^" I9 i  S3 Q$ R9 R9 e5
7 h; i1 V) X. S( V" t" L// 获取月份(0-11)
% {, d0 f0 c% ^4 ^5 x/ z+ Y&gt; data_test.getMonth()
# ~+ @1 [! I1 M% ?& y. z) t11 @) y5 }+ w( M! `' s+ S
// 获取完整年份; G5 |% P+ q$ L4 i2 N
&gt; data_test.getFullYear()% j8 s0 S3 f& A' T* r$ g
2022' R9 h8 L  f) y* Z% s  P) e# u
// 获取时% w! V/ v" P6 y6 v* O
&gt; data_test.getHours(); P% f1 c1 Q5 P3 M" M+ b
21
. A" t8 ~# h* L- B. I0 u/ `* F4 Z// 获取分
5 U1 n) u8 z% n0 b- f2 N9 a  n&gt; data_test.getMinutes()4 {1 D6 Y& Y1 w6 y$ V* Z( j
44
+ m' d& Q/ ~/ W) x3 I3 _3 G7 z  _0 R" S// 获取秒
: B% z8 h* D& {9 t% [2 c&gt; data_test.getSeconds(): g8 s. O# O0 V( w1 N
43
; H( m$ y( g, |7 {6 A// 获取毫秒( q% y+ l9 |8 H# P: a: C6 D+ r9 q
&gt; data_test.getMilliseconds()3 b7 U0 i$ A7 w1 {
290! @/ b; }# q" k+ [5 ~
// 获取时间戳6 S' [( M6 w' y- f" ~: d
&gt; data_test.getTime(), v$ V9 g8 \% d8 A
1644587083290
# r, B. R$ Y% ?+ ^6 O* n" h! l, h</code></pre>
2 z8 F  |7 V; O<h4 id="282-json对象">2.8.2 Json对象</h4>
% u; Z$ z/ `& I7 j0 v1 F% R; o$ Y<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
. `1 I9 l) Y. s% n3 y! nJSON.parse()  // 反序列化,把JSON字符串转换成对象
6 J' Y: s4 W3 E! w1 j7 Q" i
2 f2 E6 v" ~. C6 }) c. |: Z& U// 序列化
7 C  R1 \& W: o- Q&gt; var jstojson = JSON.stringify(person)
/ x, ^1 j; W9 t: S2 z; S7 Q( W. D& B&gt; jstojson  4 L+ ?; D: K7 Z! ]  Q6 c
'{"Name":"Hans","Age":18}'( S7 b# Z& G; O  d9 w) k/ t
- U+ z( l! A9 y# I; ~3 H
// 反序列化( c# j, V& }& ~" @
&gt; var x = JSON.parse(jstojson)1 G8 |# ^2 C2 W; G" T0 Y' m
&gt; x
* g0 C5 S: i8 n{Name: 'Hans', Age: 18}) Z8 w; k* V3 P% h$ Z
&gt; x.Age
8 b. g* `- X: Z. K# X/ f5 F18! R+ R) c6 C7 O' e  S- L3 E
</code></pre>* V. [( b: x) G! j/ Y+ F/ I$ k2 `% S
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
% u  f, s- @: i3 r<p>正则</p>0 E. i) v9 V: a4 k  C7 p1 O! V
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");' W; a$ M; U0 I4 s) s, ?
&gt; reg1
8 ^" Y. C( h) l! T, P$ n( t/^[a-zA-Z][a-zA-Z0-9]{4,7}/
  X. x4 V8 ?0 [+ k&gt; reg1.test("Hans666")
8 h0 e" d8 Q0 w8 y. }true  W; g+ `+ a) Z% L" a' u) V. X
6 }" }8 D. B2 W3 O
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/- @" c& Q5 \" c, _  B7 ?+ b: \/ F( P
&gt; reg2
" {( u- @- [' P3 H/^[a-zA-Z][a-zA-Z0-9]{4,7}/1 d4 q# j) A5 b
&gt; reg2.test('Hasdfa')
; ]* d7 I8 j$ N6 a) G4 k  o) Xtrue
8 J" v; V! m/ L  ?% ~' h
" m" `+ B' w% X" R) e全局匹配:
* g+ E" |0 r" J; _3 ~. m/ F  r&gt; name* }0 b# A2 G3 r
'Hello'
' g" v1 {+ [* \0 M&gt; name.match(/l/)/ I: O9 y( |6 h5 m  T
['l', index: 2, input: 'Hello', groups: undefined]
0 P4 @& A2 `; t
# s: M& ]  E% r: j, B% I" D&gt; name.match(/l/g)5 j; U$ L1 n: q; Z; Z
(2)&nbsp;['l', 'l']
; K$ D! c! K& C+ F! I' Q- V// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配) R% H/ w# y0 v' V+ h( a/ G
  r" F) |" h8 v. c7 d1 D$ O
全局匹配注意事项:+ w8 F8 L" L& X; C  I8 A
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
) g: m; N$ p2 l' B8 t9 y% E. y) ~&gt; reg2.test('Hasdfa')1 \% ]7 c8 ]9 Y8 G
true
4 W. w% M. \$ Y& z& I&gt;reg2.lastIndex;2 o  b4 `! G. \7 [
6$ b* M4 f$ T! L1 W. o4 I, U
&gt; reg2.test('Hasdfa')
: x3 X# d* a/ L* @7 x- f  S+ Kfalse3 c- X. A' m/ `" [* S7 T
&gt; reg2.lastIndex;# J0 p4 b7 h% r: L
0
7 D7 p: X0 f! r" C: n/ v8 h3 Y&gt; reg2.test('Hasdfa')
4 C0 r! R/ z4 G; c7 T1 Itrue% ^: t. T8 n8 j9 g. b
&gt; reg2.lastIndex;
- d6 a* c, q0 T/ _% y60 X" c9 i& h5 X7 C
&gt; reg2.test('Hasdfa')3 ?' `% x: ^' g4 _" k! u
false
: y3 |# \' j% B9 r  E* b8 j&gt; reg2.lastIndex;
4 B+ y/ k9 a+ f' s8 A( M# [/ S0# ?2 m6 m) k8 Z' \5 d( ^: Z( d. `+ g
// 全局匹配会有一个lastindex属性3 {. t/ }' k/ Z3 o1 ^+ \0 F# c
&gt; reg2.test()9 l2 K7 }% M! }
false: g2 p/ P1 `) R% o3 v9 g" D! x
&gt; reg2.test()
& I" d6 o. }5 G: l$ D- \: C' J2 Qtrue/ u) ^! M* H4 G: E: K
// 校验时不传参数默认传的是undefined
& h' A. [% Q3 x  i) o; S</code></pre>  I) Q7 _$ K  `5 ]/ z) g
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>1 ^3 L4 X3 P% {
<p>就相当于是<code>python</code>中的字典</p>
  X8 M0 P, _- J6 T<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
  P, m: J. J) q+ V* B( b&gt; person) I# N3 J: ~' [/ r4 K* k" a: i
{Name: 'Hans', Age: 18}! b6 R# {2 S! o+ S+ i/ ~" b! e
&gt; person.Name
  u) ?9 n8 K0 ?, l4 W& O" W& E'Hans'
, O- e8 r% ^- }( G/ g7 N&gt; person["Name"]
# n9 U. O, Y' W. l' w: o# ?'Hans'/ u! Z$ F/ q' c4 q8 S/ z

; s' n7 j7 W( A4 \// 也可以使用new Object创建* w' i+ Z9 x. i+ w
&gt; var person2 = new Object()
& Y2 N8 {# g5 ~" j&gt; person2.name = "Hello"
/ g8 C2 C8 Q1 L  ~8 _' Y4 ['Hello'; b8 F& R) P5 ~3 v& B8 x5 B
&gt; person2.age = 202 N! y+ ~8 w6 y4 e( V5 B8 _9 K
20  ^9 I& W6 u; F$ s$ g
</code></pre>( T6 L. V9 a+ K9 H5 P- x7 {
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
8 j# v) Y+ w2 E9 e6 D<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
; W+ s* w. V  g+ Z) r<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>  h. n, o: W. u- N7 G! o7 D9 O9 y
<h3 id="31-window-对象">3.1 window 对象</h3>
) f7 }4 Q, I9 b4 ]( z8 m<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
' L) Z1 X% `; E8 a+ V+ Q2 A<pre><code class="language-python">//览器窗口的内部高度1 `0 O+ s9 B$ \5 D  m, i' ]
window.innerHeight
( M3 D8 {, a# ?' ?706
* [0 p( {  w4 I% N# F& s1 }9 k$ T& y//浏览器窗口的内部宽度
- F) T; Q; Y- f1 q& U' Y( [4 t. Owindow.innerWidth) m: z' S/ Z5 o' w; Q; d" d
1522" M6 L% _4 K& V
// 打开新窗口
7 P- l- [& @  ~, t  k; I% _2 Awindow.open('https://www.baidu.com')! X% T1 ^, k7 |9 E" G4 [0 L8 c
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
' x0 |; u! X! f* h0 B" n1 E) Z// 关闭当前窗口
) U4 U4 k2 K2 xwindow.close() $ j6 g2 K$ `: }
//  后退一页5 N* u/ R- O7 H
window.history.back()
6 W" R7 A% h1 x8 t% B, E& s// 前进一页+ t7 ?, R5 z4 G9 A8 m/ A( T2 C
window.history.forward() 5 a) R! {+ Q. u" g7 k
//Web浏览器全称
1 `7 I; I& O6 Qwindow.navigator.appName+ {! c7 l: N" u6 I
'Netscape'$ e  G0 E0 J6 v$ k& J# i: d2 i5 k% K' X6 y
// Web浏览器厂商和版本的详细字符串- {# [3 _+ w: r9 z
window.navigator.appVersion
1 T$ A4 H. `4 d5 M$ A- M$ Q'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'# x7 G4 n- a4 C
// 客户端绝大部分信息
: m$ c  G. Q$ a7 S# r& R, ^window.navigator.userAgent/ w: s, ^5 Z( Q
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
* J( z1 D6 t6 n( S0 @6 i// 浏览器运行所在的操作系统8 q2 F  \7 m" u/ z) G9 t
window.navigator.platform* ]' \  k9 J9 }  |# H: a/ m. G
'Win32'
& T+ k, U7 _# u+ |/ e- z" l+ l; h3 P, Z
//  获取URL
+ g* m& d9 ~! k& C) uwindow.location.href
  @# N- n3 S- W$ x% i// 跳转到指定页面
7 t- b; M  e9 W( F8 S- w( @: fwindow.location.href='https://www.baidu.com'
/ @  ^' v" p# G6 \3 [! ^// 重新加载页面4 e6 G* E- Q) P) m" h
window.location.reload() # n6 I$ f; j; i3 B$ r6 U  l) x
</code></pre>
# {' m& J" D$ z# @8 U8 Z6 `9 s; `<h3 id="32-弹出框">3.2 弹出框</h3>
) `2 g' K. Y. t<p>三种消息框:警告框、确认框、提示框。</p>1 F( ~8 m2 t& }) {0 z) U- A: l
<h4 id="321-警告框">3.2.1 警告框</h4>
7 H% `! h+ z+ b7 r<pre><code class="language-javascript">alert("Hello"). z: m. m, V/ g1 t
</code></pre>" z, _0 ?9 F0 n" L/ v& c
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>) D& f$ S0 e! Z/ L
<h4 id="322-确认框">3.2.2 确认框</h4>7 s& E% O5 h5 L+ I7 e8 t
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
, \, l3 H( j3 e/ u+ f1 m<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true" l* u' z& h$ ?& D- V+ U3 e' [9 }6 d
true5 h+ f3 K5 K# t, i3 e4 K
&gt; confirm("你确定吗?")  // 点取消返回false- c, Y8 C  L, T
false* e% U: [, R, a0 |* @. G
</code></pre>' |0 n' P4 w6 M: {4 q# L
<h4 id="323-提示框">3.2.3 提示框</h4>
! }/ [* H  M1 \7 e" o+ M<p><code>prompt("请输入","提示")</code></p>" U" O/ l9 L3 f6 L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
7 L; B, ]" N+ R( u<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
: _" z+ H$ B8 u# z3 |6 j<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
- D8 {0 s8 F) u, Z! b<h3 id="33-计时相关">3.3 计时相关</h3>7 z" H9 U* y1 b5 ~# ?2 Z& a' E' e
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
5 }7 P* `( \5 g$ ?* n# ^4 d<pre><code class="language-javascript">// 等于3秒钟弹窗9 w1 e$ O$ Z/ _' [/ ?/ m* m. e
setTimeout(function(){alert("Hello")}, 3000)
/ |* ~$ C- ?7 ]! ?1 x8 j0 k$ ?* r+ b6 v; P! Z/ a
var t = setTimeout(function(){alert("Hello")}, 3000)
# P  R: G8 `( d. q% \8 t  v; [2 d8 R# d. S
// 取消setTimeout设置8 J! E; x) e) t( T- t
clearTimeout(t)( g5 r7 [1 N# D2 Q: a
</code></pre>
, D6 L8 @) i) t$ k9 @- @0 Z4 x' ?& Q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
/ o% u. r/ t: K6 x<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>, {9 [0 ~0 ?' k4 t+ E
<pre><code class="language-javascript">每三秒弹出 "hello" :% j; Q6 l0 p$ o8 O  E
setInterval(function(){alert("Hello")},3000);
0 y' j4 J8 U! c) V. F$ d: P</code></pre>: g- |4 \8 y5 f7 `! v
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
+ _3 m$ E% X, j( o7 r- f<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);' Z- z3 J+ q  J: }$ a1 p' f4 v
//取消:/ f  w' F' h, u9 r0 ~3 W
clearInterval(t)
2 z/ U8 i- b' f</code></pre>1 n- }2 @0 P: ~+ e

& Z/ ?4 D% c, @( V" w
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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