飞雪团队

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

前端之JavaScript

[复制链接]

8034

主题

8122

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( M) @0 I" d! b' ?/ `<h1 id="前端之javascript">前端之JavaScript</h1>
! l3 h3 w8 U  [) u/ W0 [9 w0 f<p></p><p></p>
1 ~4 T% Z  p$ v1 ~) I1 c<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>+ V/ C9 |' Q( r  c, ?1 L, Y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
$ e5 l5 l; F9 H8 U: I7 k它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
9 t* A$ T) h# D; F它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
' b! P* ]0 _* @" N( G; W+ Z+ a' z它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>- F5 I! k7 q1 J* G
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>" C$ {& A6 d9 j/ P
<h3 id="21-注释">2.1 注释</h3>
$ F( i. s! _! Q5 r+ o+ A<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
& a8 p$ _0 p$ r8 N1 D4 ^<pre><code class="language-javascript">// 这是单行注释! p5 H, j, a; @5 _0 H5 {+ ]9 b9 Y6 G* Z
* T1 s# k( }  U- ^+ \
/*
9 h) U+ e, R9 D) c! T! j2 ]这是多行注释的第一行,' o% c6 F5 H+ k9 ^9 z
这是第二行。2 v; _" s. `$ a& L. S! Q, J0 e- B
*/8 x8 W& {: A6 L; B
</code></pre>
) y2 J+ S2 D% x3 [<h3 id="22-变量和常量">2.2 变量和常量</h3># B- E4 p* w; t" J* x
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>/ H4 C/ N+ {; T) \4 s8 d
<ul>
* |/ c. o! ~) Q" C: y. H6 r<li>变量必须以字母开头</li>" y  I  f1 [0 s9 B
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. S6 v& R+ `0 G" r; u<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>8 z& v$ r( m3 _, A) a
</ul>
, }) t- v0 u9 Z5 E- l  H<p><code>var</code>定义的都为全局变量</p>8 ~/ T! j& u6 M3 }
<p><code>let</code>可以声明局部变量</p>
0 Q' z# z" d& }1 @* \<p><strong>声明变量:</strong></p>
1 ^4 @. h' i. x- V3 {! s( ?- z" H<pre><code class="language-javascript">// 定义单个变量& L$ a; V& X) f8 z  G3 B* e/ d. n( {! ?
&gt; var name
9 w3 p. Z& l( P, r$ M4 ~$ M) M/ a&gt; name = 'Hans'
6 k6 Z' F! R9 Z5 J' @! |//定义并赋值9 B( k& f6 I6 [: d) S
&gt; var name = 'Hans'
( `  t9 v4 W' P" i: ~$ @&gt; name5 R% e2 r. b) U# z/ P% P/ |1 F7 \
'Hans'
8 ^& d, s0 P' p; f# ^6 [6 w4 T7 B' L& Y/ E: B  r8 ^, v
// 定义多个变量
+ h9 ?- p8 O* ^/ z. W6 g& o&gt; var name = "Hans", age = 18
5 m! Z8 M( l/ V6 V&gt; name8 U3 J' h* {$ a! H/ C( d/ k
'Hans'
5 `! j4 V* L+ r& D/ P. C% W- W- ~&gt; age3 M! [: P) s% e& k6 t: o
18
- h  H( @2 E2 _1 m
7 S6 C- p2 |' G  q. y//多行使用反引号`` 类型python中的三引号( A# ]4 Y# ?8 n! G$ e. k: ?9 m; g, M
&gt; var text = `A young idler,$ d) [& |( |, r  t3 A5 U; `" l  n
an old beggar`
$ {: D6 V9 [! K8 i) H&gt; text: A  p5 e2 `, m: U! b6 Z2 `
'A young idler,\nan old beggar'
% }9 s7 |% d- k  m</code></pre>
1 X4 @$ Y3 E$ G. C<p><strong>声明常量:</strong></p>
) m+ ]1 z0 C. l7 z5 d<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 C5 {$ \1 b) T2 U
<pre><code class="language-javascript">&gt; const pi = 3.14
0 k3 D5 s0 \3 c5 i&gt; pi; E* l* M/ I) W' @' m
3.14
0 z- n1 \! P$ ?" ~&gt;  pi = 3.019 y- j6 f$ O: N* o  W7 F0 L* E
Uncaught TypeError: Assignment to constant variable.
& J* t, x1 E9 d- c# E+ s    at &lt;anonymous&gt;:1:4+ z7 V0 W- X1 k. {" L8 F+ J
9 A" ?: h( k* h* \
</code></pre>
, a4 ^6 w' ^$ b* x5 H0 X<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
  V8 z) @# }: n1 }1 e  O' A4 j<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>' i6 K; p, b! w' E! o/ i4 k
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
" k) G  z3 R3 h<h4 id="231-number类型">2.3.1 Number类型</h4>
+ K4 o9 A3 ?4 k1 j0 K+ `' M<pre><code class="language-javascript">&gt; var a = 5
) b+ d& R/ i& \" z$ a' `+ @+ u&gt; typeof a   //查看变量的类型  ) S. b3 i9 O. k4 j4 Y2 ^. J& w6 @
number% _  X8 U8 x& T& C

