飞雪团队

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

前端之JavaScript

[复制链接]

8914

主题

9002

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29072
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
: o9 E5 i; f5 D  `3 D1 p; \
<h1 id="前端之javascript">前端之JavaScript</h1>
8 F# Y8 g5 U6 V. k  c4 ^# M6 O<p></p><p></p>
- z8 c0 U. j! F9 @3 h<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( l  j8 S# r. T- i<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
0 f+ C0 U2 b7 D# a/ P3 L1 e/ `它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>/ B  t% u: m1 b# {, Q3 [/ f* G
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 Y$ z9 w0 z  M# j+ n+ W它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
  G1 F( f7 O! n& ]<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>6 E1 }- z+ u9 a( V1 j4 g
<h3 id="21-注释">2.1 注释</h3>
5 h/ C1 y1 f$ r& p2 w- K$ {+ v<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>2 s6 B4 a- r* s3 i
<pre><code class="language-javascript">// 这是单行注释
0 X. O  `3 H2 C, o' i0 z$ H7 L0 [7 d. x" B
/*
3 m5 e+ l: y4 C' O) @# b2 ?这是多行注释的第一行,
) {+ R" `8 L7 c* o这是第二行。
; ]$ k6 X* m- e. s& o7 s* C*/
8 v) U7 y' E/ ^) H" t. n( G2 U6 A</code></pre>2 [8 Y5 ?) v% Z' J
<h3 id="22-变量和常量">2.2 变量和常量</h3>
# I+ M$ t9 E8 N1 `$ N<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
. m/ z7 h" ?+ C  X<ul>$ C: a, b; B) t- ]" f" z0 v4 S+ W
<li>变量必须以字母开头</li># }8 y: t7 m9 I1 ^4 ~
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>4 @, K( _. r1 X- ]0 f
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
$ e2 h- ~- p) E* y0 ]</ul>
3 C6 M9 w' ?$ b7 J4 j/ J! A<p><code>var</code>定义的都为全局变量</p>
) {! r) o& `. ~<p><code>let</code>可以声明局部变量</p>
; S7 P7 X* K' Q  L% {<p><strong>声明变量:</strong></p>) a/ a( T4 `% Q; _/ R
<pre><code class="language-javascript">// 定义单个变量- I, {- n$ b% s' j0 `$ U
&gt; var name! v3 }/ D% M: e, n% R, p7 o
&gt; name = 'Hans'
; e- H2 ^) [+ K0 m7 N7 B//定义并赋值
  U& T, `( x0 e; g&gt; var name = 'Hans'
. t3 A0 ?; k+ |- T) z' B&gt; name! ~8 o) U6 r# `3 h$ ^0 o4 A% g
'Hans'
+ y) b& C. m: b5 ]% H- L1 v4 f- O5 G; k  W& c  A" L
// 定义多个变量: q/ e- ^& L% A& J2 T
&gt; var name = "Hans", age = 18) S3 Y& Y3 V! A5 z( A
&gt; name
& l4 q8 i$ ~4 U5 r'Hans'- G# }+ n  j' a, q
&gt; age
0 W6 I6 Z6 z. B18: O2 ~4 a( ]) V: |% `
  @6 l6 F. X6 J$ ~# G( f/ Z5 i0 ]
//多行使用反引号`` 类型python中的三引号
0 _! I" F) |5 o) V$ y4 |&gt; var text = `A young idler,
0 K8 \9 h1 {2 Ban old beggar`0 `4 J; q* y- a! X" E
&gt; text, y% B) q3 e. d5 K* p9 p
'A young idler,\nan old beggar') @( }0 `  _7 g7 q# |& S3 K  m+ W
</code></pre>
3 E& C" }" D, k<p><strong>声明常量:</strong></p>
- e4 t$ f, W1 [/ d" c1 z* S7 g/ Z<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 a3 w8 q- h0 T4 o" F1 y2 J
<pre><code class="language-javascript">&gt; const pi = 3.145 F5 z7 G0 V# a' }
&gt; pi
/ E' d9 M# P; p$ S; Q9 j3.140 l% z) S6 f( n3 \' L. N  V
&gt;  pi = 3.01
0 C( d% v! }$ D& t; Y3 AUncaught TypeError: Assignment to constant variable.
% n4 a7 }) Z4 F8 f7 J. z% Y6 V    at &lt;anonymous&gt;:1:4
. S) B: {" }" X7 W5 b" W& L5 c' s4 a& z  q0 _
</code></pre>
& `, ^4 c$ b, X4 Y8 X<h3 id="23-基本数据类型">2.3 基本数据类型</h3>; _  f9 `; H3 X6 L5 v: `
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
7 V  [( y: T9 M& y<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>1 U2 @) ^$ O1 r7 B3 c  i) V, r# z$ {
<h4 id="231-number类型">2.3.1 Number类型</h4>
* ?4 ]7 b* N( V<pre><code class="language-javascript">&gt; var a = 5
1 Q( Z: d: s' p% C&gt; typeof a   //查看变量的类型  8 N! ]; K5 N; ^
number7 ]' G& g& m! X1 N# z( Y# ~. [

$ u  G/ X9 [) ~4 O& U&gt; var b = 1.38 }$ Q7 y: }3 L8 @6 ], g* g* L, \
&gt; typeof b( Q4 ~$ B7 S3 P; K1 x! T1 O
number+ X; _% P) t" p
9 ]2 F1 e2 I# i- X
// 不管整型还是浮点型打开出来的结果都是number类型
4 X0 s3 i3 \' r. |' o. k% E+ o
% a5 i5 G; d6 z9 s9 i/*( t1 N5 z' r& r) x: N
NaN:Not A Number
: f: e4 g. @, _8 oNaN属于数值类型 表示的意思是 不是一个数字0 K4 Y  j( ^4 d5 _' u# H; H
*/
# Y+ v1 E' ^- R! f5 i7 F
2 F. y( \3 }1 o; {' n+ P6 w5 sparseInt('2345')  // 转整型
9 G7 \) m# ^- ]) G2345
# A) K* O% X4 L, Q& w4 c, [parseInt('2345.5')6 o: U. Z8 U3 u, I3 M8 |  i/ M$ ?7 {
2345) O* d* ^% g  Y3 j4 l
parseFloat('2345.5') // 转浮点型
1 f) M) Z$ E- A2345.5
# Z& L) V( A2 sparseFloat('ABC')
2 T+ {' y' L; W  Y; n- BNaN
  ^& j! F  V8 D( p# `2 SparseInt('abc')  F  b6 Z0 x4 R4 x
NaN
6 p: Z  S6 k4 k5 H" e+ d</code></pre>
3 |3 d8 B- O7 H& _+ v5 k, O7 x% f<h4 id="232-string类型">2.3.2 String类型</h4>4 {! _# d) `6 X# p9 q7 q0 ~* }* u
<pre><code class="language-javascript">&gt; var name = 'Hans'% y' {# X0 f* ~  b
&gt; typeof name
) ~! ?3 ^" P! Y9 o'string'
& u7 L& P1 ^* M# i5 V% n5 q1 ]4 y1 o+ \
//常用方法) W# g. v) X  O. V
// 变量值长度
8 ~2 A: F6 y( h' f, f5 N1 n; Z&gt; name.length8 }' U$ H2 L* ?% x, I
41 o* k! v5 @7 X# F$ S  z1 z5 ?
// trim() 移除空白. U" r# {9 n) s/ Y3 [
&gt; var a = '    ABC    '
% X& a7 B4 }7 p1 n&gt; a8 K3 T& v$ K# F" M
'    ABC    ', [2 E6 H+ Z4 j+ a; t
&gt; a.trim()
. B& O; U) e1 ?8 S'ABC'" F8 w! H$ Q+ v+ C) F5 g
//移除左边的空白
5 v. h6 J2 b& i! J: L5 e1 @. ]&gt; a.trimLeft()
! M! u; V$ `# }; {2 I'ABC    '
. c! g  F) K7 V7 w& X//移除右边的空白
, P& Y& c4 H. N! O( H3 k, c6 t&gt; a.trimRight()
3 P0 p; `0 S! }+ t: k& G'    ABC'
7 V2 C$ w2 ]6 G& i( ~
. |* s6 r$ Z% u8 m) m//返回第n个字符,从0开始
9 g% K  a9 V' t. ^0 y; y* m! o5 p7 k&gt; name1 }: _6 ]0 r# ~; ]
'Hans'
8 f* E' Y3 A* Y&gt; name.charAt(3); O# b  |  [* X2 c. N
's'
0 \% Q, O5 Z1 A: c: p3 F7 u&gt; name.charAt()
4 a* i' @& C& Q- f" S( K'H'1 y; ?6 W9 p/ f4 c+ H8 {
&gt; name.charAt(1)
3 D3 ?+ m% s& C/ ^* V- f$ P'a'7 Y. O: i1 H" \  C1 e; w

  L& r6 ?9 h5 c$ g7 J" K" ~// 在javascript中推荐使用加号(+)拼接
