飞雪团队

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

前端之JavaScript

[复制链接]

8115

主题

8203

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26675
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
) L3 q/ G$ f2 d) m& ~
<h1 id="前端之javascript">前端之JavaScript</h1>
# z  p: \% }/ G0 G/ T1 l<p></p><p></p># E. c! {% Q( g; \
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
. t: a' }! J, V" @<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>6 {2 U6 q: F: |/ k( e
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>3 J. H  Z0 u1 [" Q: P
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
( s6 ~' L, ?$ X+ |它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
* ^. P" f/ V7 A1 z3 B4 s<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>3 c7 @/ u4 F8 I% f! H0 |4 T
<h3 id="21-注释">2.1 注释</h3>
) l) U, `: i% K$ W& C<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
  m+ [; a3 _! h  m7 q% y, R<pre><code class="language-javascript">// 这是单行注释
9 r* W: u9 L5 e- O
5 N" F" r+ }1 n! R, Z0 B& e/*
6 m# T, u) i4 T* j6 S- w这是多行注释的第一行,
. a* k1 }. o7 {3 w: {这是第二行。
4 N$ t  f* S' w+ L4 p! y  h' b*/; g: f4 z3 ~: o: Z, @5 ]. |. r
</code></pre>$ `4 T3 l$ ~7 z. h- G! k
<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 N6 m3 z/ [0 v4 o& r6 }( s<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
% ?. I# ~! c5 Z. [<ul>8 R8 }( P+ n# ~$ J& q+ z4 H
<li>变量必须以字母开头</li>
: }* t6 O+ D& v0 }<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>' ~* n7 x; _$ L: ?% d* J8 o
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
- W9 R. \& o; H/ f, y</ul>
2 Z4 U9 P* l, v  T. }) N<p><code>var</code>定义的都为全局变量</p>- C8 z5 }* O2 M# _3 c+ i! a
<p><code>let</code>可以声明局部变量</p>
$ M* S2 w; y9 [9 \/ @; x$ h& y<p><strong>声明变量:</strong></p>
, |  o7 |; F* h<pre><code class="language-javascript">// 定义单个变量
3 u5 p0 U$ i) H&gt; var name# g7 P  r! [9 h2 [& z# {$ J- V' r9 q
&gt; name = 'Hans'6 d( m1 o* y" c# ?( }
//定义并赋值) v7 e5 Y* c9 e5 \
&gt; var name = 'Hans'$ r6 q/ z1 J6 }5 Q( p
&gt; name/ L" s* {, i$ W! H0 y, J' A
'Hans'
$ p% F1 m" b& w! D1 J
$ L0 M& p1 k) y8 l7 S// 定义多个变量
; e2 a2 i7 T+ p% A* ~( \, I6 P0 z&gt; var name = "Hans", age = 189 O% e4 f" a/ P7 u1 t6 f5 a) F8 A
&gt; name9 u2 o6 P+ T3 j+ U/ j" `" K2 k7 M. X8 V
'Hans'7 `/ d( i; G' D( N' z+ l
&gt; age2 b7 C# g7 h2 l3 ?9 _
18
% Z7 h4 z- u" I# I2 F7 w7 ~* `0 X( d9 o/ {
//多行使用反引号`` 类型python中的三引号' z/ |1 E* X3 W0 U0 S
&gt; var text = `A young idler,
- N0 @% T! a, K- U3 ^' |/ x1 dan old beggar`3 \9 d4 V" H4 F! T
&gt; text
# \( |- n9 ^5 F4 o0 E'A young idler,\nan old beggar'
+ g0 I, c' k" O6 Z</code></pre>; S! C8 A5 t8 o* t' @2 t$ \" d8 U
<p><strong>声明常量:</strong></p>
. v" K. j" `3 A* O! S$ {<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>8 }& Y6 e  Q9 T$ S3 T) r+ l
<pre><code class="language-javascript">&gt; const pi = 3.14
% `3 \( S" o/ I& Q( Q+ D' I&gt; pi' `. s0 X) l; Y; y) \
3.141 B, d  @' v2 _: F( I
&gt;  pi = 3.01
6 w$ x# R4 M( l8 e+ o6 B0 t7 tUncaught TypeError: Assignment to constant variable.
8 P, K, H: t# u- M6 b    at &lt;anonymous&gt;:1:49 u# ]' ^0 f" ?. r! j1 B
, B* k) \+ A; ?8 a
</code></pre>* l5 @: w: `5 i6 z2 U
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>$ s+ l' i2 L$ Q) d) P8 [) b) ~
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
5 K0 ]& q4 {( T; ]4 [. E% O* L$ n<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
" h+ J- K  R0 Z4 c+ f; Y/ c/ j<h4 id="231-number类型">2.3.1 Number类型</h4>
2 a0 s. E4 K6 y) _# Q+ [, j<pre><code class="language-javascript">&gt; var a = 5: q3 c) I( ?0 M: X  w$ U  c
&gt; typeof a   //查看变量的类型  
$ s6 [1 C7 B. G! i! P7 ~3 }4 E! |number
$ ^7 u- a7 V' E9 p# `; A6 `, E! T$ e4 D& {( [8 ^% i/ _
&gt; var b = 1.35 X9 x( d( ], F; ]0 ^/ f* `
&gt; typeof b
+ M: a+ @3 N2 _" Onumber; a8 D# u3 o7 o, z* H8 H/ [8 b8 A
* c; r$ M! N5 r5 r! V* e
// 不管整型还是浮点型打开出来的结果都是number类型
; g% g# i. [! K( a$ D7 N2 u
  v/ m- o, g2 K  h" Z/*
7 S4 |# x1 Z/ z: iNaN:Not A Number
9 Z$ g6 n+ T$ E  G4 j, C; }NaN属于数值类型 表示的意思是 不是一个数字% \) C" k* }" |1 g# y9 M& a
*/
0 u& \# f$ s( x5 X/ y, X
0 C- |7 |+ N$ O# T3 SparseInt('2345')  // 转整型
7 P  H- F# o1 H6 h6 I8 K* L2345
  k8 Q0 {: `# v3 a5 ?- D" W7 ZparseInt('2345.5')
, K% V) c  z/ }; t$ `5 L) X2345
# w# H8 W) m: uparseFloat('2345.5') // 转浮点型, r: Q7 x0 ]* D& }1 R$ ?
2345.5: z: Q1 p2 \' m, G' ^1 M4 }7 P
parseFloat('ABC')
  d# r6 f! s1 V5 F! \2 C( WNaN
