飞雪团队

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

前端之JavaScript

[复制链接]

8053

主题

8141

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

* T1 x5 [. j: o<h1 id="前端之javascript">前端之JavaScript</h1># `* H2 [/ Q, |, j5 q6 r/ m  C5 Y
<p></p><p></p>7 a7 c: z! \, z' |3 T
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
" q- U8 o2 w) T) T6 B<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
/ d8 i6 l8 F* \* z% R" O4 u它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>( \+ ]% V1 u4 `! X
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
4 X+ ]- E# L2 N) r. Z# J% p9 b它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
! `; T! T: r9 Q! ]# ]- L6 G" V/ `<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 a$ N) a( a; K6 p<h3 id="21-注释">2.1 注释</h3>
6 \$ ?! r5 f, _, k6 A; f<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
3 M, R" Q/ F3 ?( Z8 J0 H<pre><code class="language-javascript">// 这是单行注释
2 B7 L2 D! W0 w; r% a$ n. Y* C. _7 Q  \3 J" ~
/*, x; b( C+ M3 x
这是多行注释的第一行,! n5 g# a- W# U% f1 }
这是第二行。  ~; ^% w; Q8 p  F) q0 D3 S+ V
*/: N5 G2 D9 G: v6 t1 L  f7 \
</code></pre>
" Y: o5 p0 D( Y! E+ i5 A9 ^<h3 id="22-变量和常量">2.2 变量和常量</h3>
* f8 y! s+ a. z' V<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
* H0 d  q  L* [8 @& P9 y0 b<ul>
2 Y4 m8 f* O# x3 o<li>变量必须以字母开头</li>$ Y$ C; Y, `3 t  X* o9 }1 [# }
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>" q8 v+ J9 D8 Q3 p: s7 J7 `0 h
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
1 o+ {+ P4 ]+ A+ X( C4 T# ]</ul>% ~6 u+ C1 t9 E7 L
<p><code>var</code>定义的都为全局变量</p>4 n5 e1 \4 O' S( X; o" }/ A$ Z- _
<p><code>let</code>可以声明局部变量</p>
1 j- i9 {& z/ F4 ~& ]% r! h<p><strong>声明变量:</strong></p>( c2 m! P: j( c: L5 q/ d: p, w
<pre><code class="language-javascript">// 定义单个变量& u: o' n3 @- i9 ~5 J, x& M$ f; f' a
&gt; var name+ h9 \, W" a5 u. ~* {: w1 _( m
&gt; name = 'Hans'
3 k& V6 M7 J) K7 z- `: a, W//定义并赋值2 F: i( k1 \* t9 k' P- @
&gt; var name = 'Hans'
/ ?( j5 [4 X; j&gt; name
: G  p7 _* o& J% E; z% ]'Hans'
1 Z3 W9 [& Z: v( e5 J
+ ?) t5 ^. a& K  k// 定义多个变量  ^$ x: K" L$ z+ Q/ t
&gt; var name = "Hans", age = 18# k2 v4 h$ f$ V- _
&gt; name
+ q% c5 e! g& E/ J0 ^; ?& V2 ^( P'Hans'% x3 L5 j% M0 `7 |6 e4 i
&gt; age
7 H% N* ]( V3 ^! g5 z18
/ c- o! S7 G3 S9 m3 f4 e$ [2 s$ ~) m2 |
//多行使用反引号`` 类型python中的三引号
" H+ _+ a0 a7 I3 z7 J&gt; var text = `A young idler,
$ C5 D+ u6 d- z% ?: K. B/ e% X' Yan old beggar`. h4 ~: g/ n1 ^4 s9 _# N' f
&gt; text
& z' L) i+ _" @* S'A young idler,\nan old beggar'
2 z# \: s3 s' T+ _" D. k3 ?9 K3 o</code></pre>
7 u* W1 O$ N7 B! u1 c0 P0 g: K<p><strong>声明常量:</strong></p>
  @1 x4 j* P' j/ d0 r5 v+ s<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>1 F4 H  V$ I  c6 ~7 X8 j! @: j
<pre><code class="language-javascript">&gt; const pi = 3.14
( _6 _: b  C) q0 a&gt; pi
" B$ v0 m0 J+ P3.14
( o9 h/ h, R* ~4 t2 d&gt;  pi = 3.01
: p3 }9 r& w* X9 _3 hUncaught TypeError: Assignment to constant variable.
. g5 U% V/ n6 f, k* a    at &lt;anonymous&gt;:1:47 Y% \+ U7 J% N) u" m4 A

6 U; Y; l) W" C/ {8 A</code></pre>
/ Q6 J! c6 T; {9 C6 [<h3 id="23-基本数据类型">2.3 基本数据类型</h3>6 X# |7 ?. s) e8 Z* x" B' g
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>, l( W" t, W, N( E6 }+ E
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
* l* [- ]8 s: h! A5 C# V<h4 id="231-number类型">2.3.1 Number类型</h4>  E% \* X: ]; i( w  G  u2 k/ m% B
<pre><code class="language-javascript">&gt; var a = 5! z$ H$ X% R1 ?! z0 L
&gt; typeof a   //查看变量的类型  
& S* X0 c1 M, z% p/ d4 b% Ynumber9 C5 ^" c7 P7 t! [( o# `2 I

- {/ z( w2 o9 O+ ^&gt; var b = 1.3- O; H* C  i# H% l
&gt; typeof b
; t1 t  ?1 d1 U  U+ l, j$ v1 }number
8 d) F8 U* o# c0 E! j& K6 a  `: a7 t" r9 a* d+ C8 {5 S  Y* x
// 不管整型还是浮点型打开出来的结果都是number类型
5 n+ n4 v* J* [4 D9 E+ b2 R- Y9 K3 \9 g+ h
/*
& w7 L. \! T7 k0 D7 lNaN:Not A Number$ Z9 K2 H% [. k
NaN属于数值类型 表示的意思是 不是一个数字  `# E3 i# v& u: ]' J9 X* ~0 w# k. n
*/1 _# V4 k5 {) e9 O2 k

+ ~2 G( L0 n3 v# n1 r% T. Z+ R4 Y" eparseInt('2345')  // 转整型' Q( \: j+ V. }
2345
. h7 K9 p9 h7 \9 n% e# {% U$ HparseInt('2345.5')
6 D/ K& f5 Q+ B( Z9 R( T2345
" F3 d7 }% m: m( qparseFloat('2345.5') // 转浮点型3 Z* {, D/ c" r5 [6 u
2345.5( {& s; s; a, T3 {- T  P4 q
parseFloat('ABC')' i  g: Z: x; G# i6 Y
NaN3 X# W0 L* W  v0 X; b. W  }
parseInt('abc')$ i! f$ p+ d5 _; K
NaN
1 Q, ~; o2 P/ P" C, c</code></pre>
7 X+ d, M9 _6 `, H$ k<h4 id="232-string类型">2.3.2 String类型</h4>
, \4 a4 l6 k# M2 c) j5 ~# ?<pre><code class="language-javascript">&gt; var name = 'Hans'1 K) W6 {3 c  r
&gt; typeof name& \, |: ^( C5 r9 _9 s# p% O2 ~
'string'
- n- S$ b: O. d
% _2 b. p0 B$ s  d//常用方法/ a( t8 {) P7 P2 `% p
// 变量值长度
7 o7 p; y/ n; R&gt; name.length7 r7 W2 T/ u* f* V0 J
4
3 [1 s0 `' V/ F/ R// trim() 移除空白( E! |1 U7 h8 e1 Z8 p; a0 t9 e
&gt; var a = '    ABC    '' {6 q. z, z" Z  `: @
&gt; a; |3 E+ j* F( T( i+ ]4 e/ j
'    ABC    '
4 P/ U3 V" w  q7 g&gt; a.trim()
& g4 {7 l# \) B1 W! f4 T" P' O'ABC'
& r2 o5 j. K5 C4 S! h5 c//移除左边的空白
- j5 F8 p, ]1 x: g9 h% P3 n/ X&gt; a.trimLeft(): Z2 E  H$ r3 ]$ l' d* W# f
'ABC    '0 g" c7 N7 H1 v5 u- f
//移除右边的空白
9 l/ R  Y6 W7 P2 H( B; r% k- z&gt; a.trimRight()8 P3 [; W& J2 S; a
'    ABC'
; W: f# t9 n: l- y+ c" E" y; E0 w! s+ D4 c
//返回第n个字符,从0开始+ t& i, {$ o8 [- m2 |
&gt; name, R% H3 q7 D5 n  Z  d/ j
'Hans'
/ H4 [% F0 B+ Y8 {  i+ l( Y&gt; name.charAt(3)# b1 a/ y5 h& I, I
's'% `; V, B+ [# H5 V
&gt; name.charAt()
2 H: s6 u: n0 u, A. T9 C'H', \  Z% k8 x. ~) [
&gt; name.charAt(1)
' v3 n* \" s- N$ T* ['a'
- A& C! u1 Z' j: K- U. }' B+ x* ^( X' v( R8 }: W; Z3 ^; n+ f
// 在javascript中推荐使用加号(+)拼接9 n7 M4 J# E0 p' l3 H9 Z* E5 j1 O
&gt; name
. i0 V5 g2 K8 O* b8 A) e( R1 Q2 z'Hans'
5 [0 j) O( y- N( }&gt; a$ R8 Z) H; G6 d1 ?, D8 U
'    ABC    '6 w2 E) l0 M2 H; h' Y
&gt; name + a) C% ]$ a  I: q
'Hans    ABC    '
" v  u" d" i- t- X3 ~# F// 使用concat拼接$ V) h- H! b  C
&gt; name.concat(a)
+ ~  X+ A1 i$ p5 y+ s+ c& X'Hans    ABC    '
- R0 @1 K/ U, \7 G3 ]* k8 U& t5 \/ Y0 z# I* A
//indexOf(substring, start)子序列位置  x3 z: c, O8 ]
( e3 e0 e& X1 y) F
&gt; text
1 `9 }$ @- m* k. m7 Q3 M6 @' i'A young idler,\nan old beggar'
- c0 \, u' ]+ E( j6 m( `( Q$ g&gt; text.indexOf('young',0)
4 b8 q+ q) ~9 U3 m% s1 i+ P3 N25 C: ^7 U# k9 H- ?# {+ q3 O
7 J' K' O  f; B& H
//.substring(from, to)        根据索引获取子序列
9 }% D* v, @4 R8 b0 ~% N9 I# {&gt; text.substring(0,)
! g$ U, R0 |6 Q& b'A young idler,\nan old beggar'8 p6 O# ?3 i: h) q  o
&gt; text.substring(0,10)
" b& T+ Y1 T1 Z- z- U+ Y$ z'A young id'
4 b0 {. H/ n0 \6 ~/ m
) O3 z& f% v* l. e+ ^// .slice(start, end)        切片, 从0开始顾头不顾尾! w. F2 b5 E5 x+ m* Y  ^/ O
&gt; name.slice(0,3)! T3 q! f" Z& `6 _# U( F
'Han'
, x; z  y( a: e  T( c+ _  L/ a2 Y: ?' @% m  M1 u1 t8 Z' M
// 转小写( w1 c! P- s9 @+ N) z
&gt; name
* x6 Z) u" |2 K% U: }! N- l* V0 Y'Hans'" H1 i; V- D! {. G: A8 `5 ?
&gt; name.toLowerCase()6 _) ]/ }8 k8 w3 V% B% U; Y$ J
'hans'% B- {9 Y: k; l9 e' P
// 转大写* i) r! T( L8 ]# E* z+ W  A. s
&gt; name.toUpperCase()
$ x0 M% M$ Y' l0 z& K- ~2 a'HANS'* ~9 M& j" z! A- `

0 I2 N* a/ r% _1 i$ N( a7 |// 分隔( i1 Z9 N  L& c+ ]9 A
&gt; name
" \6 C9 _( _6 c'Hans'
0 E$ ]: @/ V$ c6 x" q&gt; name.split('a')5 G  Z& Z" c. i+ p
(2)&nbsp;['H', 'ns']1 i% o* }4 D3 `6 j( U
</code></pre>
9 z5 ], D8 H" u<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
$ i& V2 x9 g* n9 E2 f<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>) E  m( }- X! u- b# h& B8 y2 Y
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>5 u3 L8 O% c# h. j% T
<p><strong>null和undefined</strong></p>
4 c; i! T8 M# `* a<ul>
' n: g0 C" e- E<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
8 L. w: R; ^7 y! V<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
+ q9 B7 P2 h4 |3 ]</ul>0 f% p) l  _8 Y2 W$ ~0 \4 v
<h4 id="234-array数组">2.3.4 Array数组</h4>
8 w  h9 v8 p( O5 o9 Z<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
0 r) G0 P! W8 B; G# v) M% D<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 0 l( `: ~6 _" K
&gt; array1; Z- ^0 K/ {2 q! r3 [; @% I
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
) g6 r7 A& q, F4 l4 ?# a&gt; console.log(array1[2])  //console.log打印类似python中的print
, i' b% u+ |8 S0 d* ~2 A33 O( {0 L, F7 D5 E0 f
// length元素个数0 q, ?, P+ t# t& p
&gt; array1.length
% ^3 t6 A/ \( A: {. w/ ~" t+ x6& A* d- s5 {: B# H9 J/ F
// 在尾部增加元素,类型append
4 g8 x1 [  l1 u) l&gt; array1.push('D')% |& z/ B5 ?* T( w3 X+ }4 q$ `
7
; @( y- P$ W) T" L) \5 h% c/ p/ g&gt; array1( N- }6 q1 E. m% L5 R: i  B/ @
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']5 X- R  N8 g: B0 y) J4 w" G
// 在头部增加元素
( f, J7 n3 F# H; j&gt; array1.unshift(0)
3 ^, |: X' {: A6 C9 Y# D8  |5 O- y* C8 i+ W& E8 `
&gt; array13 S6 j8 }' D1 N& A
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']/ M. n* {6 h. s# h
! r! |$ E+ ~* C+ d
//取最后一个元素
. ~$ ^4 ]; m: G+ a1 ^$ \&gt; array1.pop()6 _' J5 t& a# b' Y
'D'
& Y4 y3 O! d' k&gt; array1
4 h. X9 W5 l! q- W(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']2 r; p, g4 W4 B# P$ u) r+ T" Y  H
//取头部元素) P! L9 R5 k4 F
&gt; array1.shift()+ b1 ]# W- F  H( ~. _# U
06 {. d0 k0 I# z
&gt; array14 G9 b5 x3 v# ~8 |. V/ M
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ P* a( S+ J3 C

4 V, y% e3 y9 C& t4 X" }" ?//切片, 从0开始顾头不顾尾
6 `3 }( W9 J7 `&gt; array1.slice(3,6)
6 O) _$ u9 e* q: q+ J5 k, k(3)&nbsp;['a', 'b', 'c']3 [/ {0 Y( W- C3 d! @: T
// 反转
* b) s* _( t8 {7 S& |&gt; array1.reverse(): u% T* f, K8 _& [$ ~8 l' e
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]1 W* u' G; n- |" E
// 将数组元素连接成字符串8 C- m3 Z! y4 ^2 p
&gt; array1.join() // 什么不都写默认使用逗号分隔2 ~; ^5 i6 x4 z" S* {
'c,b,a,3,2,1'7 M( \+ o2 I" r0 Y2 L  B
&gt; array1.join('')
$ E0 E# @; s) S  \- a6 d, u7 s'cba321'. }* y  ]" p: ]5 j2 _
&gt; array1.join('|')0 T7 M& Y( ^; a8 o. r, O$ R# R" K' G; a
'c|b|a|3|2|1'
$ s4 E/ G, o; ?8 T0 r
& x  q8 W* j( Q- w& |1 W// 连接数组6 B2 ]3 b! {2 a8 K4 e
&gt; var array2 = ['A','B','C']
5 L- _6 U' t3 A' X&gt; array1.concat(array2)
, M3 _4 |# q# g! \) t(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']( Q- N$ _$ l" ?3 R( V

1 z# K) J- J3 Q1 _+ r! t' `// 排序) K, B$ |) V) o8 c  a
&gt; array1.sort()
3 j5 Z, v1 p% \2 G. |(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& U1 D  K9 b. V$ h% e' F  V" S4 H
// 删除元素,并可以向数据组中添加新元素(可选)4 v& \& B; W& ~5 a/ _3 v" t1 Q
&gt; array1.splice(3,3)  // 删除元素
* J  ]- T0 E8 }" P. w(3)&nbsp;['a', 'b', 'c']! G3 X+ }( b. x* q; j2 w
&gt; array1  m/ C2 h5 G( H8 s$ P8 O* P
(3)&nbsp;[1, 2, 3]# S8 c1 Z2 }/ H5 K9 j% u
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
+ K3 u1 S. K. g+ j[]% k+ c1 j2 a, ^% `/ ?( f$ S% o
&gt; array1
/ [& T% g) H6 S& I6 I' T3 R+ x(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']! x' @( x% z) `; ~, q3 l
, }& h& V2 q1 T( J# v/ i
/*
  M# T/ G% ]1 v* X, Q$ Hsplice(index,howmany,item1,.....,itemX)
; w, _# ]! W, r: Iindex:必需,必须是数字。规定从何处添加/删除元素。
* U+ f: i0 y3 h. v/ F1 j. F# lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。: R* d) x  ~( {* B7 J- _% m
item1, ..., itemX        可选。要添加到数组的新元素& r7 D: x9 B8 \
*/  n$ X" d2 S6 R, F* W9 G. F- r

4 z) U( C' x+ i0 E5 D; M3 i// forEach()        将数组的每个元素传递给回调函数) g% q( O5 b, r6 {4 |# }
&gt; array1.forEach(function test(n){console.log(n)})# g7 c" d  G* a8 W; V+ L. e$ }
1
4 N! l6 m* O" C9 P( n1 z, P) p! c 2
5 \5 Y5 L, R* E2 s; r 33 [% d- ^/ y( J- z3 f
A- T7 _; E4 C/ ?4 h4 q$ ^7 e
B
3 Y- f% o7 |, A+ ^ C
! a' h9 d% \/ m// 返回一个数组元素调用函数处理后的值的新数组
' d% k& w" p$ I- Y" v2 J&gt; array1.map(function(value){return value +1})3 s3 z# q( \- S
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
4 l+ X; R3 P7 q+ y: G& u8 T1 ^# _4 V8 A</code></pre>  {5 @2 d4 T# m% M- N' _2 a- C- U
<h3 id="24-运算符">2.4 运算符</h3>% h) Y& N. N6 _2 K( \+ H/ P$ c- E+ k
<h4 id="241-数学运算符">2.4.1 数学运算符</h4># W- e0 d# I) Z: h2 R! H
<p><code>+ - * / % ++ --</code></p>: F7 `) B; t1 s5 C0 `
<pre><code class="language-javascript">&gt; var a = 6
9 p% A1 ]+ \; z+ ^( c&gt; var b = 36 U: s7 ^, s7 `; O" e  _
// 加- k6 a1 F# i4 [- U1 E
&gt; a + b& l% ~  g7 b( h, N
9% q9 }+ k) u9 z5 b1 j
// 减. [- Y; H  Q+ K5 `: X1 O  y
&gt; a - b3 I  ?# r" ]/ M& |3 U  ?
30 T& E/ E% X0 r
// 乘
9 k& O. f2 H+ d- W  P+ N&gt; a * b
, w0 o( t- W. S6 o8 S6 k0 D3 S18
4 L! t8 }; I0 u$ W$ V// 除
5 o9 ?1 L( ^$ [( V) K# ?&gt; a / b$ T1 G" k! t, V4 b  b
2
3 E& }! i* ^& v- A// 取模(取余)
, \2 X- ~2 L2 x6 O1 q( d* Y& i$ r. n&gt; a % b) ?5 T. N7 I0 u! C# Y
0/ R) u% n( J2 C2 @0 n  i  ]
// 自增1(先赋值再增1)
7 x$ u, {. b* X% ]4 H- \&gt; a++
# V( G  \. k& ]/ L1 a: t# x4 a6
& \; z4 A+ a& ]  G2 i" k: w&gt; a
% b7 x* z, w5 O. p7
$ s2 E  ]6 h8 u) e// 自减1(先赋值再减1)! y8 F: E  A6 i2 ~) u/ n
&gt; a--
  k! Q- z" X- O77 M4 ~  h. s0 I& |: {7 @% \; `
&gt; a+ l7 f( S% {- i6 _6 `: P7 P
6
7 T) j  e( @- ^6 \// 自增1(先增1再赋值)9 W& W- h8 G4 R# G
&gt; ++a) m" s4 l8 ?( V2 |
7
6 k7 O) Z$ {+ ^1 B* D// 自减1(先减1再赋值)! X1 Z# r* p7 I: ]/ m0 H) @
&gt; --a2 h  `( ~  U. [! Z3 o1 `. y0 G
6. F6 `1 t4 H  M
&gt; a9 W9 _. C2 W0 ~; ]7 Y1 h
6
" u' ^2 U+ P/ a/ X5 f; s! ]
& A3 C, {6 A$ p4 t//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理/ V4 F& A6 p$ {/ P0 ]5 N7 ~1 U
</code></pre>
# _- _7 j  K/ @5 v5 H: v5 q<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
4 A' K# E4 Z3 T1 d; b4 t# v4 ]<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>: C& a; H& S3 m. R4 I& K/ j
<pre><code class="language-javascript">// 大于
2 O' a5 o4 n- B* ]5 M! m&gt; a &gt; b
0 s; G0 J7 D7 }true
1 f. Z6 Q8 X# F  T  P# D// 大于等于
2 K0 J# G. @) ^6 f  g&gt; a &gt;= b# L$ {7 X  P$ L7 l4 h7 w: v! Y
true) e1 Y( X0 c4 l5 d! y
// 小于
9 u3 ~& w8 I& u* w9 M&gt; a &lt; b0 z' {2 Y' C5 P/ I3 c
false
' t; K# U# c6 m9 ?// 小于等于
& W' Q9 F. L  c% D9 u. ]. w, n&gt; a &lt;= b
- q1 A* r6 `; r' n0 ofalse
  g& b. }* e, \" ]6 a// 弱不等于9 g. Z: u* k6 A7 }( p( A
&gt; a != b& J" m' Z) _# B
true+ J: v2 \: `4 \. i" g0 \" J) v# t! o" \  b
// 弱等于) `* `+ L. }! i# @8 d
&gt; 1 == '1'$ _7 I9 V$ f3 t$ U
true% w. Q9 E3 x% n/ f3 T# }4 o# K
// 强等于# L5 _% f) M3 G6 O: ]5 }+ D. @
&gt; 1 === '1'
+ Z) N4 ^7 {/ L3 v: L. M) wfalse4 l  V0 W. Y, m
// 强不等于
* l: C( m  ^5 r# ~# Z/ t( U/ v&gt; 1 !== '1'/ k; j+ Y' c" ]+ S! N+ c$ U
true7 S. F$ e$ q0 y9 \- X
& m' P( }0 }" c, p  t/ }
/*
1 {" R3 u; P$ O' N; V& ^JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
/ T  ~# q$ T7 {+ V4 G5 g* s*/
) H" Y6 B2 g, M- D</code></pre>; s. B" _# G( s* @
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
+ c/ V8 r( U+ N9 t" ?( R" g/ X  T<p><code>&amp;&amp; || !</code></p>6 G- u. i9 y2 V
<pre><code class="language-javascript">&amp;&amp; 与
+ `, H* o0 z, m9 u- i, N|| or
) Z8 U2 x7 o3 x( L6 P' h$ m! 非
5 ^' |3 I& q8 m) {1 @+ C5 L</code></pre>
8 E6 o/ x* W0 P2 s: s% E<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>8 v0 g9 N1 Z1 a1 K1 ]5 U
<p><code>= += -= *= /=</code></p>/ u- u6 e3 L- t/ I  ~0 G( D: b
<pre><code class="language-javascript">// 赋值  M: e* K* u7 q' P. t- f
&gt; var x = 3
8 N) v) h" n1 X9 f// 加等于% {# P  M% Z! l& i! L
&gt; x += 2
1 b& H$ k8 p4 z  h; H/ b5
" u& b& @: _% A/ W- D/ c, `// 减等于
' G* \) c+ m8 C; \5 U6 [! t5 Z&gt; x -= 1: ?2 v) ]3 W& a0 A# a8 {) p4 x
4
) t/ x9 v7 s, N2 W$ ^7 _; e7 l& ~1 S// 乘等于
$ {$ F7 o' Z2 Q1 }( ?$ V( w&gt; x *= 2) l; }& @/ ^, L* l, ?
8' o* H1 a0 O0 n' ^' @
// 除等于9 X+ C; S$ |" y9 ?8 a3 _
&gt; x /= 2; N& r# A0 K1 H) `2 t
4) E  w2 S/ G9 \+ M% L; U
</code></pre>
% i7 K7 I+ d5 K# y<h3 id="25-流程控制">2.5 流程控制</h3>  p- q2 H# T4 {9 l) m8 _
<h4 id="251-if">2.5.1 if</h4>
" V- _6 d( m4 b# q+ b2 S9 h$ b  U7 ~; |<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
# n) \$ D2 W: M9 z" `- v
- N' k6 Q# d5 F4 I3 X7 v6 D- u&gt; var x = 3
: R8 Z2 {9 }, l  M/ S! O( G&gt; if (x &gt; 2){console.log("OK")}3 Q* d  E$ c4 O: z# b4 |. o
OK
8 Y2 h; n- ]- {1 ]$ r6 x
" M* h0 b0 Q3 d  c' Q+ _2 }! E2, if(条件){条件成立执行代码}
" s* {7 l4 o/ ]+ q. H1 f        else{条件不成立执行代码}
% E. R" F) v- s* x1 j4 [& n# h/ V  Q- N$ B- t: a" {( U
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
  T! G& ?  _4 z% ], H. f'NO'
5 w$ }. {* M) v* E6 a) W
% C4 P7 m% j( V- s! f* Y3 L3, if(条件1){条件1成立执行代码}
, c  `; Z6 Y' T        else if(条件2){条件2成立执行代码}4 L4 Y4 R% e% P. L* c0 J
    else{上面条件都不成立执行代码}
  \$ U) l) K% k
, [0 g% f+ v  U6 @. `' E8 {&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}0 T+ R  W6 |% N
Ha! I5 _6 Y3 v8 n6 j( ]- y
</code></pre>1 M2 W2 f$ [* h8 m+ e, Q
<h4 id="252-switch">2.5.2 switch</h4>9 T/ q7 l) f+ j7 R  s! I1 p& D
<pre><code class="language-javascript">var day = new Date().getDay();
" F5 k0 {+ U- S& J# cswitch (day) {+ S+ `# `" U% N3 S4 k! j* ~0 L+ x
  case 0:
9 l7 Q! Z4 ?! K0 g6 X& ]" b) z; a  console.log("Sunday");
6 Y7 H: [. k3 Y  break;/ `6 l0 g6 m, G( U( f8 H+ _2 R
  case 1:% B& }. X8 u* @- ~) {% w6 C
  console.log("Monday");
% Y- n8 C/ J  i6 t. x% l; K  break;
6 B5 d" D0 |1 E* M& Bdefault:3 X4 y) w3 s. a$ C! c9 w! Y& `# W
  console.log("不在范围"): h  ~6 v# H: I
}
9 K1 \% m( |. X2 H. K- f& n0 N 不在范围
/ b$ z+ B( W) X; n" y& i# S8 d' z</code></pre>3 y4 q3 R$ S' g) ]6 X8 W* v% ^! ?* b
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>  D: O( b# C" O- v; |
<h4 id="253-for">2.5.3 for</h4>- h. S( A3 s, t" E, n8 e
<pre><code class="language-python">// for 循环1 \1 z- C5 a( w0 e/ ~0 W
        for(起始值;循环条件;每次循环后执行的操作){4 D( w$ b; M6 r0 t2 w% N# ~9 g
        for循环体代码
: U  [* Y3 I) C/ C' N) w2 J  u$ R2 \    }
" H# q- h; |; a. k4 U4 M' Y8 y5 b( r. V5 ^; c# f
for (var i = 0; i&lt;10; i++){
( ?2 t) a' Z: K+ H% }% d$ }3 ?1 S    console.log(i)
0 K( J4 u1 k7 R2 v6 @' e}
0 Y1 p  D: e3 `! b        0
- E4 V/ @- e9 S$ C3 u' n' Y        1
& ^7 u. [2 V/ ^$ C        28 ~) G; t* Y4 v& F5 y( h
        3
& p( [! A8 P5 e# t        4
; ^+ b1 b# ^  J' m) g9 v9 @3 @        5! Y5 R* ]9 j8 S3 l0 v/ l8 }
        69 h- o3 b2 X, R" ^
        7& ^8 W( w7 W, L/ }% `
        8
, C0 S" a' v/ R        9
; D# Y1 N( m1 G( ?! W, K2 h9 }/ a) g</code></pre>
, \4 k9 ~8 i  f<h4 id="254-while">2.5.4 while</h4>, N. y' ]& g! Z& D! y
<pre><code class="language-javascript">// while 循环
4 u( I5 A5 T6 l1 v! |  w        while(循环条件){4 @2 ~8 j( E: A& E% Q) {* `
        循环体代码* T8 z, `1 e' a
    }
3 W5 Q$ X1 ~( e3 ?- D) L) J+ L% @8 r1 m& e* b
&gt; var i = 0
1 o/ b& I- i. Y/ H4 t+ B7 H4 w&gt; while(i&lt;10){
. f9 I# _% [3 P# U5 w$ r    console.log(i)
$ W7 |$ a" u5 F$ |5 c$ E# Z" h8 W    i++3 b% x: g: Q# H) _+ Y" I
}/ J9 u. m) ~4 O" y/ ~7 ]" T3 ]" t
02 m. t# U! x& n3 U+ U% l' j, H6 k9 ^+ I
1& q" ]7 l- G. u: ]! P
2
  ?9 ~) z' r0 S2 \! |5 ]  V 38 v/ a9 {: x  z% a+ X4 I1 s
4
% q  H6 l4 `, m5 x6 ?6 Z& A' l+ b 5
( _6 S! Y6 o% _; C 6
8 s& L  F% h5 L 7
4 Y, W( ]; z+ m5 g5 Z1 z' r 8
1 A- T, w6 ~; g$ |- d* _. F7 Q 9  P: U/ R$ J' z3 D' z9 f% a
</code></pre>( O+ b3 v- A7 e
<h4 id="255-break和continue">2.5.5 break和continue</h4>, }4 r6 j7 _  o, o8 a9 P, j
<pre><code class="language-javascript">// break
8 _2 S2 w$ w7 U- Z: @& u% ~9 }for (var i = 0; i&lt;10; i++){  y' H  y5 w% y- ?$ X
    if (i == 5){break}
! C8 C9 i% V& W; W    console.log(i)
# |7 x7 J* p5 \# I" ]& g}: U8 ^- [8 }2 B6 h$ `1 u1 M
02 }, U/ \5 F$ G5 i
1; X3 `; n5 d- `6 [2 X
2# R$ _3 x, V# @% k6 g. _
3; Y/ C' H" v) \5 G# P  n
4
8 J% b, o$ G$ n! x3 F// continue1 {' {2 U. r6 i1 l; ~# t: y4 F. j
for (var i = 0; i&lt;10; i++){7 x9 o1 p. A) c! H
    if (i == 5){continue}
" V  q0 ]- ]' Z( n1 ~& g( S    console.log(i)! k7 }6 ~2 A' p$ Y, Y6 v# G7 J* U% G
}
- K3 A- H/ w: q) [+ M, F: e# J 0% C! K- m/ S9 m/ Q# B6 l; F7 P
1
; E3 }4 b7 ]+ @4 f* h9 j2 @ 2; [4 G* G  j8 f% R
3# C$ D- m) \1 X' Q# u
4
4 ?" \$ c6 H2 `5 l( {2 n6 h& u8 H 6
" l4 t, f( F" y$ n/ J 71 t; U. p, v9 J4 {5 d
8
& K$ s2 J( b4 ]+ A& n* t1 w 9
3 I9 a" {1 C% r( l. T: I9 H8 {, Z
</code></pre>( t+ p$ b* y  j* t9 R! P3 x
<h3 id="26-三元运算">2.6 三元运算</h3>
4 B6 ^- h) f. r* V; |) N6 F<pre><code class="language-javascript">&gt; a
7 [8 g) [% F) a0 W4 s7 T: }* P6
$ Q/ ]% \+ r6 V: E3 V&gt; b& T1 p7 D6 N9 h0 l3 z
3
# k' X: |% Y* i7 o
4 }9 w+ q) y$ N' ^1 n/ j' g//条件成立c为a的值,不成立c为b的值. @/ i: ^9 e; Y( t2 u: b. @
&gt; var c = a &gt; b ? a : b0 A9 H/ F" T8 B3 w# T% S8 J
&gt; c* `  y- J" P' U, F" Y2 A
64 U6 L' `- _$ u2 G
# A  I" _# S1 S. {
// 三元运算可以嵌套2 ?/ y4 A- ^  p; T/ \& m, \) V
</code></pre>
/ [. H, f; ^* x$ ]<h3 id="27-函数">2.7 函数</h3>' u  E! z# v" A$ I% ~
<pre><code class="language-javascript">1. 普通函数0 x( @1 h0 r  R; o7 u7 v7 [
&gt; function foo1(){# h. E9 l8 J# T. F1 c# s4 H3 w
    console.log("Hi")
$ D6 l* [, q* p4 n$ ]2 a}* T! ?; D% A* D3 Y* A2 q# X' Y
+ I2 F) V" K6 h( j
&gt; foo1()
. D5 U8 l0 g! k- S        Hi5 M; \) b' a4 N
2. 带参数函数( Z9 s! n* L2 I3 }" T  @2 w
&gt; function foo1(name){; _; s+ a2 p! `) d$ x/ M4 m
console.log("Hi",name)
( ]6 H) p+ m' @& ~9 e}
( n- c1 R$ D1 Y' v$ |5 n, |: O; G; q
&gt; foo1("Hans")! O3 O" @  I0 A+ ]
Hi Hans
4 U* E" |; P0 o
: p% K+ x/ y' d&gt; var name = "Hello"
  G  l# w4 L3 L% n# U7 E7 X7 ]5 j, I! S&gt; foo1(name)
' ?/ f* j5 w$ Z2 ^$ }% B- VHi Hello' C8 I$ \) b7 C. S, X
2 i6 r; n; L' `9 {) U6 C! g6 ^) ?
3. 带返回值函数' ^" P, u% l+ a  a1 R! m- }
&gt; function foo1(a,b){# y' E! P. E0 O4 L- x9 Q, V
        return a + b   ' D: f! c% [: r+ r" Z3 y3 ~$ [5 ~* d1 a
}
; l1 e' P3 W; e8 k&gt; foo1(1,2)6 [. @$ \2 \# R$ Y( ]: X, B
3
! p1 a3 Z8 v/ ~5 @" ^, i2 n&gt; var a = foo1(10,20)  //接受函数返回值
0 p$ b1 I/ ~( n( |5 j: q&gt; a
+ `; ?/ X9 N( R- }. q( S0 a30& ~" X4 }0 O2 K+ B/ q7 ~; v2 }
7 |$ h: W! z6 |+ f8 ]( Z
4. 匿名函数
7 V3 O- w- Z. G# \9 ?- E  a&gt; var sum = function(a, b){
! I0 t( m0 P" |  return a + b;
- U  L# D6 V7 Z, @: ?4 T% C2 y2 q}( }5 l+ D/ N6 E, _. y
&gt; sum(1,2)/ {: d* ^( y4 X
3
/ x  L9 L! y* F% H
1 I' Z5 |8 i& \3 g3 t. H// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱+ [( _+ q# r2 {$ R7 T2 K6 q
&gt; (function(a, b){
- F- M4 j! ~# s' O8 ]9 N. `" w3 M  return a + b
' k' ^( x7 r. F8 G})(10, 20)- ~# f! [# ]* {% O
300 W; {) `' n, e' P5 ~, W0 X8 O

+ Z  G7 o& A1 p! E1 h5. 闭包函数' a* Y8 A6 o$ B9 z8 m
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数8 a- S6 c$ S7 j- B& i0 l
var city = "BJ"
1 \; H1 ]6 e3 gfunction f(){
3 Z' a# h# y0 \. h5 m6 m    var city = "SH"
% \8 X  S1 E# z1 b    function inner(){  w: K! \: R4 n5 m/ S
        console.log(city)
6 N* }+ A8 H0 s* p: W    }% S; X0 b1 |$ D$ N6 R
    return inner$ F7 T2 `5 U/ t1 v( C3 ~" z
}7 d0 \: U" F- E, a
var ret = f()
2 Y' c( ~& A- v- S& ~9 \; iret()
  u" L$ C: @4 d) I  c% _, H执行结果:( j! \. z8 S3 A& v8 c
SH
! T$ N8 E* d; {- l2 o8 s5 N/ |; Z/ K- y& n% A8 H6 g
</code></pre>/ Y+ {% g; i' T! h
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% I* T4 @; L% |) Y! h# F<pre><code class="language-javascript">var f = v =&gt; v;
2 @4 [6 M: I& \: \// 等同于0 n+ `# w/ y0 o- Q
var f = function(v){
; [3 q+ a  O) z9 A8 {  return v;
$ t7 H: l5 z7 P+ @5 ^}
" F; X1 |1 [0 c/ ^) H6 Y, I</code></pre>. g5 y7 |  y; Y7 Y# `; [% Z
<p><code>arguments</code>参数 可以获取传入的所有数据</p>4 t+ o& e0 d4 G3 x# h
<pre><code class="language-javascript">function foo1(a,b){% H) r+ w1 v" x7 D7 r( r0 `
    console.log(arguments.length)  //参数的个数
# q3 f1 Y/ u3 Y& H    console.log(arguments[0]) // 第一个参数的值& P/ T+ k% |6 Y. M, J) C, S2 s
        return a + b   8 ?) c3 X6 A, q. g0 S4 ^
}2 i- D) ^/ n8 |) e& R! [  J3 D, H) D
foo1(10,20)
5 I; O! s3 ^* p) P8 `% s结果:
  e- Z' J9 ?% ]4 ?! r 2          //参数的个数
. [3 p6 J. K4 Z10        // 第一个参数的值4 b) a- G/ a. T' y" C- L
30        // 返回相加的结果
& I9 j) q9 Z" |2 t9 w! O</code></pre>
5 `6 c. O3 u5 I2 E<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
# F: |# N7 V  V! d' M5 F<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>" ~" R' ~* X2 u: q
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
( e' ^6 y- V6 U% L' b<h4 id="281-date对象">2.8.1 Date对象</h4>
# b1 @4 b! s8 Q# T! ]% q$ Q<pre><code class="language-javascript">&gt; var data_test = new Date()  x# n- H. x% U3 f9 s7 G8 q8 e
&gt; data_test3 s: L. }3 |+ c; V8 O/ e0 f: U1 H
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)$ w* w9 I/ A  m& L, L
&gt; data_test.toLocaleString()) ]1 D+ k7 V1 p9 P9 l5 b) ^% k
'2022/2/11 下午9:44:43'" U+ t; o7 U7 l: _6 ^
! M+ C4 K* o9 s$ z8 t
&gt; data_test.toLocaleDateString()" x3 `1 v3 s( Q2 S- B3 g. R, R
'2022/2/11'  G% |( ^6 F5 Y1 a: j

8 J6 X, B: r* c+ ]: `8 U&gt; var data_test2  = new Date("2022/2/11 9:44:43"): Q2 @+ P! \+ M4 C
&gt; data_test2.toLocaleString()$ x6 C# Z0 m2 s3 g
'2022/2/11 上午9:44:43'% F0 F, |4 g' m3 r: i3 l/ I+ ?

- h9 n3 P9 k' I- D0 q! a// 获取当前几号7 ~6 R) y5 `' k; Z( h  b5 T
&gt; data_test.getDate()$ w7 o! X' Q  F+ S5 ~
11: _* ~* q, I! ~. N6 O
// 获取星期几,数字表示
2 K- c$ {7 t8 z' V2 k; _&gt; data_test.getDay()  
5 Y6 F, Y9 `+ f$ G3 F4 v5
( P) U8 }/ J5 n+ v$ s8 i// 获取月份(0-11)
& R- Z" l% _/ b* A3 n&gt; data_test.getMonth()( f  |9 J% `2 R4 L3 _
1
1 T: P  y% u7 y// 获取完整年份
+ _" \. b( Q1 Q. u( ?&gt; data_test.getFullYear()
! T; V. A: i4 T) V2022' I/ d- A' m/ s  d" T6 u  I
// 获取时' I4 ?8 f' g7 `) i) o
&gt; data_test.getHours()' v" m( X/ N. C. n
21
" j8 G, ?8 t( ]) }7 F2 _// 获取分
) |, _  l+ d+ r" K; w" S7 \" f&gt; data_test.getMinutes()
( R. p$ D+ F9 B% z1 {6 t44
  j, J1 m' I' |5 r// 获取秒' t, `" u) y& ]  m
&gt; data_test.getSeconds()  \4 ^" \4 _  W
43# i" A, ^* X9 X* B
// 获取毫秒
; D* S' W# ^( |/ W* B, A&gt; data_test.getMilliseconds()0 A& i9 F/ F" _4 Z7 ]5 {
290% t2 e! ~1 w$ u5 S+ i: Z" B
// 获取时间戳) k5 c3 _  T- h# y- D: b
&gt; data_test.getTime()
: V) L: m; Q# F5 P, ^1644587083290
+ r* R- H7 d8 A2 o4 h5 M2 ?$ t</code></pre>
0 J* i  F! p" ~, G: ^& ?<h4 id="282-json对象">2.8.2 Json对象</h4>) D1 K0 |5 m6 c, T2 s0 D2 ?
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串; S, V0 f: p, ~! n6 m: S# E, C6 K  N
JSON.parse()  // 反序列化,把JSON字符串转换成对象7 P  j0 w; q8 \0 ~! q7 ^
* @- ]2 F7 t' k, Q) u
// 序列化
6 k/ f: B  q( J: J4 Z3 g+ K* X&gt; var jstojson = JSON.stringify(person)
0 P1 F: c4 {* O/ X! p&gt; jstojson  6 r: h9 E' U( C
'{"Name":"Hans","Age":18}'
0 I5 f1 A8 V2 B3 p) [( w$ z) |
$ {) L) M1 t) u; k// 反序列化
/ t( Q/ Q* {& I2 [& N) J$ Z&gt; var x = JSON.parse(jstojson)) f2 E! \* p( ]4 Q5 C1 E* @8 e
&gt; x
, Q. g2 h0 D5 e( o* l8 E) o/ b) j% H{Name: 'Hans', Age: 18}7 l' B' J+ A5 n. W( J; X
&gt; x.Age
( \( P5 E7 ~3 {2 j# Q- d; C3 M18+ D) o& g1 {( y# Y& B6 v( u/ n+ O
</code></pre>
! V6 U$ u; E: y: A- h9 Z0 |<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>; x3 R- R+ u# q& ]' Q5 E3 D( F
<p>正则</p>
1 o* f1 X! X$ j$ }: F, E<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");* o; O. E+ q7 _0 R) D# @$ b, `
&gt; reg1
; b% m' X( t9 k# }% s! h/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ ^, N5 |9 C6 }& J( r8 D&gt; reg1.test("Hans666")
2 h/ @1 [% Z4 Ktrue$ a. H4 D/ ?- S
& d( E, v$ y' ^7 }! u
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/% }" c4 V, l' k" `* ?) Y$ d
&gt; reg2. ^# n) l4 }( D% a5 u7 n; A
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
+ P- x, B3 C* j! X&gt; reg2.test('Hasdfa')
3 w' Z! \( S3 _1 Wtrue% P7 C1 ~1 |, O

5 U3 E* `, V5 f8 A7 m全局匹配:
4 ?& V" \" w. h6 l/ F1 P7 p6 M&gt; name9 z& u) q" f7 T
'Hello'! \9 d1 A  l, y& N6 G4 H
&gt; name.match(/l/)* _9 F1 ^: k6 @$ P6 n' e' ~: s
['l', index: 2, input: 'Hello', groups: undefined]+ B2 A; C$ K( d2 c4 v0 H5 ?6 a0 \( q( ~
1 v, ~) \* Q5 I, @# P) o# y
&gt; name.match(/l/g)
+ O  O+ o7 y2 B) _(2)&nbsp;['l', 'l']
5 N% u) e# x5 V6 a8 M# u// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配2 I( e! {$ f# ~: M/ z
% ?; i. @" Y% A5 k
全局匹配注意事项:
  O9 R; C- K+ C& Z+ M$ ^&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
6 S- @1 j+ ~7 @9 g&gt; reg2.test('Hasdfa')
. L. u4 \2 T3 R0 Ktrue1 ]3 N0 z# c1 ]. W; ~7 i' D
&gt;reg2.lastIndex;
9 Q+ I" w8 V( t. x6
3 `  Q" X5 H% E&gt; reg2.test('Hasdfa')
1 f1 ~& D. z3 Bfalse) U- t$ h  g+ w/ j7 y& F
&gt; reg2.lastIndex;
/ u# k" z) i5 U% K3 d+ d03 X. G4 G  }' J; _' q
&gt; reg2.test('Hasdfa')# U5 K# W" c" d" F! a7 f
true
. p& G, T; A$ x9 u7 s; p&gt; reg2.lastIndex;0 {: y; f# n  d. F% M
6
0 R5 N# H: w1 h; N1 i&gt; reg2.test('Hasdfa')
* _" Q! v$ {. _false
  X" E7 l( ~1 V" g7 w/ G* m&gt; reg2.lastIndex;5 X1 S" c9 ~3 u) N
0
2 w5 |5 l. M6 Y3 B2 l" ?// 全局匹配会有一个lastindex属性
8 R2 G# Z3 e" |6 o, t&gt; reg2.test()
4 f/ {- G2 V" L9 ^- L! \1 zfalse
# h4 ?% r& b: E& G1 H8 A' O3 }&gt; reg2.test()- h# \/ g2 Z( l1 B- J3 @
true
' n+ Y/ }8 ?( d1 v0 B// 校验时不传参数默认传的是undefined4 X/ |/ D1 a5 l
</code></pre>8 n$ q1 v) z' W1 V
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
* n6 C2 Z  @2 x) Y& n$ l<p>就相当于是<code>python</code>中的字典</p>& }8 G5 |! i  i2 U: Q4 I9 _) i
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}4 W# e4 I, e/ M- G1 e
&gt; person; h: K0 E5 S& ^* S% _
{Name: 'Hans', Age: 18}
1 h; L, n/ B, U+ f1 w&gt; person.Name* C9 V& c. U2 v- g: Y
'Hans': c; N" r/ B& Z8 x# u; j" K! s
&gt; person["Name"]
0 U. p; b; o4 q1 T; Y'Hans'( ]2 ^, ~, k4 ~4 w9 y4 \/ H7 M" C

$ y, |: K; \* F// 也可以使用new Object创建
' ~, R9 ~# e3 U1 ~' o" I6 X, M7 Y4 |: ~&gt; var person2 = new Object(); q: S2 I& s4 v" l
&gt; person2.name = "Hello", \9 Z  \/ e* l7 g# K8 G7 u% l
'Hello'
3 ^% V2 c' q) q9 B, P1 v2 I4 W& |( U&gt; person2.age = 201 M) K6 c. d- N( n6 o0 E9 |
20
/ a0 g, U- u6 b% A; B5 |: x, ]" i</code></pre>
1 u. e3 E' ?% c" {* u* t<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>$ i% p) M+ Y: e2 A% w, D5 b3 u7 H
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
. d$ ]; h6 c& h5 c  f<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
4 t5 U1 F+ n3 t7 }  X9 i<h3 id="31-window-对象">3.1 window 对象</h3>
9 |0 L+ f( c) I6 R<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
4 j: X, ~) e; q( x* t<pre><code class="language-python">//览器窗口的内部高度7 ^2 ^+ Q7 I. p+ s. L$ s4 O) Y) {4 ^
window.innerHeight
! \- f6 A/ ]/ c% J; L! }0 N706/ ^5 k; I6 Z6 u' f; ?
//浏览器窗口的内部宽度
+ x, [( C5 U1 {' A! xwindow.innerWidth
% i" V2 Z$ F% U" W$ g3 c  J1522
8 a$ @6 c, C: R// 打开新窗口5 L, B% n9 S5 ^# \. p) w1 P+ b8 E+ }& H
window.open('https://www.baidu.com')+ U/ V( N! Z  E. w* G
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
& w7 H1 s# ]1 y* M! C: u// 关闭当前窗口2 v9 ~" Q0 C6 b
window.close() 9 W/ F/ Y( ~9 M* s
//  后退一页
" l1 _5 E; g$ O1 ]- q' Y- ^window.history.back()( o, ?$ U+ Q, C) [1 q# p+ k' [4 P
// 前进一页/ y$ g! f" h6 s& U& B2 O
window.history.forward()
# l# T) A9 I6 Q% o/ R$ l* ~; v2 B//Web浏览器全称
  @* H& C  v# q' u, a: uwindow.navigator.appName5 V$ Y- n6 T: g8 V0 G
'Netscape'
; X/ A9 V3 z5 s1 H! r// Web浏览器厂商和版本的详细字符串9 V: W2 Z9 o! {! l
window.navigator.appVersion
& Z7 R: X" d- s0 y'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'7 j" b0 z" Y, M: b6 S; A( K, A9 Y
// 客户端绝大部分信息& J6 s2 u! f$ K1 `! f+ O" b
window.navigator.userAgent
/ k# F5 z) g5 ]'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" u; V7 w4 D. `7 }// 浏览器运行所在的操作系统4 M$ Q8 v0 D3 P) n5 G% g
window.navigator.platform
7 w7 I, C( _/ H! R, J) c: r! ~8 t'Win32'; @% g: G4 ?5 Y: L
! ~) u. \  h- @- q
//  获取URL+ v! B1 p+ }) f- O2 Q3 U; b' o/ R
window.location.href
+ a0 r7 Q) u7 m. A. x' A// 跳转到指定页面8 U+ p. G0 \) T' Q
window.location.href='https://www.baidu.com'( Y1 Q! `- I5 e( Z; w  }/ F
// 重新加载页面
0 d3 G( G3 @6 D( iwindow.location.reload() # A; E, i9 g, U% r
</code></pre>
# U; m% g* q% a1 M  }5 j* q<h3 id="32-弹出框">3.2 弹出框</h3>
1 U! T8 R* ~* a' ?2 r3 O8 j& F$ E7 D<p>三种消息框:警告框、确认框、提示框。</p>
& F* S- \5 }* V<h4 id="321-警告框">3.2.1 警告框</h4>% y& K! A$ {; `0 M1 N
<pre><code class="language-javascript">alert("Hello"). h+ a; W0 o& k1 `; P8 `  X
</code></pre>
: g7 v# {8 y/ n, T3 u<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
6 `' t! Q/ E5 g<h4 id="322-确认框">3.2.2 确认框</h4>
6 o, D$ o# X7 g% `; W% `<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
0 t: |0 e7 N4 ]0 g2 [, k: O<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true4 i+ l) P7 {" @, C( B6 V% Q6 o8 N1 B
true
% a# u- W) j+ Y, x&gt; confirm("你确定吗?")  // 点取消返回false
8 J( c! U9 D$ D8 t& m: hfalse' D" b4 d, ?/ a- B' G( q6 Q" q$ l4 ^* N
</code></pre>
5 @+ p; Q, [+ C4 Z' A1 t* W<h4 id="323-提示框">3.2.3 提示框</h4>
! L" B  C& S1 k& x  b& t" ?- q<p><code>prompt("请输入","提示")</code></p>
, J8 F7 m; p/ e- y7 s/ Z' S3 [0 L<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>; r$ ^6 N) m- G" z! M
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
1 W6 u+ |9 |  o+ N4 `% ~<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
# n9 i/ X) T$ U, X+ `<h3 id="33-计时相关">3.3 计时相关</h3>' w* J4 y- X( H
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
' z' L4 }7 f" i, ~/ c/ }<pre><code class="language-javascript">// 等于3秒钟弹窗
% A. [$ l! o" U! jsetTimeout(function(){alert("Hello")}, 3000)
- l- G% ]' j& n. {, T+ ]% x) e. u/ S# l( V4 W: a! X
var t = setTimeout(function(){alert("Hello")}, 3000)
& P4 }* l+ f/ a+ Y3 _! \5 ?3 x( \* w% S" w, y0 n+ t$ m( ~
// 取消setTimeout设置, v1 m" ?3 ^% l
clearTimeout(t)
+ a9 I* U8 K' G- {  `</code></pre>! U8 P, s- ^( w# [( X+ _7 v5 y, [
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
7 y1 m9 v7 D) T5 u<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
- I# ^8 e) c+ @) C; M% N<pre><code class="language-javascript">每三秒弹出 "hello" :
; R0 P1 @- i3 jsetInterval(function(){alert("Hello")},3000);
6 y5 W4 Q% P' L4 s1 h- n# y</code></pre>' A" ^9 t5 v# \0 z1 F
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
9 ?* A8 \! D% w. ]% G- ~0 K! X<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
! w) v; A! |0 B//取消:
9 `# i2 R; E. b% O3 n  yclearInterval(t)0 i5 `& ~1 T( [( [  B' p
</code></pre>/ _# Y! w- P+ v$ n$ ^6 n

" O2 o1 ?* v3 o! ?
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-12 11:55 , Processed in 0.071718 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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