飞雪团队

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

前端之JavaScript

[复制链接]

5744

主题

5832

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

" t3 c3 f7 y$ D2 C<h1 id="前端之javascript">前端之JavaScript</h1>! m# }5 X0 J/ P; w
<p></p><p></p>
5 C8 ~! @7 r5 Z) ^. j: a( n<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
. e) c! }; J! d3 |9 y1 |1 J<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
: o" X. J& l/ B# J它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
, D; Y% N6 U  U8 F, ?它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>4 i, V7 I4 r5 W
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
; `* @% ~$ V8 G7 r' \8 _<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>  {7 `* g. k  e5 c
<h3 id="21-注释">2.1 注释</h3>
/ {! E! e" x. @  f* d4 j# o<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
5 e- |  y8 P8 Y& z<pre><code class="language-javascript">// 这是单行注释. G4 j# c/ M( }  E
6 ~/ `1 l: K) a$ m* Y
/*1 r" A. j0 p1 |7 U5 _2 ~+ q- C
这是多行注释的第一行,: q6 p4 v. x, O  A$ |$ T
这是第二行。
7 i2 |- f7 U5 {  \*/
2 K  W. {: e# ^; t</code></pre>; o+ ?4 d8 K  ]6 T0 D
<h3 id="22-变量和常量">2.2 变量和常量</h3>
) |7 E, F+ j7 N0 t, ~* x<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
' Z) w. Y, G# i7 b6 I1 B0 }4 M<ul>
9 `6 z; ?% e: p  \, \* ~+ w<li>变量必须以字母开头</li>
0 f5 z* L8 q& `  y# a; E4 t<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
( R  u# y! I- Y7 r5 V<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
! I4 ^4 e4 i  m9 W! u* w</ul>2 Y: |9 g8 }' Z$ h3 o9 j
<p><code>var</code>定义的都为全局变量</p>
' `7 K0 C+ @7 O, y<p><code>let</code>可以声明局部变量</p>
' f5 X1 A5 n# b5 Q' C9 p. ]<p><strong>声明变量:</strong></p>, ~! e  L2 z6 o/ Z6 X
<pre><code class="language-javascript">// 定义单个变量8 l" S5 g. V/ m+ X
&gt; var name
' w. r5 K/ n6 b+ p&gt; name = 'Hans'
7 |) }& z+ I8 }9 V% o2 E7 w//定义并赋值
* ?9 E1 u; y) s& M/ {$ e&gt; var name = 'Hans'
8 E, I) I3 _, T5 r+ d1 u! f&gt; name
. _! f2 f, t9 r2 t! X. ]'Hans'1 Z$ s8 c% R7 b% [7 n: d% ~

: y% p9 `" y; M  e$ y  p% {5 o// 定义多个变量
3 G. j3 s* {/ j5 t# e  \  H&gt; var name = "Hans", age = 187 e% z1 g# y1 M! q
&gt; name
4 D+ F8 y- H* G1 Z- q$ G( N'Hans'
. J9 Y5 u8 F. F: x& s&gt; age
6 k6 L  q- C3 e, A6 B18+ Y+ j  ~; q& c& j5 q+ O' Z

3 V! ?" |( j/ ~( M" t9 n. y2 {//多行使用反引号`` 类型python中的三引号3 d% }6 U6 o7 Y7 i4 Y9 d
&gt; var text = `A young idler,' `; g+ A6 p/ I: M1 f/ O! J
an old beggar`3 ]0 A2 |2 R) [4 f- A  R. C) L
&gt; text
8 B, \# p# Q3 v7 s'A young idler,\nan old beggar'
! B6 f$ C2 T* o3 D1 c* T</code></pre>
8 H( a4 ~1 A1 [<p><strong>声明常量:</strong></p>
" A- ?& }3 j5 l% ^<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
- [. X5 N, L3 F  I# R- l7 v<pre><code class="language-javascript">&gt; const pi = 3.14( R; E/ [5 Y# {
&gt; pi, W% z7 L. ]9 N0 v) ?- n; H; a% d
3.14
& w- X( Y' H# n! _* }6 v* a9 ^7 s&gt;  pi = 3.011 W0 R+ `% p0 I4 I3 s$ R( W
Uncaught TypeError: Assignment to constant variable.' K: I) d: t& ?8 L0 j
    at &lt;anonymous&gt;:1:4
; Y" p# r, m1 O$ ^1 l: M$ Z- [
; D9 N1 j* R5 w0 b  S7 O</code></pre>
5 L5 i; P. U# v$ \<h3 id="23-基本数据类型">2.3 基本数据类型</h3>: x8 T& t, s' T9 N
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p># V+ z/ V* s1 O3 V4 c
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>7 b$ x& N1 ?4 U1 z
<h4 id="231-number类型">2.3.1 Number类型</h4>& a1 T( ~! g8 W8 s9 |/ r# O" X8 B
<pre><code class="language-javascript">&gt; var a = 5
3 r; x7 Z% c3 O  O&gt; typeof a   //查看变量的类型  3 k) B4 F) e9 v7 V' h
number
% l: A' T. b8 E% O" R
7 ~  B3 T3 T7 E8 y8 d&gt; var b = 1.36 S' ~& d9 H# V/ n
&gt; typeof b
" H; G) M3 \1 a/ b: Enumber
: M2 z* t9 N* W3 Y& s9 @- {9 O  Z2 D* P- R5 o6 P5 {$ q9 N
// 不管整型还是浮点型打开出来的结果都是number类型7 u& {# O& }0 D, p  Z5 z; v( }0 S7 ]
& Z5 q  d* Q" k% E
/*% d- N% N! e2 T: n, i( M
NaN:Not A Number6 @- H- ^4 U! T* Q1 M8 P' B1 D
NaN属于数值类型 表示的意思是 不是一个数字& P% j; L( k0 g  V* i  W3 v  ]0 Y
*/
9 F" u  `" J( C  e0 m0 P1 Q# d7 x+ O
parseInt('2345')  // 转整型
) L/ p9 N1 @9 x( ^2345
* }( r, L- B4 [& ZparseInt('2345.5')
9 e) a5 q2 E" [, G- I2345, B& y. N7 S0 a3 f3 w
parseFloat('2345.5') // 转浮点型
* K6 a$ _$ p9 l1 d2 A+ b$ T2345.5% @+ K" W) q* c5 _0 A
parseFloat('ABC'), d' ~3 U6 b) }! F
NaN/ H9 q; z* K/ r+ F- @2 f/ p  u
parseInt('abc')
! q; F+ S; U7 E* H" ^+ ~: a! kNaN
* b5 d6 z2 {7 U1 M" i* P, E- F</code></pre>  R# n6 n& r! c2 f$ r% N& B
<h4 id="232-string类型">2.3.2 String类型</h4>+ N# ]# H0 P1 E" n3 q
<pre><code class="language-javascript">&gt; var name = 'Hans'
( I; I" y: S& v: e! u&gt; typeof name
1 j2 Q$ K, f# o; n2 G'string'
! a) [1 e% I. M( Y1 ^
7 S( l, Q% \& \* b//常用方法
1 }; v% |7 [6 o8 N4 a, z// 变量值长度
: Z  \3 Q+ R9 t: x! `5 K- U0 X&gt; name.length+ F/ ]# w$ z! }- N7 h1 l
4
, A  A* V8 D' m// trim() 移除空白
5 L2 h4 C, }; K- s1 x&gt; var a = '    ABC    '
- D9 l9 E8 _. X&gt; a" D+ m+ ?: N7 K0 M
'    ABC    '
9 z8 ^  o& X% E7 j) p' `$ X# J&gt; a.trim()5 x' v$ c# P& R& I2 q6 ^
'ABC'" e0 B* y6 H, Q" q1 H  z4 O: B
//移除左边的空白
6 d1 B; e$ R5 i1 g) W' b! t/ d&gt; a.trimLeft()  ?3 p4 M  o9 e
'ABC    '
7 g5 \/ {5 h  Y: R* g) d//移除右边的空白
% a7 `0 R2 |8 X3 G' p+ l) N2 A0 V&gt; a.trimRight()# e+ o" B5 z' K' R
'    ABC'+ I8 l& {* L, ^! l

3 k( v4 p9 }4 c" {, x4 q3 s. j//返回第n个字符,从0开始
: [+ I3 c  s2 E' J: y&gt; name/ [9 w4 I! g3 w  B3 w8 {. b
'Hans'- Y# {* j- E1 I2 V$ E& |% V
&gt; name.charAt(3)
& [/ q/ ]& c' k" r's'
2 w% U5 H# _! r) H, P5 b&gt; name.charAt()
  A( ^, {' t+ T'H'8 p6 i- {% r+ e/ c0 A& O
&gt; name.charAt(1)  H- E  e( Y0 x% O
'a'' l5 `6 q& f: g/ }# Q: g8 i  P% L
# g7 ]$ U; B" b; d( \0 D  U
// 在javascript中推荐使用加号(+)拼接
3 x" u2 V5 M# l) G&gt; name
' p! n& J5 H2 d'Hans'. @2 m/ S( a8 c2 G0 c1 @  \
&gt; a; [" {# v+ y& U9 k$ g4 T( I/ e' u
'    ABC    '
! S4 K$ S2 Z" y( U&gt; name + a
5 W+ t" l% X1 F1 R'Hans    ABC    '
- c4 ]9 N; a7 H; s6 v1 w// 使用concat拼接, o# _& O  v; }
&gt; name.concat(a)
' d$ c8 |4 F9 Z( D, \'Hans    ABC    '
6 ~3 I3 w4 F8 n7 ^9 n1 u
% m+ U" g* e7 E+ `0 i. W5 F//indexOf(substring, start)子序列位置
6 X  h# K8 K2 j' Y
3 @1 Z8 M1 I7 R9 T% n&gt; text- E0 @& t, i% O& W
'A young idler,\nan old beggar'
* S+ ]" L7 V' ^" I' s2 n5 a&gt; text.indexOf('young',0)" d% X: o: I/ b5 b
2
2 g8 ]2 \2 U" ^# p
2 o8 Z/ p' _2 y, A//.substring(from, to)        根据索引获取子序列' a6 T# z& a% C! I1 h! d
&gt; text.substring(0,)# e# Z3 e( e) {% T. S
'A young idler,\nan old beggar'
! B# e5 t" f3 i/ U2 D+ ^9 T) k' W&gt; text.substring(0,10)) v* t1 c( \3 D2 C: K( S5 ~
'A young id'1 g+ s0 C0 @& ^$ x+ e# A
; i& N+ b+ F7 [1 }: f
// .slice(start, end)        切片, 从0开始顾头不顾尾
% M3 c7 q0 s. U1 [5 I&gt; name.slice(0,3)5 Q% M0 n7 ~4 b; Q; J, @6 f
'Han'
, s$ s* \* }0 @, S: x& f6 T& Y
0 I; r; `" h% O7 B! K3 R* |// 转小写# |1 o8 i, x0 J$ j" G$ W* [
&gt; name9 {- g" H8 b3 B. ~: L$ X
'Hans'( `$ Y8 B* S0 I7 B8 h5 Y2 E) I: L
&gt; name.toLowerCase()
6 q3 Y" b! R! |1 Y/ z% g/ `'hans'2 H. l0 }& c2 m5 y
// 转大写7 k; T: `2 E$ X0 x5 ~5 G+ `
&gt; name.toUpperCase()) u- H4 a& f9 l; a: C, H) x# W
'HANS'
1 Q& A6 r# k% g8 i; S3 j2 X$ k  x3 t  m0 |. M- e
// 分隔2 K* D2 B1 I: a6 T' t( l- r
&gt; name
" ^1 t( g: d: D$ _# _! s+ @  V8 q'Hans'% I3 \" B% v- n! r, y# }
&gt; name.split('a')
0 S0 e' i* P7 r) k& j(2)&nbsp;['H', 'ns']- w4 L2 y# O! d: A
</code></pre>
. E7 D. T$ S) \. q$ e; V<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>' i9 d- y; x% C' r+ p4 D
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>7 ?. j- O# H& U  ~
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>$ \, e7 Q% F5 a2 C' N8 ?
<p><strong>null和undefined</strong></p>( k9 {) m( w( L  b5 {5 y, U- M# X% M. \
<ul>2 n: ^9 l# h8 B4 u0 j3 q$ _* A
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>9 c4 [* i. x4 U+ {
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>$ O1 F' E8 A0 i. O6 g! X9 E5 A
</ul>) h6 ^9 ]/ \4 Q, L) P
<h4 id="234-array数组">2.3.4 Array数组</h4>
3 \* p6 B( Q/ _<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
* Y9 d! N, F( f) R% }( w/ [<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 4 t7 m! v: N7 I7 `
&gt; array1+ x2 ~! M+ Q: Z/ g5 S, }; H
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 R6 U4 D9 z% o% {0 t8 d+ {3 _&gt; console.log(array1[2])  //console.log打印类似python中的print' y2 N# {  n/ W. L* m( z( P* V9 a- R' ]
3( k( d- U' o6 v4 o2 b& `
// length元素个数
5 H  K$ o$ Z% E+ L# k# [/ ~&gt; array1.length
: g( c- m( L# K3 |8 \" ?8 N+ _! l6
: K. v$ c  k; @9 j- X. \// 在尾部增加元素,类型append5 A0 R, N* _; s5 L5 I
&gt; array1.push('D')
$ ]# M8 l. E6 z) Y$ f4 T4 A7
% e6 |% n( j$ q&gt; array1$ W) S3 @2 t7 `* x. {8 m1 e* f
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']: i: j$ L8 N2 }$ J6 i
// 在头部增加元素0 h$ Q2 M$ V0 J' J( O0 g8 p( m9 m
&gt; array1.unshift(0)1 U1 _3 K8 l8 d6 ]% p
8
7 }: s0 L: t% g2 @9 v" p7 y8 L; E&gt; array1! k7 {$ i# n! R3 B" q& E* X
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
* I  b. I9 I. V0 X
# y  B) R$ K: @' W' K- m//取最后一个元素
4 t* {; [8 L% z/ w, `. y&gt; array1.pop()
0 s7 w- N2 B) A! ]( m% }'D'1 p  |3 J8 l; z) U  t5 ?8 `& n' j
&gt; array16 d+ C& @7 D' l8 \. O& y) A
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! X% k* ~5 r) H//取头部元素
" H8 K( W$ h4 R3 T&gt; array1.shift()8 x1 W0 v! r6 M% x+ Y1 s  L. y
0  e6 {* `2 J6 n: f2 N$ [1 d
&gt; array1
# ]7 J0 M1 u- U, v3 p: y/ i(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']8 o5 T4 c  u! q; ]

& z# Y" s& W. F$ v//切片, 从0开始顾头不顾尾
% j+ F& J" T6 {7 f&gt; array1.slice(3,6)9 [" }$ M4 n1 @1 {1 H- m* N
(3)&nbsp;['a', 'b', 'c']! N; @( X* c9 ?( j% n3 ]
// 反转
2 g( w+ m# j7 m: G3 I&gt; array1.reverse()
" T6 h* s5 u  B% V(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
2 `; K) ]8 d( ?2 H+ i) r1 {// 将数组元素连接成字符串* G$ m8 T. w  B3 S3 }
&gt; array1.join() // 什么不都写默认使用逗号分隔4 u1 U  F$ k9 ?# h
'c,b,a,3,2,1'
4 V' b+ u0 `! G) b+ ]5 V&gt; array1.join('')
) U9 e& C; V; I+ J* n' V7 V'cba321'
0 V+ w1 A" R: Q1 A  o" e&gt; array1.join('|')/ p: G* c0 U" S2 M2 ]/ w- w
'c|b|a|3|2|1'
5 q: b6 l; o. j# j7 L) e1 x# ~5 M- ]
// 连接数组/ t1 {$ l/ `7 z0 x: z* x
&gt; var array2 = ['A','B','C']) b& o# D' T, F9 w4 X# x
&gt; array1.concat(array2)
7 \! i2 R# @3 c  G, Z' b+ a4 h- O(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
) v8 O1 B- G% `9 _3 y* {, I' [. p9 ~0 G3 D
// 排序# ?/ W% B2 t  ?  w- e
&gt; array1.sort()
* W7 q; m2 \: T7 u1 Q$ l5 i(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 X( ~% n/ ^' m: a, {  ~* T- v
7 o+ S! v5 c" N// 删除元素,并可以向数据组中添加新元素(可选)4 g) i3 |0 `. C, U
&gt; array1.splice(3,3)  // 删除元素5 I6 y2 {% e* E3 E2 u) B
(3)&nbsp;['a', 'b', 'c']. M! r9 j. M. k' c4 f; V5 Z8 G
&gt; array1
* ^; U0 T4 _3 T. B- s( M(3)&nbsp;[1, 2, 3]
  O  V6 {4 ]: T' S9 w&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素* ?* Q4 D& ^$ d: W
[]
: T3 E5 d9 C3 U+ k&gt; array1
+ T6 M5 Z) L! A, P7 n" f; `(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']% k" ~3 e2 @- Q5 {- n
! M- }; y6 x5 |3 x+ R/ r
/*
8 f7 u$ c3 \% u& I5 c% F$ g) Asplice(index,howmany,item1,.....,itemX)1 f5 r6 d) p% o# l4 w6 V' g. G
index:必需,必须是数字。规定从何处添加/删除元素。7 s9 ?! H8 B9 G- O* y
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
. `. a# E3 D, Xitem1, ..., itemX        可选。要添加到数组的新元素
0 r" z  {. N. N3 U3 j*/
! ]. \( M1 o; w+ E5 P, I' Q# A( L& o& P8 y
// forEach()        将数组的每个元素传递给回调函数
8 S) W/ u8 P  a& L4 A&gt; array1.forEach(function test(n){console.log(n)})) k4 P" r) f: F
1
0 d: z8 A1 Q# P& N! O 2: q+ G9 D# x8 d" s" c) g
3" P5 }0 o' X/ ^; ?% J$ S4 J
A
/ U4 g5 r% }" [ B) I0 c( u* y' Z; u$ e
C
9 J4 k% M9 a# Q' j: U; S// 返回一个数组元素调用函数处理后的值的新数组
; ?+ N1 i8 }$ g. a9 ?&gt; array1.map(function(value){return value +1})
" W, _) ]% `4 k  M) g5 {$ V(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']+ G+ M. U( a/ k! R, p1 u1 G
</code></pre>3 _& n5 D2 x) j2 K. z3 X( [5 R+ m
<h3 id="24-运算符">2.4 运算符</h3>
" U" {7 Z! g# t1 B# ~<h4 id="241-数学运算符">2.4.1 数学运算符</h4>0 ~- p* T; Q( p* x" e- E
<p><code>+ - * / % ++ --</code></p>
: A* H* F" f( s( l/ [<pre><code class="language-javascript">&gt; var a = 6* |! N( z, y* a" {: l! A9 N" Q
&gt; var b = 3
% k, m4 n# C9 `// 加
! G1 B, J" W, C6 h5 Q3 J&gt; a + b
& w& k* n8 b( s9 Z- x# n. v9
% ]1 G& F8 c# F* G- k// 减# V/ ]! d! l$ J
&gt; a - b
! V! k7 W' ~' l3
. i/ q; F# n, d7 z5 U// 乘9 i4 Y# U; m: i( Q: L9 l
&gt; a * b
; ~' Q9 c9 d3 C- C0 y181 {: Y$ i; a( }+ V
// 除
  {$ D4 B% _0 S6 b2 x# g6 Q&gt; a / b( e$ F6 a$ a. i6 U, Q
2
5 J- G# i; g( k7 U9 _/ l5 k8 A// 取模(取余)
# h; z( l, b6 r  x& E0 T&gt; a % b
. l$ @- [6 @1 y8 r6 F0
7 u9 Y# k- M6 V7 U2 N// 自增1(先赋值再增1)! D# S" [2 A5 j
&gt; a++3 [2 n/ g9 Z4 g
6
# h& a: ?# \4 k# \2 p&gt; a
9 u" z* n0 A9 d! F1 |% U* \74 ?7 V! x  H) y* T
// 自减1(先赋值再减1)
3 t2 ]! ]$ f' b" _$ [&gt; a--3 c( f7 x8 c& u+ g. D
7
: u: J; ]6 h) O5 N% O&gt; a5 R8 ^: k$ p, Z0 A9 }: c
6" n% \) p* N9 k4 N0 @# ^+ ?
// 自增1(先增1再赋值)
0 v) D5 |' e4 g  w! ~* Q' h* |) t) s&gt; ++a
2 t! D3 \+ o9 c) v7# Y0 i% Z/ B5 S, C1 l
// 自减1(先减1再赋值)- Y8 H0 c# T% ?; F# i) M! V" f- p" i
&gt; --a6 t( i3 m2 _9 Q* c
6
6 g" x) x# C( E5 D1 q& z&gt; a0 Q5 x2 U: w  a
6
9 N& |8 C9 {3 c* D5 A" x4 E$ E4 }1 `, T7 B; v+ J' ~
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
5 x$ O$ ^+ v* U7 h! M</code></pre>6 U" @" `8 t1 f& N0 A2 x! L
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>$ t+ u  m, ^4 x# A
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" W  U: y8 M' Q& B
<pre><code class="language-javascript">// 大于( w: m* @( u0 t% e! [+ q
&gt; a &gt; b  s9 Y$ Z4 Q: L
true; X+ P1 Q, ~* J1 h( M" C
// 大于等于4 y! g2 j8 C4 k( U3 N( ^' D: ^% D
&gt; a &gt;= b3 m* a1 u& O/ ?( n
true6 R, n$ A' E8 {
// 小于- _3 E& }5 m) q( j+ C
&gt; a &lt; b
6 F4 b& U0 P) P9 O1 H+ Rfalse
  E5 P% N0 i: r. j0 J. u// 小于等于
5 K, |0 ?5 W% }- {6 Y&gt; a &lt;= b
$ V/ \3 G: N. Gfalse' Y7 S% A( a( p; i
// 弱不等于
' R& i& |9 e( E&gt; a != b: C5 C- U+ l: A; y6 V
true
2 `4 k8 G) x9 I2 [4 ^/ B! E// 弱等于
, ~. s3 I6 e. T( S' W3 R&gt; 1 == '1'
+ }- y. ]7 f' e( jtrue2 z9 |  n4 P3 X* u
// 强等于
# `: t. V- S4 k: M6 W- K+ b&gt; 1 === '1'
; s& n' M1 L* j; rfalse& b1 |8 q' k) Z6 `
// 强不等于
) G0 e' M+ o9 L* h9 m" D$ n, u&gt; 1 !== '1'+ m, q2 l# s1 u7 b
true
, O; k/ J: j! U5 r; P/ r1 Y7 e- G, O6 v. V5 P+ ?: b2 X* o
/*
% s( {+ g" Z0 Q& nJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 b6 u3 ~8 L. F  f( n9 J9 M
*/9 c# }5 `4 K+ ?; _$ q2 J
</code></pre>: @2 Z# L4 J' s8 l3 ~: H/ g& j% [
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>: P# N  h% j  M( h% V4 U! l. U8 |
<p><code>&amp;&amp; || !</code></p>" a# q: W7 k4 c% [9 K6 S
<pre><code class="language-javascript">&amp;&amp; 与
  U/ Y+ `2 x& ^& r& R|| or
% V6 x2 d# ^1 ]" n- l+ @( r3 p/ _! 非
8 d+ b2 n/ O, p</code></pre>
4 V. b2 K" W3 S6 S& T9 t<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
# r$ }4 G! H5 O( }8 u) o# \<p><code>= += -= *= /=</code></p>! m* H; N" e5 }9 y1 q$ l. Y" K/ x
<pre><code class="language-javascript">// 赋值! D7 I/ I2 g1 |: }* m
&gt; var x = 31 M4 M2 |) c  I8 P: d3 Q0 f
// 加等于
9 N- b# d4 }" H0 a&gt; x += 2
- d  A) ^  Z* X1 l5
3 N; R* E& p* o+ E- n5 p  f7 _- z// 减等于. ~7 [$ z+ [7 P  K) [  }
&gt; x -= 1/ H* a2 U2 b9 Y; m5 R
4
- d( v+ Z! g0 K$ b0 u' r+ s4 X0 J// 乘等于) X$ _" @1 Y! o, I: S1 x
&gt; x *= 2* H% I9 j' x3 P% R
8
+ y4 s2 a: V# L- s, s, T* t// 除等于
6 s0 A. s, ?& C8 r3 s&gt; x /= 2% C$ w2 |. T1 f/ x. g( z
40 u% D% q$ x. ]) K2 R
</code></pre>
- k8 Z; X, e5 t' G<h3 id="25-流程控制">2.5 流程控制</h3>" l" v6 r4 o- Q+ Z9 O7 o3 l/ q
<h4 id="251-if">2.5.1 if</h4>* g; @; S- o, f7 n& q0 X8 V
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
# u& M6 s  V! c, N5 d+ C3 L" K
7 s* t; s: v2 C&gt; var x = 3
7 j( W/ o% A) B+ h+ G&gt; if (x &gt; 2){console.log("OK")}" C! n) e* K. W  L0 ]/ D- [2 Z  N
OK: S7 }- p3 T! ^
# c0 [' U3 J- [
2, if(条件){条件成立执行代码}   J" G( @  ?# T7 @0 J" r% h
        else{条件不成立执行代码}
/ R) U+ h) U  X' e4 W
" o+ g6 r- ?2 J- _5 i&gt; if (x &gt; 4){console.log("OK")}else{"NO"}  z& S& v2 q, h6 f9 {
'NO'
3 {1 R1 x  m$ b7 D0 z4 S/ `5 R
, D" `+ Y& c# |1 Q. Z3, if(条件1){条件1成立执行代码} . j! Q" T. k# l
        else if(条件2){条件2成立执行代码}
