飞雪团队

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

前端之JavaScript

[复制链接]

8058

主题

8146

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26504
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
! ?, Q2 y2 B& [
<h1 id="前端之javascript">前端之JavaScript</h1>
* r2 q$ H. c% C  \' L( [) t/ ]. x<p></p><p></p>
( n6 U- x2 w3 S% P) e# s<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>0 f0 |7 L$ l. a; W, o- l
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
/ @* P$ X! D% Q$ k3 ]! z% r它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>6 R* S' {8 l1 p2 J( ^) }. q% ^
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>8 k, I" y2 l$ z; T. S" ]6 n
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>4 }! @" z4 z* [6 O) `
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>8 T6 o( I2 d0 x9 h
<h3 id="21-注释">2.1 注释</h3>$ P& f9 \3 i, D7 X5 d- b: c
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
1 O" u) p; ?  ^6 N<pre><code class="language-javascript">// 这是单行注释- o6 i5 t& \7 r; }6 Q  \' ?

" l$ z6 q$ ~9 c2 a5 z3 k/*. ~* V+ i( F' V+ P
这是多行注释的第一行,  a/ T' z7 Z6 H/ }4 z
这是第二行。* R$ b# _, S4 D$ D
*/3 C/ Y; P" n0 l1 k
</code></pre>
  ^7 g. Z& j8 ]<h3 id="22-变量和常量">2.2 变量和常量</h3>+ S) N0 a3 I" X$ q
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>6 O0 C  g, E, x$ g
<ul>
4 ?* r4 j# F- P7 W# v: l<li>变量必须以字母开头</li>! o: N- ~$ }2 G/ Q4 e
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>& D) e5 v6 t: y" V( V* j6 T( j
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
( i' i( u! v6 B* j# s0 H</ul>- P0 @  {" s. j/ O
<p><code>var</code>定义的都为全局变量</p># ~/ O, r. v* R; ^  G
<p><code>let</code>可以声明局部变量</p>
  N0 Z' K/ u9 Z6 Y: I<p><strong>声明变量:</strong></p>' Z$ e9 F/ g0 `: y5 c
<pre><code class="language-javascript">// 定义单个变量
1 M( h1 z% a% V1 O# ^* T&gt; var name
2 x7 M8 P" K/ B" q) G7 v7 y&gt; name = 'Hans'' G0 O, u" {4 S4 S$ o
//定义并赋值7 J) f8 p& M' M0 C
&gt; var name = 'Hans'2 `. {& i- @' D& z3 t. q+ q7 d
&gt; name  R9 v2 O! T* F# E6 h, S  f
'Hans'- h* F* o' I3 A. A% p9 Z0 C9 F/ P3 i4 d
& f( t9 `8 M2 \
// 定义多个变量
3 N3 ~5 |* N9 K7 k  ], W&gt; var name = "Hans", age = 186 `# ]) B( n$ Y, ~
&gt; name
8 a/ S! M  f; K. u2 d3 D'Hans'
6 b; s* p: k) d8 T- z# V&gt; age
- Z0 K. ~# @0 p3 U; _. a- j  O18. t8 ~8 ~  E  q: \8 [$ Q

+ K, J- e: i" O$ V/ ]) F//多行使用反引号`` 类型python中的三引号+ v! P0 C0 M. r8 A
&gt; var text = `A young idler,
9 ?8 x7 X( o* X, \0 S; o" \an old beggar`
) \. D3 `4 W2 x+ e9 V( z, D- P&gt; text7 P# d. j' a5 a# z0 D* ~1 H. q7 i
'A young idler,\nan old beggar'
% A- b) f% u* D- v/ ^( N4 s3 s1 {</code></pre>4 z1 x) V; b% T! u0 _, {/ |
<p><strong>声明常量:</strong></p>5 @+ U; J: N  |& Z4 h
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
, Y( M2 M/ f3 h! ]9 \<pre><code class="language-javascript">&gt; const pi = 3.14; _! {7 c- m% ], t$ ^1 F
&gt; pi
% s* ^7 P! N7 b+ N. Q5 w3.14
5 X0 G* R% b( x" s/ |&gt;  pi = 3.01' j- x; [5 w) O& t; @
Uncaught TypeError: Assignment to constant variable.
& v# V2 ]9 Y( ^  V    at &lt;anonymous&gt;:1:4/ Z  n' j- O: ]( ~
1 O8 z* a* Z. n
</code></pre>1 q( L" B1 m' t  B8 o* f9 H
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
+ z, w) y- H2 x' a+ e<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>( z' o6 }8 V& V
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>4 d3 X7 R' e" P
<h4 id="231-number类型">2.3.1 Number类型</h4>
; {* c$ i' |- ]- r0 E<pre><code class="language-javascript">&gt; var a = 5
+ b, m+ e5 z, n" B&gt; typeof a   //查看变量的类型  
/ i5 p$ @& R0 u4 U* O- u  Inumber
, k' y& J0 ^; ?  R7 S/ w
- `5 X0 M& b5 P2 J) S  H4 t&gt; var b = 1.37 i) T) j* c8 `; i
&gt; typeof b
2 @* ?: i3 ]+ ]/ Tnumber" K# E( O3 |2 Y0 [; _7 V& C
0 j- h) a, t8 Q
// 不管整型还是浮点型打开出来的结果都是number类型
+ F' J; ~* ~2 D2 ]: n! }2 v7 u' `2 \; G0 {
/*7 O( B+ Z8 f1 j# o0 H4 F8 h( C, L
NaN:Not A Number) x" a! k; F; f( O2 ~0 l& P$ V
NaN属于数值类型 表示的意思是 不是一个数字
, ~; o1 a( ]+ _7 X" ]7 y*/
, a- K4 C* Y9 J  x; n2 a9 m( X3 D  M  d( y/ W  ]$ _7 u
parseInt('2345')  // 转整型
9 u. R! O- w, u2 A0 R2345
# e6 T3 E  W& n& b  B* _parseInt('2345.5')0 Z" n* l" F/ U- R
2345& v$ n' e. z4 Q7 V
parseFloat('2345.5') // 转浮点型6 z( x5 h' }) j9 \# j. A
2345.5
  Q  q. |4 X) D8 ~  {) vparseFloat('ABC')
; q' m7 [# @( K) T: {0 a3 WNaN9 r* R- r: _9 h! R( W% r; ?' {% T% q
parseInt('abc'); O; l. f: T+ X$ N. Y+ I
NaN! S* f9 @3 |' c: `. r
</code></pre>7 }+ B* N* G* \4 a, Y! ^
<h4 id="232-string类型">2.3.2 String类型</h4>
+ C: i3 Z5 z9 e: s6 a; d2 T<pre><code class="language-javascript">&gt; var name = 'Hans'
4 |2 d4 p& }8 h! \( R# |&gt; typeof name
9 S. r% v/ J- ], w& H'string') a% F+ q9 B  W# a. X
  R/ W' q4 C+ ^5 T