/ |3 Y+ y% f/ Z/ N" iparseInt('abc')1 d7 N) V/ x% p( @
NaN+ i! N7 ]3 x; z! a. l
</code></pre>, a$ ~; R9 L. p8 {9 i- }
<h4 id="232-string类型">2.3.2 String类型</h4>) b1 s6 K5 y- l8 q! v2 t8 `" e
<pre><code class="language-javascript">&gt; var name = 'Hans'
" l+ W: N) w/ b8 ~2 o+ v' u&gt; typeof name
$ v& n2 h! ?8 S'string'
6 L" {: \0 J# @+ {/ k' f& d5 h
' C6 r: y' \6 ^, {# d//常用方法
, L$ f- z( `5 d) r* O// 变量值长度
) e: Y; x  v6 r&gt; name.length4 d9 E& y  j; P$ I
4! r: C$ K! I; U4 Q! Q6 E* P3 l: D
// trim() 移除空白
' i4 e! Y0 S8 f& v) c, @. q6 ^&gt; var a = '    ABC    '
0 E' E2 r( w1 o7 T) B, g- S&gt; a+ t* l* o& ?/ e1 m. `. T+ @  Z' g
'    ABC    '. a! D& J  P8 i
&gt; a.trim(): K; C  X+ U$ J& d% ]
'ABC'  w9 @- q+ s' K. Y, M
//移除左边的空白
* ]7 O: o( U9 R. M! F- w! F&gt; a.trimLeft()
7 O  Q! j6 D) b3 W4 i3 H'ABC    '# M1 L/ l4 W9 h4 K( W. A* r( T: ^
//移除右边的空白
0 Q* L! a: Z& h& r) i: Z3 i&gt; a.trimRight(), p! Z" m  V3 X  j! T3 u
'    ABC'
+ ~# k3 h" H, \! E: R) {" \8 U- b
/ G) o! s7 O; I' O6 Z2 W//返回第n个字符,从0开始
/ f. j' {  k, t5 S1 s# ?$ q&gt; name
6 }) i, z- y6 M7 \2 |1 D! e  @* o'Hans'
  S  \1 b# X) P, E: O6 N% x" D&gt; name.charAt(3)
