飞雪团队

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

前端之JavaScript

[复制链接]

8116

主题

8204

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26678
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
* N4 O+ |7 a6 f1 i  S9 O: i7 D
<h1 id="前端之javascript">前端之JavaScript</h1>% Q: d, f+ `9 P$ k
<p></p><p></p>1 ]  M( b7 k* Q/ S; a
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, `& b" g. r( ?' f<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
! |1 l" L0 v# e5 u; f. z7 K它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>( n3 }( a/ I* O/ u  Q6 `8 w
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 z6 V) T5 i7 Z( [: S4 L/ D$ s
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
5 l* D5 a6 i/ K! ]) C0 B<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
7 Z- M% t" ^+ f. t; C; k: T<h3 id="21-注释">2.1 注释</h3>
& l! f% Q. k# @* [) N<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>3 Q) z& x/ V+ l9 f
<pre><code class="language-javascript">// 这是单行注释
5 ^4 c4 j! G# M  V
! G& F0 f3 q" y6 v# z/*% O! [, ]+ b! y0 s4 `  C& R, F# R
这是多行注释的第一行,
6 A: _: u" ~6 J( @$ ]这是第二行。
, ]0 z% T# z5 O% q$ S*/
5 a2 w3 D7 B- S( E6 l. r1 d</code></pre>
. J8 d9 Z8 U% z7 E<h3 id="22-变量和常量">2.2 变量和常量</h3>
: g5 E9 q4 h2 H+ D2 \$ \( e/ o<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>7 c* P: F. ^! U- X
<ul>
" t) s3 O% \* C. [% G, m" Q4 I<li>变量必须以字母开头</li>6 G& T* j: X/ ^3 h7 a0 n
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>: k& ]5 u, q( d, R2 E$ v
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
" \7 a6 a: f- t0 I9 T</ul>
) [) m/ O9 V+ K* O5 y' |3 L<p><code>var</code>定义的都为全局变量</p>
* n; l1 T: [& Y+ p* F' ]6 m2 W<p><code>let</code>可以声明局部变量</p>, P+ o# @( d$ s1 S
<p><strong>声明变量:</strong></p>* T8 |/ |4 F( O; G5 ?
<pre><code class="language-javascript">// 定义单个变量# w1 \5 M; L# S- N, @
&gt; var name
/ x/ B/ F$ g8 v% h  j&gt; name = 'Hans'; N& g: x. g; h! t9 g
//定义并赋值
( q" q! P  w: V; T) Y&gt; var name = 'Hans'& n+ |3 |% _) u
&gt; name" E8 C- b& \3 ]% y% p
'Hans'& W$ ?% d( u& I- P) G3 X
; P- @, }; h5 T
// 定义多个变量  O6 E' M0 x! V  f. N7 c5 h
&gt; var name = "Hans", age = 18
! T5 a: h' N! ~: d+ W" R&gt; name
& n3 E0 p/ g0 |( D6 o3 F( D'Hans'
5 B5 B8 _9 v# P7 O&gt; age
$ o+ I: f: @7 b! {1 a7 b/ _, P18
- X! P5 M6 c) B1 h: C8 g' u1 m
& L0 U) f. J. j# z//多行使用反引号`` 类型python中的三引号1 o# D* [2 V9 `4 M' O
&gt; var text = `A young idler,2 O5 \3 V% s0 ]3 c4 t$ k
an old beggar`# w" B  J) I! R  _; [" i
&gt; text
8 k3 V1 S6 T5 A! n: a'A young idler,\nan old beggar'
1 A& K, Y4 K" _' h0 J</code></pre>
# O& g/ \! i5 k: o/ U* P. `<p><strong>声明常量:</strong></p>/ D: ?0 k, \+ c; h3 e4 y
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>' Z, S' p# T% L/ H  O% h. i' ?
<pre><code class="language-javascript">&gt; const pi = 3.14
5 G$ x" k) M& e" n" J1 w&gt; pi
" ^. a6 [/ R4 G( W- @& B# m; ~( r3.14
  G3 \* T3 W& a- _&gt;  pi = 3.017 ^) `8 {1 r% s* r
Uncaught TypeError: Assignment to constant variable.; F/ Z: F. @5 y. X6 H
    at &lt;anonymous&gt;:1:4
/ p5 v6 P/ Z8 z9 S7 c# r. G, ?2 }. U4 K; z
</code></pre>
( C+ |1 C; `1 f4 p& ~8 v<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
8 ]7 f' @, U& h<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 N* e( C- e( L2 M+ e<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>7 o7 w" @0 C% M) d
<h4 id="231-number类型">2.3.1 Number类型</h4>
/ [* r! N: p) C5 g# C/ `0 R2 p# j<pre><code class="language-javascript">&gt; var a = 5: Q, C8 t/ L! O
&gt; typeof a   //查看变量的类型  + B+ V" `6 D: H/ A1 C  P
number
3 _, V- |- V6 ^8 R$ H1 U" p4 r  [0 V4 o7 g
&gt; var b = 1.3/ M; ^; c+ _- B4 j
&gt; typeof b
7 O! n7 U) k: C: D; jnumber
9 W; j# k2 ]6 @; p' Y, ~* O- j5 h% e5 O4 P, T6 @( e
// 不管整型还是浮点型打开出来的结果都是number类型) [3 L0 O' O6 ^2 z- b+ b

, W! W3 b, u) n, Y( b& y/*
! j9 @& [: f# n" t$ YNaN:Not A Number. k* s7 X" S: Q# R) z
NaN属于数值类型 表示的意思是 不是一个数字
2 w; W+ E4 ~% t2 r# ~*/
& r/ G( i# V" l, ^5 l0 W: H
4 m0 f* ]' G' B8 X# wparseInt('2345')  // 转整型
- f8 g! G: x8 T23455 V; p# L. i5 C* C4 X. c+ k
parseInt('2345.5')
5 f' [1 w# i  P: B1 \2345
+ F- C, |/ P- f! ^8 k, AparseFloat('2345.5') // 转浮点型
! ?) B% `; Q, w/ o2345.5
8 o7 ?; {5 h* `$ }$ RparseFloat('ABC')
- O6 ^# x( V: N, ^5 XNaN2 n+ B2 o( b# w2 ?6 Q
parseInt('abc')
, _; Y5 D/ G  x" M( {+ TNaN
% h( ~/ T7 X0 a; s</code></pre>4 i$ e5 y  h- ?" w# j; |
<h4 id="232-string类型">2.3.2 String类型</h4>* ]9 y  {8 O. S
<pre><code class="language-javascript">&gt; var name = 'Hans': T5 L2 t! p6 i5 M: v; o
&gt; typeof name8 c& m7 s# v# Z+ j
'string'9 W- o# P7 L4 V

6 y/ p0 W" t; f- s/ Z# h$ a//常用方法, p% R; f2 r( z2 g' S5 f
// 变量值长度
# H' e+ F$ q- ~1 d" u& ]: K&gt; name.length% Q$ U3 `. m* `  h" w
4  z& n/ R& Y5 c/ Q2 Z/ l
// trim() 移除空白
- f. h# _% o3 J. p; S7 v&gt; var a = '    ABC    '3 y; Q) ]5 C8 _& A5 Q
&gt; a1 ~+ v* ]. K0 _7 C7 q, G, I1 D
'    ABC    '  Q% H9 u: W3 H: `+ t
&gt; a.trim()
8 w  c. V! I' r% N2 o'ABC'
5 j! l$ M+ i0 o% h' J7 P$ h  L//移除左边的空白
& {, W* y# R$ n  f&gt; a.trimLeft()/ a, r$ Z* `' P4 U- Z+ z1 E2 y2 ]
'ABC    '
( O6 S+ H7 |- N) J9 t# H//移除右边的空白
7 L. k! S' h' |  \5 P. C, f" _& v&gt; a.trimRight()
8 l1 U7 j; M1 b'    ABC'
1 m- P: r& X- h8 Y
! H  r# V/ `$ M3 |5 O8 C- m% ~//返回第n个字符,从0开始
" a; B7 i: O& V$ Q: l  i&gt; name2 `) \" g. R7 h
'Hans'
" C; t- C- J$ L5 a7 k&gt; name.charAt(3)
7 t) y: R- n2 g" ^'s'+ V) a1 L- e! c6 R
&gt; name.charAt()
' `( B# i! X& k'H'& i0 j! q5 R2 Q2 Z
&gt; name.charAt(1)  }5 `) {8 g5 e  {& k9 G
'a': ]' S: l, D) o+ ^8 c4 g& _
8 z. D% f( X: Y# |' m# x, t8 V' R
// 在javascript中推荐使用加号(+)拼接; f- y1 t3 q5 t' B  E+ s
&gt; name, H/ E" U7 S1 Q8 G" x2 b7 K$ v: o
'Hans'
) y) v9 W8 w4 }" Z1 Z; o- [  ]&gt; a  u/ d( R) M/ `. ~
'    ABC    '" w3 p1 c5 g& q( W. o: G
&gt; name + a; {' m" x# b8 m1 e! `4 n0 r
'Hans    ABC    '% X1 W, t2 a$ `  w- ]  t+ l$ R" T
// 使用concat拼接
6 a1 ~$ I( P! Q& k( B: T&gt; name.concat(a)
. Y6 @& m4 C; @) J: Z, _) K$ |'Hans    ABC    '
8 l2 `0 b4 p) C8 l! {. ]. y; y% X, }6 i2 k
//indexOf(substring, start)子序列位置8 m. |3 H* F1 ^