$ m# J) b% I  Q  N    else{上面条件都不成立执行代码}
. R+ `4 h* C+ \/ J
6 M. S9 {/ M8 |& b$ P5 D+ O&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}7 m  h! ?* L& J4 n" C; _
Ha
6 Y; P) a# L$ j6 ~+ ~- K% p</code></pre>
0 l0 U& m4 A. ]) O7 P<h4 id="252-switch">2.5.2 switch</h4>
7 b6 _* X/ _! {! }# N  x<pre><code class="language-javascript">var day = new Date().getDay();
% }/ k, ~0 ~$ Jswitch (day) {* s8 G" E1 E6 w& ]' U
  case 0:1 B! V# f- [) b1 I1 k
  console.log("Sunday");
( D& f- ~/ }) D% @2 [# E  break;) G) _4 i2 E" j( r
  case 1:
" e* C* }0 O4 v$ y  console.log("Monday");
: D  G' j1 u; G+ i# \! Z  u3 G3 W  break;3 O$ f- ^4 K! k( U9 }$ F' b
default:2 D/ ^5 I& D' L8 e
  console.log("不在范围")6 p2 V2 q1 ]+ {8 A& d
}/ C# o% i% z3 y: B
不在范围
* Q: \; F+ [% w) s+ o& p</code></pre>8 U8 x/ P% ~5 ?5 c
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>; Q3 ?/ _# K9 G$ y8 \
<h4 id="253-for">2.5.3 for</h4>
' m# R8 C+ q% D<pre><code class="language-python">// for 循环
- K! Z; e- c& G9 j3 ]        for(起始值;循环条件;每次循环后执行的操作){
- c4 Y( o. |$ B  f2 b: p        for循环体代码
! Z: t1 U1 C0 U5 h+ a8 s4 I    }8 T2 z4 H- `' l+ Z; O8 i

