飞雪团队

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

前端之JavaScript

[复制链接]

8135

主题

8223

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ ~& _3 D- w7 d4 {$ C<h1 id="前端之javascript">前端之JavaScript</h1>
3 q, V8 k: Y9 a& ~- w+ E( R<p></p><p></p>
5 [* D9 A& a, J4 j<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>" P* W( Q" p7 n/ e, D4 \! u+ N
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
/ \0 p( M' y* J1 w5 i- P: h$ `它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
/ r  n/ O' N$ N" l& u6 X* r* E它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 X! u5 A% e, ?9 b; T$ H* \它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
1 I) T( F- l  p9 I<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
3 X; E" d9 z+ ]& o- p4 I  c<h3 id="21-注释">2.1 注释</h3>5 L& U# A, u; {& d0 r& X
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
+ l7 ?. {) O; \9 t1 C8 z" [<pre><code class="language-javascript">// 这是单行注释, |, |1 z2 z: I) s# C; i% l# V3 F+ c; @
7 B$ M7 E8 Q6 C6 c0 R
/*
$ V" n9 u& p1 |1 Z# P6 B这是多行注释的第一行,2 Y* a( X7 Y7 Z' L7 V+ F( f- r
这是第二行。
! M# [" i' K+ j$ X3 \- `  O3 G( K) e*/
9 C6 I2 A8 c4 q. ~1 u, Q' @. Z) n</code></pre>
' J$ h6 Z- K% X' s! X$ w9 j<h3 id="22-变量和常量">2.2 变量和常量</h3>" _( v) G( t: @  g& p5 N
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
4 ?: Q: a. {" m; n% e1 h% B<ul>
0 F. ^% ?1 r3 G<li>变量必须以字母开头</li>
* O( s) ?- K* a* F4 D( ^2 j<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>' x' u+ U0 J5 B5 g0 d
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
7 `2 m3 \. A/ |6 i</ul>
- u' I6 T3 ^# C<p><code>var</code>定义的都为全局变量</p>. X9 a3 B- V9 s
<p><code>let</code>可以声明局部变量</p>! o% x3 l6 H$ A$ x6 O: G" n# I
<p><strong>声明变量:</strong></p>/ m  R" f0 h( j5 L, m
<pre><code class="language-javascript">// 定义单个变量
) m% l5 |: v( ~( U5 E( k# h! Q9 J2 p  B&gt; var name6 G4 S; a4 G& M0 [8 F; I+ v6 T
&gt; name = 'Hans'
) {6 K. f+ \/ V# B: w7 r  h//定义并赋值
* D" h3 r- O+ G- ?2 a) A7 Q&gt; var name = 'Hans'
; {+ |0 Z; ]& e&gt; name
3 G  {& J4 o9 L. S'Hans'7 y. }; T) |6 y
5 x( o# R$ ^% {5 Q
// 定义多个变量' i4 H9 t+ K% |7 ~! P+ J& M
&gt; var name = "Hans", age = 184 Q( _# q  K/ L* ~: n" ^: Z- }  n
&gt; name
- j* \% H' P2 b: y'Hans'
4 [& q1 K1 U0 Z7 d' S  D, U; ?&gt; age- d7 v* f6 D' X9 a0 K/ x% x' t
18
/ ?$ [- f/ T- ^% B, o2 O& X8 ?5 K, e
//多行使用反引号`` 类型python中的三引号
1 I" |) N, }- b&gt; var text = `A young idler,8 q1 l. ]# h" N
an old beggar`3 n4 ^! l- Y; v0 ?) u; u
&gt; text" I7 E0 c6 J& D  s# e$ m2 e
'A young idler,\nan old beggar'+ M8 \2 A% ?% a) ]
</code></pre>( ^+ x$ ~% E+ r: b# y4 {
<p><strong>声明常量:</strong></p>
: z4 c: I, R6 a  U& f. h<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>5 c7 W1 ^! w2 r( I9 W% C
<pre><code class="language-javascript">&gt; const pi = 3.14
& V, Z7 r% _- e& D# s( }&gt; pi
* V6 s8 J8 S4 I3.14' }0 w4 D3 c' l# I; N- T
&gt;  pi = 3.015 @" _) T0 B( j+ H4 p/ o
Uncaught TypeError: Assignment to constant variable.
0 @! _/ K' y# M! z3 ~: ?    at &lt;anonymous&gt;:1:4
  G% a, P0 C5 n7 Y0 y
. Z" ?+ B& S$ `6 J6 c' i/ p; ~</code></pre>
* }' x* |% I; W* H<h3 id="23-基本数据类型">2.3 基本数据类型</h3>) `! f: A% j2 ~# A6 g6 t+ t; X+ \
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>7 B% p; _8 D9 ?- d
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
: ]; `" z! i0 D5 V" Z; J8 l<h4 id="231-number类型">2.3.1 Number类型</h4>, d2 x: v0 f7 d8 R
<pre><code class="language-javascript">&gt; var a = 57 t3 y, ]! F& n4 P3 v; `# u
&gt; typeof a   //查看变量的类型  ; y) v. C7 R  W& h, n( R
number
. [6 Q' J/ A+ K
6 [, C: E6 ?2 O0 Q" Y&gt; var b = 1.32 V7 C6 e% b- F4 W
&gt; typeof b$ L: A. u  C7 V
number
6 f8 E% C% [8 E8 ?: _0 ?; \* l
6 `* ]  Z$ w9 j7 p; K// 不管整型还是浮点型打开出来的结果都是number类型
" i/ B; C- r( g% ]) N+ n' T
& S( i# v- g9 Y; `  l3 b/*3 m* Q9 n4 P) p6 a" o# V
NaN:Not A Number
: H7 n$ c. F; i, u, @2 E, lNaN属于数值类型 表示的意思是 不是一个数字
' F; O) X/ x& f5 X9 B*/( l* R9 C$ ?# B0 ]  L, `
# e+ ^0 n2 b" {% G% u) ?, s
parseInt('2345')  // 转整型& M9 @( H/ ?& g7 `8 ?
2345
5 |9 s2 \; B- Z2 IparseInt('2345.5')) G1 c) H3 f4 C7 M+ Q
2345
% V2 i; s% L1 U2 c  @parseFloat('2345.5') // 转浮点型
4 A! s. T3 n: n6 `3 f: s) z" L2345.5
8 E3 W; X9 A  c$ ]/ j5 H  u2 R1 N# lparseFloat('ABC')
: V$ V3 l: C, @- {9 n" {; iNaN8 u4 ?. f, o/ U; p5 t) I! F9 {
parseInt('abc')$ x4 ?6 o  F2 i0 A4 O& e
NaN% I- c7 R/ _! r! |
</code></pre>
# b. w8 ^6 t# N  z<h4 id="232-string类型">2.3.2 String类型</h4>  H1 ~3 G! z: D3 W% q' n1 {, n) _
<pre><code class="language-javascript">&gt; var name = 'Hans'
- A/ j9 {% \3 t/ @&gt; typeof name
8 B! h& h* Y6 w: U. Z! Z. F( ~'string'8 J- N7 D1 L. U$ B8 N

( |& v( u  h2 N% b1 Y! E- ?//常用方法. P) _! S8 u; v# X! @$ D
// 变量值长度6 @% r% y: J  C2 U" z' a7 |
&gt; name.length
- Q( I: O6 g! ?0 o6 N0 y4
2 I" |3 K$ A, _; f6 F+ T, {// trim() 移除空白
4 L: g. M6 H  {- {% e1 r3 A&gt; var a = '    ABC    '' T- j# m" v, @' a2 v4 S
&gt; a/ }0 E9 k/ h) J9 i" G2 v% E
'    ABC    '- P. O* L) X/ X* r; p6 U2 a
&gt; a.trim()
  ?9 f4 S& a7 ?2 W) f! A'ABC'
, q5 ^% J4 v( r9 i0 t- V( [//移除左边的空白
0 L2 O/ {1 b6 b4 M&gt; a.trimLeft()) H: j7 k9 v8 ?" x! t
'ABC    '
0 A6 L* U; I* e' u0 ?0 S//移除右边的空白
: a  \! ^, ?/ }2 @) o( i&gt; a.trimRight()
4 D; i& w  ~4 @'    ABC'  t  `; p) I% _+ B1 R- X
7 Y4 ~8 V" s. {. ]! f  }% w
//返回第n个字符,从0开始
9 a" |3 x, f4 Y. y+ v) J/ F0 {&gt; name
: V2 I1 m7 H4 s) N& a' ]1 y'Hans'
  e" `; y  L8 y+ B! T&gt; name.charAt(3)/ o) Q6 J/ z6 _/ s% F- g
's'  S. G! d* g8 I0 t
&gt; name.charAt()! D& s1 i8 f; [( \: h
'H'# ], S2 o! \! E& ]
&gt; name.charAt(1)5 S' \' `% }  }$ L3 f, R
'a'" u5 u+ a1 h6 t8 {
( B7 l& U/ c# A6 u6 g
// 在javascript中推荐使用加号(+)拼接- _3 J- K9 F. N4 B) [
&gt; name
8 ^  M5 U5 Y/ A/ E'Hans'
4 I/ ^5 z% h/ V4 c&gt; a- b9 t* L; _4 G8 g" @: D1 r7 R
'    ABC    '
$ S6 S& e3 f5 q7 j: }/ g6 I&gt; name + a7 T. K5 Q) W& V7 }' S9 ^
'Hans    ABC    '
  w3 ^# r/ W! W: ]& e4 ~// 使用concat拼接0 ^3 E; g. _3 y3 X7 E
&gt; name.concat(a)
' S0 D  F) n5 E+ x'Hans    ABC    '
1 e0 J. M0 p6 Q. K% ?+ u# i4 H8 O( [  q8 g, r2 F0 S
//indexOf(substring, start)子序列位置8 Y4 |( p) i- Q# O  B; z4 {

/ V( w) J* ^; k5 B&gt; text& Q; K3 b: ]$ h# {
'A young idler,\nan old beggar', ]& B! h% @4 w) j, C/ m0 z" K
&gt; text.indexOf('young',0)
' D7 o/ O* t2 Q+ I2# r4 e! x) x, a5 v% J* z+ A
3 \0 t1 ~5 o3 Q; q- e. _& J
//.substring(from, to)        根据索引获取子序列% r; v# y$ x8 U- k% t& {- |5 z
&gt; text.substring(0,)
: l4 t  u! T9 f* g! ?'A young idler,\nan old beggar'2 q2 O- r2 S3 R$ P/ K
&gt; text.substring(0,10)) n1 D1 ^0 I: V- [3 C  D
'A young id'
( l. @' K; C, `2 U& V  o' ?4 c$ H( A6 @2 Z  _
// .slice(start, end)        切片, 从0开始顾头不顾尾9 A/ F' S7 L6 a8 v
&gt; name.slice(0,3)
) q; Q, @: K* m6 I" U" M'Han'
5 N8 |7 P% L, D$ Y; \  Y2 O  P2 X* n9 e0 G7 m& v2 y( f9 Z
// 转小写; r; _) i% n, T& Y7 \' t; W  _
&gt; name* ^$ Y7 i" T% N
'Hans'& k2 I2 V. C7 k1 H' F* ^/ H
&gt; name.toLowerCase()
# [. x8 O% O, L# k+ n" T'hans'
) C0 i$ R6 N$ \* k9 ?// 转大写
* E$ x7 V* V- c1 I9 d. v+ a&gt; name.toUpperCase()
1 m4 ^5 m; Q6 [9 j6 S+ {'HANS'% R3 l% C) O9 g+ b8 c
  R. z6 Q1 H9 h0 m
// 分隔: N1 V. B5 N8 m( ~9 e
&gt; name
% c) s; a$ K( U" N" Q. `: b'Hans'5 @4 x; o8 s+ I: L% q
&gt; name.split('a')
  Y" _6 c5 [& d9 n3 f(2)&nbsp;['H', 'ns']+ U1 F( r0 F- v8 C. \: b# L
</code></pre>( J( q! f! f. R: h0 }: S* B
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>( x8 `) ?- ^9 }0 z$ G, b
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
8 \6 U2 L, y7 l! ?; l5 R<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
* w. a  W/ f5 p+ W! @<p><strong>null和undefined</strong></p>( A: @7 Y9 |" S1 W  t
<ul>
! F; X& E) F% ]+ s- j& m<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>6 l5 D' p# t) Z
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
9 s( T( V# \( |; |- n/ D</ul>
: a, n# }$ B, q; c* _2 k<h4 id="234-array数组">2.3.4 Array数组</h4>
% p# r1 k4 u1 N) N- p<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
* T8 F' o; {& |# R7 S9 |<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 0 n2 u3 _* g0 }2 L
&gt; array1
7 E# K' c3 m( D, U(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; m' S( ?" c2 E" G! U1 \) [&gt; console.log(array1[2])  //console.log打印类似python中的print0 ~( V+ ]7 e4 k
3
4 P9 W$ U' A* E) y5 }// length元素个数
# p9 Q0 w/ L) c8 F; N&gt; array1.length- [( }+ p3 V1 s5 W7 ]
6  o8 l9 y" }! o( g
// 在尾部增加元素,类型append- a' b. _5 I+ p$ N& i2 f
&gt; array1.push('D')
6 G2 i( f- l$ m7 }5 J2 g% }0 h# V7/ j' x  x0 ~2 u" {3 f$ a
&gt; array1  S* ^) k: B* Z- I2 \" [; e7 B
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
) V/ P% e& J' N, D# @. u* N# Q// 在头部增加元素
" g4 o; E) F+ E' u* S% y' n  |&gt; array1.unshift(0)
3 S$ K6 E  _- c, S0 \' ~. Q80 m! g  N$ V. `$ G4 A9 }& ~7 Y
&gt; array1, V& w9 h) v/ p, t: M# d
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']0 p# [' H# W- r- _