; J( _& A: g/ `9 P& }4 v&gt; text
: {: z7 C6 n' U/ w0 t5 [6 J'A young idler,\nan old beggar'
5 l. w) X2 c$ R- W&gt; text.indexOf('young',0)
8 o+ K- ?" Z9 h$ t5 S4 u2
( d& a7 }) G; w; }, Y
  U/ Q0 r" g. I: H% t# L: g//.substring(from, to)        根据索引获取子序列4 H2 \" F0 X/ }$ a2 t1 t
&gt; text.substring(0,)
0 i9 s/ r' a" D( ]5 }0 Y'A young idler,\nan old beggar'& F+ n0 v3 {) z; c
&gt; text.substring(0,10)
# y. }6 W, i% o" F0 F- l'A young id'9 j8 ]0 }- v3 m
. T0 B9 v) y/ `; q& o6 A. J
// .slice(start, end)        切片, 从0开始顾头不顾尾9 ^6 A) }7 H) A$ Q5 h& p4 d
&gt; name.slice(0,3)
2 r1 L5 L6 t8 k: A'Han'" `# K6 ^, o+ u- m9 c8 y1 z

0 ?$ Y2 h: R' S2 x- S2 k3 I// 转小写
  J0 L3 G8 ], N7 Y&gt; name
# h! l! L7 i# Z, }4 q6 G% W'Hans'
0 W! W% e( b) a4 t( B2 [0 }&gt; name.toLowerCase()7 n" P! p+ e! `* f
'hans'5 m3 h( q7 s) ~4 k2 i# Z! j
// 转大写
* C% o1 }" `1 ~' [! x' q! B&gt; name.toUpperCase()
  ?! J- D) d8 \; L8 _8 ~'HANS'
