飞雪团队

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

前端之JavaScript

[复制链接]

9171

主题

9259

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29843
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
6 A) F  @% r1 X7 w& V7 s
<h1 id="前端之javascript">前端之JavaScript</h1>* x4 }3 R) S1 _
<p></p><p></p>
; ^2 C' @* N: w* Y<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 H) D4 z$ h5 h& e( @* \/ i8 U<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
9 z& _! O& a4 s8 ?3 M7 Q" U* N2 r它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>: Y  k9 F8 M! r
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>1 j+ u/ r3 p/ [8 R! m
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>3 A8 e5 }, z* l/ Z7 S6 ]$ V
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>9 c" |5 w+ [  d. B9 F' R: m
<h3 id="21-注释">2.1 注释</h3>
& r/ G* }4 A4 z<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
, V7 n6 }  t+ \& v- g8 T, R<pre><code class="language-javascript">// 这是单行注释5 c( N0 O9 D; Z/ x1 I& [8 }

& @. b3 }" x8 I' M1 y. R0 Y% d/*5 W* l' a* I+ P, t. j* J6 t
这是多行注释的第一行,
2 U2 k, A$ Y: V% p这是第二行。
6 B2 l" j: r" Y" {7 J  G*/- I1 G4 P0 a- d0 V' p& H
</code></pre>
. I& F+ W1 K: [8 B* {9 V  ?<h3 id="22-变量和常量">2.2 变量和常量</h3>
. O# M" h6 X0 S2 {& _' |<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>- a. d  {4 d5 ]: c4 s
<ul>: o  q5 C/ ?4 J, ?1 J  C: A' B
<li>变量必须以字母开头</li>& q3 O. Y% g" K, G- f5 U% Q
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
: c" t3 k4 }% w& x. m/ Z& w<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>4 F: Q, B. u$ p, O  o
</ul>
# ]& \: U5 B. n; H/ R' L<p><code>var</code>定义的都为全局变量</p>' Y" G- w0 B+ @: W! h
<p><code>let</code>可以声明局部变量</p>* Y/ y: N; V) ~" f
<p><strong>声明变量:</strong></p>
" y! v0 U" |- i<pre><code class="language-javascript">// 定义单个变量
8 y& X: ^  r2 a, u&gt; var name
. A4 W/ q: ?" W  }&gt; name = 'Hans'6 M; y+ b! c- o: B* _3 i8 s
//定义并赋值3 m# s0 {- {7 n; z: g' G- i3 C
&gt; var name = 'Hans'  i( Y" ?) b5 z: z+ z$ G
&gt; name5 b5 o' e4 _$ n; ?& I7 F, X. P
'Hans'
  v* I7 ^7 j( u6 D" D  W* F
* [( h" x" d' M) Z* u8 e* Z// 定义多个变量4 M& S" r2 Z3 x; p# s
&gt; var name = "Hans", age = 18
5 ]% _9 P6 N$ @4 K, P6 o&gt; name# _/ k1 _4 N% O5 t3 P
'Hans'. c! T" W: M; p7 [
&gt; age
5 ]1 T- ]3 }3 Y% t180 ]3 L, Z4 ~: B5 ^

