飞雪团队

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

前端之JavaScript

[复制链接]

8822

主题

8910

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
28796
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

* P3 v6 H9 c$ M0 f' I3 X3 T, A<h1 id="前端之javascript">前端之JavaScript</h1>5 J3 e$ R3 k: ]- H, _  c" V
<p></p><p></p>
, W. M! t  W6 p" j! f<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
/ M5 e, v, i8 t7 n1 _0 d+ H<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>, G9 }5 B) v( c5 }3 ?8 Y
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>5 A3 _2 Y. E6 I3 l! o, B  |3 H
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
( R/ M, k/ g' I6 A它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
# B& x  e9 p6 q! j<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
) U4 g8 r7 w# f. b<h3 id="21-注释">2.1 注释</h3>
8 ^  T+ x3 ]; w<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
, N8 j% [$ I0 V0 l. Y<pre><code class="language-javascript">// 这是单行注释8 E# o& c4 M  h

0 `. p% h5 d8 N) m  m/*- n9 l) ~7 d1 {
这是多行注释的第一行,
! o( b3 t* [$ W8 a这是第二行。( O8 H2 s# Z( l6 [2 Z6 b8 Q$ V
*/; p4 G3 M0 v3 C: p
</code></pre>- I# P; K8 ]$ s! |
<h3 id="22-变量和常量">2.2 变量和常量</h3>  F) o* n% I8 m, @
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
: l) J- n# g7 _! a* U<ul>) [& m4 |4 Q9 p
<li>变量必须以字母开头</li>
  D$ a( ?$ Q. L# J<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
$ q$ e% V" L; R3 I4 Y6 c<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
9 j) y2 M" I) q) K( p7 K9 ?/ N</ul>( w$ f1 Q. Q* {1 e0 `( ~) I
<p><code>var</code>定义的都为全局变量</p>' o) W. q7 Q& N
<p><code>let</code>可以声明局部变量</p>; X  u& b& k' X4 |. ?
<p><strong>声明变量:</strong></p>5 S; @2 y" R2 G- X3 K, |
<pre><code class="language-javascript">// 定义单个变量! j' b7 x. d9 h9 d1 @
&gt; var name
/ \9 G0 b- f6 s2 w/ M' h2 ]; H&gt; name = 'Hans') [1 ]# T5 C" r0 Y6 V, b
//定义并赋值
7 \4 b8 m) N- ?0 V' }6 U$ [$ Q4 [  ]&gt; var name = 'Hans'9 _% z! p# F% o/ x2 A! G
&gt; name
( {. w# T5 ^& {: s- p% F+ g'Hans'
: s* _! F/ ^. e$ P% [& S7 |/ v+ e1 t+ Y: F8 }( _
// 定义多个变量! ?0 x* Z* ]; _# H0 a' ?
&gt; var name = "Hans", age = 18
8 d$ [. |( i+ n&gt; name! \# h7 H+ X) [4 Z+ c/ }6 \2 X
'Hans'
+ @- G, Y% l3 H! v  G" O&gt; age$ r: D% h6 ^+ H4 \, N5 q) s2 z
18+ `  [1 `' t3 }

) {8 p; @8 F7 A+ j% n2 T//多行使用反引号`` 类型python中的三引号; j1 N- Y4 t4 S3 Y8 d
&gt; var text = `A young idler,
* `& R$ f' m4 I2 V2 q0 ]an old beggar`) Y* @. U# \5 n* i) \
&gt; text
) j7 |( j) }2 S'A young idler,\nan old beggar'
1 B6 P2 a+ l, @3 O: ?</code></pre>$ ^3 E  }! G, _
<p><strong>声明常量:</strong></p>
$ E/ O+ \/ C* v; e- L1 j<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
; r2 q9 j! q' {/ i4 r! j<pre><code class="language-javascript">&gt; const pi = 3.14% V0 R' }2 P  o; ?& g
&gt; pi+ C3 |) T' l5 e4 A4 g
3.14
3 s- x* }- F$ m# z7 o( O& N&gt;  pi = 3.013 T# K9 D) V- Z5 N( C! p, ~
Uncaught TypeError: Assignment to constant variable.
) ]9 F5 T4 J0 _    at &lt;anonymous&gt;:1:4
& q+ F' C' x1 L) u. ^
$ H% A, ^( o) P3 o; a: b</code></pre>' K" S; S+ ^, A" r1 j: K- f$ x
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
. _* I: H% K  ^  l7 \<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 K; p) L2 V4 D<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
" q- R7 K: s  o<h4 id="231-number类型">2.3.1 Number类型</h4>
) R/ O9 L  Z+ I! n0 J- R. a6 b<pre><code class="language-javascript">&gt; var a = 5
; \' R0 X  G" I) ~* V' b&gt; typeof a   //查看变量的类型  % J. k0 O: G' l' W3 l& q3 W
number. k0 j' r. K! `! o. \9 H- \( J

