飞雪团队

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

前端之JavaScript

[复制链接]

8030

主题

8118

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

  Q  Q" a) m9 N. ^4 ?6 P<h1 id="前端之javascript">前端之JavaScript</h1>) k  F2 \, o7 }: h2 c6 j
<p></p><p></p>
- L! A) }' N1 ^" W" E. d<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 Z6 G3 ]4 F; c* @<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
+ Z3 r, E/ b- T- j2 Y8 W0 Q8 i0 t它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
! I3 `* E+ Y* A/ R' Z8 Z它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>8 T8 s2 v' S5 c: k
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
+ A/ o* F7 Z8 n( c' N. u<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
8 N  U$ b* d+ x  G4 r) J  r<h3 id="21-注释">2.1 注释</h3>
; n4 ~$ g6 E, ]<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
- \8 U% V( O7 ?' G<pre><code class="language-javascript">// 这是单行注释
! g4 N! b2 k* F- ^+ i: o2 x, k
$ _; @( c/ w. b& T" G7 x4 M/*7 N( \* W! C! ?1 g
这是多行注释的第一行,( |' l3 d( L/ x) i' X
这是第二行。
* s- \, S0 S+ F% L  M9 J: N*/, j9 [' T' G0 U3 H
</code></pre>0 e. @* ~& C& V  O9 G& X* Z' T
<h3 id="22-变量和常量">2.2 变量和常量</h3>
+ X5 |8 U' y! h<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
) G; k- `9 ?1 W, Q<ul>
, B/ d: _" T( D$ @<li>变量必须以字母开头</li>
7 f8 @5 D/ l5 ~1 Z4 ]- B<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>1 D" s( |5 I: ^% B8 _; E
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
% m& I4 e" G7 R% g8 c: Z</ul>
* ?6 e- F4 H* A5 }<p><code>var</code>定义的都为全局变量</p>
3 ]3 b& h$ Q6 ?3 A( J5 k7 ~) X$ l# a<p><code>let</code>可以声明局部变量</p>: f7 }1 g: t2 h6 g6 S% S: T8 O0 u
<p><strong>声明变量:</strong></p>
) V, g( M0 w. f# h# P" y% g- n* C% R<pre><code class="language-javascript">// 定义单个变量; c& b5 z. {' x  A" m
&gt; var name
4 l/ h! L; P5 h8 n&gt; name = 'Hans'
6 n6 {6 X% v- `$ w! [//定义并赋值
- _; h! H% c7 |5 @# \" T* w- {&gt; var name = 'Hans'* p! \% A$ I1 @; c
&gt; name3 ^- Z" N5 \" j6 Y
'Hans'  o2 t3 h' g+ K1 K4 r. L
/ C; {" H6 N% m/ P
// 定义多个变量
( Z1 j" i' z8 ?9 W! q& l. k&gt; var name = "Hans", age = 18  }4 I+ a9 w7 }: K$ ~
&gt; name  |7 B# Y: _* \1 w! C' V
'Hans'
; C1 J0 M: i8 ~&gt; age& i8 E2 P1 G  u# r1 h
18
( Z7 b. C. M1 h
% U4 }: \* g+ V$ m//多行使用反引号`` 类型python中的三引号
0 |6 E/ g5 c+ c' V$ a* E&gt; var text = `A young idler,
" h/ [% q% _: u. j' A! L5 [. Jan old beggar`. Q! I, L. }  @. J; k
&gt; text
' E+ e* E; h% T( v9 a8 O- ^'A young idler,\nan old beggar'1 G6 X3 e. [( J$ I  J
</code></pre>7 `/ i2 e* o" t# L
<p><strong>声明常量:</strong></p>& @8 k/ [' ~* y
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>- ^$ W+ @" K6 D. D6 j% f$ l/ a
<pre><code class="language-javascript">&gt; const pi = 3.14  m5 U# I( L, c+ _! ^3 ?, K
&gt; pi
/ `6 ]9 N2 s" X+ E+ t) g% x3.14
. |# U1 k' ?0 L& v% p; c4 f&gt;  pi = 3.014 F0 T+ x" y& m, m% v
Uncaught TypeError: Assignment to constant variable.
" r: A8 c0 a, E) I) z5 v    at &lt;anonymous&gt;:1:4+ i3 U2 i+ a$ i

9 C% v' j1 d. }8 ~$ {' e</code></pre>% m) }6 w9 g: n0 q, Q( @: ]9 B; Z
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>3 i1 H! \1 O( ]1 Q
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
) |, [1 G, Y0 u6 q* t<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>7 _* T  @0 k) J% j, t3 F  |# n
<h4 id="231-number类型">2.3.1 Number类型</h4>
" M+ p) M3 c8 K  V6 q) z+ h5 X8 `<pre><code class="language-javascript">&gt; var a = 5. C0 q# [# V: M" L* g
&gt; typeof a   //查看变量的类型  ( y# N. v- ^/ q# S/ n% v* E
number# U. c- Z3 q7 z+ N! c* n
! d) _) v4 r" U/ |9 u# d3 e
&gt; var b = 1.3  y0 I5 |0 H9 r$ X' Y9 N8 ~
&gt; typeof b
1 d+ F1 U* I, c* ?$ i+ _1 }3 e" j' d9 m; enumber  k! e+ H5 h" O! f

) @, ^! L( e1 u8 |0 d. @// 不管整型还是浮点型打开出来的结果都是number类型
. s9 }* \; ], [/ f. X4 A/ Q& u3 d9 Q$ {2 ?( d* y" y+ ?/ _+ ^
/*
  m7 o, R2 l# s( f, `" fNaN:Not A Number
- s) @6 o3 F; Q# nNaN属于数值类型 表示的意思是 不是一个数字
* V; ]& Q* a7 w9 v4 t" R8 Y*/) u& H4 w0 ?( Y# `( _, N1 I* ]
. @2 }4 y2 M% M2 M* x* m
parseInt('2345')  // 转整型
6 W( L4 S; e; q5 }6 G& a2345, i& E) q  T; E5 e& c+ A
parseInt('2345.5')% a# g( G5 b- w* C  S
2345
+ D* E0 O; G! h3 LparseFloat('2345.5') // 转浮点型! M8 [. m' }8 x* Y
2345.5- e( x2 {; S" l( U2 Z3 d
parseFloat('ABC')
! Z! k, X$ d( E( {% bNaN! y6 E- ?0 O7 ^% N7 f
parseInt('abc')0 T! E* e4 E) Z8 q/ ^
NaN
( x& |6 H( g! Z: m</code></pre>
) p+ l% g6 Q7 M; O& w5 k<h4 id="232-string类型">2.3.2 String类型</h4>
, b7 ?. I/ z8 f0 B- g<pre><code class="language-javascript">&gt; var name = 'Hans'" d1 `( u2 D3 X& A( r, g: z
&gt; typeof name
, j6 |6 t4 P! I1 ?, H'string'; n3 C+ a; n2 T4 K3 n0 P$ a
- }4 w- \  i1 i4 U# x3 d
//常用方法+ t9 d0 y! K5 \
// 变量值长度
, q6 r& j3 g/ c! ]  k&gt; name.length+ U7 A' l# F7 L! b
4! w1 @2 {: s, C9 r4 U" V0 [- D
// trim() 移除空白
4 h- o" x4 X7 D6 C# }8 n' x&gt; var a = '    ABC    '5 p" J" N" g6 b/ j! O: p: @( [
&gt; a
; a8 N/ ?" I6 W% k'    ABC    '6 `. s2 `0 x% C# b* y
&gt; a.trim()
1 S! m) g: @. I6 v'ABC'# m- B! H; [' v! K8 a7 t' _- k6 Y0 u8 Z
//移除左边的空白
, e$ h$ ?& b" ^&gt; a.trimLeft()( v9 ~/ }; F$ p# m1 q/ x' E
'ABC    '
& G; E6 ~. K/ \5 d//移除右边的空白
8 M# _% X8 i4 b3 ^, N&gt; a.trimRight()5 a) J9 W' i. s: N3 {6 D) C* ]; @# [
'    ABC'
& p4 a3 m* t; ^: w6 z, l) k
0 j3 ]4 ~" U& q- m/ i) Q2 ]//返回第n个字符,从0开始
' N  g* e5 C, `&gt; name
2 A2 z  L. O7 o4 A  {7 j'Hans'
) ]( `0 _4 j5 O&gt; name.charAt(3)
7 g8 h, t( P' T0 _) E6 V's'9 @% O% c: v* b0 V3 J5 T
&gt; name.charAt()
6 }! |# d. i3 ~; E2 m'H') H; L. Q; S+ W4 @! W; d; L6 X
&gt; name.charAt(1)
- j% Y. I0 w5 ?9 E'a'
: j( g$ j, Z! k3 y# u/ g% E- U) O4 n* C% U8 ]: y$ J
// 在javascript中推荐使用加号(+)拼接
0 F0 E6 }1 p, m& W( V&gt; name- f* {3 A7 B- F/ f
'Hans'7 ^7 f8 G( \, ]2 i! {0 V
&gt; a
+ B9 s9 F6 N) h. O; Z'    ABC    ': X- P7 t- u( a2 @1 x, F
&gt; name + a. V. C8 E  K* Q" y1 m7 o* {1 Q
'Hans    ABC    '- y9 w) {) v1 s" S. d# @& s
// 使用concat拼接
* o; Y" B  ]# {  ?. W) f&gt; name.concat(a)) ?' @/ n& _+ A+ D
'Hans    ABC    '
& x. I4 j3 n1 [2 \* \
4 o4 n1 Q3 {6 U/ }6 N% q/ i//indexOf(substring, start)子序列位置' a) T! z' k) ?1 y* q! v. C

* g. @# O' S( Z% o% y&gt; text
9 `- _% y0 @0 V5 f7 j'A young idler,\nan old beggar'3 B2 W- n! ^2 t
&gt; text.indexOf('young',0)) Q$ c! D$ Q5 ~
2. e5 l7 e; K# q" _$ o  `3 L- X9 W

+ Z" @6 r" k$ Z* `) f//.substring(from, to)        根据索引获取子序列/ U  X5 p- m1 M0 n, y4 e
&gt; text.substring(0,)
+ y- E9 l: B) P- B" o+ D1 \'A young idler,\nan old beggar'3 M4 [7 d9 g! P6 b
&gt; text.substring(0,10)
3 b( h8 F& L; `  A" P; D- q% I0 f'A young id'" T; J4 q4 y5 ], V% D/ ^9 L

/ W2 i) X: r" u; e; B6 w. a( h// .slice(start, end)        切片, 从0开始顾头不顾尾
( @/ R' V$ c' n! a  R4 o&gt; name.slice(0,3)
6 q6 e! F% s& Q1 N'Han'
) F4 r8 @+ d( K6 m8 I$ N/ r/ m5 w$ _
// 转小写
5 T0 W2 ~* c" ^; d&gt; name
8 f8 f7 l$ C0 x& }; ~+ J/ ^'Hans'0 C! x$ P# _+ t3 @
&gt; name.toLowerCase()
% @7 }" _3 ?5 F. g: i& r6 c, p" d5 k'hans'1 ~: Q& w) G' q/ N/ C, Q6 \
// 转大写
( l/ R! c0 k. d8 T( M3 {/ f&gt; name.toUpperCase()' m5 r' K6 U- c
'HANS'
; r( n5 \: o2 x. a5 i0 b& b9 \" s  A* S+ G, }+ J
// 分隔
/ i. r, e/ f1 x5 Z% c, A, q&gt; name
( U5 F. J- y6 w% A9 c2 g'Hans'8 Z" E6 I$ f  v3 E* E  L
&gt; name.split('a'). G  ?# T; {" @% Q
(2)&nbsp;['H', 'ns']8 a9 C' w+ t! ~: L& A' |; {$ A/ @
</code></pre>0 S# G) [% f0 T; ]2 C0 X' N7 L
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>, [3 V- j2 @0 W5 x* Z6 [
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>' s( H: \: @. @* D
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>0 j- v0 ?% |- {6 a; J/ r; k0 C
<p><strong>null和undefined</strong></p>+ S* N" ^5 R, M. K) f
<ul>  g; c% t2 {8 h
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
9 g# r9 N5 R& n. [; ^0 {. w<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
3 n9 `7 u! t. s+ d0 h+ E</ul>
2 r& L9 O0 |; u' H<h4 id="234-array数组">2.3.4 Array数组</h4>
4 a4 M3 N+ M' B( Z' l/ v" N<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
$ k3 b, K) O+ q7 x<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] % e% W# B; r( Q- t
&gt; array1
9 P" d. o1 T, _2 h, ?: z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 x* q5 B2 F$ E&gt; console.log(array1[2])  //console.log打印类似python中的print& m) r9 C' H% s! A7 K( r& H
3
/ A4 w: J% u6 {: n5 `! j( T3 i, Y; [// length元素个数; N6 M1 Y0 Y5 [# ]  T3 w5 A
&gt; array1.length$ a' L: X3 p" T$ K* x' i
60 P) |2 {+ s) h
// 在尾部增加元素,类型append* |, w# @! L; x+ h
&gt; array1.push('D')$ Y2 y- M' Z2 P6 v; Q. }4 z( N
7/ N, g, d. `& a* A) R) P& v
&gt; array15 S+ M8 @* p9 o& D% h
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']8 I5 [6 ^' F7 H) E, y, q
// 在头部增加元素; |  T( ~+ n& _* q! z" E1 X7 Z; o
&gt; array1.unshift(0): ?  G) {: `7 z6 I
8( O5 U3 U. v/ x. x4 o& L$ g1 ]
&gt; array1. ^  k& o" j& Y
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
% _0 d7 e- O6 ?% o2 S1 F% t4 ]) K
5 B6 ^/ e+ k7 [& E/ v//取最后一个元素. K9 \) D& Q4 I& K0 _
&gt; array1.pop()
- X" {' i! c( @( E6 L! ^7 q* Y& H'D'
8 Y$ v) b9 b! f9 E4 q/ I&gt; array1
- y+ S/ J; x8 i) `- ~. [* i$ D(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']3 C. n- y$ k% ?% p: ~! X
//取头部元素
: t+ [- O1 F$ O5 \0 ?! i2 J&gt; array1.shift()+ y$ v7 V4 W6 t3 b2 a5 I: p
05 J3 {. ?0 R' J" _
&gt; array1% n0 c6 j7 P3 U
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; M8 j. ]& p7 Z8 e6 h2 A1 l

. O+ [# J: Z5 _//切片, 从0开始顾头不顾尾3 G7 M; r0 r2 N- F; L6 T  N1 z! Y+ {  U
&gt; array1.slice(3,6)3 z2 d  G$ T4 W8 o
(3)&nbsp;['a', 'b', 'c']& l. \* b/ l! Y7 U, \1 i5 a# ]
// 反转
1 M9 M# n; t( ?* A# X- n; Y  u; J&gt; array1.reverse()
% N! ^) }! ?/ r1 Y* x" u) _(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
0 }, A7 A- i3 n! |' D) P& B// 将数组元素连接成字符串
/ g- C) ~2 e0 e1 J# i# i&gt; array1.join() // 什么不都写默认使用逗号分隔2 @+ U3 u6 O+ [! y
'c,b,a,3,2,1'
- ~# |# x& a1 a& }$ I* `8 o&gt; array1.join('')/ `$ m) t6 A, t' X
'cba321'/ ~2 Z/ U8 C2 x8 k1 w
&gt; array1.join('|')- A& ^( g1 ^& \- W! _9 F
'c|b|a|3|2|1'
! X% N7 i2 g$ e9 E# F( ~+ C- u7 Q7 H; @. B# w* a
// 连接数组: |$ L1 n6 }" \# {; V0 h; Z7 E9 a+ n
&gt; var array2 = ['A','B','C']6 r; m  R) H+ h
&gt; array1.concat(array2)
& s- y1 p/ g: d1 n& W; c$ t(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
$ D6 B7 a* f) x" @+ f! Y0 c. ^8 h7 o; v2 w; v: s
// 排序
5 h4 [/ F4 b% ]# _# i5 |&gt; array1.sort()" z" e8 M& F! b' l, t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ o  i5 ?$ A7 E* u/ y. Z
- }5 L/ ]- n& ~9 |) W! d, W$ U# U6 x// 删除元素,并可以向数据组中添加新元素(可选); y' Q2 m' |6 |) l( B0 R
&gt; array1.splice(3,3)  // 删除元素$ [. Q' A1 G% Q
(3)&nbsp;['a', 'b', 'c']
1 B8 Q$ q$ }; P9 Q) T; I2 L&gt; array1' c1 v7 A7 H+ p' I. \* O% M) p
(3)&nbsp;[1, 2, 3]& A4 }3 N" L% ]- P1 L( D  {
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素& l( r+ g0 }2 n# f
[]4 D/ T8 G' t: [$ S- C! E, y
&gt; array1
- @, P8 l% }; ~5 ?7 N(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']. F5 b) R+ K" M" V8 n
2 v6 r. S" B* `8 Y( W+ I( P
/*
8 K. x* l8 q! U7 _splice(index,howmany,item1,.....,itemX)2 y/ K: c8 W, \# `
index:必需,必须是数字。规定从何处添加/删除元素。
0 g* o0 B) C* Z" W9 ^* Nhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
# e6 x+ b$ [! E. t# `9 H8 eitem1, ..., itemX        可选。要添加到数组的新元素. Z' h- O. }& V# b* L9 ?+ E
*/0 Q: ^, D4 v: g4 S$ i; t

  {$ i0 U( {: R. |* L// forEach()        将数组的每个元素传递给回调函数
# T) X4 |6 |1 z7 j/ l9 C0 c" e&gt; array1.forEach(function test(n){console.log(n)})
& V9 k6 q& [# k9 Q1 f+ c# z 1
! X- M) `$ P0 y+ E! V9 j 2
! I6 c8 }* i4 d9 h5 [" `. F$ F 3( v- v; ]9 D# M0 v+ [7 D
A0 D( V, n( t, N5 w0 S
B
7 k: f: t# a' k C
7 Q' R! A7 Z) r8 ^// 返回一个数组元素调用函数处理后的值的新数组
/ m& C+ X: N* w&gt; array1.map(function(value){return value +1})) \9 r) h$ c4 K8 r6 }
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
7 D' _5 T( c1 g, s</code></pre>
1 ~8 w- }  y+ h  r<h3 id="24-运算符">2.4 运算符</h3>
* [1 ~! E! _# |& n& Z, _1 z  y9 T<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
& _' q  R  ?: D<p><code>+ - * / % ++ --</code></p>
$ v. a( I9 \8 a8 @! R8 g$ z<pre><code class="language-javascript">&gt; var a = 6
1 h, s% Z3 W7 b, I! L3 V&gt; var b = 3
8 ]7 w/ }9 d* G' j  W2 D// 加
& s2 D- O; H( X- Y&gt; a + b+ F7 b. U5 [6 A9 t
96 r2 ^% J* B4 R1 p. U+ O# ~$ _* s
// 减9 M3 Z6 s2 q! L) |5 ~' u$ S
&gt; a - b
5 i6 p6 }$ p# w3/ L" L$ }  g. S1 ~) |( b8 A
// 乘
" a- v; [; U6 d; v&gt; a * b
# Y6 v6 r4 M, Y0 F% f$ e& K# ~18
7 Z( G5 N* f( f// 除
! A. b) @8 I$ @/ o$ X% n# o&gt; a / b- }0 `* B8 P7 L) F! s8 Z  |3 B! \
24 ?( c' R5 K9 j9 _, @
// 取模(取余), C% J' s4 Q; x  L) V- c9 D$ O7 I
&gt; a % b  d9 ?- S) ]3 A3 Y/ @! }
04 ]8 g* U! s, u0 _, S6 y
// 自增1(先赋值再增1)* q" k0 O+ @6 K7 K
&gt; a++
9 k, ^8 ]; h+ G7 K0 d+ |: M6+ z' ]: q) x' X& r9 t
&gt; a
9 N) }5 s0 K2 C' y7
& c0 V- V1 |0 i4 E6 j! ^& N2 ~// 自减1(先赋值再减1)
/ Q5 r( J# |# w& A& w4 W$ {* m6 G&gt; a--
: m8 E8 O1 w& B; Y76 a& h3 y( \7 j3 Q& n" R
&gt; a5 T; K) n/ e: f  |, y/ X3 P
6
5 y6 {7 o3 ^6 m/ y2 F3 a- E  n// 自增1(先增1再赋值)' [9 p) l! E% ^+ O, g
&gt; ++a/ j9 r" J0 w' v7 `1 d8 [
72 ^& N" ~. d; _. z
// 自减1(先减1再赋值)1 q8 \: j5 F( ?; c
&gt; --a( q- ?! h4 g1 L4 ~9 x$ x9 u$ y
6& a* D9 E. ]! B& a  W6 p7 n+ J
&gt; a9 {! I9 \' Y3 j6 @
6# k! K5 J* k" v; q) {
& \, e) U; v' G9 J+ s& z
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
, V4 j  J) v7 J0 w/ v* T8 U/ f* u</code></pre>; S, A! V& i2 M5 E( R
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
  l4 n9 p. ~2 q8 ~# ^$ a% q<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>5 p; F1 f* X  s' C$ C2 U  P
<pre><code class="language-javascript">// 大于8 }5 ~5 G9 W! N2 L- m
&gt; a &gt; b. A+ O- F9 t6 U) ?/ S
true
/ F! s7 n' k5 [+ w2 Z$ Q2 \// 大于等于
0 q1 ^' x5 F8 P" P&gt; a &gt;= b
( Y4 B; [4 t5 atrue
( g0 i$ s# J5 Z- K// 小于
6 p2 w" {5 o0 G" Y+ B5 i0 {+ Y&gt; a &lt; b
, W) l/ J4 G: \) t8 J1 o% ifalse
1 ?& K# o- w" n: p  Y' h1 `// 小于等于  d# h& |1 c: N! t/ ~( z
&gt; a &lt;= b' k" E" m2 ?9 S
false
$ M& N8 U! u2 T: U8 ?) [// 弱不等于0 c* N3 o7 z! q) Z# z8 d( Q0 o
&gt; a != b
$ ?4 v) g5 w  c3 }. qtrue3 _: C) Y: X% b+ |9 o1 T, j
// 弱等于
. U) O, }  c8 e7 W% O5 A" Q7 z&gt; 1 == '1'
; a; d# \' M$ O$ y$ ?7 Z2 x5 J$ [; `true
# U3 {5 g4 o3 h! O& q// 强等于
% c" f; l" l% W3 t9 w&gt; 1 === '1'
. Q; Q& K3 `/ ^9 Ufalse
* n# |9 q4 j( y4 i// 强不等于0 V* F8 L% p6 l# n/ J- S) ^7 ^
&gt; 1 !== '1'6 f* Q2 u" e0 p3 q& V: O
true
( z( E6 m& i; u9 b7 z0 F
, Q* \7 }! v' |/*6 D- l7 o9 F$ [6 z! R3 W4 r
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误/ Y5 u; @( X3 o+ [6 S3 N
*// M# \; A. H& S3 c1 a' U0 }7 K
</code></pre>- o; U2 j( T7 [) X# @
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
2 q9 U% K. D) S0 x) _<p><code>&amp;&amp; || !</code></p>* _7 I1 X) |3 L# E
<pre><code class="language-javascript">&amp;&amp; 与0 H. G6 O) ^* l' B% }7 c3 d0 c2 \
|| or
- C% o3 S1 p3 s  p% Y! 非; T# N8 A* }% Q: [) c
</code></pre>/ t* @/ M! y2 @2 k
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 T" A& s* C. @8 f: l0 h
<p><code>= += -= *= /=</code></p>
. s5 k& s. b# d6 [2 k<pre><code class="language-javascript">// 赋值1 ^+ T$ `9 g8 P1 `
&gt; var x = 3
& \/ H$ ~, y6 u$ O) O7 _% j// 加等于
8 Z$ U6 O% O' e% ?+ @&gt; x += 2
3 h# e( c* f8 I' G4 n. F5
6 i; t& p1 Y9 Z" G+ a$ p// 减等于; Z) _4 v: Z; k, e: ~
&gt; x -= 1
7 U6 I8 m# v8 @+ X$ D4( E2 I7 @  t9 F
// 乘等于3 q; J3 e% [1 O% A: N
&gt; x *= 2" Y& [8 ^. J2 ^# s& ]
8
* d' Q6 y8 B  N) i. M// 除等于7 l- |" b# C7 T1 H$ r
&gt; x /= 26 F0 m' h# ^+ u6 C# b
4# g) S: z' c  H  t
</code></pre>* Q. u' k( ]9 c$ U. V2 J( _( ?
<h3 id="25-流程控制">2.5 流程控制</h3>" A- V, t% e& p/ E9 m9 @. a
<h4 id="251-if">2.5.1 if</h4>
# P0 q' s2 O2 f1 `' m3 @+ _* _<pre><code class="language-javascript">1, if(条件){条件成立执行代码}7 Y; Q  H4 K5 h4 z

/ @" Q' K, n; A9 P3 C&gt; var x = 3
$ f5 p" f8 C1 l& S5 M7 A3 {&gt; if (x &gt; 2){console.log("OK")}
+ S& g6 n' c. d) R6 @ OK
4 ~. p& P  x9 F& k6 c/ H% u8 {! D( n( e# C" u5 ^* T
2, if(条件){条件成立执行代码} 0 D+ w- d" _9 V4 j. a
        else{条件不成立执行代码}! I) _& K$ D% a1 g# d/ q/ [
, U9 U/ T* _: B. v9 [! v" N
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}8 v# {* i) n* x4 D- a( A. _$ ~
'NO'
1 ^3 |" D' E& x- |# a( a- A  n4 X( J% v) F1 u3 c+ |
3, if(条件1){条件1成立执行代码} : K6 G. x% Y/ y
        else if(条件2){条件2成立执行代码}# u  U) ?/ E$ z# u
    else{上面条件都不成立执行代码}
. z) T- G  `" [; J$ b% d2 r
9 L+ Z! p! ], Z+ Z&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
  {- I& g: W! r7 p( l# U1 E, _2 b Ha' K+ i1 g! Q5 r# ^8 H
</code></pre>
& _- k( |3 `* {( v) T5 k<h4 id="252-switch">2.5.2 switch</h4>8 f, s! D5 ~. |
<pre><code class="language-javascript">var day = new Date().getDay();  S) n+ R9 H* U9 `* X
switch (day) {
, v0 [4 ]) p2 }2 O7 ~. T# `( P0 u  case 0:9 x3 V$ F3 u1 i/ e
  console.log("Sunday");" G" y1 i. E- n+ A0 A
  break;, `3 ]& v* k: b6 |: c
  case 1:
: m  |% [9 X1 b7 \! E: C  console.log("Monday");, x0 i* j, k" D' h" s
  break;
5 G( U% o/ a' n: Sdefault:3 n1 Y7 ~/ {4 V9 N% V# R& U
  console.log("不在范围")
2 d1 ^2 l5 a9 m( r$ k# e$ w}  H0 g( j! s3 p3 t
不在范围
& R$ S  q: m9 _3 u! j</code></pre>
. j. @  `9 L2 G2 x; E. y! R<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>) B, C+ E7 H( K8 E% ]8 w! j
<h4 id="253-for">2.5.3 for</h4>
! X! j1 ^: X2 i+ J<pre><code class="language-python">// for 循环
8 v" K+ Z$ k8 S: X& m  _; g        for(起始值;循环条件;每次循环后执行的操作){/ P/ P8 l& C" G' B" K. u, L
        for循环体代码9 G; G6 l4 e7 E* D2 h2 q$ A* F
    }; S4 f7 z; m) A

7 ^# C* L# a1 ]- B+ a2 p  J, afor (var i = 0; i&lt;10; i++){$ T( a# F1 P: w# \2 _& O- C
    console.log(i)+ z2 q) i9 e+ s/ b
}
5 }* C- y$ Q5 z0 N* Y- r        0* g' B. y) F; D, P
        1
2 r9 M# k% ^( T$ R        2
' n4 ~, [3 F1 m2 ?* D' _& \9 p        3
& G. o# z) D; e+ ^5 m& |        4
* `$ a$ G" L' d7 l- {6 w        5
! ]5 H6 z) @% ~+ |& v        6
+ e, ^& F" V7 j, ~5 ^# E        7# T. L+ n( s  {0 |' P
        8+ S2 X, Y! v7 `' \# A9 }/ ~
        9
2 s9 i. [, P; \</code></pre>( I3 u3 h2 Q6 B, t4 B5 U' {
<h4 id="254-while">2.5.4 while</h4>
0 E) ^+ T8 C, `1 {3 P$ m1 d3 V- M<pre><code class="language-javascript">// while 循环
+ a6 N  x( r; C/ @        while(循环条件){6 a$ u8 z& c! |- e) {7 D
        循环体代码6 ^* Z0 y9 ^$ z/ X5 J
    }
2 \: h7 V9 }( u- I8 `' q# r3 E/ _5 V* C) k, z4 `! e
&gt; var i = 08 {; d, Y0 D/ T0 E$ L8 q; C
&gt; while(i&lt;10){. i; f- C" Z$ {/ P; a
    console.log(i)
8 P2 S- l6 j/ c9 V    i++
) t8 o- U/ O0 \) H5 `/ o}
" ?9 H  j4 R  r; T: |9 g$ s 0
7 t% S& H  A+ w+ p- ~ 1
1 r* g! J3 ^' \$ f. w0 H 26 s: X4 t# t( f, p3 Q
3
! P' |. y7 R9 r+ H4 y1 E 46 ]1 I0 Y4 g: c1 r# [/ W  i( c" f
5
. ?2 i: l" F: P& _7 M  D6 e. @ 6/ k8 s1 H- h- }- }
7
6 J9 c) E8 W# S# ~3 g. N9 a 8
0 _3 [, \, N) o5 o+ [ 99 ~  z6 {6 V' @3 g( X. Q2 o
</code></pre>
/ r3 F0 X: w9 ~/ ?<h4 id="255-break和continue">2.5.5 break和continue</h4>
9 m  A/ C3 f3 m! o<pre><code class="language-javascript">// break
. w. a( y( }: [# Ffor (var i = 0; i&lt;10; i++){0 E# w% d/ S. T8 p( x" ?4 Q$ _4 y
    if (i == 5){break}: V% A4 s% L3 T! a( u3 _
    console.log(i)' K, m$ y9 P  B
}
  n! U' ?9 ^# i0 Z 0
2 ?% n2 P1 |/ r8 @& B  ?$ ^ 1
0 l* v' J3 [4 m. Z  ] 2
& h& T" t! Y" ]* }8 q 3  j! N# |; {- }' a0 \; [
4
8 r% }, M0 v4 S7 g6 n// continue8 |; U: P( v3 Q0 G: B9 b6 ?
for (var i = 0; i&lt;10; i++){# N% g* X3 A# G/ x
    if (i == 5){continue}2 l# a; H- f3 [1 u7 d+ I9 b
    console.log(i)% i- v  W& k. h8 M: ~, _: o6 b
}8 P2 D9 |8 Q4 _& I* W' v
0
" V1 P0 e3 ?( x& t! ^) K 12 A! B, j% d# S1 k0 Q7 ^
23 j# A1 G  W) l. q) y$ J
3" k1 @  A9 M) g4 u5 k# l& }
41 T/ ?# i# l% x  ^7 ^, h
6
! g& c/ Z" y8 u9 K 7+ ]% M1 f4 p$ b0 Y
8$ N- V5 i9 Y! _5 e* z! d
9' R1 O, t8 B& @5 G8 ?1 [6 }. p5 x
3 I5 R; |: i8 \
</code></pre>
; B3 k1 x" I6 v4 m# G( V<h3 id="26-三元运算">2.6 三元运算</h3>
) F0 P9 K4 u5 h  L<pre><code class="language-javascript">&gt; a
  k0 y+ }% _  V& H) e6
, l: l+ n3 J: A7 X&gt; b1 P" T5 e* c2 a% X& T& v
3$ K# \1 r% ^  w. U  o, ?

( U5 Z6 E( S# M, D9 x& p3 i//条件成立c为a的值,不成立c为b的值
1 f! W0 n; I# r; T# H( G+ a&gt; var c = a &gt; b ? a : b  E  s& I  _5 V5 i  c1 B" X
&gt; c
. \! ^% Y- V0 Y7 O8 e! |67 R$ \5 g, U" H0 R  d
2 q2 @, M: Z3 l
// 三元运算可以嵌套- A( K9 o% f0 @
</code></pre>! x4 U1 s4 J) o5 ?
<h3 id="27-函数">2.7 函数</h3>1 i& u, P, W! ]( Q$ {  C
<pre><code class="language-javascript">1. 普通函数
: u( ]) e! Y% N5 f7 g&gt; function foo1(){
" w/ \3 }. [! C    console.log("Hi")
  N- J+ U" j4 ]0 |& R! U}9 H* l+ a: [- n7 s- p  x
0 K9 K2 Y% @! L& O" [# o$ T! _
&gt; foo1()! n- N% y2 u3 Y. r
        Hi
, w  ^: z" }/ G9 `1 i; ~2. 带参数函数
( T* C1 w- D& q&gt; function foo1(name){
7 j1 Y. P. R" }2 D! I/ Qconsole.log("Hi",name)
7 H0 G! D2 Q6 H6 N5 W}* ~. }6 Y$ Z, C6 K+ ]6 |0 ^0 J2 m

; I% W: c  l; M: K( @" T&gt; foo1("Hans")
  S3 ^( m$ ^. l% R: HHi Hans5 l' C/ G' t' i3 [* L
' U9 A& B- l% h/ ^1 H
&gt; var name = "Hello"
/ A) U/ F. N' C* y8 A4 I&gt; foo1(name)5 {8 B5 c5 A  a* W" x5 U
Hi Hello# E$ d, y7 C! k$ H# [

* @) B" \: I  K9 \3. 带返回值函数
6 I0 ^5 v' [. U* J8 h4 b&gt; function foo1(a,b){9 I) R; g, _4 X) o
        return a + b   4 H5 h# W( }/ }: ^
}
" u% O: S: u4 B' }" B&gt; foo1(1,2)7 B, S0 h& D" r* w# `/ D6 U& o* \
3# A+ f. |$ y3 n$ B0 L: z+ Y# S
&gt; var a = foo1(10,20)  //接受函数返回值, g' p  ]8 n$ i1 C/ {8 r5 Y
&gt; a
+ w+ }5 v! m& V( r) v- |+ g8 E( |30
- Y4 j2 Y) C& u& o4 }! u) p  s" s  N
1 h- ?/ ]4 D% |  N8 \( \, ?6 p$ m+ m4. 匿名函数
2 h* t7 p/ |6 `% n/ v&gt; var sum = function(a, b){
1 X( _7 ~8 v& b  return a + b;
7 C7 A0 S/ O. r  t5 Y}
  f2 [) L8 p$ l5 L7 z/ U&gt; sum(1,2)
! J7 _* N6 c% ?7 J* e+ A. K  @6 M3
6 n* f; d7 _2 h% L5 Q* T- E) C3 V2 |; Q2 v% }
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱% H; M# j" t: e( A6 H! ]: M4 [
&gt; (function(a, b){
4 f& X1 R% h8 D1 R  return a + b5 Y* }0 O. ~2 ~$ U) g
})(10, 20)
6 a: k& L2 `8 S/ {0 y8 U: ^; t) n30
6 f. ~& c$ R3 l: u$ g8 Y5 \
( e) i8 ]# [0 u! _  t( o% E5. 闭包函数% ]0 {. g9 X! j: ]; z5 L2 n/ P* \
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数% y- w, o, a" P& @4 Z0 T  _4 l
var city = "BJ"
  V$ U/ I+ J$ |; M9 I& ]! [+ _function f(){- S- w; y) A$ \
    var city = "SH"
' b$ T% H6 l( L4 U) \0 c    function inner(){, P+ ~! L: w  U$ b; {# D1 A
        console.log(city)' s; s" m& o9 J1 L! `
    }