//常用方法
( p/ T2 B/ }5 v; S// 变量值长度
3 z$ d7 {# r& i. j&gt; name.length; g$ P. d3 p# H0 G
4* C4 j0 f0 v7 N& R, t, W% K' E$ R
// trim() 移除空白
6 y" A- R" J" L; s& h) J$ f&gt; var a = '    ABC    '  Y" ~% G+ f* O" m
&gt; a1 d. [6 Y5 o: f2 c1 L) z
'    ABC    '
/ Y& J+ w0 D) j# _/ ]&gt; a.trim()
, W) T! L* s- ^, P8 |3 r: U9 i'ABC'
5 e6 t' [. X: a//移除左边的空白
7 ^: N  c% t, u! D&gt; a.trimLeft()
4 ]* U1 G* U, J# }' @$ ~% d9 S" m'ABC    '; ~! h* Q/ q+ j7 n* G/ R( @* t' c
//移除右边的空白5 k6 k4 B1 d! p, o/ ^0 |( G7 j$ c
&gt; a.trimRight()5 ]7 U3 K" L: j6 K/ S6 a7 |
'    ABC'
% }5 k7 {/ \0 ]5 E% c! m0 w2 V) m5 T! r2 V
//返回第n个字符,从0开始
% U1 F. n" e  Z0 g+ O&gt; name% I7 X6 @! n2 q) O7 l+ q
'Hans'3 Q) G' c. W  L
&gt; name.charAt(3)8 D3 y: v3 Q7 P7 y2 ]
's'3 c# p. I8 ?/ D
&gt; name.charAt(), V: W' F: D  A2 o4 G
'H'5 ^! |; D8 |- |
&gt; name.charAt(1)
% E$ I6 d, @1 d4 ?+ I'a'
* Y# _# r  \: b
2 }! f1 D5 w. G3 \// 在javascript中推荐使用加号(+)拼接9 n1 ]" S# k0 v& d+ q% W
&gt; name
6 t7 E/ O; ^6 E( S'Hans'' {+ J" B) {0 O7 D. ]
&gt; a
" L: `, \7 _% {. n0 B) X5 o6 a'    ABC    '
7 Y* U  W7 m/ J&gt; name + a
  ^' F! S/ M+ ?* r' X'Hans    ABC    '
/ S% P6 C* k+ D// 使用concat拼接9 b; ]! S" m8 M
&gt; name.concat(a): _  _4 i: H6 Y9 w. ~0 ^
'Hans    ABC    '
; J9 N, V$ e3 m- H* Y
; k0 _& u' P& d$ [" M//indexOf(substring, start)子序列位置6 N- P2 F2 V; W' p+ r3 |- U

. F8 v- G7 g( [) P/ w6 Z&gt; text) X! S- n# N5 b; `
'A young idler,\nan old beggar'6 v. Q/ ^$ ?. ~. b4 K2 T4 |
&gt; text.indexOf('young',0)
* h1 X; l* ^6 y( u4 j2. z- @! y3 z  o

& n# f, }8 l3 ~; C" r, ]& v//.substring(from, to)        根据索引获取子序列
, L% N4 p- i9 C! t' A! v5 {  `&gt; text.substring(0,)# B$ W! ~% S4 f- a" R# v( G8 o
'A young idler,\nan old beggar'8 F" [6 f9 F) y" z1 l4 \& z6 K
&gt; text.substring(0,10)& k' T% p: U; ]- h- H
'A young id'
4 g5 G+ i6 z' C% K4 x
2 N. @+ @' F) d4 I// .slice(start, end)        切片, 从0开始顾头不顾尾
. d1 g4 J1 [6 B$ M; [&gt; name.slice(0,3)  y; y, Q. k6 A
'Han'
; H0 [+ }( g( t5 _$ j! P7 r& ]( [% |+ b/ y: o
// 转小写
$ M; M, k9 Q  m* {&gt; name
9 M9 d& I. C  e" _( D3 }7 x'Hans'
! y" Y4 Z  o/ Y" v" f' K6 K&gt; name.toLowerCase()
, \; `. `: y3 ~' `- o'hans'
+ G- ^. Q0 o. W* f& S# ~3 `// 转大写
0 _. Q2 _/ Q! ~; J( e7 ?&gt; name.toUpperCase()8 m+ m2 ]6 ?2 `! }) R5 W. i: e
'HANS'8 v( g  {# _$ @( Z; {% ]

3 f; s$ P% z6 Z// 分隔, Q  f. \0 F# A; h7 a5 b2 E( z
&gt; name
3 f/ `: |+ p8 V% q* [0 N+ M- X9 Y! E. ?'Hans'
  v/ N4 U, p+ g&gt; name.split('a')
5 n. a  k0 l' W9 ]. o(2)&nbsp;['H', 'ns']3 K5 T# i3 N4 Q+ F3 `$ J
</code></pre>
3 g$ T) K) s- P% T' O6 b8 y7 U( u<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
  J$ x0 c% v/ [" Q! P( m( P" G, ]2 ]7 y<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>, O$ x! K- r# u8 e/ b
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, e9 ?/ n# F. @" X! s
<p><strong>null和undefined</strong></p>
8 V3 a7 U+ J( S3 M6 L' B  w% Z<ul>
" S4 J) }: `' |. M8 w<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>0 R2 [1 ^/ _% y9 q3 S1 j. y
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
: v2 A( `, b$ y</ul>
# s& j* p, J+ }+ t4 }: Z' b* ~<h4 id="234-array数组">2.3.4 Array数组</h4>
8 G3 j! W8 e, M* W. T) b4 X9 y- L<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
5 M9 K7 n) h& H. X/ Z% C: C2 K<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 2 G# y; w. E1 x4 ~% a6 \+ {4 O
&gt; array1
0 J" S- o% B( F6 O* d(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']% L. P( O2 D3 @. o" r
&gt; console.log(array1[2])  //console.log打印类似python中的print
: m) I' X1 ?- A; O0 c3
- L( p4 r( H/ j2 ~( U: H6 e5 z4 H// length元素个数
+ g! V7 r2 z% t# Q& A- |" m&gt; array1.length4 Y8 X7 L+ _6 A- ^" c0 `8 }- ~
6
- s  J8 f* U" g( L2 j4 H// 在尾部增加元素,类型append5 }! d' u- R- W8 M
&gt; array1.push('D')
3 x+ G5 M4 ?) B7
! t$ o. P* ~: V&gt; array1  X5 h- O5 u7 }& t. S% o
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']; D8 m0 }# G$ T; _
// 在头部增加元素7 W" X5 [. l8 \: }. }% U: w2 p
&gt; array1.unshift(0)7 C% R3 J. V1 C2 ~. f/ v
8
( i# f: ]; Z4 `&gt; array1* U, t- \5 X1 w* \0 R
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']5 U, V, A+ X: O. n

2 {( U: E  T+ a# [2 h: B4 `3 G//取最后一个元素
7 h( J. G; O* ?4 h' W/ S&gt; array1.pop()/ ?$ ?* T3 @4 L
'D'. h' E# s2 V0 a  |0 F' C$ k* ?
&gt; array18 ?( ^* A+ x% Z$ N
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
5 I. E/ L/ R- G" C( s//取头部元素! t6 \( `3 M- E3 Z! \3 r4 x
&gt; array1.shift()! y( }# U$ L1 i/ ~: [& |
0
% g# J7 m! ]( D* k( `. H+ {; {& [$ T&gt; array1, R3 Z/ w, h7 S
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
9 g) G; T9 i' w- y8 q/ J1 g. |+ i% @$ b) ~4 g& v
//切片, 从0开始顾头不顾尾$ b, o# [( D# \
&gt; array1.slice(3,6)! c9 A: x0 @* X' X  l& o. y
(3)&nbsp;['a', 'b', 'c']
' R8 Z4 A5 B. n& _5 G$ `  n6 J// 反转- f+ j9 X; \2 Y0 g; n
&gt; array1.reverse()( ?8 C2 M! h! l# D' w7 k
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]4 g1 B/ P0 t, Y% l1 P1 ^
// 将数组元素连接成字符串
5 b9 N7 h- E- m: m) l&gt; array1.join() // 什么不都写默认使用逗号分隔
4 Y6 N' F; s2 D! {'c,b,a,3,2,1'
  ?% i) g% l% R4 }4 u&gt; array1.join('')0 G% f1 m7 D# w/ }6 Z
'cba321'
. }; {5 h" n. M. h5 u! s. G4 O&gt; array1.join('|')6 d5 u- s' U7 g- e% X
'c|b|a|3|2|1'" I' W: A7 ?1 v

, ~7 H8 j1 ?2 D' a// 连接数组
% L8 I. V6 b% W- F3 A&gt; var array2 = ['A','B','C']
1 r* x: U* @6 \1 Q' U, B&gt; array1.concat(array2)
) z' W3 v* o: p(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
& A! p- L) U! `, g; Y4 M& g: x/ \9 A1 @
// 排序) }  S% \+ ]' f, V9 Z
&gt; array1.sort()$ W0 S8 Z2 Y4 H# w3 Z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. T7 [2 L, T5 @) S: E: A) `

+ ]7 {( _6 x& M3 V// 删除元素,并可以向数据组中添加新元素(可选)
; `! Q& b" \  X8 Q! m' n5 r5 Z&gt; array1.splice(3,3)  // 删除元素
# V. b& z/ i, O(3)&nbsp;['a', 'b', 'c']' {  o# A0 V2 M
&gt; array1
# ?! H" i6 W+ f! r9 T(3)&nbsp;[1, 2, 3]( @* U9 \, _- Y) a+ X6 r. ~, A
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素" g$ ?! O$ l: T+ X5 q" ?
[]. |+ G) S5 _7 J
&gt; array1
) n, f# \1 S" n$ I, G(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
3 N  t8 w/ i, l: }( @
8 y8 W  p' ~$ N3 @/*
- J7 ~+ q0 c* i; G) ?/ y; s3 Z; ]splice(index,howmany,item1,.....,itemX)+ \+ Z! d' u/ u8 v* L  C
index:必需,必须是数字。规定从何处添加/删除元素。
: y6 Y3 s5 B! l! b0 \howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。2 j7 V  U: S& q, H, P
item1, ..., itemX        可选。要添加到数组的新元素
8 O, h2 x/ I# m*/6 y  X! K; k" ]6 i# h0 R

/ }0 g8 R- @' S7 r' ]  ~( y// forEach()        将数组的每个元素传递给回调函数+ X& Y: @; {7 X5 E: w
&gt; array1.forEach(function test(n){console.log(n)})
) K' ?4 g5 c$ ~* X: O" } 1
( d. g8 {4 a$ W: p: k 2$ F& K# d# z1 @# _, o
3  p4 c$ V9 |! N% d" C" o. w
A* F( u5 b% l/ {" |, {5 l# o. Q
B- p+ Y0 M7 K$ n' E- n/ l: W$ v
C0 z( ^7 h+ B' i9 Y
// 返回一个数组元素调用函数处理后的值的新数组! Z; _1 l2 f0 R* j
&gt; array1.map(function(value){return value +1}). O& n1 I5 f6 o
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']  g1 n* q* i+ y, U
</code></pre>
' {+ F+ r/ i; E9 C* o<h3 id="24-运算符">2.4 运算符</h3>$ _& e- {# N( ~1 Y
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
# m5 T* t4 h, w<p><code>+ - * / % ++ --</code></p>
" K! N- @, s! |" M<pre><code class="language-javascript">&gt; var a = 6
% g- n% L1 r" @+ _&gt; var b = 3
8 x  q( r9 g. w$ q// 加
7 |( {5 a' h' V0 w5 Z/ e3 k1 D$ O  b&gt; a + b. c, C- @! e$ G+ x  z0 l
9
1 T& d0 j+ _! m1 Q6 l. Y" R// 减
, R1 i8 t: V- l* @: i&gt; a - b
( N# F0 \0 C4 h$ U$ P3  b! {; ]* L5 O. p% Y3 X
// 乘
- l. e0 y" Y2 A. u- A, F6 U&gt; a * b! Y1 z; C% a0 d" `! q  R6 J
188 }4 d: o& N' o9 B/ V
// 除8 X# W$ A! \+ U! H" U8 ~
&gt; a / b
6 p8 y  R% H; b# X5 r) y2
% H0 A9 _- {  }3 O2 n" n" K// 取模(取余)1 i. M' e! T2 E! X* T3 l2 I0 @
&gt; a % b. ~" R7 q: C! ]4 x1 b% i' I
0
! w% j- h2 {* t/ m. x) Z( D+ `// 自增1(先赋值再增1)
# x, q( `$ _& H7 r% x&gt; a++
3 @7 m& g: _1 c" m  J8 i( u60 x: v3 S1 D4 p
&gt; a6 L' l5 y. X$ F: _
7
8 w* t/ n2 v5 L/ z: v8 i# t// 自减1(先赋值再减1)
7 k$ M5 \5 w; ]- G; C9 _&gt; a--
/ y' r& B- U! }71 j* x" ~( c3 y7 z+ d5 |
&gt; a
; ?: D+ |4 `9 F  \. `6
( T) }2 A, A# s' C) I0 c  _! p// 自增1(先增1再赋值)& C5 A7 P) ], q7 ?& O# T0 T
&gt; ++a
' q0 Z# l! T& p$ R9 |- }7
) {. |( V' E/ y- g// 自减1(先减1再赋值)! G3 {7 J. T, N: A+ A% T% l  L9 |
&gt; --a2 [' d  I% X" i: G) \& n
6
! [4 l2 n9 F& k4 W  d" J3 f&gt; a+ Q2 @/ T' {( ]4 Y* W3 k8 T
6$ w7 l( m) D  t

6 W5 K7 X* u- }; ~4 f  o' M5 o//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
, ^2 X4 i) s4 `</code></pre>
) M* w1 l8 f; r; @! N4 a' C5 l" a<h4 id="242-比较运算符">2.4.2 比较运算符</h4>5 I: \& b) f1 _! g
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
3 O* v8 p5 D8 G: D<pre><code class="language-javascript">// 大于
, a1 [+ K: i" c* v3 e5 t&gt; a &gt; b3 y- h& D. J' K; C: x
true. Q. X  e8 W- K( k" b: g- }' f7 x
// 大于等于# ~& P4 \& [! p2 u, u5 s9 F) z
&gt; a &gt;= b7 N  t0 A- I- ~  [" @. z
true+ K3 A, F  R4 ~7 |
// 小于
0 [. O9 S( ?% O$ D7 ]: ]( I&gt; a &lt; b5 H$ w! |$ Y! k2 z
false
/ ?5 [' [: F/ L$ @# `& L& ]% ?6 v4 U// 小于等于
1 k, K5 _/ L4 m% z9 L&gt; a &lt;= b! g- N, q9 t/ D  P8 B7 U, I/ {
false+ {+ }4 U4 g' K$ f
// 弱不等于( t  |% Q( k9 k4 }" l  A8 Q7 `
&gt; a != b
5 A+ H9 e5 y" R/ r/ m. \true1 i8 ?) S3 n- X3 D7 w
// 弱等于0 y6 ?) }9 \) p- S% a
&gt; 1 == '1'
& ]2 }6 m  S* ^7 n$ H. ltrue3 N% v+ ]6 t. o4 n* X# R' M# m. d
// 强等于
/ X; O: C+ D# P6 |2 q&gt; 1 === '1'3 H  t% M& L' o: w
false
1 z. ^! F5 N2 n$ Q2 q5 ]: A: g// 强不等于
# n, m$ w1 C# Z7 X&gt; 1 !== '1'# [7 r2 }: T3 J( x8 X
true" k, v- d4 @7 C+ h

