飞雪团队

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

前端之JavaScript

[复制链接]

4137

主题

4225

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
14711
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

* c8 S( A  g" D6 c) `7 r" F<h1 id="前端之javascript">前端之JavaScript</h1>
; Q0 N" K. }# B$ v4 u) s8 d<p></p><p></p>
; D( L% ^' e6 Q& B- j( N<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, t; d$ u4 @$ l- L( D<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
( V5 ~6 D5 v3 o' O它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>4 S) b2 r8 L0 F7 w4 Z+ R9 I
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 o3 I! F+ c7 n7 b
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 a: C5 K  d. j
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
( f' X* A5 }# o  _& l. x<h3 id="21-注释">2.1 注释</h3>
- Z( Z% y8 _9 l1 T/ F6 E<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
3 s  l! J, D- O9 {5 f<pre><code class="language-javascript">// 这是单行注释
  `5 `6 B- i3 Z8 K+ E8 {0 w2 n3 s5 T. K* C# X
/*+ }3 w' s  X2 D6 w6 T7 i/ P- i
这是多行注释的第一行,
' \5 T% S" `2 i& d/ o$ W( P这是第二行。
# ~+ \0 X+ ?9 z* S*/3 Q4 P4 N- w: [) _, l( L
</code></pre>; \, R- J/ C7 D% P$ E% u) j' b! I
<h3 id="22-变量和常量">2.2 变量和常量</h3>
8 y$ ?& ]/ L8 R9 g2 U<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>- ~5 c4 ?  t4 v/ S; w
<ul>, c( X% t3 J/ a, z" T7 u( b4 @
<li>变量必须以字母开头</li>; q/ [& [# B' f- `& q3 [
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
  ^4 T# u# t) D1 J: D<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>" ?1 H4 t3 `$ L6 L- P
</ul>
9 y1 F7 P. z2 J: X; z<p><code>var</code>定义的都为全局变量</p>% o- J) \" ~; E
<p><code>let</code>可以声明局部变量</p>
5 U7 S7 X, J( y! y* l& n: R<p><strong>声明变量:</strong></p>
: x% _2 s) y! k  k0 r7 F4 y<pre><code class="language-javascript">// 定义单个变量* ~+ G( V9 ]- X7 H. t5 `4 h0 \2 N/ |
&gt; var name  ^6 R0 i3 y4 E0 V
&gt; name = 'Hans'
- D' i% s$ m; _& Q5 T//定义并赋值! F0 H2 b7 n. Z" Z% L, o" m
&gt; var name = 'Hans'8 P% t' F0 i- v; Z
&gt; name  z9 P& y  h  h5 m; m4 Y
'Hans'" A6 @! i5 {1 d) m5 l

2 H% p9 |1 [% r; o, c! }// 定义多个变量
& @0 X' l( b, Y+ [% J, Q2 L2 X% E&gt; var name = "Hans", age = 18
7 i# I7 ^" [$ |  _&gt; name( [4 Q( v" i1 z5 m2 n
'Hans'! G: M; q! c* Y/ L, k! O4 V. }
&gt; age
; h( u8 E/ w' M18
4 S) C# O* o& K* I
( P: Z& I1 e. u9 K5 i//多行使用反引号`` 类型python中的三引号
* G1 y2 k, r8 V4 {&gt; var text = `A young idler,( L- J( S9 T: ?: _4 l, k/ U2 D  H
an old beggar`
# \. k1 u: F4 M&gt; text
6 q8 x- S/ O! c! }3 v5 K. `'A young idler,\nan old beggar'
& C9 L- C* ?4 R</code></pre>
- |+ s8 s" ]1 Y1 T<p><strong>声明常量:</strong></p>
+ ^' |% d9 T5 Y<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
. L! ^0 }( B0 h+ E7 I( R<pre><code class="language-javascript">&gt; const pi = 3.14& j1 z; {8 t. M' R( m
&gt; pi8 I1 e" o- b; t4 K
3.140 b: M7 Q# {! g1 @% L! D4 b% G
&gt;  pi = 3.01
" F8 K, x+ |+ o' n' RUncaught TypeError: Assignment to constant variable.
$ ^' J  j4 b8 g/ E# ?9 L1 Z7 s& x    at &lt;anonymous&gt;:1:4
  j* A$ V: Z% S7 Y6 L! D8 |$ F* F. @( W" ]2 X2 E8 Y
</code></pre>; `, p$ y2 C. Z+ q* H& U0 z
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>1 V; x2 {6 A9 S
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 y8 B% ^) @/ ~' J# G: |  `1 w
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
5 H: b( ~) Z; y; n5 Q& Y<h4 id="231-number类型">2.3.1 Number类型</h4>: I7 f8 Q4 h# I2 O
<pre><code class="language-javascript">&gt; var a = 5
! p/ W1 R& {4 y4 _% U, P&gt; typeof a   //查看变量的类型  : z4 j- w1 Q9 ]5 u- s* s
number
+ F. t; `7 j3 |0 y) g
; H( `! E/ L2 M&gt; var b = 1.3- @0 w  {* D" X/ v" p
&gt; typeof b$ u* m6 |, t. u: K* c. N4 U" m
number( r+ {) y. M" h& `

: I; F; B4 G1 _" s1 d4 m" ?// 不管整型还是浮点型打开出来的结果都是number类型
7 C: A$ ]# m& ]. \1 |
% B! T8 r  S5 Z# w/ j/*
6 k- V. p0 _. W% v+ n4 o8 uNaN:Not A Number, j6 R( X' v; V7 K$ h
NaN属于数值类型 表示的意思是 不是一个数字$ \# e/ z% g# d: o8 L
*/
1 h8 U$ W6 L% }
9 N$ D  A2 @1 W9 O# L$ I+ C( JparseInt('2345')  // 转整型
! f  l$ r0 T; ~3 w" D' i1 w2345& Y6 ?/ c* T/ l- w" ~/ X
parseInt('2345.5')1 l6 _. P' l5 v" b, M
2345( L- f; a0 x" v$ N
parseFloat('2345.5') // 转浮点型
+ l7 J" U/ v" `" d, r3 F7 u% u4 q9 m2345.59 C& b! N' b* \" i8 t- v# L  Q- n
parseFloat('ABC')
  f6 E; ?3 g+ @, w6 R& K4 F( `( I! W) RNaN& ~9 Q& b5 [& e' W! M( Q
parseInt('abc')0 W& c& Y! g- ]9 ?! o
NaN2 x" f; N6 o. w6 _  C7 _
</code></pre>
6 W1 h" q7 I2 B* x8 A, }<h4 id="232-string类型">2.3.2 String类型</h4>3 y; I1 J1 g5 @( s# x* L: k
<pre><code class="language-javascript">&gt; var name = 'Hans'
; N/ o* B. z3 N" u3 o8 Z&gt; typeof name
1 E: L/ \9 B$ C) x: R5 q'string'
3 i& o6 Z& |/ J9 I7 t
' A$ `" x$ X1 e- ?/ Y  D/ f//常用方法
! z' z4 S: N3 z8 X1 f/ q4 S// 变量值长度
% @: o8 m! r  f% l1 g! c4 f&gt; name.length1 h* ~( ]$ W  @9 f1 e' s
4
" J+ d3 u# ^. x( s. O, `9 M: y// trim() 移除空白
/ o7 a- |3 a1 W3 r8 x&gt; var a = '    ABC    '
# j4 M2 N# k6 H4 _9 ~' e$ o! ~&gt; a' N( L8 T1 x- ?, l9 A2 C9 P+ O
'    ABC    '. R& g, e) h2 ?/ Y4 g5 e
&gt; a.trim()
" }: `3 E; w0 e8 A8 l9 H- E0 z5 K'ABC'& _: e7 ~0 o( |% |9 A8 ~
//移除左边的空白
: {2 I+ i4 N- I) P7 q6 y1 E&gt; a.trimLeft()7 o% A2 F: y* A  C
'ABC    '0 a# F, I" F' g+ e' m; ^
//移除右边的空白6 E; y% B" `5 c1 X6 O
&gt; a.trimRight()
+ Q7 o7 |- n( o6 X3 g'    ABC'. H0 o* n( O/ s: R0 }5 @& l8 G$ I

: ]2 o1 _; C0 C; H) U* J  i//返回第n个字符,从0开始6 G5 S8 C; {9 h
&gt; name
6 g8 F8 c* c; k( T7 j, m' y'Hans'
" E" L- n% d  f% w&gt; name.charAt(3)
2 u) D4 |, S5 c* k% W# E's'
. g" f# F! s% P/ ?&gt; name.charAt()+ g$ O! U/ C0 A. |( n- u
'H': r( Y7 W# r0 j  ?( A6 @
&gt; name.charAt(1)0 y, z6 r/ N; X
'a'/ m! M% S( W  f% H

9 s5 Z3 c8 z* k// 在javascript中推荐使用加号(+)拼接
8 F8 z) a/ m' p. H# D&gt; name
" ?( z. i$ j! S. ?. k2 H'Hans'
# P/ p+ N$ N8 O! x. t4 }&gt; a# K" l; N; I% h
'    ABC    '
# m( n3 }2 S7 x4 ^, S$ J&gt; name + a
4 }) J5 N+ E5 e'Hans    ABC    '7 j( ]0 l/ {* b
// 使用concat拼接
3 O# y# Q' c/ U: u& l; D&gt; name.concat(a)7 D  E8 }: c. Z% z( W4 E4 Q
'Hans    ABC    '
! |8 S1 k7 e# s( l. N  b- z* y' `: D
0 t$ r! A1 H8 T+ \$ }/ K7 ^//indexOf(substring, start)子序列位置. S& {; a3 @$ W, p
2 G9 ^, |- s! k/ l' J5 |7 j: U
&gt; text
; @% l: u0 g: ^( S'A young idler,\nan old beggar'
' q  |7 {6 l/ B7 }& z9 q  {&gt; text.indexOf('young',0)
* }# V2 m0 a4 |) j7 N1 n' T3 T2
% T  q# V# o# k5 E* E% x
6 ~0 @: }% H7 \* p( F7 X  F//.substring(from, to)        根据索引获取子序列
8 ]7 z$ j6 `! K9 R1 |6 |7 w&gt; text.substring(0,)8 l: W& Z  l2 j
'A young idler,\nan old beggar'3 M  r! |5 i, m: t0 e
&gt; text.substring(0,10)( q. q, A6 s* U: _. N# U# b
'A young id'4 l# i$ F! z6 k& q) t
$ Z/ C- N* q8 g5 ~' u  l
// .slice(start, end)        切片, 从0开始顾头不顾尾
, U$ d% D" ^" U&gt; name.slice(0,3)0 `6 H% a" |; V
'Han'
5 A3 G5 ]" H' r
  I- C* Z7 U0 j// 转小写' y% o9 Y. U! d
&gt; name
8 l2 I* v2 Q$ ]$ L; C'Hans'
2 G! H2 t8 O9 U6 s&gt; name.toLowerCase()
8 u1 \' V; y" @9 M2 T) ]- u'hans'
' g' E/ N$ H. J/ z5 C8 `* B// 转大写: I: @$ I& i3 ]& ~( C9 f
&gt; name.toUpperCase()
" [7 w3 N+ ^+ Z9 j6 y9 y0 j'HANS'0 y( U, N, T1 H" `% N

( G$ I% _5 W  Z) x: X9 |// 分隔" o2 d* ^' I* P9 \4 _" u
&gt; name
" B9 ^/ ~6 t$ D# ^4 ]# V- t8 @1 ^7 G1 X8 p'Hans'3 c$ h0 |. Y2 {. C
&gt; name.split('a')% [1 q8 k  ~" [! r0 H
(2)&nbsp;['H', 'ns']* B) a3 L) F% s( h8 [* u4 A9 ~7 s6 U2 p
</code></pre>
0 K; M) i0 F' e: p6 _<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4># T5 r2 ?8 c% b3 ]2 q6 j
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
7 b8 U- m. |1 t( j<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
) r! P; |& Q9 j) g<p><strong>null和undefined</strong></p>
4 O6 x" e- \. e. k1 @" g<ul>3 ^( _& S0 c: R0 {
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
& [; H1 z7 l7 a/ G4 y3 D7 ~, ~<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>" [- _7 {, _; Y+ K! ~& [
</ul>* }+ X) ]' _% x& F" @
<h4 id="234-array数组">2.3.4 Array数组</h4>
; P- G& k, a% S1 P4 v<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
$ c# L8 O; x! V; P5 }# A6 b<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
1 v' u7 h7 r1 q& ^5 I7 ?&gt; array1
: \7 p# C5 `, z/ n7 x' t(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']3 t1 P1 e5 L- P( v
&gt; console.log(array1[2])  //console.log打印类似python中的print
" w% g3 ^) I! i) b: Z9 c3
3 y' @8 v2 o; L. L// length元素个数7 {8 E: p  g2 R
&gt; array1.length0 V, H6 t  \) x% q( W1 J, u5 S
6
# X! T. T) E7 N// 在尾部增加元素,类型append
) ]6 s3 |; |# B. w- h* Z( U  x&gt; array1.push('D')
1 i" H5 `  t9 k! q) Q+ Z7
7 ~; c' _$ v+ b$ ?& f&gt; array1) ]) b) `/ x$ r7 F0 i  h
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
2 m) g" j  q/ b4 I5 W// 在头部增加元素
( O. @$ \7 b# O: k7 t% W% A% G) z6 m& s&gt; array1.unshift(0)
$ {& Y; ^! d4 x7 f$ r81 F+ m( |: J* |5 M& o
&gt; array1' P+ n4 T, L3 K% i4 A9 c
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']; |* n, h) S% [1 Z

& n% Q2 {# t) f( s+ T% l//取最后一个元素
, |! j1 V7 s3 _3 I&gt; array1.pop()% E5 @, x2 s4 q# i
'D'
( |% A- y- J! @0 p$ v&gt; array1
! l0 M3 x6 v' s3 S' H(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ d& m7 H# r: x' ~0 z: D& g
//取头部元素
; i- n  G# k$ r& |( F&gt; array1.shift()
: C6 \! c$ ^/ {0
; k$ }5 {" d4 D, n2 g. X&gt; array15 R1 ^4 y, z% u$ G' o1 `1 g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- x7 O" r# c1 [$ U" Q) B
9 X: \. w" @& z//切片, 从0开始顾头不顾尾
% y; C# b1 q4 o& h&gt; array1.slice(3,6)9 T8 p5 C% C' [! T) s; G3 I
(3)&nbsp;['a', 'b', 'c']* q$ N  W5 f/ G! A5 A5 c
// 反转2 F- J6 {7 l( S( @8 W1 M
&gt; array1.reverse()
5 G/ @& W# V3 E5 \(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
, `. g% L9 b  B  Z. N- {  k// 将数组元素连接成字符串
# w3 s! m4 P" F5 v* R. r, T&gt; array1.join() // 什么不都写默认使用逗号分隔) M# F: w& I6 |
'c,b,a,3,2,1'$ F4 I4 }7 S. U/ r( w
&gt; array1.join('')7 t9 i6 x* _  K4 r$ @
'cba321'1 s: g( x5 V0 W, J' a' H4 c
&gt; array1.join('|')5 {, c* j7 C8 }. q, T2 i: F
'c|b|a|3|2|1'  G. F3 C' a' R4 t; R: c; v) j% |

$ H- u" W5 p, x8 B" {// 连接数组+ [9 V: o9 p: S- i) W" |! z0 G
&gt; var array2 = ['A','B','C']
2 O0 E% z5 B3 O6 D&gt; array1.concat(array2)0 K" Z2 s" J2 A
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']7 I$ C! ]# R7 P$ G6 X% L( ?7 ?
. ?( F" n& j/ f: N, ~. ~7 R
// 排序" h4 f7 w; T1 y& f- R! m* o9 |0 U
&gt; array1.sort()  s' I: @# E/ @! d, w
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- t. u6 x3 }2 m. H, r* z7 Y2 D& {
// 删除元素,并可以向数据组中添加新元素(可选)
6 P/ u, k6 w6 q- [&gt; array1.splice(3,3)  // 删除元素+ d. i% B6 F3 f6 b4 I7 E4 ~6 v0 H8 T
(3)&nbsp;['a', 'b', 'c']* G' I8 e3 F+ S9 v5 H( f
&gt; array1
& j% u/ e# D7 i/ ?(3)&nbsp;[1, 2, 3]$ I+ i! Z! o, y# F
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
/ m: t* _$ n1 R9 x[]3 ]. l7 X# F, N3 [' L; O4 e6 G5 Q
&gt; array1
6 j" b# u4 o$ r  ~- n(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']$ K6 r8 O/ d) V/ B# H1 G
0 W8 R$ M. q+ r
/*4 U% J' L- [( K% H
splice(index,howmany,item1,.....,itemX)
9 j0 N9 `0 s- s4 tindex:必需,必须是数字。规定从何处添加/删除元素。
+ I) m2 y! G/ Xhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
5 d  f; P/ R1 W& p" W7 m- w& Y0 Xitem1, ..., itemX        可选。要添加到数组的新元素) \/ y3 Y+ B+ N0 y  i) X/ i. _% U) m
*// Q3 v; T8 o5 U: c3 j

6 n5 n; [& C' d! V2 ~( W9 Y// forEach()        将数组的每个元素传递给回调函数# e' R4 @) K" f! e
&gt; array1.forEach(function test(n){console.log(n)})- H/ L+ b( y. W+ `: ^0 w
1
' Y! f' X. K( A  j 2
, b$ K8 R2 c7 Q. [, e 32 o! `# M6 D. W1 y
A: R, `* H* ^4 \) ?) O
B! ?1 ]8 N4 Y- x* ]5 X  R8 i
C  e3 \. [" ^. j( a' R0 D  F
// 返回一个数组元素调用函数处理后的值的新数组
3 M% j3 V" [+ g9 T&gt; array1.map(function(value){return value +1})
" ]6 d, k1 J: J: A7 I(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
3 o& G9 C! f* k4 y</code></pre>% X) v+ v. m' {# `; r# m
<h3 id="24-运算符">2.4 运算符</h3>0 n. E  l0 o  [! `3 t0 l1 U
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
7 o' R" w. S. F0 f9 g7 W<p><code>+ - * / % ++ --</code></p>; j+ r6 K- N& y' ^1 o& I
<pre><code class="language-javascript">&gt; var a = 6
& s4 n" W) b9 Z&gt; var b = 3
1 v7 m5 Z& x/ I4 e+ h// 加
4 [& r$ O2 p# U& C2 g: U8 ]& f/ e&gt; a + b
' H9 r- x; k6 a9% ]) D2 n9 D7 b) X; y' i
// 减
3 l. w$ G- ]8 N  C/ ]# ?* v&gt; a - b
" u0 I( |# T1 |+ F3
& S% r, T- e3 u! d  L// 乘
8 U8 D4 o# B7 Z  q0 W&gt; a * b
# n9 t( z8 x% [! F- Z7 G18
1 Y6 A$ G  S9 A4 \5 O6 t3 g) Z/ n// 除
. ^9 T5 s! m7 C& U& C&gt; a / b) M0 q! s; N2 [6 h% S: _
2
9 @2 F5 n) Q0 `$ `9 ?8 X* M// 取模(取余)( B1 ]' L) W7 k+ v
&gt; a % b
: `! s+ \0 \" S5 y$ O& d0* `* a. U% t; {* T% z
// 自增1(先赋值再增1)
! S" ^( C/ y" K" ?$ u&gt; a++
- m6 j  Y" ]8 R' L8 p* y2 B6* o" d% G* A# P1 `1 \! H+ d$ @1 S
&gt; a6 |5 m: e! @4 e* k, D- k, K
7
2 Z4 }0 I( ~6 \# ~, A4 d( G// 自减1(先赋值再减1)' Z) s/ o4 T4 M, p1 {8 |
&gt; a--
8 Y9 b, s% W; `( x2 P7  h0 I) D& s! t' x6 Z9 d$ s
&gt; a
$ }/ t- K! f; ]$ E/ h62 ~( ^4 ~$ {) r) {7 u4 p8 Z
// 自增1(先增1再赋值)- ?; h- p- z# z  \3 A% M3 G' Z+ S" U
&gt; ++a* G. d6 J8 K' Z+ h" D
7
2 @: u" u6 ^% }1 ^& p8 Q// 自减1(先减1再赋值)7 Y! E1 d! q) H$ @: f1 j
&gt; --a
( w: \6 w! e7 \" M6 |$ U6
( h6 m( W! M* q&gt; a
' h2 q! Y# c( ~) J6
& x/ S" }4 Q1 n* v& o( v
( J* W- z0 k& D8 @+ ~0 h2 v, B//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
8 i7 G* t; Q7 e- ?</code></pre>
# a: d0 Z9 X- `, i, r<h4 id="242-比较运算符">2.4.2 比较运算符</h4>) S; W8 A4 B" U, J
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>1 T, h! a% c) ~4 x& A7 t
<pre><code class="language-javascript">// 大于
5 Q" `# J6 \5 c8 i1 J8 @&gt; a &gt; b
/ v) \9 A* v  z  ^+ q9 D" Otrue
* s: z  j$ a8 ~1 Q% l$ k; k. V5 @: P2 W// 大于等于
- L: k6 c) a$ A% s( ]- }' l&gt; a &gt;= b" `7 ^. X; ^# S& r0 a. X: i& a
true
! r, J1 Z7 T3 f( E1 B2 n  L// 小于
+ o( _7 n& G$ J- u* Y8 J4 Z) h' e% T&gt; a &lt; b
+ ~1 L  l3 R7 d; e% \* y7 yfalse
, z  A* S3 L9 x// 小于等于
- i" {! R7 G: G, o&gt; a &lt;= b& U7 f3 h7 U4 W1 |# d) E! h1 Z0 l
false/ Y% @4 f8 t3 p( d7 k+ {
// 弱不等于; n: c9 ?" d; [; d- O7 }. q2 E
&gt; a != b" n+ E& Q' m% x/ c' x/ c
true) q, t& m6 a  p; @& \6 h; D5 O: b
// 弱等于
& m+ j) P  O; t* W! t&gt; 1 == '1'
5 d9 P6 w9 E, g0 i' Gtrue
$ G8 x' o7 t: k  h0 d4 F// 强等于
) o! m( H4 ?- ?6 Z9 z3 m2 r&gt; 1 === '1'
5 B0 S, B# o" }+ U# l0 `5 Wfalse* L: S' }! T* t+ w% B
// 强不等于
# d  _. B* `* u( x/ d&gt; 1 !== '1'
* o6 U! h( q% O/ j: I, ftrue
% [6 x  [* [) |8 N3 Z. O. P0 u: b" s9 f9 m! i0 o& }- u
/*
2 H* b) ?) P( t9 KJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
7 H1 ]) I4 X1 O4 e5 P*/
5 u( |9 b0 N+ M  E, r</code></pre>
7 j8 M) r: D: a8 B+ T<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>! I" Y1 h7 a  b7 l: M
<p><code>&amp;&amp; || !</code></p>
6 ?- H9 l) G$ a5 r- Q$ t8 e, o<pre><code class="language-javascript">&amp;&amp; 与. z7 A/ \  v/ [/ ?! e) C/ G
|| or
6 M/ q, s& n/ u$ S' U$ X! 非( R1 ~2 W8 T2 K( M0 R/ g! F
</code></pre>+ ?) c/ W! S" X+ K# z
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>$ h/ j, T9 Y, `
<p><code>= += -= *= /=</code></p>
7 y4 w1 K! I! P# e3 s( V<pre><code class="language-javascript">// 赋值/ E; V/ F5 N: N- [* f- e& D
&gt; var x = 3% ?4 Z; F& y5 ^- M9 ]% g% E! ^# }  L
// 加等于
8 v: f! C9 W& O6 @2 D&gt; x += 20 `* \2 F  E# `2 O& P6 z/ t( @
5
9 P' {$ }: d( _- m2 {4 i// 减等于' N" l$ q1 T, k0 C+ ]0 \3 u1 ?
&gt; x -= 14 U* C& F8 E5 h$ I
4" c) n& S* }. L8 o7 o
// 乘等于1 h: F( ]/ {' A' x5 u; K
&gt; x *= 2
. j; z4 F9 f$ E& A8% F$ ~, T) u6 D- e$ U: |0 `+ V* c# p/ w
// 除等于6 O3 _- o! t. J# h: ~+ P) Y/ e
&gt; x /= 2
3 z1 d# ]  |% O/ ?% f# @4 b+ Z6 T4% ?& T/ B/ I, k6 [! r. N
</code></pre>
, [) n6 K5 i3 F7 t<h3 id="25-流程控制">2.5 流程控制</h3>
' L; m7 A4 ?8 H8 J% a# R. |<h4 id="251-if">2.5.1 if</h4>
& @4 l: n7 `! E' R! l9 J<pre><code class="language-javascript">1, if(条件){条件成立执行代码}' `% F4 A% J  u) p( E
; o. S1 B6 N4 E4 S+ q5 k* s# \
&gt; var x = 3
" h. w/ D- G( s/ X3 o. q- ~&gt; if (x &gt; 2){console.log("OK")}4 o& |3 x- u9 l% B! @
OK
2 ?( u+ O. e4 p  n  I9 [- w  S% k7 A( P& q. [; G' Y
2, if(条件){条件成立执行代码}   l4 [) e& O1 m# [# g4 v1 F) X
        else{条件不成立执行代码}
# M2 P$ F0 j1 ?! m7 c* g7 v2 f( v, K6 g4 B, A
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}6 y. }) w( e% c$ l( S, q
'NO'
/ F7 d) N; H' X; ]% W; {5 A( Y0 ~0 H1 w! f5 c1 `
3, if(条件1){条件1成立执行代码} + C/ y0 o4 o: @; c9 Z) q/ U. X3 x. B) E
        else if(条件2){条件2成立执行代码}! s% t$ c1 {# X" r/ j6 i# b
    else{上面条件都不成立执行代码}6 ^; l. Q% c# V9 B: H
; V0 m- t0 G% S/ V3 }# Q; o
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}7 J- m+ {4 n5 a8 g- k' m8 {/ G" I
Ha
$ t1 r7 c3 A4 P* I</code></pre>! d8 {; S% ~$ H* N- @
<h4 id="252-switch">2.5.2 switch</h4>
( X/ N% e" m+ l4 f! H<pre><code class="language-javascript">var day = new Date().getDay();
5 X; d' o" K& M" A9 dswitch (day) {
6 l, [+ {1 I5 O+ J  case 0:
0 Q0 A  h5 ^& k- u* d  console.log("Sunday");" ?4 q, ^  b) |9 q
  break;
/ T: x- d2 `. Q( b2 ?4 j- r  case 1:6 \7 |2 v8 R- l  o% i
  console.log("Monday");; K; V( r4 l# A) V) u& v
  break;- `- I/ r& T" x$ c; g7 P
default:. ?: V! e2 y6 x3 I- _
  console.log("不在范围")/ h5 p( j  s( k" K
}% L) q  s9 e/ T+ ?$ ^3 V, Z
不在范围
: d0 e( W, _, B! W; {$ I2 i) |+ G% V</code></pre>
0 _. p- l6 }% P$ B0 Z<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
; d, h* A; D" _6 n! ^<h4 id="253-for">2.5.3 for</h4>& t& B- j  j3 h& n  E+ G4 ~
<pre><code class="language-python">// for 循环4 f8 X  U4 B+ M7 s4 ^/ l
        for(起始值;循环条件;每次循环后执行的操作){$ j/ L! x# S9 P& ^
        for循环体代码9 X9 D) `2 K- W  Q1 X2 y) g; i
    }& E  v0 R1 X4 T; ?

( r. \0 \2 W- a8 w( P$ Z- vfor (var i = 0; i&lt;10; i++){
0 D  f- ]6 X4 N( e, F% M9 w6 ], p    console.log(i)
# o6 Q. ?# B3 v: V; Q' n8 L}
- W# h5 i3 u0 y        08 \" u+ w* P5 I3 J
        1
8 {+ z' G3 X% h6 @/ l, f        2
3 m  _* b; S! U# d3 m1 W9 n3 l        30 l  O* `7 w* i& H! ^% r7 \
        4& b8 r0 x9 Y- P
        51 H/ Q: {4 U* Q0 p
        6
' L6 ^7 Z/ J, o# y- e        74 e7 u/ W. `5 {$ E/ S/ L  H
        86 y/ G$ x; w: J+ k; U
        9- X" N. ]' j& S: T: V
</code></pre>! Z* o' q) W7 u4 a8 |. z
<h4 id="254-while">2.5.4 while</h4>, Q1 t) ]6 t  R( x; Z6 I. b
<pre><code class="language-javascript">// while 循环
; c" x5 G, v/ ]4 C* y1 z* L) a& v        while(循环条件){
1 C, s0 |7 _4 I% R" Y: o, n        循环体代码& d" `0 M1 d; Y3 b+ A" [
    }3 `, E# \2 N  _( t( s
9 C/ m9 J1 k# o1 ^, D% s: A
&gt; var i = 0
/ x4 Y2 ~: e: H* o* `  Y0 X&gt; while(i&lt;10){
7 p0 @# ]4 E3 }/ a6 P% O  c# M    console.log(i)
( u! ?! _& z, ]& s0 k3 {6 S2 b    i++$ Z0 U; S3 m0 @- w$ ?  C* R3 _
}
9 p" L( v  K9 C3 Z 0
9 r) G6 `: b# f  c3 Z( X/ G5 U 1
/ ?+ K( @7 ?. {+ w 2$ v4 {3 Z1 ]* r/ y
3
5 _6 ~$ n5 N! u/ S% H1 r$ A 4
7 v. C# a- F! c% O 5- o  C% m/ I/ X3 H+ b, H
6
  D- t+ g" U5 Y/ a, {! V 7
; A4 |+ C4 c* ^; E/ i: `5 x6 _ 8
' \$ i0 o- R! ~$ X  x& N1 Z 9! H$ J: |$ N+ }% U
</code></pre>: U2 D! U2 B1 q! o, `9 i# E
<h4 id="255-break和continue">2.5.5 break和continue</h4>6 U. O: g0 G/ f8 T7 m0 w
<pre><code class="language-javascript">// break( f" \- i% r- B$ c9 |6 W' {
for (var i = 0; i&lt;10; i++){4 O; m1 J1 p- E! n/ b/ |. B" |
    if (i == 5){break}3 Y6 ~8 r' x6 b. b
    console.log(i), m! b% C" R. @" T8 |
}
5 q1 u! P- _$ {: d 0$ T7 \6 w5 w$ w
17 m8 c; q4 q) z7 E- u
20 S0 L5 r) o- r+ m# G: m
3
+ z; X+ g& `' W3 u9 A 4
6 ]! @, |& A7 `0 ~% }// continue
7 H3 W4 w4 T1 {* ?$ i0 M9 b1 Rfor (var i = 0; i&lt;10; i++){
) g( V- @; G0 v1 d7 F    if (i == 5){continue}
" e4 K7 g3 B$ b6 J    console.log(i)
. Z. P( C* {% l# t$ I+ h}$ N' A/ _- `; D! I$ a
0
  g+ ~% U0 b( P& o+ o4 U 1
6 q, l/ U( V! C 2+ h! r8 U' {& b+ j. Q; V
3" t' E) s6 a5 H+ s2 n
4( |* O$ H% A8 E* ]9 H, [
69 G( A7 q( c* c
7
# E; K: a1 D& z- @# V  k- M 8) C6 G  a5 G+ r0 X
91 t( W9 J' o/ c6 ]3 P1 j" L2 i# G7 _

/ L% L4 D0 E( Z0 n9 o/ o5 c</code></pre>
0 ~; C" n: ~/ A: t/ u6 x<h3 id="26-三元运算">2.6 三元运算</h3>
) H4 r- W# d( J<pre><code class="language-javascript">&gt; a* {* e! y* i9 E0 j6 k) [' |. }, x' M
6- C2 r. t6 ?7 z5 v3 j- E- |5 \. i
&gt; b
5 s/ ?& s2 y$ V4 k0 C30 T  F5 d4 W9 ?4 J3 {1 ^
3 {7 R, B# b: h5 `7 \
//条件成立c为a的值,不成立c为b的值
# t5 A) z" l. ]3 T8 o&gt; var c = a &gt; b ? a : b5 j* F" G& n7 P& c1 k/ B4 ]6 P
&gt; c7 R: N: S( |1 b* D  i8 c" z  b' D
6
4 e% B- B& l4 S# h$ ?' \
* [1 `$ R( r6 W- l% h// 三元运算可以嵌套5 [0 Z1 s, G6 M/ n3 ~( U3 w( _
</code></pre>9 X& R' F  u, B% B* o8 w' N) ?
<h3 id="27-函数">2.7 函数</h3>! P1 U* k7 B( p2 R
<pre><code class="language-javascript">1. 普通函数/ S5 `3 M9 L7 |: h3 G
&gt; function foo1(){+ F! e$ s) `9 g
    console.log("Hi")
% [: P5 Z. L: @& S}( b5 t, o9 S* u3 p6 |( w

  p! b' Z- H9 ^6 _  |: W  h&gt; foo1()
6 R6 q% |& L& `  O& y        Hi4 ~) s1 p1 Y: c% C% Q: G; K
2. 带参数函数, W' u. `/ O9 `) y
&gt; function foo1(name){
0 ^0 T. H( Y8 u1 L" _' d! e2 uconsole.log("Hi",name)6 V! Z  ~" L& z6 f2 S5 h6 T
}" M; n1 m2 V. M5 u3 T8 h  [" r% V
8 \  _2 p8 {- o, s, s5 U% z
&gt; foo1("Hans")& n% h! G8 A: x) V+ W
Hi Hans
; R. h. F- f% s6 q8 d1 L4 _( g% Q, Z7 h
&gt; var name = "Hello"
+ u! f/ M! k+ x) w. d&gt; foo1(name)8 t. j/ C3 w5 m0 U; N  u6 o- |* H
Hi Hello
! }% u0 O( p& _; t% `7 E# i3 ^+ ?+ G! h0 B. m- }6 L
3. 带返回值函数
: O5 j( M1 k% E2 ~7 Z- s&gt; function foo1(a,b){
' }/ F/ Z/ T7 Z( ]0 x3 }  n. a: A( U2 p+ }        return a + b   
, N3 U  q8 P$ U}- a6 U+ [8 n5 ?8 f8 d! L
&gt; foo1(1,2)# a: G' R7 T6 T$ G. ]7 V
3
3 ?) Y4 D0 I4 A+ N0 d# o&gt; var a = foo1(10,20)  //接受函数返回值% U6 G0 n8 C  A
&gt; a" Z% j' |" N. R2 A8 C) r2 d
30
1 L* v# U; Y2 [2 b2 u
, e- Y( m. ]' ]& M9 D: L4 O4. 匿名函数7 \+ \( o; e  V! o0 W
&gt; var sum = function(a, b){
+ f4 X, z4 y1 C! D5 S  return a + b;
3 U! u' |1 l- W}3 B" Y' G2 q! r9 y4 Y, x
&gt; sum(1,2)/ ]# L! J# ^: b. G" W9 [
3
( ^: c$ J! w! b8 ~/ C. P
1 j" W3 e8 k. B$ G) l// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 y3 ]$ s3 J; v3 _3 D
&gt; (function(a, b){! I& A8 Z7 C: c9 _- L1 T
  return a + b  @& p6 K: w1 @  r( z/ D
})(10, 20)9 W7 g8 }" l9 G4 Z# F# Q$ F
304 X: x/ ]6 \& n( z: S  S

4 j6 S, J6 K$ j- w* d* r7 z5. 闭包函数3 Z( p. e/ D9 g5 Z* k
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数  {" K% ~3 O/ l( l# Q& U
var city = "BJ"% ?6 ?6 q1 I: B+ t1 {7 p
function f(){
( d+ C' y1 ]- M) ^! E, O    var city = "SH"2 D) W& q' a8 v) |& C* h
    function inner(){
1 M; B" O. _8 m, o6 a& }; b        console.log(city); \2 w% ]8 j7 D8 D& m
    }
  q: r0 V2 h8 e# _6 j    return inner, e7 ?. \4 ^* g) C$ `( z% Y
}
* w7 O, s+ ]# k8 F3 ?var ret = f()
0 z! X  V9 F; Y4 e( s* G; W0 zret()
# @' M, A4 C: ^3 a  k3 n执行结果:
/ b. _# |$ R8 @& r, ^3 h3 @4 Q$ SSH
! d( s$ P2 |, v$ }8 m. e- e: C
: B% h8 G7 e8 z  c0 N</code></pre>
- v$ ]* A# P2 _<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>/ U7 [- h3 v7 O: g& ~
<pre><code class="language-javascript">var f = v =&gt; v;
& C: l% w7 C! e$ L/ {1 s: W2 ^// 等同于
) H4 A) c' Q. ^# u$ fvar f = function(v){5 j' h5 u. z1 x( M
  return v;
$ v' A" ^4 S1 q7 k& m$ d3 N, h; N}
& {5 \7 W. m! b% V: H" \- H</code></pre>
- M/ B  A& d1 l4 ^9 _3 I: B4 f<p><code>arguments</code>参数 可以获取传入的所有数据</p>3 z: C/ c  {9 M! r* \
<pre><code class="language-javascript">function foo1(a,b){
0 `8 x1 w4 A/ g( _7 U. N    console.log(arguments.length)  //参数的个数 " i8 @( C. o8 L/ h3 {' T$ u
    console.log(arguments[0]) // 第一个参数的值
0 \/ n3 B. H' U' z; C2 ]7 v        return a + b   
. G% D7 ^0 C( L}9 b7 V% J9 M. @$ J. C" S
foo1(10,20)2 I& K( m8 o! Z) G. Z
结果:, N0 S! p# m6 \- w
2          //参数的个数 ( ^1 ~" k# d# @, F9 h' A8 e
10        // 第一个参数的值+ c- f& A; }( l* F2 u6 S
30        // 返回相加的结果& ]- U) @& p/ M3 V, y5 `0 k
</code></pre>
/ L. P4 n4 k) i6 g<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 p1 }, G  D- G% P<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>; [  w3 S( p$ i; D" H$ Y& g
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>  K' B# U# S3 v3 b7 v/ T2 e) m
<h4 id="281-date对象">2.8.1 Date对象</h4>% M/ I) T$ C) Q( _' A) r
<pre><code class="language-javascript">&gt; var data_test = new Date()
+ G. i  Q5 ]: m8 V+ ~% S+ q&gt; data_test
2 d( h$ N: B: l+ J* Z* hFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)# E6 F( U  @3 C1 ?
&gt; data_test.toLocaleString()- d3 ~7 x2 t1 o5 i2 q3 g3 l% r: d( t* }
'2022/2/11 下午9:44:43'
8 X( q- W9 _! [4 ?  E; F2 L6 \
) g) j! v' n. Y( i1 d) C! J&gt; data_test.toLocaleDateString(); u0 F0 H0 z. K- s! R# _4 h- F8 \
'2022/2/11'$ q8 o% \9 z! j) r6 }" p/ L

9 r6 Y# ^( d$ _6 P* l6 C; e& _# c&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 F" b( ^8 P7 Z& S
&gt; data_test2.toLocaleString()
" x: P% K% n5 K'2022/2/11 上午9:44:43'9 x6 e7 g& t9 L2 {
6 {, V- P5 w- i4 p! i3 h# ]
// 获取当前几号
3 X* l0 O8 n# _4 u) n( s&gt; data_test.getDate()
$ C/ X# q9 C$ k% p0 a' m11- u3 l1 m0 T% x4 A& {4 Z
// 获取星期几,数字表示) C! Q7 O' Q" Y  q) r: C
&gt; data_test.getDay()  
6 H0 I- |7 t  ?1 [/ g% u5
, G  V! q# {9 T* K  Y+ y# ]. K// 获取月份(0-11)
9 H1 D" ~2 e+ `+ q/ t&gt; data_test.getMonth(). H! g9 O5 v( }/ `9 \$ i: c  G3 {
10 K% i/ C' t) O6 |8 N! m$ Q
// 获取完整年份8 P7 x3 G* @9 Y6 ], |9 i0 P0 s
&gt; data_test.getFullYear()0 X, _3 P$ A9 O& D- c
2022
3 K  p/ i9 g* w% t. m2 @// 获取时
6 T% ]  k; W- ~  |# Y&gt; data_test.getHours()
8 a" C- w! u) M$ O, Q5 e2 n5 b( @21; d" n7 X; |/ [6 z- W
// 获取分
; d% H& e! O0 P% C  T&gt; data_test.getMinutes()8 G8 T! M8 c& ^0 l/ S# p5 i' _
44
( N. H* M/ o- }// 获取秒
5 m  h% j5 l; J&gt; data_test.getSeconds(), F3 G+ u! }" q) ^9 ~  k
43
; ~6 ]2 ]% }2 n- q' M// 获取毫秒
5 n2 d* c& D4 q# @&gt; data_test.getMilliseconds()* H6 R5 O! K" M0 ~
290
4 {$ F/ e  ^( [* ^3 g8 h8 [// 获取时间戳
( x0 A4 Q% [8 U' M7 B. a6 |&gt; data_test.getTime()
+ c) m( C5 z9 l5 M$ G" J16445870832902 d  \- B9 k; i4 R) [* K
</code></pre>
3 ~) M: m# e8 v+ G: r  H  K<h4 id="282-json对象">2.8.2 Json对象</h4>2 r; K' p1 ~5 h8 a4 i
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串* W8 I% M1 Z) a2 \' h# P
JSON.parse()  // 反序列化,把JSON字符串转换成对象
# b2 p0 [, F3 P9 i# |% Q
: `) ^4 \, W4 z% _. c// 序列化8 c- L) e$ E, x% ?5 A3 F2 J
&gt; var jstojson = JSON.stringify(person)
. m" P7 T' S4 k- R+ B- o&gt; jstojson  . H3 ?( Z, _4 x& }
'{"Name":"Hans","Age":18}'' ?% }$ X5 _8 t+ l) i. o
, j8 o) F* u0 o  I7 d2 A
// 反序列化& J  ^; E) e9 o5 p9 C
&gt; var x = JSON.parse(jstojson)
5 O3 O4 i3 X9 h+ d" V) {( O8 P&gt; x
  n- M! h; o5 J( l* E/ e{Name: 'Hans', Age: 18}5 S" |+ t2 s; t5 ~& \
&gt; x.Age
/ y, o1 Y1 Y) k. m: S  ^% I. K! i18# ]: F0 K* X8 N) o4 R4 e- h
</code></pre>. S% J/ B: r% C! g1 `7 D
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4># m8 O/ {$ F& F& L7 x& t( k
<p>正则</p>, q, e& }& \4 ]. n- Q+ ]. [/ r2 ?
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
# V* `  z% f. e) n3 m3 r&gt; reg1
  n0 L( ?# K; e) }+ {! x+ F/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- S/ R* A: K6 L- h&gt; reg1.test("Hans666")' L7 S1 F0 b* H0 m. O
true- w0 s6 o; v5 J+ w) a

% B) E- O  z% P: R' @&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/9 ?; q  F: z! g9 }8 n, Q8 Z3 p+ \
&gt; reg2
) h6 B3 {; v' N: _: o( f- ]" f1 E/^[a-zA-Z][a-zA-Z0-9]{4,7}/
2 m9 z2 r  |: O$ w; l&gt; reg2.test('Hasdfa')
- F9 l7 x5 M7 Otrue3 C- ~& E3 L# [( W5 h
- Q8 K0 f+ A# h
全局匹配:+ d) O# e/ ~3 ?' q! \
&gt; name
' z$ \9 N1 {" E# ^3 b'Hello'
( n% d* i3 h$ p8 W8 \2 c! k, Y6 X6 e&gt; name.match(/l/)' E1 |8 {; ^; N1 l3 V
['l', index: 2, input: 'Hello', groups: undefined]/ B6 W7 g# O' h$ g
, s& P% T; g/ V* f- R
&gt; name.match(/l/g)
2 }4 y  h% @5 V4 l& g(2)&nbsp;['l', 'l']
" i6 P- ~5 m2 r& m// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
' i4 j: ?6 K! [4 G$ E. V, Q# ?7 n
全局匹配注意事项:& X2 ^% a3 D$ o, w* p" u
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g1 s: f+ U* Y' r
&gt; reg2.test('Hasdfa')3 [5 l% S: {8 t
true
" J# m0 j8 P% p3 P" b5 i% r&gt;reg2.lastIndex;% G, D3 x8 ?- m+ ]0 G9 M1 }
6
* O  j7 K" ?9 Q8 i9 J3 C&gt; reg2.test('Hasdfa')8 Q4 h5 f* r( x( Y4 N1 p( z) _
false  ?$ f3 q2 K4 L7 t! ?' m1 w
&gt; reg2.lastIndex;+ R7 l* Q- z6 r! J' p% e( K. Q8 R
0
  Y% N9 I* Z) j' t+ R&gt; reg2.test('Hasdfa')
* y6 h6 X: O; i# `, C# ctrue
/ {" h, G' S, X. k  k/ s9 o7 N&gt; reg2.lastIndex;
7 e, h8 C, c7 B: }# ^6, Q- ~7 u1 V1 b$ v- z" q- Q. }' ]
&gt; reg2.test('Hasdfa')0 r4 b( O5 G  k3 s: |7 i( l
false
  T9 Q) T4 i: z* p$ m) d&gt; reg2.lastIndex;
  D- \2 ~5 @, U0
; s8 F  K" n6 Y- m+ S' Y6 C  t// 全局匹配会有一个lastindex属性
9 v* u& U3 ~7 I4 s# g&gt; reg2.test()
! ?4 t" Q6 b6 q: w- {0 `false8 v6 t% u/ N$ V1 R9 w8 s2 a
&gt; reg2.test()& w5 J; Y9 n( I6 Q0 x% G- _
true
1 k+ m! v3 V% a( Q// 校验时不传参数默认传的是undefined
1 `( C0 B; S7 s) v3 C% e/ x9 O</code></pre>
  |" l, i5 U0 R; o: H) n<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 t+ _" R2 H+ O: |* m5 \& N3 B
<p>就相当于是<code>python</code>中的字典</p>. J( ?  R5 C9 @* s  w
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
8 d  h2 a: `' P&gt; person/ d" s4 D+ p: h$ L1 C5 H
{Name: 'Hans', Age: 18}) F' j" F  D% ]# |' a2 a7 I% `, ?$ w- T$ C
&gt; person.Name3 z' n5 d& S5 y# @0 Q3 |
'Hans'- X: L, f9 K) A
&gt; person["Name"], F% `/ [! V( i5 e8 z% D; E
'Hans'( D/ E: q' M( M, ?) _
, u5 }6 @- Q9 f+ ~! e& ^* H& S
// 也可以使用new Object创建
" j4 A/ [- V+ U& `% Q&gt; var person2 = new Object()' g# h5 o4 Y& e2 e& z0 L8 M/ W. a
&gt; person2.name = "Hello"1 {# v: p  [& y: h
'Hello'/ G2 N9 [& ~5 ~+ b) H% g
&gt; person2.age = 20
" T; q% d) V0 ~# _! F2 P20
1 l" P, s4 N& Q. Q</code></pre>
& M6 ]8 ?+ i1 R! D: A<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
& C! G" _2 s* F2 h3 R) Y( o) P<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>. r' ?9 ^' x6 V9 \7 V
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>- n% z8 Q. F& S/ A; q7 R8 x7 x3 ?
<h3 id="31-window-对象">3.1 window 对象</h3>7 r% D" H: k+ G2 o
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
! I+ S/ \) ?- P5 I$ C. ~7 Z' D- i6 t<pre><code class="language-python">//览器窗口的内部高度
+ X; i1 @- e1 D' F. Qwindow.innerHeight - N8 E; D8 I+ D5 z- g6 C/ B
706. F( [- u2 P. l( H/ r- w+ x) e* g) a
//浏览器窗口的内部宽度: l/ z# l" E' n4 b' z
window.innerWidth
9 |' I3 ?+ `/ k) }* O1522+ ]! p* U! I$ M! l" L
// 打开新窗口4 m% R) _. B5 o! R: G: X
window.open('https://www.baidu.com')
. ]3 r* J, S. n7 a) J* `  ]Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}$ o; G& _+ G' Y/ L
// 关闭当前窗口8 Q$ N. \8 O, Z7 `: [5 s" {3 O
window.close() 2 [( s0 P/ @( ?3 a
//  后退一页
; ]% c/ _$ G( rwindow.history.back()
, L9 S& f" i, \: e7 v. L  t// 前进一页( @5 G4 R: b1 F9 E' _
window.history.forward() $ B# ~9 R1 l8 ?! \2 ~, B& P" [
//Web浏览器全称# S- X2 B4 P  `. f4 D; ]
window.navigator.appName
, x# j& b. B/ l1 k2 _2 c4 q$ x'Netscape'" i7 J$ i, D/ }. S7 B) `1 X
// Web浏览器厂商和版本的详细字符串* T2 ]. K) P( S
window.navigator.appVersion
, `8 |2 i9 w+ |& G'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 v/ l5 V: H1 r1 o2 T( C
// 客户端绝大部分信息
  ~2 k- X/ r  S! b% a' b( W( h% Lwindow.navigator.userAgent) V) Z* C9 T. t7 e3 b9 G: _" M( M
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& H7 g) M7 @/ L1 [4 f
// 浏览器运行所在的操作系统
8 `) u$ M2 [; I& C0 W* }window.navigator.platform. q: v0 j- d+ |
'Win32'
( U* N- e7 d6 k- F* |" t& n2 M8 M
//  获取URL
/ c# a2 ~7 L8 |; g, x) q. cwindow.location.href
' X2 [: ~2 P9 |- }& z& o// 跳转到指定页面
- t* Q/ G1 {5 ?/ e- p3 P; P- Ewindow.location.href='https://www.baidu.com'
4 o2 k! d5 Z# P: y' e* R// 重新加载页面
& L! r8 Z6 ~$ X6 Bwindow.location.reload()
. ^' E$ Y8 ]* }) V8 f2 L$ f6 z</code></pre>
: W/ _5 J: J# Z9 c& g<h3 id="32-弹出框">3.2 弹出框</h3>
) C( f% Q# W/ e1 {- ?( l<p>三种消息框:警告框、确认框、提示框。</p>
/ ^2 T; u( ?# d$ c. F<h4 id="321-警告框">3.2.1 警告框</h4>
& e; X& L* [2 O* ^! S<pre><code class="language-javascript">alert("Hello")3 V4 e. s; d! E1 e: E( x- K
</code></pre>5 e0 Z) _1 T6 C
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>9 O  u' m1 ~% P2 H4 P9 @
<h4 id="322-确认框">3.2.2 确认框</h4>
& ?# R1 M: Y4 w$ q0 h3 A<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>- ?: v: U4 K/ W
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true% e$ |( S4 ]8 {4 ^$ N
true: ?1 r1 W/ c, X
&gt; confirm("你确定吗?")  // 点取消返回false
( C) f  U8 z; j8 f& W  l" u3 Sfalse2 z+ s9 }5 N8 X" x( r* ~
</code></pre>& ^. W7 s9 R4 n& w; r
<h4 id="323-提示框">3.2.3 提示框</h4>
" b4 v7 k& f; t# F3 F' z$ d<p><code>prompt("请输入","提示")</code></p>! h; b' s3 A1 E0 u. [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>1 _# V/ |; a0 F& g- @6 H
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
% K( B. `# G, I: j6 W1 D<p>如果直接点<code>取消</code>后端收到<code>null</code></p>  }% J% \% ]5 ^8 D4 @
<h3 id="33-计时相关">3.3 计时相关</h3>& S: `  E/ H+ x# f$ b6 K5 ]
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p># v0 R2 E0 w+ \+ ]1 u
<pre><code class="language-javascript">// 等于3秒钟弹窗" A0 x: t' h$ l
setTimeout(function(){alert("Hello")}, 3000); \3 s) ?" p$ J+ n8 T- u

0 H, Z  Z! A% v- t% B1 {# l) O: bvar t = setTimeout(function(){alert("Hello")}, 3000)
/ ^9 b9 S# g3 Z6 w! o
& z! S$ t* ^* [1 k2 S" b( G8 O: y3 T// 取消setTimeout设置
: K+ E' t, V9 B( N, HclearTimeout(t)
- ~6 x/ P. I9 u</code></pre>
% |/ R% r+ `% o- G/ S8 Y<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
" ^) ^9 M- p8 b- f<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>* E" @/ O, }' \6 \
<pre><code class="language-javascript">每三秒弹出 "hello" :
; ]# f5 W8 {  g0 f. EsetInterval(function(){alert("Hello")},3000);5 H, v: D5 g/ Z9 d2 d
</code></pre>$ \5 G. i8 f* q2 P% Q; R: [/ U$ A" {
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>7 k# g) X/ {. w; l
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 Y2 H8 D$ a) v) r) D& \9 T4 X- Q//取消:' \/ X* o) g! V& W, Q; |
clearInterval(t)4 q7 ^6 H0 H, G6 B$ E
</code></pre>7 d- F* U7 E0 k. h* y
& S. S* P: y4 X0 @& O! u7 i
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2024-4-27 12:08 , Processed in 0.130294 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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