. a: ^0 y# J- [# W2 q's') M5 x) R3 F# z7 ?+ f
&gt; name.charAt()* {( t6 ~9 I, m0 R
'H'4 N0 m, K$ i1 [
&gt; name.charAt(1); x/ W  y! u1 U- U0 Q/ ~8 g" P# P
'a'0 p9 ~' }7 w& ^. p- [! V9 A: W

& s+ q( B; @. V* U) w// 在javascript中推荐使用加号(+)拼接
  ^/ j( k9 }, Q% S+ d' `&gt; name
* i/ }! e) H# ]5 ]1 K+ ]'Hans'
, ]# S, I0 R8 M/ D! o2 }; {&gt; a
7 O2 {$ ?" e/ S3 l'    ABC    '
7 y0 [: {6 E9 B, O" |( w&gt; name + a8 _: p- z* z: d) B; M( v
'Hans    ABC    '
3 x( @& G& J; Y) @3 H// 使用concat拼接5 y. i# X8 l- d3 m" o, V/ _3 T9 U
&gt; name.concat(a)
7 r. W  d' g) B'Hans    ABC    '
( f$ E- {% G7 O& p6 N& |$ [; @  o4 B
//indexOf(substring, start)子序列位置
1 q, Z2 t; u, I# f- O. s' s! A+ G# I+ G4 x, P& W% ]5 L4 B* }8 D, n
&gt; text
; f) C! {' X3 w'A young idler,\nan old beggar'2 l$ F, m, D) j4 K
&gt; text.indexOf('young',0), R5 j/ C1 |3 w: s# p
20 G- ?) w) l2 m+ n

. W( H# ?$ J! i) D6 d9 b% w//.substring(from, to)        根据索引获取子序列7 G" }( }! h* _% N
&gt; text.substring(0,)
3 V5 m  [* ]1 r' r: T'A young idler,\nan old beggar'
" }% v( {' N+ d7 J. b&gt; text.substring(0,10)1 |# J* l$ z# u! g7 |
'A young id'2 I4 P- O4 R( s7 m. j4 S  o# r

. G3 s1 ]$ i* @3 G9 H* ?6 I& P// .slice(start, end)        切片, 从0开始顾头不顾尾$ P5 S# P2 Z, g- w+ j3 p5 V, M
&gt; name.slice(0,3)
0 \& @# R. h! X4 n- ^% ~'Han'
. s: }. K4 U% V1 I9 {7 L
9 V1 j* V5 `- l/ f. R9 @7 x// 转小写
) T1 X2 w) `6 ?  `&gt; name
+ u) h/ k4 N2 i6 C. Q'Hans'+ W% N9 A9 z0 t! C
&gt; name.toLowerCase()2 o5 g+ p+ l3 Z
'hans'
1 _" C  [: A5 {6 S9 V" R: S/ V// 转大写
8 N! L6 `3 r0 y9 s&gt; name.toUpperCase()* v3 Y7 r, P! t9 D" N1 ]) d0 H  Y
'HANS'8 k% I5 x; S' x; ^' C

7 {7 {9 i! X/ M# r8 R/ Y5 A// 分隔
# S' `+ d% h+ n; S3 g( Q&gt; name' c0 y5 H& y9 J: u/ v
'Hans'! _: P) a6 a% M( h0 o" o6 C
&gt; name.split('a')
6 L' l/ J% E2 V. ?" r3 Q(2)&nbsp;['H', 'ns']) ?5 C" p6 H, t7 x% |# U' w
</code></pre>$ b3 S+ p1 p& m3 O; ?: I7 f
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
) G' J4 e9 s! @/ W! m% Z2 W; x( r; H<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>4 M7 |2 h$ a8 ?  p
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
7 k6 l; @8 {6 O; E7 o( p" E<p><strong>null和undefined</strong></p>7 y+ B* C5 m% S  A* T4 j* f
<ul>5 A( A6 r! Z- M
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>& A0 Y1 F% x+ D; m/ I6 N- e" x
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
! Q1 s/ [7 F4 X+ Z# R$ {/ A% n7 I</ul>" r$ H+ K8 f4 P  m5 z2 n% \" k
<h4 id="234-array数组">2.3.4 Array数组</h4>: V! `2 ~! x6 m% ^9 f
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
6 H  J3 g0 n) s* e1 {<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 9 b: n( b0 j$ `0 f. j% I# f; `
&gt; array15 j. n" K9 o( u5 ?2 W8 W
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. v% [8 Z! h" m/ y/ j  h. B5 X
&gt; console.log(array1[2])  //console.log打印类似python中的print
; {: Z! ?3 U* x1 ], O% ]- O3 R3
7 o3 k! |) E, K6 W// length元素个数$ H7 U/ Y4 P/ g  _" p
&gt; array1.length! _* {* W& k" G) H( x
6
; g% u4 _* `9 D( Z; M6 x: y// 在尾部增加元素,类型append
7 X8 Y/ j; a4 p$ s  n- o&gt; array1.push('D')/ n5 |9 I! [/ c! I5 C7 w  g$ `  b! t
7
0 K, W$ ~' M! q1 N6 C&gt; array1
% ~* T8 @. a% R3 `0 g4 I( p& p(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
( g2 I' o" Q; V" x// 在头部增加元素3 n. Q3 w4 R* m0 N& o
&gt; array1.unshift(0)1 Y: c) \1 k7 I0 L0 i0 [
8
5 ]1 {( G- b, W1 f3 U9 q: ~/ Y8 V&gt; array1( R/ d9 U( c1 T: ~5 |- Q) b
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
* F5 e2 W$ K# p! }7 f, A# B; {# f$ j2 k: ]4 Y! N
//取最后一个元素
& \0 Q4 Q0 ?' P" y9 r' i; \&gt; array1.pop()
# q  V* ]0 b8 v3 q'D'
9 O$ z& Y5 E) @3 N" Y0 P$ J) ]&gt; array1# t% a% Q7 x+ G, u; A0 J
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! l* x! @9 s* r//取头部元素6 M6 x) B8 g* c
&gt; array1.shift()8 }/ d4 q" i- Z4 _& X# W* N
0
) j8 J1 S! S/ G' T! U& o$ c) t1 |&gt; array1
( p& K2 ^1 X  u8 D3 B(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 @: j) O2 a+ \3 s
) \8 Z( ?) a5 [$ J4 S//切片, 从0开始顾头不顾尾
. C/ z  G2 l5 k% V) S0 |" s% k&gt; array1.slice(3,6)3 b, Z5 K4 s: P
(3)&nbsp;['a', 'b', 'c']
% ~. ?1 Q; f6 ^; G// 反转
- X: q# n! R/ o* ?&gt; array1.reverse()
; ~) U: H5 K# e4 p5 q(6)&nbsp;['c', 'b', 'a', 3, 2, 1]  U, Y& o' i0 F! h( h5 y) \# C
// 将数组元素连接成字符串! b* E  ]- v7 i$ ~2 a) E5 R2 `0 x+ I
&gt; array1.join() // 什么不都写默认使用逗号分隔
$ D, N, A: E- g'c,b,a,3,2,1'
1 M9 U, M& m2 p8 x* X&gt; array1.join('')
+ l0 a( G* _8 G& b3 ]$ z8 \! }'cba321'5 f7 i0 g* d( d8 x! I, J
&gt; array1.join('|')
4 U# H+ n/ g5 Z: L6 V6 i8 S'c|b|a|3|2|1'
/ Q. n* C! z0 }: j" H* F8 A# D# @. m
// 连接数组( u1 U, b+ x& d3 H6 ?' b
&gt; var array2 = ['A','B','C']/ \, ^5 K5 d- ~6 c4 g& j4 _
&gt; array1.concat(array2)
6 Q. Z: o3 ]2 x(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']/ g! r$ d, A( f, u
5 a( Q1 O' r/ ]  n1 p; V
// 排序' ?4 @: t: n. Y8 K0 P/ }
&gt; array1.sort(); p- G. _8 b- \: Q3 Y- V2 ^
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 d, Y3 `8 e9 H+ ?
$ ~& l; L) d0 E; ~3 J9 q% N: K// 删除元素,并可以向数据组中添加新元素(可选)4 ^5 `0 ?6 I/ x5 w  X& t
&gt; array1.splice(3,3)  // 删除元素7 T' I: K" [  B8 Z9 L
(3)&nbsp;['a', 'b', 'c']
  k  @5 e: ~" Q0 w3 c4 q! x8 @# H1 n&gt; array15 g- t. H) K& [) X6 O  c4 T+ u
(3)&nbsp;[1, 2, 3]
$ n: I8 _5 @2 y$ b&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素- A6 c5 p3 s  z! w# [6 C
[]
+ s7 r# Z- C. q  P&gt; array10 ~% A1 h+ B" v* r7 B1 Q$ ~
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']9 o" z, [' W0 }) v+ `% q4 k3 w
7 i2 k% U) ^' a4 W& r
/*5 \* L7 E8 W* i( b/ G( X7 \; I
splice(index,howmany,item1,.....,itemX)) P3 H3 g, b: M" u2 _5 f% }2 g
index:必需,必须是数字。规定从何处添加/删除元素。
: |' L* t* L: Q  Q- k4 xhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。( C( a1 U1 k- _8 q
item1, ..., itemX        可选。要添加到数组的新元素
1 ]. @  U& ]! G7 e4 F; q$ {$ w; ?. r*/
8 |; F  L- C$ h% T" \
; Z& S8 j# }4 P8 I' ^// forEach()        将数组的每个元素传递给回调函数# G* i8 k' h* }1 Z5 U' b& p; \  B
&gt; array1.forEach(function test(n){console.log(n)})
0 ~' B! f* R( q. ~  x 18 }& N7 d, T# y0 q1 J! d  d* g
2
" J0 w1 r* Y* n 3
( x2 {; t- b# @: ^# q* ^ A
8 N( u9 N5 m" m B
3 o& q. S  h4 @1 h( J C
7 K8 G1 W9 r: r7 u+ B// 返回一个数组元素调用函数处理后的值的新数组
: ]2 p! H3 M) A&gt; array1.map(function(value){return value +1})
: i8 y6 }# M0 T* D# G(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']( ~/ r5 J3 x' ?
</code></pre>4 A' H) G* q- z- y. H
<h3 id="24-运算符">2.4 运算符</h3>: @3 v& j% {- o$ D; G2 x
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
& v- s$ [$ D, L9 L) c3 g) D<p><code>+ - * / % ++ --</code></p>
" v- ~) {2 M0 Y* W<pre><code class="language-javascript">&gt; var a = 6" P$ V9 h, d; ]; x$ A
&gt; var b = 3
4 r  H. F9 n5 J// 加. s; d) |$ X4 B- e; g# }
&gt; a + b
, ~7 }4 `3 s2 d, r8 p& ^9
/ |% q* b$ ^% S8 C" n1 Q0 |  ]" j// 减* N. Y3 O3 K, V: G! D' i, H" ^
&gt; a - b
7 L* V  X" Q  g* j$ ?3; \- _+ K9 |  f$ X: o: S- c
// 乘
3 n* v' k# N  F2 N3 H&gt; a * b
, J9 R# u$ d4 [' k  L! I8 L; `18: F- z$ y5 ^. A: Y, P" x$ T* Y+ p
// 除! ?+ }6 ~& z7 Q5 F1 ]2 x- q
&gt; a / b
5 @3 O( a* B$ V4 k* |% n2
  N3 u% s; w( E6 J7 B% c1 L// 取模(取余)3 R' F% s7 \$ q
&gt; a % b
6 m4 U' \, U, O3 ?0 g% W05 U2 G5 V! v8 x6 N
// 自增1(先赋值再增1)5 L+ N  l9 s0 L4 X" p& }
&gt; a++& z  z' L) H9 w0 @) P0 z
6
6 Q& o- w3 ~' @4 r&gt; a9 t: |  B) i8 _
7
7 v$ ]. Q: K$ p* g. n  B// 自减1(先赋值再减1)2 i. c# }, W* w) i
&gt; a--
0 a; t: Q5 A9 Q! @7+ F$ l. }$ x3 v  }3 J
&gt; a) ~; g, h: ^& f# A1 h
6
7 N/ `0 T. ?7 g  R! n  k; J  J// 自增1(先增1再赋值)
. b6 s, S! D0 i: E&gt; ++a
' P, P( _7 m8 W3 X& q6 p( U& v* g7, y. X8 h* ]$ K$ h7 k2 \5 ?
// 自减1(先减1再赋值). K6 v$ ^2 q5 C) w
&gt; --a! N5 ?) p8 g  `$ `- {, T# T
6
+ n7 Z- E& M( V2 z&gt; a
# u; S9 O9 G5 Y! d  C6$ [- P. q0 p2 P7 Y* z. k
4 q5 i) g. C) o4 s1 [
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ p4 i3 V3 v8 i9 T: Z- w' s3 O</code></pre>
% o) [  o$ d) s' B9 [8 Z<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
$ ?4 b, X( v, k  ^<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>7 f; o' b1 k/ [
<pre><code class="language-javascript">// 大于" U3 R. f2 I+ J2 L
&gt; a &gt; b: i7 J3 c) V0 e* P9 \, J8 @5 o
true
4 ~, {$ c# r" z4 E; G1 K, k! g" C// 大于等于
& n% W# C7 w5 e&gt; a &gt;= b
7 G& s/ Z) X- ?4 I+ t8 ytrue
. K  [" y; P4 V& o// 小于
& \+ V! k0 E1 @9 t/ m/ k4 C&gt; a &lt; b: O- j/ O. L3 T1 k" N7 O
false
' n" K' ?; z9 X7 i. S2 N// 小于等于
) i0 E# w3 o: x& R% p&gt; a &lt;= b0 q9 N, w! j! o* i# l  i, B) e: n0 b
false
5 [8 j6 W! x$ J$ M0 s; ~" @9 |5 ?// 弱不等于7 z1 W; ~& D4 v( A
&gt; a != b& L, p) ?4 V9 V" A- T
true
  G; {* ?2 N7 K% c6 E1 C// 弱等于6 z' e! Q5 ~" `) ~
&gt; 1 == '1'+ i' }/ N# ^& N' S, S3 c/ V
true
: a4 o9 l% M' m2 y; [* a8 O1 [// 强等于
8 E6 V) N% K3 o2 S/ g&gt; 1 === '1'
: R" g/ `2 e' v; c) P* zfalse
) v2 O: f+ A2 p; y' Z$ m// 强不等于
' V; z* G' s# i/ D$ R&gt; 1 !== '1'6 \( G" x4 U! N% H! ~7 N1 j; V
true
( b% |! H7 `2 ^$ `4 f+ _, ~
1 f; o+ K; m- [1 V( {/ ]: x5 i) X& ?/*
/ H& D, C. s- s  G* u4 {JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
: z1 m% _6 E, o; W*/
# ]# |, T! E; }& }5 \</code></pre>* [3 ?5 H- B. l' t1 m: u9 A
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
) `9 s: P& W* {<p><code>&amp;&amp; || !</code></p>
2 a3 u; d0 m/ e- j6 R<pre><code class="language-javascript">&amp;&amp; 与: R) ~$ ?( O, d& _- l! b7 e& F
|| or ) z9 j" z- ?! Q2 }
! 非
( o4 B9 w- w& e8 l</code></pre>* y5 N- k' g4 G6 g
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>+ Y8 Z; m: g% h
<p><code>= += -= *= /=</code></p># x& q. ?9 B. w8 q3 e  x
<pre><code class="language-javascript">// 赋值8 O: u& @# l8 ~, {. ?
&gt; var x = 3
9 @& d! \$ ~* `. A+ l. o// 加等于
, k; C& j; l! S/ h( }&gt; x += 2
5 _' g% D! L- F7 v5/ k# D; @2 A; B; X8 C& {3 _
// 减等于! }, [5 x4 h$ g; j
&gt; x -= 1
: Z1 g. z& _8 W# F4- j; J$ U" G& e( W- Y
// 乘等于& B  S2 d! x( n8 O  ~: Z$ r
&gt; x *= 2) D( M) U( z( \/ b$ }
89 b; b+ q: L0 f$ [
// 除等于- I9 ]; e. ]: R1 r/ O4 Q
&gt; x /= 2. l- ^' O- W; A% x& b
4" l  D! t+ G1 ~2 s9 y/ C/ L
</code></pre>
) m* b: D; C9 Q+ f4 E<h3 id="25-流程控制">2.5 流程控制</h3>
, j5 f( e: L; |0 F1 c$ J! D* ?<h4 id="251-if">2.5.1 if</h4>1 A( f7 j+ n# x9 `4 L) a$ v) c! t
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}) r: T+ [* k) o. @/ V$ }0 v; E3 m

& s  T, F2 {' |: X&gt; var x = 3
  p  J* G. V% S&gt; if (x &gt; 2){console.log("OK")}3 Z6 }0 z# W* X* b8 A9 p
OK2 N- Z2 G& `+ f
4 Q$ n# T9 D9 h/ V, E, r- ?
2, if(条件){条件成立执行代码}
7 H, `- S. w4 u% r+ w' E& V  f        else{条件不成立执行代码}# y$ z0 n# C$ b7 k# ]

2 o& v/ h* m4 R' @2 G&gt; if (x &gt; 4){console.log("OK")}else{"NO"}: U# V5 q# n2 q3 v, z+ X3 o+ P
'NO'
" `6 `8 [$ z' |: l1 g& V4 S' D3 T
3, if(条件1){条件1成立执行代码} " X- U' Z2 ^! W% ?' B& K4 }
        else if(条件2){条件2成立执行代码}. K" G7 M/ g: k- ]' p
    else{上面条件都不成立执行代码}
  u# ~- \; R& H+ G  N5 W1 o' o& c. l8 n! F( ]! Z
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}8 r& `6 \5 S& V) ]4 q
Ha
8 S0 Q# \# b7 n+ ~7 H( I, n</code></pre>
. a2 i8 [9 D- o3 [0 Q<h4 id="252-switch">2.5.2 switch</h4>. H* K3 M; y- l
<pre><code class="language-javascript">var day = new Date().getDay();( @1 m6 Q2 @; \- J2 U7 ~
switch (day) {* T- ?% ]' {+ S( ]5 u. N
  case 0:( e. U( o7 ?: t& G6 X
  console.log("Sunday");
6 `- g8 P2 x" F" V$ q  break;, P6 D' J! ?7 ~* I8 d
  case 1:6 @4 q# w1 k: f
  console.log("Monday");6 F$ `0 I4 P/ t$ @, S
  break;7 R" y' _  _, P8 A4 }+ p; p
default:
# N4 `5 Q8 Q# x- F2 C% q  console.log("不在范围")8 A3 ?& e, u9 R$ D1 M' s
}
7 Y2 D) l. B9 [) K7 Q 不在范围, o, C4 D0 Q- E6 p! t# c2 c
</code></pre>; u- z3 w4 ?% z7 S
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>/ L, @0 a, \5 Z2 R: S7 {
<h4 id="253-for">2.5.3 for</h4>) ^* a% _& U( e* U
<pre><code class="language-python">// for 循环+ a0 _6 `: Y5 \1 }- F! n! N
        for(起始值;循环条件;每次循环后执行的操作){
& q$ a! K8 d8 p. B" v4 U        for循环体代码. d3 l3 t! r  X* N8 Y; I
    }
0 Z% J" {% v) C. c8 X# P$ b. }' c8 h8 s7 L. w5 d- y, L
for (var i = 0; i&lt;10; i++){' C! V+ _7 _* S# G6 c9 F
    console.log(i)5 @) R2 e8 E/ Y, {5 J0 ~  G
}
% s, N7 I+ m; v4 O  T  J, O% v1 M        0
; T" p. L2 Q, K* ], L! |        1
( t8 R( F3 N) Y4 }        2
, w  ?4 u  n+ w2 v( m* i1 N( P        3& H% ]+ e! Q& O& M
        4* e5 \0 }! n+ X2 g7 t
        53 |# ]) ?8 U6 `2 {) ?( F
        6  }3 t# h  K; z+ I
        7
