飞雪团队

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

前端之JavaScript

[复制链接]

4822

主题

4910

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
16784
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
; Y6 B0 Z9 M! x& `: d* Q
<h1 id="前端之javascript">前端之JavaScript</h1>
" y* {0 K4 r# n' i. }! A( T" }<p></p><p></p>
* p  U; c' a9 U# f9 Q<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>3 P# }' J( F5 n) u) s, }* ^
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
6 @8 W; T9 H! W它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
9 q6 h5 I8 o8 \/ k; Z它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>! ?, e& _1 j. m& S+ \5 p
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 V4 A; O) P6 ^, X9 @8 _7 f
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>* H, g) E) W) i2 q( M) I
<h3 id="21-注释">2.1 注释</h3>
+ b3 N. T; G$ {4 q5 |$ k<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
9 n* |& F7 l" J2 a3 Q+ p1 `4 o' u<pre><code class="language-javascript">// 这是单行注释
. \5 ?1 w+ G- t2 ]2 E" X% F
0 ]+ f8 l( H6 Z8 J* S* q/ }/*
, i  O& y% w) T6 E( M这是多行注释的第一行,
3 S& |, F. l, [- ]8 ~0 h* u这是第二行。& J  B1 y' r5 d1 x
*/
* [4 |  f0 X! e* B; l' C</code></pre>
% }) ]2 M3 s- L+ B<h3 id="22-变量和常量">2.2 变量和常量</h3>
- q5 p6 ~+ g7 [/ b1 B$ V- n9 t- i6 b' b<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>4 D, {  \9 ~+ T/ z( f
<ul>
+ N: J8 D9 V" A3 s0 L. j, y<li>变量必须以字母开头</li>! f7 [' f8 @; f1 O, u
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
! o$ j: }) y2 ?" |" A<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
* W- H9 t- Q3 L6 B</ul>
- j1 t9 k* L% _( X+ I' h<p><code>var</code>定义的都为全局变量</p># Y+ p  V: T- m9 |/ B
<p><code>let</code>可以声明局部变量</p>/ P; U8 N( R) e5 t& S' K2 j" @
<p><strong>声明变量:</strong></p>5 G6 @% m/ U: N7 B8 e7 L
<pre><code class="language-javascript">// 定义单个变量
; x: c, N# o& r2 f( y&gt; var name' F5 A2 Z) m! o% g5 z+ W% o6 y( y
&gt; name = 'Hans'. {4 X% W; ^% {7 c
//定义并赋值
0 [% O8 k/ D) {' K9 R" i) P&gt; var name = 'Hans'
, g0 ?. F2 W4 M; p1 K  o4 _&gt; name
, m9 A& w4 W8 T9 `) f6 R'Hans'
1 n/ V. s  H( t; u
$ q) w" z1 V1 c& i// 定义多个变量
; W8 X; s! p( h$ I& o3 w0 G  Q1 m&gt; var name = "Hans", age = 18
: L0 I5 c! ^7 {5 b! ]. U6 `&gt; name
/ v1 j# R" w. z" i( w% o'Hans'
' {5 T' v: R) n* P/ ]&gt; age. a9 Q7 }) W, e4 X4 ~* ?. Z
18
; q$ F  W0 W! a7 Y. Q* W. x: ?/ `
; u7 w/ m% Z! x5 u- r2 X//多行使用反引号`` 类型python中的三引号3 E5 {2 [" _+ q# o9 @1 B: |% E3 G9 z
&gt; var text = `A young idler,2 w3 y0 E/ m7 ]/ z
an old beggar`( Y4 Y/ s) W9 a& S. B+ a' P6 B, x; u
&gt; text
2 S3 O! U0 h, M'A young idler,\nan old beggar'
) s: R- ?5 {* W1 C3 {3 G</code></pre>
2 C; b9 U" H& Z: I<p><strong>声明常量:</strong></p>( @  Q) n9 A1 z1 x9 d
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
- u3 g0 e8 L2 i<pre><code class="language-javascript">&gt; const pi = 3.14
; k4 ?6 e8 |6 J/ ?- r8 d# n. c&gt; pi. U( l: ]1 w" Y3 Q% V) X
3.14
/ Q7 g/ a+ F2 {, y. J/ D&gt;  pi = 3.01* h% c0 U; J5 O+ J' i
Uncaught TypeError: Assignment to constant variable.( V1 j8 q$ \# E* ~  J  M
    at &lt;anonymous&gt;:1:4
; s3 Y% @' |& v! _( m$ z/ J' m8 a) _" q2 ?3 ^. d5 K
</code></pre>4 Z  M! [- b9 u7 `( o- |
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>6 {+ k' ~: X8 e  ?, s, O
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
! }( ~5 B6 o  P0 D1 S: N<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
4 A- g# q: B! ]0 p- b+ d0 a<h4 id="231-number类型">2.3.1 Number类型</h4>6 \: u$ B7 k0 y# r- u& [7 t; k5 d, s# l
<pre><code class="language-javascript">&gt; var a = 5
/ b& J1 `" x: H6 V&gt; typeof a   //查看变量的类型  
* ^8 x: _- ]4 j& D1 @' Jnumber
) @1 h9 A& D9 P, }4 R9 z. T4 F* |9 w& p$ H9 p2 u1 y
&gt; var b = 1.3
' j+ U; g9 [; b9 l6 K&gt; typeof b
: @3 h( ^7 c; fnumber  ~  u: ?: D5 u/ G" X% N
* a9 F0 v' ]* ]5 }; \  G- q5 e0 k
// 不管整型还是浮点型打开出来的结果都是number类型! T% D# u% u! j

( u5 H) ]" U3 d# n0 Y: H# ]0 d. ]7 j/*$ t/ O$ E; b6 ]& g. f  |  ^
NaN:Not A Number( A. b# L8 |7 `' [% ]4 W
NaN属于数值类型 表示的意思是 不是一个数字
6 e. E7 G, X% A, Y*/" D4 n0 @- y$ F: h2 C4 ]) @2 M: ~' `1 @

& o* N1 k: w. m. Z4 z6 }parseInt('2345')  // 转整型
$ Z7 T" r" L0 N1 J5 M2 X$ z% M: w% M2345
: d+ W6 E: Z8 B2 o+ F1 gparseInt('2345.5')8 F% u8 x2 }3 l) {7 y
2345
: s7 ~$ @( O9 s2 e& {8 `1 E8 W( FparseFloat('2345.5') // 转浮点型
  m( g- v# g3 R8 e/ L+ ?# z2345.5
  x3 d# E- x& z1 t3 |3 \: D: cparseFloat('ABC')
! T6 l4 C. v2 `, z) |NaN2 F9 g6 A5 J1 {, B- Y
parseInt('abc')
7 _0 `. [+ `1 N4 [/ }6 v, ]7 hNaN" T. O) v2 r$ Z3 K* E+ }0 r
</code></pre>
4 Q0 x: o8 ?- @<h4 id="232-string类型">2.3.2 String类型</h4>! b5 m3 T& k# v; W9 |+ y
<pre><code class="language-javascript">&gt; var name = 'Hans'/ F; M. A6 R3 K, R! `& B0 E
&gt; typeof name
; P2 R) u) W8 N0 y7 `) \/ r1 r'string'1 \* t2 H6 g( y5 `

* n: B* z1 n5 n6 s6 Z0 O//常用方法- d$ B6 o1 \& [0 G0 O8 \
// 变量值长度
7 }/ x0 O  Y; `% d. f0 \! ?&gt; name.length0 \( H0 i' y9 |- }
41 ^$ W/ p6 t/ P1 f1 E" v
// trim() 移除空白2 `1 K! u+ w' \
&gt; var a = '    ABC    '
* [9 \, G/ b/ R5 z8 h- n, p5 l- p&gt; a5 ~2 v2 v6 H# D6 Q5 `  n* n6 @7 d
'    ABC    '# t  M) `) Y. k0 w" G9 I
&gt; a.trim()
! z1 j# K, f/ Q8 o+ |5 g+ u0 h* _'ABC'
/ V1 P4 E) P) i9 W# w% b//移除左边的空白- R' k) t# l5 T- [- j2 Z
&gt; a.trimLeft()
9 K- }+ z# A1 a; P'ABC    '( ~9 R! Y  B8 \
//移除右边的空白
1 u! j& F2 j' x5 X- v. {1 j$ w&gt; a.trimRight()
7 q0 }1 y! V( h0 V$ a! }. R3 Q$ C'    ABC'% O* |1 X" c% x+ W/ d

