飞雪团队

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

前端之JavaScript

[复制链接]

7327

主题

7415

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
24311
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
' O  i9 a" O% P/ z& I
<h1 id="前端之javascript">前端之JavaScript</h1>! m1 C: C+ D% [6 P" E8 a
<p></p><p></p>$ D; `) W! U- G5 U8 F8 C
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>, d8 X- U# R6 I4 z" s: v! K) o
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>5 e( e4 m  J( \/ E
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
1 a/ F, Q- f: ]6 U: l+ x6 u它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
7 k1 i2 _6 g+ M4 o它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>0 e+ _0 Q$ U0 t/ [5 [  X& q* t$ e8 F
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
% E! W( @9 k) F' y$ g4 U# S<h3 id="21-注释">2.1 注释</h3>* y8 j3 h# {) b& _
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>2 g% d3 g: f, Q6 V% \" w% |
<pre><code class="language-javascript">// 这是单行注释7 @; ~! d9 t% M+ t

# F. \) l2 V% e3 X! y7 w5 E/*( M" R8 Y  E; G' ~# w
这是多行注释的第一行,8 j# l) C1 ?9 ]7 C
这是第二行。. l: f2 |- j! [- }) J" C2 ]
*/) g5 q, f3 H/ p# C: U
</code></pre>
6 A% u! C2 N( V<h3 id="22-变量和常量">2.2 变量和常量</h3>
. S- O8 x; }! T& \0 B9 n<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
0 }3 r1 c: m- o3 ~6 [4 g<ul>1 {) }/ ]- v$ c+ T  ~
<li>变量必须以字母开头</li>8 E5 l) u( h' \* b
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>: b. D- S, ?6 m# ?2 m/ l
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>8 o0 K' t3 @7 _, t: G  u3 L0 V
</ul>
3 n$ S$ w+ k8 ?; c" |( d5 l0 H1 O1 y<p><code>var</code>定义的都为全局变量</p>9 F. q$ Y, ]( E  {0 G. |" o
<p><code>let</code>可以声明局部变量</p>* y8 {- `/ d" r) V* b
<p><strong>声明变量:</strong></p>. h$ J8 P, O# x; c
<pre><code class="language-javascript">// 定义单个变量% K6 f9 O+ u. x: P: X! v6 v
&gt; var name
2 ~! H$ Y) t3 a* e  ^8 e  X&gt; name = 'Hans'+ z9 ?2 ]8 n5 Z2 u/ [
//定义并赋值
+ H9 r! f# s1 ]8 E" b; K, F&gt; var name = 'Hans'1 S+ ]0 Z% C+ s# _4 P0 J9 z, v) V
&gt; name
0 E+ M, S2 r# Y6 z'Hans'
. ?( U! E8 b5 a1 o# ?
  v, n; `: R. i' J% U7 k% @// 定义多个变量& M/ i$ c7 _, A8 v2 ^
&gt; var name = "Hans", age = 183 Y9 d) u* x, E; s5 s9 v/ h
&gt; name/ E  X5 [3 W3 ], H0 i6 S
'Hans'& Q7 v" `0 y* {& s& a0 i8 U
&gt; age/ S9 R6 S6 _2 t$ q
18% r1 z* h+ ]: ^1 G, V" s1 r

: t! E  c: M# d# q- W  }//多行使用反引号`` 类型python中的三引号( @9 V; W% i% m
&gt; var text = `A young idler,5 R, Q/ D  ?& K6 B! E' p, Q
an old beggar`  Q# d" V- s2 R3 S9 R
&gt; text
; P5 h0 f! X& ?3 ?'A young idler,\nan old beggar'- A4 r( ^' _4 C1 {4 I
</code></pre>
, D! D' a0 B7 M<p><strong>声明常量:</strong></p>
8 h9 y& S5 y5 r. T+ s2 q3 ]0 ]<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
9 ^5 ]8 s* b6 H<pre><code class="language-javascript">&gt; const pi = 3.14! A  |$ ]$ x  f- D8 f" i
&gt; pi
0 _8 ~2 u8 q7 Q3.149 M0 K8 E& f3 d% S6 A- ?, M
&gt;  pi = 3.01
, i6 E) P3 z9 K& }5 vUncaught TypeError: Assignment to constant variable.5 I" X0 z$ ]; Z3 [
    at &lt;anonymous&gt;:1:4