3 D/ [5 h8 f9 O1 zfor (var i = 0; i&lt;10; i++){0 c5 O! p( p' S' p1 ?, Y
    console.log(i)5 |2 p1 X6 h- s3 |+ ]
}
9 W) Z/ w5 A1 R/ f: y9 L        0: K" J, C/ V6 T5 A' b: {6 H0 y
        1( s4 E( W! X# d3 U6 p3 V, n1 a
        2& E5 N) J( U6 M. T6 i
        31 c) a6 [" }$ Q  Z& {  v
        4" ^& E/ y) V- Z1 ~1 [
        5
9 L/ k3 s* Q0 F" A# |* O        6! R# k4 v3 U2 [5 p9 d0 j8 ^
        7% C8 N$ y2 c2 U& {4 a6 _
        8
0 J) a( @3 \. m' ^* B        9
. Q9 @$ P/ ^: V; W9 @+ t1 V</code></pre>
8 C" Q; r& o- b8 _  V; O6 x8 m<h4 id="254-while">2.5.4 while</h4># F& l; f" M/ W0 Y: c. n+ ?
<pre><code class="language-javascript">// while 循环5 }: M  L* ^( l1 z/ c: s
        while(循环条件){  @  ?+ B( {% B
        循环体代码
; K  Q1 e# x; k( i    }
8 |# }$ R+ Q; X+ b! Q, F' B! B8 P  `' P5 i6 o& b7 b/ x% ^7 G* p
&gt; var i = 0
& {# E: G6 e- A) H&gt; while(i&lt;10){
# B9 d) a) ?- w1 X$ I6 V    console.log(i)" [+ W6 L- _$ b8 t! T
    i++
: d% Z0 G# L/ g, _5 C2 D  b! y}
/ u1 U2 h  h: Z 06 ~* e" w  p9 n+ J
1
3 K4 {6 K* ~5 t4 C" |% J/ a1 Q 2& l3 J7 i; d6 x# P
3& T* m4 h  M8 k* T5 R% H
4& G" X" k/ j2 t1 ^' I3 o# `; U' F
5
/ i+ P! t; I! W/ K( X/ P 6
  z+ @- L- z& M9 K+ b 7
& H. M' ?( U$ \( q4 ^ 8
) E- y( [( v+ M- y, Z3 H9 u+ ~ 9
! [, n5 p3 U8 x9 M' G: ?) {, w</code></pre>
; g) N, u% G- w$ k# i) F% U- s<h4 id="255-break和continue">2.5.5 break和continue</h4>+ {5 i7 P) p( ?( i. w
<pre><code class="language-javascript">// break0 B, p! j+ j; t4 r+ L9 a9 o4 r
for (var i = 0; i&lt;10; i++){$ a& z2 A. Z- M: }+ }
    if (i == 5){break}
6 s$ J  h# \) Y% [$ q    console.log(i)
8 e. {8 @$ V- s}
) s! I5 J  o4 a, [ 0
( x9 F4 D1 c7 \ 1
) T6 F- h3 b& w1 p) H& m" c 2
! F5 ~& J# Z9 W2 f 3
4 E6 Z& P8 e) E& a1 B. l 4
% m' ~- J! i: a. D// continue9 Z4 i- s: o& @
for (var i = 0; i&lt;10; i++){
  g8 C- j+ e8 M" y) E7 c) n; L    if (i == 5){continue}
, u+ H0 D2 I) g; B& {8 M) _' s2 c    console.log(i)) _0 ~# Z9 V  e# v7 `6 t
}
9 o& M8 X3 q. A, H, Y 0
# o) L) |; E4 Z. j4 [) Q 1
9 ]3 y( b5 ?9 E3 z 2
% V3 H# Y% {7 M" G 34 D" k1 V5 r$ V
4
, |) ~& o. Z: P3 B/ h7 E/ F 6
+ @0 v5 l' C) V3 `1 l 78 k7 ^. L3 p+ `* W% y
83 u! E% {3 n1 i- A# u, b. U
9
$ B5 l2 x- M& q- I) _6 K
; k8 ], D0 }' A1 _$ c4 r</code></pre># c9 H& ^8 M) ?& f3 a
<h3 id="26-三元运算">2.6 三元运算</h3>
7 X* V9 v: j$ E/ X<pre><code class="language-javascript">&gt; a
* O) d* \; S: z  g( c# k* f0 u6; X' F4 @1 Q" K6 X0 K
&gt; b; ~8 {, E  W& T
3
5 |" Y+ B1 b+ b5 a1 J8 `: E- A) j! l7 `4 @
//条件成立c为a的值,不成立c为b的值' F; t/ C' z! n* e1 C2 T2 f  u
&gt; var c = a &gt; b ? a : b8 _) g# c8 X/ \1 c. X
&gt; c% |2 {' I1 L+ |# a6 V
6- q- W: n5 H( j. R1 P% y$ w; E
" E4 Z3 d- Q6 ]7 u5 u
// 三元运算可以嵌套0 A. n/ s4 U, D, t
</code></pre>
4 O% ]* H8 l  g0 d<h3 id="27-函数">2.7 函数</h3>
, D" e: j0 _4 Z6 X8 C<pre><code class="language-javascript">1. 普通函数
( C) S9 _6 s# Q( y9 U* K8 P0 U&gt; function foo1(){
: N8 A/ G6 p7 ]( }    console.log("Hi")
2 t  k# T% ^) ~7 s5 d}4 B2 u# g9 A" {/ [) f
+ S4 r' N- Z0 E7 E5 Z! \
&gt; foo1()2 p2 B) w* k* o. A% T0 F
        Hi1 D3 i6 K$ l2 v7 O5 O  f, y
2. 带参数函数
( W7 p  f+ F7 \4 X5 u# c! P( Z&gt; function foo1(name){, Z* i0 Y' f9 T2 C
console.log("Hi",name)
+ K. D3 N6 J0 o}
6 s7 X6 p* W- w1 |" T% E; f, ?
; m4 C# a" v8 p&gt; foo1("Hans")
4 @- A2 }% j) |9 E9 dHi Hans
! G  D1 R/ s0 _/ a5 A5 o. H8 B
8 J( ?3 @6 g( Q  t' q6 d&gt; var name = "Hello"
7 a! D: ~7 r' T) D% n' v+ r&gt; foo1(name)4 z/ w8 Z' J. M5 ]
Hi Hello( ~9 e$ \6 A1 @5 Q' R  h
1 }! H! `  N8 z7 h
3. 带返回值函数. _# f9 Z6 y  q* a2 h
&gt; function foo1(a,b){
" p, N2 X3 O+ c9 E9 L1 a; H        return a + b   
8 K+ ~2 j8 x; j8 y  ]}
( E5 }) B9 W( B% [&gt; foo1(1,2)
% @8 a  Z6 I' ~. Q5 V! F+ W3. \3 L0 {7 T  Z5 Q8 R- f7 Y+ ]
&gt; var a = foo1(10,20)  //接受函数返回值
4 w# }* h: A2 _! M* p! W9 g( a0 Q&gt; a
/ w+ o4 L8 c. o' ]3 E9 H30+ M5 H8 A* y  j8 I  ^  ]
2 Q7 o  \6 ]; l/ s( ~
4. 匿名函数$ w# r+ a# G2 z1 I8 T: r8 t
&gt; var sum = function(a, b){2 G9 U  p4 U3 |$ V; @, L
  return a + b;7 r. j' s9 B4 T( g
}/ D4 R- h  y/ E/ b
&gt; sum(1,2)
5 ~9 g: g2 Y& [! u, g3; b8 T7 d5 g% `$ {, u
0 c9 _" c* x8 |" j
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
/ \* y1 V# }  ?1 @5 t7 u&gt; (function(a, b){
+ @$ z# r3 t( m  return a + b9 t/ U7 A8 S- {7 {0 X" V1 R# c( G; C
})(10, 20)
7 m; K% d0 v/ b  ^30
7 X) V$ R% K9 N) e. e& X* g0 A( p/ E: f$ Y4 w+ N: }1 H
5. 闭包函数' k# P- B0 r) G4 Z. \; H
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
8 `% e/ n$ r% @; E  C5 v- M4 `+ xvar city = "BJ"3 l+ u6 s/ G6 P) ~, |
function f(){
! m( i/ q6 r1 @$ }    var city = "SH"
! e+ ~+ D- k& n  }: ?/ P    function inner(){
6 D2 ]- E  b! P$ g        console.log(city)4 c. @) k( m+ _7 R" R
    }