$ Q7 j4 `: D, X2 m6 k, e//返回第n个字符,从0开始
$ d# R1 k% x1 @9 y&gt; name
: N/ `) I3 v8 J) ?( x& p'Hans'' ~0 }3 n3 B" |' F7 X
&gt; name.charAt(3)* d7 Y8 ~  n$ w$ _4 Z
's'; a  F% j. e. }( C& J2 Z/ e4 b
&gt; name.charAt()6 c( U. r2 t" T; H. u" J: G
'H'2 |( Y7 |4 j8 @
&gt; name.charAt(1)
, t  H. z. D8 N  m$ P% M3 f6 D6 T' U6 R'a'; u3 {! T0 F; x+ {/ N6 g; a  K

& _! U6 z9 {0 K. I3 D8 l// 在javascript中推荐使用加号(+)拼接
& U6 s0 d$ S5 a- Z7 z( r' Y  F&gt; name
- O1 Y5 h7 }6 t# q+ {'Hans'
2 F7 E& U9 R3 L&gt; a
) A1 ?, E+ B7 K8 N- l+ x) w1 x'    ABC    '
3 S! P8 b3 L% s&gt; name + a# ]+ ]! A# y" i+ {4 C* s  J
'Hans    ABC    '
3 D$ F. l; r! x( H4 y$ u6 _4 h// 使用concat拼接
: O) V* E( e8 D) Y&gt; name.concat(a)
" g9 T7 I+ M4 U7 a+ a2 p* d'Hans    ABC    '- ]4 X$ n  B- f9 v. E
$ T% H! o# l/ a" K( C& \; [
//indexOf(substring, start)子序列位置
0 l3 N6 v, n) e7 z4 W, r1 w# \( p3 D9 K( x# K
&gt; text; [# E: D5 J8 d
'A young idler,\nan old beggar') M/ u! f3 U! L7 |+ c- D! S
&gt; text.indexOf('young',0)- [; o" q. B9 r) E" d, E, U/ \
25 E8 `/ L" {/ I2 g9 S+ Y! e
# N$ ?2 ~+ z% ~/ }
//.substring(from, to)        根据索引获取子序列6 o  g+ o8 z- \* I# L( {- X
&gt; text.substring(0,)! U) c- @4 }* V, P' k
'A young idler,\nan old beggar'
" B: {* a% Q1 f& b1 h&gt; text.substring(0,10)' r( n1 J: F' p; U. U
'A young id'( C* N+ f) D+ Z3 F6 A! p- D9 K( S
/ L3 L; w( t% ], y% m' x0 G" ]% b
// .slice(start, end)        切片, 从0开始顾头不顾尾
9 ]- g7 U$ X& Q6 t! ]  P# E- b0 g&gt; name.slice(0,3)' T% ~+ x2 l) w6 }6 v
'Han'* o' d- y% n- v# t! f" L% ]- X# p

& j2 w( J& O2 X. |# h// 转小写/ \5 Q! n( q2 f3 u6 Z- A6 ?
&gt; name
- h6 l5 ?% q3 f, ^" H: Y'Hans'9 @4 p4 u6 l7 z# [
&gt; name.toLowerCase()9 F* r; M% r+ |0 f
'hans'
( c8 T6 {7 l% c* x3 u, ~// 转大写
8 u/ Q6 @6 {6 c: x7 I6 x' f&gt; name.toUpperCase()
- G# C7 ?+ G' d' k'HANS'
# ?1 Q4 t0 f) U/ C5 T  k6 |# p) p! q* m  Z# j9 I- x5 w
// 分隔6 K3 N% \* X& q) l( w. d# l
&gt; name
! v+ `( t$ r. J; r* r3 U2 D'Hans'+ S- O, n/ R3 O" t0 P5 A. N5 A3 r. m
&gt; name.split('a')0 A+ I: |# [! o7 L, D" B  m
(2)&nbsp;['H', 'ns']
& P5 v+ P+ |1 r0 h! g</code></pre>
  ~" K( `1 _& F* ]/ B8 `& `<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* @7 \9 r' q# H* W# o8 D6 d<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>4 k: g! `" C+ v% E" m% q+ g7 S0 Y
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
" z% L, }5 y) b5 M0 g<p><strong>null和undefined</strong></p>
  K, L* K+ t) p<ul>
4 u. H+ X+ _. P7 s7 A0 Y<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>/ u# v3 ^6 `0 M# l3 }
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>& g% {4 ?/ [! t& v2 O# ^# A
</ul>& {) P0 G$ S+ N" Q
<h4 id="234-array数组">2.3.4 Array数组</h4>
# i- Z  w3 ]: i0 @$ c+ ]<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>* m1 Q* Y/ F" b" @+ y6 K- H
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
; N- _) i8 e2 J" o$ ^6 H/ I- r&gt; array19 N+ ]/ ~2 K! G/ o/ e5 s
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; v. c1 X( j$ Q, J
&gt; console.log(array1[2])  //console.log打印类似python中的print
# y+ `* z4 H1 H8 n2 n( h3
. s2 C( Q  ?9 p1 ]8 h* U/ f// length元素个数" N- n/ u" c5 X; ]( I% @
&gt; array1.length
. n! ^' {7 D7 M5 a6
0 K! I9 s) D. G4 R// 在尾部增加元素,类型append8 R) ?+ U0 `6 \( z/ F, ^
&gt; array1.push('D')& ~+ E/ G6 q9 [- \/ i& Z9 `+ N
7- H8 Q+ D7 X) P+ i  s4 y
&gt; array13 s) ~' H9 X& `' B
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']7 s3 O& F: Z3 v' L8 V4 m
// 在头部增加元素
; U" Z3 n, ~, q&gt; array1.unshift(0), B; j2 d( V1 k) c, ]6 D4 N
8
+ `4 G; }  ~7 A3 v# x5 v&gt; array1' @& E3 S2 U# g/ L0 b/ w) d
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']- I7 G" Q, }8 F( y) [

" b) d, u: m/ E: u* B) Y1 C& V//取最后一个元素- q2 J8 C/ g8 l8 D
&gt; array1.pop()/ y2 `% U& t& m4 m
'D'1 w1 d0 ?' g" R7 Y% w: ^
&gt; array11 {" s( N8 i# ~8 g/ S. |
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
, p0 q7 G  m& s) V; p- z  p. t//取头部元素
" L7 Z6 n) v. y6 A&gt; array1.shift()
6 Q/ t9 w2 a  }3 z' ]09 m# P% u0 X' Y1 ?$ D
&gt; array1
: m2 V7 D3 ]/ B(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. Z4 E% ^; n2 _6 z0 A+ K: z1 X

+ X( Q, l% P( J6 j" m% N//切片, 从0开始顾头不顾尾  p# s8 |$ P& s
&gt; array1.slice(3,6)
' ~- |3 p$ b5 V, L2 |" J  S2 r2 ^(3)&nbsp;['a', 'b', 'c']) t2 ^7 V4 G' Q: b7 V0 c
// 反转
# ], U* ^. x0 _" F; L&gt; array1.reverse(), M& {  Y/ b8 x8 d1 W$ }" \
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]% x1 I+ S" y; d0 r# a4 s3 {0 ~
// 将数组元素连接成字符串3 v4 x* r1 q: ^3 F% h% D
&gt; array1.join() // 什么不都写默认使用逗号分隔1 b3 z# q( J$ D
'c,b,a,3,2,1'
2 u( I6 a7 w1 Y. l2 Y&gt; array1.join('')7 L9 R; Z2 y# Y3 |4 ^
'cba321'2 K1 F. J) R$ S  i: x
&gt; array1.join('|')/ u5 \8 `# ^/ Q0 l  \" w  T
'c|b|a|3|2|1'
- G0 `* q2 C" V/ p# F' {) Q: |: j/ }- `# g) E7 p
// 连接数组' ~; v7 U( i+ A2 l$ a* q
&gt; var array2 = ['A','B','C']
# R4 h, [. k5 {4 I  z' z0 r&gt; array1.concat(array2)5 A- p. f: b7 M- k" A! L* w6 I
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
; m9 q1 k; v# }. l, H0 S- e) B
7 v* e& O( t, w8 V. z2 u// 排序
5 B) Q* ^7 O) s&gt; array1.sort()
0 T8 W1 z2 {' ~' c# d4 \2 r(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 G  }4 t- B3 m" t9 c5 b' C( y0 A! ]+ P1 ~$ [' G
// 删除元素,并可以向数据组中添加新元素(可选)
, Z' K2 O( j, U: f&gt; array1.splice(3,3)  // 删除元素. X7 e7 Z# ~- G* P, s# p
(3)&nbsp;['a', 'b', 'c']! Q) M2 H6 v+ u$ R2 L1 R# O! K& s
&gt; array1% k% T8 H4 A  H2 Y3 _  i" O. z/ r
(3)&nbsp;[1, 2, 3]
2 }$ Z6 x- s* o; D1 z&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素% a1 A; W) J5 {8 v& ]
[]
% F3 d( _9 _9 H2 J9 y9 j&gt; array1
" i0 o5 u) C5 `! B9 f(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']$ R4 F; z0 Z. s$ b
+ ?, v  G; t3 G' d; T2 Z  s3 i% f
/*
* H- ~6 w3 j* H2 ~1 Rsplice(index,howmany,item1,.....,itemX)0 u8 x9 e2 g( V  o" S$ `
index:必需,必须是数字。规定从何处添加/删除元素。, K0 r8 o6 P% u/ j" y5 W
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。7 D0 \# W$ x3 r# P0 J
item1, ..., itemX        可选。要添加到数组的新元素5 x% n+ k) r3 X- ^9 L5 Q
*/
: Y, z5 a0 i, G* C; P0 c/ Y# |9 S; E2 w
// forEach()        将数组的每个元素传递给回调函数
( z. r& F5 s4 A& T2 I* ^  O3 `&gt; array1.forEach(function test(n){console.log(n)}). u  Q# Q# K' A& ?9 N
1  r/ S$ z- j7 T5 u9 a
2
$ }) z; b  ]9 ~6 ~# w8 J4 _ 3
6 t% S2 J  R4 {6 Q" w, Z3 r A
( c% e6 T8 U' I: U2 e: t, _ B
# ]6 \, L+ t5 s3 g* K" |% P C
, s4 Z& X' M( q: S3 n' N0 {6 T6 d// 返回一个数组元素调用函数处理后的值的新数组/ M/ C: c- G' j5 G2 f+ F8 F6 k
&gt; array1.map(function(value){return value +1})+ l% Z" [5 @; f% U; Y
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']: R8 P$ X; Z9 ?' \7 b' k: p& m, n
</code></pre>: `% S/ R, Y5 h6 B  N# B- Q, r
<h3 id="24-运算符">2.4 运算符</h3>
0 }3 i" O5 z8 r7 g4 o5 c7 i<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
7 L5 Y4 K* v; {; Y<p><code>+ - * / % ++ --</code></p>8 C6 V4 V2 l) r) j1 ]6 W4 k/ ]" A
<pre><code class="language-javascript">&gt; var a = 69 F! `8 R! T0 h' t. h' C
&gt; var b = 39 b* _5 d* C" q" h4 r3 J
// 加
0 n( a; j. }" S" M&gt; a + b
6 w* z9 f% r8 P7 H2 \" a. V: \, m9  E# W* _2 o7 A0 l9 E7 q6 y' ?0 E
// 减4 R) D6 i: O7 }3 d
&gt; a - b+ s! N" N" _0 s  P8 Z- n
37 n  F: Q' b1 v" Q0 ^
// 乘. f  W+ J, r6 u* z0 i
&gt; a * b
/ \; z, D( G' z5 y  F. t18
0 J! y5 P: ]1 k9 ]" C9 w3 D) a// 除- R) r( @" b$ D$ S- N8 M3 W3 k
&gt; a / b" D8 ]' R. x' b! O( p& a8 N# A
27 D7 R. ^. J7 ^% V: J1 l0 g
// 取模(取余)7 V/ H& e5 L  }
&gt; a % b! B( f6 C, |: P. m% A+ S
0
* _: O/ u! Y/ N5 n  @// 自增1(先赋值再增1)
* S: J5 ~0 B2 J&gt; a++4 X1 f% R5 N, H0 }
6
6 x; ]# ?2 }$ J) [&gt; a
' y+ \# [: o# D% |5 N5 E6 w7
5 B! Y! N0 J( _# F9 S- X// 自减1(先赋值再减1)! e' h2 I3 q% H' D( x$ Z$ i
&gt; a--
: G% r+ |, d& i- y; ~7
3 M) O8 F) e" Z! {- c& S8 i3 e&gt; a. g4 d8 N  i0 a, x, y0 e
6! R' q; d' G& ^$ J2 T6 B; J8 Z
// 自增1(先增1再赋值)% p, b# M1 Y5 d  X
&gt; ++a
$ B1 w) s) u- a" P" @7
3 k1 O! {" w) K3 F1 ^& Z// 自减1(先减1再赋值); {4 _  U# v: ~; k: r
&gt; --a( X* D4 f7 y' R) m9 E. H
6
1 E/ X: b8 G5 t7 Y% G$ D8 I&gt; a
+ b) t6 r+ \7 A) i1 n6 y5 O6
* }1 Y7 b7 I" o/ y
: \! H9 d! p* R3 \7 C$ g//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
4 {3 _( T3 P$ x7 g# e4 F  \</code></pre>
# }2 g' a6 C, t# j<h4 id="242-比较运算符">2.4.2 比较运算符</h4>" T7 j+ E( f6 i' \4 r" m9 U7 u
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>  l( Z9 J$ f, d. _( Y
<pre><code class="language-javascript">// 大于5 S! U' p# d' \4 k: h
&gt; a &gt; b
- ^  x9 ^; X0 m9 gtrue
6 @: _! G) K1 C; Y6 Z+ q// 大于等于5 L+ j5 h0 K+ w- ]5 U
&gt; a &gt;= b
2 z7 F% a- U4 ~7 X" `, gtrue& `( a3 J- m0 H  p
// 小于* o; i& ?/ q6 G& d! @8 g' c( F
&gt; a &lt; b
# m% U7 g+ Z3 u- s( m+ ]$ nfalse8 e3 v/ w! e+ j# `, ^
// 小于等于
. ]$ A# {5 R4 @" V&gt; a &lt;= b  T" Z: Z/ @2 g! O0 e9 @* Q
false
) r$ ^& {; a3 p// 弱不等于  |7 E! ^+ G4 a. d* M7 a
&gt; a != b
  Z2 z' @; ^7 r) m  p( i0 Etrue
1 [4 b$ m  r; M) N// 弱等于  N3 u' A% B) @4 [2 Z) _# J
&gt; 1 == '1'! A# Q) o+ \* J
true; Z/ f5 t, T8 `& `6 B* [
// 强等于
0 d, t; z5 B' ~2 H&gt; 1 === '1'7 C! U+ K4 b  _
false4 s/ @* j- C2 Y7 S! e% ^
// 强不等于
2 ^9 F7 |* v% s  M* m2 R&gt; 1 !== '1'9 ^  `1 T% V+ o; a" Y4 i- r
true3 [4 `. G7 X, v7 r

% V1 v% W  b2 [, c/*8 P5 [4 k0 }- N0 M2 ~
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
. E* U1 r! w( o& ]$ d; u/ Y2 N& h9 O*/
& r3 e1 x. `2 @4 j/ F* h& M</code></pre>
' V3 Y0 o' m; Z2 B6 u<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>; z) V4 w4 f( \1 I/ W
<p><code>&amp;&amp; || !</code></p>4 n/ v; b* k6 _2 E# R! e  |9 [$ t
<pre><code class="language-javascript">&amp;&amp; 与
, [' f' \3 c/ ?* M|| or
  H+ g. m, V$ G) w! 非
6 \: J, L, K6 D</code></pre>5 @5 s; }: @! [; L; [
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, C# J8 h) @' P8 \$ \" ~<p><code>= += -= *= /=</code></p>
& h. T* h7 y% G<pre><code class="language-javascript">// 赋值
' \# f$ ?9 Z3 y; Z&gt; var x = 3/ f. C( x- [7 L6 {+ Q' D
// 加等于
2 q) _" x, s3 W8 y- @+ l&gt; x += 2
# d+ }8 w% N1 I4 i9 e5( v+ \9 c! Q7 C5 I' K
// 减等于6 U4 w: L3 h, A" A
&gt; x -= 1
$ R" I* |! ]2 r1 y  U. C" h4
- Q) C' l# b  Z0 T; @// 乘等于
: @% b$ M7 Z2 r6 K  _6 f; X6 p- G&gt; x *= 2
; `9 p) {* Z( i" l7 I# S8
: y: J, ?+ D$ e0 ]' }2 y// 除等于$ I4 G5 l2 t% d/ Y# j
&gt; x /= 2
2 J! ]! ?+ y' w6 S5 x( K49 q- n# j3 u6 L: `
</code></pre>9 \! n) I3 @! d$ B
<h3 id="25-流程控制">2.5 流程控制</h3>4 Q% k; a8 t2 d; H: r0 c1 `
<h4 id="251-if">2.5.1 if</h4>& H. r" x7 _! y' a, b: S
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
( x0 P2 a! k/ K  \; U/ K+ P/ p+ p4 J) l( {0 T% S0 s2 m4 S
&gt; var x = 3/ D9 J" t9 t" S7 a
&gt; if (x &gt; 2){console.log("OK")}2 n$ Y% u" N. B  Q& d: S+ r# D
OK1 o: `; t  p6 ^8 X; U+ @

, f2 c$ V8 |6 x8 r" J2, if(条件){条件成立执行代码}
) u, E' O$ @) W2 ?        else{条件不成立执行代码}
8 A+ [- D+ C3 f
; D$ X$ W  R) i&gt; if (x &gt; 4){console.log("OK")}else{"NO"}! Y/ J& j( e1 Q3 O8 D$ L8 t
'NO'
. v7 U! S+ b* t1 C, S* v. p! L7 w2 ~+ e9 {. g
3, if(条件1){条件1成立执行代码}
$ f. z  C% [  c5 g* b1 L# F        else if(条件2){条件2成立执行代码}
6 u5 {' G( J/ e- J5 a, t    else{上面条件都不成立执行代码}, [  _- U' s4 @* }5 u
8 A. H5 _5 W" u8 v* z. K4 t: i% N
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}6 @" |% O- ^& [/ a4 R* b, J
Ha
, g, Z( \4 C7 k: X: h2 }</code></pre>. D! B+ Q" E7 L) @% t
<h4 id="252-switch">2.5.2 switch</h4>
! ~/ H, i2 c3 o. Y6 o! [<pre><code class="language-javascript">var day = new Date().getDay();
( Z! ]. r5 F2 I* u9 t. fswitch (day) {4 N! @/ X! k  `! u! S9 o8 E
  case 0:5 M1 ]/ j8 y. x1 Y/ _$ H+ P" ?% q
  console.log("Sunday");1 t3 B' Z% Z1 {$ ~; C
  break;
. o3 W. n; w( g  case 1:
9 d6 a- q  V( E. u: F" t  console.log("Monday");
6 _  W! ~, t; i  break;
! E' t6 `0 v: L2 pdefault:
+ C+ G; P5 y/ J  console.log("不在范围")
' I, p8 L2 g; f, O. u8 D. D}% v" o; x5 M4 \* W8 u( N3 p; s# l
不在范围% ^, C) ?- w0 W
</code></pre>/ w' i: g) |7 r# G, O
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
) a4 _4 _5 c  P& `<h4 id="253-for">2.5.3 for</h4>
& V( S2 N/ _% ]& R6 s! G<pre><code class="language-python">// for 循环
9 h7 s$ {/ }5 {% O: o) q  U; S        for(起始值;循环条件;每次循环后执行的操作){
$ }- }2 X' G/ s3 w; @1 C. |. L        for循环体代码; k; t, }2 F: ~6 p" W
    }
( M; b  ]! ^& H/ ]9 r* W. n$ P8 Q, v+ O, V- C0 @7 `
for (var i = 0; i&lt;10; i++){
! H, i; a  ^+ x2 f  O! a, T: g    console.log(i)
4 x3 P5 T- p  U! Y}
7 {$ ^- l" f% v- B5 S( ^! W2 e        0( h  ~- o/ V6 a7 I# l5 S0 v
        1
: P+ b9 o( G& z6 c7 J- R        2" |+ z  A! h9 Z- z0 T
        3+ U% v' j$ T6 w1 W0 J! M
        4% i  x+ q: [/ h% A  v
        5
; o3 ]; A' O& [        6. y8 g; X0 w0 b, s; E& _' e
        7
5 ]; _" {' L8 h5 B7 U; f        82 K8 |' z) B' @3 j. M. D' c
        91 l5 }, k/ P9 g7 P5 F/ C
</code></pre>
, e, P; g5 {! v! {- I5 v5 m; _<h4 id="254-while">2.5.4 while</h4>
; j2 g% D! o7 n. Y* h. n0 A<pre><code class="language-javascript">// while 循环0 C1 K% `9 B; t, f4 ?8 O, b
        while(循环条件){
# R# L5 {1 h, @( `* \        循环体代码' C( p8 n/ @: _0 T" N
    }1 I$ L5 \/ L2 ]2 x1 \
2 f) q  w  N8 S2 t# }3 U9 s4 c
&gt; var i = 0
) r4 Z- e, |+ W- s  z&gt; while(i&lt;10){$ C+ z+ f# c( A( J
    console.log(i)  a9 D) b+ n/ {! N+ ?0 z
    i++, A: L5 J% b1 ~* U! B# q  B1 C
}
  X9 j, [- E2 P, N$ U" b* n* @2 C 0" m* Q$ v% X# V' f; U; h. L
1
  p5 ~# @' o9 J$ y. r/ e' ?/ {  @ 2
0 v; M$ J" {* ?# l 3( Q' j7 v. i3 X/ g
46 \5 S$ s# e: l: p6 |
55 N( G% Z! a1 A, C# E
62 J2 A5 k# M# w* |) b
7
/ l0 ^  ^( |) t6 ]; n8 C 8
4 w2 P6 w9 X+ X7 Q/ g& G 9
7 D4 d7 a& Q& O5 v( H9 e$ W</code></pre>
2 Y. D+ ^5 g& M<h4 id="255-break和continue">2.5.5 break和continue</h4>
: p& O: q! O9 ^$ @* W<pre><code class="language-javascript">// break6 |/ G" O, r- y; y) c6 r
for (var i = 0; i&lt;10; i++){. }0 g* e% I/ w: J3 i
    if (i == 5){break}
* I9 R; K6 q7 U! R1 W    console.log(i)4 X4 H9 x0 x" S: N; S5 ~: l1 O( t
}8 G" E3 R) c( ^
0
9 ~) |+ w; g$ \) j 10 X& v0 n5 J8 o; e7 p
2
; }8 V: ]2 `2 R, B7 i2 B 3
: m2 O' G8 F3 I( k5 m" d 4
$ P$ O: H6 C  G8 b2 w// continue! T. S& k# H+ A* y# t
for (var i = 0; i&lt;10; i++){9 Q& D/ w! L( q  k
    if (i == 5){continue}
; a. g8 s7 h- q    console.log(i)  U- {- x/ a% }! Z! f+ c: ~( J
}9 y+ c6 L0 {) V4 b# o) t' _
00 w1 E% `! [: h" L, K0 @
1% a" ]6 a; H( H) K
2
: X/ d0 m* X* ? 3$ I4 X# d' c+ N6 D
40 J: H# b6 d6 a( q
6
7 h% A0 L% x! g" v' F 7' g: {1 |0 X6 B4 l+ u: F
8
' j3 @. @- l( U" J) V- P6 G6 j) s 9
/ T! _0 R/ D9 t. z
  v. L) o& G7 M# @</code></pre>5 {8 Y% s6 ^% t, ]
