飞雪团队

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

前端之JavaScript

[复制链接]

8038

主题

8126

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26444
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
1 l  l  A* a, b. ?0 E
<h1 id="前端之javascript">前端之JavaScript</h1>
& P/ A0 d9 b" O<p></p><p></p>' x- I! p* ~& M' v
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
+ j( U+ ^% z1 Z<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
& k8 V6 j( Q" W& ~它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>, m; A  a; E1 U
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
+ a- w  _; k: A5 y它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
$ H; S; `/ C. g) W<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
/ `' {* u1 V. U1 b8 @<h3 id="21-注释">2.1 注释</h3>; O2 c/ K+ ^4 |0 E+ y$ t, n+ r
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>% ^. z3 K! Z& M8 B2 F
<pre><code class="language-javascript">// 这是单行注释
( t) \7 B& K( W3 O: c
& w( B  N/ Y9 z5 T/*
. z6 N  C) h" {这是多行注释的第一行,: W1 P. j. U" I5 U
这是第二行。
+ x& f; N% @7 f5 V; g4 y- g*/
" v! z* m! x! {- V5 ?</code></pre>
' c. A8 _/ T6 n0 P( e# e! C<h3 id="22-变量和常量">2.2 变量和常量</h3>0 E* r0 ^8 a& N9 s% G
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
& Q0 z) r5 c  W$ I3 ?- l9 B. v2 M<ul>, C1 x/ k# O" K' F5 {2 C: x
<li>变量必须以字母开头</li>" j* L/ S- z% ~" J9 p* s8 M; D( G! N
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
( h0 M- \. G/ T; }, z<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>4 E% ]/ y: u' I- Q9 M9 ?
</ul>
9 C* C% e8 r/ n! ^<p><code>var</code>定义的都为全局变量</p>
+ D( \" k6 V0 E* W( j* v  F0 H# V<p><code>let</code>可以声明局部变量</p>
3 z/ ?0 {: E% x, _, s+ ^<p><strong>声明变量:</strong></p>3 U& J2 }/ T* V$ \# c! ]
<pre><code class="language-javascript">// 定义单个变量. x) E* n6 Z6 q% v6 ~% u
&gt; var name$ P6 p- j: J* I
&gt; name = 'Hans'
1 W# a) D/ I  J) ~" Q& m//定义并赋值+ t3 X& Z( L& X% D0 Z
&gt; var name = 'Hans'% x. v: Q) h6 G# ]6 w) w. f
&gt; name$ m* ^/ {; k; ^7 R* v, Q( R
'Hans'
8 V& @3 T7 Q7 [* r7 u, |* f' q, D- ?' O1 x  J
// 定义多个变量+ W, }3 D5 i) b( x! R
&gt; var name = "Hans", age = 18
+ A. ]5 r* C/ Q+ X: E&gt; name
6 n3 h9 R0 g: P'Hans'
5 G/ d0 X- f3 g5 A" ~  \&gt; age/ k$ H. c! [+ p& I; K
18
$ ]4 G; w8 t$ F: R0 m; ^: l& B/ ?
" V  s& Q# }* P- O//多行使用反引号`` 类型python中的三引号
  s( V& l. A5 K) V* |5 ?- y&gt; var text = `A young idler,6 R/ r& K; k& W6 S" X& P* S
an old beggar`
; M2 q: G( V7 |  V% S&gt; text! L3 U$ `1 ~, n/ o2 b& i
'A young idler,\nan old beggar'. S& y3 \0 U, h! A' L, p
</code></pre>+ A/ m2 @2 `! J, N( j( l
<p><strong>声明常量:</strong></p>
$ j+ D! ^- R# A0 d& h<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>7 [- U! ?1 J- D6 u* E6 j* y+ ]
<pre><code class="language-javascript">&gt; const pi = 3.14+ d9 p4 O& M/ g6 O
&gt; pi3 h! @. u$ @. [5 c2 Y  c2 I
3.14
# a6 h  Y$ g' N: R1 A5 A; _: h3 a&gt;  pi = 3.01
2 J, B3 V& W5 b2 ~' {$ dUncaught TypeError: Assignment to constant variable.- D$ P. C1 z$ m# [' L
    at &lt;anonymous&gt;:1:4
1 j! }$ Q; y# A1 \0 v- z
" D/ J1 J& X$ p7 K# ^0 I, c1 x</code></pre>3 Q) R/ b1 \3 Q) x
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
; b& }5 _8 S* j+ F<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
, A& u2 F0 B9 F. A# E<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>" D7 @/ r6 T2 x- O3 t
<h4 id="231-number类型">2.3.1 Number类型</h4>
) o. {( `; k0 M# l5 A" ]; G<pre><code class="language-javascript">&gt; var a = 59 w& K8 c3 d6 Q7 f$ A% A7 h
&gt; typeof a   //查看变量的类型  / b" {! {" {7 ^7 s, A0 X, g4 ?
number
0 `/ O0 G/ s# X  X6 h
/ }+ s* X5 ^: E&gt; var b = 1.3' I9 u: S$ f2 F* ?9 L9 r6 j' d
&gt; typeof b  V' e* }. R4 R7 e6 z
number
6 k! P/ i& [" d( X, O2 w. V/ Z: ^& b( e/ i0 C/ a
// 不管整型还是浮点型打开出来的结果都是number类型
+ u) e+ i) U; U  O8 \- S- u4 [, y! C% b1 R
/*, @9 ]2 L0 w# G/ T5 p1 H( ^
NaN:Not A Number- T" I* R, i8 a/ M: ^, F
NaN属于数值类型 表示的意思是 不是一个数字
  m$ m4 R) ]; `*/( c3 ]1 s. I9 l" v' S$ e0 k; [

& ~: J0 j. q0 g% B% X' e0 XparseInt('2345')  // 转整型
  h6 M" z6 L2 Z* q: F7 H2345
2 s& n5 i, N1 WparseInt('2345.5')9 K" l) g: o8 G4 Y
2345- d' p# i: a( U2 g+ B+ q9 |
parseFloat('2345.5') // 转浮点型
/ M2 `2 r: P! b7 E$ A  Z" [& e2345.5' Q; D7 N/ C2 L# D( c" H; o3 |$ Y
parseFloat('ABC')3 w4 V# r2 u1 H* P5 I# x+ P! }
NaN4 k/ i/ |" a1 w7 l0 C
parseInt('abc')4 k8 b( k! J! Q9 _+ b
NaN
2 x- W$ J3 _# B; u# V8 G, }; O" a</code></pre>7 v$ S6 `( c2 p9 }7 [7 U0 |
<h4 id="232-string类型">2.3.2 String类型</h4>
' b# }$ m3 `- G+ H; L& E; a7 s+ i<pre><code class="language-javascript">&gt; var name = 'Hans'
! R! _. Z: \3 l/ o6 C&gt; typeof name
/ t/ a; A! h( J! g6 M9 ^/ p'string'
/ J+ u; j0 Y# p1 J2 \( p6 S3 f9 B& _
. N1 c$ E" H- d) v" ^. K5 }//常用方法6 i5 `& M* l- {2 P. ^
// 变量值长度- ^# i- ], \) n
&gt; name.length8 Y5 o& f5 t+ P) G
4( U, `: ~) t9 @
// trim() 移除空白  k) ?: c5 i& p5 [/ F# h; i
&gt; var a = '    ABC    '6 a( ]* \. J3 z' j& n" V  t
&gt; a
( [' M& x" u. S& ]'    ABC    '
! P) H" J- t5 g/ e&gt; a.trim()  Q  L' e) K; H2 I" Z7 ?; ~, s0 b+ \+ S( }
'ABC'
* d2 i0 p7 M0 [+ F9 w! y* x- @//移除左边的空白8 l' w- j8 @% s4 `: z, b) s
&gt; a.trimLeft()
% u3 ^+ v; m1 N8 Z. _'ABC    '& e3 Y! r* ^- f; S6 `
//移除右边的空白
" v0 \' E* T9 i&gt; a.trimRight()
* \& {+ m  O3 i8 @; c/ Z5 y1 X5 ~' K'    ABC'& G; a8 W+ `" [5 \

' i! }4 V0 Z8 f+ t//返回第n个字符,从0开始
% b+ }' K, z* P( G  h7 H&gt; name
5 w$ i& P& s6 b5 a+ q$ M'Hans'9 F* T3 K; {& k2 ?9 [
&gt; name.charAt(3)
4 a% Q9 h) x5 h& M# |, j's'
- S- N" t- w: O$ Z2 k! D&gt; name.charAt()0 m. x1 F  Y2 O: Q/ a/ s! Y: A
'H'
8 h& N) Z& c& |4 {+ D&gt; name.charAt(1)7 F' B8 X% A5 x
'a': n  c6 O- I$ |

/ Q) G, D* j. Q7 Y) R$ Y# M" H  v& [// 在javascript中推荐使用加号(+)拼接1 F8 `0 O* N  `1 E/ ]: t& z
&gt; name2 n$ J7 K) C* f9 g9 ~
'Hans'7 |( ~: Q1 i- @: n) Q$ M- X! m
&gt; a
4 Q! @( C: V1 H) L$ y'    ABC    '% h7 m6 Q, c* ?: Y1 K6 p
&gt; name + a, ]2 t8 B2 y& L: ?5 x  o
'Hans    ABC    '
: T( u5 W. A% t1 d) j) j( {// 使用concat拼接
% w9 c/ y9 q& A" i! B. q  C1 x&gt; name.concat(a)
' g$ T9 r! B/ C2 l3 G  @. R'Hans    ABC    '$ N4 Y: z! V8 o$ R+ z* @- M

6 B6 `7 s4 k/ q//indexOf(substring, start)子序列位置
: |8 N' e, I3 _* I. k/ W# N; {9 y+ |- x5 q" {- q5 P
&gt; text
( q( {8 H# s, b* X'A young idler,\nan old beggar', l9 V7 k" J( ?7 K
&gt; text.indexOf('young',0)5 H) }+ |- g% z9 {4 s- g
2
8 U+ Y2 N+ [9 f% J; X! U- _  H
//.substring(from, to)        根据索引获取子序列
+ D) W7 p. }( i* o* s) t0 I4 l! A&gt; text.substring(0,)
* Y" d2 v5 e8 j' g, k0 h' }6 P  N'A young idler,\nan old beggar'! c7 k1 I' D& F* ]
&gt; text.substring(0,10)
) |. S& k+ O2 I" {# y' E'A young id'
" A% p2 w& [0 \8 ~* V# s% C% S/ P' B) C! `
// .slice(start, end)        切片, 从0开始顾头不顾尾
# c6 `) ]; V3 q! P0 Z- J; s9 J! @/ o&gt; name.slice(0,3), L9 {& R1 `* i4 z- r8 N" X
'Han') [. Q# o5 W4 T/ N4 b6 |

/ X8 K. K8 r6 M! ]% O// 转小写
" ?( [0 W+ f* r$ A# q; P&gt; name
; W) _. d6 p7 d% W5 s# e# C'Hans'( ?$ P- N7 t. ~6 `5 T
&gt; name.toLowerCase()
0 l) E, O0 ^& O9 R'hans'
0 E6 w0 V! w; U. X' Q5 L& r5 X// 转大写! `$ y. _3 }( ~2 t2 Y. W
&gt; name.toUpperCase()5 n: Y0 y* C5 ]( |) D- e0 p" F
'HANS'
3 y" Z7 a% Y3 H0 b4 ?1 U' D- c
; V1 T2 D" |" _6 \: c* o! X+ |, R' ?2 b1 P// 分隔
: W) K" E) H4 N0 k&gt; name
& v3 G( z$ v! v: t" V" U'Hans'( C; a! U# e4 j; `, `3 f
&gt; name.split('a')
0 _8 [- |" h# ~# L: z& G  ?(2)&nbsp;['H', 'ns']
6 h0 k& E* d- Q, L2 q  y</code></pre>" J. s% U% M1 }; h9 u/ Z0 h- M- H
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
( ^0 N1 w' \5 `- `2 b8 E& P& W<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>" H, F4 b. O5 P6 ^1 }/ y4 Y, |
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>4 L# S: z4 l# Y$ x7 o/ t2 M
<p><strong>null和undefined</strong></p>
1 T' a% s7 Q0 \<ul>
: Y4 h/ Z: o" ~- Z! ^<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
# Z7 i! e' E: ^1 l! C<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
( }0 M$ f- T" ]* p</ul>7 y& G5 G7 z5 M$ q9 F
<h4 id="234-array数组">2.3.4 Array数组</h4>
& r9 k! Q) d6 ]  W% |; l<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
  s; ]1 T: V4 A, J0 V  u<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
( d* W$ k4 q& D3 O* q&gt; array1
5 ]  |8 B( j) n(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
) I$ E' o" S- Y) \&gt; console.log(array1[2])  //console.log打印类似python中的print
7 F& ?$ t/ b7 Q3) d$ b; ?. F1 Z& S
// length元素个数" B0 l5 o$ m/ [$ p6 T
&gt; array1.length5 O' _+ U9 \% c' }4 k: ?2 W
6
; j/ }$ Y6 r& q// 在尾部增加元素,类型append7 t5 f6 ]) P$ K2 N+ U
&gt; array1.push('D'). V! i3 T# P4 I" |  D8 y- d
7
% |2 M5 D/ Q: W2 m8 A&gt; array1
6 \  J: x0 t( E. ](7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
# J  {; ~: j8 p& p+ E// 在头部增加元素4 W1 u# `) i$ M- F- [6 H
&gt; array1.unshift(0)- ]. {/ Z; X: p3 G7 u+ f# l
84 _1 S; A. K6 ?, R3 Z$ s1 ?1 _  d
&gt; array1& _# \. H4 t- G6 R% e' O" b
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
' `% \/ g! b6 w% M- c: `8 k
. d8 P' f- O# N* W; L& e( P//取最后一个元素
$ d$ T  o& ]6 r! E+ R! B/ @&gt; array1.pop()
+ n- H5 M( Q5 f- W9 Y1 [! w9 C'D'
) s5 h0 }" A# j# k% C# B&gt; array1! e# s, p4 k( z+ K: U
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
" Q- G+ u. J1 s# v" W4 [4 W4 P//取头部元素' N3 N* X, {; s/ p8 ]4 |1 P3 V0 d" {
&gt; array1.shift()
8 D# f2 ~" r3 V& Q$ n6 F0) t3 R4 x4 b+ g' P" s0 q) `
&gt; array19 i9 k$ j2 z$ b+ X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* b: M: M; Z( x  P6 j7 ~% V1 @
, ^  [, d( u; y4 R) X//切片, 从0开始顾头不顾尾
3 S3 U& g0 [' p1 i# K& d8 @( J&gt; array1.slice(3,6)
. ~( c- ~% e2 V" V9 k$ q(3)&nbsp;['a', 'b', 'c']1 w$ ?5 }, E' W+ M2 R; Y! D
// 反转
- z& t  L3 U' a0 e/ R2 G0 J4 x&gt; array1.reverse()  m  M8 Q9 j3 N& b, h1 |1 m$ d
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]; Q3 a+ F. o( i, {
// 将数组元素连接成字符串$ |( ]+ Y9 v; n) f. m! N, c5 U
&gt; array1.join() // 什么不都写默认使用逗号分隔
4 D$ Y% f6 q9 `9 m' e* [) \'c,b,a,3,2,1'& @) z$ x4 i3 g
&gt; array1.join('')5 T# Z) k, f3 e( y  |
'cba321'0 M6 d& l6 Y7 x. @' A
&gt; array1.join('|')$ `) l9 R/ Z* ], K
'c|b|a|3|2|1', {& E$ X; N1 M/ k& F+ U2 f

+ _. c" |4 ?7 b$ ]" h5 b$ h; m; k! F// 连接数组
) [* N' z1 p$ f9 U8 S&gt; var array2 = ['A','B','C']4 N  J0 d3 P* P1 e' C
&gt; array1.concat(array2)+ H6 ^! d9 ^4 N0 S: l/ m
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']/ T& b1 ^, u+ r1 \

& c* A+ n1 f5 w$ T: Q5 F// 排序
. j: g/ n2 T7 F* z% E" w' x( N&gt; array1.sort()
, i# d4 I5 K. o: k(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 k6 Y9 B! V, X; n$ P
$ n+ N6 w: B+ g6 e/ |# u& P% b; C// 删除元素,并可以向数据组中添加新元素(可选)( ]# P' w- @% J/ p5 ]- o7 S
&gt; array1.splice(3,3)  // 删除元素
# V* e5 U" H4 J0 n(3)&nbsp;['a', 'b', 'c']. ^9 |- e* s1 \
&gt; array16 H% r* J/ E& M  m3 ?
(3)&nbsp;[1, 2, 3]( M2 c; k4 ]% m$ S
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
/ A& a- m" _% o9 d6 {! o) v[]3 ~, a' u' x* d2 _3 J, j" Y( y3 i
&gt; array1% U4 J5 D7 G+ V
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
8 ^  j6 y  C: D; N$ X% ~2 d9 E! f- a* f! Y
/*# f; s& Z, Z0 t2 ~6 U$ M
splice(index,howmany,item1,.....,itemX)& W! O, }8 W7 ~3 T
index:必需,必须是数字。规定从何处添加/删除元素。* a# ^+ }( g' o- m2 v
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。" Q8 y, A& b+ ~+ N/ z) H
item1, ..., itemX        可选。要添加到数组的新元素! e4 m5 Y% Q+ E  x
*/8 q" Y8 l6 ]6 ^0 p+ x+ C5 i; ^- H* F
) E) G& t, |1 o+ k1 L/ D: S& U: N
// forEach()        将数组的每个元素传递给回调函数
" c" C5 v6 u2 j& i4 Y- l( a6 q&gt; array1.forEach(function test(n){console.log(n)})9 i; o1 p! E, G. X+ @- L" q( Q
1
& v3 I8 A; P8 \8 w; B: e5 l 2
& K+ ^: l* j. v 3
3 z  _$ u! v7 t* A A
  c9 s6 F$ z" u6 X7 f5 k) i4 L B$ d9 f  w  P9 I& ^% i: K0 u' b
C
. N: r9 h# u, h0 l// 返回一个数组元素调用函数处理后的值的新数组
) L: c% V" X+ y1 i0 Y; q: m6 N( h$ n) T&gt; array1.map(function(value){return value +1})
$ ]# _$ w/ U0 J9 C4 X( o(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
: r5 d- {* t' f- R</code></pre>  j& `8 t: z7 ?* K! s% ]) i
<h3 id="24-运算符">2.4 运算符</h3>
+ ]' V& B0 |+ e# E5 Q+ ~: E<h4 id="241-数学运算符">2.4.1 数学运算符</h4>  j( x0 E" U" I& }7 f
<p><code>+ - * / % ++ --</code></p>
9 f7 Z+ d/ U* d: h4 q<pre><code class="language-javascript">&gt; var a = 6& M" w, E4 A- ]" m9 ~  k  G0 c2 U
&gt; var b = 3+ T  t7 g0 R& t) U  c* ]& |& b
// 加7 [: w3 I, I7 x
&gt; a + b
8 t2 W- J% k; ]( J8 a91 x' M+ P/ C' |1 {5 {8 K
// 减5 F- }# W, R6 {' ^" @
&gt; a - b
# K- b4 ]; V* [2 [  k8 w3
2 s- l8 |3 Q! @' i5 }// 乘
! b, R& \/ X( U: J&gt; a * b
" Q3 v2 h* u' s% C1 T  e18
/ R& D! K: g7 d0 ^4 J6 i- i* Q// 除0 F- [: \, M  b
&gt; a / b( P" Z: A/ K9 O- x1 E7 h# E* K
2
' J, ?; I" U7 j  c( X6 A// 取模(取余)4 K9 I8 |- X" t" B% v
&gt; a % b
5 v/ G, ^: g- x/ P# D2 d0
0 y: v/ y8 w8 N0 J2 n& c6 c// 自增1(先赋值再增1)2 r5 X- y/ q- C7 C: |$ e
&gt; a++
3 r" X: N6 R* Q6 Q& }. b* h7 ]6# h5 b7 R3 {( B+ x! @
&gt; a- N% J5 b) |, U6 ~& H
7/ J4 x' Y% G: G5 ?2 ^, t1 R% ~
// 自减1(先赋值再减1)
3 }( j" l, d- s2 ~0 ^- ~) U&gt; a--0 v+ l: X, s6 j" @% h; Z( }# \- e
7  k& v4 M. Q4 w$ b
&gt; a5 d8 [- J$ e, R; K2 j$ H6 S
6
3 V# p) [2 x2 J1 E7 d5 H2 L) k" D// 自增1(先增1再赋值)
( ]2 O8 |* Q" V0 t&gt; ++a
9 _1 r; T- g5 O" S0 R, O- o+ o7
/ s+ {7 `% M& H! ?- `5 S* @, k. G// 自减1(先减1再赋值)" x  F. N% \0 w2 r, U
&gt; --a0 X, ~- V. m5 `$ N8 H$ F  E
6
* V! ?/ |0 h  F5 Q&gt; a
' @$ R7 a9 s: ^0 X" O2 u66 m) [6 X% r# |
6 W* \- E: v$ c, G- b% Z$ x
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
8 E  [7 U9 D' X5 R$ ?1 X5 {</code></pre>
- f: g6 q, S+ Q$ Z6 z+ s<h4 id="242-比较运算符">2.4.2 比较运算符</h4>9 ^" W  O8 x# [6 a
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
5 D3 n7 o( c4 t) }, P<pre><code class="language-javascript">// 大于
$ f* x% D5 X& Z: D&gt; a &gt; b
5 I3 ^/ Y: \+ T6 L, q5 jtrue4 h8 i5 M) `0 ^4 m8 E* v0 T$ G/ v% O
// 大于等于8 w' s, ]  P4 r1 ?
&gt; a &gt;= b$ u/ S+ p/ |" r- @
true
$ k7 H5 j- I" G; T$ |/ C- n. X/ @( r// 小于) j5 B- }9 F! Y" ?0 X$ n( n6 L% U
&gt; a &lt; b
1 h9 C3 |- g& Q& Z+ }( ifalse+ J  D' d. @- I
// 小于等于
1 x* _2 G7 R+ _6 x+ X&gt; a &lt;= b
3 H* k. V4 U% N3 q" o/ ~. }( R! vfalse& c5 q! _" P* _
// 弱不等于. a$ e" h5 C+ z5 Q
&gt; a != b
" `9 n3 c( I: M2 S' Itrue  @. ?2 [( s" d: Y
// 弱等于
5 z5 Z- g/ m8 i0 K& X4 J&gt; 1 == '1'
: u7 b$ X( A2 ttrue
0 w- Q% _9 C6 j8 J" s7 q// 强等于2 b8 \7 e* }- v* D2 A
&gt; 1 === '1'- Z' J* {, q4 a& `3 c
false
, D( ^5 P5 Y( A; N* u; B! x// 强不等于/ F. ^% p' ?4 b' L; v
&gt; 1 !== '1'
; Q* s2 G/ O* C3 \true
, h. I% e* Y$ z. U; d/ b! Z1 S( o' x! I& W  d7 |: B" r) ^
/*  z$ e  D5 T4 h( l
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 y1 u/ P1 ^7 c' _
*/
9 n4 T$ C& ~. w- X, X2 F</code></pre>
7 J: ~3 C3 J# n0 o$ v9 |" j! F<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
' ?$ N" }1 @# ?9 u4 y<p><code>&amp;&amp; || !</code></p>
7 q9 N* b8 h! n) Q; ~0 [! e3 C<pre><code class="language-javascript">&amp;&amp; 与  Q3 a1 D4 V3 Q% r" w6 r
|| or
! G8 I/ X7 ?" R% ]+ R6 a2 Y0 }! 非4 o: I3 {5 C5 Y; L; I( ?
</code></pre>! p0 J) I* V) ?" P1 K
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
' P! F* R* g7 g7 n9 u4 e# m<p><code>= += -= *= /=</code></p>. b- i; Q* l8 H% R
<pre><code class="language-javascript">// 赋值
- N6 k8 R1 h# z& e- B" D&gt; var x = 31 p9 \; T6 I8 D; t' K( w
// 加等于
7 J' J( Z# h/ \7 Z&gt; x += 2
1 N" s# P) C" _8 ?3 W5
/ z& _! r) O! v( D$ k! E9 Q% i// 减等于
- k) ~& D$ u9 i; k&gt; x -= 1; c+ B  H1 G) j7 [. F" h
48 w/ H( x4 @7 Y: ~# e) |
// 乘等于
1 R7 o4 Q9 u* n: n4 ]&gt; x *= 2) O; s/ X0 ~+ _7 z! N$ X
8& X, ]; r/ a$ U/ Z8 }2 ~" ~* a8 v
// 除等于' s( q+ L/ B! r
&gt; x /= 21 g5 \  s5 b: ^
4
6 R4 }* S5 |& k$ r+ c: e% X0 B</code></pre>  X6 G" X: c. y" |7 q
<h3 id="25-流程控制">2.5 流程控制</h3>! g" B$ E9 W) Y5 V1 m' G
<h4 id="251-if">2.5.1 if</h4>
- j) `* d% n" R- K6 s+ {# O7 [- H7 Z<pre><code class="language-javascript">1, if(条件){条件成立执行代码}8 G4 F. k$ F  E. Q! Y! K9 `( h

2 A  q% ]+ W% W& s! Z5 X&gt; var x = 34 Q& ^6 d% x: \1 M0 U; N
&gt; if (x &gt; 2){console.log("OK")}
8 ^2 P- c+ T  ~7 Q" _ OK
& `3 q% D- r3 M. c* Z; G; k! b5 |' I3 b. x; u
2, if(条件){条件成立执行代码}
% j% x9 \3 i4 m' w5 D        else{条件不成立执行代码}
( q' s, M' J& @) s
( P: t! H: ]7 v- b- `) ^+ n9 X&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
! o" q7 \, g; r5 M+ z% S6 \8 c- E'NO'7 u. S* q& |  I$ l- w% A  c" g

, }( X5 C9 N3 V: F" _+ u3, if(条件1){条件1成立执行代码} ; `  _, {' H* H, z( {$ I5 O1 y
        else if(条件2){条件2成立执行代码}* Y) K: I5 ^4 f6 a
    else{上面条件都不成立执行代码}
' o6 B  D$ h2 m0 M; I
$ o0 C7 z# N/ X&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
9 T* }- G. h! k  T4 b Ha
+ X# i* s: M% M: a: o</code></pre>
" o5 G4 R1 c. ]# w9 z! w9 ^<h4 id="252-switch">2.5.2 switch</h4>! O8 k3 g) `: a* P* _0 |
<pre><code class="language-javascript">var day = new Date().getDay();
" G3 z* Z% D8 J1 {) R$ u4 ?; a4 zswitch (day) {
( s) d, o2 S7 t; K( V" X" @  case 0:& t9 ?; b+ a; \  v, i( X
  console.log("Sunday");
& A; C/ |  S( V, J9 a  break;2 l7 _2 ?: P7 S9 l0 S: r0 I( \
  case 1:9 f, z9 R) y5 z  c3 l" m
  console.log("Monday");
( e' ~; t" r+ r% B: b  break;
7 o4 E+ r  I7 i! W; e& p1 t) ?1 B% B/ qdefault:
( R4 f, `- q- m4 C1 f$ g6 g  console.log("不在范围")
6 h! [7 q& Q1 y1 p2 M$ y% f) V}; P# T" V' I+ B& R1 m9 Y% B
不在范围
" y/ b4 B  Y3 T5 D" U9 W- f' }: g% s; N</code></pre>% Q; |! L  U! A3 L
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>* @* r6 u8 D" [& ?$ H
<h4 id="253-for">2.5.3 for</h4>
, m( U! P- q5 X9 G+ y7 O<pre><code class="language-python">// for 循环
- e2 K2 W7 c" w. V& N# r        for(起始值;循环条件;每次循环后执行的操作){
1 `2 d! O: U5 ?        for循环体代码( {- r! T' G  z& P
    }
4 n- n: ~( d! C
, \# D! c" a; K- J: ffor (var i = 0; i&lt;10; i++){
# g8 |" O7 R! l* d    console.log(i)- p* X. G- r* {2 t$ K6 N8 {! y
}
! r& S8 `9 m0 K        0: a( l3 J; V9 E- ^3 C, d
        1
3 E# {" M! k3 `& Y, x( }+ U        2
' C" F4 T# F" q  r        3
5 C% ^$ {& i* L4 B" K. Q        42 O% z5 o) l! _) b) ?* \9 E% s+ R
        5
9 v! S# I, y) \. c0 E+ C9 K: A        6
) [* I. I) l& [. M  ^        7  a' i( Q! Y- }- i/ h
        8
: E, Y( Z( s1 n+ u7 V        9
3 s, L. {0 {- M! ]' _</code></pre>
+ V* K, P1 h3 `' C<h4 id="254-while">2.5.4 while</h4>' `5 w4 O. C$ `# M* O8 l
<pre><code class="language-javascript">// while 循环
: D+ f9 r, X. {0 Z7 O' K( X, x* _& {        while(循环条件){
; [, k. i8 a! L; F9 o/ o  f        循环体代码
+ e2 [& [3 D3 ?2 g4 a3 N" b7 ?8 K' a    }" C. e6 l. a+ \% @* b# R2 V% W0 T
' p% d; J! X$ I/ N+ Q/ n/ e
&gt; var i = 0
9 ~0 r$ V. R7 q6 n" O: c&gt; while(i&lt;10){5 Z5 d/ _. s: P
    console.log(i): ]  G  Y( s# z; O
    i++
0 M4 j, I7 S; u' R7 w% r( j}) c. T/ i$ C% f- v* a, b
08 V3 d2 F$ D3 `' _
1
2 N' b+ W- K) n5 E* @ 2
4 U# H! l/ h6 w# u+ e 3
" P: Y5 v( l$ a" x2 E 4
) ?+ H7 L3 T( R7 F4 c+ {. G 5* e7 {' M% ~! n1 @* u7 W$ A+ v" Z
6* `& H0 |/ M( o' G- O  V
7
0 B' q8 d) V$ p( C0 Y4 K3 d2 U& r 8- f% n  i& C/ _* |9 y3 @# `
9
, x- g% C' [/ I' r& c- [3 q</code></pre>: q5 P6 |( C- b* ~; C5 [" ]
<h4 id="255-break和continue">2.5.5 break和continue</h4>
/ S4 p" [* F' d7 `: J<pre><code class="language-javascript">// break: m+ V# Q+ ^4 k) {
for (var i = 0; i&lt;10; i++){  y+ O1 S* t& @. K, p9 Q' d
    if (i == 5){break}( g$ @% }0 F& i0 J, y) w$ A* |
    console.log(i)+ \) i. l8 Y! ]" M/ Q
}
8 T8 M) U4 W- F3 b* s+ x# M 0
. e8 ]; f: V+ ?: M8 i6 u 1
3 ]2 ?0 _% Z  | 2. F5 y. K+ j4 t! L
3, s2 F+ K( `: ?4 A% k. @
4
( |  ]2 o& E- K// continue
% a" J$ r. E& Z& zfor (var i = 0; i&lt;10; i++){( @1 I1 w/ {+ C& w! g$ o; u
    if (i == 5){continue}1 W$ t* c. T* X2 b+ f$ {
    console.log(i)
% U+ R% g( p9 v7 O! {6 e/ `$ B9 u}
/ ]0 V8 i1 }6 K8 D3 E; C+ P- X 03 S- r5 p8 Z) q* H) ], [: D7 E
1
! I5 Z# \6 r7 l0 W( \1 l 21 ^6 P, N" [5 l5 Q
3- T/ V  ~7 `$ S, B3 e
4
9 r& p+ d# e* j7 ^3 w) D5 F3 \ 6
# @2 A% v4 U% j3 d8 ^ 74 E: V2 Y$ ^% C
8. H  G8 w* a7 @7 l$ m
9
2 }' I$ Q+ o2 a3 l" l- Z9 b+ n5 D
, L3 Q/ I! V1 p  o1 h- f9 J3 J</code></pre>4 u& `9 W' v" A8 a1 P+ q
<h3 id="26-三元运算">2.6 三元运算</h3>
+ `, H9 L. Q' W. U8 a1 o% T<pre><code class="language-javascript">&gt; a* ~1 U8 x1 i& d" N- m
6
. S9 R$ V' |% y+ G' L&gt; b  c- U: u5 N. @
3/ W' ?3 d3 a' q; Q) K, q: i7 Y5 J
0 j# [) I- t6 q! T9 z7 q- d& A% U
//条件成立c为a的值,不成立c为b的值5 f8 {+ a, ~. Q' C
&gt; var c = a &gt; b ? a : b
) E  K, p6 _9 N5 z3 p: k/ Q: Z&gt; c* {$ d7 a: e2 W. Y% U! l, M
6
  f# L3 y. d5 s! y. h( K2 E4 u/ ?/ J+ c$ [
// 三元运算可以嵌套
6 q( L# a4 r) m! K</code></pre>
- M* }! `/ A8 @: l3 h, O6 @<h3 id="27-函数">2.7 函数</h3>* L( i, @. k3 e( @
<pre><code class="language-javascript">1. 普通函数3 _0 ]/ p' }4 @5 u5 ?8 ?! |" [
&gt; function foo1(){. u4 W, x. R* q3 v  a% A4 ^
    console.log("Hi")4 F  U( m0 K) a0 W' n% v$ C1 Z
}
# L* Y; l" F$ t( i2 |( y) Y: I) Y& e! F2 s9 G& p; @  z" d- S
&gt; foo1(); \1 N3 m4 v+ l: u3 v
        Hi
" m8 m2 x7 |: I: `+ L2. 带参数函数1 l5 E/ C: N* A6 B# d% y
&gt; function foo1(name){
& r. k- j- N) j  }$ `console.log("Hi",name)$ v) B' G  ~8 f" s2 n
}4 q1 n! E# B3 e2 R
2 l$ k% L" b( H8 I* o& I
&gt; foo1("Hans")- W! A: J) t6 m4 X$ c
Hi Hans. d, a+ k# H- @- T, [
# a, x8 M; a3 T2 ?
&gt; var name = "Hello"/ y% ^9 G. A2 n
&gt; foo1(name), a; a+ H5 ]) {' _, l% s
Hi Hello- g2 E; |7 v+ Y7 @! D
( G! L, v& {5 ^' D
3. 带返回值函数& H6 F5 u, Z8 H' A0 z. u& v$ ^
&gt; function foo1(a,b){5 V; Q% }5 K3 t- c( Y3 U% Y
        return a + b   
$ n/ X4 I6 m$ E9 i7 n$ m' L/ f}
( J6 S8 B0 R& y* ~&gt; foo1(1,2)& H" n3 q7 f. D0 ~$ Z
3
: W* v, v* m" s5 J- q8 L6 u" _% ]&gt; var a = foo1(10,20)  //接受函数返回值, J3 _' u- b2 J/ S; K* N+ y
&gt; a2 s6 ?' p4 n+ E2 _/ B1 O  ]: d
306 y* P3 y  t. A, M, `5 R1 B8 }

  A" P, j" ~4 N1 |: y' z" |4. 匿名函数; M4 O& X5 I$ ]0 Y6 {8 h
&gt; var sum = function(a, b){6 \9 S6 d) F- r! v$ ^' P/ I' F. s
  return a + b;. {, Z3 ~5 I. {+ m
}2 [- @. k* ^: s+ r/ r, T! K$ h% ?
&gt; sum(1,2)
/ \  L9 A; \& j5 e33 b) J2 T, @% i. r, u3 x
( {( g8 {4 B- d* o$ U  Q# p5 ~" A
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
, t' V/ |0 K% Q# K% v) r2 \8 F6 v&gt; (function(a, b){* }* _* Y! Z) z0 ~9 m
  return a + b
$ i& a6 g) w/ |2 k})(10, 20)  X& R( r( r. H1 }+ T. P8 ^% D/ V
30
) V4 }+ w" D+ y1 G. J6 Z
, H5 @* U) p2 L/ M, |4 ]0 i5. 闭包函数
7 ]( ^$ F& V, `' ^2 \# F4 h1 V// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数; v" I! `% n6 b2 F: D& ~
var city = "BJ"
3 P, _+ m  W6 Efunction f(){
  V2 {7 ?8 M* N5 u; X    var city = "SH"$ e) a! B' ~3 d, g
    function inner(){
" T1 C/ E# G6 t7 E% b' P, \* l        console.log(city)
3 Y) B  _! t# B3 @& i    }
7 C" N  q) @& D  f* }" @2 b    return inner4 N' v- W) Q0 E6 B1 e$ N4 ~2 a# x
}
7 G' o5 \- _: o" K' \1 e  Zvar ret = f()9 W& _0 d* v9 E4 T) k0 b% \$ X2 f* V
ret()
  i) h( I9 x  [5 U- P4 K7 V: Z* O  R  E执行结果:
9 c! K" F5 |% O4 fSH. E  y+ f1 R, F6 A, K/ s
+ e  z( Q2 d( h& U
</code></pre>+ [4 a  Q9 b1 Q( t
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
) E1 }( X# b2 M4 S# x<pre><code class="language-javascript">var f = v =&gt; v;  E- P. I5 M  @; Q4 r3 X
// 等同于/ c: d; W4 y: V4 x0 p! X) N7 Z4 T: D
var f = function(v){
' x8 E: `7 b- Y3 E+ I0 Z) Q: g  return v;
5 P- c* U) g* M- @}
5 Q, w  ?/ B- u; ^2 Z* ?</code></pre>4 r5 p$ z& F$ j3 T$ f
<p><code>arguments</code>参数 可以获取传入的所有数据</p>! q4 ^) k% i; N& o7 L
<pre><code class="language-javascript">function foo1(a,b){
+ c1 e* ^9 V. u5 i: D    console.log(arguments.length)  //参数的个数 . ~" u5 |. H2 O- K3 m( ]8 F
    console.log(arguments[0]) // 第一个参数的值
: w* D5 U& h& ~$ X$ `# Q        return a + b   
& i8 @6 C+ M; {, Y8 h" @& j! Q}
* c0 r9 V( c- I# S8 b, t3 ?* rfoo1(10,20)
2 i* L5 S# K) _1 \结果:
6 ^( O5 ?# U/ ^" @4 [ 2          //参数的个数 * q  Q7 ]" @$ e6 u0 ]& {
10        // 第一个参数的值
; X+ F3 l; r# n% a  g30        // 返回相加的结果
9 c% b3 e% f* f9 I. d1 `9 Y- a</code></pre>6 l0 h1 G7 J! o1 |- I$ ^
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
+ l" E( p  e" S1 _2 s, d, y; l0 I& O  f<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>" V, T/ i( |. K
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% v! \+ c9 Z. \9 q2 w, Y6 r
<h4 id="281-date对象">2.8.1 Date对象</h4>
" S5 `4 B) v+ g, n# y<pre><code class="language-javascript">&gt; var data_test = new Date()
  l1 J. ^' N# S" U7 A' E9 ?# i&gt; data_test' L1 x3 i" F0 o4 V
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
5 |  _# z# H% _* w* M6 I3 D&gt; data_test.toLocaleString()7 W# i$ H0 g8 b; O& q  x/ f
'2022/2/11 下午9:44:43'9 X4 r0 P/ Y, F+ i% y" ]* ~
" b" o" I& @3 j' C
&gt; data_test.toLocaleDateString(): m' J1 T( v) C( k+ |7 N
'2022/2/11'
+ u3 T" z$ ?7 h9 H7 ~8 f$ O
8 C% u. i) O9 e! e' w&gt; var data_test2  = new Date("2022/2/11 9:44:43")! |$ P, }0 x3 v1 |& Z0 o' a
&gt; data_test2.toLocaleString()
9 c8 i! G& K5 ?' s1 Y7 _'2022/2/11 上午9:44:43'
; x. y% Z! P) ?5 t8 B0 s* I! F* P# U5 U. [9 a
// 获取当前几号
  o, A4 h9 Y9 h$ G* v&gt; data_test.getDate()
& F  v) ?/ b6 R4 L0 Z% D/ ~11
3 f1 }) t, @8 {* U4 m// 获取星期几,数字表示) Q# q7 C5 B1 z& S: Y, A
&gt; data_test.getDay()  
8 z) d# }+ t* x9 I6 @- y8 A5
3 |7 h$ ~! ~( L  [: v+ S' G$ @// 获取月份(0-11)
! Z7 _; w4 J3 u1 {7 V&gt; data_test.getMonth()! Q  D8 C* g: p3 ^6 b1 _  Y
1
  N9 j) C' s  J% E" g: f// 获取完整年份
6 n, y% G0 ^" Z5 d: l& w2 Z&gt; data_test.getFullYear()
* ?  i9 f4 n% P' R2 ^% F. H2022# l- b3 L  b; h1 t+ i; L5 @
// 获取时
  w8 r& F8 A7 I&gt; data_test.getHours()
3 ?& L2 O' \  }1 ]# f+ F; l/ g21
( M  {7 H4 P. {/ Z, M' [( Y: k% U// 获取分! k: C4 O2 b. b% y/ X& h
&gt; data_test.getMinutes()8 s6 [7 q: [+ q1 W$ D( m
44
7 G& H8 ]/ i4 o3 y& e// 获取秒
/ S: l3 E  `/ b1 L5 z&gt; data_test.getSeconds()
% K1 L: r4 k, k# b2 v* m: X5 `4 e43' p* |  a8 N5 I& Q
// 获取毫秒
: T& J( w1 s4 F6 p  I&gt; data_test.getMilliseconds()
7 i- `4 k% M5 }$ s4 t% s' y290
6 ^$ k+ j- N8 Y* \$ v// 获取时间戳- k/ U3 g( r) M. }3 Z
&gt; data_test.getTime()7 b# y) t$ e+ }% ~
1644587083290
( I6 o3 {+ u, Q( p! d: H" \5 C: D</code></pre>
4 f; f7 w% r- V3 l<h4 id="282-json对象">2.8.2 Json对象</h4>& w9 c# i/ m5 {0 f1 b- V
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
  y- O" D4 D' w- OJSON.parse()  // 反序列化,把JSON字符串转换成对象# D, \; @6 f; |8 w, R

3 O# d  a4 D6 G& Q. u9 `// 序列化* S: w; L# Z0 m- j
&gt; var jstojson = JSON.stringify(person)
' K/ K3 P2 \% L9 }3 j3 o5 D( m&gt; jstojson  
: P8 S1 U% _. L3 `2 F# H' f* C'{"Name":"Hans","Age":18}'
) P1 }: C4 Y  q7 w
; ~; x4 I8 |: ~. _// 反序列化
$ X/ V: t# I9 K) P5 d) R! M&gt; var x = JSON.parse(jstojson)9 Z* `7 B* M8 G7 a4 m8 j
&gt; x
3 y9 p0 O+ c* p" S{Name: 'Hans', Age: 18}: Z3 j" e' p7 O. P+ s' H
&gt; x.Age
8 X% U. D2 Q8 T& [4 C+ j: v! t18
: {& U; y& l) {" n</code></pre>+ M3 ~% Y! m: l* n( j: N- V
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>7 u" i# f& n+ |& \3 o7 R2 _
<p>正则</p>
, f4 ]& V$ q! [% p, J$ j3 @<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");) Y% m  ~! C" `
&gt; reg15 r9 K- V( r% K: @) z1 L
/^[a-zA-Z][a-zA-Z0-9]{4,7}/' Q) Z6 g5 P" q" W" d
&gt; reg1.test("Hans666")0 m# @) M1 I/ L9 ]2 H4 D
true
& ]* i& l7 v( U; [. F+ e. e8 x+ i1 P& @' l7 M, @- w
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/- n* a1 z6 ]- B
&gt; reg2. `4 Z# X  X+ q! J1 U  ]
/^[a-zA-Z][a-zA-Z0-9]{4,7}/# |$ G/ \* r2 Y0 w. P
&gt; reg2.test('Hasdfa')4 H0 V7 F$ T( v0 m1 R
true
! E4 ]& n. p/ d( T3 \: b6 G- W9 s8 o3 S; G. D, A
全局匹配:7 P' O3 Z+ ?. t) _
&gt; name3 n( J2 r/ b0 [  f* Q& A
'Hello'8 }6 h1 f2 C. t- j5 g' _- I
&gt; name.match(/l/)
6 H6 Q- W5 u6 s0 U+ p2 W['l', index: 2, input: 'Hello', groups: undefined]; N! ~, U' u9 P9 V0 i0 N

4 q; [% t& D4 j+ T- ~&gt; name.match(/l/g)
: z" Z' |1 a3 l) k: R: Z4 A(2)&nbsp;['l', 'l']3 K1 \* q/ q1 o& Z
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
  a6 S( L( T( |, H) m
5 E# c1 Q  n  y# z7 H全局匹配注意事项:0 X5 O1 U3 J; ?" g( u
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
( j4 \/ p7 J3 n: {&gt; reg2.test('Hasdfa')6 N7 _6 E4 a. V  S" ^
true8 n0 L' {; P4 }4 z9 N1 h; Z, M5 a
&gt;reg2.lastIndex;
* h, q+ u* q9 ~2 Z- V4 t9 J" E" J6
& H0 B) g. ]3 e6 j% `; Q&gt; reg2.test('Hasdfa')  E5 y) |' G( @8 z! j
false
3 Z$ ^# z2 ]9 P&gt; reg2.lastIndex;4 [2 Y$ j, ~6 v# X; ~$ q
0
) M$ y2 G! a( x& Z* Q&gt; reg2.test('Hasdfa')
" s" |0 X4 O4 }true
8 p0 q2 Q1 X, u1 k# Q&gt; reg2.lastIndex;, h2 D: [' H* z/ c% V' S  u3 A
6
. J2 V9 \/ \& n4 @3 l+ q5 C&gt; reg2.test('Hasdfa')
& j% }3 e1 F1 i* s6 g/ vfalse
2 C  ^! d6 |! z- X&gt; reg2.lastIndex;
7 L7 r0 D8 W+ R0
4 j1 B* X3 U! v// 全局匹配会有一个lastindex属性
5 ^  r% w- P5 `) K% E&gt; reg2.test()
: f" {* L/ K# ~4 `0 ~- qfalse4 o% g( c7 [6 g, m0 n
&gt; reg2.test()0 E/ ~# X% `* ]6 G" Q0 b
true
. G9 x3 L7 ^. l; E' I// 校验时不传参数默认传的是undefined
& G4 s" v  J# I2 m1 C! T2 K</code></pre>' u7 l% `$ G2 i) Y- `
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
2 }5 a6 ]! H8 K" s+ J$ g8 T<p>就相当于是<code>python</code>中的字典</p>4 }, N  z  j' z
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
7 {# l' z; N/ l) q6 g&gt; person0 ^- Y1 q3 v% r) k) Q7 i2 w" Y
{Name: 'Hans', Age: 18}
) s" u; d# B5 o$ w% g7 w&gt; person.Name
0 i" z2 g* x% Q9 J2 I'Hans'! J. d* p- L0 B1 W( \
&gt; person["Name"]6 g8 J; p  S2 y: f
'Hans'
, |' C  p5 Y' A  q; x/ g- y& b, U4 D. ~
// 也可以使用new Object创建: P7 x& b- U9 L1 B4 ?2 H% j% R
&gt; var person2 = new Object(). }9 D- H0 d0 a5 Y8 B, [7 b2 }- p
&gt; person2.name = "Hello"& E1 Y& ^$ \$ g
'Hello'
; U' ~# X8 [/ R2 O. a9 s% l  Z&gt; person2.age = 20% ~( y3 a4 z+ G$ g- I
20) @" {1 w; c% S
</code></pre>) u2 s3 K! W1 i( v
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
! m1 v- F& `; e) b, z( D<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
( F- L; |) F7 ]2 C; D+ Z<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>/ K; \6 \% O) o  I- w6 [+ v
<h3 id="31-window-对象">3.1 window 对象</h3>
3 e2 N( T( S" |$ K/ n$ B! J# a<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
5 O% T) C* B  n3 G* v" m<pre><code class="language-python">//览器窗口的内部高度3 R) o9 w4 y  C: ?' {7 f
window.innerHeight 9 G& ~4 d. W; ~% `7 ?* m: b- i1 u
706
/ z0 T' p) R+ P6 n: k, f//浏览器窗口的内部宽度
- j" _4 L; q# m9 xwindow.innerWidth
8 ^' T' _, I; N, W" v9 @; ]; V3 X15222 {4 x8 ^  ^* j2 a% F
// 打开新窗口( t, F9 y4 n4 L( W* K* o
window.open('https://www.baidu.com')0 ^# P+ p9 d# i$ h& h' B
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
/ \  x( z$ N/ i: o/ V, L// 关闭当前窗口, s% r8 X9 V! T
window.close()
3 ~& w4 h" p- {. O( D//  后退一页, v( |6 J9 t8 [% T: M
window.history.back()3 r0 H( E3 J3 p4 H/ U
// 前进一页( U6 P8 _7 e: o2 h: a- c
window.history.forward() 0 o, ~% C9 k6 K$ A6 A$ _, Q
//Web浏览器全称4 m. V3 E" A5 q7 e
window.navigator.appName
/ ]& S( R6 A8 u. g, Y2 m; K2 D'Netscape'
0 e& r4 Q" d3 h; N1 X" y// Web浏览器厂商和版本的详细字符串- W! x2 R/ _1 }  S- O. e) _7 A3 ^+ U
window.navigator.appVersion  u% `8 A; ^  }7 ?
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' d7 [$ d  i" L6 ?4 e9 b// 客户端绝大部分信息
* N) n4 j! B7 n' i" Mwindow.navigator.userAgent
2 _8 q; O) o& C! E- z'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'! t/ q: {7 f& Q/ W# k' f% v
// 浏览器运行所在的操作系统
4 D2 j0 c* v. ?window.navigator.platform
% f+ A  k5 T& x) k1 u- S'Win32'- ~; h  a( H% [; ]4 J/ N! w+ P
  X) b0 u; D  ~6 Q: j6 [' L, n
//  获取URL
- v5 Z8 A+ k( Vwindow.location.href7 J+ W1 \; N) f/ f3 c
// 跳转到指定页面
- ~1 p* c+ d* X! e$ ~# wwindow.location.href='https://www.baidu.com'! k( z8 _2 U( A5 D) h8 `
// 重新加载页面" A% W5 A; A" X; v7 z
window.location.reload()
9 d- I+ |5 P5 O$ _</code></pre>
/ G* J5 M* X* d1 X8 e/ z- ~<h3 id="32-弹出框">3.2 弹出框</h3>1 u6 k7 w8 {# i6 \% J
<p>三种消息框:警告框、确认框、提示框。</p>
" z& S8 j: ^% x<h4 id="321-警告框">3.2.1 警告框</h4>. G: G5 \. b; S
<pre><code class="language-javascript">alert("Hello")+ R3 n- @0 {  ]3 ~" |) w9 ~0 V
</code></pre>
9 `0 V! ?; ~) s, W# z( J0 z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>6 K# R( A) j# ^2 u3 k. D1 r
<h4 id="322-确认框">3.2.2 确认框</h4>
3 ]9 y" c' P4 V. K2 K<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
: G; ?" B: s2 G1 }, x9 z<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true7 _6 i3 L7 k" g. U  Q7 z' Q2 y+ q+ B9 O
true
) \( h( n( s. `, |1 @9 x&gt; confirm("你确定吗?")  // 点取消返回false9 ]  ]. l3 i; M% G: U
false1 g; ]: n( n" v* ?
</code></pre>/ C( R  D/ ?+ d" C3 d" Y* g
<h4 id="323-提示框">3.2.3 提示框</h4>+ r! R! A) Q" V7 @! h- v
<p><code>prompt("请输入","提示")</code></p>; \" l/ r! U) H+ [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
. d. p1 p- E% V<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
3 y  R3 `0 `" g) c1 i<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
1 V5 q% O( B% F7 N<h3 id="33-计时相关">3.3 计时相关</h3>: J6 {) @4 w! Y% r
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>. u7 F, j' ]+ ?/ e% x7 h* P
<pre><code class="language-javascript">// 等于3秒钟弹窗
* Z4 ], ]2 |; [; D' d1 lsetTimeout(function(){alert("Hello")}, 3000)2 o/ }0 O: I% v4 g+ j
0 A9 C2 `, Y- J9 J
var t = setTimeout(function(){alert("Hello")}, 3000)( t- Z- n8 w( \3 `% [: J
5 ?; T. s/ v0 S2 C4 X
// 取消setTimeout设置6 Z. w* ]' R" p0 J1 H
clearTimeout(t)
5 ]4 j# m9 O* F" J  E, [3 Z</code></pre>9 Z) F$ F1 L" h& c* H
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>) `, z/ l; q& y" K8 e: n0 ]6 O
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
4 N/ b. Q9 T7 N* G0 E# }* w<pre><code class="language-javascript">每三秒弹出 "hello" :6 G, Z0 k2 ~$ m6 X8 G4 S
setInterval(function(){alert("Hello")},3000);* u5 G8 Q! l, f( E4 W* W
</code></pre>; E( ~6 C- t2 C4 P; f' y% D
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>$ _4 `- c& W9 B& u! n
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);( J- E. H4 O/ f9 f9 A; l2 e
//取消:
' X# B$ M% W. {) z$ e; ^clearInterval(t)6 x) _1 S# c& W1 D6 O  ]# k( d  _
</code></pre>
4 c' V; x" `8 j+ k
. _) Y" G. F& q: R. G( {; y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-5 23:06 , Processed in 0.073310 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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