" i( o% {5 d8 m9 b6 z4 e8 s! k, m
- M- e$ P  w5 `- K& m7 F// 分隔' l) k, q( C. z+ |
&gt; name
4 S" I* K) c( I6 W'Hans'
1 |4 ?4 ~9 A0 X&gt; name.split('a')* i+ k0 `2 m* D( m& `7 ?  V
(2)&nbsp;['H', 'ns']
$ k' X% w+ J( }/ R9 r+ ~; J</code></pre>
6 ?7 Z( J% U% [- R, M<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* q. q  v9 D+ g' o! q<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>6 F3 C; X4 b: j% r) ~# o! @
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
, g6 _8 {2 ]- J( P; Q<p><strong>null和undefined</strong></p>$ d7 o; ?3 u  M" Z9 u: s
<ul>
; h- Q5 X/ ]6 o3 j+ c. }<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>, e2 G% a# n  @% q" W) D  j
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>; A( @) E6 ~9 t3 ~! \* D$ ^
</ul>2 V! A; O3 v+ l& r
<h4 id="234-array数组">2.3.4 Array数组</h4>
" E) s2 V) z7 X; }<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; Z* C1 R& A7 w$ }6 g/ i, [3 N5 m' y<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']   _; f" d' ?5 L) C+ J. Z/ U
&gt; array1( O3 X& Q- \7 a) F1 ~
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 p9 ?, t" y0 s, H* o5 ?; t2 h
&gt; console.log(array1[2])  //console.log打印类似python中的print% r) A3 y/ I2 b$ H
3
7 g) [8 p* P/ v! s0 H" q1 P// length元素个数
( h6 O4 }' Y  ^( n&gt; array1.length
) Y0 @* {+ E7 U. F3 Z0 h6 K6
! q( H% w) Z# N- {" e// 在尾部增加元素,类型append7 C: d" M- U1 x0 {: c; S
&gt; array1.push('D')
8 o. m2 t2 U2 A7 p7
/ _8 A3 f( p3 p  G) N3 _&gt; array1
( f8 Y) N6 K( S2 h  N* Y. I(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']& Z/ I+ X: N9 q6 x3 p1 F
// 在头部增加元素- O* T% ]" e# R6 q  E8 [2 ?1 Q# @2 y
&gt; array1.unshift(0)7 N/ \& I3 H9 P4 F3 U! S
80 Z2 s- H, ?0 m* Y+ h
&gt; array1' l0 y; }8 k  k; a
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
  l5 N& X. C* G/ i% _
8 q1 r% S; o/ l6 L7 G1 f//取最后一个元素4 U5 C1 b! Q1 I
&gt; array1.pop()
/ T4 J6 o3 t* s4 l$ C; l) r7 k! x'D': k% I% n# y1 |- v( V6 ~7 }
&gt; array13 p" L4 S+ [2 v% D& D
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']- h) c  l# O7 M2 G0 w5 @% \; j$ k
//取头部元素+ x$ W( s/ M' r* ?$ N+ c
&gt; array1.shift()0 e, _, \, c- k2 ~( b# A
0
* W5 H8 H$ c0 O! x&gt; array1
9 l8 M4 d2 h( F9 U1 e(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
( S3 n. v2 h3 _
) u; d! |5 k: p# M1 Q" w1 h//切片, 从0开始顾头不顾尾
/ A9 T& H: H% l&gt; array1.slice(3,6)& k  N! h1 k$ C
(3)&nbsp;['a', 'b', 'c']
4 O# |4 n/ d$ h// 反转
; |: g7 r; Q" q&gt; array1.reverse()
$ Z* v( _- }3 B: W( N7 o  x(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 s* Y% K, X7 y/ o& C" Y
// 将数组元素连接成字符串
$ _, J0 s  {  B7 ^( q&gt; array1.join() // 什么不都写默认使用逗号分隔) R7 l; I  k) j. m! {' c1 H9 j
'c,b,a,3,2,1'" b2 k, v8 b' C7 E& h$ ^3 k
&gt; array1.join('')1 Z6 h. i/ A- m; X5 f, E
'cba321'. y' J! P7 L$ ?. z6 G+ X% G
&gt; array1.join('|'); c5 [8 n0 d5 ?$ a
'c|b|a|3|2|1'
  T4 T3 Z9 N$ z9 M4 \" b' o
  n$ F6 Y. S* T. J3 Z% ]// 连接数组& p$ `5 {  W  c, n% a- F
&gt; var array2 = ['A','B','C']2 W  w: B) W7 w  a
&gt; array1.concat(array2)
( T6 [' z0 p9 k(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
* l( |  ]8 Q/ B) u6 V( [0 K  F; h3 \5 ]
// 排序
4 j  e& N1 A8 w&gt; array1.sort()3 T0 n  \: l$ q9 D. Z0 g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
) N9 I+ V" Y- U0 o$ E# s) i
, e0 C1 N$ J$ m$ K" @! ~% h* I7 _// 删除元素,并可以向数据组中添加新元素(可选)
, k# N3 L6 F( H. A/ E  w6 B5 T&gt; array1.splice(3,3)  // 删除元素* P1 F5 S9 J" J* v) j/ _$ [7 Z
(3)&nbsp;['a', 'b', 'c']
# z' Y* e# J$ Q9 L, O2 {0 R&gt; array1; {. F# y$ {- o$ E. p# d. y
(3)&nbsp;[1, 2, 3]
( {, P( y+ c: P, }6 d/ l&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素7 |* @) H' f- P3 d* W8 A, X
[]
/ E2 \. f9 q4 |+ U&gt; array1! i% ^5 q( k# w7 T  Q6 c
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']4 j0 O! t. Y/ J+ t) }* q

0 O5 c& J) k# z/*
6 m: F% R' o' Z* V. t1 tsplice(index,howmany,item1,.....,itemX)- ~8 W8 c0 Q4 w( c
index:必需,必须是数字。规定从何处添加/删除元素。# Q) H1 F# e6 z' i
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。+ Z1 _- f9 \8 m4 R6 E& A. e0 q
item1, ..., itemX        可选。要添加到数组的新元素
, N8 M" X& y/ M( J- y$ z7 q*/
7 E" k' |2 x4 m' T( b( R. B' ^; W: n+ b4 s  B6 t
// forEach()        将数组的每个元素传递给回调函数/ ^( x* j. |, n. }+ ?% O) M$ G9 x
&gt; array1.forEach(function test(n){console.log(n)})
0 @% c4 o( d$ v5 d! |0 y- L/ ]  @ 1( l% m8 M4 N/ F7 Y# Q; O
2
+ h& A  W1 I9 |: Y 3& G; R# X4 X# g+ P7 |  {
A
( h& A( F. o6 o( p" s4 J9 S- f; w4 Y B
8 r* [# q" R( G6 I& k( A# s9 g C# ]- V8 O5 `/ o- x3 U  k- w/ X$ I8 q
// 返回一个数组元素调用函数处理后的值的新数组) ~! J' M$ @. t# x1 W$ U  D
&gt; array1.map(function(value){return value +1})
" E2 I; ^) n1 S4 }5 }(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
- {+ n+ O; l( q# b</code></pre>
& T# I( N& k, Y<h3 id="24-运算符">2.4 运算符</h3>! }9 i, g. M) M/ H: Y- S
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
6 A( |; w/ Q2 C1 [& v<p><code>+ - * / % ++ --</code></p>
* Z# W& i. t' p<pre><code class="language-javascript">&gt; var a = 6& g# H) e; x& k! z
&gt; var b = 3. A. b" X/ B7 ~% q% ]+ c
// 加
/ [4 z4 l' K0 Q/ |+ v" q&gt; a + b% r, v; V# l3 A% a  u( x- w6 m# [
9
1 D3 @0 Z7 J% p( |% M/ V6 l// 减
0 T, k) e0 b9 U&gt; a - b: i0 y% X- M! x" Z; U" D
3" @$ e! B, Q3 K1 G
// 乘  O/ [) I. z1 h! ]  \& Q
&gt; a * b
* c" E5 d/ D/ s* I% s2 q2 ?183 ?6 S2 t0 R: Y! w3 U( F$ {* c
// 除
+ f6 P" N' O& ?&gt; a / b
$ x& x5 K. ?8 h6 x! m& \2
' l6 U0 g* J0 X; Z// 取模(取余)
. c) q, y: O0 i" W$ p&gt; a % b$ d. R0 I& ]- V' Y9 c% L
01 f" s' }& S8 ~5 _* x* `
// 自增1(先赋值再增1)' h, E# J: w: i3 v8 h
&gt; a++
5 X4 F+ H& C+ k: Y2 L63 x/ s& y& n% o: G2 a
&gt; a+ Y1 s" C+ J3 r. v! k) o( S; }! L
7
$ O4 x2 S4 i  F5 g  Z3 F/ }7 L// 自减1(先赋值再减1)# M3 i* W8 [8 ~" G/ N
&gt; a--; _: ^! Y, s: i7 L: u
77 D# s5 I" F/ V9 A4 T1 j
&gt; a
! L+ r0 ?7 w9 W* K1 z4 y/ d61 N: t8 m6 ]. E
// 自增1(先增1再赋值)
  s" f5 }6 q9 X; X! C&gt; ++a3 ~2 ^$ b8 b* V- G5 ]6 ]
7! H) L, }0 {: b/ B+ M- h
// 自减1(先减1再赋值)/ ^$ {( I# H; k9 z. w- W/ U' k
&gt; --a, w6 W, I0 v. K6 _- v9 V
6
) g+ W! f6 B- s5 _; x&gt; a+ Z7 A: M! s% S5 j) m+ @* {% n
6
: n. V. z8 J+ n) b9 w. b' c6 q9 H4 l$ P9 J4 K3 W1 c, M$ B
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理; _$ {" A: X8 F9 P- `; e" f
</code></pre>7 `9 v; O5 y" M
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
" Z  x* A0 |% N" o0 @% o( l5 X<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ L/ [  t% s! j) i1 Y
<pre><code class="language-javascript">// 大于
/ w) z* p% V( Y' b' B, a8 U&gt; a &gt; b
0 e2 g% P5 g2 W" C) _true1 ^* n7 z) L6 |  q7 \5 p  \) }
// 大于等于
' w* l9 ]6 G  B" Q* s; B. {&gt; a &gt;= b
/ q# p- H4 o) M( g  ]& utrue$ k  h9 n0 i* O8 E/ g; {6 ~# V, [
// 小于
. y/ a; U. `% W&gt; a &lt; b
5 S* K, ^' \& k- e8 F: b; Sfalse
1 E) P7 I5 c, n// 小于等于
0 ?9 ]# f( W) [6 }( K! D$ T" ^&gt; a &lt;= b
; L0 Y) ]5 W3 N- ufalse
# w. ^, z/ Y+ \& n# P& b' \// 弱不等于
2 R( _# J$ {" R3 ~" Z&gt; a != b: }  P9 W* V4 w4 H+ v
true
0 x7 b1 R: |- d4 O* t! B1 B// 弱等于# u* o/ ^, ^4 [3 ^$ K, m
&gt; 1 == '1'" ?) ^/ ]1 n. R! ?( @
true
) z1 y8 v* v/ ~# @// 强等于
: k- c# \, ^2 j+ N6 L&gt; 1 === '1'# T; ~7 G7 _" U0 A9 Y; x
false
$ n' f6 h: J2 Z) c4 w' l! n// 强不等于1 N9 g0 U: ?& P: E9 `! x  q
&gt; 1 !== '1'5 K. H6 _8 l# h% c2 l0 D
true
3 u. T' y  y) n* j& o6 D* G% J% R% n/ V* b
/*
; {, q& a/ D$ F- x0 _3 C1 W  YJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误: I5 c  M7 n" z# r( B8 ^8 p
*/7 i) S$ Z/ ?) K) \# v
</code></pre>
; X# a/ j5 v) {; D: {0 b# R<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>1 T$ A* W' Z& r; a' E
<p><code>&amp;&amp; || !</code></p>
* }7 x/ k! I6 G$ a' Z<pre><code class="language-javascript">&amp;&amp; 与
! c# K  j8 `  \  ?|| or
2 S) K$ F4 a+ E. F$ C- E# j7 _! 非
& A% \6 F+ ^( g9 J</code></pre>
& A+ Q# C* x' n6 P$ j/ k4 x- n<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>1 v5 B+ Z" j. v5 i3 v! f+ \6 @& r
<p><code>= += -= *= /=</code></p>0 R) G8 [) k6 ?9 h9 x" A( r8 N
<pre><code class="language-javascript">// 赋值* u' z4 u/ y) i0 z8 I
&gt; var x = 3
" Y/ B8 J; m  U  q# L, O' ?// 加等于: f8 D' }% s& |7 b
&gt; x += 22 s! B. m  L: R. t9 s4 ]; T4 p1 j5 j4 V1 \
5' n- V9 w) _; M! Q5 P( Q# t5 f9 x
// 减等于
7 ]  X+ N- ~5 n. w$ j, K: i2 `&gt; x -= 1
. o- W# }' r* u47 a! M4 {4 O: X
// 乘等于
! T0 a) n! y$ e! s: ~; u&gt; x *= 2, c1 e1 \2 ~5 W, \  C
8
1 ]7 J+ l5 V& ^* M0 @6 J// 除等于2 i( e6 H6 h: _- S! b, v
&gt; x /= 2
+ O: o' L* o7 N( J$ c. {48 \' F1 y) r9 Q& P; U* @) v
</code></pre>
, X0 p. B+ F/ t7 F) s' H% I) d<h3 id="25-流程控制">2.5 流程控制</h3>
- o, q$ l" E2 i8 y<h4 id="251-if">2.5.1 if</h4>' n  K; E- X( l
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}" g6 w) o. g+ o5 ~: ~# |

  T; W  N( A( D0 G. S" i# e&gt; var x = 3
/ V* L  M5 p3 M3 D# ~&gt; if (x &gt; 2){console.log("OK")}: {# q+ k: @' C0 J3 Y
OK% ]" P. L. w+ Z: ~" e7 N3 z
$ b) b: m5 i* |! k+ z8 E! h, f
2, if(条件){条件成立执行代码}
: T8 U6 T* J# _5 B, i* g6 k        else{条件不成立执行代码}
1 t/ W1 p: s' h
' H6 R  K5 l2 O. }. H0 n8 z&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
) s" f3 ^) V3 M: {) g- R" A'NO'1 h0 M( A3 ?, H
# V6 W2 w5 k: |
3, if(条件1){条件1成立执行代码}
3 O% p$ b& Z$ \; a        else if(条件2){条件2成立执行代码}4 u% v; k# q: j6 H. o' ~8 R( Y/ t: z
    else{上面条件都不成立执行代码}8 u: Q+ H0 V6 T* w  E. A; Y8 X+ g

$ V6 }+ w- g. _% {; |&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
5 ~& p& z# e+ J4 k& T: d Ha9 D: W$ N  w" _
</code></pre>
0 F- _2 X. K  m, V9 u<h4 id="252-switch">2.5.2 switch</h4>4 \8 U. G2 W3 [- b
<pre><code class="language-javascript">var day = new Date().getDay();
( w: [$ d! \8 l6 K) z# c) Yswitch (day) {: e1 @' V8 w' Z& i
  case 0:
: d8 M& h. _$ n- W: l: Y+ h# a# W  console.log("Sunday");
- g- H3 B8 M5 ]' a  break;
8 ?" |+ |+ i: B& \7 B- J  case 1:
  n' r, z! w+ _6 q: ~2 A  console.log("Monday");5 J8 J# Y0 `$ S% `
  break;3 ], x* y- }( D$ E6 Q8 W* u6 K
default:- y2 R) T1 Z3 q
  console.log("不在范围")
: O: b, }2 u$ k& P, l8 A}
- n) [1 c8 T! v( }! Q; o' P$ d 不在范围$ Z" B6 \$ Q, y! V4 t( C2 y
</code></pre>
) q* e! W8 m) p  }# O; _- T<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>" X4 ^' K9 V7 T: O9 N  A8 z
<h4 id="253-for">2.5.3 for</h4>
+ \3 F% k# \- f. }! @; C1 D<pre><code class="language-python">// for 循环8 ~( G9 B% v  d3 [7 p
        for(起始值;循环条件;每次循环后执行的操作){7 @) i& D+ Z( k' }5 a7 H, ~* T
        for循环体代码
' S$ |" C  Y. |3 h# j' |& j    }. N/ X4 ^' ~0 a" Z* [* b, F. _# u
% L! e% {( G* s" D
for (var i = 0; i&lt;10; i++){, R% f0 f! ~. f: x
    console.log(i)
$ Y) y2 k/ D$ V) Y7 M0 ]5 f}# k7 `. b5 v: j" e" q+ p* N
        0
  N" h0 \. }# d) Y6 c        1