& ]& `- w8 l1 c/ e, k&gt; var b = 1.3
- I( w4 x( C+ L9 K% T8 y" l&gt; typeof b
: T/ y1 |' G  Q9 i2 A5 Wnumber9 C! |- c' O; h( D  [
8 E, o" ]7 d( }: p) Z# _- ~7 B. b
// 不管整型还是浮点型打开出来的结果都是number类型
* \5 p, O( ]& A( g3 G" G# c) ^
" m! E5 a, d- Z3 R/*% W" S, v9 Y% ^) |
NaN:Not A Number/ T, f# J. n; T) Z% W
NaN属于数值类型 表示的意思是 不是一个数字
8 ]* u1 ]; H9 r3 O, f+ @*/
7 W- z) P' }+ w0 k. ]) h1 m) _' H7 B6 u
parseInt('2345')  // 转整型/ c/ ]5 a% A; H. D* n; I
2345
1 F) x, G; Z0 d/ h) N' m3 Z2 h/ Z+ EparseInt('2345.5')
) U, t0 n) R8 B! R2345
) {$ d% x0 a$ @- X" z6 O/ g7 |parseFloat('2345.5') // 转浮点型& Q) u' T( A7 L- L. U/ H
2345.5
; ?6 A. q. f- Y8 y3 e! r) D' r% OparseFloat('ABC')7 @+ S; c* o/ {  j* X
NaN, d. U2 i/ E3 N% F  R* {4 m
parseInt('abc')8 ^0 n& K: K- a( I. E) \. F
NaN
1 q1 a2 h2 P+ f' C; T# i</code></pre>
& v+ I' P1 a( I8 Y$ d6 C<h4 id="232-string类型">2.3.2 String类型</h4>
$ [9 O, M  z0 ^& H9 p; B, n<pre><code class="language-javascript">&gt; var name = 'Hans') M. G& }- S3 ?- \/ |- }* w: v) _! c
&gt; typeof name+ J! a4 h/ H* L# V9 u& e+ [7 p
'string'" B4 h; R0 ~2 \+ z

$ k. s8 ^4 d2 {7 [% z: ?//常用方法1 c5 `. i' V) L
// 变量值长度4 r) F5 x) v: {+ o' Y. y
&gt; name.length
2 k) l0 }/ X0 @$ A- e4
) ~! e- r1 ^; [' J# e2 o7 m) }// trim() 移除空白9 U, E& ^% g* U5 f2 b
&gt; var a = '    ABC    '" G6 A4 x' D+ C
&gt; a
6 x( w- W9 P# y: l! B- c% @'    ABC    '
/ I0 V# B6 x! x. Q2 V6 v, A4 X&gt; a.trim()
: r0 Q7 Z; ]; A( g6 S'ABC'* `# f  X& N2 [% m; s
//移除左边的空白+ q2 O. K$ M( Z: n7 M7 }
&gt; a.trimLeft(), v! t: }- _8 P) W4 s- p! ~
'ABC    '! j; U' I( k, l& o
//移除右边的空白
/ L+ m. M! U! {  }0 Y" k8 Q&gt; a.trimRight()( u; M5 Z" o- J6 U
'    ABC'% C0 T1 ?0 I9 M( q' t

1 I6 R5 y; J% E: O. Q! L$ H+ B: P+ I( q//返回第n个字符,从0开始
$ [8 c, s8 M/ Z! r, Y) _  q, F0 X&gt; name7 J. J( A3 t  J8 C  t. W
'Hans'
. x" {5 R& u( M9 ^$ t$ R. ?&gt; name.charAt(3)
0 ]" D2 c: j2 H1 {'s'
! A, w7 u7 j7 t0 s9 \9 U&gt; name.charAt()
; \* H$ m! X0 v2 w! b1 v'H'
/ Z6 C. Y% B% i6 M( l' u&gt; name.charAt(1)
7 F5 K4 P% p- C% y6 \+ }3 W'a'
  n6 E. Z( i$ p' Y7 j: T
+ j- U& L2 V3 ~$ n; j4 q1 N$ h// 在javascript中推荐使用加号(+)拼接
. m$ T0 c% r/ J3 S% n/ Z/ y&gt; name
! _1 D3 x) z8 v: W, C# I8 v: F'Hans'7 [& X* f1 `  O) H( ~$ p
&gt; a
9 R2 g( w, x2 N6 ^  p0 F% C, y- Z5 E'    ABC    '1 a; i8 }; ]& z6 ]4 w
&gt; name + a% \# g- v, _' R+ @7 ^5 O
'Hans    ABC    '6 l; ?6 V$ W1 n+ V4 S$ X* I) j
// 使用concat拼接
( ~. E3 A, _: A( {3 }&gt; name.concat(a)
8 W/ d9 Q( b; t$ z# A0 F$ B0 y" l'Hans    ABC    ': ?3 P, a3 L" x# E  Q& e
+ X3 N/ W/ ?& p7 @; c9 w/ Q4 V
//indexOf(substring, start)子序列位置
1 @/ O1 C2 Q! Q9 Q
( g5 F) M) T% L&gt; text2 ~! a" Y' y5 a' w2 y; U
'A young idler,\nan old beggar'
+ D+ H" F5 i' O, u8 d&gt; text.indexOf('young',0)
$ J3 P* w. Q% [4 p( _- q' f2
+ k) \6 t2 O6 I0 Y  c, `' ~* H% p" J' x) n/ n3 b5 z( Y# Q
//.substring(from, to)        根据索引获取子序列
# v0 [, {' J1 \( y8 n: G. [+ ^&gt; text.substring(0,)% c  J5 S" N2 l: A+ w
'A young idler,\nan old beggar'
+ t' F0 O4 i/ F2 }&gt; text.substring(0,10)9 t& e, p  f2 H( j5 U) E" \
'A young id'
8 ^9 T. I" P2 `4 t! e2 n
) L! }8 C4 Z' ?# l1 Q; w6 C3 l// .slice(start, end)        切片, 从0开始顾头不顾尾
5 N7 d0 L' c$ j: @+ |&gt; name.slice(0,3)
& t, I8 W2 A7 J, l( {, x'Han'& v6 k" v: r) x. V* E: T- S3 ~

, ~" @  X9 }; g8 n) W0 O9 e/ o3 `// 转小写2 V) l' @% C4 V2 n" X0 G5 u
&gt; name
) D# @) h) Q* |! D' U9 L4 n  t* Z'Hans'
' T( q* L* v0 @) f  R2 U&gt; name.toLowerCase()
  W9 B" c# d( l. D* c! Z! A8 F3 H'hans'
! Q7 S1 _3 E  j. |! A2 E// 转大写. [9 \7 H  w4 `" c/ E# ]
&gt; name.toUpperCase()5 h- g* d- ]2 ^7 D; U
'HANS'
' i2 F$ [; B7 `& r2 S( Z* l* }
# C8 H( F  ~+ P( g& R# q// 分隔
+ p  a/ b, Y, s1 U& D& ^0 w&gt; name0 g) j' y& N& A
'Hans'4 @4 G9 ~  N  B) C& R# Q
&gt; name.split('a')
% V; [' }% J6 p/ @  {! d+ p+ ~: d(2)&nbsp;['H', 'ns']. ]9 E2 A# B1 a" x0 {8 w
</code></pre>
2 u3 T% d' ]6 z6 B; q<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>3 Q+ H1 v+ @6 p) f; Q' ]
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
) u, n( Z7 N: W3 C" |9 h3 ?<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>( h, Q+ u, k! W5 X; N7 _
<p><strong>null和undefined</strong></p>
. x7 b4 J% n% I, ^8 k' q<ul>. e) _7 j3 K7 v' l
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
5 P% I1 Y% [/ A5 a<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>, W, b" G- ]. x. ^; b
</ul>% F% L' O) y7 g- D2 @
<h4 id="234-array数组">2.3.4 Array数组</h4>
* a- X& Y- k) U3 z" q0 a<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
# T4 X/ [; Z" N5 C<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
1 |0 Z/ h! Y1 h& K; B* b5 M&gt; array1
! A4 W6 n+ ]& X5 L(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 t# B- ?& y0 z4 T/ ?, y! Y
&gt; console.log(array1[2])  //console.log打印类似python中的print
* x6 C5 p1 {- s: c7 Z$ @6 ~34 ]: e$ H% n1 W' X" B7 x4 d
// length元素个数7 P) f7 E1 S- }3 A( u" A+ L' ~
&gt; array1.length
9 Z, g% I" a4 A9 m63 x8 D: u3 H4 Y7 F7 f; {9 C
// 在尾部增加元素,类型append% l. g/ s1 _6 v# V' V
&gt; array1.push('D')# R8 z- j1 P, M, N: m
72 T! I3 x5 X" y+ w& |! b
&gt; array1
6 c( e# E* c+ R+ N4 t(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
2 U" r% w$ N8 X7 R// 在头部增加元素+ O# r+ d$ Q; h  q  v. b
&gt; array1.unshift(0)0 j2 _) v, ~0 D3 ?
8+ S1 q8 A% L4 I8 b' N
&gt; array1
4 a1 R8 K$ y  d2 L(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']. w4 j3 f. Z" d2 ^( ?

% t( H. }% w% _, ?! ^//取最后一个元素" E; w2 M3 t0 r6 z5 o# n. |2 k. O
&gt; array1.pop()  Y' P! r: H9 {
'D'( g/ c" U# p" \. I) J
&gt; array17 @+ N/ _  p5 ~" {( [/ f5 h6 E
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']$ @  L6 D& |; L
//取头部元素  W/ |4 v& Q1 H3 e5 P' y/ O
&gt; array1.shift()
! ?' W* v7 y' W3 ~0
4 J( G* N8 L" `$ x7 s&gt; array1
5 j) `" R5 N3 H+ ^1 T+ n7 O- @(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. K: ]1 z. D6 ~
# i6 ?3 t5 ]* a: ]
//切片, 从0开始顾头不顾尾5 V% h0 l; a( k* D/ {6 d9 m" g' B
&gt; array1.slice(3,6)
1 g% S/ r2 W/ _2 L: v# [* d(3)&nbsp;['a', 'b', 'c']
7 A: p, E& U$ V0 p( T$ l( N) n7 ?// 反转
  H/ l( m( R6 m2 i&gt; array1.reverse()+ U# `, D9 P0 {
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]3 C0 V8 j, {( J; P' |. B: H
// 将数组元素连接成字符串' b) P& U7 R' U( v! X
&gt; array1.join() // 什么不都写默认使用逗号分隔
. e* i0 \1 Y8 @. d3 Q) b7 N, ?2 O'c,b,a,3,2,1'7 }6 Y" M9 M% S9 X" k% k
&gt; array1.join('')! _' @/ g, d1 a5 ~4 s5 h6 S. \
'cba321'
5 f5 z/ {+ R2 d- I&gt; array1.join('|')
2 r; N8 M) g$ J) D8 h+ c'c|b|a|3|2|1'
* @- T$ Q; Z  P8 |3 e) J) o. S0 R; ?+ C2 o2 [
// 连接数组
5 X0 a' M- F* G# ~4 b/ b- @- i' `&gt; var array2 = ['A','B','C']
: T/ v5 I! g5 x: a3 ]& z$ d7 S: r&gt; array1.concat(array2)1 \: g; ~" b) u& b" |
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
( G5 T/ C" y, d1 x* h5 Z
1 J) c; y) g; E// 排序
+ ~3 Q; R7 a) d& l& e. N&gt; array1.sort()
4 ^4 J8 f9 f( J" O0 \(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 B& x5 R0 X8 d9 n' S! A* O- m* F/ Z" `8 h# R; O
// 删除元素,并可以向数据组中添加新元素(可选); J8 O1 ^: p2 I0 `% y
&gt; array1.splice(3,3)  // 删除元素7 I, h: X% L% R% {4 t
(3)&nbsp;['a', 'b', 'c']# D) D8 j$ Y' l1 n! U7 v
&gt; array1
+ |! d; L7 M# U$ J# v) Y9 S9 q9 I(3)&nbsp;[1, 2, 3]& n" E  \0 I* @" m2 K
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
& o) A% \; r: ?' K* F1 g8 T[]
. j" M( i. I& F( A9 C" S7 w&gt; array1* L" i# D( M1 d: N3 b
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']/ |9 W, M/ P# K
9 G* o" b6 Q5 A
/** C6 q# J. Z5 s. `
splice(index,howmany,item1,.....,itemX)4 s$ }  P; t9 H$ i2 F8 s% f7 p2 Q; U
index:必需,必须是数字。规定从何处添加/删除元素。
. a) ?+ V: Y$ [* W4 m1 ~howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
( r& d1 d* k4 p$ E8 l% {) citem1, ..., itemX        可选。要添加到数组的新元素" S. r0 U% y8 J& a
*/. a3 G, F  N5 s% M5 O

