飞雪团队

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

前端之JavaScript

[复制链接]

7903

主题

7991

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26039
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

+ H3 ~# u) }- d$ k<h1 id="前端之javascript">前端之JavaScript</h1>
3 s" y  Y: c) H3 u<p></p><p></p>  V4 K) S6 J; q$ w4 T
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
4 W  l' Q: A  L7 f# A5 K<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
) `+ X3 i$ V7 }8 I它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>) j' a! c" r/ p# c. v4 |  A& _0 u) x+ A
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
) b" G1 F7 L* \( {1 n它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
4 N2 s1 O; F: s$ p* B  ^<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>5 L' s  b+ o0 p$ }+ h: y7 s
<h3 id="21-注释">2.1 注释</h3>
7 f3 c- ]4 F; j$ O6 I2 u<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
& W- C: |0 e6 M5 `" ]<pre><code class="language-javascript">// 这是单行注释
& C1 b' U7 h8 V. M/ K6 I
* R. X8 I8 ^3 h# \6 F- x9 }/*
( [( [: T4 q3 q$ D这是多行注释的第一行,
% p5 I; e! E- |0 f- M: p1 b这是第二行。6 B( Y: K  h4 M2 O! h5 r) Y
*/
1 C" v2 I: B4 I+ L$ k6 R# z</code></pre>: V- w. F, L5 b4 c2 y9 V9 ^5 |
<h3 id="22-变量和常量">2.2 变量和常量</h3>: P" n& `% v8 f+ T) t! }$ B
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>8 e3 X, E+ u/ G# k
<ul>
- l' ]0 `( r8 x<li>变量必须以字母开头</li>
8 e7 L/ a& b6 R1 L4 u<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
+ P& C& g6 B2 I* T  \<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
$ d; e% I  i: i( P</ul>9 H* ]! ]5 m: T. Q
<p><code>var</code>定义的都为全局变量</p>5 n& `  D1 H% J" b& O) B
<p><code>let</code>可以声明局部变量</p>& l  h: L$ t' e1 b
<p><strong>声明变量:</strong></p>
- h- y% u5 P. G<pre><code class="language-javascript">// 定义单个变量% c# W! ^1 z5 e
&gt; var name
6 C5 Z$ u) K0 O8 k3 \; t0 N2 G&gt; name = 'Hans'
" a7 ^3 C1 x$ }( H//定义并赋值
. p* L7 Z% `8 Q3 U&gt; var name = 'Hans'
! C. `4 [" y; g: ?0 @" O$ t&gt; name
- G& V" [* }& x8 y. `'Hans'; N% v- y# o& f- R* j! E

7 G2 D# X; z) a; q# @// 定义多个变量
5 A* Y% D" n1 c  H9 i&gt; var name = "Hans", age = 18: w% g$ I" n. P
&gt; name4 Q& u0 ~: f; [8 D8 ~8 z0 w( j
'Hans'
3 _; V# u2 m- A8 b% J5 `/ C* T$ g&gt; age
2 J- c7 r1 ~* v; m: k% R, c3 J18
/ r1 Y! o  n: u7 y' b5 v
) t" ~# i/ L5 y8 c/ q7 s& ?' h//多行使用反引号`` 类型python中的三引号
! a6 ?' H" L7 h, ~, y&gt; var text = `A young idler,/ v& R4 {* d# V2 G6 V3 l2 f
an old beggar`2 L) Y: O  X6 y8 Y( B0 a# e' T
&gt; text
0 I  |& @" w8 S7 \7 S1 f+ z( _'A young idler,\nan old beggar'
- ]7 M1 ?, c1 _0 ^6 E</code></pre>
, o! I; o4 H) ~0 e/ B* t<p><strong>声明常量:</strong></p>
0 k& o+ Y' {8 ^( e" F' H<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
4 }& S8 v' z# A" u" [8 S4 h' {/ j/ K; C' n<pre><code class="language-javascript">&gt; const pi = 3.14- s# q' D# {/ |
&gt; pi" X& Q4 _$ }2 I, {" K
3.14
; W9 i. U! t% Q  @& `&gt;  pi = 3.01
4 p- w. x1 B  ~+ L% q+ RUncaught TypeError: Assignment to constant variable.3 A/ L6 D; a( Y8 A
    at &lt;anonymous&gt;:1:4$ |2 z0 ^# ^8 S# E* [- f( p
- ~; d: P2 k2 N9 ~9 y& J
</code></pre>9 v$ C* w% N! \$ N' U
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
3 |/ i9 h6 t2 F8 a- ], G4 f<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
7 F( I8 c) `6 y* ^. |8 ?<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
! S3 m" v" O1 q' F" M. W<h4 id="231-number类型">2.3.1 Number类型</h4>5 ~  F# I* |7 b9 U
<pre><code class="language-javascript">&gt; var a = 5
! P0 C( G2 Y- B2 ]5 e) z6 P&gt; typeof a   //查看变量的类型  - v6 d! a  @- b# q/ P
number
) D! f6 S/ n: a9 Z! P
, b9 q4 ~& O$ z* x3 Q9 z! \&gt; var b = 1.3
7 d) Z7 e; F. c4 |&gt; typeof b: S$ Q# z9 ]0 r% ]
number( E8 B+ o( }% f; }

* L+ h; y9 Q2 X: m, F: L// 不管整型还是浮点型打开出来的结果都是number类型
  {# ]2 L4 I3 P* C5 N- \' t5 {# ^4 k$ K: ]$ \) }4 p
/*
8 J- V7 L0 g0 _; f: Q: B' cNaN:Not A Number/ ^$ E( ?" _8 X; v
NaN属于数值类型 表示的意思是 不是一个数字
0 R+ q  p' I6 ^1 D6 X3 U; {6 H*/  l) w% I- w0 L1 x! j$ f
! n! R& z; G( Q4 |1 y
parseInt('2345')  // 转整型
3 y5 W; a* s; z# @2345
  {8 z  f  b! G7 c, cparseInt('2345.5')1 w% M" d6 w. W7 X% u8 _4 W3 E& z5 Y
2345
4 S1 A( b3 W, k3 ?% j3 x  n0 s: [parseFloat('2345.5') // 转浮点型
5 a/ |% X" J" G8 t2345.5
' ?# V, |; Z  |! I4 \2 rparseFloat('ABC')9 @! [9 B- U3 s0 Z8 y  w. X
NaN  F, }8 ^2 a+ u4 {0 k- \4 s
parseInt('abc')
2 ?( }7 ~% F1 x* v) \2 GNaN
, B  p- u; ?3 R# A$ u1 Q0 y</code></pre>
3 n! U9 y0 i- N<h4 id="232-string类型">2.3.2 String类型</h4>
* U- s: t4 J/ _% E' i5 F. w<pre><code class="language-javascript">&gt; var name = 'Hans'
# c, @% I( S/ E6 [: C3 i&gt; typeof name3 b" s7 x/ y% g3 q
'string'
2 S8 t$ R$ K& M
+ s  W8 w# F! J9 ~! q$ T+ a//常用方法2 p7 W1 Q- V" Y; ?, J
// 变量值长度
: q3 w7 x! Y, c! r+ w* e&gt; name.length
! |  L+ u+ q% R) P+ f4
8 o$ M* U( P' r) T$ ~// trim() 移除空白! J  F- J7 {- |
&gt; var a = '    ABC    '
' x' T; P) `4 F: S3 j&gt; a( {( O. ~" `  l" I+ I
'    ABC    '' o6 w3 e0 |: n5 b0 x# m% ~0 V: c2 v
&gt; a.trim()% |' m: a. S4 s1 j+ z' D3 z4 e
'ABC'* e  T  H1 v3 ]2 x7 Y* v; I
//移除左边的空白
* _2 k+ q4 }9 ?&gt; a.trimLeft()
$ c4 I0 i4 l! }# m% Q( ?'ABC    '' V/ [0 o# G3 b* f* E( M
//移除右边的空白
( s  x( l& y) n- y! l# I3 w! e0 m4 x&gt; a.trimRight()
6 Y8 Y" l3 H/ _* h/ B'    ABC'- x$ m& |9 w' V1 G

+ p! G7 H8 j4 p6 p2 A//返回第n个字符,从0开始$ b, N) b& m0 C
&gt; name
# s# I* m5 j/ [1 \'Hans'
, l  ^# Y* l( I0 j&gt; name.charAt(3)
0 p( @' y! b, |$ t's'
' b* S0 {0 o% O) o9 N. C&gt; name.charAt()
0 }+ X! l5 c# a: |'H'7 _4 v& V" G- u
&gt; name.charAt(1)+ R% g1 Y, I4 ?: M8 z$ v, J
'a'  n0 d; X6 ]! V$ X! A
( J7 i: R5 {% ?: ?" \& b2 \( u
// 在javascript中推荐使用加号(+)拼接8 x8 V$ x8 K. [' D# c* _) z
&gt; name
* i% h; O& R' C: T/ h9 i6 C'Hans'
) Z. \$ c# C0 }  j1 X6 J&gt; a$ F$ P' N; R. x) n5 e
'    ABC    '
+ b7 R/ j& P4 |# ?&gt; name + a! \8 ?- T, R8 Q# a  ]; s% M! t
'Hans    ABC    '
, \9 |) X; G6 r: q// 使用concat拼接
; T: s; W) u+ ?3 g/ Q) F&gt; name.concat(a)9 j. c+ M' N. b# T. X7 f3 B
'Hans    ABC    '
9 D+ a1 I2 k/ W6 N1 q/ H: C5 i7 \
//indexOf(substring, start)子序列位置
1 M. j% K, w# Y5 X9 [+ c/ h6 B! R! x9 p! E' U2 w" j0 @0 D/ C- A
&gt; text
3 d+ N! N7 I9 f) o'A young idler,\nan old beggar'
; [' I. g1 |/ U' H&gt; text.indexOf('young',0)
+ N' p9 T0 c3 `! \& |/ ]2 O2
4 G# ^* ?7 r2 d- O! [* e. H, r  d8 f9 n- b
//.substring(from, to)        根据索引获取子序列1 I. m" J0 v+ F9 Y( m6 N: ~
&gt; text.substring(0,)" W& V  N  l# j- v' c3 v
'A young idler,\nan old beggar'
6 {% M4 s. @# a* {6 g" R; |&gt; text.substring(0,10)7 [2 |" `. c$ F' y9 M9 n1 |
'A young id'" ]6 I% V% ]7 \+ l. r/ ~, }

2 [& p2 D1 p7 q6 o3 R// .slice(start, end)        切片, 从0开始顾头不顾尾/ ^2 A7 J1 T- W' G2 E
&gt; name.slice(0,3)
6 v. \  ]2 ~; ~+ T9 `'Han'
  J+ O2 `9 {+ {1 Y) u6 I" b8 y) J9 T/ B8 f
// 转小写
  x/ h! B/ ]$ }. G&gt; name
5 G3 g+ [3 w% K' x'Hans'& ?9 H# d) f/ z$ i3 S; ]* {
&gt; name.toLowerCase()1 _% Y2 ~2 z$ f. |" U. S5 {
'hans'0 Y& D% Z' _* ]7 L% Z/ ^5 L% N
// 转大写: ~2 V. Q. U% h1 U3 M& m- F8 i4 j& \
&gt; name.toUpperCase()  z8 J& f' f. k  B
'HANS'( q/ }8 R7 j( a. C

* p  {1 W! x/ Q- t6 G/ ?- N// 分隔3 n  E; m/ V( P, Q+ h' K
&gt; name# y# q4 ^" ]& x9 D9 Z
'Hans'
2 h6 E4 E# F% S3 U&gt; name.split('a'): A0 ^2 u+ W+ _  d9 {
(2)&nbsp;['H', 'ns']
+ N* Z5 q7 x" h( i" P</code></pre>6 I" C# C! P2 O7 B
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
( \" L; ?% x' p& E  b<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>% ?3 ]9 }+ f" {+ p8 E
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
- s% P- j% l9 B4 m. o<p><strong>null和undefined</strong></p>
( ?% V* M) A7 y5 k7 L7 W; b<ul>7 l. [# N/ C+ I: ~+ l% T
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>" ^. m9 k& L* m5 W4 O3 f6 G, d1 K
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) L2 b, t8 B3 ]$ E( m</ul>2 F* u' z. S8 s6 R
<h4 id="234-array数组">2.3.4 Array数组</h4>  A8 e( }  l2 ?2 \8 r$ I1 n
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
: k( {% R7 \2 }+ q$ W<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] # Z  w  ~! q3 q. R5 ?* c2 e! M2 n7 h/ L
&gt; array1
0 m' O" e. q. \6 u: L# H(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ c9 }# S6 k$ M6 H8 a. P
&gt; console.log(array1[2])  //console.log打印类似python中的print
& N% Y: Q( i6 ?' S6 ~$ R" P) d% ]- D3
$ @& f' Q/ c: Y6 J1 t) U6 y7 y// length元素个数
1 q0 T! X7 e- r&gt; array1.length8 w, ~1 N$ ]1 {  w8 X
6
$ Y2 R2 K  l+ o3 H+ ?// 在尾部增加元素,类型append# U) M. B# k: U: G- |
&gt; array1.push('D')
, K0 H9 K) B. |; Y! g/ O% ]7
5 x) @+ ?$ `4 U&gt; array1: S9 q, f9 X& a9 g1 y) f
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']" n- M, y3 t+ U" N, M0 `, N
// 在头部增加元素
/ u# j5 I, u/ x. W/ c&gt; array1.unshift(0)
  v4 _4 s8 i* A# i% L# v  s8
, Q( S5 V" }% J! ?5 ^, }&gt; array1
6 J) U7 b4 G  Q9 t(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
/ `5 d. l5 g- f$ j
2 I6 e  d* j# L, {! _. ^//取最后一个元素
: t6 L# i( i- c  T% i&gt; array1.pop()" R5 @5 g) o1 ~7 w4 O) B
'D'4 d: F+ y* O2 l2 U4 [& D. v
&gt; array1
' O5 |. j- w+ {& {# h& y(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
6 T* l/ z4 _+ c6 K* W/ h: G//取头部元素( [0 }5 R5 C7 L/ k/ \. u
&gt; array1.shift()
. g0 z) e6 u/ Z/ l; ?* q0
6 U9 O) S! B# g# T&gt; array1& O8 c; d& h8 Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- X9 @- a2 s# U  @6 E, H

5 U5 E" V; ^( @( z2 \//切片, 从0开始顾头不顾尾
' {! ]1 S5 Z, `9 q&gt; array1.slice(3,6)
8 O) g5 X( U+ T+ {5 ~5 |" F$ U(3)&nbsp;['a', 'b', 'c']$ c- N  A  E' b
// 反转, d" F% j( h1 _- G& S
&gt; array1.reverse()$ [, E; ^3 r) t+ B
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]  ~1 G# L4 D4 L/ w* ]
// 将数组元素连接成字符串
" O' a- f4 c# m+ Z/ [2 l&gt; array1.join() // 什么不都写默认使用逗号分隔
- x$ }9 D0 K& i: O; k  E'c,b,a,3,2,1'$ g; L% w) k; P3 l: B6 N; N5 X* u
&gt; array1.join('')1 v2 \: l2 U; e0 c) }0 B5 B. Q+ {
'cba321'' L0 `1 P5 z" b/ C5 R* x+ Q
&gt; array1.join('|')
$ e% ^& g4 c4 a# Z$ u; |8 j6 H, e'c|b|a|3|2|1'% r6 d% s. K; q+ f+ w" I' [% I

7 c( Q2 z( V6 ]2 S// 连接数组' H' I4 R7 }2 `4 _: c7 V
&gt; var array2 = ['A','B','C']
6 W! H5 F2 Y& S% ]. D& K# d&gt; array1.concat(array2)
6 r4 U% H' l4 w(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
. e+ @4 ~. ]5 X$ A: e6 O" G3 e( V0 m2 g+ S
// 排序3 s* [( q# A0 G) C
&gt; array1.sort()
6 ^: j0 M- k$ L) s  R: T(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 s$ h. H; w! }. m$ `4 L. X# f6 x# ~) r" w
// 删除元素,并可以向数据组中添加新元素(可选)
0 H! g( t0 d) e+ H0 z&gt; array1.splice(3,3)  // 删除元素  Z/ f1 e: A: P$ A+ j% z( T
(3)&nbsp;['a', 'b', 'c']
+ G$ Y1 f7 S# c- @$ ]. a) B7 `&gt; array1
* g) r6 w+ D* [5 r: r9 A- f(3)&nbsp;[1, 2, 3]
- Z& J' f2 I* v) o&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
9 n4 K5 N) G: E) U[]; l1 ^. j# r/ _" n7 |6 U( u
&gt; array1( V: ?* E8 ?' j) y% ?
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
% C' s- p+ A- z6 k/ A& F! ~- H
4 X' V2 \$ q- n. v6 g8 G/*" G8 L+ o% H! T
splice(index,howmany,item1,.....,itemX)& }; H- M- M0 n" f+ q
index:必需,必须是数字。规定从何处添加/删除元素。- P8 W  b4 T2 |* e8 _( K# U/ _& r
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。9 d8 u/ w% [' v, Q, j
item1, ..., itemX        可选。要添加到数组的新元素
+ B' B0 m3 L1 E- }- O, W*/, X( @9 Z% X6 h
$ ?2 m% [! n6 R. a4 U
// forEach()        将数组的每个元素传递给回调函数
  W# `: g8 T1 H9 l/ R( f( w/ {&gt; array1.forEach(function test(n){console.log(n)})& U  x' a# L0 x; v% |9 I0 V
1, l  F+ g1 B7 J$ h! B
2
" z: w5 K" R" v: F 3
8 m' |5 k: O+ l$ U' h7 v/ g) P A1 N4 Y: g( J- ^& q
B
; W( B5 @: }( }6 r1 P' c C! ?6 T8 \( N; K3 H: _  Q$ i
// 返回一个数组元素调用函数处理后的值的新数组
( r3 [& T7 K2 \; c, g6 v( N&gt; array1.map(function(value){return value +1})
" _' s8 A( ~! }+ q3 W, }' z! c(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
# l( J; a: P- U' H</code></pre>
8 N- e, D% f3 l<h3 id="24-运算符">2.4 运算符</h3>
. e- {$ G% o: T% l6 }<h4 id="241-数学运算符">2.4.1 数学运算符</h4>9 j) [6 `. Q- S$ |
<p><code>+ - * / % ++ --</code></p>
: V5 ~; \6 s' ?% X5 r/ m<pre><code class="language-javascript">&gt; var a = 6% l0 P1 j- O* b
&gt; var b = 3
. j% x! y+ v6 H* Z5 v- c& y, d// 加
  H# g( y6 c' A8 V0 k9 n&gt; a + b
$ L8 D' e' s& t3 u8 ]7 w1 R9% I6 a9 e: v+ K9 W6 f: S
// 减
' \8 j0 {% C& N" ^0 H&gt; a - b4 N1 a3 F# o/ {' b) O
3
1 ^# C7 G2 n/ h8 W* a// 乘, x+ z: F) ]9 i; k4 F
&gt; a * b
3 t" D! k; W9 a2 `3 J+ y) n18
/ u) O6 i- k  D) Z9 R4 J// 除
9 p  m% s$ f- H# M% D4 @&gt; a / b/ Z: D9 i# Z3 P- E
2
* ?  O1 r; G( a4 Y// 取模(取余)
5 u! X' A2 ]' G% x5 g7 t- D&gt; a % b
, m9 @4 i8 Y8 e1 l. b9 m0
( |8 i' A. A! f& a. z) v// 自增1(先赋值再增1)
/ P# j6 p) N5 d$ T&gt; a++
% n! W) o) Q$ |3 D3 E6: R- O7 E" q/ B5 a
&gt; a+ S6 `* p0 U/ V1 I, z$ ?
7
) E5 P5 S# z4 X// 自减1(先赋值再减1)
4 d- ^3 M/ {' z0 [( J9 `8 e&gt; a--
  @% p. Q6 D! ]: B  V2 z) C+ _; c7& j# k% x, g6 j3 x; O, f4 E* a. U
&gt; a
9 v8 R) j& E* V; A& Y  G" q6 I/ H  ~66 W; G# O% K# ?. N' \8 T
// 自增1(先增1再赋值)  U8 c. N9 M; n1 k: n, h8 v
&gt; ++a
, Z# n9 Z& N1 w1 l' U- G8 f' c7
1 h+ O* [/ [8 G1 ^! X" H6 [// 自减1(先减1再赋值)3 ^: x3 k" e7 M0 c, w
&gt; --a: _" K8 Y4 l7 _& h; ~& }3 U
6+ w1 k9 j2 Z9 X: i7 w
&gt; a
: S9 d* S4 ^3 D3 @5 I2 O4 w4 y6
: t5 o+ z9 K. X. _/ N+ e( _8 `3 q  j" \; M* v9 s- `! s
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
: O+ X+ ~, W/ ?# d, {/ E</code></pre>
, o( W2 B9 ^/ p<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
1 X2 Y/ t2 z. W2 V5 T# z. d2 o8 \<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>4 }! O; b) S0 E% `& y# |
<pre><code class="language-javascript">// 大于
- O$ l8 _( q2 k- M4 u- l% B8 M5 X  `&gt; a &gt; b
- \- D4 G; u0 F* xtrue% n3 c, B5 s" i* z( `9 r; `& i
// 大于等于
) ~7 W& [% [( ^( d+ X&gt; a &gt;= b
' [1 Q5 O; ^/ W' o1 C% ?true9 x* t6 Q: G7 g9 @
// 小于5 }. J& I/ x8 g; ?( P
&gt; a &lt; b  l9 Y  {& j& X
false
% e) e$ }. I4 n0 L9 |// 小于等于$ N# M% @& [  g& O' v- ]
&gt; a &lt;= b
4 r/ b7 V% \" C- I: yfalse, [) O6 L% q" x7 ~4 I' }2 b$ S
// 弱不等于
2 D+ X1 K2 E* F* @: J9 Z7 [$ c&gt; a != b
( |; U( w: n6 B) }true; e9 i& _! _/ n/ x7 ]4 [  o, L) @
// 弱等于; q5 ~$ o# A, `- i7 v
&gt; 1 == '1'8 P3 A1 R: ~1 C5 }* G
true& `1 l- H( F  p( w
// 强等于  C- d9 `1 G+ i; N& d. x
&gt; 1 === '1'5 n8 H0 b) I4 e- u. i, G! r+ a
false
1 p5 v% T# V6 l# \3 N) ~// 强不等于: R( e. w8 x  Z& R
&gt; 1 !== '1'
- z0 B' g' ]: h+ q1 y/ g' Ptrue2 Z5 m0 k5 a3 l0 [
7 h; i1 z/ Y4 G# ?- w" v
/*
% J+ n0 _  e/ X1 rJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误% U* c: k4 G2 R5 |9 g- ^7 g' m: [
*/
+ h, I( I% Z- _0 d0 d* g0 J</code></pre># h* ?+ M# Y' M8 P5 x, P0 H4 w
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( @4 p8 `/ z( d  |" V) P<p><code>&amp;&amp; || !</code></p>6 o  O3 Q& k- e8 w; y, |0 r
<pre><code class="language-javascript">&amp;&amp; 与
3 x; C9 m' J3 Y4 `- h5 F0 d* ?$ o|| or
2 W& ]8 ?& u& \- D  ]3 h! 非
# {0 e1 M& T7 q" D3 a  g/ g</code></pre>
: k* [/ U9 @/ s8 H- u9 m<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
! K4 A. j/ }: w3 @) c<p><code>= += -= *= /=</code></p>
0 v1 X1 @1 v0 E6 k, Z  h<pre><code class="language-javascript">// 赋值, f' ?3 M9 U2 S  ]- R9 Z8 }
&gt; var x = 3. }2 Q" W! j$ V! j
// 加等于; b# E$ E, {) E# i
&gt; x += 2. n# n* O% N$ Z* B" \. X  P3 X8 P
5
, ]/ k' `; @4 b7 t9 N" C5 X/ h; h// 减等于
; d7 M- G* D0 ]- j: J- [6 ^&gt; x -= 1
6 c5 q+ O& T) L" \1 H& F4 z$ R' ~( _4
, V5 d% A# b# h9 M// 乘等于
( q  B, \, @6 M% m; K  s&gt; x *= 2
' K' N! u8 O* V$ e5 R' |$ d80 o: q' y& e" [, ^& U' O
// 除等于4 y$ l6 s' H! W5 C
&gt; x /= 2
  K9 `7 m& C, I& G+ B/ p6 ^8 t40 P  U7 @4 o, e/ r: c$ i; C
</code></pre>& ]9 A2 P; y5 b
<h3 id="25-流程控制">2.5 流程控制</h3>& a2 o, a0 i6 b( ~" C* |
<h4 id="251-if">2.5.1 if</h4>% w. B: @5 k. x- k5 S
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
2 U2 f2 o' q9 _, M' ]9 @2 C" b, C/ @* X# [
&gt; var x = 3  s9 c' `, Y4 ^  I4 ~, O6 L
&gt; if (x &gt; 2){console.log("OK")}- [9 u* \: M$ ?" U
OK
8 s3 o% W: B3 {7 S1 r4 e5 J' D* b. l* Y3 z
2, if(条件){条件成立执行代码} 3 h: b. d) |2 h% Y4 M
        else{条件不成立执行代码}2 ?" c6 `+ b$ h  i! n" q

' o  I- i: ~( o" y&gt; if (x &gt; 4){console.log("OK")}else{"NO"}3 q' `* W: [& \  @1 R, E
'NO'
- B' _2 f% E, t& V: s8 b0 G* _& a# y/ i  ^
3, if(条件1){条件1成立执行代码} ' s  F. K5 l, c! r* r
        else if(条件2){条件2成立执行代码}; E' V$ O) ]; i
    else{上面条件都不成立执行代码}
, D3 R2 I1 F) C& c% i# L4 g$ n
/ e+ @8 O  R7 S/ C* n9 B&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
  c5 h( _2 B$ h7 ~4 G( a# [, N  { Ha
5 T* V7 q( |2 C9 Z1 T# \3 O</code></pre>
5 `- {# g) F9 i% m/ @; C<h4 id="252-switch">2.5.2 switch</h4>
) q  E! v# x$ B! t3 _$ g4 y3 j; ~<pre><code class="language-javascript">var day = new Date().getDay();9 n, J/ \1 X( `# ~/ \  `+ V+ p$ s2 c
switch (day) {0 P7 z7 r0 ~) u& I$ y  l
  case 0:
! ~5 W) h$ c6 L* I  console.log("Sunday");6 `4 J0 b; r+ u0 I: G/ q: D
  break;7 v* C2 T8 V6 s0 c
  case 1:
. ^& r1 n) O0 f7 p  console.log("Monday");3 l9 [- m3 U7 v
  break;
* W! k2 L. }- ]- Y" c" Udefault:
# P+ H  P# H$ P. Y3 {$ o5 `* b8 m  console.log("不在范围")( u* F1 ], h: o
}
: X0 F" R2 {3 _* s# z8 { 不在范围1 w7 y1 O' y1 r& n# `  D
</code></pre>; i# i5 U# g0 f* R
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
% G9 N% w( h! n) O) L+ `<h4 id="253-for">2.5.3 for</h4># {) S9 d+ b4 |$ C
<pre><code class="language-python">// for 循环
* ^+ x+ w- m5 y8 [) k/ r+ r        for(起始值;循环条件;每次循环后执行的操作){
/ n) s' U4 k  b; v, h; C        for循环体代码
- S4 a" V( L* a$ `- t2 ~* O' t    }
1 {9 {1 v+ {6 c* W! Y! l9 C0 T' J3 Z: b
for (var i = 0; i&lt;10; i++){
' u2 ]0 o: k! g: D    console.log(i)
, X) R/ S- i9 e% n" t}/ R% t" J! Y' C5 U& \8 [( S
        0
; l& B6 a/ N- [3 H0 E- J        19 z, t1 _' X, H- n6 Y: ]! V/ d' N
        2
% [% Y0 v  J0 J* v+ T        3
# N1 P' y5 Y. I* P        4+ E  Q+ [9 t2 B+ D6 D# `1 P
        5
# y5 F8 W& @$ }3 E1 m4 j* Y        6$ c9 t* A; A; z4 i$ m: Z3 Q( {
        7
. h0 c" p( H7 C- ?! ^7 |; e, v. e9 Z        8
$ V% K. y9 p9 Y" j# }& I        9
& X& ]( H2 M7 a3 e0 S; S! Z</code></pre>
. c! p5 P. H' s) D" [( L" l. e<h4 id="254-while">2.5.4 while</h4>, q% N- B% r: C4 i" d& l
<pre><code class="language-javascript">// while 循环
7 F6 I  R6 F' T" Q4 ?3 i; ^4 y; c- D        while(循环条件){
7 K$ X3 K- }7 J4 F6 U& W/ Q6 o        循环体代码
# G+ l* L& F% _* E$ z1 A    }
% p: k& L' D# K- }6 {. ~5 Z5 z2 i5 ]5 b; `9 _- {, A8 X: D6 t
&gt; var i = 0) C. p7 o# {7 R$ x" T
&gt; while(i&lt;10){3 }# h. H, U8 d" |) M# S6 R3 ]
    console.log(i)+ f0 q, M. B5 I( A4 g
    i++, G1 X- \6 V2 z
}
* T* }8 W) |& r( s 0" ~% X6 [6 ~, }6 S) r
1
* H* T9 W' S  @& ]% @$ w% x 2# q! m8 x: ]* V' Z2 v$ @2 b
3
( Y  g' d, X+ D' K7 C 4
, K% }3 F% o+ O( R  x% | 5' G8 M6 n5 E# v! p  z$ u
66 ^% d& g/ U- s5 X9 w
7. _$ Q+ \: R% C
8
( x7 K0 b' z" E  B' d* E 9" R' w3 d  i- I& h8 ~
</code></pre>
  E! ^6 ?6 O/ X  c6 M<h4 id="255-break和continue">2.5.5 break和continue</h4>! O2 s& l" F# ^
<pre><code class="language-javascript">// break
7 ?) [! v8 ^1 g& N/ h9 Vfor (var i = 0; i&lt;10; i++){
2 ~! J9 W% H4 m- z5 [3 o    if (i == 5){break}
+ a/ j. h7 I: H3 E) _    console.log(i)) [4 Z* y% x) l+ r6 I
}6 E/ T: M  \: W- S) R3 P
0
( b, A0 O/ O2 K! G4 S# v6 P9 N8 f/ ?. a 1
3 ]2 K0 E8 I+ r$ ~* w- L$ p+ m( ~ 2
: @6 q+ o  ~/ z 3
; o; h/ D- m8 z  N2 `$ s 4
  ~3 c. l- m: g: ?// continue4 _" q3 E5 E1 r5 @) R
for (var i = 0; i&lt;10; i++){
: u/ x5 b# o3 T) l/ B, b1 z    if (i == 5){continue}) J5 Q$ U5 ]. [4 `0 D4 @$ D7 U
    console.log(i)3 u, l% M1 l/ ?! q+ O
}
' F$ R( [) _: V: k% t$ D  B- q 0: K2 [, w7 \' {" a: n5 Y" r
13 z- \* X( H* D3 E7 t3 f
2
) u  v$ J5 w7 v9 x6 g* j 3
! s6 r6 J0 n2 G4 O$ I 4: a+ L& |  w! q: M) m
6
" `1 s( a3 W& E7 L 7
8 g8 C1 O9 F7 V; Y 8" X. C3 y* _8 \- E4 `. I
9
; f" V! R6 e: _- B/ p
; u2 l3 i: z* ~2 _& a  T, h</code></pre>( a9 w3 V$ n+ N; x; ?5 r
<h3 id="26-三元运算">2.6 三元运算</h3>; c$ G# e$ r. z: g8 B" \
<pre><code class="language-javascript">&gt; a: v" ~: ?7 P0 w3 f" o5 X5 |
6$ f5 }9 ?* K8 X' {- I
&gt; b) r% G9 G) B) w8 M* Z- D! A7 x2 l# K
3) n6 R, e0 y% S) \# N