; J- l6 c( d+ i+ b0 V//取最后一个元素
# p# S6 V8 s, |&gt; array1.pop()
7 Z( _& ~' S8 U# ?/ ?& Z5 K'D'
* @7 l+ z* t( y  p&gt; array1
* e0 o7 n1 k( F/ g& P(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
( T/ w( w/ d. e//取头部元素
! f- c3 }) c+ w&gt; array1.shift()
& y' d' [3 n2 E  `3 ^0
8 i$ P- R6 h3 L" k( b) o' f' [&gt; array1! Z. d  y$ e7 Q+ W+ u
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 E0 _0 A6 E' Y" H! w* h- H& Y$ W4 A5 p8 V) {# ]
//切片, 从0开始顾头不顾尾& r% v/ Y, w0 N7 M( W
&gt; array1.slice(3,6)0 u$ m5 E# j. C3 @6 C, p
(3)&nbsp;['a', 'b', 'c']8 _/ u$ S* B4 X9 J% r
// 反转0 Y6 [1 W1 E5 ?: G3 _9 g' L
&gt; array1.reverse()
5 b. ]1 ^& |6 t$ L3 I(6)&nbsp;['c', 'b', 'a', 3, 2, 1]2 `' Q$ I4 M4 Y1 c8 J. @
// 将数组元素连接成字符串
( W/ U+ E# `2 ]  k4 g+ Q&gt; array1.join() // 什么不都写默认使用逗号分隔
, q! h: y7 v& I5 l$ T'c,b,a,3,2,1'
. d: h# v' m/ n&gt; array1.join('')
1 ]2 \% v) L" ]' B- D'cba321'
/ b' t$ v) t- j  Y# J$ o3 {&gt; array1.join('|')
; w. r  C2 }6 X'c|b|a|3|2|1'' Q0 f5 s! q8 W5 V3 ~8 B

* o0 Y3 `  D1 V! m// 连接数组  {  L9 A& F. ]3 ]4 ~
&gt; var array2 = ['A','B','C']
) Z7 T" e2 F0 {4 q* I&gt; array1.concat(array2)
6 A9 r, k8 {& T0 a  @: |* w(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
: C0 \3 L+ j2 O4 t$ s8 W3 U4 P
; G  t# D  _8 h// 排序* e; O, H8 Y. }3 E8 L+ u! G7 H* U
&gt; array1.sort()
. j$ {3 \& G! W) D  e, i(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 S  R5 I  q) t. Q$ Y9 M% Y; ?- N6 f/ M% i0 C5 ]! I' _/ S
// 删除元素,并可以向数据组中添加新元素(可选)
0 i2 O. T8 d+ }: B' k& Y&gt; array1.splice(3,3)  // 删除元素1 x! R* c, f( Y& p
(3)&nbsp;['a', 'b', 'c']
  n2 x% h% n/ w% B3 Q  i/ b" O&gt; array1
& Z; y* ~  G! \0 I4 ](3)&nbsp;[1, 2, 3]
3 c3 z: c- q$ T+ Z/ |* a&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素# @4 Y7 D# ]3 B
[]0 E7 p: I; J% l3 H: D3 m
&gt; array1
7 J  q" b3 j0 S  i3 w/ ^$ J' `(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
1 J  ^4 l; r% g1 ]5 H7 V* B# o$ C
6 g5 b: N# j  z. y- {  X) g1 i) F9 e/*
+ e9 d8 d" N$ j* ]splice(index,howmany,item1,.....,itemX)
8 T& E$ L- ]' G, m- hindex:必需,必须是数字。规定从何处添加/删除元素。
9 }% h1 G/ |1 ]8 _howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。* ?8 S1 E  P& b+ m0 U! i
item1, ..., itemX        可选。要添加到数组的新元素' M3 u+ a/ Q( p) E7 @7 u
*// V$ u  v1 y6 T  {3 o7 H5 L
9 i) Z* s2 D( o/ x' z
// forEach()        将数组的每个元素传递给回调函数, z$ E" Q& n$ c2 i6 A& ^7 g0 f
&gt; array1.forEach(function test(n){console.log(n)})( z: U3 s5 [& g) D) L! w
14 L7 M" }0 g* p7 u! M5 }# S, i
2
3 R/ x$ h: v" U 3
2 t+ W. q: [9 s  P6 Y A
* Q2 w5 _8 \3 G5 ^' {$ v5 J B
0 J3 R% t6 l3 S7 _4 g1 ?1 } C
* E) J8 B0 V6 l+ l2 T5 `/ U// 返回一个数组元素调用函数处理后的值的新数组
  |. D% {# F5 z: l) s2 z&gt; array1.map(function(value){return value +1}). V; L) N  N9 A5 ?: j) _( y4 e
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']$ P$ j9 J8 \. l. S9 ^( j
</code></pre>$ @& q5 i% s6 V7 {9 X! a" X
<h3 id="24-运算符">2.4 运算符</h3>
. F9 N1 M) ]7 T, Y3 L* J: L<h4 id="241-数学运算符">2.4.1 数学运算符</h4>, k5 o4 |! d7 H! Y: q  G6 H
<p><code>+ - * / % ++ --</code></p>% d5 S& \+ Q/ y
<pre><code class="language-javascript">&gt; var a = 6
$ Z9 `* C4 s2 y! v- H&gt; var b = 3
" {# a" w! d9 Q% H7 c6 `6 H% @// 加
0 S) J, X6 D; P: h&gt; a + b/ @8 X, p5 B9 D
9
5 @# [' g* l+ @// 减; l* ?" P8 X; o' A
&gt; a - b& b( K  T7 B1 i* }5 j
35 Z. i4 b$ x' C) t" [
// 乘7 I4 u/ O: C$ f/ a8 S/ U
&gt; a * b0 |0 W5 ?0 ^; R! e
18
: }% X3 l/ F# ^/ E4 W5 z// 除
% X" i, B! v# f! a( @0 R" `/ N&gt; a / b! z: p2 ^3 |( \' N1 t7 |* H, y# I
26 _1 Z, A! O# g  n$ }8 ?
// 取模(取余)
: j! V( h8 H# e7 F&gt; a % b
# d+ @5 Q$ b/ T/ Y5 R2 B$ l0
  E# d! v- f0 C* r( q$ x( l2 z// 自增1(先赋值再增1)
- w+ D* H, y- C- X. r2 \8 v; [6 S' t&gt; a++2 ^  @3 l" E0 K- C5 S4 n
61 m6 f0 |. k4 K) v
&gt; a
% h0 o9 h9 v3 q+ K* F- x' m7
: h, B, p3 P$ I( r4 |. V: L) t. m// 自减1(先赋值再减1)
* ~3 ~9 T* Y- ^# b&gt; a--
% K) p: k+ X# a. K' ~77 }* m1 ~  j& ^# I5 e
&gt; a1 ]* R/ N* _, o1 E1 z
6
$ w3 g0 w$ C' Z: c9 G; B& k' m// 自增1(先增1再赋值)4 Z) u8 m0 J* U& l# A
&gt; ++a
, T7 G' }, }& f; c; S7* |5 t: N( U# B; d- b
// 自减1(先减1再赋值)
& M, }, K: ~1 F1 S- U7 a0 N&gt; --a0 q5 y( I' t. I" y
6. X* W& |3 B* Y; h" O
&gt; a! q( F) D1 m3 O
68 S$ Y, z' m# e; S/ ]' h

3 g, m" \6 ]# H% o3 g//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
+ Y+ H4 f. \) j1 V</code></pre>
& O) g0 i/ L! }<h4 id="242-比较运算符">2.4.2 比较运算符</h4>% C, [! E# w6 a; m0 W
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
5 r) N) ~. c: O, P# s' u- I3 I<pre><code class="language-javascript">// 大于/ m% b6 h  z+ D# ]' e7 e( ^
&gt; a &gt; b
$ s2 B" F2 b0 f* Ftrue
$ q! k- v5 {( R' [2 N% `// 大于等于/ z9 @# K+ n; b( V( u6 ]! @' E2 h. T
&gt; a &gt;= b
) a; S; z5 m" V1 _# @9 r4 J# H7 Ltrue
) n, R: [3 X* I5 O/ s) U5 a// 小于2 j0 O  f/ M8 m! j/ B, `
&gt; a &lt; b2 [, B2 }/ N. A- S3 m  Z4 N3 P
false
0 Y* J( I7 ?$ D2 H. I# b// 小于等于5 W) E/ f, N  @2 }3 e/ y
&gt; a &lt;= b; X- U9 f* N/ I9 |9 _8 y
false
6 e, Y3 Y4 d/ c& [+ y3 b  P7 }// 弱不等于; v4 g! N8 C: f1 b$ V( u1 t2 l4 X
&gt; a != b; Y2 h0 l7 J; |$ c
true1 Z- t0 o# A& d
// 弱等于
& H6 a; P( U! l# x( V- `&gt; 1 == '1'
! B$ O/ R- C, Strue
8 q# s* T( r; f& ^! |// 强等于
8 e% x, c' A0 V0 z4 ~; R4 C: z&gt; 1 === '1'1 W& t* `; K0 ~' h
false
" Q' O9 N  }0 z9 @; }// 强不等于
; Z2 {2 _2 a: e- o+ v# n" H% r&gt; 1 !== '1'5 M& a0 _: V. E& u- Q' Q
true- L% g! a0 D$ }' m0 p8 E

0 s; D+ V1 ?  V' Q9 b/*
3 l2 m7 {% R$ {5 P$ LJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
( S2 {7 M1 D8 [+ m*/
" O5 \6 }. R$ I. m</code></pre>
4 h9 Y% N( E2 D: z% v<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>& t2 \1 J: p8 O  q
<p><code>&amp;&amp; || !</code></p>. W/ a% P$ K$ ^
<pre><code class="language-javascript">&amp;&amp; 与
% a& o5 _! A( D! p3 A6 Q$ Y" h|| or
6 i9 B: H% k# F! 非
- @1 K7 K1 |& ~6 B6 }</code></pre>
1 A* W1 p; k$ E+ f' a# t" u<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>4 p+ a2 y0 A$ E  ], q5 d
<p><code>= += -= *= /=</code></p>
0 ^3 ~  M0 z% _7 @+ r<pre><code class="language-javascript">// 赋值# w. ]) o2 F# R, S2 Z6 d
&gt; var x = 3
. N: y' [# f& m; Z; i1 y// 加等于8 C' i. w4 j* N7 e  q
&gt; x += 2
" J6 m: ~0 P* S) C5
  J* Q/ j; N- L. Y! c" y9 m// 减等于2 y+ O& B) z/ `) u# g8 R, h
&gt; x -= 1% K1 o( ^; I) q% y, ^
4
2 u# g' w( w. i9 d( k// 乘等于0 }/ h% \* B4 D' z
&gt; x *= 24 \" A0 M" q" o) J, w! y4 p" Z
8# ]/ l: ?: ~# ~
// 除等于
7 Y. z8 U/ l( ^; Z5 Q& @) R; X, l! }&gt; x /= 2
4 ?7 G3 H' g  |  R8 J3 s4: m3 i' R( v- n* D/ C1 e3 A
</code></pre>. l, F* I6 }4 H: h7 [4 E+ d
<h3 id="25-流程控制">2.5 流程控制</h3>
; l5 `8 B+ H' X% w; L<h4 id="251-if">2.5.1 if</h4>
! s; f6 u, Z! c! O8 s9 r) \<pre><code class="language-javascript">1, if(条件){条件成立执行代码}2 y8 D% C4 [9 h, s7 v% U9 l/ b
. M" ~. a, v' ]  |' l
&gt; var x = 3
, m. j/ P2 J* N3 k  n3 g&gt; if (x &gt; 2){console.log("OK")}8 ?1 P! ~: b% T3 s
OK" E7 t4 O: n- `- D  [" n  B2 Y, Z9 g

9 [. q/ Y5 u8 x2, if(条件){条件成立执行代码} 0 ^4 ~7 o, Y7 D0 g, s% r
        else{条件不成立执行代码}3 b# Y% u. o- B

) T) C+ ]2 u0 l$ y# L4 ~&gt; if (x &gt; 4){console.log("OK")}else{"NO"}' Z! h+ o2 u: u4 e/ O# E
'NO'( z/ H" d7 `5 C( R* V' C
. I. z1 K/ `+ B) x2 @
3, if(条件1){条件1成立执行代码} 5 c% M4 A; h7 Y# V, q
        else if(条件2){条件2成立执行代码}# [2 u" d) i( F: B  B  l5 h+ U
    else{上面条件都不成立执行代码}* X. g# n0 U: d. _2 A- v+ T: e+ n. w# p
' m# T6 g" A& C; B- v- B
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
( z8 ?( X! Q# s) i# x( d- c, Y Ha1 ^% |8 n: q5 z" ~4 \1 i5 Q
</code></pre>
: X* C, }6 M3 @4 ?% F<h4 id="252-switch">2.5.2 switch</h4>
; a' p# v, g) ~8 w3 w<pre><code class="language-javascript">var day = new Date().getDay();
( A/ ~6 D  N2 K* L6 a- V, wswitch (day) {
8 L  M3 d8 Q6 d, w  case 0:, [+ R0 G' C( B
  console.log("Sunday");8 i& s, y+ l+ p8 r& C
  break;( W3 |6 E0 m8 x
  case 1:
4 M9 }) `: A- F6 T# X. [  console.log("Monday");* H* h' L/ T2 U1 x
  break;' a5 B+ M! x4 r8 `6 ^9 v  }
default:
- Z3 t9 \& C, I0 x, V- l5 E  console.log("不在范围")
9 i; u1 i: z2 X7 Z}
8 b/ K4 Z! l" S 不在范围
# a* n7 |- p: ?7 e# p9 p</code></pre>
/ y  E& n3 f% U<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
( D& s% }0 j) y<h4 id="253-for">2.5.3 for</h4>: |! E9 i: |6 F) K
<pre><code class="language-python">// for 循环
1 `3 A3 f1 _- ~! U- V% u        for(起始值;循环条件;每次循环后执行的操作){; e+ F4 k0 z6 u* E; q: Q# v. P, P
        for循环体代码5 n0 O0 o3 \2 X5 q% K* C# U7 j
    }
3 {8 p# }0 @; B' v) h
* z7 B+ w) t8 }for (var i = 0; i&lt;10; i++){
' {5 r' H" L' A0 q, l% h9 B$ r    console.log(i)4 R* \" t' b& [
}
/ D( q# M2 ?: U6 d3 I( s        04 }7 b9 J, q3 G
        1- J* {4 q/ u7 T! k6 M4 d* o
        20 o6 B$ `5 T0 Q7 J: z( Z; E2 o' a; u
        3. W4 u4 u* I+ [/ L" }8 L
        4' ?7 k) h3 k; ^4 X1 ~$ s% H, ~
        5$ H$ c* w5 [5 C
        67 I' x  t% P$ N4 O& ~2 {, O' U
        7
1 C" q9 A6 y6 h0 b" z) G6 ?: }        8
& @4 ^" p' i) c+ g8 J% T. \% v        9* L1 t1 O* t' i* h8 W2 t& B" a
</code></pre>- L% I. M0 F8 w) ^" D( D" C
<h4 id="254-while">2.5.4 while</h4>
- L# X! k# E- P  I- y8 X8 K* f; m<pre><code class="language-javascript">// while 循环, S. K- O3 z6 f! g' U+ k
        while(循环条件){! [6 G$ n8 B5 O/ ?5 i! n/ }
        循环体代码
1 s1 G5 X. m7 s5 b9 T) c    }' Y/ F/ Z( @; m6 y$ z

2 t  w4 |1 r, c, M&gt; var i = 0  f/ `  I) j# w1 @. Y) E2 Y
&gt; while(i&lt;10){4 s6 Y" P* _. l3 W# {+ \6 O
    console.log(i)
! t6 d: [! X! n5 Y% y$ o0 {% M- I5 u    i++8 o3 o6 \  p% m. I5 J
}
: }# C: _6 E# o 0% `5 m1 z3 s: s
1
9 u& m- F5 m* c* O4 o+ N3 {  v/ J 2( b( O0 u1 y! @8 J1 n# e1 o  ]) F
3, \* v1 Z0 g5 _- v- o1 p
4( `# z  Q7 w: V- d3 l' }  z4 x
5
1 X8 k. @; s1 V1 }$ v 6
0 s, W: }- J: W' j3 a 7/ d' I# N* h5 M# L9 r( _
8
3 |% I" W! j' u0 C 9, w8 d  a8 l! f" G
</code></pre>% ]2 A- x0 J7 ]/ n) D/ S" C% Y
<h4 id="255-break和continue">2.5.5 break和continue</h4>* h: D# x$ H/ @( y/ g% x/ t' t  p
<pre><code class="language-javascript">// break1 T# Z/ e6 L# L1 `' M; E
for (var i = 0; i&lt;10; i++){+ m4 x& l2 Q0 J2 i
    if (i == 5){break}
' Q2 R& y7 v1 X; X/ e    console.log(i)
4 H0 U5 v0 G# ^/ D8 }% u}" [8 m5 n" z0 O
03 |! ^; U2 C1 Q5 u; @4 P5 \
1
6 ], ?' }% w, N; S 2# p: z2 j; P' X4 H6 S
31 X6 g3 V0 A  U8 M5 @" Q
4- v& J! ?# i& n8 k" p* S: c
// continue
7 W8 u6 z# [- k: {& k2 l$ w: ?for (var i = 0; i&lt;10; i++){7 G; F& g! H1 _2 Y- }4 h7 ^, c
    if (i == 5){continue}
$ @. _8 b# p( t, A- L8 G# E8 c0 U$ N    console.log(i): c* U/ m2 P8 l
}7 e7 B" j$ k0 b& R- k, C# d; X8 d
0) K  Q/ n, g$ c* n2 |4 q( M
1! V5 |! L" \$ y; D
2
) X$ {- J8 f+ ~, K9 ^( I  n 3$ ~" x* {& o; b6 a" A
4
4 \- x; H1 s0 Q- z7 u, q' e 61 H$ ~2 }  l+ U# [) |' }+ V# Z+ l
79 {9 W+ l* ~# u. l. e) y$ C
8
' m$ m% p2 g' C* g 9
) ]: U- N' D$ O3 A& T
( Y1 d, V" p% g</code></pre>
( h$ K/ d0 z  q2 z& X' _4 s; Q<h3 id="26-三元运算">2.6 三元运算</h3>
5 {9 s; J1 d8 l; p" t  I<pre><code class="language-javascript">&gt; a/ T" B9 z4 n" M) z6 K  V
6
/ A* m+ X1 M5 C& ]3 f+ O&gt; b9 r& @. y  @$ H; B# C
3
8 B7 g2 U/ M* m& D! J/ v7 S) k/ A6 i
//条件成立c为a的值,不成立c为b的值
8 |: S4 O8 Z- ~1 I2 D&gt; var c = a &gt; b ? a : b
; r7 ~2 J1 y% h% M( L( K&gt; c
# q6 Q* O0 a. e/ \8 g0 l2 H6
# W1 w$ ], q5 V5 }0 }
. I, X6 F7 o1 \# r// 三元运算可以嵌套: n4 M/ d( Q+ v& Y" g
</code></pre>
. |: s4 n% E# l* Y0 a) k6 k+ Z! I<h3 id="27-函数">2.7 函数</h3>
3 B# {; ]2 O1 t! t9 m$ |0 X<pre><code class="language-javascript">1. 普通函数7 m2 v8 x* d5 S1 r
&gt; function foo1(){
9 w+ L" S- u5 {, \. Q2 t, L  n    console.log("Hi")
3 @5 h5 e( K4 U}
) k- f# M# m0 M5 z: D/ P" g+ ?( c2 ]- A; y- e7 x7 c2 R+ b
&gt; foo1()
& c" f, l- R) O- y2 a        Hi  i% S4 p( s/ G( V" k8 h
2. 带参数函数
& F  D+ Z, p2 K  T5 h&gt; function foo1(name){
  @2 W5 Z+ ^8 w% nconsole.log("Hi",name)
& I" [. u- z$ c8 [}
: p5 w" A9 r. _' T/ c& [' w
8 H. A$ \6 v" b6 p: M&gt; foo1("Hans")  y" F8 O6 G/ |! q7 u- r% C
Hi Hans
. G. t, I7 x6 ?, Z6 U9 w3 m
" Z) F" }: b* [( H: \. L* B. D&gt; var name = "Hello"
5 h1 T: Y( z6 w/ H&gt; foo1(name)% k& ^1 P8 y) Z2 P( e
Hi Hello: q/ S% n; K3 K5 N3 A5 g5 f+ p
$ @# \" g8 l. R4 A( T
3. 带返回值函数+ D/ R* s7 q+ K8 Z
&gt; function foo1(a,b){0 C. H- f1 _, @2 f/ F6 e. h6 A
        return a + b   + a# G3 t' ], ~
}2 C' J# c( s3 q! y# C
&gt; foo1(1,2)+ b* p: r1 X9 f8 U1 ?5 s6 Z
3# g6 Y3 @' @( O5 `4 s
&gt; var a = foo1(10,20)  //接受函数返回值
2 ?  Q: b: h3 p- Y1 h( R# c&gt; a
. ?; G- v. H5 s8 m30
8 T% E7 y6 x  u/ L5 s
0 p  [; N# w! H4 C. I" U/ ~( R! v" ?6 T4. 匿名函数# ?/ n# a: q2 \$ d! C
&gt; var sum = function(a, b){& v" @3 ^" j: s- s2 d, w% h
  return a + b;3 ~# \3 p% B' k4 D. [* {
}
$ {; R; V! `. a' X&gt; sum(1,2)
/ a$ a4 |0 m& X5 Q" u3  o- G; Q# R6 c' D6 m" L$ k5 \
# X5 {% a+ V" c7 |
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱0 S6 R9 _. ^. M
&gt; (function(a, b){+ ?7 t6 s0 x; t" q
  return a + b
8 l6 i" z9 a! N})(10, 20)
3 A( o2 D# U/ n6 Q) f30
0 y7 m8 d: o- ]- g; y& S
+ k, e, \/ S( T* u7 f5. 闭包函数, \- r/ Z! j1 m( D" D8 N
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数/ f3 f1 A* b$ h" @# `
var city = "BJ"
. b+ E$ G6 K; [7 M: D. t  ]8 e: p+ Hfunction f(){
  P; o% e0 }! A1 P; x# i; g    var city = "SH"! N! v4 i) X& ]* h
    function inner(){2 ^0 a3 p& ?7 S0 l' i
        console.log(city)$ d; o: ^# h0 T0 X: c% A$ ^/ w# d
    }
5 l& n! _( D8 O+ W% G    return inner
; y! z+ S0 ]& H; @1 k( |) E}
0 G" z$ e3 D; ?% E. O" Qvar ret = f()
" Y. N* U8 O+ o3 c% [* y1 }; Vret()+ o$ I; V" _* t3 I1 \& ~
执行结果:
) v( Y- T1 ?+ {0 n& g7 y' w3 l# ?SH2 `/ q; p+ u2 t4 }! y! R* H. ]
) h/ u& |/ O/ G5 \
</code></pre>9 M1 j, O" p1 o: k3 S6 e
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>& W: t& S; p3 b4 P% r) g; q
<pre><code class="language-javascript">var f = v =&gt; v;
$ H' j( k. n/ q5 P9 }+ c// 等同于
' V9 I; J0 ]0 O+ ]$ evar f = function(v){# @. r' k7 L( B7 b) S6 C4 q1 _) d, r  X
  return v;2 Z+ G! Z5 h( l; }) n
}
, m& `1 \& G7 H! o& d% A8 [$ T</code></pre>
5 s5 n# q% G/ J) v# \8 x<p><code>arguments</code>参数 可以获取传入的所有数据</p>
* ?5 M" [/ N  x: _<pre><code class="language-javascript">function foo1(a,b){6 Y6 h2 d; f! D! F- J
    console.log(arguments.length)  //参数的个数 # @+ c2 s2 t% ?7 g
    console.log(arguments[0]) // 第一个参数的值
. u  f% u- O2 B/ D        return a + b   $ t0 V* w- [" v
}
  T) E$ _0 v3 K7 [0 a. Ofoo1(10,20)
% T3 Q& }- Y3 N8 K3 S; V. K+ ?结果:
- c+ c/ P" b6 f 2          //参数的个数
$ k( e$ ~# _( j" L  E, r10        // 第一个参数的值
) L- |3 {3 E, S( Y7 u* q) `30        // 返回相加的结果% h3 H2 ~, _5 F% m8 ~5 Y
</code></pre>9 T4 @& X' A- X* d
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>( }* I/ B# J& d: b2 ^/ I
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
. o( y# _7 ~4 X5 @  Z  t, [3 ~6 @<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>' w, D! m$ M! B" r; t
<h4 id="281-date对象">2.8.1 Date对象</h4>
: G/ l5 X( f2 A<pre><code class="language-javascript">&gt; var data_test = new Date()* S( x9 x- Z0 W7 Q
&gt; data_test
' [$ r/ H9 z9 X1 ~  Z" pFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
/ ?+ Q' @3 M& ~4 i4 p! _) X, G&gt; data_test.toLocaleString()8 ]$ J0 u$ ?6 H
'2022/2/11 下午9:44:43'% X1 O" X' A% P! R
. ~  v5 a" }5 r) u3 H
&gt; data_test.toLocaleDateString()
* J$ e+ `7 O. b, S4 C7 q: O8 n, d'2022/2/11'* b; a. |% Z, `0 [1 H/ z, ^
- ~5 R; Q; _8 i4 |6 p
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
/ d: K6 D' r3 c&gt; data_test2.toLocaleString(): [9 W* Y/ @1 W1 C  U
'2022/2/11 上午9:44:43'
1 ^4 x  q6 [. b: s
  W( d! I9 B, g8 i// 获取当前几号
' n& l. q% z- |, I- j. Y. ~1 y&gt; data_test.getDate()
! z8 |' ~$ T& d; w& O- F6 n11
  x' |' p- }1 g# g# r- S. D// 获取星期几,数字表示& R: p- L5 H0 F) L, y
&gt; data_test.getDay()  ( f  I7 H6 }$ O0 s
5
( R- Q6 ~. H8 [# T: h/ N" r! b. H! ~) G// 获取月份(0-11)5 G4 v6 f; m& y  T
&gt; data_test.getMonth()' ]. N& t! N# D% @0 a
1
  J- D1 g8 \5 Q% I// 获取完整年份
" s- y0 x  z8 a" m&gt; data_test.getFullYear()
0 K' @& [1 {/ z# W4 ~$ x+ @2 U2022
( V/ \1 f, W; X// 获取时0 b# D9 ]; \7 z6 V
&gt; data_test.getHours(). |: S. f" [' u8 b
213 Z7 Q) j" f. o6 f1 r9 \! ?
// 获取分
/ Z7 F' s6 X( J  f  Z8 q&gt; data_test.getMinutes()& l6 S  g* k# t: G5 ?5 M/ w' q) i
44
, ]- I0 |( Y" N4 p0 |& g4 O// 获取秒+ j1 ~& b; n9 e  _$ @; J
&gt; data_test.getSeconds()
! J6 z6 v- N. D( a43
- R5 {7 \5 _4 }1 q7 [. L// 获取毫秒6 E3 B% Y. o, A4 v
&gt; data_test.getMilliseconds()
& z( B- n$ _/ B( z# k0 \" Q290' ]) r) ^) V" r5 `  r9 |
// 获取时间戳: S- d7 B" ~$ p. ^  X* K" \$ m: c
&gt; data_test.getTime()
. b6 Y2 j5 h, `1 H! @; V" d1644587083290
3 K9 q7 a5 l6 B+ _& Y( C</code></pre>1 O* f- {6 R0 E6 r. `  h) M$ T7 A
<h4 id="282-json对象">2.8.2 Json对象</h4>, n6 [4 R; D4 \1 p! y
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
1 ]( f3 O$ O$ ~. t; N0 O! @. nJSON.parse()  // 反序列化,把JSON字符串转换成对象2 \5 l8 n$ z# W9 }/ {
2 @( b1 Z. i; x& z7 C; B$ A# c
// 序列化
3 m# I' G* B! l3 Z/ H5 s+ Z1 ]/ o& i&gt; var jstojson = JSON.stringify(person)
3 v9 ^* L( l8 m! S# [&gt; jstojson  
3 |" l4 e8 z4 b" B7 E$ Y'{"Name":"Hans","Age":18}'& |- p, c$ m0 l' {. O9 M- m

# O' A1 R5 _6 @" [// 反序列化  s  W( _  V! ^5 Q
&gt; var x = JSON.parse(jstojson)/ {% X1 U; g7 I- H: `
&gt; x' J% m2 x, T% Z
{Name: 'Hans', Age: 18}- M1 Z- K  z+ w; r+ W4 t2 E
&gt; x.Age
3 |0 C7 l5 ^# n18
/ L+ p; Y2 @1 r* R0 J2 H) K) L</code></pre>
: r3 `: B% t6 l! U( r5 K<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
' p$ q/ B" q# H- q0 q<p>正则</p>2 Z4 z$ A5 I& w
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");4 N& B* D4 C- O4 _* Z% {" M
&gt; reg10 n5 U0 x+ c5 N" w8 N
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* s# T/ o8 C! y) I5 G
&gt; reg1.test("Hans666")! E% ?2 Q6 m6 |" h
true+ f5 X/ u: l* p  ]8 u
. J6 V/ I2 \* w. s$ b* n1 I! e- V
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/, U$ W) n4 ~- Y* D  y& @
&gt; reg2
. [( t( D. t/ c. ~3 @6 ?% f/^[a-zA-Z][a-zA-Z0-9]{4,7}/! `+ e! a+ i9 y/ m4 {. y
&gt; reg2.test('Hasdfa')
5 o1 X" t- t! x" }true/ ~$ T: C7 z; s3 n
2 a- |: a% f# D
全局匹配:
) ^3 T' B& c" A% ^) C&gt; name" }% y, X( U* U# m
'Hello'
, u! \; _3 A, i) c$ K&gt; name.match(/l/)1 R& j& L. w+ J" M' [
['l', index: 2, input: 'Hello', groups: undefined]
' B( u. a4 E, A, c
% G# ~1 t2 n1 d; a: s4 B&gt; name.match(/l/g)4 y$ `) j* {/ Y5 r5 t
(2)&nbsp;['l', 'l']
& \/ |& i7 J8 n6 o" f" a// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
  W, Q) o/ r: i1 j% ]. N& \
7 |: o  n4 ]6 C6 _! H; v全局匹配注意事项:
! H1 {7 f+ I/ u4 H5 S$ Z7 V7 m( Y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 J3 |; R4 C( W6 F8 F7 O6 o) q
&gt; reg2.test('Hasdfa')
" f( t- I1 T/ y' r- Utrue
% }& `+ n: ?" N5 V6 A0 E& V&gt;reg2.lastIndex;
/ U" ~5 R6 m1 g# C! p& d8 o- H3 N, Q9 @6
, `% W# E( p7 a0 v2 @0 d&gt; reg2.test('Hasdfa'); x1 H' A3 W* h& Z8 @$ u
false# P7 k" U; N0 H% r
&gt; reg2.lastIndex;
4 r& k6 W) `! \3 r" A0
' a# p% o; x0 F$ w: A&gt; reg2.test('Hasdfa')0 G3 }6 U. C& c# \$ y# |" j
true; ]( D) p7 Z7 d$ H, R5 _( O
&gt; reg2.lastIndex;
4 N+ A. y& Q9 Y4 ]$ s66 E: R( _& K- H. C
&gt; reg2.test('Hasdfa'): k. J# ?: m$ b* t. o
false
$ ^. |* C7 z  m& x. _&gt; reg2.lastIndex;
$ y$ J  s) E# W9 e0$ Y+ g, j( x2 y8 s$ J. H" o, b
// 全局匹配会有一个lastindex属性
4 ^. K& B0 Y  w. R3 a; R&gt; reg2.test()- i. r- m5 H& v0 q: P
false
! w+ {' y5 s5 P$ a# o4 N, s, A&gt; reg2.test()
' z- _1 c. A) ~- Y8 x; n( \' Ztrue# d2 r, s3 W7 v; n! G
// 校验时不传参数默认传的是undefined
4 L$ p3 `: d) Q: Y) R8 e</code></pre>8 y+ A; R1 ]! h- A: s& Z" a
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
  U  N8 D+ z# `<p>就相当于是<code>python</code>中的字典</p>9 `( e- G: j* _) C7 b
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}3 J( e6 S7 W  w6 H8 [
&gt; person& Q# q8 Q% {  B
{Name: 'Hans', Age: 18}
9 Y2 L. I( W) j! s&gt; person.Name* @  p- N8 m) E& i9 t
'Hans'
8 N& c0 G1 V4 {* a" i7 D3 x&gt; person["Name"]
$ y6 c; ?% E2 c1 c'Hans'3 ]* P( H, P2 ~5 d$ ~" s
- n- C: ?! \1 G$ K% b( X
// 也可以使用new Object创建
3 A1 x6 ]: I8 f# z&gt; var person2 = new Object()
# X" ^/ f  q! J4 E&gt; person2.name = "Hello"' k: S1 A! u& X1 z! p
'Hello'
3 C  L- V5 q5 ~5 k. c) y/ o3 Q&gt; person2.age = 20* A. \, c; \5 |
20
9 g* x2 {' w: P5 e1 o</code></pre>
8 Q6 d1 P5 u  U. i6 {( c<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>) w8 Q+ O: e/ f3 n  j
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>9 U+ z0 g, I# Z% J; a
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>" Q. Y' G7 J. a
<h3 id="31-window-对象">3.1 window 对象</h3>" o8 N' j7 k8 U9 B# T" M& y
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
- e. d; d4 t+ r9 d6 f! f3 [! }  e<pre><code class="language-python">//览器窗口的内部高度
% P. P3 ]# n0 n7 xwindow.innerHeight
% a0 T/ h# x. A' B( l0 Z, L: `706
. L* G# [5 X) `0 n$ v. o- l//浏览器窗口的内部宽度2 j5 U! V' A( R$ d+ s
window.innerWidth3 x( U3 }5 L# ]
1522
, F: @9 g& J3 _  R// 打开新窗口
8 p+ m; k# z# J3 D& ewindow.open('https://www.baidu.com')
! R$ I4 X. q2 z! qWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
0 h" S3 \) d2 x- m0 W+ ]) Z// 关闭当前窗口3 ]0 K, A4 P- S
window.close()
7 j) {* _5 H$ W' v4 q% ?: [//  后退一页$ @& y; H8 }% N
window.history.back()! T- r8 k! i  Y
// 前进一页
: b0 y! `- X6 @+ i& {2 Gwindow.history.forward() # `- t# S( D  L- o5 G' `
//Web浏览器全称
6 a2 |& @; L) Q6 gwindow.navigator.appName
& U! Q# i# D# }. f8 V. Z. L'Netscape'
5 X5 D! T, V2 @5 c. W/ ^! \" V// Web浏览器厂商和版本的详细字符串
" g8 _; W" u' Qwindow.navigator.appVersion
! e) M4 j2 w! L1 ^# q'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ x7 V* o: Y" z2 _// 客户端绝大部分信息) a! q  N( K! D2 _6 _! |$ A# w
window.navigator.userAgent
6 J5 I" D9 N3 x/ }, P! T; }- j'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
% ^1 p1 N* O" U// 浏览器运行所在的操作系统" i: \- y! Y$ R) p0 J, g2 R
window.navigator.platform& L: G3 h; E6 B8 f. }
'Win32'/ S$ s" \6 d8 Z& P) N

8 a. C3 J% q) h//  获取URL7 s: C' h0 v" J% z6 h# J
window.location.href" C0 A6 O% j+ T, K
// 跳转到指定页面
7 X( C$ U& A% X. `: ^window.location.href='https://www.baidu.com'* o% ]  z# f* ]  {0 K1 I- l
// 重新加载页面
2 a; a: T7 X5 z8 Zwindow.location.reload()
; V" ~+ ~# e1 W& V5 m</code></pre>
& K. P7 D# c3 ~* L, J4 n4 c<h3 id="32-弹出框">3.2 弹出框</h3>
  x6 [$ W6 @) ~; a1 r) I3 S<p>三种消息框:警告框、确认框、提示框。</p>  c4 d+ J# l+ G  I7 H+ z
<h4 id="321-警告框">3.2.1 警告框</h4>
! {: |4 L6 j! m8 N<pre><code class="language-javascript">alert("Hello")
) R7 }# F  l; Q; o6 S7 R3 Y1 b</code></pre>/ w1 F$ b/ r  X$ x0 P
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
$ w3 e5 X: m+ |<h4 id="322-确认框">3.2.2 确认框</h4>
' q1 Z$ M# `) V: J/ I<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
7 W  G9 h* ?, A0 ^% B<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
. l5 H2 x( W& y( dtrue
- s3 C* y3 F3 v  o1 n$ G" S- [# z&gt; confirm("你确定吗?")  // 点取消返回false
  p7 z5 ]- O- @false
4 ]6 }% r" t7 H, b% m/ E</code></pre>
+ V2 r3 ^2 d0 F( `7 y<h4 id="323-提示框">3.2.3 提示框</h4>5 n4 P% k. k+ m" f7 h+ m; u" X6 b
<p><code>prompt("请输入","提示")</code></p>
* p! H7 ^! z% C- z; Z, F0 Y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>9 `5 |& t% r) T. M( C
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
4 t5 B$ o$ W0 v( R<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
7 z3 x4 n) z- N9 B, e<h3 id="33-计时相关">3.3 计时相关</h3>
0 `& B$ U' N( H2 ]6 @6 @: U<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
6 r5 V% w+ X+ g, U+ `  N' k<pre><code class="language-javascript">// 等于3秒钟弹窗9 k+ V0 E  d. p3 Y
setTimeout(function(){alert("Hello")}, 3000); W% l) z" _: N5 R8 t0 l

4 O' ~/ `8 X3 }% N6 W9 h& ovar t = setTimeout(function(){alert("Hello")}, 3000)' p; t" U; n2 N4 V: T4 _5 h
  X9 x$ F  N( |8 v, J" u
// 取消setTimeout设置
- u! Z( b6 ~; lclearTimeout(t): x5 q+ t4 V; ^$ [! u
</code></pre>8 W" D/ B% x2 T0 ~- j/ w4 P
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
3 O7 b3 U) J% P- y8 X9 y7 `" y<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>' g4 X2 |4 i* A+ f( c, @
<pre><code class="language-javascript">每三秒弹出 "hello" :' u, _5 p, T4 z& R
setInterval(function(){alert("Hello")},3000);" H, ?  R. K( ]
</code></pre>* z: @$ {; U) V) H3 p3 K; l* R5 i
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
7 y" c( I: S; O7 j! E1 J<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
8 i, h) g) l; w3 K( ^1 ~6 J//取消:" z: C# T  a1 m+ I1 C( u
clearInterval(t)' t" ^; A& E+ d, W2 l8 Z" V
</code></pre>
' ~$ F( g. t0 C# ?/ d
% f% w2 X% L* b/ x5 o+ {
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-28 17:59 , Processed in 0.131582 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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