飞雪团队

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

前端之JavaScript

[复制链接]

8019

主题

8107

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26387
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
9 w/ c7 `& A/ `% W) T5 W; ~
<h1 id="前端之javascript">前端之JavaScript</h1>  ~; q/ ~  A1 Z" W+ \7 S
<p></p><p></p>
# {$ b; A2 A- H/ O) A' I4 N$ V<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>1 r2 i- A4 h& N5 r3 e* K5 L: A
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>" [$ ]3 T. @- T
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>6 D8 C* [1 q: g2 E9 r. U2 t
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
- U  K, l, ~1 O; T5 ?) {* {; s它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
4 p. m" Q8 M* i6 R0 Q<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>$ |% W5 t6 r, V5 Q/ J. ^; y5 W
<h3 id="21-注释">2.1 注释</h3>
: y6 F- H" T- k& p<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
; x& Y/ x; }& }% }) b<pre><code class="language-javascript">// 这是单行注释' J7 b- E- M4 a: N# }$ i$ ?# ]
3 F4 r6 T& e0 k" w$ Z6 M
/*" f* R- x0 s* B- L) p& h  Y! k
这是多行注释的第一行,
4 L; Z7 b6 r% ?. V这是第二行。
9 l2 n' W+ ]8 r0 _. \( C* m9 B*/( u4 ~+ R/ R5 n* {; t/ N3 K5 q  D+ H
</code></pre>
8 M4 i+ M) y7 Y8 l2 F<h3 id="22-变量和常量">2.2 变量和常量</h3>3 L# H3 X" w% w9 N, f+ D
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
( j8 ^# n- N% t<ul>4 M& l3 i: S* B$ A& m
<li>变量必须以字母开头</li>
) h% b6 C/ d% Y  J<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ W8 t6 o. V9 r! Q
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>7 v4 O( G6 _- X/ e
</ul>
; l' u& Z9 q/ `: ^: S2 L! V<p><code>var</code>定义的都为全局变量</p>
" E& N/ D: c, W$ f# T<p><code>let</code>可以声明局部变量</p>
& w! {4 ?+ W- L, U7 g<p><strong>声明变量:</strong></p>$ K( [9 v( W2 ]8 t! m" i
<pre><code class="language-javascript">// 定义单个变量
# `) c! {: D6 c# T( F' w! _, P&gt; var name; R7 {3 o. ~& N& ?2 a; ^7 N3 H
&gt; name = 'Hans'0 ~# L) J3 y+ g2 b. \9 z
//定义并赋值
# ?: h2 T5 y! J! h& b+ H3 R&gt; var name = 'Hans'3 y% B7 n. K1 y1 T! N+ p1 P
&gt; name
. q% ?$ {- M2 |'Hans'
3 [2 [( }0 A* e
+ K4 N, y% C! m+ U) H  V; R& {. }// 定义多个变量
; k$ M3 o' t% g: Y' k% [9 i/ `/ |8 R&gt; var name = "Hans", age = 18
! {) U  l# X  ~. b&gt; name7 x- ?5 M5 v$ l- t
'Hans'
8 m. z# B( N! G9 t&gt; age
+ D! G# h- {5 v" Y18  q, f$ g* a7 V( L

$ j- X) k% t9 j# {9 o//多行使用反引号`` 类型python中的三引号
( A: O5 y% F4 I& f; A+ V9 L/ h&gt; var text = `A young idler,
2 F2 N# l$ a! P( C/ L# i/ Ran old beggar`
- v: Y0 T. z3 }# @, s&gt; text$ W/ y. i5 U, _1 `0 l6 ?# W: {
'A young idler,\nan old beggar'
+ h2 ~$ ]% O. Y' }- i* H& S</code></pre>  O0 X! g& ]9 Q2 c5 g; n5 J6 i
<p><strong>声明常量:</strong></p>
/ m0 w; V, X! s' I7 d<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
/ F4 Z  a: N/ x: K0 b<pre><code class="language-javascript">&gt; const pi = 3.14# B$ ], P% x* I, x7 u/ |- h
&gt; pi  v1 H7 F) ^- V) f- |" p3 h4 z
3.14
, `1 ]; k4 [* W# Y8 X( r- F&gt;  pi = 3.01
8 ~- x4 `+ C6 u) a( ], gUncaught TypeError: Assignment to constant variable.4 H0 U3 T5 m& |, R$ b+ Z
    at &lt;anonymous&gt;:1:4# z1 ^9 r( @( z. ^( h
% V  y) d' G: }  V4 g
</code></pre>
$ u& @/ ]" ]# A<h3 id="23-基本数据类型">2.3 基本数据类型</h3>* a6 z  }& ~( o6 t! ^
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 h# ?4 |- N" Z& n& a
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>7 q! L8 b5 x; N' g5 Q
<h4 id="231-number类型">2.3.1 Number类型</h4>
5 \4 F+ ]. c8 }$ Q/ i4 D! N<pre><code class="language-javascript">&gt; var a = 5/ q3 K7 V& W5 B) ?3 x
&gt; typeof a   //查看变量的类型  
( y8 \2 |8 P. X$ ]9 inumber& q1 l" ]3 z  [/ _4 I
% f* ^: O& r% Y/ F# Y# D, E
&gt; var b = 1.3
9 L, x5 f/ M* R  @- x&gt; typeof b' X5 _6 b! E& U
number* Y4 x! v( X$ {
  v, w% F( f- ~2 t9 B# i; ~* |( S$ s
// 不管整型还是浮点型打开出来的结果都是number类型
+ X: [; p4 R+ Q5 D! d7 j! v4 V( \% T' c! C
/** i! X5 R4 R- ^$ v6 z# y% Q
NaN:Not A Number" ^8 X2 a- h+ c
NaN属于数值类型 表示的意思是 不是一个数字, N2 C  X4 {0 O2 h
*/
6 ]5 T. B  H1 `4 V6 `# x' z" f! [% \( g, o( [: A9 J! |
parseInt('2345')  // 转整型
7 @5 X# c7 W8 @% B- Y( g23459 f" ^% }+ q+ s6 ~$ p- B: ~
parseInt('2345.5')
1 u* B1 |1 C3 {. P2 l6 c2345& M3 y' L1 R( _; G4 J
parseFloat('2345.5') // 转浮点型; @4 g9 W1 ~* I* z
2345.5
' y$ o. k) O; U) }2 o* B8 @2 sparseFloat('ABC')9 n1 ]* \1 _$ u4 V' J8 U
NaN3 T5 s, S2 J2 z7 p0 _% {5 e# W
parseInt('abc')
" x: H  F  ]) T( `NaN
9 \5 u3 @  n3 }1 e! ]8 v</code></pre>
/ u3 V* _) E) [& E, I<h4 id="232-string类型">2.3.2 String类型</h4>/ V- e$ P" C+ E5 H
<pre><code class="language-javascript">&gt; var name = 'Hans'
/ x+ r+ l- K; K3 q6 G$ b&gt; typeof name6 T$ U8 O; t9 c. V1 }
'string'
2 N6 v2 a& c; |4 I. l+ _: T
; J" Y' G; F! n  g( M' a4 u//常用方法) G( w  i! ], U+ N) V- d9 D* e9 O" O
// 变量值长度
, E. k) J5 x4 q/ [3 z# {& O&gt; name.length. i: `. q) ]  z2 U9 C! n* {
4, T1 r4 y% X7 K+ S
// trim() 移除空白7 Y0 W$ u$ u& K
&gt; var a = '    ABC    '6 z3 c5 e" S6 x4 @
&gt; a% ]3 |: {% O. y. Y* W
'    ABC    '
8 N( v  Z( G- \+ y9 F! `&gt; a.trim()
3 I8 y, ~  F5 H+ \'ABC'
  M7 K0 U9 o+ I: G; L) \//移除左边的空白$ X. b% [; r. P0 b
&gt; a.trimLeft()+ X1 c3 x0 |* ^, R6 s% K
'ABC    '
2 G" S6 g7 e8 s: f//移除右边的空白6 ?/ P6 o4 [  _4 V  v3 c4 k" [- a
&gt; a.trimRight()
# l0 [6 s6 o$ \1 p8 t5 p5 o# T'    ABC'
6 N- K) V* `& t% q! m2 t
9 [* F0 ^- a" q  R; g2 t//返回第n个字符,从0开始
/ Y# n* H6 R+ V( [. M4 f* C&gt; name
5 E) q( N+ U  r4 @, \; q' x0 L'Hans'
* C! ]/ d! A9 ~. @, R&gt; name.charAt(3)
$ X0 O' f+ P4 Q: O6 m, B's'& o! ~6 Z% l) S  P& Y
&gt; name.charAt()! z! d. R# z8 J( o8 M0 ?2 a
'H'
. y# N) Q4 v3 K; q&gt; name.charAt(1)2 q% \4 t- g+ d. h. |3 l0 \/ n: M2 B
'a'
- x& }7 O) F. R2 I8 a6 Q: i  w( e  c5 k3 Z( H0 O8 R1 o
// 在javascript中推荐使用加号(+)拼接: z/ i" a$ d  _. a, I+ Y$ t' {
&gt; name
, l/ e! h+ b% P( P1 |- k'Hans'4 [7 {4 n8 E; b+ t
&gt; a
  f6 A  c- c. ?4 m2 z; f/ @% K'    ABC    '
$ V) K$ G% R3 t# B&gt; name + a, r( ~, \% S4 _, S% p7 c7 d" i
'Hans    ABC    '
; ?2 H8 d* V% M// 使用concat拼接
, X. Y* v. n$ ?& Y7 P/ R1 V* z&gt; name.concat(a)
) E1 s6 G6 B- i  `& P'Hans    ABC    '1 z2 A2 y" S$ b( `$ i2 k& E1 B
! }* x3 H8 c5 D+ d
//indexOf(substring, start)子序列位置
! o9 {  J/ Z% W+ u- D' B
( ^% N) S: d( u1 o/ ?$ u( ^&gt; text
, f0 s' w$ K; w$ \, {, J2 b( p'A young idler,\nan old beggar'
/ x3 o* V2 i# }- d6 l' B&gt; text.indexOf('young',0)( G* o3 J; ?4 [* p/ |. `" s
2" k+ S: F% ~  C2 l
$ {' \, a' h& X. H. v" h3 Q( ]/ f
//.substring(from, to)        根据索引获取子序列5 D, ?! g4 X& {) e$ i
&gt; text.substring(0,)
0 l* a( Y( N5 ?  v'A young idler,\nan old beggar'6 W3 b1 f' }7 P8 |* _% H4 |
&gt; text.substring(0,10)
/ p0 o. v2 \- Z'A young id'% @1 z) V, K+ a
2 }6 [* x; l) Q* ~" d! |) ~7 a
// .slice(start, end)        切片, 从0开始顾头不顾尾% l1 t4 B$ x1 C$ N- H2 R, ]
&gt; name.slice(0,3)
0 ~1 }! g# q% ?4 i'Han'
5 c" J* m7 b0 f# U6 k+ K" B; D: e4 R: k
// 转小写
! D3 Q5 i8 Y. n  C&gt; name6 I$ M8 \7 z$ w9 v" S6 j/ F' A
'Hans'3 b! p$ _# P3 g6 P9 J
&gt; name.toLowerCase()
% ?9 _' ~# A: x  P'hans'
" r. q; E3 q: R6 y// 转大写
; |3 Z  N5 i3 \* z* n( ]&gt; name.toUpperCase()" A8 z) r0 X8 E4 A; B5 x9 j- @! i) U
'HANS'
& K- |$ m- y0 D% c9 E* a  A! F0 c$ h
// 分隔
4 K+ m" Q( x1 Q: w, x% q&gt; name
; i8 Y) o' E6 n" s0 ]. F'Hans'
, d! D2 V5 |3 m5 t$ W+ |&gt; name.split('a')7 b. e0 t% O7 ]+ i7 P  ~! b
(2)&nbsp;['H', 'ns']6 g/ x6 \. h5 d( E6 u% v* ?# y% Y2 l
</code></pre>
) z8 E6 H/ H+ R% m<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>5 k9 w* L5 W7 c6 z' S/ ^% i
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>1 A- C% [" ~( L! ~
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
, [2 D0 x- x# k1 z<p><strong>null和undefined</strong></p>: s' C- W" L- M$ O. Z. i
<ul>( f% o8 U0 I1 m4 }
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>) U' T/ p, I: h+ I. a" ?4 N& j
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>) P: y0 ~% M- G* p
</ul>
  `1 l& v1 |, c7 [; [! }" Q<h4 id="234-array数组">2.3.4 Array数组</h4>
$ a4 M( [" _& @; u: D  ~<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
# T9 ]" I/ M3 ^<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ' Q% N6 ~6 j2 I- i! }0 x3 T
&gt; array1. D/ s' j: D" ?  ^* y
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 p2 c& E% C) }) J% m8 ]
&gt; console.log(array1[2])  //console.log打印类似python中的print
: X8 ^7 A7 }/ Z! V3
, m7 _/ y+ z* V$ f- k2 `8 y  Z* y// length元素个数% T% Q, z8 y/ y% e2 v) f
&gt; array1.length
) D5 s: B; ]8 r0 Y, |) \. C6
3 Q7 [+ E; L9 M- v5 p7 Z1 f$ x7 @// 在尾部增加元素,类型append
/ N# S  f  o$ r! Q! C  I% j&gt; array1.push('D')' M0 u. b. R- p: J
7
$ S6 I! d, k1 v/ ^- Z&gt; array1  X5 g7 f$ @; C
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']; e. D( t8 ^4 Q. k
// 在头部增加元素9 V" j, j- W/ m% `: t
&gt; array1.unshift(0)
8 w# S  l% K) s0 j% \0 O+ G3 E89 Z8 l: g2 v1 V; m8 C
&gt; array1
* U+ Q$ @" `, K: y0 N(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
: d8 h7 ]( G5 f" Y# J) Q8 r& z: G+ C9 |
//取最后一个元素7 ~! J; _0 p; T% _" J, G$ V9 y8 h$ P: ~
&gt; array1.pop()+ d8 t# m6 a! N4 o- s
'D'8 q! y3 w) A% x# I
&gt; array1
" i- f* b; R, \+ N: G(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']7 ?; _* a  `4 M1 A
//取头部元素" e" f, [" c7 e0 j  c  }  w
&gt; array1.shift()# D3 Y! G6 @0 |2 ^7 g
0: K  D) J$ j8 o1 }$ ]/ l7 s: K# C- p
&gt; array17 Y& w4 ~/ S- S! |: B% E3 w
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 y8 Z( _8 `. w, m: \4 a- \3 c2 N9 z/ O  h* Y$ o; P, }8 w
//切片, 从0开始顾头不顾尾# _8 `( ~) E; [
&gt; array1.slice(3,6)4 R$ |, n4 |- X- j, B
(3)&nbsp;['a', 'b', 'c']
4 D" W2 i9 e/ n$ z// 反转
9 F- ^+ ]& ~$ E" A&gt; array1.reverse()) u5 C# N: O- Y  x7 R. C
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
- {0 w8 _3 Y' ?0 ]" ~% S// 将数组元素连接成字符串7 |- i2 K! {  J
&gt; array1.join() // 什么不都写默认使用逗号分隔# e, ~; [  Y6 y& K) h- _
'c,b,a,3,2,1'7 n. _2 _: \( C0 ^( p- _
&gt; array1.join('')" b8 v5 j7 j; e8 B) _
'cba321'5 T1 r- t! W2 Z+ d: b9 y
&gt; array1.join('|')$ F! c: U( }; {' P/ J/ a. I
'c|b|a|3|2|1'
  e. _# D: a( x& Y% x7 b; w  l; c, D5 y8 ?3 K7 X" E
// 连接数组
' k- M; b: L' M* O&gt; var array2 = ['A','B','C'], ?- @! O1 u! O% G- x* P" S; ]
&gt; array1.concat(array2)
+ w' T, K! J5 @+ l(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
5 R! ^; H5 K1 U  C  U$ ~0 j1 c' T" n2 u/ v. m6 h1 d
// 排序
" e8 G- r' h* o/ |  p+ M&gt; array1.sort()
$ f% j3 Q$ ~! j/ ~) k0 u  P% c(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']2 A* c, K$ C* E: Q: i; n. Q. |

) f& G" g! S+ ]! v) f// 删除元素,并可以向数据组中添加新元素(可选)
% X8 i4 h2 q0 \! |5 E# w&gt; array1.splice(3,3)  // 删除元素6 N  W" \) I) {4 C' _
(3)&nbsp;['a', 'b', 'c']  @" Q1 b7 E4 h- a+ q8 _* U
&gt; array11 ~5 f: h7 E: r4 }8 x
(3)&nbsp;[1, 2, 3]7 \% ?1 F. N9 y& h
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
* n; Y5 j- P7 D+ c5 ~2 T[]. A, T, M  r$ G0 d5 ?
&gt; array1# G; J" g4 n, U
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']" l8 B# c4 {  w# ~& E6 x
( G" r5 N  b) }  a0 i
/*
% D, Q  x" j5 l8 z4 y6 ~splice(index,howmany,item1,.....,itemX)5 Z& h; L9 F7 b' A: \2 T
index:必需,必须是数字。规定从何处添加/删除元素。3 B7 E, j& D2 C4 _
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
( `9 f1 U  K% C) Iitem1, ..., itemX        可选。要添加到数组的新元素. c! @' X! l. J! p+ w, U
*/! i9 u/ B4 T+ f. ~6 o

' [6 ^# o! P$ M// forEach()        将数组的每个元素传递给回调函数
' h  r. r2 z* V) D! A2 C1 }&gt; array1.forEach(function test(n){console.log(n)})
* C, v" c. {' R9 `2 l2 c3 a 1
0 K) _" w1 b# v2 \5 [ 2
# |$ G8 L* Y. `' s8 T- ?1 U( e* P9 a 3
# ]: A# w& k: L; n# J3 v4 B6 ` A
4 C7 v  t% ?; b' ?! W: Z" K: M B
( y" p  ]; i; h; z- g, o1 {+ u+ G$ c C5 T7 x/ z0 @* k
// 返回一个数组元素调用函数处理后的值的新数组) J  T) p0 A1 V8 g3 |$ J" E
&gt; array1.map(function(value){return value +1}): C' x2 \: l; t1 R' n
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
3 g' L) P# E5 V; z# I. V' l6 L</code></pre>8 w( |, O& a* @  E4 {7 h
<h3 id="24-运算符">2.4 运算符</h3>) O, Y; E% Z" p+ w
<h4 id="241-数学运算符">2.4.1 数学运算符</h4># f" d* y& r& `  y
<p><code>+ - * / % ++ --</code></p>
4 ~; l" n; C' M<pre><code class="language-javascript">&gt; var a = 6: [" k6 F# x, z
&gt; var b = 3( Q# R; ]; U6 }% V
// 加
2 y5 B: \2 c1 C3 f&gt; a + b
( ?* Z4 F) ~% r, D! L9 E# N. w9
6 F0 [: l$ c4 ^$ _# t7 i// 减
5 L- ]8 }7 e$ E. T: J&gt; a - b4 d! M: f; a  a4 R1 J
3$ D5 R; B, u6 r# C/ Q
// 乘
! U4 Y* m. C  y" w8 j/ |6 S. Z; h&gt; a * b
% V2 B1 y5 \. B# N$ D18
% |+ `9 O: M- q$ V; G// 除% Z1 u8 d9 F  p7 \3 g! ^
&gt; a / b) A) Y* X! R% a% {7 l
2. n; }+ z. |' u+ |1 b
// 取模(取余): d. ~! c4 K- C2 j
&gt; a % b% i% Y. `+ B  L; S, C. x
0
! B2 ?! c8 a: m5 a. h2 ]1 B) H// 自增1(先赋值再增1)
9 P/ \* M# q) A! F% O2 \6 u) \&gt; a++$ t3 B1 E( Y; O8 o  `
6
7 r) K/ X; v8 q# b2 H3 U  {* ^8 Y&gt; a
* S" e  w$ W9 s4 u) V8 X  R# o73 [: a6 B: k( U5 z& w2 n/ Y- z
// 自减1(先赋值再减1): z+ q& T! M5 [& L
&gt; a--3 v9 W: S( F2 Z9 [
7
: `8 f1 B+ x$ q&gt; a
6 w- p5 Z6 e) ^0 @: e* S( e5 y6: W6 V. ^# y- c
// 自增1(先增1再赋值)8 r) j6 S# ], S. d- L' P( S4 R* y
&gt; ++a
3 W9 o' @1 t. w+ I9 s% U1 o7
/ d% @" \' }8 N' }3 ~/ c- V, Z// 自减1(先减1再赋值)
. _8 `: i3 V" c; t# A6 ]/ e. K- i&gt; --a; S- [1 h; |. k  X1 v' x- `+ c; n
6
: V  ^0 S5 p! e" @, i. A, X&gt; a
2 w/ s8 r. E. U8 w; q  O. S6
  \3 {" X( J6 C: N  r0 M9 G) W: Q% }) y. h+ i- E1 {( e( Z! R
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理; x$ f9 k8 @8 O- `  m" m0 d( g
</code></pre>1 N5 ~+ C" s5 m+ {
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 R( }; O3 e% L8 f( r! G<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
/ C' v2 M7 o/ i7 N8 _  L; x- T. M<pre><code class="language-javascript">// 大于% l, T. t9 g( \7 l" o0 [  r
&gt; a &gt; b
0 j1 a( o" E- Y* L7 B; {. `true: q5 A: [0 \6 N+ [0 T+ _8 h( l
// 大于等于
- |; m+ F7 l' N3 B+ D&gt; a &gt;= b
$ k( n6 S! o$ r. ftrue
) x( g/ P$ ~2 u8 l0 {7 P  O// 小于3 [" \8 O% X5 E
&gt; a &lt; b( P2 f! q- L0 @- M: j. S
false
# y4 n# N4 s4 @# q( U% Z- ~// 小于等于8 s1 f8 @# Z' k* F$ S5 W2 s
&gt; a &lt;= b' r) Q2 g) E9 c) e5 k
false# p! C% C% e6 f1 K
// 弱不等于
* @& Z9 C$ f0 s&gt; a != b
$ S) l- g+ Q" N) |4 ]6 M2 ~5 Ytrue; y9 f4 m) T6 c* w7 \3 f9 b5 ~
// 弱等于/ n# D# l! ?0 _8 R
&gt; 1 == '1'
5 [0 v; C9 Z2 h2 a  o  Z1 l; f0 ]; Itrue; d5 n& }9 F) Y( I: Q8 Q5 K) R
// 强等于
) s, w. s' o1 l! z" O; n&gt; 1 === '1', a6 w/ q: ~8 O
false
+ R5 o5 V- r% n- h5 e' |% w// 强不等于
4 ~" ]* z8 s8 ?1 ?" {  \! T&gt; 1 !== '1'  B& y* H. l2 V; H' E  a* {
true: W8 w) U+ E- N9 y7 E9 ^

) A, D3 _2 ]$ Z5 B/*
0 w( F$ U7 \0 B/ I/ l' EJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 [+ {0 u  I# [- j7 T
*/( b. j6 B" @; x
</code></pre>* t4 Q; p! h# n4 k
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- V6 l6 T4 P# g+ y  F) c. t<p><code>&amp;&amp; || !</code></p>0 D5 y2 K$ c. k
<pre><code class="language-javascript">&amp;&amp; 与
5 B8 \, n& n* ^8 U5 S0 B# U|| or 5 K, }# Q* \6 I8 F
! 非6 I8 O3 z  F! f- H0 r; N# r
</code></pre>3 v' Z4 K1 |# h3 l
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>: F5 y3 O5 u* G
<p><code>= += -= *= /=</code></p>. K; _3 Y1 H4 n. |1 Z
<pre><code class="language-javascript">// 赋值
. M: e/ z  o+ C& [- g* {$ q+ E&gt; var x = 3* z/ M. U: u2 y! o
// 加等于! g7 `# G4 b0 u! D
&gt; x += 2/ z8 l- Z/ A. n4 i
5
" x2 P# l' g  v// 减等于
) G. n$ ]7 [5 e# j6 ~&gt; x -= 1% W1 q3 s5 f% B( G2 r
4
1 |0 }6 F( L8 z5 L7 n1 x// 乘等于
9 m  b5 }5 W! J  o4 f4 g7 a7 F$ E&gt; x *= 2
9 n1 A  i+ p$ \3 [; \5 i. K: K8
/ r$ k% ^  D% ]' m// 除等于$ x3 [" h) [4 |& y0 y
&gt; x /= 2
) b. ?$ k/ ^! J$ }! }! s5 c/ X4  ~" H7 T/ R" T$ i! p2 c( L$ q
</code></pre>- B9 N) X/ J% R- r
<h3 id="25-流程控制">2.5 流程控制</h3>$ i# F2 @  ^& ^
<h4 id="251-if">2.5.1 if</h4>
0 X' H; M% _# ^3 h% C<pre><code class="language-javascript">1, if(条件){条件成立执行代码}9 f4 E7 n7 ~& z1 w6 S

/ \% w* P, W  V# v! s+ D&gt; var x = 3$ \8 w4 W' h9 e
&gt; if (x &gt; 2){console.log("OK")}
0 S# j+ `5 ~4 _0 n' m OK
& Q5 s3 _% K4 f: ^9 c/ U% o9 v/ l+ s1 Y0 n8 [( M9 p  u; {
2, if(条件){条件成立执行代码} 1 B+ C# J; W6 i/ Q5 }: t" }
        else{条件不成立执行代码}
' a# g( y) t& M2 z* L2 Y# |
/ f) O7 |- D0 ^* M# J&gt; if (x &gt; 4){console.log("OK")}else{"NO"}4 U# J4 S2 l* s! X& z" e9 L0 V2 u
'NO'6 J2 A$ F+ C7 q, d7 y

% W+ e8 I* ^# k; @% c0 a3, if(条件1){条件1成立执行代码}
0 q; L2 s8 n/ ]; ]        else if(条件2){条件2成立执行代码}7 M6 o# j/ |9 \. c$ t
    else{上面条件都不成立执行代码}, l* c' W5 q: t; N4 A! O8 K

( Q* ?, S" `) Q# E6 B&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
; R" ]; n, n  W Ha3 }" t) Q% @  i$ g
</code></pre>* h. }' @2 u/ N4 ?: _
<h4 id="252-switch">2.5.2 switch</h4>
7 D2 Y; \* p# m<pre><code class="language-javascript">var day = new Date().getDay();
5 \8 z  X3 H) G. Qswitch (day) {
$ l9 x* ^( G3 D7 ~1 N" P# w$ R* T2 C  case 0:' D4 l6 E# b/ w4 H
  console.log("Sunday");# ]3 u& P- o( {( D; u% T7 j
  break;7 f: m. P$ a+ S2 I
  case 1:
- V+ t% m+ e0 E. R0 R, G  console.log("Monday");4 W' U  a7 ^4 Y9 `& m% Q6 \
  break;
1 Z- t- g, {" _3 a8 R' }6 u# \default:5 I( X; [3 q" M3 k7 v: b8 U6 B+ Q
  console.log("不在范围"), V( z( [$ U. e1 j: a0 m$ \, a
}
9 U  n3 q1 i/ L  n, G% J 不在范围
. R2 l. H9 `: L" j6 Q( \% x</code></pre>
7 D1 R% o1 |; _9 ^<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>( m5 z- m0 t' ?. b
<h4 id="253-for">2.5.3 for</h4>7 u7 W) R/ T1 j) Q. g- `. N; h& t
<pre><code class="language-python">// for 循环6 M; x6 a+ k2 \# f& D$ ]" \
        for(起始值;循环条件;每次循环后执行的操作){
2 Q  h+ O% y& Z6 s" ~        for循环体代码4 w% M2 H& ], H: \7 a% n3 T
    }/ s, z2 i9 o3 V9 y4 ?- a

, T) p- N4 U7 Q3 \for (var i = 0; i&lt;10; i++){
% I) U2 p* B  X% z    console.log(i); [7 l7 H' @& v
}. d' j$ @( O0 g8 J$ U
        0
* I) o. X4 A( v; ?9 ~        1
# X- i) H. u) c- i        2
+ ~% G5 ^' U! X! n        3
. i, ]2 v" O  W        46 t8 {# x/ o: q4 `! @
        5
1 r( q; \" P( i- ?        6
4 r! ~. V) f6 j, p& a4 k        7& A* u! P2 r6 A# q; W  B# F
        81 ^& n) Z3 {7 w5 y' N" R
        9
" r/ {" ~  e0 G" e</code></pre>7 p% Q$ J: m* U5 k; I# M! q
<h4 id="254-while">2.5.4 while</h4>
3 b/ Y$ n* c! z' ?<pre><code class="language-javascript">// while 循环6 O% {. k' l  I1 R  K
        while(循环条件){
% N  o7 Q7 q3 a6 ^- W- ?( k        循环体代码( l; k0 J' T2 T* u
    }
5 P! E& |* e# q& u7 `5 F/ i8 O9 \- ?6 ~6 Z. W5 z- ?3 S
&gt; var i = 0) _( U0 |2 A$ ^
&gt; while(i&lt;10){
6 S$ f3 l. J: k$ B& P3 J    console.log(i)9 |  j9 j& E: p- U6 G
    i++
8 [; D, E) l8 ?9 D; z* {6 z9 r7 q}
% f2 a! m/ k2 G4 D6 H 0
7 t6 M, T$ ?8 Q! E) h8 Z 1
+ c, ~. d& }) O& H; r4 A 2
* H$ O: T! b0 \5 g9 j 3
, p, N# O9 e' U 4
/ x6 B1 P; G8 D 5
' {9 q2 c$ z) A, G/ t 6
& B+ q- K) F1 P" V) `- h) s" z 7
& Q! l* e' s0 a: u: K- @9 b 8. E$ e+ u. N8 x+ l
9
/ ]; W* v4 K$ r/ R5 Y</code></pre>
& w1 m1 R! w% ]( G# W3 [) v4 Q<h4 id="255-break和continue">2.5.5 break和continue</h4>1 ]; }0 p, _6 n- |  g
<pre><code class="language-javascript">// break6 R$ ^) A1 l/ @5 o" R" j
for (var i = 0; i&lt;10; i++){# T7 s) W6 ~8 W+ K* c
    if (i == 5){break}0 ]% d6 I6 o% e4 B, ]
    console.log(i)
7 e4 G' w8 G0 I  o9 K}
5 i4 \2 i7 C. @& S2 f5 x 0
9 C8 D0 {+ K1 D 1" V) s3 @5 {  x* e$ |( U
2; J. |) j6 S  O0 |
3+ A$ w2 k3 r0 E9 k% e
4
& ?7 A2 B8 G) m# B% O- l$ f# x  Y5 N// continue0 A0 Q  g2 b2 S$ R  \0 v6 U8 ]% p7 i0 m
for (var i = 0; i&lt;10; i++){
( n9 I2 ]2 K2 L/ n# F% Z: {    if (i == 5){continue}
2 S% S- I' Z- H) a& Z    console.log(i)- [6 T4 g: F% y6 U
}2 l# Q- n/ i* K& \
07 K( E- P9 L. o3 D
1
' Z, j/ _6 @* @ 2, M- }& T6 U) @; a0 u' y. C" t
3
' P) @/ H" d$ v6 J$ u# u2 j 4
; f( ?7 r; q8 S9 P/ W8 o+ V 6
! f2 S8 y* H9 S6 W 7
8 K  u3 e4 V. R7 A$ M8 q 8* U, k+ z( b) R+ }3 m- a
9
6 D% ^: Q" a6 T5 m* v2 @0 n: b2 c$ t/ M, K0 [
</code></pre>
% h% m4 {- c. `9 x! H' [9 l9 X; l5 Y+ w<h3 id="26-三元运算">2.6 三元运算</h3>  L; h* ?4 I2 B% j7 r+ t) S: Z
<pre><code class="language-javascript">&gt; a
) l7 ~" u" b& Y* C( I0 {+ e- M1 r8 {6
1 v# E# m. V# S6 w) @1 Z3 G* [&gt; b
: M' }6 I8 ?8 ?/ U$ \4 C37 C8 n$ ^$ ^( [, d

% e( S4 p& \: s4 l6 m+ W- i8 S//条件成立c为a的值,不成立c为b的值
. K# ?1 G6 D2 r% T' R0 _1 p&gt; var c = a &gt; b ? a : b
) P: Z! g& R' W) h0 h7 t+ z4 ^7 ?&gt; c3 O: E# x- J8 {4 \/ _  j0 Z
6# r. H5 g5 D& M
- _  ]7 B4 A4 D. }5 n. w
// 三元运算可以嵌套3 Y+ Y* ]: Q4 _2 Q& E4 ]6 I
</code></pre>
; G! T5 K5 h8 Z/ u) ]+ I: ]) T<h3 id="27-函数">2.7 函数</h3>1 d9 Q* m; E  y1 b7 s# w! ?5 o
<pre><code class="language-javascript">1. 普通函数
: {  `: ^# _& l# ]5 R$ a&gt; function foo1(){8 b/ D/ q/ E* B) h2 W7 r) q# s8 _5 b
    console.log("Hi")2 S( m, L; i7 @" W# u* {
}2 U7 t$ n1 e5 O7 |! o  I; d
9 T6 H2 c0 |. W  M8 J& V. a# c' I
&gt; foo1()
9 o3 r1 L# L0 r0 r" I        Hi: p1 G3 O; U( `
2. 带参数函数
0 K5 c+ V1 O: D% @$ }' |$ v" D7 I&gt; function foo1(name){
) `9 ^: C: F$ V! @) i/ ]console.log("Hi",name)( a- ]7 |; X( T, o. [( o
}/ M- m  ~3 w/ W/ |" d* B# J
! |% R6 q2 B( M+ X5 \* q  h
&gt; foo1("Hans")
+ Z3 d9 y4 p7 k  q" xHi Hans3 g, E' S) V& h. C$ j+ X

# V; D7 s8 [" a5 S8 b( {&gt; var name = "Hello"
2 |- w7 L1 S. w/ T&gt; foo1(name)
+ @* T% Q$ s: z  ]9 D( A+ V  Z4 t5 pHi Hello* S$ O, Y  ~8 q

$ D- p8 u; _2 v0 L  m3. 带返回值函数
" C; @8 `+ {+ Q- m, _1 Y! q* P&gt; function foo1(a,b){: I) {4 u* n; @- X1 d
        return a + b   ' w  y  C# p' k2 v
}$ M/ V5 {0 w: T% u& l: e7 s
&gt; foo1(1,2). b1 i; p! h, g  @
3
% `) I' L, r. Z, |, s4 R- c&gt; var a = foo1(10,20)  //接受函数返回值0 ^# N  {/ g9 i" p, e
&gt; a, X& p) n5 w; Y9 M2 B- T
305 e1 ^7 z0 t0 a+ L( Z5 @1 g7 s
# |, o, p9 r' q' m! Z
4. 匿名函数3 P2 q, ?) h# @" p/ A& Q
&gt; var sum = function(a, b){( V; K( Z. b' d6 l5 j1 |
  return a + b;
- Q7 N7 x7 O( r- g}4 K" @4 ]2 ]( I# A
&gt; sum(1,2)
, v6 M# G- \1 i4 q3
' G# b$ g0 G$ v. r& i$ H0 p! r8 O9 @
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
+ x0 {* X! l7 l3 x3 l9 ~9 Z&gt; (function(a, b){: q, M. q; `8 G) q  }" C; N- F" F: z$ [
  return a + b! U; v) i3 i* y
})(10, 20)
6 B2 N- r6 i# O" I; X30
2 r% i6 J- [* M0 {: I( `- e
  T; h. ~* `' O/ [. s3 A5. 闭包函数5 X8 W4 S2 d# i. O+ ?' ^0 `9 y8 u  `2 A
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数# o* x+ p! k& t9 k
var city = "BJ". w! S9 T' J* u3 S# L: i  s
function f(){
$ S6 |4 A1 R9 b    var city = "SH"
4 n- H  w8 \) d% k    function inner(){% I9 h$ }$ S9 \5 K# t" W7 I
        console.log(city)
4 H2 ^! H4 z& J! g% P    }8 [/ x$ ^/ Q1 j7 j# f- E& G( Q
    return inner
* t* a/ a6 N% c$ e0 O4 d' |. y}
. V& v0 X% M  N2 w% M6 Evar ret = f()
# M( Y4 `6 {6 h  p$ Xret()/ a2 N6 S1 f+ Z% i7 z  o- b0 U
执行结果:
; f* a+ M1 I+ U# T$ \# k: rSH0 x, l6 b3 T, M- v
1 ~! h* ~- Y8 J0 S5 {% N  k# D
</code></pre>
) u* i. q7 D. R) r<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>- z8 d- }' \! P/ X
<pre><code class="language-javascript">var f = v =&gt; v;
* m/ H/ y: _. O8 `// 等同于
7 B+ z4 p# A+ A& s4 u" R4 mvar f = function(v){
- x+ @% G2 V* m" [2 {) I2 E  return v;
3 S: D( y4 ]) j: b0 A}
/ N+ v# s4 q" T, y, U</code></pre>
2 w3 K' a, ^2 o' f$ P7 F' M4 ?  r<p><code>arguments</code>参数 可以获取传入的所有数据</p>
9 O. \: @/ r' a2 I' k<pre><code class="language-javascript">function foo1(a,b){! m( h5 H/ i: [- X$ X
    console.log(arguments.length)  //参数的个数
& V6 ?1 ^8 o# b1 ]4 D- C, c    console.log(arguments[0]) // 第一个参数的值
3 @6 H7 P% X- Y0 a        return a + b   * [+ ]% n' A1 T- O9 Z! j
}
! w$ A  B+ Y- T# Q/ g% m1 afoo1(10,20)
* _* O3 r6 E/ T. s# ]7 B结果:- }8 b0 \) h( k
2          //参数的个数
: i# J  m; H7 r$ d. T10        // 第一个参数的值5 F* X, X# R% @6 d( F
30        // 返回相加的结果9 p  _4 B$ W/ _1 W0 b# ?  w. [8 M2 Q
</code></pre>
; i, |& N9 T# `$ z- P* }. |; c<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
# p+ p+ h  E2 _, f& p<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>' q4 \6 n' {! Q2 b% f( N, {
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
8 b# g, @7 t2 I, V" T: k8 k- D# G<h4 id="281-date对象">2.8.1 Date对象</h4>) w( |- R$ E9 R
<pre><code class="language-javascript">&gt; var data_test = new Date()
) F" ]. I# V- F$ s: d9 I' k; b; ?, B4 \" L&gt; data_test
/ }2 S6 R+ |0 f6 Y: n% gFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
! g" p6 ?8 l! @7 \) ]  ?&gt; data_test.toLocaleString()
+ y$ @% {; N' p) @1 ~  v'2022/2/11 下午9:44:43'
& ~6 x0 {, e  w1 t
6 _( h  b* V$ l3 M3 v1 j/ {&gt; data_test.toLocaleDateString()- V9 B% g8 L0 s& ?
'2022/2/11'* e  K& M: @7 d, }! |) ^

9 O1 H- [  k4 w9 G- K' n- L&gt; var data_test2  = new Date("2022/2/11 9:44:43")8 P/ r, {4 V( V- n( r+ L  Z# g
&gt; data_test2.toLocaleString()1 S' _9 F3 Z2 i& r
'2022/2/11 上午9:44:43'
" @* Z( c; h' \$ v# k1 M
- ~' j& x; C+ W6 D5 G0 x% q* {// 获取当前几号
# H& m/ N* x( Y: r&gt; data_test.getDate()' E4 O9 }% c, ?0 n
11
  \) }) R5 X+ r  L// 获取星期几,数字表示