# O' `: k# o- `// forEach()        将数组的每个元素传递给回调函数
! I, Z" @; h0 E: |&gt; array1.forEach(function test(n){console.log(n)})
5 k2 x4 G& _7 N# \# N" C 1
5 k; C* Q; z7 k  N5 c, T 20 T# F* G3 H# n5 ?1 d
3
( c% Q6 ~' M3 _) i A0 }/ R# h- T8 \
B) _$ @8 q6 c! D+ x) o! k" i
C* A1 a. ~5 I; j% J: J  e* o+ J; {
// 返回一个数组元素调用函数处理后的值的新数组
$ z1 u% o" d, [7 d$ C&gt; array1.map(function(value){return value +1})
+ p3 C# k! T  f0 a/ M(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']2 E6 Z5 H& Q( P. L. ]$ m1 h
</code></pre>7 H- ?4 p  x- q9 D
<h3 id="24-运算符">2.4 运算符</h3>' I( o2 H% t( G1 M' T" P1 _
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>9 D* v/ @0 q1 a6 j6 F
<p><code>+ - * / % ++ --</code></p>2 q0 v5 x" X* x: c; c: S. e
<pre><code class="language-javascript">&gt; var a = 6
4 K! R8 p! j& ]3 ~&gt; var b = 3% d" u7 i) f' x$ x
// 加
8 O. p' a/ j7 z- l: v&gt; a + b
. Z+ b2 [; I* i& x. I$ t! K. y' Z9
3 F( J8 @, G4 b; Q3 P6 }3 q7 W( Y// 减
6 s4 M+ u. U* t0 Y7 Z&gt; a - b9 v4 q" d0 u6 ]1 T; ]3 A
3
0 o2 Y  o- S5 X// 乘
3 i" s9 s2 X7 j# e# p&gt; a * b
7 j7 i5 P( q' Y# |18& u7 a$ w, w( x3 n: J
// 除
# c1 h: \/ |3 C% |&gt; a / b5 _$ }2 \* p0 S: q- [
2
, U' c( z( ~$ @* p( J& x// 取模(取余); }1 \8 Q' r, w/ _$ F) |# J+ Y
&gt; a % b4 j$ O" w, f5 O* Q, l
0& |- M: @$ F0 r* y) a
// 自增1(先赋值再增1)6 l% _3 m3 O1 V% [
&gt; a++; I- |+ ^% n6 P. v+ m7 w' i! z
6, H0 r7 G* s5 o; ?
&gt; a% C* A! i) z2 M2 y. d8 D4 b+ q
7
8 Q3 ]3 V( B) G// 自减1(先赋值再减1)$ r/ h" x( P! L, ]7 v  x  H; Z
&gt; a--* ]* o& P" a0 v: o  |9 l" `
78 J- R# A  Y8 _! O' B# w* N2 N8 }4 R' g
&gt; a
7 ]1 S4 a) q, b; r6
6 G- b& A4 y8 X// 自增1(先增1再赋值)
; b5 Z" L- ]7 P&gt; ++a) @8 K; h) ?5 w% h9 N
7" A+ ~- U- w* h3 f8 j1 ^
// 自减1(先减1再赋值)
: R6 T2 L* F% |6 R&gt; --a: R, O- W8 D& g$ ~1 `: b
6! r7 M6 \. v2 \1 R1 X1 I7 I
&gt; a$ B$ w1 H% R2 ^; G6 e
6( g/ w( c2 I" C) B8 H

7 Z& C. z# w/ M6 b//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
& S1 R$ c# G" t+ C4 b, f4 b</code></pre>
. S, c  o0 S# C* r& I<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
( u3 l- |% f+ n$ d, l<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p># x: H* q% A/ ~8 B7 H# ~  W5 S
<pre><code class="language-javascript">// 大于
. d* q# w5 A& r' @5 B& ]' m&gt; a &gt; b$ K- N& k2 M- o8 r7 l
true- U- X  S: s+ U4 {; c, D$ S
// 大于等于
+ O7 F, q0 E8 j+ r* j&gt; a &gt;= b
, C3 v5 g- K! T* d  z( ^true
( W( u: Q) F  X  g/ ^// 小于
+ K0 `: W2 H1 G# u$ q; X&gt; a &lt; b; f1 l8 y8 B" o. j/ H
false
* S$ r" O) o  d// 小于等于
6 O1 E9 s& u( B. I5 z! L( w, `&gt; a &lt;= b4 X1 h3 P" }, T8 M; }" |: @* U
false0 O& v  ]: D; P. w6 n
// 弱不等于
, z& T% o& [0 [7 ]% V# k&gt; a != b' k2 `4 Q" d6 V$ S# \
true- K. n  D7 `4 H2 |2 Q. t9 r5 F# p
// 弱等于3 J/ O+ i9 T! L4 ^5 T3 R" A
&gt; 1 == '1'/ U& h1 J' j' h7 A9 O
true
$ ~+ T3 j! y" |) T) m// 强等于9 m, n) S- z! C& e1 z. w
&gt; 1 === '1'! x) W6 j" N" v( ?" N5 P( w
false
  F% d6 _$ e, c) D, N// 强不等于2 V3 T6 r' [. A* ]6 n
&gt; 1 !== '1'' @/ i% Q1 v* B2 d+ G3 t6 y- f
true
0 d8 w9 D* y2 ?- L, x
. `7 @/ J! w1 J/ q2 W: \) t0 x/*
" W9 C: [, ~7 rJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误" X+ S% z* C3 t- b
*/
+ L) {2 D3 Q6 H</code></pre>* @* R4 X! d1 B1 Q
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>' z: L6 N3 H) }/ E  R  k
<p><code>&amp;&amp; || !</code></p>% w7 P( ^8 T8 C8 z
<pre><code class="language-javascript">&amp;&amp; 与
6 y3 G$ g1 e2 ~" a: h, i9 }|| or
6 ^4 m4 ~  w9 o6 [$ A2 F# F! 非
/ a8 g+ s  \8 E  @</code></pre>/ t. d7 N5 m6 t! S3 X
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>( z* K/ \* P! a. I
<p><code>= += -= *= /=</code></p>. f# J% o  m( p/ h9 ^3 r
<pre><code class="language-javascript">// 赋值8 z- S" z4 E" k: o# W. f4 h
&gt; var x = 3
/ l: f& C3 Q$ T) B// 加等于% b- q$ y' P% Y, a- e. P# P
&gt; x += 26 s- i& D0 u" D) g7 Q0 ^
5
- @+ p, e; Q  L/ N/ V* a3 v- W// 减等于
# c4 S; `' T/ f$ m1 Y. |$ y&gt; x -= 1! C) Z% H. G6 h+ w/ E5 `
4% ]9 h' g7 ]' z
// 乘等于
! I/ C. \5 a' R+ ^4 e- n&gt; x *= 2
1 k3 L0 [" g; l- i82 R5 A# Y3 H1 S- m* q: U* i
// 除等于
9 ^$ U' C. K; G( N% b&gt; x /= 23 M, k( }: u: l" T4 S+ e1 m. b
4
1 s2 U  h( Y; N7 z0 o; |</code></pre>4 d0 c9 V) _& L1 w3 g
<h3 id="25-流程控制">2.5 流程控制</h3>* @7 L) F6 v6 I
<h4 id="251-if">2.5.1 if</h4>4 z3 c. U( r" {7 z0 L
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
2 L: s& j* L8 F1 m+ P$ K
  V; A8 t7 V: H2 D5 y6 ]&gt; var x = 3
& `* g, y# ~+ f0 o, N# D0 E&gt; if (x &gt; 2){console.log("OK")}
9 z9 H0 D9 d# F! c9 d2 p OK3 A+ `$ u- v! r4 L: v+ A# p$ d( s

2 a! J8 ^6 k* |2 e' j* b5 Z2, if(条件){条件成立执行代码} 2 h( C# P) e- ?, e
        else{条件不成立执行代码}2 Y& C4 Y' B7 r$ F$ W5 d" o9 x6 ?. g* m

- k6 ]$ h  Q8 ~&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
8 @% e* e8 p$ O+ `0 G+ _% Y. ['NO'( Q. D! F' Q3 \: P; Y

3 W" q7 k% u7 W. Q3, if(条件1){条件1成立执行代码}
0 s# t/ n8 J8 D% ?. i% {        else if(条件2){条件2成立执行代码}0 {. ^! q( O5 z2 J5 j
    else{上面条件都不成立执行代码}1 n9 G0 J6 s  a8 b/ _

0 ^9 K' ^3 x; ]5 C1 ^3 ]&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
  g* D' J: ~" D+ W Ha
: z# i+ l5 R3 q% e6 P! _9 `</code></pre>
9 C$ M/ j+ S$ _<h4 id="252-switch">2.5.2 switch</h4>
. j' H8 [/ A1 S) o- V: z; Q% {<pre><code class="language-javascript">var day = new Date().getDay();
6 \4 t6 p7 E4 R% Y2 |. g1 r% xswitch (day) {3 |% p9 ~+ n* b* Z
  case 0:
8 c" S9 \1 Z; T' h) o# Q  e# ?  console.log("Sunday");
! e# r7 F3 }9 o$ B6 m# Y% S  break;
" F3 `2 ^# e: `5 m# f  case 1:
" I1 a2 Q3 L3 y" h4 x( G6 C  console.log("Monday");3 v; t5 M, E# X" X$ w: |; H* i# D
  break;
: ^1 B% B: L) j* B( u4 p% Pdefault:
/ R* _% p) H6 x7 Y2 `" g, {7 ^( e) p  console.log("不在范围")
) [% ~  Q+ k3 h# q' S}* j8 k0 o4 t1 r- D. U
不在范围7 Z9 P3 Z' S$ b3 T) g' q9 b
</code></pre>
1 ^! }: d* E2 U<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
/ ?" j: h' Z) _0 t5 ?<h4 id="253-for">2.5.3 for</h4>* r8 a9 @2 D, r+ \( R2 w, [
<pre><code class="language-python">// for 循环
; j/ ]5 b4 a& x6 w4 h        for(起始值;循环条件;每次循环后执行的操作){: m* z  w9 h) v2 c  M. A, A6 m
        for循环体代码
3 M2 P, ]1 E4 t  d8 k    }
& E: D' g; c. N- p: Y
2 e* \% @$ X  J3 }+ {4 |* lfor (var i = 0; i&lt;10; i++){9 P0 k* @, n8 w8 F, t3 o5 b! s
    console.log(i); D! S6 {$ N% c
}" z$ L4 n0 X* |
        0
( F# [* B/ Q* L+ s1 m8 k8 D        1
1 C  A7 i3 K' s: C9 `        2
3 P. b; h9 I/ E; b        3
! y; u  ~9 |6 H" F7 Q3 ?- X        4
/ p9 ]' @8 Z( C6 X( Y        5
3 X* F1 M! E% F1 N2 W% b) Q( g        6
, ]* u2 [& _3 z6 D9 j* Z        7
& C, ]: f6 k. L4 S4 {6 ]& t" d        87 m8 A5 I; y3 `7 a$ M0 a8 f; K
        9
, ?0 c5 D+ L5 {# C4 N9 F2 K" |</code></pre>, G) w0 s4 O2 t, i' z$ y
<h4 id="254-while">2.5.4 while</h4>
( p/ A8 R' @0 A( T) P/ _<pre><code class="language-javascript">// while 循环. q% }" ~* w% |# o- }0 K8 @2 P% m* z
        while(循环条件){% O% M( l" |' Y: O3 q, l, G  ^
        循环体代码1 D0 L9 E4 O" o( S4 X( U
    }
5 O6 |( j: T, u! ^, |$ X" a8 T. a, o+ A; l
&gt; var i = 0
0 R/ k0 H4 f- ~&gt; while(i&lt;10){! [) ~6 N, x6 k9 X% ]- S5 k1 z
    console.log(i)# J6 ~3 E/ Y5 M! S& ~- W9 [
    i++
) f7 t# t' V8 X}
; J+ b& [, m; R5 A4 M2 H 02 q- V! {. O1 a# j% k
1
! ^; E. r/ h+ ~, i: v7 K% h2 i) t3 i 2( y4 U( O2 O8 W4 y
3
& D* U9 W3 y: I2 I$ h3 x1 \ 4* q/ s0 v$ a0 t4 Q$ S5 L4 S" [
5( b( C% F, Z6 |1 V+ }% X/ T- i0 R
6; J' h$ b% j% w; H
79 {5 f' L. G, R
8
) K$ U! p6 H" G% }$ H' a! F 9; A% n! g) u* X/ A
</code></pre>1 W9 d$ A, }: a6 Q$ Z3 C. X0 ?
<h4 id="255-break和continue">2.5.5 break和continue</h4>
$ p6 b6 t- s5 {. u/ }<pre><code class="language-javascript">// break
6 a9 u! b% i" Rfor (var i = 0; i&lt;10; i++){; H+ L- W. d" _
    if (i == 5){break}! @! D" u: y% Z* n
    console.log(i)
' n# H: Y$ W4 \" H) D- i# }1 x. a}0 P  y6 H( K2 t7 ]* i  q8 z6 H8 x6 {
0
8 ?8 G# U- Q+ X1 x& `) d, x 1( B5 A3 R8 z* z  d- q& N$ o
2
% k5 R, y; {' ]$ y: z( `, x' j0 C 3, Y9 ^: X7 F/ B0 _
4
6 Y* X$ \% m- R6 u" s& @5 v// continue
' o3 _3 X9 u/ s' _% m2 hfor (var i = 0; i&lt;10; i++){
  {8 V# D1 v3 m" t5 o    if (i == 5){continue}
8 m. ]1 o: Q; B& `9 a9 X    console.log(i)
3 q; q/ W) C& k& o' l' G+ P}
# S2 p) b! q' k 0
9 |2 x" c/ h" j  T 18 N- s0 b7 E* c* ?2 o
2- e/ z: K& f; p' Z4 P
3
: i- R* B( K0 y4 T! ^5 L) p% j 4
8 @( H# R/ L5 O8 O/ j 6
, \1 s6 G! k" X( I, \ 72 b! V' X+ C7 ?) ~, E$ ~
8$ X9 B& _! R7 T/ d
9( h! ~, j+ J& e. d% |0 b

2 K+ [/ B9 X/ i4 Z! \4 C</code></pre>
: M) m; a1 h# |<h3 id="26-三元运算">2.6 三元运算</h3>3 ^" b/ v+ j. c, O+ e
<pre><code class="language-javascript">&gt; a
6 o# W* G# n' \3 w- |+ K6
3 W$ n/ M* c( `3 g9 J&gt; b
& W1 U. P0 a% s* J6 [4 Y+ {3
+ J" n% V1 j" `3 J% w
- B4 [0 H3 u7 q# s& N, X: E. I* t& A//条件成立c为a的值,不成立c为b的值  q& t: o1 N" d0 Q" v/ c
&gt; var c = a &gt; b ? a : b
" Z# d3 _3 V: I  w&gt; c
8 X4 n# F0 I; u$ N6
; d- y0 U, S7 {3 C$ N6 A/ ]
- S( y+ w1 \: K3 p// 三元运算可以嵌套8 ?, [, b$ p- F- W
</code></pre>
: [5 g0 J8 n) T. b' O<h3 id="27-函数">2.7 函数</h3>$ n* C( z( B. c* w% V) \+ W( M
<pre><code class="language-javascript">1. 普通函数
7 V) i- ?* t1 L&gt; function foo1(){
- T3 [! T% q" d' W; ~    console.log("Hi"); R! l/ Q2 M" f' G4 K" p1 g9 [
}
4 A* V7 a( D3 j0 g) }; i$ @5 M" k8 _. s* v% |
&gt; foo1()
( S# z1 Z4 M# }3 ^8 p/ e3 H# Q        Hi0 w6 i5 Z$ x  a; v( M7 }9 O: T* C, K: Z
2. 带参数函数
+ o: C$ e: V2 B& t+ a/ K; j&gt; function foo1(name){0 T* Z* i" O/ j( ?9 w& C
console.log("Hi",name)/ K6 _1 m7 u3 |0 {' y# z
}5 e) Z# N2 @0 D* U) s7 p8 K5 `; c

% `7 O9 }6 |3 A3 z- _  O( V&gt; foo1("Hans")- x9 `3 {* b" a8 U! U4 P
Hi Hans
% E0 }; C# ]6 p7 o1 \3 C+ I- V: k
$ A$ g2 l  r. m& k&gt; var name = "Hello"- d* a; s' T( r( j7 o3 H1 `0 b$ c
&gt; foo1(name): k' N. z& V% P  Y; [' ?( z
Hi Hello0 q' Y+ s7 _  r3 V1 ^6 Z

9 d$ v+ n4 I  p) V  C3. 带返回值函数
/ }( I: r8 X% _. ?! q$ X: f" v- }1 a&gt; function foo1(a,b){$ [# N+ ^5 m( t
        return a + b   
2 H# o1 o+ m% W& w5 p& j}
6 V. U4 U7 B9 v* N8 X&gt; foo1(1,2)
, W& \+ T) s! C4 u& U8 k3  [3 y* a& T4 U& M, ]
&gt; var a = foo1(10,20)  //接受函数返回值
& t  v9 j- j' K$ W- X) Y+ A# K& z&gt; a% q; O9 Y( r* L! F
30
6 B+ ]8 c1 y5 n* [5 J% `" c1 W+ g  K' J, P+ ~8 k3 E2 y
4. 匿名函数' l/ c9 p0 C! _& R
&gt; var sum = function(a, b){; b" {5 H3 ^. [: Z" \
  return a + b;. [. x$ S* o6 ?3 d
}
: ~5 Z, R0 U/ @+ L; Z&gt; sum(1,2)0 t* ^. H3 |7 a4 `( ?
3/ s2 _- C# f$ |9 _

) ]8 l+ w4 G7 N& ^/ h- x6 {/ o// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
  J/ ^! i# u3 i% a&gt; (function(a, b){
, b1 e+ c5 ?, f" K3 S  return a + b7 C$ I2 w- p& |& b* c
})(10, 20)
! W6 o  T' M7 h2 w9 G' p# s30
0 b, B  x. p- p2 E7 }3 Y% D# v9 B8 A' w
5. 闭包函数
2 L6 ~: k* S" w3 H2 r% u3 C// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: p2 G1 Y0 a7 r& H
var city = "BJ"
: T; }: @$ A: H3 a" [2 z- efunction f(){
9 e7 G+ u6 |9 @. L/ ^: q! F    var city = "SH"
; e- F8 ^1 V; w" w1 i    function inner(){+ l4 `  z) B+ J/ m1 Z$ n6 ~& k
        console.log(city)
$ \) @8 K8 m) F) B/ p! c    }
' {1 z9 {5 K0 ~4 Z# c1 c# o1 ?0 Z    return inner
! x- h: o; @+ P}
. M5 M1 u& l  c# ], Y4 x! Q, G/ rvar ret = f(). j" h$ F! f5 m- ~9 O
ret()
& b/ W( h* r; T; s7 C  y/ ?8 y执行结果:
5 {, d7 L, Z0 R: r" u/ o9 f4 RSH
2 h# V5 p0 m) g( P. b, C* F  h
) c) @" o3 x3 m% k9 v- I" O</code></pre>- g  G* D: m" Q5 s7 Z0 [. ~; L
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
: m7 c* g4 N8 q" b% M& c# `- A<pre><code class="language-javascript">var f = v =&gt; v;
5 e  ?/ C( I/ a2 @4 y' J// 等同于. r) A7 J- t1 ^4 S4 X
var f = function(v){" G# v+ Z- I+ u7 ^- D' R" \/ B# i
  return v;+ D. x# v1 q/ Q" S
}
' P" r0 t. H9 Y( ?0 _</code></pre>  w/ e- D/ L4 z; b! n3 n3 E. w
<p><code>arguments</code>参数 可以获取传入的所有数据</p>, N' {+ r# M( ^* W, I, U: h
<pre><code class="language-javascript">function foo1(a,b){
7 v2 C( [# E. o& S1 `0 z2 ~    console.log(arguments.length)  //参数的个数 % U9 L7 K% C9 d3 x: A9 j3 l. O
    console.log(arguments[0]) // 第一个参数的值
* Z$ Q. @! W! }1 S# K        return a + b   $ F. y/ y# s4 F6 E2 h5 s
}, X2 {) K8 r) _7 i
foo1(10,20)
' M/ e: D8 ^% U3 l结果:1 k7 D; R4 N; }/ R5 j- ]6 r( S
2          //参数的个数 ! z4 M% m" f8 {( f
10        // 第一个参数的值0 J/ G7 t% {8 b; N! G0 B" k9 J" z4 {2 y
30        // 返回相加的结果& u0 [8 i. c, `/ ], P# ]
</code></pre>
2 }8 P0 m6 N6 I7 W! r2 f<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
7 h  X; Q/ C! i' s<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>4 D' e2 F( I& n1 O  o. B) t
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
' A2 k* A( t* _. e# ~<h4 id="281-date对象">2.8.1 Date对象</h4>2 R- G$ w5 b' T! f
<pre><code class="language-javascript">&gt; var data_test = new Date()
8 J& N4 {9 }1 {4 ~2 b&gt; data_test- S" z) ~* A3 i8 s! C
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  I" `6 `5 g$ ]+ V9 `; L' a
&gt; data_test.toLocaleString()/ o* s4 U2 s  o6 z8 e4 X
'2022/2/11 下午9:44:43'
1 V4 F0 K7 ~7 ]7 d
7 ]; ]2 {3 e9 Z4 k! Z+ |&gt; data_test.toLocaleDateString()
: O/ G) ?+ G$ O* o/ I4 T* U4 L'2022/2/11'
$ W5 y" v, x! x  q2 {7 K. o( v8 k
&gt; var data_test2  = new Date("2022/2/11 9:44:43")5 w. S9 E/ A7 C7 I5 `0 a* V0 d
&gt; data_test2.toLocaleString()$ q) u( G; Y9 Y9 `' u5 U: ]
'2022/2/11 上午9:44:43'. u$ \: r% ^- p* `" a4 A" K) t- M8 J

8 |3 J3 A/ G6 _4 {# P5 E7 \  d// 获取当前几号
6 S, H; `5 F5 \- w/ z% K* F4 f&gt; data_test.getDate()2 W" H  T9 I& a# y
11
9 o5 \/ P. h7 S8 z  X" }// 获取星期几,数字表示
. A  w& d' O- n! q&gt; data_test.getDay()  1 ~5 F/ q' y1 }) i% ^
5
/ Y# t; p2 z: J- p: o4 L* F// 获取月份(0-11)7 J* G' y/ X" X
&gt; data_test.getMonth()) M2 x+ D" e) n
1
$ x: J. z& {& L6 L% b& L! R// 获取完整年份
% R, _% c( [1 G3 k# y; p6 q&gt; data_test.getFullYear()
0 B$ `: U8 K; g- d2022$ I2 ~' Y2 ~, _7 `6 i4 i* ]
// 获取时% m! Z$ ?- Z) }, ~- o+ h6 U
&gt; data_test.getHours()/ n7 w+ n: r& I' q, l. d9 R+ [
21
% p' |; k' h& V* x! k  F/ p2 H0 L// 获取分9 a" N; O) O# V  ~
&gt; data_test.getMinutes(). |# Y4 |3 [3 w! H' ^1 @, l
44, M* U, R  f, c$ {; w. b
// 获取秒4 P& n; `6 F. ^; u8 k7 D  E4 B
&gt; data_test.getSeconds()
4 C) B* |* l; v) ]) ?! j433 R  [! V6 W; t/ M# A$ S9 X0 y
// 获取毫秒
8 ~1 s7 v/ u% Z4 b( E( q# Z&gt; data_test.getMilliseconds(): b9 t; ~/ G* ]5 l) F7 N
290
6 }, f8 a. ^# `+ r, s5 Y& ~9 j// 获取时间戳$ T$ S( N: Y, f2 F+ y6 M" [8 P- }
&gt; data_test.getTime()3 E& u1 A) x5 G" N" u5 y
1644587083290
- y  R6 w. b# ]% {' R+ F</code></pre>
7 i. B6 b! u9 }3 U9 v  \, R<h4 id="282-json对象">2.8.2 Json对象</h4>1 E9 i! F! w6 l. c* V
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串# n. t9 u/ e6 x3 H* C! u7 c/ U; d
JSON.parse()  // 反序列化,把JSON字符串转换成对象; T9 K' T$ ]5 J7 {7 }# d  f
& e# j! s. W( v/ X0 x; T
// 序列化1 n  |& w1 D5 k4 V3 V6 P* U
&gt; var jstojson = JSON.stringify(person) . X; k* y5 F. @7 n/ d9 R& X
&gt; jstojson    h+ ^: p3 U. j+ |8 Y" S; D
'{"Name":"Hans","Age":18}', Z+ E/ o% ]- S& X" x0 c