. N3 P% w0 y: F, S$ z//多行使用反引号`` 类型python中的三引号
9 D- J  A) o( u# D8 V&gt; var text = `A young idler,6 }' U# s) ?, o* R% g2 g8 y
an old beggar`2 X! R5 X3 z/ B; s% Q0 a
&gt; text
1 }) V8 v0 h) [( Z$ y; V'A young idler,\nan old beggar'- Q. M" c2 u, Z* T) e
</code></pre>
& y7 R0 ^/ q2 G5 @<p><strong>声明常量:</strong></p>3 a5 v8 W* @7 H. S# r. P% ]% i
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
$ ]2 c/ ?% B! q( E3 B9 Z<pre><code class="language-javascript">&gt; const pi = 3.14
8 n& f0 y! ]: X- T  Z' I3 r( [&gt; pi
  E* R& _9 _& L# R" O- E3 N) f0 B3.14( t7 f2 I8 V$ ^- O3 e6 U
&gt;  pi = 3.01' B# E/ N( f; ?0 g1 D5 C% X5 J
Uncaught TypeError: Assignment to constant variable.
0 R" Y( Z2 G( z" q    at &lt;anonymous&gt;:1:4" a* T, v) X4 F' u5 G6 m$ Y8 ]

6 z3 u, d. `  K; B" z6 s; U1 O2 {</code></pre>/ X' L3 A# ]; r- i6 ?7 F8 M2 w9 o/ X
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>2 ?# Z- `$ p3 C3 M- R: Y$ m0 X" I" y
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
! e3 m+ v( ~* {1 E+ k<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
2 A, B7 ?7 b4 q( S- `: ]% v; z<h4 id="231-number类型">2.3.1 Number类型</h4>/ L0 {. P- P; N) R( N$ `
<pre><code class="language-javascript">&gt; var a = 5( n% x6 h5 Y6 y
&gt; typeof a   //查看变量的类型  
& H) e9 B8 s4 c" ]' E; W, c9 @2 tnumber: p2 @# y: O/ R- [; C& S

- @- {3 f% g, Z! J, o+ {* X* ^&gt; var b = 1.30 [1 @( E  u& O5 _2 M6 C7 S' M- _' {+ Q
&gt; typeof b9 M/ ^4 n) \( P  r8 R8 Q  r
number
/ @4 L# W' r* q1 z* ^$ {- ]1 R
# |* ~( R' [; M- R0 o# {: O// 不管整型还是浮点型打开出来的结果都是number类型+ o/ D, \4 v, f
' h3 d1 ?) Q0 U
/*9 c" G/ r) g. J. B0 Z# l
NaN:Not A Number: h6 P- U4 {; ^' M+ K7 k4 W  x$ q
NaN属于数值类型 表示的意思是 不是一个数字  w( W3 T* r# A) [8 D3 u- W6 c
*/! V  |! q* N8 ?7 R+ q0 T' [6 f

0 Y9 k. [, M* ^: Z, K$ A6 v& d9 EparseInt('2345')  // 转整型8 A" u2 F2 Z" `4 t
2345
, w$ f+ i% r, p0 V) ~4 f, d$ g6 LparseInt('2345.5')3 o( l; z4 y( u6 C( l5 O: [. k
23459 ~5 E0 N% M0 @9 m# C
parseFloat('2345.5') // 转浮点型
# }' f+ G! ]3 ^8 T2345.56 i  A! }( r1 [8 B  T# _- s, `
parseFloat('ABC')! d/ b# A" ^$ G0 j" U1 J6 ~: p
NaN" {3 b9 v. r8 Y/ Q+ X1 u+ J) z3 L: Y
parseInt('abc'). N2 f& `, c' y& P% K# G. {
NaN5 y6 D& a7 S7 H  H3 t3 J
</code></pre>/ _; M7 V, ]( \2 S
<h4 id="232-string类型">2.3.2 String类型</h4>
1 v/ ?) {3 D8 j  [<pre><code class="language-javascript">&gt; var name = 'Hans'6 i; T! H2 {* I
&gt; typeof name; }. D% I8 |6 {9 {, G8 d7 v
'string'
7 o; S" b9 j/ s8 n! Z6 D- H" I! V# `% [  s
//常用方法2 ~+ E3 E2 X+ N" ]$ _2 l
// 变量值长度8 ]4 {/ N0 S6 H  D
&gt; name.length+ F+ f& Q6 J' b+ D/ t' j# y
4$ f' V/ G! T6 i( g3 P
// trim() 移除空白
; [5 R0 e, E+ V- Y&gt; var a = '    ABC    '! ~9 C* D% t% c1 m
&gt; a8 ]0 m" R! u( H1 q* x" x+ e
'    ABC    ': @& U% Q5 L- U, ^5 h) A) Z; O; z
&gt; a.trim()
& x, R/ m2 {+ [- _'ABC'
9 l' J3 f+ j! g/ M2 r//移除左边的空白
* z- c! K; B  N&gt; a.trimLeft()3 S2 J  z3 |' H% \
'ABC    '
) w3 C$ Z# Q2 h0 {( @6 E//移除右边的空白& d( ~6 H. b2 J# C: D% j
&gt; a.trimRight()
# P: X) h4 O- \% R3 V1 k8 d- `'    ABC'+ |+ L) w. s% x; U) H1 `
2 W  u' {4 C4 m: c
//返回第n个字符,从0开始+ o  Z4 H7 r7 Z! G
&gt; name. _  T* x1 D3 H6 R; l9 W* W% S- T
'Hans'
& g6 P. S$ N4 m, x: w- g0 l&gt; name.charAt(3)
) u$ j- B5 X4 X5 o/ h* B's'
+ u2 w% m; z% S; I&gt; name.charAt()' Q% ?3 r7 u  M. @/ M9 q
'H'" b, d* j( b8 z$ h6 S
&gt; name.charAt(1)
: E) d+ ]; e" G. N* p; m+ o'a'
( Y2 n; @) L2 v; `/ h
) _  G, V5 Z3 m; S$ a6 `// 在javascript中推荐使用加号(+)拼接
! Y* D! |8 ]) s/ c6 Q0 d&gt; name2 o. |1 u. f, j
'Hans'% c' J1 z9 `  w7 K. Y- ^. @* t
&gt; a; k7 T5 U  U: y9 Q, I
'    ABC    '& N1 N$ n. ?5 m+ t% N
&gt; name + a/ A' G. S2 U* B2 K# m+ F
'Hans    ABC    '
  Q5 F/ v7 }. K. H/ T! G3 Q// 使用concat拼接
' k6 `) {1 ?' y! {' ?( h9 |+ f5 r&gt; name.concat(a)  ]: w; r# I+ v" F) X2 q4 Q0 D5 D
'Hans    ABC    '' T4 ~. G: f4 V# Y4 K/ s

6 L3 V$ g5 z* W" g//indexOf(substring, start)子序列位置
( K, |  P) ~1 R& ?1 F7 f1 d$ f% e% x" @* S: D
&gt; text
7 a1 D6 _3 r( v'A young idler,\nan old beggar'7 v2 w3 p1 V1 F$ f$ E8 U0 C
&gt; text.indexOf('young',0)  {. _1 Y' i5 R$ ]) f5 h% U
23 P$ \# Z% j, d

  M/ c. {7 N0 R( R4 U1 Z; u& J//.substring(from, to)        根据索引获取子序列! j  ?3 @- M% Z! z
&gt; text.substring(0,): B) R' Y7 M  Q( ~7 [, d5 z
'A young idler,\nan old beggar'
/ n. K& L  Q8 g&gt; text.substring(0,10)$ V3 }: Q8 f. i
'A young id'
& M  e0 X0 S1 t% i1 y: U3 H1 \( F
$ `! X- ]' l+ ~! ~+ @2 c- m* b// .slice(start, end)        切片, 从0开始顾头不顾尾
1 A) ?# l) o2 x- @4 o&gt; name.slice(0,3)
5 ?! F  y3 i& X" Z: _# g'Han'; c; D3 T( V' I, [9 e

# s  u8 i* U0 e, A( [// 转小写8 y: s/ v5 Y5 W# ~3 q  _# q
&gt; name, ]0 w" a* @1 c0 {$ o2 d
'Hans'/ d; |; z9 ?) j8 F
&gt; name.toLowerCase()
* z0 B9 M- Z) u" K'hans'$ B% ?0 @8 k. ~# |! r
// 转大写
* ~2 R7 q$ a: D# h2 Z& x/ N&gt; name.toUpperCase()/ C) I1 K  T: [; r) v* G* @
'HANS'* I5 }+ L+ c7 _/ I6 C

3 S* t, P6 n/ R0 v0 W// 分隔/ L1 @) c3 u5 O, n: ~) t! h. {
&gt; name
5 X: k9 T  ^$ t'Hans'
0 @+ P; d1 |  o& K&gt; name.split('a')
; l" E3 `! ~/ @5 H(2)&nbsp;['H', 'ns']
" f+ J1 p- k" J- u</code></pre>
8 I5 }  H, J9 I7 x<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>8 Z0 v$ C; i5 |
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>2 x* n$ `) X( X3 s" J
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>+ E, _! I+ g! ?, o9 P7 q
<p><strong>null和undefined</strong></p>
. T8 a2 R) @5 l6 }<ul>6 ^. O# e% d' P3 W" d/ `
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
. `8 }3 j2 ?( g* `1 b! y<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li># i1 \1 }/ F# O
</ul>
  I" o, ^% f- c: b" R4 s$ W<h4 id="234-array数组">2.3.4 Array数组</h4>+ w7 A# s' k( ~- C8 O
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
# T% O' \: C% e5 G0 K7 H<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
: F* U5 z6 \, H1 n&gt; array1% b! w( D. E" H7 K
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- v7 o* P: U) M+ Z
&gt; console.log(array1[2])  //console.log打印类似python中的print
6 h; e: ]0 ?3 n" N" z* B: U3
0 Z0 s0 [+ f; Y9 W7 W! J5 A* ]- A// length元素个数
2 V' b2 Q3 t  q1 q' C8 _/ o5 z8 w&gt; array1.length( k7 h4 ^* U: x3 D, B1 Y
6
; f, F2 C6 f# X% A6 G  l8 N// 在尾部增加元素,类型append& z. p, O& t- m+ ^+ l
&gt; array1.push('D')
" |; T& T/ m  b4 D1 Z6 w7
1 D0 e, _# D! s* p$ _&gt; array1* Q$ s) }" d( D! f6 F
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
! r( R+ [- g' Q// 在头部增加元素
" N# J- o$ w3 U&gt; array1.unshift(0)
; X/ M% X5 i; J0 [& o8
7 k; n& G2 p- E; t' }+ [&gt; array1. |$ K: E5 P/ |0 N/ G
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']  H; P; l! F" Q- J' [. p
  e1 H+ |) M! W
//取最后一个元素. Y# l/ P7 d6 B* Q1 f! A
&gt; array1.pop()
( G; M2 O/ [4 f2 q  e7 H'D'
+ l# W( Y5 T) v&gt; array1- I3 _$ M- O' C3 r' T; x9 v
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ @% g1 E% g1 s0 d
//取头部元素
* e. V3 P5 U/ f6 _% y# e0 k&gt; array1.shift()
. i# t7 o: V; x% W& L1 a" P0- `" s' K2 l' T
&gt; array1& ~" z4 h7 M& I  u( u$ G/ a2 x
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; k. K* `# D! W. k/ s! g0 S
8 x6 Z- V7 F4 n* l9 R' s* r8 X
//切片, 从0开始顾头不顾尾! M  O6 l0 }9 z: ~5 n1 H
&gt; array1.slice(3,6)
' o' c" M1 A; n" u3 w8 S4 C. O(3)&nbsp;['a', 'b', 'c']
% Y  u5 `, R$ G, @- ^: Z// 反转! \' I  ?. c; F9 u$ y  E7 `+ I
&gt; array1.reverse()3 m4 }$ F# e4 y. S4 J
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 V6 B, X3 C7 l0 @  s
// 将数组元素连接成字符串
% ^- k, K9 t& D% y" Z1 O) ~0 g&gt; array1.join() // 什么不都写默认使用逗号分隔
/ h! ^( z+ A2 R'c,b,a,3,2,1'- L' ]3 Z2 ?# K3 [
&gt; array1.join('')
& j# g' v3 }7 }1 a" n'cba321'
5 P+ C6 H1 n, u. u/ q9 q# b&gt; array1.join('|')
+ N2 E8 F" D# R+ N/ O/ @) L'c|b|a|3|2|1'5 u, T& x# U7 @% I: ]# K) l
1 v+ L8 \8 J: W! q: D* Y8 `7 n- R% Y
// 连接数组5 M0 `7 _. U1 f) a; e8 |
&gt; var array2 = ['A','B','C']
; V' d9 O% h6 y&gt; array1.concat(array2)
& c0 n: R9 Z  \$ }8 O(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
+ t7 c$ o  N* D/ v4 T, }; e4 W
  o# I) i( O5 Z/ C- _// 排序
6 T' x. d; O9 N  r. ~' r1 D5 A3 I&gt; array1.sort(); j- I3 W  R8 L  z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 f/ S0 H  Q- m: S0 `& |: F% |( W( d
// 删除元素,并可以向数据组中添加新元素(可选)5 M1 B% ~" M, l3 G7 ~. ~# a1 z4 t1 T+ g
&gt; array1.splice(3,3)  // 删除元素4 x% n6 E& u: B5 \! V  ^+ j0 X
(3)&nbsp;['a', 'b', 'c']6 `6 b; I3 p- a; q
&gt; array1
" g. `1 k0 T2 x; x7 {% K8 {(3)&nbsp;[1, 2, 3]
( A! V  z& w4 S&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
: D* {8 E  Z' }, V$ A2 {[]
3 b& T; U6 Z! W; `/ e! n&gt; array1; M7 D5 r# ^0 X# M8 [1 z9 T
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']) e8 m4 p0 }. |5 u7 r

) c5 H) D8 r- V$ d/ X1 v: |/*
% a/ a' R( z* Ksplice(index,howmany,item1,.....,itemX)
- {8 Z0 H/ z' u6 B; W, K# Uindex:必需,必须是数字。规定从何处添加/删除元素。: ]# h% f/ Y1 [/ n; T
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
7 l6 x& w, g: ~7 Uitem1, ..., itemX        可选。要添加到数组的新元素5 m  P( W! V$ b2 s3 P" z2 T6 D: i
*/: a. k! g# f8 B# H
  i( ?$ q+ G0 R4 B* V
// forEach()        将数组的每个元素传递给回调函数
5 S6 Z% |% H* C&gt; array1.forEach(function test(n){console.log(n)})
  R9 b* s  W; ~$ H. j5 C) O 1
9 H' C1 ?$ @9 Y 2
. z7 }: j+ ~3 `% e$ l9 B- x$ I 3
' _2 w1 k3 h: Y& G A
. ]/ }+ A" p  ~  A: u B
7 Q' [$ O4 b  |& y% {: r C
- z6 E$ _# s* z" f/ Y" @- b// 返回一个数组元素调用函数处理后的值的新数组; Z% Y; V! E& s
&gt; array1.map(function(value){return value +1})7 T! I& B) B* D. m* i
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']4 C# ^( y" F9 \6 v
</code></pre>3 `% q4 u: _  K/ F
<h3 id="24-运算符">2.4 运算符</h3>! d) R' {; I4 s! V
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
6 f' A4 ]3 K3 q<p><code>+ - * / % ++ --</code></p>
7 Q6 ~& W& Z" x1 o% E9 b<pre><code class="language-javascript">&gt; var a = 6
2 J0 z0 p6 y& I/ C9 _- v&gt; var b = 3: j6 k) ~6 V" O2 z+ m
// 加
  N7 ^3 _- ]( E&gt; a + b6 L  d1 ?$ M* K, J' _! V3 z0 ~
9
) m9 i7 R' `1 m1 k2 D' Y/ L// 减; ~- Z1 I9 D) o
&gt; a - b
4 t9 {% _0 a* p2 L9 \/ g5 b3' u9 ]9 u- j/ n. l& L) U
// 乘
; P8 p2 b# H# X  f2 _/ a: {2 Z&gt; a * b
% V0 t) @. B  _% X* F18
- N. n( u6 [& `. E) O// 除! `$ ~& _  |  l6 i) D" x8 i0 ~+ a5 p4 @
&gt; a / b6 e+ j) F9 N2 p2 ^5 @6 f
2
1 c- ?/ {0 Z" }& Y/ z6 E! x1 X. w" v// 取模(取余)+ ^4 ?; k8 e/ I' n
&gt; a % b
" D& m! [8 g% F0 G: B# X# W0
$ N" ~4 ^7 z3 {/ J0 |' f// 自增1(先赋值再增1)7 b6 _" T5 p7 Q  ]: b
&gt; a++
* _5 y9 N& K7 O# [. W0 P65 g. I( h1 \0 f* _1 Z
&gt; a
& e- M9 X* l8 a5 w, M$ ?7
& p6 k8 d( D' ]% ~0 L8 X) Q7 u8 i// 自减1(先赋值再减1)
* F; m1 v5 C2 e! K&gt; a--
  D; A- t) t* Y# x- d( f7
9 V# o: B0 N/ k3 d. u& j&gt; a/ O$ R9 n7 k3 P- \9 A6 H6 y4 Y3 r
6
: |$ W$ p! j" u+ g# i// 自增1(先增1再赋值)0 E% x" v5 x  P) `2 P
&gt; ++a
% N3 x: f2 N' L: V; V+ r* T  U7
" z$ {2 ~0 q: V6 ~" l, z4 r// 自减1(先减1再赋值)- ?) Y% N! v, r6 x" A/ ?- `
&gt; --a
' u, j* y3 s* A* y6
' Q, I/ P& \  e( _&gt; a9 y6 \/ h- |$ q
6
) O1 n% X! @, c! b) Z! r" t+ N3 m& K* x
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理! w4 O, G+ h  O
</code></pre>
2 g+ D( h! _, U<h4 id="242-比较运算符">2.4.2 比较运算符</h4>' N' O5 ?* I% v" s" j$ ~7 \
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
- F1 L$ A5 f; }<pre><code class="language-javascript">// 大于4 L- w) f3 U& W  }1 R4 K
&gt; a &gt; b0 B* M0 [$ j% H4 J  F7 }& p
true8 v/ p! l  F4 V" g! }( t
// 大于等于
# e. a$ e. k' G. B2 i( r! z( Y&gt; a &gt;= b
- ?: O& t' C" j6 a2 B! S* l$ Strue
& r. R1 x1 s& q: L) o. m// 小于  d; \7 g# g& |. [
&gt; a &lt; b
4 F8 q+ Z5 d' j5 vfalse
' k/ E$ S) d3 n5 Z// 小于等于
8 Y$ E4 K* G5 M( |&gt; a &lt;= b
% v* ^% v0 E0 q; H- Z+ E5 q7 i1 wfalse7 T/ T1 J4 m6 ^, V+ K
// 弱不等于
7 F  L% \1 D; H, g+ u: K&gt; a != b/ ^; e* B3 e. j3 ~/ z, F
true' Y# V' y( V- c
// 弱等于7 f" B* _5 r& ?
&gt; 1 == '1'
8 ~" [2 F; t0 e1 P% A# G/ f' w& `true
& n+ z/ f% Y. Y; \& E  \# c( O& P6 s// 强等于7 n1 t# z$ S( k5 H
&gt; 1 === '1'
0 _& K" v4 Z, a8 e, Dfalse/ Y5 t- a; u2 ?& R) R
// 强不等于- D& d) g$ y1 j2 b
&gt; 1 !== '1'" A7 q  S8 \1 W) K/ X% Q4 H8 m
true
/ M) r6 p* Y6 D" c( T
) A' `) I0 i/ l9 }7 k3 G3 O8 W/*7 w$ G1 N9 t1 r0 U
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误* \2 k: a5 R: r5 ~, T
*/& m) d* T; ?- c& l! Y' B; s6 p
</code></pre>
8 T3 L/ s1 O2 X7 k3 m9 S<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( K, e+ r. \+ d2 N! D<p><code>&amp;&amp; || !</code></p>, v- O% }+ D- H- ?5 s; V9 X; Y
<pre><code class="language-javascript">&amp;&amp; 与
& {0 |" o8 \& e/ c|| or
3 {/ ]3 \. k9 U" @: ^  L! 非% ?4 j4 \1 ]" i0 E% L/ ?$ y
</code></pre>; U2 C& l( U& J+ Q
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
8 \4 Q$ }! B8 T! L<p><code>= += -= *= /=</code></p>
: c5 v1 i. p. X7 G! Y' T  A<pre><code class="language-javascript">// 赋值5 S6 p6 e& L2 B- p# N  a
&gt; var x = 3! Z5 @: W+ o; E1 s5 g1 w" H
// 加等于+ L, L/ |* r! Z' j/ s4 a$ j
&gt; x += 29 f7 Q' S5 B8 ^) z0 Z7 e
5
9 J+ e9 B1 z& m8 G// 减等于
# I- \# c, n: X! b$ D. l& F&gt; x -= 1- f8 Z5 w! I7 F5 C1 ?
4
4 O- d: U" k  i// 乘等于
' x" O: h! R+ Q6 I&gt; x *= 2
) G& x6 ^+ n* a7 f9 @8; i" D3 Q0 F2 y
// 除等于
9 J8 j) B, y; [8 Y1 M4 u7 V&gt; x /= 2- k2 ]# @2 J$ b- P
4
* j2 |" _8 Y& B& }0 Z2 u</code></pre>
9 `& B9 P7 ]! E& }3 n5 \5 S4 |& ]<h3 id="25-流程控制">2.5 流程控制</h3>* Q/ ^2 l6 g3 B7 i! G+ z
<h4 id="251-if">2.5.1 if</h4>
7 u2 ?! s6 z3 ]% i) o3 O9 i<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
& T, t. o9 V; m2 a9 c! m1 U2 o2 M$ n7 x- K8 i& b
&gt; var x = 3* V' W( _; n* Q' r9 U2 t9 h$ j
&gt; if (x &gt; 2){console.log("OK")}+ ^6 o  ~& F# s1 c, C6 t9 |
OK
) i7 p) G! P8 v8 w& _8 ]' Y
5 H+ Y7 Q# K4 ?- X) {+ t, t  b2, if(条件){条件成立执行代码} # F- Z. f, C$ G8 K! Y: y2 R+ a( s
        else{条件不成立执行代码}& G+ r) ^" o: i7 a9 z3 h  y7 U, k
3 H* p( |8 U/ e( ^5 \7 j$ T) l
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}/ N6 {  y5 k6 J- p
'NO'
! B) J3 w; i) \( x& e
8 f/ K; U; {% z+ t0 f8 h3, if(条件1){条件1成立执行代码} # j$ i# L: v- E1 Z
        else if(条件2){条件2成立执行代码}
2 ?; W' h' O3 P2 c5 o! [% Z    else{上面条件都不成立执行代码}9 X* \, l7 ]! E, |' h

7 Q8 g* {. Z$ _&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
7 ~( w+ n) V* W/ r' P9 U Ha
3 {7 o: d1 S+ q! k1 C2 u* L</code></pre>! ~" b: m/ }2 V% ^
<h4 id="252-switch">2.5.2 switch</h4>4 {- s- T& p; W8 v$ k
<pre><code class="language-javascript">var day = new Date().getDay();
3 |0 E( a) ~5 qswitch (day) {5 p" f! t- D! m
  case 0:
$ K; _3 _" A. A  console.log("Sunday");: W) M& I! k5 Y
  break;2 c: z' y* [. B" ]- R6 e1 M- h
  case 1:7 y* L5 K" X9 F
  console.log("Monday");
0 Q2 x! g3 o) d2 I- k  break;9 ~. |8 |# p) q( u: C8 @. R2 u
default:
) X) u, i1 u3 b8 f. C  console.log("不在范围"), ^* q& C1 Z8 q1 w- x3 U
}5 ~, a" P$ ^  q
不在范围: R4 O6 _7 x4 `8 z5 e, V
</code></pre>
+ {# s+ z+ }6 y6 q# g" ^7 A<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
- M% i; I, F- F<h4 id="253-for">2.5.3 for</h4>
2 n7 E+ F) E5 O2 X<pre><code class="language-python">// for 循环
* c7 a3 X  f$ E0 b) r        for(起始值;循环条件;每次循环后执行的操作){
3 ?3 _9 T6 A2 _7 T6 w        for循环体代码
( \! `/ E, L7 j3 w    }
6 U& `& V1 s' q' ~5 e- J' p: v" C) Z! o4 S' R
for (var i = 0; i&lt;10; i++){
% o; {8 l1 y9 _# P% t    console.log(i)4 }5 R% U, f% J8 @' U0 ~1 @
}, ^) t  N2 F+ g- i" m+ e
        0
& g6 X5 ~+ q6 I' }; U4 U& V        1
2 v2 f4 j9 [7 R, c( q' ~        2
8 U0 i0 W9 B% V9 V( j& x        37 }* k" ~: I# {0 M; ]2 l- [
        4
- S& V+ V8 `5 \# N8 o) r        5
" N; Z6 V7 l# q, m# D        6
5 W$ f7 f' K8 g% c) i1 v        7- y% `* ?- g6 l4 s
        8" r6 T6 v5 e7 n; H# C
        9
- Z( c- n6 Z, Z5 |* V' W$ C</code></pre>1 Z! f9 |  t1 f( l$ ~7 G7 E) i0 g2 K
<h4 id="254-while">2.5.4 while</h4>6 ^. J. `2 }) R
<pre><code class="language-javascript">// while 循环- R, n2 d: D4 L5 J3 g! }) C
        while(循环条件){+ v, w1 d0 J7 _8 Z
        循环体代码3 I+ V; t9 N7 M! N" m/ n
    }' e0 h" T( Y/ k# C' D0 j

$ H" U* V4 `% D  N7 X# e&gt; var i = 0
$ X, _1 G6 [7 q. ?&gt; while(i&lt;10){3 h0 V# L1 x' P( s
    console.log(i)0 Y, s2 A3 N5 X1 V9 f9 p, p& l
    i++
" a5 f* `; b0 A$ t1 R! l4 G}" W/ w9 F; |- J5 h
0
1 r* w+ L4 }" a! W 1% [  J  d7 h$ }
2
0 f8 `* j6 ]  F; \% O* k4 Z 3
. Q5 @' R9 ^9 }' c! j* C 4
! J. p5 u8 J; n4 L% L5 p 5
% n3 R0 M5 E5 \1 T8 J. v 6+ D  t( `& U* e% c, v! L4 j4 I9 M4 T
7, j1 C2 ~' w0 H5 D" E
8
7 e5 A1 R! I( b9 v5 l: u 9( i% n: K" a, f( ]
</code></pre>
: j- T4 N1 M0 i$ b3 s3 J<h4 id="255-break和continue">2.5.5 break和continue</h4>4 F4 M9 {6 P: `2 i( |# K
<pre><code class="language-javascript">// break$ p3 m5 X$ F. U
for (var i = 0; i&lt;10; i++){
; \( f1 x+ M6 @3 o% l% B+ L4 o    if (i == 5){break}0 s( t" f. m* J, q
    console.log(i)
1 z  p2 N0 \- Q! Q) I}
2 g. n1 g* @/ F/ H9 R 0
7 O0 z! i3 `1 o0 Z6 J# { 1
! X" U& T  x5 O; w; T. L# |. \( A 2
7 T! `" V+ G' P$ |/ d 31 W6 b$ ?) W* c! U# Y
4
, I2 ^4 k; Z  P0 n// continue9 a$ j4 {/ [# m& X/ z6 b
for (var i = 0; i&lt;10; i++){
! s; T  x6 J2 [, I. {. i- C! `    if (i == 5){continue}4 l0 W# M! |4 E/ E3 ]  E
    console.log(i)
( v' c3 x* d' ?% N4 g}. _9 g! @4 ?2 r" g# j' j4 F, s
0, J) M4 m: V1 q5 R9 W! j- W
1
$ D$ }8 l8 G3 J 2  S7 B7 r6 j2 G/ r+ U8 _: J5 ?- @
3
, }6 ^, o0 V/ z( o 4, W- s7 N4 A9 m, u* Y
6
- ^5 f. x  Y9 ?4 Q; w+ i 7% N4 O* d) z1 y( ^9 l6 x9 u2 g
8
  J/ i( ]! M: g" ] 9& n5 F; r0 z7 v2 D' |1 s- |

% ^. \7 @' B. y' E7 a$ A5 ~</code></pre>
, S7 A1 B1 J( {9 u<h3 id="26-三元运算">2.6 三元运算</h3>
' V8 O" B/ V) ?  z<pre><code class="language-javascript">&gt; a- w0 e' u8 z1 o& D& |& x
69 q3 S! b9 A; A# u- [" K  J$ b& \: r
&gt; b
! p  L, U2 D' B3
6 v  g4 Z+ z! `* U. i
+ C/ f4 c- d4 g9 Q# V- M//条件成立c为a的值,不成立c为b的值
% w: T* G7 W( P: E&gt; var c = a &gt; b ? a : b
0 v0 g" Y, j: J( {3 Q4 _9 Z: s&gt; c) t0 H* A/ V& _" [5 p
6: h/ C. j# E  [. l) X" c
# v4 ]+ r. k( Q
// 三元运算可以嵌套: V+ J$ V( V8 {* z
</code></pre>( s* [. c9 }" i
<h3 id="27-函数">2.7 函数</h3>
7 W1 i' E& C0 e# Q( b<pre><code class="language-javascript">1. 普通函数
& z' v  b: R2 j6 t$ j9 V&gt; function foo1(){
/ x; @9 C3 [  s8 m3 K* {    console.log("Hi")& ~+ k2 m; Q3 K) G# v: w
}, m; E3 P7 ?% X. ]$ @

7 K& d3 I; E# {3 V- {& y&gt; foo1()2 o7 p' k6 n  p) |" M
        Hi/ B+ x8 n( z6 Y; N' z
2. 带参数函数
% Q5 Z( W- I$ e6 h&gt; function foo1(name){
" R- r* [3 X! Z. w' U, Wconsole.log("Hi",name)
& d! y0 C# ?$ E" r& A. s. p; O}& j' p  j; T% g3 b: D! z: k) h# G

- Y. F! n7 P7 c&gt; foo1("Hans")
3 G. s5 m0 M6 S# x! d( p/ XHi Hans
5 U$ y5 p4 F, {: |
5 F/ g% x1 M( J&gt; var name = "Hello"8 b: P# ]% s& @
&gt; foo1(name)+ c+ M$ n6 O, _% ^2 L
Hi Hello
+ n6 ?+ x% l& S* `
0 U9 ^4 L' B* L5 H& |0 Y3. 带返回值函数$ F8 b* X- o9 c% q+ M
&gt; function foo1(a,b){
; Q5 A7 L1 F( ~6 D: D0 y        return a + b   
: }* ~0 a- L. z}
# C& [2 `4 F$ y1 S6 N' }* `&gt; foo1(1,2)
, A/ G! N4 d# k, x  ~8 d33 o% H; I* r, k0 Q2 `
&gt; var a = foo1(10,20)  //接受函数返回值
; u  B: @1 M/ ]4 w9 ~1 Z2 I& l&gt; a
7 P' Z  F' G. i6 `: U, J& {309 |( U% s' |6 c# c; v0 b+ D
+ _" n% l: ~9 t; v! N
4. 匿名函数
' s& ^, i3 ^! M: O&gt; var sum = function(a, b){: a, T5 b8 I* f( V1 l
  return a + b;, H: h' e4 J+ E7 }$ P
}, O. \) `- v2 m# `& H, d% P8 S
&gt; sum(1,2)
/ Z# D2 N3 B! b) J) [4 Y; U2 I33 H$ M9 e! C, i; Y  S

4 \2 g- @9 R( |3 J// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱2 m6 l" K6 W9 v: y8 i
&gt; (function(a, b){' |  J4 \/ U: Z! M4 a  N9 d" R# ?0 @
  return a + b
: p1 I+ k$ Q% A})(10, 20)
5 w5 ^; X. c* R, o$ b30; u% p# D$ v$ L2 [) Q  o5 {

# g' S' ~1 W6 U5 `4 x; \4 o1 ^5. 闭包函数
: w! B- D+ ^% }0 ~// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数0 ?7 B9 J4 G& m4 O& l" [' f& I
var city = "BJ"; \# i; ]! @6 K, `
function f(){
) i5 W! Z0 y8 g' k3 @    var city = "SH"( |  ]. b5 ]2 V% |' c
    function inner(){
: B9 v0 ]7 {( m3 ^& Z( V9 ^3 c! x        console.log(city)
5 ?) O/ r4 i) |* H; e4 ~1 e# l$ u: Q    }
( Z4 Y/ k* @- k9 E2 v' `    return inner
9 w8 |6 d' e3 M1 X/ C}6 ^5 r) B  W6 `1 N; _. ]1 S
var ret = f()2 l' d& C9 J( Z$ s/ ~/ @
ret()
+ C  l) P; e8 A6 K! G2 A, L6 |4 s执行结果:
0 o4 S( k3 H+ C" f6 ]SH
2 q% E( E7 O# I' e8 h" {: c( M1 d: F7 s" N. e0 I( s
</code></pre>
3 f% |8 T# }: r( [4 G& L; R<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
" J" _8 x, N% J5 m0 T6 L! q<pre><code class="language-javascript">var f = v =&gt; v;% g  [" Z1 r/ u' i3 _
// 等同于
; D8 ^- z& _4 ]& e" C  qvar f = function(v){
8 f8 W7 ]% L) G: M  W" U# m1 J  return v;& U# p8 G- u6 Z7 C
}0 u6 h7 \2 S# _7 \  h7 n
</code></pre>1 j) [* |- @3 n0 l" F: t) f
<p><code>arguments</code>参数 可以获取传入的所有数据</p>0 m$ l0 {0 o- Z- h- D' c! M
<pre><code class="language-javascript">function foo1(a,b){1 k, D2 B. I  C
    console.log(arguments.length)  //参数的个数
1 w  I4 H  D: z7 ~6 y8 [9 L    console.log(arguments[0]) // 第一个参数的值
; t1 ?1 x( g+ N8 k        return a + b   
% x+ ?6 B: G: b$ b}+ m$ m1 ^+ @4 E3 B* C  m  D" r
foo1(10,20)
4 @1 x& z9 z# T) Q4 N, C结果:% C- E! R9 w6 r5 k- @- O: G  b7 W1 j
2          //参数的个数
. u  F7 I8 [7 H* F$ y' j9 G! y10        // 第一个参数的值
8 B  e0 S& m& p# {$ |" \30        // 返回相加的结果/ P3 ^: W2 [- I  U9 y$ F$ ^/ W0 ~
</code></pre>/ S- v7 P( c, F1 m( z
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( H6 v( F1 P9 r<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
* j6 H6 g* T  l" t1 k<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% _7 @* T- A! r! H
<h4 id="281-date对象">2.8.1 Date对象</h4>
8 `4 T! d+ |7 B7 ?# D<pre><code class="language-javascript">&gt; var data_test = new Date(). |: x% a! H9 T' a% h
&gt; data_test
4 P, W! k) v4 @; kFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
! P% ~+ ~) L7 e&gt; data_test.toLocaleString()3 h, [- h" y5 u+ j
'2022/2/11 下午9:44:43'6 I) A( z8 K9 S7 f9 k# H9 M7 u

+ E2 I6 ~1 _8 A6 H$ u&gt; data_test.toLocaleDateString()
8 t( H; U3 U" P6 C9 S/ |'2022/2/11', H# ?7 u; z7 H
( ]+ K2 q- Y8 m5 b/ u
&gt; var data_test2  = new Date("2022/2/11 9:44:43")0 l# N. z. D3 @
&gt; data_test2.toLocaleString()
  J- ]7 y: a7 G1 W" o6 i* @0 X8 g'2022/2/11 上午9:44:43'$ z  }- c( G% [
( G# \9 u) }0 T0 [' Q5 B. {
// 获取当前几号! N9 s( \* F7 |5 m6 I' Q) Q7 X% q5 r
&gt; data_test.getDate()
0 x: n& b' l) Q! s- D- o11
! @/ n4 r( e( F7 \: t// 获取星期几,数字表示
- s# W8 V3 ]& a# d&gt; data_test.getDay()  
/ Q) V  i6 ~5 p2 H' f7 E, P5! O, @" g- v+ o+ P0 ^4 }# u7 }
// 获取月份(0-11)
9 e9 L. N9 D, p8 ~9 @, ~$ K&gt; data_test.getMonth()6 R" H% G) r: K) S
1& J8 F) f2 a! k* f* {) H
// 获取完整年份$ ]7 e' @# [, R0 i
&gt; data_test.getFullYear()* w- a& W* l/ M% z
2022
5 [. E1 g' \5 J// 获取时4 ~8 R1 F( X- K# c5 `
&gt; data_test.getHours()
- `( S3 R! L- ^6 |7 J" T* @21
- X' O1 u! @% t; X* E$ A( x// 获取分
: W# _$ n; p1 B7 C; h! Y&gt; data_test.getMinutes()5 L5 W# k0 z6 E+ u  R1 _
44% H( ~# n( I  c* D6 @8 J1 i4 e
// 获取秒: i; A6 D" {* o% L: y- H- g
&gt; data_test.getSeconds()  C  I9 ^0 ^( X0 b  P
43
( F+ |3 H' w9 R3 V' f// 获取毫秒9 Q2 [7 ~3 F5 C( F6 z5 Q" |
&gt; data_test.getMilliseconds()6 [2 _. ^7 u( i7 x$ W
2905 e; c  n) P9 p
// 获取时间戳: L2 R  z6 s, f7 W: V$ G9 N) v& r
&gt; data_test.getTime()
/ _9 |" g# l- Z5 a% I( b1644587083290, R1 e& ]. R2 _/ I2 q4 b3 s4 ?% W3 P
</code></pre>
, [3 j1 g  C( k1 Q6 t$ z<h4 id="282-json对象">2.8.2 Json对象</h4>1 w4 Y: H7 G8 R, i9 O) X) v' q, W
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ q$ r. o' i: S' Y8 a! `JSON.parse()  // 反序列化,把JSON字符串转换成对象2 \6 {+ ^5 L3 Q; V3 g. W% l

4 _' B8 @, n" ~// 序列化
) A+ R* S8 [$ U* c* w3 k&gt; var jstojson = JSON.stringify(person)
5 R" w4 u3 C* a4 ^  K5 v% v1 Y: x&gt; jstojson  
4 @: y( `' R, y+ U'{"Name":"Hans","Age":18}'
7 f5 a. d5 |: I* j1 ^) O7 O5 q6 t0 d3 d
// 反序列化+ F: j/ V$ q0 i' _
&gt; var x = JSON.parse(jstojson)
; C5 X: A: |( e, {# W&gt; x
+ |7 {: B/ u, S0 r9 B! T{Name: 'Hans', Age: 18}
9 B1 r0 V* e' k0 F&gt; x.Age9 b, O* E$ a5 r8 r+ ^
18
+ J9 f$ c( A& g</code></pre>& ^9 c! W( `- i
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>0 o. d% M# X) B. Z! }
<p>正则</p>. }/ G& E0 l+ r  |. b+ _
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ ^* V7 e8 n0 f9 ~
&gt; reg1
+ g, g9 ]# c; d: z% P3 x/ B! v+ J% z; \/^[a-zA-Z][a-zA-Z0-9]{4,7}/* G/ Q* ]$ x9 t( E
&gt; reg1.test("Hans666")) X2 _( f# V# U4 P& R7 Z
true
% L2 p3 h. o* C0 K
7 a5 [2 [* \7 B( _) O# r3 q( h&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
5 p9 w" ?  `. M8 F&gt; reg2, f1 `( S& u2 S5 p% ~
/^[a-zA-Z][a-zA-Z0-9]{4,7}/# y  s$ Y3 E4 N, x
&gt; reg2.test('Hasdfa')9 i$ [6 a/ u0 q8 B  I
true- f' D  y& G& p  g( r
" b  E- {; o; c  F
全局匹配:8 A8 Z, z  b2 F% [/ q! @
&gt; name2 i: G. S: L  ^* W+ B9 A
'Hello'
- B& v: B4 C& l* d&gt; name.match(/l/)
: m9 A7 ?* q- h$ \+ J3 J['l', index: 2, input: 'Hello', groups: undefined]6 U+ G& k- }8 b- s; L$ ]8 ]

6 Y8 i- D- @& T+ K0 r7 i! M&gt; name.match(/l/g)+ N9 I: n- q! a
(2)&nbsp;['l', 'l']& X$ C& I% D6 k6 p
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配* X7 r+ p' d) R( E
1 q: X9 J6 J% q! D3 \
全局匹配注意事项:
/ ]  C6 i0 R; l% `7 ?9 z3 T& s&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g: J0 B' n, R& p+ Q* Y
&gt; reg2.test('Hasdfa')' I+ e! \+ z# w; U- G+ E0 }" g
true
% i1 e7 R$ A# \7 E&gt;reg2.lastIndex;
) l  R- U: l7 g* q- ^$ J61 e- a: z1 F* N* _% W
&gt; reg2.test('Hasdfa')& U; @; Q( B( \: k
false, v" i; G( G, Z8 ]" f
&gt; reg2.lastIndex;
- s1 Z8 I* o& _; \2 u5 f4 Q( ~0. m, R% H) W' P' c9 ]$ H5 R$ T
&gt; reg2.test('Hasdfa')7 W% z- b( F0 g
true
5 H* l- o* {5 M1 G6 Z' }  x&gt; reg2.lastIndex;
  C8 t5 F' ]. r3 B6  z( [1 h; `. C- V
&gt; reg2.test('Hasdfa')" `1 [; x8 S6 |/ d) H
false
2 {$ u- h8 T$ N" Y- p. ?&gt; reg2.lastIndex;) d6 a. P0 T  \& O/ Y9 ~+ a
0: d4 ^  X; }) L1 H" }6 q/ t* D- F
// 全局匹配会有一个lastindex属性
6 W: }" s" N$ f&gt; reg2.test()
) o1 `) i& I( L& q! gfalse
0 \  u4 p: Y, R$ _& I7 O+ H&gt; reg2.test()
1 D/ q3 p  o) {* Otrue: ]9 k' s5 F  J1 H1 F6 W0 W
// 校验时不传参数默认传的是undefined
$ n* H+ M  x$ H, W% t% p</code></pre>8 A6 `3 B5 d* m. `7 m: A
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
4 X2 j4 m+ L4 u5 F3 ^& P+ d3 |<p>就相当于是<code>python</code>中的字典</p>, ~2 I+ G/ y, F% e9 J$ p
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}+ X9 Q& p& U* q; a" s# g) V
&gt; person
  W8 S$ w' B, D* t6 M9 C8 i) n{Name: 'Hans', Age: 18}- P  V& q/ F8 a) L
&gt; person.Name& z5 y9 A5 ^, q, t
'Hans'
: w4 B2 T/ Y  k. I# B$ f2 Y&gt; person["Name"]# n0 h2 s( Q* J
'Hans'
) |, L% H7 v& C, |( q/ e
+ B) X+ J) z0 @7 `# M! ^// 也可以使用new Object创建) H- V) j8 |$ _
&gt; var person2 = new Object()( n) {; r5 c' r4 i
&gt; person2.name = "Hello". v' C) g( Z" l" A; y
'Hello', `4 y2 a, G/ w! D0 ^( W
&gt; person2.age = 20+ V0 r/ O1 a* w; n- A
20' U: ~) C5 n* v7 B, \
</code></pre>
" A8 q0 \5 [5 d<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
. S* J3 B& t2 P* a<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>* w. J! x' ?/ r$ u5 M
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
+ y0 h% b0 l- g. P<h3 id="31-window-对象">3.1 window 对象</h3>
& D4 n+ H# n6 C<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>9 q! g$ d& z# R& T4 X
<pre><code class="language-python">//览器窗口的内部高度' z! S6 a2 Y6 p: [( H
window.innerHeight 4 m& Q0 n3 y/ O" W, I" h; E0 L6 b
7062 Y, T1 U* U# k& Z4 T3 r
//浏览器窗口的内部宽度
4 M, N" e/ r, dwindow.innerWidth) }  _2 ]! s6 {6 N0 J# W0 J, w
1522
3 G$ _  t; w& [3 t// 打开新窗口; H0 k; a9 i6 h: G; _, l
window.open('https://www.baidu.com')
: o( g* F8 T' k3 e' L9 pWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}* M/ o( q0 n7 j+ z6 T
// 关闭当前窗口$ S6 L8 }" D9 M7 e0 E
window.close() , v' ^  g, }8 w" Q& ?, ~9 \
//  后退一页: d# D) x5 I8 z0 e1 r! b2 R' @/ |
window.history.back()4 Q, `1 h1 o# A
// 前进一页$ b: g( _0 E. Y' r6 Z! i
window.history.forward() : ~- Y  X6 r* e- x5 O
//Web浏览器全称- P4 R) V7 o- R0 B3 n
window.navigator.appName3 f5 e( K: H7 G5 V& r2 X
'Netscape'
( ]# r- e9 e5 |: }- ]' z/ X// Web浏览器厂商和版本的详细字符串$ C- Z& R; U3 [9 }% I# k) `
window.navigator.appVersion
" k0 {1 w4 n: F' s7 n; v& S'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', W& D& `# A9 ?* {+ W$ M+ ?' U. g" u
// 客户端绝大部分信息
# u# B9 d1 `. D0 O! M5 X/ j. iwindow.navigator.userAgent" D/ `/ ^7 ^' ^4 f" C/ b
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
, [' X6 ?3 f; m  T& A// 浏览器运行所在的操作系统
- W. N3 Z% y: b* X5 @window.navigator.platform* \3 r. L/ o! Q. z
'Win32'% Z3 _6 K# \) U* X" z
/ `) [$ |7 p% M- d3 ^
//  获取URL, M. ]- I1 @: w7 m) G/ n6 @
window.location.href
5 T# r" H: Q- ^3 z& R- o' _) m) c// 跳转到指定页面
( W2 F* c; D- ~+ p4 y3 {window.location.href='https://www.baidu.com'6 m/ v  s; T3 p4 l
// 重新加载页面/ V9 Y% ^5 y' s  b
window.location.reload()
! m* H: s- T" o9 M7 f2 b</code></pre>
0 _" _6 I* x) W<h3 id="32-弹出框">3.2 弹出框</h3>
1 Q# h4 L, s5 {- Q<p>三种消息框:警告框、确认框、提示框。</p>+ ]) o. G; t" o1 d+ s/ H8 s
<h4 id="321-警告框">3.2.1 警告框</h4>
  E3 Z! z, ]; Q/ s8 ~<pre><code class="language-javascript">alert("Hello")
3 O# b' m  c: M# ]</code></pre>
+ M: f8 z/ p& n1 Y. R<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
% P' i1 Z# H' ^: @<h4 id="322-确认框">3.2.2 确认框</h4>6 J. l1 B0 z9 _
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>1 G- b: K3 a7 {) ^  c/ l+ |
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
* U! @, i& h, L0 [: u1 ctrue8 Q) x$ ]- m6 w* Q8 r. G: C5 s
&gt; confirm("你确定吗?")  // 点取消返回false# B8 L) b3 H$ n) I8 ]5 }: r% A( t" s
false
+ P, p: m, l! V# C</code></pre>, v3 ~5 v( t$ o9 q. Y
<h4 id="323-提示框">3.2.3 提示框</h4>
+ v( q2 ?, r) v4 j8 ]$ L6 x<p><code>prompt("请输入","提示")</code></p>7 H; V# Z  [+ {! m+ S
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>, U* t+ J# O0 G
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>/ r" [0 t; E4 Q: S( `
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>* U* L' X3 P' K1 v5 z: ]
<h3 id="33-计时相关">3.3 计时相关</h3>
9 M: _! G4 t3 p7 Q: S; s<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
. [3 ^7 g2 ?+ N) P1 X. b<pre><code class="language-javascript">// 等于3秒钟弹窗
3 ^2 j, a& V( G: u. M& wsetTimeout(function(){alert("Hello")}, 3000). k" H+ `$ t# |5 d- o

/ C2 K+ v+ |( y; i" Gvar t = setTimeout(function(){alert("Hello")}, 3000)
) s! m* Y- I2 B) _* d4 {3 ~* C  ^  H3 p" m) b5 `1 C7 P6 U
// 取消setTimeout设置
8 `4 n. ]. t% L/ ~( p, H3 rclearTimeout(t)
# z" B' j) e! l8 V, o' P( A# C$ {</code></pre>
' G4 k- {  x$ w4 O5 j<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
% l% N2 ]5 c! Q  U+ d; h<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>2 R1 I# H$ Q9 ]( }
<pre><code class="language-javascript">每三秒弹出 "hello" :
' h. p3 U& `# G1 n# g; B! ^- K  [* RsetInterval(function(){alert("Hello")},3000);# g/ ^/ Z& @: B0 O& v7 d% j( p
</code></pre>
" Z- |: M' x8 \$ N9 J: k<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
  P# t( w, L! Y9 k  p: m<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);. ]% ]( _( C  h  ?: e$ |( `; g0 b
//取消:% j+ w, q/ M: I8 w$ F
clearInterval(t)
1 A, m. F6 G+ s6 ~</code></pre>4 D6 b# h* R( s) b3 D5 g4 R6 G

7 R4 @* Z" \9 K6 j6 e+ t) u* E3 C
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-9-2 23:53 , Processed in 0.070433 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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