2 W! H6 v# a0 \0 M" Y) {$ Z3 y&gt; data_test.getDay()  
4 z# O% J; H% A: G5
4 J. a( D5 z6 U  Q// 获取月份(0-11)
4 q% z# K2 N0 |4 `5 \* d&gt; data_test.getMonth()
6 L# h- o/ [! ^! p1
7 k0 K5 S; w9 G# Z: }; ?  t" K// 获取完整年份
" w/ ~* ^: O4 g2 ^& c) K&gt; data_test.getFullYear()1 x/ x) ?& Z) }
2022
( v' t/ p2 q( ?" i) S4 n$ b// 获取时/ f5 p' ]7 }- Q5 _$ s! H
&gt; data_test.getHours()' N  P- k/ z+ s% t2 j" m
21# t; d& u. N3 k: C; d, `9 p  g2 J& |0 I
// 获取分- a! a1 m3 X3 X- ?. S( d( P
&gt; data_test.getMinutes()
" W$ M6 k! ?% y3 B6 Z44
2 b! u5 `. E2 r1 K// 获取秒
0 X. c) W- ~# F  H- J' h  p& R&gt; data_test.getSeconds()
* ^  ?* O* Y% o9 ]$ d43
$ Y& g, Q9 n  J. p% d// 获取毫秒" n6 q' c4 h- C' Y8 x
&gt; data_test.getMilliseconds()
7 C0 c; _1 D" l2908 _/ |! B. ]% z( e/ g' u3 A
// 获取时间戳
6 R* A6 x) s, v( D7 H2 m&gt; data_test.getTime()# h$ w8 h4 h  ~6 o, G
16445870832904 z$ f: b& @1 g8 f5 ^; L2 D$ q9 R
</code></pre>/ Y: u/ k7 Y& P6 A
<h4 id="282-json对象">2.8.2 Json对象</h4>
' J. \: P5 z$ n: }- M" I2 T' |<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
8 x- ], a8 _. y; H/ UJSON.parse()  // 反序列化,把JSON字符串转换成对象$ a( l0 p* Z: _

3 q( V+ f3 Q2 y! \2 N! L// 序列化4 l, i% _$ k9 |1 I: @5 G$ p6 h
&gt; var jstojson = JSON.stringify(person) # C% q2 ^( ^3 e: _! e' X3 P
&gt; jstojson  
. Q! [. s7 F8 `; W* R'{"Name":"Hans","Age":18}'$ k: {& j: `" r2 g' `  e" f; S2 A- T

& |6 t2 d6 ~" v- T. `8 @: H( c// 反序列化
6 l6 `* k  P, ~/ x- p&gt; var x = JSON.parse(jstojson)
- M/ i" k: g# o1 X* t&gt; x1 z  v+ l: q7 C, z+ D+ U1 e* @
{Name: 'Hans', Age: 18}" K% E0 U- _; W, Y% r
&gt; x.Age
7 u% r. j& ^3 W. ~5 L3 {182 c6 |, s$ r% U+ j
</code></pre>5 @$ z, b# |* A
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
% D0 C3 x1 m+ q# M+ h( H- R6 ^4 i<p>正则</p>
) d9 z$ c! D1 }% M<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ c: l$ `2 I! ], u
&gt; reg1
" V/ {% N4 T; K- s7 d/^[a-zA-Z][a-zA-Z0-9]{4,7}/; }: n# I) i# S8 ~, O: w
&gt; reg1.test("Hans666")
/ V  J8 ?; P  y* Q, O4 Btrue1 H0 E* y& r$ f/ i3 l% O# E. o' s1 h

