飞雪团队

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

前端之JavaScript

[复制链接]

8126

主题

8214

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

' H' g# F, Y1 e<h1 id="前端之javascript">前端之JavaScript</h1>* y. J2 ~$ M9 t% J- r. K8 t; J: A! L
<p></p><p></p>
/ X7 {/ a7 \; X) D0 z2 J<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 i( a9 r. t- B5 c7 n' W<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
& R0 P( M4 ]8 i4 e4 k0 _/ P# B) W* d. J4 x它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
. k& W! F" n5 s) X4 d$ J' Y0 U! P" X- m它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>! @; K* W8 l8 ]7 ^
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>1 ]: h* e  t% I5 D
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 r- q) z" X  j  b+ E  J% b% X1 h0 h<h3 id="21-注释">2.1 注释</h3>. g& T9 q  g! Q* |3 P' l
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>" ^( y) {9 V% K& ]2 p# [
<pre><code class="language-javascript">// 这是单行注释
# L$ ^+ J5 C6 Z. |! g) ^9 C
5 ]) q; e9 e$ g$ Q9 D/** F0 g" O, i, {$ r
这是多行注释的第一行,8 M" T* V) o9 t2 j" v* ^
这是第二行。6 M7 {* X$ |# }$ `; u$ n% P
*/% T4 d; K+ u' Y2 i$ u, G3 c
</code></pre>1 \/ o/ v3 f: C5 ^1 c
<h3 id="22-变量和常量">2.2 变量和常量</h3>
8 ?. z$ F* E3 Y9 c) q# D<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
1 s2 S; P  G- c2 _( C<ul>
- Q, N5 u$ H( P<li>变量必须以字母开头</li>; J1 h4 c4 r7 I0 T5 L" ^2 M
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>, O+ o9 V9 b0 r. d$ r) i7 Q: n2 I
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>- d9 y4 Z$ P7 q
</ul>
# V9 y( w$ D2 b( ^) R<p><code>var</code>定义的都为全局变量</p>
1 j/ {/ r1 w% W/ v* c<p><code>let</code>可以声明局部变量</p>
/ U1 V4 R& Q  z0 f# p# }<p><strong>声明变量:</strong></p>
! |- p, c7 F! P' @6 P' Q<pre><code class="language-javascript">// 定义单个变量$ f: s" |0 q% `' D- B2 _
&gt; var name
2 ^9 R0 y) R9 w9 {) c2 v' k2 ~: H&gt; name = 'Hans'* M1 h* l; d5 N1 H& j0 i- P
//定义并赋值
- E) |' c& q+ K. G&gt; var name = 'Hans'& |! `- l  j3 p, `" Y0 M# l
&gt; name8 ?6 E4 h# k( s: u# p
'Hans'( a+ W$ F* B$ X1 _0 v/ N5 I
4 `" M/ D* a7 a, a
// 定义多个变量: E8 x3 R, i% L, P- ^+ A/ I
&gt; var name = "Hans", age = 18' r+ d; h: K- v* f* H
&gt; name2 c( j8 @6 ]; y: D; s6 A
'Hans'( q4 d+ S4 L2 [! C
&gt; age
+ ~( ?2 l! Y  N( n: Q/ N' t3 A4 K18; c5 o/ l+ A: [% _
- P( a7 G+ o$ A. a: O/ j% _
//多行使用反引号`` 类型python中的三引号3 Y( K7 \6 r! u! ]& @4 V
&gt; var text = `A young idler,
6 ~0 V4 [) L' I: E8 v1 Aan old beggar`
8 h& I9 U7 @, ^# B7 q1 f4 ^1 F&gt; text
3 T  i6 M8 A7 |+ h+ c) ^'A young idler,\nan old beggar'
- i6 Y6 q0 s% f4 a! a) P2 \* y</code></pre>
( F3 Y* ~) Y* E9 [<p><strong>声明常量:</strong></p>
6 ?% Q  e3 `4 v<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>2 z+ D& Q+ n( D) D1 _
<pre><code class="language-javascript">&gt; const pi = 3.14- A) @. ]5 w  |3 Y/ \
&gt; pi9 T& T$ I' U# G7 b
3.14
% q0 p) O) I5 c' X# F&gt;  pi = 3.01
; `: I1 n+ S7 _) YUncaught TypeError: Assignment to constant variable.
0 z# |# y& n; g3 F1 b4 O    at &lt;anonymous&gt;:1:4
; f0 p7 R! L$ E2 G
; n/ _% {% C3 E3 _+ E0 Y( r# @# n</code></pre>
) G" G% i, G/ R/ L0 L( ^+ Q8 k2 c7 w( O<h3 id="23-基本数据类型">2.3 基本数据类型</h3>8 N$ ?8 r) T4 {$ r2 ?- l; y
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>4 n6 X! {$ v- [9 \, N. w, |
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>/ l1 r( U( {. O' B: }, G  F7 g
<h4 id="231-number类型">2.3.1 Number类型</h4>3 r; `. |7 a) n, S1 i4 M% {" N2 @. _
<pre><code class="language-javascript">&gt; var a = 5  q; ~/ d, ~  y" \
&gt; typeof a   //查看变量的类型  
. s5 H$ }) y4 ]# d' \9 ~number
; T$ v, \+ Y- u/ b* U1 p+ z- ?- f4 V, V, u$ D8 {0 F
&gt; var b = 1.3
( c& k4 h! M+ a# v( D$ p&gt; typeof b
: [4 X( I/ N& Cnumber- N# e6 f3 N7 K9 A: ]1 ^1 D
( [8 S. R% a# T  ]
// 不管整型还是浮点型打开出来的结果都是number类型. {. W4 P- q# d9 H; i& J4 z9 T
- p5 u( t  l( `; r. V
/*1 `2 m1 k/ ?+ V' n9 h4 D7 Z3 f
NaN:Not A Number( j7 e9 x7 g; C. V
NaN属于数值类型 表示的意思是 不是一个数字2 d6 ?& V/ \8 ^
*/
- S; J" G" Q- J& _6 R. F
" B0 r6 R5 G# qparseInt('2345')  // 转整型
' a$ p$ f, o: O3 u2345+ F8 p! }; L6 S
parseInt('2345.5')* e) t8 n$ |2 D1 {" O4 a0 W
23450 |! \" T! ]! {2 D( h
parseFloat('2345.5') // 转浮点型- ]8 b1 ~  n- E( r! _+ k! n
2345.5( }1 K  }* E7 b( Y; Q
parseFloat('ABC'); i( J% x2 V+ E! f6 [1 k$ y
NaN/ M3 {4 i. s8 K3 o/ V2 o
parseInt('abc')
3 l5 z' f6 t0 t9 W4 k9 ^9 tNaN
, F2 y0 Z& p, Q/ ~# f1 r</code></pre>, \2 e' V6 B4 s
<h4 id="232-string类型">2.3.2 String类型</h4>0 J& l, z6 ^' p9 p" d
<pre><code class="language-javascript">&gt; var name = 'Hans'
" L( i6 m  Y8 U+ V9 p& F( {# A0 ~&gt; typeof name* \, T/ y* _# E6 T
'string'# L9 t4 c! N* f* J
: U; m- _; t, O; s3 C% E
//常用方法. h1 O2 I! \# F) Z' V' ]6 s8 \7 }
// 变量值长度+ s0 V& x  a& o
&gt; name.length
( x, I: G7 X* `3 Q4! s( o, [' j/ S/ h" W; Q2 V
// trim() 移除空白
/ ~# f( o2 Z% K5 l1 B  O8 s$ A  v3 q& S&gt; var a = '    ABC    '7 _- g" e+ r$ Q$ `, x8 C
&gt; a  C/ H7 J) A6 K) ~1 A2 a8 {
'    ABC    '1 _2 _' m5 v$ g" e
&gt; a.trim()4 a+ \  k. _3 z" y) N- {( b, F
'ABC'
9 p0 p& z7 v/ s& U5 Z( d3 a# a  l//移除左边的空白7 O( G) h  ?4 d+ W2 Z. m7 M. d
&gt; a.trimLeft()
2 C/ h% j- H/ b& H) f" ]'ABC    '
  z$ n, P" [' r, ^6 Y/ l//移除右边的空白$ l  ~* l7 v8 ?  _
&gt; a.trimRight()
8 j7 E$ i- p% j! L'    ABC'8 @: n: p: d* C# l0 {4 x

0 E% i# h2 G/ W% z//返回第n个字符,从0开始
2 J6 f; Y; ?: C2 u1 P9 K$ J* e5 B&gt; name
  c% |8 [& Z# [" q0 u. r'Hans'
- @! X, y( n  p% t3 A9 V9 x( d&gt; name.charAt(3)
1 x+ K* V/ A9 m: E's'
0 R- U: W# z4 A) k" [  \&gt; name.charAt()
! ~: O) B. V9 j'H'9 n& ], o0 J9 R7 L
&gt; name.charAt(1)
; N% O2 |$ O. S3 z9 k* T'a'
" u2 h( \" X# f' |$ P% o$ J. O# A) J) u
// 在javascript中推荐使用加号(+)拼接
8 \9 P  r+ m8 S2 n&gt; name
& S0 i' I* g' \% J2 W! B4 Y'Hans'
9 A6 g3 F" S# W* j5 s&gt; a
) P6 ~0 B3 F* h; B3 o'    ABC    '+ v* b, e! q* k* f; c
&gt; name + a
3 Z. F+ \5 a" D" {# f& z'Hans    ABC    '0 r1 I1 K; r. e- l4 V
// 使用concat拼接
: @; h0 h( u) x% r' q0 a& C" R&gt; name.concat(a)
4 R) K9 t; p( j'Hans    ABC    '$ d9 Y8 H+ F+ V; n
8 {1 V6 J8 o; H8 X# E; G5 v
//indexOf(substring, start)子序列位置" u1 g) m: U9 f

. h( g8 p- w, T) O/ g9 {- {. U&gt; text
" u. I& T4 E& G6 o) B'A young idler,\nan old beggar'
9 r0 e, U. \0 M8 x&gt; text.indexOf('young',0), m9 D% q' U) q2 k1 R
2$ w2 X4 P5 I) k7 g8 l( M

2 V7 d$ ?; o* u& {/ d* e: f# U/ |//.substring(from, to)        根据索引获取子序列! @0 e& M! ?" {% O8 s
&gt; text.substring(0,)' q. I1 a. q- s. A; Y
'A young idler,\nan old beggar'8 y, g/ {) @% e" d4 J( K; G% I* T
&gt; text.substring(0,10); Z$ o( C$ c; B1 q; ^, L& M, V
'A young id'
8 ]! `+ j$ b6 _- J. ~) _, C2 [. N, G/ ?$ a, p! _3 r
// .slice(start, end)        切片, 从0开始顾头不顾尾
: a8 F0 [/ R" }" H+ K) x" ~&gt; name.slice(0,3): C5 o" `+ v2 z/ N
'Han'
# z, g0 ~3 ]0 Y1 P* }( l6 S- f
+ q) H# m" r. ~* O1 _/ J" [// 转小写! Q# h* j1 E. P/ H2 [) L
&gt; name! k  s$ x6 K# w+ s: y
'Hans': F' E, c0 D5 `3 L0 m4 x% P! f
&gt; name.toLowerCase()1 K% t4 S/ h: m( n
'hans'
8 i2 @9 p- b( B// 转大写
! \; L+ M1 T5 g9 N" w8 r&gt; name.toUpperCase()( `. k$ @* i6 S. {/ A7 T% D9 n
'HANS'3 U& L$ M  ?9 T# O% g# f

# }" y: O- G! q// 分隔
3 |# e" @& J7 j+ B( x/ c4 X&gt; name) f2 W* A8 k" F# A2 n
'Hans'
) v2 a' F6 z: L3 l& \: A&gt; name.split('a')
  X1 C' g0 i8 a(2)&nbsp;['H', 'ns']
: S* {. }' E" L1 p# u2 L</code></pre>5 i  e7 T) U5 M% c6 l5 ^0 t
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>; I, L, n& w( }3 C4 j$ z$ ~
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>1 {# }3 V1 q( P8 Z0 J% Q9 U( {+ O
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>2 M( l# V2 T$ k2 W$ J
<p><strong>null和undefined</strong></p>  {0 S! Q' y+ f# m
<ul>
8 Y* _; ^& X5 m  c5 p" K0 x<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>, b" i3 w+ O; {# @8 M  o6 Z
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>' n8 y" R/ d; Y
</ul>
- x( y3 `8 h* h5 g<h4 id="234-array数组">2.3.4 Array数组</h4>. w6 f+ G  d5 S" k9 \
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
' v+ e, t; `0 u) D/ n) o<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
+ y$ ]7 }1 y, Q! J&gt; array15 @/ l1 h) S& W: Z, m
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  P; F/ y  x+ W' S/ o1 [
&gt; console.log(array1[2])  //console.log打印类似python中的print
5 Z9 p2 p# {  `3/ X; J- @7 a& ]5 {3 f
// length元素个数
) i( z0 s5 A3 Q&gt; array1.length9 t5 x/ G, A7 l
69 [5 h9 d% L) W% r  N. ]$ ~* ]+ `) D
// 在尾部增加元素,类型append1 U3 x5 _  ?/ N8 P: r- ~
&gt; array1.push('D')4 p" c- I' ~: _2 R$ e  ]
7( T- q# O  m' z
&gt; array1* j/ n/ x' P* H4 c! r( L" |+ a
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
6 e4 E$ T0 o. d" N3 [// 在头部增加元素
2 l% y  n7 A! Y3 l&gt; array1.unshift(0)2 a* i' @- \9 ?3 b' }9 @3 Q
8
$ [. ]& }, h7 w0 ^$ }* s) R&gt; array1( x; g2 ?2 s$ s+ m$ J  O
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
- ]0 K6 E0 K- S
1 w! E! i5 [! {+ P8 r, u( G//取最后一个元素: t& K% a* X) u3 V# @3 B
&gt; array1.pop()  m6 `. r7 V+ T" C. m
'D': H8 R. u; t% U% T- x9 o$ f
&gt; array1: S3 T5 V3 X, R3 G+ D$ H4 T
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']! }6 U! d. p8 u1 j  m% }: V
//取头部元素& R; ?0 m7 e2 ]
&gt; array1.shift()- k: Z/ B* A8 D- \
0
3 E/ C% z, R' @2 S% Y&gt; array1
8 d8 R- ^% C. H# k$ U0 L- g(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 N% g% y. L/ @' C, G$ m; r2 W+ f. f  ?( D1 b* B
//切片, 从0开始顾头不顾尾
$ k% h2 B! q" u&gt; array1.slice(3,6)
+ L4 s4 ~3 k  d- b2 V$ E(3)&nbsp;['a', 'b', 'c']
1 ?2 W+ p" v+ }2 T. G3 F// 反转6 }# G0 L) N3 o
&gt; array1.reverse()6 [- l7 w- h( {/ C2 {
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
7 @  P" \/ v8 O1 }9 g// 将数组元素连接成字符串
4 i7 C( F1 Y4 t  \; q% w&gt; array1.join() // 什么不都写默认使用逗号分隔- L7 y& L. v' Y# W
'c,b,a,3,2,1'# z( a$ f1 `  q' p/ V7 G
&gt; array1.join('')
8 I' m3 s$ t* a2 `+ \- `0 g'cba321'3 H. h" F' [3 O! C! @
&gt; array1.join('|')
& Q: w. ]  s; ]; Y& @'c|b|a|3|2|1'
  k! W+ M6 g! K! u6 p' f# ~$ b1 O7 q
// 连接数组' P( P8 L7 `8 h
&gt; var array2 = ['A','B','C']) G7 ]+ _9 Y4 z4 L: ]0 i) ]
&gt; array1.concat(array2)
4 a# H5 F7 Q2 m$ ?- F5 }* i1 E- b(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
# W/ w) D( Z( E0 ~4 ^" J$ c8 Q. c
// 排序2 o  l( G- m1 i7 G' x3 j1 X
&gt; array1.sort()
. c/ ]2 F% _* Y! ~( o(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. V' m/ A; y9 E/ x) @0 _, b) i
1 @' z  `4 j* z/ m// 删除元素,并可以向数据组中添加新元素(可选)1 M' S  R5 R: T) n2 M5 |* D# ~! _
&gt; array1.splice(3,3)  // 删除元素
& k+ X6 y7 n" t(3)&nbsp;['a', 'b', 'c']
4 Y* Y1 t6 u: G2 J9 C( X&gt; array1
0 L4 k3 \8 R* `$ _9 V& {(3)&nbsp;[1, 2, 3]# A/ p! i* }, H; Y3 |/ i" c# \
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素, a* x+ Z( q/ g, S9 ?
[]' C' N* T5 g9 i2 T
&gt; array1
) U4 H: }" l. T: W' ^, W: ^/ L0 d' D(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']! Q. |7 G: x- v- |: T9 d% a

( C2 e+ V; Z# I5 ]; p/*. a( F: Q" q% ^6 z6 K
splice(index,howmany,item1,.....,itemX)
! l+ _' H: \1 Eindex:必需,必须是数字。规定从何处添加/删除元素。
  f" V! Q: L; b9 a) _) i- Z2 Jhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
3 M. W* H9 J% }4 u7 X' K6 k7 I* A8 aitem1, ..., itemX        可选。要添加到数组的新元素& D& e) r$ W# A/ d, P; p
*/. s0 J' W/ |0 M0 T2 E
$ \& M& c% I# Y  b
// forEach()        将数组的每个元素传递给回调函数
8 Q6 P6 t# B6 l8 Q&gt; array1.forEach(function test(n){console.log(n)})
& d, z+ G, g& e% `. r0 {7 U4 C/ w 1; x! I. ^1 ?  v" p3 [
2
8 Q) `$ {5 l% P; U$ t& F 3' W- B0 E9 O; L% E; X* T
A
' y5 [2 H! j- S+ V: E1 u# f B, B% M+ z/ i2 Z- K5 ?5 w7 J% h8 x
C
  \" f/ k. B, I! Z. y  K' @7 C// 返回一个数组元素调用函数处理后的值的新数组
. y: z* y; g% k2 ~+ J2 J2 M& c&gt; array1.map(function(value){return value +1})
9 s0 K9 [, z! [/ ?0 ]- x(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1'], _. o2 v  G( I; ~& f' |% S# x
</code></pre>. I% E0 V  H) _  T, b* h
<h3 id="24-运算符">2.4 运算符</h3>/ l! [2 V# S  R) W
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
9 C% F/ T) B: d" O3 |' H<p><code>+ - * / % ++ --</code></p>" H% s: X; W% N8 G
<pre><code class="language-javascript">&gt; var a = 6  b* x! l" r( k! t# D! [! S: a
&gt; var b = 3: v9 Z/ M/ k0 F$ A9 j1 s
// 加% `) P  W. C3 a5 s+ ~
&gt; a + b0 y- R- p" `6 b, J3 o, p
93 v8 L4 b* G) `  x9 J) r
// 减
: m' n# A$ _* e1 c&gt; a - b
% {& a5 F. _  N5 A# h& u& m- S3
8 m; T7 y, i7 h9 L// 乘
$ p9 Y0 h! O4 ?: n/ i( t0 }&gt; a * b$ p5 W* J+ a9 U& H
18
2 L" s1 |  d+ z' z& T" S// 除
2 [( |3 f4 C( l% {% E&gt; a / b5 B7 S. r. c6 m& u! w* o
23 y% N$ X. p& u; `: M: O
// 取模(取余)
: |, N- e5 |* h$ N; B* H% e/ @&gt; a % b" [2 ^. m1 j9 e# N( q' l
0- i1 `6 {' M4 s- M1 t
// 自增1(先赋值再增1)9 L& d; N  _" X2 O
&gt; a++
$ F" u3 W$ G; e: {" f; n6. @; t, a: t, c- y6 q1 _+ S
&gt; a
/ K5 a& i; E/ f* C7 r% X/ D( U76 c  l( g8 k3 L1 h! {1 O
// 自减1(先赋值再减1)% n; @  v5 K- W9 w( X* @
&gt; a--
5 q+ E8 _( e! t0 Q/ [% W  S7; f9 Y" [2 r; n$ }) n% j' m$ s
&gt; a
* \) Q0 V3 K" Z2 O) X6
" x4 V  F5 p1 r. b// 自增1(先增1再赋值)- F4 i$ P7 c- o' s6 z0 g' y
&gt; ++a0 z8 r# S9 `$ e  L
7. N8 N# E! A4 a+ r$ U
// 自减1(先减1再赋值)
- U3 K7 v+ B$ p6 h# C&gt; --a6 d- C" a" G5 Y0 c7 y5 z+ C1 S6 B
6
1 ~  ^" d8 n' O& n+ f, Z&gt; a
7 z1 O% d7 O5 l# j6
8 q8 a: y  P0 f! Q0 A
6 _' L2 Y6 _6 I0 p//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理, q' H: {7 ?( N' n. C% d' m
</code></pre>
/ u+ j' h+ _" b<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
$ L5 Q6 ]9 N! s/ `<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ {8 t3 S& H  H8 r* u! b4 x
<pre><code class="language-javascript">// 大于! j: ^$ E6 |0 _  ]- X3 S
&gt; a &gt; b' {' a. t; k$ I- }
true. q, P7 {+ q- P
// 大于等于
0 q$ H. r( H; a: B5 `! k&gt; a &gt;= b5 f5 O2 Z/ ?4 ~, C% X# @9 |
true" R+ L* S$ k1 k0 A+ f. V7 j
// 小于
+ B+ @9 g  b- g2 Q1 V: x! Q&gt; a &lt; b: L% p* @, C6 E$ C2 {
false+ `: m# H0 T) q  m% X  z
// 小于等于
- c( R" f2 }3 n+ M. {&gt; a &lt;= b
3 W" ]8 s9 f& t  d3 cfalse
/ v; H: ]6 Q6 v1 R+ c+ c// 弱不等于: ~( x# S( c/ y# z- O; m+ `; r
&gt; a != b
& M2 y2 x, Z, H6 Z; Vtrue' Y! a5 K! K% S3 J8 |4 O
// 弱等于
- `% v" ^% O  o1 h+ p$ i&gt; 1 == '1', R3 \* z* |% \. G! e: J' O
true
- i1 w# x+ |+ t$ I$ {1 [// 强等于) V3 {, c; T3 z2 ^- l9 z
&gt; 1 === '1'7 q9 Y) K# }7 G: |' J( m
false
5 M! Q" @7 v8 v6 _) }// 强不等于" H: T% @' Z4 }: q& C
&gt; 1 !== '1'; S+ T* L% e/ ]; Z: J5 _
true
+ l+ O* I, n, }" a% k7 }! i. O8 e0 \, m4 x8 P# X
/*
& r9 @9 Y7 [' d9 K4 WJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误5 J4 y2 y0 }7 Q" I5 c( j# W/ c
*/  O0 i; J8 r1 [- X3 k7 x+ I6 q
</code></pre>) R4 L$ Q0 M8 P9 K  \& e$ X
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
: j+ y# a2 Q$ H% `7 D1 M<p><code>&amp;&amp; || !</code></p>
1 W* b% o+ A. q5 }<pre><code class="language-javascript">&amp;&amp; 与
, r7 ~$ f3 }, I$ K|| or
3 `0 O. }5 ?% U& v; q! 非2 e% l3 y3 i' d# A  B6 e$ ?  l
</code></pre>& H- |( N" E5 N$ A( o) H
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
3 c" c) y3 D3 `6 h<p><code>= += -= *= /=</code></p>
9 P+ s% ?. [' w0 z4 f' s<pre><code class="language-javascript">// 赋值  N# I4 n( V3 b' I$ v  t  W
&gt; var x = 3
1 Z# H5 U* J" R9 U" F: x// 加等于1 F1 N: |; g, z2 w# |: y
&gt; x += 2
8 B5 |8 A$ P& i4 `' {& t8 A5
- u  A" a4 _9 x// 减等于
; |8 y) g1 _! T2 G&gt; x -= 1* a- T, j! A+ e! M! e+ ?! S
4
3 r$ h% z, k* A- x  z  f// 乘等于
. y* f$ U, A; a4 X& Z: T&gt; x *= 2
( D  ], J( j: s; |: F" @! I8
% n+ {- Z5 B) ]- a4 }+ u// 除等于
7 F" K0 ~% i5 w3 Z, G&gt; x /= 2
* B& g  l% t$ ~+ [) P4; r# ~# r0 ?+ p* u
</code></pre>0 e7 q: X! x# ?, E8 A; ?) x
<h3 id="25-流程控制">2.5 流程控制</h3>
4 C" T1 H* s3 B4 M<h4 id="251-if">2.5.1 if</h4>- M% a& T8 q; x; j" t3 Q, `7 y
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
- B' {' a0 {0 m- p6 z- J% b/ ?; x4 Q
&gt; var x = 3
7 c+ w# o7 w3 z4 ^: L&gt; if (x &gt; 2){console.log("OK")}' A* V) c4 ]9 u7 P( e/ G
OK
8 @6 M) \' @3 j0 Q5 `+ ?6 e8 K- v* l- b4 }
2, if(条件){条件成立执行代码}
9 M5 c4 [% m) D        else{条件不成立执行代码}: ?& M0 B: y+ g" ?4 d1 k4 j: o
' Z( v. B- |$ X% S
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}7 l* u. ^7 H* x, T
'NO'
. Q0 s% B# M2 g! p8 y1 f# y- a% T( d) Y2 d) `: O8 @
3, if(条件1){条件1成立执行代码} % G( k; ]5 ]2 ~& f" }
        else if(条件2){条件2成立执行代码}$ `& Z8 D9 A8 n$ K, P* a
    else{上面条件都不成立执行代码}$ J" p+ x2 |' Y2 i

  g! D6 }0 D3 Y; b% H&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
; m/ Y$ x" _2 Z+ M. s+ O Ha
" O0 H8 y5 w  n9 V! x6 L& B. y</code></pre>0 k4 K7 s, L6 R
<h4 id="252-switch">2.5.2 switch</h4>
0 c" H% q0 r! l* X) L8 B, \1 D4 J1 r<pre><code class="language-javascript">var day = new Date().getDay();
2 [$ E' z& m- o& `switch (day) {+ j# t& `) _) B2 s$ e6 Q
  case 0:9 ~8 _9 \! M6 Q/ ?! `7 e
  console.log("Sunday");. u6 y0 P8 M( K6 y2 ]4 U
  break;
% G! b# n1 l0 X  case 1:
) l4 ^- Q$ Y' i7 P. ~) z  console.log("Monday");9 T7 S+ p' W1 E: g/ n) ]# |1 t9 s
  break;2 e+ q/ L" T4 Y% O3 g  T
default:
: u$ t7 S, r" j/ b9 E8 B' G  console.log("不在范围")( h% x) v  \5 a+ M) [9 \$ Q6 p
}
4 E% O: E8 u' c8 A% P! j0 M4 i 不在范围, ~  b: C* V7 l; L- q9 [* c
</code></pre>
) g0 e. t7 d/ b( z<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
4 J2 [* w5 Y) |  t0 d. q<h4 id="253-for">2.5.3 for</h4>
& O# \7 [* {: u7 ~6 s<pre><code class="language-python">// for 循环9 J) F( p9 K% Q% K0 }
        for(起始值;循环条件;每次循环后执行的操作){
1 Z5 H! Z+ H) n2 {  |8 b        for循环体代码2 U' N% }- Z! A$ `8 ?/ o
    }+ e+ _1 ^9 p2 o9 a- j

: v3 ]& R( Z# _* }( Afor (var i = 0; i&lt;10; i++){9 I4 t: u5 I5 I
    console.log(i)& }' \' C+ q6 W" B9 t& {  T: e/ x
}
8 `" S/ C' T. |6 S0 I# o        09 s2 M- ^* U" d8 U) B5 ?
        1
1 k0 D' A8 |0 Z1 k: r        2/ O6 q! @( z! W9 V' ?* @- Y
        36 q2 k0 F/ O/ D' i: k( Z1 n
        4
: ?2 ]* H# E* Z; f. e+ g/ K        5
' o" d/ B/ n: S' O2 ^        64 [3 {0 }' `+ a- F7 X
        7) P" h7 u9 W" m
        8
! h4 h4 }' E% k/ `8 L9 g! _6 G) l        95 \0 A. o$ x* L, ?( `& z  n5 I2 o
</code></pre>
2 J/ G3 O6 t! F9 Y9 E: m<h4 id="254-while">2.5.4 while</h4>  M: W. d& H6 n8 p% y6 r
<pre><code class="language-javascript">// while 循环
) A+ _, g' i1 P& r% O& f        while(循环条件){& {0 h  y; c' j* {
        循环体代码
& ~& o+ q* A- b9 u    }
5 E% ?9 p- H4 Y6 k& G0 b9 u4 k& u6 i0 }
&gt; var i = 0
6 H) \; n  P% ~8 ~&gt; while(i&lt;10){
. f: j9 h# f  s7 \$ Z    console.log(i)0 r; e5 d6 Q& x! j! J
    i++
* N+ {' W8 `+ S8 X) S/ a}
5 l& l& j' g+ I: p' ~ 0/ U. N/ ?% u- U/ Q0 V1 `) y$ c
1
% m3 u7 `) r7 |3 h+ R! I 2
! A, t( A3 S" v6 }4 b4 g 34 e# ^) r1 D* B( S6 j9 S3 P( m7 o
4- L7 M8 E$ B( o! {: x1 u7 V8 ^
51 T" ?- \$ T4 J$ M
6
" G% H. U# r( V0 |  w1 H& n 7
/ B4 N% A3 \$ U' |' ^ 8
0 P# d5 t# _" d2 |4 O  ~: s4 f 9" Y: e0 E  O$ F) m5 ^' V& e9 e
</code></pre>, W( j* b5 p/ H7 R( h
<h4 id="255-break和continue">2.5.5 break和continue</h4>
; v# Y. u3 y$ L<pre><code class="language-javascript">// break
+ M0 f; W3 d* U5 H8 n0 Dfor (var i = 0; i&lt;10; i++){
4 A& X/ A3 @% ]1 G) ^. ~    if (i == 5){break}; D3 D, o2 x7 p) M8 S# M; j4 S
    console.log(i)
. H# D3 V1 ?4 \% Z. V& m' S}
5 k3 H$ a0 d# }- o9 }1 a 0
# O: Q7 e, v- R6 U 1+ T8 L  }' y; G4 O
23 R! L+ o# m6 K6 C% j! Y- {% F
3
2 t6 \9 d; O9 m7 R# q( {+ ^0 i 4# j, d* U% k- Z- E
// continue
2 W5 o+ u5 O* ifor (var i = 0; i&lt;10; i++){
: A5 ?: U- l: ?    if (i == 5){continue}- t8 ~, Q  z+ V5 Q7 ?& N  W
    console.log(i)1 D' S, \7 p& R* @/ j! N
}. i6 u3 Q& i$ M% J* h
0
% u* ?+ l9 W1 ]) f 1- G9 ?$ ^' G+ ]! J8 I
2
; o, V, I, _2 B/ ]. J- G9 ` 3; i" m2 T, U( S, U4 l% @0 j5 h" N
4
0 b- {3 v# z& |9 J 6
  G; ^! P2 `4 U 7
2 C2 {/ L3 S3 {) b. i- J0 L0 | 87 X4 E( N: n( b; O4 J' _
9
5 X( a$ ^& z; x( V7 G
; {" i$ Z* B; I! r) q: ^+ a: N9 f. ~: X</code></pre>1 @8 o; F7 A! g* _6 Y: t
<h3 id="26-三元运算">2.6 三元运算</h3>+ }1 D0 n6 w6 ^, u+ M  ^
<pre><code class="language-javascript">&gt; a: Y  m& E7 n6 a+ a* F5 @, h
6
) L: l6 q# u$ Y7 J&gt; b
* K( c  r) d; p) |' r$ z7 I! L3
2 N/ `" C" V! I6 k# b  z! B) H
2 m+ U. H: w8 v3 z/ o//条件成立c为a的值,不成立c为b的值
3 k( n% e% G) @' x- ]&gt; var c = a &gt; b ? a : b
! c$ {& e2 v+ n: P&gt; c* J! O8 W6 Q# ^
6
: v( I. C4 C8 q3 |' ^# V) ?: @+ O6 m- \1 c
// 三元运算可以嵌套1 b% B/ _& H7 G2 a9 B5 P# E" i9 U/ a$ [
</code></pre>
$ T* [$ O/ @1 j- q4 a<h3 id="27-函数">2.7 函数</h3>
# h& a& d8 b0 u9 u. \<pre><code class="language-javascript">1. 普通函数
: S: {  Y( d4 c&gt; function foo1(){
0 w% x' N+ t8 X    console.log("Hi")$ l/ [4 d$ i) W
}, a+ X6 @+ G6 Z" o4 G/ @. x
+ _- u1 m  J, G5 K- B+ \2 R
&gt; foo1()/ K5 ^0 T. O% }( n
        Hi
: @0 b% n+ {( H/ Q& l. l; J0 t2. 带参数函数  J$ {. ?; U4 O. z
&gt; function foo1(name){) V- _7 x, t9 c9 H' h# \3 ?
console.log("Hi",name)
* e$ V* n6 j  E2 ]7 }}
5 z0 b0 }: Z6 a0 i  G3 P% R! t9 r; X( l$ k, n' n
&gt; foo1("Hans")
# f/ q! Y% u; p5 L. M6 }! U% xHi Hans2 ^- z4 A/ z/ G( ^# T: W
6 Z* W4 }& ~' s7 ~- M/ Q$ ^( i
&gt; var name = "Hello"3 p& R! z/ Q( g+ W7 p# E
&gt; foo1(name)) `6 b5 [: b% ]6 a( l; }
Hi Hello
6 n1 i$ G/ B4 S  ~# u# t" y
( p+ Q; U$ J1 t2 l/ D: V- I3. 带返回值函数2 P$ z& c0 R3 H0 [. i" K
&gt; function foo1(a,b){
% p) g' U' ~; J7 K5 q/ K1 R8 z        return a + b   6 P% D  w. M( `, }; C$ b+ ]
}
! }, `1 u) X# [- a# w&gt; foo1(1,2)* k% {  O) y3 g0 r! U
34 V3 P& S, ]1 [/ Q5 W2 Z
&gt; var a = foo1(10,20)  //接受函数返回值
% X5 C5 Q. T9 Y- V- p&gt; a. d' L! {7 \; L6 [( c2 k. z7 Z0 }
30! L% s: B  r9 k: ~

0 S  d8 ~5 a# g1 P% U! j4. 匿名函数* H; M3 K5 M5 I8 \
&gt; var sum = function(a, b){/ Y* f6 P. j& t7 v$ ~) T
  return a + b;
/ l' S" P! _9 T& M}
6 M3 y5 O" G8 R' z( C4 s&gt; sum(1,2): i' u) H. i* S( @! x
3; |& Z$ J6 D4 }* W

: Z) p, \1 Y1 X- ?// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 n6 M* p. {% W
&gt; (function(a, b){
# @& M$ I4 P7 ?, H; J  return a + b
$ A$ u/ m& W6 G})(10, 20)2 |7 t' k8 G$ Y$ W" `/ B
308 W3 j/ j! ^2 I
% H! F  H$ W0 ~$ _( _
5. 闭包函数
8 O/ v7 |2 Z* r, q) }8 X// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数! c. x) @5 V4 u/ S! K- k  o
var city = "BJ"
0 @- w+ E. X( t1 L. ~function f(){( y4 v$ {$ I/ L. V  W# b+ J
    var city = "SH"
& n  B2 @; T1 H1 [    function inner(){* T5 w6 I0 m1 e; o: `2 @
        console.log(city)  `% _* c- o: z$ t# d) B
    }
+ T) C  i* b0 B. P: x/ z    return inner
: U& r# b0 ]2 {$ f$ J8 A2 {' x}
. D5 A( k- `# k% Nvar ret = f()
3 E- L% I; p/ {& kret()" P9 K/ o1 [" W1 [
执行结果:
& S8 z5 ^% U+ ]SH
: I, R, A9 K1 r; ^; P' Q7 o1 \: e) |' h$ ?- a7 H- _
</code></pre>( n( ?, k" P9 E8 c
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>  l3 {  ]( T$ ]7 |: i3 }; k
<pre><code class="language-javascript">var f = v =&gt; v;
, T/ m: F2 c# q7 J$ [// 等同于. @8 ^  m# `' ]$ s5 I8 v  s6 l
var f = function(v){3 O3 A0 i$ q& G$ y( d/ o) F! p
  return v;
6 }$ X1 I& k' Z$ F6 A8 D}
1 V% x4 H$ ~* U: @% V( ?7 A: o</code></pre>
: J# @& Q9 `" r9 [<p><code>arguments</code>参数 可以获取传入的所有数据</p>) u" c  _+ p& V4 L9 J( X
<pre><code class="language-javascript">function foo1(a,b){
% l3 S6 S) F* o( K    console.log(arguments.length)  //参数的个数
% E0 ~9 N7 |, l4 D0 N' g: ~& B& }1 }8 K    console.log(arguments[0]) // 第一个参数的值
6 x3 u9 {5 c0 J' c' t) W+ V- N        return a + b   3 i" P! [6 i4 y
}  V% J( g, X- L4 B
foo1(10,20)) \) A4 J$ b( s) ~/ |- K
结果:
+ t" Y. v) }9 O$ F  T  ] 2          //参数的个数
0 _" j- L0 W* b# a2 K10        // 第一个参数的值
3 v( t, {6 }# u0 W% a30        // 返回相加的结果  G9 X  \  X9 i1 ~* p4 _) X
</code></pre>4 G- k$ K& ^4 p! }1 J% H2 {8 h
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>. Z+ m( }; m0 U+ d
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
- T% `; @# n% U' Y1 n# w<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>& z7 u7 x5 g+ c$ k8 T# A
<h4 id="281-date对象">2.8.1 Date对象</h4>
: o/ b9 e, I8 }. _<pre><code class="language-javascript">&gt; var data_test = new Date(); N6 e: m! P4 A* J
&gt; data_test: b$ a% G& \: V, ?  }. C6 ]
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)3 s6 T- [6 d" R
&gt; data_test.toLocaleString()  ?: \: q6 t# ]* K5 v1 N& t
'2022/2/11 下午9:44:43'! n% i+ h+ A: }$ d) Y7 R- u

  M  C3 _" O$ F  z) W* z&gt; data_test.toLocaleDateString()
' P1 Q. m. M$ F, o; }" j# K'2022/2/11'
; c4 Z" Q. q) L% O$ A! y' w9 a
7 c& T0 [) V& W&gt; var data_test2  = new Date("2022/2/11 9:44:43")
" r  [2 E, @5 h$ @% c* P# M&gt; data_test2.toLocaleString()8 I- D& }$ L4 m- k) q$ o/ [+ e0 J
'2022/2/11 上午9:44:43'3 t( ~# C& T) d1 \
- N$ ?; p. C1 `$ U. C+ H
// 获取当前几号. K5 m: c9 B& O3 O
&gt; data_test.getDate()) W$ y# D/ Q- J" I. j/ i; w
11
# B, i# C9 e$ W6 r* p// 获取星期几,数字表示5 P- B1 w7 P9 V6 i! q
&gt; data_test.getDay()  1 K0 v5 q, u" ^  C4 P5 z, C- B
50 C1 ?; T! v7 x
// 获取月份(0-11)# W! L# o' O0 q9 ?1 |4 Y
&gt; data_test.getMonth()
: j9 G  L- d7 p0 q" x+ c1
* H; k* C( F1 ~$ U! D5 @// 获取完整年份2 H" O4 Y# Q: Q& w# w
&gt; data_test.getFullYear(), W8 P  B' C7 ^! l! t3 p
20223 a. N% }2 L4 X% [  O* L5 V
// 获取时
* G+ T& `0 l( G, ~&gt; data_test.getHours()
+ v, q! [. u- U! t- ~21' y9 o( z5 G2 t
// 获取分5 o; G0 |. ^, H, p* w' B+ I. @2 j$ S
&gt; data_test.getMinutes()
6 k9 R+ Y7 @& g6 o44
1 u7 O% v  B3 ^// 获取秒
; I: D6 h' E1 h7 y' }&gt; data_test.getSeconds()/ P0 d1 T; Y) `5 L! ^! d' d- i: L
43$ \# l! H  |4 _' q4 x3 k( r' m
// 获取毫秒
: B* l/ V( I, O  F&gt; data_test.getMilliseconds()
, |" R+ O' C0 B) N, w$ K( x( V+ w290
" B+ w9 t& D, J- f( c// 获取时间戳
6 [) c% G- J& ~$ Y5 f. [&gt; data_test.getTime()
% D/ j5 y6 W9 T4 J4 s" Q4 I6 Q1644587083290
) O9 I) a+ u; P% h0 C</code></pre>+ l$ C. \4 U. F& K5 b' |
<h4 id="282-json对象">2.8.2 Json对象</h4>) Q- |# D2 T" n/ ?3 l
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串; L' `4 r/ Z+ {- k5 O* n
JSON.parse()  // 反序列化,把JSON字符串转换成对象( k9 J. k. v7 S' q+ v- U* x

/ r9 C% Z$ F, g- w- o  s// 序列化0 g* K' s) U, \4 g9 E7 u
&gt; var jstojson = JSON.stringify(person) # ?  P3 P/ l) `0 w
&gt; jstojson  9 K1 g: e$ x: m. Z. |
'{"Name":"Hans","Age":18}'
# v* I( ]  f, R* W8 x9 B0 |0 _0 M" |9 ^  h" I/ m
// 反序列化
6 @. L% x8 g2 J&gt; var x = JSON.parse(jstojson)6 r& r4 o+ S$ a6 r
&gt; x
. r# _# h* `% Z8 ^- V# r! @{Name: 'Hans', Age: 18}
  |& J& ?" b. g7 Y. [&gt; x.Age; f* t' L7 A" T+ H" T3 X1 U
18+ B8 V, Y" z$ }7 ]% R
</code></pre>
9 s, z3 u, D; E0 ^& b<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
: m2 V. @( N2 o$ m( z/ f# B<p>正则</p>
) t' ^# f6 o7 K' W1 b2 f<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
6 ?6 f1 y( C! k7 X" v9 q&gt; reg15 Q! c& {* W9 j; `" B
/^[a-zA-Z][a-zA-Z0-9]{4,7}/, [2 Y8 b+ X9 P
&gt; reg1.test("Hans666")/ C3 y+ u5 L) F2 f
true* y2 O* f+ X  y' e6 d4 D6 G7 p

! X% ]3 v7 D& a7 Y+ X( F- G&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
7 i1 p3 c2 \, @% y9 E9 Q&gt; reg2
3 R7 h" f; [. J! X* G/^[a-zA-Z][a-zA-Z0-9]{4,7}/
' v" H7 ?- g) ~+ L1 _  J&gt; reg2.test('Hasdfa')- f, v# c5 C5 t
true
1 k$ \+ }- [; r# H0 a( @: t! o& ~; y3 f! c% k/ f  l
全局匹配:% ]! X9 y3 O2 o5 r% x
&gt; name
' `! s8 ^3 H7 P( K% Q'Hello'; d$ d- Z0 P6 t$ {4 R: t
&gt; name.match(/l/)
$ U! o1 h' x2 U/ {0 K['l', index: 2, input: 'Hello', groups: undefined]2 t4 Z; p) n3 y& T, m& w! R0 F

0 A% @7 ~& ~# v8 [&gt; name.match(/l/g)
# L) m6 I2 h1 r; h(2)&nbsp;['l', 'l']& q1 v0 G3 b' ?4 k8 m  o# e
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配7 h) v8 u3 H# |# x& u% Z$ z& Q

/ }2 {( |& i- Y) j8 e全局匹配注意事项:
, B1 D( y8 L9 v! N&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g; q. y- h8 Y  N5 L0 a
&gt; reg2.test('Hasdfa')/ a; T- E" S: Z, i, @. G) J
true" S! k; R# P+ X( X
&gt;reg2.lastIndex;0 l- a; O* f8 \1 T  \' V# ?) u; _
6
4 l( }- P! x2 b4 {4 h1 f&gt; reg2.test('Hasdfa')" _$ e- y! Y) ~& |1 V' I' R; H
false1 Z" n) J) K4 l& F
&gt; reg2.lastIndex;. M7 P2 i1 ^% E
0
4 t1 f. w7 ?: Z" c2 U# e&gt; reg2.test('Hasdfa')! j, x. o) ~; ]+ ~- l
true
) w. ?; W# s8 ^1 Z* w9 j&gt; reg2.lastIndex;
! k6 G, h0 q* n8 ]2 f. G6
: p$ q% Y, ^& C6 b&gt; reg2.test('Hasdfa')1 e% o; k0 f: j" i) N$ A/ k" }
false
4 q( H2 ?! t/ W% z, k&gt; reg2.lastIndex;. u1 |+ A( t% X7 U: O
0
( W8 R) w3 u8 c  t// 全局匹配会有一个lastindex属性$ |5 Q. m, G  ~2 @. Z5 g. T
&gt; reg2.test()  x0 `1 r% g! C) L5 Z
false
5 i: P& L: `7 e( Q" n&gt; reg2.test()4 R+ M" ~5 X9 ]. {( B5 Q4 z# m
true/ }6 L0 L% o' Y# q* U
// 校验时不传参数默认传的是undefined
- m0 {! S# Y4 g0 ^</code></pre>
( a4 q; U+ c/ |' ~$ m/ y<h4 id="284-自定义对象">2.8.4 自定义对象</h4>/ l8 v  Q2 n8 g$ U6 }
<p>就相当于是<code>python</code>中的字典</p>1 C# I, B# L+ P0 _8 f0 s
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}, M9 {$ N  ], Z- X' m
&gt; person4 G$ B6 e8 W$ H2 e: q* s) A
{Name: 'Hans', Age: 18}- O7 ]4 T' G. `; l3 Q
&gt; person.Name
# y2 ^7 V, J" B+ l3 l" B- a'Hans'* y9 Z+ ^8 F, i- G9 G
&gt; person["Name"]
( h  u) F( J6 I, {" v9 ]8 A'Hans'4 I8 a% B3 c) ~& ^6 e* q

  [/ [3 S2 x3 M" w' W* ?// 也可以使用new Object创建
! m8 h4 D# e) X# j&gt; var person2 = new Object()  h0 n7 Z8 J1 a3 j3 o' u* v4 F3 J; C# e
&gt; person2.name = "Hello"# C" }! p6 W4 i+ g! v' Q5 d
'Hello', M- D: G9 V/ S) ~: o9 @3 K
&gt; person2.age = 20
& C; p! \2 y* ]& Y20- [' c5 F/ R7 q2 s2 J/ v' F
</code></pre># S' [7 R5 O" I! W3 b# ?6 A
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
4 |  w3 L4 o' }7 [5 E<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
. M. J. i9 h/ q<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>6 f- A) B" K  V, G* g. g. @0 l1 s+ \
<h3 id="31-window-对象">3.1 window 对象</h3>5 S1 q) Q# i8 U6 n; U
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>& Z, ]$ f; x( o& ~, ]9 R" g9 A% k
<pre><code class="language-python">//览器窗口的内部高度- S4 m( z" u, Z2 u" U
window.innerHeight   M$ Q* X& w% }- d$ Q
706
+ ?; j6 L  ^& D, q& J//浏览器窗口的内部宽度
# @3 T+ Z7 O& J/ _5 I2 Ewindow.innerWidth' i4 o/ e2 K: ?
1522
0 G; a4 H& X+ l0 m// 打开新窗口
# ?0 ]9 F) _3 H8 r* B! h8 a3 wwindow.open('https://www.baidu.com')
! F% i3 o1 D! x" _* p% HWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
% ?( u8 y8 N" q; g/ S* q. O// 关闭当前窗口  X# H9 _: Q0 K9 o$ n  Q
window.close()
! N$ G; Z7 p& ^//  后退一页0 @1 r8 [* Q4 w7 g: I9 Z
window.history.back()$ \, r# _+ ]2 M4 H
// 前进一页) v& M1 o: y1 F* K4 }+ S
window.history.forward()
, C, M' S* t9 c: a2 Z//Web浏览器全称4 i* |" I; C5 o9 w1 `6 O; U0 p
window.navigator.appName
' Z  e1 C# v8 u0 T5 T4 c! Z" }: V'Netscape'
) x# a5 ]( F0 y% {: a% I; o2 [# Z// Web浏览器厂商和版本的详细字符串4 m' h9 E; ~3 T/ j9 z$ l# L
window.navigator.appVersion; `' `: z6 U& S0 H
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 s( G+ _. R3 m& t7 W// 客户端绝大部分信息/ e3 D, `$ p% S6 _9 Y0 M
window.navigator.userAgent/ e5 F* R! M0 \6 R
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- x7 E( \( n* e9 Y! b5 S
// 浏览器运行所在的操作系统! s8 e6 c3 m0 p2 f) H" r' }5 S, J
window.navigator.platform
) y& q; K  D2 N  u; P1 B6 Q& g'Win32'
2 i' J: d0 _5 a3 q4 S. w
. r$ I: J! P1 i) @) ~2 U9 p. P//  获取URL
! [- Y, ?( B# ~. y5 Hwindow.location.href
. o1 n! T# J( f1 C  |' d" E// 跳转到指定页面, T- `3 P# P6 E. O; g, C/ F5 ?" E
window.location.href='https://www.baidu.com'
% g* u6 w! _& N6 i// 重新加载页面
% ~2 \0 m% L8 r0 m* r8 hwindow.location.reload()
5 D; `4 S; B' Q: U9 a) _</code></pre>7 B; o/ C( K4 q' Z& t4 ?/ S& \) n
<h3 id="32-弹出框">3.2 弹出框</h3>. [# x9 }7 s* K; ?
<p>三种消息框:警告框、确认框、提示框。</p>3 l* Y+ N3 J/ d
<h4 id="321-警告框">3.2.1 警告框</h4>
7 _0 ?& ~" i& s% u/ K' B<pre><code class="language-javascript">alert("Hello")0 Z, o( l7 B/ h' W, k) e9 S5 ~3 w
</code></pre>0 v, y4 n2 g# ]: G( q1 @" I. \
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
+ n- v5 l2 F5 I! {3 [2 ~3 C3 y<h4 id="322-确认框">3.2.2 确认框</h4>- O3 s+ y' h9 G
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 W3 [( U+ G% F" n0 `<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, P9 k4 X- @: N" Jtrue. p4 z. l8 q; z0 d/ S7 Q7 j
&gt; confirm("你确定吗?")  // 点取消返回false8 P# Y+ B  @1 z
false
2 i. E. D5 B* _4 c5 G</code></pre>. l* O. H, E7 i  A$ c
<h4 id="323-提示框">3.2.3 提示框</h4>
: l- t5 p$ b6 ^6 ?+ J/ G* j" N<p><code>prompt("请输入","提示")</code></p>
& w  C  h, h' K  n3 f. ^+ a3 q<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
1 S& M& v% _4 h( h+ W9 U* o% {% j( c; |<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>+ n: Z6 ]6 I$ i6 h; [' ^
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
4 L8 G* h+ b: i5 s8 h<h3 id="33-计时相关">3.3 计时相关</h3>1 F7 A1 w. e5 }' u! W# B! o. h
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>9 K7 z& l5 N$ M& f3 X6 F% J5 D
<pre><code class="language-javascript">// 等于3秒钟弹窗
8 d( Q5 O8 r8 s4 ?& X  d- ?setTimeout(function(){alert("Hello")}, 3000)/ Q4 [8 S3 `( Z. I! y! c, d8 D

" b; g' @# }8 u) I6 u* W) pvar t = setTimeout(function(){alert("Hello")}, 3000)6 J7 x. L9 ]. @9 }' q3 K6 ~
/ r5 L( D- B! r% Y& H+ q
// 取消setTimeout设置6 o7 ~* j2 G/ Q* R" w6 D) F
clearTimeout(t)
4 E: o6 Q" O, S7 w) J1 p2 V</code></pre>: [" N+ ]" |. P3 b* W
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>6 E  }6 [* }1 R5 d3 k; j, @+ h
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
8 J8 v$ j: U# P9 ]4 K7 i0 L<pre><code class="language-javascript">每三秒弹出 "hello" :
+ W7 k; d7 N8 vsetInterval(function(){alert("Hello")},3000);# w/ H; Z. q+ F, F! d: I5 f% u
</code></pre>
6 _3 @0 v6 D1 }* u<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>8 E; e2 f8 }& A: Z* F( T' m6 A
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
3 `. n+ X: z- o4 o) Y. M0 k$ z//取消:" t( V& s+ G8 ]* ]( J- k, m) Z
clearInterval(t)- \" _( z2 h/ U1 g' N+ z+ x
</code></pre>
& x' D2 k+ U& V
$ O4 e7 l' ~; S. }$ v: g
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-26 11:41 , Processed in 0.081534 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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