飞雪团队

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

前端之JavaScript

[复制链接]

7994

主题

8082

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26312
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
; T  g- W1 H" s( m
<h1 id="前端之javascript">前端之JavaScript</h1>6 \' V9 F8 B3 i/ X8 x
<p></p><p></p>
) t. P% }# n4 I<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
3 P  ]& }# N5 i. h5 v% Y  U<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>5 p7 P$ |% h, I
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
" F3 O8 h& a: `# N  Y它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>  ?+ H& ?" A  D, a
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>: F7 Z& p2 ?& A* N# D! @9 p1 ?
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
6 [. m, M2 E! G<h3 id="21-注释">2.1 注释</h3>
) D9 A1 e( ]0 k; A/ Y* N<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>3 O9 u2 c- m6 ]3 H* O. r+ [! _
<pre><code class="language-javascript">// 这是单行注释
( [0 \7 d; _% Q) r! ]! t3 ^8 g; V2 I. C9 D
/*
7 u% C) J6 n' R* q1 E/ `9 t这是多行注释的第一行,
, z9 B$ J. ^+ s: f7 s/ R这是第二行。6 D2 S5 Q& f1 F6 |' d3 B8 f, ]
*/
. R) R, j& s) o7 _/ i5 J</code></pre>
( k- @' P6 D8 ^. u<h3 id="22-变量和常量">2.2 变量和常量</h3>
/ C) p+ Y7 z) m5 W* O- n, y<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>9 Q  G- i+ I) L) Y
<ul>
. \- C8 d1 u- @' k9 N<li>变量必须以字母开头</li>- |: ^8 \& D8 O. q+ N: A9 W
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
0 u2 n1 y* V1 C- m1 w3 U<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>8 v! z2 z# b! b
</ul>
. H- y; S3 M& a+ m/ X/ Q3 w<p><code>var</code>定义的都为全局变量</p>: f: t; r) Y: G5 h
<p><code>let</code>可以声明局部变量</p>  `/ ?% h6 W& M  x2 ?
<p><strong>声明变量:</strong></p>9 N4 f0 d/ Y  x- T6 ~4 X  G& d1 q
<pre><code class="language-javascript">// 定义单个变量% g, |2 g4 l% a7 I) S, L0 X
&gt; var name
& }4 n) q# U8 O2 V&gt; name = 'Hans'+ O! M) i& m! j6 D/ u/ j
//定义并赋值
8 }: D2 T7 G. Q6 }&gt; var name = 'Hans'& S( G% u( |: C$ a& m% b/ u
&gt; name
- g& C. D. z0 [( h- X9 s'Hans'% v3 j+ E2 F- Z
6 y' l; k; f3 ?
// 定义多个变量
9 e2 D& e+ f" q&gt; var name = "Hans", age = 18
% G# ]! I: Y. x  p  F( G&gt; name
, V4 [) G, \* @/ j'Hans'1 C/ ~8 R) _) T: X
&gt; age) G+ D" ?' N" A5 z4 W4 z9 n1 l( _
18; ~5 A( ?0 m5 G

' q- S* h8 b1 c* p% \0 G2 b1 M5 R//多行使用反引号`` 类型python中的三引号. Z* v( L. ]: A# i
&gt; var text = `A young idler,
" S# ?+ f3 ?4 q* ?6 @( k; van old beggar`
) {& Y3 R! t' Z&gt; text% B9 ^9 B  ?/ O
'A young idler,\nan old beggar'
; n2 u" ~9 R. q8 c1 |/ o6 [</code></pre>* l& }& U: H: h4 y6 [; v! [+ b
<p><strong>声明常量:</strong></p>
) C. c9 q, H' v. a/ j- ]* }<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>4 h$ R6 v0 N' O1 f$ G( v/ ^
<pre><code class="language-javascript">&gt; const pi = 3.140 D$ Q* u( J0 f5 H- {) o# c" |
&gt; pi- w; m' u' o+ O, X8 K  N
3.14
! v& u: U! ^5 ^% G1 A&gt;  pi = 3.015 E4 n0 n" O) y8 a$ k9 ^3 N% u
Uncaught TypeError: Assignment to constant variable.
$ e5 `2 P+ b. b3 d- `# S    at &lt;anonymous&gt;:1:4
! _' U6 L2 y; r. |' ~3 `& P3 y; c$ T, n$ a( y' C4 p4 J
</code></pre>
# c5 G9 u) b& D<h3 id="23-基本数据类型">2.3 基本数据类型</h3>" K) x4 U8 i" h4 y2 ^1 q* y
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 p2 x4 P7 L# r<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>3 w4 h9 k% }) u- ~
<h4 id="231-number类型">2.3.1 Number类型</h4>) O7 J; C% r8 t% R$ N
<pre><code class="language-javascript">&gt; var a = 50 B5 a% @9 v' y4 {/ J
&gt; typeof a   //查看变量的类型  3 i& ^2 X6 S7 l! j4 ?
number/ J% q5 u# q. O/ ^0 X! j* m
3 J" j5 U# U" \* ?0 b) i# u. h5 G
&gt; var b = 1.3( M3 u' r& J1 j- d
&gt; typeof b! l2 _) i0 ~5 Q
number# ?" N* h2 H  O! R# `6 C
0 s) T2 W* [! Q+ y/ b3 m
// 不管整型还是浮点型打开出来的结果都是number类型
, S0 G/ _7 Y/ k6 D7 f  j4 x! T; B# Y0 |( ]; i
/*8 K) R. d- j" x# @2 h
NaN:Not A Number
9 K. T* c* ?& x7 v/ _! }/ lNaN属于数值类型 表示的意思是 不是一个数字
7 B' Q% p' S! l+ X7 i4 Y*/( d' N" s/ r8 C- z8 o) f# G( _

0 F$ E* t+ z/ J: t( ?) ], C" dparseInt('2345')  // 转整型. f" [2 ]8 j- I) l5 {/ c
23452 z! Q& S& |2 l
parseInt('2345.5')
1 G  H/ B, B4 X* _2345
' j/ c2 ?8 K8 T0 w) l. xparseFloat('2345.5') // 转浮点型- u$ Y, M$ R  ~- }
2345.5
9 t/ ]: D3 @% H! ^parseFloat('ABC')# l9 I' @* y7 ^) A  k- i
NaN
( L0 I- E1 S. j8 DparseInt('abc'); N( r: O9 r/ i8 ]+ C1 G
NaN( {2 {& Y3 H5 [' F6 v' T
</code></pre>0 Z. v3 g/ S6 w+ |. o/ ]: R
<h4 id="232-string类型">2.3.2 String类型</h4>8 Z3 f" t+ g4 }1 u
<pre><code class="language-javascript">&gt; var name = 'Hans'
0 D6 L& {$ `: U- [( n9 Z9 h&gt; typeof name7 k7 w# u1 e7 P* M/ N) W
'string'
; T$ ^% p, \. F
$ w7 {7 m  O. |' I" @: _+ P//常用方法
! N& {$ m$ }& i: `// 变量值长度6 H# z0 W$ Q" x3 G# @& X5 v2 C
&gt; name.length* [; t" N- s7 N' c: P! K2 O
4) u* v# R$ k* a) w
// trim() 移除空白* R, n0 r& H( ~
&gt; var a = '    ABC    '
9 N" G" L" Q0 ]&gt; a- s3 ^0 S& N( D! ?2 a( y4 S" \/ Y
'    ABC    '
3 r$ E: R& I7 A  q$ d&gt; a.trim()
$ j4 B; I7 F" J7 \* O# z'ABC'( Y9 E" N' }% N. C
//移除左边的空白- x- Z+ a; }) z% ^, t( `- |6 ~
&gt; a.trimLeft()
! s3 r1 E# S; |) P'ABC    ') g" q& T7 t$ h, }* n2 f5 r. G
//移除右边的空白
' R& Q, w) J$ U! T0 t# S&gt; a.trimRight()
1 F; B8 O7 Z. l5 k; [% z9 E% A- h'    ABC'
0 P2 C! f/ d$ l! B
1 s; i  I7 p: G# i9 |4 `//返回第n个字符,从0开始
4 B/ B  v( ~" y+ I/ _4 F+ V&gt; name
% m+ m* j! O2 e" g'Hans'$ u. E% e: |$ G" T! r! S
&gt; name.charAt(3)
! P5 W  I8 g) z, Z" }; p+ N's'
: n9 c) i9 b5 T. x&gt; name.charAt()! k0 I9 ^2 t" Y( B
'H'
$ p9 M0 N( Z$ i/ E5 I- A5 m&gt; name.charAt(1)
/ Y; n6 K2 t! L+ Y  }7 D'a'9 F6 D. W; Z6 y/ ?! |: j# h" F

7 |) h+ }- Z7 h// 在javascript中推荐使用加号(+)拼接
- S" a( O3 O3 r5 B/ R# h# V9 _&gt; name5 G/ J& @' k: @5 N
'Hans'2 {: z7 C8 j5 ~) F) l2 X$ K
&gt; a
* Z& h& h. M$ b9 e'    ABC    '
+ j6 n7 m) @, [" G' C&gt; name + a
4 d/ L, `; p: R4 S/ T'Hans    ABC    ': I/ V) O" d3 b  W- t
// 使用concat拼接
6 i  C- W2 J  A& F&gt; name.concat(a)
  Q7 }/ n  Q, z. B! s* X'Hans    ABC    '7 W( |: Y2 f# L! V" r$ j5 \; }
: z0 a' c' m. J) J! \
//indexOf(substring, start)子序列位置& k$ l0 a2 o; c7 i3 S
  I- Y% a9 a2 T
&gt; text- K! L9 v& j/ t" w( M+ _9 N
'A young idler,\nan old beggar'
4 u9 S) s; T0 i7 F3 H+ ?- L&gt; text.indexOf('young',0)# A! I) B  J& \7 ?  |; M' R$ P
2
8 R0 F4 D: w- A7 c: C3 K7 O8 ~* D' D( q) }' M' _+ r' Y8 W
//.substring(from, to)        根据索引获取子序列6 Q3 d: R' B2 X+ M
&gt; text.substring(0,)9 Q2 D4 a1 C) R5 P" ~
'A young idler,\nan old beggar'
9 O: g6 w* G) V. B1 U; x7 K&gt; text.substring(0,10)( L* o  a" M$ _' w
'A young id'
/ ?( j; L+ X! m3 l, g9 |
; D& F5 S* j: g/ E* L9 `// .slice(start, end)        切片, 从0开始顾头不顾尾& B8 M) V  j/ U0 T, K5 o, H
&gt; name.slice(0,3)( B- g0 ]) a% x5 c' t2 T
'Han'
# R) E& @! R1 X5 g( F+ {- w: C9 n1 C4 k
// 转小写( Z: I5 j/ a+ d4 y# b# a5 I7 c8 f* [
&gt; name$ w+ ?; F0 h/ F7 W+ q
'Hans'
+ r! y) k' R' w# h/ W&gt; name.toLowerCase()
* w2 r; A9 L+ f9 ]4 q7 g& B- P'hans'
9 L; m0 K3 a1 T: j// 转大写, B. b& }8 L, ?- d5 N
&gt; name.toUpperCase()
2 ]3 G0 w7 U' r7 }- f. z% Y'HANS'
$ X: f5 D! N. ?' m
* D3 e( H2 q7 p6 t// 分隔6 a$ r. z( [3 N3 E) R' ]. G. C! n
&gt; name9 a% e3 p5 v3 i) B' i+ }
'Hans'& j" B8 p& @$ Z% @& `/ a
&gt; name.split('a')
; U7 z  [/ _9 P* d# Q(2)&nbsp;['H', 'ns']
! r# D" R6 y, U/ M1 O& n</code></pre>, J& s1 ?9 l" h+ e* E5 h8 A# n
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
# C* k1 P' R) t" }: H  D7 s<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
# O$ Q7 |, L+ v<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
  ~" p+ S2 A2 f6 Y/ d# j, p% z/ d7 z7 r<p><strong>null和undefined</strong></p>
: I" l' S; z% g<ul>$ n$ a( J$ w: b) @
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>8 `( u" t+ p7 t4 o6 ?1 a/ ~
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
( d3 `0 s" ?. x) |6 b</ul>
1 W& M0 T. T+ ~<h4 id="234-array数组">2.3.4 Array数组</h4>
( P4 k+ a  X) b; q( L: ~<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>7 ?4 ^4 d) w: _7 W0 O. ]
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
2 ^* I; x* n' ~' p&gt; array1' W! b3 v# e! @+ i" |3 f+ Z$ W
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. c! c. H+ O9 S" f- p&gt; console.log(array1[2])  //console.log打印类似python中的print) {; x4 E' Z! n8 B4 E
38 D3 r4 y( [- t) n$ ]. E! m' d: ^. F
// length元素个数
7 X; e7 [: u: I% X5 d' }* O&gt; array1.length" ~3 n& G* L1 m; f9 ?
6
  f4 p( s$ k2 F// 在尾部增加元素,类型append
5 q- \6 n8 k8 V9 [. O&gt; array1.push('D')
1 M8 p- R5 k; X5 M  q7
( s2 {+ {$ v3 k. `&gt; array1- D# _$ ?5 C! ?1 F7 {
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
5 l' Y3 Z; t5 N% t" c# F1 S// 在头部增加元素
; l; Z' G% L3 w  _/ h&gt; array1.unshift(0)
& }; z0 c4 f$ P5 [" a" M5 |8; h8 Y6 Z" Y: z5 z& k) r
&gt; array1  H4 F# a5 V# Q% x. g4 z
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']1 a: c/ z1 F( [& e3 j5 L
+ T# S: P) e" j4 Y$ {
//取最后一个元素3 t: m& h& A0 p5 E( N4 G! g  y+ L+ U
&gt; array1.pop()( S$ A! F% n) O+ K8 Q$ x
'D'
& Z# ?4 Q3 X/ F8 O& C+ C&gt; array1
- H% e5 @% K& |(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']5 [3 {' U. b8 z% y9 ^+ B( }
//取头部元素1 ^9 t  @3 `9 g0 ^. L' n
&gt; array1.shift()% u' q8 \, Z7 Z) L9 p
0$ h0 N+ W* n& Q7 @
&gt; array1$ v5 h; |, I2 Q% L
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ Y& g9 i1 b' }4 i" K
' |( L! t; d; ~3 R$ W//切片, 从0开始顾头不顾尾
4 q/ \7 q# i! e&gt; array1.slice(3,6)/ T) ]: p( y2 q' ~. n
(3)&nbsp;['a', 'b', 'c']4 y% f, `1 a& Y8 j" Z  r
// 反转
4 c, ^, w& z0 K7 I. A&gt; array1.reverse()7 m1 N' A' f1 e% K7 c) p
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
' o: N& [/ ~% M: E// 将数组元素连接成字符串
: i+ `0 [$ C) ~$ t4 W8 S&gt; array1.join() // 什么不都写默认使用逗号分隔: i9 a/ b, I/ d" B& I" _4 `
'c,b,a,3,2,1'
3 h9 _7 P7 M+ K$ C  w- n3 S1 c&gt; array1.join('')- M: ?  N% D9 S5 j7 w0 x
'cba321'
( o/ _7 B* W2 K5 V&gt; array1.join('|')$ j- N4 e- G! u; ?# C) Q: ~% [
'c|b|a|3|2|1'/ C& P" @- h9 M. \, c# N0 Q
7 G! y/ u5 w& K
// 连接数组! i2 ]9 W- |9 Z2 O: Z: S3 T
&gt; var array2 = ['A','B','C']
! s( ?0 b6 E2 [& n+ i; W&gt; array1.concat(array2)1 J  e! f% [3 N
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']) L3 D( [  v" ]7 G
7 H9 A% @- S8 L. f/ K% I  P  J
// 排序) ~0 _: _$ P& G/ q/ G8 M
&gt; array1.sort()
3 R& n( ^) j8 {8 V(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
1 x7 A) ]9 P; w3 l1 V
6 @9 U& r% ]" V3 v: Y// 删除元素,并可以向数据组中添加新元素(可选)5 d# M, E- f+ }' B
&gt; array1.splice(3,3)  // 删除元素
/ s9 g' ]- i' _(3)&nbsp;['a', 'b', 'c']
6 f6 _7 _5 \, a) y5 S4 A1 Q&gt; array1" {. i. J1 ?; j' i
(3)&nbsp;[1, 2, 3]& e9 s7 D. q! E! \8 A
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素6 z8 m) a2 v- V$ S8 E* i. n
[], I' ]  y* E5 |2 S+ X9 D
&gt; array1  G  i* f* [0 m# e0 p5 _
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']6 B! j6 D1 X1 p2 ^* u9 G  x! r

* b- G6 B; W& s/*
: |# u: Y' x) I" y5 P$ D7 Ssplice(index,howmany,item1,.....,itemX). }  _/ @% `4 A7 U; X5 `# ~
index:必需,必须是数字。规定从何处添加/删除元素。
0 x$ V! I- a+ d' V' H) m4 ]howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
9 t9 [1 |) G/ f4 J" ]5 h5 l5 [; v, a: ritem1, ..., itemX        可选。要添加到数组的新元素: @5 n# a- C  R; u, \  c
*/
( _! b3 o" {9 i
; e% T# a$ B7 e4 P// forEach()        将数组的每个元素传递给回调函数4 E: s4 L7 S" w) F) O) p
&gt; array1.forEach(function test(n){console.log(n)})
- Q+ k1 k* h# a# h 1
, q2 j6 \0 u; `( a, I3 t 2
. v; E7 h9 }4 c 3
5 j& F8 F  B8 T4 V: y7 H$ b A
) S" X% U; q5 Z! p B
/ q/ W' Q( |) d0 e) c( q! w C7 I; P8 D% u3 o# [" p* e
// 返回一个数组元素调用函数处理后的值的新数组
9 K/ t7 _' A1 u3 o- G% ?1 c&gt; array1.map(function(value){return value +1})9 N, x* I' G7 J: n
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']: X0 Q9 ~" z2 I1 S: Y. E
</code></pre>, I" Q. h# p; o/ q/ {. p
<h3 id="24-运算符">2.4 运算符</h3>
/ r: M: ^& a2 J: L" k' i+ X' v<h4 id="241-数学运算符">2.4.1 数学运算符</h4>$ W0 X; i3 ?' W+ G( m- F+ ~
<p><code>+ - * / % ++ --</code></p>
/ H4 n9 @+ o1 U<pre><code class="language-javascript">&gt; var a = 6
  K# z# T+ P& m- F' |&gt; var b = 3
3 n. o' Y4 o  j8 K+ h3 P, X// 加$ ?0 G( E% L: ^3 ]8 ?4 T, G+ A
&gt; a + b
" }% g* m( o2 a8 b9
3 P% k6 b& t( v4 P$ {2 D. _// 减
& J; t! k5 j& w" g- ~/ d8 n6 L, D&gt; a - b' s$ |' J* w" ~% M5 I1 l6 V7 D
3/ `( j" b, w* ~) ^; k& q9 z: d  `
// 乘
4 V1 g; U( Q' c9 h1 H1 f, ]+ V&gt; a * b- U! b+ }! i( N, ?  I( c
18
9 Z8 N1 t1 n7 \: K& p// 除
, a; t% r/ M* Q9 r5 J" ^5 H0 a! S" m&gt; a / b1 a2 A& `4 R2 Y% N
2$ X7 Y2 g+ t: i( e
// 取模(取余)
3 ?: C1 F) X, _1 W/ J&gt; a % b
. h# y0 `8 X/ ]" Z) f+ M: o! ^0: b( p7 ]& F0 L) s
// 自增1(先赋值再增1)
6 O( c# [9 k% R( C4 X+ K&gt; a++
9 `& b2 U" K( o2 q' V8 l9 c6
& n+ q& J  m/ z4 S( ^' z&gt; a4 \7 L$ C" t3 E% S4 ~
7" h9 p/ Q7 x: r6 L- E
// 自减1(先赋值再减1), I% c. H, V) f& r& t/ R, J
&gt; a--9 F* {7 \$ S2 ?  m5 ~
7
3 K7 ^8 a$ H4 ]&gt; a
. l1 e7 T1 B/ |, a; |! t  V6( }- V: }; C8 e( V
// 自增1(先增1再赋值)$ o9 |' U5 j1 ]( r8 a
&gt; ++a/ r5 A5 T1 V- G5 n
7
- m" e6 K# }$ W* l// 自减1(先减1再赋值)3 [4 L! G: Z1 p; x( O1 I; a
&gt; --a
( @7 H0 h+ F! _6
" O' I  v# w" Y( S9 [# j% d&gt; a$ H/ h% e8 o  r" W& W  m0 R
6
" I1 L6 {5 f  Y* ]5 X+ ^) l; A+ h3 d! z) a& V9 V
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
' e/ Y$ X4 q" R</code></pre>: D; J# K% F: J8 E. a' k
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>7 N3 g, }, f% ^% B' w2 K
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
1 Z& Q" I6 s/ m9 w<pre><code class="language-javascript">// 大于. t# _/ q2 e7 J/ I
&gt; a &gt; b
  G) `! f( x% ~3 g. B7 g/ utrue
/ Y4 h" C* Q& E, h$ _" _( U// 大于等于
1 `) u9 a! a- i4 o1 W5 s&gt; a &gt;= b; j7 u( K. ~6 l& A, G
true
- k" L2 }5 f. X' p) R$ J6 ~// 小于+ O8 d) I8 m# N3 z2 N/ Y2 E
&gt; a &lt; b, O% d& Q' R# V3 @0 k% w  D
false
, D, D' E; Q) i& X6 Y; C% b// 小于等于
7 k/ k" }) P, M8 C1 V&gt; a &lt;= b: Y8 |+ |$ c; ?/ m/ b2 W
false
  V1 @! a1 r- ]% i5 D// 弱不等于; Z; O0 J! J! v: f' B$ ?, A0 p9 s0 _% E
&gt; a != b
; K% s& o- g) G: O5 i0 L3 Otrue" h! G' S0 v5 c8 E
// 弱等于* E- l  r% [" d! f  B/ v3 E
&gt; 1 == '1'9 n6 g# Z: R. q) d" P
true
* p/ S! z3 k1 g" V! g0 Q// 强等于9 _$ o/ V3 V5 i+ ]" E. x
&gt; 1 === '1'+ x+ v' o7 g% a) f  v6 e
false
+ [& I3 e7 |7 U8 ?) z" R$ E" g// 强不等于6 d6 ], U: _8 g2 o. e
&gt; 1 !== '1'
! Y. o  R' a4 G4 M. l4 ^9 v7 Dtrue4 |& ]9 Z1 R! r; i8 M+ N  E: L

( X/ K: b: D$ W$ l" T0 x$ Z/*
8 x, E5 E! m. d) J- v% iJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
, p+ {' Y# U: S" X! J*/
" K1 x. N* U' C' T8 M7 b5 B</code></pre>0 V3 K3 b3 R0 y7 q  Y
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
3 F; B3 ]9 x1 b1 b4 e6 l( u7 V<p><code>&amp;&amp; || !</code></p>
' y' z! i% U# W% u4 w9 K<pre><code class="language-javascript">&amp;&amp; 与* T" e9 h( Y, Z! a: e& d3 d% U
|| or
$ `% }* q8 \0 F6 Y! 非
5 {7 n( B2 a  |- _6 V* A</code></pre>1 D4 e( x, g% x/ Y  e
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
' Q8 x0 K. E6 s) d) J<p><code>= += -= *= /=</code></p>
4 N+ v6 o9 N( X8 ~' K7 i# J<pre><code class="language-javascript">// 赋值
; I( E3 C$ u( ]6 i&gt; var x = 3
4 S. U$ d# m6 G8 o2 [// 加等于: w) }  I8 `, @- ~- z
&gt; x += 26 u6 B  {7 x3 ?2 l, M
5
3 N  R, m% F1 {* B// 减等于) A" B4 U9 m# x% c3 W8 D
&gt; x -= 1* g$ K' ]$ K+ B
4
- M- ~! Z+ e8 [; o// 乘等于
. F1 m1 ~, z; N$ R+ E&gt; x *= 2. x% D" M  x) x6 H
8& _* x# G. t3 o/ E( L
// 除等于5 y8 A& W/ v- k5 y" Z" b8 }
&gt; x /= 2
7 A1 \2 p* u" f2 s4 x- h% O) `: t  v" O7 G4
  e# ~6 D. `; B</code></pre>
3 a5 @; o/ I7 T4 C0 @<h3 id="25-流程控制">2.5 流程控制</h3>
7 O. E! X2 G6 u<h4 id="251-if">2.5.1 if</h4>) j4 Y% I! o4 T5 Z
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}- b, W( X! C& R9 H1 x

2 P4 ]( J; Y+ r! P7 K" X1 ?&gt; var x = 30 r1 u; G9 z4 H4 N( M' ]5 q
&gt; if (x &gt; 2){console.log("OK")}: p- y; @5 F' s  H4 J; f2 U
OK# `9 m4 L1 o; A4 @+ O/ X- h
3 J1 L3 x5 o1 E4 ]5 G
2, if(条件){条件成立执行代码} / f! l" t5 C& F
        else{条件不成立执行代码}
4 K/ ]8 Z+ D/ }5 p/ l  `! V: p& g$ G: H' p6 t+ o
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
% U; i$ {' W" W! ]. e/ q  L1 q- Z, z'NO'
: ~+ @9 J4 J1 c0 A$ ^8 u6 ^) M! X" B2 i7 y# |
3, if(条件1){条件1成立执行代码}
, Z' Z6 {, H% ~        else if(条件2){条件2成立执行代码}( k8 r1 ~0 V0 \* {9 r
    else{上面条件都不成立执行代码}/ P" u/ o- D! q7 P4 l8 k
! Y9 y3 d: C1 O5 Z; p# [
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}! C9 X, n$ s$ W
Ha& ~  c" A9 D' ~1 n* q" |& h' ?
</code></pre>- m5 M5 d+ k3 h
<h4 id="252-switch">2.5.2 switch</h4>& ^2 [2 ^" T- m% d3 T; \: }
<pre><code class="language-javascript">var day = new Date().getDay();( V! @5 p6 G4 b! Q8 J7 W0 L
switch (day) {
% A& q/ y' Z4 b; E1 _  case 0:6 }% X6 O3 D0 u; c; k9 X9 {
  console.log("Sunday");' t# K$ J  y8 c
  break;
! ^; a# X, w- K  case 1:* C+ f/ U1 C) @/ \; x2 [- J2 w  A
  console.log("Monday");* u& v" T0 @# z9 X
  break;: i& Z1 [/ a/ Q" F
default:
/ p4 i/ g7 Q5 d0 i! z  console.log("不在范围")
# J* j+ ?# M/ d6 J, O}
, ^# Z4 ^! u% v3 h6 g  @ 不在范围
9 x; l% |! P: m</code></pre>' g/ X( H1 X$ u" L* w: p
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>; a# d, r# J# b( `
<h4 id="253-for">2.5.3 for</h4>" ]8 x8 G# m, K& K( ^, s
<pre><code class="language-python">// for 循环
/ @" K  s" E' O* M        for(起始值;循环条件;每次循环后执行的操作){
4 W. [' V6 F9 m1 H; I, N( q        for循环体代码
: s  |' l# o4 v% N5 s# Q    }
! G6 f( A1 Q, E/ e; w# n; m+ z
7 x# M& M8 e3 V2 m& ]  y$ F% ifor (var i = 0; i&lt;10; i++){6 T8 n; W  j; L+ p
    console.log(i)
# ^+ e; ^  ~0 I% L}$ i- `3 n5 A; y3 c3 O& @
        0' i0 B" j* _0 M
        19 D9 N9 G% O  u, a+ Q
        2" K9 j5 i) Z( S1 K, K: W; ~
        3
8 O7 x" ]% M- b5 d9 Q        4! X- }+ X% `9 Q, M' ^/ t
        5- e4 U1 {# y; `+ Z7 F% r1 g
        67 L- p) C- p5 a7 }' k
        75 z% w( ]4 z4 E1 t" R
        8  \* B( B( w* X/ w8 j. S% }& n) C/ s
        9
5 m% H% I# N- p' O' R</code></pre>
' a, G9 E; |* a5 k# h<h4 id="254-while">2.5.4 while</h4>( X0 r+ N& p2 D$ J+ v2 L% E& d
<pre><code class="language-javascript">// while 循环+ {5 k% T  O; `" g
        while(循环条件){$ s2 Y/ b$ B0 j: Z
        循环体代码; W# N) y, k4 g$ r  ]7 Z! a1 z' F5 {' o
    }
" V# ~! \; b! `- M
4 u% _8 @% G+ R* R; R&gt; var i = 0
* @" y1 F+ z7 {5 S3 c( Q" C&gt; while(i&lt;10){9 I- g9 M+ Z0 }0 h: u( x- x+ M
    console.log(i)9 p  W; \/ Q2 N. H! [* g
    i+++ z% M) \0 l. k1 F
}
9 g1 i; M7 j# u3 ?4 T* T 0( q3 U+ P2 K+ _
1- q3 {3 ~$ |' `# e' p6 j0 z8 B
2% ^: _- p9 |) Q1 [5 O1 d
3
& n4 g; S6 x9 a2 h 4
5 q8 }$ O% U' K7 J. u1 w 5
! u, ^5 U' B/ P. E2 h; a 6. U. V- W8 F9 T5 n/ h; C; f" {
7
; k/ e% v; G4 O* O2 q 8* H9 ?& I" D/ b+ D4 _% h
9- X; t9 K% _9 _- w
</code></pre>
- Q8 P% r" k# ^1 U+ R<h4 id="255-break和continue">2.5.5 break和continue</h4>8 v8 I, k$ ]; H9 C9 l0 W
<pre><code class="language-javascript">// break
, Y$ _& o  r( f$ Sfor (var i = 0; i&lt;10; i++){
$ i3 p( q; E7 \  V" Q6 r    if (i == 5){break}* k4 H2 x, H4 \
    console.log(i)
9 d+ A9 s( d* R, R}
$ t5 E9 Y. R5 Y) m* t 0/ t  v5 _# V) C0 l0 o6 l1 ~+ h
1# d( i/ k" [- `/ a# V6 M
2
3 n( N9 H' z4 S, F7 M 3& S; J$ ?' y5 q$ Y
4
  Y! W' L5 N$ z7 q0 B: p5 S1 G// continue, h' ?4 c8 m# `8 w
for (var i = 0; i&lt;10; i++){- H) A% V9 {( P+ n0 |
    if (i == 5){continue}- V/ F- U: l1 @# ~8 z& _- w
    console.log(i)
# Y& G  M$ G: O" N2 X. l}
: M. m9 N- s  Q: h$ R1 v 02 @& R% r4 F- E' D
1
$ }  Z/ b1 e1 M; V. O, P1 r 2
: X4 |& F+ P* d4 \$ a- a6 R) D 3: x+ s8 \) H) |( p) d
48 u& L0 c$ Y1 T6 l4 C: K4 U
6
% J- |1 L& Y9 A9 L( i 7) `& V9 Z3 M: T6 z! O
8
$ b! H+ z$ @" K7 O9 I* t5 m 9
: {# d5 }' i" g9 b0 o6 Y; ]
0 Z0 l: c- `4 \2 B</code></pre>
$ g5 }! b/ ]6 D( |<h3 id="26-三元运算">2.6 三元运算</h3>
1 N7 s; G4 q5 L2 _+ b: a<pre><code class="language-javascript">&gt; a
$ i6 d3 N: x4 N( L$ W62 O1 F: g" \8 n% ~0 j& e5 s) j
&gt; b
$ G- I9 p; `. d- F$ o$ s3- X3 K2 r. f. W+ i) w. ]

" M0 U. A7 C; N% [$ ?//条件成立c为a的值,不成立c为b的值! I5 B" Q$ C& ]" Z4 a3 ?
&gt; var c = a &gt; b ? a : b0 L; F* H+ A& B; X0 |
&gt; c+ R2 |# e) Z6 C* l3 G3 q& \+ R
6
7 m: F% \  l/ b' _' V2 i7 Q1 N' k8 O. G! I' S$ I, O
// 三元运算可以嵌套% o6 f$ \1 v6 C0 L6 x9 s4 `
</code></pre>
  S3 g9 N% a# D. Q<h3 id="27-函数">2.7 函数</h3>+ R: _) {! L$ H7 ^$ V( [
<pre><code class="language-javascript">1. 普通函数
  W' s; d/ u7 e" ~  B) W2 p&gt; function foo1(){, a- \2 N" g% i- L- Z: G7 U* k
    console.log("Hi")
: J7 D1 m# m3 O3 l$ X1 M6 l}
9 q. k9 p8 K1 C0 c3 ]% C" r4 y) I* `+ d4 t+ v* z  c
&gt; foo1(); C3 s% z- l' b) y: ?# o
        Hi
% X' [0 t6 y- `" n- E2. 带参数函数
  m- ?: u& [# \6 q" b&gt; function foo1(name){
. N6 a, E3 b) ?' u4 O+ E* o) h4 _console.log("Hi",name)
+ b" l8 W: b+ g/ c: N4 J" h}
! ], c+ ^% I) M* B4 N+ q2 t3 c8 p, a' O% [8 l. x/ Z6 o
&gt; foo1("Hans")$ s" H2 D, ^( }' M1 m* v/ R
Hi Hans7 P6 ^( _+ [! e

- R% ~" E9 x2 u&gt; var name = "Hello"% R+ M; ^8 j* Z9 y: ~) E2 }: D
&gt; foo1(name)
* A( ^4 e+ e$ @  D% X. n! w' sHi Hello: y1 W6 |$ ?  Y( }5 _' T* r

+ `8 ]; L3 {9 |* N) m3. 带返回值函数
1 j7 p) ~  i' Q& [0 [& ?&gt; function foo1(a,b){
4 d4 t6 ]2 d( c( m        return a + b   5 P+ T  ^) F2 ?0 g  G+ r! W! O# Q
}) r2 u6 V4 ~, c- m0 y
&gt; foo1(1,2)
: N) U3 W" `+ G5 _: U0 C3 P3
' x$ v/ D' x8 O&gt; var a = foo1(10,20)  //接受函数返回值
! j% |, q5 \8 {5 Y&gt; a  U! i% f! X" L; ^# ?% i* J" L
300 C1 L! Q; b+ h9 h

% l4 ^3 T" e; t( o4. 匿名函数
) k% x6 v& I- ?5 t* M&gt; var sum = function(a, b){
. H* ^6 I  J7 ^9 f% H* {+ X; w  return a + b;8 z, L8 S# I& \( K) U- p
}
  q2 M0 `# A% o4 z% V, _( [&gt; sum(1,2)- T% T  [! c# N) S" }! ]' ~1 U
3' k: w$ m2 [1 O( }0 `

2 o" W( [4 p  y. U" {7 P5 c: d// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 n6 s7 V# Q1 S2 r6 p: K- V
&gt; (function(a, b){/ \# `% c/ p+ L; d% C  Y" {9 I
  return a + b: D( W) `  @9 w$ E4 k
})(10, 20)6 c  ?+ k5 M' E, L
30
5 M& f) ?$ T( R; y
2 [  `+ h) m' N6 J3 \1 M- D1 s7 @7 V& t" z5. 闭包函数
" i8 }9 Z  g( w1 w( t1 N// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数* U) X6 A/ i( k5 p
var city = "BJ". M+ x/ h3 E* P+ i# l0 ?- ~
function f(){% ?3 {5 Y, b2 [& R8 N* j4 V
    var city = "SH"9 [' K5 n' c5 N4 Z; i# C
    function inner(){3 B0 U7 x) T% Z0 c2 H" k/ E
        console.log(city)1 h( @* D0 ~+ ~: G4 m4 E( R/ b
    }" z0 D" y" O' R+ [
    return inner0 U9 I) t8 |- y! @$ Z2 r
}
+ `, q  F( Y4 d& B# Vvar ret = f()/ ~& P6 m5 z- _6 _; \; l/ E( _
ret()- `' [! D# ^: C9 e' F. K7 q
执行结果:$ y! ]/ N% s4 A) l+ L1 \
SH
  ~) m0 x( R, J6 `) _/ d4 X
1 ?; W. m2 ^' a: d+ E4 B1 Q</code></pre>: i( l! l4 ?4 v/ e5 R/ ?
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>/ a( @: J* H3 b, h* _& C: Z7 K
<pre><code class="language-javascript">var f = v =&gt; v;2 g6 X+ s- \$ }1 B. p/ r
// 等同于
3 G) r6 N$ @0 L2 M- Avar f = function(v){
: U! D- k8 Z9 D$ U" \4 o2 d# a, |  return v;
3 J" _/ s  ^+ D* l5 L  g}
2 |' {- A# a1 K% P  `</code></pre>
1 h* n. {: t- Z$ o- Q: ]  _8 c+ E<p><code>arguments</code>参数 可以获取传入的所有数据</p>( l; v7 }% B0 j/ P/ h2 r* y
<pre><code class="language-javascript">function foo1(a,b){
7 x( t! Z) z& [9 U( U" g$ H    console.log(arguments.length)  //参数的个数
4 D/ e6 D  d6 x4 f    console.log(arguments[0]) // 第一个参数的值" `3 g- n, Z5 {; ^( k& P
        return a + b   ) L0 o" ?2 w4 ?5 o8 a
}; q+ d2 x+ e/ B) W# E
foo1(10,20)
% U. Y5 q7 @5 C+ f3 \5 N6 ^结果:8 C  s# I) S" T. d- ^" @; F
2          //参数的个数
5 ^: d1 I; M# M9 X3 O0 P10        // 第一个参数的值
! D1 `$ R. M* d+ F. g8 g$ c5 X30        // 返回相加的结果: U' p4 }% ?) q( b4 R* ]
</code></pre>" ]5 R! f+ R3 o) K
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
& r. N+ v" \# b) ]% j6 `! V+ v1 D<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
" F% y6 W3 Y4 ^, I<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
# w7 {- n+ a4 L1 W; T<h4 id="281-date对象">2.8.1 Date对象</h4>1 v. A! o% V5 x; i
<pre><code class="language-javascript">&gt; var data_test = new Date()# N/ g+ e$ H' K0 ?: S
&gt; data_test" n! w$ |7 e/ r& @, ~
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)+ |: i0 F# J; a) b, ]
&gt; data_test.toLocaleString()0 P: @# I, Q1 ?
'2022/2/11 下午9:44:43'
8 t1 _$ F% s1 ]& T1 A& `4 d5 _2 m: o
&gt; data_test.toLocaleDateString()
- u# H& C% H, R5 S; d'2022/2/11'5 M% t; ]4 E8 g$ [
  `( o2 X2 D+ E* o- ^5 ]$ |
&gt; var data_test2  = new Date("2022/2/11 9:44:43")' Y. U% W+ R1 L
&gt; data_test2.toLocaleString()6 Y. }, L. e! S
'2022/2/11 上午9:44:43': k5 h! C1 v6 |: `$ {/ H- J* f1 ^
, m0 z) M( T" b: k' q
// 获取当前几号
) O. S3 Q+ _$ v% i&gt; data_test.getDate()
& \) G1 P: q" {0 S11% r- Y# }- \/ b( l
// 获取星期几,数字表示7 X1 c$ W. L; I% u1 V* ^& `
&gt; data_test.getDay()  
9 k) B7 ?- b2 U, o5* @1 c+ J. {" G* F: B5 B' w% p. P
// 获取月份(0-11); @- J  f$ ^' u% s$ G+ g
&gt; data_test.getMonth()
4 m' g5 d' P8 W+ N1
1 z, r, j3 @) D' c// 获取完整年份
" p. ?3 `$ F' d9 v5 s2 R&gt; data_test.getFullYear()9 ?5 K; U8 ?/ \' I0 l
2022
) D9 U5 C4 u  q$ k+ Z3 c# b: m// 获取时9 `5 c( _2 M) _+ D
&gt; data_test.getHours()
- \; U$ g) @  d) {2 @21
3 o8 K" _  o% C# C9 V  L. ~// 获取分
4 W# J, j) f- b* s" P3 C$ A&gt; data_test.getMinutes()
7 @; g9 u) T( K. B, H+ h% ~% k9 f44
+ [0 I  E9 U# n// 获取秒
9 J( r/ D& M7 w5 G&gt; data_test.getSeconds(); j$ i4 A7 u5 ~
43
  y' f. v+ y* L$ |( c4 _) U+ I% c// 获取毫秒: d% t3 K3 V. s  u7 M: w
&gt; data_test.getMilliseconds()# S5 ?' J; v( g2 ?8 ]- J
290
/ _0 U" ]' y% h* M// 获取时间戳: R+ U( u$ F* i% N. l- }, A7 ?
&gt; data_test.getTime()
; `; N% u4 x, d7 }1644587083290. n$ i& e) z. u& v# e: u2 I
</code></pre>" V6 Z& F9 x5 @9 ?
<h4 id="282-json对象">2.8.2 Json对象</h4>8 v0 w5 [* P4 x) N' M
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串4 R& \) N3 d$ T" y5 P+ o4 q
JSON.parse()  // 反序列化,把JSON字符串转换成对象6 k+ B4 u. I) t- ?4 o/ ^: ^

* `2 b9 ^+ r& ^  H// 序列化
7 z" ^) _: d, j5 t, s6 Z&gt; var jstojson = JSON.stringify(person) 5 Z+ k) A" Y, |. R# C1 p7 ~
&gt; jstojson  ; J" v7 i% L) f  c, [  k9 A! S
'{"Name":"Hans","Age":18}'
, J. _# j) Y4 }6 m+ k7 e
. A* f$ C# M3 h' D9 H7 t' U// 反序列化
3 K" O0 j3 ~1 W6 c4 `" S! h& J& W&gt; var x = JSON.parse(jstojson)5 b3 j+ y: J& N' w+ e
&gt; x( L9 b  q) ]  g* X1 |
{Name: 'Hans', Age: 18}
1 e3 E! @: p: L9 t&gt; x.Age
8 ]  h8 N* m) z+ L1 j18( L4 v. u. \( o4 V+ ~$ _: @
</code></pre>- P- e! Q; Y( h0 a" T! W* N4 v( X
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>/ q. k; z5 U/ ^. h. _' ^, `
<p>正则</p>
# t1 E# u* B& ]$ [' u" C+ X: I<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
* v/ z" r% z+ z: L2 B. O&gt; reg1, F. P* B* N) J
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
/ `4 ^5 r3 r: b# Q&gt; reg1.test("Hans666")* O/ A7 T) L. k$ c
true
( W9 Q5 S+ ?* ^  g
, o+ z9 [: R( T- a1 f0 {! D, Z" y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/2 C5 Q0 ?+ d& a; P: O: G) K
&gt; reg22 \5 t; E  u1 S
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
! k% b( _3 w6 F6 Y/ l6 T( b" h" I" X&gt; reg2.test('Hasdfa')
, A1 ?8 o7 p2 t4 itrue$ [' A5 B( ]1 }5 J4 Y
# N  W' X' w& N* [/ c
全局匹配:
+ r7 p# {4 R2 W6 P8 B; z% [&gt; name
' o5 I( `- \3 D9 o& v! r- v'Hello'
! p& p* c- P% l& o: s" h&gt; name.match(/l/)
9 w, T4 T) U6 e7 s0 h['l', index: 2, input: 'Hello', groups: undefined]/ Q$ ]2 a8 z# j/ L

+ c' d( B* y) I( d, z) h. n4 P&gt; name.match(/l/g)
" S  ?( P  c/ U8 D) M$ \% r) I(2)&nbsp;['l', 'l']
1 [1 {3 o4 `3 _- r! W// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配' Z4 c, m  o0 ?, U% c4 @: z: g' \
* A) w3 p/ [. i2 w: m  D  B9 f+ [
全局匹配注意事项:# z- z; g( Z# E& H. ^9 r" O) p
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
2 n- `1 \* [3 K. g  Y+ {' k( Z&gt; reg2.test('Hasdfa')5 o2 q5 G: Y* q) z5 M+ A$ y; ]
true
9 x, Q+ L( T4 e" w: m9 W" ~7 c0 x&gt;reg2.lastIndex;
) V6 s' r" m) ?7 `& E% |65 e' g+ t/ d4 g6 J
&gt; reg2.test('Hasdfa')
/ i2 d& `4 T3 _+ q* I- d0 Ofalse! w% V7 R% K8 h
&gt; reg2.lastIndex;
! B- a! D' v+ a0 [+ Q% Z0* f! b3 T0 E. F* r( y  z6 ~7 k
&gt; reg2.test('Hasdfa')# {5 C, M% L7 O/ A
true
+ L: ?9 v3 p; Y. d&gt; reg2.lastIndex;
' x/ H3 N, |9 D6
4 G4 U  N0 }. ], a( D; V5 J: c2 ]% d; X&gt; reg2.test('Hasdfa')
& B2 w$ t1 o* V& Efalse
1 ~) W7 {$ v& S! h& s1 H&gt; reg2.lastIndex;& a5 ?. r. O* E- t7 S
0
9 u& O& V/ v' O  a6 ]// 全局匹配会有一个lastindex属性
( X. _, C; U! H* l' X8 t&gt; reg2.test()+ j4 T5 E$ |. K1 [
false+ `6 D  ^& j4 U8 {6 h6 n, O
&gt; reg2.test()& [! {' N4 j. T. N0 f" d* ?2 a
true
# {2 t; c9 N  R2 e// 校验时不传参数默认传的是undefined4 @% }2 c, {0 t) p) {: p7 q
</code></pre>
% L% j. G/ l$ P+ U/ H. W<h4 id="284-自定义对象">2.8.4 自定义对象</h4>4 R4 a# d% u; v- L
<p>就相当于是<code>python</code>中的字典</p>
* P1 n! ~3 B4 T6 }9 ?: Q4 J<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
8 f# K. N0 ?# L5 L( q&gt; person
! W5 M/ ^' x, |9 {. x" ]9 }{Name: 'Hans', Age: 18}9 {. d& s8 M  S* \7 a: ~- C
&gt; person.Name
8 B& U3 t! z5 x'Hans'; C' H; v: H2 L5 J+ N% q
&gt; person["Name"]5 q& `1 c% K# v
'Hans'
& Y2 ^$ d. b8 f
7 a- I' s" N9 P5 b2 b( A0 G// 也可以使用new Object创建& l, H2 U. \( O0 U: M
&gt; var person2 = new Object()3 H- ~5 Y6 {5 z( D& }
&gt; person2.name = "Hello"  q/ I% d) K4 g! Z; I
'Hello'
/ Z* d) M5 O) s) a&gt; person2.age = 20) q& w; o+ _+ X4 Y" H
20
) v/ S# P& k4 U7 X5 V  ^</code></pre>5 \. i( w% s! X; ~6 Z9 r' L
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>( B* G4 R+ t3 i
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>% Q/ s. q6 X% i5 v0 m
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>" l1 y9 M! S3 F2 r- M" A( k
<h3 id="31-window-对象">3.1 window 对象</h3>8 X9 H, c0 l5 {% o( K
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
4 H  d9 ?: N0 }, K* h<pre><code class="language-python">//览器窗口的内部高度/ }" d8 ]; W1 b! s( R
window.innerHeight ( y: }0 h7 X( l6 g6 `
706% ~# Q) m; @* [, x3 D' Y, V" v
//浏览器窗口的内部宽度
8 i; H( c/ I: p9 \window.innerWidth( q- Z! `) z$ O0 t
1522
/ S+ I0 f" ^' _0 y2 T( S0 o+ P// 打开新窗口
+ |4 k- k2 Z5 ?4 L& pwindow.open('https://www.baidu.com')$ p, ]4 |* f$ S3 p! D
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 |. c! N& A$ H4 a- {/ F4 ^& @# U$ z// 关闭当前窗口3 U+ o( |! @# Z
window.close() , o0 e' a8 Z) P* X! f' f% z" T) H7 F! i
//  后退一页
1 q4 N7 E& u# Y2 c' l+ J* c) kwindow.history.back()
5 s1 w- H  S4 N  L( r  Z// 前进一页
) W; w. D+ r% {* P- _' twindow.history.forward() 1 @2 V/ T/ k0 h+ }# ~" I
//Web浏览器全称
% Z: b5 {7 {* mwindow.navigator.appName* ]: {1 o* V- c5 `9 ?6 |
'Netscape'
8 @; k$ H4 r2 t7 L# N// Web浏览器厂商和版本的详细字符串
1 f1 n% l3 v: ^" I. Y  iwindow.navigator.appVersion! F' @6 k0 j" l7 h- f  L8 n
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
  Q6 v+ y, b3 |// 客户端绝大部分信息: V/ c- r6 v- F: ?- q
window.navigator.userAgent
6 u/ b# j, K7 f# Z'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
- u, u. J/ j# N; g// 浏览器运行所在的操作系统" s& z6 @" Q  d( ~$ R" o( y, Z
window.navigator.platform  W% \2 G  e5 i. m; j
'Win32'
8 B; D$ P: L% f7 g( @% m# T, i8 Z
/ h' P* P% c& n//  获取URL- s) Y* e" V2 W3 ?* B3 M$ Q& Q+ ~
window.location.href
2 ?# E% [$ j4 H2 b7 H// 跳转到指定页面
5 g0 ~6 Z" _! D) Y  E- {window.location.href='https://www.baidu.com'
3 [! M$ F% Q* V  |3 X5 i9 M// 重新加载页面
' |: j: A5 X) swindow.location.reload() 8 d- W4 h8 M2 P
</code></pre>6 \# n$ S* O7 F9 |" r5 y$ c! d
<h3 id="32-弹出框">3.2 弹出框</h3>4 @$ Y+ i6 s- J
<p>三种消息框:警告框、确认框、提示框。</p>
& T) i7 }% j7 d5 H<h4 id="321-警告框">3.2.1 警告框</h4>
( `! c5 ^" [2 _5 ^, n0 {2 S<pre><code class="language-javascript">alert("Hello")0 i+ A. r! r6 a$ ]& T
</code></pre>/ ]  n' o* \9 i! ?
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
% g' m0 X8 z7 P<h4 id="322-确认框">3.2.2 确认框</h4>* A. _/ Z8 R) P5 r% b
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
& Y/ f) e- Y; ~<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
! M/ l0 b: W9 w, v" utrue
$ v+ s8 C/ P" @4 W* e& U4 F&gt; confirm("你确定吗?")  // 点取消返回false
& m$ J) k( G' ~( k  j& ffalse/ y% Z5 _/ G4 Q8 Z" V) Z& n
</code></pre>; Q% v" f9 A# T& L& ?- ~7 N' j1 p- W
<h4 id="323-提示框">3.2.3 提示框</h4>/ n- O0 J) q) U9 M4 I$ Q3 q9 {
<p><code>prompt("请输入","提示")</code></p>- u/ @8 J/ {* s# Z5 v0 ]2 \+ \
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>' V+ ^7 I! B2 D# J% r& A. s3 ^
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 S. H1 K! x) ]! {1 u4 M, }7 a<p>如果直接点<code>取消</code>后端收到<code>null</code></p>% b! B1 L2 g) B$ O  R
<h3 id="33-计时相关">3.3 计时相关</h3>! H9 r+ f  e* L9 f7 m" Z
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>5 L( \$ Y. X7 N: L3 U; E0 ?
<pre><code class="language-javascript">// 等于3秒钟弹窗+ N9 L* B5 g  \4 T/ ^! r
setTimeout(function(){alert("Hello")}, 3000)9 O& p  C0 T4 q' P+ m7 |# Z

, N! d# y) j! L0 a$ z' Y! d( l5 x/ evar t = setTimeout(function(){alert("Hello")}, 3000)
6 P/ b, f$ b. {' E8 s6 D" u0 X# `* Y* H
// 取消setTimeout设置
9 M6 ^: V, x' cclearTimeout(t)
7 h( A, m8 `6 m3 F2 }</code></pre>/ \% w1 N0 ?. M$ x5 Y+ d+ H
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
, c7 Z4 Y- l! b<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4># r: C: E7 y' y6 z  Y; e# `
<pre><code class="language-javascript">每三秒弹出 "hello" :5 U5 s; I$ }) x" q
setInterval(function(){alert("Hello")},3000);2 V9 l2 S8 `% {  o; g6 Z
</code></pre>( I) e8 v; q2 Q4 L- k* b: J
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>/ X* C( v0 l3 y1 e+ T  k
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
  L5 g+ t) X8 `2 V/ m% E//取消:) a5 W- b9 t! R+ i  d& n
clearInterval(t)% P  b: C  U5 \3 p' l
</code></pre>
. c/ P7 w- c6 c$ r6 k& F
, z$ [; s3 Q0 \, @/ A+ t8 G3 u
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-29 12:10 , Processed in 0.077844 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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