飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

1 f* T6 ?6 L1 E+ y; ]7 T<h1 id="前端之javascript">前端之JavaScript</h1>
) Q$ j7 Q; `- Z$ G( C- F; `) [, p<p></p><p></p>
( k4 X& h. F4 r* n8 ?<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>8 ~+ [# [4 g& K9 Y6 J- f
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
( d5 D+ Q$ z9 t它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
$ c9 k, C5 T# u4 R. w, q; R% ]它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>' u2 a- I# {1 k5 _8 D
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>- ^4 R" }2 \" F% }: r" Q9 ^
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>, w4 X6 m! f# }' D$ u
<h3 id="21-注释">2.1 注释</h3>
0 {9 ?1 C% W8 G4 }9 y' D) G<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
3 q6 e1 f+ v( S7 u" i: j, h<pre><code class="language-javascript">// 这是单行注释
3 T6 C% C& @  `7 L( X! N1 y6 \( h
& |: |; }( ?* x8 i/ b2 h0 O/*3 {6 H7 V' h. t' A! t6 B
这是多行注释的第一行,: Q" m4 o. F/ h
这是第二行。$ W1 @! g% V; ~* y; b8 p; F
*/
: x5 D4 T& E, G; J" m. r0 G# }9 }0 P9 R</code></pre>
# k- h" w' e' Y, a% P  b2 z; t<h3 id="22-变量和常量">2.2 变量和常量</h3>/ f- R0 G7 q2 |
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
. @9 M8 {  X8 ?2 l8 {" U. r# B<ul>
7 x; ]. w5 i- [/ W0 M<li>变量必须以字母开头</li>
+ r) m/ C; f4 v<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
+ C& ^3 _4 K% _1 A<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
  r5 y0 B9 p' s9 |</ul>7 a5 s" p% }8 m8 N
<p><code>var</code>定义的都为全局变量</p>  c( S" W. R* ]4 u- h
<p><code>let</code>可以声明局部变量</p>
" P2 B4 E' N$ W! V2 H' b; |9 C<p><strong>声明变量:</strong></p>
1 Z! @! c" v) s6 L6 _<pre><code class="language-javascript">// 定义单个变量
3 w% Q3 ^% B& |; c8 Z% D0 B7 ~9 [&gt; var name
  C# {" N: Y7 {( W&gt; name = 'Hans'
6 h! v1 H) s6 K" {6 o: o//定义并赋值- u& ]% T5 `4 x1 G* k9 Z8 N, W
&gt; var name = 'Hans'! M7 N" A0 Z1 ?! l% Q+ A
&gt; name" @' _* A) v$ k8 f
'Hans'1 b; f! |) G) G' w) B# o- C* d

3 O# {" B! ^% ]// 定义多个变量) P0 E# d' }( j3 [4 S; N) T
&gt; var name = "Hans", age = 18
; @9 V/ S& t7 S) I/ e+ u1 l2 k9 `&gt; name; Q: B5 \8 e+ t( w% y9 x
'Hans'' O" l6 u) n5 V5 n5 w2 d$ M8 d! u
&gt; age
/ |; O1 O3 A( ^/ I184 X) x9 T5 v) K8 f
/ P$ C- L& B& Y7 H  @; i
//多行使用反引号`` 类型python中的三引号
( Q5 k( ^, m0 _7 e0 n% D% h&gt; var text = `A young idler,; ^5 h, W1 v6 O" J
an old beggar`" ~. ^% a" q: s4 V7 `
&gt; text
/ ]9 o8 r, T9 Y: t5 ^! n7 W'A young idler,\nan old beggar'6 ?% f+ f5 m# S9 j6 W4 b( {6 g" l
</code></pre>
' `, R  N$ O4 x$ |" i<p><strong>声明常量:</strong></p>, d( [8 W* [5 b6 w4 `2 F
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
5 ?* d6 E& g' \  g<pre><code class="language-javascript">&gt; const pi = 3.14
0 ]  k! U  w! @) ?% w9 X" r& J&gt; pi
. A. T; c* v4 R) ^: J. ?3.14
2 B$ ]1 M$ V  X7 u- x& A1 z$ g&gt;  pi = 3.01" \! L+ ~" j# r8 c4 r+ e
Uncaught TypeError: Assignment to constant variable.1 i$ a2 M/ }& O6 g
    at &lt;anonymous&gt;:1:4
