飞雪团队

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

前端之JavaScript

[复制链接]

8194

主题

8282

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26912
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
( `$ ^  y' i+ L* p6 W
<h1 id="前端之javascript">前端之JavaScript</h1>
! W. Z) @5 L2 Y3 a5 s3 M<p></p><p></p>
2 Z: c1 m" o1 R1 |, f<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
5 e4 Q" S) S% B<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
; s9 [1 u* H  p. f* e它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>9 t1 b, b2 y8 c5 m, U  K  K
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
3 g6 Y( d  t% m+ n  e! G3 i/ R5 ?它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
& ?: s* {/ a- n* ~- j% z<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>7 ]2 d1 E. t6 M& b9 }* L* H7 g5 D
<h3 id="21-注释">2.1 注释</h3>
% n  f: l. r9 {9 Y<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>! a( r, A. k0 C" d
<pre><code class="language-javascript">// 这是单行注释
/ \( Y6 I- U9 A- {' N3 g8 ]. N# X0 ?4 W2 @
/*) }4 Q' p( T2 J; c% q, z
这是多行注释的第一行,
, _; Y  {6 R! \5 D3 Y8 K6 M& z! r1 I这是第二行。" C2 n& J5 c. F, I7 a; g
*/
' S) ]; F5 j/ {! q/ V</code></pre>4 k. h  p( j/ n. O0 U% [
<h3 id="22-变量和常量">2.2 变量和常量</h3>' P3 y) [( J. z* {
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>( F2 @5 ]$ o# v9 ?6 k. Y9 h8 @
<ul>
, p( z. ]% \1 [8 @1 e2 N7 p" r<li>变量必须以字母开头</li>
3 K- z0 c9 F2 ~$ l. ]. t<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. c% C! Q6 ~% Q% n. Q<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>+ Z6 P* S$ ]5 A1 i$ K* M9 I
</ul>
0 o1 V& `# T1 L1 z( {+ m<p><code>var</code>定义的都为全局变量</p>
& U9 B' q7 d9 u( A6 x<p><code>let</code>可以声明局部变量</p>7 E8 O' x& E# W, b- U; W
<p><strong>声明变量:</strong></p>
* n6 X" |' B4 k3 u! `' O<pre><code class="language-javascript">// 定义单个变量
3 s3 R5 e1 D9 N" b! ]0 f5 S; d&gt; var name
  L; i: J: q' {/ q8 B5 _/ ^4 T9 C&gt; name = 'Hans'
/ |- ^7 V3 ?7 u: P, z//定义并赋值
3 v$ p) H$ f/ j&gt; var name = 'Hans'
! U: T7 Z7 d5 C! H" z5 b&gt; name
  e. w  F+ j7 C9 S+ h# ^% Y'Hans'
' X4 F1 m: F6 N' j1 d3 j& U2 U% E' q# x% |- Z! g. \
// 定义多个变量
( Z, W, L  e' P' E" |' {$ C) C7 T- z&gt; var name = "Hans", age = 18, r- M; a( j& B# r
&gt; name
2 T6 L  B* y& \7 I( ^- c: j5 H'Hans'! L; S' y- n1 D( p- I3 w
&gt; age
9 n6 R) O; v( a- I/ q% e18% s; W6 c& E# {& N0 w
3 y* q9 e( y5 d" t1 v. W( l
//多行使用反引号`` 类型python中的三引号
! p# Q( A7 I. L& A' s' T# O5 [&gt; var text = `A young idler,! ^$ T1 r, [4 h! M1 Y5 v
an old beggar`
/ P2 A8 u/ |7 K* o&gt; text
- y" r. H0 i' ~/ G'A young idler,\nan old beggar'
- p9 B* }7 S& X2 W8 \7 H# b</code></pre>
( x, u' f8 i, U: T% V$ G4 z" S<p><strong>声明常量:</strong></p>
- e0 F; W+ \. {  J0 _) q<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>7 N# G) `) A" `
<pre><code class="language-javascript">&gt; const pi = 3.14
; D6 z7 D, N6 @. m&gt; pi
! O4 `/ A2 e/ \3.14  z; v; j0 O- `0 v" H8 X6 e
&gt;  pi = 3.01
% J/ K6 k$ R) W: IUncaught TypeError: Assignment to constant variable.4 k$ O& k/ c' U2 C! O' W: q
    at &lt;anonymous&gt;:1:4
/ @$ x$ O8 W+ i: e: f5 [
$ d. J2 ~3 c: @5 G! W9 }) w</code></pre>( B4 ?. m* q- M4 L
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
/ q" {6 ^/ Z( q! J+ v: O! e% g<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>  u  j- w6 r$ J9 l" ~4 B' U
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
, E1 B, q9 H1 w; H2 ~6 X5 f+ Y; s<h4 id="231-number类型">2.3.1 Number类型</h4>
/ P. z; _/ S9 {# z5 K& f* e<pre><code class="language-javascript">&gt; var a = 5  S2 f, t$ o/ Z, }( d3 z8 v9 W& z2 S
&gt; typeof a   //查看变量的类型  - Z0 {1 m4 C8 e; E1 J: a
number
+ V1 w2 s! x3 \) b) H- ?3 B* }
6 T, Z% l- ?, |&gt; var b = 1.3
1 g' f+ ~# c* p9 C9 W&gt; typeof b  A- a: W+ y, i# O# `! k3 I
number* O; E/ k5 d; j) f