+ x' }5 {5 M* d8 d&gt; var b = 1.3
& e7 x- \. z7 B& m% Z& @1 D&gt; typeof b
+ u2 m$ w" n" m8 X( s% {! E. _number
7 R. i) ~, Y% V: P9 Y9 E7 E, I& G9 b% r# w
// 不管整型还是浮点型打开出来的结果都是number类型" J! d. v0 t. P, P4 {4 J9 {

; l# S8 P0 S; y0 i( l/*
: c5 v" B  G) n  E4 nNaN:Not A Number% h  V$ x( q) U+ J& t# o
NaN属于数值类型 表示的意思是 不是一个数字+ |" i( I) ?; O. ]" g3 a5 ~* Q( M
*/, d) C' ~* L" q8 |2 B$ U

) P& ]3 F* s" \9 IparseInt('2345')  // 转整型
6 G1 {/ E- d9 R' H/ `% U2345
! h; o; e" w3 FparseInt('2345.5')  a  D) ]5 b1 H9 h
2345
4 \3 ^0 v4 R( [# B! e# NparseFloat('2345.5') // 转浮点型
7 {# P5 C3 C: b' c- o2345.57 U; ~8 S5 p4 P  v
parseFloat('ABC')
9 }- B  O, c8 i( A5 q1 I- A' pNaN
6 U# c0 U/ _1 F4 |parseInt('abc')
* p& S% `% r  v* Y: CNaN
9 A( }3 u, E$ R: g0 e+ I* v& d" H. A</code></pre>
, [7 s8 G5 R2 f" k4 d- b<h4 id="232-string类型">2.3.2 String类型</h4>
3 K5 p7 c8 i. O! ]. s9 B- h# l<pre><code class="language-javascript">&gt; var name = 'Hans') w: x$ Y" L+ J# R1 E% F
&gt; typeof name
1 V$ ^2 k& i- i! [' R% T'string'
9 w+ l* r0 X+ W0 m
- @& B+ q2 c' V//常用方法' \  a3 t2 ]% k, |
// 变量值长度% Y6 ?, f$ f& T- n6 j7 L) W
&gt; name.length5 M5 t5 E1 h" R! f9 r9 \2 b2 @2 B+ d
4& K) W& q, N% K
// trim() 移除空白& Y/ \- R2 W; H8 ^! x( u
&gt; var a = '    ABC    '# ]* E6 Y( C8 V, i
&gt; a4 N  J; T" T* \
'    ABC    '
) _0 F& m( ~6 [/ G&gt; a.trim()$ U7 t/ x% b7 W- P5 i% S& L" `
'ABC'1 A# v: k# `& @% m6 J* `
//移除左边的空白
9 x. v: \# p) ]0 `0 V8 g&gt; a.trimLeft()/ C4 I7 X" {- @# e  G; \
'ABC    '* l* Q2 m* `$ X7 B  b
//移除右边的空白& k% g8 p; ~9 X8 _
&gt; a.trimRight()0 R+ L% _2 n( i
'    ABC'; g, R- @0 n, B3 a6 g8 I
6 v5 A5 w; }6 |$ }. m% k
//返回第n个字符,从0开始- ^3 g' w: \9 B! e1 Q+ H
&gt; name* }: d  d3 F3 c' d
'Hans'
1 j9 g. |6 s+ O" |- G&gt; name.charAt(3)# i' u9 J0 M! P2 t
's'3 a. a+ [" O3 p' g- G% G1 C
&gt; name.charAt()
, M3 N  b% x/ _8 |'H'9 ]# d. p. C6 C' N+ B' F
&gt; name.charAt(1)$ G8 `) k- f% T- i! }+ \
'a'
! j7 G% s; O; q: I! b9 M: X3 O
+ b' Y" c1 `/ l+ y) X% o& l// 在javascript中推荐使用加号(+)拼接
- w, |3 [* u$ \! e: |3 d&gt; name, U' [6 b0 V9 f7 b6 R5 k- p
'Hans'
8 H1 @4 n$ U  Y) ?1 @* P5 K) l&gt; a2 L- b8 x. I7 M
'    ABC    '
) t) `% `) q$ C3 z( w&gt; name + a
5 _3 q7 u; c+ W: U0 l5 \'Hans    ABC    '
: t; B' x5 G4 S. M// 使用concat拼接  ]) c' W  w" W& q4 x# L, I) f
&gt; name.concat(a)" V7 Y! i' i, r' I7 |$ z
'Hans    ABC    '
" ]! m. z: H; e3 u# m! h8 z, _
7 F( D% ^4 d  U+ ^; T0 Z: k" y( G//indexOf(substring, start)子序列位置
9 U) m! i  {* h4 C  {2 q/ l9 e9 {7 I  p/ j& L1 B
&gt; text
, k5 i  I: H+ M9 }  V+ G0 h. P8 x  v'A young idler,\nan old beggar'! `- ]5 x/ r3 W5 _5 Z; {5 U, s
&gt; text.indexOf('young',0)
) W5 p) |7 @4 Z" Q. C9 J28 ], D7 D+ z6 g* E$ I4 s
  I& ^" {+ x) C" h8 T8 J
//.substring(from, to)        根据索引获取子序列( E% o2 F5 W! a
&gt; text.substring(0,). _8 _2 A+ g  J& P) W9 [! C" `
'A young idler,\nan old beggar'6 q- ]( v2 N& o/ ^) x. S% @
&gt; text.substring(0,10)
4 S7 ]; ~+ \6 B, _/ A  z'A young id'
9 v/ u* J( c& _. i5 |6 f4 J4 ~3 Y  k2 }1 J
// .slice(start, end)        切片, 从0开始顾头不顾尾
, }( O- I1 S3 T/ R/ _&gt; name.slice(0,3): x" W  P$ k2 a! t8 X+ y" O
'Han'
! l, g2 v  h5 N$ K/ ~0 C! \: G$ C9 S" \& `4 ]7 L
// 转小写
: l( T& F' L1 R- S5 H5 h' c&gt; name- e: Q0 E( i* X
'Hans'  Y0 s4 l9 u" o; i. [+ R
&gt; name.toLowerCase()
! j3 x% g$ u* e' y5 w'hans'$ y7 n2 i/ V# ?1 S
// 转大写' a' R( {; H6 F* n9 W! a" n
&gt; name.toUpperCase()2 S/ J9 y" K; C+ ]# |
'HANS'1 ^8 @( e9 M+ v7 W
. @4 f  X! q, U7 y/ A
// 分隔
9 @" U/ `9 {' J" V" w&gt; name6 h& P& W- _0 B. b9 Y: h
'Hans'; N1 o/ w5 z8 Q" o0 @; G
&gt; name.split('a')7 z6 `( _; d( Y% z9 U# r/ a- ~- ]9 I
(2)&nbsp;['H', 'ns']
, X9 n" R  U, B# C2 v' b</code></pre>0 L+ x+ |8 l/ V4 r3 d/ I2 i
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>, M, Y; T% F& a* v4 V
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
' y8 A( G1 o* V& J: B# f1 W% A' M<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>0 S  O/ u4 p, h/ f
<p><strong>null和undefined</strong></p>
1 y) U. ^2 ?* F- E) S<ul>: [  d3 L8 a* [
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
# j' ]0 |; ~% q" J& h7 _<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
( P* c6 L( \4 v" O1 D: |</ul>
7 b* ]: d, K1 g: x# G, F- b: I<h4 id="234-array数组">2.3.4 Array数组</h4>
+ D/ ^" u; }6 D4 C* w4 \<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>0 |& T4 b4 z* e, H& r
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] $ D7 N/ q  H4 k+ t  G
&gt; array1
6 K0 b5 ^  x6 B+ h0 a4 J4 r(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
( j8 a+ D$ G# s; d7 n6 w" L$ a+ O) W&gt; console.log(array1[2])  //console.log打印类似python中的print
! R1 L8 S5 O, t! H3
; k1 n2 h3 n7 J// length元素个数
& ?+ r. n4 m8 o, _&gt; array1.length2 `6 T: a2 R1 d# n! X" X
6
* Y. ]- d) q. E+ C  P// 在尾部增加元素,类型append
) T1 z9 E1 m) ]8 s&gt; array1.push('D')% |, Z3 k' ^# G/ R( H! C0 Z6 Q7 ~
77 ~: Q) t) z: @' a% U& a; I
&gt; array1
5 B, p. f# N" i( o' |: Q# R5 }& L) q(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']2 o7 d% O) P  P: G6 Y+ T+ m6 v- z& a
// 在头部增加元素
9 C' ]. Q' i9 l, X4 Y&gt; array1.unshift(0)* `) w5 M" n! y0 z4 d! _' \% M
85 R4 R1 ?0 B( Q5 S4 U! x
&gt; array10 w0 h( s" T7 Y, r( @1 K* N
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']3 l4 S* T$ b! I: H

* J; E  q' m6 @8 y" f7 [4 ~0 u//取最后一个元素
# |( h3 \$ \1 }  P&gt; array1.pop()* r: H8 g  x2 P9 T
'D'1 ~: m& [  u; H3 D; O5 Y- @
&gt; array1
( D& @4 l9 h  ]! \& k4 D(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']1 x. z0 h& k- e' v
//取头部元素+ O/ v6 U% k4 X* B4 |
&gt; array1.shift()7 i) m- S0 d+ r, F5 ~  S
0
9 j8 h6 \2 Q. ]% L1 v&gt; array1# J2 _5 o1 i  D  [
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" m; a! [) u( F1 ~" `4 ^) z
  W+ r4 p. F. D4 b4 W4 q//切片, 从0开始顾头不顾尾2 W- w% m! \1 q+ {2 p+ P4 s2 G