! g4 f. f, f8 k    return inner- p& V5 c, T/ j+ a
}
" i/ p! q# N4 E, b9 q  Uvar ret = f()+ g( D" k5 X3 N- ]' _) J; L9 A
ret(): n$ D8 e' T$ B# X7 }- G
执行结果:
' ?5 d4 P% O8 C2 r; oSH1 b3 j- w8 o/ [5 R9 |1 o
, }! x( i4 @# h7 [+ x4 u" I& s, W
</code></pre>* `. O# E4 M9 H& Q
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
# V2 y/ L( g+ I6 z( p* P<pre><code class="language-javascript">var f = v =&gt; v;6 K3 A7 j+ v( |' k, D# K
// 等同于
5 e  h& v4 Q( R) R- d7 tvar f = function(v){
# _4 ?% B! e; {8 L0 f  return v;
, L+ S- r9 Y" T7 Y}
9 m* X6 w" ~' v5 J1 H4 [2 i</code></pre>* r; j4 a/ @! a( A4 J  }
<p><code>arguments</code>参数 可以获取传入的所有数据</p>5 r: d- K7 G5 B, B$ y
<pre><code class="language-javascript">function foo1(a,b){9 b7 C+ w. K. V* \
    console.log(arguments.length)  //参数的个数
' ]" Y2 @/ ?9 Y( |- h7 `5 f    console.log(arguments[0]) // 第一个参数的值
$ t' E& |1 s; F- S- r# c, g! e  W        return a + b   
  @) l0 O: g' F- e9 b}- |" Q& b4 |0 Q/ e) ^) e8 ~7 s