- P/ g$ s- {- i5 ^1 q# F: Y( c- W' z// 不管整型还是浮点型打开出来的结果都是number类型
+ n  O& W* X# q6 |
3 Q" u5 ^& n9 Q, A0 a, ?/*4 {! F5 B+ E; l! W
NaN:Not A Number
  U# i! Y6 O! z2 zNaN属于数值类型 表示的意思是 不是一个数字
& y  ?( E. V: M( z: l; q*/& R! q0 L1 e; i) y7 x
8 _9 w* q; n: y! T) `  P8 f4 N) u. e
parseInt('2345')  // 转整型
9 F. k$ t' E" t7 c  p5 u4 L! ^2345" ^" b- O" L2 \: ?
parseInt('2345.5')
  G0 K/ f# n9 U2345
' x. s/ E" V- ]- o9 z7 gparseFloat('2345.5') // 转浮点型3 s4 S. r1 E" a0 o1 a. N
2345.5/ \; v4 ~: H8 J/ R5 p; [! V
parseFloat('ABC')
1 ~1 i+ H6 t3 _2 c' {$ a3 vNaN/ u4 T" a* f2 I
parseInt('abc')
, ^4 D$ F, G7 W- \' \) vNaN
$ H  O$ `4 i( S) A  M5 v) B- L</code></pre>
, K* p3 D9 N1 b/ b% N, Y<h4 id="232-string类型">2.3.2 String类型</h4>
: m2 [5 _: m+ P1 C% U( X<pre><code class="language-javascript">&gt; var name = 'Hans'
# t% h8 s& V  j8 z8 d' u8 X&gt; typeof name
# V. t& K6 i, I1 K3 }- X'string'
5 u! Y( W9 w+ J2 F0 T
/ j+ l) A. u4 Q8 {+ B! o: u2 Z//常用方法
, K; {/ k; U) B9 l( G# p7 W// 变量值长度3 O' E% Q# k7 w3 n' F  d
&gt; name.length
6 u) l3 W6 \9 M5 a4
1 a. p* R. |% g$ R' g// trim() 移除空白$ ]* H; k/ f7 O* }' e
&gt; var a = '    ABC    '
. L9 A% q' |. i/ b  U3 r&gt; a. z/ R: L5 L5 z. X) {
'    ABC    '( `& G( b7 j, n) E$ Q( I& p: v3 I
&gt; a.trim()
6 Y- m5 D  G6 }9 V8 C+ [# b, b$ ?9 ]'ABC'3 ]9 T3 y, z1 ^# C4 N8 z$ q- |
//移除左边的空白8 ]1 Q" U: L5 o  x$ }
&gt; a.trimLeft()
9 s3 \# R' \- o) j+ H'ABC    '
& K% @5 V+ Q' O4 N* o) O//移除右边的空白
6 G0 P- P/ f+ n5 ?7 m, Y&gt; a.trimRight()
3 k/ M2 v5 t8 r. E% d  ^3 r'    ABC'
: L+ ~) `0 G6 b0 t& X
8 |/ C* ?6 `; U//返回第n个字符,从0开始
/ _, @+ }: P( ]$ ?" V1 v1 v&gt; name
; t2 l5 U; ^4 I4 w'Hans'8 _) \8 k+ P4 U& w& r
&gt; name.charAt(3)+ I3 p0 u# V+ W. U( d+ m  {
's'
! x. ^! h  ]1 c, Q2 E; T0 [&gt; name.charAt()* T0 c3 B; l, y1 R0 f% `3 l
'H'/ [1 D: w" Y( `& U7 D" F* d
&gt; name.charAt(1)
5 A. {3 {7 C6 G'a'
; c/ |* ?5 q8 ^8 I7 C5 h% g0 q6 G& U9 q' V
// 在javascript中推荐使用加号(+)拼接# I/ k  \) }2 C: t
&gt; name
4 Y! j8 A) [! |3 W0 l" {9 c( `'Hans'8 X5 g  r( e2 F$ I4 y& x) I. c2 k
&gt; a( A! K# ~, v, S: {# ]. M
'    ABC    '
  O( x! H& E4 i9 E&gt; name + a+ s  P6 y$ O* q
'Hans    ABC    '7 g9 T% I7 G  c& F  [; s" t1 _. J
// 使用concat拼接
  r- O5 _7 b+ s: f4 \& W. F: ^9 h&gt; name.concat(a)* `- `' Y9 s: ~) U
'Hans    ABC    '
3 v; w  Q3 Q9 L2 E
! ]+ {; v4 K) o" G2 r6 b//indexOf(substring, start)子序列位置; j8 k. `# F' R8 D% E

+ ]  q# S4 v$ v2 [  N) W4 D&gt; text
1 N$ `3 b6 D# D& h- q'A young idler,\nan old beggar'
% I. c, l+ a1 Z+ F: p8 \. p# y1 a&gt; text.indexOf('young',0), _+ I: M3 h& P* r5 H0 l
2
. V. t4 d( p& Y) Z9 T
2 g  A" n9 I) S//.substring(from, to)        根据索引获取子序列
& N! E* R' ~/ E# k&gt; text.substring(0,)
( S1 l. U9 W/ ?# Z'A young idler,\nan old beggar': Y$ ]* A' N5 I/ k0 C/ C4 b
&gt; text.substring(0,10)
2 a% S3 w0 Z+ s$ h8 W5 X. c'A young id'
% E" ?! w: ^- h0 M% ]6 O6 ]+ F) e$ z  T  N
// .slice(start, end)        切片, 从0开始顾头不顾尾
7 Z1 E( R/ O  Y5 m* G&gt; name.slice(0,3)
7 K! G- U+ f3 `. n( I* t'Han'
3 y% O- m$ {" t$ r; G' R$ z" h( d; S! R* M) V) U. Z
// 转小写3 d+ `5 h/ ^/ y% V1 ~9 a
&gt; name) N- j' _$ i. @, A2 {
'Hans'0 S. `9 W! P7 r$ {+ f1 L1 }9 g
&gt; name.toLowerCase()+ W( A1 Z1 e4 g) g# h1 w- M! b
'hans'
( E% x) N: `6 m- ~) s// 转大写
$ l$ l% v; H( A- {$ j$ J1 w&gt; name.toUpperCase()3 g! d4 U9 ^$ {( k% A8 k
'HANS', o( z$ u6 e" p) [8 @" a
$ x- O, r% Q- n% n/ x
// 分隔" v1 T2 Y, R& j. @
&gt; name
! F$ N- O. S# n; G: q" ^( G! a/ X'Hans'4 {0 z( ]- L, O& W* b
&gt; name.split('a')- _. i& Y) @) C( {' y
(2)&nbsp;['H', 'ns']7 f% W1 _$ s: x
</code></pre>4 [' h" i. `" k& z9 `
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>7 x% [( l% `2 t
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>& F* ^  |" Y+ ], r" K, {3 u
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
% d6 e, l! W1 ^+ X7 g<p><strong>null和undefined</strong></p># a$ q" v4 S6 p5 ~( r
<ul>* Y. v. m" B. \( I9 L% {" X) F! U' L
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
, V3 E! F5 v7 w. _" u<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>. f; [& d, Y3 ?$ P9 I* \9 h+ I" U" g; [
</ul>6 E( y) G0 Q7 I! D1 |: g7 {
<h4 id="234-array数组">2.3.4 Array数组</h4>; V) a# A; g4 C. U- \
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; i) J* H$ i" h9 [<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] : k) y. g8 T3 y9 g* V
&gt; array1: C7 z& h8 x; U9 [, B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( V) R- R& U% H. E. ^. O9 y
&gt; console.log(array1[2])  //console.log打印类似python中的print9 a9 H7 K6 D5 S; n$ c+ F( P
3
! z/ j9 K1 {( u5 I* T) k# b// length元素个数! u0 j6 ]0 l7 v
&gt; array1.length
( z( J' W4 P' R0 x6
  z" u+ S: h( b; ~" E, j; j// 在尾部增加元素,类型append# X8 v$ o: f2 g" R& ?# k
&gt; array1.push('D')! s- s/ [) }! D1 h
7% ?. |" {3 r1 }8 ]5 r
&gt; array1+ q2 D: O. R) Y- l  c; E
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']$ `; K5 }" K9 o+ {
// 在头部增加元素% i  L/ w' a' R0 ^2 ]) z( G
&gt; array1.unshift(0)
% a) Y2 }" [, f6 \8 [7 N8
2 }; p- y! j- ~! H7 C9 T&gt; array1
4 y8 `; \5 Z5 p/ F. B(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
% L3 c) v% h' U: ?
. |4 [: m, z4 V//取最后一个元素
6 d. P( n4 r0 V- I% t) U% ^# k8 {( E&gt; array1.pop()) B) P& u! e) G# h  j) D& F
'D'
6 R: [' @  X- f( k! t5 M&gt; array1
6 M0 H3 @5 B; |(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']( x& B5 a+ r9 e- y3 J1 X2 M! h
//取头部元素2 r" i" Y: E! O+ k# q! [  ]3 O3 G7 ]
&gt; array1.shift()
; i6 P$ S3 G* ^; l0' P1 N' x" }1 \5 E
&gt; array1  t  L" Y/ W) T
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* y1 ~7 a, K$ `# `# |; Z6 @, a2 p$ F9 F# C" t1 c5 C5 f
//切片, 从0开始顾头不顾尾
4 x( f, |' J, w+ z8 Y&gt; array1.slice(3,6)! R/ n, ]" l& z5 z- K
(3)&nbsp;['a', 'b', 'c']3 t; j8 h- i* P& `5 T  s6 p: y
// 反转% F# g$ |! E7 S1 z$ t
&gt; array1.reverse()6 k  D: x# F6 `. i
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]4 n: Y4 f1 j) \* y
// 将数组元素连接成字符串
/ e2 u1 R7 \2 n; ]* I&gt; array1.join() // 什么不都写默认使用逗号分隔' X! V  o4 A) X( J/ S' O
'c,b,a,3,2,1'
: t6 W6 p6 z) @/ o% Y&gt; array1.join('')
( H! O$ g1 D% T% l' E'cba321'7 J& K4 ^% [& Z9 s- M
&gt; array1.join('|')
" j8 Y7 C  _5 a, W1 J. p/ E'c|b|a|3|2|1'+ L# V1 L$ P, {2 L+ o/ ]* Y

& Z$ R! r7 G7 v/ S9 o5 ]+ R// 连接数组
) x" ]% V5 _' }2 y! X: b&gt; var array2 = ['A','B','C']
+ i: ~! J) W8 I, @- {; p8 }6 p9 v' H( a&gt; array1.concat(array2)
& r9 L. S- |- o- x; m( }(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
7 ^" a& O, r2 W8 A9 ^6 T4 L/ O% x+ ]. \/ s
// 排序
& w6 C& s; P* V& q5 F. ^$ @&gt; array1.sort()
$ ?) L) b4 w8 M3 Q; Z% k7 K8 d(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& _) f9 Z7 I, m' G5 v6 y$ E- |9 n, ?# q" G  l9 K
// 删除元素,并可以向数据组中添加新元素(可选)6 v. ]' K: f5 z( r6 a& M
&gt; array1.splice(3,3)  // 删除元素) _, i5 X0 p" K
(3)&nbsp;['a', 'b', 'c']
6 B: _$ H8 f" y3 I&gt; array18 D9 Z6 G3 a" x3 D$ h) R2 ^" S
(3)&nbsp;[1, 2, 3]
) x. Q" d6 }4 Y5 ]( n4 f4 p" d&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
7 }' y$ ^1 H& @* R5 s[]
# F4 J& `- k' V/ s&gt; array17 i4 [$ S; H' v, F2 c3 K% \
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
2 u( V4 m8 Q. {# J( M# |( h
/ ^  f& |- m% i) f7 m/*6 E0 Y6 Q' R% T* g$ `' n
splice(index,howmany,item1,.....,itemX)
' x' e; L; e0 N5 N7 `. ~index:必需,必须是数字。规定从何处添加/删除元素。! [. C3 g1 u, o" G4 g; u+ D! b
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。* _0 p1 @) y( p) B6 g
item1, ..., itemX        可选。要添加到数组的新元素
& D2 g; t# f5 i3 Q8 z. J1 o*/5 V0 |( T) C3 j( o& p3 `
3 w/ y) [9 Y" i* n: i; i
// forEach()        将数组的每个元素传递给回调函数
% c# v& w: R. f: |9 V% r! [3 }&gt; array1.forEach(function test(n){console.log(n)})' a# `! S1 k$ Y7 f8 \& Q* F
1$ }2 g, Z) ^  D
2
% i2 X% Z8 U: |* I 3
. i7 @. N- ~$ [ A: d! i$ N% h4 H! o& T7 v
B. K% h- C, z4 s  x3 Y3 t4 S
C$ d1 M$ S; K0 _2 o' a' W
// 返回一个数组元素调用函数处理后的值的新数组2 S0 A2 t. [; j
&gt; array1.map(function(value){return value +1})! {* _) ]+ n3 o% t, L
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']% [, }. [; u. S9 e8 ?' @
</code></pre>
! A* b" g: P9 r0 k5 P7 a8 @<h3 id="24-运算符">2.4 运算符</h3>
& Q) [; f( ^. p( s8 N- h! ]* V8 U<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
, a' j: V( C* N: Q+ Z8 `4 ]" z<p><code>+ - * / % ++ --</code></p>
. U) z1 j# b% T6 `* ]9 D<pre><code class="language-javascript">&gt; var a = 6
4 H& p3 s% \5 D& S4 i5 w7 w  O5 d&gt; var b = 3
+ D1 E9 E3 S  b8 Q- r, @4 I// 加" N2 f: z6 l$ b2 ^' ], {
&gt; a + b
! k0 Z% o9 \6 I6 F3 z8 c9
! F5 W2 g! d$ F8 q& i5 p! Y: U// 减
% Z& }9 v" D1 H$ h6 h) J, @, k&gt; a - b
6 c6 a' }9 ?. \8 z0 C3: s4 b) v; V0 U9 l+ u6 N' _" V
// 乘
, |0 b1 t9 O9 }7 H% Q5 E&gt; a * b
  B# {0 i* S8 P) L+ i% M18( a( X: g) z7 r  ^2 I
