飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( q9 O- P% n. I/ \. O<h1 id="前端之javascript">前端之JavaScript</h1>& i  R) y' _3 p$ Q, S) E$ C
<p></p><p></p>6 m" C) e. R' @' g0 r; ~" M
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 L; x8 m4 d3 v  K2 i<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>- E! {6 L3 A* u. }/ ^
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
1 I/ D+ r1 H5 F3 V* k# Z它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
# M0 G; A' R: s" G& E它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>9 L7 s% j. p; ~# C+ v
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>0 v1 Q/ q+ j3 k! O, b2 X% ^9 g
<h3 id="21-注释">2.1 注释</h3>
' }, [/ a0 J) W: \<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
- u! v! q$ B  c8 P<pre><code class="language-javascript">// 这是单行注释
* O! ]' x- l% A: h3 b" f; e4 h' k4 p. D1 z) x
/*; a: P& l; y2 R; `
这是多行注释的第一行,' Y3 w4 T' r1 O- i2 ^
这是第二行。/ @" e4 S3 M! y( X. f
*/7 j3 n7 I$ ~4 M/ o0 a+ ~$ {
</code></pre>5 ]! q/ {( c3 q! U
<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 W; _# x# D/ V* V( }! H<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>" P3 ~9 Q* I  L+ a3 t: l7 W
<ul>8 d- k5 f! }/ ?% y1 N9 Z
<li>变量必须以字母开头</li>
2 Y4 i9 S% i. Q$ F: h1 J; \; _<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>9 }5 K5 V- _5 X7 I9 _( ?# l* _! ^5 J
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>" v$ N& p4 h% M. I, r4 g
</ul>+ [% A5 [0 A) H. l; P6 k! Q
<p><code>var</code>定义的都为全局变量</p>1 {' V$ `. h$ Q; g
<p><code>let</code>可以声明局部变量</p>
$ ^/ j  f, _) s/ ]8 z: Q6 R$ I& Z9 D6 E<p><strong>声明变量:</strong></p>% `) H8 A8 ^, F( i5 Y8 v
<pre><code class="language-javascript">// 定义单个变量8 W1 A8 _& }4 j# _$ @# }
&gt; var name
$ h3 `5 ~* g; o" h! t' e&gt; name = 'Hans'. M4 ~# k! i) H) H* M
//定义并赋值
% z0 [6 t, c2 \2 m7 W&gt; var name = 'Hans'& H6 k: A  B: F- `8 q
&gt; name
& Y, L& X# n$ F% ?9 X5 O( |'Hans'! z2 y0 j0 j& a% W$ g8 V
/ N6 N* c# p8 O% e# b" u+ E
// 定义多个变量! U' Y+ W0 d0 _; k: s2 D
&gt; var name = "Hans", age = 18, S) T. f6 o# M
&gt; name) {/ _2 `7 @# i& G5 V" m) i
'Hans'
# ]5 f9 {/ f8 Y/ l& s* K&gt; age3 M2 h" O3 a. E! u
18
; r0 m' j9 R9 _3 H+ Q
, n" B) T9 ^4 s- n//多行使用反引号`` 类型python中的三引号
$ c) D* l5 F: b( ~" w( C&gt; var text = `A young idler,
$ c5 H8 F2 ?6 t  Q+ pan old beggar`: f6 M& z! n0 R3 [* K/ N
&gt; text
7 x! j/ i2 p( c, X2 g'A young idler,\nan old beggar'' d# A( M/ a" H. X3 t" b' W- l# U
</code></pre>, }+ I( U' }4 \& t; P' K. x
<p><strong>声明常量:</strong></p>7 f% a; R4 H# i  P9 q( b
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
/ B0 p+ p, B' \+ B: D+ M<pre><code class="language-javascript">&gt; const pi = 3.146 m% B7 c) H0 Q  e9 w
&gt; pi- P/ `# r4 r! p  g/ O* C- j' A
3.14
8 Z0 t- y' [5 O  `&gt;  pi = 3.01
! t8 f5 j  M  NUncaught TypeError: Assignment to constant variable.
5 R; q1 k: P9 y# v1 j9 I    at &lt;anonymous&gt;:1:4
5 R. M/ Z. `$ c' h4 ^$ T3 w# U/ b/ N* p6 X
</code></pre>
; L5 _  [: I  j  q# f! ~1 v: L<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
9 v- s& i7 w# C1 W5 @- V<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
( m; t- l6 T; Y- `, j/ d7 |& Y<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>+ i* U- O# c1 d
<h4 id="231-number类型">2.3.1 Number类型</h4>
( C' C' q$ X/ R! t$ s<pre><code class="language-javascript">&gt; var a = 5. c! s1 R4 X+ H. l- H1 A% D
&gt; typeof a   //查看变量的类型  
1 J5 M5 P2 y& r: G' k5 Snumber
7 Y# [  q2 P+ n1 B
8 X7 v; Z. ]! V&gt; var b = 1.3! r8 p8 t8 z1 F( N
&gt; typeof b) Z: i1 j* x/ [. N+ k9 v
number9 @1 M9 Q& i5 J. V
3 R) b2 o9 S" c% T& E  Y& P
// 不管整型还是浮点型打开出来的结果都是number类型
# A# A) }) N0 s% X8 c6 O
1 L) m* M# G# \8 m1 x/ V/*
5 C: r3 j' R2 e& O+ ~% W& o/ ?6 i% ANaN:Not A Number. o7 f* ]* v) V3 e
NaN属于数值类型 表示的意思是 不是一个数字! D& m. p, w1 L
*/# I+ R5 o* V# j+ Y0 U% _

' u! D5 f0 A; h: V$ }parseInt('2345')  // 转整型- F' {) x+ t9 x2 R, Z# o' T- u% b) W" ]
23456 C1 H  g8 R2 Y9 S: f/ p1 M) h
parseInt('2345.5')" _7 a2 B( Q- U! t# m* [9 N9 M) q
2345# }# ]' Q. q7 Q7 u( _& A
parseFloat('2345.5') // 转浮点型
/ f) l" Z0 F) u! t4 \/ K2345.5+ H; S( v+ ^# ^- W+ ?% E; W* x
parseFloat('ABC')
+ a& Z, ?* `6 @& ANaN
) I# l! U5 i) K6 O8 u$ D  x5 _9 kparseInt('abc')1 y0 V5 r; v8 N
NaN: ]; |7 L( f* T" g! S
</code></pre>
4 a3 [7 b5 U- }( n0 u' S( ]<h4 id="232-string类型">2.3.2 String类型</h4>' w2 a3 p- x: j  W7 }
<pre><code class="language-javascript">&gt; var name = 'Hans'
2 r0 d* [, j& r/ e0 P4 B3 N&gt; typeof name$ @! n% v( K8 B5 M1 w  A
'string'( [7 c2 @* u( a6 v" D

# M* z0 n- D9 q& G; b//常用方法
# G6 K, [. j" X# L// 变量值长度- z& d# `( J7 z7 B' F, v
&gt; name.length9 `& R, k, z& r7 y0 W4 @9 Z) E1 Q
4* j* [) K1 I5 q
// trim() 移除空白
9 x- e' m1 |; ]# e&gt; var a = '    ABC    '8 e  i) ?! o" w0 H. Q/ {
&gt; a
# D8 p: i9 n2 }'    ABC    '6 f: u3 O/ Q# f" V1 `
&gt; a.trim()
. }, T5 {8 a+ L# n  I( f5 l'ABC'
- d# g9 y& Q4 g, Z//移除左边的空白# f* n% r$ D6 y( B/ P
&gt; a.trimLeft()
4 B% |- e8 y: @' y+ E% |'ABC    '
6 B* m5 c/ ]2 ]" e- ?6 \//移除右边的空白
# a* j7 ?" n7 @& r6 o5 P&gt; a.trimRight()) G+ o* Y& v& R7 R3 x+ B+ Z; M6 V
'    ABC'3 @' Y9 E8 C  W  r0 z$ r

