飞雪团队

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

前端之JavaScript

[复制链接]

8920

主题

9008

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29090
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
: }3 S/ l" ?8 Z3 N3 u7 s
<h1 id="前端之javascript">前端之JavaScript</h1>( G& x* G1 Y9 U7 W8 N- J" p$ n: E$ P
<p></p><p></p>; |) X5 i% P- U& s, F1 S" |4 }3 @
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
1 {2 j" d3 K* |1 v" d<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
- U% Q3 B$ D7 d% v3 f$ V它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>- a6 ~$ ]) i" [1 _! D, e( k9 G+ \: f
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
; l5 @: }3 Z* c' ]& Z1 x它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>% E3 U& _& g$ T3 m5 q  ~$ Y
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
: V7 [( k3 w. X* c# [<h3 id="21-注释">2.1 注释</h3>
, |! P# x0 y/ D  ~+ z<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
& n1 [) w) X% w4 t; \) N<pre><code class="language-javascript">// 这是单行注释& @2 j. V* f; d# [+ ^1 }: L

* `$ L9 B( C( B$ a7 A$ [/*
6 r, h6 n. h9 b这是多行注释的第一行,
. F$ [7 T8 p+ K) C& }6 ?/ l这是第二行。
# w) T. p) y  T+ M9 k9 z*/. z& a2 L* h" o' @
</code></pre>9 o, m9 z3 T$ s& |5 T8 m
<h3 id="22-变量和常量">2.2 变量和常量</h3>
( @# X/ }& B* S' C<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
+ ?, C6 m( a# R9 S<ul>
6 Y  n2 w7 j. H& e$ x( Y<li>变量必须以字母开头</li>) d0 @* _4 S. Y  G; b
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>& G; s! Q8 q. n1 h: }! `
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
! @" H: `& r5 Y2 }! p# a# }- z/ g! B</ul>4 J2 `6 J9 S4 B" ?/ y
<p><code>var</code>定义的都为全局变量</p>
' a' _, J' @5 u# H<p><code>let</code>可以声明局部变量</p>6 w+ R+ Y, O  m# I7 t
<p><strong>声明变量:</strong></p>* V! z! l- m0 {4 c4 K
<pre><code class="language-javascript">// 定义单个变量3 k- ?/ f" `' ]- ?6 O
&gt; var name" s) J+ [- `1 S) }& E
&gt; name = 'Hans'
- C! u! m- |; d! z! o% u//定义并赋值
+ Y7 A- A; n: n# x, f. p3 r2 S1 b&gt; var name = 'Hans'5 K- o: {: a2 J  i+ @6 n( }
&gt; name
$ Z4 P7 G' Z. }2 g4 h9 H- s% \: C'Hans'
& `" Y& U7 w! Z' c% V8 v
' v: o8 P* f& E8 E  K// 定义多个变量
) Y  p; X; n* d. H! X&gt; var name = "Hans", age = 18- v# G9 ~5 M0 ?
&gt; name
$ M: W& v6 I& C+ p, g- _'Hans'3 |4 \4 L/ ?9 Z" [" S
&gt; age6 o$ |' o, A: z  O, @, B: F5 o6 b
18, ^6 P- K% R0 F9 v
% h& S5 h! b; t' K- u
//多行使用反引号`` 类型python中的三引号, B) c2 m5 v* W; b2 H
&gt; var text = `A young idler,
: Q$ ]* g" o6 {& x* V/ T6 _! can old beggar`/ S1 H& [0 D* V" i  S# h, v
&gt; text
5 S( E/ r- S  M'A young idler,\nan old beggar'6 b4 O% q( I* `. v* T5 x: p- S) d
</code></pre>  |$ Z: m$ e2 x" S0 ~5 \+ e
<p><strong>声明常量:</strong></p>
2 X, j! N4 {2 `: l<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
2 n7 }9 _8 S+ C8 E" v<pre><code class="language-javascript">&gt; const pi = 3.14' N+ G7 ~1 r2 W, E/ h
&gt; pi% S9 L2 V" x7 N, B1 S" J' d5 \7 @- u
3.14
" a9 m! Z% ?2 }3 U&gt;  pi = 3.01
% s3 F$ ^# V, F* H# l7 q/ yUncaught TypeError: Assignment to constant variable.3 z6 R# Q6 D! E" S6 [
    at &lt;anonymous&gt;:1:4( C" O6 `' H- `9 ^: A8 u. O
/ P8 D( ~2 p4 B! o9 q) }
</code></pre>/ x, M3 b" `. F2 `
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
$ q! Y0 ~- S) w1 t( T- f/ o<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>8 k( F, v7 j7 P* G
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>6 Y& K; [0 n, b/ K5 f  f  [; Y, O3 y
<h4 id="231-number类型">2.3.1 Number类型</h4>2 m7 m0 y/ M  x1 K& m( t
<pre><code class="language-javascript">&gt; var a = 5& P0 a  W7 Y" ]% t6 l
&gt; typeof a   //查看变量的类型  
7 a/ u! a2 g/ e: C1 I: ]  @5 nnumber2 i7 d1 V. i& x5 ~2 X" P2 t3 C
* K0 }8 l5 q, b9 w1 y
&gt; var b = 1.39 O4 T& Z  `- T4 E+ z- p: Z* B$ W
&gt; typeof b
/ d9 i% K& b2 h5 d8 r" y/ gnumber2 @' N0 _% k$ `

" W& S3 B% l. ~5 \) N9 ^- o// 不管整型还是浮点型打开出来的结果都是number类型
8 I% u/ p. L/ r8 D/ P* Q
: ~6 e, v; M0 |0 W- I" M; L; m/*
" Y* m" f4 _1 M3 S( A& QNaN:Not A Number
3 o! E( h: s9 i/ @% S' uNaN属于数值类型 表示的意思是 不是一个数字
& g; R( l- S, B; Y1 b0 a' T( S*/
$ d9 {. M" ^5 |7 z: Z7 V4 z+ H. o5 f3 u" n  }6 k- l$ M" x0 h
parseInt('2345')  // 转整型# k% [8 z8 ^8 Y& `: l
2345- M& ~$ X5 E" C5 e, h
parseInt('2345.5')  C" R& ]9 L' E
2345
5 P' a& b+ k+ \0 t7 A8 }1 c. h% AparseFloat('2345.5') // 转浮点型
0 I& g8 M  t7 [# |2 \2345.5
0 M& R  i  A) h# |2 vparseFloat('ABC')
2 [, i3 l! |5 m8 \' L$ BNaN
& w/ k; g. O1 I3 G1 a9 P3 U8 ZparseInt('abc')
9 ]: M( I! d. }5 ?NaN" R6 Q" `) q; _
</code></pre>2 X- ^+ `" L7 i
<h4 id="232-string类型">2.3.2 String类型</h4>1 ?* u+ g' d7 M8 O% P- n
<pre><code class="language-javascript">&gt; var name = 'Hans'4 X$ [9 @3 [$ r+ f2 [* G' y
&gt; typeof name* w6 ]' h# _1 x  y0 `" R0 ~
'string'* z/ v5 ^& M, \- d0 s! |
' o! `) t8 o' v. d& g% n5 t
//常用方法
3 \$ o: \' r5 J% M+ H// 变量值长度
( v/ \$ x/ y' o! g' ]; |&gt; name.length
" S+ |% M+ o0 z1 c7 q+ J4. V9 a. l! M, H6 T
// trim() 移除空白
% d" i) ?" K( B# j+ ?) c&gt; var a = '    ABC    '+ Y2 r/ C! O& k1 Y
&gt; a
  ~$ L  ?6 d. F8 D) u( a'    ABC    '
- d4 H7 @- V2 Q4 h% x&gt; a.trim()$ m/ \- I/ r: c' c2 N: b) X
'ABC'
5 h. K) g, _7 J! D//移除左边的空白
, G* ~' o+ a. q+ R) W1 t&gt; a.trimLeft()7 Y( z4 W  F. F, S
'ABC    '
! e6 t4 e! V3 E) E//移除右边的空白  p% w( e, b. z" h+ _
&gt; a.trimRight()3 H% |* R) f5 _: F) k6 m
'    ABC'+ L& Y, v& z9 e  s; v7 K

: T1 M* C, f( \7 d5 ^//返回第n个字符,从0开始
5 A& N4 A$ z* J7 `0 o+ ?  z&gt; name: p0 {' ~( H4 c9 P1 c
'Hans'
. G+ f; B! e* t&gt; name.charAt(3)
/ }. v  ~0 P/ v5 z- R3 O  ['s'4 x" \$ c0 j4 w/ _+ _/ r4 |
&gt; name.charAt(): K) S6 q6 S2 `7 l) y! _- R. ^
'H'
0 b" T. D) V/ {2 M&gt; name.charAt(1)
2 V* x3 H9 m0 k1 K- U7 y8 }2 \'a'8 P0 k! ]% Z( u' F
2 T6 [* d% b7 M2 z0 c. R/ ^/ F9 Z7 A# ^
// 在javascript中推荐使用加号(+)拼接
% u5 F4 F9 e! f1 t" S3 Y&gt; name
6 |3 C. ~/ P* _'Hans'
2 @5 y% \7 L' B&gt; a
& }! I8 ^- L4 t$ l3 a'    ABC    '
/ G' Q3 K0 L& k! d&gt; name + a; H7 P9 {& }( \4 o* ^5 X: h( N
'Hans    ABC    '
8 ?5 Y  p2 @* p3 `// 使用concat拼接6 t. P+ ?/ _: n5 {  y% [% Y  @1 R3 F9 M3 d( K
&gt; name.concat(a)
+ G" i; }' d- _  ?'Hans    ABC    '1 v; |/ w$ |2 F- }% u+ Z
# N% V# N/ R, @6 m0 S+ }! y
//indexOf(substring, start)子序列位置
- l; u9 Q# F: G- I' w- p' v! q% Z8 V5 P4 m
&gt; text
) L" n5 j# G$ s$ M'A young idler,\nan old beggar'% x0 h  q0 n/ [# w
&gt; text.indexOf('young',0)9 {6 w8 \# i5 Q. ~. c6 w9 e" o% H
2
/ s) t6 H" P" F; F) `; w7 }" J, b+ v1 c0 U& X9 r/ h7 Y5 E. a
//.substring(from, to)        根据索引获取子序列- X7 X4 f! L# r0 w1 d/ v
&gt; text.substring(0,)
- h0 `% }, N+ |'A young idler,\nan old beggar'
! g; L1 u$ H- }- c5 h+ P&gt; text.substring(0,10)
8 G! c+ L  }# g, o+ v  h2 h+ l0 ^7 a'A young id'
+ G' \3 `1 @5 M/ c1 X6 p9 Q  O, z3 \/ A( S- A; i
// .slice(start, end)        切片, 从0开始顾头不顾尾
/ E7 h" N+ r1 e: Y: u% S&gt; name.slice(0,3)
2 f% @. y% `# X3 d; z7 I'Han'
9 Z- ?% i: ?; f
1 ~0 s. z% ?5 k// 转小写, W4 D1 x+ h$ D# a4 `0 N6 X
&gt; name
# L. H3 C% B2 e3 I  N& @5 E5 u/ `'Hans'
* Q* Q+ c' j$ ]' p( a- w) R! |&gt; name.toLowerCase()0 @% ^2 Q9 k. H1 d
'hans'
. i6 L  u4 W  i8 O! I' i& A// 转大写
4 q3 l4 \+ _: G# J2 P$ U/ b( a8 X&gt; name.toUpperCase()3 Z* i  b* p3 [$ ~& D" ~( W
'HANS'
# ~8 d5 k$ o' R* U+ {! W
% W+ L( v$ a; w2 z& f& K1 H+ z3 Q( g// 分隔
$ x5 Z: A8 @+ l# a( l, a" Z&gt; name. x( J2 q4 @) y4 q9 x- p6 X1 f% c
'Hans'' ~; O8 C  I$ d; b: |
&gt; name.split('a')
! T! S( S9 D1 S: T8 y" `(2)&nbsp;['H', 'ns']
) z2 w' D  V  [! u: W( y1 T</code></pre>. {) P1 L0 k& V9 y# y
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
9 G- u4 l& B: i2 M* M<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>0 r; b7 m1 Y% p7 G  {5 t  D
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
! ]" @# o% ]5 u5 B<p><strong>null和undefined</strong></p>
/ O/ w% F2 N+ `& i7 [0 A<ul>
: K1 L; S' X+ m' ?. s<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
$ N( J+ s# d: \; l. V# a+ ?<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li># n  s6 w: \0 t. n4 W& {
</ul>
& Z8 u8 W, i) L2 y3 C% Y6 C5 I<h4 id="234-array数组">2.3.4 Array数组</h4>
, c- [7 s5 p! l7 s<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
7 i. k, [4 G& S+ u  B<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
2 {1 u7 `- V, D% {8 T&gt; array17 r8 J* ?  u+ q7 n3 s. n: R& A
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']2 f8 O* S' z0 l, ^
&gt; console.log(array1[2])  //console.log打印类似python中的print
7 b; I. r; x8 f4 G/ C8 k+ t# U* I3/ I7 P3 I. ?6 S8 u, }" `7 n
// length元素个数
: r1 V; H6 _$ g& k" V9 B& D&gt; array1.length* F% ?  J8 x" I% q" [
6
9 `& {8 c* w, A// 在尾部增加元素,类型append
5 A  ~, Z- q& d. ^+ m7 ~&gt; array1.push('D'): g9 t4 t+ B9 ]7 V$ G
78 ]$ s" c! j! D$ {/ V
&gt; array1
* r' H; H; ~7 p. U% A(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
' T- y4 v; p* i' h5 W* ]// 在头部增加元素
. m3 n5 ?% v. u! t5 F/ r; q1 ~/ \&gt; array1.unshift(0)
8 ^' z6 G+ q3 g, _# J5 q# r8
# y3 {$ G$ d0 A! D' `&gt; array18 b) {9 d9 y$ j
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']* }' a: S& p8 I( \; j

' S+ u! B3 C$ D+ p" l6 A//取最后一个元素
: U" w, A) S2 I6 U' F1 }- l4 o&gt; array1.pop()/ G( n% H5 [  p' u/ `" P' F
'D'4 M: ?6 p( u: q% c8 r7 U4 X9 }( p
&gt; array1% d+ s! E% ]3 s0 p( j! I
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
4 m& b/ x7 F% X% e# |//取头部元素
1 J: v  X( w/ k) v$ ~, z- V&gt; array1.shift()0 _, F; O) B3 B7 Q" h' A
0
. e: c7 Q! |8 e( R&gt; array1: N, I; \; e7 }1 N# t8 d
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']* c3 k2 {0 ~( r! Z' @7 d. G  `8 U

  z& [2 b8 h& Y4 C1 Y, f//切片, 从0开始顾头不顾尾1 Z/ f( l- i$ {& K! `) J
&gt; array1.slice(3,6)
% o: [: F8 W# {  j- ?; D5 P(3)&nbsp;['a', 'b', 'c']
' F3 \5 I. d: J0 J// 反转
4 b9 j* V+ t) f; {) K) A&gt; array1.reverse()
" Y5 y6 N% ^/ r2 K# p6 m+ L(6)&nbsp;['c', 'b', 'a', 3, 2, 1]: a& Q7 H% ^7 [9 k
// 将数组元素连接成字符串& p) K8 o% G' _
&gt; array1.join() // 什么不都写默认使用逗号分隔
1 M1 t6 v! e, C4 Q3 T! t'c,b,a,3,2,1'1 B$ L. I7 K7 t3 e% W
&gt; array1.join('')
$ _2 B& a( z6 K0 Z& d'cba321'
7 w/ a: I9 W4 h- a" X6 ^: W1 ?&gt; array1.join('|')
  ^1 I+ u, B. {; ]+ i'c|b|a|3|2|1'
, Q& i6 Z& T/ C3 M, {, m. _( g
/ c2 j9 ^3 m3 ^% N9 q// 连接数组' Z8 }( q1 t1 p+ y% t
&gt; var array2 = ['A','B','C']
5 r: J/ o4 G* O: Z&gt; array1.concat(array2)
. Z; U! a, q& O(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
% L4 C: ]# V2 d- g/ b8 F% Z4 s% S: e' L8 r+ T$ c% I
// 排序
; E( B8 z- D1 W% O# F&gt; array1.sort(); e. K* l$ \! q; `9 Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], W: i% k% W: P. |3 @4 S, o( Q
4 W2 a8 m" @) b5 B: q
// 删除元素,并可以向数据组中添加新元素(可选)
' h/ W& L* _. y0 x& D& ?, @&gt; array1.splice(3,3)  // 删除元素
. s9 j- D- Q" e4 F2 N; w(3)&nbsp;['a', 'b', 'c'], E" H* `9 e. G  J" B! _
&gt; array1
% _# c$ I- J+ b2 G) E; D' B(3)&nbsp;[1, 2, 3]
# H4 T; a' N4 H5 w&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素' D* {& G8 T3 T: ]9 G
[]" @8 {( l5 P$ I6 r7 v
&gt; array1
! D1 t- h. T& A( ^( h4 N(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* f5 j9 H. ]% z: q0 h, e. ]
$ J9 c/ c8 ?4 q/ G  V# T  U1 G1 \1 e
/*
1 R5 v8 k7 D. Ysplice(index,howmany,item1,.....,itemX)
) m! R. E0 b" P* O! Yindex:必需,必须是数字。规定从何处添加/删除元素。2 A9 O. N/ ?6 G3 j' W
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。" ]; @! x/ R* [6 z( F% Q7 {5 ^
item1, ..., itemX        可选。要添加到数组的新元素' c0 _2 i& X/ j7 J/ s
*/
* ~  q5 |! ^: [0 Q7 e9 W- d& q5 f1 M5 @2 P1 p5 i
// forEach()        将数组的每个元素传递给回调函数* T# q- \: C% f5 z8 y
&gt; array1.forEach(function test(n){console.log(n)})
- E. d+ |/ ]2 m8 @ 1' T. H4 ?, P0 U
2
1 A* N9 B4 s# ?* k4 W 39 U/ _4 a2 }/ v4 T" U9 R# D
A
) S" I6 C# u% ?3 X, U1 w B7 b8 U4 w6 K( P6 y9 X
C) t: ?7 N8 ^4 ]0 H& x
// 返回一个数组元素调用函数处理后的值的新数组
$ T7 y( Y" Z& R. `. I) b&gt; array1.map(function(value){return value +1})" ?+ X: H2 u: Q/ g& T9 Y. n
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']/ r) h# x# T( G7 n  O$ p
</code></pre>& g$ A. Q2 [* H  H& l
<h3 id="24-运算符">2.4 运算符</h3>8 u3 L# t* ^: S% Q
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
& G3 }4 I0 q$ e% a9 U% m: L<p><code>+ - * / % ++ --</code></p>
: v  _8 M4 g  o4 ?% K<pre><code class="language-javascript">&gt; var a = 6
- u" h5 T6 q0 x& _9 D* Q$ |3 b/ u* q&gt; var b = 3
; e+ g! N' R. O# [3 \$ h; F// 加
3 ^( v. c, u  {& Q& C  b% D&gt; a + b
. K5 k7 J3 E0 r( U8 |9
, r9 D% _" f0 y3 I5 ^// 减  r3 X* ]0 K) K: H7 C; v8 h* R$ G
&gt; a - b5 \9 N2 g% n3 B/ d6 m* @
3
; N0 r8 a  a; L  f- d* n5 r. P// 乘: d9 G3 U6 i- ]* x, q! R% M) a
&gt; a * b
. G# W# c, P4 Z! b3 ?8 ~18& X  ~3 c# O/ X' J
// 除  c: d7 i0 y4 x. C1 {
&gt; a / b
3 s, b5 N. m$ o% q9 N. H, o2
0 F; _( k/ g9 A// 取模(取余); L+ F( c+ F  s) q) \) ]+ N
&gt; a % b# h9 T0 |4 D) U. V) w6 s  s( J) N
0
3 J+ X1 g: U  p2 G* y0 Z// 自增1(先赋值再增1)
: T! C: y! M. ^; ^* e5 C9 J&gt; a++
6 A6 Q- t9 ^! \( F3 B6 l1 Q6
2 ~+ t0 F) P! I0 T, O$ R&gt; a# ?* \* x" I4 e! l& o1 ~& g6 }+ N
71 j8 r/ C. K9 X- a
// 自减1(先赋值再减1)% e, D/ E" T, t0 R
&gt; a--9 y+ }# ]; P- Z' p) ~9 t, ~) ?! p6 }
7
3 p( G  p  u% w3 r&gt; a6 r. X. [7 h1 f) A7 u7 m) A! B
6
5 d3 S. b+ i2 G4 P7 G1 Q* E// 自增1(先增1再赋值): E$ O$ n$ Y# v! d$ }( a
&gt; ++a
" T( q: \% u! L, r7* `  u% ^) H8 ]: Y: g
// 自减1(先减1再赋值)# n5 e' M9 O/ Q3 i/ z5 P
&gt; --a
6 Y  \. V) b' S7 P& u# c) c4 }" ^62 `0 o3 H. r1 h; m' c
&gt; a5 q& h9 O) V% ?, s7 S1 g4 d( j
6
, z7 E3 r6 i! ^* W! _7 ^9 z! g: L6 C: O
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
0 x! ^) t' s5 s  T/ e</code></pre>
! N3 Y9 Y# q; ?  S0 d<h4 id="242-比较运算符">2.4.2 比较运算符</h4>0 H0 U4 N2 I7 c, {- u
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>2 e- m. o8 @1 F! Z6 x
<pre><code class="language-javascript">// 大于( G8 ~4 B0 ~6 g2 B( ~0 w' B' B
&gt; a &gt; b! Z/ ?# H7 z' D8 g. h
true
* ^- j' F) ^  |4 @4 m// 大于等于: L! Z8 L  U  s; Q4 j: H# y
&gt; a &gt;= b
- q+ u: X; V* Y4 k$ B' dtrue5 ~' V* w% W( E% G3 _0 f7 j. V- e
// 小于
& J$ \# U9 H5 H" W7 c/ ?' `& q& m&gt; a &lt; b# i2 W1 P" Y! o3 S9 i2 K
false
& z, X3 E) O4 ?// 小于等于3 p/ M3 @9 S3 }4 i  I0 U3 Y
&gt; a &lt;= b
! V# C/ V. U6 wfalse
' k9 k$ U6 m/ F8 l0 p// 弱不等于
' v2 s3 p4 c9 f; o1 B. ]&gt; a != b8 U5 ?6 N0 l$ W, T% t. _% W- @5 N5 E5 J
true
# }4 O$ ]! @, ?4 S// 弱等于
  {* M% K* U$ n: L$ q# L# W&gt; 1 == '1'
# M2 Y% r7 i$ b. q- d9 T+ ^  Z6 V; Ttrue+ Z* l+ `: ~  ?; T0 r6 s" Y
// 强等于) K, h+ i# B9 r8 j  O7 l- H: b
&gt; 1 === '1'
" ]7 i8 T: T' Z( ?& h; g3 `5 Sfalse' u4 p2 T* [( N5 G) Q# g5 \
// 强不等于- s2 B" g- [. I8 l. Z- p
&gt; 1 !== '1'# a) K; r" z% `2 g& @4 k# C
true
; p1 e5 W# ^$ n0 z$ q9 |( p* o: [0 t. j) M' h4 I) B" I5 Q
/*
; u2 C* C" i- q- N4 y. h3 e% aJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误$ O1 [. M! _3 [
*/
3 \2 n& t* ]8 ?2 _) {</code></pre>
) B/ l3 q" o/ c& t5 v<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>* I/ T: y$ h( F, [
<p><code>&amp;&amp; || !</code></p>
, I9 h) S9 `' e1 e<pre><code class="language-javascript">&amp;&amp; 与* a- ]* S4 L1 J  k
|| or
7 \- a8 a8 V* Z- J6 e! 非: s8 o( d. ~# [& Q4 `
</code></pre>
2 w# j+ W, H# S<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
( H' V  a% V" p+ k% K<p><code>= += -= *= /=</code></p>, D( Z( f6 F' [
<pre><code class="language-javascript">// 赋值5 w$ }; ~/ |- C
&gt; var x = 3
7 ]2 f& K. [1 ?7 r+ U4 E// 加等于, |+ C/ F9 Q% \/ m$ V
&gt; x += 2% Z, ^" z+ u: ^+ W: a* @0 `/ `+ l
5
1 e: H1 g: c2 h* r# g& l& _; g// 减等于
) A. ~$ V6 C, }/ `  ]&gt; x -= 1' L" P  l% \+ W" L
4
% x5 u8 q" k4 F$ P. ^' K// 乘等于8 W2 T& ^+ p5 K- ~$ e
&gt; x *= 2+ b1 _$ o# d% [8 _; @
8
4 X8 S9 y1 A) e+ u// 除等于' }/ k2 p; p' ^* ^1 i; a
&gt; x /= 21 ~, _, K2 u+ F( Q. ?6 @
48 R' R; j9 p& o. h
</code></pre>
3 T! r! ]) j/ ?<h3 id="25-流程控制">2.5 流程控制</h3>
0 @& s1 w9 k$ R. x# Z. z<h4 id="251-if">2.5.1 if</h4>
" R8 `" p+ D- x; d: [& b6 _<pre><code class="language-javascript">1, if(条件){条件成立执行代码}' u7 F  D. [: k& S/ e9 ?6 N8 o

% ?& i8 p2 T( _8 t% U/ G&gt; var x = 3
; i$ ^7 V% v' g: e; p5 H7 a; V&gt; if (x &gt; 2){console.log("OK")}
% b$ `- P: W8 X3 M0 x OK
- N5 @1 n% B1 U4 f4 h
7 h' G1 n6 n& {9 b5 D0 h: X2, if(条件){条件成立执行代码}
& q' h4 v5 H& z) e6 m        else{条件不成立执行代码}
1 \( r$ N, x6 ~# H
- o& D+ H8 h: p/ e1 A&gt; if (x &gt; 4){console.log("OK")}else{"NO"}9 p% ~. q! [" w  `- c( m
'NO'. b4 {" \  l" _1 Y9 M. ^$ K
  U! g9 V: w- w% }, u3 Z
3, if(条件1){条件1成立执行代码}
2 H! k+ x$ K3 g/ E6 d1 p1 `        else if(条件2){条件2成立执行代码}
; I- Y7 h! P4 r& o( G6 `    else{上面条件都不成立执行代码}
9 L- W- q* r4 r8 t, ~" P) }  K4 r, f4 g( S& t8 m
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
" R: M0 M* t/ m- z- c6 C Ha. G# N9 }. j7 Q  c9 M2 K
</code></pre>* T; n3 ^6 x& \/ n& W  x0 L
<h4 id="252-switch">2.5.2 switch</h4>
7 f3 o( {( k4 }: X; L<pre><code class="language-javascript">var day = new Date().getDay();$ N8 J  B2 k4 y/ M+ o
switch (day) {
" i; h! A9 d2 [; {1 S  case 0:( g3 H, h" [* l5 `* Z! r
  console.log("Sunday");
$ n. T( ~! ]' r7 ]  break;" x4 Z- y3 E& h* T! Z
  case 1:7 v2 ~: l9 h$ K0 H( W
  console.log("Monday");) G# l! i4 s. U1 G, j& n
  break;
3 U8 R% D0 X  i% X3 ydefault:
& ^* }  I3 c, N! ?. B" n  console.log("不在范围")
4 W  a! h- U& {/ i: K' ?, g}$ ]# {  q6 F7 ^- t: a6 h: a" `4 }
不在范围8 @/ J1 U* @5 V# v) z: c& ~) g
</code></pre>
7 r# w# y0 ^+ l) [9 {: F0 X3 l6 G<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
0 p1 y8 [) Y) ]2 U) j5 y' X<h4 id="253-for">2.5.3 for</h4>
$ _8 a( b6 Q- Z0 i<pre><code class="language-python">// for 循环  R5 Y% o, A8 `# d4 B0 `
        for(起始值;循环条件;每次循环后执行的操作){
( [( M* S; ^0 d3 H% @1 Y        for循环体代码
; i2 E# @, a& y. C) @    }
5 L% H( R1 ]/ x2 u1 }3 X5 G1 r+ i% Z( r3 H$ }
for (var i = 0; i&lt;10; i++){1 q, x/ ^0 g+ L' z
    console.log(i)
# i- }' l& D$ T}! G6 z& C- _) C6 t) \
        0
0 P. Y8 @) p4 B  `        15 ?* |# @! `. e. v. L8 T- U1 H
        2
0 a" p; D9 h0 q: f$ H* P. r        3
: }( l# }0 L6 c8 a# i% ^; G8 @. D        4
% x2 q5 }. U2 m6 `. A        5- a6 \7 w/ U/ \4 L' }* V7 t
        6
) F* i7 t' k/ e) ~) @2 Z        7
0 ]2 @3 ~, o2 K        8
% A$ L" P  M  A5 B: Z  [. d        9
& T# W; ]& v* P. v6 u</code></pre>. k8 d7 _$ q' K* a0 f7 E
<h4 id="254-while">2.5.4 while</h4>4 P& `4 F4 D/ I# I6 I$ t1 h$ U
<pre><code class="language-javascript">// while 循环! ]* J3 S; A% K& H/ l2 S' H
        while(循环条件){
/ C: J3 ~" Z7 t3 U% U$ C7 Y3 _8 m# m        循环体代码+ c* s3 u2 N' X
    }
5 l* ~, Y& Z( L+ c) _# k
  N) D5 \4 ?0 m- }&gt; var i = 0
. \' x$ `9 |# H/ }&gt; while(i&lt;10){
) T$ C1 `+ ^6 v" g$ C* }* W: f    console.log(i)
* Z- P+ |, ~, P+ `2 h7 N# j    i++
$ B$ Q! o  S6 ~- B2 \/ ]8 v}; n/ P9 r% V/ x% H+ ?
09 M, M, F! ], r, \
1" {5 X+ E; B* B4 p
2
( r; k1 O' `5 N8 L 32 g, Q$ T$ [9 ~) t4 U
4! R, }5 F$ u1 I: u; ]4 p1 y
5
6 d5 t0 [- f" \+ ^: I 6
% r1 \% b, M  e8 {& m; x 7
( G% X' N% @% [& l  X 8. N6 V+ Q$ C! i: t% `: l
9
% p  z  I5 Q( _& H3 G, B3 W6 g/ Q</code></pre>
; n( I" |" j" K<h4 id="255-break和continue">2.5.5 break和continue</h4>- ?8 D! r; N4 \9 i1 e1 X  H
<pre><code class="language-javascript">// break
6 s- L2 y, `  @1 sfor (var i = 0; i&lt;10; i++){" q8 G8 x4 w" g
    if (i == 5){break}, r. V% x. p* [
    console.log(i)+ Q# s4 s! e  k9 s/ e- B0 m
}
/ G6 W$ _5 ?# T1 {0 s; r 0; |, [$ R8 ^8 w" F6 k5 v
1- l' \# s. h# H) T5 r8 V
2
+ m( K* H! a/ ]. p  u% N; J6 p, T% g 3
- D) q2 z/ j. K) h 4! x5 Z8 F: j! z% @
// continue% G8 t5 |2 |# Q$ K& P
for (var i = 0; i&lt;10; i++){2 e2 m8 `% x7 T- j% v
    if (i == 5){continue}4 i. t1 K4 U) Y  K5 z9 S: h
    console.log(i)* _& z& K' l/ ?0 E- c$ D% y' |
}
( ]8 o$ s" p% j% N2 v 0$ k4 C4 Y* O0 H# p) r' |
1" O& g8 a7 j4 V, S- V+ i
2# a7 ]5 F; D) n
39 k  S0 ^! u1 x9 I: R8 U
43 s# w- V" P4 |- k4 H
65 G9 V% C4 Y: v" x
7. i9 b  }2 P9 _9 k& s+ U
8
! W  L$ c7 X* X& g1 T3 O- J 9
& k0 C1 D0 Q4 w1 m% j( u& r
2 w, @! M, O6 K/ @/ c: u) J</code></pre>
7 G3 ^6 h" _1 D/ {+ J) q% U. e" o' l<h3 id="26-三元运算">2.6 三元运算</h3>
. p$ g3 n8 c3 b6 s<pre><code class="language-javascript">&gt; a0 F  q( m5 Z  B) q0 A7 [
6( e- c9 C# X( ]- t7 U( j
&gt; b( w! G: V( @! K; ~5 A% S9 h# e
3
$ E" @0 q) m, v3 D. Y
: d" L* k# y% T8 [' Z7 @% t//条件成立c为a的值,不成立c为b的值
7 z1 ]# i: V# F6 A' m  @- ]4 a/ w&gt; var c = a &gt; b ? a : b
$ N( Q" _* p1 Z3 F8 V' I( H&gt; c
9 _2 c0 [4 {8 _. O6+ A  f" i4 z! A( `
, m* [! D2 W; }# ]% V7 C) Q  x
// 三元运算可以嵌套
: m$ n, ]4 M* h! Q; q5 u# {$ p</code></pre>
' K9 M/ k6 V1 y- P7 }# ]) E4 f<h3 id="27-函数">2.7 函数</h3>! V" Q9 l2 P1 R8 n; q
<pre><code class="language-javascript">1. 普通函数
# C0 {- y0 c% J8 J( e&gt; function foo1(){
7 `9 Y8 Q& l: {2 @8 y6 M" Y    console.log("Hi")
+ c2 C0 |8 h9 K5 Q2 f}5 i3 q% f' C' H: G9 M; e/ X4 o/ r: K: q
& T$ X) |% C( C/ I9 ~( i4 d
&gt; foo1()7 h% u8 c' f! {# m+ p8 o9 o
        Hi& f% E! ~1 r5 W
2. 带参数函数0 `) m9 T5 I# U( @, ]4 k
&gt; function foo1(name){( ~3 e  P/ X" L
console.log("Hi",name)4 k/ x& w, u4 N& z7 J7 o
}
, {- v# R# g3 ]. A$ R$ l  K2 x; u4 T  l
6 P% o; ~1 ^( X" G" j4 d&gt; foo1("Hans")
% I& M& ^$ |) W) ?2 w' qHi Hans3 f1 d! o, K) g, ^4 X
/ B6 J6 f- u/ I/ t. \
&gt; var name = "Hello"* D% T* d) O+ L# B! |( h! N
&gt; foo1(name)
. f- r4 i2 K& K$ f; C: ?Hi Hello
* O$ L+ M5 M8 [! u4 i& F4 Q! _) c* i- O( @/ B% N
3. 带返回值函数5 x3 r' J4 D& T6 U' d
&gt; function foo1(a,b){
3 O  g. o5 E9 y; o" A        return a + b   ) y, w2 c, _$ b: Z6 ]: d
}' D4 w/ M4 ^. Q* v- _
&gt; foo1(1,2)! w# J" d# Q) o/ r- I7 Q/ u
3; m, z" t9 a( N
&gt; var a = foo1(10,20)  //接受函数返回值
  v1 }0 _& X  x9 m6 _&gt; a# k. S3 X9 \# G" s0 @
30
( {7 q- Y  E/ a& {! L
0 U) I) b9 w- ~4. 匿名函数
' x- V* x8 g5 ~- `5 A5 q- t&gt; var sum = function(a, b){9 k& I* `5 U* D9 v: y9 ]  {3 q
  return a + b;9 j1 u5 a& r" ]
}  p! D) ^/ v5 F6 [! T
&gt; sum(1,2)+ C- Q2 K/ x/ I1 @4 _9 H* P) [
3
2 p# u$ L" d; ^
! ^& l2 [- d$ W; J1 Q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱  k* T% y: Z  H9 d
&gt; (function(a, b){
, J. Q2 Y! _) [' `  return a + b, @6 R; D3 ^# S1 j6 a2 R9 C
})(10, 20)" s; Q) S3 t7 X0 @2 P% ^
306 ^. @' K6 @" r0 ?

# N! i' \! V4 }; @3 w5. 闭包函数
  ?7 o! I. f4 j( I7 L// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数/ N- H: w% P  R& H! X
var city = "BJ"# }/ J6 b3 a: K* S% h/ O
function f(){! P1 ?; b: c+ y
    var city = "SH"+ {3 e: b" v! ~4 N
    function inner(){
8 x9 ~3 t0 ^5 ]5 }8 \        console.log(city)
# X1 k; J) e& _* B; q! |    }) Q1 A1 s' P+ [% q, {. h- `
    return inner/ b! `5 E6 {; m& |6 E, x: X
}
7 W3 o9 _  O( w, qvar ret = f()# u" H& f( f( N* m0 \
ret()/ r* S( f/ K4 x$ [5 h
执行结果:* H/ r- n, f0 d0 E
SH
) f$ b3 _& t$ ]" R+ @7 i3 F" b, A2 |  n) p/ N$ ]* U! ~+ M
</code></pre>4 x' I* j* U. ~' O& W. S
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
# B5 Y+ R. z! b; C  }0 v7 N<pre><code class="language-javascript">var f = v =&gt; v;
) V7 x7 m, o4 q# Q9 S// 等同于
) m" X6 F/ @: A0 R* a: T; svar f = function(v){# ?+ N/ K8 R# F, U: R7 f' o, b4 D1 N
  return v;
1 H8 E" T& L- a+ j}
, X; h0 ]% [, h3 E+ V$ P</code></pre># n4 B# U8 }% Q1 [) |
<p><code>arguments</code>参数 可以获取传入的所有数据</p>0 Z6 K5 H! X5 q6 g
<pre><code class="language-javascript">function foo1(a,b){# f8 C. D2 i  x* p( e" z5 z3 W
    console.log(arguments.length)  //参数的个数
! j* c! x7 s/ u    console.log(arguments[0]) // 第一个参数的值6 K; o4 k/ T0 U, S# N4 ]' s
        return a + b   ! t; ^7 Z! B# ?; ~# z5 ]
}0 `2 x0 e" u& ~1 r  Q
foo1(10,20)
" S9 \. b1 R- g结果:
" p4 o% M7 ]/ V. R8 c2 n  F 2          //参数的个数
; f* B7 k4 M* _# @( @7 O/ h& i10        // 第一个参数的值
6 Q5 Q* @  a' P6 t9 X& E30        // 返回相加的结果5 Q3 l; ^/ G7 G: R+ G8 ^$ H
</code></pre>" p0 v, v5 Y3 k# H. d) W
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 y3 B: B  g& P3 R) ]<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
4 v- u. g( y, Z# l1 M8 Z<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>; B+ n, ?+ d7 Y
<h4 id="281-date对象">2.8.1 Date对象</h4>
* n- p- w- H8 E+ Q<pre><code class="language-javascript">&gt; var data_test = new Date()0 I/ {6 M% U% R+ T$ E4 E& |' p
&gt; data_test. T0 z* V9 r. B* P, A
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)2 |3 L2 ?0 h, V- W# E
&gt; data_test.toLocaleString()
1 C4 `, l2 P) Y& ?2 Y$ x/ W'2022/2/11 下午9:44:43'
- x* H) W- X- o& m$ v# I; s% e& V+ R. J  U; T) H2 z/ g/ b
&gt; data_test.toLocaleDateString(); S4 p$ z( }5 I/ p( h6 e7 f. A
'2022/2/11'
( s% c0 D0 k* g- s* {5 @. ~3 m; G
4 Y% J  h) x  G  O1 U' }&gt; var data_test2  = new Date("2022/2/11 9:44:43")
- F+ {6 n/ _; z; i9 z# ?6 [&gt; data_test2.toLocaleString()
! {' ?$ ~4 [! l" V4 E0 S- T'2022/2/11 上午9:44:43'
+ N0 r# {+ q7 R; z4 a
. c* p' o/ r3 |" b* Y( T( n* Z' `. p// 获取当前几号6 {( s8 D: V8 X6 q
&gt; data_test.getDate()% L' `# V' ~+ \7 i3 e
11+ o% b- j+ v/ v" Y# T
// 获取星期几,数字表示
# J; i, l* S0 V&gt; data_test.getDay()  . R/ B  `; Q. I* u. I/ `
5/ i  h+ W6 ^. J$ O
// 获取月份(0-11)$ Y5 |( L& D0 ?+ H6 G
&gt; data_test.getMonth()# ~2 ^1 m/ J6 P" }
16 N, Q" b! i/ t- r7 T2 K
// 获取完整年份! m7 ?3 d/ l  [- m, _
&gt; data_test.getFullYear()2 S, f9 ]9 C% G, A+ t4 r/ Z
2022/ r" O+ V8 ]5 F- @+ c! s
// 获取时
9 V2 i1 j  B6 \; q/ P) j&gt; data_test.getHours()
- S9 s- p. L* U* P/ h21
8 e# L8 m( K! [: y  H8 R8 Q& ^// 获取分: L+ X% k: _' ~$ q, K; k
&gt; data_test.getMinutes(); k' e: V6 L' u. Y3 G: r% l
44
5 }5 J. ?; l! R. F. x3 [// 获取秒$ O9 P% Z6 ~" W: ?) m
&gt; data_test.getSeconds()
6 j- X. a& p3 n4 N; O43
) e, i  ?, X7 o// 获取毫秒# I! q' L/ G1 D  F% P
&gt; data_test.getMilliseconds(), R, V) X. W  |
290
1 c, `  S0 ?& i$ X// 获取时间戳  r2 Z" L$ L0 V4 T
&gt; data_test.getTime()0 m) P* w) p' I! S& _, w  V4 g
1644587083290- q/ [8 x: n- M6 ]
</code></pre>
( M. W! C" D" P) L7 x<h4 id="282-json对象">2.8.2 Json对象</h4>
+ P9 l7 A* V$ r) m<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
8 {! Q) Y* ^! u/ QJSON.parse()  // 反序列化,把JSON字符串转换成对象
2 j+ b6 i, R, r, D: f
9 P* r1 c4 ~) g' r6 [// 序列化; I" h! {1 m" l4 ~! Q# N/ M
&gt; var jstojson = JSON.stringify(person)
7 t# h: ]" G) I  o! f&gt; jstojson  " z/ n% j' {( n- a! S
'{"Name":"Hans","Age":18}'; K* ?' M5 z% B% @4 p3 c

4 T- h5 x9 k7 c// 反序列化  I! o/ t; e% B4 z( f
&gt; var x = JSON.parse(jstojson)% j* L" ~2 g9 \2 A) o6 j  a
&gt; x
$ y2 d# j$ R" _. `7 e. H4 z6 H' X{Name: 'Hans', Age: 18}' T1 Q2 B, \0 {# I1 g2 j1 z1 ^7 L4 D
&gt; x.Age
) v4 `0 ]5 b' Y( x: ~& V18) o) i. x6 B5 ?+ X1 J
</code></pre>
" j# _/ j8 ^% Z$ }* @/ U<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
* M/ [+ R' Z; J) c' [! Z<p>正则</p>: P: P" e+ b! A3 E8 D
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
' I) H( M% P% W&gt; reg1
) w6 `+ }2 ]% A/ Y/^[a-zA-Z][a-zA-Z0-9]{4,7}/" V" x- Q! f& ~' Y2 o/ N
&gt; reg1.test("Hans666")
% b0 M7 b* N$ Z/ Ztrue4 P) a7 T; p( `0 p- s3 h. J3 M$ X
! p3 f" a( Y9 B/ P/ w
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/' _- O4 c+ ?' q6 C4 N
&gt; reg2; _: w+ v& |! @: K3 x6 w2 x( @
/^[a-zA-Z][a-zA-Z0-9]{4,7}/5 K5 o3 {! p8 p6 B( P9 O+ `
&gt; reg2.test('Hasdfa')
" @! v1 _! J8 a/ k3 \true
- l1 u6 t) u# I
5 _- B7 _2 T& n1 F全局匹配:
, _) y9 M- B8 I" x* H&gt; name
/ ~# K4 G4 h& w+ x5 q" }1 G'Hello'8 _! a7 I$ w( Z- g& P  U- e
&gt; name.match(/l/)
2 [  u& ]  {# ]$ `8 d* e['l', index: 2, input: 'Hello', groups: undefined]
( i  q4 p3 v' f4 h
# w, O* s9 W/ R2 y- x" _&gt; name.match(/l/g)
0 a1 X3 @" p% F# l(2)&nbsp;['l', 'l']
8 o$ i/ k+ }& k* t// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
7 C! K  y+ Q+ x7 |
+ D- O1 a; @2 ?! \" i全局匹配注意事项:
& ]7 {& h* u9 ^4 j! u; H7 k&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g/ N+ z! s7 R) P8 B3 Q1 x5 ?2 u" g
&gt; reg2.test('Hasdfa')5 E( |3 _$ r- J: p* s5 h/ D
true
* S% [. p7 z( m: t  Q&gt;reg2.lastIndex;: y- q7 {, i/ D, @
6' Y' r  o/ M7 t; r5 p5 C! |
&gt; reg2.test('Hasdfa')
& s0 M$ Y) k# Y1 u; a' m. \false
; u" \0 C* a% x  f&gt; reg2.lastIndex;
! u, I9 o! `/ J. h0 |01 \0 t( d( c9 o( Q3 c( L
&gt; reg2.test('Hasdfa')$ u+ U. ^/ {; ]" `* `9 e% q4 z
true1 v& Z: d1 y- i) i; G
&gt; reg2.lastIndex;
* @5 @: e6 U' H9 m( Y: k6
9 F0 t  a5 _: h/ O8 [&gt; reg2.test('Hasdfa')
0 A9 P: M0 p$ s2 U" z* wfalse( @/ K+ S: M/ C2 q" H
&gt; reg2.lastIndex;' R  j6 s4 [4 b2 r8 E
0# z2 ]+ T. s% b& [) ~8 Q5 u/ @
// 全局匹配会有一个lastindex属性
% ]8 H8 c: [4 @5 w0 Y1 m5 Y&gt; reg2.test()
9 l1 M$ w9 G% t% a0 S: R" Y. z2 s# Efalse
& C% ^! k. R6 w&gt; reg2.test()
" R4 q. I4 M/ T' Y/ Ztrue
- a8 i% [& ]" m. n( }) B5 S/ M// 校验时不传参数默认传的是undefined
6 y  O, {- N4 E0 W</code></pre>6 D0 |3 l# ^# ?; N3 y
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
! R( `' Z, p' t0 s, ]0 f5 F<p>就相当于是<code>python</code>中的字典</p>
8 d* |4 k$ s/ g2 l<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}( K/ b+ V6 Q; h& A
&gt; person" u" n6 W" y% ~  M" y
{Name: 'Hans', Age: 18}
/ _3 H# d5 {( B$ U&gt; person.Name3 C' D" Y& E* I' y/ X
'Hans'
% J' n# T' ^9 }&gt; person["Name"]
( G3 w; \2 _2 t" [4 }6 a'Hans'
# z+ p7 W9 a9 f2 c5 I! k( ?- D# A
// 也可以使用new Object创建
1 Q& y! Q9 t  h3 G( Y&gt; var person2 = new Object()5 I* @: t3 @* s0 v6 \
&gt; person2.name = "Hello"% V0 h4 w! ?" Z% y/ H) Q1 b5 U) u+ t$ N
'Hello'
9 `& v0 |+ E% ^" M$ m9 k" ]&gt; person2.age = 20* n0 q$ B2 f1 v, F* B
20( }# ?  U, F9 D
</code></pre>
3 ~8 K& {# ~0 _6 L- v1 ^2 \  _<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
$ U. c1 z  ~9 ?9 {8 I) b<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
8 g% b; H4 d1 P/ D( t# G" U6 z$ m9 C<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>' k) U' R3 ^* f4 d+ `6 q+ P
<h3 id="31-window-对象">3.1 window 对象</h3>
: ^; Q, E3 O' g/ l2 H0 p<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
" {: K( @% {5 d4 L<pre><code class="language-python">//览器窗口的内部高度
" ?9 K3 `# U% B9 Q( }/ s% vwindow.innerHeight   G6 u# Q, l% W6 N1 ?6 C7 x
706
% U+ e" Y/ {# i: s//浏览器窗口的内部宽度
/ |+ A" z" R$ M( X  J! v7 I* F/ ?window.innerWidth$ ]; x7 m6 U" v. r& ?
1522' u) Y3 }5 @7 U
// 打开新窗口' ^4 N0 ?$ v1 f( T+ {. z1 _9 d' T
window.open('https://www.baidu.com')
1 @2 H1 J7 E8 p+ `: qWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}: u/ `& D  U  ^; U! F, ?
// 关闭当前窗口
" G5 b' J3 x' e+ i" S  ]  ?! v, Rwindow.close()
4 ]9 p, {& X- G//  后退一页
8 k# k- c4 u& W0 J# }5 F+ Owindow.history.back()4 p! l; \- d( t$ |! T
// 前进一页) K1 c4 E0 w4 E( O# H# d1 L0 s! R
window.history.forward() ! F* i. a. s5 Q- X# p+ p1 p: Z
//Web浏览器全称$ ?9 N- |! x5 A- T5 d7 I9 c1 R) v: L
window.navigator.appName" n! }$ g0 c( P  o
'Netscape'  ^  z, \' o& z
// Web浏览器厂商和版本的详细字符串  A+ }& s( E# D! z& i
window.navigator.appVersion
+ p/ U4 j+ z7 D1 R! a5 U$ R'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 W, D2 r& K9 R
// 客户端绝大部分信息  t5 T! S' d! f0 n! w& t2 W0 W' z
window.navigator.userAgent$ o7 C0 _$ i* w+ V" E
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 b: h' f3 g2 x' ?9 E& R$ ?// 浏览器运行所在的操作系统) k+ L' s! D/ d$ A" v7 ~4 s5 Z! o$ Z
window.navigator.platform% c$ E. d) V5 ^( |7 t6 ~! }# e. N# V
'Win32'5 ]$ f0 g8 S3 H; q
3 B0 E' k$ _- h, W1 Y% E
//  获取URL
$ A: E9 w7 c5 n4 a7 U* b  xwindow.location.href
7 u# k  W) }6 X- e; B+ N// 跳转到指定页面
4 }, j$ V- Y. n; M4 W8 Q4 t; Zwindow.location.href='https://www.baidu.com'
0 n: J+ d; ^, k2 E, m// 重新加载页面
2 y; V* `, L) ^0 h& ?2 ^+ S4 Fwindow.location.reload()
; `) o& E" d$ Q8 V# L. R6 T</code></pre>2 N, D6 _' B2 R* h% H: x
<h3 id="32-弹出框">3.2 弹出框</h3>
( I& Z* C+ J8 p, G7 w<p>三种消息框:警告框、确认框、提示框。</p>
* D2 M2 x* s3 |! u5 S<h4 id="321-警告框">3.2.1 警告框</h4>
5 h3 m% O( l5 D, Y/ w<pre><code class="language-javascript">alert("Hello")' D, v# k, v8 G! ]' u
</code></pre>  N3 A/ P- l; T7 I
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
; n: G# _- X) j. m<h4 id="322-确认框">3.2.2 确认框</h4>. J! l  }( B& S1 _1 z" W
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>+ |6 O3 T( }. Z8 b, A5 w, q
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, E& J' Q% J# C) a! `3 Qtrue
  V$ b# P3 I5 t# {) r' i&gt; confirm("你确定吗?")  // 点取消返回false: L% r( C8 U" h8 I% t4 h1 b3 D
false, ?8 o5 u6 }: j7 e) U  E
</code></pre>
# u3 y$ d. u& e9 L) ]8 @( l<h4 id="323-提示框">3.2.3 提示框</h4>; l3 \& |# |7 N0 L
<p><code>prompt("请输入","提示")</code></p>
8 h# l0 B$ E; d. E! A2 W<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>5 f1 H+ x4 z8 m/ K/ ?" x: p
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
- ?8 U) _, }- I4 j! |  v, [' Q<p>如果直接点<code>取消</code>后端收到<code>null</code></p>2 I& ?* p5 o: @2 C. b$ S
<h3 id="33-计时相关">3.3 计时相关</h3>
/ Z# K$ i9 w2 D5 K3 y+ Z<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
! t) x2 X: _& T3 E' ]7 n<pre><code class="language-javascript">// 等于3秒钟弹窗- r0 b! I* T8 [' R4 n
setTimeout(function(){alert("Hello")}, 3000)
# A0 H$ d  F# H
+ X) q, f9 {" r: _" k0 Xvar t = setTimeout(function(){alert("Hello")}, 3000)
- Y) w, [1 v4 i; |  c9 d
2 W  d3 {" P9 t# w0 M* E// 取消setTimeout设置
7 p+ r+ r& E" X! a5 u' O8 wclearTimeout(t)% k) e% V. s; t
</code></pre>0 d; s1 D7 j# ?+ q7 P+ u. o
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>* w( c/ T3 v. \- q/ v: g2 }
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
* ]& o+ ~. g/ y<pre><code class="language-javascript">每三秒弹出 "hello" :
: m* i9 o5 o* |setInterval(function(){alert("Hello")},3000);
" [8 H5 U" V# N: l, s; V</code></pre>( X( x  C+ ^, Q# _/ b4 @" f
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>- f$ Z! s8 Y" y! ^$ n
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);( P0 V& x( q; [5 {& l
//取消:
, `1 N  A4 e5 }9 VclearInterval(t)
" Q5 H) j, H9 s: }: Q1 c: j</code></pre># b+ Q  ^0 |( m- q

0 P1 h* ]* N) O2 q1 `
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-7-5 00:24 , Processed in 0.593043 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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