0 R; u. k: V& p* f' E# X0 K&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/0 K% Q* r$ _% j1 D- M4 p
&gt; reg2
* s; q. G* ]: m/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" W' c1 S" u( }. ]&gt; reg2.test('Hasdfa')
; v8 Q: L7 w" L; Z* \  Ntrue
0 ]0 p- b! [! `1 W" R9 F9 n* e& _( e' b  b4 Q& B0 r& f# z
全局匹配:* u1 K$ |# i3 D  h) v
&gt; name$ B6 H, f# a& X+ N2 W
'Hello'. n! M" b' |, p9 l
&gt; name.match(/l/), [) |! z& _' b7 D6 E
['l', index: 2, input: 'Hello', groups: undefined]$ R- l3 {. t" l

- f7 |! f! v! z3 z# w&gt; name.match(/l/g)
+ m; x4 B% y" P; j) k! R(2)&nbsp;['l', 'l']
: p1 j& L' l* ^0 x4 J+ z// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配1 Q, V: e+ @6 \

+ m) |6 }5 O; G; D全局匹配注意事项:
. h- Y* g8 I- I  R  ]: [&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g( y# @+ E. Z  k9 ~) S9 S$ D
&gt; reg2.test('Hasdfa')
9 G! f4 ]/ ~% w; Itrue
2 ~5 {$ H- ]6 i# `  B9 M! y) ~&gt;reg2.lastIndex;7 L# L' W2 _9 y/ \: f5 h2 V
6
  Q6 {1 R/ P$ U* A4 u+ {&gt; reg2.test('Hasdfa')
0 O6 N$ G5 _) f" k4 z' Qfalse8 x6 R4 `. T; L7 K) z% _
&gt; reg2.lastIndex;
' R; x3 R! c# ?; i0
. N2 ~' _7 O% }: M&gt; reg2.test('Hasdfa'), h$ |6 @. d0 k& @5 X, k7 Y
true- ?- X; P- z0 U, ^; Q* H
&gt; reg2.lastIndex;
- ]* Y4 m' J, e- P4 U6
5 X" Q! A' G3 |/ h, `8 L4 l$ h8 G&gt; reg2.test('Hasdfa'); S, s$ X4 z1 a/ j3 x) O  ^8 R
false
7 ?6 Q; L" _+ Y; r& o' T) e: z# {&gt; reg2.lastIndex;
  b! I6 A* l+ _# _$ H8 O: w0