: B, h$ Q. }- O4 C, t&gt; name
9 w5 o2 k$ U  J4 }+ ?'Hans': U* o; F) g0 L6 F/ H! Q
&gt; a; E/ s! H& k2 n& u6 Z
'    ABC    '* e- |$ E! @6 ]2 b' E2 V
&gt; name + a& s, u0 b1 q, N4 r5 C8 q2 @( C4 ~
'Hans    ABC    ': |+ g/ I& e* m( P
// 使用concat拼接
* |" e" f, [( l$ r) H% P&gt; name.concat(a)0 c7 z+ N* B( ]- L' m
'Hans    ABC    '1 [+ E3 J4 c( u2 q+ W' ~/ D, |( ^

! _0 _6 u9 ?0 n1 c- R//indexOf(substring, start)子序列位置
( S* \. {( B0 Z# s$ s
2 }% @& F" `2 X! q$ }0 X; b& B* a8 P&gt; text) v! P6 s! F/ U4 B+ M/ Y
'A young idler,\nan old beggar'! @3 ~) f1 [; T9 }, T" V# k
&gt; text.indexOf('young',0)
! {8 i. e. d' E; \3 b3 k2
" A, [) b- q3 U' {. w2 ^3 U; ], I- J- R6 l% B
//.substring(from, to)        根据索引获取子序列
1 Z  p4 j* f$ J# ]7 y- Z&gt; text.substring(0,)% I% F. x4 J+ e8 J
'A young idler,\nan old beggar'( x4 e* r/ o$ F# x4 B+ W6 y
&gt; text.substring(0,10)( J  _% \9 V" m4 o* ?6 z3 S
'A young id'7 W4 f$ o9 D0 z# r6 o) V
9 k$ U2 a! Q+ B$ `& @8 g3 B: |
// .slice(start, end)        切片, 从0开始顾头不顾尾7 L3 p, s4 Z% x6 E- b1 q7 Y
&gt; name.slice(0,3)7 H7 j& F! U2 ^; Q$ Z
'Han'
6 k; a' h' j" ]7 u: W% J- v' o( N0 p) U3 A* m+ y
// 转小写
; }( R5 B7 c$ Z  M&gt; name( _2 Z8 r5 Z% j( r( q# ], n& r
'Hans'! `' k2 ?* ^8 |3 W/ \* `4 b1 ^
&gt; name.toLowerCase()9 T  ]( b% Z, D4 @' J( N
'hans'
, W% z- A' ^/ o  T9 W// 转大写
% f, c; i$ ?: y4 g% S&gt; name.toUpperCase()
0 h9 D5 H+ t$ w; W9 }'HANS'
$ Z7 e* p' O% y2 X( U  T7 B- o# E; U, W  o
// 分隔9 p, v0 `2 L& S3 o  m8 U4 k2 |# `
&gt; name* K$ p: l5 u! A5 s; b4 _
'Hans'0 ~! N2 `6 K% i3 K# v
&gt; name.split('a')$ \) [, x5 `' A  b
(2)&nbsp;['H', 'ns']* Y( t2 B" m! t% i& D
</code></pre>
* {' F6 i5 O7 y$ h<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
7 ?) ?* a$ t) y4 Z, H/ Y<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
7 X* i; q) ~4 W+ j" k<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
3 O6 C% y7 e# Q8 i/ t; U) f<p><strong>null和undefined</strong></p>9 X9 v! B4 T$ H$ ~2 ~* |2 S
<ul>
' t/ n8 B' I  @2 I$ t<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
4 ?, A  R2 R. q6 U/ ~1 z# J( |<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>, L% P/ `# s  O$ M: C" t
</ul>4 ^2 \+ l- Y' B) t
<h4 id="234-array数组">2.3.4 Array数组</h4>
7 ^7 B+ E  F3 z$ _<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>, a  w2 w! c' U: ^. j# B* B
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
" Y' C* M; Z0 h! t&gt; array1! n3 H1 F% |- Y0 F
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. ]4 |$ d7 C) x
&gt; console.log(array1[2])  //console.log打印类似python中的print
: |) q4 e& j) a: g& |/ S3- X7 C- p: V  n" A
// length元素个数
$ w1 x$ ?8 i! |6 c" d( k' C&gt; array1.length1 q; _" Y! }  w6 X- w/ B+ Y
6
6 H4 y- Y8 F$ }1 q// 在尾部增加元素,类型append: u; Z6 W% w' n- }+ j% @
&gt; array1.push('D')
* e; S9 k9 v4 l! A/ N77 h, p5 `  g( I; m  i
&gt; array18 h% ?. Q2 y- ?) V
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']4 }) ]/ c/ {" w: |
// 在头部增加元素# U! k3 i0 P) V+ b+ h5 P* T
&gt; array1.unshift(0)* h) Y* i9 x; V) z8 c
8% i+ L2 t7 J% i" w- N& D! w
&gt; array1
5 E1 A7 f' q. W/ l) O(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']; Z# o+ o4 x. F. t
+ l! g( T7 |4 P( N4 Q' ~% D  D1 }
//取最后一个元素0 b7 m' }- L: W6 S9 Q
&gt; array1.pop()7 Y# x/ C! Y* T: G
'D'
) {5 x, b! L  D6 m% |9 E; T, j&gt; array1( Y: [% }" m8 R+ _' A' E& p
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']/ u! q$ D1 o2 L6 J
//取头部元素5 y% v$ @! z6 Q! k4 i% a* i
&gt; array1.shift()
* B) i6 t9 P& {$ T. B# U3 p" C1 J0
+ S. z7 `1 f/ H# ]0 _&gt; array1
' O  d9 e7 W$ B% S0 J9 I4 b(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']2 U1 z$ O+ C  _; \. w% s
/ Y$ Y* s  r( L0 H. b% J0 N
//切片, 从0开始顾头不顾尾
4 C6 |+ |$ a1 B+ F5 _# }8 M&gt; array1.slice(3,6)1 d- X. w0 q3 S( n9 a
(3)&nbsp;['a', 'b', 'c']
* d2 f# _6 c8 f( f, k// 反转
# m% z. v- V) g- t( \&gt; array1.reverse()
# n5 _0 n& z- H; k(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
6 O% t) B, Z' {9 F# j% Z// 将数组元素连接成字符串; h  A6 N/ A% a6 @
&gt; array1.join() // 什么不都写默认使用逗号分隔, I9 u, h+ e' A0 G
'c,b,a,3,2,1'  S+ i. @% t" v7 G* i2 ^! p5 X: d
&gt; array1.join('')
  S5 i8 x1 j% S/ Y1 ^7 P'cba321'