2 U3 J0 Y2 r# m2 T( g% I4 B1 x! e/*
, n& S* F: F* j4 G# u) A0 S1 qJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误& F. T& }; I/ s) [0 s
*/
5 a8 }/ d" E$ q- a- u. W</code></pre>
0 W# q) m1 J. J  P' C; t0 K<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>9 O$ D8 |. a/ R0 `
<p><code>&amp;&amp; || !</code></p>
, x1 m1 w' R& I: g<pre><code class="language-javascript">&amp;&amp; 与" {  J* e) g# z0 N
|| or
% X* u* l2 S$ h, a9 ~! 非
* R$ F+ @2 Y' Y: E</code></pre>
6 }. p9 ^: Y* F4 Q. W& m' O0 n6 B<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
/ H& V& f  B3 L, _<p><code>= += -= *= /=</code></p>
0 D8 @. i" H: Q2 j) a1 ^; E<pre><code class="language-javascript">// 赋值8 j# H* y- v( e8 G3 W5 \
&gt; var x = 3
8 w/ P) q5 o. o; M* r+ ^! n// 加等于
* Y# ?. r) X% f4 Y( W2 @' _! O&gt; x += 2
$ @1 s/ l! l3 V56 D" s1 d+ k% S0 l6 l) O
// 减等于" ?: f$ _9 M( u/ ^" K% B9 @9 a7 k
&gt; x -= 1
$ J; V( m8 t& o9 I4
8 ]$ \6 l8 O# d1 W2 ]. ]// 乘等于
, S, {+ k, B+ U+ N&gt; x *= 2
2 s$ [) _1 C' A5 ?3 Q9 l86 q: z7 i5 P# a2 P- U; W
// 除等于
6 W+ E$ V7 e8 \; B&gt; x /= 2" f8 Q0 _6 c/ \6 X" e2 b# e
4
+ Z# ^6 ^0 X/ J2 S. O) j</code></pre>! P9 e$ w. q' U0 ~1 O5 p+ D
<h3 id="25-流程控制">2.5 流程控制</h3>6 E+ t" _! U& b' m6 Y8 o0 t
<h4 id="251-if">2.5.1 if</h4>
' t' t0 G3 s. Y<pre><code class="language-javascript">1, if(条件){条件成立执行代码}5 j6 p) M# t5 ?" E- g