, W9 i0 r' ]7 @    return inner4 P0 o( Z4 I5 M" b9 V, W3 D# t
}( d, l! j* G' j' g* U) s% n/ N- F
var ret = f()
. R0 r7 E- u9 V, J' U7 T8 A0 l1 _ret()
  U3 D0 h/ B) l, B执行结果:
) G* j, Y3 H" |7 Q( Y2 WSH+ e+ I+ }6 K& T% o

  B; A( ]/ _# }# S* C</code></pre>
% ~$ r) D' Z0 F+ h, A7 _, Y<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>+ [# q! {" V4 Q# E; L# e
<pre><code class="language-javascript">var f = v =&gt; v;
1 @0 ?3 u1 D# J6 r// 等同于) j. b# ?5 G$ r# d# a& A# j
var f = function(v){9 [! G2 a! T3 n
  return v;
  I5 y. ^; v4 t" A6 |2 B}! N5 C8 D) J2 }
</code></pre>& T5 x4 y% E. h
<p><code>arguments</code>参数 可以获取传入的所有数据</p>1 e7 w6 E2 Y. Z. J3 q
<pre><code class="language-javascript">function foo1(a,b){2 j. ^. u1 C7 {( a! `) _
    console.log(arguments.length)  //参数的个数 . @& w* A' {/ ~2 v! e- n
    console.log(arguments[0]) // 第一个参数的值0 h) [' W$ J# t2 k" N
        return a + b   
. n; r7 e' ^, B' l9 y+ N' V}
! x1 C) Z; O- o9 [) \. B8 yfoo1(10,20)
* h0 |7 E! Y. y+ z* N# C# S结果:+ c, h6 r' j3 V; ~6 R% M* R) Z
2          //参数的个数
+ h3 t4 }  V: a) G10        // 第一个参数的值
  M) Z/ P" o* Q; A9 n& a30        // 返回相加的结果
# _/ X" ]3 U' J. Q1 e8 Q) o</code></pre>
$ w1 j" M. f6 b8 S3 O2 F<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>! X% g  l/ n" z; W2 m
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>) _) k/ X; c4 V7 z' c
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>0 f) E% J4 ?/ V  h8 C
<h4 id="281-date对象">2.8.1 Date对象</h4>9 r  H" q7 T3 S5 K6 p
<pre><code class="language-javascript">&gt; var data_test = new Date()
3 ~1 v3 n9 g5 O) ]&gt; data_test
( l; h1 L- L: G9 R  ?+ w4 ]% xFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)4 d/ B& B" s. ]
&gt; data_test.toLocaleString()
- B3 P- i* p3 I'2022/2/11 下午9:44:43'
) O1 I' B: @* |/ V7 m; ~1 n; V, ]5 D3 [
&gt; data_test.toLocaleDateString(): |  z9 e8 y, U1 o/ K
'2022/2/11'
( V  ~- j; k$ t( P) b* t0 R/ t2 x+ F( b6 ~
&gt; var data_test2  = new Date("2022/2/11 9:44:43")5 l. w+ C7 m: Y$ J. P
&gt; data_test2.toLocaleString()
. m" {/ S$ J2 Z0 U. j) `$ ^% l5 G! a'2022/2/11 上午9:44:43'
/ p9 i# B+ g! X; [3 Z: j5 {) t, H& @3 x" O
// 获取当前几号
/ r- \& D9 P( b. `( G&gt; data_test.getDate()
0 t& y2 K5 `, [11
( Q( D5 H+ F( x# Y1 X$ h' a$ n% x// 获取星期几,数字表示
' m- F" Y) I$ l1 v&gt; data_test.getDay()  , H2 d0 O: ]$ C3 F& z3 i
5  p5 Y0 @/ f, E. I; p. ]" h
// 获取月份(0-11)
1 {" T% x" V1 L( R6 G&gt; data_test.getMonth()
! h& l, V! E5 H' B- \2 l' o2 a; }: z1
  w) M' q1 ~  {& J6 ~& t* G: u// 获取完整年份+ }3 \* y8 ?+ c2 m7 a4 F$ S6 \
&gt; data_test.getFullYear()% [# @: X3 [) e" r" K
2022
1 C# o" }' |' k& H: @6 P) X3 u// 获取时, S! J, D( H) `3 @; v8 t0 d
&gt; data_test.getHours()0 ^' z% j0 J, j1 w2 c. h1 o
21
4 }3 z- t) n- N# G. i// 获取分
) i- j$ e- `# a+ ?+ `&gt; data_test.getMinutes()( }* I  R  u# u' W* ?; H
44, r# i) ^% B0 `4 c
// 获取秒
( N7 L# Q7 N$ A# b4 O' o4 r&gt; data_test.getSeconds()
$ L% b% d1 d+ b43
3 ~1 q" z1 ~9 p4 x& u- C  h// 获取毫秒
. v! }0 l: f( N: g&gt; data_test.getMilliseconds()
$ J: I( @4 G+ i' K: D; H290
7 _+ Z& b* n: {// 获取时间戳
5 V" r$ v; ^. f* @% _" y&gt; data_test.getTime()
" k$ x9 F/ a6 R. r16445870832908 u! q5 b& A4 m; V5 S* H
</code></pre>
0 X2 @( F& v" O4 ^" M# u<h4 id="282-json对象">2.8.2 Json对象</h4>
1 u; w* W3 T  H; i" }. V<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串  z2 Y+ }4 }7 J4 b2 `+ ?0 u
JSON.parse()  // 反序列化,把JSON字符串转换成对象
# l% f2 l( i: w) P" J0 X! S! z) X/ N2 e7 v7 a9 q: M. J* G
// 序列化* Y( ?" f2 @+ M# x0 S/ A3 T
&gt; var jstojson = JSON.stringify(person) + [, b% X* Y6 _- q
&gt; jstojson  
) H3 Q' J  c$ s& {% K' z" x'{"Name":"Hans","Age":18}'+ f! \  D: E- E" m
5 Z# p5 j( l' x1 v! n
// 反序列化
0 W) x% T- o7 U$ v8 I&gt; var x = JSON.parse(jstojson)
0 I) L$ D6 D8 Y4 R&gt; x- n/ e/ K% N( K1 u, l9 Z3 C- o
{Name: 'Hans', Age: 18}
; p% K! w% a' n+ P8 A$ o&gt; x.Age; ?' a& v; J9 g) n7 |( d! C* j9 R
18* a% l" o( T: g, {" d' h; X  [
</code></pre>+ @3 A8 m) B7 D3 T! a  l
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# R  |" L$ f" m6 X) ~* s" c' |$ T<p>正则</p>
+ O/ Y3 g9 j, R, @" T<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
6 l$ J* X1 ~: b$ j&gt; reg1
: a+ |; K9 `8 E) @, X* R7 D/^[a-zA-Z][a-zA-Z0-9]{4,7}/3 J* B$ @/ q3 i  u; u. w4 ?! p& d
&gt; reg1.test("Hans666"); ~* a0 I/ y0 q& T
true. b. y4 C0 k' y5 B) j
% `/ V! V& Q5 U6 _
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/. f: \9 J9 ^. X1 G5 \
&gt; reg2
- i! R- i# ~8 K' Y0 U, S/^[a-zA-Z][a-zA-Z0-9]{4,7}/! N2 W/ B$ U' y: x- H
&gt; reg2.test('Hasdfa')
! R4 T6 K1 O& g7 `true8 B, [! o* S) Z4 n% ]% o$ s

+ J% U% j) n( O( q) Y全局匹配:
$ y% F$ G" Z! G$ T' q3 O&gt; name
1 |9 J1 @6 _- H/ J0 @6 y& s1 c'Hello'
4 ]: n9 C( M- N&gt; name.match(/l/)
" a- Z& _3 r( G2 `0 @' L['l', index: 2, input: 'Hello', groups: undefined]
' I9 v0 @$ \. J7 h& F9 J! u
" {) S- |$ J1 N8 u1 |* T: _; h&gt; name.match(/l/g)
  T/ e* b6 L- l! X  o5 ^5 B(2)&nbsp;['l', 'l']
3 L( D; ?5 h( e& i- i: q// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配7 Y/ b4 \4 y) I9 ]! L

2 X3 R& O" p) _9 A1 ^全局匹配注意事项:
1 Y  Z! ^6 u( r: S- t1 Q&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% ?  R' Y2 Z) @/ K: s( w
&gt; reg2.test('Hasdfa')
& N- M& ~* e8 i- _5 |9 r7 e6 M5 J( Ntrue' U( S+ p) ]' F0 Q8 f" v
&gt;reg2.lastIndex;
! E% b# z2 O" R$ Y1 D; ^. W6( g+ o, Q* r$ [% Q1 P
&gt; reg2.test('Hasdfa')
% x; a4 c5 X7 a( zfalse& r& s2 }" {. b. I5 z3 @
&gt; reg2.lastIndex;
; o- g& I- |2 r; F' S: M0
3 t) m# p7 F# }' n! ]&gt; reg2.test('Hasdfa')
3 g& C9 n/ N4 d4 ^& H0 ]true
% ~! y4 r# c" x9 |&gt; reg2.lastIndex;
/ F& O) c: P% ^# P67 \: O- C  c/ j* k
&gt; reg2.test('Hasdfa')
+ S9 E# f9 }6 w0 Lfalse0 J* g& W+ I. C5 h' t, f3 h
&gt; reg2.lastIndex;
* P% C, I+ e% D8 V! W( W0! X5 C1 s6 t  V2 g, r
// 全局匹配会有一个lastindex属性, [9 B* T& r) a5 O2 [
&gt; reg2.test()" R; x2 O+ W& c0 C8 z7 S# a. X
false( k( d* o3 @# }! H( V
&gt; reg2.test()' p" n$ `( E* J8 a5 B' h4 y( `4 I5 D
true
9 {" B, T/ i2 r& C& \/ E// 校验时不传参数默认传的是undefined
) g+ _1 _$ l7 Y9 x3 d& l</code></pre>
) c& Q" h8 H( w4 Y- [* p<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
9 ^+ w, W$ x* n% D7 v" d% E8 V<p>就相当于是<code>python</code>中的字典</p>' P$ A( _+ L" W0 V" ^
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}6 f& ^  c* O; [3 X4 t$ |1 R& P( V
&gt; person
( q& M! u+ g( d3 A, D{Name: 'Hans', Age: 18}
$ p+ i1 X* d2 s; h: H&gt; person.Name" I5 A& h9 }  Y" X- i2 C) B/ i
'Hans'
( @; M) d4 o# A7 p+ O5 K&gt; person["Name"]& z. I% ]3 a. _7 @1 d3 {$ a
'Hans'9 e' ~! F1 d- |: V* E
% c! N+ u1 @7 t
// 也可以使用new Object创建
4 @/ ^: {) V" ~0 P  D- _. d&gt; var person2 = new Object()
5 X! K5 G$ L/ M+ S&gt; person2.name = "Hello"9 s5 G; N: C: _
'Hello'
! g8 E3 w4 x7 f: f9 q7 E; J&gt; person2.age = 202 `/ L- e0 a7 }7 v" c
20) ~  W7 V% W4 F
</code></pre>
0 A% [+ |8 L( Y) g# y/ |0 h<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
7 l$ }: S1 u) \3 f: I<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>7 ?" `7 R- i1 r, }- F# I
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
( X) x& I) r# [) [4 `<h3 id="31-window-对象">3.1 window 对象</h3>
4 X; H! `3 E3 d6 \# {6 K; ^/ ~6 Q<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>5 n0 n. |5 h% h, [7 [' ~
<pre><code class="language-python">//览器窗口的内部高度( K" D$ m1 d# \+ w  i+ H5 ?
window.innerHeight
) P7 ~. G9 j  X! w0 N706  H9 g( c9 O: b9 \6 d6 I3 I
//浏览器窗口的内部宽度
; c6 p" u. F. K. `' G/ Ewindow.innerWidth
2 r, Q1 ^  ]/ F& f, X0 }15225 D" c8 ~: l, o5 d
// 打开新窗口$ ~! m1 m% y" r/ \: V3 Q
window.open('https://www.baidu.com')
7 r/ F; T" L% |8 C/ IWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}) C4 s) X/ o/ ~( l) i2 o# d
// 关闭当前窗口: D4 a  {* `$ i
window.close() - Q+ P' L# {4 e9 Z* G+ ~/ n- L  {. g
//  后退一页
: T4 a, T3 F! f' W' N1 nwindow.history.back()
% q' v' r7 @$ F! h* u5 o. `// 前进一页. y# |, z$ Z" e' L- r+ C
window.history.forward() " ?- b) B5 o9 M  H9 Z
//Web浏览器全称
4 f. H- \5 Y! B* _  d' {window.navigator.appName% _% A: {8 ]# v4 G
'Netscape'! _' r/ N2 B; J4 M3 J5 D
// Web浏览器厂商和版本的详细字符串
. Y9 \. D* v* }* [% x; A. M/ Fwindow.navigator.appVersion7 r+ P: `( i( K7 u5 a
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 _: k5 U& y6 u. D! K// 客户端绝大部分信息) J  R, a* \1 e) ?
window.navigator.userAgent# w5 ?# F0 i8 S- A* s7 [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
( X/ V% }+ k' E+ J* b0 ~( ~// 浏览器运行所在的操作系统+ T0 J6 D0 i# _3 B! |9 x" ^  r
window.navigator.platform% g& m3 u6 q' q9 i, {* Q' z0 v
'Win32'
! N( G- y3 W3 O  W% y4 q* Z! D
8 _' W* W' \5 I) H: w; W//  获取URL
' Z) m) r: z2 i! l' Z: Zwindow.location.href
* i4 w9 h" A8 ^9 [& h, W// 跳转到指定页面6 |0 a6 u9 E+ M& `4 O- O. a
window.location.href='https://www.baidu.com'- B- @+ s& j1 a; H" G- l6 o9 ?9 B% C
// 重新加载页面# D) [% \0 a3 x- A1 z
window.location.reload()
* N0 f2 Q& P5 \% Y</code></pre>
8 ]% H! m4 J6 U; f0 h4 C) _<h3 id="32-弹出框">3.2 弹出框</h3>" E3 L+ {8 k: \% X# o( d0 X% ~
<p>三种消息框:警告框、确认框、提示框。</p>
; j; q# D5 ?9 _7 {1 X+ J<h4 id="321-警告框">3.2.1 警告框</h4>9 Y# R& K; r$ ~* {* `
<pre><code class="language-javascript">alert("Hello")
+ q$ J# C1 h$ G$ E; I8 J</code></pre>1 |+ L7 ^9 m0 F+ D  x& S1 ]; H. U
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
2 y# ?$ ]- ]; \<h4 id="322-确认框">3.2.2 确认框</h4>' {7 t! U3 N3 ~, q& ?4 f( J5 m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
" \8 e! a  K: U! E<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true% a$ r$ p9 u( X( r! G" X
true* l" W9 j% `& x. |; Q+ e
&gt; confirm("你确定吗?")  // 点取消返回false
/ j+ ]9 Z0 X- E( _5 ]$ g' ]false
: [& a& N- O5 n0 V# Z</code></pre>2 G& e2 o* X. R
<h4 id="323-提示框">3.2.3 提示框</h4>
) _5 V! m2 _! u5 a' v. J  z<p><code>prompt("请输入","提示")</code></p>: a! I3 [1 L- C5 p( }
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>% S6 V) i" X; d6 @6 S- W4 J7 t
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>8 [* v* K( e' ?# A8 e& Z
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
& X5 \3 q% ~2 M  j+ y9 ]<h3 id="33-计时相关">3.3 计时相关</h3>
; q+ I$ b7 i% J: e<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>. I. z3 d' |- y0 ?5 U( x& V
<pre><code class="language-javascript">// 等于3秒钟弹窗, u6 ~! R& h2 i- H
setTimeout(function(){alert("Hello")}, 3000)
! V" H8 X/ n5 k7 G! x
7 H- s7 u% m% Q/ E% I% B. ^var t = setTimeout(function(){alert("Hello")}, 3000). ^  l3 p, O- m! [3 x+ s6 o( o

9 T+ [' q2 R0 H// 取消setTimeout设置& G. n( i1 ^2 C
clearTimeout(t)% s; t( n7 F9 M; E) V! S/ S
</code></pre>
% R2 s( d: p$ J' V* @( v<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p># x4 s% l( Q+ m3 q1 ?
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
$ P" Q3 G' {- @1 v4 x* G( `) c<pre><code class="language-javascript">每三秒弹出 "hello" :
2 A: N% p  P; o- csetInterval(function(){alert("Hello")},3000);( @7 v: y, W& R0 s: |0 r. W2 c
</code></pre>* A. S8 b6 e# D5 x' N( X/ ]
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
9 W1 A- ]4 U0 h4 I- S<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);  |2 h$ ]) ]; y" m. W9 V: h# @6 {+ V
//取消:
; q# }/ C& |8 v2 G5 V& ^( [6 YclearInterval(t)
: l/ g# Y  `3 h% r' \) x9 o</code></pre>
1 q2 X1 U" g; q+ g  J8 K; u% q. ^- E9 w+ ?
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-1-25 12:23 , Processed in 0.088169 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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