// 除+ ~0 e' m) v  Z4 D* O% p
&gt; a / b
3 z7 u/ |+ k" U: s+ `7 O! ]! ^9 E2
4 C1 C; D; ]7 C% L* ?8 h/ g// 取模(取余)9 r7 Z- O6 l6 o. @( e" u4 O; J& D! G
&gt; a % b+ Z( I4 C" y2 o$ m) H- \( l
0
1 f+ P4 u0 r+ `6 z0 y// 自增1(先赋值再增1)
+ U. e6 z$ I9 Y0 r! K&gt; a++
) e* k$ w2 w6 \' ~( l: F6( }2 L% v/ o" [$ Z4 S/ v8 m
&gt; a
4 R% ~; F8 b% d" @# k+ h7
6 i9 O; X, }6 @; |9 ?' }7 m. ]// 自减1(先赋值再减1)7 f& z$ r1 i4 U/ t: `
&gt; a--" s( Q/ `0 _+ N
75 _8 L3 W1 p- a
&gt; a
7 M+ J' y/ ~; T' @/ n! ]6 f+ z1 W6
; z& X6 G0 c2 Z% A8 I) J  d// 自增1(先增1再赋值)- S: w9 q) \2 a1 T2 t* I
&gt; ++a  p5 Q8 o# O- P3 D
7
6 w% Y5 t+ f( ~, m. \2 L1 N// 自减1(先减1再赋值)& }, p3 k8 L# A; e2 W
&gt; --a9 k  W( `: j. K. V8 a. n
68 H+ e% ]) o/ a7 ]
&gt; a
" w0 J: u% z/ K5 C& Z! w62 J2 ?0 s& a$ o
1 D+ s1 Z* i1 a
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理* j. \3 j) |1 T5 r
</code></pre>, L  m5 R; [" w  H- a) q
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
9 e% o: b5 s( b7 i; b<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
+ K+ y1 {. B) m( x0 G% k<pre><code class="language-javascript">// 大于6 M# X- T4 r% T% ]7 C8 k
&gt; a &gt; b
% j8 V+ u/ B; p0 E0 xtrue. g6 m+ ], _' a$ a9 F
// 大于等于' C  S1 G* I1 b& h) J
&gt; a &gt;= b' d  H4 C, a) T8 X
true' b' K4 W( E5 P! U* e. N2 M
// 小于' O  |& p: {( G
&gt; a &lt; b0 Y8 `3 J$ n9 O# U
false
5 J3 ]+ }) M) M/ H: {// 小于等于
/ V( V9 E! G4 Y& c  k&gt; a &lt;= b
8 z# a( u, t' R1 p+ M) L* H$ rfalse
' R0 R3 K" P! j// 弱不等于
* E- R' J5 B+ j  y2 R&gt; a != b
* D, g! ?7 q* i+ atrue
! i& z* V4 Q3 |) A! z( j+ _- K// 弱等于
$ {3 ?, o" [. z2 Y9 d&gt; 1 == '1'
. h& h# h: ]0 G: G/ X" ztrue, _' k* W  A) X5 B# h6 k! u
// 强等于6 u; s: _( ?! B7 `- N, `& C5 a8 a
&gt; 1 === '1'
8 ^% J9 v9 {# L" c5 P2 V; Gfalse/ T, N. z8 E8 Y
// 强不等于4 z+ s- T1 k; R! P( p. _
&gt; 1 !== '1'
) k$ S( i( x7 }true( J6 Z# W2 Z* o( D4 f2 Y( i
- L/ @# }3 i/ Z8 |
/*0 e) z4 O' O5 O+ G
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误$ s- C3 G8 f' \' ]/ r, z
*/
) f9 M7 D. P6 C2 K! n$ q. X</code></pre>+ d" p; ^- B, C2 [+ }2 ^, D  Y) ]6 z
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>& `* s. v2 T  d: q5 U
<p><code>&amp;&amp; || !</code></p>
0 S( m8 `. H% m1 {+ ]" U8 |<pre><code class="language-javascript">&amp;&amp; 与0 R9 k/ O4 h" n! {8 a! Z
|| or
3 A  M6 b) {' x" f! 非* a4 }" \8 |% w% Y. k, J$ ?
</code></pre>
. t) X! z; |9 b9 N<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
4 E* X$ U0 T0 s, ]<p><code>= += -= *= /=</code></p>
- \7 G; s- M* J9 b; c7 h9 M$ ?. e& l<pre><code class="language-javascript">// 赋值
9 r: I' z2 y  b: K! o&gt; var x = 3; c3 `, O5 V* x' L! q" S( L- A2 k
// 加等于; s0 g+ {! C' ?! _% E) B! S
&gt; x += 2
3 S% ?# I8 `$ u& T5) @- c- Q4 v* `% `0 W! B
// 减等于
- q: ~* Y9 b6 q* j0 V&gt; x -= 1, D) g* |/ J; G7 |& |6 n
4
! Q# G/ S( E7 G# `4 @6 S// 乘等于
! ~& j' x& I+ h7 k) o&gt; x *= 2
) f9 I8 @2 b* S/ H3 F& o8
1 y/ c; \5 i( Z+ b+ w! c; d" N// 除等于' O! ?, Z5 R; K
&gt; x /= 2' j) }: ^" s( [; |
4
+ a( q' D( Z4 ~' j; ]5 A</code></pre>
/ I0 q! X, E% K+ f# [8 z! d<h3 id="25-流程控制">2.5 流程控制</h3>
! Z7 W4 ^  W- q0 B  B) P+ p<h4 id="251-if">2.5.1 if</h4>" M/ v. q' l' i% B+ m0 z, x0 i
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}. x8 c) w0 \9 }$ d1 u
% B3 q+ A- ^$ |7 Q
&gt; var x = 3
3 r9 y+ e2 M" P1 [) r' \0 q. \&gt; if (x &gt; 2){console.log("OK")}, x- o8 H2 d& R4 h# i* K
OK
+ O* O3 F) M( E$ `8 x9 W
( H" z8 a7 M& a" W6 F2, if(条件){条件成立执行代码}
* ?7 ~5 \0 i# Z7 D2 S. C8 D& K        else{条件不成立执行代码}6 \/ ?8 Y- S* I6 D" b1 i
9 V; V$ k7 I6 j
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
9 o- b1 e$ {- ^. h) I'NO'( q- `. h2 S# Y

. b- H( O+ n" o6 w# y* v3, if(条件1){条件1成立执行代码}
6 ]8 y. n$ U  g5 U        else if(条件2){条件2成立执行代码}
! a4 C# Z% H3 M& y" c    else{上面条件都不成立执行代码}
/ @/ Z/ o" P; T+ H) [) u+ E
$ a  j8 J4 v/ Q' z$ L0 W/ u&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
; a# Z, I$ g. [8 \8 n Ha
' g- y# k$ M% @6 ~6 _$ F</code></pre>3 J: c) P" R; g9 j' A4 r3 I4 {
<h4 id="252-switch">2.5.2 switch</h4>
2 w9 v# |& G0 d<pre><code class="language-javascript">var day = new Date().getDay();0 z% q8 I8 L# \6 D) e: u' y
switch (day) {
8 w8 T+ R5 I" d4 y  case 0:3 n( g+ e3 C4 F) g. ~
  console.log("Sunday");9 s: v& Z" E% t' _8 B/ K
  break;
  z3 ]+ d* {) D9 e7 I* R) T  case 1:
) t. P1 k: l- `* d( G  console.log("Monday");
3 L) A$ A# S9 r5 R  break;- W2 |. s$ p0 s, s' e+ U7 a2 J
default:
( U4 e$ ]8 G4 E: o  console.log("不在范围")( h& c; [& R9 U* [* G, @
}/ v  j' t$ H( S/ G, T: u
不在范围
) P; J+ v5 S" `; A2 |' Q</code></pre>
" W1 s* X  B2 n<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
/ q2 Q; {1 U7 F<h4 id="253-for">2.5.3 for</h4>
1 h0 n' w: j- h: d1 \<pre><code class="language-python">// for 循环$ B2 E9 d* _( P/ o$ s- @: m" x
        for(起始值;循环条件;每次循环后执行的操作){8 d3 J* m7 ^/ C- k  M0 j
        for循环体代码
" ~5 O7 P5 g* ]4 F1 n    }
6 H. ]6 b$ u5 \1 i) `; U, C( F+ u& o( w7 d1 Q* _1 ]  {7 }5 u( E. ~
for (var i = 0; i&lt;10; i++){
/ [3 o% }! H4 I: |    console.log(i)
9 h0 z: q' x+ |" Q0 X  B1 b}. i/ |6 l9 ?) l& _9 A, M) E8 v
        0
0 c; [8 W5 [% V2 B        1
  s4 A) X+ i$ O2 e8 y. H; }& t        2
+ ?* V; s- S2 S5 ^        3
5 [: k& d  A; N0 A8 r- M        4  l& O0 n  c7 A) ~7 T. O* |. A; y
        5
* L+ ]  J0 u7 P5 u! I        6
  ]6 B( q, p* F- J2 b) R. w        7
+ D. k4 A0 B2 ?! @% a4 w        8
) h9 a) x& x/ k) i" y        9
9 [5 {( Y6 c/ g</code></pre>! D& y3 W( k$ F9 w
<h4 id="254-while">2.5.4 while</h4>* J2 H) i) @* d& K+ }# n- p
<pre><code class="language-javascript">// while 循环
9 l$ W& s! q! z, @+ a, P7 x        while(循环条件){/ M  V  H! {0 f% @" r
        循环体代码% n! Y) C# }# Y. {7 _
    }
; y1 ~9 q4 Z6 `3 t6 ?$ H6 z7 d8 J* p; `6 q5 ~6 O3 B2 W
&gt; var i = 0& a. C$ D7 Q! c' N) U" |
&gt; while(i&lt;10){' S  p. k# H  {( H" M
    console.log(i)7 F! N/ X3 q. m: d! T) c
    i++  ~% P+ L% n6 s& m  N3 o. p& q3 A+ h
}
( F% m' h, O7 ?/ ?2 h) { 0
6 r( r+ u# b1 b 1
. Q7 t+ ]8 J( B: z8 _) }0 \9 O 2
8 d5 T4 O) {$ g6 w: S  o6 d 3$ B3 H1 j1 {/ U
4" a# r" L1 y( Y! q& o% F
5
/ w: D0 q! z# g  {. c 6- T/ |& d- h: x7 w% v5 \  x
72 j! G$ f- \: H' g; e
8
7 v, J( x1 M7 c+ Z. l 9
9 W: K% u! f: Q  j1 x</code></pre>
. Z4 \) v( v+ e5 _' _( c$ j; q<h4 id="255-break和continue">2.5.5 break和continue</h4>% D0 z( u0 G8 @1 R9 v
<pre><code class="language-javascript">// break" l; D$ ?6 v2 P& o/ ^
for (var i = 0; i&lt;10; i++){% t6 u: @4 @' V9 n$ S2 u, @0 p
    if (i == 5){break}
, z; H0 r' R4 g) J8 y) W! ]; X    console.log(i)
& u, t4 U3 I7 A$ F) @% x}
6 s; Z3 A* T- G  H- f  L 0
+ q% Q# B  b" c# D 1
: Y7 E6 z0 r2 x+ f+ I 2
% v' E2 Q* t/ X# T6 z 3
* h/ T. I. n+ o$ p 4
1 h% p4 Z" g9 g* }7 \9 f// continue
. V( @" E9 c7 ?+ L$ w2 X" bfor (var i = 0; i&lt;10; i++){
+ t" c7 c- ?+ q: a1 r    if (i == 5){continue}
4 F% {- \6 g4 t$ G" b1 y* r    console.log(i)" G* {" \/ E& P) ]! r7 n5 ^
}
% J5 v$ w# I; q) b; g$ R 0
+ k5 m. @8 e7 d( b# i. ? 1# V1 @* M" t0 U* f/ J: V1 \
2
2 M" A8 K7 j( r4 H 3
' `+ V" E8 A" J; B 4* ]/ _5 \8 }) k
6
' _! D3 L8 _9 s7 B; x( Z 7
- a2 X, M& b& L* G8 f 8
- R0 |, ^! K6 \) n( ?* E3 S 9
% F& I9 U: c0 A- Q+ @1 ^7 U# V/ `6 x
</code></pre>
+ }2 E) C  ?8 G8 ?0 J- r$ V<h3 id="26-三元运算">2.6 三元运算</h3>' [. K) E4 p8 Z
<pre><code class="language-javascript">&gt; a- O- C- Q% @5 z+ L5 B- p
6
% C& E9 F7 [0 Y&gt; b* A+ C5 l: p; R/ P; Q/ |7 C/ f9 Q
31 W+ T  W, d( T8 V

7 m4 f( L$ }0 O7 `. L/ t( g& Y) T//条件成立c为a的值,不成立c为b的值$ x' m8 f! i! N% \0 d/ Y1 d) R. g
&gt; var c = a &gt; b ? a : b
! @2 n+ I& A7 R7 g' T& H, F&gt; c4 u2 I- H* ?8 h0 u6 t
6- m% ]# i% R( F- N

1 g8 A% C0 }8 L; x9 b// 三元运算可以嵌套, a2 \8 l- W( E: U2 }
</code></pre>
9 b0 f4 g7 l. j  J1 U& |$ P; t<h3 id="27-函数">2.7 函数</h3>4 X/ s/ K: U' J
<pre><code class="language-javascript">1. 普通函数
, i6 A. t# h, F/ k&gt; function foo1(){
! T- c7 A# x, v  q% n2 f    console.log("Hi")7 f$ M; h' L1 G3 q6 d; m" Y
}
2 z: F- x. h2 ?; {% m0 D& l3 r2 [  }2 I; L
&gt; foo1()5 f' W) N( L' K. k( X( |9 e8 V2 g
        Hi
; D( P6 J* h9 R! F2. 带参数函数# Z! ]7 T  [+ A- s1 ]
&gt; function foo1(name){! }. B' w5 w# @, R+ W
console.log("Hi",name)  ?1 w0 ]" @. H/ s; e" M
}$ f& p2 _: u& T1 c% W

$ A/ K3 T7 V# }& {4 @&gt; foo1("Hans")7 f# I, C7 N1 E7 {0 x. r
Hi Hans
$ H0 f2 R4 N' d  ~' Z. W8 @! U) ]6 l& H- O6 r/ e$ H+ {( }& W( a  O
&gt; var name = "Hello"+ J" ]" J& w) g7 A3 ?+ Y3 C+ y& P8 ]
&gt; foo1(name)
7 f$ u8 e# u+ i" ~" GHi Hello
! Z" t6 o8 w. Y& T+ M- D' E7 _3 Q9 m- A& w) W' q6 C
3. 带返回值函数
' t1 y- J+ ]4 G) T. W# O&gt; function foo1(a,b){
, k9 `5 y! r5 n        return a + b   
$ u; m! _, W  i4 I- r}% u: C! O+ Y0 o3 s8 w
&gt; foo1(1,2)
3 ^' y* o& i8 C$ I1 F" j+ A: f33 F5 j% k4 J6 `2 C# P
&gt; var a = foo1(10,20)  //接受函数返回值
$ \7 B  R; [9 A' P&gt; a
. V. C. j1 x  @6 A30" C# T: b% P2 m' e1 A
2 I; B+ X! ]8 B% Z* O* C
4. 匿名函数# G9 w2 T( O* P0 C5 R, \$ f
&gt; var sum = function(a, b){+ B1 y8 c9 N2 M. q4 K
  return a + b;3 H+ B! F* f- `' g( j3 @3 A
}6 {4 e" G; P% K% x' Y+ e1 q
&gt; sum(1,2). {$ U7 a) U( x+ w, [
3/ E9 v, W7 }! T. {7 N  _
: `7 M. p- k0 H1 w9 L7 W0 t
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
0 I3 T4 y7 E- O&gt; (function(a, b){
6 p5 h5 ^6 J- Q$ j, J' |; O  return a + b
2 k) ~) k& y4 x})(10, 20)
% Z% ]' C# s/ N5 V# R, X; H$ {30
! ~/ F6 n2 P4 s- [3 w2 s
' Q) q: B( B+ [% Y0 O5. 闭包函数
' J8 U; @9 m5 p( P. A// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
7 N9 s* G9 e- x/ g; w! hvar city = "BJ"
4 R3 Y* z  i. F0 W$ B7 sfunction f(){8 T5 N$ w4 `% P
    var city = "SH". X& P) e3 L% _
    function inner(){
' N4 h7 k6 T3 ~        console.log(city)
) E0 _) o4 F# i) ^* Q0 C    }5 M! j2 f/ U7 N, h- X9 G; o  V
    return inner
) n! S: n* Y! u}
+ y4 m4 V( y/ w( |var ret = f()
8 A/ c; E; m5 I8 X7 U) `" j9 [; x, Sret()# V5 K4 W2 [6 F* m" y& A( k
执行结果:$ k; J! ^/ Z5 M$ E1 [" D! ?
SH4 U& U. E9 {' `, t% }

0 u6 `9 F9 n9 {: l- w! M. n! N9 e- v3 T</code></pre>" L6 P) g! O# {* y: D+ W# q
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
  V7 q  |0 j' i: c<pre><code class="language-javascript">var f = v =&gt; v;2 {9 {2 _. u1 J/ [4 p4 E2 m  K
// 等同于
+ C) f) k9 [7 U/ n% k. T8 gvar f = function(v){6 B: A* T9 G. m8 K
  return v;
6 H2 d. \3 f2 L  R0 {, f}
0 |( Q: V6 \2 K  }1 F6 C</code></pre>
/ H$ _2 J  E+ s6 y, r% o# ]* j<p><code>arguments</code>参数 可以获取传入的所有数据</p>) C( Z# Q  Y0 C% D$ V" K
<pre><code class="language-javascript">function foo1(a,b){- C) W, ]) z0 j9 P
    console.log(arguments.length)  //参数的个数 / J& x6 ^& c$ m
    console.log(arguments[0]) // 第一个参数的值
8 X- k+ n. P, |1 N        return a + b   
1 V% K' A% Z$ W}! t+ m9 c) W0 u
foo1(10,20)
0 z' N3 U# A% v! K结果:3 `& f3 U7 a1 b" E, s9 {
2          //参数的个数
! j$ L* g$ I4 m. z+ M10        // 第一个参数的值
. Z$ X$ R7 e% T  v30        // 返回相加的结果  k. m5 i1 ?0 |' I
</code></pre>7 q1 h5 b+ k/ O! S- U/ f
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>$ i- n3 d- M8 v/ c: Y$ Q
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
( G4 r& ]! D5 @/ t7 g4 O<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
7 S) A0 Q9 S# I& ]<h4 id="281-date对象">2.8.1 Date对象</h4>
9 p! M$ j' S- T  ~7 n* t( c<pre><code class="language-javascript">&gt; var data_test = new Date()
3 @6 _+ ~. J- v% C3 d&gt; data_test
: x! J. ~( ^) l& d6 hFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
' a/ m+ m3 E1 G/ Z# k" m1 ^&gt; data_test.toLocaleString()+ X! C1 A& Q& [: U7 T
'2022/2/11 下午9:44:43'
" B* R- J% O! D. l& T: h$ `8 K
* Z; ^) M( j0 G&gt; data_test.toLocaleDateString()
, Q3 V4 m4 ]) ^- C1 _5 p'2022/2/11', D. l- I1 k( G  |
4 s. f5 R0 B3 z2 L
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
6 ?* t8 J$ i' C&gt; data_test2.toLocaleString()
$ A: R5 ^8 z0 z'2022/2/11 上午9:44:43'
# w0 P1 B9 h0 _% b4 w. }" d$ L' c6 z  y" E; i5 T/ Z* B9 ^" \
// 获取当前几号: t) E! B$ @" w6 q  }
&gt; data_test.getDate()
0 `8 P" w; p+ r) E+ q( ]11
! W: F  M0 Z* ]2 w- I2 I6 [// 获取星期几,数字表示/ a) M% r1 b5 {& L% p4 O3 m
&gt; data_test.getDay()  
, r4 a; v$ C' {, o* y5
% _& G, Z9 t* |2 @3 s' p+ @, h// 获取月份(0-11)
5 b/ G( k' x% c. w) n&gt; data_test.getMonth()
& N; Q) U# b7 |9 Y) @$ r8 K1
" S) A  B8 M5 [0 R7 |// 获取完整年份
8 `: U7 o& Q( @% [&gt; data_test.getFullYear()4 E1 z; t# Y+ R+ M' i% r- ^+ [# \/ v
2022/ E# a  Q7 l4 Y8 w2 y  Q8 y9 p
// 获取时
5 z) ?+ T5 P' V: [9 M&gt; data_test.getHours()8 p0 ], l8 i1 l$ M0 A* w
21
  }2 o& K# B( e7 G; P2 f' U* w// 获取分* H  {8 x3 ~5 T* H: ]
&gt; data_test.getMinutes()
+ S! Z1 I9 W, E& Q$ Y44
. Y) q5 s, r; K% r- z// 获取秒( t- ^! t0 E! [; O1 n) l. D+ e+ o5 C. ~
&gt; data_test.getSeconds()- H5 H5 ~! w) b6 r, i  x- `$ h1 A
43
% W4 X* m; _* X. p0 p, b$ {// 获取毫秒
( m$ a8 z, D" [1 j, `0 r&gt; data_test.getMilliseconds()
- K; m, B* G4 Q290& V$ A& A' ]3 M% S% R7 Y- f' Q; p: C
// 获取时间戳$ s, o$ F( |) ]7 n& X
&gt; data_test.getTime()- D9 @6 Y- r5 Q  n
1644587083290
. e/ \% a% l; H+ O( C) Y& ^</code></pre># b7 G1 P, }/ |2 `5 A, R
<h4 id="282-json对象">2.8.2 Json对象</h4>
3 |9 ^4 y, Y, s7 k3 r& }<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串( Q' s4 U7 M3 R. ]% R& U
JSON.parse()  // 反序列化,把JSON字符串转换成对象) v3 }& Y- k7 u/ U. O8 B. g

. J$ E: r+ r, S( K+ ~// 序列化
+ q0 X; ]$ t" n! V&gt; var jstojson = JSON.stringify(person) 6 O3 [# s+ Q- q* {5 k, O7 q
&gt; jstojson  9 f  S6 r( |  E( B& H
'{"Name":"Hans","Age":18}'
5 K2 J- j$ Z' u4 r
2 R. w, j& w+ z) O2 t// 反序列化
# U, I7 k6 T* H- C8 N8 g% ]& p6 T&gt; var x = JSON.parse(jstojson)
+ a/ H! \# ?5 R* n* d&gt; x
4 x8 A+ }/ w2 I" y- @{Name: 'Hans', Age: 18}2 D" p- s$ t1 t# `% k" y0 K1 ?
&gt; x.Age
3 z6 {/ }& ]; y) L/ d) s18
+ X4 a7 J/ o2 d# I1 K" @( A  q. v</code></pre>1 b! x, j+ W9 V% A$ @
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
9 {6 `- n1 l) p( L( x4 }) z<p>正则</p>6 c7 `7 l9 e+ b" D) g% H
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");) Q3 @. f% d8 Z
&gt; reg12 Y$ a  a* n! `$ L/ n' H
/^[a-zA-Z][a-zA-Z0-9]{4,7}/: A% E3 c0 r2 T+ E; P
&gt; reg1.test("Hans666")
& A' G1 |, I' c# u( Y0 u: Atrue' [: [* O, a, o; {/ \: c+ [3 W
$ p9 J# u* K# O9 l8 ]; l. U
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/# W, W; ~* O6 x) d% F) s
&gt; reg26 x0 E! y4 i9 @/ c: i6 {" j5 k
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
# V5 R  \8 i( N9 D1 H&gt; reg2.test('Hasdfa')
3 M0 W( X. J$ |6 h  d9 x. x1 Atrue/ k3 U2 O: g; [" G0 M  O
9 S) z# i5 {( u/ a6 e9 I! `5 {
全局匹配:+ m0 r. P/ `, ]" I% m( e
&gt; name
2 A' H# D9 u- \) t: v'Hello'
9 x/ c& j# s* h& x/ q8 G&gt; name.match(/l/)' U8 o: H" `5 x- h! J
['l', index: 2, input: 'Hello', groups: undefined]
. h$ H; D# @  t+ ?7 F; @4 s* l1 E4 f
&gt; name.match(/l/g)) P( _3 i0 Z- O+ N1 I- d  h
(2)&nbsp;['l', 'l']
5 B0 N8 ?2 o% o2 ]9 |// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
* |: U4 ]3 d3 Y4 T+ V
4 c9 z( }/ z8 [, w' b# m全局匹配注意事项:  v0 z2 D( }3 t" W7 _: T" {& j
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% V9 k+ n# F& A6 n% s' h, B' q! W
&gt; reg2.test('Hasdfa')
* t$ R8 `/ U" a7 Wtrue
6 o, c& T* }! v9 N&gt;reg2.lastIndex;( t: q, g7 u* D: Q
6
  }  J" X* M4 e6 k: y&gt; reg2.test('Hasdfa')
* C0 O4 |" _* _. I0 O( Ifalse
7 F) K0 i* J3 _3 H# Y" y&gt; reg2.lastIndex;
* p# j/ m9 M& U& @( x0# M( P" I4 ]2 c9 j& @$ u
&gt; reg2.test('Hasdfa')
$ N& q/ V. P' G  z" n/ ctrue
5 A( [8 o  [. e* C. |$ ]' O&gt; reg2.lastIndex;
7 W" \% ^9 R" I9 i+ t66 l3 w# T! T6 s" e; A  F
&gt; reg2.test('Hasdfa')
+ [2 Z6 R1 e& _, L' k  |& Wfalse
" L: E$ v2 }6 z% [& N* _3 Z7 s8 E&gt; reg2.lastIndex;
" k, g7 H; l" _- i0
8 N0 ~5 p7 L  T% c6 q// 全局匹配会有一个lastindex属性7 C* h0 o9 w  B$ D
&gt; reg2.test()
  |, l8 p4 X$ U" X7 V) t1 C, ~- Yfalse
! N$ f9 x. w% \: n1 S&gt; reg2.test()+ o/ u% F3 C! |, Q
true
. Y* y2 Y5 R3 W9 ^- P3 y# D8 [// 校验时不传参数默认传的是undefined( G! }- t; A9 U0 W, {" F
</code></pre>
$ S0 W) C  N3 X) s9 ?<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
+ Z( v) M, O9 z7 w! j) E9 u<p>就相当于是<code>python</code>中的字典</p>
/ z% J/ S2 {- \" f4 |- b5 m<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}5 c9 N7 K- F1 C7 }% Q
&gt; person8 ^  F3 }6 c, Y' O$ l
{Name: 'Hans', Age: 18}5 d" E' S/ K5 v/ s6 T3 Q
&gt; person.Name
& f+ t& D0 l3 ~/ F' b3 }) G'Hans'9 y/ o7 k6 F0 P% ^& {
&gt; person["Name"]& ?9 j9 k" }, V0 {: p4 N( V
'Hans'1 _' a4 A1 _7 c9 F

: c% P4 r7 K5 ~# w% E// 也可以使用new Object创建9 j  T2 N; f% r6 S9 B+ o
&gt; var person2 = new Object()
! X* r4 `' A8 Y" H&gt; person2.name = "Hello"# a# a6 m" p9 \8 f" A: W7 S
'Hello'
) i# l9 v" ^) k&gt; person2.age = 206 r9 L- Y" V+ t- I& l. o
201 D" X6 U3 L! V2 {
</code></pre>
( G; y7 a! U6 D- l<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
" f5 O8 T* Q7 M9 R<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
& H2 @  Y* ]) D" n" j, G" a<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>1 M" n: X; B) f* X
<h3 id="31-window-对象">3.1 window 对象</h3>
6 X* H/ c, h" E/ {5 D$ j: b# }<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>; k# I. T7 j5 h! f
<pre><code class="language-python">//览器窗口的内部高度( Z" `- i8 D  o  }9 W0 Q
window.innerHeight
8 E% D/ n/ f: S( a' c6 ~2 p5 c6 i/ {1 N# G706
7 j6 {1 B% u$ r0 `//浏览器窗口的内部宽度
% ?* Z7 E0 L' hwindow.innerWidth# v3 p# w0 r) F1 O
1522
8 H; B- u3 ?, |1 `9 ]5 ?// 打开新窗口, h8 S+ Z# }( K/ }
window.open('https://www.baidu.com')
4 w' g5 |6 p0 E$ v# H4 \Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
9 P  T3 `8 P* W3 u( T% E// 关闭当前窗口
* W  D* J' e1 g: N6 H- Q9 Gwindow.close() 6 [& o: Q& |/ R/ H  ~7 o
//  后退一页
9 h3 o- W0 E. P% T& F7 a! a) Hwindow.history.back()2 m+ A$ L8 R; t2 A
// 前进一页4 S7 g/ l: T) u+ |7 m8 M/ V9 D: K; ]
window.history.forward()
- U" o6 b7 a) R5 g//Web浏览器全称6 o) K" r% k8 t% Q
window.navigator.appName
9 N0 [. b# z9 M! _9 L0 {* y  ?0 C'Netscape'
8 ^9 t; `9 P: P# Z# O3 j3 p// Web浏览器厂商和版本的详细字符串5 ]& A" x+ y1 R) O- P9 D1 |
window.navigator.appVersion
1 G/ R3 {  k# h'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', V* ?! V6 @& c8 d' o( s% v! Z8 t
// 客户端绝大部分信息
! Y( ~1 N; @+ V8 B; u  k5 o  s. rwindow.navigator.userAgent! }6 _/ P6 K8 L: ^: y
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ E& x+ a6 i5 ^8 n9 x// 浏览器运行所在的操作系统: J% I+ E9 Y4 ?3 c+ U6 t6 M
window.navigator.platform8 }! h6 M4 ~, T
'Win32'
( C, U+ i5 [, N' Q( }3 o# h8 }3 S
& A7 r) B# w8 D) b. y& D/ Q) h, z//  获取URL9 y* g: k3 l9 ?! H2 [6 X
window.location.href
* D8 {* k8 h" J- I9 N  K: k// 跳转到指定页面0 }1 `  E- Y( H) W& H* M  ]3 ]6 ~  Y
window.location.href='https://www.baidu.com'8 `. k5 ]8 l: L" n5 P
// 重新加载页面
! W/ P5 Q# D) k9 uwindow.location.reload() ; }3 S+ \- {- k1 s$ I) G8 R
</code></pre>
) s4 @" f8 ^. {5 ]' X1 y) {<h3 id="32-弹出框">3.2 弹出框</h3>* H( O5 j( k' }& ^7 @$ @
<p>三种消息框:警告框、确认框、提示框。</p>
& ^" H: e$ H, F" ^<h4 id="321-警告框">3.2.1 警告框</h4>9 W+ H7 R+ Q( U  @" ^
<pre><code class="language-javascript">alert("Hello")' e- h8 ^1 s; q( }
</code></pre>
" W8 T0 S/ ?" F  o8 z# k$ ?<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>/ _; \* \& [/ i2 l
<h4 id="322-确认框">3.2.2 确认框</h4>- M6 n9 g. [. E
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
8 G: c0 t5 B( N: z' B) R<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true% h! B2 w. p& X- h7 p' N8 K2 J$ ~1 T' y
true0 Y! r: m; o4 ^! Z: d+ T
&gt; confirm("你确定吗?")  // 点取消返回false
6 I4 K' M; j7 C: kfalse* N, z  s( p) i. \7 ~
</code></pre>
# H; F2 I, s" ?4 B: j$ W<h4 id="323-提示框">3.2.3 提示框</h4>( G# g. i  C6 D) X* U( T' h
<p><code>prompt("请输入","提示")</code></p>) p  u; P; j% E% L3 p. t% t6 N
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
& Y! v! A8 `8 Z6 V0 {<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p># @5 I& ]8 O$ ]1 e/ _
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>3 n; Z: _5 C. x! X0 P7 _
<h3 id="33-计时相关">3.3 计时相关</h3>
0 g! r9 {' P6 L% T" y1 I<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>! ]4 X, p; h1 b9 H9 \# |
<pre><code class="language-javascript">// 等于3秒钟弹窗7 Z8 m) t2 F# a! _: U% q$ D
setTimeout(function(){alert("Hello")}, 3000)- E8 i0 Z5 D" @% B  @5 g8 x5 }

! Y: U" {7 r6 F2 Yvar t = setTimeout(function(){alert("Hello")}, 3000)2 t* g; K: d8 s6 n; I8 ?7 R2 h/ r) N
! \: c6 }0 b1 X
// 取消setTimeout设置% B! ~) k; b, O3 L, X! {( }- k
clearTimeout(t)  A4 |& @" f( V1 O3 n( u
</code></pre>& `0 U) B9 z9 k& H' [( B" j
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>) L. R2 |# l: Q* q  G
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
* r" ~% h7 G# S- F4 f/ z0 @<pre><code class="language-javascript">每三秒弹出 "hello" :
" l- L% C" h7 E, u4 nsetInterval(function(){alert("Hello")},3000);3 |6 J3 A& L/ X- w0 f- @" f
</code></pre>2 [" x* x9 E0 w' f+ P
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>5 i0 k1 h' R% A2 b, m
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
+ }1 x6 r8 |* Y0 l8 b//取消:9 C- W! f/ C* `0 [8 l
clearInterval(t)
+ F* a" P5 Z1 z8 _3 R</code></pre>
/ z1 t* s4 J, S, S6 s9 S/ A" N: u3 w) S0 h  }. d; j# p) b
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-1-9 10:45 , Processed in 0.071123 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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