0 x* y. T! b8 [# _* v# }        8% I# Q4 ~" h. [. |( N3 \. k# d0 o
        9
# _6 r- [; u# _, c1 m# i/ R; \+ p</code></pre>6 e" m( z2 x% s4 c: z
<h4 id="254-while">2.5.4 while</h4>  n' C9 k3 {1 p
<pre><code class="language-javascript">// while 循环: n6 `; `' U+ T; |" O  A/ Z! A
        while(循环条件){
% l! [" t% {6 m* ~# V) p        循环体代码0 t6 G7 Z7 B0 ]- h% T# T* J
    }
# x% l7 t& f( \  g) O/ v! A/ m$ A# L/ F( h
&gt; var i = 0
1 v5 j3 v2 \! k9 }&gt; while(i&lt;10){
" W) x; D3 P" k2 Q9 O    console.log(i)5 P& i7 u3 P5 l! _; L5 p
    i+++ B( q" a0 q) Z: L
}
! f0 L8 Y1 b, [7 E 01 b- b$ `" n. u0 q, W1 ?  `' U
1
  T7 O6 \9 @, f 2
2 v5 k4 t2 B; t 35 p( `" ~9 Z9 x7 F3 n
4) h# D* Y7 G/ h* k$ b1 i4 Q
5
% d4 r2 W# W# U( y3 W" q0 X2 t 67 L) B+ v% ~' h- ~& |2 S
7- U1 r, i( ^, c# f$ F8 |9 u* Z
8- ]# ]0 K/ }' ~" Q8 b5 a
94 V, m, z& H, ~/ f5 }5 B4 L
</code></pre>- t2 @$ W6 Z' \  n5 d7 q- e; h
<h4 id="255-break和continue">2.5.5 break和continue</h4>* b- L" Q! }7 N5 V
<pre><code class="language-javascript">// break
' H) }3 Z  W* G3 qfor (var i = 0; i&lt;10; i++){% `2 w1 V) o7 d  w9 v
    if (i == 5){break}! L( O/ h: z$ j. i
    console.log(i)
9 O/ {5 m* o6 ^; K9 K( w1 p5 T- l1 J}: J, s- ]7 Z# N: |" Z8 f
0: `0 s0 V- G& N
1
0 i) P, l8 h+ B4 T! {( f8 G3 D8 F 2* @' A6 a) |8 h/ |% f8 r
3
2 T6 _- n+ h; T/ J9 d4 F  J 4
: N1 y8 q' }) W  r5 B) O+ O2 e4 P// continue! r9 Y4 l8 s' e& ?) ~8 P2 K1 f
for (var i = 0; i&lt;10; i++){
2 v: w5 Z, q, ]8 H1 M  v2 _    if (i == 5){continue}
: u: B$ k5 x3 T9 j- j5 H    console.log(i)
" `  o5 z- P! _1 B}
3 w. I, ]* h' m' U0 _ 0
$ ~. `2 i, E2 f 1
9 t4 ^/ q( z6 R! Q 2" O# z3 t2 _: K
3
" f' A+ H% N* S1 J  K; l' [7 E 45 i. ~5 l. G% D  G6 M5 Q
6
- f" p, _+ b# Y/ w; |% G 7
* C2 i; }8 |& R( U" E8 k7 R. k5 ` 8, p% A9 o& K6 @7 k$ |" x" m1 l
9# [! O5 H: v9 N+ c! q4 ~. _: L
4 p* T$ X9 A. `) X( h6 Z, T
</code></pre>
5 Y' p  X+ ~$ L<h3 id="26-三元运算">2.6 三元运算</h3>
! m% X* J8 k, U6 G2 l4 ?% |$ C<pre><code class="language-javascript">&gt; a: S" _; @8 k$ S7 l
60 N2 i  V7 m  ^+ y: `
&gt; b0 P% L- }/ @6 E: ~8 D8 }
34 V/ ?! F/ u( O

$ [  `# t9 g1 `//条件成立c为a的值,不成立c为b的值! P5 p5 q. @3 V6 l
&gt; var c = a &gt; b ? a : b
* s2 N7 i5 w5 v: b&gt; c
) d1 r( l! h. H+ j! I0 [6
; u9 I( E' z* ?; x# w3 ~
9 t; l2 ^! L5 L- k// 三元运算可以嵌套
7 u) V: o( k9 F% I3 N; U</code></pre>5 j) B6 _1 H4 Z$ D5 O1 e$ M" C
<h3 id="27-函数">2.7 函数</h3>
/ @0 W/ m5 b% f<pre><code class="language-javascript">1. 普通函数
- A! j: G# x' Y8 t( o8 C&gt; function foo1(){
# K7 m1 t+ \- O! Z! o$ O# A/ e    console.log("Hi")
/ K( ~# |. M/ `}
. A8 I# X4 o6 M# Q) T
) g- h! a. Q, J7 i&gt; foo1(), G+ N8 e" l5 ?( c) u6 M
        Hi9 \& `0 @* q/ @6 j3 w
2. 带参数函数+ p; K+ ~3 G1 U
&gt; function foo1(name){
% j, A. }  |9 a% Q6 b2 O7 C9 x1 hconsole.log("Hi",name)$ {: ^7 {+ b5 t1 Z" p3 g
}
, B' \* L0 ?' c% @0 g3 g8 i
* I: U+ A( n' L6 ~/ h+ [' M0 g3 t# M&gt; foo1("Hans")
3 J+ v& b7 @3 P3 \( j; H' THi Hans
  x) ^- V, W' q$ G7 }1 P4 t) y. X, Q. c  A. {3 x7 ~# j
&gt; var name = "Hello"2 a. s+ W, V9 ^% E; p% J
&gt; foo1(name)  H3 {4 A7 x; c( y! ~7 V) O  l: P
Hi Hello: l/ ?& [2 b7 o) W7 n$ c- f

6 Q& i$ `4 q8 {$ M& c1 h# Y+ l1 E3. 带返回值函数- D' U. P" J; K0 t" F' Y1 L9 l! U8 C4 F
&gt; function foo1(a,b){- _* E+ q6 {7 ^' g' ]8 A
        return a + b   . ^& `0 D1 I5 S: l0 {) \
}- m  y0 n  D0 }' P' l' A- N0 r' H
&gt; foo1(1,2)
9 F: ^/ @1 ~- r3
5 R  a$ i7 w3 c) q% h3 `) [&gt; var a = foo1(10,20)  //接受函数返回值& q$ F' F" M4 ]. a( a
&gt; a
4 |9 L' a! a8 V& X7 J/ s4 C30/ d" m& o+ u9 o* m

' `, d8 @8 M' \, W4. 匿名函数
2 j+ w0 d6 d2 Z! N% s' A&gt; var sum = function(a, b){
: R  v! Z' K+ a4 o/ r0 g* L% M4 g  return a + b;/ M8 u. p* m6 Z$ E$ }1 g5 ~
}
2 {; i- P! G9 m&gt; sum(1,2)5 A0 }5 e8 f+ p6 U
3
! {( o  [( S% X( R0 s( R  W3 m
$ F4 q( x, f6 ?4 c& c# ~0 V// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
& H3 Y% _% O% ]/ t1 \8 Y&gt; (function(a, b){: |1 Z9 r6 @3 d, N
  return a + b( a8 J( [- `3 C
})(10, 20)
2 C. ~( t0 }5 b9 `# I  O5 |- P30- w2 L/ i2 G- M# S$ e
- b% A9 T  Y8 O- S
5. 闭包函数
! _1 n5 P+ H" i: u// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数- ^, I- p4 w2 y' _
var city = "BJ"
7 _# q) w/ b0 U4 V) Ufunction f(){. [4 [; P' [) g% r7 h
    var city = "SH"
* k" d4 H+ g' e6 M- T    function inner(){
- b$ S, V% `: c& M4 [        console.log(city)
' f# e5 j" a% p+ \    }2 n1 ^* \% J$ H; u
    return inner
% l2 m' f9 `$ @; U: _}
: C9 R% o9 Q, L9 u3 @var ret = f()% p1 z$ m' ~0 r5 j& f
ret()
! r2 l/ C; b9 J执行结果:- i, p9 I0 E* w$ ?3 H7 t0 O
SH
) C" ^$ ~1 z% ^+ F9 @. T2 A' J8 N$ {
</code></pre>6 S0 E$ m! R, I6 v
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
5 ~; T0 s. w" z1 z9 U5 f  L9 `3 u<pre><code class="language-javascript">var f = v =&gt; v;
7 _3 Q# X  I7 B: Y; I: `! C0 |// 等同于
4 Y& G0 B6 I4 q% T: p) q% @var f = function(v){& u- T1 t  _  o
  return v;
: J$ ~& W/ G, k1 `: J+ ~}
9 X3 j& r, k% D0 R1 e) n</code></pre>
6 ~3 j* ]6 Y3 p% Q<p><code>arguments</code>参数 可以获取传入的所有数据</p>
+ T- w4 Z/ Z6 g) y( B$ A) V<pre><code class="language-javascript">function foo1(a,b){
# a4 f! Q& r' `6 p; S    console.log(arguments.length)  //参数的个数 0 P; y( h, \! n; L) g" p
    console.log(arguments[0]) // 第一个参数的值6 c3 J; G& W" `5 L
        return a + b   2 B, p; m* _) S" |8 ~4 V  t
}( a9 ^7 c! E% a/ A
foo1(10,20)
+ L) T# I8 A" }* Q3 @( M9 G$ I! J+ k! X结果:
) B! S/ g2 F& X1 R: R 2          //参数的个数
2 C; B( q. A$ F8 k% u% ]9 d10        // 第一个参数的值" R- C* f. ^* {2 p9 ^
30        // 返回相加的结果! W, B4 x/ |5 k
</code></pre>0 E, [  P! E9 E3 f, K4 m3 z# y) K
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>: e) J# E+ {1 V) ~& G, y# L3 s
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>$ z# U( l- Y% C/ x/ o* E: h
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>! t/ u- J$ X4 E5 R  t" X( y7 w
<h4 id="281-date对象">2.8.1 Date对象</h4>& q( F* ~$ e6 Z" y9 G! p0 U8 J
<pre><code class="language-javascript">&gt; var data_test = new Date()1 g1 U: M+ u8 h9 W
&gt; data_test
& @5 X3 R) w+ v4 {. _. J( [Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)$ n9 Q3 p( d; R3 c& r2 W/ `
&gt; data_test.toLocaleString()
  |! d" [2 H. a'2022/2/11 下午9:44:43'  H' w, p5 w& Y: |7 r& f+ e
" T) {# f4 P" x
&gt; data_test.toLocaleDateString()0 W& Y& ?  a2 f4 d( ^0 q+ a
'2022/2/11'# O1 J" N& ]( }$ X$ G/ |8 ]

$ ~& J0 r: y8 r% T" t. _* e9 p5 @$ F&gt; var data_test2  = new Date("2022/2/11 9:44:43")
1 Y0 J, p( p) |( ]' I" R4 C8 Y' g&gt; data_test2.toLocaleString()2 g3 n- E5 A) t) K% ~3 v4 s5 Z! D' i& O
'2022/2/11 上午9:44:43'
9 V. d& _( s/ E' F, Z- h
9 t+ s+ z% q6 j$ K// 获取当前几号5 B! i9 @% @( l* F
&gt; data_test.getDate()  u! \6 R- w) S: D$ n4 ~
11
0 j0 X6 I/ C* K* k  P// 获取星期几,数字表示
/ c' M0 P5 r$ x&gt; data_test.getDay()  ! y' Y3 q5 y  @4 \  @- Y0 G7 Q
5
! n3 w, t% u; {- D7 w, E! A6 H// 获取月份(0-11)' _: v, J1 A: C9 _/ X# h3 \
&gt; data_test.getMonth()
' `  N4 F$ t2 E# ~- }" L1
3 m' y5 o" ^- o1 t// 获取完整年份
: p# g( f1 R% g: Z4 V&gt; data_test.getFullYear()5 T6 t3 l4 X) x" i5 l0 \
2022
5 D$ w1 u' A. N8 ^. |: t// 获取时, |, w4 }+ d  g0 H1 [1 ?; j
&gt; data_test.getHours()
' n# C- v" q( P5 n21( i9 m* V. {5 ~) F3 J
// 获取分
+ v5 u- @, n& ?  b. W&gt; data_test.getMinutes(), C7 i4 [4 |; L) e
444 h) t% c. A  w  |& A6 E& }  G) \
// 获取秒, Q+ V2 Y* |8 x$ I8 m. @  _, p: s
&gt; data_test.getSeconds()
6 r  n  l" Z. S+ N9 w43
& G3 ~% }! V, z- D8 }& O& h// 获取毫秒
9 s* l9 [' M; z; F&gt; data_test.getMilliseconds()5 F) M' _: [. Y, v  r
290
& _! X, m' s9 e$ X) I9 Q0 w' M// 获取时间戳
. O8 ^2 _: f% K2 @5 J&gt; data_test.getTime()
7 e/ L" R* A# ]- ?, S2 N% N( W: b7 N, _1644587083290
: K7 |9 M- Q; _* Q</code></pre>2 F5 M# }( [. j$ T0 A4 _! F
<h4 id="282-json对象">2.8.2 Json对象</h4>
1 L7 F. t, |# U; j. p- V<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
1 o# H3 R# V7 B; g, A9 @1 R  W$ |JSON.parse()  // 反序列化,把JSON字符串转换成对象4 @$ e7 K3 N9 |* f# g% |8 \+ F

/ K+ W: Z( ^& ^// 序列化
) v# v' A9 c* E. o1 ]  ^&gt; var jstojson = JSON.stringify(person) 2 M) }! [. J4 T: r- ^. n
&gt; jstojson  
$ B. x, L0 @! T5 \# v'{"Name":"Hans","Age":18}'  g! h! ~9 q7 [" @9 M7 v& O

! l# p2 p, Z. j& C6 N' Y  N// 反序列化% i: F; E) |) \1 D
&gt; var x = JSON.parse(jstojson)
% Q, Q& l  z- Z) O( ^&gt; x7 X4 E, d, ]$ i1 M& o
{Name: 'Hans', Age: 18}
5 U# f2 _. a$ G- d9 @& l&gt; x.Age: i5 w" w: T2 e5 g1 H% ^3 g( m. s
18
- f+ `" [2 ?- \7 x</code></pre>& Y3 B; t% H* U+ `
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
: n+ [; f  R7 F8 W4 O9 X<p>正则</p>0 G$ w7 r  P/ R. O7 {
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ i% J+ j. U" X- y& F1 X! @0 w
&gt; reg15 m) k" D* U/ y& j% |8 ~
/^[a-zA-Z][a-zA-Z0-9]{4,7}/% o+ v" ?$ s' ~( O7 i* Z5 _- C
&gt; reg1.test("Hans666")
  w7 C3 F; `8 z$ L. T& w3 K* ~1 G/ strue
- f( I! d9 @) J. n) W3 T
! G# @: Z& J1 r: ~' }) A&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( x# j' ]2 p3 k0 E! v$ n&gt; reg2
+ O3 Z4 W1 K& Q! M; L+ ]5 ^/^[a-zA-Z][a-zA-Z0-9]{4,7}/  A3 ~4 r$ z0 N
&gt; reg2.test('Hasdfa')5 ^* S" t0 S$ d) M' ]+ t5 I7 e# v
true
7 S" R4 E3 ]! N$ v
2 M% W$ n+ ~  c; Q% u全局匹配:
, A3 X# o$ j$ _8 W$ f&gt; name
2 g. i" z+ p& S2 w! ^$ d) m'Hello'5 K1 u' w4 a1 n' ^) c
&gt; name.match(/l/)
1 E# B& ?, k" r4 |+ U3 N['l', index: 2, input: 'Hello', groups: undefined]
3 D$ G+ E) W+ m( r1 `+ H( V, ~8 e" f2 ~! M; G% A
&gt; name.match(/l/g)
3 q  }: H, C( v# p7 c0 M% X(2)&nbsp;['l', 'l']2 n. H7 Y+ i7 M0 ^9 M1 `
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
& k2 J5 v. W5 U% p3 D( q6 p) y3 [8 R& {* v1 Y! n" k! y+ q
全局匹配注意事项:& w( I& y1 U1 h$ e
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g) `6 d8 N- Y" D+ r1 H5 E. q1 z
&gt; reg2.test('Hasdfa')$ S9 }, J$ l. a- u; O2 p$ t" @
true
) @8 P+ l1 V; H; u4 |" \4 I&gt;reg2.lastIndex;% U) Y0 L6 W: {; `  V
6
: ]2 O7 L, C& i# _& X; Q&gt; reg2.test('Hasdfa')* q/ m9 R5 p  ~3 O$ G5 S) w9 r
false+ T% u1 u8 U7 N6 ?
&gt; reg2.lastIndex;% C6 T) E4 q& c' [, L: x+ \
0  j  v8 J! O, k5 B; ]4 B6 h
&gt; reg2.test('Hasdfa')  F$ K, y7 z0 E1 k: [$ ?8 ?, W- U
true
7 }2 l% y6 L8 s5 S9 A9 F&gt; reg2.lastIndex;2 Q( U/ O- r; Q% l$ ~$ M2 P
6
1 {! \  U: E; @* F&gt; reg2.test('Hasdfa')' W  R- M  L: k' o2 t) V( V
false
$ K; ^, G" c3 t% T- x' I&gt; reg2.lastIndex;' f" e9 {/ z. _
0
& F; T- X* h& w2 H// 全局匹配会有一个lastindex属性
8 E3 @/ g* i3 P&gt; reg2.test()4 J7 p9 I7 Y% \& `3 \3 G& L  K/ x
false
6 |2 _# x( R! u7 S2 l7 ^+ A&gt; reg2.test()
+ A5 F8 D3 {, ~" D/ utrue' a8 A# y1 z/ F3 j
// 校验时不传参数默认传的是undefined& `/ I# Y3 Y2 c: o
</code></pre>9 s, I# k; ]+ F, @4 B3 E8 K
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>2 P' s4 c, v  g- x/ @
<p>就相当于是<code>python</code>中的字典</p>
+ [5 c- _; ~& w) O! T$ a/ F<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}, J/ [* g+ R- {7 ^! m! e
&gt; person, M# A& \: |& e" F+ i
{Name: 'Hans', Age: 18}
  P# b0 Z, F2 R# S4 O' `; ^- \! |/ K&gt; person.Name. x  t! r, a! y" Y* O
'Hans'
: [( |7 |. H: @! I6 U9 b9 {&gt; person["Name"]3 F& O7 q6 F, n2 [
'Hans'
) P/ ?. ~$ t- G; d
2 Z& f3 P7 x+ Y4 e1 D+ c, ]8 @/ i" v. B// 也可以使用new Object创建- W- ^- V$ D- w
&gt; var person2 = new Object()  ?. s9 m: m- l& W# x
&gt; person2.name = "Hello"7 g' L* a% F/ F; S
'Hello'
2 M% s1 P3 k  ?' ?  M& T, r&gt; person2.age = 20* \/ D5 U8 C4 b5 S& \
20
# R( F& t+ B) t& Q% }</code></pre>
) i! g; D; ^7 P8 x% R* P<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ L4 f' E: m/ J, j* S( j8 F<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>+ p, Q. O0 Y3 i* Z% I/ A7 o# }( ]
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
8 g: a* m  ]( h0 {# e" B' O  p% j<h3 id="31-window-对象">3.1 window 对象</h3>. o/ W  ]$ I0 i8 G, `
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>" \3 g) Q& _' r& C
<pre><code class="language-python">//览器窗口的内部高度
* D4 b4 ~+ R# s1 h1 @window.innerHeight
' H+ s4 h* h! g) k7063 W  W, j: R* U, P1 o4 u
//浏览器窗口的内部宽度
$ u# r  a/ p( P5 h; B2 h/ xwindow.innerWidth( A4 V" E9 z. }5 e9 S6 F
1522
+ G9 c6 O5 i/ A// 打开新窗口* @1 l0 r& \2 [& F- K& L
window.open('https://www.baidu.com')
; b1 j) ?- Z( W) IWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}$ Z$ V# ]) e3 O% q4 s6 x, C* S
// 关闭当前窗口
7 w' m$ h4 D0 x- K' Mwindow.close() + t5 E4 R9 L2 J8 P: t
//  后退一页- K+ z  P% z  \/ @( O6 Y
window.history.back()% Q( {2 Z  }: L! X$ _( [3 y
// 前进一页6 H( S1 i  U6 }) S. m) J" P1 n
window.history.forward() & ?1 j5 @" ]  H- r2 \$ z6 z" A
//Web浏览器全称
- W( R/ o, s& Z1 h8 g+ O/ mwindow.navigator.appName
- a, m3 n4 P  C7 k'Netscape'! _: c& }8 v" l" b5 C: I. w3 ~1 \
// Web浏览器厂商和版本的详细字符串
. I! i. W! z% f7 Z& g" D' bwindow.navigator.appVersion/ T* T5 y1 J/ |# n6 v9 M  T
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'3 d+ u- l" [! D( e7 k6 P
// 客户端绝大部分信息
2 l) E: w2 I- ^+ D5 Qwindow.navigator.userAgent
5 V4 S8 s9 \& t/ k; G'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'2 j0 v& h5 D6 D2 w5 m5 J: m3 K
// 浏览器运行所在的操作系统
: g% C3 z+ ?" d( g0 W  w( ?window.navigator.platform; w: I$ y" ~$ ]. ~. q) `
'Win32'
+ t) V4 p) s4 g. R/ U' _, Z- Y& E9 m) M% K
//  获取URL
. [6 H. F+ ]7 P# z! s# Swindow.location.href
- F, S6 q3 O3 A// 跳转到指定页面2 F& n, i8 @4 O
window.location.href='https://www.baidu.com'& X: D/ y% @' |  m2 N) W
// 重新加载页面) n, _; D: r" e! V6 g
window.location.reload() - o: {  x# k6 ^. y! v: W2 k: v  W
</code></pre>
4 A( e; ?7 v; B0 y<h3 id="32-弹出框">3.2 弹出框</h3>
3 P/ b& |2 h" K5 a<p>三种消息框:警告框、确认框、提示框。</p>; }% R" S6 M, i2 X# F' N7 Q
<h4 id="321-警告框">3.2.1 警告框</h4>; m0 `; D6 d0 L4 W/ B6 x. r
<pre><code class="language-javascript">alert("Hello")  u; J  O/ @3 I6 c3 l- B( \
</code></pre>! y! e4 w1 ^4 L. k5 C! v$ b4 V
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
% V' B7 l1 [! D! I9 G<h4 id="322-确认框">3.2.2 确认框</h4>0 I4 ^1 Q/ l. y/ {# _
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>6 ^$ u2 Z# g8 J
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true% Z* G  V: u" N9 N" Q5 e# B
true
, k' m/ f9 \  p( a$ W& g&gt; confirm("你确定吗?")  // 点取消返回false( ^2 [  w$ [- {
false
5 ?* ~6 n2 x: E) d, r</code></pre>
4 z" p& j/ Q) ?6 p8 t3 ]<h4 id="323-提示框">3.2.3 提示框</h4>5 E& I8 Y/ [, p2 d- ~; J
<p><code>prompt("请输入","提示")</code></p>4 J  M4 D1 D2 |8 |
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
" W  W7 m3 t& H' l6 F, g( k: c<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
- O7 T7 f" j. a<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
, H" ~0 i9 L9 j/ e) |2 c: Y( V<h3 id="33-计时相关">3.3 计时相关</h3>
& d8 R/ U; E# P' B2 s' Z( j<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>9 N6 ~' K% A! |
<pre><code class="language-javascript">// 等于3秒钟弹窗" M; M6 b4 t& j: a9 n3 V' w% t
setTimeout(function(){alert("Hello")}, 3000)
' J5 m% B4 F5 b! p, U) m) p' T! b6 X7 y# ^* {" R6 P
var t = setTimeout(function(){alert("Hello")}, 3000)) z' X9 a0 I2 e$ y6 c- Y& {" ~

9 U0 n+ H* P" i. d: F0 [// 取消setTimeout设置
/ b4 f3 h% {& ?" K' N. ~clearTimeout(t). m% ~; h) S9 B' ?
</code></pre>6 W) F% \5 l/ Y# u, @
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>) T: c1 |1 }; H: _
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
( K, Q; N' g( j/ K<pre><code class="language-javascript">每三秒弹出 "hello" :
/ s- X- q7 Z7 y: v( N" d: ksetInterval(function(){alert("Hello")},3000);
& J% S4 d* k( c5 V' E+ C" A$ |</code></pre>  U$ a. |  K( d* s
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>& r4 u( D8 M+ D% y1 h8 K8 O6 q% J
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);5 w! N, g- J  G% n: r, \% J
//取消:& F8 K0 k4 g: f& b1 x) l
clearInterval(t)
8 O3 b, j; _2 D; E; A  U; X</code></pre>
' ^- \7 v7 Z! d% K" R' G
! ~- a% Q) C  a/ f! `2 u
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-20 19:09 , Processed in 0.074158 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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