% L, H% H4 }+ O- k- u% l// 反序列化
- [! h# P1 P5 r$ W) t&gt; var x = JSON.parse(jstojson)  n- n8 m- h7 p% @4 Q" n
&gt; x2 r4 p% _) t* `
{Name: 'Hans', Age: 18}
  ]1 w7 ^' F2 F, j, T! O" @&gt; x.Age
& P" A8 ]  k" J3 O( w183 W9 y6 K1 w4 q) _3 T3 k! q
</code></pre>
4 S  L# z! F  |. x5 Y0 H<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
- Z1 Y( P& M8 M8 f% C8 f' h<p>正则</p>
8 O( x7 w: A1 B. C+ y9 r; ?<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");" k9 x, a% A8 \$ W" J3 }
&gt; reg13 Q( Q8 {- Z  v) V
/^[a-zA-Z][a-zA-Z0-9]{4,7}/: V. U$ r. S  ]- n2 u! N
&gt; reg1.test("Hans666")
! O! ?7 \8 W2 a0 g4 ^* s- ~: r8 Ttrue4 @/ N) M& s5 s
. y+ ]- g# W! Q9 b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/( S* s& x# V- O1 A/ d4 y8 f9 ^& v
&gt; reg26 R* L7 k7 t2 _2 l+ S
/^[a-zA-Z][a-zA-Z0-9]{4,7}/+ A* O# U3 K7 I) [
&gt; reg2.test('Hasdfa')2 `( h7 W- }% ]
true  f. J0 X7 x0 v3 s& V. q! U' P0 s
1 _, t+ \! Z. S0 U
全局匹配:- o0 y; ^' }7 J$ E) Y
&gt; name- U2 X; v: S  _9 n
'Hello'
3 q5 j1 T. r6 ?. ]3 A  V8 [&gt; name.match(/l/)& a' d4 u3 V" R1 h' E% R( |
['l', index: 2, input: 'Hello', groups: undefined]# }  ~7 R5 o5 [; C6 _

( _) v2 J8 ?3 i% j1 ~% i) S&gt; name.match(/l/g)4 T. E$ l+ o0 W5 p* @& b2 j
(2)&nbsp;['l', 'l']
8 Q& L% p; y' r8 ]# ]) v// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
4 D+ d, h% D- o& C. x' g7 T) l7 Z4 R% i8 |  W
全局匹配注意事项:
$ O+ T7 Z( ~+ w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
9 Y  I& S( v2 o* [( V$ @' L&gt; reg2.test('Hasdfa')7 C1 i; P# V6 F! y. \8 a: ?" c8 T/ }
true
$ ?4 \3 y3 U; W" @$ B$ \, F$ o&gt;reg2.lastIndex;
8 E  o+ b' @/ s6
$ _5 B8 H1 V, U&gt; reg2.test('Hasdfa')2 j% G% C9 k9 [0 X
false
4 u% M" m2 @& C  b/ B8 C" B&gt; reg2.lastIndex;3 O+ j& ~. }+ k9 U2 B
0
& Z& b5 h: i3 f) ?4 k  G3 Z&gt; reg2.test('Hasdfa')
% i$ m4 x6 v; L5 E- S% k7 ?& ~true
. G$ o% N8 V  f3 a/ n6 D&gt; reg2.lastIndex;7 g8 r; X6 Z! j& |' c" c) O  I
67 m) d! r  j" v/ d' U
&gt; reg2.test('Hasdfa')% D4 [* ]& v" B+ V+ W5 e
false
; G$ F' f" M+ [# J' d&gt; reg2.lastIndex;0 W6 H4 W% t- M! e7 ?
04 T/ M2 c1 e. E! b1 V) v$ _
// 全局匹配会有一个lastindex属性
" h& s3 [  W& G" x# h; c/ n  L1 V6 C( `&gt; reg2.test()
+ ~; M) g, u  S& S9 M4 |4 Ffalse3 C" b5 T2 r0 ~9 J( O: L/ ~5 s
&gt; reg2.test()
1 R1 @. @0 _$ G, `0 Q$ Y$ m, Ktrue
' t$ d8 G9 S: K// 校验时不传参数默认传的是undefined! ^6 `5 I1 K" \1 e
</code></pre>
! g" K' ^  V. w. p1 v( z$ d<h4 id="284-自定义对象">2.8.4 自定义对象</h4>1 D. C# L7 ?* t( i! ?
<p>就相当于是<code>python</code>中的字典</p>
7 {, L* Q' p4 w: `$ ~<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
# z$ |! j9 M0 Q* E' E&gt; person7 E/ {9 K' ]3 i7 `4 D2 J* ?0 {
{Name: 'Hans', Age: 18}
7 {3 @& E- Y1 X" @8 a& B# Z&gt; person.Name+ Z; C6 `, [$ A' s
'Hans'
+ ?0 N, u7 U2 Z; I2 `&gt; person["Name"]* D' k, d) |! P: p5 u
'Hans'
8 A) a! j7 Z8 v* B+ ^! U
* M; y( p0 t; a& v; Y// 也可以使用new Object创建
! i( k  I, H% I* h&gt; var person2 = new Object()7 x" @0 O0 r4 A2 }1 M  Y6 E* n
&gt; person2.name = "Hello"
+ b; q# t8 \' i( g4 J( }1 T* Y'Hello'
. ~" e# u* {' |8 p&gt; person2.age = 20
$ r; l( i2 ^+ D20
& g) w- {" e: s2 e4 f</code></pre>
. o0 T7 D3 n$ b% H- \+ {" c$ N<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>+ c( M9 v" }9 c; T1 m9 t8 D
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
- G! F' x' |* W% l" |) j$ t<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>% s  e- q2 n. A0 K, G' p
<h3 id="31-window-对象">3.1 window 对象</h3>
: m1 H; [/ Q: f  p, J" M4 W<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
9 f# w& U+ \9 K7 Q% R' q<pre><code class="language-python">//览器窗口的内部高度
. X% G, j5 q' f/ v( \window.innerHeight % q9 m$ j% K$ r; w: L
706
- i% I% v% J: l1 y4 M//浏览器窗口的内部宽度7 T5 P  u( O* D; Z
window.innerWidth
' y. @! h7 y. }( U' m1522
% ?9 Y; H% I6 C1 F3 a/ i) U// 打开新窗口5 e# v8 F3 o0 ]% T& K% B
window.open('https://www.baidu.com')
" K4 `/ n0 F) c- i# q; q, x/ u) N0 pWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
7 [# c( j7 Z. r* R4 {! d// 关闭当前窗口  W" |( V9 L* ]4 w& v
window.close() " C! g7 `' i' g
//  后退一页. u( k, M, r9 p, e6 C, L" P
window.history.back()
* Z/ k- `8 ?: ^" Q  m( q// 前进一页2 k- z0 ~6 Y: o$ o
window.history.forward() 3 Y3 _) I/ G$ a  E: u4 @
//Web浏览器全称
; Q6 r/ _- }( G* g4 d5 `window.navigator.appName
7 H) {0 [2 o4 ?! l$ Y- s'Netscape'
) x, H. N+ e3 b// Web浏览器厂商和版本的详细字符串/ @) T  t1 x: R9 m9 G+ t. b# D
window.navigator.appVersion$ S0 m' l3 Q2 a; _
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'7 {/ z5 A, C, B' K, Y
// 客户端绝大部分信息
! Z+ `% B  c" f4 [5 |6 u% W/ V, Z  ?window.navigator.userAgent
, S3 v$ T) U9 }$ D" S! `'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. g7 }4 l/ `+ k0 u// 浏览器运行所在的操作系统
5 I; U" q( X# R' r: n# n: d- |window.navigator.platform& m' O8 j. U; |9 o: g
'Win32'! s( c3 N" |# z4 o9 U; u, a& G

3 N/ Y- m# b$ v//  获取URL
; V4 H) Q5 J$ i) K5 awindow.location.href7 `$ n; C/ W$ D! i8 z1 J/ A
// 跳转到指定页面  E& g4 m! t/ N$ M: C+ n  U: n
window.location.href='https://www.baidu.com'8 P1 |/ O/ h: m; B6 E% w3 w7 H
// 重新加载页面; c  e2 r( Q, k) o  N( f
window.location.reload() / x7 j2 m- V- }( E5 B6 i
</code></pre>6 ?: U6 y% I4 A
<h3 id="32-弹出框">3.2 弹出框</h3>
1 U8 I4 O  G! e- r<p>三种消息框:警告框、确认框、提示框。</p>
0 V) P- f' j1 e+ O3 b7 U6 v<h4 id="321-警告框">3.2.1 警告框</h4>
4 e# e! q  u6 y" m% R+ V<pre><code class="language-javascript">alert("Hello")6 Y" v& B. {( q+ u  ]/ y
</code></pre>9 ^0 U% J3 w6 Q7 T. s( J
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
+ P0 `0 v; s4 {4 \4 _<h4 id="322-确认框">3.2.2 确认框</h4>
. \! B' }; w( D4 u0 M1 `& X<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>  X, d9 R8 h$ e6 ~% g! M/ T
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
& [' }: N; x* P) Z& J) btrue
( j! R4 _" ?" _" j& w&gt; confirm("你确定吗?")  // 点取消返回false8 B( c4 ?; x8 q) M" ^# q" [# T
false  _6 Q) j4 U; N: t; B9 Y/ S
</code></pre>
- L. K( k' E6 ^8 Y<h4 id="323-提示框">3.2.3 提示框</h4>
. ]/ e( j* _& t% Y* P1 w5 ~<p><code>prompt("请输入","提示")</code></p>
1 `) \  f/ i5 x4 E! i. v<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
) t' E8 b& }1 K' Z* }7 f$ _- r& \<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>  V  X8 W. t* H" o: g/ B
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
" k+ N# L2 O+ }9 e<h3 id="33-计时相关">3.3 计时相关</h3>2 H; A* e  X( ~  h- F2 X4 v
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>1 K+ g' V' E# h
<pre><code class="language-javascript">// 等于3秒钟弹窗
0 Q- c2 h& ?0 E- {/ Z+ D3 RsetTimeout(function(){alert("Hello")}, 3000)! \. d0 ?& O) U

- P* D3 A5 T& x2 rvar t = setTimeout(function(){alert("Hello")}, 3000)
# f  v% I- j( ~0 Y1 [; x$ M* L6 |( ]: l3 q/ W
// 取消setTimeout设置3 M: L0 _1 `% j6 B- @# N3 d
clearTimeout(t)4 o( ~# S# E" h9 Y" a
</code></pre>  b: t- M. r, u( N  P
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
) L+ A5 C2 ^7 q. K; L/ ^<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>- k5 I  i2 _# U* [
<pre><code class="language-javascript">每三秒弹出 "hello" :3 e1 R5 h/ W6 E( _* w
setInterval(function(){alert("Hello")},3000);
  H& W' j+ w) G) k</code></pre>
  Y! b7 x$ l( z2 y1 |( p  }* s9 Z# r<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
  v: S9 y$ G% X- V, p; Z9 ~/ l<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);; J+ i. y8 q  j3 W" t
//取消:: c6 l/ _1 R1 \! b$ d' \% n% m( S
clearInterval(t)
6 D- [9 L0 V9 O</code></pre>5 d& L: p$ F, D: B/ n
4 q3 J5 h, i6 e6 ~+ ?& D5 R6 N
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-5-28 08:46 , Processed in 0.073205 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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