飞雪团队

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

前端之JavaScript

[复制链接]

8126

主题

8214

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

6 y; f1 {+ H- S+ |5 S<h1 id="前端之javascript">前端之JavaScript</h1>  a" R; C3 m1 A) P5 Y
<p></p><p></p>
6 ?: _* I! Z; I<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ Q6 e: T4 g" a  @
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>  [! V! N2 V6 @$ s8 n/ c& O1 ]' [
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
( Y2 P- v$ Q/ e6 I7 [它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
5 ?9 s) H7 K2 m+ k2 C4 ^它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>- W  k( l% ?, d. u
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
" Z4 W2 ?3 t; B, R: _<h3 id="21-注释">2.1 注释</h3>
+ u* f& W( k8 n# [& \( U( C<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>! Y" ~. @' i1 q- F- h( S
<pre><code class="language-javascript">// 这是单行注释
% W/ x6 B$ P) }( e4 @+ W7 ~4 J  o9 `. S
2 ^% k1 d8 `9 {: x. C/ L/*: k, }8 C4 |% A: o  F
这是多行注释的第一行,. A: X3 S0 j1 g" Q; f
这是第二行。
* @3 [, J/ E. h1 F: I+ b. w; r2 I*/
' z& Q1 M0 s) U, C; e; o' ^1 u9 i</code></pre>; \  l2 W/ s6 I" ?1 P+ O% s$ P8 _
<h3 id="22-变量和常量">2.2 变量和常量</h3>) a! v* T/ F+ O
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
9 D9 p* h  U% f8 p2 G& z% F<ul>9 j6 E& H6 U1 k1 W! d4 A
<li>变量必须以字母开头</li>
) B- f/ K, s; }- e* A" ^; b7 @<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>; Y% n7 g8 G4 \
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>8 H; g( I9 ], P; t9 y* D: s
</ul>
, c7 K* ~5 m/ M. \<p><code>var</code>定义的都为全局变量</p>
3 _+ M0 u! s% W. r" P, D( F3 {<p><code>let</code>可以声明局部变量</p>8 J( n8 [3 P" q8 [: W3 w' w( b
<p><strong>声明变量:</strong></p>
% D) T% s* P  b<pre><code class="language-javascript">// 定义单个变量& K% |1 H) m" ?
&gt; var name
$ _6 D0 c, K7 N( Z&gt; name = 'Hans'
5 {1 H5 b9 t, ^& e8 D4 C3 a//定义并赋值
6 A; c/ f8 ?5 z+ ]&gt; var name = 'Hans'! w/ F! Q  F5 T* s
&gt; name; }& k% n4 ^( T; Q4 S5 ~+ s
'Hans'
7 p: a: v$ B2 M- I" J! t4 Z- u- V  |
// 定义多个变量/ \) K& M, S0 L5 u+ i
&gt; var name = "Hans", age = 18* A# X1 n3 Y  q4 a8 C4 S
&gt; name
/ L6 N; G- c3 A) V2 _'Hans'
7 |; `) D% H3 U: |  d9 @&gt; age( B/ B- S9 n# g4 }# D3 t5 `( H
18" [# I! _" x  O

7 y8 K( x7 q; `. u' d, U# }8 ]//多行使用反引号`` 类型python中的三引号9 p6 B7 [9 E5 a
&gt; var text = `A young idler," F) S/ v4 K# |, ^% E+ B7 O0 \
an old beggar`
$ _$ u# C" d' Z0 A- \. I&gt; text0 O+ o) z( G4 F: _5 O% ?
'A young idler,\nan old beggar'
7 H7 ?6 f; f* I: X</code></pre>) j% P& Z2 E8 `) X( o4 M
<p><strong>声明常量:</strong></p># O6 ?- _8 S6 K- C
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
' o6 T$ y# R; Q0 y! ~<pre><code class="language-javascript">&gt; const pi = 3.14' |/ ^- A! ]* g- N3 ~- _
&gt; pi- H0 F: z% w: p+ o
3.147 d6 e  a; i, |5 B0 J0 P2 v5 p
&gt;  pi = 3.012 k0 X" ^: |2 d5 O; [' ^: Y! M$ P
Uncaught TypeError: Assignment to constant variable.* @; k4 |) D9 V0 D
    at &lt;anonymous&gt;:1:4
+ D% c" l" S5 |3 Z. ~/ z4 L" ^: {" u. g; I# k' f
</code></pre>
) E( @( k/ j- C4 w  \3 H& f4 b1 U<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
4 M* z: ^  `( |7 y' A# c; D8 w<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>( L- ?+ J9 m+ Q) E' J
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>& O1 G" M# Y  g) ~8 L; v. J. y
<h4 id="231-number类型">2.3.1 Number类型</h4>
" v1 |3 w: n% Z+ `<pre><code class="language-javascript">&gt; var a = 5
: q4 j! x" ^& o&gt; typeof a   //查看变量的类型  ' ?4 f1 O+ P  y0 i4 ?' ]0 u
number4 ]  j6 w. |7 w- n( ]2 U' i& F

6 O/ x  z5 A7 a& |&gt; var b = 1.3! _) l# j2 \( k* u5 \- P
&gt; typeof b4 e! ~' W. q: J1 D, ^/ u9 s
number8 c: U3 |2 E% v1 d1 h! U! T9 ^& A

% [$ K- `. e* U; R9 l// 不管整型还是浮点型打开出来的结果都是number类型
; U! d5 c2 H4 U# S7 S: J! v+ M, n$ P* m- y, v0 v9 i- \
/*
! |, ?& N6 ]4 BNaN:Not A Number4 W% S  g  i3 H: o! \+ q4 H
NaN属于数值类型 表示的意思是 不是一个数字
& l* G# M) x& a; U2 ~" L9 N*/
" b8 Y/ C: q+ V/ n$ F+ K% n3 f  C5 F" ^! G- f. Q
parseInt('2345')  // 转整型
7 }: m; \0 t' z# q: `23454 o( T2 X( ?0 W2 f
parseInt('2345.5')
; h4 E. C- O0 C& f23457 \& N7 u  Q6 m: }$ ^
parseFloat('2345.5') // 转浮点型) u/ o7 E8 p2 A) T9 f
2345.5
4 T' _1 d$ b6 T8 eparseFloat('ABC')/ y( ~6 D7 G! w2 e2 g4 G
NaN
+ n7 w: Q  U$ F" m. n: m/ nparseInt('abc')" m; h5 _" k) ~- n8 V% I* Y& U& k
NaN
4 `0 ^9 g! t2 s" N! p5 n9 n3 Y</code></pre>% _+ X1 z8 o+ Q$ O
<h4 id="232-string类型">2.3.2 String类型</h4>- ~0 v/ _3 S4 W# u  O) b8 X! ^) |
<pre><code class="language-javascript">&gt; var name = 'Hans'
$ R' a  W! _  f$ t$ D+ Z" g. k9 t, w&gt; typeof name
/ K6 J; i) e  w'string'& I) C: ^- A( l! w# W
6 C  m- R4 Q+ y- g5 X6 n
//常用方法
4 T% ]0 R% [) O0 ?7 E// 变量值长度
+ w2 U: l( k& Z9 o  p. x&gt; name.length
3 O7 o: h( a9 X  ]7 B. _7 A7 [# c4! j: m& ^  w/ t9 N7 ?
// trim() 移除空白6 V/ ]6 }0 i/ K3 [6 A- S
&gt; var a = '    ABC    '
6 `1 S+ ~2 ?! V6 K&gt; a
0 Y) Y' L6 c! t+ h! Q/ Q; m'    ABC    '' W7 _& @# k4 k
&gt; a.trim()
8 S, L  c" B$ Z# [* x$ ^( C'ABC'( ?1 s4 K0 o- P+ x0 |- D0 j
//移除左边的空白
. J, |! w8 h8 Q' Q2 I&gt; a.trimLeft()
; q  o. P. I: a'ABC    '
3 ?: P: n( }& |//移除右边的空白$ L+ e! P( H6 W$ r) n
&gt; a.trimRight()
, {% c3 O; z# R  m9 Y6 ]# n'    ABC'
0 ^7 ]7 F$ ?5 p7 C4 q$ s. ~! u9 u1 G" L8 f3 M
//返回第n个字符,从0开始. a0 v+ S- Q# a; N
&gt; name; M- d5 ~/ M  P% Y# X3 O& G# o8 m
'Hans'0 C( c2 ^0 d. S; f- w; U, Q* L) K
&gt; name.charAt(3): u  m  h" t1 [2 F
's'
# o5 U* ]% G6 E: Q* n$ O( \&gt; name.charAt()
, O% `5 o7 W( n9 o' A'H'
* ?5 s8 e! |4 E0 [( R4 ?/ ~: \5 K&gt; name.charAt(1)* g& s2 E6 M2 m; `
'a'8 }; i# t9 V5 v* |" \6 r, V

) Y! d. N5 A; `  ^" B// 在javascript中推荐使用加号(+)拼接; f; o/ ^! m8 c; n3 p* `+ `  {
&gt; name
; c6 r. e! H, M/ O# {# `- m'Hans'5 O7 W/ c/ F1 O! n; \+ n$ n" N0 n7 H
&gt; a8 o4 T/ J# b( F  U" q
'    ABC    '
& U# H* O8 N8 X2 g# c9 {&gt; name + a
6 i  [4 H( b' z$ T'Hans    ABC    '
1 K9 X5 X. M$ V; c1 V// 使用concat拼接
/ @0 X- k  {9 s7 S&gt; name.concat(a)
. S9 [. }$ i% M" b( G'Hans    ABC    '
/ k- C) A' E; e/ [  O" M6 m: N
8 [4 t1 G5 I5 |) r4 A//indexOf(substring, start)子序列位置
( R; A. t! O* ^8 G2 I+ q+ j; T9 K$ R0 ?
&gt; text
9 z! w. l3 l  ^. w" o'A young idler,\nan old beggar'2 S5 M3 F2 A$ `/ w& m
&gt; text.indexOf('young',0)1 f6 ^8 [$ G  B9 z; N6 o
2
9 _9 `! a' }2 R0 |: V0 c7 c+ s) A! F, K/ O$ f* ~$ G3 b) I0 Z
//.substring(from, to)        根据索引获取子序列
+ A/ J. w% L: Y. \' S8 ?+ V&gt; text.substring(0,)3 I! u0 m- N7 x( T2 h- z; K$ |* z
'A young idler,\nan old beggar'
, h/ s5 Y0 R! F3 j4 R&gt; text.substring(0,10)" f5 v  k* E1 N! B8 N! N
'A young id'
5 X3 `  L6 ^" x
/ y# g8 Q# Q3 D1 e" i! E// .slice(start, end)        切片, 从0开始顾头不顾尾# V5 j" a8 ], E: M% u/ y: [. A! y2 [& I
&gt; name.slice(0,3), @9 B5 r, _" a. F
'Han'
3 Q( v8 r  R* B6 i! g
5 Z) i7 A/ |% G: i& \// 转小写
* q. c. J  G4 {( _0 @  _&gt; name8 ~' W9 C! _$ y$ r: o5 n6 M: b
'Hans', m8 O& k* |7 f$ x2 r, s1 u
&gt; name.toLowerCase()
8 t/ {0 g1 i+ X# D6 y7 E'hans'3 h) C1 t8 O0 [' f8 w7 S/ }
// 转大写
# r# T6 N! V: v6 H5 B&gt; name.toUpperCase()$ f- i' [) t! |8 z0 [8 ^& i
'HANS'
! K6 Z7 E, P" k& t# P- y( {# }' V+ C3 T7 E* k
// 分隔
$ k. b8 y, w& f# s* g&gt; name
9 }7 c/ P1 _# p1 B, z  u'Hans'! P7 C, t& e  F& L4 J
&gt; name.split('a')
% n; V& z$ T& G; B3 J  M9 K5 `8 D(2)&nbsp;['H', 'ns']8 k( Q4 R4 M- H1 B: m
</code></pre>
* u& R/ i2 z! D/ e' G<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>! J1 R7 t" B. ~8 d
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>6 b4 M# u' ]9 ^" E) I
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>3 O0 A. z2 F. z0 K  _
<p><strong>null和undefined</strong></p>
3 D: u# v1 s0 B: W- V6 |<ul>: P# J9 F- P- l, Y& v
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
. v. V8 s( b$ H0 h) ~  Q<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
0 B5 r  R& ~. M! }2 F  Q, L</ul>" y# |7 l5 j) O- T* x1 \- M6 Q
<h4 id="234-array数组">2.3.4 Array数组</h4>
! y( Y9 d/ n' I& F! F, O<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>* ~% n- |+ m  X6 t4 m. k
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 2 h6 y$ p% \$ c8 N
&gt; array1
3 ^& Z9 c" Q# `; B; k(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" C; z8 V- p9 w0 |. p* ?9 k+ n&gt; console.log(array1[2])  //console.log打印类似python中的print7 f2 v4 Y$ i7 P( h* I
3
! ~( y: b, O" U6 p// length元素个数9 Z; I5 ^) X5 j2 [+ |
&gt; array1.length
  _# X0 [4 K0 z  A/ P- z3 O- v6
  T1 p  T( }: |// 在尾部增加元素,类型append0 R2 L( C4 ^) W  I, [
&gt; array1.push('D')% R3 c7 U6 l4 u: Q, J4 K
7& W4 A1 h  U: `7 @1 f
&gt; array11 z' ^* J9 h- g" F/ g
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
$ u) P' m) U8 Z% x// 在头部增加元素
" D- r% q/ V0 |0 \/ _) f& ~&gt; array1.unshift(0)0 a/ Z% ?& Z: f4 v3 n- R. o
89 x- Q; S! W7 p3 d! q( p+ {- A4 `
&gt; array19 P- a4 J0 M  A8 Y2 J
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
0 F! N; L2 v4 i) F' J: |! h& N7 ?' G& _) G2 ?6 j/ F8 ?
//取最后一个元素
  e) n6 f7 ?" a8 a2 }&gt; array1.pop()( U" Z7 S. t; L" u9 y
'D'
7 P- f; K: @6 p. X$ E&gt; array1
8 f3 L% p6 i! _. u3 u: x(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! D6 o$ |$ [8 P  q  F* z//取头部元素
* M- }2 z6 T: J&gt; array1.shift()6 B1 [& L' m; K5 p' N- Q
03 T5 I8 c' ?6 A$ j- G
&gt; array1& q( D! q' k+ T  j, m3 `4 Q5 m
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. e9 K$ B2 ?3 u1 t8 K; d, I9 R) k/ h2 Q! @: Q& V
//切片, 从0开始顾头不顾尾
. a0 N: Q: R3 R8 h& F4 Z&gt; array1.slice(3,6)
+ v# g5 Z( d. D: }* u5 a(3)&nbsp;['a', 'b', 'c']
$ o: L: T0 n0 M; W* c1 M" |// 反转2 {1 w2 Z% }5 Y5 S
&gt; array1.reverse()
- l) }& U& S( ~+ _, y" H: N(6)&nbsp;['c', 'b', 'a', 3, 2, 1]* K) O9 d9 d& v. b
// 将数组元素连接成字符串
4 @9 \* ^. {& y4 ^; p- Z&gt; array1.join() // 什么不都写默认使用逗号分隔
4 }& r' g: E* D$ W7 Q2 |'c,b,a,3,2,1'% Z0 W1 E! {+ W: Z  d* b5 y$ L' J
&gt; array1.join('')' a  C" t+ }. o1 |4 K( g0 z
'cba321'
; U, Q2 t5 _. {/ C&gt; array1.join('|')
/ o. _4 |, J* B: p- @) K4 k, U'c|b|a|3|2|1'* J  P% k+ G8 r4 }  V. F

% {  p& R9 b/ Y2 H/ u6 H3 m// 连接数组
3 x- C! ~! s: {6 m1 X8 X&gt; var array2 = ['A','B','C']
  {+ N' E% P& d9 i) g: X&gt; array1.concat(array2)7 |# L. N5 K( p$ A0 M: D
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
! a3 N  w" R  l
% z  f3 X3 H' U: `' Y9 g// 排序
2 W- a- i% [7 }+ [, q&gt; array1.sort()
  i$ h8 `# `& z. I0 z, c/ d(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
  L% p- F* k" h; P7 s- Y2 k3 _6 B/ z# r
// 删除元素,并可以向数据组中添加新元素(可选)  n0 _* Y1 }% Z0 F2 s+ x
&gt; array1.splice(3,3)  // 删除元素. f( W) w' \& q. G0 ]
(3)&nbsp;['a', 'b', 'c']
* I. a  A( A5 `: s8 _+ v6 u. ?&gt; array1
4 o) B6 j) y/ [  x- i2 t* j( M(3)&nbsp;[1, 2, 3]' G6 @" C* m1 H& w9 D: G/ N
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素& t) [6 ~! i4 ?, j( L8 @! a: p; v
[]$ P- ]1 V. D; y; f" j5 r
&gt; array1
% Y5 i# k5 w; m4 G, R% P$ H(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
4 }& Y1 M, g$ X
9 J' _1 W6 g' }, s3 ^! h9 @/*
1 |) ^- h) j  U! Q& f$ X% Jsplice(index,howmany,item1,.....,itemX)
% p7 a0 O$ F5 w7 G9 b9 Kindex:必需,必须是数字。规定从何处添加/删除元素。
6 B6 h7 M/ W+ c. D4 Lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
6 r" n3 E) ^7 I" x. Hitem1, ..., itemX        可选。要添加到数组的新元素
+ y! i9 q. A* I/ m% {*/
5 O# ?" q4 q4 q1 k+ Y( J, {/ @6 }& w% L; }- F4 v. c6 @
// forEach()        将数组的每个元素传递给回调函数7 i0 Y6 l) a: U5 \. B2 y2 i
&gt; array1.forEach(function test(n){console.log(n)})( i2 Q$ I' M+ l  l" Q
1
1 D- C! G+ I- V4 B+ O 2
( C7 a9 V4 g6 _; Z$ Z1 c, O 3
5 D! }) `, u7 T& B6 M, Z6 ` A, M! J' v) `8 w/ F, Y
B
( o4 O' e" I; A C# u$ c5 T: E  A
// 返回一个数组元素调用函数处理后的值的新数组
' s2 ~1 I7 e$ a5 X% `0 ?: J&gt; array1.map(function(value){return value +1})
7 j4 p1 ]' N6 C- M7 b: q5 D& N2 `(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']; W5 n$ d* T7 X$ Z! T* A3 e
</code></pre>7 F/ x, b6 B$ g0 }0 A4 Y
<h3 id="24-运算符">2.4 运算符</h3>
5 D2 O# |0 K* I$ `& I* e8 p<h4 id="241-数学运算符">2.4.1 数学运算符</h4>8 |" @. u* f* l* t+ Q9 L4 F
<p><code>+ - * / % ++ --</code></p>, S. Y$ D% S) |/ v
<pre><code class="language-javascript">&gt; var a = 6
! H( y. w1 J: H8 m$ u&gt; var b = 3" U% V$ ]. e4 I" e
// 加
4 L7 M2 y7 a# v, Y. {, [. T, \3 }&gt; a + b% G  [2 r) r+ s* G  ]0 F% O
9; ^5 P3 t! `- e8 @
// 减
( [8 K- E* V* K7 }, F5 w, ]4 @&gt; a - b
8 }& I; N/ e9 f1 P3
$ C. h; |1 M- j9 [. d// 乘0 W1 K: V% ^  ^" |% A  y' J
&gt; a * b% y7 E2 ]8 ]0 O5 n
18
4 V' u/ G8 l' x* ~9 {// 除
6 B( p5 u$ r4 D( h&gt; a / b% w: Q7 t3 K; @7 i- L) a
2
8 U% N* a) F# O0 [3 C) Q4 w// 取模(取余)
4 s2 F6 F1 ?1 l6 }' U+ Y$ O&gt; a % b
2 O  g5 H+ [; C8 a/ H03 q( |3 }7 _6 O3 h" v  q3 h% g3 ]
// 自增1(先赋值再增1)
- q3 o$ O4 E6 I1 `8 B) u&gt; a++
! o2 u1 [, T% z2 o" Y9 Z+ l  X6& Q/ f, R2 z7 x; k6 e
&gt; a
. q) t1 Y1 n% E: Y! y7
4 Z) S) O( H! o! d* J' ]  r, ?2 A// 自减1(先赋值再减1)4 j+ R! r' t1 I1 t' e* w
&gt; a--
  f; k+ p+ O* f" y. j74 Z, N, D7 b% V: @" H8 W" l. B
&gt; a
; K% y  ^* J% j, V6 b0 x65 }) ~+ H' W' a
// 自增1(先增1再赋值)
( L& Z1 c7 D; J- h+ V6 g&gt; ++a/ ]; f2 N/ ~" X1 J
78 v- M& n; h! v, x8 N
// 自减1(先减1再赋值)& a/ u8 r& Z( a6 u1 ]8 s/ J
&gt; --a
! R' H( q% }7 U5 s6) m. S6 {! D( [0 `+ ?
&gt; a. u. h% S+ D, Z
6- {8 t/ O) O% g1 y/ p. ?" ]7 z
( ]4 V$ g7 I2 M7 z- y4 q
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
4 {; d! q- `- T( t  Q8 B; {</code></pre>
, B3 s% g3 U: h  {1 t<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 {$ j* J" ~5 X2 V0 }<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ G$ @4 {. @4 X
<pre><code class="language-javascript">// 大于
+ b7 |# Q" h% L, w5 \&gt; a &gt; b
7 A6 S2 [' p8 i2 `7 k; v$ T. Ytrue( ]+ w+ o# K, o7 g
// 大于等于7 w  V+ P0 [4 ]0 ~& l
&gt; a &gt;= b
" i7 v( y2 p2 b$ y5 A, a* f/ a5 X2 wtrue8 ^6 H9 V. j' R# _; q4 H$ Q9 v+ Y
// 小于
' ]0 u" T6 q$ t$ N7 R9 ?&gt; a &lt; b
# K* c7 z: O, D2 ifalse4 @% X4 ]. I* s* Z
// 小于等于
$ A/ ^1 K+ m% r. G' ~3 m# O&gt; a &lt;= b
5 v# q5 F# d+ g! b) gfalse. G7 a$ g8 V* C- V5 z; a" d% R5 |
// 弱不等于
! e0 D  v0 F/ k; x( r8 M&gt; a != b
9 W  p- e0 i! ?true
( O5 g# }5 t' K3 E, ^$ B4 O- [// 弱等于+ x/ B$ ?/ l: P. ^
&gt; 1 == '1'
" y! m2 p$ Z3 F7 i& i0 e( a, K+ g; itrue
6 J. Z( e% `4 U1 J# x4 O! n// 强等于
  ?' A6 A# H# c! _+ J) Y, i' `&gt; 1 === '1'
& j3 U( {1 ~" kfalse; M+ T3 p* T2 l2 L+ l8 T
// 强不等于0 q/ x7 v1 h4 U
&gt; 1 !== '1'2 F  k4 v3 f# p, w
true8 u/ W* W. A  v+ k8 ]

9 I3 Q% W5 P; W/*
) o4 \& I' T; `- DJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
% M4 B9 g- Y. y' W*/  s; ]) W6 r6 ]% e: Q
</code></pre>+ k7 y( `0 X( ]5 y, Q+ }: B
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
: N2 r" |0 s. W4 C! m+ p4 {<p><code>&amp;&amp; || !</code></p>2 S& X7 P# u. w8 I
<pre><code class="language-javascript">&amp;&amp; 与
' O7 f5 a& F1 j  s7 {" i|| or 9 }1 d) k' c' u; ~
! 非6 U  N2 a- q; L* p4 g9 ~
</code></pre>. I! \: p. f4 y: A/ W' i" \
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>6 Q! _: q, l+ `9 q' S
<p><code>= += -= *= /=</code></p>
  u9 V+ G0 F9 K<pre><code class="language-javascript">// 赋值$ [$ O6 X* x5 L  m% f7 Z
&gt; var x = 3
8 ~! x9 `6 t- _( s/ r& @// 加等于
2 D6 q6 e; }* x, C9 x( {+ b" p&gt; x += 2
' \' ~7 i6 m) M) O! ^& d( H2 G7 v5
$ _! C% u* ?7 B% _: Z& [$ f// 减等于
4 h; f& ~! @& T&gt; x -= 1* v# |5 M7 e* ^  a, ?
4# @/ o: w0 `+ k/ F/ H
// 乘等于
1 A( \: t2 ]4 [&gt; x *= 2
" h% ]  O) R* B& p0 _% D83 V% s9 q- i, f3 m
// 除等于( G, i$ q. ^, j; y) ^
&gt; x /= 2+ k* s. ]4 r$ f+ @5 b+ q! [$ }9 B! y
4- V. q7 f& w8 e8 ]
</code></pre>; q8 V3 c( ?  V3 ^1 v9 x, y6 g
<h3 id="25-流程控制">2.5 流程控制</h3>0 E" L6 p$ C8 j4 I- J
<h4 id="251-if">2.5.1 if</h4>; b# _7 h  v7 L" z9 I1 n% b( @
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
- ?1 V0 g) v! ]; i
3 b5 `: d; r6 y8 i9 u) l7 l, N2 S8 p8 u&gt; var x = 3
) @& \0 p+ Y& |% S" J&gt; if (x &gt; 2){console.log("OK")}
: y9 h$ A- M8 @0 Z3 S  o OK
6 X- M4 J5 A& p* S( Z, f" u" B! s
5 |& D" v  ]3 X1 o3 y  L6 s2, if(条件){条件成立执行代码}
9 L6 b5 V$ R* Q7 A        else{条件不成立执行代码}
9 F" m: P& p$ o: t, r4 v& Y' d2 ^1 R  u% W* o$ m0 k
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}7 b8 l4 U& D7 d# ^5 Y$ O
'NO'
9 G! f1 y5 J7 N
7 n2 V! Z* t, Z# [+ J7 J3, if(条件1){条件1成立执行代码}
& F2 ?$ q2 W9 a0 ?        else if(条件2){条件2成立执行代码}2 n3 f! r$ t) k. p
    else{上面条件都不成立执行代码}
8 ]6 I. Y/ g/ p. m) G4 t4 T3 f5 Y5 b6 G8 v/ A
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- v% ?0 {$ z: l( `* |0 u Ha6 ?7 I3 V) n* p
</code></pre>' }. d0 v; g# p& M- o1 M9 E
<h4 id="252-switch">2.5.2 switch</h4>
' u* z$ P, v: ]1 b) A$ ~<pre><code class="language-javascript">var day = new Date().getDay();1 q( l5 a" b' m1 G- ]9 V: n
switch (day) {
9 ]) p3 u" u6 \5 v, C7 d* S( I  case 0:5 N/ R+ D: ~- o0 y( a' f4 g8 X
  console.log("Sunday");7 F4 E3 l5 G6 b
  break;
% H3 g' w) v& `3 d; p" T  case 1:
$ U( c' F, v9 i1 o# V  console.log("Monday");
; W, {. m+ D1 o0 h+ ^2 }% q  break;
) K; f8 \, m7 v  j( O( kdefault:
, ]  H6 o! m/ S; J, Z- s  console.log("不在范围")" l4 H2 E0 O3 X/ z* |/ W
}2 h0 D" g* ^& F, ]8 z
不在范围
$ ~% A0 [! f; s3 z: e: B" Y5 A" ^) D, p</code></pre>$ e1 z& B% _/ f; Y' @* \
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
8 R" @( W8 N# m8 G<h4 id="253-for">2.5.3 for</h4>8 k0 v* x7 b5 i! X7 n3 n1 o
<pre><code class="language-python">// for 循环
" p2 P& `  @0 q/ [4 w2 e5 a        for(起始值;循环条件;每次循环后执行的操作){5 B6 w: a9 f" F1 R, g; |
        for循环体代码
3 Q  c; `1 \" f, o    }
. X9 U( Z5 i$ J2 m7 x- G! Q/ t3 \) T- g" n/ N
for (var i = 0; i&lt;10; i++){
7 Z0 v4 U  `' W    console.log(i)3 w) Z# X5 t8 I1 M
}: }& E- D7 Y4 k! d/ Z) u
        0. ~1 l" N' z. b/ i* J
        10 i; l3 I6 c& T* Q+ ~
        2/ ]" q3 J! h# z1 n) P3 L5 C  ^! v
        3