. J: \. X# |0 w        2
2 H- o0 P; h3 i  l        3
! m9 r8 o4 ?8 ?1 w# r& ?        4% O5 Q2 L9 K% o7 x& E" X6 Y* a% O! Q1 F
        5& E' G. e) I/ m/ ]
        6: L" d  |* ?5 N8 ^, a
        7
9 p; e" w7 O" \' L8 I# v        8
9 K) i. z3 o3 K! k6 m" R& f        9
, R* N+ n# F, m5 _& D</code></pre>
" M4 Q% m' ~0 K# F2 b8 w<h4 id="254-while">2.5.4 while</h4>
7 q4 B: G% N  J4 N% M9 X; F<pre><code class="language-javascript">// while 循环0 G" b( Q' K4 t2 A2 W
        while(循环条件){
% b/ e2 p8 |& C! W, z# _        循环体代码
: H& M3 z- b1 }) y, c( F    }& O2 W) c3 B( ~; }. l6 h8 F. N

/ T; f: g( q! @, t- E0 \&gt; var i = 05 r& x4 W" W0 Q. l) e$ A
&gt; while(i&lt;10){$ w; A; O0 A" A  T3 R1 R
    console.log(i)) w8 e1 K2 D0 T* H. _( X1 o
    i++
. }4 F5 N" ?& t& u7 L}% [* s- N/ U8 q* w' Y% l- K
0
4 F/ t6 p7 m- l 11 f3 x4 O1 e; x3 Q/ L
25 b: L7 S, n0 o* ~2 r5 p
3
% k; {7 A7 U* u5 q% r 4
8 t! A! U! v) X  u/ f 54 |$ M5 d% c! J7 g! [0 j, ~% l
6
! A- b" T( B! _5 k. H 7; v9 @- s6 e& g2 I, |. C
8
3 ~* T* {. w: J; s 9
" \, |3 k5 Y9 K! v9 E</code></pre>
. B' T% \3 Q! ]8 _<h4 id="255-break和continue">2.5.5 break和continue</h4>0 p+ v8 m! g3 Y7 @2 z! B. g0 u
<pre><code class="language-javascript">// break
$ M- F/ C$ t3 v9 f6 |for (var i = 0; i&lt;10; i++){
+ _2 }. M7 ]& G5 j% M    if (i == 5){break}/ h. j$ F0 t2 \5 O0 C
    console.log(i), Y6 l( N; i& `
}
7 Q+ S& Z/ B$ Z9 K% \# y4 T& S 0& {; c1 C8 b: y4 y! P6 l% H. J
1& B+ i. l1 U% _! n7 D
2
6 r) Y3 x) k" i* z, @& t$ Q 31 m0 i( o& D2 t! K: ?
4+ n, T6 Q+ Q7 X' I1 j
// continue4 k( a2 o9 d7 g* C% ~% I3 i8 ?- S+ _
for (var i = 0; i&lt;10; i++){  v1 t+ n* R7 M
    if (i == 5){continue}
( h( p, n7 U  V! t, z1 _    console.log(i)
' [$ ]4 P' ]7 N* S! @9 _4 W}- a7 n  b7 T- W
08 W- J+ Z$ w- U" s. f+ q
1
& j! N4 X2 Z( N: q& s$ \ 23 K5 S* d! ~7 e5 B
3, T1 G0 i. M7 k1 K7 n, E
4
' y3 ]: _1 n1 r' x( `8 N 6
: Z! B+ n- U  k0 ] 7; E1 A, P. o+ ^6 j2 D7 l+ j* F$ [+ ?
85 M' \4 S8 i$ y
9, W$ z7 o& E3 W" V- {% a2 Y
8 u. y0 \: z2 L! c: p
</code></pre>
; I. T" T; H) ~  d6 E" R; K/ c<h3 id="26-三元运算">2.6 三元运算</h3>3 h9 O( Z# m6 b2 J& S, J
<pre><code class="language-javascript">&gt; a) b9 a1 x6 b) f" M
6. _5 R5 J* |& \) E+ q+ a+ U
&gt; b
$ L# @6 M1 e8 `) W" K7 _0 G3
: w- j' L% x' K1 Y4 S. I0 Z
/ ?# u% M- I9 i//条件成立c为a的值,不成立c为b的值
8 j6 }" p- @; Q  [/ S5 C&gt; var c = a &gt; b ? a : b
6 x7 y8 V* Q1 Z1 m. |&gt; c
7 u# o, C4 Q/ p% M  ^/ |7 o6) ^9 V0 N5 H: [/ `+ G: P
* \: h% c9 u! m. ?
// 三元运算可以嵌套  A9 \2 J" o- D2 _9 J6 e
</code></pre>4 H6 b2 |9 T; {# a
<h3 id="27-函数">2.7 函数</h3>
$ a/ m& y! r" O* x<pre><code class="language-javascript">1. 普通函数
3 ?& K- G! [& X! e% U& X&gt; function foo1(){, Y# @% @5 P/ x
    console.log("Hi")
9 `* k) J& M, X8 X: q}
7 u; T4 s9 w+ u; ~' `% O
1 q/ v2 Z' G9 ?' r&gt; foo1()
! D& b! B/ N% e' e9 u/ Y9 q0 o3 v        Hi2 T$ C  ~  _* ?6 D8 H# j/ V8 `
2. 带参数函数% d0 U, Y- ~( I
&gt; function foo1(name){, d, j$ {' C8 ~4 g4 f
console.log("Hi",name)9 u& d* m8 h2 j; ~: Y0 v, O; X
}
3 a7 `& X2 ?, \* ^; m  V9 w6 F( ^: p$ j3 |) q2 w+ {
&gt; foo1("Hans")& |" J7 i; n5 D- ]
Hi Hans& i: X& W$ r1 h' X/ z! k" k9 a2 L* N

! R" n; n2 F& D& W) b, l&gt; var name = "Hello"
2 p; w# v* j# ?0 q" C&gt; foo1(name)
, ?8 A: F: i0 N: B  WHi Hello
( C' |1 D4 X8 v) c7 T$ U& t: q  `8 o0 c0 O
3. 带返回值函数0 G1 X8 c# i2 _9 W$ x
&gt; function foo1(a,b){
& a  {- G9 P! ^3 m: h2 c6 i        return a + b   
# b$ H3 G; \' ?( f- U5 f' q* \}% l- D4 G! h- b' T3 _& Q& i. x
&gt; foo1(1,2)& l5 P2 S& Y" n6 e
3
( H* a, q7 D( ]&gt; var a = foo1(10,20)  //接受函数返回值( n! U1 f9 P' f1 U: S/ Y1 S) x
&gt; a: \& r! i6 a+ T/ w* h. q
30
* ]1 K/ [3 X& Z, m; A7 D. j: a1 B" ?8 S+ `
4. 匿名函数1 h- q5 q- s! ~) f/ P: a
&gt; var sum = function(a, b){/ j5 g7 s& W. _6 f
  return a + b;
0 c0 L" Y9 ~4 N3 ]# y! C# _}5 x! W5 @9 |  r+ d5 L
&gt; sum(1,2): ~( t. _/ h5 ]- O7 B/ r
3: G' C% {7 H- B6 B3 v7 H0 ~" M4 A
9 ^( U  h. E! l; W$ A5 F( N
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱' s6 l# z5 L+ b4 S+ Y  g8 y4 z+ W
&gt; (function(a, b){5 U3 a  d+ @6 T* M
  return a + b6 ?+ r, O4 h8 I. s  _
})(10, 20)' v, i! u: |+ F3 {* J5 R
30
( |  s) [6 N' q& Y' s9 V/ J
  @( N/ c' I* P) f5. 闭包函数
) v9 o2 J3 V' g6 H// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数, p6 d0 c& b$ `! F% Y
var city = "BJ"
+ R- V- [0 s  W, i% `* Wfunction f(){4 a5 ^& G! `2 V6 R
    var city = "SH"- Q1 c3 ^4 A6 {; D
    function inner(){; y( e; E- |* [7 ?( t: R
        console.log(city)% u3 W& T* R8 G9 L, d/ x9 P
    }
& k& S# b- w2 E0 ~    return inner
* h9 |8 ?; s0 b5 g- w. C  ^}
; q; L5 l: D8 T( C8 A; F1 Uvar ret = f()( M0 |$ y! b3 z. k( ~" t& P* e' G" }
ret()
! g& ~& V3 l3 o4 r5 P! v执行结果:
6 C- T0 |6 P$ @' e- B' [SH
* i( U& L4 n7 y9 k% c" M' I6 P# O
: w2 R* e3 f! W3 g1 m  R" f</code></pre>
. l1 y1 I/ l( o- P; {<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
* z7 M# B% x# H. Z. S6 X" i, \<pre><code class="language-javascript">var f = v =&gt; v;
& A  J& R9 E7 X" T; x$ |* y- c// 等同于
7 {% [1 O& ?5 x% i/ Z! G) tvar f = function(v){
: w- W7 U5 M* m* P, p2 a8 |  return v;
3 c( S" Q% I7 o/ I& {1 D! d6 e. c}6 |0 ]# u$ t: S( E; B
</code></pre>( ]& {! \) m/ @
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ f* u+ N$ o! U- F& b. l, u0 V
<pre><code class="language-javascript">function foo1(a,b){
  x+ @& r+ Y! D# s( h  p, j4 B    console.log(arguments.length)  //参数的个数 4 X+ @6 _- h, T& m& ?9 B0 Q/ l
    console.log(arguments[0]) // 第一个参数的值
; Z7 m0 A# Q# h2 L3 b5 w6 W        return a + b   5 \  U# `+ c: B8 M$ Q
}5 v! ^9 d/ I) E( Y! A% ^
foo1(10,20)
6 i& Z" U# `4 N, h# ]9 _结果:
+ U1 h  f! L$ @/ j0 d9 L. W 2          //参数的个数
3 {6 }, e* g5 s# I& D10        // 第一个参数的值
/ a  h! P, d9 O# l. x30        // 返回相加的结果  }! r$ q- n" r* A0 H/ U
</code></pre>
: m, V& {/ q2 {' f+ |# E* H; |, N<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
3 D7 A2 |4 g- p1 S<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>% Q; F  D7 U9 j/ _, r) y  \3 [
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
& N+ G1 @% _, g6 N& u* E& ^# g<h4 id="281-date对象">2.8.1 Date对象</h4>
5 `$ X" w* [# {1 |<pre><code class="language-javascript">&gt; var data_test = new Date()
# {1 S/ \; Q& {  ]&gt; data_test7 w& x/ t( Q: s% A! z  a
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)# j2 w7 b& Q" m- L8 {% Q& `, H( K8 n
&gt; data_test.toLocaleString()" Z$ g' V1 O" k- k
'2022/2/11 下午9:44:43'
+ ^: m) G0 W3 F  f+ \; p2 w. n: I4 z+ i
&gt; data_test.toLocaleDateString()
4 k* f/ n1 I2 g. t+ Y'2022/2/11'! F; V1 U) E& f# y* j
& m1 r+ w2 |5 L# e+ P
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
% m8 @4 X  k) T9 w" S% W&gt; data_test2.toLocaleString()4 u6 G9 i0 F4 a& U  m6 M! J7 o
'2022/2/11 上午9:44:43'
; ^2 x* r& D. H! D! e' T* u& x/ p2 I6 I0 {
// 获取当前几号1 c0 P3 b' r8 R% T/ ~8 V: L& O) W& Q
&gt; data_test.getDate()
2 t5 C$ j+ X. \  F, ?1 c3 l11
; e" S0 q) ]: U+ K& T) C1 `# n: t// 获取星期几,数字表示7 P/ [  q8 O% l* X, n, V" d* J
&gt; data_test.getDay()  
$ ?. s2 b* i* u8 S: o! T( x5
" ]9 G% U1 T1 y3 ?+ h0 n0 D, o// 获取月份(0-11)7 ?8 a( \% v3 V7 |4 q% y; e
&gt; data_test.getMonth()
; @+ _+ h, |! p! o7 l$ P1
& C- G4 ]$ y4 v// 获取完整年份+ t+ ]+ G) ?3 s$ c- [
&gt; data_test.getFullYear()6 e( a- `6 q+ p. D
20226 s( m" |0 b8 J+ Q
// 获取时
- x6 C: s: I( B8 `) D6 T% z/ B2 y' ~&gt; data_test.getHours()" P- ~- M. M( F) g7 ?" ?* Y
21
3 o: V% t5 Y4 E+ b// 获取分
* X- M; B& x9 I! ^&gt; data_test.getMinutes()" A% W# O# C  U, L6 J
44
0 R% f1 }+ w" q! [1 o- q, C// 获取秒/ W) ?6 P$ N0 {# e
&gt; data_test.getSeconds()
  G; [+ }1 K0 T43: _1 {- ~" T; t+ D
// 获取毫秒+ F9 q2 Y' q( @2 K$ B$ d) ^
&gt; data_test.getMilliseconds()
. H& _/ g  W6 a, _) D2 Y6 B# m290& r4 g, Z- X6 N. ^7 m% c5 e- b
// 获取时间戳7 @0 [8 C5 T7 \* {; _6 G
&gt; data_test.getTime()4 }, u. d$ T& q/ `+ z" I
16445870832900 y1 r2 p7 H- c( X3 F+ s
</code></pre>* {2 R- J0 v+ y: M! _
<h4 id="282-json对象">2.8.2 Json对象</h4>: |7 [1 ]) i1 Z6 ~, g
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
! \' x% W  @% |3 ~; C, J7 sJSON.parse()  // 反序列化,把JSON字符串转换成对象# A' ?* E0 ?. N

9 `: @8 C! W& q3 \3 M// 序列化* y* K2 A. V$ D* u& B
&gt; var jstojson = JSON.stringify(person)
: G/ w6 L# D0 b$ {6 S, Y&gt; jstojson  
4 a8 I7 L) F2 H/ j" u1 E3 l'{"Name":"Hans","Age":18}'( \+ {& q# [2 ~5 z$ K

# x+ N. E4 q+ z4 \* G// 反序列化. v. Z4 l9 ^0 o' l# R  |6 [1 I. m4 }- }
&gt; var x = JSON.parse(jstojson)
0 G/ b! T& C- l7 S  }+ F&gt; x$ Z: @. L) X1 _3 Y" E
{Name: 'Hans', Age: 18}
  o( t/ a- \5 L8 e' q5 l+ e4 s&gt; x.Age7 d* L; J- i  b, G) F+ g
18. n3 V/ y. y& F7 ~$ e
</code></pre>
$ i8 x  {! _2 {4 I; ?<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>2 p. L# q( M8 _. ], S
<p>正则</p>4 D- W! t) `" ]6 G1 L5 m2 a: c
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
( J. {/ v. U1 ?&gt; reg1
! R. E2 n7 _3 s8 F7 n9 n/^[a-zA-Z][a-zA-Z0-9]{4,7}/# Q; V8 Y6 e  Z3 C
&gt; reg1.test("Hans666")1 O6 L7 b/ x7 N# |
true
' Z& s5 B" J. D& j0 R4 _8 F7 B7 _# l5 J
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
8 M6 b1 i* [+ Y0 N( c4 x&gt; reg2
& N5 w. p4 A# `# X% ~6 D* z/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ H4 q+ e3 E/ f
&gt; reg2.test('Hasdfa')1 |5 S* ^* W" n( m+ T+ P. k% Z
true& Z. y, K" A: o- }  f$ d

" D7 ^( {$ o9 i! Q1 w全局匹配:; Z+ b; O6 ~6 {* p
&gt; name; l& O4 _! D; I! s. X4 ^2 h
'Hello'6 v. B' x0 I) R
&gt; name.match(/l/). V1 U2 `7 w; v" u3 t$ u! F
['l', index: 2, input: 'Hello', groups: undefined]
+ V! ^. J3 F( j/ i; b9 n( r9 g/ B9 P* D, H3 Q1 b
&gt; name.match(/l/g): |8 W7 @. a8 x. z6 I& M  G
(2)&nbsp;['l', 'l']& J, i* N  G3 D. J% L# y, ]
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
9 T5 B% L# W5 _2 H
# c; h+ i; C. {" s1 E全局匹配注意事项:# \5 [/ t1 M: Q  j* a! b2 \
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
: n8 V+ X; K* _; J5 e&gt; reg2.test('Hasdfa')
) v1 E& u& {( E8 X% d" r  Mtrue7 B" s) ^1 L6 F4 q7 E5 j% x
&gt;reg2.lastIndex;7 q4 k1 d& ?  m4 b
62 _% E# @4 J% |# q
&gt; reg2.test('Hasdfa')' L. Y. h5 q' U; ~6 m& n4 m& ?
false
* J0 D4 B% n$ o$ b% a( \, ]&gt; reg2.lastIndex;
6 F$ C$ G; v7 t2 L& R, i0$ W6 _+ t! J1 _
&gt; reg2.test('Hasdfa')
  V' `/ \3 p( p/ ]4 h, U% Q; ltrue
! Q4 D1 o  w8 c, ?; E& [# E* H&gt; reg2.lastIndex;
1 [# N/ E* {- G; H5 ^+ l: Q% O3 p6$ M& Z6 \- I' I  r# z
&gt; reg2.test('Hasdfa')
$ Y7 T7 |+ @8 ~8 H& i/ N! wfalse, i; e% O& B- j
&gt; reg2.lastIndex;0 x: ^, p1 E3 k' O% p% X5 y" E
0
. Q! a9 o% o3 S# ?. U6 L8 D// 全局匹配会有一个lastindex属性  ~8 @6 S' y! K
&gt; reg2.test()3 B3 w9 c5 ]& v5 n6 Y
false
0 O- b; ^4 `; Q: V&gt; reg2.test()& G9 r6 I& L" t. r" Q
true% I' e2 w, ~, [6 o; x! n
// 校验时不传参数默认传的是undefined1 C$ X$ @* G, w% N6 R4 @! G
</code></pre>0 d; x3 T7 E; D. ?) ]* E4 z
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>- O# e/ x* \. W/ ^0 x
<p>就相当于是<code>python</code>中的字典</p>
4 K2 r2 o/ F9 I# Y3 K<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
# n! L# _. \& M  y- r&gt; person4 W% l; R0 S7 s; h
{Name: 'Hans', Age: 18}- v! |: Q" e3 `& E8 C
&gt; person.Name
& z3 D; ]& z4 j6 U8 B'Hans'5 A: j& y. u; a+ [1 B4 ?
&gt; person["Name"]! C5 `4 D* \: k1 {* |" x- Q) F
'Hans'
4 K* E# p8 p5 C, y/ R* c1 A/ Q: Y. e$ e9 X. E
// 也可以使用new Object创建
9 E; W# o& j. B7 }1 g3 G% H1 Q&gt; var person2 = new Object()7 b+ z; y; j0 U& g3 C- A
&gt; person2.name = "Hello"
2 E7 Y! W# M$ V. e: a'Hello'8 j! O3 [2 M5 c& x  N8 A
&gt; person2.age = 20
/ k' |$ s) n) r5 ~7 Z' [8 `# _20
! c, A9 @8 z3 \- J( X! o</code></pre>/ i0 B+ D3 ^# N& W
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>4 i2 Y, A' s+ Q& C, ~
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
( u3 J! R* i6 h0 o  z5 |  k* m<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p># y1 T. k. F7 T4 {
<h3 id="31-window-对象">3.1 window 对象</h3>
* x0 C  b+ X$ b; e' z" U- f, M8 I<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>; E( d# S4 w  l* [) Z
<pre><code class="language-python">//览器窗口的内部高度$ g  ^" h; H, L/ }5 e: w- U1 B
window.innerHeight
4 o& G! s9 |. K; |% T7061 @( s9 f0 v6 J( n6 v
//浏览器窗口的内部宽度% d3 D# U5 n8 _! R
window.innerWidth+ q  e9 Q3 i* H: F" J1 V# }6 C
15227 Z9 B# |. X6 A4 N# Y/ E2 h3 \
// 打开新窗口( W5 W1 w1 c2 S# q+ X
window.open('https://www.baidu.com')
# ^) \* U; d! H+ ^8 I3 WWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
2 b0 d  e4 a+ W  _// 关闭当前窗口
- U: h3 n( J# A3 t2 g4 s; awindow.close()
( F" S: `2 j1 D//  后退一页
  j9 H3 d  Y" A7 p) j, S" hwindow.history.back()
8 S: s7 R% B- l// 前进一页
6 i. V* B2 G4 D% }9 z* k* fwindow.history.forward() $ e# {# X3 j# f2 O; x
//Web浏览器全称
. _) X( V: j0 l4 X; N5 L4 D6 awindow.navigator.appName
7 y& _7 A: L8 h$ p'Netscape'6 y2 E# B) Z& E7 N7 v  r* Q1 y
// Web浏览器厂商和版本的详细字符串# @$ e- v0 E  p# y4 h
window.navigator.appVersion
( H' L/ x" x" u* b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 i* S! m1 [7 K1 I2 a
// 客户端绝大部分信息
& E6 X. r3 e3 cwindow.navigator.userAgent
$ A' F( I8 ^$ ]+ x'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& |8 x% \6 D' z
// 浏览器运行所在的操作系统* m& F( ]( p, s2 x
window.navigator.platform
! B" i5 n8 H& P* h3 K'Win32'
+ O  W7 H+ p" L
% h. d8 L, @3 Z6 ^9 Z' u//  获取URL
- O. L+ @4 n2 j& H! l! k4 A  \window.location.href3 d; F+ [2 W# X* S' i
// 跳转到指定页面
0 x8 [8 R& ]7 |% U* C" Kwindow.location.href='https://www.baidu.com'2 y# U8 L  I: c* z) d0 Q, o
// 重新加载页面
4 X1 v2 v$ X0 {! Fwindow.location.reload()
! |. d7 \* ~$ \  W# V$ B</code></pre>
, o, F% a4 \, |& f/ L. F. k# K4 R<h3 id="32-弹出框">3.2 弹出框</h3>
/ h- ^4 j$ Z# W4 ?/ x# I/ P: Y<p>三种消息框:警告框、确认框、提示框。</p>; L4 B4 K# e6 F: x  b
<h4 id="321-警告框">3.2.1 警告框</h4>; F0 |, l/ y8 x7 b" K
<pre><code class="language-javascript">alert("Hello")3 W1 b. \! r! L: k4 j3 y3 p) @
</code></pre>7 X! |. {6 \+ p( l! L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
2 @5 H3 ?. c- H# D<h4 id="322-确认框">3.2.2 确认框</h4>) x. L4 \  q  P( o) l5 q
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>4 E8 d3 m! w% p: j
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true; g: F$ [- T) ]1 t2 ~% ^  r
true
' L9 k$ _2 v, _4 S" F- c4 }, j&gt; confirm("你确定吗?")  // 点取消返回false1 J' u8 f' ~6 _
false- d& d6 `: ^$ x1 T" q3 u7 W
</code></pre>
9 p" S" S* p  t. Y- W5 ?( Y6 n<h4 id="323-提示框">3.2.3 提示框</h4>* ^) @7 S2 ~. j
<p><code>prompt("请输入","提示")</code></p>( Q3 y& l8 }" k( P1 M0 Y3 \
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>8 @0 N- }' H* V1 F% x0 s1 `- J
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
# R7 U# B3 D) O! u1 i. t/ ?<p>如果直接点<code>取消</code>后端收到<code>null</code></p># W* f' [7 v- V! y* n; G0 {) I
<h3 id="33-计时相关">3.3 计时相关</h3>
+ {# m0 g1 ]% _8 G* A<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>3 X+ |5 Z+ d1 a9 o3 A1 b0 P7 O
<pre><code class="language-javascript">// 等于3秒钟弹窗# p9 c% J5 \. ?7 _  p
setTimeout(function(){alert("Hello")}, 3000)
* N1 d5 q( A4 Z+ a3 U
& n' P! Y8 U: N( n7 Y% Gvar t = setTimeout(function(){alert("Hello")}, 3000)" I* i! R, p! d/ D/ y1 c+ ]
8 Z8 @; Q. z' k5 v: H
// 取消setTimeout设置
4 J5 L: d5 }) E. O. cclearTimeout(t)
9 b% e( W" v3 M8 y</code></pre>2 L! ?: p7 |2 c: O6 D$ O
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>/ R! M" k7 ~2 ~& t, a  W
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
" p7 `3 A6 }8 t$ u" t<pre><code class="language-javascript">每三秒弹出 "hello" :( X, `" f9 F7 _+ X
setInterval(function(){alert("Hello")},3000);4 Z& X: l, B! q
</code></pre>0 X+ k6 F1 d8 n: A) v  p4 G
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>, Z# @6 a. ?- b- F3 r4 G" ~* `* }! v5 y
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
0 w7 N" a$ \( j! |+ j* `9 H& d//取消:* |" D* R" b% Q& T2 i, A4 B1 z
clearInterval(t)
4 z3 T$ E$ G# m: O1 a</code></pre>2 Z: o3 r+ G9 R6 o( e% q; d/ D9 w
, s7 K0 c$ A7 t  ^; p* [
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-22 07:55 , Processed in 0.070159 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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