飞雪团队

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

前端之JavaScript

[复制链接]

9159

主题

9247

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29807
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
8 A! M, C2 p7 _3 C. L9 J
<h1 id="前端之javascript">前端之JavaScript</h1>
& H" p: c3 T' Z<p></p><p></p>
& _9 c5 A* m4 e% ~7 Y, W+ c' L) F% i<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
& R  s% q% _: Q% b: l<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
% M+ j0 l. t' B* x$ T它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>2 f0 I) L, a( S% B! W1 e$ K
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
8 F! h2 H# Q; d2 ~它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
  U' a8 U! _. i3 e: Y9 l<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
  F1 X  N7 K6 H1 @<h3 id="21-注释">2.1 注释</h3>
8 l" i) G) O' Y: C- w3 U  B<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
  m/ d( y! t) D9 @% ~) g3 j<pre><code class="language-javascript">// 这是单行注释
6 W. P; s: C/ u/ P1 R6 L3 C4 [9 b% q6 Y
/*" ?3 [: E" R& g, [6 s
这是多行注释的第一行,3 c- h# W0 e7 x
这是第二行。3 l+ s+ A% Y1 P. V5 k* W
*/
) R3 x. z, P1 ~: B</code></pre>  Q6 k$ w6 n, G" ]# Q" n8 A
<h3 id="22-变量和常量">2.2 变量和常量</h3>
+ M0 E+ f* E5 _4 x) j<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
) b% e/ K! U/ U! }<ul>
) ]  F( }4 T: h+ n' ^<li>变量必须以字母开头</li>7 [4 I/ z- y! A8 X+ A5 L: Y- o
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
1 B' Y2 a& ]1 a# x( }. ]! T<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
$ M+ Z8 L( n' n3 G</ul>) P- |. p& g! B; J9 S
<p><code>var</code>定义的都为全局变量</p>$ {  ~1 [) m. f# O% ^: h9 u7 S
<p><code>let</code>可以声明局部变量</p>( \4 u+ k4 o% ~) w
<p><strong>声明变量:</strong></p>! L2 k& x# x( J: ^( l7 W% n
<pre><code class="language-javascript">// 定义单个变量0 ]; w4 g& n- [' g
&gt; var name  e9 I, [( r1 b$ ^2 X% `1 I
&gt; name = 'Hans'
0 D" |, O" |* u: u0 ]//定义并赋值" S+ W: D9 N! @2 c
&gt; var name = 'Hans'
9 S' r$ s, A5 q1 Y; y# p4 ^0 E&gt; name
" `/ H& W, P# S0 J$ j' `'Hans'
- `( d+ t  ^8 ^$ m- C2 }( W( u7 y( n4 P0 a9 B2 f0 Y
// 定义多个变量$ H, ]: }1 K& ~1 S
&gt; var name = "Hans", age = 18& _: {4 k5 {5 L$ X. P
&gt; name
; g* u" Y* A) U5 K$ t'Hans', K9 c4 j9 i5 _: r
&gt; age
" b. K% l7 N! r% j  L( g( S18: M1 S' I* Y4 r1 I
, m0 w# B: _! |9 r
//多行使用反引号`` 类型python中的三引号
$ Z  h" E* _  k$ r3 b&gt; var text = `A young idler,' d) \8 X+ u  \, C' l8 c2 i0 P
an old beggar`
7 S/ T3 C: n8 V&gt; text3 O: O9 y& @+ F6 h% W
'A young idler,\nan old beggar'
3 Y$ ?) q+ e$ @, E/ m9 O</code></pre>9 G; ~5 f! `2 B) B  d
<p><strong>声明常量:</strong></p>  A, J; a$ H& t9 T
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
0 B# {" t5 a2 m) N<pre><code class="language-javascript">&gt; const pi = 3.14
& q* h- S: x. `8 U% m6 ~&gt; pi
2 a' U- S2 E- U5 q# u3 v% ~% u6 S3.14
! `, ?- R" s6 i) u# G, z. G&gt;  pi = 3.018 m; e! Z6 U9 b, A9 @- J/ y$ d# b
Uncaught TypeError: Assignment to constant variable.' Q5 e7 F+ f# B$ v, b; `8 l+ j
    at &lt;anonymous&gt;:1:4
3 ~7 x& N, ~: S
* K; _3 l! a  i5 c" n</code></pre>& q* |3 z- b% m; W
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
: r: X/ G$ n" o3 M<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
$ D4 S" N+ t5 i) o6 t, _6 T<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>2 L$ D+ J7 z9 ^
<h4 id="231-number类型">2.3.1 Number类型</h4>
; f+ o5 P8 z4 b$ ]- _. O<pre><code class="language-javascript">&gt; var a = 5
, W* q# \4 t; f" p&gt; typeof a   //查看变量的类型  6 J" T$ U  K2 M% u- \( @5 C
number
1 i3 \6 P+ e: C8 U6 h- ]' d/ @% a& {4 \2 T. x
&gt; var b = 1.3' k6 h, C$ K  `! d# F1 J1 q
&gt; typeof b
, s: `+ [7 L2 w  x+ `* w+ Fnumber
( B4 i, Q6 A' t5 m5 }- b  c
! i6 m6 R+ d9 s/ w- q- Y// 不管整型还是浮点型打开出来的结果都是number类型  I9 z+ E3 @) C/ V* y2 I
: c6 u  N8 p5 T/ Y* ?+ c
/*2 q' Z6 v! k4 V+ L, X* I9 \
NaN:Not A Number9 h3 Q& S+ p7 B( _( ~$ x
NaN属于数值类型 表示的意思是 不是一个数字8 s7 `8 P2 a3 R6 H% ]: p
*/
4 t% E& F- L% x. i$ R% a) [
& ?/ b; y! ?+ E5 i6 ]parseInt('2345')  // 转整型, I# J5 b( Q" n# M- b& I% K2 l9 m
2345
* t6 e$ ^7 a" J; h5 U6 JparseInt('2345.5')
% k- j( W. s" X1 I# \5 r) }( u2345
" X- r: P* d) `3 q, L8 p4 bparseFloat('2345.5') // 转浮点型$ n. h% Z* M8 o5 Z, s: |
2345.5( X, J" U& R$ G6 b" z
parseFloat('ABC')( d$ Q3 b$ Q% P3 G
NaN. G$ _& s( u/ w* l6 N+ ~+ ~. w" Q
parseInt('abc')
& F, K  f& [; J  y$ \2 i9 H0 [NaN
0 G8 D4 a5 u0 `* |4 l$ M4 b</code></pre>9 {5 Z: N6 l; y
<h4 id="232-string类型">2.3.2 String类型</h4>
/ r  o1 U. ^! p1 Q! ?# \3 J: t<pre><code class="language-javascript">&gt; var name = 'Hans'  u4 U2 p5 \9 e# P$ G/ D* n' s
&gt; typeof name/ p4 t* S* {  S6 i
'string'
" l1 E5 W# m8 F; q' I9 G$ M5 D$ D+ V
//常用方法4 Z+ @  B1 u" w6 S
// 变量值长度
7 G( i( {! c, s+ ?) _&gt; name.length! g( H1 l+ r& ~) I- J- C7 L8 e
4  W$ A/ p% F0 B3 d* i# Y
// trim() 移除空白4 j9 k' ]/ a) y% u
&gt; var a = '    ABC    '
: j! n5 c% @7 X) q&gt; a
6 U# a* g' k2 M4 ?'    ABC    '
) q0 Y# L/ C3 r% G& s&gt; a.trim()- Q; b* k- D. s- S7 Y
'ABC'
6 I5 J: X' k, F1 B//移除左边的空白3 _1 B5 L6 G( b# L  q
&gt; a.trimLeft()
2 s) j; m5 ~+ y( |3 E- ?, b$ ^'ABC    '
9 Z! G- t1 K1 v) X3 P% i, r8 n//移除右边的空白% b$ f& c) S! A8 U
&gt; a.trimRight()+ `1 K4 q5 V) Q- i6 ]! R( f7 K/ o
'    ABC'6 n) Y, R( S* Z

+ W8 E# k  c9 K# F& M2 @//返回第n个字符,从0开始
. ]' t4 c. G" d&gt; name9 X: v& k6 x/ \$ q+ R- p
'Hans'3 o! m4 Q( E( W( j( F
&gt; name.charAt(3)
5 M! K8 O- ~2 h5 G's'
1 m: S$ ~0 a4 Q&gt; name.charAt(). ?9 h$ H; N6 c$ X& q& C
'H'! f4 G: R( t* u* N
&gt; name.charAt(1)
' z* O+ d( p3 |( y'a', A7 c. B# ^) R  _8 l
6 |6 H; L5 Y* p1 a: y2 c3 _8 p
// 在javascript中推荐使用加号(+)拼接0 g$ a. E) z% E/ H; ?
&gt; name# D* s  _: A4 c2 S, Y
'Hans'
7 e. s* C3 m0 _( L: m. i% p9 N&gt; a% i9 @* B$ o3 ^% Y7 s+ I. q2 F( |
'    ABC    '
/ @: ~7 b' u7 e% X) O0 W&gt; name + a6 O0 g& A6 W+ m- y& c
'Hans    ABC    '0 l6 ~: H9 G! v* H
// 使用concat拼接
9 u- Z* h1 O8 i( ^&gt; name.concat(a)
# p0 V. F" V' v'Hans    ABC    '
& }# S9 L! H% E& `$ D  [/ ~8 I& J7 X6 h2 V5 p. s+ Z% I& |
//indexOf(substring, start)子序列位置, f. W$ ^  }  K! B0 {' v
  V. \6 m+ i* u) ~! l8 A5 Z( f
&gt; text
4 S1 K' V! j4 B" Q  d& F8 Z+ s'A young idler,\nan old beggar'
$ {* w; P: s( `( d&gt; text.indexOf('young',0)
* R9 Q) o8 x  V* m( O2' z! T0 F8 W% Y, C3 J& x

6 n& R* @) u5 f+ U, B//.substring(from, to)        根据索引获取子序列
0 Z+ i9 ]; [% m8 {/ j&gt; text.substring(0,)+ N' g. n) d4 E  y  P
'A young idler,\nan old beggar'" s* f, e; ~/ g, F" k4 _8 F% e" m) t
&gt; text.substring(0,10), P) o# m- H5 p# g
'A young id'
" C" `# O: A4 q% h+ R
* O& D: ]- F1 ]0 r1 g5 u// .slice(start, end)        切片, 从0开始顾头不顾尾
: C; d: [9 F  ^2 O&gt; name.slice(0,3)
% {6 u3 H$ S  p/ d" ]  O4 D1 J'Han'* G! k1 T- {- ]  t; T% S

8 j  N, C7 o, p* z# d// 转小写
3 o+ [6 X5 L+ q6 m: G( j&gt; name6 U- n, x+ P+ M, t7 C
'Hans'3 }/ M1 H2 ?# @" a
&gt; name.toLowerCase()% ^, E- Y7 n" U" I$ T" h$ }5 t  n" t
'hans'6 v  |! }/ n9 S! E
// 转大写
' e1 Z# V4 `% z8 j) }6 q6 }, ]) W&gt; name.toUpperCase()$ O) X3 B2 O1 S) |
'HANS', |6 I: i; ^6 ?, n- l1 x

0 g9 J. w0 R5 J/ l. u2 ^// 分隔0 g& ^9 D# P, L7 a2 H5 V
&gt; name/ M, J& G4 z; G# T4 O9 Y( z* O
'Hans'
; ^% V+ ^" k% [' c&gt; name.split('a')7 O8 B( g  j6 P2 C) L5 r
(2)&nbsp;['H', 'ns']% C) c8 m7 d- P8 _9 H
</code></pre>
: }% Y) A! v6 B/ }. @<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
/ p: L+ O" j5 D# K' \0 V<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
3 ?1 e) {$ _4 ~' \<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
1 }+ j/ ]# \& r<p><strong>null和undefined</strong></p>
7 j0 w( g! k* e1 k<ul>
" E# ^! {- k5 X; _; Y<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
9 ^6 \1 e" E2 R; e<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
, i  d( E. n% ?0 l, Q# @</ul>  P5 l% u; J9 i7 S( K
<h4 id="234-array数组">2.3.4 Array数组</h4>4 D! L6 u& j4 }) j
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>0 [5 b4 @1 f; a% s. G! @
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
# t0 ~( d) K8 K7 y$ E/ ]&gt; array1, P, g" z$ r: r* m7 p, ~
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 k1 [# c0 L9 k$ k# {9 L6 ^1 M&gt; console.log(array1[2])  //console.log打印类似python中的print
4 Q, J9 ^3 O5 r! K3
  f+ U- k0 {1 f// length元素个数3 w# g! k: E8 b3 g
&gt; array1.length
! E6 U; s% h0 [6
6 f8 `) _* I9 t; x) T% X5 `// 在尾部增加元素,类型append
% j- l6 G, k0 f1 n! I&gt; array1.push('D')# X! p# N6 S. D5 s$ ?! d
7
% I3 d# H/ j, S9 C9 y&gt; array1
1 k) B9 b8 h# X6 Q1 t/ \5 o(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']; x6 q; z# E" g: ^
// 在头部增加元素/ z8 V- C$ J6 J3 j
&gt; array1.unshift(0)( E; w$ i5 _2 \) P- ^
8( G$ e; j! S% Q% o3 D- O; ?
&gt; array10 }( C8 A9 C9 k2 c3 r
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
; m: k6 }4 Q4 G& f# o4 ]: A4 _% P9 f' ~% K: ]" p
//取最后一个元素
4 Y) K4 t% {, r& P; m: D&gt; array1.pop()
' C7 H& b  i4 _0 L3 P: D'D'3 e! {. ]6 _( W9 }' S( b7 ^
&gt; array1' i( J' K4 q% l1 W9 o+ u# H
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']9 P' a8 Q$ P+ ^6 U0 a" r+ Q
//取头部元素
9 l: P1 H0 l% ?) C5 ]. D&gt; array1.shift()  I3 n& ?# j1 u1 F+ @9 H
0; T! L" K: b2 e9 X& ^0 b
&gt; array11 _7 Z5 l5 I5 ?
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# f+ X& f6 \' ~( F8 ^6 ?0 d6 E

% k: a- c0 W3 U; H0 @, W9 R//切片, 从0开始顾头不顾尾
, [% t* [& O5 L# Y&gt; array1.slice(3,6)
0 X0 ~  w: d- x9 v) @7 r, H2 Q7 m(3)&nbsp;['a', 'b', 'c']
. c5 }. f# S& L- y// 反转
0 I1 s* \* M1 m&gt; array1.reverse()
& l) l: i9 S. {- U$ Q(6)&nbsp;['c', 'b', 'a', 3, 2, 1]7 j2 }4 C' j7 l" g% D
// 将数组元素连接成字符串) o8 z6 O; y" k; J5 g- B2 v
&gt; array1.join() // 什么不都写默认使用逗号分隔& b5 f' W2 d/ M! ]" E+ \$ v& g
'c,b,a,3,2,1'' C7 u+ q/ i8 P4 X& P) ]% W
&gt; array1.join(''). [/ ?9 Q+ \' F8 o% @
'cba321'
4 C5 L5 I+ j% V+ B) I5 L# p: c&gt; array1.join('|')' Y. [; R' e6 U
'c|b|a|3|2|1'9 x5 d2 [* w+ [" h
9 K; Q( C0 b, J! ]4 D& O
// 连接数组$ |7 j2 M8 \1 F& h& m
&gt; var array2 = ['A','B','C']- V7 \3 J/ A9 R9 V, f
&gt; array1.concat(array2)7 A2 [+ t* Q% ]/ `
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']: n/ t" X" }3 X5 K

, {/ G. I' t, L2 W8 h8 |+ \  c// 排序
$ Q6 P; [+ _# H- w" R&gt; array1.sort()
' h2 b" }* x+ P! S% v(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 q6 C9 s2 i5 L" m" S3 s" k# f* \( k! \5 `( ?
// 删除元素,并可以向数据组中添加新元素(可选)
+ @3 c; N, t. |* k" ?+ @; N1 u&gt; array1.splice(3,3)  // 删除元素/ k- ~! \9 b/ H6 ^
(3)&nbsp;['a', 'b', 'c']
* r; b, s6 v$ @! f- O% f&gt; array1
. t0 t2 E9 r. ~# E2 d(3)&nbsp;[1, 2, 3]
; f9 r4 E! ?6 Y; Z  [&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
  Z$ A8 I, D! f7 f+ M: [[]9 H% O; Z" n8 h* f) P
&gt; array1
% H# Q* L# r+ X7 l) ~+ p! b& Y(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']9 R9 l6 J: V- u1 i* }0 t$ H; I
" `4 d% o5 h  c7 e& C* f
/*
5 ~; x* L6 G. h$ o  Dsplice(index,howmany,item1,.....,itemX)
. k/ K5 b5 f+ {4 {index:必需,必须是数字。规定从何处添加/删除元素。
1 U$ B, F2 P& c$ H% |$ q6 M, w7 ghowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
8 f! Z% }4 s6 ]% p) Zitem1, ..., itemX        可选。要添加到数组的新元素8 N. M, G$ z1 {5 \& A" {
*/4 O+ Z% w! o9 t( Q4 v$ O" E
3 w; o. e$ m6 u3 B( ?
// forEach()        将数组的每个元素传递给回调函数
' J7 G4 Z' z% u7 {2 X&gt; array1.forEach(function test(n){console.log(n)})
: b7 \& I- e0 w' r 1
5 d) f. w4 [( {# q- ?: w2 \/ _2 C 2
* i, ?9 p/ ~8 t6 U 3/ k- S0 m- \, B# O  v1 w; N& @9 }
A
7 }: F' ?& |# O) ?; J2 g B
! p' ~0 P' W2 P( j5 x/ P C
# Q+ L/ |+ `2 N& [// 返回一个数组元素调用函数处理后的值的新数组
% t: E9 {" S6 @! z&gt; array1.map(function(value){return value +1})
( \# C% l. P! O' {% j! {  j- i(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']( X( P2 `* x4 f
</code></pre>
$ E4 i( N$ A# V4 k8 D0 N  m9 T<h3 id="24-运算符">2.4 运算符</h3># _+ O3 u( n) [" b/ C3 w  m! A9 t, A! X
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>. Y8 H" g% O/ s( p
<p><code>+ - * / % ++ --</code></p>4 o3 G& F. L3 N2 g6 T0 W1 `
<pre><code class="language-javascript">&gt; var a = 6
' N9 P3 c" W( U. b; O1 V2 ^8 u4 W! C: Z&gt; var b = 3
2 p/ H+ E0 f* x$ Y// 加
) }; _& t3 G9 C8 L4 m9 ?&gt; a + b1 {2 V5 U3 _# i" O
96 X$ o0 E0 o6 s+ [) E# Y) |- e
// 减
6 p! ?* M# B9 D# _% O; p7 o&gt; a - b
1 K, e; Z, l6 E( S6 [3
' g6 x2 K8 v# k+ u; H4 o; _// 乘$ R* s. e1 o/ k' d; \) k  M
&gt; a * b" B7 X6 t( |8 s0 `) u8 Y
180 \0 ?* A* s- p, `# j! g# v
// 除1 ^4 q* u' n. l+ q) x
&gt; a / b
4 W3 d( m# z* u' Z! I2! c# A; c5 l+ t$ V' w4 @+ m9 e
// 取模(取余)! Z2 m3 L5 H; f* p8 L* P1 y' }/ @& A
&gt; a % b
6 ~' q6 C$ f9 l; L2 j# `& R0) p# _7 l5 ^' D3 r0 R( W8 G! u4 Z
// 自增1(先赋值再增1)( P3 q9 O( Z, @! X# `7 [$ l
&gt; a++6 ]# c7 D4 I/ E' L) W& D# S/ I
6
/ V% s9 w+ D: U' S; [&gt; a) L. V3 e6 v/ K% N
7- U* D- q. x: R9 L9 g! p
// 自减1(先赋值再减1)" }( k# [8 n* U6 w
&gt; a--
0 N% Y3 N* [0 W, _2 ]7 y7% n6 |. e% ~, `  o5 x' z. Z
&gt; a# e8 e2 c. Z! e/ \7 u: O; j# w
6* g/ b( b! P. g
// 自增1(先增1再赋值)+ `$ |0 `3 e; R0 Q4 Q9 J2 |* ^
&gt; ++a
$ k8 i% i8 e8 f  H7
  ^+ y6 E5 ]1 U" F// 自减1(先减1再赋值): S  Q9 A( z. T
&gt; --a
) j$ T9 J5 s' P5 G6 C; x2 b6
( V8 Q) P# j( K8 Q&gt; a
: f/ G+ s. [2 K3 O+ |+ u& ?6
' U3 o( J" r, H; Z9 b
: f. s9 d# Z; y- H9 ?//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
1 }) O, X: V8 N1 Y</code></pre>
! F4 \; x* O' V& B<h4 id="242-比较运算符">2.4.2 比较运算符</h4>9 ?  a5 p% S% Z" i! A
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ ^) o" K, u6 d9 v6 m  h
<pre><code class="language-javascript">// 大于  n7 C  {2 {. f- p& r$ a' f
&gt; a &gt; b
0 {3 c% O0 _3 n1 r) xtrue
1 I  i& U! @  v$ O3 V// 大于等于
  v2 {' z' |4 E" u9 Y$ I&gt; a &gt;= b! {0 ~- W& w+ D0 Y, @
true* Q! ?, d4 h0 f- L. c/ z1 v. ?
// 小于
/ L/ y3 S5 h7 l% r+ v0 a' n1 w5 ^3 w&gt; a &lt; b0 h, h/ i# @* l' s1 h, _
false
4 N5 k2 s7 }( y5 Y9 o1 H4 M// 小于等于$ y6 m1 l6 P5 C  f& d/ s; k
&gt; a &lt;= b7 D: p) ]. ~0 ?; T: |: X5 s
false
3 ^6 S. p# a: M# g0 q$ l3 j5 Y7 ?  N// 弱不等于
, w1 @5 c, L, ]1 e7 E&gt; a != b* ?, K- [" H1 y- x% p
true& v& M! P+ M) V% M+ M2 E! k
// 弱等于  w8 g; Q1 [5 G$ X" R5 N' e" A7 J
&gt; 1 == '1'- i5 t% H* P8 d+ E& y+ U
true6 x: r$ K9 T- T# m- E! \4 M* u
// 强等于
: R/ q& F: d9 @/ |! P4 K&gt; 1 === '1'+ G' r5 {, b8 ~( ?3 G' f! P7 p/ f; M
false
! F: t7 {4 h- O8 c// 强不等于
7 w+ r0 m% O9 z; X2 k&gt; 1 !== '1'; Q) R; }+ T+ I, b4 @! O  v
true; ^' Z4 k1 c! e& o4 T: |  {

4 p- z% w0 _$ I' t  S/*# u, J6 [6 |# P/ G, j
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误2 r9 x( e- o5 F5 z9 v; H% v/ ^( R
*/6 M$ g7 U- ~' g3 I
</code></pre>% ^( o$ O& r! ]. F7 b1 W: }
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
% q% U0 |3 c& s<p><code>&amp;&amp; || !</code></p>2 ?4 A0 P4 k' q. }$ A
<pre><code class="language-javascript">&amp;&amp; 与
  S7 U* S+ b% D7 [+ H/ r$ A- @|| or
" j2 c  j2 V7 B( f9 @2 ~. w6 F, `! 非
# g& [+ a0 k; V: ]' @$ R9 g</code></pre>
7 T- J, R; d% P. P7 K, t% S<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
1 q6 r% `7 {+ g: x9 n- q<p><code>= += -= *= /=</code></p>
/ Z1 N1 K( h* b* D- j% A# t<pre><code class="language-javascript">// 赋值
: G4 _3 _/ `$ @9 Y$ f) ~7 ?+ s: j) c5 ~& c&gt; var x = 3
2 u' S" f. ?' G// 加等于
+ H4 \. D3 _* d. W$ c% C& {&gt; x += 2
2 K: S( q0 |, n5+ `: e( T0 ?1 Z* f! r' Z+ t4 A/ e/ m
// 减等于% X3 b, g( |: O/ @6 K3 O
&gt; x -= 1
9 ?/ V2 w1 Z" N3 f4
9 `6 @0 T7 A& w0 ^0 J1 {/ M// 乘等于
8 `- H* c- g  E" Y; w" O4 l&gt; x *= 22 |, E% [* @; l7 j' o& o: _
8( c+ Q4 j1 S2 I! w6 x1 a$ @& I) d( w
// 除等于
) Q/ n/ u) b. Y9 n* z&gt; x /= 22 g# K. o$ ?! W9 J8 t
4
  G) R2 {* _6 B! \( w' c- z7 Z4 s</code></pre>2 n3 h& R6 A$ G' w- x* ?) Q
<h3 id="25-流程控制">2.5 流程控制</h3>
# j" u; E) `" x<h4 id="251-if">2.5.1 if</h4>
, l6 _0 o- Y4 `3 x7 D) ?( M<pre><code class="language-javascript">1, if(条件){条件成立执行代码}6 a; f# X: {3 l: @

* i% m0 ]: m" S0 q&gt; var x = 34 a( L1 X9 ]7 P' i0 \4 i' e9 O
&gt; if (x &gt; 2){console.log("OK")}4 u2 V& N" b* Q7 D8 _4 y8 S
OK6 K7 r  u" _3 ]! t. @

, _. B' ]2 _$ b8 B  H8 u4 @* R2, if(条件){条件成立执行代码}
0 f6 y% e% q2 j* \        else{条件不成立执行代码}
- Z& s+ k) k: R2 W) f( f- d4 `6 }7 k4 L8 c
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
0 V, G8 n3 z9 g3 p" F$ t: @0 G, _% z'NO'9 b/ R; |2 j& k% T. p; t
+ `, `. a9 X, Z4 W( G+ e4 {! o
3, if(条件1){条件1成立执行代码} 9 h  \. d* x, Y' E! Y0 |
        else if(条件2){条件2成立执行代码}
# p+ I: U+ S2 \5 Y! Y    else{上面条件都不成立执行代码}
1 J# l4 m6 x' n- s; z: i7 K& |. g3 i! Y; K5 h8 d, W# E8 R
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
9 |) L, W: T& v9 l, | Ha
. \; a: i# ^7 s$ u</code></pre>
  ~2 L( D3 m; a. K<h4 id="252-switch">2.5.2 switch</h4>
9 Y6 w+ K- P1 S  E4 _& q2 A<pre><code class="language-javascript">var day = new Date().getDay();& C( _& e7 w& p. p7 w
switch (day) {8 \' c$ V6 F% l* X* H6 U  H
  case 0:
* L) H% V5 q2 m  console.log("Sunday");
) p6 A7 f$ x" X9 e4 J  break;
0 m7 ]* `: R, v6 A- P1 v6 j  case 1:: X1 V* D! n( c* n
  console.log("Monday");
! }  c1 g) E) ~# Z1 b  break;
  n; N4 ]2 [3 Q: q. D2 \  adefault:, s9 k  ?$ F* U$ M. W4 Z  _
  console.log("不在范围")( x- g( L0 o* l. {2 a
}5 k* y* B- |+ S, {- x
不在范围) z0 D$ N- H" t3 @3 F9 p
</code></pre>
; y& Q0 j# ?# |; ~  m5 b! D+ M9 H<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>" `) V2 J- V3 U2 C
<h4 id="253-for">2.5.3 for</h4>) Q4 @! I# E! T, @/ ^8 z2 [" [" q4 P
<pre><code class="language-python">// for 循环
# v& p& O: \$ E9 r        for(起始值;循环条件;每次循环后执行的操作){
  t# ^( ]) Z* s5 U4 n8 p  w        for循环体代码
) ~" M7 v6 z$ h8 B" E4 ~1 N    }
! J3 ?" |$ `+ d5 g: l8 L( H5 Z4 l0 U4 Y! C  p
for (var i = 0; i&lt;10; i++){
; W* V7 N7 S2 M( s    console.log(i)
& \. k1 ^- C0 w4 Y# E}* |3 r8 J9 x1 G* O# T
        0  F# Q6 e  ?, j8 M
        1
$ G: _6 h; d0 D3 s        23 ^. Z: x) T' I" A$ W! }
        3
/ d' o2 J. z6 [9 s- b  ~, z        4
: z. o* E, F# J1 ]( ~- ~: Z$ P        5! A- m6 ]6 ~5 ~
        6
1 A+ _/ S$ y( o! I7 z2 d        7
" O# p, s/ N0 K- _) I5 c        8( h) a* d3 H: E* e2 X- f
        90 s  p6 c" f* s" M3 \' C
</code></pre>. R  d8 r0 L" A% E% y
<h4 id="254-while">2.5.4 while</h4>  C2 _/ ^4 v# I, H  ?! X
<pre><code class="language-javascript">// while 循环9 M0 n' b  ?0 x8 |( W
        while(循环条件){; J3 Q3 ~1 S$ A% Z" }% W
        循环体代码* c  D% M( I3 E# v7 Z2 }/ |/ n4 R; `
    }- p! i! c# f) K# c  r) O+ H
6 s6 l6 Z: k3 ~  z9 P
&gt; var i = 0) _1 O, ?$ t% ]/ Q0 ]* {- k
&gt; while(i&lt;10){9 r1 `9 q* j' u0 b9 f
    console.log(i)
+ h; F1 ^4 ?+ m6 v+ J0 o1 V4 q    i++3 }9 r# s( q) u# }) h
}* S2 ]: o: w/ K1 M
02 v2 R) e$ I( |
1
& B) p/ z' H5 A9 ?' X4 ?; q4 P 2
' n1 V( G. R7 D& j6 a 3
2 U3 s" x; E  b1 ^* ?' u 4
8 v2 p8 J1 `2 E7 B2 V 53 P: V3 I" U5 p! w
6
. |8 F$ S; g3 c2 K- \; s9 u$ k8 d 7
  o! ?; G3 G3 [/ C 8
/ v3 K1 D9 A/ O& l 9
" j* b0 n0 y; q: c" J' U3 C</code></pre>
( c0 H2 R) c3 z* @<h4 id="255-break和continue">2.5.5 break和continue</h4>
& T6 [8 k" r6 g# C<pre><code class="language-javascript">// break
3 k! q# K# L! _1 Pfor (var i = 0; i&lt;10; i++){
+ m/ t  ^! i( w# A  x5 A% D, {    if (i == 5){break}
; h) Y. ~( G1 U& q: B. X% A' I6 n/ q    console.log(i)2 M$ h. A! J( j% w
}
8 j& s$ Y% c0 N% [5 W8 I9 t" D 0
, Y7 x% S% a7 |$ u6 T3 C. r 1
% [; L/ m& Q! _% f# w 2
) U7 ~& V1 N# T7 `* j 3+ S# Z# A- f# c. k
4
* i2 Q% p1 M8 I- u/ r$ W& P// continue1 [2 i+ C) B3 ~/ |$ q/ X3 \9 G* `
for (var i = 0; i&lt;10; i++){) `0 @2 ]* C( I% V  h7 ]+ |
    if (i == 5){continue}% f6 G  p9 \# b7 r7 m3 f
    console.log(i)5 ~3 O: a& m- m/ P
}& F/ i" D& d6 |2 Y" G$ Q
0
1 @! t2 [) p- ?& o7 u 1
3 e1 D1 Z& A) b. f7 }2 r 2" ?' k- G, _  b! W) F8 N6 n
35 H1 ?* t$ L* c
4+ a( C6 K' Q- w8 Y) F4 ?8 ~
6
0 N2 t7 J* z* T( E1 K 7
% Q3 d. a  b, d: q5 M 8
( j' n# s, n7 O" W) D 9; ~" q9 _' W- s8 A1 O5 r& p8 S4 u

! x6 e! i6 Z8 Z! p/ F& N* D) Q* a</code></pre>1 n: F' a) C3 Y
<h3 id="26-三元运算">2.6 三元运算</h3>
. Z6 }5 y/ U+ J5 l* Z+ J$ U<pre><code class="language-javascript">&gt; a, K. S5 p5 P7 K; _
6
1 f( c- s! {  n&gt; b/ j4 I5 J0 J4 j" Z8 o  i
3
: [3 O3 Y; B' _- S+ [. T
; h( G, t3 R1 A4 ?5 r//条件成立c为a的值,不成立c为b的值2 d8 e$ m  M: Q, d& y1 S
&gt; var c = a &gt; b ? a : b* |: P% G8 k" r6 j
&gt; c
" w* g# @1 C# ~/ `0 P6: w8 ]) Y$ ^! o' _+ S2 x

" `+ ^: A1 A/ Y  f, d" |% D// 三元运算可以嵌套
, h. v6 {8 T$ ~8 T: d2 i$ E</code></pre>1 R* a3 ~+ R' x6 y0 z. m0 ^' C& e
<h3 id="27-函数">2.7 函数</h3>( P: }5 B) |3 y
<pre><code class="language-javascript">1. 普通函数8 G% B( I2 _8 j7 C; a
&gt; function foo1(){. L( O1 l; r# t
    console.log("Hi")
( c- t- k. D0 i& u2 ]2 K}
! C% L( i1 H/ I  d+ P3 _8 r, k" z& O+ D
&gt; foo1()
/ K1 n6 R/ B9 R4 e5 Y2 C5 a* q        Hi' J+ A+ D5 o' e; d9 V1 H) S
2. 带参数函数3 r8 e- Z' H. p
&gt; function foo1(name){
: `; [* u. Z6 E9 Iconsole.log("Hi",name)* n" u& Z9 d  \: D) F
}. R9 b3 n# T4 b7 b. G$ m
  F, [3 f  q! r2 }% V9 I" v( e: W7 w
&gt; foo1("Hans")0 ~: |" z' n1 u, w
Hi Hans. f& t( g. h5 j/ a
7 |( O: y2 m( E
&gt; var name = "Hello": ]2 `+ f' U9 m4 j/ J
&gt; foo1(name)' F* @! B9 b; C" ~* _" j6 V
Hi Hello/ {' M9 d0 s0 Z: G

. b) H0 Y  L% w! A" B3. 带返回值函数
4 h3 A2 P- K. A' c1 Q&gt; function foo1(a,b){
! e2 m6 Y$ W' W* C  }; G3 ~  f        return a + b   5 G7 C4 w+ \+ R* r* h2 w3 F9 o
}' @: r4 p( m2 U" w
&gt; foo1(1,2)9 j0 B3 s' f% ?  V: a8 E' _
3
0 k+ ?1 X/ x5 q, T: e( K&gt; var a = foo1(10,20)  //接受函数返回值0 z# r/ J& T* z5 |
&gt; a$ j+ H. G7 I0 k. ]
30
; f1 y( S+ r' ~9 N3 K3 m/ f5 W
8 H3 |# W+ q) x5 Z4. 匿名函数
4 Y/ f- P3 C% w8 m7 }&gt; var sum = function(a, b){
- ]0 O! c7 c5 `. h- G: e  return a + b;& S" `' U5 G: }. I  l
}
# T0 R1 M6 }0 W3 e1 t# B' C# Z&gt; sum(1,2)
( \! J5 l5 ^  D$ Z9 c3" k. x, U7 `# I0 m1 j, o2 J
* ^6 Z' i  Q9 L; ~" f- y) Q: q# d
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱  r/ `" {, A) @9 d
&gt; (function(a, b){
/ H. C9 Y: ^3 z3 \/ T  return a + b
8 W" t. }% s6 ~# L( d# O})(10, 20)( @' c4 ?: h) P% b, ]
30" h2 Z5 Z4 S& M# A3 F7 _) {. `
/ u3 s$ f! ~: N( |0 d9 l2 u0 E
5. 闭包函数1 {6 O7 j, r1 B
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
) q/ W7 ^$ D+ @% G4 {( g% |2 pvar city = "BJ"
0 C: K, b+ S! J. }4 M/ dfunction f(){- a0 ~+ `( @- G& c* g7 _/ ?
    var city = "SH"4 R, `& n# Z; E8 b; O8 p
    function inner(){; E/ j9 Q: w" R* r0 n
        console.log(city)
% {9 R2 y& c& @3 v    }* i# Y8 X, R; u6 S( w, D; Q- P6 b: _
    return inner) I1 Q) |/ B0 y9 V3 Z0 D
}! _0 l* i( b% D! z
var ret = f()
) @% a$ g% M, M. p; |- M. N7 U- Y) R8 a$ ?ret()- U& \- x5 T# ]$ Q/ J
执行结果:
. u( b8 c  M7 D- }SH
3 [$ c$ O, a3 {& ~& ?4 U0 n! c9 {/ o
</code></pre>
2 K$ t3 F% U6 i3 V<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>! _* H* P0 P  a+ D! T4 A$ b9 U8 z) Z
<pre><code class="language-javascript">var f = v =&gt; v;3 n& a: i: o% p' @
// 等同于
& s) q8 A9 v1 o7 }- L$ |' M8 I2 ^var f = function(v){7 d/ |1 h* R3 q& Z
  return v;
/ B: c5 Q2 g0 r$ w. u& v}
7 |+ @$ V7 a0 O& U/ O( u</code></pre>  s3 r5 H8 B5 q0 a
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, o7 L' R" a$ U; l- y0 i<pre><code class="language-javascript">function foo1(a,b){
- A& G7 W* J* l1 C8 t    console.log(arguments.length)  //参数的个数
+ p$ h: K/ d- n) O0 d    console.log(arguments[0]) // 第一个参数的值/ B2 ?. U/ T& x' H5 }1 o% Q2 R8 Y
        return a + b   # [6 T6 y% a+ f6 Y4 w- D" W
}
# T4 H- |/ P- Gfoo1(10,20)* k5 k$ h3 k; s% E$ ^
结果:8 ]! m8 H/ Q6 d
2          //参数的个数 ) `( W. A% k8 z' w
10        // 第一个参数的值
' X7 X5 m" g" s0 z/ h30        // 返回相加的结果
) T* m+ e( F( `, m</code></pre>
. K8 b* m. y3 N* ]8 y<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>: _+ K$ [. @2 ]
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
  k: v' n; T0 v2 T" E7 R<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
6 B/ X1 o  o1 A: B4 c$ I<h4 id="281-date对象">2.8.1 Date对象</h4>1 v, O/ R4 i. l9 ?( M5 W6 M
<pre><code class="language-javascript">&gt; var data_test = new Date()8 W' T+ T2 k( E2 Z- u* ?
&gt; data_test+ v% o( R! Y, h. s  n2 }( ^* f
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)- D+ ^) A5 V4 L5 ~& o2 S8 E
&gt; data_test.toLocaleString()3 M$ B/ D' S" R# g
'2022/2/11 下午9:44:43'
4 w3 Z, p8 J& Q2 F% q9 ]* j
$ P) V* E6 ^; N' W&gt; data_test.toLocaleDateString()
) i3 j: z( U; N$ @'2022/2/11'
; @6 H& T, @  v: C) g  b$ N: T; k
7 H5 V" h4 ?  F1 v/ @6 i: o/ S* a&gt; var data_test2  = new Date("2022/2/11 9:44:43")
* _0 [' C/ o2 h0 I6 j+ [4 b&gt; data_test2.toLocaleString()2 W- M/ J! S5 w) B$ r$ D4 e( e2 G. |
'2022/2/11 上午9:44:43'9 i7 G( D% a( ~" S$ h
; K2 V+ G  h& O, m
// 获取当前几号
8 p! H2 w4 v: u0 o( ]; B&gt; data_test.getDate()8 E8 I* q0 c8 f7 v, B/ D& Z
11
+ X2 ]- F' ~  v// 获取星期几,数字表示, _3 v- k" m! M' F2 ]. q- T
&gt; data_test.getDay()  
: B4 u7 K) |  R- u4 j# f57 f) D* X+ f+ Z6 H0 k: L; a' K
// 获取月份(0-11)& c) S6 e7 b+ V" t  g
&gt; data_test.getMonth()
" v. z+ X7 w) l# k0 |1
, x6 d$ e* u) l3 N  `- _, Q, h) L// 获取完整年份& m4 f/ @4 B7 D
&gt; data_test.getFullYear()
" u6 B8 T! f6 u( i- O3 Q2022
$ t: ?% v/ l( }( W, P7 ]1 b. v( R// 获取时
0 K) q; e2 p/ F/ o% ^&gt; data_test.getHours()* r7 G6 V- a  ^9 w' F- d
212 a) ?* Y$ n6 b  t* X# ~
// 获取分
) p( q2 C. c- Z8 r0 E4 Y&gt; data_test.getMinutes()
" I. F- l* O* H9 R: n44$ P% ~+ {8 r0 Y  b9 k, Y
// 获取秒
. s) w6 N! r( N, C0 p&gt; data_test.getSeconds()
9 [0 i! {1 |* }1 B/ P43& y6 R. }" h, }$ L% g7 d( e) z! \% s3 Z! z
// 获取毫秒
1 ?* R. G* ]7 Z* D" _&gt; data_test.getMilliseconds()
4 l* q) m# t% H2908 V1 T1 J, @4 _$ r) ^
// 获取时间戳
5 ^& x. r7 D# Z/ X, v&gt; data_test.getTime()9 F% b4 l# J8 q
1644587083290
: X; G8 W- D5 G% y) b</code></pre>9 e' j* h* o& h- L4 x- i! o
<h4 id="282-json对象">2.8.2 Json对象</h4>
- ?  Q% N6 `* G4 k. s; |+ [9 L<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
1 V! E; x' y3 {; Y8 ]JSON.parse()  // 反序列化,把JSON字符串转换成对象! `0 W& s1 ], t( d- Y
8 R/ \: p9 O( R4 t
// 序列化9 Z+ L+ D2 \! z% K2 U9 a
&gt; var jstojson = JSON.stringify(person) ' D7 G0 l) s3 t4 c
&gt; jstojson  ) u9 h" ^) M3 r4 P  F1 a+ i
'{"Name":"Hans","Age":18}'5 a7 X# k/ z& x" p) p
2 L0 i# G( ^9 c. Q2 j, A
// 反序列化) p. |3 [9 |8 |. S: _
&gt; var x = JSON.parse(jstojson); k; O( {, U( @# w* o6 K+ V
&gt; x; W2 ?3 v, k* I4 i( ^
{Name: 'Hans', Age: 18}0 ?* Q: ^9 X4 w1 V- t0 j( M% K. S
&gt; x.Age$ W, f# i- l4 d* E$ M" I
18. \: L7 p. A# k4 \3 i# p
</code></pre>- T) }5 q2 d- W7 d& m. U8 v
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
6 Y0 k7 D  g& |, x% R1 ~<p>正则</p>! @& `+ [; n* Z9 E+ M' U
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");* n* ^' i& ?( C5 P3 N  D
&gt; reg1  y7 }+ y4 ^& F) g+ z3 ^
/^[a-zA-Z][a-zA-Z0-9]{4,7}/" m& c6 N( O( l1 k( |: H) s, R
&gt; reg1.test("Hans666")& B0 V" |* Q( y6 k! }0 p
true
( I: i& N4 m2 ^( m9 N  l4 b+ H$ N# S# q; f; n. j; x" A
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( @$ c, `& o( Q6 F9 ]) m1 {7 b&gt; reg2- d  v7 L3 d: z+ ~; }8 R  r
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
. [' b0 h2 y% A' g&gt; reg2.test('Hasdfa')
" P% a; T0 W; m7 `true. F# e0 R( w  B+ @% N
( l: `, e, H( w8 }9 G- Z3 o' t0 U
全局匹配:- s) \' ~) u$ b4 X2 c1 b9 q& w; P
&gt; name4 p7 i% Y' m7 _/ W
'Hello'
2 o0 V! }' r- i7 D&gt; name.match(/l/)
, K9 D5 Z& G3 p* K# Q['l', index: 2, input: 'Hello', groups: undefined]7 \8 g2 N3 ]8 y  a, {5 u

' e( t+ B" v* U' F6 p! H&gt; name.match(/l/g): |) H  X6 @+ f# [
(2)&nbsp;['l', 'l']
* Q& c& H' u$ L" p// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
% A4 \8 o/ A9 o  L' M0 S9 H0 }. A( }- c. N
全局匹配注意事项:& B+ x; R0 j; C" ^2 O9 y* r' j+ c
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% c7 u3 Z1 p; n$ I$ Y5 P
&gt; reg2.test('Hasdfa')0 y" G# y+ L. ?9 \" @7 x) i' a8 w1 E
true, V. H5 i% h2 A) `. a0 H, @
&gt;reg2.lastIndex;
' V7 _: i+ `/ W$ C6
' L+ V( f5 z' z9 y* Z&gt; reg2.test('Hasdfa')- q. N. ^+ @8 J1 a
false5 ^* c8 Y1 y/ `' d$ K
&gt; reg2.lastIndex;
7 R7 F4 ~1 G1 G1 r* I0
: S) `1 k5 W7 e. E&gt; reg2.test('Hasdfa')
0 l! R7 C2 N+ Q2 M$ etrue9 w6 P' |( o8 R6 ^+ I# j
&gt; reg2.lastIndex;- d- z! J% _* p8 W1 r- W
6
+ X* _: W; }$ H&gt; reg2.test('Hasdfa')
0 x: Q8 l& k! a# cfalse
! w3 H! b5 y! ?4 A& n9 |. A&gt; reg2.lastIndex;
, }0 }9 W" p  }3 C7 I9 t5 q0' ~5 r. E9 v: m2 r9 t% o5 U4 M
// 全局匹配会有一个lastindex属性  W( j/ _  o) @- K5 v; N" ^
&gt; reg2.test()+ T% g# w+ r8 Q7 b6 P
false
2 p+ I2 F$ _5 ^+ I8 l" w&gt; reg2.test()4 @8 z1 b3 O9 P
true
- o3 D9 a4 N4 M3 v; C) a// 校验时不传参数默认传的是undefined- Y( w9 W# p, w# _- I
</code></pre>
4 q2 ~- S1 C, F! w9 J7 n( X1 Y<h4 id="284-自定义对象">2.8.4 自定义对象</h4>2 A3 u2 s2 Y, z
<p>就相当于是<code>python</code>中的字典</p>
0 p, \; F* [9 ~2 Q<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
5 T! [7 s6 q# _" H3 N&gt; person
! |3 `2 H  Q5 v$ K& V, k{Name: 'Hans', Age: 18}
+ y- y4 s4 n5 {" d6 ^' L&gt; person.Name
% x! K# B9 O" X: ~7 ]1 h'Hans'/ r; c" b8 ?4 [6 I) R* D4 I- \+ p
&gt; person["Name"]( F0 Q- |9 B+ \
'Hans'
( L- {! j1 k: p( N  K$ B3 u% x" K9 V! M) X! X) o' _
// 也可以使用new Object创建
4 x* F7 V: g% p4 f& X/ g) e) |/ a: @&gt; var person2 = new Object()* \: p( W' J3 b% x; o
&gt; person2.name = "Hello"
. G1 ]  d) n' Y' f3 I* ]$ Z'Hello'
" v6 h: t! ^! X0 @8 F& s&gt; person2.age = 20
9 `0 c# u+ M) B7 Y' ^20
' T3 h0 Z; t$ |* T</code></pre>
9 A7 m0 g# ^0 _<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
# e2 W4 }2 S- w  |' U<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>& I; }, f$ B7 U7 ]! _7 Q
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
* e1 z, H4 y7 Q<h3 id="31-window-对象">3.1 window 对象</h3>
. l% P/ v( D0 b  c8 o2 H<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
" C4 u* m7 M, M; d+ }<pre><code class="language-python">//览器窗口的内部高度/ t, o) Q7 Z0 H
window.innerHeight 4 o+ O2 i' A$ V* j* o7 i( ^
706; Z9 X7 O8 h! H
//浏览器窗口的内部宽度1 L: k# w$ z- m0 T
window.innerWidth+ p' m- G; J6 [# x; k0 L
1522/ g2 M, N& k9 N
// 打开新窗口
: k% t; T- |. ?/ l6 n+ S: @window.open('https://www.baidu.com')
/ X- I9 a9 o( ]/ fWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
5 b+ }9 d4 g, ]0 }7 }3 l6 r// 关闭当前窗口" }+ n) ?5 s1 h( z! V
window.close() 0 J" I0 F, B3 h) P6 o
//  后退一页3 t* q2 Y# z0 P. q8 b  C2 j+ h4 Z6 V
window.history.back()
6 n( B( C+ c4 f. x' Y// 前进一页
& L' I4 v2 q4 W5 Owindow.history.forward()
8 Y2 x! G9 r" p* {- {& O* L) `//Web浏览器全称7 q: W. V% m7 n" }6 H/ G
window.navigator.appName9 {% n8 q: d9 f, {2 ]7 a
'Netscape'2 _0 K0 {5 N$ E3 \0 N1 ^
// Web浏览器厂商和版本的详细字符串
. q1 H6 C2 @& U2 U& N4 Owindow.navigator.appVersion
. G6 ^" p/ x& Z9 M! `' B$ _'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'8 \' h6 B/ e$ H! p) [+ d/ U
// 客户端绝大部分信息
! M8 \" ~; C. g7 a* F) z/ Zwindow.navigator.userAgent
; l3 ]8 g( D3 s0 H- j! X8 I'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
3 O9 t$ y0 G! z! H* e7 G// 浏览器运行所在的操作系统2 Y5 A+ }) V' u5 a- T. t+ q5 }" u
window.navigator.platform( C+ N0 C* O* H
'Win32'
2 u% H9 D6 h: w. _  o, ^% w  g; f
//  获取URL
/ N$ V4 w% K! r9 Y+ S0 F4 l% ]9 Cwindow.location.href9 h6 G3 c4 Z; R+ [' H0 C
// 跳转到指定页面* _6 _5 o- O% e- E" j  f
window.location.href='https://www.baidu.com'
; A7 _9 f  C; t# R// 重新加载页面; H9 o6 [# P  ]8 W& `# }
window.location.reload()
5 A& \, A+ @4 N3 a</code></pre>
% s+ ~' Y- J- ^- v$ Y; g! S<h3 id="32-弹出框">3.2 弹出框</h3>5 b1 V  @# s- ?1 i3 Y2 s$ |
<p>三种消息框:警告框、确认框、提示框。</p>
- ~% D3 R5 V$ f! L' A$ `% y<h4 id="321-警告框">3.2.1 警告框</h4>
' |! o! {: y: W, H& V<pre><code class="language-javascript">alert("Hello")% b( s! g) G! S
</code></pre>4 F0 V) \4 @1 [" u
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>+ J! U( b" i2 `' l0 i, ^
<h4 id="322-确认框">3.2.2 确认框</h4>
& S+ V, X2 q& ]- @% q1 ?" i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>+ g, i! r; f; u5 s
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true  Z! h9 R# T; M6 y5 y- Y- N& T/ s
true
  r$ R/ |0 B( M&gt; confirm("你确定吗?")  // 点取消返回false
* f& G0 J8 ^/ B$ `  E6 Nfalse- u4 Q: n5 x3 m9 Y' {6 M
</code></pre>1 T- x1 j- w3 x
<h4 id="323-提示框">3.2.3 提示框</h4>
  H0 [1 B# L7 @8 {<p><code>prompt("请输入","提示")</code></p>
) Q- f8 t3 D4 Q- C<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
$ }3 K) \; V) `8 P- U; e0 D' e) f* U<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
# I9 j5 A$ Z; ]8 q8 J; |, D<p>如果直接点<code>取消</code>后端收到<code>null</code></p>1 l# V' l" p3 W- B) o/ q- O" p& k
<h3 id="33-计时相关">3.3 计时相关</h3>2 e$ T6 D0 |* Z4 C2 c+ H
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
; d8 ]3 Q1 ~4 U9 ?$ J<pre><code class="language-javascript">// 等于3秒钟弹窗& q& j3 ^, T* q6 O$ ]" c$ ^7 e
setTimeout(function(){alert("Hello")}, 3000)1 i. h6 R& C8 D' n4 w; F* X5 O

& l! z- G- p) j6 m* Svar t = setTimeout(function(){alert("Hello")}, 3000)
8 v: p, A/ ?/ ~) l* `7 I7 Q4 T( s& O4 x8 @
// 取消setTimeout设置6 H9 r! f3 S. a& H1 _
clearTimeout(t)3 V' x7 X' U8 H+ l5 S2 H% S
</code></pre>7 ~( I$ d% m. P+ R4 x0 A, p
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>* L0 {% s+ c0 j" T; [
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>$ p3 @8 _' M+ j
<pre><code class="language-javascript">每三秒弹出 "hello" :- Q9 Z; q' d% I: B* J
setInterval(function(){alert("Hello")},3000);8 g5 y, }0 p! r9 Q, @
</code></pre>
" e) Z1 N; `' [/ Y, C# T* F<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
/ v% h6 z* J9 b: ?<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
& }2 }4 h% ~2 k8 j3 W2 v7 M//取消:0 b, |5 t, p2 S6 t
clearInterval(t)
: h3 {$ w  ?) B7 \# b</code></pre>7 h4 D! A6 f- u. \6 R! I2 Q1 E

. ]6 `, i, B; S) C2 B1 T$ B3 p0 s8 b
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-8-26 14:59 , Processed in 0.068400 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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