&gt; array1.slice(3,6)
4 W9 {9 n. W$ Y2 o2 F(3)&nbsp;['a', 'b', 'c']
' g9 _1 Q( P: u; O// 反转/ L# F' m5 M6 ~3 v5 k+ a  B( \* @5 q
&gt; array1.reverse()
* ]& A# V; m4 P% @$ Z(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
3 a& G! b& q" }& w  H- t// 将数组元素连接成字符串
( t- t2 W4 p; {" f9 z- ~# `( V4 h&gt; array1.join() // 什么不都写默认使用逗号分隔. T9 \' O# i/ g  r2 v  r8 S" b
'c,b,a,3,2,1'
) @' s  e1 c/ @$ t&gt; array1.join(''): o/ |9 |9 H# u
'cba321'
: d5 H' [' _" n9 Q' l. o&gt; array1.join('|')8 r8 l0 {, E( [! P/ G2 a$ ~
'c|b|a|3|2|1'% a2 \/ d+ V% W9 C
. ]  y3 s9 _  Z& k( s
// 连接数组, k9 q9 u. L7 a  `& M+ S
&gt; var array2 = ['A','B','C']! P1 `0 `9 Q% N0 k" z8 I% r
&gt; array1.concat(array2)1 m6 M2 D  f& {
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']5 Y8 m' I5 v$ C# x2 y+ ~, {  l
4 Y) F6 L8 c6 x. y) B
// 排序
( g4 [- G& o1 m&gt; array1.sort()( ]" q* S) `. C5 R3 b1 `
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 m( r; b5 {, o" P) ]! _" s, {
" N7 g- a5 X. C2 g// 删除元素,并可以向数据组中添加新元素(可选)* G- b) P2 C" h# m4 b2 z% {% q) k* M3 |
&gt; array1.splice(3,3)  // 删除元素/ b7 K2 P6 W- M$ o) ?
(3)&nbsp;['a', 'b', 'c']5 P& m) U$ J0 c: j2 u
&gt; array1
2 a* A7 n0 o9 z- o" P(3)&nbsp;[1, 2, 3]! `& r9 C/ O; n4 {" U0 G# M
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素) x4 Y; g* [+ S6 j
[], F- B# M; L5 R
&gt; array1, \4 k& h3 t7 @
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
1 \/ u' K! U) F& c% O+ R# U' @& T7 m. M- U3 r5 \5 [7 k2 T  O( v1 O
/*8 Z6 b3 @: W* l: n  n9 W* D4 `5 h
splice(index,howmany,item1,.....,itemX)) R$ ^6 h8 j. w& U9 j
index:必需,必须是数字。规定从何处添加/删除元素。6 q/ k" e' p9 H2 p, o2 Q9 D
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
% A, A: g0 R+ t- I/ i$ Oitem1, ..., itemX        可选。要添加到数组的新元素
% S' R3 k6 W. q*/0 E! ^4 x, Q* P! @1 }2 x
" d" A& b2 |. D' N- g5 A
// forEach()        将数组的每个元素传递给回调函数
: b' z1 ?+ K( S! n& f&gt; array1.forEach(function test(n){console.log(n)})& z5 o% n7 h) R
1$ g/ n1 M* n6 n0 q+ T  v
2! f$ Y- o7 V& {& k6 x# A
3
9 W$ _5 |6 d- S  G A# Q( Y+ R) e* E0 [3 b* L
B
( Y1 j& B, E* }( l9 J C
" H, L3 b7 }2 H' s// 返回一个数组元素调用函数处理后的值的新数组+ Y- I- y$ E3 `! E: s
&gt; array1.map(function(value){return value +1})
0 d* v6 c! R4 p( o! D+ C2 J0 g; P(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
% t8 L* ?, x4 o+ ?6 S</code></pre>
* E3 y9 i# }7 z4 o9 M$ {<h3 id="24-运算符">2.4 运算符</h3>
7 s/ X" h) l8 R% Y1 @1 h  [<h4 id="241-数学运算符">2.4.1 数学运算符</h4>8 J) ]% B0 X$ T6 e3 z
<p><code>+ - * / % ++ --</code></p>
& m6 a% S3 R9 V<pre><code class="language-javascript">&gt; var a = 6
  i8 f# y! ~) q&gt; var b = 3, \$ c) E+ t3 M- ?$ u
// 加
/ T* M, A5 u' E- l7 C% o  i&gt; a + b
: C$ k4 O% q9 d" p+ Q  j" `9
: u; `7 P: V1 S9 m! a+ I; ]6 q// 减
) J0 w: o$ Y3 _0 _( R; _8 Q7 S&gt; a - b
: E5 {8 @, }" d- o8 ^1 ]3
: k: D4 G& a$ Y* i# O// 乘
* w% E% L' V; I1 W4 N&gt; a * b! q7 g; u. H9 b' W. ]
18
" X# y8 q* [# ~// 除- B0 d, `' v- Y! P6 s& C
&gt; a / b: p3 J( _% `$ a5 p. t
2# n3 `) V$ @4 l! A( z+ B
// 取模(取余)9 _, }+ c* j0 `, X7 T- L8 A- r- h
&gt; a % b
+ q+ J1 y: {! j0- e" G7 f) x+ H5 x
// 自增1(先赋值再增1)7 g% T' T! w1 u& d
&gt; a++3 b) z) a. F# o7 \! H. }9 o# o
6
+ w. g. P! G" x+ |&gt; a
" s8 t8 ^: K# T: p9 F  u5 F7
% Q) }) l) \8 x  l; z/ p// 自减1(先赋值再减1)/ O: }, F# W. {/ J% t
&gt; a--+ _* x5 ~6 e7 H  ?3 h1 u5 I5 P
7
4 c) ~( E6 N1 H; J$ c" r( m&gt; a, o0 G( j9 y* q! L: `( c0 }
6
' d: d  Y6 }" T4 `- V' d0 ]9 U// 自增1(先增1再赋值)! x. V$ I7 z( j# W- Q, w$ n2 {* L
&gt; ++a
# m8 U& i: e4 F7
0 y3 Z0 N( v4 w: @4 ?. B' T* Y% i// 自减1(先减1再赋值)8 d) G. L! j  Z' S; t) d
&gt; --a9 m% I! M, t+ {  X, z; S6 f
6
# ^, @+ y+ F  c6 i' Z3 @&gt; a
7 W- A; v! \' ~. k& w! j5 i- ?6  O! j+ i( s  y. B7 ~# |  ]4 P  E
. K. w* A& M! h9 V6 f+ ?3 l
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
. e1 P; H8 }" s) X: i9 M</code></pre>
, _* w5 I. ~( S* U: w$ v. K/ f<h4 id="242-比较运算符">2.4.2 比较运算符</h4>+ H) g) m5 g8 J" o9 m4 y. O2 N4 q
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
8 a1 s2 ]+ F. L- h& ^+ }, r8 U( J<pre><code class="language-javascript">// 大于' \/ @( ?4 j. L) i
&gt; a &gt; b
' w6 Z0 ^) p* m' j. m% ~) Itrue
/ z( t9 c: M  i" x// 大于等于
4 J* O2 m  U2 l( [) l* P- c&gt; a &gt;= b/ U6 o0 @$ y6 n% j4 u
true
8 g: I& K: z, {8 F, P6 G9 C# Q// 小于" Q* J2 P( q$ _2 k
&gt; a &lt; b% i, P$ X) E! x5 y
false; Q7 N+ m' q2 y
// 小于等于
$ {4 |9 x( j, |. f; ~1 M&gt; a &lt;= b
0 y# F* |8 n3 T  Wfalse
' Q1 f! e( d( z$ r7 O$ @0 X// 弱不等于
8 i$ V  ?; {$ Y1 F* C) @  Z&gt; a != b. ^9 t# H& f" ^# Q
true
+ N/ |/ `1 Y8 U- B' F// 弱等于9 p% Y8 h8 a- u1 t0 N
&gt; 1 == '1'9 z; T- g0 Q* A$ j
true7 h( Z' \7 e$ y+ z2 I$ Z
// 强等于
1 D. o+ ^  Q3 U) v* ^&gt; 1 === '1'
4 h; x% n) M! ~& gfalse
! m, T: x3 @) f- w( a8 s7 V3 Z// 强不等于9 v2 K- E  G( b
&gt; 1 !== '1') E. q3 U8 R% p$ O- ?$ q& S
true
, \3 f! z% o2 Z9 s" ^  ~2 ]6 Y  S- W' {1 @
/*$ u, V/ e# J& v; v0 v4 }5 e) W
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误6 c# T& `% n+ L0 I4 S3 p
*/0 f% y0 e" {: W
</code></pre>
* n4 w$ f4 e3 P. P<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>* Q8 e! M4 I3 s# I9 K: Y
<p><code>&amp;&amp; || !</code></p>
9 D; Z  O- `( S0 I1 s% N& ^<pre><code class="language-javascript">&amp;&amp; 与
+ i) V" L5 @8 N, U+ L. _" n|| or
  W% N( h7 N! z8 i! 非3 F3 F2 O# [5 k$ K) M
</code></pre>
0 n' R- O, R- N3 i; ~0 c. v<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>5 q4 Q  Z4 L0 A& m2 ]2 k
<p><code>= += -= *= /=</code></p>
2 E( h! y! }. |) m! V( ^% n1 u0 D+ X<pre><code class="language-javascript">// 赋值
: f" C( S1 T6 S&gt; var x = 36 O& [9 P( A# k; E  M8 N( D- ?# t
// 加等于. I# `) L/ Z0 }
&gt; x += 2
8 W4 n/ s9 C: y5) g0 _) `' h" n3 h5 I
// 减等于8 S8 x% U2 `; m% k9 V0 H: y
&gt; x -= 1) ]" ^& X) e, O" X0 X/ M
4+ y0 @$ e& j2 y( Q9 L' F9 l" [
// 乘等于
) @/ g8 E6 }7 n* F' d- y1 e; d&gt; x *= 2
  P+ b2 S: K, y4 e4 n. v0 _) X8 G) C8