$ R. {# n) d$ i" c&gt; var x = 3
) L! `/ Y5 N* ?" Z! }: r2 f&gt; if (x &gt; 2){console.log("OK")}7 Z9 u& o" G- C/ w
OK/ w- Y) R: v2 Q- w% h4 T" A: m
& @5 s. W$ e& e: b  L5 L) U. x- r  ~
2, if(条件){条件成立执行代码}
0 k: M4 b  e& m9 [2 ?        else{条件不成立执行代码}2 A$ D6 R2 u9 w7 K: [4 J5 i
. U2 I+ e  y- B1 [) T/ A
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}5 m, K3 o! B7 S7 f! ?; }, I6 _% g" W
'NO'( }& r) N7 @* C' S# y6 @! V6 b
, [: }* o) o, x  S4 v
3, if(条件1){条件1成立执行代码} % @7 f. ^, x3 L% u7 W
        else if(条件2){条件2成立执行代码}
# [2 \' w- I; {; \- \8 k, }1 P6 Z" d    else{上面条件都不成立执行代码}
: z4 ~/ {( {- r! A4 B( L# i& W9 ]) J$ \; Z
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}; ]# k2 B# U( y/ D% F2 o" S+ m. [
Ha
4 o7 \3 p) h; U2 r8 q4 b# U: w</code></pre>
1 k, l" T7 x6 n$ }1 h2 V' i<h4 id="252-switch">2.5.2 switch</h4># L. ]7 u7 d/ G7 r, @* F, P
<pre><code class="language-javascript">var day = new Date().getDay();
8 k% G. \) f8 `( p4 k. V; nswitch (day) {6 ~7 f; p$ q& P9 c6 Z
  case 0:4 A1 ]; _5 Q5 }( \) X
  console.log("Sunday");9 I" S7 \; D% \0 ?
  break;* w' |- s+ H1 c4 ^  G
  case 1:$ V3 B8 G2 D3 Y! q- E
  console.log("Monday");$ o+ T2 Y+ `' W8 r
  break;
6 v2 w- B4 E, Y9 idefault:
3 L4 z5 E, y8 w& p% [0 V; q* F  console.log("不在范围")8 {( h/ s1 p4 W# L0 }3 q
}
/ Y# v) \) Q0 }2 Q 不在范围* s& X# l4 a4 I" e6 f$ L2 u
</code></pre>
1 O7 B7 A) u2 j8 f& }<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>1 W/ W! S* U. W( o& t* ^% l! t, D
<h4 id="253-for">2.5.3 for</h4>
/ b1 X# j% X9 j! \& B<pre><code class="language-python">// for 循环
" ^0 k& N0 p8 L        for(起始值;循环条件;每次循环后执行的操作){/ [( [8 Q3 a. g8 g0 _4 f8 W) F- }
        for循环体代码
/ n" c* i6 g0 }- g1 p/ V    }
$ q7 j6 o  {8 e! l& M$ f& i3 `, L% A" B' z* a5 D0 R
for (var i = 0; i&lt;10; i++){" [0 l; |* _4 K3 O( W; l( E
    console.log(i)$ e' W9 x! z# D$ z" W
}
9 S, P  a& M3 S3 F5 z& K        0* Q, ?9 M* i3 y( U. v0 n, Q
        1; H5 L/ i' c" f& @- T# S
        24 f5 `8 ]6 [' i
        3
% P$ H! X' L( G3 f( |$ E; Z        49 L3 l0 n8 s2 G' ]. E
        5
' y& g% a& \) g3 w, r        6
1 _/ b6 U# p$ @7 E        70 r( B/ d' v5 {
        8
) ^) W% Z, E0 k3 @6 L$ F4 s5 B5 W        9
# j. V( E  V3 D" l* _' x) C5 r5 j</code></pre>
' q5 B& Y" B4 @1 G, l<h4 id="254-while">2.5.4 while</h4>* d+ U, N( b7 M; e/ g. r
<pre><code class="language-javascript">// while 循环- }$ d8 o' V6 @+ f3 l/ T, K, z* j) Q' a
        while(循环条件){- R1 E9 k% u; n/ ]; ^: w6 I
        循环体代码
8 R/ p5 e* w# S6 f  T2 b$ H    }
) {2 p% M) {+ m1 s& _; W
7 J  U  s1 S# V" V1 M0 k&gt; var i = 0
$ p, {, T$ f; ]6 e6 {5 u* W* S6 g&gt; while(i&lt;10){
4 {: J/ e6 `1 ~8 v* n& m# H    console.log(i)
3 I+ Y+ ^& O3 R+ T3 [  ?    i++0 ^7 j. L5 _' d( d! [0 g) j
}
5 E  a, r& b7 s& j: d' {+ c: \+ S6 U; t 05 W- U0 `; u$ e' x* h1 ~6 i  |0 w+ l
1, \* l, [: z; F* R6 ]- ?
2  M/ U' f9 Y% J9 Q6 Z8 o
3  v) W; o3 K" t* U, e
48 w/ z3 z( H4 l6 m
55 s3 n( e* y' ?& A
6
: K3 {0 m3 r4 M. [$ Y, v/ Z, J 70 |/ x$ n8 `+ I  |6 I# u+ {
8
8 r' y4 T# I. H# n1 Z, F$ f. ~2 w 9! Q5 w/ p2 o: d7 d/ f" p* x' l
</code></pre>0 {( i# n! {8 K5 C% r2 t% @1 N
<h4 id="255-break和continue">2.5.5 break和continue</h4>
/ j* s1 x" M  N9 K<pre><code class="language-javascript">// break
0 ~0 y) Q' Q/ d% nfor (var i = 0; i&lt;10; i++){
  S# z4 Y8 ?  e8 b, }4 M    if (i == 5){break}% U0 ?$ K9 ]' R7 t/ y
    console.log(i)
) _. s3 J& g! g; R( \}; a! }8 q' d" q0 ?# |. I
07 W5 F; A& _/ {% P7 l) y: k
1
/ S" @! F7 V0 J 2
" m7 {$ ^, O( e, L# Q+ C 3
: n8 u# n' [1 F1 u& Y* z& B 45 O- q3 }: j& \- J! z
// continue  V$ n1 G' p5 f) v
for (var i = 0; i&lt;10; i++){
* [" b9 S. Y+ n% d    if (i == 5){continue}; K6 @6 H0 e, M8 @# z5 W
    console.log(i)" j) S7 A$ _$ q
}" d" Y4 s' |3 j' P6 ^
0  Z* [( K& H0 l) |; T3 Q
1# |  s4 N( v% ]1 r. I) n
24 o) E% a+ z& s7 I8 F
3
& o9 q! w' n  u- {- Z2 [1 v4 w 41 z* v1 H6 f4 z5 a, k
66 R% c5 r* L6 d% N6 j& Y
7* A- f0 l, G" _0 \  |$ S6 v  P
8, [% ]  }; b/ _! R% Y
9# c$ K) a% p  M) L) z$ V

" G" W. }% i2 x) d6 P1 a</code></pre>; c6 C5 a; L( Y. ?6 r7 o
<h3 id="26-三元运算">2.6 三元运算</h3>; R( @9 `& Z- W% e2 a; x, |
<pre><code class="language-javascript">&gt; a
: N; x4 z$ i0 W" ?. [% A64 z. R5 G5 h- P) A+ n8 \0 V4 c6 o9 V
&gt; b) U, A! n7 `9 Y* J  P. Y$ ^
3+ B9 w' M/ y; ^( h' U

, P. {) |3 B$ r  K//条件成立c为a的值,不成立c为b的值
  ]% `1 T4 M, t/ o& Q$ W3 D% J&gt; var c = a &gt; b ? a : b
  a1 m  |( F7 f3 r&gt; c) E; z; q2 P! T# h
68 |: v6 H( c! y) S

8 D& A/ c3 |/ S+ a% c, a( b// 三元运算可以嵌套
4 C5 b/ Z& G) r8 s' x# |</code></pre>
, m" W0 X6 r. x. B<h3 id="27-函数">2.7 函数</h3>, a; r6 }& F6 f# D
<pre><code class="language-javascript">1. 普通函数
+ q  {) T( m& P&gt; function foo1(){
3 N# Z* o& I9 i, b! F. \    console.log("Hi")
3 X! a$ n+ d( s% k" j+ J}
& X1 E2 s/ {! d8 z( u1 T& @. s: i5 z6 l2 }4 t. v  o1 O) M
&gt; foo1()9 I* Q  h, ]1 }
        Hi
6 @: r/ E7 ^3 K9 `; F, i2. 带参数函数1 j. V- x6 o5 ?& d
&gt; function foo1(name){. D0 t/ ^6 V8 U
console.log("Hi",name)
. i9 q+ {. o& d3 a4 B9 L0 Z}
% e7 H: ^7 m$ w
! E0 s: }) i3 }, m9 j3 S&gt; foo1("Hans")
! h) A) U" @) ]; uHi Hans0 l7 V4 e; [1 h3 f9 O

, Z  }( u: R4 u5 @&gt; var name = "Hello", j- K% N* j" v% ~" u# w  r8 M
&gt; foo1(name)
/ v& S# @4 L9 THi Hello
. v: b; \4 |7 ~8 K4 k" U5 v0 Z7 U3 e! u- g
3. 带返回值函数
4 N0 m( i9 d" Z3 B' [+ ^+ N9 U&gt; function foo1(a,b){
6 h! z8 R5 O2 g        return a + b   
: ~" k% k0 i; }0 I" C4 I; U}
9 a. H8 h" ~  p" t# n  k8 a&gt; foo1(1,2)
& U7 b9 v. }0 c3 J* N. J( Z' G3
5 D% K5 B* E& Q&gt; var a = foo1(10,20)  //接受函数返回值
  ^/ C7 f1 t* g8 |) {' {, {8 C&gt; a
* q: _! o2 U; U" {5 i, i30
% Q. A( P- h: ~, N" H* p0 f6 R
4. 匿名函数
2 k$ L- r2 [. k8 w& q% b: G; b+ |&gt; var sum = function(a, b){1 S, O/ x: s0 |
  return a + b;& r+ V% e  W8 w6 k' F
}- E. i/ W9 \, x& ^5 {! L3 {
&gt; sum(1,2)8 j6 p! ]: @, [$ v! m+ j2 }) z
38 A/ {8 t6 |* `, @9 h  h$ i! z

; {, ]- G' l, @3 a  o// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
7 v% _7 Z# w9 s% @( A  J5 y# ]&gt; (function(a, b){  R, h1 n( ]5 K6 d
  return a + b
/ M' \  T8 N- f8 `! \1 c})(10, 20)
: p& s& J, \1 i& P30  \' ?& X& g5 k3 c! ?* n
# g% Z) m( s7 ]3 ]( Q. x
5. 闭包函数
( U5 u0 @" L/ U6 W// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
7 I5 P' Z6 M  Nvar city = "BJ"
% Q: {! W7 a& x# `" L$ ufunction f(){: e  W* v+ Y! C$ @# S$ V# d; a
    var city = "SH"% k( l$ m$ @0 I$ \$ j/ S
    function inner(){) g) u2 Y; @1 d/ D$ d
        console.log(city)
' ?+ M5 ~! E9 Z1 z) u    }
2 a/ C' ]/ x; n3 u+ w( c    return inner7 n5 B- z) ?  P0 u3 X+ i4 |
}7 Q* L) b. F  f) \! n
var ret = f()$ S8 b5 u' f" C0 c: k& w
ret()
4 \3 M* X; M! `* N  \$ X2 G执行结果:9 j/ V, h3 B. E8 X2 G
SH  R3 b) \: X$ d+ ], }: A5 H, g: u

; ?$ C0 Z( F6 n+ y4 y</code></pre>2 M- d" \  a: M" V7 t* x
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% F% y* a& L) `+ g. a( b<pre><code class="language-javascript">var f = v =&gt; v;; H  Z5 C: i! E' ^
// 等同于
# P7 Z0 n( H$ n+ u* i# Q$ bvar f = function(v){
, `4 S' E: ~  ~) J6 \4 R* x  return v;1 u; G1 T2 G8 ~3 Q2 n- Z
}
: T5 z! l: l/ y2 q* P# t</code></pre>! t+ Z; X' q; g( p4 \
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
& C0 t6 Q4 o. w2 U% X+ d<pre><code class="language-javascript">function foo1(a,b){
6 _: i  z% [# U( D    console.log(arguments.length)  //参数的个数
0 C7 ^/ M4 b1 P( }7 @3 _    console.log(arguments[0]) // 第一个参数的值) ]. L* i( ^/ a& f7 @
        return a + b   & ]' b  B, R1 s* }$ F
}2 p  E4 _6 z3 @5 w
foo1(10,20)) }7 }' \! S( C, ]/ P/ k
结果:
- P4 t# L& v8 P0 u0 Q& S1 e  Z 2          //参数的个数
. F* ?( L6 T  \. H' W10        // 第一个参数的值
2 D; d8 e( x6 v* w4 E' H30        // 返回相加的结果2 K' J% _5 L- m# d3 ~' l" ~
</code></pre>
$ B3 v! ~$ N; c- a* q6 y<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>  b( ^0 t+ Z( Y; o
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3># I# f4 j# t) J2 H- L; o( {
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
4 o3 y6 K' ]( M( q2 K: @, i( v<h4 id="281-date对象">2.8.1 Date对象</h4>2 i- [' T" n! W
<pre><code class="language-javascript">&gt; var data_test = new Date()
5 j$ P& U! p1 K; H&gt; data_test( o- t, K' A- V9 o
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)5 D0 ^( x6 _0 d( q- Q4 ]4 k; T
&gt; data_test.toLocaleString(), A5 B  A0 z! x7 U1 E7 }
'2022/2/11 下午9:44:43'1 J. [2 d8 K& J% y6 f

+ \9 J8 D) A1 R2 `) o3 d& q&gt; data_test.toLocaleDateString()
8 B4 l! P8 x  k'2022/2/11'' L+ h4 b* o" }- j3 ]0 u
/ p- o, [( Z3 E7 g7 W
&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 F( ?* G7 \9 a) `* _
&gt; data_test2.toLocaleString()
- j1 m0 n  |! d2 v' d'2022/2/11 上午9:44:43'0 f7 F6 N) ~! ?9 A1 W4 H0 t6 B
2 m$ ?( r$ b/ q( Z. l
// 获取当前几号7 C$ U& ], E0 w4 E  r9 u( D
&gt; data_test.getDate()& t% Y* V- f, P4 i" `) ^
11
. n# G, |$ \! m  i5 S// 获取星期几,数字表示
8 u4 k4 @* `/ F" [/ P4 D# E% q&gt; data_test.getDay()  : t3 f0 Y# T9 c( J. D/ k+ R1 k
5
) w+ w0 T) y- B4 q: w( ?; D// 获取月份(0-11)
. z0 h( m6 a. ~6 x9 ?&gt; data_test.getMonth()
5 D% h. r; H- x5 B; `, A18 i4 C" V' F4 _+ o5 j4 x; L
// 获取完整年份
$ S5 O; s& A) t&gt; data_test.getFullYear()
8 {; {5 t& q1 C, t6 H0 @$ S- m. A2022
" w+ j: e7 `5 G// 获取时$ R" A  k8 I. T2 f& ~  I3 Z
&gt; data_test.getHours()1 |7 g$ A2 a/ H5 L$ ~5 N
21
: S( v3 l6 m5 u$ o8 g% e, y$ t, o// 获取分
4 V1 t. G" [9 @: c&gt; data_test.getMinutes()
8 x# S3 d; J4 V$ R2 E6 r+ V" A44
$ F* C5 z. l* a. ^  P- z. ^// 获取秒
* m1 T8 m3 c7 m: B0 H8 _; V3 F# I- S&gt; data_test.getSeconds()' X5 E$ p. ?, V0 e/ d
43
: K6 D9 _9 z+ }/ w) y// 获取毫秒
3 c8 Q4 r% Z# [; D7 D/ ~  H" @&gt; data_test.getMilliseconds()
( O/ k. s2 i2 W2906 Q. K' s$ ?; a' r. N7 w5 m
// 获取时间戳3 d1 N3 m' [4 }. `1 [& B; z
&gt; data_test.getTime()
; b/ j0 y9 ?& Y0 p1644587083290
1 _. l+ L5 V$ d' Q</code></pre>& s4 ^$ t# j/ v9 J4 I
<h4 id="282-json对象">2.8.2 Json对象</h4>
) F/ y7 |) a% S+ S( C1 D+ m  W<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串4 I* m' y3 M/ `* ~
JSON.parse()  // 反序列化,把JSON字符串转换成对象& c& X$ s5 j! @( G1 r

2 N0 n& I5 j. D( D! c* p9 p# r// 序列化. Z8 ~4 c8 S7 N- \
&gt; var jstojson = JSON.stringify(person) 6 }( ^0 s5 E; I% j1 O' Y) h3 N
&gt; jstojson  
" D9 b/ P) _$ G- x. j+ ?'{"Name":"Hans","Age":18}'
( [% m0 j, q, u/ y+ O' }3 N+ G' t8 a# i
// 反序列化8 ?( C1 s# I$ G  S. m# N
&gt; var x = JSON.parse(jstojson)! _- N/ C- ?  y9 `
&gt; x- O% @# b& J( W  r
{Name: 'Hans', Age: 18}/ _0 w4 \9 }" R. U4 S
&gt; x.Age3 L3 U" V8 U$ Z3 O
18
3 b8 z0 D( g# ?7 y</code></pre>6 n( r. x8 B. G( f' W  T
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
' E$ [  |  U! j, j) r<p>正则</p>
' i# K% c  \& F2 _( @. P* c<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");; L6 a8 I4 i) ^! Z
&gt; reg1& T1 P4 d( n4 v( e  q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/3 B/ {% x9 i4 a; Q% m
&gt; reg1.test("Hans666")1 F$ A- |. D3 p7 b+ R4 S
true
9 ]! ^* Q" s: I: L
8 U3 p" E$ \6 D0 B* `% B: w: w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/) h; f5 ~, _% E
&gt; reg2; L5 J* @9 O0 P7 k  ]. i
/^[a-zA-Z][a-zA-Z0-9]{4,7}/, B0 q5 m9 U3 s' o9 N8 i
&gt; reg2.test('Hasdfa')
, t4 r5 Q3 i7 X5 t1 Ttrue
- l/ W5 K9 J' E2 I3 A1 O
, |5 W0 `: H/ m6 E! @' v全局匹配:
- f1 ^  c; u7 A& ^&gt; name: e: _3 O6 V, _! o- }1 Q
'Hello'+ m2 `" N: A3 X4 _" s! v% c
&gt; name.match(/l/)* ^4 Y  x4 G& F) w# g
['l', index: 2, input: 'Hello', groups: undefined], m6 s; o. r1 R4 G
2 V! W% B+ K, r! s9 J
&gt; name.match(/l/g)# }- t% j1 P# h, W1 {/ c5 u6 B
(2)&nbsp;['l', 'l']
$ R  q5 y% {# ?6 k( h3 a// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
; T: c) a" R/ W3 Z6 B* D1 K& _3 D! X% x6 V& ~4 U
全局匹配注意事项:
( T3 {. N0 Q5 i* q&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g4 Y8 k! X4 e1 f9 `+ r2 |1 o
&gt; reg2.test('Hasdfa')0 ~6 s1 S" _* ^+ V
true& x1 g3 b$ s) f7 j. W' g
&gt;reg2.lastIndex;* a1 D& ~6 j4 o- Q% J* V% `
67 b; H- \4 l' I3 X3 ?
&gt; reg2.test('Hasdfa')9 {2 V, r* l$ I1 j) Z
false
# X! l; }) @* o; c8 Q' ^&gt; reg2.lastIndex;
$ |* J% Q" T" V: s. d! O0
+ G6 N1 t5 Q; F- E4 r. a# w&gt; reg2.test('Hasdfa')
7 }6 d0 y$ r! b$ jtrue. M/ h% n5 ?9 R% W% t7 e* ?
&gt; reg2.lastIndex;5 Y) A/ p. }4 w( F; G
6
. V) a! C$ Z; [( w) N4 ?5 [&gt; reg2.test('Hasdfa')
6 ^# u' s3 v" ?$ W9 bfalse% f) Y% m, F% @
&gt; reg2.lastIndex;
! U/ E9 {" t5 t/ e+ n6 f07 a& D1 H1 z9 B0 r' }5 y7 d* u
// 全局匹配会有一个lastindex属性2 ^9 r  ^$ f' N1 u% m
&gt; reg2.test()! c- {0 O0 c6 @) [- H
false
- S  b# Q6 N. r" {&gt; reg2.test()! |' S! G" u, R* B
true; O9 l8 t" Z2 m- ^
// 校验时不传参数默认传的是undefined
/ I5 }/ e$ e* e% |' j$ h</code></pre>; T5 R4 f! r' X8 C( O. a' ^- C
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
* s+ p9 D2 m! z<p>就相当于是<code>python</code>中的字典</p>
' q4 m5 m& r+ k0 s/ G<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}' L! L1 V7 q& c! i" J' S9 s
&gt; person: l+ _0 x: t; U" z4 O, g
{Name: 'Hans', Age: 18}6 R! a8 b2 F9 e0 L- v0 k& c4 x5 j
&gt; person.Name
& E- ?4 l5 a5 ~- H0 X1 K'Hans'
3 M" V/ _% {2 y" U4 h8 b8 @' M; }&gt; person["Name"], Q/ |2 b9 `9 X  C7 `
'Hans'+ y" c2 f9 I' {% Z% @
/ P  Q9 [. F; W
// 也可以使用new Object创建: y" [! Z6 P: F! \) U
&gt; var person2 = new Object()
6 g+ y! V( P. N6 o" b  ]) R4 k- \&gt; person2.name = "Hello"
7 x: _( t) C& j- _+ ?2 D'Hello'6 n  Z. x* g6 V7 J( O
&gt; person2.age = 20
( b  ]* c! I+ W* F! Z; N: G0 s& |, B- i20% B9 n+ ^2 ?: R
</code></pre>
2 @9 ?+ e2 w+ i! ~2 B0 T0 l<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>. V, A; j. w, s' K
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
3 Q- i1 d' a" I<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
6 i; u1 B; b* {! D4 T0 N<h3 id="31-window-对象">3.1 window 对象</h3>6 w9 G0 @% S# i: @
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>" @4 v, `3 [$ G! u7 `4 x
<pre><code class="language-python">//览器窗口的内部高度
4 Y  |" w- R. @window.innerHeight 3 \4 i! ~: d+ \0 m
706
3 c! j3 v0 g0 a$ z//浏览器窗口的内部宽度+ k) d* j, Q, `; O' B5 F3 p
window.innerWidth+ m' I! T, q, m& E
15220 G6 j9 u7 p- V" _4 J/ g  \+ g* Q
// 打开新窗口2 v: M3 t" q- x
window.open('https://www.baidu.com')" P, n2 D- k3 }1 p# i
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
3 }, H$ K6 g" b( M9 H// 关闭当前窗口
, H  j7 T# ]% Y& iwindow.close()
) D5 k, @& s1 @! e0 w//  后退一页
4 A$ g: l. ~* {4 b' _8 lwindow.history.back()7 c) p8 V  m2 ?3 |. v
// 前进一页
6 O6 [5 J; r; ~' h7 Z+ `window.history.forward()
+ @0 R$ v5 c3 G. B3 Z! z3 F//Web浏览器全称
/ ~: Y3 y$ ^5 I5 o! ]0 Lwindow.navigator.appName
4 ~' d9 Y& O2 J'Netscape'" Z+ C+ T# H3 q: w" R
// Web浏览器厂商和版本的详细字符串
# Q4 ?5 }# @" f7 Q0 j8 Qwindow.navigator.appVersion
9 a4 G0 y5 e9 I6 G5 H8 ~" A5 P'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'' x  G+ N- _# m& I
// 客户端绝大部分信息
' k' W* ]( l; I, v* Pwindow.navigator.userAgent
- t4 N: d: B" I9 H+ n5 l4 B'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* h: @* t; {+ b  j
// 浏览器运行所在的操作系统! _+ z; L+ ?9 l1 `, z. ]
window.navigator.platform
& _- d8 h3 S0 v) U* E- L# T1 n'Win32'
' P% j! b0 `: |  d2 l5 p: o. C! k! W  s2 S, Y. G7 V. Y
//  获取URL
' c4 s! J4 e3 R- [3 W5 twindow.location.href, C; F. _. S* a  I( Q, V
// 跳转到指定页面
# h5 ^' k4 t* ^; y% }; gwindow.location.href='https://www.baidu.com'/ J, w$ w( U) v6 W2 j
// 重新加载页面0 \+ T  n- s( Z2 E4 ~7 g: T2 H+ }5 ]
window.location.reload()
- Q' n% W+ l# c( [# @</code></pre>  r% S. j  V% ^. L. j
<h3 id="32-弹出框">3.2 弹出框</h3>
% Y3 A5 G" \1 @( Z' L/ Y<p>三种消息框:警告框、确认框、提示框。</p>- U7 _- @5 c, I8 v1 P
<h4 id="321-警告框">3.2.1 警告框</h4>0 ~7 |* E7 |0 i1 {+ k' @& ^( B
<pre><code class="language-javascript">alert("Hello")9 F" `0 G8 b0 x6 `- |; U2 o
</code></pre>0 R2 w. w# I  s
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
! ^% V: V+ V' n+ `% C1 l<h4 id="322-确认框">3.2.2 确认框</h4>
( G" L& M3 ^1 U<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>/ |7 h/ O8 B" \# b
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true; T6 j7 ]5 z0 U7 n4 b: G- o4 m6 O
true  K5 O2 `5 [1 t0 U! H) Z- w9 K
&gt; confirm("你确定吗?")  // 点取消返回false
. F: _. @, ]( O8 r' z! Sfalse- q5 z3 a- h; F0 ^" j: V0 W
</code></pre>
. a7 ?# f+ R1 W<h4 id="323-提示框">3.2.3 提示框</h4>6 J0 N# A0 B4 t2 r. q; U( s
<p><code>prompt("请输入","提示")</code></p>/ `+ \  F/ q# D  b/ p) z' {
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
/ k+ v- j$ w9 T3 m- z( m<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>( Z, m2 k1 i  f5 k8 x4 R
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>. I" H+ a4 t  I. a& i8 {
<h3 id="33-计时相关">3.3 计时相关</h3>
# }" Y  V1 s1 D% M) a5 G<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
7 e/ l+ ], F6 [7 L<pre><code class="language-javascript">// 等于3秒钟弹窗4 N6 W$ Y: j* c8 o8 b$ M+ n* m( w
setTimeout(function(){alert("Hello")}, 3000)
& P; U+ H) O6 U  g# J2 `& \& {# S1 V" C% A/ l% _/ X: u, E
var t = setTimeout(function(){alert("Hello")}, 3000)
6 @# R3 }2 t, t$ J( e# J9 u( e/ J7 r
// 取消setTimeout设置
# @& ]2 K/ c4 o3 pclearTimeout(t)4 \: c- }  j* V# V: a, f" l
</code></pre>
7 j7 t+ k7 t4 [- M7 Q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
/ Q- f, F4 F% {& f+ M<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
% D2 `" t1 I, M<pre><code class="language-javascript">每三秒弹出 "hello" :1 w( s/ g8 P+ ~* D
setInterval(function(){alert("Hello")},3000);
& U# n/ |% H; e</code></pre>* X/ V) e; w# r1 |8 ]* I
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
* E# b; I1 |% e  ~; B4 A& J; |<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
4 h) B# |% y3 \1 M//取消:
; q+ d8 l, Y0 Q" j! W4 |  t9 L9 rclearInterval(t)
4 \6 u7 A' z5 P</code></pre>, N/ H/ _+ v1 z. J8 w, X

9 q- Y. r3 O8 u2 s) [
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-13 23:04 , Processed in 0.080621 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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