* f3 }4 u7 i/ Q1 w- W( p+ Z//返回第n个字符,从0开始3 u) M- Y, M8 u3 o+ a% b" r- g
&gt; name
* D3 Q7 J+ }8 ]) @& s% l'Hans'
) U& n- z0 P( L% d& `3 K# R8 j" l&gt; name.charAt(3)) G0 R1 U! A9 v! j+ y8 T, v
's') {2 `3 T  a. S- _& L/ [4 e% V* L
&gt; name.charAt()
* G# @! u# A9 a* I8 }'H'' ^- \# y- C! [7 E& j
&gt; name.charAt(1)
8 U+ H% v- n9 h* m'a'8 o; V( ?$ a* f
6 B% S' R2 P' K! B
// 在javascript中推荐使用加号(+)拼接
, [* [5 a! j; _; s$ v6 W&gt; name
. d1 ^  B  Z8 J+ {& W'Hans'
6 I. d3 ~+ w) ^( K7 ~" `+ X&gt; a
4 V  x  j+ ]3 k' K3 F'    ABC    '
; g0 B. L7 n. Z9 h5 u&gt; name + a
" g7 x7 O- i! q2 s6 K5 {+ c& n'Hans    ABC    '* Z3 `0 w" a; U, k- \+ M
// 使用concat拼接9 B7 I# d- D" g( s0 C! \+ X
&gt; name.concat(a)
: O9 \& i- E/ e/ j: d'Hans    ABC    '8 I" D8 g0 S2 h

3 N, k( e7 T2 K! L3 j! `//indexOf(substring, start)子序列位置) f5 a- W, |- p" J4 g$ o3 v
0 }5 O! I2 k/ @
&gt; text+ }6 j; g3 s( E9 D0 z( v$ o
'A young idler,\nan old beggar'
4 S8 W+ X( b8 p; R&gt; text.indexOf('young',0)* {' f; Q+ B6 Q) n" t5 }" E; w' @$ i! e/ n
2% C3 A/ e7 ?3 f. Y# |/ }

8 h, e* ~6 s# I4 Z% F+ d" G  C; S//.substring(from, to)        根据索引获取子序列( M1 V8 J% U8 S5 ?+ U
&gt; text.substring(0,)$ i& V  G; b0 h
'A young idler,\nan old beggar'
# r, c* f0 U) r&gt; text.substring(0,10)
7 i9 H8 {& M9 f5 O: G! Y' M# D. K'A young id'  `% C/ I# t) i! {# a: c  q. j# l
5 c' h, P4 ?% B
// .slice(start, end)        切片, 从0开始顾头不顾尾
9 K% Z1 ?* f2 r+ W! |, D&gt; name.slice(0,3)7 l5 ?% ?  j) K; q
'Han'
/ p  N! `8 C% R7 {. Q
" j  X2 B  e, g+ s+ A// 转小写
" @0 b, c* f: Q( O3 ^$ l1 Z&gt; name$ R' m6 e' {- N8 l
'Hans'* }6 B7 Q/ E1 d6 @
&gt; name.toLowerCase()8 L2 T) O/ C" s1 c' J* v
'hans'
: _) Y3 B7 k+ ]// 转大写/ H1 F0 Y$ S+ p! H. [. D8 _
&gt; name.toUpperCase()' M8 @! Z6 L. i' E
'HANS'
: H, o0 X& j8 O; k- B+ v; U, |' H$ a1 _2 N7 ^
// 分隔
; R' |4 G' s1 m  I  I&gt; name
% {) Q' t0 q; P7 n; i'Hans'4 I* p# ^# ]4 K6 O: _' E! g
&gt; name.split('a')
' S  T" N# f: Y4 O(2)&nbsp;['H', 'ns']
; k# \( h( h% g( W* v4 U, C</code></pre>
9 B8 S5 m: l; `9 \0 p& s: d<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>$ `8 B' @3 Q5 |" ^) p: j5 G( L+ u. c
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>& U+ i) J( O3 ]* @0 Z- V
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
" _+ m' N2 i% f; z( ^/ {<p><strong>null和undefined</strong></p>
( X7 G) w2 q5 L# z/ R0 S<ul>) R8 h8 ^! m; L, y" ]' X5 |0 Y
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
9 P  E3 K2 z: ]& Y9 j& p) g+ L7 A<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>* F) G6 C% E' g$ x
</ul>- W# |+ p0 \, W
<h4 id="234-array数组">2.3.4 Array数组</h4>: y3 B9 S: q- s
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
* b( \+ A7 G7 x) L; S$ o9 s. c" e<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 1 x% S# o  y0 [! B
&gt; array1
  S$ E7 h0 s$ l. L(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
  ]1 Y8 }3 H+ k* {) b4 u&gt; console.log(array1[2])  //console.log打印类似python中的print
! V1 U$ Q; A( q; K6 d* v, J, A3
. p- Z' M2 E+ s8 c3 ^# k# z// length元素个数* |' ]0 y: Y! ?3 u# q& t1 l% Z
&gt; array1.length
, B- m4 ~; c' x# B" F9 b2 ?6
. _/ p0 c, ^9 n9 k// 在尾部增加元素,类型append
# B: V; `9 A; h9 ]3 o: w( `&gt; array1.push('D')
6 K# N! w7 u9 c, p8 o7 N7
+ |# |% c0 v. r& S; V, y- t8 A&gt; array1
: B; Q  l& {( d* L(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']$ C& N: ?2 X' U% C- A9 F& r
// 在头部增加元素
  T9 J0 ?2 `6 L0 U# |% z6 `&gt; array1.unshift(0)
% W3 e" d% ?3 Z3 J1 C# g8
* ]0 O: M6 V# s, F3 N&gt; array1
& K8 N* t' g) b$ o& ^' L- y(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
' }$ Z2 ]& m* `6 u, e& H
2 |2 z7 W* O6 E& N1 s1 q8 p% v. w//取最后一个元素
) j: D1 S# }' F3 ^/ D8 I$ ^&gt; array1.pop()
: }) C& a; z  Q$ x  j'D'8 |4 \9 k3 F% m8 h- w4 ^( d* v0 h
&gt; array18 m/ v; E2 b4 c5 O8 n
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
  K" s8 {& U6 P3 [4 e2 r//取头部元素
. K' [" c- J1 a! }8 D" S3 \&gt; array1.shift()
2 Y' S5 s7 d9 O: [; n; \0
  {  I4 v' E% ?1 C&gt; array17 x; }3 I/ a2 k* T
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 v7 \! t7 g  l  M# O7 M1 h
3 P5 E$ V7 l5 K. O# j//切片, 从0开始顾头不顾尾
; U6 u! C) g4 ^&gt; array1.slice(3,6)
# R0 j! Y* b3 u" z6 S0 T: q/ n0 X(3)&nbsp;['a', 'b', 'c']
# Z4 w( g. o2 r5 q( r( U// 反转  V3 p- \- o$ J8 e$ ?& Q% J
&gt; array1.reverse(). [1 [' p9 E; W  t  v1 ^' J- s
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
, I  X& o2 s4 n" E& _9 x// 将数组元素连接成字符串
* a9 i6 l2 R6 O% H: ], _&gt; array1.join() // 什么不都写默认使用逗号分隔5 `& ^* i2 \/ X' y% N0 {
'c,b,a,3,2,1'3 V- V: v& f+ A* a) g7 O
&gt; array1.join('')4 L- P+ p+ {4 A6 S/ a
'cba321'
2 G. W: ]- k: d&gt; array1.join('|')0 r$ C" X$ L* O6 z9 E
'c|b|a|3|2|1': E6 N9 K) |3 [; u# ~7 \
( v! e9 J$ x' k0 ?# I/ [& M
// 连接数组8 z$ w( M) G. D/ \. l5 ~
&gt; var array2 = ['A','B','C']
; j! a+ Q6 o2 I$ i0 \' F&gt; array1.concat(array2)4 I" G! \" \' _  H9 L; D, D4 o+ l- d
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
4 ~( L1 Z  S0 ]! |2 s1 f
& p* M4 z5 a1 ~, s8 E% b( r2 K% Q: o// 排序; \( H& z9 Y% K- t' r
&gt; array1.sort()
3 f0 I- |* y) A" |  Q* `4 N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& t. [* D' @2 ?$ q) d4 `" n: F; X5 |) c2 [* Q6 y1 E
// 删除元素,并可以向数据组中添加新元素(可选)) D2 F+ ^# @9 l+ G* l+ k
&gt; array1.splice(3,3)  // 删除元素$ M% X1 O: d# e0 r6 j
(3)&nbsp;['a', 'b', 'c']
* Y; X# ^; B" r: H, B# ?&gt; array1" ]0 T' e' j( E& y; P
(3)&nbsp;[1, 2, 3]( Z8 H: i; l2 \+ A) a
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
4 f# k5 \. o: e: [" ^[]
, l5 Z9 x( p& f' z  d" b&gt; array10 c  g- j0 W( x" f4 ]4 b
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']: R& J. g' I; f. }- U( z6 V, H

4 ?) c2 L6 X8 }1 V! I+ @, E3 w* k/*
; ^2 Y' z( Q( U* j" J4 c; lsplice(index,howmany,item1,.....,itemX)
2 w- G* I, P& ?4 Q' n/ {) cindex:必需,必须是数字。规定从何处添加/删除元素。
- K! z+ w$ \# i! o) `- N" ]; `howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。! O/ `: a" r7 I
item1, ..., itemX        可选。要添加到数组的新元素
; W  x6 R  W! l# P" h  b*/
$ h% U( |2 d) h2 m0 ^! B
& g* C. Q" F5 n0 B// forEach()        将数组的每个元素传递给回调函数+ r# `5 a2 m7 F3 ?. ]2 l6 l4 n
&gt; array1.forEach(function test(n){console.log(n)})) I" e/ A% m) T/ F
1  O- [& E% j6 w7 F6 R8 u+ R
2
$ `- A+ I3 p' l& Z" k) b 3
0 ?$ Y( F# Y2 H/ @4 k0 P* p+ J A
( `7 {0 S) @. U; O B
0 {) k$ c, J) t' V* F7 e1 x3 b; b1 O C  n& w1 U9 j3 N
// 返回一个数组元素调用函数处理后的值的新数组/ r# ~7 i5 @7 ?9 X( r
&gt; array1.map(function(value){return value +1})
$ D; g2 J! ?5 F) x- C0 y. i(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1'], c, u, [2 S" m8 t( Y1 {
</code></pre>
. G8 Y5 x0 T( }% L, Z, G<h3 id="24-运算符">2.4 运算符</h3>( ~  G6 P" Z+ L  i
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>4 ]6 ~/ G; {& b( S) H" ^( Z& f# e
<p><code>+ - * / % ++ --</code></p>9 `& W. v% B# l$ b$ t
<pre><code class="language-javascript">&gt; var a = 6
6 N0 i1 s# J& T6 b% ^0 j&gt; var b = 3
" m! ]$ B: u; [, K" p9 u; C1 b  g// 加0 \( j1 Q1 U* s# J" O! n
&gt; a + b' b9 `+ n0 k# c
92 ?" H& q% K. b4 g/ R
// 减
# a$ x! u, \( H1 N9 g&gt; a - b
8 R# u" G% `. h/ F+ a, u4 S39 [, S& [0 j. D% n2 S. w- u& c
// 乘, M# I/ Q7 f: _' E; H$ e/ g+ S8 U
&gt; a * b: \3 G" Q3 a+ ~2 [" P# X
18
. }7 a1 U% `/ B, N4 m* P// 除. U1 N: A' ]6 L, D! l
&gt; a / b& t7 R6 k/ W$ L4 x0 m4 q% x  G
25 I5 `4 E6 T' m8 G1 g8 |" g* ^  q
// 取模(取余)6 t* ~( G; s6 }1 _* I
&gt; a % b
+ ~4 V+ F- z3 l03 |3 M% V# A3 Z8 o. l
// 自增1(先赋值再增1)) R2 U. N! x/ i% k5 g
&gt; a++7 M, @) a8 ?* S7 _; ^
68 X$ b6 _- T5 j$ f9 R( P
&gt; a6 ?( Q5 d7 K5 v4 P8 k" Y* |
7
+ I* e4 t$ P" E! `1 g4 i& }9 l9 ~// 自减1(先赋值再减1)/ p' v1 D; x  U6 D5 V
&gt; a--( N+ o. ?7 Y2 U" N/ g  |7 H  f9 p1 ^
7; x' h) ]6 o8 h3 s
&gt; a5 ]$ }' P) G, h/ e
6
" s, ]$ s/ K) J# l& C4 Z// 自增1(先增1再赋值)' d2 C7 y8 K6 M
&gt; ++a
# V) [  O3 O- q  O$ ^6 i7
& r+ G1 P4 z( Y- Q1 R" l- d6 ?" Y* y// 自减1(先减1再赋值)
& ]4 v, `+ i: C* i&gt; --a2 A* v! q* X" \# _% M0 y2 ~! q
68 F4 X' E4 I; \
&gt; a: G# J1 N# ]8 m- [
6
8 D& s# \( |* }5 S% X" M1 e
6 J7 O0 ~  t/ G# `; v6 ]4 q" S//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
$ g! s  P: |) S5 m% e3 T4 l( b</code></pre>9 J' v8 h% o/ u; T) P
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
8 J$ G: T- g+ R7 t) h<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>7 p5 z" y- K" L+ |0 o+ W# Y+ c
<pre><code class="language-javascript">// 大于
+ e. ]5 L' _2 V; T2 G$ a5 Y8 ^&gt; a &gt; b
% Y5 a* u, Y6 S- R: M- F/ mtrue
; d. @9 [2 ~% L0 b$ E# O1 d3 G// 大于等于- ^+ m) B( O1 C8 D3 c
&gt; a &gt;= b% E! _% E9 l0 H. ]
true
- K+ U& m1 i3 k% I; G. L6 M// 小于& ], t  b" r$ X" M; n* d# c8 Z
&gt; a &lt; b
+ \# w, x2 s+ s& W$ Q" afalse
& {( M9 y. D# s% A% v" I1 c' k// 小于等于$ i! s( D" y+ n
&gt; a &lt;= b
5 F: Q2 h' H; |6 Q& k: P: c) lfalse
$ ^# |7 G) R7 \/ k: c1 T% O9 I. O// 弱不等于
' c7 o7 ?- b) Z&gt; a != b! ?# b9 T) U! m  a0 v
true. u% c/ l  B' J1 i+ G9 A
// 弱等于
. V2 J* X, t' q. O&gt; 1 == '1'/ j% O* q! ~+ F" z& o8 ]8 x7 d1 w
true
( t0 C; y! V4 S( e3 v" x// 强等于3 A( o- D$ ]4 u! _1 Q* j
&gt; 1 === '1'
3 f  ?+ r  M. ]false
1 _( N' W5 Q1 R* G  O// 强不等于8 H: \* \( u* \4 |  U- y. B
&gt; 1 !== '1'
' n8 V8 K2 K1 k1 _( ltrue' A2 E, z+ s! x) c3 u: l
4 Z, [$ e. q  L; D( ]
/*( \0 n/ R1 @! Q* t9 }$ I$ i/ K
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误' e  L' O  G/ B# n: f% p7 v
*/
6 T; v' Y( p5 c</code></pre>- O4 r( h: H& _* I* \9 ]3 j
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>0 J+ t" p3 d! P( T/ f4 y
<p><code>&amp;&amp; || !</code></p>, j; a8 D* R' L1 \5 X1 Q5 e8 W
<pre><code class="language-javascript">&amp;&amp; 与, E9 a+ ]( ]$ s5 d
|| or
; D1 @" l. O% D$ c3 f+ p5 Y# h! 非; s7 c5 b' q" E$ Q2 G
</code></pre>
( V+ r- s+ P7 h, c<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>$ v  y$ x. h- V# Z% X/ D
<p><code>= += -= *= /=</code></p># G( M/ I* r. G7 L9 Y- u4 p0 P, _
<pre><code class="language-javascript">// 赋值4 n* @( U4 P0 m; P
&gt; var x = 33 r# k7 m0 {3 D  Q+ K
// 加等于* K* l9 r! \9 P2 G/ \+ ~$ ~+ g+ u
&gt; x += 2
+ k* W4 X8 S( U9 W, M% K, E57 I2 |* R# L1 b
// 减等于9 G1 \6 f2 ]$ A
&gt; x -= 1
) u0 W  d: {) Y% X7 I7 j4
6 o6 W: F4 m1 [. ^; T; O# ~1 x// 乘等于
" v# K) }! A: a: h* d6 d) \6 p&gt; x *= 2; w6 }5 w- }" @0 o4 d
8( f" R* J) q, ]+ z% Y
// 除等于
# w. O% e  k7 x5 m2 y9 R1 l: c&gt; x /= 29 M# g2 ?. o) g4 Z; d
4' t8 M3 _9 H  H7 s; \) u" N# t
</code></pre>
$ t6 h, Z! g/ G+ A* N: z<h3 id="25-流程控制">2.5 流程控制</h3>0 N8 k0 @' o: S% Y
<h4 id="251-if">2.5.1 if</h4>' C9 V; k) p  k" Q. k: Z
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
- X+ r0 I$ g! V% F3 l" L2 z! H$ s6 n9 }& F
&gt; var x = 3: _3 [+ Z/ A2 e
&gt; if (x &gt; 2){console.log("OK")}
% `, k9 n# {9 F/ [/ n! k6 I; ` OK6 M# T& [: ^* @* d0 p: D7 Y9 U
, s% q5 b& @+ W- |/ k/ H
2, if(条件){条件成立执行代码} 9 B7 a! o. T% u, s  b
        else{条件不成立执行代码}& S% y# \- J6 b& x7 I$ n
4 e, T0 j7 Q5 m6 f8 n8 Z2 P9 }
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
+ X( w9 E  g0 g9 b: M1 ~+ r& W! x7 V'NO'; t( d9 |/ l3 s# d  I9 l

  a6 @  \' |3 @5 y3, if(条件1){条件1成立执行代码} 1 J" X' i! p$ n& M
        else if(条件2){条件2成立执行代码}
% [$ M) e  ~9 U% z* ]; y# \    else{上面条件都不成立执行代码}3 Y. Z6 j& ~# g, ?. `2 [" h- N

" {0 e' U8 ]& M9 d5 A( t&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}/ [3 r- S& ?" M5 z; x3 e
Ha
7 X! B5 u: h1 t8 e1 j3 r</code></pre>  c" a" \) O0 F8 P  }
<h4 id="252-switch">2.5.2 switch</h4>: N4 q9 o- _) G4 s
<pre><code class="language-javascript">var day = new Date().getDay();
5 j+ U1 V" J% y, F3 A$ q' {switch (day) {# }; {6 _9 [) C$ |+ c/ C
  case 0:* A& O) _0 z) I
  console.log("Sunday");3 {5 |7 E' y2 X! ?6 I
  break;
0 I# e9 G8 h  s* C! D4 |# Y  case 1:
, O3 z, h* ~* ?2 x( a% R  console.log("Monday");
$ b! I1 q* y& y  break;( I2 r6 p5 P( E5 S
default:  C: t4 s2 k2 y/ \+ [; w( Q
  console.log("不在范围")! m4 S" D3 d3 T/ o6 a5 O! U
}
: g1 E: v" m. q. T 不在范围
# {& U$ p/ B1 a5 t/ Y</code></pre>
; Z" i5 x+ Z3 Q$ ?, ^2 L; |$ s<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>9 {4 w4 P* k  u5 b' _5 N' l
<h4 id="253-for">2.5.3 for</h4>5 m+ [3 t# I1 x5 u) v9 W
<pre><code class="language-python">// for 循环% {5 @! N0 p5 z2 c# }2 Z; W
        for(起始值;循环条件;每次循环后执行的操作){" |/ f9 r4 k/ Z
        for循环体代码8 L5 u# Y1 g. p& y0 ]- p" l- h+ U
    }) C5 I0 e$ ^! U
. [( D( w# G7 d9 r% [
for (var i = 0; i&lt;10; i++){3 q! w7 h1 |/ i9 v: \0 r
    console.log(i), W+ x7 ~0 A' z" G8 a4 d- N; A! j
}
! Z' M- g  r7 z4 _3 J        05 P0 l) c4 Y! G+ I% f
        1
6 E$ c# z' ?# B0 O9 r9 X5 q" C        2; ?2 U5 k; F- P2 y' B, Q
        3, n( a  n6 m/ N% D
        4
/ h7 z) }. n' t0 P$ f- f        5" J; A4 z/ |  S: S
        6# ^. Q1 M: Y( C% ]: r
        72 ^7 _7 C2 W/ ]8 E
        8
3 x: M) N8 n( N: g, r. E! o, Y& A        9
/ v( G: i8 N# g/ l: J% ?8 K/ u0 g1 y</code></pre>  a! B/ J  ]% a$ b5 Q
<h4 id="254-while">2.5.4 while</h4>
7 t! {( E9 [3 n" Z<pre><code class="language-javascript">// while 循环4 L; K0 ]9 C  W4 f6 @* ?
        while(循环条件){; X+ W0 j, f* g8 S) S
        循环体代码$ h/ c( [2 L% V3 J& x
    }
+ G" n$ k; ~& M5 N# I
% a: u7 ?" ^8 \: D% o7 A&gt; var i = 0
  l  T. n- @1 B& c1 s! @&gt; while(i&lt;10){
6 M0 g2 l6 A- |% e, v    console.log(i)" K1 g+ \  J8 }- U4 R1 W1 J
    i++
- t; ?5 q- z% @, d2 H}
) n( {; v4 n+ G: `' L 0
% A8 S2 g: L% z( e) {5 L 10 H9 I+ V; E: R; ~, c- C# x5 S
2
6 c( h, {, m1 [4 C# M; l 3
( u( L7 J0 s9 t; K 4" f0 v; q$ X+ _/ i. U) d
5
) n( ^: V" E3 u& B% X& F1 m" F6 p 6
, O: F* Z% n% {% u/ o& L9 K+ k 7
1 d2 M$ @! `! w/ ?# Z 8
: Z" v4 b; ?: C' _+ o" N' f 9
! }( \/ g3 [* v2 Q& |, o</code></pre>/ y9 P7 P; j. r9 F; j* r
<h4 id="255-break和continue">2.5.5 break和continue</h4>
  f+ C0 ~  c9 G* _0 @: l& U<pre><code class="language-javascript">// break
2 @, w  J; v0 R' N$ C( S; kfor (var i = 0; i&lt;10; i++){
, q( }0 z; Q9 R2 I    if (i == 5){break}; O5 C' Z/ \  Y0 V
    console.log(i)* J( }$ D. T7 X2 y$ @( {5 n
}
, e$ o& @/ p  b/ D- V) j6 X1 g% Q0 R 0
5 I  U8 N& H; C2 g4 U 1
* V8 F& e- A0 o0 n1 G2 W 20 ^# d; O6 ~) e# l8 `
3/ F: R9 k/ A: z
4: t7 r( Q9 j# I' E8 {
// continue% a% L% \# B$ `" o% J
for (var i = 0; i&lt;10; i++){8 T1 o. \. L5 Q
    if (i == 5){continue}
$ S* W% S9 F4 o+ W    console.log(i)4 b& ~$ g! B' e: Y3 b
}2 w. i- _6 P# Z1 Z
0
) F" S( P; R1 I5 ]& p8 E 1
9 j! \( U6 |+ V8 A, d0 o8 W 25 H7 U# c0 G( c
3/ s! s! J# c( j2 t$ C
4. b/ O, _9 S( s0 x- M* f
62 \6 p. i7 T8 L. `% z/ D! ^2 Y0 D
7
2 y! {) X0 }2 N8 _  ~; ]( t/ [% z 8
. W+ f% D+ A; ]1 |: h3 f5 }; e0 y 9- G) c3 q3 G$ x. ?& K; o4 w& [

2 {; c2 z8 {$ s( p; S* V</code></pre>, K4 k# a4 n! m% b: |6 ~# f# |( }
<h3 id="26-三元运算">2.6 三元运算</h3>
, F0 \- q" X9 j* A. b+ ?0 ?<pre><code class="language-javascript">&gt; a
6 V+ i- E) y% i6
4 C3 i8 d% |6 R&gt; b
; o$ f$ ?: ?, B' c% Z' o+ p6 o38 K/ U+ A$ {5 R
: c0 Z) L0 m( d0 l$ u
//条件成立c为a的值,不成立c为b的值( b' e8 i1 U' P( w* p  E
&gt; var c = a &gt; b ? a : b  \2 ^1 n2 ^, ]4 |4 h5 J( n
&gt; c- m6 I1 _7 @+ f* j8 B
6
! ]: `8 Q7 c% L6 ^- V7 t
! O# F' Q5 ?$ h3 G1 T  a// 三元运算可以嵌套6 ?2 y5 X/ P6 z1 K3 W$ y2 J5 F9 Q% M4 W
</code></pre>  S- C1 a- S+ o& @/ |
<h3 id="27-函数">2.7 函数</h3>
9 f$ ]/ m; ?% J" r/ P2 u- R<pre><code class="language-javascript">1. 普通函数+ m" j7 d; z! G
&gt; function foo1(){' h3 j1 d, p" c0 p: I8 Y
    console.log("Hi")9 }- q9 @+ K0 r* ]: R$ h' p
}
( F5 ^# P  i% x* ^$ `8 w
3 K, O$ `% i) n, Q&gt; foo1()3 @# z6 C5 r# @' g1 s. I% a3 K7 ]
        Hi
7 g! f4 I% P. Y) u2. 带参数函数5 [# \+ d1 S' i% f8 n' M; G
&gt; function foo1(name){
9 n/ b& z" T8 U' Gconsole.log("Hi",name)4 I! B& {( t1 b( O0 W
}
. L' j* s4 u& ?& ~% X! ]4 c0 F4 B$ V. W) u1 d
&gt; foo1("Hans")
2 v( J: r; B0 W3 i2 HHi Hans. w9 {2 ~! R9 j/ M1 t$ Q+ b
9 V- A4 C+ M. D4 C. r* l
&gt; var name = "Hello"0 E1 j6 _, q% W& S/ L+ Q9 o
&gt; foo1(name)
0 D( [& _% L' G. c* }! y9 t* tHi Hello/ _9 a, N9 _- C+ u) B: Q' E
; S8 M2 O( I9 J( N) `& W
3. 带返回值函数
, i/ r& C2 a; i, }% l( |( V&gt; function foo1(a,b){
& M5 q; q( j' _        return a + b   9 g7 Q6 y' @; E, |
}
6 e% o* Q% O8 v# X( @6 V&gt; foo1(1,2)
* r% ?  l' P( S. X6 j9 ?3
& j* ?8 x5 _! G&gt; var a = foo1(10,20)  //接受函数返回值# H) ~$ u2 f+ U8 U4 \- g
&gt; a
9 o: D+ Y, z; w9 |. g) u8 I30
) v  E0 w' ]. S& x# _) t4 t0 k; t+ l
4. 匿名函数; k3 y( x, G# I9 S4 o( P
&gt; var sum = function(a, b){
8 G( C5 |% w" j0 Y  return a + b;
+ O( ]+ H! {& q2 k}/ X0 i; z& f% x2 d3 _- V, z5 H' A
&gt; sum(1,2)
4 r! y& j9 q) p36 E) G1 V# r$ [

8 L1 m9 v4 {3 r% [5 S// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
5 F; v& s. F( `&gt; (function(a, b){
3 l+ G0 u3 ~( m# C6 s  return a + b' n1 q1 D" H; Y& k
})(10, 20)
) h; P9 L+ s: ]6 f3 m; Y30& D* p" ?1 e4 C% D8 ~6 K& S
. Z) A, E2 }8 i: v, @
5. 闭包函数
. }+ v& ]8 Z6 ?+ D) @// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数. b3 ^7 p; b" ~. x" n: h& @- R/ t0 T
var city = "BJ"' ^! s  X4 n& G! w* A8 I; a& m
function f(){
8 A# U% K' Z) g$ G7 h; o' a    var city = "SH"$ H4 F( F1 A5 X- e6 F' f
    function inner(){
! p9 [$ k/ p# q: |" ?        console.log(city)
& O! Y' x/ Y( U3 `* u1 J$ q7 T    }: W/ @( M+ u, x
    return inner
9 u2 P7 Y' [/ `: z5 q# N}; T: `' `7 W8 P5 a
var ret = f()
4 s* [3 R% ?* ?0 |2 U3 Uret()8 T- K" j2 u/ I" y) J
执行结果:
9 g, f- j+ x& T7 g0 P0 s' s( U6 RSH4 E; ^* t4 x6 T& J3 P) f# T
) `% l+ p: g6 P( R6 P
</code></pre>6 P" b+ m; \: H: X
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>2 F1 G' ~7 O, ?
<pre><code class="language-javascript">var f = v =&gt; v;- j, C  X( r0 Z: A
// 等同于
8 |6 S4 g% H  G% [var f = function(v){+ n! _0 ]! P1 m2 E+ [( C
  return v;
* b0 A6 F$ f+ J. l}' |" S* |  \; |
</code></pre>
2 a1 T6 @) U: _<p><code>arguments</code>参数 可以获取传入的所有数据</p>$ h2 [! D1 L; Q. m
<pre><code class="language-javascript">function foo1(a,b){1 ~/ R" }/ U2 _3 H
    console.log(arguments.length)  //参数的个数
" ]" o8 u( P3 g5 K$ {% x6 W    console.log(arguments[0]) // 第一个参数的值
4 S  ?2 \3 J, c- P& w        return a + b   
) f" L" u% @- B9 l& w* e}
( T/ J: ^# {0 M# r% {foo1(10,20)
# z" y( R" h  c3 s5 e- @1 D6 f结果:: u8 K" B. Q  E8 f7 V
2          //参数的个数
; y7 g8 x2 }5 ?( y. a: ^$ h10        // 第一个参数的值) g4 u: o# \, B
30        // 返回相加的结果
+ _2 \5 F! d* t  x. K</code></pre>% t7 C( m0 g$ \5 c
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
7 O* O' X, z5 `! T<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>$ b  F) z' p' x; d, H+ ]
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% |; ?+ Q% J$ f8 M1 D# U1 d
<h4 id="281-date对象">2.8.1 Date对象</h4>
- ^& t# M8 V. n8 D" P<pre><code class="language-javascript">&gt; var data_test = new Date()
( J1 d8 {- x; I&gt; data_test5 h  M  W  k" [2 M
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
' b, {" z* X* K&gt; data_test.toLocaleString()
% i- p) `- E* ]% j% L/ _$ }( \'2022/2/11 下午9:44:43'1 t1 }+ V3 `9 D* U( S$ @
  ?5 n6 G/ ]( q, G
&gt; data_test.toLocaleDateString()% p4 {# J5 m& J* @5 E4 n
'2022/2/11'" [9 B+ M" H+ r
% Y; t3 i( z! Y' x$ N/ W1 }0 D
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
* Y: l9 o$ s# L* \" B8 u" G&gt; data_test2.toLocaleString()
  O6 y1 r+ {+ ^! U5 D; {& O'2022/2/11 上午9:44:43'+ I* g) ^; _; s% A
8 f% Z4 }' ], q# C0 X/ C
// 获取当前几号
4 Z3 P8 D2 w+ w&gt; data_test.getDate()
( w3 x/ P/ ]  y; x11' {! n8 @6 z: p* O" G! ]; y
// 获取星期几,数字表示
6 B* g* U: Y' `$ f2 u" W&gt; data_test.getDay()  5 B3 O& H- q8 x0 V
5
5 T# ^2 Z- d$ d% U- r7 g( \// 获取月份(0-11)
& s- H+ u% J( z&gt; data_test.getMonth()
, p* E: T# H5 S1
% j& r0 x& X! [; o& b// 获取完整年份! Z- T7 }* v6 f3 t; B# Y) ]; E7 |
&gt; data_test.getFullYear()' l4 |% Y- }, j; N8 s  k5 R
20227 f9 ]$ k! S5 f$ q/ r
// 获取时/ q! Q  B! S' |. o/ o. E
&gt; data_test.getHours()) W8 y7 `6 h) n5 i& o% g% h
21! d* g' n/ o# \$ D$ s2 t0 U
// 获取分
' y% W; Q% M1 M4 h5 \" b&gt; data_test.getMinutes()
, ?* [9 E, t- e3 ?9 a44
  ^6 q" }! d" z3 |' \; V1 ~// 获取秒! b6 C7 b6 r3 I4 ]* Y8 w2 m& H* d
&gt; data_test.getSeconds()- A) M+ _: a7 D" j3 q& S
43- C8 L6 H9 h" K, S* w7 q
// 获取毫秒" g9 m2 n8 W! d+ d
&gt; data_test.getMilliseconds()
& A+ Z. l4 t+ i" M$ W290+ ]/ @! z$ R) u
// 获取时间戳+ s- P1 [7 ]; s/ c2 S' _, T& S
&gt; data_test.getTime()
* B0 ?9 ]# @8 m5 o1644587083290
. {4 y  v8 f( C3 O: s" b. }5 t</code></pre>! v2 _* ?. D% N
<h4 id="282-json对象">2.8.2 Json对象</h4>3 S* U( n8 S( Y
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串2 P! F2 _2 t4 J
JSON.parse()  // 反序列化,把JSON字符串转换成对象
5 W# o" _" u* b
; f" J, d0 s+ u1 C9 I! e* s- A/ Z4 c// 序列化" w+ r/ C; O- n# {
&gt; var jstojson = JSON.stringify(person) ( g" D: |/ ^. f; k
&gt; jstojson  5 B! B8 T4 @: f% ]) Z3 V4 r
'{"Name":"Hans","Age":18}'0 P# q& q* u( i# G3 {

, w: h/ |) Q. O// 反序列化
: v$ y: U- l# G9 [&gt; var x = JSON.parse(jstojson)
1 t0 k* U) f9 L( l' S3 T  `  ^&gt; x
* b% ]) @6 A, T" a) k8 O. I! \5 h* j{Name: 'Hans', Age: 18}6 l: p5 k4 q& A* e5 |$ N; E6 R6 W
&gt; x.Age
" G: X, ~& v$ w& o8 K5 @1 B188 P" M& a" f/ {2 ^) c) s
</code></pre>) Y6 h7 E7 p; A- b3 X
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>8 X" `% s. y0 h) K
<p>正则</p>
6 z" I6 V# z" w, x# F3 u( ^<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");1 {/ R4 X9 L& d( i) Y1 X
&gt; reg1  v/ ?# p! [, T4 x
/^[a-zA-Z][a-zA-Z0-9]{4,7}/: }/ A+ G- f4 I/ R0 x- K
&gt; reg1.test("Hans666")
( c: \* R+ q- L3 qtrue* r. L( k/ B4 l* J# M1 o) Y

' q3 u& B" s9 R&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
, @( V4 N2 q+ ^: k4 |: d- X&gt; reg2
- w; S% D  ]3 y" \( m6 ?0 ?0 C4 c/^[a-zA-Z][a-zA-Z0-9]{4,7}/
# [3 I/ _# }5 B% w8 j&gt; reg2.test('Hasdfa')) R3 X! I8 k) D
true
( E# k' |; B  S
  ]( ?4 B' q& m! [0 J- L2 F全局匹配:
! b& T( k; n6 m# m1 C7 x3 K# z; n&gt; name' l, v& F! o! u2 e' t
'Hello'1 V$ G/ R& i  J& P
&gt; name.match(/l/)6 D8 B: ~0 d6 s7 h; Q' d7 i  x
['l', index: 2, input: 'Hello', groups: undefined]- V% ^0 V5 u, L- `
, b; f- Y( j* B/ J8 n
&gt; name.match(/l/g)% S8 p8 b/ v  x" w" A: ~+ h1 s
(2)&nbsp;['l', 'l']
' P0 [* U- `) L' ]) L& D) h// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配+ j# ^6 R1 |4 h4 }7 N# p/ g
- j& x- U, F$ G
全局匹配注意事项:
3 K$ x9 ?( `  m8 `# N! p8 o: O&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g& U0 o6 I" s8 z2 Q8 @4 q% s; K
&gt; reg2.test('Hasdfa')
  _: M0 I, e' S: N( J  jtrue+ T( \$ z! {0 X( N5 q- M
&gt;reg2.lastIndex;
0 J, B% d+ D5 |7 k* u' A3 {6
$ [# M6 |9 m  b&gt; reg2.test('Hasdfa')
% b/ R+ s% T8 tfalse
9 I4 _4 Q( v- F$ X: R( x&gt; reg2.lastIndex;8 }) u% y$ m+ f" W: Y
0
5 i: z7 O2 w4 `" v7 a8 M&gt; reg2.test('Hasdfa')" ^. O+ u0 u$ B$ H1 L
true
) p7 H" E& \0 H' S/ @+ N. a1 P$ j&gt; reg2.lastIndex;& X# z! O" N4 [$ {" j. J
61 m3 L9 ^+ J+ R6 l6 B! P6 U
&gt; reg2.test('Hasdfa')0 K1 |' t: O' S  \0 u( p7 m
false
2 e$ j% h- c9 H1 B( R&gt; reg2.lastIndex;5 d0 L4 M1 S- `
0/ e! D; q+ V- ]  z5 N8 ~: _
// 全局匹配会有一个lastindex属性
$ I8 k  _9 d" L( ^9 g" O  J&gt; reg2.test()
3 S; F0 }3 S2 w8 K8 wfalse3 Q: q/ k9 W; V* l0 K/ U2 C
&gt; reg2.test()- A! i' z9 A; j, X% D/ S5 w1 }- g
true: H. ]9 x5 }% `2 a! r
// 校验时不传参数默认传的是undefined
- \, Q( X. V" Z5 O; m& n</code></pre>3 n3 F7 D1 U2 U
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>. |0 ^1 W  `+ r
<p>就相当于是<code>python</code>中的字典</p>7 V; r& H/ X: @3 {, l! W
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
3 y9 l* Z* n* d&gt; person6 i$ I/ k9 l+ H" G/ n, d1 b6 P& z
{Name: 'Hans', Age: 18}! I, u- e4 r+ G) i- J/ A
&gt; person.Name
. R2 n1 \* P$ v  Y, W+ r# {'Hans'
* L2 @# Z* [  p4 D8 j&gt; person["Name"]% \, O- n9 U: ]1 n
'Hans', j% Q! x6 l" u9 e& i& h/ B  o" y

4 L5 j( ?$ b) J& c// 也可以使用new Object创建
4 c& Q. w/ g6 W* U- x6 |) v&gt; var person2 = new Object()  D& e. w9 J. h7 Q6 @" i3 m
&gt; person2.name = "Hello"
- ]. p6 @8 {1 g2 c7 `7 v8 P! f'Hello'
; E7 U$ v8 k2 l  |; |+ X&gt; person2.age = 20/ A( B0 ^. v2 ]
20
+ Q: g, ]) a) o2 b) J</code></pre>
, d& x5 F) X; F. g8 X/ t<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
# g# s. r! I( D2 |6 c<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
' t9 I8 S2 ~! T0 J$ T- b% k* ^* O<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>7 T- x% n9 _3 n6 L" G/ F( I
<h3 id="31-window-对象">3.1 window 对象</h3>
* i4 c3 L" X/ C& w* {5 }  r# y) t  G! t<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>7 m5 k: R: k7 Q$ `) r
<pre><code class="language-python">//览器窗口的内部高度
5 N7 a) E% F$ `, [$ w- {window.innerHeight
3 l$ f* h" T8 \) ^706
: ?& A6 u1 d+ [//浏览器窗口的内部宽度
9 i3 |+ t& ^, ^) Lwindow.innerWidth! I" ~' S8 u( B: l" k! o7 k
15226 }! ~! ~( a  f* I) p
// 打开新窗口, [- s9 K+ M6 P4 Q
window.open('https://www.baidu.com')
5 p7 P; z+ H1 g7 [% d3 Z; m9 \" jWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}  n; N! z. ]1 h9 j1 K. x7 [
// 关闭当前窗口
+ z# R7 o7 Z, ]5 A! ?window.close()
. v- y# r1 p* o8 B: X" i8 \//  后退一页
$ A% E3 _+ C+ L/ Fwindow.history.back()
' T) f7 i, y0 R9 \9 j// 前进一页
) D$ @+ x  h$ O' Y" q. H5 |! Fwindow.history.forward()
5 y5 A) z3 o0 ^5 ?! ], f//Web浏览器全称  s1 z+ h9 G. `) I9 y5 S
window.navigator.appName2 Q* N) d1 Z+ e; J
'Netscape'4 ^4 i& Y5 X1 n' |8 X0 a& B
// Web浏览器厂商和版本的详细字符串4 S: }$ x* d* `9 r# L+ M# h
window.navigator.appVersion5 }* P. X5 f/ X8 F
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' ~  b* p- [) b+ r  g( r# L// 客户端绝大部分信息
% I0 B( O# h4 O6 Awindow.navigator.userAgent
* b4 a6 A5 y& U* ~/ ^'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'; M# d; K3 J9 r  _
// 浏览器运行所在的操作系统; L# _- v* b7 I* m  s" B( v" N4 K
window.navigator.platform$ J7 `  G% {; ?
'Win32'7 _8 d3 O- E! ~8 f+ e9 N

7 `0 P% Z7 z8 U+ w- R: h4 h$ u//  获取URL" A) l- Y! m. h7 ^+ }3 i
window.location.href3 p3 K9 B4 h9 g8 k" Y
// 跳转到指定页面
) m/ j6 O- A: Awindow.location.href='https://www.baidu.com'. i  N& w: M% ?/ O+ c
// 重新加载页面7 B2 J) H* ^' \2 i
window.location.reload() * _4 v" Y4 L' z1 R$ N. b9 A
</code></pre>' _" k5 {( n9 U1 c5 \& O7 Y* Q* O# C$ M
<h3 id="32-弹出框">3.2 弹出框</h3>
$ P- `  H/ y# h% R<p>三种消息框:警告框、确认框、提示框。</p>
/ p- L; C6 A" [0 D( g<h4 id="321-警告框">3.2.1 警告框</h4>4 j) L3 t: ~* L3 g( R
<pre><code class="language-javascript">alert("Hello")) o0 }9 u  x2 |& @! W2 `, M
</code></pre>0 o7 D7 i  i7 Q# U; A7 X
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>. g2 h5 Z" t& a: s' ^) c% G# L' k
<h4 id="322-确认框">3.2.2 确认框</h4># M* K7 _3 J& W/ V
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
. U  y( P& z' E& L<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
4 a3 _( ^0 i" ~' g% ltrue
+ w, R: O) c0 K; I" M$ m" K&gt; confirm("你确定吗?")  // 点取消返回false
6 e! S$ ^& _4 {0 w1 q6 |, u& \* ]( mfalse7 X) ^) ?2 D1 A& T
</code></pre>
% w/ `7 B- o1 h* ?' z+ L' h<h4 id="323-提示框">3.2.3 提示框</h4>; z+ N% m* Q5 k
<p><code>prompt("请输入","提示")</code></p>/ k$ W4 \: _# A! i1 ?6 n2 @3 _5 P' }
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>8 R( ~$ z, N5 W6 Q4 V
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>$ ]' Q3 v9 p  C- F: _2 y8 Z+ R3 }
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>5 ]6 G. A' j4 w7 j7 b+ z0 i8 _4 F
<h3 id="33-计时相关">3.3 计时相关</h3>$ |5 R/ p. a8 f4 }& L
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
1 s4 S# @( m: R/ X1 W( S<pre><code class="language-javascript">// 等于3秒钟弹窗
' K1 I% i& P9 i- y% R: `9 \+ \) isetTimeout(function(){alert("Hello")}, 3000)
- |1 o: Z# [: e5 p
  h7 D1 ?* a- A4 X" ]; Q; t9 Nvar t = setTimeout(function(){alert("Hello")}, 3000); {7 u7 ~$ v! e; B: T3 p+ h) A+ |

% g# p! ?0 G0 a/ x; b' y/ d5 \// 取消setTimeout设置
+ S( x# X0 C% R- oclearTimeout(t)" A4 b% K# q# S% Z1 v
</code></pre>
3 h( n5 N$ u" z. z5 H3 t5 a<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>2 M2 G/ ^: U6 Q7 r8 I
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>" ]2 {2 R  S+ c, b0 y
<pre><code class="language-javascript">每三秒弹出 "hello" :
1 l9 [$ z2 B5 K) F+ H8 fsetInterval(function(){alert("Hello")},3000);
" c8 q6 M& T( B5 o; P( t</code></pre>: I( \5 H  v! G
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>6 q& i; }4 I, {5 ^
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);% h/ T7 k0 N7 k) F
//取消:
4 C7 T  P# y4 [2 P; lclearInterval(t)
( N! B2 j3 f4 b* t/ M</code></pre>- @' W% r( u$ g" ~9 v

4 L' m# {$ k8 ?& ]
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-7 14:45 , Processed in 0.076437 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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