飞雪团队

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

前端之JavaScript

[复制链接]

7788

主题

7876

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25694
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
) `/ X) H0 P; D
<h1 id="前端之javascript">前端之JavaScript</h1>- W$ v, |/ ]" t9 J( g* C/ m
<p></p><p></p>
/ R6 M$ h5 h: {9 T* x# \5 o<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
; n8 U) I+ g+ x0 P* P% i* H<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
/ ^3 \* A& \! A% G; q# C& z6 [! q它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
1 `3 A- p) s' S1 {它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
! L- B, f3 x- X+ S2 o5 D3 X它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
" F1 Y) z9 r" X<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>, H: B  G! J9 u) l9 m7 m
<h3 id="21-注释">2.1 注释</h3>
6 k6 u5 x  s1 R+ P: M: D<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
* w" A) K5 R  O8 O! \! s! L<pre><code class="language-javascript">// 这是单行注释
5 H2 q& G+ h0 |* G& ^$ m2 Z5 |4 G9 ~6 Y. _1 a/ J9 w! ?
/*) l) U. ?. s# @9 h
这是多行注释的第一行,
7 N7 T6 L" Z$ {$ {0 n: |这是第二行。
7 S0 x5 D; M4 D" I1 \9 x- H*/6 \0 [- {; d  A! M# ~, \# q
</code></pre>5 b1 t) D* {4 ]- d7 m
<h3 id="22-变量和常量">2.2 变量和常量</h3>4 ~. `9 q! R5 Y- v8 C& v7 X' l
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>1 I$ \. j  y/ I$ Z
<ul>
4 S/ V; v) j+ S+ ?0 ^7 |& @<li>变量必须以字母开头</li>; }& R* d0 x3 V' E! ?& c
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
6 i8 l' u# c' o$ d+ P2 ~! M<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>, m8 E6 B3 ~* z
</ul>" G0 r$ w  B$ n& U* `0 t4 t  @- p0 }
<p><code>var</code>定义的都为全局变量</p>
/ }% j9 a0 s  Y. A- I" q( V# T<p><code>let</code>可以声明局部变量</p>& e5 {: H) H3 n  x- ?+ U
<p><strong>声明变量:</strong></p>
, F! j" f2 J$ D( E<pre><code class="language-javascript">// 定义单个变量* B& k# C' H$ j, y
&gt; var name
1 u* I/ Y3 z8 b; ^&gt; name = 'Hans'
, {# R# A1 k& K0 G( P' G& K# W//定义并赋值
5 j: M5 k2 @0 H' ~) Q8 f; o% A&gt; var name = 'Hans': G4 G6 d! |1 g
&gt; name% y) M2 O% B5 @4 p+ a6 p8 H
'Hans'
$ r! f0 J5 F% _, B/ J' |; W, Q' D! G9 p9 W, x8 @
// 定义多个变量
2 b- U+ n( {  A( T; K  k+ Z&gt; var name = "Hans", age = 187 F/ T8 }: W# B# u
&gt; name7 `* f! ?% y& r: P: g3 M
'Hans'
9 }( O/ k# T% d7 x&gt; age
: S' F5 y# e% a18- N% l$ r7 K; q
# b* Q9 Z! B. i- x
//多行使用反引号`` 类型python中的三引号% |# }4 C3 h5 U) T
&gt; var text = `A young idler,# U$ ?9 ]6 {8 [
an old beggar`
/ o9 V' ?7 _, T  J7 j, }) h+ r- ~  `8 {&gt; text' J: L) I6 ~. T0 c4 N
'A young idler,\nan old beggar': }; [: ?3 ?" o  |$ Q
</code></pre>
/ I0 N- H# z! d( t<p><strong>声明常量:</strong></p>
* ?8 f6 L6 U( ]1 j  S  g1 h& R! X<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>6 Q+ t( D' h: S! B( X. c. o
<pre><code class="language-javascript">&gt; const pi = 3.14. r+ r) d2 H. L1 Q5 m5 K# `
&gt; pi7 |$ k, r% E& h3 j" G0 ?+ n5 R
3.14
( g! s0 [. ^. f% c0 b4 E% ?&gt;  pi = 3.01
# A5 h9 H, `, y. J  M1 y! L& m1 D  YUncaught TypeError: Assignment to constant variable.
  u: N7 j, D4 n4 K" y, H0 ?: K    at &lt;anonymous&gt;:1:4, j  C- O; D0 E, S: H

$ o$ b* J- T8 ]; ~</code></pre>  ?& c5 ^/ {3 {- o" t
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>% b- f8 ^6 w' D. S8 X* C
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
7 H4 S& ~: g: [<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
5 a# v- I8 m. Q6 u% L5 l: k5 C<h4 id="231-number类型">2.3.1 Number类型</h4>6 w6 w7 h+ |% ~
<pre><code class="language-javascript">&gt; var a = 5
3 F, P1 _, r+ ]& y&gt; typeof a   //查看变量的类型  3 T3 d7 c+ v5 ^* {( w( L8 b' s0 J
number# G* v0 ]2 @: C6 q
0 X! L6 e: Q7 P* f
&gt; var b = 1.31 n/ t( p9 @# y8 Y
&gt; typeof b% y" H3 Y7 x) C7 G5 E5 N7 Y: a) X
number( E, P5 J" \$ o. O0 V, s7 s4 d# P/ Y
. _* o3 Q, g# B- ^
// 不管整型还是浮点型打开出来的结果都是number类型  B  s. w0 D! s! p! k6 {

$ c1 h8 V' q* w+ s6 v' C4 b/*
" V) N0 t8 P  T- [, ^1 B% @& }NaN:Not A Number4 Y2 f( N2 u+ v7 V! n1 q
NaN属于数值类型 表示的意思是 不是一个数字
3 E* ]0 q3 f. B, z$ w*/3 z4 t5 ?! @/ m9 h( ]+ `8 D

  ?7 m# J4 t( ~parseInt('2345')  // 转整型
1 l3 _5 L) i! x; d2345
# G( R% o0 @! _! W( LparseInt('2345.5')
3 [" ~# y; s5 B# H: q' C$ [) E& g23455 b8 A7 \% O' c: I: P4 t# X3 w
parseFloat('2345.5') // 转浮点型' a, l, @5 d. T+ m0 i8 ?  B& D
2345.5$ D& p; S7 a) y- l" Y: m/ O
parseFloat('ABC')
' [  ^, S' F) @, B/ B* @NaN
2 \0 _5 j8 l& h# h  HparseInt('abc')
( f, `7 ^! Q* C# t) ^- p  yNaN
9 [3 c0 z4 A: R  r</code></pre>
4 g, F$ {6 s2 e* C8 w  Y2 _$ i<h4 id="232-string类型">2.3.2 String类型</h4>
8 Q1 }  |- k; i8 I<pre><code class="language-javascript">&gt; var name = 'Hans'8 R. a, \% z1 J' C
&gt; typeof name( M8 Q& L. i5 l9 }" M$ \1 B3 ]
'string'
( `: }9 v0 s1 G  W; y3 k5 C+ B/ F" w* `/ ]0 d9 ]+ A
//常用方法- R. `. h8 K$ }2 _9 v
// 变量值长度% W& ^) X' {5 o3 ^
&gt; name.length' L  H4 C4 O5 ~$ u
4
  s9 [, S/ c! P" B  w// trim() 移除空白
. \7 t1 w, A7 b: m3 A&gt; var a = '    ABC    ') a2 h) u( Z: e  @6 q. E
&gt; a
$ [% C* S! o- }; ~1 _) E6 d- j'    ABC    '- |* B1 ?$ J; ]$ @; @# J
&gt; a.trim(); A5 i0 E) U1 X
'ABC'
1 N6 |# r1 O, d" }1 o) I" q//移除左边的空白
7 H" P. N7 n' |, u  G/ O" x&gt; a.trimLeft()
% t9 m% |1 J* g: N6 l- N2 v'ABC    '+ F$ v4 P* V# ^: c/ U7 n
//移除右边的空白; T7 g" V* e( H; \  Y  m! @
&gt; a.trimRight()
9 v& _; t8 V0 d0 R4 z1 z* y'    ABC'
% Y3 o5 Z' ?7 L+ b  G
0 m* Q/ N* `0 G) r- {. [" y//返回第n个字符,从0开始
2 c  ]+ h6 B$ ?* Z: K&gt; name6 M; z# w/ `4 h
'Hans'
, [3 ^9 @* ~2 @3 I* V&gt; name.charAt(3)
. u( g  N# u2 Z" N' H% p/ t's'
0 L0 d% I( j% \/ r2 M  }&gt; name.charAt(). D7 k7 i% j- ]' B" |) r5 w. Z
'H'
$ T2 [& H- x; ]& O+ k: z' c&gt; name.charAt(1)6 L7 A, N1 ~( H" M& o9 g1 [! r
'a'
9 Q5 v0 E3 h2 b# T( n7 D- a5 V- i- l& e3 E1 Q) t
// 在javascript中推荐使用加号(+)拼接
, e" F$ i5 E, R. d8 Y&gt; name7 H* B4 a+ p) N
'Hans'
8 C' U! J  r' m9 N" i0 ^5 B7 |8 z&gt; a1 P) Q  ~! f( `+ u# B
'    ABC    '" q7 o: Z: Y, F! R2 g+ {- T* N
&gt; name + a
# U" ^7 p8 V7 G$ O7 r'Hans    ABC    '
8 N5 |+ t6 k# g3 d3 {# v  C// 使用concat拼接0 }1 R1 ~2 K& V3 i' H( t6 A" W. d/ J
&gt; name.concat(a)
+ [% C% J" e1 N, `+ }) z'Hans    ABC    ') I+ {' |" e6 W9 F% m

2 N& Y# l; Z8 U7 \9 t5 F//indexOf(substring, start)子序列位置
' {: b* z! N; i* H" F6 u
( ]9 x. d, E0 g# w&gt; text% W7 b0 A& l/ t& O
'A young idler,\nan old beggar'
4 c6 w, z- Z, |, c+ C+ a7 D9 k2 o&gt; text.indexOf('young',0)  x: o" z: Z; e3 t/ C/ _* {( \
2
/ Q4 q4 Z9 i  L2 w7 h; d
1 A8 X! M0 f2 {8 O# J# Q/ `+ _2 B//.substring(from, to)        根据索引获取子序列
* y) p, g$ m; P% n&gt; text.substring(0,)- c' W& _4 J; Y1 R
'A young idler,\nan old beggar'1 M& k% k8 k: _) ^
&gt; text.substring(0,10)( |3 K- o9 \! f9 f
'A young id'
9 O  f; V7 q# I% U% r6 a
- P5 f: I- {2 @6 k3 A, E  F// .slice(start, end)        切片, 从0开始顾头不顾尾
- c6 K, Y% i; x5 t4 A7 L, [&gt; name.slice(0,3). E8 I6 w5 o' u2 r+ N  `
'Han'' v/ T' X# R; p6 ~# L

! v6 v5 ^/ R9 d// 转小写
" C  ^  j7 h3 f/ b+ o5 P&gt; name
( w" i, Q7 z* z4 |4 G! v  O* w'Hans'4 u, h+ b! o3 q$ X/ I
&gt; name.toLowerCase()9 G0 l0 y' F% Y5 {' M6 z+ y0 I7 Z
'hans'/ l) r& K- B8 s% h2 b. j
// 转大写
4 p7 J2 g' D# H* Z! a2 o&gt; name.toUpperCase()
/ Q* l4 e( X8 v( O'HANS'
" ^( d) a1 ]: V* ]/ v: P7 s/ E9 @. K+ i( o
// 分隔
3 u. E# x2 R( j3 @6 G: y&gt; name. D6 j1 n# ?8 g( m$ r
'Hans'
6 N& L/ w2 q4 P1 h&gt; name.split('a')9 ^, j* e- Y% p1 ?' ^+ m' D
(2)&nbsp;['H', 'ns']
  ~3 Q: `) t; Y; T& F3 a' b</code></pre>) r' G5 A$ E' W/ L! B# e
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
4 N# ^- \1 B( R* V  R<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
6 Y+ |4 ?7 k4 \5 ^& W/ s<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>: D/ q* I- k& ?6 X
<p><strong>null和undefined</strong></p>5 z; j" N2 Z& V0 X3 m) I# |
<ul>
3 T6 A0 s; p2 ]3 }' _  e" a<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
' c  b, C) o5 W, U+ r% A<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>% o' A: M. O2 @1 I, p2 [, h9 R7 T
</ul>
" y" I3 }0 \% Z$ V% c+ b<h4 id="234-array数组">2.3.4 Array数组</h4>" e( A: t3 x" Z; [' E% h
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>' ?9 B3 T6 ?. c
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ; g9 `2 S* ?: _+ t/ f8 i
&gt; array1
0 N! Y& a$ a" D# B6 O( A8 x5 B+ f* H(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']: d% z5 [% ]$ _& z
&gt; console.log(array1[2])  //console.log打印类似python中的print# ^/ h7 D3 {" d* i- f
3
6 {% \8 b, v) s; L7 N# I// length元素个数
1 W# O* A" k( H  l8 i9 I&gt; array1.length" _0 Y: [4 j( q
6
+ c1 Y, b& W+ h6 U6 x// 在尾部增加元素,类型append
4 e$ Z% ^  }3 X/ I) I&gt; array1.push('D')2 H/ e& e' E2 k% p3 j! T
7
! G! w$ F- R5 z&gt; array14 q4 A" L, n6 B3 |  k, z# w
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
( k$ n  H/ {7 T3 b3 q// 在头部增加元素
) y$ b& X. `( U! I+ w# O" c' f&gt; array1.unshift(0), [! w; C1 K" p8 l. l" M
8
' Y& m! X2 G7 }% D- o&gt; array1* n$ H& r; U6 ], \) U* J4 O
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']$ f, g3 l$ V" ]/ a+ P9 D4 ?& D

) S! w$ [; C: l- @8 S; x//取最后一个元素4 j" X8 `% \. M2 ]$ I( q/ r5 F
&gt; array1.pop()
+ F, I1 r8 l+ J'D'9 ^% S' K& m$ {2 i
&gt; array1, Y  E- W# A. Y" s* H
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']2 x7 U& H0 w! z% E
//取头部元素$ M8 g/ Y2 y$ \9 O8 ]0 q
&gt; array1.shift()8 ~, K9 L2 j( {  O; C, L+ ?4 i- g
0
6 d0 ^6 U5 e9 z6 N! h&gt; array1
) P  Z5 n" ~8 G% w" P% v6 D5 b(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; O; Y5 [/ W4 {: e$ V8 O1 h$ D7 x

6 H- J7 ~# S$ @% p! }% [& q2 ^, x! K//切片, 从0开始顾头不顾尾
& c2 O8 i5 Y0 `3 r&gt; array1.slice(3,6)
5 X) L: M) t7 w; e0 w; ~( s: m(3)&nbsp;['a', 'b', 'c']" d  t4 N. ^5 Q
// 反转
% f- Z- H4 W) O; {&gt; array1.reverse()' v+ x5 x( [4 j* Q
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]6 ]6 ?6 p4 f$ N) Z0 q& v
// 将数组元素连接成字符串3 l  D% B; S; B5 B+ {+ S3 P# w! L
&gt; array1.join() // 什么不都写默认使用逗号分隔% k/ \0 [, y: l/ U( C
'c,b,a,3,2,1'1 _# _" R1 ]: D; I/ R
&gt; array1.join('')
# y) T. |- E& }, C% _'cba321'+ p( u( [' k. I2 R* b9 b3 u
&gt; array1.join('|')# ~1 k+ H+ |1 I: X4 Y
'c|b|a|3|2|1'. G$ t: m9 t4 @2 y- h$ ^( u
! O$ H0 z5 o+ `0 l
// 连接数组
- P) [+ ?+ x' i& N&gt; var array2 = ['A','B','C']8 ]5 Q! L# y8 i/ F5 D  v+ R+ v2 N
&gt; array1.concat(array2)& U+ y% \& Z: i
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']9 g, T3 x3 E" Q8 _

+ N. V# p6 n7 [+ d* J0 Y// 排序
$ K; j3 j" ]9 Y# Y$ f+ J&gt; array1.sort()& s9 f/ }" ]3 p, I/ D, U* Y% r* D1 E
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 ^* ~4 P: N3 _3 ^
+ L0 p5 m0 ^6 V4 v8 W$ o0 v
// 删除元素,并可以向数据组中添加新元素(可选)& F" s( X: r" O! r3 U
&gt; array1.splice(3,3)  // 删除元素, f# V2 k& {1 r* l4 E
(3)&nbsp;['a', 'b', 'c']
8 {2 J* `; @7 g! p: }&gt; array1
) ~0 K- P) N# q$ m) y% E8 Q5 t9 _(3)&nbsp;[1, 2, 3]8 H8 F0 A" s5 |
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
' Y1 ]0 d% S  ]9 F8 L[]; P9 ^$ j: w$ K! j2 Y  a+ {7 v2 H
&gt; array1
* _4 X3 [5 x. ^) e9 O7 P/ I(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
/ B0 m6 c8 M+ c; j' j) Z, h' P! V: y
/*6 x0 _1 P' I# {) f0 s: U" R
splice(index,howmany,item1,.....,itemX)5 M" O" k0 D8 k
index:必需,必须是数字。规定从何处添加/删除元素。& T4 }5 X1 w( ?" ?% v) I. M
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
! L# a0 A( M" Q. w7 t! O/ R( Y$ Ritem1, ..., itemX        可选。要添加到数组的新元素2 u% c' W! {& s/ o
*/
) Z9 s0 i  t, ~8 i" w7 J/ Y# S0 T' E' z0 e. F
// forEach()        将数组的每个元素传递给回调函数
7 V3 {2 z/ r' c&gt; array1.forEach(function test(n){console.log(n)})
8 m" r  ^& X. e0 L" g/ r) ^ 1
2 C9 u# P4 t) s9 j: | 2
, ~3 q: @; V, z. c% ] 3- A% D  j: c5 l; ?
A( K3 ^9 V7 w  h7 [" _
B7 [1 `0 }0 }- |0 q, s/ N4 }! X
C
/ C7 p4 E8 F; @8 a// 返回一个数组元素调用函数处理后的值的新数组
1 ?' h8 e$ d: }. @4 S4 Y# A. E  {&gt; array1.map(function(value){return value +1})) Y$ g8 n' _+ n3 a' f' M7 ~7 X
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']# Q* u1 J, S4 J0 w0 m1 d; A' t
</code></pre>  L6 ?' z6 q) T3 P' H
<h3 id="24-运算符">2.4 运算符</h3>6 L. S1 A/ f: D, S
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
+ F. J0 p* Y) D  k" z6 O, y5 o<p><code>+ - * / % ++ --</code></p>
# {- ?2 A/ k) a  B1 X% M6 L1 v<pre><code class="language-javascript">&gt; var a = 6+ ~; I; o& d: X( f5 }, J
&gt; var b = 3
1 y; e1 u* Y, |) l( ]1 \// 加
! l; N$ x: y6 o/ m&gt; a + b
8 h( x" x( H+ ]: V3 s92 h" g8 F6 A1 B) r1 Z( {' @+ e. `/ D
// 减1 B1 g' y$ H1 U2 {( g3 N, A  R
&gt; a - b
8 Q8 o0 R1 r# t2 P3
, D* a% h: b0 H+ _3 T$ X, l0 g// 乘
: Y% q8 M8 T, a) _+ t&gt; a * b9 k. V# P% k+ E
189 E- y. ]; w3 T
// 除
% P3 ~* r- J' N& y&gt; a / b8 z! v, C( `4 H- c
2
- C4 H% R+ P) @( T// 取模(取余)$ n* I9 ]& o4 }9 q4 U7 p
&gt; a % b3 ]! @7 ~; @# Q
0# y4 Q7 V: X5 r% |
// 自增1(先赋值再增1); U' A1 ?7 S0 w5 S
&gt; a++
" c4 ~8 A: K2 t2 q& k- }62 e9 E) n4 V* m- u/ g
&gt; a
' e% `8 f. H$ j/ [; i! N4 Z7
7 k+ G5 ?7 N' N; W; H9 |+ H// 自减1(先赋值再减1)
( e5 C6 k9 _+ {* I& X&gt; a--
/ \/ n% G2 ~4 W! }% P" x7" m8 L7 w( P" q0 o
&gt; a
+ v: F' ~/ S3 C6
. y0 c3 l4 x' Y2 Q/ g6 i, c// 自增1(先增1再赋值)% B1 v. t+ ^; R2 V# n% O
&gt; ++a0 `% j3 @( h2 w! M; t
7# w1 ]# B( G. h: ]) s9 U
// 自减1(先减1再赋值)) v) W, U9 k" ?! K0 c
&gt; --a
$ [% f/ o* Q$ x- [6
4 ^$ c& Z" b" ]8 d/ |* c5 X&gt; a, K* [, E6 V( p+ K5 u2 V
6& N4 o5 @+ ?9 G( {' A

/ y9 }; B  U2 A//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理7 K( h. O- h( z6 w* J5 W. r
</code></pre>/ O4 ?4 T5 Q& p+ k% P6 |
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>+ k0 D4 z" D1 x2 ^6 i1 \0 n
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ h' D; A; b# `/ w2 Q
<pre><code class="language-javascript">// 大于3 w, l+ `4 r4 \. t/ |3 n: `
&gt; a &gt; b
, Y4 B# R0 B8 ctrue) Z2 b. |5 R8 `
// 大于等于9 @0 g! ]1 I! R' q
&gt; a &gt;= b! s) R. o7 J9 k3 t. w
true
; _. i+ l$ {: A( \8 R. A// 小于
. k. e% M) x6 i&gt; a &lt; b
2 j( I3 [# U- s& bfalse
* r. w2 O3 w0 D$ c, F9 R/ i// 小于等于$ c) N. l$ G3 s2 Q% n( D
&gt; a &lt;= b9 @7 s0 I! R2 b/ A0 Z2 F
false
# L. o. f" B7 k' d// 弱不等于. P+ {3 D" _. D0 v+ ^% g
&gt; a != b
4 p# }- \7 p: `3 C2 z# etrue/ [' J" [1 P/ T! @# E  I* m+ w+ D
// 弱等于; d+ u& K- r1 ]# O
&gt; 1 == '1'
) Y* N( W: ~* d/ Atrue1 C, E/ Y1 c# W) G0 Y
// 强等于. g5 d5 w1 o, e6 S3 B, a: D
&gt; 1 === '1'4 S+ R; ]. j! u; E9 m( a9 r
false3 E5 f; v, ?2 o% X, L5 p
// 强不等于
. X. {6 b- t; V&gt; 1 !== '1'& C5 X+ [% P- @/ G! ^" p) L) p" @
true
: h6 ?! N/ G5 j  T7 a& j; b. h! N! W* O9 ^! J5 M8 j
/*) H* d5 [8 x. Q& F2 Z2 j8 M
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
! L, b: j, v4 k5 l7 s. Z. Z*/
- U: c% k: g" [" ^; N9 j</code></pre>5 ]0 o* U  Q9 D. p3 e- a
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
& _- P( B* v; [9 H5 G<p><code>&amp;&amp; || !</code></p>
  t+ A' U9 w! i8 Z, u; ^4 t+ W4 V2 q! [<pre><code class="language-javascript">&amp;&amp; 与7 V* `! z7 h0 m! p8 Z& T
|| or + n; r# H( Y. j* h. {' ~2 I7 b6 ^
! 非
/ k7 t1 R0 [0 \3 K7 a</code></pre>/ M& H+ n$ `8 O& s, h
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>. z" t: J1 s6 ]# D6 u+ S% V6 v* k4 H
<p><code>= += -= *= /=</code></p>
1 d1 [# Q% h4 z  \2 {( M& X<pre><code class="language-javascript">// 赋值
; U) ^3 Z: V' K$ U8 a4 g7 o6 z&gt; var x = 3
( }, a' J, J8 B4 F- I// 加等于. b, T$ H9 I& [1 s' D2 ]9 C4 T2 l: V
&gt; x += 20 W+ b5 a, f# k: ^
5
5 d: ?* D: @+ [$ H! U// 减等于; c( B, o. t% F- Q0 b: n+ j3 }. b- V
&gt; x -= 1. B2 p2 g( V/ C/ {6 f4 b
4
; n1 S! j" f% G// 乘等于( r) C5 w2 U$ b+ f6 v' I: g
&gt; x *= 2
; O  A- ~9 d) P& A2 j82 r' x% y, Y; z$ Y7 P' V* L
// 除等于
4 D9 D& P; e6 Z7 F5 X& r* z&gt; x /= 2- J& L4 L8 l: h' y
4
3 ^* `1 j4 P9 v1 A' H( H6 d</code></pre>5 d: [1 ^) m% U1 Z; V; n
<h3 id="25-流程控制">2.5 流程控制</h3>9 k! }6 k# k2 M2 }
<h4 id="251-if">2.5.1 if</h4>
, Z" |1 O+ M' z4 c* i+ x0 G6 C<pre><code class="language-javascript">1, if(条件){条件成立执行代码}+ c- L$ a$ a6 V1 e6 ]1 |

+ g1 }/ |3 U. n* \1 a( i&gt; var x = 3
! P9 F2 Y, \* r3 B&gt; if (x &gt; 2){console.log("OK")}
6 ^) x1 z! a& R OK
8 x4 w6 v5 H6 ]+ c! |' L8 |- M- X
) ~- B3 f# z* `* R2, if(条件){条件成立执行代码}
2 R- S0 Y" N& T2 j: ?        else{条件不成立执行代码}) s5 j/ H8 O+ z# T- r
+ L7 m$ p) q& @/ k
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}# H) O, |2 D: G# K3 I
'NO'
/ `, [3 t) s2 }: Y$ z& J  q( i4 g6 N3 A' W0 B
3, if(条件1){条件1成立执行代码}
; f. z* x5 j( B* n' ]        else if(条件2){条件2成立执行代码}
0 r7 q/ P' c6 \5 D& R& A. n8 [    else{上面条件都不成立执行代码}
/ ^1 z- k( {$ J4 x6 i% q/ f% Z, W, V* V& q. M1 V
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}; ~! R5 F% Q/ w% ]/ e
Ha
! t) G! {8 c* X9 z* m+ M</code></pre>3 S8 r0 m7 w- i: i
<h4 id="252-switch">2.5.2 switch</h4>
- {8 p1 S' N6 i3 w) {) ?! g<pre><code class="language-javascript">var day = new Date().getDay();
3 p3 y9 Y* z9 t  I1 uswitch (day) {
# n( B/ I8 d! Y  case 0:
% f9 y, Q& s6 \7 x7 F* N9 V5 G  console.log("Sunday");, y0 m( ?$ p3 o& s
  break;
3 p7 J0 i4 M& c5 M9 J3 D+ L  case 1:# U9 B7 ?3 [; B% ]6 o
  console.log("Monday");/ f. l- b6 Z; W* s. Q
  break;1 q( [- q" p, N8 K& `4 f
default:* v1 ]; K+ J* n" l' @& n( t
  console.log("不在范围")* i8 E2 B- U+ f$ x* [+ U
}
4 v' X4 a0 F+ e5 f4 s3 H 不在范围% O+ `2 ?& ~7 _" ?: }) o1 h
</code></pre>
& R5 r" N; Y4 H" m1 T# d7 o<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>8 Y9 J- y5 @, j& [
<h4 id="253-for">2.5.3 for</h4>  _( j  M8 R) E8 t2 n& b: W
<pre><code class="language-python">// for 循环
  [% b  U6 U; p+ K: Q        for(起始值;循环条件;每次循环后执行的操作){
& k/ C7 E3 P& ?% I: O        for循环体代码
3 S, j1 j  o) a1 f. j0 B" D    }% J. i$ p8 E9 b. ~5 Z+ h

( c, W; `3 P; @0 x8 X0 `/ U" t8 Mfor (var i = 0; i&lt;10; i++){
! l, P5 Q+ d" O2 U    console.log(i)
5 S3 p( ]. A" K$ u}
& l( N7 t5 z  t6 r7 T0 T        0
) Q( \' k+ U+ H  W' _: t        12 g* q* |  z) h& ~0 P3 q7 [( Q
        2# A* w+ R2 q) t  h* f
        3. s+ s3 |$ Q1 q9 }7 \
        41 d0 |9 d) \! g! [( O
        5
5 B$ r- C+ O4 ^4 [        6
4 S* x+ T/ P& x, c9 d( y) r        7
/ F6 M, M# N6 q        8
+ \4 l4 T' h% ^        9
* O( T3 l( \4 e& ~# i4 W$ v</code></pre>
; N4 `- |: g8 s$ `: W9 G, L" E<h4 id="254-while">2.5.4 while</h4>, j/ s+ `# _2 Q1 ~! v, y' V+ |* B* R
<pre><code class="language-javascript">// while 循环
" n" c) \0 \$ I- X/ L% y( F        while(循环条件){
, S4 ?8 C6 t1 l/ b. y! {        循环体代码
  h5 ?, b1 y1 L- b    }6 r+ N; w  \( J/ |

$ v% x# e0 f0 t4 p, ?, `&gt; var i = 0. o8 P6 r* K* O2 L1 x3 Z  s
&gt; while(i&lt;10){! _7 b0 @2 W" E7 Z2 d$ ?
    console.log(i)
8 g0 z7 u4 ^6 {2 c( S  _" v    i++
- r! \! U0 S& h- j: v5 X: I, d}9 E/ c- J& a8 V3 i9 y+ i1 i1 {0 H
0% k5 g; \3 V& V& C. o
1  U7 K# e, X1 z- `# |1 O
2- @- m, S( n( R+ O& d' K* w
3' c* z% Q$ V  _- U9 M: q
4( n3 A; Y# {* e; {5 p4 X9 h2 O1 W1 l! ?5 {
5
& ^5 J, r3 E5 c# n1 u 6, z6 b7 ~0 P; x8 U3 O9 A
7
4 b! _3 R1 s0 s 8; _+ k9 A- w9 _  J) w
9, P2 |8 t$ b5 p6 I, f
</code></pre>: M' C% f7 Z* h. [5 o
<h4 id="255-break和continue">2.5.5 break和continue</h4>
5 _; w' K' A9 ~- P8 [+ Q5 R<pre><code class="language-javascript">// break- E. S4 @% f) @' E
for (var i = 0; i&lt;10; i++){
& z! F; d  S& R# ~' t    if (i == 5){break}
: C9 z( q6 r: k# Y    console.log(i)
/ n: p9 }) ~" d3 E+ y}
" `  K5 f1 y' b: e1 U 0
- X# ^7 o& r& {7 F3 @! X6 Q8 ~8 @ 1
  U8 [1 B; @, e4 N  z  e  l1 C 24 m5 \0 a1 ]6 ]% t* P- ^* G/ i
3. Z% {+ d% A  e3 g$ m8 S; C
4' J: f' c5 P9 _- P
// continue/ b1 l! s$ s' I" N1 A3 K2 |
for (var i = 0; i&lt;10; i++){
0 j* `/ @' B% ]    if (i == 5){continue}% s. s2 `  ^: @: u
    console.log(i)+ g1 J& ~6 k: O2 b
}0 N& R# ?1 L" N
0
% k/ K8 F) i3 j 1
3 B4 _# {" a: D& P7 o 2
) D" h- A+ F! I4 B: T" a" A 3
7 P# {8 v+ [6 g6 \! w 46 T- V/ a# m1 z2 O9 X( M
6
; A: Y  \& J5 Y; z$ R# `! b) O$ u9 v 7
1 f' N! T) j. g. u  e 8
  B. `# W' D3 U! p 9
3 C- H  M3 E# _* p8 j9 J3 P6 X9 h* t! M+ k$ K
</code></pre>; E: X2 t# p% S, i. M) L" T3 P9 V
<h3 id="26-三元运算">2.6 三元运算</h3>: d6 j0 u6 _. W5 y# X
<pre><code class="language-javascript">&gt; a: b0 O3 q# l" @7 @% `! @
6% O/ i: t* f% o4 S9 G/ g+ o1 S4 q
&gt; b5 Y* o: w! C& Y8 u+ C+ V/ S
3. M, ^# Y2 `8 s! Y4 d+ S! ^) p

1 K" o1 l6 m  Z+ W$ y& K//条件成立c为a的值,不成立c为b的值
3 p2 I( N% l1 g6 I/ o4 W&gt; var c = a &gt; b ? a : b
& p+ [! R7 A  @. U/ K& }& |( O&gt; c+ g8 j5 @+ O: S" I- J% N# u
6
- P, ?7 _( g+ y3 b+ o2 V
( Q! M1 w: I! D- e* ?6 n+ m// 三元运算可以嵌套
& X& G# Z$ D0 S' H& S</code></pre>$ j4 f2 I  A6 s+ ^0 u, D4 n& a
<h3 id="27-函数">2.7 函数</h3>
; G% ?5 W' @% k- g2 ?2 w<pre><code class="language-javascript">1. 普通函数
% o9 z, \- j$ P: K/ {( a&gt; function foo1(){. {' j2 V1 C3 m% Z
    console.log("Hi")* n& k9 R: G1 ~2 e
}
9 q; S& d" H7 L* B& B; Q. D( t
9 d3 ~7 ]; _1 _6 s9 k0 I* O&gt; foo1()+ Y+ q' [+ W& G. n" ^" U% ?
        Hi
* [6 B4 K3 u; a, Y3 }2. 带参数函数1 `2 p* v6 `0 I2 i: r- n- f
&gt; function foo1(name){* Z" G* A) m6 _$ {5 h" P
console.log("Hi",name)9 v. R7 G3 i8 B- X" h
}  T" R$ V, K& S. ~

9 E+ Q8 Y$ ^& d7 z5 j&gt; foo1("Hans")
4 `7 L' G- R8 e) _Hi Hans3 Y! r- i# h3 w. w8 ~8 i

5 ]0 m7 }5 ]% D9 ~- E4 O&gt; var name = "Hello"7 ^% Y( `" V# E5 f# s: D
&gt; foo1(name)
" j7 W- Z2 }2 VHi Hello
1 Q, [6 @7 L) `& s5 A
2 Y: H4 F0 N6 e8 g% p3. 带返回值函数, v' E4 t/ C6 C* g! {2 L
&gt; function foo1(a,b){
6 t  O* ^. P8 R* r/ R2 t        return a + b   
2 L7 w5 w' U+ p" }" ^}
! ^. L5 Z+ @$ b8 J&gt; foo1(1,2)% M+ w1 z5 y3 ~6 {* R6 y+ _
31 g; g) @( l3 _( g0 p
&gt; var a = foo1(10,20)  //接受函数返回值
7 B' z" t9 w1 E9 k* e6 z&gt; a
+ b& W4 [6 t9 d. a; {30/ m* x8 u; q/ V$ k+ ~
% ]: G+ C2 B: d2 g4 C2 j/ }( T
4. 匿名函数
# e' M& _# O6 m* V&gt; var sum = function(a, b){
, Q+ `, }7 ^( w$ h  return a + b;
/ m; B' {% E% B) G3 I8 w}
$ A0 P9 c% t0 V: i; h) \3 H& C&gt; sum(1,2)
& [5 [! {4 j/ h/ y3
( \# Q- c! _: O, i
8 t6 [) X+ }4 x% O/ p6 N// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
# b& r  C- S' X, M  Q2 \1 j* n&gt; (function(a, b){2 a2 P, Y- O: [$ {$ h% v  a
  return a + b2 U: \8 [4 C- K6 T! r; x
})(10, 20)
$ z: C/ J3 j! |, F5 @  J: p" \! v30
4 Q7 N' J5 f. N% c
& I- \: \. h- j/ \1 p2 F, W7 S8 s5. 闭包函数5 H" W, R* F" O5 {
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
) x" X# f  ]/ i& Y7 wvar city = "BJ"
1 b; T3 ^( P3 a$ X8 l5 `function f(){
+ W2 {3 f# u' M) D& ~- k    var city = "SH") |/ Q5 X" E; d3 Q: X3 E. J
    function inner(){
1 O! a" N, w  `( s! V3 Y        console.log(city); e# Z; o5 W' z
    }
. f+ y1 b* C4 M+ Q6 @4 X% \( T) E! Q    return inner5 a6 y& J. T' o! Z
}. j& k, A: l. k! E
var ret = f()8 B3 z' W6 T  [8 s6 \% S7 j: Z7 Z
ret()
  k0 ?* x- x% f, Y执行结果:
% S# f  B7 n# |" \$ ySH
, ^6 h% b8 L! r$ E  N6 Z8 D0 @: p, M9 `4 o0 @" y
</code></pre>
" i+ ?$ m' l+ Q. ~& x: W6 k<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>) H. [9 a% ~' W' B' j4 G. y
<pre><code class="language-javascript">var f = v =&gt; v;
# f) g: n9 K8 H7 B( ?// 等同于: O: k. L1 T6 m! g
var f = function(v){4 Y! X' b9 [0 S
  return v;
3 G$ V0 b8 X  o& W* d}
' y. _; T* B2 H+ t</code></pre>/ u# }1 Z; A# G* e3 |/ |
<p><code>arguments</code>参数 可以获取传入的所有数据</p>3 ~) G* Y+ O6 k
<pre><code class="language-javascript">function foo1(a,b){
1 x) ^5 ~7 r( n/ b9 R    console.log(arguments.length)  //参数的个数 * |; q  p) ^8 d) G/ ^' ^3 Y% a/ H
    console.log(arguments[0]) // 第一个参数的值6 P$ y2 |' C. Z0 O* _: U
        return a + b   
# V' V& a) S! S" R+ c' I* O- z. J}
8 j4 A1 J( Y4 w& V, sfoo1(10,20)
) S: w" e6 s) W% B结果:: {' x) G( \9 u  D
2          //参数的个数
& Y" \% A! G! e10        // 第一个参数的值
. C4 [* u6 C4 [7 F30        // 返回相加的结果/ i+ ]8 ^9 }/ Q1 ^  p1 w7 e
</code></pre>/ D, j6 X( Y) M5 j9 {
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( E* u3 _  K+ ~& K# ]<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
; V2 n1 _/ z+ K5 C8 Y<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>0 H! n& I/ V, c( n* E7 X9 w
<h4 id="281-date对象">2.8.1 Date对象</h4>
* `$ W  E- e5 W+ z9 x<pre><code class="language-javascript">&gt; var data_test = new Date()' Y0 z% a$ i( B' }! i
&gt; data_test
/ `+ u! S& @/ lFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)9 u: M% T7 B3 B: O! K# ?* [4 e
&gt; data_test.toLocaleString()
  Y/ O5 f: k5 l8 _' N2 w, p'2022/2/11 下午9:44:43'
9 Y; e1 J, @% x2 w7 c/ [8 Q1 j; |" Z5 O
&gt; data_test.toLocaleDateString()
, k& c$ z) S/ e- E- x/ H' P" L8 P'2022/2/11'
0 D+ C) ]2 K! T; m9 A! k% _$ D! S. t& d5 r, V1 B# \
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
" E4 e- `' ^/ k  Q&gt; data_test2.toLocaleString()
8 Z: m& F1 h' B5 Z7 W% e  v+ T- ]'2022/2/11 上午9:44:43'
, y9 b; L$ T) g' |7 M$ z  c" v! l+ Y0 d' ]0 @1 S8 L
// 获取当前几号
0 r# U" m4 }- i5 `&gt; data_test.getDate(). p% m/ w/ [- @- N2 _
11$ z# e1 Z8 m; f) n4 ^
// 获取星期几,数字表示+ M& Z4 b! x4 d8 e+ U+ \
&gt; data_test.getDay()  ) x& s/ L3 H8 B. @- k) E
5( [* m/ o, m5 M! H1 Z- H
// 获取月份(0-11)
- r2 N* P! d  t- @$ X&gt; data_test.getMonth()9 F" f% f. p, j0 l  L3 g9 R2 v
10 u! ]$ ?1 C: B
// 获取完整年份
  K7 p$ A1 @6 ], i6 ]&gt; data_test.getFullYear()" }9 X. [7 j( b9 j
2022
+ [/ F/ Y2 w" {/ t6 K9 e// 获取时
, d% @7 s/ u1 K* |7 p' j&gt; data_test.getHours()
3 s. ]9 f+ M: v9 Y) C2 ^( {- n21
; g9 L# n/ `6 _6 j5 Y! [' N8 e' u// 获取分8 D+ o/ u3 I6 s  |
&gt; data_test.getMinutes()
. H6 R$ j) L0 J44
6 T9 w! ^5 p% p// 获取秒( y3 `2 F% D8 m0 x, G# ]% M. p( f) u; W9 a3 i
&gt; data_test.getSeconds(), F8 `& G4 E% _) ^5 K; t, h
43$ U# l5 A  c" z! X: f8 `
// 获取毫秒
  |3 n9 D! \; L2 M( {/ U+ E&gt; data_test.getMilliseconds()& X. z5 t) Q. K- e: B3 N+ S& {
290
4 N7 Z3 ]% l8 k4 l! l3 |- ^// 获取时间戳3 h4 h( c) v, w1 |0 J" g5 l
&gt; data_test.getTime()6 F2 D6 m# o2 T6 Z3 y0 `# Z+ F
1644587083290
5 x& z" D' m7 Q. d</code></pre>
) Q9 f4 [8 S/ Q0 M8 J7 T<h4 id="282-json对象">2.8.2 Json对象</h4>" R4 G# s2 f/ f
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串; y* O; q4 X6 y  X- i# y9 x
JSON.parse()  // 反序列化,把JSON字符串转换成对象
4 x  O+ Y7 i3 W+ q" z$ J0 G# B7 o2 k( k3 R$ B8 z
// 序列化
. r! q3 v. P+ T- S8 _  g* E&gt; var jstojson = JSON.stringify(person)
+ N& P7 B: x( @5 S0 t; I&gt; jstojson    v; g" Z1 Z2 s" N5 C
'{"Name":"Hans","Age":18}'5 m. K# @! t- J+ v* W( w
0 Y+ ]' Q$ a' z  G3 J7 z3 D
// 反序列化. {) K" S8 z7 K
&gt; var x = JSON.parse(jstojson)+ r. G" i  n1 V+ t4 k
&gt; x4 r& b$ C1 p# o  G
{Name: 'Hans', Age: 18}
, d9 s1 N- c8 w/ `; \&gt; x.Age" T6 \% t" O( o$ F( Q2 M
18
- r% {" s! H' p8 r4 Q, x7 t: L+ x</code></pre>4 u- Y: h* V% Z" J, O1 }" ?
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>6 R+ }% A9 ^* z! i9 G" ~6 W
<p>正则</p>0 ?, R/ r4 ]7 h0 q  h3 @
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
% ]& o: g$ c$ _' }, G' |9 P&gt; reg1, ?* m* {$ ]( c% U: s* A1 j$ p
/^[a-zA-Z][a-zA-Z0-9]{4,7}/% C2 F- h+ w6 g2 Z, X2 p
&gt; reg1.test("Hans666")
' @* C2 g, r2 o8 a! h$ w# @4 \true
- A$ M0 \5 m9 M) m" w
3 l* L0 U5 n, T# u8 f&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
3 b1 I) ]; f' F" B" {&gt; reg2, ^( Q( w# o* u9 S) Y
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 v. y0 l; g  {, A! ]/ J; _&gt; reg2.test('Hasdfa')
" _8 R8 ~& T- j0 Y7 H9 l- Ftrue
( ~5 K& Y$ P% \$ d* ?. @! {/ ~6 k
' F: ]/ t; W; l' R4 _! y全局匹配:) N; ]0 i, f% q- Z' J- F
&gt; name
1 a7 O3 C* A, ]9 d, F" Z2 \'Hello'
7 y" }" k  j: l9 _3 v  V% F: T8 D&gt; name.match(/l/)
$ o2 Q! m0 m/ O['l', index: 2, input: 'Hello', groups: undefined]
6 S) S5 r: z# o. S) L1 H
" |( _2 o, J+ u# U! k- I' z( K&gt; name.match(/l/g): H! B# f  w- E
(2)&nbsp;['l', 'l']
) \. p6 v: l( f0 }// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
" O" x. H3 Y/ k3 T5 Z7 I5 H* Q0 ]6 c1 t" r0 c
全局匹配注意事项:
! k7 O! u- U( z" Z, W6 D, {&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g" u; Q: [! u( ^4 f  G+ V
&gt; reg2.test('Hasdfa')
4 m  \1 p  d, z+ p+ r2 jtrue
9 u: [% L) T5 {9 R, T0 s+ ~&gt;reg2.lastIndex;. ^9 U& x- e* `6 ^8 b% }' s
65 Y; ^# r- `' j5 ?9 A; d" c
&gt; reg2.test('Hasdfa')
% G; Q6 G, B) U7 k  d' Ofalse
. q9 |: i; I0 @& I6 q# _&gt; reg2.lastIndex;8 e5 r  g: {9 q8 x' F( F
0
( _( H2 N0 Q. f4 K4 W# m7 y( z&gt; reg2.test('Hasdfa')
3 o/ E& }$ Y: F" j( Ftrue
2 |) X7 Z1 R9 F) n/ w  C% i&gt; reg2.lastIndex;
- N8 }" |  l9 L$ z4 z! [* K6
5 L9 O9 w: H+ t  C  J+ Z0 u5 }&gt; reg2.test('Hasdfa')
! G# K4 ~8 j5 U) pfalse% s4 f  W. z; w% S! o
&gt; reg2.lastIndex;8 ~/ B$ w7 b; p; P
0
' m0 U/ G; u$ X- N1 Y+ t* ~// 全局匹配会有一个lastindex属性
9 G' b) w% K, Y% y! m+ O&gt; reg2.test()
& a  E9 G! d! h9 @+ f7 qfalse
  R$ u8 j* _0 w9 a&gt; reg2.test()
/ c% i5 M. T2 g9 B+ r' L: K: W+ D9 etrue5 [4 g4 y" H) @+ u1 h" \
// 校验时不传参数默认传的是undefined) A2 x6 u) N: @' P: I- b! \1 l
</code></pre>
; S% Z3 R) ]) K* b<h4 id="284-自定义对象">2.8.4 自定义对象</h4>& P0 e$ E! I4 G* J
<p>就相当于是<code>python</code>中的字典</p>' [3 y2 C/ F! D& k! B
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}/ D2 c. K& y5 [2 t$ E2 O
&gt; person
/ [# H8 y& ]" f0 u) L{Name: 'Hans', Age: 18}3 b6 V: u5 v7 u( h) q8 x
&gt; person.Name
0 J8 X7 e( ^! R& C5 J4 V: z& B4 e. b' }'Hans'4 n1 ?! @( w" m; k# T
&gt; person["Name"]3 i/ g6 B; o6 V- N/ t4 ~. [
'Hans': g' Z" l9 h: C" B

' f& b& ^2 T, n) f// 也可以使用new Object创建9 n" S0 @: D8 _3 X' |* Z# @
&gt; var person2 = new Object()
7 S  M9 D# _; Z  W* |  `, y- o. D0 e&gt; person2.name = "Hello"
+ t! s  ^2 M- i2 X'Hello'6 N% {4 l( {5 i3 [( C8 u
&gt; person2.age = 20
, h! k- X9 C9 z1 d20' i0 j4 T7 o% R1 k( s8 J6 `8 ^
</code></pre>
8 @1 t7 W( b& g. W& {1 R<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
2 y8 q0 M6 ~# R: X$ u: Q, Q+ t<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>8 s' J) X% ~$ j% b, W% f
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p># u) d6 [' t6 X, k* l" P% v
<h3 id="31-window-对象">3.1 window 对象</h3>/ x8 ?, |* e" k
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
5 U- K; |" q6 F- t" D<pre><code class="language-python">//览器窗口的内部高度
7 ~0 X& w' O! p4 V, Y9 V* xwindow.innerHeight ; N3 _5 @  K1 ^/ ?4 a' t# ~
706/ m8 ^% v, `( s7 D. M
//浏览器窗口的内部宽度; y& C' n6 r& H
window.innerWidth
; |4 n/ `% m+ i+ V6 h# s/ R. A1522
  T" F7 x' C) p" p9 L# f+ J9 X4 X// 打开新窗口1 K6 Z  t% H# e) y6 \9 T
window.open('https://www.baidu.com')! Y4 X6 _' ?6 e0 `; D
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
( f5 y1 X; `% K8 b$ X// 关闭当前窗口8 r  @; s* W" i1 G7 C
window.close() - w: S" `: T( ?" Z
//  后退一页
8 y$ B: A' `' K: U- r# awindow.history.back()
6 z$ K) S, b( U' M  m- W0 U// 前进一页
5 S3 E) G" b/ }window.history.forward() 8 B/ L: v/ _/ @% Y
//Web浏览器全称6 Q$ T: c- a# ~( `* ^: D
window.navigator.appName' y; r0 h  i, Z
'Netscape'- V2 V& R2 [6 s" O  W" r2 P( k3 I
// Web浏览器厂商和版本的详细字符串
6 ?# i1 E- F# q+ Y& l4 L4 wwindow.navigator.appVersion2 [' r  {) b6 S: C- }0 w8 H
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- @: _0 Y; e1 m8 @3 M) ?
// 客户端绝大部分信息& P, m5 C& }- u
window.navigator.userAgent$ ^5 Y% D  c. A: _; Q* _) Q
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
2 F2 H/ k5 v! K# L. c// 浏览器运行所在的操作系统* T- A0 y) G, p- x
window.navigator.platform
& y, q0 H/ n/ l9 V# h0 B7 p+ d* h* s'Win32'8 E9 R( r) i- f; \3 g+ L3 Y* I
$ j; n8 j% e0 R8 p
//  获取URL
  U; k# v1 y) r9 _3 c( i) a: {+ `& fwindow.location.href, Z+ i( R( u- G/ O
// 跳转到指定页面
4 \! ~: X. [6 p. e3 i. ?window.location.href='https://www.baidu.com'8 M- l" `$ `0 z* P3 |
// 重新加载页面
& L- W  [% {0 h: K0 dwindow.location.reload() 4 S+ L- ~6 J) c/ z4 u) b
</code></pre>7 N- B' y5 S' P
<h3 id="32-弹出框">3.2 弹出框</h3>! t0 A! I5 F* s# V' I, @  ]
<p>三种消息框:警告框、确认框、提示框。</p>
, ^( a4 ^) `8 J<h4 id="321-警告框">3.2.1 警告框</h4>
! I& x: f4 D& ~. p; r  J6 K' x<pre><code class="language-javascript">alert("Hello")6 }. o9 p0 Y- c; \; x) L) m
</code></pre>6 q+ K1 H; F2 x# g3 O; s4 B
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
/ i+ p2 \5 m& ~, b2 A: z! L<h4 id="322-确认框">3.2.2 确认框</h4>
, y! @2 _6 }, O<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>! T( O+ E8 X: ~6 @
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true- P+ v: {, F- z  m) L8 P
true+ a8 J7 h' N8 h0 }7 n7 z, \+ g# b6 M
&gt; confirm("你确定吗?")  // 点取消返回false0 C9 d" b' [0 Y( K# M7 Z* L2 S
false
: R( X1 Q7 X# g9 t6 ~</code></pre>3 P( J- r$ e" ]; Z, b
<h4 id="323-提示框">3.2.3 提示框</h4>6 I: P; N' x9 }  I1 q
<p><code>prompt("请输入","提示")</code></p>" y$ i. f. D0 |/ X. n
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
5 D: S7 _$ C* V1 f, W, ^$ `% p* l<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>' ^9 c* c8 ^* Q: A
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
" S8 v# E6 m7 O: r8 B<h3 id="33-计时相关">3.3 计时相关</h3>4 X/ j& {' o& w' {% e9 T% ^6 o
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
" F7 E  R3 T" t: J<pre><code class="language-javascript">// 等于3秒钟弹窗
8 [) A) l9 g( msetTimeout(function(){alert("Hello")}, 3000)
  h' T2 \1 e7 D+ `) E# t* _9 H- k, [; H' Z- J/ P
var t = setTimeout(function(){alert("Hello")}, 3000)# U' ]$ Q( i  z3 a$ Q0 |

+ Z$ u* Y. h- ?2 B; ?* J. A3 x// 取消setTimeout设置5 A' L: _9 w2 R6 h
clearTimeout(t)
- y, G, T7 u- g0 \</code></pre>
6 s$ d. r3 s: o  Q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
) [# s8 h6 {! B/ n7 _+ @<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
; E; G4 D% K2 _2 i( ]# Z! V<pre><code class="language-javascript">每三秒弹出 "hello" :
+ b7 Y+ d) ~' v3 b7 [, MsetInterval(function(){alert("Hello")},3000);
! |; I$ I/ o4 q/ T* _</code></pre>9 F7 s8 m1 c6 Z4 a! z. L
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" t& g3 W9 x: z' \
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
' P6 F# G& J7 H! z9 G//取消:' |* G6 V1 A9 ]9 M
clearInterval(t)$ X, O6 R7 I% M) e+ X
</code></pre>9 l. \1 o5 n; l' r0 N4 _

; v8 ?9 j1 i; p1 U
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-6 18:37 , Processed in 0.078043 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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