* D; @' ~. c' ]" {/ e4 |' W5 L//条件成立c为a的值,不成立c为b的值, G+ Q+ r: q2 x* q' w
&gt; var c = a &gt; b ? a : b/ _: O3 t! i/ L% b, H6 u! b
&gt; c
- l; C5 \! p* r  N61 F6 \3 p5 V/ l4 H: N7 N
( @6 i& j* r7 ~& u, g+ n
// 三元运算可以嵌套
/ G% V, S( K2 Q) K</code></pre>
" L5 z6 I  M2 Q1 s2 C<h3 id="27-函数">2.7 函数</h3>1 w+ ]6 n0 f) l
<pre><code class="language-javascript">1. 普通函数
% H* o& P, z3 X* h&gt; function foo1(){$ S  G. T7 q0 p/ e. p3 k+ n
    console.log("Hi")6 @( Q' K7 u8 {& {
}. L3 c: B$ z1 `( ~+ W; k8 l0 m% n
- ]$ `  K* K, [; s  H9 O
&gt; foo1()8 \/ E/ {! c- \" w; U
        Hi. }2 y0 T3 D2 y# G/ i
2. 带参数函数
1 u, l! J0 N7 y9 C* a&gt; function foo1(name){2 K; {* V& w' t% K+ q& `' m
console.log("Hi",name)8 ]  p0 c' q2 ~' c' z# u) D+ V
}
2 L# Y6 q5 D$ f3 e" P/ J# t$ W
! q: i; n" b/ ]5 u&gt; foo1("Hans")
7 f# Y, C# X& X$ a6 L* p5 gHi Hans
/ n  A7 m/ _8 j! i/ M' A6 Y8 ~' H' U/ e$ s  J
&gt; var name = "Hello"  w, E' m# Q: e1 `3 {
&gt; foo1(name)- d% \" ]. A1 ^  j! x6 i$ g
Hi Hello
! P. _0 H% W, c/ x! z" K; j
; `' ^! N1 l% u- I( C! }3. 带返回值函数) ^" m2 k1 O! ]0 M
&gt; function foo1(a,b){& W1 P! n8 r; ^. L
        return a + b   
4 E& V* }$ s0 V, q! |0 r}
4 I2 ]0 V3 Q, ?5 P5 p* |# `4 B4 E&gt; foo1(1,2)
& r8 B( G" ^) Z* U2 G! O0 Q3
" F" M! l- S, W" _9 l  l&gt; var a = foo1(10,20)  //接受函数返回值
5 ^; H9 d. B- Z6 m4 G: t&gt; a7 X/ S5 D1 _5 t( {7 V4 Z
30
% q, Z* M& F7 \/ _
' b8 j: y. @% ^6 N' P! p4. 匿名函数
/ I! y6 D- |. P3 x% f* b3 T1 |&gt; var sum = function(a, b){& K$ U( Z# v- ^# g" u
  return a + b;
  e/ Y. D) ?1 W$ k}
% }. ]* a5 z0 Q5 i0 @, v6 `% T$ Q&gt; sum(1,2)
5 ]: l0 r; }) }8 N9 W# n3
  E" e5 Y6 u8 {5 {4 o) e+ {, Y. q4 B8 ?: Q& M5 E7 U
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱6 r0 k/ F9 ~. q; ^9 U( G
&gt; (function(a, b){
- z2 D$ p8 k0 a+ ?  x; Z  return a + b3 N" ]4 ~/ E# q7 y* \$ @& K( H
})(10, 20)
+ |# `# @* Z4 x3 _6 G30% v9 a$ b6 N9 \2 f- r
* h9 {0 f1 q6 Y' n  b
5. 闭包函数
0 }% V4 \% Y/ {( D// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
5 Z" Q* E& C/ Xvar city = "BJ") s0 m8 g+ C6 Z0 X9 q$ J* f* B
function f(){8 z% w$ F2 O- @' {
    var city = "SH"
  p. L  [' T- \' }+ p    function inner(){  _( V2 }' p% t3 |" c8 c: G
        console.log(city)& m" ?3 V0 q! |: y
    }
" U0 q1 [+ t7 u8 l    return inner
7 H# z3 `1 m$ r- W( k  ]5 J}/ Y, v! {$ P- b$ d0 |( W  ]2 f: Q; G3 y
var ret = f()/ \' A$ O/ I0 l' `- }) S, H
ret()& g) K+ a2 N0 j4 o
执行结果:+ E9 w" s  I% E0 O( x: {9 b# t  t
SH; n- ]( [1 @! h
* |& U( b; j% s
</code></pre>
. \% r9 O" ?9 ~$ M+ U/ g<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
+ b0 W$ {) ?) W/ [9 L" k<pre><code class="language-javascript">var f = v =&gt; v;
8 `& x5 k* u1 n+ y0 k3 B5 W' h// 等同于  l7 v# j% R1 o' q7 p
var f = function(v){
- {. g4 @5 \$ O, ]  \1 F  return v;* p/ z# @7 A& ]  x5 w# v
}2 d1 b" h4 D' o9 {7 Y/ V- b
</code></pre>( }- T8 X, Y# j# e, K( n" L' m
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, K" {& S& o. l! ^" t1 y<pre><code class="language-javascript">function foo1(a,b){0 l# ^$ O2 u/ t/ H  c& S
    console.log(arguments.length)  //参数的个数
% z' F9 v8 m' ]    console.log(arguments[0]) // 第一个参数的值: i0 M* o- Q# W8 F
        return a + b   
7 e5 \: X8 [8 u4 r9 K' i}
% {6 D0 ?- Y; K6 v$ z, t9 Ifoo1(10,20)/ w( ]9 y8 ?6 x3 Z) T" a! ]
结果:
; r4 e4 q3 q3 M/ l/ R9 m( |! } 2          //参数的个数 5 ~5 z# T3 l" `& E
10        // 第一个参数的值
" |5 F0 [% i5 M# |1 h3 d30        // 返回相加的结果
$ V  r" y% Y+ h; _" J4 W; P* d</code></pre>
' x6 E4 L; F5 S1 }4 y" }<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>  U& h' R/ m! \5 n
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
5 v7 E$ V: t9 Q( Y7 R4 B8 b" b<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>. G7 ?; q/ Q6 D' y( E) \" ~
<h4 id="281-date对象">2.8.1 Date对象</h4>. U' @& f0 {9 L& t
<pre><code class="language-javascript">&gt; var data_test = new Date()1 J4 ~) r, C  Q0 V9 i! T: b
&gt; data_test+ @! x! t0 O8 @9 C6 E6 j3 k3 m
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
: |! M$ U% W0 J) P' V+ k* b, V&gt; data_test.toLocaleString()2 N. e6 R7 K  f
'2022/2/11 下午9:44:43'* i, u; J6 {5 Z# u: z- {

# c  @( n" a$ @0 ~0 m. A&gt; data_test.toLocaleDateString()$ b* J* d& d8 {0 W6 q2 u! J
'2022/2/11'$ M) L: v1 v; M9 x

" Q6 ]5 g  i* _  d7 Z3 W/ |: Y&gt; var data_test2  = new Date("2022/2/11 9:44:43")$ L. Q  l5 i4 y
&gt; data_test2.toLocaleString()7 U) `2 t/ @0 g8 J% ]
'2022/2/11 上午9:44:43'5 A4 }- f8 v+ A2 g6 k5 M
! v6 V* b: l# J% [  b
// 获取当前几号
( i( K3 `; F8 i8 m2 J&gt; data_test.getDate()
! r1 Y  O( A/ u, Z  P11" P3 t" Y% n- s& N7 D6 Z) i: H
// 获取星期几,数字表示# `) v  v( S( d( ~! N4 t; X4 [
&gt; data_test.getDay()  
8 ]/ C, ~. J3 @4 a5& {4 X! P. K/ o3 b2 g8 [5 [9 {
// 获取月份(0-11)
6 m! S0 |- \" d: Y# G& D0 U$ l. ~&gt; data_test.getMonth()& M) _$ \6 t# D
1
% i0 O" o$ _, _* i3 E// 获取完整年份6 E1 f7 L  _! H0 X6 h
&gt; data_test.getFullYear()) j$ J, F" d$ a9 T; L6 T0 [5 t
2022! {) a& w. y2 V. U# e: y
// 获取时0 l( |. W# y8 C
&gt; data_test.getHours()6 N+ p" Z$ |# h/ M
21
: y/ b1 x. |8 i# M// 获取分
( S, ^; E3 y5 n' N* i& z% Z% @&gt; data_test.getMinutes()8 K; \! F; n. c% I. |
44
/ B) ?- ]% W' S. D* g( L$ @// 获取秒5 X# H' i4 A, F# D/ o& S* R
&gt; data_test.getSeconds()2 |) L' }0 M1 s3 q2 Z
43/ H# Q. v( d/ K: [: |! f
// 获取毫秒
: x* S! t) S: R: A9 U8 |8 c* q&gt; data_test.getMilliseconds()& F7 D- c& ]8 j) y& n- o
290$ }  D: R8 ~. f' {! w
// 获取时间戳$ n  k! [$ a% ~+ n* w) y
&gt; data_test.getTime(). _) y4 g; x; B8 I
16445870832902 V. \$ u! D3 @* L' d
</code></pre>
0 g1 \6 T" L3 n) \0 |<h4 id="282-json对象">2.8.2 Json对象</h4>
' S+ ^3 w7 w# B, z- R8 d<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串! k! [, z- q2 N% S6 C" s
JSON.parse()  // 反序列化,把JSON字符串转换成对象
" y  E' l# M, x  ?5 V/ p$ Z3 z- l2 T3 l. g( {( K( m5 \
// 序列化5 o) r8 |+ U0 q6 ?
&gt; var jstojson = JSON.stringify(person)
, r  B8 A" f( d( J. L5 ?5 i&gt; jstojson  
* f- h1 ?  r  {* z. Q- I+ e'{"Name":"Hans","Age":18}'4 Z* a' O1 Y. F- }( y* B# S- u

1 {) ]; }5 M6 d- [$ ^& ~! b" a6 Q) y: `// 反序列化7 a8 {6 F9 ^" i, z
&gt; var x = JSON.parse(jstojson)
3 N0 f8 y) B/ L* S* M* H; s. s&gt; x
( k6 _& s& ]) g& Q3 i+ y/ n; n{Name: 'Hans', Age: 18}2 b) J6 \# i6 y# Y
&gt; x.Age" L/ u( J+ \- H  E
18
3 i$ k' [' R' ~" f/ @; X6 c</code></pre>2 Q. ~1 G/ p, y. C& b
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
- y/ e" L+ L* T% j<p>正则</p>8 X/ s" W4 X2 E4 K/ c+ b; t) q$ r
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
& z. n% j. d4 D$ X/ P/ ^- R, ?&gt; reg1
/ y: P4 }. ^" r) N7 L. K! H/^[a-zA-Z][a-zA-Z0-9]{4,7}/
+ m2 B4 y+ D5 G" a* w&gt; reg1.test("Hans666")- G* X  c3 E! T( Q- O+ [- D$ j
true
  M; O& n/ A, _