" {4 L+ b' P1 ^8 k/ a% `// 除等于
- n7 Z0 L) Z0 [% [& g* f6 Y, V% c" _&gt; x /= 2  z( R; d% A' B. F# k) o" u7 X' E
41 e# \9 j1 n1 A9 l  T0 H& O+ X: C% i( F
</code></pre>3 Z2 J7 s7 g1 O5 O' Y7 J) D
<h3 id="25-流程控制">2.5 流程控制</h3>% B: o1 p8 s0 Y, t
<h4 id="251-if">2.5.1 if</h4>5 W. U1 S/ Z1 W' X  l
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}% `- S) f/ l, k
: O" z) Z6 z+ z. `
&gt; var x = 3
. E, a: {- ~* o5 L0 F" r3 Q&gt; if (x &gt; 2){console.log("OK")}  P" c; B' {  ]# r' m% o0 C
OK
/ a5 X6 [. U4 T! D
* z- Y: C% M7 m% B6 f7 L2, if(条件){条件成立执行代码}
( s* L! ^- s! a( k7 a& \* U: f6 l& z8 u        else{条件不成立执行代码}
5 k3 w, h3 U. e7 z* s8 t' i* F) @; \+ e* H' N6 R; }3 \
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
; j! [+ u7 g( ~2 @2 [& W' y'NO'( h( H9 Q9 [3 Z9 r, O+ d$ N
. M( v. q9 C" h2 R) Y  R1 }0 S* j
3, if(条件1){条件1成立执行代码} ( G$ `% p$ `/ b8 A, [
        else if(条件2){条件2成立执行代码}
# c$ e2 Z7 T9 P    else{上面条件都不成立执行代码}6 j0 P7 F# c6 h- e: g5 M9 w
& m) }+ @3 ]- {+ l' u4 h$ w+ l
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}$ n0 m$ N/ x. E1 g% H
Ha# C# |% a( L/ p$ S. r
</code></pre>
1 c, `% M# ~1 z9 d<h4 id="252-switch">2.5.2 switch</h4>6 n: u+ p7 t3 g& @' D
<pre><code class="language-javascript">var day = new Date().getDay();5 }1 K! s$ E- @
switch (day) {
4 m7 {5 t5 F- a8 I  A* o- ]  case 0:$ F5 _6 e  A+ X, w
  console.log("Sunday");; l" m9 L4 m1 f8 y2 q1 C
  break;* T) _4 l9 T# p# s
  case 1:, }2 b& Q" s% y0 ]4 m
  console.log("Monday");
* z- Z+ {* Q6 ?  break;/ f, b: }% F$ I2 i
default:
+ o& l) T& V9 M) S# `- x& c  console.log("不在范围")
1 f" a: p% f& z0 Y2 Q2 G}8 @6 E5 C0 m9 k; S
不在范围
7 C9 R6 P+ F8 r. u. C3 k</code></pre>
2 J* {; d. Z& i6 t( c) F, b<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>, S) n- Q% a; ^
<h4 id="253-for">2.5.3 for</h4>, a( X5 C1 }  ?5 @: \' m
<pre><code class="language-python">// for 循环
+ g6 ]* @+ `" B( F0 a. k        for(起始值;循环条件;每次循环后执行的操作){6 }/ ]- K( T) @
        for循环体代码7 s! }/ d' s# G* O$ s5 s
    }  Y7 j1 ~6 {( K! Y6 ~8 C0 g( A

& \6 K" n9 B" H3 V+ x$ q9 gfor (var i = 0; i&lt;10; i++){* f8 @7 ~! n  |2 Z  n+ i/ L, R
    console.log(i)  i5 w8 q2 k5 E% X' c% V
}
0 n9 l9 E- p1 \# g. K) _6 W; r! Z        0
, ~- R3 f. `$ w3 J. N9 s/ ^4 Y        1
; L4 ?7 @2 l8 [" f+ G        2# [/ K! F! l/ a0 N1 y- H
        3
* z( O5 U4 \7 q/ Y& M        4
! w- i- Q9 O6 C. i        5
9 V+ B- E7 z5 A2 W- e4 t6 F4 ^4 }        6
5 g) q: X/ E& A+ A" ^6 }        74 g/ V& e/ u& F3 ^+ P
        8$ C1 R" m2 z3 e7 ?! m. ~" l
        9
! o* J" a& B4 U% \3 I8 N/ A; x3 P</code></pre>5 y" u8 X) ~& G/ {
<h4 id="254-while">2.5.4 while</h4>% {: I9 O7 o1 n2 y* g
<pre><code class="language-javascript">// while 循环
0 S" f9 C- s% ~0 U+ Z4 G        while(循环条件){4 @( w9 ^( u: S: n, B
        循环体代码! t2 I+ X% \6 I* Y8 c
    }# A' U1 x0 X0 V/ w4 m" }% u% l

( J5 e9 u% |3 T8 ^&gt; var i = 0( O2 h/ T! T  M* }
&gt; while(i&lt;10){& b8 y3 j+ F9 c* X
    console.log(i)
! f7 H: B, T" u, a; F1 G7 [    i++. S3 B( ^; A+ y9 W1 u5 v9 t
}
1 M. N, a) r0 O( g! @  k 0/ [% W. F- R9 {% c$ Q$ M
1
, e8 {8 s$ G) u- E2 H+ l6 k 2& m) A! p* |- k% g7 N
3
( |# \) i5 V+ U 4. P  y9 b& s. S
5
1 _6 I% V; K, V. y' {+ C3 f* [, N 63 @6 T) u0 C3 ^, f
7
4 e6 U* a0 |& ^+ \5 q. k' _ 8$ Y0 ?+ X; U& u  U' U
9/ c9 f% L6 ]2 J0 e  e
</code></pre>
9 M1 t5 i4 _8 P<h4 id="255-break和continue">2.5.5 break和continue</h4>. D; ]" g) x! T& Z0 a7 I  Y9 O
<pre><code class="language-javascript">// break& L, \4 T9 [# j+ k) o0 ?
for (var i = 0; i&lt;10; i++){
" o  [2 o7 ^( B. n7 D0 K    if (i == 5){break}$ x2 Q& a. m% u, s* f0 @* W
    console.log(i)* E9 {9 k6 M3 `5 L" g
}
+ e% ?  S2 H2 a$ o# N' |+ l 0- K$ g" _/ E8 Q# N8 |/ K2 O
1
! m# [7 R, E( U8 U1 B- h 22 k& s# D7 _; K* g1 z# O
3
, O% J: i; w; Y% K2 m; [$ J* I- I3 D 4
( P0 f2 u7 l$ r7 ^( f. B// continue( c. s" z4 {7 _: S; h6 u
for (var i = 0; i&lt;10; i++){5 j3 l" x: ~/ W) n7 Z" C
    if (i == 5){continue}; E/ v2 n% s$ m# p5 G# Z
    console.log(i)
, a- V" q! _& i) ?9 N2 b) [}+ L% G4 z) \  S; C
00 ?8 m7 ~- M0 h. @9 F" U" `
13 R# I( Q' O# P7 j' M( R
2
0 T% I* R( D7 t+ T+ @/ p& x 3
, m, g- b4 x, I5 I3 Y 4
' A1 q( P$ `1 X, W$ n 6
, d& B( n) @' h5 ~* ?" h 7* |6 A1 P$ W0 i( q! \5 z  i
8: T* }2 ?8 C: ^7 T5 t
93 `$ n& l1 m# p- o( C
0 u2 ~: R* O$ i9 @0 b
</code></pre>
9 [3 F# K4 G( H6 Y<h3 id="26-三元运算">2.6 三元运算</h3>
, Y% V7 H0 D# i' ]. X<pre><code class="language-javascript">&gt; a: j3 o- L. i% C7 I+ y2 i6 Q
66 @6 R& k4 ]6 y. x
&gt; b  @# x5 d' I9 ?2 ^% Y
3/ M8 v- k; y8 g1 A+ H& r

# _7 u+ p1 F' B0 x% Q5 o) A% _//条件成立c为a的值,不成立c为b的值
0 ]7 G) R) f& Y2 }7 ~; ]&gt; var c = a &gt; b ? a : b* u6 y% G- G" V1 m+ s
&gt; c
/ E  Z! ?" }1 `  u1 @66 {! m  E! s7 W( i

% h6 V& N; s7 F+ f" ~5 P+ j, C// 三元运算可以嵌套/ e: z+ E# |* S* j2 U
</code></pre>
9 X) F6 v5 P4 x. r; m& V<h3 id="27-函数">2.7 函数</h3>! X' l* [$ N5 W
<pre><code class="language-javascript">1. 普通函数$ j2 @7 p7 f: y" T
&gt; function foo1(){2 Z* F. s/ K7 q) |0 b( j
    console.log("Hi")
) {, ]2 z* w5 `}8 X  u# M7 n1 q( Y+ a' f

: y9 S$ B" m' @. S# B5 y&gt; foo1()8 N- V0 o" L. [0 U" i; k
        Hi
( g/ a: b; i2 h" Q8 x2 |' r2. 带参数函数
! L8 d2 u) @8 y: k: ?4 j% v&gt; function foo1(name){' s* @6 F) Z" J. H6 w/ D5 l
console.log("Hi",name)- u' o9 R2 C* ?! a9 o6 t& L
}& x& d$ A1 t/ L! D5 }. {" t) a
+ Y$ n- |8 W$ a3 r7 h& p
&gt; foo1("Hans")2 l' Z, q3 R$ d+ T9 r! W- Y; \9 X
Hi Hans
) y4 F* Q% K" v- w. x4 ^' }4 q4 y2 `/ ]: |
&gt; var name = "Hello"( ~4 V2 a4 u) a4 o
&gt; foo1(name)
' Y" t6 R/ a4 u2 B8 v0 VHi Hello
' w3 f# P5 T# n& R$ p0 {* h2 ^# q1 z" i) I! r. `
3. 带返回值函数0 b. \) t# w& y- M$ x# _# l
&gt; function foo1(a,b){
! O/ s7 g3 i  o8 K' Q8 h+ o        return a + b   
: [: r+ P$ w+ z* l  y$ S! u% S}& }- |$ H. a" h( Z2 }8 G
&gt; foo1(1,2)
! p0 o: g9 d4 U" U3 o9 A5 A5 X3
5 T9 r3 Z2 ~1 g4 F0 k" @& E&gt; var a = foo1(10,20)  //接受函数返回值
) W3 J% }% j+ V2 Z# C% P$ R$ j2 H; {&gt; a- s. w2 v6 |6 Z* L9 m
30
2 F2 l% w' q/ Z9 T) d- g% q! M$ `! f& E1 e1 Z2 a& G
4. 匿名函数' z4 v$ i: |6 k9 }
&gt; var sum = function(a, b){
- r6 m5 m; D/ B5 Y$ H* L  return a + b;0 X  Q6 M! R# h5 k2 \  [
}$ H5 F3 e& l: |8 U+ [  D
&gt; sum(1,2): D6 F* A) t9 a, ^4 e
35 f% J* u& {8 q, V& ~
# M( P6 y. r4 F* A/ S* C  h0 Q. C
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
- ^- H- F( x& J1 H1 S&gt; (function(a, b){9 e# d% D9 f. ?. ~9 ]* z
  return a + b2 b  l+ r5 V+ `3 t* h# @& |
})(10, 20)- g' b) q; k* f: k
308 g6 M2 v& S: T6 |

6 X! ~3 F1 N0 [' l8 X5. 闭包函数9 v0 ^; ^" c  t
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
, C; [& A3 _4 x* tvar city = "BJ"
1 d9 ^# V  \0 J, a2 ufunction f(){. P; n4 ?8 i! E, q: b
    var city = "SH"
$ I1 K$ k% M+ x- F4 {    function inner(){
1 v, [, ]+ C5 v" l+ m. t3 U1 R  J# Q4 P        console.log(city)
, R* H4 A, J* S' B( g/ L    }- ?) P/ e( |$ l: ~
    return inner6 `  t! f% y5 q/ \  D; J
}
5 W7 [& n5 U3 g1 ^! {' N2 ]var ret = f()0 F9 d$ u! J7 {& h6 t6 g3 {7 Z
ret()
+ g0 M4 y# O- H0 n! N: n5 t7 D执行结果:3 Y) T/ G( S/ l9 U1 r- S. r
SH/ `' c5 ^  J8 E2 A* `
0 ]3 j' |2 T+ l: F/ ]
</code></pre>" D" F" T; x. O' u
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>  X1 y- i9 f0 k9 \8 x- P# G& ]
<pre><code class="language-javascript">var f = v =&gt; v;" x4 R( A6 y* O) ~4 W% |. X4 j
// 等同于9 l; y6 X' I' ^2 M2 Z
var f = function(v){; {' M! U4 ]! f3 ?" D: F
  return v;
: P0 Y1 e  {8 H9 f( y}
0 L7 b3 m' `, ]% J9 f</code></pre>
) j0 n$ p# V* H<p><code>arguments</code>参数 可以获取传入的所有数据</p>
+ C0 G6 x  s" v<pre><code class="language-javascript">function foo1(a,b){0 l2 q# |0 H8 m* T, r; l# u
    console.log(arguments.length)  //参数的个数 ; c  L1 M$ {, H  _5 T7 Y
    console.log(arguments[0]) // 第一个参数的值
: N+ @# Y$ _. B0 z        return a + b   ; c+ M0 j9 F3 u, {
}
$ U/ o* y) v5 i8 xfoo1(10,20)
6 T0 r7 f+ N$ T, D% |结果:
0 C7 a+ W( I8 U 2          //参数的个数 1 ~4 C" m* Z, h% l& [
10        // 第一个参数的值
# h' ]1 u0 Z+ |30        // 返回相加的结果3 u' |$ u4 B7 H
</code></pre>
( @2 a2 N3 b* N7 l1 t. q, J% w<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>; d/ ~& q! @( ?/ ^# L' O/ m
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
; X6 S3 J5 O: y* b0 u  h$ g% X; h! |<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
, E, |+ U- H! s5 x<h4 id="281-date对象">2.8.1 Date对象</h4>
0 n- J9 b; P% n# O<pre><code class="language-javascript">&gt; var data_test = new Date()# G( |5 S$ {3 T7 F' U  d
&gt; data_test7 `1 E0 ]1 u% Y
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)' @' h1 H- o# P% @. o
&gt; data_test.toLocaleString()1 U" e: t4 Q* m5 K
'2022/2/11 下午9:44:43'
/ f1 n, w9 Z- @/ E9 X* r
/ k4 \# w% p0 N) w&gt; data_test.toLocaleDateString()! u5 X5 |2 U, S6 i& q4 O. g7 k
'2022/2/11'
$ F; i9 J0 E4 \' M# Q3 L
, G: T+ Q: S3 l. M2 j4 M8 A( f+ B&gt; var data_test2  = new Date("2022/2/11 9:44:43")
3 W$ C" R/ D* P" N5 |3 S&gt; data_test2.toLocaleString()5 C2 u. t& Z) Q+ E- i; l& U
'2022/2/11 上午9:44:43'
* e4 l5 D' a9 j/ Q6 u/ L+ K$ b8 Z
5 E, y; `6 N" o% E" _. f3 v/ N// 获取当前几号
/ C  z2 u7 \0 [0 F( ?& P: v' P&gt; data_test.getDate()
# L9 O  s5 O6 R. \/ e# T110 _8 k" W9 Z, ?. u( f& z0 X+ U
// 获取星期几,数字表示
  L, V! c3 G4 c3 ?# Z6 r' ]6 Q  h+ W&gt; data_test.getDay()    u2 ~- N" u$ s5 v" Q; ?, L- X7 f
5; Q0 |7 X0 T- }. }( O0 E- A
// 获取月份(0-11)2 _3 ?+ v9 }" v) N9 U
&gt; data_test.getMonth()3 c( D3 E( `: ^% y* m6 J7 F
1! D0 ?0 `! K0 m6 D
// 获取完整年份
5 H) [% C0 T/ y&gt; data_test.getFullYear()1 u. ~. H  k; }! o3 {, u) f+ Q
2022( v" z: j. V+ [
// 获取时1 [7 q5 i) V5 O: x
&gt; data_test.getHours()- ^$ |: ?+ }4 ?  a
21$ i& W5 K  ~; X( s, U2 u
// 获取分+ S- k; O5 ~/ {, k2 M' X, D
&gt; data_test.getMinutes()
: v, R3 t* H5 g( p5 R447 _" }& @  a( C+ F' u) W8 V: ?
// 获取秒
& S4 |) [- D- G7 n+ E) t- F3 W8 b/ X&gt; data_test.getSeconds()
, i6 f' K! E+ \43
1 j' l) V, ?  L0 J; Z5 c// 获取毫秒% n9 x2 y! }) p' }$ x2 T3 q$ p
&gt; data_test.getMilliseconds()  y! b8 c( h- O. g- G
2906 w7 X1 g0 M5 B6 T1 Y* H: `
// 获取时间戳. ]: R6 @3 T4 N
&gt; data_test.getTime()! Y% s/ m* K2 _
1644587083290/ X7 {. Q0 C7 N5 c& q% F
</code></pre>
& q; a7 L5 H6 r; D<h4 id="282-json对象">2.8.2 Json对象</h4>
% g/ G, [6 u' ~0 k: L7 `% ?& P. B, V<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
/ U% }  S+ _5 |8 y. JJSON.parse()  // 反序列化,把JSON字符串转换成对象  V# Y6 I! R, I6 U  ]7 [

, n$ K$ U3 q: c$ ?6 P// 序列化
+ v6 f3 l1 [% U7 d&gt; var jstojson = JSON.stringify(person) 1 }0 y, \; N% t4 X
&gt; jstojson  - p9 M) P- w" b4 y' [! a
'{"Name":"Hans","Age":18}'8 Y5 g) Q+ l0 R, {( M# l; ^
3 T- X* n; C# r/ [2 f: o, E( K
// 反序列化
* M6 X& |; M3 y# {&gt; var x = JSON.parse(jstojson)% L- g. \6 W3 X$ J# j  S/ B
&gt; x
1 M' S( N& S9 W{Name: 'Hans', Age: 18}
' a$ k/ E$ }/ w) r( f. v  P&gt; x.Age( x" q, U( j6 P! M
18
4 I: i) N6 n; K+ |1 V" H* \" `4 f</code></pre>5 ]5 _$ q/ J$ a$ }4 X: R' Z* x
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# D: [0 r, j: R& D! \/ v<p>正则</p>
1 j' O7 E7 f1 Y8 N+ C: m+ M<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
2 o* u  v( L( L$ E' |# ~&gt; reg1! ~" D* q: F$ N6 o' o% u, z
/^[a-zA-Z][a-zA-Z0-9]{4,7}/. Z/ n' \! F+ r+ z+ q8 G
&gt; reg1.test("Hans666")
: s2 _; m' i3 w6 A# [3 L  |# vtrue
! |0 X, s$ o3 Y5 B" O" O! m. U" d. v0 ^; }/ C5 e% s, L& R# H7 d
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
$ Y; d6 L' t% g& {- C# P9 L&gt; reg2
6 o9 b# @9 g. t8 k# v% t, k- q/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 @( Z# N  Y, n! z8 ?. i) n6 }
&gt; reg2.test('Hasdfa')
2 L6 I; f) ?1 o5 J. E7 I6 t( k2 Gtrue$ C2 i4 T8 E. r7 S
3 {. x4 n1 b' H7 f# J
全局匹配:+ ~- K& J7 O- i1 F
&gt; name
% k4 v8 g9 [/ x( }' l" s0 ~'Hello'0 B7 x0 Y" o+ ^, Z
&gt; name.match(/l/)
( R7 {# j$ ]/ |7 Y; F( E4 x" U0 s['l', index: 2, input: 'Hello', groups: undefined]# k& \) p) ~1 b# V4 w
# b0 v7 Y7 C3 F
&gt; name.match(/l/g)
3 L3 c( ~* u$ K8 D$ w(2)&nbsp;['l', 'l']
& e1 W- f5 p3 J- r8 [& J0 p- j// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
  @+ \$ T$ S7 _# b' U- E2 m+ G  T6 o) W: _
全局匹配注意事项:9 r# i1 q; n( a: Q- y8 w$ a
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
0 P3 Z5 o5 V6 y/ v4 a- R* ~&gt; reg2.test('Hasdfa')0 ^( ^( Y3 R, T. \9 `4 _3 }. k/ v
true
* _. W" O) Z% M3 v9 i0 h  u&gt;reg2.lastIndex;
! M" e. k! u) G4 S$ ]. l" m$ M6
2 l2 n7 c: i' a6 H3 E$ T+ L&gt; reg2.test('Hasdfa')  A1 N* o0 o0 P; h4 }
false
& i* ~1 g: o1 Z* G&gt; reg2.lastIndex;
$ v% I7 r! s6 D: V% B: G" A- U2 t0
# I* w! ~3 j( }5 v1 Q&gt; reg2.test('Hasdfa')" t) S) e# L' D
true
, I: F/ x# V+ j6 x4 D8 z&gt; reg2.lastIndex;" F) k5 _) ~" Z
6
+ R& }' Y  {+ |% a- j&gt; reg2.test('Hasdfa')
2 N( n4 o; Z# C) |  k( afalse& o  p& \4 x% h' p
&gt; reg2.lastIndex;
9 b3 v' y4 ^& C; J2 o02 M  C1 F4 P5 J  g4 A- V
// 全局匹配会有一个lastindex属性
# F3 M* w5 _' o( z! s( X&gt; reg2.test()- @8 @9 U3 F; y' D9 _& k
false& z# r7 B1 H" n( T# k% u% X# o
&gt; reg2.test()
1 u/ X) a9 x2 @! M. I$ M* l2 Ftrue" K: v& i" E4 |8 ?4 }/ w
// 校验时不传参数默认传的是undefined3 W( _7 M$ x- i8 I# R$ b' w% f+ |
</code></pre>: ~# s  j8 P1 _. N" y
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>7 ?( w! v5 o5 m7 d( _% A8 D/ s
<p>就相当于是<code>python</code>中的字典</p>
( Q, e5 l' `( F1 w<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
$ f# q. w/ @5 G- A3 R6 V, T/ s( X+ E&gt; person
, h2 i2 M: f9 F. Q4 ]# \4 `{Name: 'Hans', Age: 18}
4 |, Z1 N: ?9 H3 G7 |" }2 S&gt; person.Name
' [1 `% E  ]) }. s: A* E# @'Hans'. x1 l5 r9 v: b2 G9 b- Q% B
&gt; person["Name"]
2 G" y" m( \8 w) q+ v8 x5 t' u( G'Hans'
1 _% ]4 P$ y, t( d* M  P6 _' R, y+ H5 f+ ~  }, y' m- C
// 也可以使用new Object创建: S! O0 U& w; Q+ I1 d7 _6 V" f
&gt; var person2 = new Object()& Q$ u3 {& V1 |* X& R( L
&gt; person2.name = "Hello"
) f0 n% p8 V. Y" Z. }'Hello'
  I4 j; C( H- P" p+ O+ l# d  ~" |&gt; person2.age = 20% R7 N" y) {" C( w6 f, ~+ S
20
6 ~2 Y3 K# b5 O, I8 m! W</code></pre>/ h6 d4 G) \2 f+ b2 B
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
; N3 m7 F( X" e/ k<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
& i! d: |$ W4 a1 H( h! J<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
6 f# F) ~8 u( A  j4 X* z: k<h3 id="31-window-对象">3.1 window 对象</h3>
0 c/ S* k/ R+ M+ u<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>' |  e2 ?3 ?+ S* I* B9 Y1 F* H
<pre><code class="language-python">//览器窗口的内部高度7 j0 u6 _, Q. f. z
window.innerHeight 0 Z' p5 Q- T) O) o* X9 N+ T2 `
7061 V6 H4 t1 B+ p6 r0 }: e% l
//浏览器窗口的内部宽度# h1 D4 D* R5 T& P& K0 i  `$ q, k5 r& S
window.innerWidth
$ k8 _& n5 a7 ^* r, p' t1522; h4 U; X9 m8 u+ Z
// 打开新窗口- K5 c0 I# G) e
window.open('https://www.baidu.com')& x$ A7 z6 J5 ^
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
, I: Z& e( o- [3 J// 关闭当前窗口
9 }( r$ S. P! ~/ ]! b$ }  w* X" Lwindow.close()
# H$ p& N5 y8 }+ _3 ]/ x//  后退一页
' V( ?2 o2 g  w5 M% |* [window.history.back()
( ~5 F, |5 `' G// 前进一页: C- o4 _% J! g! Z
window.history.forward()
& n7 v% I9 Q$ b//Web浏览器全称. G* q6 v4 k7 \$ p6 B' y
window.navigator.appName
; B' v' r' Q6 y3 `'Netscape'. n( }6 Y" F' b) D
// Web浏览器厂商和版本的详细字符串
6 ]1 r  ~' f' K: ^7 g8 c) h! _window.navigator.appVersion7 l4 |+ j& h0 }! d  O% E6 l/ h' g& @
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
! j# L) c0 b# n" n1 i- E// 客户端绝大部分信息9 V: o$ G' H( H$ n. W
window.navigator.userAgent4 k8 _$ B  q6 G, K3 L8 d4 V6 ~# P
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ ~1 H3 W2 k( B( }% n1 g6 y) p
// 浏览器运行所在的操作系统4 ]9 F$ u6 J2 u  E) B1 i& g
window.navigator.platform4 k% X) T1 [8 w2 U
'Win32'
) N' a2 ~# g3 V9 I$ W2 N
6 o) P2 B7 B8 f//  获取URL) O  W. m/ Z7 C  p/ i
window.location.href$ B3 h' f9 b4 G! d% {" U
// 跳转到指定页面! b! o2 x$ h! r1 y% r
window.location.href='https://www.baidu.com'
3 e( Q7 O# D) [// 重新加载页面4 r  D9 A3 X1 l: K' ]
window.location.reload()
( h6 |6 E8 h: u1 L8 Y; k</code></pre>& `. N: M/ o4 Q1 f. Q9 z
<h3 id="32-弹出框">3.2 弹出框</h3>( T3 d9 ]: J/ N, T
<p>三种消息框:警告框、确认框、提示框。</p>2 {6 r* e2 C& j$ o4 M4 D4 L
<h4 id="321-警告框">3.2.1 警告框</h4>
3 |8 Z7 s+ V* z<pre><code class="language-javascript">alert("Hello")' S- V4 P3 b9 c4 P$ B$ j
</code></pre>
8 a0 W+ t& w$ G+ O! z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>6 J2 O7 w% W) |6 e' J) [* X
<h4 id="322-确认框">3.2.2 确认框</h4>' S7 m( [+ n! h9 T
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>; H! j1 N# E% H( s! Q
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
+ b" K0 Q+ {# ]true6 Y( X4 O5 F  N
&gt; confirm("你确定吗?")  // 点取消返回false& ]7 o$ ^/ a+ H9 Y2 m5 q- @
false4 @: X+ V7 V3 A9 t5 u
</code></pre>
3 q, R2 X' _) N- D9 `# l<h4 id="323-提示框">3.2.3 提示框</h4>
3 U" [5 n( F9 I1 H<p><code>prompt("请输入","提示")</code></p>
/ v! V5 b; k7 B<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>7 u, h( F  a) S
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
3 B8 P% \, w2 H& G<p>如果直接点<code>取消</code>后端收到<code>null</code></p>3 @  E, C% c' S' a" v5 k% S( O
<h3 id="33-计时相关">3.3 计时相关</h3>
# f; _5 y  h( d3 |* N8 v<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
$ k# C  U( ]1 B8 m<pre><code class="language-javascript">// 等于3秒钟弹窗- K6 v; B1 ~4 g9 U$ ^
setTimeout(function(){alert("Hello")}, 3000)
0 f0 @9 {) X/ _# ]. Z1 Z# R8 g3 [. A8 ?& @8 X7 T
var t = setTimeout(function(){alert("Hello")}, 3000)
0 v' i! p1 \  a8 R. K% Z9 @6 \; ^3 x) O3 }, r9 B
// 取消setTimeout设置" X  f) [; A( ^- ?
clearTimeout(t)( o! R5 d, K' B* Y. Q$ c/ D/ x
</code></pre>1 c& i& o0 y0 [  ~" n
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>4 a6 U2 N9 r9 Z3 f( e
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>, f, W8 x/ t. c9 H
<pre><code class="language-javascript">每三秒弹出 "hello" :
; i# _5 X: a2 B1 x$ YsetInterval(function(){alert("Hello")},3000);
1 N& k4 _+ O1 \: n8 F( F4 c" q</code></pre>) S8 Z$ X* x$ |, L% Q: q3 L0 ~
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" s7 F( Q3 H/ `# I7 G
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
% @3 n$ \$ v' i0 j" D//取消:! @% c% ]. j9 K2 I  i! R
clearInterval(t)$ }0 b! v' b+ M$ h8 }
</code></pre>$ Y$ t5 l9 ~3 C  z: Y2 k
  n* }* i. _) M3 j
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-4 18:46 , Processed in 0.071130 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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