9 o# V* X( k, S2 h8 K&gt; array1.join('|')8 |  @' l) f3 \& u
'c|b|a|3|2|1'
3 w. l  r1 N- K/ G2 N- c5 I; n2 }  _3 g. p3 C- p& P( ^
// 连接数组
7 B' n" |& d6 Y8 p% B&gt; var array2 = ['A','B','C']5 `2 b+ w+ ^& D' l2 O3 X( `
&gt; array1.concat(array2)! [2 t+ h7 ^0 c) ]
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']% v3 Z1 `, U& V/ E# w0 E

* J. p) @6 i4 P2 X4 L// 排序
' ]. Z8 w7 ~4 q: d9 r8 ]&gt; array1.sort()( ]  u# T+ \3 t* U
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
  w; N3 Z5 B1 m+ F$ k; z" D" I& S/ B" `2 m  q
// 删除元素,并可以向数据组中添加新元素(可选)% |7 U; J/ b: a+ ]0 p0 E$ i
&gt; array1.splice(3,3)  // 删除元素
1 y; z5 @% p, m! ?(3)&nbsp;['a', 'b', 'c']
- E8 L* h" l& m  b, {# v&gt; array1
$ ]% U; j" Z. B' S(3)&nbsp;[1, 2, 3]
2 S3 `3 X+ l, J) m&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素' _9 p# P: e6 c3 d. \
[]! P/ \4 e1 L' \& c( T; c2 p' m5 F! R
&gt; array1
! i" `, W/ V/ q6 j+ w3 H) @- k(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
1 T! }6 [+ I2 p/ }( b: V( N( O/ e3 D/ u; _* L0 y; d1 x8 o- f
/*
0 n) C& [" `' N' p2 G) qsplice(index,howmany,item1,.....,itemX)5 H+ l* W2 B& [
index:必需,必须是数字。规定从何处添加/删除元素。0 _* [# x' A% P7 e. q
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
4 j, d# Q) b9 N, y: c% p' T( ]item1, ..., itemX        可选。要添加到数组的新元素
0 U* ]' \1 v- x) L0 u; [4 b6 A*/
0 x$ z) r9 }+ L0 J0 v0 [" |" J! `, w8 t! G
// forEach()        将数组的每个元素传递给回调函数9 t3 z' L& r+ A# y+ }* b6 J
&gt; array1.forEach(function test(n){console.log(n)})
+ L3 A- F; L, I 1
& P% O; t6 r& n; J+ F, d% h 28 p, u  u# d& B# [. d1 y3 O
3  P: T5 o: j$ T! E
A
/ F* t7 g$ Z" r2 b' q- w, u6 e B8 H+ E7 I, f. ?: C- X
C
9 I" E3 x  ~4 l; M% m: ]. Q! F// 返回一个数组元素调用函数处理后的值的新数组! g8 b8 ^0 k3 F3 k" Y( M3 e4 s
&gt; array1.map(function(value){return value +1})7 m" H3 w6 A7 Z, D2 x% c5 u7 {; P2 U
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']; b0 O1 r# F6 d! }" `1 g- P+ k, |
</code></pre>: u( [( F) \# h' I
<h3 id="24-运算符">2.4 运算符</h3>
- g& F/ t' v0 P! G" ], U% |1 l<h4 id="241-数学运算符">2.4.1 数学运算符</h4>) q) m" o- K: G/ ~- Z
<p><code>+ - * / % ++ --</code></p>
0 j: y& \  d  V<pre><code class="language-javascript">&gt; var a = 6
6 r4 f0 j. ~) y/ L. _&gt; var b = 3. |9 V. H; \3 }3 I. k3 j# |
// 加  s; L# E/ ?. v
&gt; a + b6 N1 p8 L$ g) z. R0 x
9. X' c' z" Y/ l: M( H. r
// 减- ?& L' ^0 I1 w. C8 M( R" M
&gt; a - b
! |4 ^: k" d3 z( ]5 u( N7 k3
2 M# h) f9 n/ H6 o  |  v5 c, Z// 乘( K7 a2 T2 R$ p/ ^
&gt; a * b
5 |, o, I& ~. W# ]" C7 L2 c/ X# l182 c" L4 j" c% |% ?4 J
// 除
$ N1 q4 W% J( f0 k% W&gt; a / b; O9 U9 N/ G( u  z+ f
26 Q) K/ Z) R8 o8 y5 P" r% a; }
// 取模(取余)) N% r0 x6 Y+ I- V" y
&gt; a % b
- A1 D1 ~- @, H$ W9 @$ \0
6 M' v2 ]. H1 v# J, n- l// 自增1(先赋值再增1)
0 ~6 T" H; o9 i* D&gt; a++$ x4 X! H+ F9 @) k7 d
6
) N& ~" g( ^+ d1 S&gt; a
$ K3 a1 B. j  {+ |3 M, [9 Y4 Z7
$ w) `0 ^, T; d% d5 m# g// 自减1(先赋值再减1): K$ M3 o2 v; c- o2 r9 s$ E
&gt; a--
; p& P' D' C8 ]" L72 @' b) u- y& C7 J
&gt; a
! K" E7 a9 {7 y- l# A* g% b6
' z. i7 |. j: J% e7 V  ]// 自增1(先增1再赋值): F1 ?3 x! L- f, j3 B
&gt; ++a
& t* g" Y5 I' h4 N0 f7
5 a2 C5 f$ ]& T2 T1 a* h// 自减1(先减1再赋值)
% x! ?8 U0 b  ?# T5 b" \&gt; --a
+ D) i3 H. \7 P- U2 u6. h! Y2 Z& U! Q; Q
&gt; a2 I8 q1 i) q6 D- `9 T, N
6$ y' R  q0 X* |( d$ a# r

& o9 a$ ^, Y* ]0 `6 E1 a& g//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理0 [1 P% l/ o3 ^( o
</code></pre>% |# b7 f& [- V+ t, c5 E" a2 ~
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
$ G& t0 k1 |3 z; {<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
1 Q5 ?5 F, {* I! V<pre><code class="language-javascript">// 大于. j  ]0 W, {5 |$ e- L2 R* t
&gt; a &gt; b
! j/ a& w9 ?* m: Etrue
. ~" p+ ?% ~, Q9 A! L$ m// 大于等于
# W% j2 b- g$ y% v&gt; a &gt;= b1 v* a' B0 N( M0 N' M' L& C) b' r, F
true
3 l1 a2 F9 @) R// 小于
4 s' b- P/ K) Q& l& }: A0 c&gt; a &lt; b  m  t4 [0 z7 O4 E: g. O0 ~3 P
false
+ W  E6 u: f5 M5 f/ d* W# o// 小于等于5 ~9 ^4 P  K; S
&gt; a &lt;= b
$ G1 ?& b( _: R7 a; W, E1 Cfalse
( k% T* P. ]' o; ^2 B5 C; t// 弱不等于6 r) Q7 O3 e* W4 k
&gt; a != b
* {2 ], N" u4 g6 vtrue( _2 a- Z. z$ ~/ e  q
// 弱等于
: W3 r/ j  u: r: `, r&gt; 1 == '1'
% Y  }3 R! s+ p- S6 y; Otrue
8 f: `9 F# p  }" [% j; S  V) b3 K! E// 强等于
- e; c* K8 C3 e5 P; z&gt; 1 === '1'; n! D& T& f2 a/ j- B9 M
false# s2 F8 C8 |6 C) t' {* G1 z
// 强不等于
% Y. t7 p" K" {8 p&gt; 1 !== '1'
! A7 N* ?1 A. Htrue
0 Z9 k" F* ?4 R+ g  V9 J
, l* ?7 h4 X; L6 J3 v. ?/*
. S; q' h/ _' E  lJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
$ {8 L6 E8 d& N% ~! g*/
' N& B* ]2 y9 I</code></pre>* m% W4 N! C' C* Y1 \% [1 {
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( ^! Z" D) f! ^<p><code>&amp;&amp; || !</code></p>$ @, x. i, \* u0 e: B# ^: C6 Q
<pre><code class="language-javascript">&amp;&amp; 与* `( X4 X4 E8 c! Y9 E0 d
|| or 9 B& ~4 A" p3 C# L
! 非$ o8 G# O2 c/ E+ R! G3 c1 q
</code></pre>  P" T3 _0 u! a+ B$ I3 T
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>& M, u! B& R( I) ^  p. I
<p><code>= += -= *= /=</code></p>  X$ j  p/ J6 R* ^& T, Q
<pre><code class="language-javascript">// 赋值
  k  M+ G4 \, H9 v6 y; r, M; [& T: A&gt; var x = 3
& }5 C/ n. A, ^! J. U  e9 N3 r: Y/ y// 加等于- V$ {8 v' V7 |4 r3 z
&gt; x += 25 i& A. n! A. |8 q$ z& V* j: m. T1 u
5% [( ^; F& p6 O
// 减等于
" l4 Q- D$ @; J3 b&gt; x -= 1
; X9 \, M( G+ x, D4
7 U5 J6 x4 b9 P// 乘等于
- ?8 a; D6 @+ p* E# d&gt; x *= 2
/ d% {3 i# P7 _* G9 g87 p$ J/ y* a* U* E
// 除等于# H' d0 K. q9 U1 F% v! A0 g: W
&gt; x /= 2+ h6 l( C% I* |+ q9 i  `
4. I8 c' c0 j5 |
</code></pre>9 M; s' i" [7 C& k4 \5 `" I& o. o  Q
<h3 id="25-流程控制">2.5 流程控制</h3>4 W/ @% t5 W3 c+ ?' X# ?
<h4 id="251-if">2.5.1 if</h4>
* v$ e( y$ \  T$ K$ |<pre><code class="language-javascript">1, if(条件){条件成立执行代码}5 g6 E- i! r. d# a5 {$ T# X7 O6 b

. n- \2 p0 ]. \4 {& D&gt; var x = 3
, D4 c) [( A0 X& U- z( p: X&gt; if (x &gt; 2){console.log("OK")}
3 k9 |- p2 M- q4 }, { OK- ?/ N+ C, f2 q; F: N$ c; \8 E& i
( ]+ K: d9 D3 H$ u
2, if(条件){条件成立执行代码} 6 Z0 a5 g! Y; Z7 X+ e9 t
        else{条件不成立执行代码}. d8 J+ T5 s- C0 V  V

& [* ~3 Q; k0 W1 G2 ~&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
2 _$ I) d/ Y- Y! q. K. Z. |'NO'5 N8 R# i$ b) _- p

# {* W$ _) S7 r0 f2 ?$ W4 N3, if(条件1){条件1成立执行代码} 0 ^* j( X3 b1 V9 @) r; }  z
        else if(条件2){条件2成立执行代码}
( T! ~0 L+ F2 u: B5 y9 S' _    else{上面条件都不成立执行代码}/ K1 n: J& L+ C9 T; R8 i5 c" L, V) _

/ z/ J5 k' ~; t2 J& \&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
. @$ m' {6 d2 @# m Ha8 I- o$ N& [0 U# j* ~
</code></pre>
, \9 {; _& Y" f, w<h4 id="252-switch">2.5.2 switch</h4>
$ I* |8 B# Z9 _! J2 S5 r! w- K& h<pre><code class="language-javascript">var day = new Date().getDay();; }: L% H  t$ |, x
switch (day) {* A* r1 o2 |# r# B, b9 @
  case 0:1 H! ?6 Q- l4 G. I3 N0 T. {
  console.log("Sunday");: \/ l5 V0 r* h+ |4 m' Z, b; X* E
  break;
" J1 o0 Z( [& g2 b: G  case 1:
, m  k0 N% t  p) v0 R4 a# o  console.log("Monday");
& i' W  ~8 Z1 {+ K6 j  break;
& @8 {! z. U7 n! Q, C1 c( fdefault:
8 c& O5 a2 ^) ]3 g( C3 H- z6 v  console.log("不在范围")5 c1 O1 a4 ^& D: F
}( a; d- ]  v  ]8 [1 B7 c. H
不在范围
" S6 d+ \& C+ O6 K</code></pre>2 }! K, q7 J8 Y  Z
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>. i& U' U- `2 `/ p
<h4 id="253-for">2.5.3 for</h4>
* a- f. h2 K4 M- J. K" P<pre><code class="language-python">// for 循环) g. s, a* h+ {& {
        for(起始值;循环条件;每次循环后执行的操作){4 j5 u! a1 ]8 N+ N
        for循环体代码: [/ F) S& O2 U- c) y0 z8 u& c
    }
7 W! Y" o$ w0 M9 y
  k; {6 L* T: r1 ?3 r# a; sfor (var i = 0; i&lt;10; i++){- I- K, Z! u6 V0 ~
    console.log(i), V1 z4 f) v" p* \- J1 g1 }) v
}/ z1 H7 [; @# \; R4 d
        0
" O% F% R( u+ [5 ]* F# n3 S        14 k$ t3 [$ ?0 G
        2+ P2 K5 S7 {) e" n# ~
        3% R- B! z& G/ i9 z' ~$ m
        42 v% c/ U$ y% f) M) d
        5% Y9 ]9 g9 f0 ?# Q+ U0 i. y
        6: t2 b/ p+ P/ E0 u8 r
        7# Z& Y" e* [0 l  T( N
        8: u+ b5 ~8 v- ?+ }% f
        9
* e+ x- q  ~3 S0 v: ^- k8 a0 |, g</code></pre>
/ Q+ k7 w& f( o) v9 S<h4 id="254-while">2.5.4 while</h4>; ?. Y- ]1 I7 h3 h* i0 L
<pre><code class="language-javascript">// while 循环% C% a* c$ R# O" i
        while(循环条件){
+ T) s0 _% B. M& ~& g, [9 N        循环体代码
0 F7 u7 o7 W% n8 n    }9 `( z3 u3 u. S/ D  s

0 T- d! D0 s. Q# f# j&gt; var i = 0
. |' L$ g) ^; R9 p) U1 _$ P" q# ^&gt; while(i&lt;10){. J% m5 P& J8 Q
    console.log(i)2 L( G3 g2 R" z
    i++) Y1 v, {1 T% T& X
}
( R+ P$ E. L" X) U! ~ 0; @9 _- J' r9 v- w7 u3 E
1
" D/ B2 w" g( X5 N; T 2& C5 O* z* A. w2 A: [6 N' K
3- h5 h4 q/ [- ?' t" R' s+ D
48 M# r) M4 `9 {2 N4 w0 z
5
" d7 }2 X5 T' M5 l6 `7 g$ [3 X- C 6
3 S+ F; t9 n: h8 I7 V/ p0 u 7) U! C) P3 }% P- P& e8 P# l4 n+ z. c
8. q( I) Y! K. Z6 Y1 q2 p0 h
95 q1 P- z# {" ~4 l  ~
</code></pre>
) y. \) [) h$ P- f. V( R<h4 id="255-break和continue">2.5.5 break和continue</h4>
# y# r7 [5 Q4 n+ K3 {' [<pre><code class="language-javascript">// break
, _+ N  _% ]  p2 B- g8 qfor (var i = 0; i&lt;10; i++){& N" r% d1 r# D
    if (i == 5){break}
4 {* m+ Y' T9 _0 [9 q, m6 H    console.log(i)6 @8 z* v7 X1 A. S) s4 g
}
# u) c* h+ w: Q( | 0
; a4 B) ~! q3 r7 ~0 s 1! G5 X, f% f. D* y# n8 b% ?
21 e9 h! e3 B5 G" B) J/ l
36 u  D! J: ]& t6 Z9 C, X) A
4* A* F9 L0 c+ C" L& H4 @" }. i; M4 i( @
// continue
, q5 C: C4 g  Y  Efor (var i = 0; i&lt;10; i++){
) N- u# F* T8 L. _4 }4 ~- M    if (i == 5){continue}
7 M5 W! Z; R/ J0 y% O, P; o5 l    console.log(i)1 Z5 p- F! m4 d- }' K4 P
}# ?, L9 i7 w+ Z  p
0* R) g9 o6 L+ a( i8 Y3 O1 B' r1 M9 O
1" w4 D3 m+ V; ^
2+ O1 [# `9 U; b% C& e: V
3
4 i+ j2 P* c* N6 k: d1 |" X& Q 4
4 b/ E. a: @* n1 ~* l 6
8 A/ h% o- l( K# \+ F8 X 7
6 l6 A% ?' c6 E% H: X. x 8/ a4 T0 ^* Q1 j; \! h
9' e2 [: o3 ]0 c% {4 Z
6 N- L! p9 |2 r6 {+ K
</code></pre>
: x. I1 m3 |+ N: |9 n; S& W<h3 id="26-三元运算">2.6 三元运算</h3>
" x6 y3 l9 V3 ^& G+ `<pre><code class="language-javascript">&gt; a% V& O7 Q7 f6 j; T5 J6 g
6
& k+ ?: t% O% H* p& D. Z" S% d; l&gt; b
; C2 G8 g$ n% c6 s# n% e3! k1 V5 x( h$ q6 N5 E
, r' m, p4 p; Y
//条件成立c为a的值,不成立c为b的值
$ U- O0 X9 I" |! t9 M! Y&gt; var c = a &gt; b ? a : b
5 x3 X  c: Q  D; B' u3 v&gt; c1 d1 O+ e5 C5 J
6
2 E# G% Y' ^9 V$ w+ Z! \% H# N; d  h
// 三元运算可以嵌套
, j% P+ u2 W* ~8 U* e7 n$ D</code></pre>& R! d5 g% w% e1 G( ]3 o
<h3 id="27-函数">2.7 函数</h3>+ G& _, [& g* v* F2 S
<pre><code class="language-javascript">1. 普通函数% I2 x9 w$ H: f' u
&gt; function foo1(){# a- I" _4 E# s4 S+ m; `9 T1 ?3 k8 ~
    console.log("Hi")
' ?  \+ \5 r1 a+ y. e6 i0 U; z}9 ~7 o9 H6 Q/ t( X$ L
) h% x$ W5 l( _- r) @' o* E
&gt; foo1()* v# ?& d( n/ x6 S
        Hi1 d7 W) I) X/ X$ z2 l; P
2. 带参数函数
, ]# ]1 j9 p& r+ _1 B&gt; function foo1(name){
0 ~  N+ P6 |8 R4 s2 L+ y2 Gconsole.log("Hi",name)
+ a! j- s$ H: l$ M}! r. }0 x. Q& ~- d: }
" `, p1 S. U6 V1 R
&gt; foo1("Hans")' `! K7 s! C  Q3 N
Hi Hans
6 n1 J3 F0 g2 ]1 |$ z' a; U( }4 N7 W- q+ ?! ?3 }
&gt; var name = "Hello"1 \: h$ r6 z" Y2 N3 n
&gt; foo1(name), Y1 _  k, m3 z
Hi Hello
! c3 P5 a! g) N/ a$ t6 y8 i! s+ P) X4 H7 f
3. 带返回值函数
/ R# {0 {2 B; V- N5 ~' m# F" p&gt; function foo1(a,b){3 Y0 y& }8 _: k0 n
        return a + b   