<h3 id="26-三元运算">2.6 三元运算</h3>& w% k7 A( R; k
<pre><code class="language-javascript">&gt; a, l2 c. b- M- \: M# d3 ?
6
$ F9 ]) ^/ _  T/ c# K+ |&gt; b. p0 J6 e# `" \% p0 l% @! i+ d
3
% S) V) p3 s- o2 X4 X" ~, H
- f; q& [3 Z0 ?. V% d6 a3 ^7 f//条件成立c为a的值,不成立c为b的值
+ X. s& Y5 f8 G&gt; var c = a &gt; b ? a : b" P  ?7 b: ]# _4 g$ M% r7 G
&gt; c, r3 a# S4 Z. x' X4 A1 G! R
6
: W  }5 e- O$ t3 d0 v) r3 C$ F
9 C0 J, g" K* T* z  a& [8 S5 w// 三元运算可以嵌套
. a  w: K5 g# V9 [4 h</code></pre>+ D# O( y- v0 _# Y
<h3 id="27-函数">2.7 函数</h3>
& n" C0 D7 U7 C<pre><code class="language-javascript">1. 普通函数- b! h2 k* e9 z
&gt; function foo1(){9 ]9 x; {, s3 |! f& f6 k; H2 A
    console.log("Hi")
* ]* I, n% u" G; [# v}
* u" S; e7 t1 U; F) i2 K* q+ I% i- ~
3 P3 ?& G" B4 w. ~6 {6 h&gt; foo1()
+ I! U/ q8 H5 ^        Hi
) q% s4 W- ]/ S, p) f7 ?% V2. 带参数函数9 T8 M. Z- j4 ?( X2 P& R
&gt; function foo1(name){
0 I! K3 Z5 U0 @8 s. Y- ]" B' A( y! \console.log("Hi",name)
, N. v& O* r) G  C. ]! {}
" Q* p- Y( I. V( i# c" Y% K; F; T$ l# g/ b+ W& P2 Z/ B
&gt; foo1("Hans")$ p: [9 @9 `1 ]4 Z; C9 F* H
Hi Hans% V* h3 e8 J" ]

8 n5 j2 y) l3 i' B&gt; var name = "Hello"
6 O$ D7 F% {1 ~  }% U1 T3 |( @# A&gt; foo1(name), S" s; O' G* k; t( s$ _- K
Hi Hello1 Z8 C5 q+ x* h& Z

+ C" t2 _8 o4 J% I' Q, u3. 带返回值函数! [2 y+ z2 {' E4 d0 W+ u8 P
&gt; function foo1(a,b){  o- d/ o* v. e6 K& M
        return a + b   0 ]0 e. I' @  C
}
! h/ w. k" L$ V4 m7 `&gt; foo1(1,2)
7 @6 y* L; P$ I+ J( E. X2 P7 j3, v0 o" M6 o( l
&gt; var a = foo1(10,20)  //接受函数返回值: p' h" _1 M4 u* H, r* J
&gt; a
* S- N3 {* g& Z4 C) z( C0 \30: W' O: u4 _: i
/ ~6 X" a7 g$ q+ o
4. 匿名函数
" I; p3 O3 c6 X0 l) _&gt; var sum = function(a, b){, \1 z. ]1 T- C  ~: [4 I
  return a + b;
* b+ K8 \* e) y}
! n' B# O9 X- X7 d, Q* \5 X&gt; sum(1,2)
5 Z/ D) H* t2 ?& G. E6 N* T- J4 n3
! @. }  L! u' E! O
  f* b" t+ h& W8 i; k0 C// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