8 Z- n- ?6 {: e% J. g3 E4 \4 c9 E; s3 N9 @/ C& O1 R
</code></pre>' `8 _6 C6 {& ?/ ^
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
! H$ [1 y- J; r. v  h7 g& ?: t<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>  @; i6 l! Y0 _; p+ U
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
: c* T2 C4 J0 u; W. N- E+ f<h4 id="231-number类型">2.3.1 Number类型</h4>* H( K! `3 l6 {
<pre><code class="language-javascript">&gt; var a = 5
! M8 ~/ W* k4 ?0 C7 @! L2 e&gt; typeof a   //查看变量的类型  / Z6 \: }+ C. Y; ]' ]
number
& ?+ R& v" k  g! g) |" K& \0 U2 F
&gt; var b = 1.3+ V& X% ]6 m4 I2 u& ]
&gt; typeof b. w% ^5 s3 u6 f
number, b" @/ @% H5 \6 l$ U% X; f0 ^

8 k0 A0 M% w; r// 不管整型还是浮点型打开出来的结果都是number类型
. Q; G! K1 B7 x9 o, I! z
9 m( M! t$ j% V* y3 j& H1 \/*
% U' d( O4 w' y2 C- c$ l' q  x3 ~7 yNaN:Not A Number
2 Z7 c/ L0 G" j+ A# P. n" \: W5 l6 f9 wNaN属于数值类型 表示的意思是 不是一个数字
, c7 I2 ]! R" j  I( U4 D5 e% Q*/4 j* g3 Z6 h- G3 |" ~

2 Q! q3 q0 V$ O+ |! mparseInt('2345')  // 转整型% I) X6 ?; K7 B8 r, J
2345) L/ s  M1 l# `. S/ X+ |
parseInt('2345.5')
6 t) \& E' g& l+ O9 v( U8 V( R23454 g4 K% I8 L* u! a/ c9 L) p% k2 j
parseFloat('2345.5') // 转浮点型
6 }- V6 r8 O( J, h+ _4 ^  G( E2345.50 q- G& i9 O5 X- d# f4 j  O
parseFloat('ABC')  D% t7 j" a" \" n" O
NaN# u& T& T$ c1 r! w/ N
parseInt('abc'): B0 W7 e( `& \9 V! n) p' K0 ]
NaN
9 j1 e$ t! K) x1 }: ?</code></pre>
9 R# `, B1 a; v; m8 h' \6 Y- e<h4 id="232-string类型">2.3.2 String类型</h4>2 B) l9 g1 w3 z) Z$ {; |9 Q
<pre><code class="language-javascript">&gt; var name = 'Hans'8 _4 L# s, l1 `
&gt; typeof name
) H4 o7 i  |* r/ {3 S5 _'string'
5 w/ ^- |# d  o/ s8 m+ P: ]( R2 e9 Q- b
//常用方法" y& `% A- C3 Y0 R
// 变量值长度
2 E, M" }2 g( k9 l5 D1 L&gt; name.length
* J" F7 b1 J6 s8 S) w) j0 B6 e4
1 J+ Y1 C9 v' \  p8 F// trim() 移除空白! e! }5 p1 m- s$ R5 c; H
&gt; var a = '    ABC    '
; i8 _2 z" [$ _& J, G) A&gt; a
$ s$ [4 \4 P7 a# p  [; X; r8 \! l'    ABC    '
: b# h- c/ |+ ?5 L6 E& M% Q& l&gt; a.trim()
# S5 w* C4 V, m9 @8 H- e'ABC'; Z- x# r" ]+ q$ Z8 ?1 e3 j: u- _
//移除左边的空白5 v7 b1 X' |' U7 O& G' O! G" I3 @
&gt; a.trimLeft(): g& I# M6 U' L0 B6 X2 z) X& ]) O
'ABC    '
7 ~4 U% o& u. m  l//移除右边的空白# y" G/ [2 X" o3 K. h
&gt; a.trimRight(); a2 i( x% n) o8 f, a" q, C/ G4 m& H
'    ABC'6 }8 C* V' F5 D- N/ |2 O( T' @

+ [3 {0 U* k; n3 L" e) ]6 A1 b//返回第n个字符,从0开始
: ~% K7 S, p# {) X" k" t  f; Z2 U&gt; name
5 ?" o& ~5 K+ t: ~: y3 r9 f' }'Hans'
  d. I! @! M* `0 H! w% i&gt; name.charAt(3)
9 a* h. L* o8 z/ t; P" O. R's'1 U  x3 a/ ~+ d1 o$ b
&gt; name.charAt()6 P' I) G! o$ O3 T# }$ P
'H'& x1 X. X+ V# E% L) T
&gt; name.charAt(1)
% H4 x2 z8 r$ U'a'
) g6 M6 K- U) K0 ?5 s2 y5 N" x: ]
// 在javascript中推荐使用加号(+)拼接
& f& A3 a$ }) ?( {) X( S! {: r1 ^% W&gt; name
/ ~! b4 y8 M* t4 t'Hans'
4 u& r1 K. l6 e8 x- G- k) }5 I$ G&gt; a8 r3 c5 {9 R1 n1 F; A: a2 ~
'    ABC    '
2 D9 q; r( e. m; J% f0 W&gt; name + a
4 h, }& @% K3 C3 U3 v% d) Q# x$ }'Hans    ABC    '
) R: Q/ ?2 e3 Y! E; ?' O2 h% i; }// 使用concat拼接
  X/ h0 [- j3 }7 a&gt; name.concat(a)
$ }" L0 [! s: O1 s7 |. e2 S; P'Hans    ABC    '
* }: ?3 n+ o8 @% M) Z' g% d
6 P  ]( e: Q! @  |; {* j  K//indexOf(substring, start)子序列位置
2 w. e: t" Y5 [1 @2 I* j) w
8 t- o& C' `- Q% u# y$ @) P1 r&gt; text1 h2 O- o' B+ y( ^! O4 X
'A young idler,\nan old beggar': A) l% a# g8 z5 u
&gt; text.indexOf('young',0)) S( c; o2 Y9 Y1 ]- \
29 b- d" o% S, Y0 }% g- G6 e' @9 b# r
2 |* _5 c. {3 F) j0 o/ ^
//.substring(from, to)        根据索引获取子序列, p0 M+ b  I+ y  E  O; k8 K# o
&gt; text.substring(0,); d& v, D0 Q  I$ f1 r; R* j
'A young idler,\nan old beggar'
4 [# l$ W; H* u5 m" l9 {- F&gt; text.substring(0,10)1 V9 n9 j8 w) O
'A young id'" l5 T4 y$ Z: r6 J

% e  k1 `0 _' }4 ~: Q, c& y1 m// .slice(start, end)        切片, 从0开始顾头不顾尾" a: t, n5 j- k! ^" Z8 t
&gt; name.slice(0,3)
/ \! i: ^! s! F7 M, G' n! U& v'Han'2 `2 `1 |# I; y, m

) Y- ^" e0 L! ~- L& o; z9 W8 S// 转小写
$ [( V0 O- @6 [2 T* J# E: s&gt; name
1 F3 E- m! ?: ~1 Z3 [& b'Hans'
0 A% O7 ?% E/ C0 I  f&gt; name.toLowerCase()- g! ]. C& F3 w, W! o/ y5 d$ X& [. {
'hans'+ |8 R( F' d8 i: i
// 转大写& N# ?$ t) a. r
&gt; name.toUpperCase()- u: R" T9 ]3 Y6 F+ |* x, K" h
'HANS'( `& O8 X( h  v$ p4 Y  g

! V1 c: R( c2 H) |& N// 分隔
1 W9 I, _. u3 E&gt; name6 h$ j) b% ^! W2 s
'Hans': ^- v" E+ ~3 c1 R7 y8 c) ?
&gt; name.split('a')" ^8 Q$ _$ O1 V% s& ]$ ]
(2)&nbsp;['H', 'ns']
& Q: z# U( e$ Q0 `8 S  W$ b, J. l</code></pre>. j. l6 a+ }: f4 i. ?0 U, Q
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>/ f( P' Z" C% B% ^9 r  T0 D
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
- D9 U7 u, t1 C6 t/ f9 F7 w<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>& Z% q! I: ^: S+ P
<p><strong>null和undefined</strong></p>! Z! ]5 ~; O+ M1 b$ A
<ul>
) s* _% s2 P9 N0 V) d6 h; r: Q+ r" i<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
" ?  I% p- s) W5 U0 B# I<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>5 ~4 Y) q0 h2 b( ?
</ul>
- N4 L# y6 F( p' H# U! Z9 i6 n<h4 id="234-array数组">2.3.4 Array数组</h4>
3 c  b3 E$ W; j$ e+ l<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>5 T6 {3 U( r* K" K
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 6 B: u/ N# x! R% f" o0 w+ t
&gt; array1( Z# A* W( j0 z4 F# D' e- Y5 y
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 X) n9 W; f( y8 D
&gt; console.log(array1[2])  //console.log打印类似python中的print  ^7 \. @1 x& p" F
3! G5 f& r$ n0 f1 {. l8 X" B
// length元素个数7 I) d6 R3 }* H) i# `  P
&gt; array1.length3 D* \% t  W$ o. I
6' i9 A3 b; X5 ]' D+ x. u: V
// 在尾部增加元素,类型append2 i8 Z# \6 v5 i5 _3 S
&gt; array1.push('D')2 z& [, x: \$ b( A& F4 S9 v7 d1 E& V
7
# S, C! t3 ^* f2 |# P. S&gt; array1
5 c) F) T' @. Y8 X3 g: u; p(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']4 S+ D8 r. [: R9 X: K1 Q: t
// 在头部增加元素
( _* u$ x- o! A! ]4 P: b5 q# l&gt; array1.unshift(0)9 @/ s/ W7 w6 Z; V8 N7 E/ c
8
: R9 {5 u& F5 i& a6 i4 {&gt; array1- T0 F' H1 ]* o: K% H# M9 q, q! K
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']/ Y/ Y" R0 z. X: w  Z

' a. W, K4 Y; ~//取最后一个元素) o# R3 i% W  V1 a# b  S# e
&gt; array1.pop()
- o1 v  Q! N" y1 P& _'D'
+ Z, Y' R* x: _3 z1 r3 {&gt; array1; Z) Z8 J5 Q. T4 T' K  |1 A
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']0 f( C; O9 h) G- o+ B3 q$ l; [" i
//取头部元素" X8 i3 N* s& T% B
&gt; array1.shift()
3 V* u) q4 J  w% E% d0( d5 B/ S: \+ g, I0 Y0 U3 Z
&gt; array1* r8 |7 z* {# K! m/ s& Q+ ?$ t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* E# }' I+ l; }8 u# d7 Z$ z+ M
//切片, 从0开始顾头不顾尾
8 g$ w3 g/ _1 G# Y1 l2 Q5 k( e1 i6 b&gt; array1.slice(3,6)
! Y. V) ^( s5 _' S% E(3)&nbsp;['a', 'b', 'c']
$ r, f: u6 [: h2 E3 _& J) F// 反转# A4 q# I9 W  U- \; T
&gt; array1.reverse(). u+ b7 B' z/ T. e
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]* x3 n# _) N9 v/ G% z5 e
// 将数组元素连接成字符串  \- w3 V% ]' u- d+ k/ I
&gt; array1.join() // 什么不都写默认使用逗号分隔, n! ^  R5 G# }$ |& ~& a. _
'c,b,a,3,2,1'0 W' l- \: ]' Y7 Z5 \' y
&gt; array1.join('')
/ O. N  a* S+ X0 R0 n% H9 w'cba321'3 e3 q! s: l7 n$ W) ?7 f  }
&gt; array1.join('|'): ]3 ?- Y7 B5 B: M
'c|b|a|3|2|1'2 M- r! M% O2 l' E
2 I2 z3 n0 \( L6 q
// 连接数组' ]& Y5 g/ `, y3 J/ R
&gt; var array2 = ['A','B','C']
  I9 V+ a+ H5 p1 H) i) T. [$ G0 x# O&gt; array1.concat(array2)
# j& k6 C8 Q# h(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']- _+ c. d2 L8 [9 f) e
3 {9 j( i. b( }, W4 u# W
// 排序
4 W1 I' w, n8 X5 _# v- p6 T8 Q3 j) P&gt; array1.sort()
5 k% C$ a) H7 x' D; c0 |(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 a1 c' H7 M, L, a

0 |3 Q8 J- b& s// 删除元素,并可以向数据组中添加新元素(可选)
5 T$ w5 M+ q3 T7 H/ W2 R&gt; array1.splice(3,3)  // 删除元素3 ?& p2 ]! a; ~. v
(3)&nbsp;['a', 'b', 'c']
3 }' j* a) [/ c! }/ u* d&gt; array18 D% y. @! O% l! z$ \' J
(3)&nbsp;[1, 2, 3]
, J% J6 X4 ]/ h, _* L5 }# |- p$ p1 [&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
( x* Y2 O# F& Q  \% s; H& W[]* T/ C7 f/ A. y
&gt; array1
3 K9 B% t9 U1 ?. Z(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']' x% l# i5 [  `% \! C7 B& Y3 c

9 Z; P1 [4 F! h: s: p/*) B( H6 m' J: t+ A
splice(index,howmany,item1,.....,itemX)
  B8 O$ _( l4 f, w: f% Q* ~- z1 Bindex:必需,必须是数字。规定从何处添加/删除元素。
( l3 c- y7 Q7 Q; M/ Z& nhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
: X# n0 Z0 c. y7 j. Q' B6 jitem1, ..., itemX        可选。要添加到数组的新元素
! h" F' |$ x) c9 Y0 u: h/ q  c7 n*/
  G3 R& P" H  J8 N" f! O
4 y( Z! e# V/ U' B! {4 h/ [1 F// forEach()        将数组的每个元素传递给回调函数/ W- j' z5 g, h8 n- J8 t0 h1 ]
&gt; array1.forEach(function test(n){console.log(n)})
' v- a' B) S) @$ l. s  X 1
6 ?- P# a3 d* a* q& ]$ N0 ~9 @ 2* l; @9 m( |6 ^
3, m# [: n/ k; O1 W( h
A* m0 X, E( `) M& ?  I9 w3 U/ L  d1 {4 T; T
B( a1 _" t2 M) n0 @4 f) D
C
* x2 ~2 {' @1 c  m% U* ^3 U8 L// 返回一个数组元素调用函数处理后的值的新数组- x4 ]  M4 Z( Z$ G  d% J3 Y
&gt; array1.map(function(value){return value +1})" k9 H# _9 A; q# z
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
5 \. l; O* J# E</code></pre>% M" X% y' [) m, x/ @9 s
<h3 id="24-运算符">2.4 运算符</h3>
" H8 u# d" v+ B4 j$ h9 z" H$ x<h4 id="241-数学运算符">2.4.1 数学运算符</h4>& H$ \2 c7 ^' K# ~! p
<p><code>+ - * / % ++ --</code></p>& s0 Q1 v0 S/ |% g
<pre><code class="language-javascript">&gt; var a = 62 U! \2 J' ]' Q+ W! ?3 c
&gt; var b = 3
3 D! K. r+ L, Q// 加
, s8 J- C$ h& }$ Q5 N# C' ^/ C&gt; a + b
% ^) E2 |* ?( L97 Z$ |) Z  i: d
// 减
: v- ^+ H7 b+ W4 l&gt; a - b3 ?9 o( l( g2 T9 F/ i, K+ [. z
3
2 q! h& A' {5 z) F  v, M* j// 乘
( g0 E, L2 _: D6 z' e&gt; a * b; ]( I$ u3 {9 C( |+ M
18+ [. u% Y* t2 Z5 d
// 除7 @- R1 Z2 d+ F/ g1 t6 L. ^
&gt; a / b
/ U6 V0 j  p1 @+ N0 Y2
* [' t" H8 m& y' B// 取模(取余)  F' C5 ]; L- P4 n
&gt; a % b: X- @9 o0 S/ u  G2 r2 m  s
0+ X/ g! g" j+ O: b
// 自增1(先赋值再增1)' s- b2 M" u3 J. N
&gt; a++
, R# u% L3 ~& l6
6 S7 c- }% |! i, B5 w1 K&gt; a
/ `0 v) G4 e- X. b# s; E6 ?7
# c* E  s/ Z* ~, L3 B% H/ D  m// 自减1(先赋值再减1), i4 V2 [" w: }! v
&gt; a--4 W( H3 D1 `; ?$ d* g6 g/ E$ l/ V: k
7
4 Q/ K: I* j5 A. z# Q&gt; a: U. g2 H1 G7 P/ d, p
6
$ H7 A  q! A+ v. J% R// 自增1(先增1再赋值)
( {# V; T6 V5 F7 A&gt; ++a
" `# z3 s( L6 X$ i+ m) L7- Q9 l! p. d( ^* C' c$ a
// 自减1(先减1再赋值)
' p8 [0 c2 A9 _. E8 j2 O6 v&gt; --a
' {; X) X. Z! I" m& }: t6
- c7 V0 h* D: X4 O  W! N# T# ]&gt; a/ F1 `% x" |8 p$ F) Q
6
; U1 g8 N" Q6 d$ E- f
8 p: F5 S( [4 G+ `+ K& ?- m//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理+ u" t; ?: y9 ?9 O
</code></pre>( V# R$ a& K4 U+ Z0 u
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
5 g% ]2 R1 ^2 \/ d* \0 ?<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>  i& X& B# R0 H" s9 ]. Z! s$ @3 O
<pre><code class="language-javascript">// 大于& J$ D* z$ q6 \' ?2 r
&gt; a &gt; b$ G$ I1 s) J, ?: x/ B
true
7 V1 q& v( e: X& T7 ]// 大于等于
( D8 F. J7 u" ]6 V&gt; a &gt;= b
5 i& X* e. U: e' Jtrue( {- h: ^" ^9 H
// 小于- S8 @4 C* ~3 B" g4 m) M
&gt; a &lt; b
! S0 B. I. n. X  ~4 m: @false
0 Y" J7 V" \/ {/ K2 t// 小于等于
0 e; G! d$ |( A" F&gt; a &lt;= b
( Y6 V7 m: v7 G* N' C7 Efalse9 V7 [& J3 t# P
// 弱不等于0 J) e" F2 G  I% E* X
&gt; a != b
  X( Y% ?  [7 x( J4 ^true
# P1 m( Q6 d+ _0 D// 弱等于1 {: |  {9 ~) V4 q
&gt; 1 == '1'! J# N1 [  Q( a
true
& `9 ]- i! I$ m; L% e// 强等于
4 @) E/ s" d  h0 P. x/ @&gt; 1 === '1'
% L6 s, M# E! A" ofalse/ p1 l/ J4 ~% O/ U' k
// 强不等于9 s9 N4 a7 Y9 l
&gt; 1 !== '1'9 h7 j: u; L+ E; P- D2 F
true2 a7 a& C( d2 O  q, p

' A: H1 s. p' t/*
" W4 `4 ~. z2 ?9 p+ V, e" XJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误' ~' h8 Z% |7 G) T  }, R
*/
, o8 [" ]; X: z5 _) s0 X' q# [0 F</code></pre>
6 x( f, q) _5 A- [<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
& b9 [8 u, Y( ?6 y; q% X<p><code>&amp;&amp; || !</code></p>
& @6 I' {3 e6 V  L6 {<pre><code class="language-javascript">&amp;&amp; 与4 D% S: E1 B8 k3 `# U' a) }+ B
|| or ! D  W- H: O6 ~0 S2 I
! 非3 }3 \0 N9 A4 p% X$ I; s
</code></pre>
2 }7 x4 g8 i% s( A) s<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>/ Y7 m3 ^* q! b; @# W2 U  B2 b, @# R
<p><code>= += -= *= /=</code></p>. b( E$ h* `# @# A
<pre><code class="language-javascript">// 赋值
) c: I! F4 d6 T. A&gt; var x = 3
! y/ F5 w8 T' y$ o. x% x- T// 加等于' x. S$ y5 k/ q% I
&gt; x += 2
: V5 ~; F" e" R) T5
9 W+ s3 I- @5 T# l& E// 减等于
# t  v# r( m2 y, X* a' P&gt; x -= 1) a4 K9 k  T: i6 R0 \
43 V* W; a! j8 w# m
// 乘等于
! }. Q3 C: A/ ^&gt; x *= 2
; M0 ~  W# r6 P" c5 S8
$ _- Y4 x/ v$ U0 n// 除等于5 F8 @* j' z- q+ P. L$ f4 k$ \
&gt; x /= 2
! R9 w7 ^$ o2 c1 l9 i; K4
1 E" M/ s. F) l% n+ e</code></pre>3 @' f6 ~, f% e) V
<h3 id="25-流程控制">2.5 流程控制</h3>
# x: \$ t3 D) A8 G% T/ p/ ?<h4 id="251-if">2.5.1 if</h4>
1 C1 ~1 d. N( Q% p- a2 F' P/ n3 R8 {  v<pre><code class="language-javascript">1, if(条件){条件成立执行代码}3 @6 V% y$ {( S8 W5 W& l8 r0 F

" O% l; p% X; [0 l$ z, X0 A1 }&gt; var x = 3
( [' O" q2 S+ \' l/ ~" F3 H&gt; if (x &gt; 2){console.log("OK")}( R6 {; \  p$ i8 D
OK
# t4 m) O$ K! G8 A
* N2 L+ i, r$ g2, if(条件){条件成立执行代码}
% Q* _: q6 ~1 H( b4 {( U! n        else{条件不成立执行代码}( i5 I. ]- m6 d/ F: x: h3 W0 Y) X
0 W9 D6 W: z% Q& m; w. L; k  I- ]
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
' |4 |$ ]3 O2 B) ]9 U'NO') i8 m- h5 t% X) y5 W+ |  ~2 l
' i' n8 l# Z, F4 u( m  b9 T2 e- C
3, if(条件1){条件1成立执行代码} ! T& `4 X; _& U$ j" Z# a4 |
        else if(条件2){条件2成立执行代码}
1 ]& S. ^" i7 l8 K1 b6 I    else{上面条件都不成立执行代码}
2 b% l. b2 o; l( G1 D. _: h& K- b& Z8 r: h) ?
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}0 C2 n2 o: _- V1 Q( r) [( q- o: r: P) q
Ha  S- V9 {5 c% E& b% d) g
</code></pre>! P/ v% u  I' J* B( N3 b
<h4 id="252-switch">2.5.2 switch</h4>. W# z8 N% S  h4 r! R
<pre><code class="language-javascript">var day = new Date().getDay();. }; v. C# S9 f  e% P; Y' Z
switch (day) {- u4 H/ [% @, }% _! {  ]
  case 0:4 d- V% u9 T1 c  |; o( b. B# N
  console.log("Sunday");6 K$ t0 o4 ~1 H, {0 _* D
  break;
; c/ V, g. |% }3 A) p  case 1:
1 M, v9 D* {+ u2 ~3 I: D  console.log("Monday");! D% S8 \. H* z+ q9 G
  break;2 v6 g+ y/ E+ h  m( o) I$ A! k
default:
: Z9 w& B: H7 i* d  console.log("不在范围")" v  ?) l3 M8 q3 Q2 T
}
8 S: V' J! }) G1 A' R 不在范围
0 W" o" Q# }4 v</code></pre>% V2 ]' h9 s5 O8 s* m
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
+ w( _: L) n  l; `5 L+ I; P" P+ Y<h4 id="253-for">2.5.3 for</h4>
. N/ Z7 O6 u7 V# y% k<pre><code class="language-python">// for 循环
2 h( m% r0 p0 N0 ~+ ?- h0 y' l        for(起始值;循环条件;每次循环后执行的操作){
8 \6 Q) l3 G. L& o# f        for循环体代码
# _/ |6 E9 h3 Y' w4 ]/ l+ l1 Q    }
9 Y# N' f0 ~. ?1 R; u! d1 w/ j5 b8 V( ]! U4 @( n
for (var i = 0; i&lt;10; i++){
8 \+ O2 M6 v) i  n- M2 t    console.log(i)
- H# u% i3 u3 h% d8 e6 @: K0 p}* c( H+ R: P/ L; O+ Z3 v& e
        05 N+ D: w' r- l4 k- f! A# ]) p0 W
        1
7 e8 P! L% k  ^. P6 _        29 l  p2 U  A; L, K- Q
        3
) W) f0 ]& P& d# m+ ]3 X2 H2 O        4- e9 [0 H! |' g- S4 M) j
        5
2 @" t2 P+ b' I8 u- F$ `4 @        6
0 P. D- V: ?* c9 G4 s3 f        7
7 F* X# S& c5 A+ X+ v5 s        8( M  L, l, Q9 i; S
        9  e. ^( d7 d. k; J; F) O5 X2 ^# a
</code></pre>
# p& @- B1 s/ [$ [3 L- A5 {<h4 id="254-while">2.5.4 while</h4>4 Z0 a2 d+ A. G7 b7 ~+ [
<pre><code class="language-javascript">// while 循环0 F9 d! W% t6 y; O* E+ f; A* o' K2 o
        while(循环条件){0 x, Q: _6 d6 p9 g0 c! [
        循环体代码0 U4 c5 O0 L: T5 x  v- |  U2 c! n0 o
    }
& F6 v* i% y3 Q$ Y2 x) ?$ D7 {; L. W# F
&gt; var i = 0- `) ^5 C+ n/ j- I
&gt; while(i&lt;10){) k: p# k5 f  E; T3 O0 L5 d# G8 Z
    console.log(i)% h! Y0 H  x' [% q+ u! h7 d
    i++
+ Z: O" m7 \1 B0 J}' `* v- z$ j0 D# T9 [. J
0
- K3 [2 b* L9 }9 J. D4 l" f 1! G* W6 y& K* C; O
2+ Y* b0 j$ V' }' z, g9 \
3
! Z, @4 V7 [' c, ^6 s  z5 R 4
: O  f  ^7 e2 ]) Q 5
" W& ~, S6 \7 `- d4 H& \# J 6
4 B! b' y. c- _8 ] 7
% q# t% @; T3 V' | 8) E' f/ Q" c( E2 q! c2 u* t
9( L  Y: y8 B5 F9 c
</code></pre>
6 \, v% Y5 G% y( H" a<h4 id="255-break和continue">2.5.5 break和continue</h4>
! E# z( M2 C- v# p- Q' U5 r0 @<pre><code class="language-javascript">// break0 a+ `1 X; g( s
for (var i = 0; i&lt;10; i++){
: g+ P( U( K% n4 P    if (i == 5){break}& A  f& B2 s. @6 V
    console.log(i)
7 `; j' P. e0 w! E+ p}. G, k1 S+ t- q
0
; Z7 Y8 z' [+ B0 Y6 a' @" r; M* y 1: z$ p7 Y: V5 c  @3 B1 g
2
. k$ _9 s; w8 T: V" P8 x& r 3
; _# P1 o0 D# ~* r( }% U; P* v 45 ]* B* l4 h% u( b) [
// continue
: ~( _9 v( g& f8 b, l4 Xfor (var i = 0; i&lt;10; i++){, O) T- ~1 S/ G9 G7 d9 [+ Q4 E
    if (i == 5){continue}
' G4 d1 K5 i$ ]( j; l# u5 |( @) ^/ ~    console.log(i)
; V- W3 r9 u: W/ [( @2 t}
# r0 B, {0 Q; t: R, Z 05 X' G9 w9 Z& V9 b5 }# h; A* i9 `, |
17 e, V$ a7 O: i$ H& M
2# X" V: @! p  @5 R( ^
3
2 M& t+ k' B" \7 _' R) ` 4
" N2 z; p5 S4 [$ S% W/ n) [ 64 ]8 G7 E1 n6 v& F
7& Z( L7 |, f4 J/ Q1 Q- Z
8* H* n3 j, a$ `6 J' H9 Q% Q! ?
99 E. U& J% C) \: a/ H3 H
* }  ?! ]) C8 U( Z  b& g
</code></pre>0 c" F5 L  Y: |, O! T& G
<h3 id="26-三元运算">2.6 三元运算</h3>
& ]1 W, K) \6 m2 c  V<pre><code class="language-javascript">&gt; a
$ m& \, A, D) u2 q9 d- w9 [6
+ G1 [+ g+ v, r+ D0 h" `&gt; b) U. U6 ^, A: |9 ~1 P0 r
34 L7 }) c" s1 @7 S1 X
  ?/ \" q# I( F0 F, J; Q; i, a
//条件成立c为a的值,不成立c为b的值
- |; `) r& A* V# B; v" V& X5 s" x&gt; var c = a &gt; b ? a : b
: Q) l2 |2 x4 k$ P3 r&gt; c0 l; T+ D  G& h9 o: K
6: G; d( D+ J# q. r( K$ o& J

2 G, @9 I4 p+ e; E% L// 三元运算可以嵌套; n3 p' Z/ j  F$ R: @8 p* V4 h' b
</code></pre>1 }; Q: [. B& ]' j" p
<h3 id="27-函数">2.7 函数</h3>8 G# T- L7 f3 X( y4 c. X
<pre><code class="language-javascript">1. 普通函数: Z/ k* ]( B* W' ~- B
&gt; function foo1(){
3 T! ]1 _0 R- o' L: m0 @    console.log("Hi")
- }  v9 G% Q5 ]3 {: s: ]' e' Z}: b: b5 O1 L7 e3 U9 T" H

  _" l- N( b) ^" x/ G&gt; foo1()
; R. \- s- N) U# b% W: `$ k5 N        Hi* ^4 Y: c& z% P9 [1 o  x/ k
2. 带参数函数) z* K# R3 m# U8 p) w$ w* t
&gt; function foo1(name){! [# j. x3 o9 G' \! t" _4 z
console.log("Hi",name)
5 K  f4 ]- c3 R: X}
4 a5 k! s6 J% f2 e- M; |
. F9 J6 J" K+ L) s* y&gt; foo1("Hans")
& n5 R7 \  s  \, H3 u. S( MHi Hans
( b; A/ n9 S$ e$ T- ~8 b
3 g4 _/ i0 Z- m/ X' K&gt; var name = "Hello"2 w9 v% F: O) `8 ?
&gt; foo1(name)
& P# Q& D$ [: l0 u! [- W; ?" UHi Hello
5 C# U. X; y5 J- g: s: B6 b1 t3 z9 i, ~( |" V- ^
3. 带返回值函数
2 `0 ]+ |( ~. `0 N8 h&gt; function foo1(a,b){& p* S% Q- `" \, n, v. j7 f! w
        return a + b   * F- @5 e1 a" q
}& i" k; x! O/ G/ g4 l
&gt; foo1(1,2)
( n" c9 M; A- O  a" e3
. D' b. U9 |( ?- Y&gt; var a = foo1(10,20)  //接受函数返回值
! d0 s& Z+ N" m, v! K&gt; a
) Y/ l' z* m) B30
# o7 P$ C2 j, {: R
6 Q% S' C  x- ^' R0 f! c$ _: m4. 匿名函数
: h7 i# p& R/ D2 t) P&gt; var sum = function(a, b){
  n$ _" ~; g3 D9 ^4 C  return a + b;
9 X. V) J/ d& L; h8 n}
" q8 p# ]$ ]4 q% C5 ^3 v# h% F" Y% @&gt; sum(1,2)) N# u! t- Q1 X
3
$ S& A% Q8 N& M% U) o
/ ^& I$ n0 P  M& Q9 i9 R// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱8 A. h; q7 }& m  Y9 @
&gt; (function(a, b){
/ L/ m, B7 c1 Q2 d% k3 B  return a + b
0 n( ^0 _6 e0 S5 x})(10, 20)
3 z% @3 K8 o. H5 Y+ _# r- `30
: T7 e4 f. k- X4 E2 Z' W/ f& v) \# U4 a* m
5. 闭包函数$ m. _! H" O5 g9 v
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
" m8 E9 F" Z7 C6 T* v; Yvar city = "BJ"
( ~. `& J; X8 [8 ]1 o) Q6 ?0 o2 Tfunction f(){+ r9 s1 J) V4 V: a9 r
    var city = "SH"
$ \5 C$ i3 C' u% C! d! f    function inner(){4 a7 t$ K8 r9 y1 f
        console.log(city)
- `8 \" v7 b# I, h    }
1 \& ?. N0 \: T3 g( M# o& e    return inner
. v' U- }# A0 N8 n3 Y/ z1 ]}. d# b; {3 N" w% V  B7 N" b* E2 ]$ x
var ret = f()
# k1 [; M$ }; a9 J, Zret()
! s3 r5 \4 D" c3 d( g! K- M执行结果:
7 W( B1 M. n) t; r# {SH9 O* i% ^8 _4 Z8 U" V9 T* `
6 b, C* s# p1 z+ n
</code></pre>
( n: r5 B! E' N8 Y<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
( P, a7 m* t# V& p9 H<pre><code class="language-javascript">var f = v =&gt; v;
  u7 p) A' T) \9 A" r// 等同于$ c8 m# V' R6 R/ _+ v
var f = function(v){& s+ D) ?6 ^) B0 M
  return v;: p! A6 t( W* u' `+ E; G- \/ j) a  B
}! V  [+ z8 E% q* f" @7 x1 n7 B
</code></pre>
& d  z7 a$ Z$ i- G<p><code>arguments</code>参数 可以获取传入的所有数据</p>' x0 O$ n3 L+ w6 w
<pre><code class="language-javascript">function foo1(a,b){
9 |; a9 \: D8 w. e0 R    console.log(arguments.length)  //参数的个数
3 e/ v% R5 f1 U" v, |* B+ U* Z    console.log(arguments[0]) // 第一个参数的值  P" n' U, q& k9 W' {) a: k
        return a + b   4 G9 s% m4 n+ s5 e8 \8 f
}. @  M! v$ W! i! _/ p# J
foo1(10,20)
( x, n! @$ ]) _! X. X4 i结果:6 U' E; O. V4 i- e# b
2          //参数的个数
" }4 R/ ~$ \% [4 `5 a% t8 B' ~5 p: _10        // 第一个参数的值
  T6 ?; \8 f, P+ ~5 f9 H* m30        // 返回相加的结果
( I+ x6 ?0 p9 j5 t0 F9 v</code></pre>0 d6 M' ]# z0 y/ W+ W  A
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
+ w( x$ ~) L4 J# s<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
5 [, @2 T1 d% M6 S<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>: n( e9 \. W0 W0 V; A  q: j+ B
<h4 id="281-date对象">2.8.1 Date对象</h4>3 Q, o$ `: s, d+ _* h
<pre><code class="language-javascript">&gt; var data_test = new Date()
" e; Z: ?& I! n' i* t1 H$ P! w&gt; data_test
% C% _6 E4 V1 F  V7 J% kFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
$ ^6 e% ~" c* f/ Q0 D% K8 e* k&gt; data_test.toLocaleString()
1 e& H. ~: K4 L5 @" H6 J# Z3 p+ s'2022/2/11 下午9:44:43'  T* x( K& D0 V% F1 w
6 F1 K# W8 [" H, d; d! I" A1 M% o
&gt; data_test.toLocaleDateString(), e% G2 ]. ]5 }0 n0 y4 A% v2 o
'2022/2/11'% Z. k2 V; F) q8 f2 }$ L. j

5 ~" u. t0 z5 E/ u) |( F1 G$ U6 T&gt; var data_test2  = new Date("2022/2/11 9:44:43")2 `; s3 [7 g" N2 G! \: s- @, J
&gt; data_test2.toLocaleString(). O7 P' m5 a. U" k
'2022/2/11 上午9:44:43'
* y, T' `- J5 q; ?& Y4 n4 Q
8 D4 ^+ |' N0 F" V4 M# i: M// 获取当前几号
$ l; z! Y! r( C$ R&gt; data_test.getDate()
' d2 t. C3 H; I2 [113 Y9 ]0 b. V- y0 r7 k
// 获取星期几,数字表示
  d0 b* c+ q7 F&gt; data_test.getDay()  6 s/ o7 K' }+ I! Q
5, @6 ]' d' z$ E9 a4 \$ x7 k
// 获取月份(0-11)
# ^# f2 X9 o  Y/ h; a&gt; data_test.getMonth()
$ Q! w/ ~! E! n' n0 N4 {1$ d: T8 E- M6 v3 `& M6 G
// 获取完整年份2 i. A: l4 m1 {! ?1 Y
&gt; data_test.getFullYear()2 I& o) X( Z& E/ t0 S5 Z7 v
2022
% }$ S$ p8 N7 }& Y% S7 N$ r// 获取时
$ Y: F( M: Z& }) U&gt; data_test.getHours()3 ]7 C1 H6 G0 m( ^6 Y6 X
21
3 D' @+ ]1 }6 I4 h// 获取分
" Z' N# e8 O( n6 E, g% Q+ |&gt; data_test.getMinutes()- z% n5 h, T6 Y: O2 p& u
44
6 R. ?$ S5 x1 \* _/ ?& X6 ]4 d// 获取秒7 ^$ m2 [: G# ~% o! [/ v* p
&gt; data_test.getSeconds()- y9 \' b& N3 g; z+ E
43+ M6 w) Y2 M' j% x: o7 K1 c4 m: a
// 获取毫秒! [5 N& c, p- u9 p3 R6 G1 t4 W5 G
&gt; data_test.getMilliseconds()
- h. d1 n5 j! ~9 H( e8 F( S290
" S* b2 C+ Y+ M/ t  H  i// 获取时间戳
& k8 t) C, H5 N& e% W0 }# k" c0 i&gt; data_test.getTime()
+ M& ^+ X! E, j2 u7 m1644587083290& ?0 U- z) ^  s. E6 |4 O* n' R
</code></pre>/ C8 \" Y5 @+ B! R* M
<h4 id="282-json对象">2.8.2 Json对象</h4>; s$ t( u: K- L% d# g6 F1 X/ A3 w
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
: b$ j2 T" `: S) M# n- YJSON.parse()  // 反序列化,把JSON字符串转换成对象
: [  @' \9 a1 ?+ J3 ?# X
4 ]3 P* P* W* Z// 序列化
/ M7 e. z4 p5 r. Y2 b&gt; var jstojson = JSON.stringify(person)
) {9 p" k+ u8 v&gt; jstojson  # o9 y3 v8 z- p1 Q8 v9 M5 Y$ _! ?- E
'{"Name":"Hans","Age":18}'8 [( q6 E) p) ^, D9 G" t+ l4 ^

" G. i& N* ?# c8 U( \1 t6 v* {6 t// 反序列化
' }$ e+ ^9 v4 {, e. Q9 Z&gt; var x = JSON.parse(jstojson)
( P! T4 \" \5 i8 b&gt; x
5 |& A4 K: y" w{Name: 'Hans', Age: 18}
) y8 O% M3 i: Z) q&gt; x.Age
+ f! b, F2 {$ U, X8 e, o# i18) v. |  e& i! |; V# v1 u5 K9 `
</code></pre>- K' x, c$ ]+ d7 k9 {' N8 C0 ?
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
: Q8 H% y4 }. `3 x  `<p>正则</p>
6 S+ O$ u! O, I1 r<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");: K7 a$ x" y, o* S$ P" j
&gt; reg19 K9 E  O2 @' ^4 c: {7 ^0 R
/^[a-zA-Z][a-zA-Z0-9]{4,7}/5 |: \5 [$ e( l% H8 O8 `
&gt; reg1.test("Hans666"), z# d( U+ y/ q# Q- Q) {
true
! H9 \& W& `& ?: p4 L9 w1 Y0 u
6 H7 T( F" \3 z9 j0 x&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/& v, R6 @; s# I6 E+ u
&gt; reg2
: f5 P5 `9 i$ n: ^" ^( V- y! X/^[a-zA-Z][a-zA-Z0-9]{4,7}/, r% H! l. ?% I( i9 D: k& I
&gt; reg2.test('Hasdfa')
+ n$ o0 P; h8 S+ v- Etrue
( `( r3 i- @1 Y4 W0 n( D7 O5 @
- {; i' l$ l/ j8 O2 {$ t全局匹配:
( b4 K( T! i" c' ]# f5 Q' K2 k8 Z+ L&gt; name' D# |/ f9 [8 R! Y5 Q) K' S
'Hello'' B2 q  D, H2 K. ]# T' M
&gt; name.match(/l/)
8 o1 H6 w9 ^0 ^4 e6 @1 q- E['l', index: 2, input: 'Hello', groups: undefined]1 C2 {2 R' Y' t9 t1 x+ l8 e5 @

* p/ \& N$ J) }& d0 V* f&gt; name.match(/l/g)
7 B4 a( [5 R' l2 P* {' a1 t(2)&nbsp;['l', 'l']
. j- ?+ t0 X. D/ C// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
3 N/ A- {' Z4 v
) F1 P; d! J4 r/ v% I, E全局匹配注意事项:
& ~$ o, u# a3 n% k# |4 P( o# D5 B&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 j% m8 @. o+ `4 i9 y- l6 C/ B: s
&gt; reg2.test('Hasdfa')
& {) \% E' X. F# O& ?) O; x4 [  Ptrue
/ `. ~2 B4 B. P# u1 I1 g; t&gt;reg2.lastIndex;
3 o$ P1 _7 A1 l% W! B8 l2 O0 X6' |6 H5 c0 i3 ^4 n! F
&gt; reg2.test('Hasdfa'). ?! C) o- q2 z9 D! }
false
9 {% h" u. M* A4 ~! g6 V" ^5 W&gt; reg2.lastIndex;' O6 z' Y) u3 s8 I1 a
0! L1 o& j1 V  j
&gt; reg2.test('Hasdfa')& k# w0 w6 I" M8 e' c# b6 o" ]
true! g5 R0 C' |8 I; t+ s" r
&gt; reg2.lastIndex;
  Y, L+ V' j) |, R5 n" f6! Z! \& x% Y% t! j" J) @
&gt; reg2.test('Hasdfa')% P  L1 l% R, V- Y  f' {: p; O
false9 h5 f$ Z! c, m# N% B( [7 C$ r
&gt; reg2.lastIndex;1 Z% L# c& V' y; B! @
0
- Y5 X$ u! d9 G7 w4 f// 全局匹配会有一个lastindex属性2 w. B; G$ S; p, H0 }3 x1 T8 ~
&gt; reg2.test()  f) a, q6 b/ Q
false
6 j0 h" V( ?1 R" [0 s&gt; reg2.test()
; u2 e# u. Q+ t* W4 R* ]8 o8 X" o# Itrue
9 F7 d: ?% i7 c8 {; d8 ?// 校验时不传参数默认传的是undefined. u; W/ o( E3 Y, f4 }
</code></pre>
2 G9 a: k  y- Y' P5 `6 L7 w<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
7 {1 H3 o6 ~: }. d* c* m<p>就相当于是<code>python</code>中的字典</p>
8 ]  i& q2 K8 K0 @3 o<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}) R7 y& }# W$ J7 D
&gt; person& o, u# I4 N& m& v5 _) @% z
{Name: 'Hans', Age: 18}# V4 x6 d2 V  v, M5 ?5 m
&gt; person.Name' X' N; ^) `8 _
'Hans'
7 \$ I4 B6 o& L& d&gt; person["Name"]
, w& }  C! ?+ B'Hans'. w8 X2 o. S/ d' F, e% L7 c
' K( Z. `0 f- B. c& N+ A0 U
// 也可以使用new Object创建+ n9 g0 z( t% |: @# C
&gt; var person2 = new Object()
- z. T' a7 q1 N) S+ H% \  }&gt; person2.name = "Hello"
& N$ s& k; l+ i$ D: B+ `3 F2 ?9 `'Hello'' x' ^+ x+ j) S: ^1 {) D  Z
&gt; person2.age = 20
: p+ G3 ~$ A6 R20
; ?+ ~4 f- ~  g</code></pre>
- n3 L5 [6 ?( m! i<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>" ?( s8 ]$ m6 h# G5 k5 z0 I7 O. ]5 B
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>; f  ~/ C  [! x6 s: u4 y7 @" f
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
( f2 W* ]1 g3 C' T% G- q<h3 id="31-window-对象">3.1 window 对象</h3>0 t. D! e, z2 T" ^' c% V
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
- k9 E: s% {+ d<pre><code class="language-python">//览器窗口的内部高度+ ]# e7 J1 w0 d$ d+ p
window.innerHeight $ n" x' W) N" f& w3 e
706
9 h. j, g9 _7 A3 u" |//浏览器窗口的内部宽度
( H9 }3 p" ^$ l% Lwindow.innerWidth% n5 s6 n$ F  Y$ i& U  C' Y8 r% X
1522* v8 Y4 T7 A* {$ d! l: f0 }
// 打开新窗口+ H" e, p0 C. r8 _# x9 ]  G
window.open('https://www.baidu.com')
9 x# D7 b1 n3 U* Q& v: K: oWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
. w3 C4 r2 x1 }// 关闭当前窗口$ P% [  ^6 g/ [5 F9 X
window.close()
7 U9 {3 ?$ f" k8 K//  后退一页. ?8 |4 h$ X* x1 P& V! K/ G# b0 b: \
window.history.back()# E' \, ^. k$ c# S2 a: g7 j4 T
// 前进一页& {- U  i, `4 @+ \7 [2 ?
window.history.forward() 1 V( M$ s: `" @# R
//Web浏览器全称; s$ P2 x/ i& n8 z5 n6 b+ V7 @
window.navigator.appName
" w" b- l) _' G, q'Netscape'- T* ^( y5 O* q% F* l- ]
// Web浏览器厂商和版本的详细字符串
- r( W" n' H) Z/ v; Cwindow.navigator.appVersion
1 v- [3 X5 V  ?7 }# b. f'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( Q$ i/ L$ @9 {' I8 a) x  I5 B5 O
// 客户端绝大部分信息
7 ~2 c" }3 T2 fwindow.navigator.userAgent- N8 K$ ?0 v  D$ k. X% K
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
* v% b$ s- p9 \) x. w* F6 [// 浏览器运行所在的操作系统6 _1 s8 ?9 n+ w9 |6 L& e% z
window.navigator.platform7 c0 k3 x8 q( y- M: b, e
'Win32'5 }. M% A; @# W5 \
  ^5 |2 I$ l8 C7 n
//  获取URL$ e) K" P4 ~* V
window.location.href
: F; w  }! Z9 k* v- ?// 跳转到指定页面9 ~" _+ m5 T% Y, N
window.location.href='https://www.baidu.com'1 C2 u9 a3 B3 K: F2 @
// 重新加载页面; t6 ^# H" s2 n* X3 m" Z/ P
window.location.reload()
: t! w4 G3 G# a/ G</code></pre>/ A: k. j" f/ r
<h3 id="32-弹出框">3.2 弹出框</h3>
4 m9 |1 @: y# f# L3 L<p>三种消息框:警告框、确认框、提示框。</p>
; E/ h, c/ Y; E" f) b, F8 g<h4 id="321-警告框">3.2.1 警告框</h4>
, O$ D" t+ `1 r. m<pre><code class="language-javascript">alert("Hello")
. b0 ~% t; Z* X9 f( f2 N9 n. P+ t</code></pre>% o) t" L; h, P# l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
) X7 `6 z' d$ m! g2 {9 T<h4 id="322-确认框">3.2.2 确认框</h4>; P/ U' v! L5 s5 M
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p># u& O+ b- G9 a# D! K
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
4 d, D9 B7 S- e( v* ?; Ntrue4 |  u4 o* Z0 P
&gt; confirm("你确定吗?")  // 点取消返回false
, z' G( U6 L! E. _false6 h" C4 a" D+ g5 d/ u: k' I
</code></pre>5 }5 I. c* p1 C$ ]6 _* h
<h4 id="323-提示框">3.2.3 提示框</h4>9 E0 }8 D9 R% q+ B: u. _/ {. h
<p><code>prompt("请输入","提示")</code></p>
7 {" e( G  l; s% S) {) ~) `' O. l<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
- Z: U5 f. x' m  ^- g<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 _2 a3 L8 z4 |<p>如果直接点<code>取消</code>后端收到<code>null</code></p>  h! m4 L0 a" K8 F. b+ e
<h3 id="33-计时相关">3.3 计时相关</h3>
0 k2 m, u2 n/ @, j8 R. _% e6 r; i<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
: Y7 ]$ q& m. v) N! J4 n; H) t<pre><code class="language-javascript">// 等于3秒钟弹窗  A" u' X& y# O0 j- C
setTimeout(function(){alert("Hello")}, 3000)* n2 u% E8 u8 R8 @1 \

( E; @% Q: y. V% R6 w3 ]var t = setTimeout(function(){alert("Hello")}, 3000)( i* u- k$ A6 c6 v6 r* F

- j1 [5 d4 k  R: ^// 取消setTimeout设置
! Y! D+ G% I, X+ }7 G: aclearTimeout(t)* s1 [. e8 [/ j0 W: a) h
</code></pre>
; G: v+ F7 r7 u" r- D<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
6 T( F; @4 ~0 _& F<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
$ g' H0 z0 c; O3 f6 z6 R<pre><code class="language-javascript">每三秒弹出 "hello" :; N0 j9 D4 J$ I/ [3 i
setInterval(function(){alert("Hello")},3000);
2 v( m+ p, L9 X# g</code></pre>
" L% G8 C  x$ D" d4 {8 _<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
9 h: x$ n% o" {<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
0 T! O- @& l9 b, a5 g5 ^( C! ~//取消:
3 R' c9 J) S( _" g% E+ F6 o+ EclearInterval(t)
% l% D. b$ w. W" G</code></pre>
; {: b( Y3 Z, o0 E: S9 |% Z+ l0 ]6 R5 t. U7 g
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 08:50 , Processed in 0.099806 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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