6 f' d- [" s0 _0 I' Y& R6 U&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
/ `0 G: L4 o" [4 M9 S6 {&gt; reg2
# N0 z+ H9 t, S: e/^[a-zA-Z][a-zA-Z0-9]{4,7}/+ q/ S' a' `5 |! |% [' U+ z
&gt; reg2.test('Hasdfa')) v8 o9 F" ~; _* U
true
* c. k9 T8 e* Y5 e$ j) @# [
* q/ l% [, k+ I% @/ g全局匹配:
7 Y* d3 u* ~- s: D  @$ E) I&gt; name2 Q) N, W& t  ~+ m9 o) ?
'Hello'* |4 O5 l3 c- u# k4 `* T% j3 P! ]
&gt; name.match(/l/)( ^0 `. t; a/ ?) ~' @
['l', index: 2, input: 'Hello', groups: undefined]
4 f- A  h5 _0 C2 B; n, g$ j' v2 b. l8 v/ F9 d
&gt; name.match(/l/g)
) a2 p5 O1 d' F4 D" O9 O(2)&nbsp;['l', 'l']
( S7 C8 R4 _: e1 z  P) Q1 p// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配* e: A0 u: v, }( d+ w' C. Y4 Q
) `( |, r6 [: X' e) Q+ h% D) k4 G
全局匹配注意事项:8 h' i7 m+ r+ f5 y2 ^+ H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
/ n3 m4 D" k  z; @&gt; reg2.test('Hasdfa')
5 e( I! M7 @0 e3 f4 D- ]6 @' mtrue
" _# @) I  r+ c" i* f&gt;reg2.lastIndex;
) }# X4 Y: a6 u4 z6% j& M+ |7 z- C) i# C- K+ t9 o
&gt; reg2.test('Hasdfa')" s; Q2 L6 p# ]
false0 V% ^/ m8 z) l( A# ]1 [& y
&gt; reg2.lastIndex;! q: k$ ?  }/ E
0; f; y* r$ i. d1 t3 T3 C, w- Q
&gt; reg2.test('Hasdfa')( s7 f0 B3 a" Y. _
true
! e$ }: z' k, n  y&gt; reg2.lastIndex;
9 w4 p0 O# `" `( e6 j( G6* u6 m6 t- x8 R5 W+ k+ @! C4 r: c
&gt; reg2.test('Hasdfa')2 b! p  v7 \0 {5 m' f. P2 P9 ?
false  Q0 t( f; ]1 g6 T4 ?* a. t( Q( ]
&gt; reg2.lastIndex;
& t, v8 P# Q! L. a& }! }4 E0" F# w7 H" w2 J: V6 ^
// 全局匹配会有一个lastindex属性  u& r9 h0 H/ E' w0 s4 N+ H0 C
&gt; reg2.test()
2 O) V+ K: v1 t' x) U' n  S- E7 Nfalse6 L9 |% N1 U" `
&gt; reg2.test()8 Q5 R+ g8 \3 S( c
true. L1 m" [( z2 T1 _
// 校验时不传参数默认传的是undefined
% ^5 B# W: |# U: {</code></pre>
$ r% x- W0 }1 w7 p<h4 id="284-自定义对象">2.8.4 自定义对象</h4>0 F' z0 u2 W, T% V4 a, I; g3 D! |
<p>就相当于是<code>python</code>中的字典</p>) Z* d9 x7 p6 F4 F7 k+ f
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 R" a" ?7 W+ b% G&gt; person" ~& R, j( R+ h
{Name: 'Hans', Age: 18}
( D9 ?) `! F! R8 G- z+ u; w) V% K( {&gt; person.Name
* \" P, [4 l9 ~; z2 e2 s# B7 ~'Hans'" {  w+ ^3 C' p1 E4 g5 x" q
&gt; person["Name"]) D* T# R- Y6 E. s
'Hans'& ?# R: J% S! r2 e

, A0 k' a3 M! X: |  [// 也可以使用new Object创建
+ ^, r) W- v! u, ?% k* `/ z&gt; var person2 = new Object()
& o) p( v1 O1 C( ~&gt; person2.name = "Hello"
/ w/ E( r  v1 E'Hello'
5 \6 O, z5 R6 _% w&gt; person2.age = 20
. R* b/ K8 {, v8 k20
+ X! w* E% j* ]</code></pre>! o8 G$ y; i; Y
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
- z6 M- d& c% p  J' j! C<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
/ t" o& r+ s2 t3 h6 {, d0 x<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>7 e: o& X$ M, X; @/ b
<h3 id="31-window-对象">3.1 window 对象</h3>) ?4 o( d* l  s# e
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>2 M$ N( i+ C  b$ t7 u$ `
<pre><code class="language-python">//览器窗口的内部高度
; [$ K- O, |# q8 ?. d' a8 Wwindow.innerHeight
* ?2 H% E7 g/ |) B! X  ?) [( w% R706
8 q7 A4 z9 z, E4 P# x0 T//浏览器窗口的内部宽度
. T1 V, P! g2 J2 ?6 o: [- Dwindow.innerWidth3 r% `# |- Z, ?# D: Q: P7 c
1522  k4 \' a* W/ s- w! x
// 打开新窗口5 D( g3 X. D% P* h2 `6 n# H- \
window.open('https://www.baidu.com')
. l+ `& X2 x0 x# WWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}1 X% }0 Q6 V6 Y" U5 S
// 关闭当前窗口
6 o. B- J* \* \7 S; U" u4 K/ Ywindow.close() / U7 M- ]& I. K4 Q( O
//  后退一页
' }8 _+ D3 ^5 owindow.history.back()- J5 B8 |5 s- T% X' m
// 前进一页
7 D, G6 f* I. C# ~" `window.history.forward() % B$ n/ V/ E' C: s# C
//Web浏览器全称
5 U' W* U0 h7 ewindow.navigator.appName! D. W" q# u  H1 X1 j" Z- w
'Netscape'+ c1 `7 n1 i( }4 ?) J8 y' _
// Web浏览器厂商和版本的详细字符串7 U9 K$ L4 A2 h, ^
window.navigator.appVersion0 Z1 `8 f" ]( A
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ I- F8 `! ?8 t  u// 客户端绝大部分信息
/ n; A, P& N5 q  t; r. e. ^+ ewindow.navigator.userAgent
" f6 f+ S; P+ @8 Z6 {% i1 n8 H' j5 o'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 |: O6 i1 Q$ @8 x// 浏览器运行所在的操作系统' Y* s# H+ t2 G) Q
window.navigator.platform
( c5 Z% [: {$ [- ~'Win32'
! @) S" x9 A% @2 _
1 h3 l% @" i; E7 a0 `//  获取URL
$ W' N6 H/ H5 p' x6 n4 }window.location.href
% ?' ?4 X) n( q# d// 跳转到指定页面; Z4 s/ f4 _# Z, a7 ]& [
window.location.href='https://www.baidu.com'& j9 O* G: l- {& s/ b
// 重新加载页面1 b: }$ K0 ~! ~: F
window.location.reload() : `2 W' W1 a8 M  j6 m
</code></pre>+ s: l: y5 E( k
<h3 id="32-弹出框">3.2 弹出框</h3>
& Y0 Y$ U6 V/ P$ Q- \<p>三种消息框:警告框、确认框、提示框。</p>
8 D$ ]6 ^& `2 D<h4 id="321-警告框">3.2.1 警告框</h4>
& }+ p; x1 c( ?# Y<pre><code class="language-javascript">alert("Hello"), K. r) X5 ]% J2 Z0 e
</code></pre>
5 Z! o- ~. ?& O8 f5 ^7 f<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p># z/ s9 H6 v" _, ~6 |9 n$ y, C
<h4 id="322-确认框">3.2.2 确认框</h4>0 [9 V( Z2 K( C- h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>" X4 d0 c: f# u" g" o; c
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true  x+ n+ B4 _( ^4 T4 v( Y) I7 Q! R( R0 d
true4 N1 s. T1 E5 i  A; C0 o( _  P/ n
&gt; confirm("你确定吗?")  // 点取消返回false: |6 Q1 t  v# Y& i3 }( H, S* {
false
: X0 G: U, e# S% V( f: r</code></pre>; I1 E/ h/ G% o$ o  z  l' K7 f
<h4 id="323-提示框">3.2.3 提示框</h4>; x& V5 q6 e% b# T, d
<p><code>prompt("请输入","提示")</code></p>- Q' f# `1 u( B+ l3 R% B6 K
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
% ?" y! Z  L8 `<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>8 |( J- k2 o, U; N( \
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>: O+ l/ m6 I' H; o. W+ S" B$ y
<h3 id="33-计时相关">3.3 计时相关</h3>, E% `! ^! X: W( t
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
' t: j% s) |: ^* Y' M5 h<pre><code class="language-javascript">// 等于3秒钟弹窗+ d& ~8 w  m- W- D# Y  Z
setTimeout(function(){alert("Hello")}, 3000)
, o. c+ P; k/ ], N& R2 D- y4 R, h. w( c# q- S0 a- H
var t = setTimeout(function(){alert("Hello")}, 3000)
" i& p; x( i( l: G0 y& J2 I' C) S) U+ U  E- n8 ?$ D
// 取消setTimeout设置: Z4 e6 t4 k) E# K% Q0 k# I- w7 n8 a
clearTimeout(t)
7 h0 E0 U3 k6 O2 n  B0 l</code></pre>2 Z3 |8 J8 }/ l4 H" h
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>. ]/ e+ L- N8 c' R' u3 H8 m9 o
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>4 n# [2 X/ M+ o$ N
<pre><code class="language-javascript">每三秒弹出 "hello" :7 x9 r$ C3 c) ]6 t
setInterval(function(){alert("Hello")},3000);6 h' E5 I$ q8 j( S2 _- c
</code></pre>
9 u- e  i! |3 p) m6 h<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>9 p, n6 W+ U& m
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
; x7 P, h  P! U" m  h: |//取消:
0 v' s3 D$ F# ^. J- ?9 h. ^: z! |% A* RclearInterval(t)
, Z3 `/ Q3 C  j& U8 G5 m</code></pre>& n8 a5 k, Z4 a$ P5 W
. \9 S6 t1 R/ `+ s8 I; l
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-22 10:53 , Processed in 0.073751 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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