8 u$ s( ^2 U" _- v' }( M2 k        4
2 ?- l* r% w- g9 G# B        5
' v  C1 I% j; g& p, Q& N$ @% a) H        66 ~( G4 c4 C, n5 {( K4 j
        7
; j( G  @& O$ U        8! F9 ]; S; y- {6 B0 H( f
        96 H% h& h1 y" C# s5 L
</code></pre>
" f; W: a7 _4 c5 P<h4 id="254-while">2.5.4 while</h4>
5 }, n; a' @0 ?: n* }1 R9 R' y! I/ z<pre><code class="language-javascript">// while 循环
9 l, i: \2 V1 A6 d8 P        while(循环条件){
8 v, e  R% h- a2 J  R" v; r        循环体代码
9 [0 U2 q, D) V# ?) W; ?8 c    }2 @1 u  H- D% Y/ a% ~

1 P8 X, t3 D) J% }&gt; var i = 0
) ~7 p1 n( a& E, l9 u3 f/ S&gt; while(i&lt;10){
# w! ]; O* z6 L) G7 F    console.log(i)
" ]" a& [6 n# F- h7 Z) D: s    i++, Y0 {+ Q: A; ?$ c0 {; b
}9 R" l. j+ D5 D/ m1 v7 f& K
0
: Z1 h: D) Z% B  q4 S 1
& m( K0 _6 I$ J  h1 D 22 J" n+ S4 A, n4 A$ \) A
3
' Z% G$ _- F; Z+ L1 ?2 I/ S4 l 4
8 z5 c& E. R1 U. }1 A 5: h# ~* e- @6 m' ]: t
6, d6 \; R+ m" V3 O  z3 \
7
6 [2 g% c; {, D. p) M 8% c9 _2 d/ }/ Q( @8 ?: e& i$ ]" k
9( W* ?! H8 X) Y, I% r2 m9 R- q
</code></pre>
3 k* e5 K- N0 W% L<h4 id="255-break和continue">2.5.5 break和continue</h4>6 A! \* R# z' `5 \2 a0 o
<pre><code class="language-javascript">// break4 U& G7 g) C1 d7 E8 q
for (var i = 0; i&lt;10; i++){0 s9 Q- T  I: p. a$ r! Z+ O% U
    if (i == 5){break}
8 E8 C4 @* j. \2 Y4 |' Y    console.log(i)
8 E5 x- B2 e  N( c$ \- k$ Z}7 |6 \# c, U1 c; m0 e3 }, N
0
  W& ~! [7 n! A. a' S 11 q2 a) ^: n1 G; ~
2
( F5 i* R4 w7 g3 g+ C 3
/ F8 [* I; `5 [8 A8 b9 H, m 4% B( x+ t+ l9 m9 Z
// continue; r+ S: w" w' }7 U, T9 s
for (var i = 0; i&lt;10; i++){- P+ I' O( f6 H9 _* b
    if (i == 5){continue}" V- i( ^* Y" G) Q6 F" M! }
    console.log(i)7 f5 G7 c6 Y  _5 Q( F4 j1 y- J
}
" r" e4 A# z  n 0
: J. a5 f: S3 J# C9 X+ r4 N 1
/ n. O$ O1 v- P3 T- ?4 Q 2
7 O; r+ d2 U. z& U& W1 ?' a 3( s! |' o* a+ {
4) q% V5 t  z- `5 p1 }; F
6
( R% U4 V, N  d8 `/ l, p2 D 73 c7 b8 a+ ~+ `) _
8
3 X2 P( v8 p4 S$ K1 h( Z 91 t( r$ Y  i3 ^% M  q0 u
9 c* y4 S4 ~! t
</code></pre>
3 k  C# j3 |" b( J7 m<h3 id="26-三元运算">2.6 三元运算</h3>
. g; e% L$ v' `4 P' b5 t0 U<pre><code class="language-javascript">&gt; a$ D% R' V& }* l! v' d/ B
6! L3 n5 o' i  \
&gt; b
0 f4 L1 A0 q) B. @/ Z3! Q8 i4 Q8 Z: ]' @# ^
- ~8 k# C0 }* |( _6 |# k9 A6 U
//条件成立c为a的值,不成立c为b的值
' ?9 |2 N+ |% i) ^&gt; var c = a &gt; b ? a : b
4 `. T; _# r% h/ q&gt; c
% p9 _4 Z3 W0 v* ~7 [  F, Z' n6
9 P, p5 X% E% A. P. x8 K8 c0 K+ C6 i$ }! i5 j+ |4 \( K% f$ ?  J
// 三元运算可以嵌套, i6 F1 F) v( z- @
</code></pre>
; r5 V: q5 O: m<h3 id="27-函数">2.7 函数</h3>
0 `/ ?/ m& i3 b<pre><code class="language-javascript">1. 普通函数
4 k9 d, `. e$ I; Y+ l&gt; function foo1(){6 ?$ f& r6 L( P0 t6 H, N
    console.log("Hi")
# d6 x0 }3 ?& A$ s}6 v! V' d4 R9 }, X( F( j

5 I0 L, Y3 \; l/ X& R& V$ @&gt; foo1()9 J0 f, U8 Z/ K+ b+ U
        Hi
$ v9 S2 ^. s3 W5 ^  Z! H# [$ W2. 带参数函数7 F& S# L2 V4 d4 S
&gt; function foo1(name){
' Y$ ?9 d: N* ?+ X+ bconsole.log("Hi",name)
- \1 O7 u4 }% g2 g# F: f9 N}5 T( U4 Z3 \) K! r( E2 T
" z, `1 u, k2 Q; w$ g/ c) E" {7 X. h4 f
&gt; foo1("Hans")) t0 O& F, v2 u/ E- E
Hi Hans
% @% h( `+ ^" N- v( n, {# U$ P( S) g% E0 q# |
&gt; var name = "Hello"
9 Y! |2 q: `! R; ^&gt; foo1(name)
- l7 R* n( I7 w# [* ?, m# vHi Hello7 k, q+ ^& L  v

% z4 J/ b. c7 |4 k1 o) S3. 带返回值函数
8 T3 A" x# _! |# m5 ~, `  n9 s4 ]&gt; function foo1(a,b){
# H/ l3 r1 f& y/ Z6 z8 B0 J        return a + b   
4 x5 E& b6 ^! B1 ?4 d/ Q}) W9 L7 g+ o( G' n
&gt; foo1(1,2)
9 D3 V, W0 t8 I+ J0 i( w) S6 C35 W4 F6 |( l' q7 s7 P8 q
&gt; var a = foo1(10,20)  //接受函数返回值5 e& X# E5 O0 L. B' \
&gt; a! z8 W+ x6 `! g: ^. l1 L  M5 U) b7 W
30
" i1 M7 I$ z+ w8 Q2 n: o' u9 r( X. Q! c  Y7 ?0 ]
4. 匿名函数& {! t) l5 B8 @- }- S: e9 Y
&gt; var sum = function(a, b){5 @$ r9 f# a5 z: f
  return a + b;$ ?6 j. d4 ~# ~8 Q& C! T
}( a# h! }% r1 M3 ?0 z, y, j
&gt; sum(1,2)' P3 f* G! w. j4 ^" J9 Q
3
8 Q  v& ~" e! ?$ }+ n, R  d+ s" }5 S7 N+ l4 v' p5 o
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
# g$ M" P9 o  \  x) A$ B/ r&gt; (function(a, b){
" t7 q7 Z) X) `3 y; {  return a + b8 o4 I2 `, z/ ^2 X5 L+ G4 ^
})(10, 20): `( Z! o) |, y2 U( I
30# J; J. u' N* I; N) P* U
3 `, I! x) ]7 U$ x1 Y8 [3 U
5. 闭包函数
' _0 r; r7 u# N2 W2 g" E' T0 v// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数+ a* E3 l4 N$ ?" {* w, U- U
var city = "BJ"
' }1 l! U# y, Mfunction f(){7 u. S8 `. z% B# R: O
    var city = "SH"+ |/ d) q; D" ]+ F/ J" }
    function inner(){
8 J( e" n% {' I2 b/ X0 o+ C8 L        console.log(city)
4 V/ n3 Q' Q6 u, j: C, H    }( [7 q: V9 ?; r+ c4 C
    return inner0 b" g8 @6 s/ y  i. U
}; ^* x3 j: U7 W. |" N  a6 d
var ret = f()8 c* A& C8 T( W
ret()/ ?& s+ C+ o5 N4 \9 d4 ^3 ~
执行结果:7 P' G/ ^/ [6 W* d4 r& [. g# s8 d
SH
) _, x8 `" s! \; {, w; T% ?4 S4 M+ ^7 r) w0 X. @
</code></pre>
3 X* ^# ?8 ~2 f/ e! h% Y$ ]' V<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
( f8 X- E, E  p; L+ B# [<pre><code class="language-javascript">var f = v =&gt; v;9 j0 B0 |/ [3 g$ ]4 j
// 等同于
* l# r% V% p: D& |+ d; rvar f = function(v){
( r* Y0 l6 v# T& L2 n  _  return v;+ z' s9 S; l' j9 u2 M
}
+ D; U" ?6 }2 l</code></pre>% q3 Z4 G8 Y- J8 g+ |0 b
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ s: B. ~$ x& L  y# H6 y" u' P  }
<pre><code class="language-javascript">function foo1(a,b){2 {+ H/ q9 ^7 h* |. Y
    console.log(arguments.length)  //参数的个数 8 j7 w8 {( J$ }7 D
    console.log(arguments[0]) // 第一个参数的值8 J- _$ f8 Y0 H3 a8 U
        return a + b   
/ W$ D0 N: U# Q}
# ~/ s: h. _0 i+ ^) C# jfoo1(10,20)
- c5 L' P, a) W, O8 E结果:) i$ Q8 h6 f* i& |0 k
2          //参数的个数
; x  [8 m$ ?* {; I- T( }10        // 第一个参数的值
5 i  L1 E9 `2 [5 c30        // 返回相加的结果
0 R6 \) q6 {& ~; I/ v  S1 x" p( B</code></pre>
3 U8 t1 H1 p$ h+ X& h7 W% P$ Y; Q7 f<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
1 L; M% N2 Y4 O' d<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>8 b' b1 \. _0 y, ]" s, }' H
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
9 [/ k% }3 L# `<h4 id="281-date对象">2.8.1 Date对象</h4>
4 o4 b& m7 C; v# D& @3 H' W<pre><code class="language-javascript">&gt; var data_test = new Date()
- V) b) Z# n8 K0 U( G&gt; data_test
' K1 d  X( G7 v! M0 XFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
- D  G, Z5 E$ J( j3 W. G0 y+ Z" o2 r&gt; data_test.toLocaleString()1 g( }9 N/ ]* t
'2022/2/11 下午9:44:43'! ]" P. E/ `3 x! S/ M, Z

* x2 U1 z3 h  f. ?, ~5 Q&gt; data_test.toLocaleDateString()3 \2 c1 c( p5 c4 c2 _# `
'2022/2/11'
; y2 a/ H! m) i1 |' M. H: b5 {5 q2 D1 m- l1 p5 P
&gt; var data_test2  = new Date("2022/2/11 9:44:43")3 T1 p4 i9 `. I$ y3 y
&gt; data_test2.toLocaleString()$ w' i3 F" r; e+ q
'2022/2/11 上午9:44:43'+ f4 \3 Z3 c8 Y# j( X

: t/ \; t2 z( e1 F* o) _// 获取当前几号% Y1 m, a4 P: @( o. ?
&gt; data_test.getDate()
* f! o  _& f' _; n11
& O3 Y/ ]7 i: ^# O# p5 E// 获取星期几,数字表示6 g$ t+ b+ t5 P: ~( z% y
&gt; data_test.getDay()  " y4 G. V* _7 v# I/ q6 {
5( _' h8 Q0 U" a' ^0 |1 S. q
// 获取月份(0-11)1 s8 k& x6 }7 `1 `2 j
&gt; data_test.getMonth()
  e" i* |7 q, X0 |1
8 a% b; e5 B0 _$ P+ X// 获取完整年份
) T; r3 M4 ~# o, O5 B- `3 Q&gt; data_test.getFullYear()5 C4 U5 p2 U& D( ~
2022
; v" j  d# a$ i// 获取时1 X: E2 H* M; c& ^5 f
&gt; data_test.getHours()! \0 ?, u1 R4 a* N, k: r7 _
21
# `0 H; q3 C1 G// 获取分
2 J$ g* a; d* _- W&gt; data_test.getMinutes()# w, U0 X, k, ?
44
5 ?: N4 g9 g. G9 f5 T6 `// 获取秒
7 L5 S( r* a/ k7 w. m) _&gt; data_test.getSeconds()
/ A* a" d' L) E; O, p0 v43! Z6 C( `" V( U% m, |
// 获取毫秒
( T  b/ R- o# L7 t0 s" Y&gt; data_test.getMilliseconds()& ]; I  r2 }) q
2903 [7 \6 X3 f2 r3 b2 T( N: l
// 获取时间戳# |/ p; D, ?5 U8 F* Y
&gt; data_test.getTime()
' n3 S, y2 k+ T, \. @1 N1644587083290/ L4 u+ v6 w+ @9 u# ^8 a
</code></pre>
; U% Y7 _$ A# m<h4 id="282-json对象">2.8.2 Json对象</h4>& E6 L* G6 `  J
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
. R+ I, g3 u6 \+ Z: D/ t. u5 `JSON.parse()  // 反序列化,把JSON字符串转换成对象3 u* u7 t% {! P4 k# L
! v8 K! Y" k) O; ]9 w4 J
// 序列化6 M) X  S, T- `; c0 F9 ^0 i) d6 j
&gt; var jstojson = JSON.stringify(person)
( z+ |6 F9 K$ q; q&gt; jstojson  
' s! S! i2 |  t' ^'{"Name":"Hans","Age":18}'
: X3 K0 c+ S, r+ Z; F( h1 _  B- k0 q- p; {) H9 x  F3 k
// 反序列化0 \3 u0 v+ R  ^4 {; E, P
&gt; var x = JSON.parse(jstojson)
% v* \8 v/ h2 r/ [1 Z' {/ G, ~&gt; x+ A2 _* k5 x/ M& s
{Name: 'Hans', Age: 18}7 R' W# g2 W; B% x6 D  k4 @. E
&gt; x.Age
+ p, r( B2 K; X8 o1 g* s* p% A, Q/ w! P187 r) x& o9 S; k$ v9 ^& Z
</code></pre>
& V  U/ |8 f' \3 ~  Y<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>% E- Z0 x$ X3 ~( ]! d1 \$ B! M3 x
<p>正则</p>
+ r8 `: ^; n8 @1 ?<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
9 x3 \( g8 w- U&gt; reg1
$ F* P; }( w) g/^[a-zA-Z][a-zA-Z0-9]{4,7}/
% i, J1 a, x: Y9 ]( v' i9 K&gt; reg1.test("Hans666")
! J- w* L* }" t/ H. e. ytrue: |5 A5 P- f/ G4 S. P

+ B. R8 H" p8 {7 Y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则// `: `- o( O- g( h
&gt; reg20 W" L# P2 Z2 r; k
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
* c. c# {1 m! M6 s+ J&gt; reg2.test('Hasdfa')& A( L/ k- B: B3 p9 z
true6 m) v9 R, M3 k( J/ v

0 D3 w. G" H2 B1 Z全局匹配:- o% E5 U0 r' @! }8 }
&gt; name8 s0 x1 x4 m( t6 k  O
'Hello'
# q% y+ h) g1 d1 Y4 w0 `# D* i&gt; name.match(/l/)
- x8 {2 r" n3 O' Y+ d: H['l', index: 2, input: 'Hello', groups: undefined]
+ n. J8 z) T4 g; T& b. h, P
) _' p( E: g1 Y- V. ?  M# d7 _&gt; name.match(/l/g)
( t# p9 w# F- |" x(2)&nbsp;['l', 'l']
1 @  h1 U: P# j( c+ e1 o// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配% P6 ~  S. g+ o/ L3 g

" W* o, S( O  f2 N6 o& c* G全局匹配注意事项:
% |( I* i, a' i$ C1 X5 G&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g5 m4 }7 ]4 M2 ~2 V* c' V# @; d
&gt; reg2.test('Hasdfa')
( v2 I, ]) J# H2 l4 s% utrue
7 {$ i2 q1 d) @1 J8 r1 z; D' V&gt;reg2.lastIndex;
1 l4 Z" s  \# s8 ]6
4 U3 s2 L, ^- H$ Z- H6 A&gt; reg2.test('Hasdfa')
' [7 H+ `1 A: L9 ^false. G! \# K) j2 c: \" e. x
&gt; reg2.lastIndex;* I0 t; c9 C9 z* Z
0
1 ?1 G' n* Z1 R  k) h/ G( O, P# m&gt; reg2.test('Hasdfa')
% t* B7 l$ R- U5 Jtrue, s1 [, @; r  V6 l
&gt; reg2.lastIndex;
7 F& m+ q5 w) v- e" j6$ E4 W2 L; z9 t2 b) S& ?9 `5 F. ]
&gt; reg2.test('Hasdfa')1 ^- ^7 G! U+ n
false% U( E+ S  i" }# S' C4 R
&gt; reg2.lastIndex;
: s0 }* A* v4 e' M! o0 Q8 M0
% J$ H3 V2 c1 Q// 全局匹配会有一个lastindex属性
" _( T  @9 q1 A5 M$ ^&gt; reg2.test(); v% a( s& k0 ?- K1 r% v5 ]
false
6 V1 A- o# K1 H1 J&gt; reg2.test()3 B* J" F* Y& t' P
true! B2 n7 R- n. s; n0 B
// 校验时不传参数默认传的是undefined
# I# u- ]5 U- `, p% k</code></pre>& S5 v- a2 z' A4 Y% O
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>) W: `$ V2 V  [8 w
<p>就相当于是<code>python</code>中的字典</p>& A1 ?4 X* I3 [8 y% U% y
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 Z0 q$ p2 `# i&gt; person
% e* K6 I9 k% L$ _5 W{Name: 'Hans', Age: 18}1 A, P" n5 m2 J. _
&gt; person.Name0 H4 ~9 v& x8 u; @
'Hans'
2 [+ L' ~" N! [  K# p) \, {&gt; person["Name"]8 j7 l4 S& s: c6 K% x
'Hans'  C# W, A* q  k

9 D# B9 n* p' G// 也可以使用new Object创建
  w# H1 U, [3 m+ [, g$ E, B&gt; var person2 = new Object()
8 M( e: \. H8 v- k$ H&gt; person2.name = "Hello"
3 w6 E) h5 B% j1 b1 c+ [7 d'Hello'0 [' Y. m$ |8 ?: p5 P
&gt; person2.age = 20
0 f$ l; s5 n) C1 e3 u! d3 W; ^) I/ N20: }$ r# Q2 K0 z  l
</code></pre>9 L: X6 P+ V& B6 s0 M# @
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
( K9 Q2 f( I; C+ m1 i8 g% ~' ^<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>0 [% ^+ w4 h# U- O) {5 y! p; v
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>- }) h: I% M3 W
<h3 id="31-window-对象">3.1 window 对象</h3>
4 B# p# |, ^0 k3 _- B<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
2 w! N9 B; |0 T% ?1 @8 ]<pre><code class="language-python">//览器窗口的内部高度6 Q3 S8 y0 s+ E) n1 f/ R
window.innerHeight
, x- V) N8 V( p/ C# v3 X! f0 z706
/ h/ ?8 v) m# C/ n//浏览器窗口的内部宽度
9 D! l# x- E: E! U9 X6 G$ Cwindow.innerWidth5 u7 G* b6 {  c  p- w2 P% b* F+ R8 d
15225 {9 i0 \4 a5 w1 ?% W3 S0 d4 s& I9 q
// 打开新窗口
4 j) r, w$ t5 D. }" ~& H; b5 Swindow.open('https://www.baidu.com')7 y" {' s" B4 D7 S: \8 Q
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
  K/ [% g% ^! d% o// 关闭当前窗口
% d7 T9 l6 ?4 @1 r  Lwindow.close() 5 {* b, d! h8 {: Q( p7 ]
//  后退一页9 c, c, `* i, p9 v( M: p3 x
window.history.back()
6 v' J8 |7 m: o! T// 前进一页& l  g& P& k. g* O
window.history.forward() 9 I" ?. V- [% n: I
//Web浏览器全称
! P: W: h0 M; Mwindow.navigator.appName9 h+ L2 g. B0 ~3 \5 ?1 o
'Netscape'
: x2 ^8 O/ M, C9 l) s; x// Web浏览器厂商和版本的详细字符串) S' i8 ~9 \3 P. H: R  E/ W
window.navigator.appVersion; X' `7 B- g+ I* r% j4 N6 p# B
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& A8 T) M6 e1 `6 s+ \5 _
// 客户端绝大部分信息: `' n+ w. O& g7 b5 e0 s7 ^
window.navigator.userAgent1 u# {: a8 f2 e" L* Y- t
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& T7 A# n7 O8 U+ R3 s
// 浏览器运行所在的操作系统
7 \7 T' W6 u  T2 T) Hwindow.navigator.platform' m0 R. @8 o: Q# T# L
'Win32'1 J# I0 x7 [5 l8 M* V

& X7 Y( M/ i! R- }% ?//  获取URL
: S% d7 |% U* d5 a3 L* [window.location.href
) R6 G' P, k  A0 c// 跳转到指定页面7 U% [. ~& t2 X0 J3 O1 w" z
window.location.href='https://www.baidu.com'
7 w  Q0 B* Z( m6 L) R! y// 重新加载页面' S) V' ]) L9 Q* J% ~" w5 @5 B
window.location.reload() $ l7 y8 ?1 l3 k& d
</code></pre>
1 e& _& }& X- [! O5 U+ J<h3 id="32-弹出框">3.2 弹出框</h3>
4 j& K- x/ y! d" H<p>三种消息框:警告框、确认框、提示框。</p>
: m9 g2 }1 v+ R7 H, W<h4 id="321-警告框">3.2.1 警告框</h4>0 g/ C  d( i. z% ~+ S
<pre><code class="language-javascript">alert("Hello")( |3 Z) C: P5 [  U- m% J
</code></pre>
6 i8 v- r0 A; E: K6 }$ j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>; T8 B8 Q; {6 q( Q
<h4 id="322-确认框">3.2.2 确认框</h4>
7 v0 p+ ^7 a; p/ L6 p/ ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>8 r, ^  Q' s3 A! Q! `) Q& f# B1 E
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, t7 K0 q& ^9 Z6 D1 ?4 p" ltrue! X! Z1 S5 a% Q  X# n0 G; K1 ~
&gt; confirm("你确定吗?")  // 点取消返回false( F3 E/ G" Z  D! T
false
4 ~9 {" R: p9 U7 t2 f. i1 z0 f9 J</code></pre>
9 a  q+ F- M5 p  d; l6 G2 @+ c% a<h4 id="323-提示框">3.2.3 提示框</h4>
! N) U, r4 P, |% _( z6 ?: Y<p><code>prompt("请输入","提示")</code></p>
- p4 _' t- k. P% C, y' f- i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>/ n$ Q( h: O8 l; g, c: l! a
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
6 N$ A9 @& M3 r* i/ e! ~8 M4 R<p>如果直接点<code>取消</code>后端收到<code>null</code></p>" [* K. I3 E6 N* N  v9 t- K& K7 w. B
<h3 id="33-计时相关">3.3 计时相关</h3>
! h4 _! K3 y& p" ?; _/ k! S" q<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>/ a7 O% d6 j$ Y5 e
<pre><code class="language-javascript">// 等于3秒钟弹窗
! d$ M, e: g6 fsetTimeout(function(){alert("Hello")}, 3000)
' R1 E' M1 _8 x- J- O( ^- z
- b. M4 e1 n/ j5 z3 [/ p3 Kvar t = setTimeout(function(){alert("Hello")}, 3000)+ D1 ^! R0 s, x3 p8 U! b* A) P$ H( K

+ u' [3 S' U- K' l% n5 D// 取消setTimeout设置$ ~& m( W' v2 u( ^/ R" N
clearTimeout(t). G. o8 u" |$ t1 v) i- O
</code></pre>+ {. k& f. {2 a
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>% ^) D  O! i4 Q6 S" L0 b, A
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
* Q5 v" i  i9 d: ^/ O<pre><code class="language-javascript">每三秒弹出 "hello" :
9 c7 R% _6 F  k8 E6 P4 ?! A* ksetInterval(function(){alert("Hello")},3000);
* P* Y( Z0 h  E  H7 o" \</code></pre>4 q! o) X7 ^  [  ^
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 a) O! E$ @' Q5 M5 A: x<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);/ Z* i# G3 e& E, F8 n+ S; A) i4 T
//取消:" k4 A. u4 {# \1 p' ~
clearInterval(t)
8 x( C. J! I- H5 }9 u4 ]' k</code></pre>
- k$ H4 \" [  d5 A8 M; X1 |6 n
7 G8 r+ {  y) c1 M7 Q1 B
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-25 22:38 , Processed in 0.071425 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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