, C8 f* q" g, A5 p' n- O. F1 l2 J/ t4 _: w8 X. h$ e$ _0 T: P
</code></pre>
& V: {- r# C& H2 v) N' X1 _<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
& a: }# _5 G/ e6 ]<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>. i* R- m. r6 e8 j7 k- n+ y- `: ^
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
4 @$ C* ^/ L- s. Y! T<h4 id="231-number类型">2.3.1 Number类型</h4>" L* I8 c9 A2 `) C, x
<pre><code class="language-javascript">&gt; var a = 5+ [4 @# s' C, Y6 _2 W
&gt; typeof a   //查看变量的类型  
* C8 S* P9 [; ~8 b' Cnumber; ^; c& s9 w, S" Y8 w" w- s
& k: W2 V5 z2 U( w
&gt; var b = 1.3# \; X- r* R* h3 F7 H8 Y6 v! C8 Q' `  S, ?
&gt; typeof b
7 d" ]8 @; \+ P% ^' ?% C$ t# v5 l9 Hnumber$ O# T2 B4 I0 r3 o2 E

: N2 f+ Y& i- v0 Z* b' U// 不管整型还是浮点型打开出来的结果都是number类型
5 \( i; A0 m5 G1 J5 U$ S3 o5 \0 U& O' U+ ~
/*
% H. A+ G4 d9 }9 j+ q& JNaN:Not A Number
9 ?. D) {' p/ p& S+ `NaN属于数值类型 表示的意思是 不是一个数字
" J1 h9 E7 `" s0 F8 Z*/
/ U7 m6 J) q8 Y: L
3 }1 G/ {& M' I$ sparseInt('2345')  // 转整型* s/ B& I7 ]* T7 s& k
2345# _! i' g5 p7 U
parseInt('2345.5')
1 s# W+ X2 C! c* X8 A6 ~2345( w! t" |& ^* x5 A: `
parseFloat('2345.5') // 转浮点型
6 n$ z* K: z2 q2345.5: {1 W* k$ S; h6 H4 N! p9 o
parseFloat('ABC')0 |- a0 {- D7 ?" @
NaN
' g! w, ]0 X% G5 y+ OparseInt('abc')* L5 r; }" T4 z. W$ P1 N2 C6 ~
NaN
; r+ t9 D" b4 `  k0 Y</code></pre>4 M( r, |$ W* r
<h4 id="232-string类型">2.3.2 String类型</h4>
; y' G$ s& {8 v1 b2 m2 }<pre><code class="language-javascript">&gt; var name = 'Hans'
5 [7 s+ f4 I* f6 V8 ?&gt; typeof name! Z( R$ [0 l+ O- m* K9 e
'string'- ^0 X$ \% D' _! {! y. @6 T

2 _' n. I4 ]7 D' B2 p8 V+ d& ]& W# ?//常用方法9 m% C8 e6 h2 b3 k* n
// 变量值长度) e. c4 ?& C+ k; @' t" K. b1 }
&gt; name.length( D: a/ U4 o2 v& Z) b; J" d
46 A7 S, T5 u$ h( M, H" L
// trim() 移除空白! d: E5 ^: G1 Q9 V
&gt; var a = '    ABC    '. G7 X* j' f! J' E
&gt; a: D9 c; x. \3 ]/ H% _+ n' r
'    ABC    '
5 G7 w. ]7 O! C7 b) t&gt; a.trim()
0 S9 }, J. K0 c- u: K'ABC'
2 P9 ^, k4 s( B5 E//移除左边的空白
5 m9 q; u0 E* P+ z7 e&gt; a.trimLeft()2 ]4 ~) r/ ^+ O$ G2 f) h: M
'ABC    '
/ \/ s8 j( `) ^//移除右边的空白
; d7 n+ H) o; ]' g- t&gt; a.trimRight(). u' s! s; g0 Y7 R( I4 F
'    ABC'
- j. V8 N0 o' R; ?7 A' p) p7 ^. {6 q; v, W5 b" _4 H, J3 _
//返回第n个字符,从0开始
% A( j: D9 \2 A8 z' S&gt; name
, P1 G# a0 k9 u0 ~  L'Hans'
0 k" c% B( N7 t&gt; name.charAt(3)( _2 D1 W9 `  }& }( y& ~
's'
6 t9 _' N) p3 S" V&gt; name.charAt()  M% K! y9 i* y. q9 t3 ?' _
'H'
+ {! [( y+ W) m7 `&gt; name.charAt(1)
& `" S2 F( X: A% i' f7 o'a'
- _2 Y) l- M. q" J: d/ m7 I0 N8 w! O+ H+ q" f3 w# l9 D! y* j
// 在javascript中推荐使用加号(+)拼接
, \" d1 n4 d! x4 I5 J&gt; name! e3 B# ^' |% \/ C8 u6 ?  j
'Hans'
; V0 o1 A% ?( o&gt; a9 U* y) K" G6 H+ w  y* S
'    ABC    '
' q" ^  ]+ b- n: ^- `&gt; name + a
% Q2 z- D* D3 D8 D2 ]'Hans    ABC    '
- o' Y/ m" T2 l' P; Y3 K4 F// 使用concat拼接
3 [, y7 l% }/ [! Q/ s&gt; name.concat(a)3 t! c( n9 {: m5 `. L4 J( A
'Hans    ABC    ', H$ y# l! `9 ]+ D% g
& A7 _8 k5 d: E2 X8 T0 O6 e
//indexOf(substring, start)子序列位置+ v" d& N! N# _6 j- [

. f8 `# ^4 G" X9 _' f1 G, }&gt; text
* E; u/ n5 f5 g( \% j'A young idler,\nan old beggar'$ D6 O! v( s7 u! l
&gt; text.indexOf('young',0)
8 P3 X4 h4 ]' ~. Q7 y( @9 c2
5 J. E6 A( f5 Q' i$ d& ]) G) C% v% j& B
//.substring(from, to)        根据索引获取子序列8 L, A5 w* z5 f! f( V# b
&gt; text.substring(0,)" v- N* R5 R# q8 U0 p3 k* V! K
'A young idler,\nan old beggar'
" J6 p( Q8 x6 `8 p/ Z&gt; text.substring(0,10)
; I# z0 _0 {- h'A young id'8 r# w2 J- U! A" p5 X

( [4 m- o. P; D0 r// .slice(start, end)        切片, 从0开始顾头不顾尾$ a; l+ {) H- C8 y
&gt; name.slice(0,3)1 ?3 I& m: ]& [9 f% C. N) H
'Han'
$ d# r* N; [- z) B) x0 D% K
) @" ^# }# V9 f; D// 转小写
. e* t, R& o& o& T&gt; name7 c$ a( Y( F( r% f6 [# q8 y
'Hans'% b, Y; @1 ?2 J+ O: p% s
&gt; name.toLowerCase()  V# b% M3 J1 f
'hans'; F$ T  {; W1 }. P& N  x
// 转大写
6 d5 @8 s9 K& N- Q! \' @&gt; name.toUpperCase()
% m" i: d5 @1 [& a. k0 F4 A'HANS'
3 x# d1 R# l9 I( p* K( y$ }: p: i
* D9 N/ D7 [2 W- k+ `) ^% j7 y8 o// 分隔( E3 X, \0 j( s7 N2 J, m5 ~
&gt; name/ |! x( q% h: `) X: ?% Z* M
'Hans'
2 l; M& z- q1 f&gt; name.split('a')
7 N& E7 f1 C' a' b. j(2)&nbsp;['H', 'ns']
1 G) v. U" D. ]' h' ]0 H: e</code></pre>
+ V$ s# l+ I3 b- ?<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>0 K3 [; y( \+ O9 o
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
- ]% i8 M. P) v) |& _<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p># y) y) A4 z8 o/ d
<p><strong>null和undefined</strong></p>0 r; e# q! P+ q
<ul>; J' |2 r# p5 p! `- d
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
+ d0 X* m& I  r! }<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
" `4 |6 d1 F3 D</ul>
: F3 Q$ G3 Y0 I' x<h4 id="234-array数组">2.3.4 Array数组</h4>
5 T9 b) k0 [/ j: L$ P5 q<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
$ _: t2 a( Q, ~0 l; `% \/ D) t- \9 b<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
- {' f% l8 K# T$ i" K$ C&gt; array11 Q( t, }$ D3 f, h4 E  m2 E
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' f* r5 s: `- z&gt; console.log(array1[2])  //console.log打印类似python中的print
( a3 T9 R4 s2 [/ X8 \, }+ ^6 U34 D$ ]) V$ g6 g4 U% k
// length元素个数
# X& K+ D; ^3 B- X" Z&gt; array1.length9 x4 F9 ~1 s2 B! A7 Q
60 t; C# N0 e1 {- T' v% q  L
// 在尾部增加元素,类型append" _4 x, g, B. @6 r2 j. B
&gt; array1.push('D')
5 o7 t! L( j2 l1 W# R7+ {7 f! h: }- y0 r( X
&gt; array16 y6 ~% ^% \4 g% L
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
# `6 q4 h$ J$ I0 u9 i6 P// 在头部增加元素1 m7 _+ ]1 o& P' {- Q0 _# l4 |
&gt; array1.unshift(0); f3 ?& T: S! F$ \
8
. C* N& k' f3 l! e! ?* i&gt; array1
  J+ k2 }: c' k* {; X(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']8 w2 |' k1 J) w3 v! L

. a" R% G6 C4 ^: G//取最后一个元素% a2 v$ N4 ~$ I" F" X/ [
&gt; array1.pop()
+ v8 v3 b0 K" x7 f5 s. x'D'
% J4 [- l3 |0 Q9 v9 v3 U. S&gt; array1
# z& A' s6 U! n+ O4 B(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']5 u$ I4 y; ^) R1 j2 S# j, c4 {' O. I
//取头部元素0 a* w7 S( V; \/ o2 `% C
&gt; array1.shift()
0 X' j& F! h# R, W0! {3 g7 Y/ r4 j( [% |
&gt; array1
# ?/ G/ H) Z; b+ }" ?4 B(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 U' H9 k0 T0 e1 F8 Y' O
6 z# f; \5 C4 `/ l//切片, 从0开始顾头不顾尾
3 \  U% h( ^5 {0 _6 w&gt; array1.slice(3,6)
- E- Q$ h4 A8 m" Q9 H/ h7 v! m$ B' X5 [(3)&nbsp;['a', 'b', 'c']7 M5 ~$ m* w! i$ J, T5 C
// 反转
+ N& r7 Q. Q3 N+ U1 P3 D2 ^&gt; array1.reverse()0 \, O- b# U9 r* i) D/ m( x( e
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
- D; g! j% X4 z) [// 将数组元素连接成字符串# }: S& e+ t* M6 p/ r
&gt; array1.join() // 什么不都写默认使用逗号分隔# w) {. w& U' g* D3 e! r6 K
'c,b,a,3,2,1'" b- R9 s% w+ }: L0 h2 d2 h5 g
&gt; array1.join('')
* I7 V% G  X: ?'cba321'
' I% q/ \6 N, j, Y/ g&gt; array1.join('|')+ B3 ~1 N. E* _& g8 V5 w& n" A
'c|b|a|3|2|1'
" g5 e2 U4 E# T/ a7 |: G; ^% {2 [5 T6 K" v3 C# B
// 连接数组
& Z2 ?& ^. x4 E9 j- k9 @&gt; var array2 = ['A','B','C']
; g1 x" _: q) a1 s' f8 j% I) A&gt; array1.concat(array2)
1 o5 A; {1 h: [1 u6 _(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
4 ~( U% B/ t$ x4 y) e) w8 ]1 g4 K/ v9 P
// 排序% N/ V6 F: V( |: N% e% \
&gt; array1.sort()
% r7 Z! t3 q+ \2 [# C(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], s2 |- ^/ x6 O4 ^. D

( p: }0 d/ ]! k! j$ l" P/ L7 s// 删除元素,并可以向数据组中添加新元素(可选)
, [- n% D& p6 I0 f&gt; array1.splice(3,3)  // 删除元素
" c7 w( V* d1 ?" I7 H1 l(3)&nbsp;['a', 'b', 'c']
" X" ]% a- G5 ^  z7 I: B; K&gt; array1# u9 H! B. G9 P' O3 C
(3)&nbsp;[1, 2, 3]1 C8 B- F& k& D6 A
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
9 }* O6 |; a& ~" @2 p  z0 X[]
; K: u/ |+ ~* A0 L* l" a; V&gt; array12 t* {* P0 i0 Q6 O
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']  J1 Q2 A, H! q& b( v+ E2 ]
% T* ^, b$ T  f
/*! W; P! a4 q. `9 a% F! o
splice(index,howmany,item1,.....,itemX)
' Y6 u- H* g2 b5 X; s4 rindex:必需,必须是数字。规定从何处添加/删除元素。
$ t' u( S0 h5 Ohowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。5 z6 c3 Y2 L& r. A% Q
item1, ..., itemX        可选。要添加到数组的新元素
6 X4 n% n8 V! W# p$ l0 Y*// |3 F8 u( L( o8 a

. r4 z. x$ C& n6 p- V; ^5 e& p; \// forEach()        将数组的每个元素传递给回调函数
: g9 `* j+ j" R3 v&gt; array1.forEach(function test(n){console.log(n)})
* w  `, f0 K* G3 \  [* Z 1! v$ p% Z8 R& Q/ I5 g6 l# f4 l3 h, ^
23 \, d. X& z% D& g! n
3* P( ~3 l0 L1 Z. M) r% S$ m
A
4 k4 D5 s% S% U B' ]+ p/ ~5 J1 r7 ?  n$ O- A
C6 t- c: |/ `5 c1 Y( ~
// 返回一个数组元素调用函数处理后的值的新数组
- n3 f& t. l) Z/ L% W. D&gt; array1.map(function(value){return value +1})
0 F3 }) d/ l6 V(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']+ o9 r3 s2 g# p( L) Q3 U/ }9 S
</code></pre>
. ?& Q9 r: x0 y. C1 H<h3 id="24-运算符">2.4 运算符</h3># L8 c2 c- U4 l# _& e/ |
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
% a1 U1 M1 g; J% z& U4 F. o<p><code>+ - * / % ++ --</code></p>
4 @3 `( Z1 n( `( h* M<pre><code class="language-javascript">&gt; var a = 6
( J1 u( P5 z5 f" F& m! ]. g( ^" j&gt; var b = 3
' U- _3 a9 R* G# r: Z5 i// 加8 _+ j, Y) _5 p1 b1 u8 T$ C
&gt; a + b
  n- V5 E: S5 p" }. c* i/ \2 ~' T92 g- i- C& `* @! v
// 减
1 t! \) k1 G& {% M( s  A/ w&gt; a - b
' {" n' @9 ~& o/ w2 x3
* B6 H% h) D8 d9 F! D+ i// 乘
, t! j" |0 t1 v$ J( j: x' g9 K+ U! z&gt; a * b
" S! B8 y. {% f* S$ w18
8 J% x" r- t* b// 除+ v% h: [/ H8 d3 o7 V/ T4 ]) c- \
&gt; a / b/ H  ]. `/ E" P( |# p& O/ D
2% r; i# x7 q) t. F* z4 N
// 取模(取余)  z' {1 [, o0 _
&gt; a % b
( ]/ m0 Z+ X) S* [& Y3 \* b& z05 K: a2 b) S3 ]; T- H9 g7 R0 Q
// 自增1(先赋值再增1)
3 o: j% j, i1 G9 B  T1 P&gt; a++" {( T/ s( z1 ]3 g' q
6
" D* |3 @# Y' u; W&gt; a
' D5 Q0 c$ @: S* @% Q7
( u' E* J7 Y' U// 自减1(先赋值再减1)
3 P8 V7 q7 n9 _&gt; a--  Q, ?9 H: c& X, Z
7" D9 h7 }; l, l. X, y+ G
&gt; a) I& z* i/ \3 f" |+ W; S6 _
67 U9 m8 P1 e5 z+ E
// 自增1(先增1再赋值)
/ m& `( m8 ]. z' w1 D&gt; ++a
9 K; Z( f4 E. k) {* a. X7
2 B% M7 J' e- |, j// 自减1(先减1再赋值)" A1 j9 ?! H7 E% d  z3 R9 N% c
&gt; --a% l3 k3 n% `# `
6( a' A; m$ H0 `: s4 ~, m/ J
&gt; a( r! s' S0 H+ s, V# U
6
4 `3 q9 B; D& H" h, V* [4 o5 o
, {+ U9 {- r. C9 c- y& v; }//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
9 A! J9 d% I8 `</code></pre>4 D; a$ J3 |6 U( q
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
; h3 _- S2 R0 }0 W<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
9 G) ~4 Q% U/ B4 o<pre><code class="language-javascript">// 大于
. y2 T/ J. f6 T9 z3 c+ {&gt; a &gt; b9 ]% o  l+ ?7 c, m( f5 i$ {
true. E/ k5 i# R3 w5 W1 G! Q
// 大于等于
, G$ Z. E( X7 R( i( r- c0 N&gt; a &gt;= b( t4 Z  ~$ v9 B. q  J/ x
true0 }3 i8 P0 _3 d& R$ N( a. V# a
// 小于
/ r& O" c# N. h! b, _- }+ u&gt; a &lt; b5 G$ ^1 l0 C" X* F6 Q5 t7 Y. i
false
* O; j9 @; D3 H& c" ?7 t5 v2 }* j// 小于等于0 r& @4 G! N" q9 |; U( t6 r# B
&gt; a &lt;= b
3 d9 I1 Z$ I: D4 s8 Ofalse
7 T0 \3 C3 a- T2 Q  f+ o// 弱不等于
0 U+ `4 M! y0 w8 m8 ?&gt; a != b
) Y4 g! n3 p+ R. }; R, y3 Dtrue' B& }8 y9 K% j  C: a; g
// 弱等于
/ e  H* a/ d2 v1 L$ n( e&gt; 1 == '1'
8 W, e6 ~  B+ q, c; j" atrue
# Q1 o; ?+ X9 s' X( u# h* W// 强等于
" u; R& [! H, j9 K1 K&gt; 1 === '1'# @3 L& C8 d; H2 R# R! z! q1 e& W7 U
false
3 j! w% }0 x' j; Y7 l// 强不等于0 j5 x$ o2 r- O7 s  L
&gt; 1 !== '1'; D8 r- o8 a7 j' \3 m
true* h/ E; F% c* _8 e
- S( M% b" F+ a: |$ i" o
/*
3 M: o; \3 @; J$ t8 k: x2 o, _JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误6 M! x5 a- |; J/ @$ P2 g
*/& }) Z+ F' m6 {) N) v* `- [# Z
</code></pre>( n7 v- J$ T  v2 {$ G# O
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
. p8 s' a  Y2 X2 _) V<p><code>&amp;&amp; || !</code></p>4 G! ]8 k- G2 K3 D
<pre><code class="language-javascript">&amp;&amp; 与
, u3 k: h# D- m* o|| or
2 I' B" X2 M6 l9 ~# D1 R! 非4 ]( \9 e+ N$ g1 l
</code></pre>* {7 B9 ~7 [" \
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
- C$ j- T: u/ Y# a- ^/ `8 A( e<p><code>= += -= *= /=</code></p>
) T/ K7 n7 ^0 A, T<pre><code class="language-javascript">// 赋值
9 d2 b! Z/ R/ U5 j# k$ H% H&gt; var x = 3
4 u& b3 r$ t: _) x8 p6 \% o// 加等于0 `: u9 T" t+ c! a' b; T' z
&gt; x += 2
9 d( n* g+ s/ F  ~3 `+ g5
+ l! @$ k4 N! y' Y; m// 减等于% K' ?/ n$ t; k9 v' {' g" o* c7 P- l
&gt; x -= 1- a8 h+ g4 t% f+ k; i9 H
4
. r. n1 e8 X0 A+ ^7 Z* |// 乘等于# D8 w* g5 \% Q: x8 f
&gt; x *= 22 @1 r6 t- S3 d' ?4 f/ S
8
3 S: ]- O; V2 ]% Q" p// 除等于8 E& I  p0 v% t, }: ^5 Y' M0 _4 g
&gt; x /= 2# V$ j5 c5 }! n9 k' n! c
4* p$ \$ W" W: p
</code></pre>5 w- N9 G, j) b% d$ [$ m
<h3 id="25-流程控制">2.5 流程控制</h3>! T8 {, d8 {( o/ a! M: U
<h4 id="251-if">2.5.1 if</h4>
6 h4 ?7 `/ S  j7 `5 i; M7 L5 U& F<pre><code class="language-javascript">1, if(条件){条件成立执行代码}" m  _) L. q4 D/ z7 R2 t. x3 E
) X( [9 l, ]9 P3 l* I. p" e2 ~
&gt; var x = 3
: p2 m( D# j; m& C6 q/ P&gt; if (x &gt; 2){console.log("OK")}. x( W6 A( @1 S! E
OK
) q& z* q: }: @4 W% R) B1 O
6 S+ c4 p1 T+ T2 ~) N2, if(条件){条件成立执行代码}
5 l- p1 ~1 N) l0 |        else{条件不成立执行代码}+ n- _* u* H; D. d1 `4 N7 I

; y4 e! @: M! N: d6 e& U2 z&gt; if (x &gt; 4){console.log("OK")}else{"NO"}2 R1 n+ Z3 d6 q+ {4 _
'NO'
7 a9 g: N7 E: a8 |3 w0 ^; H- m, F5 A, a/ o
3, if(条件1){条件1成立执行代码} ) ~( Y1 B- \9 S* v0 _  |% c! `" h
        else if(条件2){条件2成立执行代码}& y7 E; q8 ?( {4 ]7 R5 p5 ]
    else{上面条件都不成立执行代码}
% S) v7 w. f$ Y* C* [6 l( f# h
& m6 O9 V9 b" q&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
& P4 R7 \4 e( [( s Ha: V$ m$ s0 H0 R( M8 b. d
</code></pre>- q" Z% q) a* a4 z! P- u9 R
<h4 id="252-switch">2.5.2 switch</h4>" r5 x4 J7 l: C  F. y3 \
<pre><code class="language-javascript">var day = new Date().getDay();7 ~$ L5 j  f3 k1 C9 E
switch (day) {
7 M" P6 S; T  ^* f* P+ V9 v  case 0:
! |1 t& N5 r8 a6 s, e* k  console.log("Sunday");! f, S2 \3 R6 u; d
  break;
  A8 \1 K7 z1 H+ r  case 1:. M& I) k1 l( v! ~3 ?9 ?
  console.log("Monday");
. v5 O  x& |6 r  break;; h  o6 v3 g1 G
default:
' h. c9 z1 v% z& Z9 x2 z. h  console.log("不在范围")
* [7 K( t4 ?/ F+ h}" @3 x8 \& D- ]
不在范围1 @/ X$ W" U' `! c+ Q$ D
</code></pre>
9 ?6 v: {% E' [2 r<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
. g8 z; X% J4 N$ ]  [2 H( v# R<h4 id="253-for">2.5.3 for</h4>) d3 k3 C. d. a5 u% B) Y, _, u
<pre><code class="language-python">// for 循环
# [' g: K* m5 S. k& \( v- ]        for(起始值;循环条件;每次循环后执行的操作){% Q$ u+ x+ N: _' U
        for循环体代码
8 {2 S  ]' I5 ^6 M) ~' I! @    }7 Z( _) [1 P9 [, w! ], x
8 b0 J* y0 [$ j
for (var i = 0; i&lt;10; i++){
2 ?! O0 f; F" x3 c. ?9 m) [% D: V, M5 o    console.log(i). z7 Z% O& z) x+ T6 Q
}
0 V; Q2 \- W$ {( t( X. x        0
( t! X: t" V5 P# X( F, F: c  Y) b        11 n+ c, B+ C% w) b% N+ }: W
        28 e- |( j; Z% a  H
        3
+ S: Z6 j& M: Y- o        4
% W* P7 S" z+ r9 _( X! T' B* J        58 v8 q, n+ m2 d: x7 k! X
        6( `/ @+ T) x+ q' T) ~
        7
& ~" w7 p9 p" x$ g6 l- T        8
% |4 `' K2 J6 x6 C8 m1 e        9
% e- u; W/ W. u* N$ _</code></pre>- Z) `! J% c7 J$ \( @
<h4 id="254-while">2.5.4 while</h4>0 I% _( Q: w: {, t+ Y/ x* m
<pre><code class="language-javascript">// while 循环
) @3 a, r' w) D" G  ?; M  ^: e        while(循环条件){
% N2 A3 }# Z  t) X7 t; n        循环体代码7 u( P' g$ J) ~+ l) f4 U' B- R
    }
7 E* \: b& A: \+ I8 W8 e2 |  H+ w4 o1 p0 y/ m
&gt; var i = 0
  D5 B6 d/ C$ q1 b* e. o1 |8 g1 R&gt; while(i&lt;10){
& j: G: p, X1 V. S    console.log(i)
# `- R/ ?  f: O4 ^4 H8 |6 Y    i++
  j0 x+ `2 |  q}' b: E& L" ?9 C* c$ w# Y
0$ F: r( ^, W$ i, q
18 k2 W- d& X- D
2: D: v" |. [# j6 ^3 c5 Y) c9 o/ E
3& _. {/ I' V, O, d8 ?- W
4
; T$ m& M) G0 \) R* v0 h6 O! c2 c4 g 5
3 d) S! L3 B5 N# Y% l 6
! e! x. U0 y7 q9 }7 W 7
( o/ ^8 c1 R; P" {' ~) I+ N% W 8
/ B+ a6 V* \" a. z  M9 U9 K; j+ e 9
* v6 l9 ?% Y& |! z* s</code></pre>. Q' G# y% m& {8 O& j2 r% l
<h4 id="255-break和continue">2.5.5 break和continue</h4>3 T/ P  i& s  t
<pre><code class="language-javascript">// break
# o7 `4 m9 G& o9 M9 o8 W  W8 t9 dfor (var i = 0; i&lt;10; i++){3 H1 p1 [4 ?! B7 [7 U
    if (i == 5){break}
2 b3 `9 \  O7 p; _; f    console.log(i)
" U- c* B& h; M1 ~! Q* t}9 y; h3 x8 R- L  Z1 @5 {8 e) ?. p$ S
0
. d0 r8 J4 f+ V7 |" h9 _' U3 e 1
& n" W: b* {$ I8 `* Q/ A 2& c7 \* K8 P5 U) Z" E3 }
3
9 }# e/ G& v+ {8 h) p! } 4! Y, W0 l: V0 w& n6 i
// continue
* Z# V8 z0 ^- h; Ffor (var i = 0; i&lt;10; i++){
; k1 d3 R) `& N2 k0 ?! \. X, z    if (i == 5){continue}+ \4 K* |9 A# U- `4 n3 ?" F* T
    console.log(i)
8 W8 h. h- D9 s# z9 s  }}9 f- _% s' ?( D0 a9 W! q8 |
0
! A# K, G# P8 x2 s3 Z& @' A 1, P0 U8 |8 b+ L# d" ]0 f3 J
2
0 X. q% G6 A4 d2 u/ ~- i9 V 3: k& b9 _7 \& L
4- B: W2 ~& X; M4 D4 l; v
6$ N- o) T; y' M& W- P$ t0 Y( D, w/ e
7: n9 j; }0 Q# A4 @% Z$ D& k
8
2 G, _2 J7 I7 \' E" v 9* Y" o% K2 y# e2 \6 S
  y/ _; U! ?' d$ {$ X1 p7 h& ?
</code></pre>
4 [9 `' u1 J  _5 `9 N( L, }<h3 id="26-三元运算">2.6 三元运算</h3>5 U/ v( S: m7 X$ T, O" k
<pre><code class="language-javascript">&gt; a
1 a5 Z% l# C3 `6' z' P8 X% M8 D/ n) J( D
&gt; b
# a+ e: [6 t, q9 R3  e8 B7 ^' J. g: ?0 a2 j% r  d9 ~
' B: `0 E0 x$ M7 C& i7 s
//条件成立c为a的值,不成立c为b的值
: H9 X, f1 q  H% [- ]% G9 u/ y; @&gt; var c = a &gt; b ? a : b, L  X, ?( I9 c7 {8 n
&gt; c
8 p' k( z: L6 x- F4 B6/ e- n1 [) {) g4 f/ O

/ Q. @6 z2 N/ c2 T% @# o0 }! z# @// 三元运算可以嵌套8 r$ V0 s8 Y8 A* A+ G4 ?' j
</code></pre>
4 v* q& g- t0 j% _4 h' L# Z5 h<h3 id="27-函数">2.7 函数</h3>4 ~# O+ H. [  Q- O) s0 Y6 ]
<pre><code class="language-javascript">1. 普通函数
8 P( I9 W4 A7 q3 C' d8 [9 e&gt; function foo1(){. _) ?5 D+ B3 a. J! ~
    console.log("Hi")
; q: [: U7 N7 n: [( B  R}$ U$ u9 p7 r1 C& X
8 o& P, V" U7 H! e! x- k  p. ^! t
&gt; foo1()3 B6 t2 x4 z" _& v; S5 P
        Hi1 Z: j8 C" R, P8 b' B, d
2. 带参数函数
1 Y5 {$ P% {/ e( s& G2 ?, @* f; }&gt; function foo1(name){) A/ l3 ?) m) R4 A. R
console.log("Hi",name)
" q* e/ Q# k. Z' p2 E! x& w5 ]& Z' v}, {, {1 |8 s# H4 h6 l/ N9 l

/ J2 l9 K/ i; W% t* K&gt; foo1("Hans")
1 J% z" d4 B1 F# [& p2 yHi Hans
8 A% W; K5 N) t9 C5 W! H- X( v0 C, ?" }, f+ s3 _
&gt; var name = "Hello"
% j! L3 p7 ?  ?1 q, I  L9 f&gt; foo1(name)0 o: s+ ^3 W$ ~$ V5 _2 @  ~! h
Hi Hello+ k" q8 L/ F: I" b
. j6 x5 M  R8 y8 ~$ b
3. 带返回值函数
" q. v, o$ f/ i( R( U  v6 y9 G&gt; function foo1(a,b){
9 E3 F5 F2 G4 d/ U; @2 `+ J        return a + b     V* i0 L9 c7 T+ a2 z) ]
}
0 E/ _1 o% {9 |&gt; foo1(1,2)7 O) e% R" H/ r- ?# {9 R0 M
3; E& ?; u. P# |. l2 u- c) \
&gt; var a = foo1(10,20)  //接受函数返回值- g$ }3 F; V$ t% V, p
&gt; a
1 `- C7 D! i% t( \/ }0 L302 \" d0 z+ Y# c1 _) \
" Z! j: G7 `: d- a$ @
4. 匿名函数
7 w! o/ ]! \3 u/ M; k&gt; var sum = function(a, b){
. v. m( F: `) O9 W+ s7 n; t5 Z  return a + b;
) r4 Q2 Q5 z/ V1 w- j1 n* v}2 H$ a9 ~) E0 Q3 E$ t$ C# X
&gt; sum(1,2)
# a7 T% V$ k  G5 F3& D3 x, \: T  q- V# t8 p" i3 _
  ]/ k0 o. Y& w
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
; j. e/ T3 k2 \+ a2 F&gt; (function(a, b){
; t+ o5 n2 ?; z* x1 o3 h) n7 r% b  return a + b
, o7 D0 w4 n4 [& @' k& {+ c% U# D8 q})(10, 20)
  H: A4 R/ z; R6 _- v8 s30* e, ?9 y1 J6 B1 z
/ x7 T& y+ E: c6 `  t
5. 闭包函数
8 ~/ k; @9 G) J" b// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数! A1 n0 E9 y5 C0 l
var city = "BJ"
' |% ]% T  a8 a0 lfunction f(){
" W4 J% }  I* y/ R1 @( M+ w  d6 y2 C    var city = "SH"
: d3 o- R5 X3 w  H9 \    function inner(){
7 v6 i0 S; G* |0 Q4 ?& R+ T2 B: m, s        console.log(city)
* K, D# c! n3 i. N) D9 C    }
$ J. y6 }/ W4 T3 S    return inner
# l' W. Q3 v4 w, s7 f}
$ v; }: D5 a- u& I; m4 \var ret = f()
+ a9 d3 u9 P6 j4 n" iret()
6 ^7 R+ m  a3 V) g7 G执行结果:
& y5 G2 o( _/ WSH
/ e# n/ D5 p9 z8 G  c* u: N* l3 L# J7 h
</code></pre>5 B5 a. o% B# `8 V4 f, G. g
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>' H8 ~8 ~* R5 p  ~- j  y. V5 q
<pre><code class="language-javascript">var f = v =&gt; v;/ |$ b6 t3 ~( U5 h$ A- v
// 等同于
3 @; B* j: u  K" I5 i1 _! |var f = function(v){
& b, Q# @! q) P! k  return v;$ z9 ]) [: V4 g% x# o" y
}) I: A2 L7 ]/ e7 [' `- |: S# w7 y- L
</code></pre>. }/ O  Q1 N& B8 Y2 }1 h5 E: q
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
- @# [8 v- B  |0 |: f2 c1 N7 R& j  N<pre><code class="language-javascript">function foo1(a,b){
) e! @. y4 w: H+ }& ], |3 f8 F9 X4 b& i    console.log(arguments.length)  //参数的个数 , L0 d5 l" j5 M1 b4 \- x6 D' J; {
    console.log(arguments[0]) // 第一个参数的值6 s) ^/ b0 o, M$ |; K5 `( M  H
        return a + b   
1 i+ b3 P9 R. M* G& P; F* W: ~}# `. b/ ~! D2 A- F! S" g/ h
foo1(10,20)$ n% ?* X0 B& p6 u: b5 ^
结果:
* S  H2 O/ X- a6 S+ G8 b. \) S8 Y 2          //参数的个数
+ ]& {& {/ d4 m$ u! W10        // 第一个参数的值
4 n' x2 q2 I. r4 Y30        // 返回相加的结果# `% d! v" Y! H- Q6 X9 m- E( M! C
</code></pre>: S2 B- j7 f" g
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
* \6 W7 `* ?) ?; y+ w' |  s% E<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>  D# j5 Y$ h& p9 s0 h
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
3 D$ M, g: Q3 f. U$ o  T1 U% u<h4 id="281-date对象">2.8.1 Date对象</h4># D& f( f/ k7 @5 m" P  `8 y9 C
<pre><code class="language-javascript">&gt; var data_test = new Date(). w; E: y' @; X3 ^( K: H
&gt; data_test
, _, H- R# }/ T) jFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
3 w. M" h; v, f! _, n9 V&gt; data_test.toLocaleString()/ l0 i2 B9 b  K) b7 m
'2022/2/11 下午9:44:43'
- }3 o) w2 J0 b# |5 J0 }( k3 N- v3 ]' ~
&gt; data_test.toLocaleDateString(): t6 \8 Y9 l5 y6 P, h
'2022/2/11'
5 y- r( {( ]6 Z" a/ x8 Y$ b" S: h1 `
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
8 l$ J/ f; ^) m/ A, F6 i2 U* r" l&gt; data_test2.toLocaleString()+ i3 C1 C: y& Q8 p4 J6 ]
'2022/2/11 上午9:44:43'- a7 y  G/ v& G* ^( }

- P: |' D, F* f! q// 获取当前几号
, _  Q5 J. l* T( {6 V&gt; data_test.getDate()
2 A/ c5 y- y4 z' v& ^" ?* r11
3 H$ w' Z0 X! f' w$ f5 e// 获取星期几,数字表示* ]" I) s: m! M! F) j
&gt; data_test.getDay()  1 W; ?3 o/ Z8 Y) S$ \; s, t/ I
5. _0 U! |( W% [, ~' C+ f: c
// 获取月份(0-11)
* Q; K' R1 }# S+ Y&gt; data_test.getMonth()
6 j2 R! h7 C; B" [  z2 M/ O0 G1
# y: Z0 o* f7 x3 w3 E// 获取完整年份
4 W7 p1 F0 p, ?8 V8 j  s&gt; data_test.getFullYear()
! s4 \/ Y+ n" v& \1 l2 j2022
' S5 K+ F- J/ x2 q' }9 ^  q% q5 Z// 获取时
9 _' U5 U3 Z; P* \% G&gt; data_test.getHours()- B3 l5 e* r0 e, t5 _% M* x
21& [3 W/ R/ [( R2 z  ^
// 获取分. l" _; q& Y( X0 p
&gt; data_test.getMinutes()
& `1 d0 H; @7 T; ^/ R3 J44
6 z% l6 x4 q6 r+ n) G8 _9 o8 P, C// 获取秒
; O# X9 z5 `2 P0 k7 C# T, n2 T&gt; data_test.getSeconds()* [' ^( w4 i3 Q
43& ?& I. Q2 [7 j! p
// 获取毫秒% @# J. D' @1 A
&gt; data_test.getMilliseconds()2 p5 u8 O9 q0 i3 {* i
290( W/ I; j& ~# Q# e
// 获取时间戳% k: O, ~( I7 t' N  m
&gt; data_test.getTime()
: l+ @4 F+ [3 W! W% B/ b1644587083290
) A% x6 z8 i. B+ a: y+ C</code></pre>, P) v1 s  G8 O% C6 k8 C3 X. O
<h4 id="282-json对象">2.8.2 Json对象</h4>
5 k; @6 T2 d& f% G+ @6 [7 h<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
4 k, M2 g% B& f" c1 U) iJSON.parse()  // 反序列化,把JSON字符串转换成对象4 Y& H% B0 D2 j3 @3 O, Q4 U

2 c2 b) X( ?2 W3 j( R// 序列化
/ O  h" m, s9 _3 J" o&gt; var jstojson = JSON.stringify(person) 9 G& _# S1 h7 p4 v. \! W# B' \
&gt; jstojson  3 Y1 c+ e7 r5 G/ T0 h
'{"Name":"Hans","Age":18}'; v% d7 m0 k$ u

2 k0 j3 \9 {' b6 @3 ^& B9 J6 Y// 反序列化
( x, G' L8 Q+ o. R: h7 c, X&gt; var x = JSON.parse(jstojson)
" B) X( M+ U$ [1 F) U, ~3 C# ~&gt; x
, `3 J1 U) r1 P{Name: 'Hans', Age: 18}
$ P+ N% |& t/ n! c0 h&gt; x.Age
" \& j( {7 _& t18
  `6 {! [" \; i6 n* q) p3 W</code></pre>
) s1 D# i5 X9 ?  l& ~& c9 i1 B<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>$ P$ `, U) ~2 Y+ |1 k
<p>正则</p>
0 c7 j) ~% K/ Q) f<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
$ c3 B2 P+ b' x3 }* v* f$ ~/ _. y&gt; reg1
8 O- \9 ~) @; s. U  j4 n' Y/^[a-zA-Z][a-zA-Z0-9]{4,7}/
. t- g2 d& k- D0 u. Z&gt; reg1.test("Hans666")/ ]/ b. K- p0 Q; l9 ^, w6 g6 `
true9 ]7 z0 P; C3 I7 h: P

% a. T" U1 [: g8 Q& Q5 V0 {&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/: l/ o1 Q3 Z: p! x% q
&gt; reg2
( i  G. Q# F( b" G6 S- x/^[a-zA-Z][a-zA-Z0-9]{4,7}/
* ~- D7 A4 Y$ R! r6 Y, r- q&gt; reg2.test('Hasdfa')
. A  k; P& s) o2 O1 `true
0 \( f4 S" L1 q: o5 f- l( `" j+ Q$ Y1 p; p- B3 I/ S. B
全局匹配:. t) A- L+ P, t# r3 K5 w! `" U
&gt; name/ C* e8 n$ Q8 v+ c/ X
'Hello'2 X2 W; ]9 r3 I0 c
&gt; name.match(/l/)
  A2 B7 \4 Q: y: Q/ |) x9 t+ [% a['l', index: 2, input: 'Hello', groups: undefined]
0 H1 m2 C* h/ m# J8 k: p( V) Q$ W
8 x4 b3 W4 u* z/ s' y&gt; name.match(/l/g)2 t8 S* T) E( Y  u9 |
(2)&nbsp;['l', 'l']
  c9 E2 ^$ j# e: `( B3 I! b8 C/ ]& ~// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配" e1 k  K$ s" Q( Z. ]% `8 U6 s

7 T" f4 f) z" r& X& m2 \2 Q全局匹配注意事项:
3 N3 @4 h7 ^8 ?&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
7 D8 p/ q( t3 n' V5 K2 b2 N$ o&gt; reg2.test('Hasdfa')
3 X8 u+ l' C, T& M/ O" ntrue: u& U% t. S( L, _) w- o" R% |% `
&gt;reg2.lastIndex;+ R  J1 ?+ M' W3 i5 a7 y
6
9 T# T0 s2 ], p+ I- ]& s! R  k&gt; reg2.test('Hasdfa')0 `7 N; Y9 [; N: q
false7 L& g4 S2 s( d! E( V9 |" S
&gt; reg2.lastIndex;
5 l$ A+ R4 v: ^' E0+ R+ z7 C; ]3 g( V: f& [
&gt; reg2.test('Hasdfa')7 k# ]2 k: t( r& x. @2 Y  t6 ?2 X
true9 I  P: q' U' n
&gt; reg2.lastIndex;
1 V" {) E8 m* k! ], w9 X; P4 s6
- _) \3 ?9 U% N( q&gt; reg2.test('Hasdfa')
# M) L1 k3 Y3 B( R! H. D, d4 Xfalse: g+ s  ?6 ?- u- k9 g
&gt; reg2.lastIndex;
) ]1 E* G7 ]- N/ @* w0 \0
$ R2 h" g% R! f1 n+ D" \// 全局匹配会有一个lastindex属性
  n3 T' o" U0 Y2 _&gt; reg2.test()
3 M% p0 A% H3 Ffalse
" w& f' Z, r& q' v' L&gt; reg2.test()
1 p# b% G( c# M, M/ }; G- F9 Ptrue
- ?; b) N& N; U/ R& m7 l2 f% H// 校验时不传参数默认传的是undefined( W1 B: k" U, `/ h* T1 k% Y
</code></pre>  m1 i+ U& e; w! E
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
( Q2 t) R. A8 `5 H* D<p>就相当于是<code>python</code>中的字典</p>
. s) E: Z" h- l' A4 M) b, c* m<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
( g0 m4 r% c- l# Y3 f&gt; person* y* d8 E0 D3 D. C$ o
{Name: 'Hans', Age: 18}  T$ S8 A+ _# y, h  H! H5 h; u
&gt; person.Name
+ ~, h( h! B4 R& T6 b5 ?  f2 _'Hans'
+ u8 O( Z; S$ z  }7 H( Q; \1 S&gt; person["Name"]0 e6 z8 `0 p; ]- }9 T1 f
'Hans'
8 X: Y* C! g& `2 Q! H, d+ d, p+ H: ]' e) ~; W9 @/ E
// 也可以使用new Object创建2 M3 |7 C$ }5 v+ d* I3 y
&gt; var person2 = new Object()
! k2 @, z8 V7 U! H6 Z4 l; i& g( N&gt; person2.name = "Hello"
. S8 Y; E+ ~- p2 q3 \'Hello'
3 i% O& b2 g+ L9 x( ]&gt; person2.age = 20
% o$ d. a, V/ M201 I$ O; `4 B* ~" T/ l
</code></pre>5 x' T5 q- b9 r1 E7 @
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
% m" Z7 D! |7 Y+ _4 F6 n<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>, E. W! j9 o3 N8 t& K9 ]
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
7 y1 ^0 B1 ^! s<h3 id="31-window-对象">3.1 window 对象</h3>4 W' O. u, `; z) E
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
9 l* V) P* Y8 g$ h/ B( c<pre><code class="language-python">//览器窗口的内部高度
5 C4 q2 ], p  gwindow.innerHeight - _2 q3 y- c. e
706% h) S' N0 [8 J
//浏览器窗口的内部宽度" |: u! x* y0 M* u
window.innerWidth
: l) u1 P# I0 Y+ V+ C0 N( J/ _) k1522
( B- r, ^/ q. c' N9 B# y7 A1 v6 l( Y// 打开新窗口
0 Z: d" j* p( M4 T( {window.open('https://www.baidu.com')  _0 A/ u& A# w$ E
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
; W0 ?8 L! U- s// 关闭当前窗口$ F, O  [6 \2 M! G" r
window.close() % z5 F5 _2 _+ s3 v0 H+ n6 p' o, m
//  后退一页
4 A2 R! z  w& p0 [window.history.back()
5 U- Q: T3 q% D0 m. Z, g6 _1 F* a// 前进一页! K- @) S/ |. u* K  L8 S
window.history.forward()
" H7 q# T3 {# H8 W% `) [% D//Web浏览器全称# l( B" O: l, K) j$ s
window.navigator.appName
2 H8 i6 e4 l7 D$ l'Netscape'
! c; ~& f! ?4 V4 n. ?  K( _6 l# i7 e// Web浏览器厂商和版本的详细字符串9 F+ W" |; z( o
window.navigator.appVersion; y7 U& q6 q" ^7 H
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% x( }9 T# d  u
// 客户端绝大部分信息- d( P' H* Q- t/ i) z/ d- P
window.navigator.userAgent" F' b. C8 W3 Q( M- V# W/ y
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ ]( B/ D& o2 q
// 浏览器运行所在的操作系统+ }3 [8 n9 A3 k2 |) _
window.navigator.platform& j& L0 V3 y( p8 D# B
'Win32'
& a; X7 r' Z- T4 X' p- {, z, `1 @+ ^1 r
//  获取URL
& d" Y( S& r. ~+ ]- Cwindow.location.href" a2 \# I2 O5 F9 {' e
// 跳转到指定页面' q# J! V; B2 D: l5 V
window.location.href='https://www.baidu.com'- C8 m7 T/ A" B" `- h5 z, j
// 重新加载页面& C" h  e& k7 D
window.location.reload() & G1 Q  z- c% C, ~
</code></pre>8 ]- S4 G% Y( V9 V! H- q
<h3 id="32-弹出框">3.2 弹出框</h3>
5 C* ?, @* }# S<p>三种消息框:警告框、确认框、提示框。</p>6 f$ D) M0 \2 \, g- o# H
<h4 id="321-警告框">3.2.1 警告框</h4>6 K- v2 s  c4 G7 L% J
<pre><code class="language-javascript">alert("Hello")# F/ l" z; \6 ?6 y
</code></pre>
1 _3 u# ~$ u7 I8 ]1 \) R- x% j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>: [, I; ]# N/ N3 U& p8 y& e
<h4 id="322-确认框">3.2.2 确认框</h4>/ |, e) n7 b6 d, F6 |
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>" Q4 F2 H9 R: U0 d) Q% F; j2 b- G
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true" G4 _$ j2 d! b7 f! [- S+ l
true
5 X4 ~* Z- |! e&gt; confirm("你确定吗?")  // 点取消返回false7 I9 W/ X2 q8 e* m# r
false
2 c) O* t/ Z8 Q+ [0 i  H</code></pre>5 X: A( L, ~& N7 \
<h4 id="323-提示框">3.2.3 提示框</h4>
4 d! \& O/ {6 T. l1 _<p><code>prompt("请输入","提示")</code></p>
, Q# O" v( U8 N8 Q( `# K( E<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
) l7 {0 `8 s+ [<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 G4 Y. P6 |, N# [. c<p>如果直接点<code>取消</code>后端收到<code>null</code></p>4 F, D; e% W  V' j8 O/ N
<h3 id="33-计时相关">3.3 计时相关</h3>
- T) V3 i, V, |1 X4 h<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>6 Q6 H( j/ b8 }7 W% a5 ?! C
<pre><code class="language-javascript">// 等于3秒钟弹窗6 M9 u8 w' B7 B9 k
setTimeout(function(){alert("Hello")}, 3000)
& e8 d. n% S( V4 ~, C$ V" m+ v3 {8 o4 u/ v
var t = setTimeout(function(){alert("Hello")}, 3000)
4 y0 F/ W3 U. V( Y. s* v% K: K) C
" \- d& B: \/ G" `$ d& Z. O// 取消setTimeout设置1 {$ ~, ], |2 D
clearTimeout(t)
$ C) t" t% c7 N/ C- i, J& n</code></pre>
. u% Y3 ~3 ]' p- F4 P<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>: K4 T  O5 e: o% m; d- k
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>6 y1 ?: z" {* p/ ^
<pre><code class="language-javascript">每三秒弹出 "hello" :: G' X: Q9 t# O1 Q
setInterval(function(){alert("Hello")},3000);6 X' F! A8 R! w) g3 ]# J9 z0 J2 k1 y) p
</code></pre>
% c$ r3 a9 `* _9 S# V3 W+ z<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>$ q0 J+ Q0 a' V: T( |! _( R
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);  D9 z0 ^( t* X6 X
//取消:! p3 R. Y6 j6 H; V, R
clearInterval(t)
5 d8 D# L# Z( a; r' d</code></pre>
/ P+ t) e7 Y% V3 H7 C6 W
, U% b6 I6 r/ }1 A$ v6 l: u
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-8-23 15:45 , Processed in 0.070635 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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