foo1(10,20)' }( V2 S  v% ]* V0 U
结果:
* f) ^: p. V0 A2 u" f, i 2          //参数的个数
" s1 I1 N9 o: n3 \) E* D10        // 第一个参数的值4 g' K3 I/ p7 }+ P( _& k
30        // 返回相加的结果
# `/ ~5 ^$ N- j6 S</code></pre>6 V# O- e3 h- N& d+ H5 j% }
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
3 M( Q5 S- h; j5 ~$ V<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>7 W/ ^) ?, ]# i) u" h
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>" v) D/ Q6 K' a% k
<h4 id="281-date对象">2.8.1 Date对象</h4>7 {# z0 O0 f( k: s+ @4 f, l
<pre><code class="language-javascript">&gt; var data_test = new Date()
7 H  t* A' |1 z9 M. ]  ]8 U9 r&gt; data_test! Z7 g$ `  @8 O2 b" O
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
; u2 E7 X. Z5 I  ]&gt; data_test.toLocaleString(); d1 ~9 \: Y  `& O
'2022/2/11 下午9:44:43'& C- l0 X6 c' g

; Y1 y3 p& _% @, E; ^# a&gt; data_test.toLocaleDateString()
) k! y7 G; P2 s8 ~'2022/2/11'  h7 c8 \* x" l6 i. q; j! u, w
3 W  y: O' T: S* k$ n. n
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
& s$ `5 p( o7 |4 \&gt; data_test2.toLocaleString()3 g( ]& M# l) r: Z# ?
'2022/2/11 上午9:44:43'
0 G" i, O5 O3 A# b# L) i! T, Y* z% P& \  D
// 获取当前几号
2 l$ z$ B$ k% _! r. ]; l, B8 I& u&gt; data_test.getDate()- [. L8 F' r9 u
11: B0 w+ t7 y( c  |7 D
// 获取星期几,数字表示0 v" f6 x' e) T2 _% ~% T* p
&gt; data_test.getDay()  
$ w+ K, F5 p# p1 y+ j" F5
. ?" J; c/ z0 M" L9 N// 获取月份(0-11)
- N6 U* L  p, {&gt; data_test.getMonth()1 \7 l7 B5 Z& Q$ @4 x
1
) G' t8 n( s3 p+ X* M$ p// 获取完整年份
$ K$ c9 r0 D  E&gt; data_test.getFullYear()
8 W( g9 |2 g) S% `+ M2022- n( N" b0 x( b" F' [1 ?
// 获取时1 o( e6 F9 X# G2 W' q
&gt; data_test.getHours()
$ G. E/ k- ?% W' `3 X21- R' q. N+ N; H) G9 ^4 l
// 获取分
3 g8 D" m/ ?4 G, k# Z* K& B&gt; data_test.getMinutes()$ f& f/ X1 [' _) Z+ d) d
44
5 i" I1 u6 u3 M- ~! D// 获取秒
% I8 E) |" y; T8 H4 }&gt; data_test.getSeconds()! g) W; v. q) ~- c7 }1 A1 }
43
; B% X4 R  v# z% C0 M: T// 获取毫秒
& C, a5 m  y: Z  M! B8 H" |&gt; data_test.getMilliseconds()( j1 R, W5 `- I! b% j
290
$ W  Z! |: O  z: w9 u1 k// 获取时间戳$ N9 X/ p* M2 R6 `* m: f! E; b
&gt; data_test.getTime()- y$ [$ r5 s6 o: H9 O" [% w
1644587083290' [! n/ V3 x7 P+ {: t8 j8 Z
</code></pre>
: I/ E- F- C2 G4 ~<h4 id="282-json对象">2.8.2 Json对象</h4>
3 D1 b- I+ A! X<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
1 M$ c7 `; G# p# P3 n2 GJSON.parse()  // 反序列化,把JSON字符串转换成对象0 b6 b: y! p. O: H

9 f' c; H( |1 j, G// 序列化4 I6 {" \. B, a( w8 ?  F  a7 O
&gt; var jstojson = JSON.stringify(person)
+ r$ `0 I9 S4 O&gt; jstojson  
8 m: G; v9 K4 G* r'{"Name":"Hans","Age":18}'
5 ~! e7 B) Q9 r, s6 [( B( N! O7 {9 D
// 反序列化
; r0 ^& U$ I8 g&gt; var x = JSON.parse(jstojson)
- i8 B' n) q' Q; g1 U5 V1 J' g&gt; x
, q# u) i5 C$ G$ q, n0 |{Name: 'Hans', Age: 18}
5 T4 a5 R1 Z6 g; R; w% W! C& g&gt; x.Age/ _5 s# ]* `- s( F! t% E
18
, k  t& `8 Z4 ?- o% v7 |7 O/ z</code></pre>- J3 x/ `4 j+ q6 }3 h- j% F
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>, n, l4 y" O+ G* ?3 J' i' y
<p>正则</p>( g# s3 t9 d( A, e+ O$ d2 n
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
/ F' O/ h# z! |$ o8 U&gt; reg1
- E6 J: Z3 c. q1 {, H2 {/^[a-zA-Z][a-zA-Z0-9]{4,7}/3 A0 `: u( \, s2 v, ?: S; M# n
&gt; reg1.test("Hans666")2 W7 h, e; G5 R: t( b5 d
true
, k* ~' y# m/ T! l, W6 D
9 I$ W; s5 z2 |! n& a8 e&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
! t8 b3 U/ D1 E7 Z5 K1 S&gt; reg2+ R: N; ]& G1 c4 w7 d
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* b- h8 `: {+ P. u5 w
&gt; reg2.test('Hasdfa')( D/ i) _" P! p) e& C4 L
true3 ?  i2 q3 }, j) e/ `! Q, h" D
" }1 P2 G- O- z4 V( Z1 P( m
全局匹配:8 I9 R6 {4 u  o4 _  U' J
&gt; name
& L  U  j% R! e$ p- T'Hello'  @6 _  D& Y& s4 G3 y# Z5 v  q
&gt; name.match(/l/)
' K/ D! x6 a: j* W0 c" ]['l', index: 2, input: 'Hello', groups: undefined]
# V, x, j/ y0 D" Z
2 c# R8 m3 C; ?1 I) g6 n/ v: `3 t&gt; name.match(/l/g)
) G( m- i" S3 [2 `: E(2)&nbsp;['l', 'l']
/ N2 Y" q% r; r. z0 I7 q// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配) P/ ~( ^2 ^) a$ [; f3 P

; k; b' d8 T2 x5 {+ |' {全局匹配注意事项:
. e; R% H2 C0 |- Q&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
+ p: F2 I& e1 Y- t: j0 B9 w&gt; reg2.test('Hasdfa')
/ h; M1 J, K5 ntrue
4 w& D' e, V0 Q( d8 s0 z4 `&gt;reg2.lastIndex;+ A! i) k- k& _" l* [) V/ d$ B
69 g: Q: v& n& ]  |$ R
&gt; reg2.test('Hasdfa')! s' n% T: J7 N& g6 T
false; H/ L6 P: W5 D
&gt; reg2.lastIndex;
' Z; s1 v$ M2 F5 n3 A( a4 V0
; Y$ |5 o+ n7 L- S7 D  V&gt; reg2.test('Hasdfa')
6 t, [% U. I# q& n& T  atrue
: O2 X/ S- T; L; c+ s, l$ r&gt; reg2.lastIndex;
) ?3 V% F6 v$ d; l6
6 J% O; |: X$ {&gt; reg2.test('Hasdfa')
- S6 d' s6 G- n, Hfalse
2 w7 a* H+ O  ]6 _! W- _&gt; reg2.lastIndex;
' C7 y$ w, y6 {% o# g0
: F. T! ]0 s, A' V// 全局匹配会有一个lastindex属性! a) Q8 |! e  s4 A0 c. C" \; X3 h
&gt; reg2.test(), y8 _) \$ t$ u: P" {% `6 S: U6 C1 Z
false" `( \3 T) y7 N. F+ `
&gt; reg2.test()& H- M* K! S- r& V
true' [# Y2 y3 ?. w
// 校验时不传参数默认传的是undefined8 \$ V  n  ]/ w* }! u9 U" T3 Q
</code></pre>  [! a. f4 U2 F+ C" w
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
1 h  y( d6 B; }6 c' {# ^# r<p>就相当于是<code>python</code>中的字典</p>4 t2 l4 w, q- [* D6 b* E- @% R, X  @/ u
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
2 h) \5 x5 k- Q# Q9 Z&gt; person0 U7 U3 V- n, J& N8 s
{Name: 'Hans', Age: 18}( H: n9 T- a; V& D) B/ r6 ?
&gt; person.Name
* G4 o  S  y7 ^3 u' |: B1 P3 A3 {8 u'Hans'5 t4 Q. n  K# E7 G6 O' m- R$ K
&gt; person["Name"]
; U  O. r0 b2 V7 u'Hans'+ {& ?" B$ x( \7 e
/ w% H8 }. D. f* g3 Z9 `- l
// 也可以使用new Object创建
2 D* i5 R/ d7 i8 n2 R&gt; var person2 = new Object()
8 c1 ?* N( t# l&gt; person2.name = "Hello"; r, I; E/ `, U5 }* Z! E. u# T
'Hello'% T# S& f" P; m! h' ~
&gt; person2.age = 20: [7 O( ~- x: w! X9 @) A
20( g  q2 i9 F. u( {) l2 F
</code></pre>
/ F8 r0 `6 U3 j3 D$ R$ C<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
7 [% T* c7 `: |8 @9 b* m2 h: C<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>) g' p+ w# F' \/ }2 d9 K& h: j  S
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
2 E  V% P' }: H" D( z' m" _4 I<h3 id="31-window-对象">3.1 window 对象</h3>
$ S! m9 o1 p& g: \4 ^, |<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>9 ?9 w- p7 `; `% v. d/ k3 c8 m8 w
<pre><code class="language-python">//览器窗口的内部高度0 K$ T5 u  j- S  {
window.innerHeight * M' T$ |* q$ j: a) T/ D9 p
706" m4 o( e  ~6 @1 k5 t* `0 Q* v- J
//浏览器窗口的内部宽度" M* X3 g; y2 U
window.innerWidth4 O, X4 }& ~* P2 s( {( L; E- o
1522- E! R$ }: b1 }2 t  M6 P4 h7 d
// 打开新窗口
  A  m& H* {. }# D. M" Qwindow.open('https://www.baidu.com')
4 z8 j' `$ v( ]Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}9 z# D2 m3 h2 B4 F$ ~: {1 g2 a& h
// 关闭当前窗口
# R4 U: T% O% D, J% T. \window.close() 6 L! m! c4 _2 d5 X
//  后退一页9 M9 j. @+ l/ w# ]
window.history.back()
3 f3 N& l% k6 m) l; M$ @* g// 前进一页
% {. t. ]6 [4 qwindow.history.forward()
3 o6 {2 m8 _, z& G//Web浏览器全称
" \+ l9 Q) O# F+ i9 ~0 P0 qwindow.navigator.appName3 b6 w( v/ ]: ]
'Netscape'+ l/ \9 ]1 E$ V5 H& I0 v
// Web浏览器厂商和版本的详细字符串7 b6 K" ?9 G( x" U" q! v6 ]4 I
window.navigator.appVersion2 g2 |5 F; M! r
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" ]" k# M0 q; _4 b// 客户端绝大部分信息
! ~3 ?# a8 A" p% D+ ywindow.navigator.userAgent" k  U% y; d5 [5 E$ @0 g
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
  M, j9 N( e3 Z/ S8 R* V// 浏览器运行所在的操作系统
( H1 t2 w: ^6 S9 _- [! b, b/ H/ dwindow.navigator.platform: k; k# h8 d$ z7 y/ k
'Win32'
0 z; d8 f  ?' ~1 s
9 t- Y- a( u' D# D6 n' M//  获取URL: I8 x2 b# @* m1 G/ w; h
window.location.href
  ?- N3 T$ ~6 H& H// 跳转到指定页面2 l% U1 O" a' A; v  t
window.location.href='https://www.baidu.com'  t% T; v( X( C0 ?
// 重新加载页面) P2 K8 a, r* n/ l: r1 p2 o3 t
window.location.reload()
7 D# i8 r, E( B& f</code></pre>
( h( o( j. x6 U1 v4 o$ E8 ]4 X  y<h3 id="32-弹出框">3.2 弹出框</h3>& o4 u' o# j3 j* H" S- A4 I2 q
<p>三种消息框:警告框、确认框、提示框。</p>
1 B# I5 x6 v, j7 ]) d/ @* |<h4 id="321-警告框">3.2.1 警告框</h4>
* {: M% @" _. s: M* o<pre><code class="language-javascript">alert("Hello")# @0 X" _. C; f" N* O; o# k4 [
</code></pre>' l" l* z5 X# F6 z1 N- A/ N  l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
5 L$ h! Y5 [% g<h4 id="322-确认框">3.2.2 确认框</h4>' D8 @* }$ d& \0 _- F! U+ W
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 B/ E6 Q/ n  z# d" e0 D; a0 r<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true& m, _" H4 P7 x' R2 Y. g, _
true
. h5 L  J- q9 q&gt; confirm("你确定吗?")  // 点取消返回false# P$ P! p* [9 Z6 e" D
false
! _2 q* Q( b& z- ]4 Q7 H</code></pre>
1 i+ g5 U3 h. M+ M. U<h4 id="323-提示框">3.2.3 提示框</h4># c* ~* y8 Y1 L. ~: d! E
<p><code>prompt("请输入","提示")</code></p>5 Y( s# b- |/ z$ d7 |0 ~
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
- |- H* l8 D0 y. X2 e8 I( \<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
& v: @; T$ ~9 M7 f/ r' i<p>如果直接点<code>取消</code>后端收到<code>null</code></p>, i, z* ]% B# J8 G
<h3 id="33-计时相关">3.3 计时相关</h3>! U, w( Y& `. K! Q
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
7 I' f6 T5 ^+ J6 H0 Q/ D5 p<pre><code class="language-javascript">// 等于3秒钟弹窗
$ b; k: w" \! j! v8 }3 l4 FsetTimeout(function(){alert("Hello")}, 3000)6 H& L& ^- w) D& h

% q9 a: Y* d; }5 kvar t = setTimeout(function(){alert("Hello")}, 3000)
. O* l) B" e+ h& l! `& ?/ t* C9 Q, n/ K2 l# d: R
// 取消setTimeout设置
5 D2 g8 k" V, m  m% RclearTimeout(t)
7 a% x) l' u/ p$ W/ f2 m</code></pre># j; G5 h3 B; O* a
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
4 P3 C. v/ c/ i  r7 Q+ P! W! J<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>5 M  p! \! R3 Q6 C
<pre><code class="language-javascript">每三秒弹出 "hello" :. J; T3 `; Q7 v5 v" Y
setInterval(function(){alert("Hello")},3000);
1 Z) h  M) b0 Z- b( B</code></pre>
2 U) d' G9 w9 g$ B, u) ~, P# W( D<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# k% Z) f5 Y1 F' m# ^, I<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 q  ?' i7 H1 n- C& Z7 a//取消:
2 {6 K4 y/ N  r. h* A( v/ A1 e+ SclearInterval(t)
* L2 C# E- R+ ^- C7 a; `. M: |  C</code></pre>! p' s! z2 N& j& z
! Q( a, D" }& Q' ?. V' p& B8 g: I
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-2 12:04 , Processed in 0.069264 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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