飞雪团队

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

前端之JavaScript

[复制链接]

8034

主题

8122

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( U! i' J) C3 S' e9 o- M1 \: ]<h1 id="前端之javascript">前端之JavaScript</h1>
- p, p4 X$ P- ?1 k! |' W3 D. `<p></p><p></p>
( y6 \% I! }( @, ~) G* Y5 M# l) q: }<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>  A! A( @4 ?1 H1 |& A% }
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
' U" U; m/ u8 A! D* _: j它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
* r9 D0 w( @) _% y2 i  N它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>$ H' I. p# J& t1 \/ y: ~5 m. C8 w
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
: c) P+ s0 |7 A8 S7 U<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
6 D" m% n. e: C<h3 id="21-注释">2.1 注释</h3>
: ]/ @/ e5 q" z- a, T$ R: A( J<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>( h8 Q6 [! v6 Z2 \; a
<pre><code class="language-javascript">// 这是单行注释
% n) U3 n: T4 X4 D, T1 T
) {# O0 \% y# D" a0 j* c/*
8 ]8 d4 g. c0 Q5 \5 a; q1 m- k这是多行注释的第一行,$ ^3 N8 h0 F: B5 i- K5 I
这是第二行。# R1 {: h3 V; S! o& T! u; D8 B
*/
# @% n4 }8 W; [- k* f</code></pre>& y9 y; M& J0 V9 ^
<h3 id="22-变量和常量">2.2 变量和常量</h3>
0 M, A  n  K: x$ p& w<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
8 k2 [3 h8 D$ d) f+ p<ul>
9 G: A1 h5 r0 h- M7 L<li>变量必须以字母开头</li>! G" v, R$ U0 v5 \) J
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
7 F& r0 O( M/ [3 T, V8 Y<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
0 k2 k/ b5 b" F+ F: v</ul>
' c! ^/ i6 ^/ }  X<p><code>var</code>定义的都为全局变量</p>  H, U: e+ k* b6 S) ]8 S
<p><code>let</code>可以声明局部变量</p>7 Z" B& q& l2 Q/ l& C6 W. k
<p><strong>声明变量:</strong></p>! z: M( P- s5 @, j
<pre><code class="language-javascript">// 定义单个变量9 v% i' }5 C+ v
&gt; var name
( @# j+ B1 V8 j$ h* `7 s1 f&gt; name = 'Hans'9 g$ ]( `- O7 b$ o, ~+ z' `
//定义并赋值& r& a% R7 m6 ^6 ?1 g6 q
&gt; var name = 'Hans'+ C2 H2 G- D% P+ H
&gt; name
% M% p% k/ L& q( z'Hans'* l" }" [3 T" H  O, ~0 s) _" R/ N
  Y: H$ T* h! ?7 u( [; Z
// 定义多个变量
; K% q/ f9 c" |2 f" h9 C: s, F2 D&gt; var name = "Hans", age = 18
( m5 T+ j( [8 g8 p8 K; @3 v* u&gt; name
/ m. {8 n9 n8 ^+ T5 O'Hans': s- |6 a, f7 p+ @
&gt; age
* |7 @$ ^2 i! _" }0 J18& j) K* w6 p) W4 G! L6 H: ]" p% y

4 r6 M" U' R) }- l0 X9 N//多行使用反引号`` 类型python中的三引号8 z, B# Z% x( i9 S2 z9 A- V
&gt; var text = `A young idler,  S5 q  r6 y5 [- N, h' y0 y
an old beggar`2 Z7 j: r* b8 n6 \' j3 y8 r) G
&gt; text
7 s. V# g6 b2 A0 D3 K'A young idler,\nan old beggar'
$ a& z+ H1 ^: j  O% J9 Q) v</code></pre>  y% V$ i& W- n
<p><strong>声明常量:</strong></p>- j# G5 k4 L! ~2 m# Z* W
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>8 i- [" @# D1 V8 _
<pre><code class="language-javascript">&gt; const pi = 3.14
0 T* v5 t( Y0 n7 I) x8 b&gt; pi
- f4 P  X; `$ `; U3.14/ ?2 A1 y* h1 Q# p
&gt;  pi = 3.01
3 f; C% [) V6 M8 PUncaught TypeError: Assignment to constant variable.! H) |# ?$ h3 b6 h4 S5 h
    at &lt;anonymous&gt;:1:4+ M+ s/ b$ u3 k) Z/ F

& d  C) _5 B. @4 a. U8 L7 \</code></pre>
3 x# d$ g7 b1 a% n8 G/ H<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
, a3 ]0 F. C, c9 t& p$ V) ^* F2 C2 \<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
, `/ R6 f- p5 {) `, z<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
, r: L- T- u: s6 g9 u<h4 id="231-number类型">2.3.1 Number类型</h4>
1 a0 a  g, \5 l6 [<pre><code class="language-javascript">&gt; var a = 5
/ N1 ~0 ^* I+ l& _&gt; typeof a   //查看变量的类型  ; Y4 h# n- O$ W$ c
number
& e3 B# r- d4 [% Q( D4 Y7 u: R  [! {5 D; F: E
&gt; var b = 1.3
0 R/ {% c( p' R/ O# M" \/ t5 e&gt; typeof b
! q+ Y  q8 _1 V) P# n7 Inumber
: k( Z( A5 f, o6 B/ X6 W
' S; D4 |; u- E  m* R// 不管整型还是浮点型打开出来的结果都是number类型
7 v' @4 j! i8 T% F3 z& u7 e1 b% Z+ S5 O
/*: F& w( U5 P8 r" A$ ^' S
NaN:Not A Number, c( d: w/ d' B8 w% x% |
NaN属于数值类型 表示的意思是 不是一个数字
; [: L0 X7 ?1 m" s+ I  q: |*/
; C2 O( W! U  O5 Z5 w7 j2 n! s. \# w6 {
parseInt('2345')  // 转整型
5 |$ n2 e* ]6 Z7 \) O2345
# |' v/ U! c6 s  y, n6 v% P+ oparseInt('2345.5')
, c1 c9 e$ y8 q+ x' z8 W" B2345: v0 o. a" |* ?6 k
parseFloat('2345.5') // 转浮点型
. q0 D) d9 ?1 z/ K; r1 L  w2345.5
+ |; U& {0 {3 r' q& O& gparseFloat('ABC')) d* G, N) G6 {
NaN
% t* g9 B$ c( o' @( ?9 qparseInt('abc')
& f% C% f9 ]5 d# l: {8 b( M" CNaN
; i3 ^2 f) G6 j) V  t</code></pre>
7 z& C" t( T; M: K3 g<h4 id="232-string类型">2.3.2 String类型</h4>9 f3 S- G9 G3 V1 j
<pre><code class="language-javascript">&gt; var name = 'Hans'( A/ P4 Z& J7 E- J/ [( C) G
&gt; typeof name5 E: r' O- U" }4 E
'string'
7 m, C  _5 Q; y* g5 ?
2 m8 V0 x, t9 I, ?//常用方法
1 b5 `- @* `8 I  a2 O// 变量值长度
! P( s5 `6 ~& D& O7 @&gt; name.length" Z. Y  Z; F3 ?2 G0 t( Q; q
44 k" m: P. M# R+ V( A6 E9 \
// trim() 移除空白: ^- Q3 f& b; s! \0 X% B' S
&gt; var a = '    ABC    '" V6 p3 _; D: x" |8 n6 W
&gt; a
4 y4 `5 ~" H1 ]& b+ |2 x'    ABC    '/ H; o6 C- W$ x" i! H3 Z
&gt; a.trim()* E% q$ P& t" x/ j( u# r3 |! l
'ABC': ^: m3 L9 A+ d
//移除左边的空白
6 m" |* {6 s  d2 K/ w; j&gt; a.trimLeft()
; q( ^; \( X; I: ]'ABC    '
3 F+ H- Q, K; A# c$ Q( d//移除右边的空白0 |/ B7 O3 m! j2 m, E. B8 G) e
&gt; a.trimRight()
8 A' E4 ?) o2 W'    ABC'
- c& [) W: u9 k. M
' D- f5 ~; k! x( _6 J* N//返回第n个字符,从0开始
/ X: a7 a6 Y; e; f6 ]&gt; name4 F' j4 }, I8 c
'Hans'
3 S% }% h! `& H&gt; name.charAt(3)0 ~2 Q- R$ W3 O6 u
's'0 K* Q" k5 ^9 S; _
&gt; name.charAt()
9 C9 s# y7 {- y3 {$ n'H'1 Z4 W$ _2 h( W5 o& d% h6 e  L4 p& q9 K+ z
&gt; name.charAt(1)
2 A/ {' {# r. B2 F- _2 V6 f) I'a'
. x3 O2 _6 J' F
- S& G* j& ?. G$ `// 在javascript中推荐使用加号(+)拼接7 H% O+ P. g; H- ]  G7 m
&gt; name& `% z. Y, R8 X1 u* k
'Hans'
/ c$ t3 ]9 t, e' R) B" H&gt; a
+ o7 D( |- h" u'    ABC    '
: p  f4 a/ E+ b+ o7 r  X) d/ \&gt; name + a
7 A- h6 ]2 P$ N! e% }7 Z9 _; J. h'Hans    ABC    '
& D" d1 K! _# h2 `4 O// 使用concat拼接) e: t: p  s) r& a" D0 V& S6 v
&gt; name.concat(a)3 G: ^5 A+ w4 H. J# u
'Hans    ABC    '
! w# o3 \  A  J- k6 w; t
) U! l+ j2 c1 w0 w) C" z2 v; l//indexOf(substring, start)子序列位置
6 [) `6 ~) Z; q. q
3 I4 h4 X/ w# v! R$ |- [( s) o2 `&gt; text, w2 b" n7 p$ F, w' T& W8 R
'A young idler,\nan old beggar'/ B( _# s7 f0 Y* {6 |! B
&gt; text.indexOf('young',0)4 [: J4 a. _: s$ J) r
2
  k5 X* E- j  p7 r2 G
$ j# _0 ^& D& I4 [+ G! X//.substring(from, to)        根据索引获取子序列0 I, J6 I, r2 M4 C  b7 ?/ m& h6 j
&gt; text.substring(0,)
( N' B, ?3 F& x* {* P'A young idler,\nan old beggar'
" P- j- l' e* l&gt; text.substring(0,10)
+ A# j3 r! ?/ a/ ?& C6 T2 a" M'A young id'
: `  t$ O  {0 Y8 F8 `7 s! i; H+ i9 B  G- u/ e: K- y, ]
// .slice(start, end)        切片, 从0开始顾头不顾尾
8 s: O6 ^4 t, ?2 j" G! [0 _" K&gt; name.slice(0,3)" i4 y) ~" q6 C1 z5 z* P
'Han'% K: o9 s% g( Z) Y: T( [& P4 F
1 H& K1 q5 W! u; F
// 转小写5 }+ m" i% a+ ^6 r$ K
&gt; name% G9 y: E: H$ n1 R; t9 a
'Hans'
1 ~9 R: y3 r& O# u: O8 m& Z5 ?+ s&gt; name.toLowerCase()6 S; C; D( x! V0 K" h
'hans'
4 S, j2 Z: F* U$ c1 r& B// 转大写
8 m8 A* f* \! T8 L3 }0 D&gt; name.toUpperCase()* l/ K: G0 G/ n8 a) M% l
'HANS'
' g8 }/ b/ h- ~# x- E2 W" p
6 J0 `( x3 d4 z: D. \! Z% g  u// 分隔- c* f; i: |1 \) |, @( l7 `* H
&gt; name
. p; K  n2 h# d3 p/ A6 f'Hans'" _# y) @% h2 M6 C" a/ S
&gt; name.split('a')
9 S$ O3 r9 |2 v/ H: n( s( D, f(2)&nbsp;['H', 'ns']
: Y# U) N7 ?$ O  o4 c</code></pre>% E' T- Z! w' `* |9 B- h
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>/ C: l# g) n$ L
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
. J* V) x( t: `2 P# x<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, E7 B' j$ B, `* h  p, J
<p><strong>null和undefined</strong></p>
* C" D) p: C( V# D5 L$ I2 g<ul>. Y2 Y1 r9 D( _+ {$ p
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
, A) ?8 P% u  ^7 S<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
5 P$ W, z* b* }; ^, F</ul>0 W1 o( W2 H9 X2 [
<h4 id="234-array数组">2.3.4 Array数组</h4>
6 P" H0 i& d: U<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
( |8 X9 K: P* A' X* o8 S' J<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
4 n# }; x1 w3 X&gt; array1! P+ z) K- v, l7 f. G
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* H3 |% {" m! J  Y&gt; console.log(array1[2])  //console.log打印类似python中的print
7 b) i4 c& q- \3
0 C- @( f8 ?4 z' x% F// length元素个数( m# H5 r9 T0 L6 E% o/ A# r& f+ k: Z
&gt; array1.length- q6 O6 f) G' }2 o- e6 v2 F
6) m3 T9 X( Z$ f3 c6 @, @2 T6 s
// 在尾部增加元素,类型append- i* a5 a% \7 T% g
&gt; array1.push('D')
1 n6 L' K* [- M1 c, f' T, I+ ]5 u5 x7
0 I( S( o5 r9 L: C; K, ^! I&gt; array1$ J4 y6 Z3 f. V7 D8 J8 {
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']6 b7 ?/ \% f! z5 y* @
// 在头部增加元素2 j+ C- A; P. T. ]+ z1 y3 |; ?
&gt; array1.unshift(0)
/ h7 D3 D" U, \, O6 \8
2 B0 ^1 ~* Y, E, }! x&gt; array1
# y/ X7 O! k! |$ K* H(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
  F# Q# Q' ?1 I5 X$ M1 f' |; ~$ y8 m+ w
//取最后一个元素
0 ^! ]) y" d2 O) {$ H  {&gt; array1.pop()
# ~* w$ k9 A! j+ Y'D'2 o6 m! [/ n, T6 L
&gt; array1, h# F6 r( ~- ]! j, L
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']" H7 {+ g6 p. Y7 ]) o! e
//取头部元素
9 q1 G/ \. Y& n7 Q- {8 K" z2 _&gt; array1.shift()
  \7 ^0 O% X1 v; }0
* v" I2 }1 }5 T&gt; array1, }! I5 @. D7 k" ?7 o! }
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']3 E- H! Z! p; ?& O- S6 A) z& @

  F6 q* ?* R( w//切片, 从0开始顾头不顾尾
( p' @1 V% Z, ~& t% A" L5 o&gt; array1.slice(3,6)5 j5 @, I( v# X3 d* `
(3)&nbsp;['a', 'b', 'c']5 T/ h7 S2 n. H0 P. h
// 反转
# J" ^: a/ z5 c4 Z- D5 ?( G1 ?&gt; array1.reverse()
' i" s' b4 e1 v9 k! F(6)&nbsp;['c', 'b', 'a', 3, 2, 1]9 t" V8 w! L- x+ Z* d( Y
// 将数组元素连接成字符串
' X( C5 k* |( Q. T&gt; array1.join() // 什么不都写默认使用逗号分隔
: G, _* r( v% d% Q'c,b,a,3,2,1') _# {- S3 g1 H! w6 x
&gt; array1.join('')) R+ s7 ~3 s/ ~3 w, n2 K" h
'cba321'
. b) K( m: S* b# L&gt; array1.join('|')
: I: `1 g9 E  e' C+ i5 C'c|b|a|3|2|1'
; j, O- |1 }* c! n6 H( r! X' R. A- k3 z+ N* {2 \
// 连接数组
# z/ E% M6 H' \6 t* j5 a&gt; var array2 = ['A','B','C']4 B+ g* D' G3 M" j$ x0 Z% {
&gt; array1.concat(array2)
- J: |% x- z* |( Y& G5 W6 M' U(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
8 R8 c  H/ [% I7 m* U$ l) k
! u6 m3 H' @" w9 l! V// 排序# p' y. x- T2 d
&gt; array1.sort()$ o" w& C1 U0 j4 ~9 P/ c. Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* ~% n& H5 h7 F+ r( w$ ^; z  B3 B$ l
1 k0 V* E! C+ S) o7 ^// 删除元素,并可以向数据组中添加新元素(可选)" G5 S. e: d+ n& y
&gt; array1.splice(3,3)  // 删除元素
" _4 }% ?4 W" R3 {% p0 Y" [. K(3)&nbsp;['a', 'b', 'c']
: G3 N) M7 c- k9 K* [& B' L&gt; array1
0 D* I$ O, w+ t' S1 J: G6 O(3)&nbsp;[1, 2, 3]
% Z+ q- I* y7 Y  c&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
  k! w9 u. p4 i8 h+ }3 }[]
. c6 R4 u2 G" Q3 s; q&gt; array19 A5 }" I- U; @; Q' b' }
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
/ m+ W- R. ~! n' ?2 Y7 F; I
7 x- n3 K& ?; A  @& |/ J4 r/*$ ~$ X, {, C. K' @* h0 u1 U7 [. W
splice(index,howmany,item1,.....,itemX)
9 z6 j+ z( `& w. Qindex:必需,必须是数字。规定从何处添加/删除元素。" @4 \! ?0 _5 _4 Z1 a2 a  h# d
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。2 F% Q% M( g# n1 T5 l) x
item1, ..., itemX        可选。要添加到数组的新元素5 f6 c7 _$ M; J, z
*/7 d9 L- ~3 x& E4 ~" l' M1 V2 S- A0 Z/ ]
0 c1 Z) Q8 V6 d( ^; o" |
// forEach()        将数组的每个元素传递给回调函数  O* o$ F/ I! s2 X& i- j) G: S) t, c
&gt; array1.forEach(function test(n){console.log(n)})
) [3 a9 l' \  W2 S 1
: u+ B! T- g2 t+ n4 ]3 Q' a& U 2
9 M" h! E; U1 b, K8 i. F 3* i& h9 e7 @! a0 c, Q& Y
A
, ?' g6 }  @+ f6 u. p7 Z B
: P, O, G6 U! h+ ^1 | C
: l: _" y$ B( a// 返回一个数组元素调用函数处理后的值的新数组
( }; Y5 \) h% b5 s" d- m& q&gt; array1.map(function(value){return value +1})9 z, c4 ]7 o* z8 D- l
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
; W  e+ y6 H+ o- R& c8 D' T</code></pre>
# l: G; f1 `: V$ r; U) h( ?<h3 id="24-运算符">2.4 运算符</h3>' ^, J! f/ C1 L
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>* G' I, b% {, K7 Z, n
<p><code>+ - * / % ++ --</code></p>5 N3 N7 T* k, D7 S1 d; k
<pre><code class="language-javascript">&gt; var a = 6  [6 v: v! s7 T# ^' F3 o; a7 T7 I
&gt; var b = 3
# @7 A. d* v; m3 E6 F// 加: D0 X' J; m/ H2 J  m
&gt; a + b
' z8 N7 e9 {' G) T96 o3 K- y6 J, j; l& v+ i
// 减( k! L# ]; V  }) s
&gt; a - b
2 l! o- g8 J7 R( b& q3: E) F' n$ \4 L& N3 a/ L
// 乘
: Y7 @5 f! U- T8 }* v&gt; a * b( n) p3 W) J, E2 w  C3 C
185 {8 h- }* f$ n
// 除
/ ^. U3 I3 s$ g) H- e&gt; a / b
, @* H9 s0 A* m2
0 n0 u1 u& h1 C1 {& F- D4 q# W$ _// 取模(取余)
7 w- t4 t0 o* r) h# _2 Q5 G&gt; a % b
" p, M+ c* @8 p7 M, ~9 J( x0. J1 F- \3 F# A$ Y# B, z
// 自增1(先赋值再增1)
5 p: f$ z+ X4 P  M( J. C+ y, b# R&gt; a++
  w! m. P9 Y0 B% H( i. b62 D7 c- f# g8 T
&gt; a% y( ~( [9 x" f0 n5 W
7! ~& o- O. I+ s9 f: _
// 自减1(先赋值再减1)
" T" O$ @; j% ~% y' ~6 [  X  @. C( U8 H7 C&gt; a--
8 S  y+ [( r! D4 V( `8 j+ k7+ U2 I$ e) r) a( n$ v* x1 M
&gt; a) p# V( g; {: [
65 m8 q; H. O) k$ x
// 自增1(先增1再赋值)- v( S! s* T; x2 R9 n  r
&gt; ++a
- R5 j" u3 `& Y: _* |( a  y9 {7. H2 k/ i% ?3 C! L
// 自减1(先减1再赋值)* h5 S0 G' C" A1 M4 L
&gt; --a
% K1 S) F, A& i, r2 \64 {' v# H" y" t
&gt; a* X' b" n% M% K/ H/ J9 V4 f' G6 ^
6, ~' X3 m% I0 W5 f, b; O

5 W. k& }' P4 ]9 \, k//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理9 `) d. t* G$ S. `: b! i# d6 o# ^
</code></pre>
( g( u5 d6 {, S. i<h4 id="242-比较运算符">2.4.2 比较运算符</h4>8 g; S( b+ e  c  s
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>3 m5 i  i, r& y3 X$ G- ~
<pre><code class="language-javascript">// 大于
* C; k6 a& y! `( D  e! T&gt; a &gt; b
6 D2 p8 T5 o9 g9 R- Otrue) V/ c' T$ X8 p# F) g. T( B3 i
// 大于等于
& t# Q  C) \) Q/ ]. g# v&gt; a &gt;= b; O# Z( E) t5 ?3 ]: m
true$ A" Y2 Q: D& L8 ]! w+ A5 v
// 小于
, ?7 r. F) f" a6 G: c- U% _- y9 E+ y$ C/ t&gt; a &lt; b2 _* q  Z# J$ R0 W- U* n, C
false
' W3 `, j/ t( @// 小于等于
3 G8 h. M! ^/ X# ~&gt; a &lt;= b0 N" i# M! M9 M) c) x9 j6 g
false# K' V" d/ R' A0 }3 u
// 弱不等于
. P$ I% q' B0 u+ Q3 J( N5 p7 e8 }&gt; a != b8 {5 H4 g* d/ {2 G
true
) a0 k4 P# {7 O# }) Z2 {9 ]4 ~0 N7 h// 弱等于
! f2 d9 R& p: }' \3 p6 s* }&gt; 1 == '1'
( ~4 x, c2 k; h# x- btrue
: G) \; \  Z/ Y( V/ {8 ~! o// 强等于3 I: y0 P; z! L8 [
&gt; 1 === '1'; a: @9 O8 d/ D
false  [: Y1 h; w& u1 |( L- W
// 强不等于
1 L$ R8 U: K1 B, Y&gt; 1 !== '1'$ e- `5 z7 \6 T1 J. e
true
8 Q  C" H7 i# V' V5 x+ S  K! V+ w& t. D9 u
/*0 B5 ~0 o# `/ y( `! E' b5 ]
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误; p+ ~3 P+ n/ L% D% r, ?
*// N9 B/ X' E. X9 A
</code></pre>
- _3 j8 o3 j5 c! f<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
3 [* `+ Z" x/ ~5 S<p><code>&amp;&amp; || !</code></p>
4 y6 F7 I- o8 {5 R<pre><code class="language-javascript">&amp;&amp; 与
7 ]4 q8 V7 t1 y6 y& C: j7 @. U% Z. w|| or " J$ L0 v0 p( |* s0 r' e
! 非
8 k6 w0 `$ l& F* T7 }5 y' E8 g</code></pre>* p$ q0 c# P/ ?: B; u
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
/ d7 i0 C  k4 e" t. E5 ^! @<p><code>= += -= *= /=</code></p>
) A2 B" K6 \5 U/ Z0 {9 R- f<pre><code class="language-javascript">// 赋值
8 i' S: M% n5 R4 V9 X% ?- s: b&gt; var x = 3
0 O/ Y: T6 ]9 \$ _) ~! C// 加等于6 U" v, F; C! v$ n. R+ l% ~
&gt; x += 2
/ b# p8 D. r! }' O9 H: @% {5) ]4 f8 _4 t! p: P2 R
// 减等于
1 U* {5 l/ s: Y3 D# d! E6 l&gt; x -= 1& g* p  ~' S3 X1 y$ b. s1 a4 J
4
" _! z* {! Z! `8 {// 乘等于2 z5 U+ X9 k) q0 y0 u$ i, U
&gt; x *= 2# d+ b2 g5 z# _' S4 H
8
( r: d" i" ], a, f% Y// 除等于" @3 b& H- A& k) M# b% A* A, T8 a
&gt; x /= 2
2 z* N5 x# \# D0 D& ~9 }" ^4
7 b6 \' a/ P. m0 d/ t1 s</code></pre>
0 {' N7 a- X; g; r2 M" h<h3 id="25-流程控制">2.5 流程控制</h3>& X  V, t# ?2 E
<h4 id="251-if">2.5.1 if</h4>
& y+ p) \" M+ r  ~2 O, B<pre><code class="language-javascript">1, if(条件){条件成立执行代码}1 ^. Z* H$ i! o+ N9 n- L  r
, k& `5 j% \! R# p  T: e3 j
&gt; var x = 3
! \5 U  K7 F3 j* Y8 f9 x&gt; if (x &gt; 2){console.log("OK")}
) f0 s2 p9 S& C. w/ N8 T OK) r$ [' g7 l7 m
1 ?4 u* N7 q( G! E
2, if(条件){条件成立执行代码} + d1 h$ u. k* d2 H! D' j% E( b! ?
        else{条件不成立执行代码}! M/ j# I# T$ r4 V2 h. t
% d" G6 T1 L- V' v7 p0 e
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
) J( ?% g9 P+ I" w, K. h'NO'
7 `) W" n( x0 z% M4 A5 q4 b5 L% k( q& J9 s
3, if(条件1){条件1成立执行代码} ) P6 K' U6 q. [' S! Z0 [  f
        else if(条件2){条件2成立执行代码}/ X9 Z7 }$ E, L) ^8 a3 ~
    else{上面条件都不成立执行代码}5 y8 b0 H; H% Z6 L, F
) S. L1 v& e7 o( d& p! p; @' r
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
* O1 V- k$ F( W' F Ha
) {% b+ R" C) C" I: F3 U+ q5 o</code></pre>( k  }( Q! M1 e, m3 f1 B4 {
<h4 id="252-switch">2.5.2 switch</h4>
* H& I+ W) d; M1 }<pre><code class="language-javascript">var day = new Date().getDay();5 L9 y) J6 \! L! U
switch (day) {# C4 C) Q3 @/ B
  case 0:( \  x9 r$ _+ X2 m
  console.log("Sunday");( a4 L6 n% e9 D6 ?- d6 Z
  break;, ?$ k6 R) |. h% z
  case 1:
2 z& h: T/ }( R5 E/ ^- H( F! o  console.log("Monday");* l* d1 J' y4 T; M
  break;
4 a& n/ |+ S' @! U1 i* ]default:5 {8 ^; p* m: \) u% u
  console.log("不在范围")
% L) h8 u: R/ e0 p$ k3 @) h}
0 ]5 X. K: U6 n* ?9 E/ a+ U' I 不在范围/ S8 S1 i0 \3 ]2 p0 u* ]9 [0 a
</code></pre>: i7 H% X* f; @9 N7 _3 b
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
5 h0 J$ S* C5 s5 }' a: |% n  \: T+ e<h4 id="253-for">2.5.3 for</h4>
' ]! M5 k7 U* {- g9 B3 _3 }& y<pre><code class="language-python">// for 循环
6 [, s/ E6 z8 M, F        for(起始值;循环条件;每次循环后执行的操作){
* ?  s1 F) ~7 q        for循环体代码2 _# |" o  [% W0 e/ f5 v
    }4 A4 c8 A1 L9 _* \1 @( |& Q. X
  W9 f- n9 t$ H( Q) f
for (var i = 0; i&lt;10; i++){
8 i3 T; A  l9 Y# M    console.log(i)
2 H9 Z, i9 P. r7 |5 C4 \}
+ |8 N' z$ W" E5 m+ W        0
% [" |5 l- J/ c. H8 [5 Y        1
& V' B4 V6 ]$ T9 V        2) I+ F2 P7 w1 v- m9 ^; K, n$ @  S
        3
2 C2 ?5 q4 {' F7 M: Y        4
1 ?" y- g" x/ P$ d8 A% T4 r, d  W        5
8 w  i$ R* W$ W3 {; I        6$ ?1 h) T% X/ V# S  }! X; K+ e
        7% V0 x& N5 Q* b' Q
        8
7 x$ x' P) n7 [$ O' \& n* A        9* l/ q; z% l  S( f( D) ]1 ]
</code></pre>
) G. _$ `6 `0 h<h4 id="254-while">2.5.4 while</h4>
3 |. O$ H6 j. y# o: D<pre><code class="language-javascript">// while 循环
5 m: F4 y: K2 E. J$ e% Z        while(循环条件){. @- N* S4 h+ p- P) d
        循环体代码. ^0 g7 }8 c3 T  s/ w5 l) {- E
    }
: B# y! A1 @% W
% E# S8 M4 a6 T+ @&gt; var i = 08 a) n& T+ L) L% _& ?, L) k& S
&gt; while(i&lt;10){9 w9 h4 T4 q! a& P; U2 E4 t
    console.log(i)
! `6 A  X/ g! Z% ~    i++
6 I: l( S5 R1 L, O6 X5 z1 o}
( R7 s' q& F) E; n- Q5 {0 D 0: _$ s; T- F7 o9 s: ^# @
1! U: _7 a7 C' c4 w* ]/ u
2
8 ^5 l. N* m( t( J/ I# R" N, D 3) L  T9 z. m/ Z
4, z: I  K6 b7 N/ D% y
5
$ L7 L  t! m5 N/ S  n 6! V7 p) i$ Z" Y0 R$ S- T& `/ R
7! y5 w3 F9 B9 s
84 M& q/ o1 E/ I5 \
9  R" L+ o: W' r9 }+ D  F% m+ `
</code></pre>
, y' g/ v& s6 f. x9 j" M; s& q9 o0 Z<h4 id="255-break和continue">2.5.5 break和continue</h4>) h) A) X5 f9 v9 u% `" c" }/ I
<pre><code class="language-javascript">// break7 }) P3 ~" n: l
for (var i = 0; i&lt;10; i++){
* W- T9 R  Y& J2 e2 U    if (i == 5){break}) i+ R1 Z% c, S% i
    console.log(i)
5 F. G/ f; L/ ?, G- `* Z+ @}
( q5 Y7 ^, s) _7 j 08 h9 x& z4 s/ s1 B/ @. E1 b" X
1
: a- U8 Z2 j& L; @3 z 2
( p1 O2 _; o8 _. t# l 3, N* W; D9 \4 D* O) C  |  o% y2 s
4" g' F! Q( m- X$ b
// continue
; ~; U! `$ c1 p8 R8 P3 ^for (var i = 0; i&lt;10; i++){- q; e+ N: J4 a' b
    if (i == 5){continue}9 w( f0 E6 Z6 R8 i& X: i8 f
    console.log(i), K$ d. h  D- ~+ G  t; j
}
( Z2 B" U* P! X/ S- Q; a 0& x, [6 c& _: P9 c) }5 x
14 @0 x7 [- C+ U  n9 N. o+ C$ C5 j! F( b
2* j" r& }1 a/ T  O
32 K1 j- M9 x2 `2 E6 C* z6 R  c( w8 I
4
- |/ g8 d/ x: a 6: F' W1 O) j7 V
7( Q2 l. `$ D2 Q9 e2 D; X# U
8
3 J: H" j4 Y$ A1 [4 o/ P 9
7 z4 U, @9 A$ _
# f! f# `0 T" [8 V: D</code></pre>
/ S! Y9 x3 N" u* v* l& {. V<h3 id="26-三元运算">2.6 三元运算</h3>
  t+ k8 b! b, H6 Y<pre><code class="language-javascript">&gt; a
$ p6 L, m# q9 o1 o8 i" `# D65 p- ?+ W5 Q* e# f6 Q+ @
&gt; b
5 [8 O) q  M' k/ h; s2 }) v9 z3  G3 {! d. a3 X0 ^( J9 Y2 _

8 P# L2 Z+ L; p+ Q! f1 N//条件成立c为a的值,不成立c为b的值/ g6 _1 z1 |4 i
&gt; var c = a &gt; b ? a : b; d8 K3 A4 I- u* q' Y! ]* b
&gt; c
' K  s# T% F+ C+ [& T; T: k& }6- z9 Y- U3 H0 h& h+ V
  C) w- d3 j+ f+ v
// 三元运算可以嵌套. e* s7 Q  E8 w" Y% t9 ~: a1 q
</code></pre>6 j' P1 E6 r- N( ?# [- Z( c
<h3 id="27-函数">2.7 函数</h3>
0 }& F7 y6 ?) f, ~2 ?6 j<pre><code class="language-javascript">1. 普通函数; I+ K1 f! J: j& Y
&gt; function foo1(){
( a/ ?9 Q/ c! h2 G1 n. s4 c    console.log("Hi"), k4 |4 o9 ^$ J
}
; S7 T$ y- {8 l. A# l: X8 W+ A( s. K% L. u
&gt; foo1()
' I: u6 v: Z. X; c# S        Hi
* Z, H4 H6 A/ C2. 带参数函数( C) z) \: V# u: s
&gt; function foo1(name){6 p& M4 ^1 ^  Y
console.log("Hi",name)
+ }( U( _2 Y# u5 W+ v- S1 j}9 I5 x5 m1 F8 H/ c9 X: K( H4 S

! e; I7 R: D& t  ~, `1 G&gt; foo1("Hans")
9 h6 C% Q. D. K* J" L- ]2 N% dHi Hans
3 t1 k3 z5 j' B' {9 l# @( g1 x: u) x( v) `* N
&gt; var name = "Hello"* k6 ~. X; ^/ p% l: N- i
&gt; foo1(name)  o7 q% d3 l5 O
Hi Hello0 E% G, s3 q5 o& ?6 C. S; Y
! r8 s9 v, F2 J/ m) i
3. 带返回值函数# ^2 k* n9 Y- m1 H. ~
&gt; function foo1(a,b){
4 |9 e5 z- j" B/ _  T. E! X        return a + b   4 X5 n" Z6 E  _9 ~3 Z  y& G
}" |; |0 c' ~+ y5 w" \) h
&gt; foo1(1,2)* M! [; Y/ k6 e$ m7 ?( o
36 \4 x1 Y. y+ C0 A
&gt; var a = foo1(10,20)  //接受函数返回值( _6 R: W; t/ M% j
&gt; a- Z2 W% {+ f! ?; R( ]) q- n
30* H2 R+ s$ [+ m9 ~4 \% |5 P

3 M! b" I( e. P! C1 x# Y" n* B3 r4. 匿名函数& [1 K3 u- s# j; H
&gt; var sum = function(a, b){
; M  A) g: c' _) h0 T/ ]- a  return a + b;
3 v+ r% G4 @; T& s! r: g" p- f8 Z! p}6 r: |' m4 s- a2 ?# v2 ?
&gt; sum(1,2)
/ ], h7 S+ {# ?! w1 R" y3. T' a- H+ U0 ~& n' n$ t

4 }% O# W$ t+ l" v- V* w% s// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
$ |0 K% R  `3 c3 u1 |&gt; (function(a, b){
4 R8 X( C0 p$ Z! R) v- [  return a + b
: @$ L. X% b% c5 C; U* n})(10, 20)3 e( Z- V& U( n
30
# A  s' J  i  s9 ?; Z: o9 t3 N1 o/ j) [/ B1 k: b
5. 闭包函数
7 B. B( S& p5 L/ \// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
; o% M% f1 K- r( b+ b1 Bvar city = "BJ"( s% y, |+ P& ^' u5 _
function f(){) v2 Y  x1 W! u; ?) d6 L" n, Y
    var city = "SH"; H6 S3 t/ Q+ U+ h4 Y$ p  C0 T  _
    function inner(){4 p. l; L  W2 M; d# b9 H2 k
        console.log(city)
6 z" h' O8 X2 G; M* [    }
# }9 D6 ?: o, K: t3 {0 [* u  F    return inner
. I, |# s' R4 w. s* _$ O! i}
: Z) n2 U) e3 X9 @var ret = f()
8 s  O# {1 O2 ^  @6 t# n; Y, Kret()6 Q3 b- q2 H8 i1 A
执行结果:+ k0 m" u' ?$ l( b
SH
% z1 k' g6 d; [8 a5 o, _1 a% R+ T" U" g3 [; m* b; v
</code></pre>
4 {$ _4 Q4 _( V5 D. G- x; G( ]<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>8 v  }$ E- `6 z9 P: d- d+ F: o
<pre><code class="language-javascript">var f = v =&gt; v;
6 r: m) ^; x' h4 q, V// 等同于$ F6 Z" m" y  t; _; C9 N
var f = function(v){+ R+ B; q- U+ g; }4 K
  return v;
3 S+ G, e, c8 k) @/ h1 d}2 G; h. Y! i; f! D
</code></pre>
1 w, D: C/ \. j5 d+ K. Q<p><code>arguments</code>参数 可以获取传入的所有数据</p>$ Z( i8 h9 r6 q; j
<pre><code class="language-javascript">function foo1(a,b){
5 [  D4 B) h! V) T7 R' O' l    console.log(arguments.length)  //参数的个数 + P4 E' s7 _7 s/ a+ k# Z
    console.log(arguments[0]) // 第一个参数的值8 h0 t, G- _, ~; V8 V; ~) o
        return a + b   / p& H- f% ?, J! W, z8 q, i
}0 a  _" F0 g- l1 Q8 R; ~
foo1(10,20); {. B! E% ?2 p
结果:7 G$ p) c* G1 J/ n+ R- J) y
2          //参数的个数
1 H2 y  X1 t( }7 X2 g% h10        // 第一个参数的值
- P  X# J8 [9 o" r4 r  t30        // 返回相加的结果0 y4 t* N3 _" _/ [) k3 p- Z  }
</code></pre>! Y; M( Z& S. s3 S
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>5 z1 B) ]# J: Q" v, c  x
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>- K, s1 u- l% `9 E- @6 `+ u' S
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>" }4 F" }' U6 K; |, ^6 ?2 ]" |
<h4 id="281-date对象">2.8.1 Date对象</h4>7 c- Q8 V4 D: {
<pre><code class="language-javascript">&gt; var data_test = new Date()7 E, w+ H2 A. M5 f6 E
&gt; data_test
8 E! m! u( Q* F$ fFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)% u2 F$ {" @: R  X# z  ^
&gt; data_test.toLocaleString()- t: z  B' e8 N0 A
'2022/2/11 下午9:44:43'
8 B% u! F9 j+ V& J: ^. J6 a4 E# i8 g  ?. V/ ~
&gt; data_test.toLocaleDateString()" H3 D4 C/ ]6 h2 l
'2022/2/11'
7 w- K" J/ O" b/ X0 y1 A4 F0 E& f& v  Q) U
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  H# w+ g) w. A" Z' K' C&gt; data_test2.toLocaleString()) _9 ]( r* k. z, Y' J( w
'2022/2/11 上午9:44:43'
$ u7 [0 V2 w: Z/ Q: X% Q' ], ~) ~1 }3 e* v1 f
// 获取当前几号6 ~$ \8 m9 G# W; a
&gt; data_test.getDate()3 v+ }. h* a# _; \5 ]! }! M
11" h/ H- @0 _# C7 a5 M
// 获取星期几,数字表示
$ j! s! f9 Z( Q0 Y&gt; data_test.getDay()  
1 h% M, v: ^6 o( l2 h% s59 H. ~6 i- Y- w0 d4 `
// 获取月份(0-11)
7 g' r; p3 o6 `0 ?: a. V&gt; data_test.getMonth()6 z3 u- |$ b" \" ]( |
19 h* `6 B- k  l$ P+ f  r+ t, D4 X
// 获取完整年份
: O: X& v# M! p5 `& }8 B&gt; data_test.getFullYear()  A; _7 N, S- z# h
2022! `, h; M$ e! D6 @: e  M0 s  l4 A9 `
// 获取时
" y7 G  z; T/ s2 k( e+ h+ z" G4 l&gt; data_test.getHours(): O! r# I5 p+ \4 P& z, r0 V
21
1 H" E$ _3 V6 [/ K// 获取分
5 X: V* z2 g6 ^# b3 U$ n&gt; data_test.getMinutes()7 P$ V# _& A: Z( O; z+ G5 d
44
+ t5 F2 \5 r0 l% T% }// 获取秒
7 u0 ]! Z$ y. t$ j- {; C&gt; data_test.getSeconds()
  b, j3 x7 B+ B  f0 l435 E$ b# y4 h. B
// 获取毫秒  ^; |* o* z. f2 V0 M4 g& N
&gt; data_test.getMilliseconds(). q* T- u/ w5 F, v0 s# a7 L& v
290% o; K$ e4 u" v
// 获取时间戳1 b6 e: @% [$ J( I# p; n. }; j2 h
&gt; data_test.getTime()
+ v2 L1 V  Z( z$ M) G% b' L1644587083290/ G* R# u% W* C9 \
</code></pre>
" ~" r) Z  X: s1 I6 g+ K% g% y<h4 id="282-json对象">2.8.2 Json对象</h4>- a1 A6 ^. g3 Q  y
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ C9 ]) L1 ^( v, c" dJSON.parse()  // 反序列化,把JSON字符串转换成对象+ F# J3 i3 V0 f# g, M8 c

& P" [  t. Z% _/ C7 [// 序列化' q: s: ?8 ?8 w
&gt; var jstojson = JSON.stringify(person) / b/ s8 P6 o7 t/ @1 {
&gt; jstojson  
7 }+ ~' \0 }- J# X5 a'{"Name":"Hans","Age":18}'
; f' {* S/ ?3 j0 N. T% J1 ]) M" M4 \4 @, V, _% \
// 反序列化
  A) w/ t, ^# W" ^+ f' h+ V& R&gt; var x = JSON.parse(jstojson): J$ F% D: v( T; H
&gt; x: f$ m  Y! ?( O$ i* L1 g. ]/ I* P
{Name: 'Hans', Age: 18}
' x0 f6 `  d# t8 p( W5 K2 C& G  y&gt; x.Age9 I; H, @4 W, G
18, m6 h3 H% m- z
</code></pre>
% S' X' r2 M; D<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
, o$ O1 k) l% [5 P4 B# D<p>正则</p>
8 }! G) G4 l* x! b+ R# A+ B6 H<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
( I( L' A( d0 x6 J) ]& q&gt; reg1
7 e$ |  p+ Q5 I3 Z' ~+ L3 \/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- _! v! h  Z9 G& U( ~&gt; reg1.test("Hans666")
, f4 O) {/ r  B1 o) ]  btrue
) `* B( D( z/ q. h8 l1 f7 ^) F. C* u2 A7 C5 e
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
" C; n- e9 B+ I' d& r( t&gt; reg20 |6 ~1 q3 q! N9 {% }% q0 _, x
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
2 v- N; y6 ~- T- n% [) [&gt; reg2.test('Hasdfa')
& L' g' ?* K# ?, r4 A+ _" @( ]true* D5 T' k0 \0 M. o* V: S8 w; ?/ q

8 V  y0 u1 j& Y全局匹配:
1 e( ^$ I) i' X- r! T&gt; name
8 [) F4 {7 O/ f) C: `'Hello'
* B  Z# i- l0 g' B; K1 m&gt; name.match(/l/)
, u: _. k5 V) F+ y['l', index: 2, input: 'Hello', groups: undefined]
0 J+ Q* s, @7 u) V( i5 q+ M1 @/ k4 Y! |& p
&gt; name.match(/l/g)  v5 C! v% {0 K% @# i! c9 |
(2)&nbsp;['l', 'l']
% q4 {) f+ T0 G+ F& G// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配% [- q6 Y8 I+ Z5 h# o
$ s  M+ x5 h9 I) ~( X
全局匹配注意事项:
  y' F; G9 f3 [" y* F&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
  _# \" K. O- r&gt; reg2.test('Hasdfa')
% }3 F: j: H. l0 e. y0 u3 i2 L0 _true
5 V) B$ u8 z7 e9 F5 K9 f&gt;reg2.lastIndex;- ~! s# V/ S4 Y* _: N- S
6
- o8 [/ F+ y4 I1 o&gt; reg2.test('Hasdfa')4 P2 X3 B+ _8 S" X  I: `: Z
false
7 n) ]# @% Z2 C* `: @6 Q9 T/ i" F5 d' _&gt; reg2.lastIndex;
& r  P$ R1 V$ }. X8 m0
# w( H: q# O7 z. C0 r* g6 X  C&gt; reg2.test('Hasdfa'). O6 a; S- o4 X7 c1 Y8 k
true; f7 V! z. |2 i# O- y6 j/ c* ?
&gt; reg2.lastIndex;# [- r7 H  [# j- @: p$ V; X
6/ }' a9 C/ b* m% K9 @- _! V0 z/ f
&gt; reg2.test('Hasdfa')& n7 y; ?6 M5 I7 q7 I* k
false8 h: i2 X3 F6 i- U
&gt; reg2.lastIndex;
9 ^2 {/ Y% g6 p1 T0
3 R- O- f+ z6 o4 k" r// 全局匹配会有一个lastindex属性5 ~5 Y6 }# I( h* x! h* ^- z
&gt; reg2.test()* ]- y  G6 C$ ?2 \0 m, ?) _  G, A
false* f: N1 H" y, \. u, o4 B
&gt; reg2.test()
3 W+ m0 B3 u$ g( f8 _5 E/ D. A0 ~true
; b1 z, D* k) Y: {* A2 T9 u// 校验时不传参数默认传的是undefined  S) H! M- G8 b) ^
</code></pre>% ]) {4 B2 H3 Y3 |
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
8 e' L" D/ q1 E$ U<p>就相当于是<code>python</code>中的字典</p>
0 u! w5 q" T5 h# R<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}& q2 q0 c; j7 @5 p$ e; B0 k6 U
&gt; person
( m  f/ L3 A9 l( i: h. ?0 H! }{Name: 'Hans', Age: 18}
, N) x! T4 U/ r, e&gt; person.Name
2 A. C( g; d  M, }9 H'Hans'
! x# R& u$ V7 S0 `&gt; person["Name"]
# N( `6 j; i* u$ e, h'Hans'
0 I6 v* |! _9 p1 ?$ K# R& X0 @
* T; s. K. {. j: C) R/ F& g  ?// 也可以使用new Object创建
! T$ D. B3 Q+ L* ]: m&gt; var person2 = new Object()5 w8 R* p6 r9 ]" z' u
&gt; person2.name = "Hello"& i( ~$ ^( S; `% ]$ ?
'Hello'
$ k! @  S5 q/ Z! X' `&gt; person2.age = 20
; ]0 \8 S& Y9 V20
9 g6 Q# T9 n" h</code></pre>
' |3 `4 _* k( Y( I<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
3 Z5 Z6 \& i3 I; Q! o1 t<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
* [  R7 _& d0 S2 R<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>$ |5 K) B& m+ t6 W* y* B, \) N5 L( h
<h3 id="31-window-对象">3.1 window 对象</h3>  b6 @+ B0 L7 ]6 l
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
/ Z1 ]6 r' z$ K$ }: [<pre><code class="language-python">//览器窗口的内部高度: f- q. L. l% z2 |
window.innerHeight
7 I+ P" j. G$ B: K9 W/ q% l706- O/ b  D/ V0 i5 w0 G" D
//浏览器窗口的内部宽度
% u* d8 g. l7 \5 P8 S+ G( lwindow.innerWidth0 w; n* f% A$ ?1 d% u
1522* N8 o, B+ K4 y1 [5 a6 w6 I
// 打开新窗口& \8 o8 ~8 G$ ?
window.open('https://www.baidu.com')7 c3 n  f# v! k/ R: J' e
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}$ U: P+ @+ W+ S  R; f
// 关闭当前窗口
: E2 U+ c) i" f8 f7 owindow.close()
; }" i( I, k3 g; O9 q! T//  后退一页3 u, R) h: E7 ~% V" B$ N$ S: A
window.history.back()
9 P4 s& r$ }/ ~// 前进一页4 A+ T1 T( T6 p9 n. E* a* W
window.history.forward() 6 n* _  W# _' e# O* e9 {1 Y; B- m
//Web浏览器全称
  k/ t5 U6 w- `9 ]3 A8 \# Y' V1 bwindow.navigator.appName
- n8 V4 A5 i3 x7 J  Y: V0 H7 S' j'Netscape'
/ v; V- b( ^! J8 @  T! y1 j// Web浏览器厂商和版本的详细字符串3 Y+ r/ M8 y9 E/ m1 P; m
window.navigator.appVersion
1 m& ~: I5 Q% Y4 y% V+ D'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ E3 T4 r- a; i  ?3 L// 客户端绝大部分信息$ f, _* a, _! _" C7 A, L% ]
window.navigator.userAgent3 k- z$ U( M+ L* Z
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
5 O' R3 @- U+ s2 g// 浏览器运行所在的操作系统; Y" n7 p& v+ p1 U- K- M* O8 a
window.navigator.platform
" ~) P% [  e  J9 X'Win32'- h! B$ X% |* r" ~. K( Y
: d1 a( R$ [0 o. H# B! z; y( V
//  获取URL( C0 x8 M7 U: S/ e; v  S8 Y/ W
window.location.href0 A1 Z/ l$ v. B0 A% U
// 跳转到指定页面. r. {0 A9 {, F7 ?* t3 y/ Y" m
window.location.href='https://www.baidu.com'
  Q% O8 V7 T; P( _9 y4 Z// 重新加载页面
# ^4 l, H' V8 O' E/ U) W" v6 Hwindow.location.reload() 0 I5 g) w; ~1 h$ m
</code></pre>
2 @1 X) U# w9 e3 ^<h3 id="32-弹出框">3.2 弹出框</h3>
0 {1 g) u$ G; n+ e+ G7 @! D6 ^1 l5 S<p>三种消息框:警告框、确认框、提示框。</p>
/ X! }% B# }" P) e9 E<h4 id="321-警告框">3.2.1 警告框</h4>9 X& F2 @5 L" _% H, e: G
<pre><code class="language-javascript">alert("Hello")1 g) N9 K, `. d. H, a3 T3 _
</code></pre>! M* x. _+ {, h( q9 a
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>) ]. F" G5 T, A% k, V7 f  ^4 s* Y
<h4 id="322-确认框">3.2.2 确认框</h4>
$ Y/ k) {& p- A) y. o<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; ^4 j& H$ C4 D% b8 R<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true9 U  f* w4 U( U8 f6 T! ]
true
( p5 ^4 g# q/ [&gt; confirm("你确定吗?")  // 点取消返回false6 t3 }- ~7 m! p. C+ }. K
false
- W0 N2 R' L5 N( g  P* w</code></pre>9 d$ ~. N+ b3 k% o; `
<h4 id="323-提示框">3.2.3 提示框</h4>
  f7 b+ k2 a( r+ x3 f& B<p><code>prompt("请输入","提示")</code></p>4 I, L# Y. _# {* S  u+ n/ S
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>/ F) Q. e" ?- ^8 N" J9 O0 _
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>& w! F4 H( T1 }$ S" E( L
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
% G4 C+ b3 Z2 g  M( o/ R<h3 id="33-计时相关">3.3 计时相关</h3>
1 x7 A2 _0 L+ M<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
* ]! m' a: _& h  O3 Y<pre><code class="language-javascript">// 等于3秒钟弹窗
# m  l) S! r+ k" P+ B/ F" HsetTimeout(function(){alert("Hello")}, 3000)
" a  q3 [! {2 R7 x8 [9 {& v% n0 {- Z' X( o: Q# W  l
var t = setTimeout(function(){alert("Hello")}, 3000)9 z$ c& Q) M# \% G/ o

4 e$ c  y' n& r4 B// 取消setTimeout设置) t# R7 i' M( J! |4 h3 F$ _% g
clearTimeout(t)
% P1 s7 E& x' g5 E# o- m" H</code></pre>* V9 @. c" j  e
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
0 m( Y, I: T+ v( `<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
( ]8 D! {7 z! c<pre><code class="language-javascript">每三秒弹出 "hello" :- @! W  M1 {0 o0 P; u1 W% D; r
setInterval(function(){alert("Hello")},3000);$ R1 i: s: A$ x1 g/ Z' T
</code></pre>
& ?  V% b4 _7 U$ m<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" E: q% r9 W' J' A
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 [6 [7 C+ V1 p( W6 u3 {; Z//取消:
. _2 g8 D: D! J9 _' q: RclearInterval(t), U$ r3 \& ~7 R/ W+ n
</code></pre>1 T. j1 B6 i! C) F

4 m/ |( W, `) U8 L6 ~# j
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-5 11:28 , Processed in 0.107581 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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