7 r' d) J6 F! G5 C// 全局匹配会有一个lastindex属性( r, g8 @0 U; T( L+ u5 R9 ^! I8 `
&gt; reg2.test()# h. v$ g+ M3 b6 S9 w
false) I% Q- X! }) Y& t
&gt; reg2.test()
7 @0 Q- \) y" v; Ztrue+ I+ D- m" a0 B9 J
// 校验时不传参数默认传的是undefined
* X0 S* P* f3 F7 H</code></pre>2 t4 `0 W2 n' o) [' N
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
& B  X3 S) y" E: ~% K! O<p>就相当于是<code>python</code>中的字典</p>
$ \5 X( Y  w8 U0 X2 u: `<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
) Q6 ?! {% X9 p' z9 a. E&gt; person5 F* u2 E9 {  P" u. o9 D
{Name: 'Hans', Age: 18}
* B4 R& k/ R; w) S9 r, e&gt; person.Name5 W8 Y9 e. o+ s" R& V/ L- D
'Hans'
/ M* ~2 y( M) a' F8 s2 i, ^  Z: m/ D&gt; person["Name"]7 I# ], C% w- ?5 N4 o! U9 h
'Hans': W2 {3 o/ N9 I& D

$ k7 `' F! {4 T) |+ g0 `0 A// 也可以使用new Object创建1 Y" |% s) M) A5 b
&gt; var person2 = new Object()
: C  g" _+ I8 ^' l# P&gt; person2.name = "Hello"6 A0 D; q8 f3 j0 B( z
'Hello'
: U2 R! L2 B3 L& X&gt; person2.age = 207 b3 l7 V% p- e0 h
20
$ C2 l8 z  l- w4 @( p" }# @% _</code></pre>
- ~; G0 I9 P* m' N<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>2 E2 Q) T# F3 a" J' {+ i
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
; k- U& a* q& e8 H+ b8 Z) f  R<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>: K0 Y9 K; h5 p, T9 M% ]! v
<h3 id="31-window-对象">3.1 window 对象</h3>
9 u! G! J  X! J! ^& P9 o$ V<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>5 i& s: u0 E4 ]# h3 Q$ V
<pre><code class="language-python">//览器窗口的内部高度$ j  c# q% r  i7 U& z$ r
window.innerHeight
9 o3 J( J/ d' P$ V+ z. W9 z. E7063 }0 W0 R& k, M0 F! t
//浏览器窗口的内部宽度$ r3 ^- G+ [- h
window.innerWidth
- S$ L" j0 w/ T1522
/ m4 @1 }3 g" i$ w0 B0 M// 打开新窗口& u/ a% q9 @# S, F# u0 ?
window.open('https://www.baidu.com')
; j2 M' ~$ d& V; h0 n1 ^Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
) X7 ^+ k' U) h// 关闭当前窗口. s- B! H1 G# g. \1 }8 A- p
window.close()
' v) U- G- i: ]5 q' a) g//  后退一页4 P5 ^/ ^/ ~) Y% P3 L# d
window.history.back()' S4 r) _' b3 A2 F1 n2 N& [
// 前进一页: J' O5 j# A& L% Q& W) {
window.history.forward() 0 v4 ~: i% @$ R1 e5 M% m
//Web浏览器全称
: m& W, s' A; ~  V, Q- N) k% Uwindow.navigator.appName1 Y/ _: ]6 a7 Z* t' M' ?
'Netscape'
+ a) C6 B# B4 l& Y4 `( ?5 h' l// Web浏览器厂商和版本的详细字符串
% m5 C9 Y2 G' J6 S; p+ Z0 V. qwindow.navigator.appVersion
9 A( v% t% I, \% z% x, ]'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% ^4 p' e2 {2 D% }) K9 g, Q3 e: R- Y; g: f
// 客户端绝大部分信息
, i8 e2 o0 x$ i( B# D5 Hwindow.navigator.userAgent5 t# A- C  \/ e( t- R& k) Y, R$ I
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ Q  O( a2 b  c' i/ i
// 浏览器运行所在的操作系统$ M+ I% p# M$ J
window.navigator.platform( Z" {. U+ J) y+ d. u* g
'Win32'
  D8 H+ e' I3 d. Z  |5 T) R: N& w* D5 w  b3 b# b6 p
//  获取URL
* H3 _1 x1 O) _; `window.location.href: x, w# x8 C0 Z4 u
// 跳转到指定页面
4 I7 }' p# x1 Q# i$ W4 Wwindow.location.href='https://www.baidu.com'
' ?, |4 U  C6 }! s! T/ |// 重新加载页面1 M% ~1 }( T+ j. v+ V% d) b
window.location.reload()
8 o/ G& G6 D4 A</code></pre>, ]; [6 ]0 U) g8 i! o8 `$ ^' P
<h3 id="32-弹出框">3.2 弹出框</h3>; Q# S  [! M6 M4 n* D
<p>三种消息框:警告框、确认框、提示框。</p>
6 y, T7 z  k. M<h4 id="321-警告框">3.2.1 警告框</h4>8 n: H1 F, I7 }# _8 G2 v( \3 ^
<pre><code class="language-javascript">alert("Hello")
# j- N0 o. H& B: i+ M</code></pre>
9 _: v+ o' t1 k. r5 W' x<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
" k0 E! f  A# ~( {4 Y9 _+ l3 N<h4 id="322-确认框">3.2.2 确认框</h4>5 }+ G4 a$ ], ~/ {' u" ?2 A7 g7 t$ S
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>. q8 A1 J* ~! j$ z7 q
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
4 n8 G  i3 b, Otrue
4 b4 @$ v9 k7 F9 o& l4 U&gt; confirm("你确定吗?")  // 点取消返回false
0 w" p" r" X& E' y3 k. g1 e; nfalse
: i" P! y0 l% W. m4 T</code></pre>
3 |" o; r' |% m) {6 l% |<h4 id="323-提示框">3.2.3 提示框</h4>
1 _$ P7 J7 |4 {3 g3 h<p><code>prompt("请输入","提示")</code></p># {- V, T2 v1 ?* H6 \* z
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
  O; F: r0 f4 c<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>- \0 M( g6 n# b  F# m
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>" j6 H, A- z1 ^# H; S
<h3 id="33-计时相关">3.3 计时相关</h3>9 y5 W3 V% p# |5 E3 ^/ v
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
, [, I' `3 P" T7 Q  F6 \<pre><code class="language-javascript">// 等于3秒钟弹窗1 e# U- A! l# ^6 R- p$ h
setTimeout(function(){alert("Hello")}, 3000)& ]9 f5 B( Q7 n7 A. q8 f

9 e5 x/ b) `' h( P1 t; \# lvar t = setTimeout(function(){alert("Hello")}, 3000)! t2 @) z" x$ W8 g4 R$ ]7 a
8 x$ C3 s: x' j( {9 a
// 取消setTimeout设置! }5 @; ~$ W  k* q$ b1 i
clearTimeout(t)
& q- W9 W; a1 v; x</code></pre>
" E8 ?* }6 G& Q, ^0 [8 Z: I  X+ J<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p># c. o7 f+ J( Y. |. H, q
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>/ x% l  K6 k! N5 P6 D$ }
<pre><code class="language-javascript">每三秒弹出 "hello" :, E- e# T% `; Y
setInterval(function(){alert("Hello")},3000);
* H- `9 Y3 F+ f8 [. S" b</code></pre>
6 q' E  S% l. h1 h; H- m<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>9 q* v1 C( r8 G* R' V7 v) G1 f
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);5 |, y) g- c/ j3 a0 w) x/ ~+ W# S
//取消:- U* W2 S- s9 U" G4 I7 ?
clearInterval(t)+ H. _( W/ o: h5 N, {* s+ h
</code></pre>2 f8 f% p7 B/ n
; ^0 \7 h; z+ y7 t* e% p
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-2 00:07 , Processed in 0.069483 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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