飞雪团队

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

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ w6 D& W8 [, \$ W! N- f<h1 id="前端之javascript">前端之JavaScript</h1>
& v1 j1 q' ?  ~8 W- p9 |<p></p><p></p>
6 R( S+ ?5 l7 e) }2 B. u! R<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>) v* N7 T/ `# ?( B6 h4 E
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
0 q- [+ x! e( h( D9 n, T( z它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 @. o( J5 X) E4 Q5 ]" |它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 E% c" ?- V. C$ X
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
! O" B7 x2 J9 y" g' ^$ s& f<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>; z' A' t3 @' u! j5 `
<h3 id="21-注释">2.1 注释</h3>6 L$ T  a: I& q" W$ {  i
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>  _. a7 i: L; W3 C2 `
<pre><code class="language-javascript">// 这是单行注释
; U1 b$ e2 C* A2 R8 }) O9 A" R4 Q4 E: L; ~; v
/*; W, O1 [/ q& @; @" n, |3 q6 U
这是多行注释的第一行,+ U; w( I  u0 ~0 w2 ?3 m
这是第二行。
( r& G; \  T( v9 S*/
, j' z6 w0 }" T1 g. j</code></pre>* L0 b' G& v8 T% b
<h3 id="22-变量和常量">2.2 变量和常量</h3>7 n0 K4 ^+ x" z. t& k# L3 {
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>. c4 W9 I7 j9 L
<ul>
# b/ D; J' Z0 r( g  I4 b<li>变量必须以字母开头</li>
. i* ?# Y6 [7 g* R<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
4 B9 m- ^& P4 _0 W% q% z( v<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
' R: G# F( S/ c6 c( S</ul>
# v' l' `) k* o: t) n6 g<p><code>var</code>定义的都为全局变量</p>, }/ A. y5 J0 o. U
<p><code>let</code>可以声明局部变量</p>
" [% Z+ T; f" l5 u/ Q<p><strong>声明变量:</strong></p>
, g: t( T: K- C. Q) [& N5 y<pre><code class="language-javascript">// 定义单个变量4 U( z- ]& h5 k$ z4 a
&gt; var name- V+ z/ w' e5 n: k$ B# Y
&gt; name = 'Hans'
! l# D* R5 H9 @7 b//定义并赋值
8 J9 ~$ r7 U: Z5 g5 v&gt; var name = 'Hans'/ e: y7 L- Q5 C
&gt; name& a# i- W: d' M/ F1 e  w
'Hans'8 M% h+ k) i& ]* ~
$ O  V3 d3 w1 ^1 w' `5 G# d* z& V5 J
// 定义多个变量
% e3 ]3 m; }, x&gt; var name = "Hans", age = 18
* i3 P) m8 A: p5 H&gt; name
. M5 l) L( ~* R8 S: y% n; P5 E'Hans'
$ d4 S# ?* M3 W! R$ T&gt; age
; I) j; ~0 w( g% O4 d. ^18. f( j8 h1 I* V5 g) j9 _
# d$ A. }$ c2 D
//多行使用反引号`` 类型python中的三引号! T5 y* g, H) d+ l/ a
&gt; var text = `A young idler,
2 Q1 k' z2 H( ?. \( `an old beggar`: i: Q) o) G& H9 Q( _
&gt; text
& y" E" m! ^+ Z- ^% p# A'A young idler,\nan old beggar'
/ S9 ^  v) ^( I</code></pre>
: l* b- C2 L# M( v<p><strong>声明常量:</strong></p>+ G& k8 {9 d, ]# ~4 J2 b. n$ ?
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
1 V1 o/ j" U( T) K9 C6 u<pre><code class="language-javascript">&gt; const pi = 3.14, ]' u$ E  e9 M  _( v8 e
&gt; pi8 ]3 t' u# {+ D) p# |' }0 Z& \$ q( O
3.14) E8 d( O' ^5 }3 L9 n4 ]
&gt;  pi = 3.01/ p- z1 o: f* u1 h% B5 B# l' R+ ^( P4 p
Uncaught TypeError: Assignment to constant variable.
% O- K. e9 k/ G% X    at &lt;anonymous&gt;:1:4
, W8 a, A* ^: S: ~9 q  I2 W' A& l- W$ f( W) X6 ]( }
</code></pre>
9 o" M2 K; N3 [+ n3 ]5 o3 h5 m<h3 id="23-基本数据类型">2.3 基本数据类型</h3>* d7 B7 S8 j# z; I' Y0 _  `& Y
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
& o3 I. f5 Y* e' e+ |: A* }* S<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>6 h" r) _0 u  Q1 m+ T  H1 d; Y
<h4 id="231-number类型">2.3.1 Number类型</h4>/ P. M9 x3 T) \6 |
<pre><code class="language-javascript">&gt; var a = 5% b* k) B  b2 w
&gt; typeof a   //查看变量的类型  ' V/ w3 G( y1 A1 C. m. b  d/ \" _
number" r8 r* B% W! [! u- l
4 L6 |: |. C% h& P) o! x, b, b
&gt; var b = 1.3" @$ V5 [; d3 z) k- C  B; F
&gt; typeof b
8 o% l2 b( A6 E) }5 [/ \: A7 Knumber7 j$ E3 Y+ ]: I8 |2 t9 l* E5 v
; [: a- `' ?' |0 u2 c& B4 G2 i
// 不管整型还是浮点型打开出来的结果都是number类型! E) a( v5 ^+ m9 Z* \; r
& N$ P1 h; n- E/ v" k% S, H
/*/ z3 H9 j( V4 x/ H# B9 `8 e: E
NaN:Not A Number0 p. ^, V! k7 }$ k9 |
NaN属于数值类型 表示的意思是 不是一个数字: w3 u/ X9 a1 `& Y3 e9 q- b- Y/ n
*/7 `' [0 p+ `; s+ q4 {
0 ^! ?  f$ u/ a% V- u, l
parseInt('2345')  // 转整型
; o9 ?6 D+ O4 J4 P, }3 k& n23454 ^0 Q( O5 P. N8 F6 N: E
parseInt('2345.5')
6 H8 J' [5 j) r  [2345
5 |1 a- {$ |" a4 d2 c. EparseFloat('2345.5') // 转浮点型
0 e* }* E; x9 s( D6 B! C* K2345.54 x, g# ~: G" Q7 @0 l3 ?
parseFloat('ABC')
5 q6 O; P1 ~. L2 F- B: `: CNaN
1 f. G5 u9 Z6 n; c% G7 Z0 e* {parseInt('abc')) _$ c) _% E& |% A. R1 y( T" `3 P
NaN- S- _* |1 k0 |6 O/ `1 q
</code></pre>4 r% x7 `7 f! b* X8 O* h9 \9 c
<h4 id="232-string类型">2.3.2 String类型</h4>
7 \7 W/ P8 ?  V- U) E4 H<pre><code class="language-javascript">&gt; var name = 'Hans'
8 x( e5 A) M0 A&gt; typeof name: D& z# z4 m0 f) D3 p& a3 m! f' w, g
'string'
' y: g+ |* p7 q7 {$ {( K& ^! E' Y- u9 {) i- w9 ]
//常用方法
; q/ U9 e, `: L; z// 变量值长度7 u% Q  @* O3 ^' X, ~% S" ?8 v
&gt; name.length) l- U0 @+ y+ A4 X1 `$ @5 }
49 J6 {6 m" g$ f8 ~
// trim() 移除空白- ^% R4 i% t, n7 Z1 ?# t' J
&gt; var a = '    ABC    '
* F5 I9 r/ U* U3 J&gt; a
2 D# @6 T1 ]4 ^" r) R# S0 L! l'    ABC    '
* \4 H; V: y- H4 M" s& t&gt; a.trim()
6 W' q+ [6 t* N" k'ABC'
; G/ N. ^( C$ v) J) S//移除左边的空白  B& Q- l, u2 V- M7 f, W
&gt; a.trimLeft()( p: ^7 e* F+ F4 Q# X0 C
'ABC    '
; X# M) x9 J$ ]; p4 ]//移除右边的空白! ]$ v1 q! c2 S
&gt; a.trimRight()# }8 \$ |1 l' Z' U/ J
'    ABC'6 x5 R( z' v: z/ ^& `  ~: Q) V

0 |* |0 c1 }6 T//返回第n个字符,从0开始
: ^% X7 B  t# f8 G% I0 d&gt; name
: I6 t: o' |9 e; q4 ?'Hans'7 x: d4 [# Z* z- i  l
&gt; name.charAt(3)5 B6 T6 n9 m; e& i1 V/ U. ?
's'. W6 J. }4 f% Y! J2 L" O
&gt; name.charAt()
+ K: b# K% }, W& X( O'H', E4 W4 d5 S. x
&gt; name.charAt(1)8 Y- b3 a+ r4 N. k. s. j; `
'a'# J* x; y+ m$ g2 a2 k- b4 E
( [+ m# X, z2 A: \
// 在javascript中推荐使用加号(+)拼接' O2 a& d) l" L8 o5 L3 E0 \) R0 \! u
&gt; name8 j1 O2 l& Q& X; g) m! F
'Hans'1 F& D# L0 |3 m- ?
&gt; a0 f0 t& q  ^& v$ s
'    ABC    '
* \+ F2 y' f& o! z' y7 F8 S&gt; name + a
: g* N* o1 L2 p0 T8 f. h'Hans    ABC    '$ n) H* k) s/ w% O) r
// 使用concat拼接: I+ F% E, [" q- \" u
&gt; name.concat(a)
7 p0 p& U/ G" X'Hans    ABC    '$ E0 |2 K7 {8 C: n) q5 }
2 B, y' i4 ^9 H4 G9 T
//indexOf(substring, start)子序列位置9 p- ]" Q. T* \
3 x$ N- p! ~% V: @
&gt; text
7 g* U1 A8 W1 S6 s) o'A young idler,\nan old beggar'6 z) C- G8 v& G( v/ O5 j% I
&gt; text.indexOf('young',0)
) z; G7 O( A5 G/ W8 k# [2
; c( a3 [5 k/ G: C6 B1 E
5 a1 [8 a6 `! \7 s+ X- l8 y5 q# _. U//.substring(from, to)        根据索引获取子序列
6 ^  i. f" g( f& p  p&gt; text.substring(0,)
2 g" o( Y0 P+ P1 r( ]'A young idler,\nan old beggar'
9 r# L: ~% ]" p' H1 M' _4 g, K&gt; text.substring(0,10)
* L* B) [1 o& s: h6 L'A young id'
. W- }3 J3 Z+ g- F; o2 R6 X9 q2 [( `/ F
// .slice(start, end)        切片, 从0开始顾头不顾尾
5 w% O' p3 l# E% Z: i* y2 [, G&gt; name.slice(0,3)
3 S  e2 O2 \/ z. c, Q" L* O'Han'
$ h+ t" S+ M. l  K( w6 y: q$ z* g* E+ w& u, E2 h
// 转小写
3 C& |! {5 q0 @( F! e&gt; name
% f5 k0 b# c* @; E% k8 M9 o& x, h5 P'Hans'
3 Z0 z2 D% F/ U' Q: U( Y&gt; name.toLowerCase()
9 [# w0 l, D; N! ?2 q'hans'
- C& Z- u/ ^9 t: y1 q1 t// 转大写: F" f" G/ n6 V+ Q8 x# [6 u
&gt; name.toUpperCase()( x$ x; J2 z6 R9 q* L
'HANS'
2 D4 w4 S) I# Z( s2 _: s; m$ B2 D. A5 B
// 分隔  F4 V) o" ]$ h. h
&gt; name; z" x4 c4 j7 k( `4 |
'Hans'& T0 B5 `0 u/ Z+ X
&gt; name.split('a')
( n& ?' K! P1 a4 z/ ^4 I(2)&nbsp;['H', 'ns']6 U' H3 j* l* ?
</code></pre>
2 A' {. F+ C- j: u! z<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
+ K/ `" p* W3 Z<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>) s2 r5 h/ F* J' ~
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
6 ]" U+ r9 z- N5 |: B3 G<p><strong>null和undefined</strong></p>2 M- y& D" p! {7 O0 Y0 ?
<ul>
8 L! s$ B) z* F<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>$ x5 P$ E/ a7 p2 s- \3 s- H$ P
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>7 |) p# A% A. w+ r
</ul>* `$ Q, o8 l, G* }% f
<h4 id="234-array数组">2.3.4 Array数组</h4>1 i0 M0 }, N1 M3 o- Q+ r: T+ D/ j. R
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
) l* n( g5 t; U, O9 Q' e$ e- S4 h  q<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
! S: X+ I! i7 Z" @; e4 Q&gt; array1
- s6 ~7 z4 s- ^& n5 m% J7 ^0 c(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' \( s1 u8 |4 E8 H&gt; console.log(array1[2])  //console.log打印类似python中的print
& L$ y7 R- B  y' ?, U' P- b( ?' z- {7 ^' E30 \+ U! t% k7 w* T+ ~8 y6 M
// length元素个数
. m) |* z7 `! Q&gt; array1.length: x5 n, N# o" Q
6
* d/ ]1 C8 h/ K% n# l// 在尾部增加元素,类型append% c. X4 d: f3 _" L
&gt; array1.push('D'); d) p4 k1 d$ B/ d& U0 a1 s
7
, s, Y3 e* Q. e# |3 R& x&gt; array1. ~# r3 N: @- t7 G/ y0 V: `
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
1 \6 P9 O0 k' S; }! W, S' z// 在头部增加元素3 K1 n4 {) g! t9 F8 q
&gt; array1.unshift(0)
% Z; }1 ]) m4 d- Q8
4 ]1 H6 P5 S+ R, S" j1 B- h8 h&gt; array1: V) {8 p4 H6 b1 l
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']! j% M5 X. |: y+ H' H& b8 U
% l# d" ]9 p: r
//取最后一个元素2 w7 Z) g6 ?6 \4 T  W3 S
&gt; array1.pop()  \8 \8 b. S7 ~+ N4 @
'D'7 W9 s6 P3 d: y9 `
&gt; array1
# s5 M: @3 b# p3 M, h$ U7 F7 s0 s(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
% e, |" y9 @- T//取头部元素
' }* z8 s1 P* m0 {&gt; array1.shift()5 H* _0 z5 ^8 W. b% z3 b% u1 g. n
0, J. [1 S; O% @* ?5 _* ]
&gt; array15 H4 G* Z0 D# R" Y2 d
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* e, m$ J9 i0 I$ ]' k0 ^: g. T! _
, m8 @4 O1 p: {0 z% X//切片, 从0开始顾头不顾尾/ J" H+ S$ t$ H* F$ y1 }
&gt; array1.slice(3,6)
% @7 }) i0 ~# k8 G9 Z# q6 Z(3)&nbsp;['a', 'b', 'c']
( C3 m( q( i' y// 反转
4 o  m! \. V& v&gt; array1.reverse()
1 k! |' T" c; u4 C2 G(6)&nbsp;['c', 'b', 'a', 3, 2, 1]" ~. g1 {) k1 K1 A0 [8 }3 ^
// 将数组元素连接成字符串
/ Z1 p+ v  U9 Q  U0 |5 Z9 C* @8 t&gt; array1.join() // 什么不都写默认使用逗号分隔, |- C# g( z9 e! e4 V
'c,b,a,3,2,1'2 }* D2 t. E- ^: Y% C
&gt; array1.join('')
9 \' Q( x; m+ D' p' G3 t'cba321'
. ^9 L( f1 G8 e9 n; j2 M4 _4 u&gt; array1.join('|'). c1 ]2 L4 v$ `; E7 P* P  _, N
'c|b|a|3|2|1'
6 Z2 A5 `2 S: W; s+ j$ {6 U& B8 x
( T+ h2 ?4 \- E0 W, g// 连接数组; q$ B3 y, q: Q4 i& C$ l! @2 |
&gt; var array2 = ['A','B','C']
9 x+ T# q) Z/ V" N# J% D, o5 i&gt; array1.concat(array2)5 {! d7 A& a) Z; r( L+ b
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']. i  ~+ a; U/ M0 j1 ~
3 z, N6 C) d' m5 |: B0 d) W
// 排序* X. k0 S$ W# l7 I
&gt; array1.sort()- q  c) W/ Q" h  T7 N, g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 B; l& f4 M4 s* Y, R" a
0 z4 D7 V* H+ H& h* @. @// 删除元素,并可以向数据组中添加新元素(可选)
; p. q* g6 R9 u" F0 @) v&gt; array1.splice(3,3)  // 删除元素* [. @0 y7 E( |' _
(3)&nbsp;['a', 'b', 'c']" `0 @  y. x& X
&gt; array17 j- X$ x) }( {* U- I6 q* I
(3)&nbsp;[1, 2, 3]- J: p) y7 T2 H; \0 O9 A" g
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
( w3 m+ P" d2 n) U& z[]
9 l$ W; P3 E  s* C0 t  ^" u0 `&gt; array1+ M# p3 {) b7 U1 P
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']# q+ n$ f. k/ w3 H
' z$ n: j1 p. C$ {1 ]/ G
/*
7 Z! e) }( ~! u, k- ksplice(index,howmany,item1,.....,itemX)
  y/ j  E2 `, x: Vindex:必需,必须是数字。规定从何处添加/删除元素。: t0 q1 b; `3 c. w" I* ?
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
7 G3 B& ?; J7 e% R3 o' {, uitem1, ..., itemX        可选。要添加到数组的新元素5 b+ r' N# v  \+ ~& v0 }
*/
! q/ b5 i0 k: V- v
* E  Q/ {4 X7 {  a3 P// forEach()        将数组的每个元素传递给回调函数7 S' X3 x$ Z9 s' k3 B$ t
&gt; array1.forEach(function test(n){console.log(n)})
3 q3 M* E7 W) N1 f2 R5 B 1
8 N" Y, x, {  }0 Z7 {2 L 2
$ T+ i+ s! t3 \, T 3! ?& A  x- V* A, h% Y  Y
A. Q& D+ i7 e$ O8 w+ O5 T7 ~8 k
B3 j$ n, g* z: Z9 ?6 s, D% h
C
( w  L% K  j2 c3 M) h// 返回一个数组元素调用函数处理后的值的新数组
8 C) ~5 r4 z! @&gt; array1.map(function(value){return value +1})0 F% I' r& W8 v: b+ l
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']  s6 I0 @5 a- E) |
</code></pre>4 h6 }) z  ]6 P  ^0 T
<h3 id="24-运算符">2.4 运算符</h3>
( R( v1 j* |+ P3 I( j<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
- O$ H0 ~. J0 h- a# B; \  R  c) Y<p><code>+ - * / % ++ --</code></p>
/ O, b! c5 b2 U, `( j8 u<pre><code class="language-javascript">&gt; var a = 61 A" X5 X3 ?. n& B+ G9 D+ l
&gt; var b = 3
/ @( }2 v1 E  p) ^- M. C1 e6 J( C// 加
6 G& x5 _& u4 }$ T&gt; a + b
/ O' z' z# X" k( [/ l93 d/ D1 Y, n0 n0 [$ w' @& O
// 减
3 z/ {$ d. y% x7 s&gt; a - b
. y7 M, S# h* L3* y" k8 }$ n( K( e8 q1 b) x1 O1 Y
// 乘
0 F' }+ J# N: m) \&gt; a * b
! Q4 J  `4 I, {0 U& g& Q4 o1 ?18
4 K7 {4 c0 r) |+ U2 N// 除
4 }+ ?/ }: ?+ M&gt; a / b
4 K, C/ i; g# J( f* q) h. ?2' ]! o5 h$ N: J0 p- T
// 取模(取余)
1 Z, A8 _* X: l; h# h" v, N&gt; a % b
( \7 c  S2 M5 l5 l+ h0
/ F; H1 D! d( h# F. N; K2 A// 自增1(先赋值再增1)7 b; T  @* H  ^, @
&gt; a++4 Q5 q+ F, o, F. @6 M' O0 [, J
6
; r9 u( b# [6 u* Q6 C&gt; a
; M7 R  w9 v+ i! m! e77 w. Z# |; T3 R1 v5 t2 m
// 自减1(先赋值再减1)
7 V6 `1 g/ v; l+ t, \&gt; a--
7 v/ f5 \9 Y" E3 B$ H7
% }& C. i; z5 K&gt; a" n  h7 m3 S: }% i8 H3 F
6! D% @3 [3 w- e9 ^2 j8 x
// 自增1(先增1再赋值)
$ r- b; }, y: }. O7 M5 S/ a( J&gt; ++a
  M! V: }2 p6 D+ `+ R1 O3 K3 c78 z0 l& H% D! T$ a
// 自减1(先减1再赋值)
2 v% T" ~' i* C3 t" e7 ~&gt; --a
" r$ B% S4 D0 s8 s$ a* X6/ Z3 o! M' g0 s# \
&gt; a. U( ?! X- _8 N
6
+ I/ \- }- `8 K) N2 V/ i- O5 R
- p+ L+ c, c; j) t* G. f//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理1 k* l% h3 S0 |1 o$ j: ~: \& s, C
</code></pre>
8 q( j' a# g+ U  p% U7 q6 g<h4 id="242-比较运算符">2.4.2 比较运算符</h4>* e7 ~& I) [. B# v7 z
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>' [. v  p) R5 i# H
<pre><code class="language-javascript">// 大于
; O& \8 l- `- A5 u$ u&gt; a &gt; b- J0 Q# I5 B/ W% q) }- `3 X
true0 a* G' ]$ D" M
// 大于等于
! N8 u  G% t' v0 s&gt; a &gt;= b
  b; M! m9 c" h% ttrue
0 z8 Y& p8 a8 x* t* s// 小于5 w; u) w7 V* g( s6 C% e1 C; }
&gt; a &lt; b
5 V! q5 V! [% e4 r) O" O! R9 ifalse
; m$ d6 f& ~9 _! `// 小于等于
$ ~; w7 P( C( o8 D' e; Y2 t&gt; a &lt;= b
2 o6 H5 T, C  A8 p; ffalse$ ^, B1 T# u  R. O1 Z" I' d
// 弱不等于. W, h) _9 p% Y$ p9 c
&gt; a != b; p) U0 D4 l% c, H( i( i
true9 W% P( ~: }0 `1 g; `: S. H' C( Z- l
// 弱等于. a3 I6 s: o. n& S- n0 f
&gt; 1 == '1'$ I+ F4 A7 P! @% T5 O: B
true
8 d: W* Z& S" K! Z  [. P* w5 m// 强等于
8 w3 B; W( {! L  T8 p&gt; 1 === '1', s" `! S: Y0 {" N: A
false
8 s  u' D, l" K// 强不等于, C) k* j8 V4 f; F5 k: ^" `
&gt; 1 !== '1'" i3 m1 W! J3 R, v" j8 H
true* u1 J. n$ Q; {1 L

$ p2 D* @- B0 }. u8 v7 {9 m/*8 D" a' R- n. M. K) d
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误$ G  B: }; S' G# s
*/
. p, L+ M! j( R& F1 j/ F</code></pre>
8 ?0 b7 T* u5 R<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>0 |$ {) @& l6 S% C2 z
<p><code>&amp;&amp; || !</code></p>
: e  r/ e+ a, y<pre><code class="language-javascript">&amp;&amp; 与
; n) K( v5 F* J; k# z( W' f3 G|| or
9 g  G; `! k- D2 I. G. i$ |, z7 P& }! 非0 u9 \% Q; b/ ^# {/ k( L. s
</code></pre>
2 a1 P  ?6 R6 S, [: K) A# E4 ~& y<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>. l" _  N5 V3 l; {* z( ^6 f6 b
<p><code>= += -= *= /=</code></p>
; {- s: a. W# |<pre><code class="language-javascript">// 赋值
( D/ U5 h/ Y" t! ~- K$ l4 Q& K&gt; var x = 3# Y2 \, J4 p+ c
// 加等于
4 n) y( E3 ?# ]) d&gt; x += 26 B+ i9 P4 \" Q0 T
5
2 Y0 _- C- x( G( g  m+ S8 U// 减等于* j8 T( }4 c* j6 L# M8 e
&gt; x -= 1! }- a+ J1 @3 l. Q" N( c
4
1 b+ I+ O2 u$ ?( v5 M) m+ x9 w) l! X1 B6 N// 乘等于. r0 c( m" W3 g$ u+ e" y
&gt; x *= 2' S0 _. O) A# b7 K8 m4 U
8; L& p% u% ^9 ?& e- M; S
// 除等于& T$ ]- k1 l+ a& s, o! S! W2 s
&gt; x /= 22 C7 H' n: g3 y
4
* q& t; U2 X: |& v* p</code></pre>( f2 l) n  G4 |2 b! L3 Z
<h3 id="25-流程控制">2.5 流程控制</h3>! \) R9 V4 p  K: U: I- S
<h4 id="251-if">2.5.1 if</h4>( }7 V3 J" G( J9 N1 q5 v
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}9 v, K' U7 b) D  b

9 z. @* [; I) Y&gt; var x = 3
4 A, ]& `/ w" ?4 V* x+ Z7 s&gt; if (x &gt; 2){console.log("OK")}7 }! g5 x) Y6 m; Y, `6 z
OK
% K  V! a1 n. A, p
3 r! j0 }6 K$ e& n- K" f# S2, if(条件){条件成立执行代码}
1 v* I  j' v9 d, Z3 p* q: p5 V* e        else{条件不成立执行代码}% I9 G4 n9 q$ p+ ]7 k$ e9 g; ^: @

. I- Y3 _8 i# e&gt; if (x &gt; 4){console.log("OK")}else{"NO"}+ J" `( j2 k! X/ `
'NO'
0 [, X# x. |/ q( m' ~, y3 Y( i% I% J/ t
3, if(条件1){条件1成立执行代码}
6 ~5 t. s4 A0 |- x0 {: {! h2 M- x        else if(条件2){条件2成立执行代码}
* A( q- [9 d; v) l! H( G    else{上面条件都不成立执行代码}
7 V% T' i1 l. d& H6 R7 a* P' W; x" O$ F3 X. |3 E" w3 ]0 X- u. |
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
( [! `  S( a: W: k* p+ Z/ z Ha
' }( I+ W8 t9 F</code></pre>3 E2 ]8 ?# ~, J5 I
<h4 id="252-switch">2.5.2 switch</h4>5 r% v  g, a: V, g9 v
<pre><code class="language-javascript">var day = new Date().getDay();
3 G* K1 v2 F9 mswitch (day) {
* w: F, ^1 p  ~4 _0 R  case 0:
8 L1 n5 e$ ~$ t, Z, [  console.log("Sunday");
* U# K. N+ u7 b2 _3 R$ S  S  break;
7 W9 t% S/ f. U3 n  case 1:
/ U  N; @: u+ N  console.log("Monday");
" m) f: K" X/ U) _; a$ o+ P$ B  break;
1 y1 S9 @2 Q% M6 Bdefault:
8 y8 O6 A  {, h) M3 J' E  console.log("不在范围")
: m: ^4 ?! y: T7 {}
5 M' ^3 S$ D' ]( I7 d8 Y 不在范围5 ?5 I7 x5 [; n9 I; `
</code></pre>
9 w* ?! G0 S1 ~; m/ v* {6 m<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
5 m, M  [4 _/ P  n3 a( B<h4 id="253-for">2.5.3 for</h4>
1 Q4 Y. F9 i; Q( E' \6 ?<pre><code class="language-python">// for 循环
* \7 [6 U( r8 G9 [* U        for(起始值;循环条件;每次循环后执行的操作){. d/ U" e  W: W% m) g* N
        for循环体代码; }& K( q, h6 z4 {
    }( {7 G6 m3 Z3 C7 A' j" E5 t
6 G/ e; F" z) Q# A/ B- L
for (var i = 0; i&lt;10; i++){! j$ {! [+ y3 }$ |" c
    console.log(i)
6 O  w% }3 q' x, ~# P; e. `. d}1 a0 n+ I9 b9 x0 K& [& r
        0
/ g' S& `% u4 a+ N% a; W/ w        1  ~  l" h1 @9 f" A- u' R& V
        2+ X0 [9 g5 P8 A
        3
  B' D0 A0 z! H& o0 o        4% E2 O! o, e, q% \8 Z
        5
) E# r# K  g# Q3 e        65 p1 h2 z: A& H+ f# t0 B9 Q
        7' V/ @: g% m1 ?/ b* w- E
        8# X9 Z0 h% @' }# C
        90 j; g8 F1 x4 f1 h; b/ x
</code></pre>
3 x- H% _! d6 h$ c7 M: r- o6 C<h4 id="254-while">2.5.4 while</h4>
: b/ U8 \0 j) T( z6 l8 r; K<pre><code class="language-javascript">// while 循环
: p+ ^( w$ u* O! E* u        while(循环条件){
0 \6 x* e' q! \1 t( D8 d        循环体代码% j. U  g1 A6 T" o
    }* ?7 U( k! u4 [! ^
) Z' W* p# q- O& f* i
&gt; var i = 0
4 \! b; Y8 g! V7 \# j&gt; while(i&lt;10){
# L5 r3 x# j' I* F+ g: Y0 p; B    console.log(i)$ ?! G' X' o  P, F
    i++8 j  e/ T8 o; r( S, T2 Q# q3 L# ^
}
* k1 _" Z. |% _( T% m# k 0
" g) r, |) @3 l# d3 L3 s- W 1
7 W% S% z6 h  i- M9 C5 \  N 2
2 W$ L( P! W! h8 D 3% Z0 Y0 J. ^2 d
4
" d7 q9 R  N# i$ ` 5
3 e6 r+ s7 J( n5 B8 H 6
) s$ n6 {' A7 K 74 P! [# x9 w3 L) t6 V' o
8
* Q) |  o( @' g7 ^! Q% a 9
! I$ S; `; E2 H* M; W</code></pre>
* D4 A; M" k2 ~2 A$ ]: \<h4 id="255-break和continue">2.5.5 break和continue</h4>
; M: D9 F4 Z% V' V3 D<pre><code class="language-javascript">// break1 T; x6 ^: P' \
for (var i = 0; i&lt;10; i++){* [" P- e" R3 ?" M
    if (i == 5){break}
- ]8 _  M, _/ {2 X& r    console.log(i)
* ~. [/ p6 U& ]0 e. u}  S+ _7 L# [- J  s0 O3 n2 A
0
4 i8 U3 x1 k1 T8 T% ^, ]6 H 1% F: f8 g  V3 o& O" m4 F; [
2! r% f8 P' L8 k; k% N1 z% ^6 d$ O, ?
3
% i9 `; G" C/ @9 E1 D1 M2 l 4
7 o* r' F$ j3 |4 @! q+ f0 [// continue
2 M( b& H/ q4 C1 Ufor (var i = 0; i&lt;10; i++){
: O3 B, [4 h1 s8 K    if (i == 5){continue}
$ L2 `0 u  y+ n  O    console.log(i)1 Z  p5 ?, w* |  S# _
}
. j3 R1 ?, {' W* F0 ]9 m' ?; O 0! n: \5 e: R* W+ P3 {
1" }/ l" J. f7 F/ c+ \2 K
28 f* c. J( f: i0 ]# ~% ]
3
! A$ |6 U3 Y& y7 ], o/ j 4
; M! I! H1 {! s$ T& ]6 A8 L7 A 6, `5 v: B% _2 D  A0 _% g! p
7
, L' z- P' U( w6 J2 v 89 _: r; |: c) P5 T. a
9/ E9 C/ E3 P9 _( U# O5 i, s6 t( u

8 p' s  u9 _3 @4 ^- p7 N</code></pre>
, y, C7 X3 o1 @# t  \<h3 id="26-三元运算">2.6 三元运算</h3>
) J1 A9 R. V5 K+ h<pre><code class="language-javascript">&gt; a
; S; q: D7 y2 v6# P" r* e( i0 j1 d
&gt; b
2 m! B% z6 |1 H" Q3
4 d0 R8 }: t: e# S
- i' {; G% u6 p; q! @# r. ?' \! S//条件成立c为a的值,不成立c为b的值- ~! `- I1 T5 m; K5 ?% T
&gt; var c = a &gt; b ? a : b
- X; {4 w+ p9 {9 z; {&gt; c0 A! v3 l# M9 N5 G* n) y! J) v
6
, J6 J& d0 j, t: J4 s  G/ C) z" U- C/ p. e
// 三元运算可以嵌套, P. t- O- d/ W/ @" T0 ?4 J
</code></pre>
& |, N9 f+ Y# Y( Y" U( E<h3 id="27-函数">2.7 函数</h3>+ z5 J) l, `" a$ W6 Z5 P
<pre><code class="language-javascript">1. 普通函数
1 g- ~% |8 A( r0 v&gt; function foo1(){
' l- I5 h1 ]" z( G    console.log("Hi")4 @4 \6 j; l" _4 O. q
}
5 o- h, f1 j. o/ F2 F) O& @6 H, K. E9 G; N  p7 T
&gt; foo1()$ d7 E/ [- h1 K0 T5 O; v
        Hi
( Z: L, B$ u! B; ^+ Q7 k3 c2. 带参数函数
2 g8 x( A" e0 u3 @" G* J( Q&gt; function foo1(name){
1 K3 o4 u: Q( @2 R6 G5 a0 zconsole.log("Hi",name)( m4 ^" z. V1 o0 l( j, A
}
2 m, l6 S2 B1 ?* W; x  }& h) {  c
! Q' o* a' D* {) r& U2 u) Y2 K, z&gt; foo1("Hans")2 h1 y/ x4 ]) W, X' ]
Hi Hans  @$ m  ^8 T- A' ^) b; n
1 [1 E" ]  w  F6 M
&gt; var name = "Hello"
7 Z7 B5 b" k' M) |0 K&gt; foo1(name)0 I' x& F1 |! u3 Y# P# G. e
Hi Hello
# M; ~; n+ c: e# O2 d# Q* J$ k8 `, h3 D' L. h
3. 带返回值函数3 x4 i+ z5 V+ U2 x( a: C, D
&gt; function foo1(a,b){
2 c# a! F  i0 J9 W7 K        return a + b   
7 ~* m! w, ~' C: g}3 n3 u( c3 ~& c( n: U2 W4 F
&gt; foo1(1,2)
; k' w' \, G$ [* g0 B, s) o! s6 X36 Y& i$ }0 `5 c4 ]
&gt; var a = foo1(10,20)  //接受函数返回值
' n$ D, T& @2 v+ y&gt; a
; i* P" P' H) U7 F30
! }( g2 ?' w6 O9 j  A
4 x  n* k  E, E5 {4. 匿名函数
3 U8 L1 [( t9 s2 ~& k* t7 F& K&gt; var sum = function(a, b){+ a5 W: p5 h5 I( ~
  return a + b;
3 Z  Q2 r& ~4 J8 v; e. n2 c}
4 x- }, @3 ?8 Q: ~! @3 D- ~&gt; sum(1,2)8 s! K5 S1 O' H! r/ b' B# T% O
38 U6 @& V9 g2 X
! l/ [  o4 L0 m8 ~! x7 O
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱+ z5 h9 Z4 T, P
&gt; (function(a, b){) t( e2 g( Y* S; I" i+ j4 V% V
  return a + b5 W* ^# u1 @* |7 I; [( y/ y
})(10, 20)
% a) W% b7 \2 D$ ^- w0 B' w5 W30
* S7 |2 L) J0 Z! v6 {$ h4 C9 [+ k% W8 O( B. D' o! x
5. 闭包函数: v- \, r2 @/ `. S
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数6 n" ~* s- n, P8 s/ O4 v6 p
var city = "BJ"
3 H3 l* {  n. ~! J& O$ ?function f(){
# K& `* i2 j. d8 t9 i& o  M1 `    var city = "SH"- B2 k% r) c" r0 O4 O* q
    function inner(){4 a7 e8 M2 p; D1 ^8 z
        console.log(city)
1 i: d! x+ U1 z* v$ ?6 I    }
; E* }* ?* D3 S5 T% V6 n; \+ g    return inner
( Q3 G  Z/ m- _' x" f% h9 _! r}' i: P8 q: |  l" h2 G
var ret = f()" J3 ~/ @. V7 w* {
ret()
( U4 h( b) O; C' }6 X执行结果:% v! s, o6 ~! \
SH% _- E1 e/ I" O2 {. ?
: F+ e5 i+ h5 a2 K
</code></pre>
% \0 ?4 ?/ j; H2 I) @; |<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p># Q6 r! a6 E( U: a8 X& O3 P# X: K
<pre><code class="language-javascript">var f = v =&gt; v;
: C: x/ O0 H* M" l! L& \// 等同于
( r  y! q/ s# o, `7 jvar f = function(v){
+ n6 m+ W: b2 G- W  return v;
4 y+ `% F& A- B8 T: o5 j}
6 [$ A. N1 n8 ]5 |+ [, g& i9 ?/ P</code></pre>
+ ]: [( g9 Q3 Y: r% d) B<p><code>arguments</code>参数 可以获取传入的所有数据</p>
% m5 i: H. W+ \$ A0 s2 }- w' O<pre><code class="language-javascript">function foo1(a,b){
# o  I9 C6 I3 L    console.log(arguments.length)  //参数的个数
( L5 Z# v# O0 w  o    console.log(arguments[0]) // 第一个参数的值6 q8 |$ C% P- V8 F  E+ H
        return a + b   . I+ O' k& U: T* t- n% P1 q% G, v/ g
}* ~& i# x- V! \
foo1(10,20)
  W& L8 U3 E' h. Y: j9 L7 R结果:8 J1 K5 b$ U7 P* H% v6 V' I+ @
2          //参数的个数
. i0 H6 P: I; ~$ ~10        // 第一个参数的值; r. x( Q+ h8 q% h( I  M: p7 ]7 s" k
30        // 返回相加的结果
/ h0 \5 o" ]5 p- X' G2 l! [</code></pre># B' U5 T# U2 k7 J7 r
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
) B1 h1 I- Z: H$ Y<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>' v& q1 J2 Y& Q" e; _. H* O  m7 t
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>1 x  v9 d* {) _; g( m9 u, I; C) P! \
<h4 id="281-date对象">2.8.1 Date对象</h4>9 ]# f8 G% E' y. F
<pre><code class="language-javascript">&gt; var data_test = new Date()
, v5 ~' B+ m, A% X3 n. J. o, }. ~&gt; data_test
! a/ [+ g+ {5 l7 I: SFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间): v9 d" X+ I% n/ j) K
&gt; data_test.toLocaleString()1 X. T' x9 ^- L/ K& N0 L
'2022/2/11 下午9:44:43'
+ \% z) y0 l* D  ?# D
6 k) H5 S' g& r2 h4 W&gt; data_test.toLocaleDateString()# e- I7 M2 M7 G7 d7 z$ e/ [
'2022/2/11'
1 p- t6 B; Y1 L& h! v% m5 T. M3 ?+ N" w( U7 e2 a1 v
&gt; var data_test2  = new Date("2022/2/11 9:44:43")' \3 F3 P" w% r) ~; U) ?4 A
&gt; data_test2.toLocaleString()
2 U2 U2 ~: Z" ?* V5 e: o  N" Y'2022/2/11 上午9:44:43'
: x8 z3 `" I# I6 q3 Q6 M  C
* q$ ~9 ~& C: E1 G' D$ U+ Y// 获取当前几号& w, f3 A  J* d$ S. g( J% b) }; Y
&gt; data_test.getDate()8 h0 Y, E, t5 H; `6 ^4 O
116 b# V0 g+ U5 y9 @
// 获取星期几,数字表示
& j- S, B8 i9 J$ t, x) ]# f&gt; data_test.getDay()    {- p- L1 A" T& y  s7 Z: m
5
2 k# Z8 I" o( q// 获取月份(0-11)- h  ?. _' A: V$ v) @
&gt; data_test.getMonth()
4 Q+ n  |9 ~( g( ~1; g$ K& \2 f! \7 U: M8 ~6 R
// 获取完整年份/ s0 A; v; r+ r; z- h, u  l* [) q" X
&gt; data_test.getFullYear()1 ?' V; Z) `0 `' z! j; h6 l& c
2022
! F( o7 g5 R# C- N9 j3 k- |// 获取时
- m$ }* {8 P, h; K7 H( b&gt; data_test.getHours()
! j' L6 p% u3 J21+ {* B( X$ @* B. u/ f" \* H9 F
// 获取分
: z4 b/ w3 K( R0 f/ e4 @* s&gt; data_test.getMinutes()* U) q; I" s3 W# a' _( z
44( m' A! E: D7 U
// 获取秒* I+ d8 K6 I% q
&gt; data_test.getSeconds()  d7 q' L/ ?0 U/ L7 U5 x
43
4 h# G0 }5 z. f( g7 ?) l: n: z// 获取毫秒- p# j( y0 G" y1 S9 i
&gt; data_test.getMilliseconds()
! l9 w) p! i6 e( D/ w; h: F* }290
- b& l' q, c9 f3 d7 J* ~7 ^3 F// 获取时间戳
  j1 C1 o' F8 }+ N% w, m( g&gt; data_test.getTime()
9 }8 y; q6 s- B; m3 C% P7 ?: t1644587083290% E  ~' S" H0 X+ q: q5 i) V
</code></pre>' g8 I1 ?$ _* d
<h4 id="282-json对象">2.8.2 Json对象</h4>
# U% B6 g2 ]& G" U<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
& z  e1 F( z# R  ?1 K) W) `JSON.parse()  // 反序列化,把JSON字符串转换成对象
# }5 X8 b7 y; \1 [4 t8 w, h8 T& C- g# o7 |$ i4 g
// 序列化' y' V, I4 q6 x; e7 T
&gt; var jstojson = JSON.stringify(person) 3 X  K4 v' e' P8 t! l9 H. J
&gt; jstojson  
( S  [! W7 ^, U5 i" h) S' t& h'{"Name":"Hans","Age":18}'
0 A9 G$ X- Q/ b" L4 L% Y
- N4 i# X9 p) ^" M8 ~5 \* F* I. S// 反序列化! t( _1 V6 d9 \) K- {0 Z( ~
&gt; var x = JSON.parse(jstojson): }' L' i9 {9 Z4 B
&gt; x4 W! ^% \$ A* S: {7 v
{Name: 'Hans', Age: 18}( c5 M( v# U  z& m! _( v
&gt; x.Age4 _) t! `: I8 H' z0 k
18, X0 F. P# t) ?7 ?2 l
</code></pre>* j, b' c) e5 s$ S
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
+ x; o: X; y8 Z: T- y* R<p>正则</p>$ \# x. E  u) |8 @; ^% m: L
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
" z5 |: c* H& j! O5 ^. K- j4 ^, m&gt; reg11 S5 l2 @' I8 W1 ?; Z
/^[a-zA-Z][a-zA-Z0-9]{4,7}/' ~2 V" K6 K# S- t- P
&gt; reg1.test("Hans666")) n! G! X4 J; r3 d7 @
true
; ], K$ m" m% h' I% f, Y
% z: c- _; x$ z* j" L&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
8 ?0 b7 \- D; c6 @4 H&gt; reg2
" w+ ^: d; n# I+ S3 P, v( x( t" y! W/^[a-zA-Z][a-zA-Z0-9]{4,7}/+ T0 |+ d( s" I6 A# ?( _3 ?0 O
&gt; reg2.test('Hasdfa')- ~2 K# R* M- L! R9 F
true2 W. U& N' [0 a, b6 m

. B% W1 t: ^% k9 b全局匹配:3 }) w3 M2 ?+ W' y$ i! g( n( u5 m/ y+ m
&gt; name
! W8 c' K) F' B2 n9 b/ P. ^$ F'Hello'
" Y, A! t; x! s+ p" h" ^5 R&gt; name.match(/l/)# L& E% s' k' l- G" o
['l', index: 2, input: 'Hello', groups: undefined]
# z- I. _1 f7 j5 l  T
' t: b# I5 J! g* ], O, u& h% R7 [& f&gt; name.match(/l/g)/ I2 D7 g; p, D
(2)&nbsp;['l', 'l']6 v, p7 e" ~1 w9 D6 a1 G
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
" j, U3 v! x+ [8 F* Q- S& a
# {& L& D& d5 X, a7 A& l. I全局匹配注意事项:- x& i3 I" N5 Y. t* j
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g, X; g+ E: Q* s5 C7 R  G0 ?
&gt; reg2.test('Hasdfa')
: a* Y, {5 p; X, o- v, R: @/ @& ^true. \* a2 H8 K, t+ Q: N4 f" g
&gt;reg2.lastIndex;
( ~7 R& h( B1 D- p2 u6' u. ]/ y8 p2 M7 U4 _3 ?: ^
&gt; reg2.test('Hasdfa')
7 z& Z+ `, u3 `* ]false
6 d5 `) w) G! ^' w/ d) [% b& \&gt; reg2.lastIndex;" z, V$ e: a  b* K" t8 X
0
1 C5 V" g% a6 i( k# q' K&gt; reg2.test('Hasdfa')
! @- W9 l+ b9 H7 y) strue
  ~& G. y& a8 c% O% T* k&gt; reg2.lastIndex;
4 z; m9 F. y5 O( D/ n) ^61 e: a: D# n. U' H4 ^
&gt; reg2.test('Hasdfa')
. y! Z8 S8 W' k' R" w- l# T% q  x9 \false
7 Q9 X- u& R" |) m&gt; reg2.lastIndex;
( Q% }9 T: q* l& G$ P0
: x4 y6 [  X6 }2 J1 |  [' c, I  L// 全局匹配会有一个lastindex属性
6 l& B; f# B5 r&gt; reg2.test(): z$ ^; V" A5 I# o! D8 o
false3 J  c9 Z! j* D/ i' B' l: x  R; s8 H2 q
&gt; reg2.test()
4 i( t( |' l8 I; ~! G- Rtrue9 v. X9 z: Y) j  ^; p5 D& p
// 校验时不传参数默认传的是undefined
) `  |, p/ P/ L1 n* m' U</code></pre>
/ @9 C5 m  K2 C" p& v9 m) q<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 ^3 C# d& {% W2 K  k- [! a
<p>就相当于是<code>python</code>中的字典</p>
* R# U) C3 z4 V+ Z1 c<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}; e0 K( F+ @( }5 ~
&gt; person
4 J/ K. W' w- a; g+ Z0 `+ X2 n8 ]{Name: 'Hans', Age: 18}
! h- f' e: f+ Y# J&gt; person.Name* Y* w$ h3 b* s" \$ g1 l  _9 R7 B
'Hans'
3 ~) X( Q/ f% R$ s% W% J5 L: {% I&gt; person["Name"]1 i+ B: i1 A6 h: \3 g
'Hans'; }  T; k! ^5 }( Z, }
4 ?% I5 }' }+ l& ^' Q) R
// 也可以使用new Object创建
( l, P- ^" x+ ~& m* \5 y&gt; var person2 = new Object()
0 K4 }8 J( U5 C% `&gt; person2.name = "Hello"1 |+ R' p! H7 c+ {. p6 J
'Hello'
/ C# A3 x% q& O& {/ O5 t6 O&gt; person2.age = 20" y. @# T( O4 C8 J8 V
20& I6 P; u$ ?9 U( h
</code></pre>
9 E* z( n" T6 j* G( H<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ B' Y# n- P+ g4 t' v, l1 `<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>6 D3 Z3 m9 T0 `; @# w& c! D
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
! |; j2 Y! j6 |! K- O+ x, u<h3 id="31-window-对象">3.1 window 对象</h3>
! X' ^! {0 l' [3 i. d9 b+ E1 M<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>9 n) U7 |( _: l2 I% L- m2 L
<pre><code class="language-python">//览器窗口的内部高度
+ q; H6 b+ M, v8 m8 S: O0 U" rwindow.innerHeight
0 V( E, o/ y8 U7066 \! x4 p& _5 }! C3 ]6 M4 h
//浏览器窗口的内部宽度% l# |0 i5 s( r8 B1 o9 z! n/ |$ m
window.innerWidth
6 R5 P$ J' m9 O+ p& c1522+ C$ x& U4 o3 y! p
// 打开新窗口
3 g+ C' w- ]6 Fwindow.open('https://www.baidu.com')8 Q* v; L6 G1 z: B1 r. T% F
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}7 v* k! o" V; Y0 `% _
// 关闭当前窗口' F* D  }4 |: \  @4 S# s0 F
window.close()
0 X! X4 t) Z' x, f. q4 Z1 [//  后退一页
. e' r1 x  e+ Jwindow.history.back(), }4 b3 l9 J$ a0 N
// 前进一页
7 d4 l8 u5 D. b" I  w+ P, x. h7 x  dwindow.history.forward() ( L' g! i5 l0 {2 }1 E! C# \, _
//Web浏览器全称
; X/ E/ i. w- i( s& D- Qwindow.navigator.appName
3 Y, k3 g) F- t9 N4 a! I8 T6 ]'Netscape'' V8 i8 A) a% q  [, C4 G
// Web浏览器厂商和版本的详细字符串' ^7 h2 d. k; B' ^1 D! w- \
window.navigator.appVersion  }. F2 m; X3 ~6 ?" }
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 |4 V( C2 P. e// 客户端绝大部分信息
$ C0 l$ H$ U+ D( u, \+ ^- hwindow.navigator.userAgent
& S# H' X, W# X- F$ d# l'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 j0 Q: W5 c) w  ]9 N// 浏览器运行所在的操作系统
7 y8 X; T  ~2 V$ T" zwindow.navigator.platform
' Q/ X, d1 t2 I5 x$ p'Win32'
% v8 f5 Z; M% H/ @% w' a1 ?0 L9 i7 \' T
//  获取URL
/ e2 [) F' X+ s- \window.location.href2 u0 w1 |# E1 v  z$ \7 G
// 跳转到指定页面) r7 e# D7 z& |4 T1 D4 ~
window.location.href='https://www.baidu.com'
5 e! @1 z1 t# f1 q$ I( g; T/ X// 重新加载页面8 G" Y3 T. ]  w. f$ s7 u
window.location.reload() + J/ G4 w  z1 }# e; V4 R" z. H9 B  |
</code></pre># N8 v; t8 E5 G- V0 g  h8 Y
<h3 id="32-弹出框">3.2 弹出框</h3>
& k$ i& m8 [4 v$ y% ^<p>三种消息框:警告框、确认框、提示框。</p>
) t/ \: R  b- `& G, y3 a<h4 id="321-警告框">3.2.1 警告框</h4>; W! Y& d1 [6 K, \- Y
<pre><code class="language-javascript">alert("Hello")
0 n& m! y' R; u  j3 A" E& b</code></pre>
$ h' h" X* q% ]5 }/ x<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>0 z+ I% O+ p+ U, q: t& t
<h4 id="322-确认框">3.2.2 确认框</h4>/ p4 k- M6 H/ H4 |/ _& V( P! T; i9 Q
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>, ~/ B, e4 r0 E% {
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true" }! o9 i& d4 ]; l( u
true
0 n# ^! P5 X4 E8 j. p: A/ s1 A9 G&gt; confirm("你确定吗?")  // 点取消返回false$ \) A& s" [/ a. E; ~0 N' ~; a- s  ]
false
8 Y4 c9 M( c( w, @( t0 J</code></pre>$ P' |! I- f: e
<h4 id="323-提示框">3.2.3 提示框</h4>; Q) I# @9 T# D% t% q
<p><code>prompt("请输入","提示")</code></p># g6 n1 `8 _8 a) H9 _# w# h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>: O5 w: l) c# |
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
. L/ t" f; u" E+ E<p>如果直接点<code>取消</code>后端收到<code>null</code></p>; R* b1 h+ G. Z% D- L+ n; X  n
<h3 id="33-计时相关">3.3 计时相关</h3>3 o, y9 X" ]: _  S% T& ?1 n3 `
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>5 c8 L# r$ B& W$ z( D, A' C
<pre><code class="language-javascript">// 等于3秒钟弹窗
- M3 w1 z6 A, r. hsetTimeout(function(){alert("Hello")}, 3000)  e( ], z- f$ d5 a+ {" G4 S; }$ D
3 e2 f, \4 U1 T  e6 `
var t = setTimeout(function(){alert("Hello")}, 3000)
0 I3 N8 s4 A& c' B! E. b- M# w4 i% G" [' m5 r9 u$ _$ o( l* K
// 取消setTimeout设置
5 l8 {. J' {* Y' vclearTimeout(t)
6 g0 ^' l$ I% ^. z</code></pre>
+ K8 E- Q! z( p<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>8 M, F% c" r0 z1 S
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
, k5 U. k0 {9 u( e- W; w4 |<pre><code class="language-javascript">每三秒弹出 "hello" :) M  k- |6 g8 S# e6 m4 y: v4 F9 |  P6 a) X
setInterval(function(){alert("Hello")},3000);/ ]: Z" I/ w2 f& J$ d/ J
</code></pre>3 W( R2 H, F/ Y' H' h- O) J/ S9 N5 {
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
5 E% ~9 H$ @/ Z* M. n<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
* o! M+ K, Q; f  N/ _+ n# q7 f0 O//取消:8 b& u8 N4 @  v7 ^
clearInterval(t)( a/ v5 D, s$ K# t1 S
</code></pre>* ~$ ~' O, Z0 X4 z! f

, `9 h" M$ k: G& J: z2 z
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-27 11:33 , Processed in 0.072778 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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