5 H2 e; p) h, Z' b7 F+ I&gt; (function(a, b){3 u0 w+ n) r( n% t" B9 n
  return a + b  _; ~  f$ ~- z3 |
})(10, 20)' E  h9 `6 b. X0 K
30* r6 B' }7 e$ y2 P

8 l8 a8 H) S7 Y9 W9 g0 e5. 闭包函数/ M5 W( Q5 R1 X* ~/ l
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: `1 ^6 I& @. E  I
var city = "BJ"# y4 n: D  l. t8 h4 Q
function f(){& H' X) d8 t/ F  ~3 M: @: Z
    var city = "SH"" y: M$ f  o7 Q+ @8 t2 A# [# U) X7 j
    function inner(){0 s# @; H8 Q) s
        console.log(city)
, J* ^$ e3 E% p0 N5 [  s    }( `5 o/ U$ L, k" R
    return inner9 S7 Z' D( t$ n+ `# F0 P% J6 r: G
}
, w9 |' M6 f& q6 i7 avar ret = f()
& c5 ^6 T+ _0 _) s6 Mret()" I8 \' o# P( X  ^  T
执行结果:: T5 V1 U5 V$ r/ L& Z* K; j2 ?
SH; F3 Y/ J0 l, W$ G3 v5 J: r; E

