飞雪团队

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

前端之JavaScript

[复制链接]

9321

主题

9409

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30293
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
3 {' W/ i# [  |) D' b: }
<h1 id="前端之javascript">前端之JavaScript</h1>
/ D: s8 P! G! I5 y5 E<p></p><p></p>
; Z6 E- ^% r& l- r<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>& o5 K8 O- w$ _3 i
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
* c' w: \% @8 Q& V8 F它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
- A' N+ w4 j, V  o它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 I) w9 e/ a8 ?+ U  g" n它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
/ I3 d3 ?& i8 T% g* K<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>1 a* l! j) m0 S  S4 E; c
<h3 id="21-注释">2.1 注释</h3>
; n: e, Q1 b& N<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>% f) B0 ?. [8 N# L
<pre><code class="language-javascript">// 这是单行注释
. r. d+ J% q! t3 Q0 _# a# ]" A* |+ D$ x# l
/*5 l3 @# D" Y7 s% W6 G0 ?
这是多行注释的第一行,, @5 \1 @! D- a9 J) `+ c
这是第二行。2 i6 k+ ~7 A& `5 u
*/, E6 r6 m5 ]9 ^: V
</code></pre>
: Y1 L5 m/ [( c# n5 [<h3 id="22-变量和常量">2.2 变量和常量</h3>
/ X4 n, S* b5 H1 n0 h<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>+ i* V5 {, J  O) ^
<ul>
' ?- d( s: [. o% F/ @<li>变量必须以字母开头</li>
. E3 G7 B& N4 Q6 F+ _8 C& _4 X+ h<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
; c7 _+ m$ Y% y3 F. }; ]/ Z' O<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
& z% N& _" Z* R8 @- D( z</ul>' ]. P% z5 \$ d
<p><code>var</code>定义的都为全局变量</p>
4 d" @3 w+ j# m) L<p><code>let</code>可以声明局部变量</p>. P7 n, I  Z8 t6 w$ |
<p><strong>声明变量:</strong></p>5 X- I. {9 y5 v( d0 [
<pre><code class="language-javascript">// 定义单个变量+ S. V8 y3 ^( S; L/ u& m
&gt; var name0 u5 x7 Y' x, k8 z; e0 Z+ a/ }
&gt; name = 'Hans'1 W, K# X  C1 U& t. G4 Y" n' q
//定义并赋值) c. ?$ H" b$ Y* N; d3 E+ }! S
&gt; var name = 'Hans'# e3 M8 z0 [7 d1 T3 _" w; i
&gt; name
! G  P) H# F1 G  [' V: ^'Hans'
# L5 M1 {: O+ C$ _3 n
5 e  l& ^1 U3 ^) u1 r4 e// 定义多个变量
$ g  D! S& Z, ~9 X&gt; var name = "Hans", age = 187 i  j. K' a8 G5 e2 E' F
&gt; name: ?% j& P6 ~* J* H
'Hans'# A. }' w* T4 j& W3 f! q
&gt; age6 d7 ?% v+ |# H+ Z; F
18
6 @. a9 }7 T0 ?+ l$ V* P7 [) s6 e% v0 F4 v. B5 v
//多行使用反引号`` 类型python中的三引号8 F9 \5 a7 M9 o0 f
&gt; var text = `A young idler,
% I  z8 @4 Q0 f9 W9 y. U. i' G' yan old beggar`
! p# M7 ?. p/ G7 u( }6 j) _&gt; text
7 e' v- ^( c* u1 S'A young idler,\nan old beggar'
1 y2 w; `8 i- S+ g4 V</code></pre>, P3 e( m- Y9 l$ J! r: ^
<p><strong>声明常量:</strong></p>
5 Z+ ?5 z) m# Z9 L, C1 {4 X5 S<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! k, c, k5 x9 k. G" x<pre><code class="language-javascript">&gt; const pi = 3.14. {$ k, ?1 C& }% M6 ]
&gt; pi
  E4 J4 u4 A" {' Z. z3.14
' x% m" J' H! W3 R# m- ?9 k&gt;  pi = 3.01
8 Y8 h2 V- v0 J1 V+ hUncaught TypeError: Assignment to constant variable.+ v; G7 N  S1 n% k
    at &lt;anonymous&gt;:1:47 ?7 k& D" H1 j" w
) _7 _0 [9 J1 m( \6 [/ s
</code></pre>/ v! y5 ~  b8 u, `' k5 r. u& H/ a( M
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>; |4 I) m' }% n5 v+ D
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
' a7 S1 Q/ S6 e5 r<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>) f0 C" l5 i: M4 G
<h4 id="231-number类型">2.3.1 Number类型</h4>
- [0 z! t$ D8 t7 r' ]& K7 b! Q<pre><code class="language-javascript">&gt; var a = 5( f- m1 `& ?. m& s9 r. N
&gt; typeof a   //查看变量的类型  
1 F( `- j3 H5 _7 Pnumber  j1 U4 x! D8 ~+ V

5 d& k9 r( {" Q" ]% ~&gt; var b = 1.3
6 H) q  i9 l/ p* K; T&gt; typeof b
" c6 D& S  ?, I' C1 f2 a  u" ^number: y- Q6 I9 ]: w0 U) L- Y% c6 [& z
7 Z( f! y3 K6 ?
// 不管整型还是浮点型打开出来的结果都是number类型" A* Y3 ^0 [0 g! Y* u/ s
; d' P( Y5 k, \' w3 g* \
/*( N3 B7 w9 @- F- y( N' h
NaN:Not A Number
1 p8 {- `0 x' _& lNaN属于数值类型 表示的意思是 不是一个数字
9 Q1 H0 x5 |8 I, Y( Z. s+ K*/
, T; T4 v3 e! b7 M, u1 C
& M3 c" j  G3 j! |8 ?+ m3 i9 RparseInt('2345')  // 转整型
/ T& H% y1 }- [$ k% M% F+ y+ w, N2345' ^# A4 I( f3 ]8 `; _& A7 P
parseInt('2345.5')
2 e7 A+ j: L7 X- b) w; j2345
  M1 z" y- [, z) c+ q) GparseFloat('2345.5') // 转浮点型
8 n2 S/ z" l! I/ z! k3 u2345.5
0 N; K& \# W) o9 o$ oparseFloat('ABC')
  w, |2 S( L, g3 CNaN
2 ~+ R9 @- U2 `& V6 ^' }parseInt('abc')7 E5 H' O1 M8 J) C$ q4 k5 v
NaN
) A+ G; \, B, s9 N' c: T</code></pre>; n% R6 S: u3 p; `" ~9 C
<h4 id="232-string类型">2.3.2 String类型</h4>9 g$ F7 R, [9 W. L0 @
<pre><code class="language-javascript">&gt; var name = 'Hans'0 O6 d0 R5 {9 Z; x) y" H6 O
&gt; typeof name+ }% ?; J' P. B( u& a% w0 L
'string'$ v4 }: k0 }" R) s+ i- o

# P3 i: O" r9 Z1 g! q) [//常用方法3 H1 G% |! ?; @) A' O  p
// 变量值长度$ Z$ m$ H4 W3 d) a+ M1 ?% H' A
&gt; name.length1 E: e/ w3 h2 u$ d
4# E- z9 a5 K2 l: }
// trim() 移除空白* p: I8 s* J$ T/ j( V
&gt; var a = '    ABC    '- h7 k# n# X3 z. L8 s3 d
&gt; a
+ s; E3 y6 _3 U4 D4 ~'    ABC    '4 ?* p$ B5 L( `8 n
&gt; a.trim()
. q2 d- Y+ B' w0 F* y& R. v  y1 B'ABC'- D# }# p7 v+ @/ B0 L* {5 t
//移除左边的空白
+ {3 q' K8 J3 A$ a: n8 z&gt; a.trimLeft()& U0 T8 e3 Y! R
'ABC    '! q6 w- t& B" \* ?+ P
//移除右边的空白
" H5 A6 L/ A2 n' M" w" d( p* _&gt; a.trimRight()
( L- L1 r# R5 E  S! w'    ABC'
$ N! X3 e& u0 I' j. s+ S1 G6 B3 X/ R8 B% O! A
//返回第n个字符,从0开始: i) g, U  O- T
&gt; name! d- M$ v. B2 \( i; O+ x  O
'Hans'
9 Q6 m9 y+ |) E8 |' [6 O) O&gt; name.charAt(3)- u) }$ c/ T: l
's'- V; k, z. [) G) ]2 K
&gt; name.charAt()  Q( p: D  X9 N; O& R
'H'6 ?5 z. u; l1 X3 }
&gt; name.charAt(1)
4 @# q/ R) ?& d% _1 `6 ^3 N'a'
) q" @0 p' J. D( x- V& A3 A# y& g3 b/ Q# s
// 在javascript中推荐使用加号(+)拼接
$ L7 i1 V/ f. V* g7 F&gt; name4 J. M; Y6 e$ W' A
'Hans': U' W8 }0 t% G6 I/ W! t) B" {
&gt; a0 u* @+ }8 I/ F! {2 L
'    ABC    '& p' U* Y4 ]9 D0 p0 m
&gt; name + a
, l5 _" Y3 y# W. ?3 E2 T0 V'Hans    ABC    '
4 ]: c8 e. ^/ Z( i  I// 使用concat拼接
3 i9 ]; T2 v1 P/ L% }4 C&gt; name.concat(a)  N2 {+ ?! A3 F
'Hans    ABC    '
& t5 j% A  M7 z' F0 q" D7 @4 ~! d) I/ w$ D7 ?; h) C
//indexOf(substring, start)子序列位置% Q4 n2 z0 R3 L
  A9 m6 j  x5 J, M+ z$ d
&gt; text
  L( @: m5 w+ {$ y+ E# b* N0 n8 i'A young idler,\nan old beggar'5 Q* I& h9 i( B2 H2 }: H$ }
&gt; text.indexOf('young',0)
+ a( F: A) h" C: k2
0 z4 Y% k9 n" |; L! M
" A1 w1 C! x! L, W% Q3 s//.substring(from, to)        根据索引获取子序列
5 M+ X  [* v  x$ o( ^&gt; text.substring(0,). Q+ x; W' N6 Y$ M+ u: P. [
'A young idler,\nan old beggar'9 x+ y, H: w# q3 l: c  |- o- o
&gt; text.substring(0,10)
# p+ x; v6 {$ D/ V4 S- P0 ~$ {'A young id'; P& J- ~4 Y+ v9 W
9 h9 s% `( N/ q% R  S
// .slice(start, end)        切片, 从0开始顾头不顾尾% s4 P$ e# d* M, o7 H, l. J5 y: Y& P
&gt; name.slice(0,3)
' b/ y3 `6 R3 [7 u2 a# h'Han'
: n* M' q& t' a$ y  t: G: u" K4 j. ]* C0 S3 d- }6 Q
// 转小写
+ T( _7 }1 [$ `&gt; name. `+ s; w7 P. |6 v$ @4 }: S* o/ E
'Hans'
/ e8 _) n; n7 B1 e$ y' L: t0 I&gt; name.toLowerCase()0 v* v6 w, Q+ z' k6 H
'hans'
( X, H% t0 c" k- K  a% v* C; q9 k// 转大写
& S' {1 j: V: }0 d&gt; name.toUpperCase(), g! D5 Z9 F! l; f- b
'HANS') j8 s* z, y  ^3 B+ t
) _. s( p0 L7 P9 C# _
// 分隔
9 C1 M3 G; y3 c7 ?) E; h/ ]" [&gt; name
' D( ?2 z# @3 b2 N5 N'Hans'/ E/ u; J8 R& t9 k6 L7 Z
&gt; name.split('a')) _- ]+ t" M7 s8 x& l. H+ _
(2)&nbsp;['H', 'ns']) |% t0 @# ~3 M
</code></pre>
/ m2 E. ]" V1 }0 {4 x8 T<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>7 \/ z8 B6 n* g; I  ~
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>6 \; A7 ?( t0 A" a
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
+ Q" U$ j+ a4 i% l<p><strong>null和undefined</strong></p>
. L" |" Y" \9 E( |, I0 S<ul>4 H( e7 s1 x+ e8 E
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
5 a, N$ V1 h6 I, a0 u<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>5 O0 {* m0 `" e0 j% s
</ul>
/ h6 C9 K$ g6 Q6 N1 Z7 J<h4 id="234-array数组">2.3.4 Array数组</h4>
3 w" w! {* w9 Y: N1 {  E  L<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
3 s( Q% @; a) L2 [<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] % P+ d  _! ~  o1 ]2 }$ y
&gt; array1/ X3 s$ P/ W% t+ O
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. U& X: M5 L; F
&gt; console.log(array1[2])  //console.log打印类似python中的print
. [2 r$ p' k* O3
2 i& n3 o1 ~8 u# @: r6 R% F// length元素个数6 N/ }2 x, L( ]5 [4 m- M% G0 R
&gt; array1.length- ?- n3 |. M$ s- u; m) K# a
6+ O4 v5 {5 j5 X' U/ Q
// 在尾部增加元素,类型append
: g+ B- S0 k! R3 {% ?+ W. X&gt; array1.push('D')7 x7 Y* e7 n, z0 b5 o+ b0 I4 w$ ^; v
77 G% c- s8 m0 S. @) ?: W) H& L
&gt; array1
' p- H: \' R' m0 F5 P(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
; v2 Y% n# \$ D) A( Q# k1 B// 在头部增加元素' E- d3 x9 y) K* ~
&gt; array1.unshift(0)  j" E5 p8 x: X, {
8
8 W0 i) r# n0 l/ O# b0 g&gt; array1- ~7 l1 A# w- x$ O+ i5 [" H. S
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']4 T- w8 S! t9 c, k* X

# n$ f5 g& A- H2 e' E% ^//取最后一个元素
* G! @8 b& f0 R3 w&gt; array1.pop()
/ [# S3 o- {& ?; C9 Y- Z. ?! ]'D'' ~* ^6 N) G! \; l# e0 P! ^
&gt; array1
' F8 d8 y7 Y# K, v" _(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
  Z  W2 e% `" V8 c+ W9 x, Y* [+ t//取头部元素
% C* q( I. p) G. c1 Y! `&gt; array1.shift()
. f, O! Y6 R5 K0 y- b0
5 L' W, ]; K0 l. _% M: }+ S  O&gt; array1! a0 u# l. ]' v6 Z* N
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 h4 W: `" s) X
) H/ [; @/ h) x" I$ @: @6 J
//切片, 从0开始顾头不顾尾% d  I9 q/ S: r! h: T: b0 t( f
&gt; array1.slice(3,6)
) b* o% r  U) w! m" s(3)&nbsp;['a', 'b', 'c']
4 W- R  j# i; M9 _* x. T/ z// 反转9 b0 U) ?3 C! x8 y8 C
&gt; array1.reverse(), `* M1 \8 Y" p& o
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]' l* _. L9 L. O( [+ c( n% M  L
// 将数组元素连接成字符串/ \) B- J4 X  s" _. G+ {8 Q9 h' T
&gt; array1.join() // 什么不都写默认使用逗号分隔
" z. T% F, H( P'c,b,a,3,2,1'' ^* S" v2 m1 ?! d
&gt; array1.join(''); U0 e9 ^4 r  S8 c9 K5 J
'cba321'- E' |' s- a" _9 ~6 G
&gt; array1.join('|')
  S* O2 }! x+ o' v' C- f. T'c|b|a|3|2|1'
+ I+ @. E$ N/ P* ]3 z' f, K3 _  r
/ l) u: r) p( r3 t+ t1 }% c// 连接数组
) t/ m  W: w/ M9 J) h7 f* f# U&gt; var array2 = ['A','B','C']
" A+ J. g7 ~" i+ {&gt; array1.concat(array2)7 W4 k1 ]& a9 A: i9 \
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
* B" U& [9 f& A2 Q' g$ Q6 ]$ e+ P! y) D$ g/ c; R
// 排序" @' c* W( F5 o0 g1 ]$ j' Y5 Y
&gt; array1.sort(), Z% {: t# X+ m4 s! |
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- J; U8 ~" @7 G% S

3 Y8 J1 X4 b  Q# {# s3 P! [// 删除元素,并可以向数据组中添加新元素(可选)% o3 @+ n" P( M+ f
&gt; array1.splice(3,3)  // 删除元素7 T& w2 y( D* ^/ h- @0 c
(3)&nbsp;['a', 'b', 'c']
; u5 m+ z8 G9 D& @; A' O. q* B7 N&gt; array16 y3 i9 G( z. ?. z& O
(3)&nbsp;[1, 2, 3]
' F& d1 h0 b4 u' z4 [/ j$ L7 X" S, Z&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
" p' g6 E9 ]- t0 s0 {& j* Z4 U2 ~[]) H. r5 v( B& }3 W
&gt; array10 S. r7 S& {. u& \
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']" @+ Y$ l2 _& |& x4 i3 e4 b

8 a  i0 U/ ^1 ?. T6 C/*. y% ~, J! I7 |: Z3 }
splice(index,howmany,item1,.....,itemX), N+ f7 H* H0 A  ?; X* D
index:必需,必须是数字。规定从何处添加/删除元素。
. Y1 `  V0 ?+ s. ~; q0 Y% ]9 ahowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
( Y. V  C# X4 Sitem1, ..., itemX        可选。要添加到数组的新元素
/ ~) }; q* A, a3 {/ H& v2 D( s*/
, V& g  P0 V! K* `
# E0 o: M! C. ]9 S5 z// forEach()        将数组的每个元素传递给回调函数( B& s! \( {" w% K, i1 j% T3 \- I7 ?4 Z
&gt; array1.forEach(function test(n){console.log(n)})
! b, r- h3 Q' y( y6 C$ n 1
: J0 H4 b, C3 \) y# Z7 h( x/ H 2: g+ [& e% D+ s& L
3
* T7 I: w- `3 S9 {! h) c/ _1 M6 E A8 I1 V, B" K# \2 f
B
8 [. g- p, Y; J$ a) D4 s C
4 @( ~9 p4 U- c/ e- F, D; ]// 返回一个数组元素调用函数处理后的值的新数组
8 Z- T" C+ z% l& H1 [3 |9 x' v& ~&gt; array1.map(function(value){return value +1})
2 j8 ]$ F) e4 D" ]; M(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']. B# c: p( Y; C
</code></pre>
* g& z' f2 X9 v3 ?<h3 id="24-运算符">2.4 运算符</h3>
( h% O7 i8 h$ v- x( L4 M& M<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( ?) S7 R9 o) {- ~
<p><code>+ - * / % ++ --</code></p>4 j6 ?, w: k$ _0 ]* {
<pre><code class="language-javascript">&gt; var a = 6: j/ n" g2 M% N/ w
&gt; var b = 3
) Z+ @) Y" p& ^% F5 m: M5 B. x+ ]// 加
; e# n3 A( q; w# }, s; Y&gt; a + b9 z' j4 z) z6 ^8 m
9
6 A% u/ t* p! ]# s* c3 Y4 z1 a// 减
" E) b' t% f  W& ]&gt; a - b7 R/ ]! T+ F* D# K# S" j. n
3% J2 T  R- N! z) A
// 乘& j5 \: o7 E) r0 N2 c. P
&gt; a * b
% ]; P& W3 t1 j9 J187 ]  u# K! \1 q: g
// 除
9 U1 ~- M  O6 u&gt; a / b
5 I+ E7 A+ r9 q* Y' W2
- E$ f+ `  K3 r* l- V. E: a$ O// 取模(取余)2 a2 n, `. r- k$ _2 q( f* M
&gt; a % b2 X' v4 e  F% n) T6 A( a+ @0 O3 V
0
: y" P" I4 N' T4 S. D$ y7 ]6 g// 自增1(先赋值再增1)2 r4 g" ?: l8 Z" `8 h7 U) S
&gt; a++
$ T* T. W9 J+ d9 b7 @1 u3 W+ {68 l& f. X4 a3 b& G7 K' f4 t& s) n9 W
&gt; a4 ?- B9 j# t6 p$ V0 [( @9 `* l0 B9 u
79 G/ S+ x1 T" o" K! C! D3 K: u5 x5 [5 r
// 自减1(先赋值再减1)
& m8 ~( z8 b8 H( e6 w&gt; a--
6 `9 }5 |% L/ d* U1 s/ \4 o$ v7
9 T. W  D# `5 s- \/ z3 e& x% k&gt; a  G) K- `7 e+ j. U% t
6
" B  S- _+ W1 Q5 N. @; Y( u// 自增1(先增1再赋值)
# Q4 H! ~6 }( b% b9 i9 v9 d! N&gt; ++a0 i6 ~0 N% r3 g: F
7) W: i9 Z2 z. x8 L
// 自减1(先减1再赋值)
' r4 R# F& ~0 E' c6 V1 T&gt; --a. e5 p  e+ d$ ]
6( b: R0 `3 e- X: c2 L
&gt; a1 y( o* T: Q, h" Y! v- }
6+ ~) y7 ~( v1 B# t4 [
$ x0 t% x8 {; u9 g4 T* r' m& g
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理/ \# A0 z( Z4 S, D: _; ^+ K
</code></pre>0 ?( ~) I, o! `8 ~# W; P6 O
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
! T6 T1 ~2 N+ V' B<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
: ~! _' p3 S. C4 t<pre><code class="language-javascript">// 大于! i$ X* ]# L' J6 N% X
&gt; a &gt; b
, j" i2 q* a5 ]0 d4 t3 Htrue
! R: l9 o4 @% I& L, h. H// 大于等于9 x; o- o, ^, W# ~* l% g$ b. J% ]
&gt; a &gt;= b' g0 K* Q# h! [3 B# q
true# [: `* R7 G% H2 N
// 小于
. d  [& Y# A# }, O&gt; a &lt; b
/ G* X' Y1 p% S$ I3 pfalse" V8 b3 G5 E0 O& H* r, E
// 小于等于# `  j0 n# M1 D; g  d; w4 }- D* ]
&gt; a &lt;= b
2 ]  r% C. O7 z$ D$ B1 o& zfalse8 [% M4 v4 \* U% A
// 弱不等于
  |% R/ j: g- n) G* R: K3 Z&gt; a != b
  l% q+ r* ?9 M8 q# h/ l- Dtrue
: m1 X& g" S& q# x// 弱等于
( S# t9 k, E  F! O&gt; 1 == '1'4 {/ w( ~# t' |( R' `2 m6 w2 A
true9 H3 t/ A8 Q5 r1 F2 i9 P1 m% L
// 强等于1 L* P, ^1 d) h3 {- k5 a
&gt; 1 === '1'
( s0 ^$ w" @+ s/ p$ `* i  Qfalse
! P' I/ J  w4 T# V! S1 p! q* W// 强不等于
' G+ r) V7 r1 p# T9 G9 X' Q( |; Z- X) i&gt; 1 !== '1'$ ~$ g- d  P& H* F/ M
true
/ D: C$ I! H% D! e! q4 M" N5 d# }( m7 i! D8 X: J. S$ S- @, I1 |1 v
/*
/ x5 s+ [# x4 c% p! m* T8 YJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误( I. {, r8 e" w- U/ h
*/
5 W$ Q5 ~9 @6 \& X3 n' W</code></pre>
. @% E* w& `. N/ [$ U! n4 k/ g6 g<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- }6 g9 |9 Q" D- N3 Z2 D8 f: M0 U1 L<p><code>&amp;&amp; || !</code></p>$ p; h) X6 d- g0 |. ~
<pre><code class="language-javascript">&amp;&amp; 与7 A1 J: U+ Z) O, @3 r  ]
|| or + v! z8 H% V* U. p( K
! 非: l3 ~. F# o2 G
</code></pre>
) K2 |3 U) k! h<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, T+ \& _9 ]0 h% p<p><code>= += -= *= /=</code></p>
" v$ S, c8 W% Z! \<pre><code class="language-javascript">// 赋值$ d; B, G  P% Q: R1 ~
&gt; var x = 3: O9 s7 J2 o) x# z0 @0 N% s
// 加等于
2 F3 m/ v+ E/ E' P# ^) C&gt; x += 2! o& V: Y) x3 x
5: g9 Q) E$ @3 N/ M" s; Y
// 减等于
- n) n/ i& s9 r4 _; B&gt; x -= 1
$ `. a0 }( U* p, t4# Z9 M# U3 q+ S) q! b) E
// 乘等于+ f  Y( b: G, D- q0 K" [
&gt; x *= 2
" Y$ X6 _  f" T4 \81 d% f; \8 N- C* k$ F* g0 N
// 除等于
. h4 z" M9 N+ D1 T, m. V&gt; x /= 2' T4 ?* O5 i" d: C: n# P
4
# h+ C$ I- y+ ^& n* B</code></pre>
: O. k' e4 B( f, U<h3 id="25-流程控制">2.5 流程控制</h3>
# `; [+ h2 R" a) y<h4 id="251-if">2.5.1 if</h4>6 c& h; c1 j: G) u# _3 A
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
0 q- l  `6 j- s- G* H; c6 g& G4 O4 V. M3 u8 \2 ^+ i
&gt; var x = 3
7 R" U! H. j5 X0 u/ @&gt; if (x &gt; 2){console.log("OK")}" x/ [% B  Q+ k  U/ ]( U2 `' Z
OK
8 P4 E: u8 ~; U, s$ t' L4 l8 o/ I: [+ _
2, if(条件){条件成立执行代码}
: b: a& {) ~( R* w, E- ~; O3 D        else{条件不成立执行代码}2 S+ ?8 o8 @% s
# ?& _/ K- E" E; q1 E8 ~
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}2 ]" g2 g0 M# n* x! w
'NO'% G, r9 i' S" k: N
/ `& `" v3 `& {) ?0 T
3, if(条件1){条件1成立执行代码} * v9 C# w; n: X
        else if(条件2){条件2成立执行代码}, f- ?3 Y" w+ |
    else{上面条件都不成立执行代码}- I* O! p5 l* v) B# k6 i8 \

' z" m* v4 U1 e# z  `0 o& n&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
# K4 c$ P( J3 q. S4 I' s Ha5 w5 b/ x0 |, ?& n; x! W
</code></pre>
; F4 k: s6 @% c! T* k6 u<h4 id="252-switch">2.5.2 switch</h4>! z( L) g) J( P& M( ~
<pre><code class="language-javascript">var day = new Date().getDay();" w, V5 H' T) d2 N
switch (day) {+ t5 e# B* g3 t
  case 0:" M( L' |8 v0 |* @3 E* ^& M
  console.log("Sunday");
' T$ n: K$ _6 ]* z+ x8 V9 Y7 f  break;4 J' e: C! b& T* m, G
  case 1:
- A% Z% @8 c( E  @* X1 s  console.log("Monday");% d) }7 l" \/ ~% q, m" j
  break;
) \6 ], s# r3 Wdefault:
0 s3 {( t/ p- K. g+ \  console.log("不在范围")6 i5 q" Q0 j$ o5 l. S3 ^  G6 u
}
0 I0 u; [) O& e- o/ Q' C 不在范围
$ B4 [8 l+ V9 N8 Q# ~- M</code></pre>
+ v2 Q1 Q" g( E! O6 b# W  `) T<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>5 d  j8 {  B7 {& G! G
<h4 id="253-for">2.5.3 for</h4>
) L- r3 q3 b* E3 z<pre><code class="language-python">// for 循环( t6 ~6 Z: z; I  q4 A
        for(起始值;循环条件;每次循环后执行的操作){
7 x( M) s' n: l1 K# Z6 u) I        for循环体代码
7 l. U; l6 m1 @. l: v! D0 S; G* o$ U    }4 n. i) A5 D9 v2 b+ P

; o& @0 l4 {+ p6 `% b; V8 Kfor (var i = 0; i&lt;10; i++){
% O8 r8 A+ W0 o( H" {. K( t4 l) O, p5 D    console.log(i)
& Y8 Y$ F& _3 R  N8 O) T9 Z+ w}" T$ P) w' c5 V, [& S- ?$ n
        02 y6 `4 q7 f+ ~& u6 n  P, B% Z, x
        1
% r: c* h! B3 f1 B! O        2
8 W( R* G+ l( f        3' S6 f& [4 R1 C0 Q2 p
        4
0 c$ b  m) e- z# K, j        5; X5 r& @8 T/ {0 G( t
        6
7 F% z/ ]% z4 r/ f; O        7, l# ~5 ?! ?$ x" U  X2 @( k9 C
        8
( t" {: E" m& w9 {- s+ a' J, z        9
' s  ^, |  H6 P* M) y</code></pre>' O! y* x% O2 l( W1 _7 e) s
<h4 id="254-while">2.5.4 while</h4>, J4 G$ x  t/ G% M. x( D
<pre><code class="language-javascript">// while 循环
8 a' Q+ z4 n& x7 T        while(循环条件){) X: o6 b1 `: K- A! P6 k& y
        循环体代码
# Y3 A- T- U7 X- c8 x    }
  B% `7 w/ m  {1 h; O
% ^# p# L" p8 s9 d* p! D( {&gt; var i = 0
; Y, X* |( g/ \&gt; while(i&lt;10){
3 {- L1 F! h0 G4 @    console.log(i)
- p$ L5 j$ D+ m8 i( \4 p    i++1 [( m% I" v' B2 S
}
2 i1 N! k  V8 ?' G! m 0
- `9 l7 {! Q, k: d8 S 1! o" m1 U" x+ P/ \/ m, [9 f* M
2
* a+ B8 A2 w# [- p" n 3
$ T) @) B: m& V( v/ F7 @* Y2 v 4/ Z) [7 u$ m. Z* C" |
51 W! a# ]( }6 ~. A: Y# f( N) U4 o
68 h3 [8 Z. P( T
7' F2 ^9 l2 ?# T& v4 l3 c; a# ]
8
$ a* Z1 X. C$ @- g4 n6 G% t 9+ f9 Z0 ?9 o( O) V# ]
</code></pre>) O+ ~$ ~) G  E+ E7 g
<h4 id="255-break和continue">2.5.5 break和continue</h4>4 A9 l% E% x/ ^% H$ E
<pre><code class="language-javascript">// break
& E9 ~9 D' z7 \7 J4 E8 lfor (var i = 0; i&lt;10; i++){
( @! W, i' z# m& k# |5 M2 m    if (i == 5){break}
( d$ a1 P, E/ G# |8 ]; M    console.log(i)2 c0 D* J( A( _: P- p( N. d% \
}
: W. g0 ~0 Q, f 0* i% K5 E6 N) M
1+ W  o" C# Y" `
2
3 m0 w- v0 v$ v# [4 N) g 3& b: J. p2 e4 z8 U
4
; E& l" c+ j% U// continue% J4 O% x8 C6 Y) r7 ]4 Q
for (var i = 0; i&lt;10; i++){
. t! [" F! _7 p1 X8 e0 w5 K    if (i == 5){continue}
" B1 x1 T3 h" n! `5 m' r/ G% u    console.log(i)
" t3 d% z  l; \/ ~0 U& V, k( u}* H' L8 t" H( o" k( {; l2 `4 X: X
0
7 L. k9 ^4 e9 _" {* J6 j/ ]9 Y4 S 1* M. I2 H+ m) h/ E7 {' j
2
7 y  \  n! U3 G4 L& D4 _  m 3! ^' f' x0 D- U6 t& P; @9 T
4( m' B5 @- Q( B: @7 v
63 U7 T3 y$ o. F
7
: K; B- c* P$ Z# H7 M+ Q1 K 8
1 i* }2 U8 y2 G7 p0 q5 ^; b) t) N) B 9" _; g1 V- ?! E  {2 E5 c8 V
' k% S3 h; Q/ y- b: ?4 [5 D' h, j2 C
</code></pre>6 R2 V- a+ g: y9 {/ e( e- t: Y
<h3 id="26-三元运算">2.6 三元运算</h3>% f* A; ]# I' p  ?6 D+ L0 g) I
<pre><code class="language-javascript">&gt; a
; L3 j; W9 d- E$ n5 ?* P63 n5 [; r7 {( O/ ]  \( U
&gt; b% b- d: Q$ C! b0 W
3
8 b( m- I# r  U3 o7 f, ^4 w
- }1 X5 N$ U( x0 T# n//条件成立c为a的值,不成立c为b的值5 s0 T' I( I# G0 b
&gt; var c = a &gt; b ? a : b9 z, }; \% N, c, H; {
&gt; c; F9 Q2 v" p5 X) @/ `2 z/ i: P& P
6
% W: S+ M! C& Q, d7 i6 Q; N# o8 l' Q2 _1 a8 d, b7 {5 D2 |+ M
// 三元运算可以嵌套7 X% `. {9 Y6 f# Q7 u8 B
</code></pre>' t( B' x, I" I: p1 n7 |: H
<h3 id="27-函数">2.7 函数</h3>: i# b% J: s3 w4 P0 k1 X$ r! H. I
<pre><code class="language-javascript">1. 普通函数, D# U7 w; i5 T; h9 K. |$ a. O
&gt; function foo1(){
% s8 z7 H( S' S6 u/ O1 }3 ]    console.log("Hi")
& C" R0 \, G4 T0 u& {- L& Q}
, g/ _. ~1 E- F! v) p* x0 W$ k2 }/ Z. _  B
&gt; foo1()) n% W" H0 S4 t1 v& e
        Hi
  w4 U$ ^' C# Y9 y' F! H2. 带参数函数
1 D5 U9 ?6 F( E* W1 A2 w) h" g! m/ D&gt; function foo1(name){; t8 r) e: V0 ]* h: n+ J# q
console.log("Hi",name)6 }' T/ }) d" U
}
' V# W3 c8 ^5 i* @  F; g4 }- V2 J/ j. A* D$ Z: H8 H0 S
&gt; foo1("Hans")
6 x. @  R& U: N* u4 n; ]: v* F& BHi Hans: }) {/ N7 U- I- y; F

% M4 o. [( \2 X2 W# J0 z&gt; var name = "Hello"
; k7 ?* d, ~. [4 z5 I1 M% ^/ I&gt; foo1(name)5 z: G/ i7 F/ A$ F# Z) _" L3 D3 h
Hi Hello
! [# H# l  o9 Q2 d* Q# T% j5 M- T. p+ w  U0 T% h
3. 带返回值函数9 T/ W  i3 J2 I! B7 ~
&gt; function foo1(a,b){
% p7 G, W) B0 ]/ ~        return a + b   1 [, P4 {* @, X5 c' _& n
}
: X/ F3 ]+ N! T4 p6 R5 t1 n&gt; foo1(1,2)' q* U1 n, o3 e8 ]4 R
3
( n0 q. k" H5 R7 c&gt; var a = foo1(10,20)  //接受函数返回值2 V1 `; q* y! v9 Q$ g$ _& G
&gt; a
* r* @6 K- Z! R& ~300 {. L9 t2 u( t1 U% k9 L4 Y

& u( D3 q4 J4 E" h" X) z4. 匿名函数1 e; x9 v( h2 u5 q
&gt; var sum = function(a, b){, T1 C# z% G3 F9 \8 m- [
  return a + b;, z2 T9 D  U2 f. k: b& l
}
5 E* y6 r) d( N&gt; sum(1,2)6 z. L! m, b8 |5 _4 K: M! [
3
7 h2 k" q- {+ G3 F
; k5 i7 Q6 Q+ u, @  _$ K7 u// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱6 b3 z+ H3 }" E7 V
&gt; (function(a, b){* \, ~! \+ |1 [! m1 z9 l
  return a + b
8 B- X% i/ }% }; ]3 b})(10, 20)/ H& j& r( P2 K3 p8 _
30$ k& H) _: r5 {! Y
: c7 P* t1 I2 s2 X/ j+ y9 D
5. 闭包函数' F& @( t- `: e% T+ @6 _
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
. d% y" r0 b. G: |* h0 Gvar city = "BJ"
# C' z. `0 |+ C! M/ Z# ?function f(){
& _* R8 P9 k! H8 Z4 h2 d: l9 p9 K    var city = "SH"
5 k# U* |( F. m2 ~9 m9 y    function inner(){
7 v) m3 t/ `: w& L0 P        console.log(city)% h- x; Q6 _7 R$ ^( r& a/ }* h
    }
6 }2 M+ V* D  {" {5 V    return inner
! T4 J4 V# X( O}$ e' N+ V& L, X. ^$ G
var ret = f()% b/ J/ ?. W. }( |- H
ret()
& J) _/ G( L- o4 [0 K* q执行结果:
0 K/ a+ i( N% e/ Q% U" c) N' n, J, X; C6 Q5 JSH8 m  ?: N7 N5 X' h
3 F% w7 U- q0 ]
</code></pre>0 W/ e! m' I" _" w4 S6 z4 V
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. m/ Z  D& \2 ]4 G0 F" W0 u" C) H
<pre><code class="language-javascript">var f = v =&gt; v;4 o! B) Z" P9 s; C+ d
// 等同于
7 R' A6 y: |' t) G1 J; @var f = function(v){
. |4 W) A2 W0 M+ O& n  return v;
$ y0 z7 j1 S1 c" ?% \8 E}& q2 @# t. c, D7 H; M! f
</code></pre>
8 L. F1 m& s( H; w7 z4 s7 r<p><code>arguments</code>参数 可以获取传入的所有数据</p>4 K+ o* W" @' k, |! R
<pre><code class="language-javascript">function foo1(a,b){
1 e/ `  ^7 g: ]; L# ]  a    console.log(arguments.length)  //参数的个数 ; R3 ]$ _+ V$ `7 @# ~, |
    console.log(arguments[0]) // 第一个参数的值, T) `% l% q( ^2 H$ u' g
        return a + b   
! I6 f/ c- d" ~, H7 t}& `7 H  L- o2 F5 `; y6 h
foo1(10,20)$ G7 ^- _* ~9 Y
结果:
9 _" R$ `* v$ M1 o3 v# q0 w: Z4 l 2          //参数的个数 * n/ ~) F$ r$ V7 O3 p! f" q
10        // 第一个参数的值9 V- r1 S( ?/ `
30        // 返回相加的结果+ C% Y" O* w5 |2 A
</code></pre>) i$ g& I0 T, h. Q" H; u* w+ @
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
; H& R# _& l1 y+ w<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
3 s: W$ Z# B  }4 {<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>8 x) r' W, o: X9 ^5 u
<h4 id="281-date对象">2.8.1 Date对象</h4>
. x& Y9 h( G. h/ |. p$ C. N/ f% d<pre><code class="language-javascript">&gt; var data_test = new Date()$ F; E6 b0 a$ G7 h9 U
&gt; data_test4 |4 l6 d- h1 f" e4 i
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
0 p, V& A- d5 F5 w3 r&gt; data_test.toLocaleString()
6 R$ W1 r7 k8 U" _9 R5 C8 L% V1 }'2022/2/11 下午9:44:43'
% X( X5 Z6 j  P3 H. v  r6 D& r! T* |
; K; s8 K( n9 o  M8 L8 F&gt; data_test.toLocaleDateString()
$ U; C( _5 Z: g+ F5 D. Q2 u'2022/2/11'7 `4 }! f+ h. M, Y6 W
3 E- D/ ?1 ?4 [9 ]% w  ^2 z( f
&gt; var data_test2  = new Date("2022/2/11 9:44:43")/ V5 X1 @2 X( L+ ]8 {) N
&gt; data_test2.toLocaleString()
: t; E; v0 D! d* s" _6 I'2022/2/11 上午9:44:43'
( [3 A; s, N' i$ W3 T) H& O8 [! j- F4 n6 }: s1 {$ J* ?2 ?  \
// 获取当前几号
6 h: t7 y1 X* K' A% C- s- ~&gt; data_test.getDate()
9 ?- D. `5 |7 N& {4 L11
& h* P/ l- I$ U* @  l" G3 ~// 获取星期几,数字表示
5 ]0 U8 @: C% x) a" |: |&gt; data_test.getDay()  
. `' G- w3 b7 P  |9 K& L5! @' r- r; j( B+ S# C
// 获取月份(0-11)
' ?! H8 B+ \7 ~; @2 a9 O& v&gt; data_test.getMonth()
8 M+ H1 c$ v: {3 v. j* y1
5 `+ f1 _% @3 t& ~9 q: q0 \// 获取完整年份, w& F5 h! q; E1 Y
&gt; data_test.getFullYear()
' J9 G7 M2 c% }3 O1 o- \  G$ g2022/ S, W" P8 [: l0 m. }
// 获取时, s! c- Q* [" C* i- p
&gt; data_test.getHours()
+ B# i0 S4 p; }" {) ^2 L% T21
) _; Y* M+ f1 t" a: a// 获取分% v9 G+ p4 F0 W6 _* q/ G! e
&gt; data_test.getMinutes()! b9 I3 H$ P5 H. K
44- `% [' N/ r9 A* E
// 获取秒
$ \: Y) Q% k2 \5 z/ T2 C" F+ ~&gt; data_test.getSeconds()9 w9 Y7 [& t  ?& |. e( x
43
/ \* Y% C& ]# {7 `" d) z// 获取毫秒
4 G2 _) o7 z- C; @" B/ y- W&gt; data_test.getMilliseconds()
" T9 A9 s/ C! O; q290
: u- d5 \/ c: V( a6 a8 o// 获取时间戳. u: V0 M, H" |' |0 }  ?( ^; q
&gt; data_test.getTime(); w+ X9 d3 U$ Z. N/ A! O5 F4 H4 B
1644587083290
5 c9 D. p+ r& i# w</code></pre>3 G" D& S- P# J$ b8 C
<h4 id="282-json对象">2.8.2 Json对象</h4>- `% v% Z% L; Z9 Z: v
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串& E! _$ P1 S4 _2 l/ v/ C3 x6 B
JSON.parse()  // 反序列化,把JSON字符串转换成对象+ T; B9 l3 ~  q$ `. G! ~
  P0 E6 P* R% G1 v  R" w$ t
// 序列化
. v9 U' r5 ]" \% J&gt; var jstojson = JSON.stringify(person)
5 S2 g, M: A: I7 N6 P0 s, [&gt; jstojson  ( U+ ]5 ]" c8 n6 f
'{"Name":"Hans","Age":18}'- W$ c# f2 D8 n. x  A) e

. A0 m% H( X- i// 反序列化6 u. z( N0 q( g% m" X: |
&gt; var x = JSON.parse(jstojson)
$ o6 l( J& F# G9 F: O. J2 C&gt; x
4 D! M' n) h. z9 C/ j( g1 g/ W9 V{Name: 'Hans', Age: 18}4 U4 A1 \7 ?8 e) R) P
&gt; x.Age
! M$ z* `, d8 |$ |18% n3 W9 J+ {' d% V+ d2 g# t7 o
</code></pre>
  v, o6 \: ]0 o1 P5 o<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
: H( g& m6 d' D- C<p>正则</p>- y7 ?& S6 p0 H; e8 J, X' s! C$ `9 }4 U
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");. F4 b+ y8 X) K( U
&gt; reg1
- O; w8 ^6 _8 j  ^7 z) v: f' ?/^[a-zA-Z][a-zA-Z0-9]{4,7}/; ]4 R, Z& }0 B/ W1 C2 _3 E+ q! T# S
&gt; reg1.test("Hans666")
- w4 U! _% X/ @9 rtrue% z/ W2 l8 e( A2 r

5 B! j: W& J' I, L% @  B&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
, R+ w7 p; k. u7 |( x&gt; reg24 l/ _) _! m+ e# y3 X
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
6 @# n! m- t3 t&gt; reg2.test('Hasdfa')
3 H* N' V; Q% y& e3 utrue
2 `8 J8 X& E( S' u% \% m( e2 O4 f) v$ W6 p
全局匹配:
8 z* x( M; A+ |1 d9 l&gt; name  Y& r' o' A# {( Z6 K( P
'Hello', d) W( f! h0 X
&gt; name.match(/l/)
5 V$ m. t/ g6 B. `['l', index: 2, input: 'Hello', groups: undefined]/ x& n1 [1 v, `0 |

& ?) d* N7 w. \0 V, H&gt; name.match(/l/g)" c4 I( P) z( ?' |
(2)&nbsp;['l', 'l']
0 U9 N2 _# c' K" P// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配7 d. {5 G: A, @6 ^6 a9 b
' d. j2 Z# O" r0 n
全局匹配注意事项:
/ y# u9 Z! [1 A, ?% a&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
9 [8 C" ~7 ^# M' g. G$ \9 B&gt; reg2.test('Hasdfa')
5 u8 P: I" l! L' C2 B* gtrue
3 ~, I( q$ s* ?- a&gt;reg2.lastIndex;4 V# z, y: c3 r6 h( i1 \
6/ |5 d7 E2 T; P; C7 H
&gt; reg2.test('Hasdfa')
; S+ p4 ~7 F% P) j/ i9 Y- s8 bfalse
2 u  e3 x. B0 t2 e0 u! |&gt; reg2.lastIndex;
9 }+ Z% x4 N4 L  e. L! Z06 e! c. X5 r  N5 D9 U
&gt; reg2.test('Hasdfa')
: V+ B$ g/ b* P) f0 w( Atrue
4 V6 x2 Y! ]8 q* [4 }" d$ m&gt; reg2.lastIndex;6 Z( V- U6 {" w. e- S' P9 m" K
6
* q( C# T* _" \2 K3 G&gt; reg2.test('Hasdfa')
) v( n& T" s: h! C- g% k4 Afalse, K  ?2 g! o" m
&gt; reg2.lastIndex;
! W5 c- y; I: U, l% [$ X0. C& o/ f! p4 E" `8 T9 x
// 全局匹配会有一个lastindex属性
1 H( B1 y( c# L+ `3 C# ?&gt; reg2.test()5 Y2 N! H* y1 I. \
false
6 B2 J! O' s# h3 f&gt; reg2.test()5 a9 j+ s' Q, x" a, a, G2 h+ |. g
true- G$ `! m% H, a' \2 j; p( N
// 校验时不传参数默认传的是undefined
/ t- X# H0 s- R; F( n' ^8 l1 N</code></pre>
+ H* s" R6 X, i7 I5 C* o- F: Q. A<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
* `) A# T" r8 }+ T' J( ~<p>就相当于是<code>python</code>中的字典</p>( r! Y/ E$ N: w
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}9 F- h" }0 |( K* b9 v$ C! c
&gt; person
/ [' G8 r2 `7 I{Name: 'Hans', Age: 18}
9 }) [" v' _' F&gt; person.Name
7 S% V9 k/ W' ^7 v0 _- F'Hans'5 P- h  Y) U) w% Y- U$ |! D) R8 ?
&gt; person["Name"]% ^9 h$ v0 v/ @, }
'Hans'  t( H4 n1 K2 N8 R' l( b% g1 |7 ~" H. p

2 A- l& w% ~; f/ M- K+ D// 也可以使用new Object创建
3 Y. W9 e( Y- C$ [1 [6 d7 r+ j" h&gt; var person2 = new Object()+ A9 I; X3 n8 V& C  x* _
&gt; person2.name = "Hello"  n: w* k1 Z+ |3 A: Q5 B
'Hello'
, n' |. E& U; I: c. B, [% {&gt; person2.age = 20
: T$ x4 L/ f4 Y& S$ w$ s20  d5 D2 n/ n! H" ?
</code></pre>% o) e6 `' l1 B1 a- ^
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
8 G2 o6 |( F+ [<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
$ ^* O. D$ x6 L) y- s7 K: |3 J4 N$ p<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
- u- ^1 G% O1 M* u# R% c% [  b<h3 id="31-window-对象">3.1 window 对象</h3>/ |) f/ X( G. O0 g$ m% d6 e) D
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
# r) d  s; `+ F3 U3 k+ T5 S<pre><code class="language-python">//览器窗口的内部高度' V! n/ o. D- @& A& t! G
window.innerHeight
+ ^: l4 `: }: z) Z706
; o, u" h7 v6 w: O//浏览器窗口的内部宽度
! q8 c0 D3 b* ?7 s  z  v5 Iwindow.innerWidth: H0 j: B0 e; I. o. ^
1522. Y' }, v  N1 i3 Z1 U; U
// 打开新窗口+ f' e* e6 B3 F3 s
window.open('https://www.baidu.com')# _( i9 q: l3 N# T3 ]" B& T
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
; F6 @2 `% I5 Z; f// 关闭当前窗口
( [6 ~" H, e* X  R" ^" \  owindow.close() : u6 Q8 {4 X; \/ ?7 i$ d( N
//  后退一页! T( A# }9 L+ j+ P
window.history.back()- o- U: Q! ^1 w- C7 n. O
// 前进一页4 a  B2 {/ X( [( x" d
window.history.forward()
7 v: S; P9 S/ a2 K( d1 o* a  l//Web浏览器全称
* K5 @7 [  G" K+ Ewindow.navigator.appName
7 h7 h/ k: B4 c4 n'Netscape'
6 a# H; |! j! L+ R( C5 S' r// Web浏览器厂商和版本的详细字符串9 K* i# s! P0 L% F+ F7 f
window.navigator.appVersion3 N& ^0 G5 Z5 w* F  x
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 j( a( V' x5 B0 ^# R4 L0 x// 客户端绝大部分信息9 P0 B. Q; E- E* m; f6 @
window.navigator.userAgent% D; C1 _5 P9 n  I
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36': n4 h$ P" Z5 b% ^) U% |. a2 X
// 浏览器运行所在的操作系统
) R9 a' x/ a9 a# t, y1 owindow.navigator.platform$ J+ ]8 |$ t/ F9 C- n; ]( Z3 _
'Win32'% Q1 a& G; M  t& t8 v( _' U- T
& Z5 l  r- x  p7 j, e, P$ K
//  获取URL4 w+ c) K1 v8 |6 h
window.location.href
+ @/ v! {* [$ b5 I! D# d1 ?// 跳转到指定页面* {- B1 z: J' o* d
window.location.href='https://www.baidu.com'4 z- C" P* @2 _& {/ g
// 重新加载页面3 C8 _& F9 j) z( q) e" x
window.location.reload()
% y0 z% ~$ ]& ?' Y! n* P! K</code></pre>, U6 h& F9 Y; s  b% J! x6 ~* G
<h3 id="32-弹出框">3.2 弹出框</h3>
+ x( w0 a) R7 |* a0 P<p>三种消息框:警告框、确认框、提示框。</p>6 G4 O1 b+ C7 Q, k/ H7 v
<h4 id="321-警告框">3.2.1 警告框</h4>
* Y1 x# @6 `3 A# ^; [, }0 g<pre><code class="language-javascript">alert("Hello")
* W: i% }- W$ L" D4 z; Z$ N</code></pre>' `8 M# Y5 n/ I8 t. f
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>! |5 f# r# k, U. |* ~
<h4 id="322-确认框">3.2.2 确认框</h4>
5 O4 s' e! C( i  J  R, v<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
% K- y! |4 P+ P8 r<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true+ o4 h6 M! H1 @4 L  T4 C7 F% w
true. c' d9 [! g; t# L0 l6 l7 z
&gt; confirm("你确定吗?")  // 点取消返回false6 }2 j2 a9 m* M7 X- H: J* j, |# c
false. q" c( R3 m( [* O1 J
</code></pre>) }/ J' A- {' I: j
<h4 id="323-提示框">3.2.3 提示框</h4>
& [' A) E" z3 m1 s1 g2 a<p><code>prompt("请输入","提示")</code></p>
( A  ?; {% s/ D0 @! d3 k8 s<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
3 ~! P' H4 M& k! R  p$ E+ b<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
3 i! f+ K7 g' ]<p>如果直接点<code>取消</code>后端收到<code>null</code></p>  N7 l! s$ B' B+ B
<h3 id="33-计时相关">3.3 计时相关</h3>; d9 H% _* d! A. o4 X
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>/ T, s  Y1 U. J1 q) C
<pre><code class="language-javascript">// 等于3秒钟弹窗
2 R5 r! k  }; q! A, Z. K, ^setTimeout(function(){alert("Hello")}, 3000)- N$ c0 {- e9 C! Q, z3 V4 A% }; q
# Y3 t" X1 r# F: [0 y
var t = setTimeout(function(){alert("Hello")}, 3000)% `4 G; O) `  Q, F

  F. |& K6 v* K$ r3 c) y// 取消setTimeout设置$ g, t9 @& \- |
clearTimeout(t)9 i/ n( ~0 Q) {1 c; X; u) s
</code></pre>
1 X7 v- b! w5 t8 G/ _0 J<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
6 V+ Q6 v9 V& ]<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>9 x4 r; l- ?* g: N
<pre><code class="language-javascript">每三秒弹出 "hello" :4 [/ k! R8 j3 M, e- H+ o* |
setInterval(function(){alert("Hello")},3000);% X; V3 i  w, q4 @, U! ]
</code></pre>, I1 L  q2 Q2 \6 R! {
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 s  w! \! s2 M4 _. m<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 n) [. x* c, Y; B//取消:
+ k' j: l& j9 q, L" xclearInterval(t)
) V- ^+ q# T9 |+ L& p! w( I& a* K</code></pre>
* D7 ~% c- _6 d, |# ?
' }6 u8 C3 ?. P* Q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-11-5 14:50 , Processed in 0.108400 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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