" ^6 H8 H. E2 C9 b( G* B" X}
  N/ Q% T+ q) ^; x1 y+ t&gt; foo1(1,2)+ P7 t% u3 o0 E
3+ v1 s2 I: U2 r! z
&gt; var a = foo1(10,20)  //接受函数返回值
. S; Q. g6 ?% ^# M, Q- @% _&gt; a
, `. W$ G' S  u30( L3 _* s$ Q& I! T0 M

" N' r' ~& P, d9 x2 y4. 匿名函数0 ~0 ^  W, y# r
&gt; var sum = function(a, b){  I' S, j0 a3 e
  return a + b;
2 F% T8 ]' L! `3 T, f  m1 R}" V% K  V! r7 u. ]/ U9 h
&gt; sum(1,2)' I' E- a$ _. l$ L; ?1 m  u
3
( k0 q; H- h( v! ~& A; k; H; @4 P/ e8 I( Y! [/ W
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
8 W) E% O: u* G3 N* F&gt; (function(a, b){
' C; Z$ u5 O4 [$ A" q+ @  return a + b
; V2 j1 P' D& \- {4 \" _})(10, 20)
+ ?% l+ D+ B# r8 m; I2 @3 j301 }; E7 G: }) P* w) {

4 V- X9 c) I# i) T* x6 f4 f% @5. 闭包函数, B; \0 ]+ h7 G/ O8 }- D
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数7 {* b4 B9 i! S- V, `
var city = "BJ"6 y/ K/ g- U4 p! e8 N
function f(){
1 ?' l* z9 s, C: d& d    var city = "SH"& Q# `, j8 G: X( F1 X& A
    function inner(){/ f1 c4 t- H6 x7 e$ j
        console.log(city)
/ z/ l" O+ ?; N) C" j) y+ B) m    }
- y8 r4 _( x: y$ \: C    return inner
$ s4 ]' y( d  c) F}
% k' F- @% J  j  p& |var ret = f()
: d, [5 R) d5 C- b, G; Eret()
- ?; I% v  q3 s6 `: I执行结果:
! o! |3 T. \- S; J6 a4 G' R2 {$ G9 ISH
  o+ a$ N1 K# b
5 `# I$ L$ k) D  |</code></pre>
* r) ?- l! ?' `9 P6 W8 v. B# h<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>* M2 {, ~4 p' Y# k) J$ ^
<pre><code class="language-javascript">var f = v =&gt; v;1 ~6 G% t9 S& ~! @' \; r. k- G
// 等同于; y) {0 b: b7 N8 f/ S1 b  s
var f = function(v){, s/ b3 U" K" Q+ a" b
  return v;
5 S6 f6 Z# d2 k}# n" G6 p' J" B6 o5 ~! K( T
</code></pre>
  i7 g- I/ I  V+ H8 k: W<p><code>arguments</code>参数 可以获取传入的所有数据</p>
; b# L: ?$ e/ Z  }8 f. |: K7 W7 f+ f<pre><code class="language-javascript">function foo1(a,b){
4 t' f' X8 Q1 Q; d' t    console.log(arguments.length)  //参数的个数 7 B- W$ @( c6 L2 m
    console.log(arguments[0]) // 第一个参数的值1 D1 {. x* b! \, p" J/ d% E
        return a + b     q' \- g7 a  Q% g: N7 c% ?
}! B& c  G" O1 {: o2 i) s$ I7 i
foo1(10,20)( G( Z8 n2 i/ h: u) [
结果:. V- w/ C8 h: e9 M8 s: b
2          //参数的个数 . [( P4 H- v; {( x; c4 ]: t
10        // 第一个参数的值
% ^- L! [. z& W) e4 _8 q; D( A% g30        // 返回相加的结果9 z! k9 b% E2 u8 x; _0 g
</code></pre>
8 c: t9 E/ G' l8 k1 Z  S: B7 d# a<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
; T; _' U# r/ Y& k, Q6 C<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>7 @: O5 f1 Y7 Z" _
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
. f3 _/ L% k3 c9 w9 H3 [0 I* M% g<h4 id="281-date对象">2.8.1 Date对象</h4>, U4 M/ Y2 Q/ ~+ D3 [/ r! E8 I
<pre><code class="language-javascript">&gt; var data_test = new Date()
" V$ e7 N; g& C: A&gt; data_test9 r  E( N# Z* l2 E$ P5 H- L
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)7 d0 t% L$ a9 ~1 L+ i
&gt; data_test.toLocaleString(), x! K* m' d1 x& W: r7 U3 T
'2022/2/11 下午9:44:43'
; k& Z' G1 e0 l: H2 J9 F1 q# a7 a+ k* Q* c6 R4 a4 \! i0 f$ z
&gt; data_test.toLocaleDateString()
4 L8 y; {9 `( K0 S3 H* P'2022/2/11'0 ]) M) N( d" o1 }) |
' i) e' B& p/ W0 T# Y9 }* D" w
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
1 |" ^4 M6 u* L, @+ P, l  }&gt; data_test2.toLocaleString()  q/ ^# S/ F) E; c. y1 _
'2022/2/11 上午9:44:43'. }9 n* O+ g/ Y
8 L  ^, q( U" `5 o: o& e% v. g
// 获取当前几号) G  H# t+ l8 x# S' _" _0 u- x
&gt; data_test.getDate()
- A6 d8 |6 r; s) _. Z9 I11
) M* b7 d. {. B5 [// 获取星期几,数字表示
' s9 X$ `! k4 D&gt; data_test.getDay()  
1 R2 T( m% G1 r' \0 A5) o8 x' D/ A$ j
// 获取月份(0-11)
* Z! Q8 Q) E2 Y6 F. Y&gt; data_test.getMonth()% B2 X/ G0 }* V1 e
1
, _! A$ I) ^# q, r: z% K  z// 获取完整年份
/ ?4 j" n* v% M8 C* r&gt; data_test.getFullYear()
( M& x; d; V. [1 d+ C, U  v2022# w; v( f) Y! T2 J" k$ H" x) j/ i& Q
// 获取时# f; B, T9 m- y- d8 @
&gt; data_test.getHours()3 j  t/ v# r0 Y, `- f* A: W
21
' G) i" L4 l( h) }: z* R- v// 获取分
3 @8 h7 j0 R1 h3 }. f  Z5 J&gt; data_test.getMinutes()
1 a- u1 Z, d3 T9 E& n- p0 a44
+ j5 s4 n9 \$ o3 R' w// 获取秒7 }8 x7 k' d, G- \% F) R, E3 _( A
&gt; data_test.getSeconds()
3 Y0 X9 q' K; v& q( e- X0 z437 Z* h: B! I, E, K! s1 o
// 获取毫秒9 p% ^# G! v; a; ~1 A2 ?9 Q8 p: _
&gt; data_test.getMilliseconds()
8 Z7 e0 x" P+ ^- G/ L2905 m. o' b1 R- b  w1 K* I
// 获取时间戳3 [2 n0 T- k0 `9 o3 J. F6 D
&gt; data_test.getTime()" J- h4 N/ C- U! I0 L1 S
1644587083290
! G  c' H6 l0 J1 n</code></pre>
0 a! g; a% m6 E) D<h4 id="282-json对象">2.8.2 Json对象</h4>
6 _7 o  l. M4 H1 I+ ]# K3 t1 ~<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串& a  K& C9 C0 X5 i# u
JSON.parse()  // 反序列化,把JSON字符串转换成对象
: D8 t4 Z; p/ i" C2 B( a
! U% s6 L9 J0 H$ t  \" U// 序列化! V5 a% h6 o: z& {: T2 D
&gt; var jstojson = JSON.stringify(person)
. L# y+ [' f2 j1 m&gt; jstojson  0 e) ]' i( E1 E
'{"Name":"Hans","Age":18}'+ j0 Q; _, v: H

& V) A0 R9 Z; ^! ]% ^// 反序列化) V* J+ w6 @8 k& f2 v1 e
&gt; var x = JSON.parse(jstojson)$ I1 x0 T8 M' N! l3 D  u5 d
&gt; x5 U0 }: K- K" s, r6 A' i5 q
{Name: 'Hans', Age: 18}
4 c. C6 n. O; |. ~: F&gt; x.Age% a9 p: X: s' Q9 x* W
18  W, V8 m6 [# K3 v) |
</code></pre>  r+ Y3 a; Y$ L& _; A* C! U0 ?4 ^
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>9 y: g8 z4 i$ w2 k) h1 C
<p>正则</p>
& \" b7 Q4 ?  K  c<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");) F% P1 H7 {8 `7 L$ ^) [
&gt; reg14 d7 _3 k& y: G4 \% o% v
/^[a-zA-Z][a-zA-Z0-9]{4,7}/9 x; m, V5 W# s9 D( @2 M
&gt; reg1.test("Hans666")4 K$ W$ r0 W3 w+ v
true
; e, ]' K) e- s3 h
9 L+ |% k! [. Q7 W2 I&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/( M  ^) s+ L9 b. s7 G
&gt; reg25 S8 m  @6 G' X& x- `/ {
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
6 ?5 m  L/ G3 i( [/ O&gt; reg2.test('Hasdfa')0 S6 l8 a4 I' y- L# k
true
! p/ X$ C* n. C
4 N' B2 z8 G9 B" `5 M全局匹配:  P+ t3 b+ V7 y) R4 [* }
&gt; name3 j# o( x# c1 x, E( }* q& m0 I5 B7 M9 v
'Hello'
) E" R( I4 X$ Y6 P&gt; name.match(/l/)1 X% J" i) H5 m# c; ]
['l', index: 2, input: 'Hello', groups: undefined]2 L: g4 F. U5 j* u* }- X
$ U9 ]9 h; F4 ]1 b# N
&gt; name.match(/l/g)
, r+ e! K3 \; E- k8 P+ b(2)&nbsp;['l', 'l']+ D- d4 g4 S9 s
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配) Z, Z( V  B- ^7 }- U! ?
4 o1 O6 Q' ~0 f; T3 q& q5 y- a
全局匹配注意事项:6 P- Q; i, b, K$ p# R6 @, p6 b7 H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g, n6 Z& J/ {. d& h& E5 ?
&gt; reg2.test('Hasdfa')
$ ?( v' `% m7 h0 ltrue
0 [- ^, A5 Z1 e% q+ R1 q&gt;reg2.lastIndex;
6 r& l( W: X0 Q: ^: T5 |: w60 m/ h# u, t7 h- F8 ?# B; Y
&gt; reg2.test('Hasdfa')
' r# |$ Z  v; m  V4 D% z5 P2 ~false0 }9 _7 W0 p0 E# ~& W
&gt; reg2.lastIndex;4 t7 i% V% L  Q1 G5 w; M
0
) a2 Z6 _2 X9 [# i&gt; reg2.test('Hasdfa')) Q/ [9 k" @! J4 U# ?
true
( e$ A) ?9 h5 p&gt; reg2.lastIndex;* r: C& R0 Y8 N9 l' P$ z
6
" ~* B; T' x$ N2 @% E5 b: t0 {&gt; reg2.test('Hasdfa')
+ f( C1 K- f; i) ^6 b# M  Nfalse7 U3 X) [. K/ k) j
&gt; reg2.lastIndex;
- X1 o( I4 e" Q1 w0
8 z  A" E% M) U0 V  y4 o9 P// 全局匹配会有一个lastindex属性0 L, I6 O2 n5 w; \0 D6 w8 T
&gt; reg2.test()
# [; g% P8 N) I" r4 V( M) Qfalse
4 k2 j+ B( _1 q: o" _&gt; reg2.test()5 n  H: ]$ ~7 ]/ L
true
/ S; Q, @, K* V// 校验时不传参数默认传的是undefined, ?% g, P) y( F3 t( b  E4 c9 j9 C  Z
</code></pre>$ b8 q* o( \, B% ]
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
! f( T0 w& r, \) b<p>就相当于是<code>python</code>中的字典</p>
& Y4 S5 }5 o( q' n" V& X* @5 f: X<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
% d: N0 T; v4 Y. c4 R5 C&gt; person
  ~* G; @" A6 b. p9 A: r0 T) P{Name: 'Hans', Age: 18}
* ]6 s2 h* c" c+ C" W&gt; person.Name
2 L* W3 q# r, y9 [$ D3 U! ]2 D# @'Hans'$ H5 X5 K7 M2 u: k$ ^4 {5 r
&gt; person["Name"]  h5 W7 b3 F6 [, h
'Hans'1 q  c) ~8 I' Z# }) }

/ q* s: L7 ~9 I$ Q5 ?$ A0 y( {// 也可以使用new Object创建
; b8 d4 s' b$ p, {' N' N&gt; var person2 = new Object()
6 p  X: c* v8 p( f8 l, M&gt; person2.name = "Hello"
: ~% S( C' ~( ]  ~/ z4 m: k'Hello'
- {5 W+ ]/ K7 `&gt; person2.age = 20
- n+ d+ c& \1 D20
8 R+ ^6 j6 J% Z</code></pre>, Z# h5 A! z6 j# i
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
6 V  F- p! H- v. n, I<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
6 q' ]2 `  w$ y' F! F) k<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>$ Y$ c- c  i' g
<h3 id="31-window-对象">3.1 window 对象</h3>; f* p6 J. k, i2 d) l- \
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
: Z, _3 J$ B7 D8 f! [" c( M<pre><code class="language-python">//览器窗口的内部高度2 Z8 \5 e6 ~5 Q& x' K6 t
window.innerHeight * d$ L2 L4 Z2 l, ^' K
706
5 B* O1 w3 _; h3 T& Q//浏览器窗口的内部宽度
8 A8 ?: x) {' T8 y1 F6 l8 n) zwindow.innerWidth
* o* g) o& f) z, a8 `  t1522( t+ `9 ]* }* _4 W; o+ i
// 打开新窗口
' |7 x% I0 A! [; I2 @! M* G' |window.open('https://www.baidu.com')
5 S8 a+ H9 i( l9 E; v" j( nWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}* o5 I0 L# E/ ]! v; j% C
// 关闭当前窗口2 r- b& F+ v$ E- ~! P! x* T
window.close() 2 Y# ^7 N$ X6 g9 X( ?
//  后退一页# J% I/ V$ [4 m: n7 ~& E# q
window.history.back()
6 E# z$ \. p' _, \9 f6 d( o// 前进一页
# E: O  ]& @/ @# e# e. a3 A* ?window.history.forward() 1 z. l. U& D: x
//Web浏览器全称: i9 K6 ]  v& m! x. `1 A; i4 U
window.navigator.appName
4 m5 w( G5 B, J1 @: p0 P& E'Netscape'
0 N1 E' T% ~1 J2 m// Web浏览器厂商和版本的详细字符串, h% U. J8 {; {# p
window.navigator.appVersion
' }6 X4 Z: H9 g, s'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36': F! t, `0 P# U. y8 c& _" z
// 客户端绝大部分信息
- U2 D4 h8 }8 m! @! W, Z1 p9 G" W; Y6 Dwindow.navigator.userAgent# i! F7 F+ Y6 L
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ c8 M8 R  D- }# `& O0 y
// 浏览器运行所在的操作系统
+ E1 Z) p4 Z! c* ?% [5 s/ Hwindow.navigator.platform
" f& a, u: U. n) E4 e'Win32'  S, s( M! c- h+ n" K- ?& B

2 Y& Z' c( R. X$ e4 n/ F" `//  获取URL: \. \2 |" d  P+ S; j- \
window.location.href* |) V+ C8 `1 x: |
// 跳转到指定页面
* y, v* N9 L- h/ T2 \3 Dwindow.location.href='https://www.baidu.com'
* g1 D: S( `; |* I! U: `* G5 Q; R' ?2 l// 重新加载页面
3 ^1 F2 t4 F  P! b3 b6 [" h% lwindow.location.reload() : ]3 d/ e1 _+ C6 V
</code></pre>
& O3 `* t4 I: P+ o( S  y5 F4 F<h3 id="32-弹出框">3.2 弹出框</h3>. X2 j# j8 U6 t9 F3 G0 ?% r: G
<p>三种消息框:警告框、确认框、提示框。</p>
+ [1 [( h) h3 C. N3 t" U$ G<h4 id="321-警告框">3.2.1 警告框</h4>
3 w+ j3 L- \( |# a<pre><code class="language-javascript">alert("Hello")3 ^1 V) E5 \5 @" d6 v
</code></pre>. [7 _3 R/ \: T( }) @# e! q2 g# G
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
0 p8 }  t# D/ ?$ y& L% f<h4 id="322-确认框">3.2.2 确认框</h4>$ m1 c: B3 L; z# N! y
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
& v0 n3 u& _9 {4 n) K0 f<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true4 v5 Y% \( ~. A# \" X
true0 I' Z+ _' x/ L5 a
&gt; confirm("你确定吗?")  // 点取消返回false+ k$ R" d2 @9 e# V0 R* q
false
* M+ j6 M" ]" }( H2 N% q! w</code></pre>
% e5 \. a2 \" y+ w* q) B<h4 id="323-提示框">3.2.3 提示框</h4>
: d" B0 }7 m% S  q" i  H. x7 y<p><code>prompt("请输入","提示")</code></p>0 U$ \: P% Y) s2 h2 V. \' }
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
3 \" [0 V9 r# Q) _1 k<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
% a' [7 i- L) I<p>如果直接点<code>取消</code>后端收到<code>null</code></p>" c5 ]1 {5 B3 I8 m* T
<h3 id="33-计时相关">3.3 计时相关</h3>
9 ?- ~+ `5 C' J6 `& N# Y0 n<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
! w) s( t! W$ {<pre><code class="language-javascript">// 等于3秒钟弹窗" {; W: d: d  _# a; z8 l- F/ |
setTimeout(function(){alert("Hello")}, 3000)
  l6 T* h9 ~2 e2 l4 p3 t4 |8 ~1 U9 q: g* Z
var t = setTimeout(function(){alert("Hello")}, 3000)! k/ F; D# n) O* n
# S5 p  V/ H0 k8 m- o% z
// 取消setTimeout设置; ~7 q: s* F0 G4 [" ^
clearTimeout(t)4 z3 g4 D- n8 c9 m% G4 e
</code></pre>
% q' o" J& \; T$ F( g! O  b2 d<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>3 A0 D6 ~7 ^. W+ Y' H/ j4 {
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
5 @2 R2 [, `: L' _<pre><code class="language-javascript">每三秒弹出 "hello" :
; k7 Z7 `, z, f4 y" b* a4 Q* l: G+ ZsetInterval(function(){alert("Hello")},3000);" g7 u! h' e, i8 u
</code></pre>& p* G# ~7 a% e  H, Q9 ]5 P! ~' q( ?
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
/ [8 E# B: c0 p* N<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);, o3 i- ]8 o6 m! C4 X# o5 @" @' p
//取消:
! a* {- n& Z2 H+ q6 ^clearInterval(t)
# r9 U$ q6 v) c0 J/ R</code></pre>
& R3 J' H* }# I, Y; N8 c' ]( V- d" f: S3 t* M/ g# c, K
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-6-29 16:12 , Processed in 0.070921 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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