: r+ M/ e# u( a; Y/ i- l) u</code></pre>$ q( Z. i* s7 q* T3 {7 v: k+ u9 \
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
# J& _( S6 j0 w/ V& T8 X<pre><code class="language-javascript">var f = v =&gt; v;0 n  F, E& w, y* C& M& E3 ?; D/ u  S
// 等同于+ `7 I4 f2 B* n/ w$ Z& ?
var f = function(v){+ ?4 w5 f: Q: K6 e8 N9 f
  return v;
5 k- w' L/ x" V( k# H}  r# n9 z) C# f% k0 I- g
</code></pre>$ q7 k: `0 I3 j  ?9 `6 P0 m
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
0 q7 _: P/ J. h& H<pre><code class="language-javascript">function foo1(a,b){
+ t$ }( T. }9 q0 w% p1 x    console.log(arguments.length)  //参数的个数 4 F( {; W5 X' l
    console.log(arguments[0]) // 第一个参数的值1 U% C5 p8 t9 H6 `  ?% L
        return a + b   ! S% B; h1 D) C1 t: ?9 r
}4 ^0 F8 ^8 i8 b# N0 ~
foo1(10,20)
/ }( z1 D8 u1 G4 u  c( B4 ?3 m结果:6 V- Z! K# _  U7 v% u+ L6 y
2          //参数的个数 + f9 F. z+ x: b. |) m/ p
10        // 第一个参数的值8 i+ X+ ^) {+ C; }: q' o
30        // 返回相加的结果
; K$ ]! h5 {3 N8 v. ^</code></pre>
& k: v& q; N% O, \2 _<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>+ K, w% n! T( d5 I& l
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
) I1 a) p' T7 P! L) W* Q<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
3 x# ~# |% [. y2 |( j( O<h4 id="281-date对象">2.8.1 Date对象</h4>9 Z7 r- E4 `' f* Z3 S' Y$ L
<pre><code class="language-javascript">&gt; var data_test = new Date()  d3 o+ K& `+ t
&gt; data_test
7 O  f! G& x: x0 w1 b3 |. rFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
5 D+ P% v# K+ ^% e&gt; data_test.toLocaleString()
2 z& i/ N4 Y( S$ D'2022/2/11 下午9:44:43'
$ n9 h9 y+ L5 R% h5 j6 f& z% l
  p8 |; a2 D  v) Q9 M&gt; data_test.toLocaleDateString()2 p8 F) W2 Z8 U- p
'2022/2/11'' S, W. d& P+ r# G, P+ J( i
% i( v* q) N4 q2 D' C8 j1 ]3 p) o5 q" h
&gt; var data_test2  = new Date("2022/2/11 9:44:43")- N1 h: [0 G% v6 L& S& c
&gt; data_test2.toLocaleString()( Y/ O) ]9 `# V0 W! A; W
'2022/2/11 上午9:44:43'
1 y6 D* @: V, L+ y  z# j" x
+ F+ K$ f6 b: e" x% A. |; B: Q1 h// 获取当前几号
/ P; E! U, ?* a&gt; data_test.getDate(): b( U1 z7 \# w% s0 p
11- F+ y3 j3 X( H7 L; U* |: a
// 获取星期几,数字表示
2 }" e9 ^* j( V3 j$ v1 t6 r&gt; data_test.getDay()  
- P. I3 t  Y' \* B* F) a5. D9 q0 j, N5 Q1 f* K) z7 [
// 获取月份(0-11); {/ e! `8 l7 c* g4 s
&gt; data_test.getMonth()& [& {4 \& _$ ]! O
1
: _- D! @' a, B  h' z// 获取完整年份
: ]/ E6 u" z* d4 c&gt; data_test.getFullYear()
2 z- n! v) T/ P' y' R# `5 o2022
* M( L0 S2 Q- d$ t7 K5 x- R// 获取时: x. A2 @' @3 R2 H9 @6 c
&gt; data_test.getHours()9 G0 v% ]* l6 m$ r# l7 m
21
# k' |0 I1 D/ `( |+ {2 j" n3 U4 ]0 @8 g3 |// 获取分
/ V0 D- @7 B/ t7 o&gt; data_test.getMinutes()
& K9 e* I+ b/ O44
) w* |% O+ J" M, o% W9 c// 获取秒
5 E8 D4 G, W' H% S- R&gt; data_test.getSeconds()* p% S5 X- i, i7 W2 t: E
43: [7 ?" z; a6 D; A5 D- G6 `2 _
// 获取毫秒
% U/ n- n6 s* n, q2 _$ i2 H&gt; data_test.getMilliseconds()' t" ^: H+ X1 a6 j5 M3 J$ d
290- _0 {* U5 L  p, l
// 获取时间戳
; f' W) B6 [+ ]&gt; data_test.getTime(), M3 x: G# a  A. ~1 a8 l
1644587083290
/ n4 ?& z% \6 o2 ~' E</code></pre>, [7 v3 e, {+ A5 q5 M3 Y
<h4 id="282-json对象">2.8.2 Json对象</h4>
8 y) o4 G+ x7 M5 n4 n" D, K<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
' v& N/ f9 b- d2 _JSON.parse()  // 反序列化,把JSON字符串转换成对象
2 D0 G+ x" @6 {" ~7 y, M6 a1 B& Z4 d8 g. p% o4 N8 [) l; L
// 序列化& G' t) b1 C7 ~1 @4 v9 I1 i
&gt; var jstojson = JSON.stringify(person) $ I2 S& }, X2 r  i# v
&gt; jstojson    M/ h8 N+ E1 R) H: J" e4 j- u
'{"Name":"Hans","Age":18}'; a* d9 T! S& w( Z
8 j2 y5 ]4 W" s( }/ U: v( i
// 反序列化
- x( w0 \! H) z! Z; B% n# {# h&gt; var x = JSON.parse(jstojson)9 a1 }! F# {6 {4 J
&gt; x
, p( Y7 x4 s0 x3 F* l9 U' ?( W1 B{Name: 'Hans', Age: 18}& L: T* u9 X0 T" o( x
&gt; x.Age% K' @: {0 R* Y* m4 u: L
18
- U1 c( o9 U; m5 H+ p! N</code></pre>" D& S9 W# R+ f+ y; h' F$ h
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>6 r2 c; ?, |, J" Z9 D: j* w
<p>正则</p>" z8 M5 [. R& a5 a* _
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
( e8 g! [4 B8 x% z&gt; reg1/ D. M0 E5 r. G. O
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 c' ~, O  M# N% B9 }7 ?&gt; reg1.test("Hans666")
5 ?' T$ ~7 h5 ]/ Q' }4 L( Ntrue
& ~5 o4 D+ h% o" X9 B
9 x1 z; P, F4 w3 A# C8 ^&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
# J: q/ [$ v  S  X0 h* g&gt; reg2
( \' o' ~/ B9 ?$ ~1 |9 {/^[a-zA-Z][a-zA-Z0-9]{4,7}/. O, l' z. Q/ e7 k' Z# F
&gt; reg2.test('Hasdfa')
, ?5 c6 k- J7 ]true. s+ _6 k' F* ~/ A+ V
6 Z, m* }* b1 G7 O  ?& `2 k
全局匹配:# H( ^0 o% K% v) d
&gt; name! l) @0 i* G, l  N9 ?
'Hello'
3 B4 H6 o- e3 e" d) m5 M+ `&gt; name.match(/l/)
' x& V, c4 _' |. ~['l', index: 2, input: 'Hello', groups: undefined]
0 I6 p' g/ J- t5 f- ^9 }, S
5 x3 ?& [$ W: \+ b3 P5 f&gt; name.match(/l/g)
4 z3 o# T" a6 c( s3 D(2)&nbsp;['l', 'l']
: _: L" ?9 S% }1 C3 D  c* a// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配  z. _6 E/ r9 E' W* O! ~

8 t& _! A7 @+ t8 }7 x' F9 ~  g) D全局匹配注意事项:% {2 W1 v( {4 Z) }* [& f
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g0 Z  \, r( J. h1 H
&gt; reg2.test('Hasdfa')
& D" D: D& k8 n1 o6 g3 etrue
. g* s$ D* |0 ], o* w&gt;reg2.lastIndex;1 }' h0 a: P2 \# f% u9 A$ ^  P- ?4 O
6# B: r& i: ~" Y
&gt; reg2.test('Hasdfa')+ z4 O- |/ J( n1 l; h! \# D
false
! h1 E- b0 M0 E: Y( I; X3 q&gt; reg2.lastIndex;+ `6 g/ d6 d- s1 z
07 i/ k$ Y& L) U, N- c" v* [# i
&gt; reg2.test('Hasdfa')
- o+ M* Y. ^1 H5 f; etrue
0 p+ F6 ?1 S0 r6 E/ P' U&gt; reg2.lastIndex;* M% [2 V+ J8 d$ ^
6
7 l9 P( M6 u* r4 R( ?2 ^4 X% s" d&gt; reg2.test('Hasdfa')0 C* |1 r1 e0 a
false
& @& k* d$ t7 N7 L& n&gt; reg2.lastIndex;# K+ s* u8 X( M, P
0' o+ t$ M& e/ t6 u& Z
// 全局匹配会有一个lastindex属性
9 V& @  \/ l, |5 D+ n: ]$ |&gt; reg2.test()$ a2 M: _$ d( v$ Z' q& N
false3 a5 a) B9 q% v  p' K, h
&gt; reg2.test()/ U8 Y+ }6 v) j, c2 _" s
true
. h9 O  ]" u; m% D// 校验时不传参数默认传的是undefined
. @/ }4 g$ O5 D8 V</code></pre>
3 T% K* g/ \* j/ S1 X* w<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
: E; ^+ o0 r9 }( M! _<p>就相当于是<code>python</code>中的字典</p>
$ K: ~- O) `' N  M  k<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}% g2 o! b# v* d/ ]. I& P
&gt; person( G3 ^, ~/ v0 A- T8 l: j3 i
{Name: 'Hans', Age: 18}
- Z. i4 _; J4 L8 A&gt; person.Name, X$ `; v; g! e! R/ A
'Hans'% ]1 a& g. j( d7 U* u* z- K. n7 [
&gt; person["Name"]* {: T1 H# R) U. c, g
'Hans'; V2 u6 M, @$ m3 o5 I

7 m+ r7 r8 {4 a' Z* S* T0 r5 B// 也可以使用new Object创建
6 J* z6 J: k; i+ E& V6 T&gt; var person2 = new Object()
3 r( Z7 P6 o9 p  y& z) H; _&gt; person2.name = "Hello"
# X: \$ _$ O' P( `8 \' D'Hello'
' F0 _6 i! \4 |4 L3 Y&gt; person2.age = 20
- k" O. f! P" A7 ~4 D( v20
" l( \+ l4 q. E5 h</code></pre>
& E: F; m; n! k<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>& E, {, o2 D  ]
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>% f$ y4 }7 h6 w
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
* S0 K; a6 \4 H0 Z<h3 id="31-window-对象">3.1 window 对象</h3>/ E- N2 A7 O0 i& E! D. Y1 x
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
/ |/ h* o1 H- b<pre><code class="language-python">//览器窗口的内部高度
4 ]; w( B+ p  @) ?* L: O1 @window.innerHeight
$ L% A# B5 `' R: h, H* I706
. A- p5 V& W/ w( m4 ^//浏览器窗口的内部宽度% \' O+ U/ R- T2 i- X5 T5 x4 y1 F; t
window.innerWidth
8 E& @3 Z' V& z3 ?1 `3 s1522
- {- X0 C  {4 m6 a// 打开新窗口8 A2 U: Y- Y% @" ~, O' q  p: `( ?
window.open('https://www.baidu.com')  S$ x. v* i7 a: Q0 R
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}: U# m  E  _# d* A% a0 s2 ~) V
// 关闭当前窗口& a4 d2 a  R/ \3 G- Y. c+ \/ G! _
window.close()
  N# q8 Y7 B! V, ^% `4 _//  后退一页
% C9 h/ O* |' G( m( r0 wwindow.history.back()
6 N* Y0 E6 W& _9 o+ {/ \// 前进一页
0 v- q" e8 |1 [% x- _window.history.forward()
& P, s3 K! ~" f# o, Q# b: k6 S! d//Web浏览器全称
& T0 S0 C& N, N2 |7 H' d, y' Kwindow.navigator.appName
. d* r( M1 y4 V5 _8 C/ m$ t'Netscape'+ }# [; C7 }: m* m; O/ c% m) _
// Web浏览器厂商和版本的详细字符串
, l% k/ J" b3 A' v4 Bwindow.navigator.appVersion
- K; z; r* l  n$ k( v'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- u' j8 Y$ k/ ]$ _, q9 ~+ I" _! b
// 客户端绝大部分信息
8 K! ^7 i' Z/ `" F( N" V) n: Z& Hwindow.navigator.userAgent
. e% F% F( \* D$ ]'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ k3 C5 |2 p5 {1 E( F# A6 d  m
// 浏览器运行所在的操作系统
5 u0 I8 ^% r. @- a$ hwindow.navigator.platform  N. W' @  N# U) e6 `
'Win32'& o1 Q! a4 L$ O: ?( R
: t' Y) t8 L. d8 l
//  获取URL$ k: O* N$ I* u
window.location.href$ J. e6 s: F8 P, C, d! s
// 跳转到指定页面
# g& ^2 K. i: c9 b. |1 M5 `9 j+ Ywindow.location.href='https://www.baidu.com'8 m+ G/ ~1 h0 g/ i7 r
// 重新加载页面5 R% x$ G' e+ x& q. Y
window.location.reload() 1 h: g7 A' T' p1 ~* H2 L1 S
</code></pre>
/ m6 \" Y' P2 ?& b<h3 id="32-弹出框">3.2 弹出框</h3>9 s4 ~+ h; [8 E* U$ _: t" t
<p>三种消息框:警告框、确认框、提示框。</p>
7 _3 _5 J& x0 [<h4 id="321-警告框">3.2.1 警告框</h4>
5 |6 k# I9 ^8 g' ]2 ]/ G7 W% n<pre><code class="language-javascript">alert("Hello")2 W+ z2 c# Q6 b% e
</code></pre>
& }3 A: u8 n9 _/ j. S7 B<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
7 i# Q' f7 N" m# V0 m- V$ l<h4 id="322-确认框">3.2.2 确认框</h4>1 a' {- V& [! g
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
  E( }" Q. x- k9 v5 K& O<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
8 R+ w, y1 o! ttrue6 w6 Z( z' m& h9 p: Y. H
&gt; confirm("你确定吗?")  // 点取消返回false
6 m& j& m' j' u0 ]$ ufalse
# n" C- M! _. H</code></pre>
) a, J+ \( g" {1 b<h4 id="323-提示框">3.2.3 提示框</h4>+ N* r6 w: n: b" ?" p. g3 k' h
<p><code>prompt("请输入","提示")</code></p>% ]3 |  X: Y  u0 M% s/ L: [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>8 p- u6 a; B! [0 w' s4 R$ {
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
7 g0 j, o- V; _8 B<p>如果直接点<code>取消</code>后端收到<code>null</code></p>) @4 R! v$ P8 U
<h3 id="33-计时相关">3.3 计时相关</h3>$ m5 z' p8 [& O
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>3 g) ~( J6 ]6 ^& Q! w3 z
<pre><code class="language-javascript">// 等于3秒钟弹窗. x! Y  L  U) ?  t- i
setTimeout(function(){alert("Hello")}, 3000)0 ~- R( u3 t2 h/ L! G7 T9 O3 P: g! a- N

) P$ k2 e1 h  E: O* Tvar t = setTimeout(function(){alert("Hello")}, 3000)
$ L: t/ j( \7 a. Z; H' p8 v- R  t' B, V' M
// 取消setTimeout设置' ]: L2 V% R% x3 j( Q" Q
clearTimeout(t)* C  m3 Y4 K) A5 F6 y$ a9 K, \# ]
</code></pre>
. J# f2 l( @9 E! q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
' F# p, F/ q: a& {/ C<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>1 K" W4 c$ R$ z$ p, `+ p! U
<pre><code class="language-javascript">每三秒弹出 "hello" :
- u7 S4 E1 t& gsetInterval(function(){alert("Hello")},3000);
0 k" j+ S4 R# T</code></pre>
8 y9 O3 n$ p5 A, Z3 u<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>4 j% f1 S3 n8 h+ r9 X# c: f
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
" A8 r% v( d7 j1 ^7 A+ {" j, N//取消:0 `% U/ K" f/ [; H
clearInterval(t)
8 v" U9 Q5 m  g/ y7 T</code></pre>
) [" E% M9 s+ `0 g& i
9 Z; D5 y3 ^2 v- F- e
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2024-9-20 00:17 , Processed in 0.121076 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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