飞雪团队

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

前端之JavaScript

[复制链接]

7903

主题

7991

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

! T$ `/ D" [* ^* U! d. N6 y) F<h1 id="前端之javascript">前端之JavaScript</h1>7 Q' H1 {6 r) v! F% x
<p></p><p></p>: R" \2 l4 [9 W( B4 t( M, f. C
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
% m$ \) x* Q8 f# q; Y<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>- _& k* M) `* Z( c
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>2 J1 W- q3 b  U, U7 j3 @9 N
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>$ o; }& j- k/ d5 [4 s
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
* c3 @3 H' E8 k2 t<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
$ c0 f, }6 A4 b" p<h3 id="21-注释">2.1 注释</h3># t) y9 j# t& p: f# j: B  V
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>; z0 Q: v( M  C
<pre><code class="language-javascript">// 这是单行注释* t6 k) [7 K6 c& O% Y
( z; w8 t7 O) n8 }/ t; M
/*
  h/ S, S' i+ ]这是多行注释的第一行,
. u; I: B3 s; M; K2 e2 X这是第二行。* p& l8 A' ~) x  \- d2 x
*/$ f* ?. U9 s  x2 e- a
</code></pre>
. g$ ]& O; f7 M* w* a0 f5 |<h3 id="22-变量和常量">2.2 变量和常量</h3>1 A, |; m; m2 H4 v" A' e. ]
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
6 U' y4 D) h! W. e; d( M<ul>
7 [, H5 m5 n, g% C" x( m/ e* S7 }4 }<li>变量必须以字母开头</li>
2 d" i9 y  w6 X<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
1 A! A3 C6 P8 V9 l2 i<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
: q7 i. W7 ]! a6 I# `</ul>* g- s2 j; G3 B, j+ r" N4 ~8 B% ?* Z. D9 t
<p><code>var</code>定义的都为全局变量</p>
9 ^) {# o8 N% {. F! p1 G  s' b<p><code>let</code>可以声明局部变量</p>
* s. p3 s, h& Z# C$ Z<p><strong>声明变量:</strong></p>
2 J. n; g% l# \0 K4 ?<pre><code class="language-javascript">// 定义单个变量0 `3 U. v) ]6 e5 k% j
&gt; var name% v6 s0 h8 H' d% F: q0 O
&gt; name = 'Hans'% n, j7 L9 z# a: P% F6 H9 j+ L
//定义并赋值1 T7 a  F. @6 a! l. e1 }$ E* J% e8 x
&gt; var name = 'Hans'9 M! }" o1 [  K9 ~
&gt; name
8 p0 i& Z  \- ^4 _'Hans'! `  g0 N: v$ g) a1 E; E3 ^6 A( ^4 s
' O3 C' ]% U8 X8 A; O! x
// 定义多个变量
/ k1 e3 B: |& d&gt; var name = "Hans", age = 18" \( x  m6 D# X8 P
&gt; name
8 m/ B" q. w9 C" j'Hans'
" `; L- Q/ y. ~9 w2 n1 Y1 q8 a&gt; age
& X" K& m' u2 Z* T18/ _  v0 O9 {* ^+ N7 }

% V) \2 y0 |4 e3 n//多行使用反引号`` 类型python中的三引号
/ G/ M3 u  q9 O0 d: n7 }&gt; var text = `A young idler,# O& Q0 O" B* V" }5 K' K
an old beggar`( m$ N$ U& g: a# k9 s
&gt; text
9 ^$ `1 N: x5 ~- P6 ?* e, k! ~) h'A young idler,\nan old beggar'4 T1 d' P$ z" ]) f1 e% u0 \
</code></pre>& g  i$ i9 ~# M( S
<p><strong>声明常量:</strong></p>
' P3 {, o( P6 ~/ a) C7 m<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>/ D& M6 C- C5 I. S! N) n
<pre><code class="language-javascript">&gt; const pi = 3.14
+ Y1 Z( y& A8 J&gt; pi
5 z# `) K7 {  R3.144 q# J4 K" h/ X5 t& [/ W
&gt;  pi = 3.01% N8 X' L( R3 @3 X
Uncaught TypeError: Assignment to constant variable.) N5 X0 u  j" x' @
    at &lt;anonymous&gt;:1:4( E& R+ G( h) `/ G
! y" C1 P& S9 G9 y
</code></pre>
+ X) U/ [! g( ^8 F<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
/ U3 b+ H. B4 m1 Z<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
* s' A! t0 v! V6 I. z  E<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
# ^0 s' k$ l4 P8 R<h4 id="231-number类型">2.3.1 Number类型</h4>% Z3 Q1 ]6 @4 a
<pre><code class="language-javascript">&gt; var a = 5% H9 t& }9 u' h# y1 V+ K4 g) h
&gt; typeof a   //查看变量的类型  : ~) x7 O% _9 H- K; \: T
number' W5 n" n8 ~6 R+ h) X

: H% W; D6 V: V&gt; var b = 1.3
; o# m$ T/ {8 `- \; v% l  V&gt; typeof b
7 N$ u4 l% d* v1 c2 g6 a- s  E  |: h  Snumber1 P9 q. p3 v" q

8 Y# F9 \5 t4 l* E2 C0 q$ M1 w9 b// 不管整型还是浮点型打开出来的结果都是number类型- F* i% v1 v" Q% C. }/ e) I

9 [$ ^! j2 W, q/ `) a/*& J- L6 O/ \! n+ W
NaN:Not A Number6 a  R+ @8 ?, p! \
NaN属于数值类型 表示的意思是 不是一个数字
, e5 e6 d$ ?6 ?, F; i+ x5 H*/
$ E, C0 o% h7 A6 y4 L: [
; H% W2 |6 q4 A+ K) h2 Y8 vparseInt('2345')  // 转整型
% B9 d9 I% }  d3 k/ @& T2345
8 g3 \( a# f  T, L5 _7 s8 q! tparseInt('2345.5')
; x1 v$ [1 K. K2345
& Z" q' A! R  BparseFloat('2345.5') // 转浮点型% O4 P6 O* H8 m  p, L7 X) ?
2345.5( V  ?& X; g/ ?* b$ D* t
parseFloat('ABC')
4 N$ _6 q6 D2 t* S# V9 [NaN
$ v. Q" }% p2 X* O. fparseInt('abc')7 r* I- H5 h! Y& O: P5 f6 _* R
NaN
: }* [3 T0 A! l$ @$ {</code></pre>. b7 R% W3 M( S" H, n8 E) A: k
<h4 id="232-string类型">2.3.2 String类型</h4>
7 c7 n/ ?" ~' f$ ?: u% m  o2 T<pre><code class="language-javascript">&gt; var name = 'Hans'! F+ L8 v/ H9 z
&gt; typeof name
  \$ p' X" V4 ['string'
, b- H! d! L* ?4 f
2 I- {! q% Q0 c1 P7 U+ l# b7 n//常用方法6 e; n- l( m; x9 m, m# M& d: z
// 变量值长度
* h6 i1 }$ t' r  J0 g1 z7 J&gt; name.length3 Z$ M# g6 q& Z$ i0 z5 v
4
* G9 k, ?9 f& k// trim() 移除空白
! C. b, B! h1 h7 D8 H1 `3 |&gt; var a = '    ABC    '! J% I; L7 T$ \. p% |  s. t# s
&gt; a  U" p# `8 A+ N
'    ABC    '
4 l- ^5 j8 L3 r&gt; a.trim()0 Y. ~/ {) ^; \, r1 i
'ABC'3 ]/ k  k* _7 M* Z. x( U
//移除左边的空白  e( V0 f+ M: i: D; \! u
&gt; a.trimLeft()
7 Z2 n6 C+ `# n+ b'ABC    '# P3 u4 E% B" u* V# [+ L' T1 }
//移除右边的空白9 L" n2 B: h+ U7 s1 }0 _, q% }) ~6 \
&gt; a.trimRight()4 s) f. x4 o4 B5 |( |0 g
'    ABC'4 r5 _0 F! _) q# K
# k% X" T& c) s9 O, [0 N9 }
//返回第n个字符,从0开始" a/ l. f1 J5 O- ~9 V
&gt; name% |/ B% W0 N3 E0 Q/ p! ?
'Hans'
( K9 l3 G& a- |  G; h6 D4 y&gt; name.charAt(3)
: q: Z: ~2 p5 S* z% g) R: k's'
# Y* c5 V& j$ H&gt; name.charAt()& \; Y# r6 U9 K: `* t: j
'H'
! I. {* d$ M/ }: V&gt; name.charAt(1)
, L0 m. H* R# B: w'a'
& O) L# s% v  ^9 I. D- y: L- U- a: n- j! T9 u/ n
// 在javascript中推荐使用加号(+)拼接
% c  D, t; w/ y+ B$ W% G' K&gt; name
+ t4 q' E. ], b" s/ J+ N. _/ t'Hans'
% n' C, V/ U5 D5 m. R: ~5 Z&gt; a6 u; L. _1 T( o2 U6 t; A! ?" {
'    ABC    '
. f( v# ^& P* l3 l$ @&gt; name + a6 i: R; I; [3 Z5 L! _& Y
'Hans    ABC    '6 r& S. ^8 ~0 V
// 使用concat拼接
8 n5 g7 j5 R0 w&gt; name.concat(a)
; U4 e* p. q* r& p, {8 b'Hans    ABC    '
# u/ D- a( B$ E5 i
. K- f. D4 }. n0 @- J& a8 X! l//indexOf(substring, start)子序列位置/ c0 W1 E7 U! L0 Q

) l  S; A$ a- p9 T, x8 Y&gt; text
5 e4 P+ Z) d% z6 P0 u3 l'A young idler,\nan old beggar'
* l0 B! }2 G8 {7 s, Q8 Y6 A& |7 S&gt; text.indexOf('young',0)4 Q  ~5 r" f* Y1 v/ J" b% I
2. b3 t2 f0 B" p7 b$ W) J9 Y/ k

; b! y5 `$ F+ Q5 x, `' ]4 f//.substring(from, to)        根据索引获取子序列( L9 _2 F+ b* @9 ]- H& h; Y# L' d
&gt; text.substring(0,): s8 C' k% t6 s( S- p0 \$ ~) P& G
'A young idler,\nan old beggar'
' M% @$ v& B8 M2 n  j* j8 V&gt; text.substring(0,10)6 d9 L6 `( _5 Z  u' S7 M
'A young id'; n4 \6 ]8 s0 i% z% v- I5 }

% m& o2 {) f' _6 s: s// .slice(start, end)        切片, 从0开始顾头不顾尾5 d' G6 \& r4 z/ O4 e9 \; F7 Z
&gt; name.slice(0,3)$ u# R/ O1 a" [+ A
'Han'
3 c1 `/ F- O) r" J; H& t4 C+ K  w, A
// 转小写
) z- w$ i3 J3 g- U5 H" f&gt; name  X5 O4 z) A. D0 r. |% ?
'Hans'
8 Q1 [' K& U  i& S. t&gt; name.toLowerCase()7 P0 M, A0 c+ k; q$ C" C  t
'hans'
' M5 [$ Y! u' u4 G, K// 转大写
$ G' ?* _! T0 t5 v. ^  D&gt; name.toUpperCase()
. x, i+ E  y/ G  V) M+ ], z'HANS'+ G1 \# p# v5 y% G3 ?
& H4 q0 {5 L) J# `
// 分隔0 Z) Q& V" E$ P1 s. \
&gt; name5 K$ k. a8 R; K+ h/ T4 C
'Hans'
) c6 Q, d9 l6 h: X" A&gt; name.split('a')
: y1 r" w$ R, [5 D1 Z1 ?(2)&nbsp;['H', 'ns'], b7 B$ J/ K) s3 X: ?/ A
</code></pre>
- h3 w! j5 m) r% d; ?<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
% V+ a  L1 C, R: [* \6 J5 V" h<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
& e  g) m8 {5 q, l# Z<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>* d) B1 k* k  q7 w# k8 w+ c/ c8 c
<p><strong>null和undefined</strong></p>; _( |1 F  ?6 \/ w
<ul>& {: [: v/ h$ Z. r
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
- G+ \: f# D5 S<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>7 v$ A8 U5 f$ A; J4 U( t
</ul>
9 k) e/ t2 Y6 M3 {8 I9 t<h4 id="234-array数组">2.3.4 Array数组</h4>
" z' V: h4 S: U# w- o: v<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
3 P, M) O/ ?, B8 t<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
; R( F! P; z/ Z0 U$ [# n&gt; array1
" S! q& q# G( `7 [2 {$ P. Q5 q" l(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; K' S8 n2 a6 H: C( z* F
&gt; console.log(array1[2])  //console.log打印类似python中的print; e2 y* i2 Y3 }' N* N
3+ _, ^0 A% }/ W
// length元素个数/ F$ h2 h; I9 l' U  j
&gt; array1.length, t% v) L8 e  ]) ^- y" v
6  T7 U' W% C* h- @/ z1 Q/ ?1 ?) w- y
// 在尾部增加元素,类型append
# X2 A9 q6 D, f8 ~&gt; array1.push('D'). X  I9 L8 o3 b) I0 D
7# {; p" e. _( y8 n
&gt; array1- t$ u0 S+ T5 e* }+ ]
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
9 `3 p) Q, R/ J, I" P% J// 在头部增加元素0 J  ?' m! {1 t2 g9 b
&gt; array1.unshift(0)6 @/ K+ X$ _# O6 x! E; ^' d& k! B+ F
8
  }0 Q& _# a8 V9 {& N. p  m&gt; array1
# ~2 J1 W) z# ^# m  o7 o(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
# p( [% b/ O! _% x! R
% h& c( U+ E  r% @2 N  @% i//取最后一个元素
: a1 O2 I6 ^: |1 b4 G&gt; array1.pop()
2 o% X) g2 m1 T* g) r& o'D'0 H( a7 b% `: W( ^0 |
&gt; array1
& c) R# i2 z4 T2 @& w2 D(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']8 o% f6 v4 n: ]. C$ O0 J  L( S
//取头部元素7 q- @8 y3 E# F5 G2 E4 f
&gt; array1.shift()
' q4 ?5 x2 E% _, [$ u8 l0/ W7 f! J+ m' x* @4 g
&gt; array1
! i5 W: [- g% J# a, D(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' K9 h# [/ n. f7 U, T- L9 ]$ q2 M& t
//切片, 从0开始顾头不顾尾
  v- k+ Y7 y* {, A% Z9 v7 U&gt; array1.slice(3,6)+ M- @7 C8 C: K$ I3 L
(3)&nbsp;['a', 'b', 'c']
6 k- F! O6 L) d( P$ O9 G// 反转
( k* n; @8 X+ M- P8 U+ U0 I&gt; array1.reverse()" W' Q; j" C$ _6 K
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
+ s" Z$ u- T( ~3 T// 将数组元素连接成字符串; |  Q( G& v& Y6 ]: [0 [0 ^" A
&gt; array1.join() // 什么不都写默认使用逗号分隔
7 Q3 v7 @% l! r- ?: [7 q% d8 e'c,b,a,3,2,1'+ R: A7 n" b8 @8 r- K6 [4 M; D6 k
&gt; array1.join('')
0 h: M, h8 C9 P4 e'cba321'
! W. `9 l" }- q) @3 I&gt; array1.join('|')' q9 ?& m( ^6 s1 W
'c|b|a|3|2|1'8 b$ `* K; {# t9 v1 q- S+ o; |: ]

  G- ?6 V' t1 j1 Q( G, O2 i// 连接数组
# y) U5 A6 `7 ]% b/ m6 ~&gt; var array2 = ['A','B','C']
& ?8 J) x8 i) z&gt; array1.concat(array2)
# ~/ M% p8 I( k! [$ ^(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
5 N0 s' O0 |% K# s; i  g
9 M' G8 k. F) ^) ^  J. p// 排序$ T3 l8 F: w( B5 ~7 T. ?0 X5 f
&gt; array1.sort()
9 x# U5 z4 F/ s(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 v+ W) E. _6 L5 l! }& [: d+ R& P! u( W0 k: I/ y
// 删除元素,并可以向数据组中添加新元素(可选)
7 v; y7 y- p) Y* @; c4 s3 C# A&gt; array1.splice(3,3)  // 删除元素
- L; i8 O8 `. w: t& K1 l5 w7 C(3)&nbsp;['a', 'b', 'c']
8 i- o6 ^+ K2 W) M&gt; array1
6 B2 K( w/ e* B1 n1 P; i6 L+ V(3)&nbsp;[1, 2, 3]! [" S7 T2 X. z* m+ A& \( L3 f
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素& _; m7 f, x" C0 O3 f2 ^: h' d. D
[]
9 K, g( A. @7 {: ]: ^; r, `&gt; array1* N/ D8 \+ A& Q4 C$ }$ u
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
  i- _) u, n9 Y' Q) P+ }
- K5 P5 v7 Q5 j4 H, d/*
0 h# P8 I& c. |- K. @4 Vsplice(index,howmany,item1,.....,itemX)5 J; w. A& a( _5 O2 D, U
index:必需,必须是数字。规定从何处添加/删除元素。: _" u5 P, O: t8 R- E
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
5 c  a, k* g2 [; Hitem1, ..., itemX        可选。要添加到数组的新元素
6 c% ?) L& v% t5 Z% a! `*/2 Z# K3 h/ M  A6 N5 r4 }

' h( S) _( Q0 P// forEach()        将数组的每个元素传递给回调函数
  `+ R5 Q# {# B. d6 n&gt; array1.forEach(function test(n){console.log(n)})* \  s  M# f' U1 B2 [
1
/ |3 r( f. v  V; z 2
, j7 A% ?5 J$ G! H! a 3
- |: Z  O  z+ f( z: c, j5 F% O A+ S! y4 b. V6 r$ E; z
B0 W+ h: W9 e0 y: K9 ]( f
C
' g0 s9 L: N* L3 i% r2 f// 返回一个数组元素调用函数处理后的值的新数组' [* ^% G# Q$ O5 D: L
&gt; array1.map(function(value){return value +1})
( B5 }/ B1 T$ l% p* m9 {- m) y& b# Q- r(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
2 ^3 J8 W% g' u. J7 r. N' ^</code></pre>" x  \9 t/ O: o6 ^
<h3 id="24-运算符">2.4 运算符</h3>5 I0 B* ]2 F: O4 K/ \, @
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>7 ?$ ]# v" X7 F5 a; W3 [- V, ~2 X
<p><code>+ - * / % ++ --</code></p>0 @5 K. [3 }  j/ ]& `( b: _
<pre><code class="language-javascript">&gt; var a = 6% H* f1 N- q0 N% {. ^: v5 Y
&gt; var b = 3
: B' C) e; n/ ]2 |/ A- u// 加
4 O( e7 ?1 O9 L4 u6 M+ n&gt; a + b5 t6 I# r5 V: e/ d( S: ]
9) S6 n6 W2 d: ]$ z$ ]+ N
// 减# R5 H' ^$ K* N9 ~7 Y
&gt; a - b  E! O4 }! m% x0 f1 A
3
: ~% A8 s8 i- I8 \4 I// 乘
8 i( a5 X. U7 A) a&gt; a * b, L+ a; g8 ]; e# j3 G
18
5 s9 D) t  Y' E) [, v// 除
/ @$ h2 h$ ^! H0 Z&gt; a / b
( Z7 ~+ Z' W! C5 Z8 i9 z0 E2
5 t' @8 k' Q6 g// 取模(取余)  m+ }2 r4 i2 E3 N/ H5 k# T/ ^$ ?
&gt; a % b
6 T) T' C' I; F09 a' ?$ S) C: F. I9 R) g( V7 H
// 自增1(先赋值再增1)" d# q5 B0 h8 s6 i4 w  |0 w
&gt; a++, c/ ?# D* ^# M: m, H- G7 {: z
62 F8 {9 ^  k- ^- K: m# L
&gt; a/ v$ g( a2 T( K1 I
76 k  T& G* L! q5 {! M5 A
// 自减1(先赋值再减1)+ n: B  m- j3 q
&gt; a--
" p, Q- _0 ^  d0 V0 r7) J8 N7 \, K0 Z& C# J
&gt; a4 o& J7 G  _0 ~( w/ b
6
* ]4 y: T/ `1 D+ m* T9 M( {2 F// 自增1(先增1再赋值)
1 C2 b2 z! `) v6 R/ t, S3 H, A&gt; ++a  m% i( Q: C4 _1 T; v. S  p9 S
7$ L8 k* R  U% T7 {
// 自减1(先减1再赋值)
: O( S& l3 C2 p' i' q2 d" T&gt; --a
/ q) \% n+ ]$ ^9 Q% ^6 f6
, P2 e+ w4 X0 j&gt; a$ A5 F# Q) t. @) R4 o. h; [
6, P. `' c* Y( i) f+ t
# y1 V$ c/ m' P6 y) n8 O# s
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理( O1 ~; q# ?9 u% p1 x$ t
</code></pre>
6 D% e1 h+ S# x# L% d# {( _9 K<h4 id="242-比较运算符">2.4.2 比较运算符</h4>' h# X# v) |. b- f5 w
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>7 r$ @9 j: K; e
<pre><code class="language-javascript">// 大于. u* T1 p9 B  O9 E: B4 \* J
&gt; a &gt; b
$ c" i5 j" S9 V' P* l9 G. Y7 utrue8 o) l0 k' q" ~5 S5 r1 T7 t
// 大于等于
; F% O* ]* W6 ?4 z' Y5 I8 K6 @9 G&gt; a &gt;= b) M" o* `) I; W0 w
true
+ A& O( |+ D& x7 T* j- X// 小于- |2 I8 O2 S  G/ V5 h% X
&gt; a &lt; b, ]$ \9 _! T0 @& E) H
false
: b6 S4 j/ L" u3 S% A6 N+ v// 小于等于
5 A7 {5 X1 ^( I7 I$ T4 L1 t$ x&gt; a &lt;= b  E& A0 H1 A: h& T. d( R* c; n
false" T. F$ V0 }: b7 K3 e7 z
// 弱不等于8 f! C; X0 g$ R
&gt; a != b
3 r- r) \4 [# T" [! Rtrue+ j0 k+ G3 \# M' b
// 弱等于+ Y* ]1 W$ ]$ v% o% X# U
&gt; 1 == '1'
! Q. T( H2 X$ v1 btrue
) [, l' N6 c4 q  `$ L" Y// 强等于# O; F' T, j1 K& |% W1 y
&gt; 1 === '1'2 G- Q- q! V# U( E
false- m* g% x& i/ W( r8 T( M1 z! \# m
// 强不等于2 X: Y: m$ C; |/ I1 `
&gt; 1 !== '1'
. D- h8 ?6 \& `, m9 S0 f! Otrue
( G' a$ Q; a; g# f1 b8 n. D1 Y4 C
/*% V* }% [) h: U7 V) t
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
* V0 O; F1 o2 l5 u( A*/
5 i' |; R# o* @6 [" ]</code></pre>3 X) L  h& v8 z. _5 P! o* G% ?, {" |
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>5 U4 O' t, V4 V- u: q8 v
<p><code>&amp;&amp; || !</code></p>+ _2 u% D( H* l
<pre><code class="language-javascript">&amp;&amp; 与
; H; t8 M1 l+ d5 B|| or ' V8 _% `9 q( |) R
! 非
3 @& s" a' Q4 ^6 L+ Z2 H/ q6 [1 S. p</code></pre>
: N3 [9 z# q, v9 n<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
( f4 t( h7 y8 Z4 _( Q8 H) |<p><code>= += -= *= /=</code></p>
4 ]: s, R+ m2 N! P, H9 F<pre><code class="language-javascript">// 赋值' z! n* B( j# _8 r  a6 A/ d
&gt; var x = 3
/ e# M( R  d; t+ G0 W// 加等于. J$ ^5 r$ O  ^" o2 g  R
&gt; x += 2/ f  @# g0 u/ t. d
5% D; c( y' b5 @/ I/ d+ e
// 减等于
% `8 U2 y5 r/ t&gt; x -= 13 d% ]$ S1 ~+ X1 _7 b6 ^! B/ F
4/ P# u' q7 n3 _3 ?$ i) K# q
// 乘等于1 y0 G, |9 G& P$ D1 u* V
&gt; x *= 2  ~! A  N0 H9 e: z, [$ m
8; Q. J$ S* J' }0 c/ c- |
// 除等于; @. ?# Y/ e  A, P* C, e, i
&gt; x /= 2
2 W6 }( d/ D/ S* Y6 \7 B4
) i0 b  p. q5 J' U/ M# u</code></pre>
) l% D0 w5 N/ \" X/ ]2 @<h3 id="25-流程控制">2.5 流程控制</h3>9 y+ s6 n" h2 a% d& P1 v
<h4 id="251-if">2.5.1 if</h4>0 W7 {9 U1 L1 ^8 d5 g, a3 ^
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}: E: S. U& g: W
8 W* k- |$ `: q$ `$ Z% w8 q
&gt; var x = 3
' E7 P3 W  T" l$ n2 \- @1 l&gt; if (x &gt; 2){console.log("OK")}
( O* }% J. l& L% ?; [: C5 x OK
/ i: j, |* \$ Q- _3 ^# B* a
+ a" f( P( G4 M) l0 e  {  M, T2, if(条件){条件成立执行代码} 5 l6 M" [' G1 X& H! b
        else{条件不成立执行代码}: Y! e. c9 ~# p* g) \) I( ]
0 ^) ^8 q/ t7 d8 Y0 Q- Q+ y
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}, _  b% V8 k2 i" j
'NO'3 c) Q( @9 I) D

1 P. Q, v" f- c3, if(条件1){条件1成立执行代码}
6 f0 W1 p  z$ E: r: Q0 @, e2 p1 b! V        else if(条件2){条件2成立执行代码}* c4 d. R2 U4 _" D) s- X3 u
    else{上面条件都不成立执行代码}# [/ c' I$ m8 h3 |
+ D, d4 T/ u* ?3 l; u2 c" c
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
/ ?4 w+ [! W9 z" n6 r$ q4 z Ha
" {! `4 \( H& ~6 v0 J3 n" ^</code></pre>- O* Z" X3 a2 G' a
<h4 id="252-switch">2.5.2 switch</h4>% }) _, ~- o- j1 H9 S! b
<pre><code class="language-javascript">var day = new Date().getDay();$ N( O) j( _* h$ y& Y: ^
switch (day) {
& B. G6 ]6 x8 E0 E! ?/ W  case 0:  h$ Q: c# c# h/ f, ^
  console.log("Sunday");6 }0 `+ ^) P! L5 e; s, k
  break;: C( \7 S2 p3 J9 \. ?1 M* Y
  case 1:" B3 S+ S+ G2 S: s5 n
  console.log("Monday");
) s1 i4 [( |2 o& ^3 I3 g/ a  break;1 }1 {1 W, D" L" L' j- `
default:
3 }9 g% @# d- P- z/ d2 \& D& v  console.log("不在范围")6 ?! w- h3 t2 l- l, e: [
}
" l( P# f4 D3 [" E$ x 不在范围( V* Z6 K0 _4 G
</code></pre>
" w* `! v- S' }# h<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
7 f& ~7 P! j" D+ r1 R% a6 N1 k8 f<h4 id="253-for">2.5.3 for</h4>, m2 m: W& h- T8 l/ ]. q: y
<pre><code class="language-python">// for 循环
( J% B4 D  d0 V" r3 n; F        for(起始值;循环条件;每次循环后执行的操作){
1 m/ [; T1 p, E1 A/ N( J        for循环体代码4 y+ K* u; @' V! H- h
    }7 U2 i/ Y- k, S! E2 H& T  q* |& ^# R

( V5 M$ a4 [3 q2 @; |/ T1 {for (var i = 0; i&lt;10; i++){
& B; m% N- S" V1 W$ J# |* N1 }    console.log(i)
# Q+ C+ z* `$ e6 l; x6 Z}6 m1 x1 p2 b( p$ M
        04 x; C" J/ _2 z6 x
        1
$ \3 J( A  L! o" P        2
% Q% }* p7 ]5 J/ j3 L- q; L# n+ p: T        3
! q4 n% P8 N  Q        4
% g, h+ U$ T) P0 c        5( m3 }- ]5 ~5 R7 x- j
        6
. `# i- _9 [% H* H        7! L' d/ s" A& k: p7 Z# ^& f* d
        84 Z! R+ P8 C# x9 d
        9
! F" o4 f9 A9 w9 b! g1 |: c' q</code></pre>
) X7 ~. q! U) y<h4 id="254-while">2.5.4 while</h4>
. ]4 e; q8 ?/ f- g* k3 M1 p<pre><code class="language-javascript">// while 循环$ a2 `( K8 x0 h/ ^& U  B8 ~
        while(循环条件){" S0 L% U# V: T7 }
        循环体代码
' G/ y4 y: s) n; S; H/ s) u    }: \$ z: H; n# a- X# C0 Y8 T
5 ]. q7 P: R/ g" h
&gt; var i = 0
3 V- _7 V$ Y' s+ I- T&gt; while(i&lt;10){! O" N7 [0 Q: h% B! [
    console.log(i)2 j& V! M! D: \# f4 E
    i++" [5 a/ O9 O# T
}
8 t$ X: Y9 E7 C$ V* d 0! o3 M, e4 \: {- w2 S$ i2 s
1' Z( H# c5 n7 _( m9 L  F
2  ^) P3 e/ B; |+ n, H
3
, \- l: ?' Q7 j. C- }" J 4
7 ^' X) ^. ~$ l4 N, k 5$ p  h( j5 ~" G- [9 w# M4 y( Z7 b$ M6 N
6
/ |7 {, r" q" Z4 {# e4 g+ M+ M9 X 7
, h6 ~6 A+ D* l' i2 r# ? 83 U- y6 l) z) n
9
5 W, ]3 N9 {  F0 X% x</code></pre>
0 n5 g! `3 @2 H9 R5 k<h4 id="255-break和continue">2.5.5 break和continue</h4>- }$ b) c# b- c- P' @. T3 R- |3 C! a
<pre><code class="language-javascript">// break4 r6 L( o; ?0 e6 l8 e% r
for (var i = 0; i&lt;10; i++){
8 s3 m- \+ N$ k0 d2 C9 B2 m% y6 L    if (i == 5){break}2 X. k( L4 J  l! `; _- g. ^  K. v
    console.log(i)
5 B/ A& S, e- u- \4 m}
4 `. M5 j) T( Y+ m& \; ^ 0
/ `% v7 M2 a* } 1% G1 {# h1 H# }; J7 v2 w
2
+ u; p% |- N; r0 |# r 35 M% a2 O6 F' H- v7 l. }
4" m; h. D  ]  N1 w: ~" I2 o7 k
// continue, i3 f( T: G% Y, B: y, A2 w+ k
for (var i = 0; i&lt;10; i++){$ S, {2 ]/ K/ f
    if (i == 5){continue}+ G6 }. }* m7 R( O6 v) d
    console.log(i)
" @6 n' d. q( Q) P3 o- D' a3 y1 z( T6 N}( J* @3 d2 {2 y! i8 X, U
03 D8 k* j& M  X+ x$ Z& s
19 v; d) G6 T; p3 N( i
2% r5 o) y$ k2 V
3
3 l' K" `+ G" U! B& K 4
0 t6 c) \" E( G4 h! Q) C+ k7 d 6
9 n8 O7 T  `# n3 J4 B( Z+ Q 78 P9 r& a/ T' O( ], L( M" O) ~6 \
8
' j$ L7 ]$ ~8 R 9- y! E0 ?' X: u5 H6 a5 O
* e9 Y! J1 |# ^! p
</code></pre>
5 R7 i: p  L( }" V1 \1 M<h3 id="26-三元运算">2.6 三元运算</h3>& e( v, T: _4 i8 d
<pre><code class="language-javascript">&gt; a
7 m# }+ C9 h0 g% y( q* D# G6
$ T( ]4 T3 X" a/ B; U9 R8 v+ ^&gt; b
8 A9 C7 E8 |1 U3+ X/ g! |9 h* F; {! c

4 v5 {4 O6 U3 w  J//条件成立c为a的值,不成立c为b的值" u# P! ^$ d: F8 E' r! `9 X
&gt; var c = a &gt; b ? a : b
% F/ ?' L% \- b* w&gt; c
/ t0 V  N8 g4 d+ j+ z' M/ ]6
; v( @+ U* A' V% s/ a6 R  A- D6 ^7 @0 ~5 T
// 三元运算可以嵌套
" w; e+ X+ [& [! e* ~: w0 W</code></pre>; {9 a3 E, X1 m. r+ N
<h3 id="27-函数">2.7 函数</h3>+ V2 B$ z4 J2 {6 }  b) F
<pre><code class="language-javascript">1. 普通函数
- n- e$ C# I+ M# }& V# B% C) F&gt; function foo1(){
" W+ g" \. e6 q. u    console.log("Hi")
; v' K& o2 z  e& s( g+ H. c+ O, G}. _6 _9 A- \& T+ D! @( V* @
3 i" v  _% ]3 o; H0 h
&gt; foo1()
1 W7 @! v' ]( r: {0 S        Hi4 S- O/ f# u$ Q5 D- P8 B- d
2. 带参数函数! z2 H5 z5 P8 e, E3 ^$ @: f
&gt; function foo1(name){: d: G8 Z+ v/ M  h1 g  ~8 q
console.log("Hi",name)
  F* ]0 e0 g* Y# c! ~" }$ e. l}0 q0 b1 f0 Q& i. e; B% [
% |' `! k5 A& Z
&gt; foo1("Hans")
1 q! S. i& R# N7 U. vHi Hans
3 A/ P5 t; {; A2 u4 a$ L
' N# r- w) u. C3 H% [) K&gt; var name = "Hello"% s$ k. s" N8 p+ @# i; b/ }) E
&gt; foo1(name)1 Q+ m2 T1 m, C' v3 U, t
Hi Hello
- F- z) ]2 G( {6 D
! j0 i; [8 Q* e9 E6 s9 n3. 带返回值函数5 O( i7 `+ V! x5 M
&gt; function foo1(a,b){; n7 w7 v0 a& Y  m/ F  a
        return a + b   , p/ l# G/ v# d8 T: ~  K% T4 x
}- S* b8 z' p& a( B2 n
&gt; foo1(1,2)
, _& o3 N! K  u9 B9 j34 w9 x2 P' J$ ?; E
&gt; var a = foo1(10,20)  //接受函数返回值
0 H  d+ b# Y  u, e5 Y$ O&gt; a
% D. y. ~2 Y- i2 ?4 b# S308 r5 A- n: u4 F6 q7 i# ?8 {

  L" k6 a. G2 {) R7 \, w/ t7 [4. 匿名函数5 O' q) |7 J- V1 {
&gt; var sum = function(a, b){! Z& }" G0 u1 U) R0 k5 N( j
  return a + b;! s* B. E* L! I. ]! H% B0 F
}( H$ E4 _. t1 l* L3 P
&gt; sum(1,2)
1 H" T3 N$ ~: y( C- A1 m, m5 j3
) O. E, @1 u* T  X- w% s2 h" ~
1 u9 A6 V% y- w// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
; g( c/ j0 P  L0 x- V' F&gt; (function(a, b){
7 ~: g  u8 |0 T  return a + b1 m( Z/ f# X0 P) b8 Q! ]
})(10, 20)+ @' X8 F) l' M3 E- w1 g
305 U$ E$ [: T+ J+ j* J) a  z- x
  i$ V9 Y' g* b5 X* B2 K6 E
5. 闭包函数
3 l4 ?+ y6 z- M1 F// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
; l+ D$ k: C- |7 j7 z- ]5 I" Wvar city = "BJ"6 B( n/ v8 _% l! D  }  R2 g4 p/ W. F
function f(){
7 ]" V1 O& H, `# k    var city = "SH"
4 W& J. _) s7 q0 t; V! f' Q# h    function inner(){
" [5 h, I: {) t; I3 u( ]8 U        console.log(city). q3 x7 R) e% Q0 l, D( ^2 F
    }
. q9 S; F+ r, L% {7 U    return inner
7 x/ v% N9 n2 w}/ g  [/ ^% x, g* {6 b7 Q
var ret = f()" s6 _8 q. c0 J! f8 M) V
ret()( |% B1 G. T* c
执行结果:/ N* I6 T( A  ]" U8 H
SH2 q8 ^: z3 q- O& V5 f: N  K4 x3 L

% J, v0 K+ }# T3 C) X: ^7 p% B/ I0 |</code></pre>; C- U0 k) ^# u0 Z; I( ^, B+ P  N" s3 k- N
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p># o, @: h9 x5 A: M0 M& M. o1 M- P
<pre><code class="language-javascript">var f = v =&gt; v;! L, M" i5 Y, d
// 等同于
. B) v. m2 d- i. Z5 V/ W6 A  ivar f = function(v){5 S$ X6 K: Z: i. U3 w. Y- c1 r
  return v;
0 X5 ~( u- @" n. p, G% V}
. A+ w' u/ [; Z4 c$ w' m+ a% Z: N</code></pre>
- d0 a1 V0 c! T7 I<p><code>arguments</code>参数 可以获取传入的所有数据</p>: ~) E- Q& N* L5 G
<pre><code class="language-javascript">function foo1(a,b){
; V& D1 I0 W3 M- R) B1 c    console.log(arguments.length)  //参数的个数
  F- w0 W, N. ~8 ^: m/ v. K    console.log(arguments[0]) // 第一个参数的值
  a6 i1 C) H( \( ]1 Y7 K% ^        return a + b   
- _, h+ g( }' t}- B3 U- z+ c9 k
foo1(10,20)" n( Y6 H: U0 f
结果:
8 G3 U" I2 h  p 2          //参数的个数
- y& h0 I0 L, u, }. \10        // 第一个参数的值
& J* q* u+ Q& _: a* S; l/ A' w30        // 返回相加的结果2 e3 y- Q( i/ p
</code></pre>0 r+ r- N  k, N8 G. w! {1 N% h6 B
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>8 C4 n1 D& R0 ]. e* `8 q6 |; w
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>! [: r! P1 i7 t, O, ?- o0 ?
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>8 Y3 x2 z  \* g9 h2 w6 V# Z
<h4 id="281-date对象">2.8.1 Date对象</h4>( g  T; _+ @3 T* J1 k$ o
<pre><code class="language-javascript">&gt; var data_test = new Date()
' D4 e$ Y: D8 u3 B# \* O&gt; data_test% V% [9 W8 K0 q9 s8 o
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)5 B  X! y- {! P: a! x
&gt; data_test.toLocaleString()
( ~0 P$ h$ O6 I0 @2 |'2022/2/11 下午9:44:43'/ K! Y4 l, X+ E

8 h6 \& X, C/ R2 H  c7 Q  y&gt; data_test.toLocaleDateString()* i' V; G- C# f$ T! ?5 q$ D
'2022/2/11'
( T  |7 _! t( G- b4 y
/ b" m/ r6 W+ q) U  l/ \8 Z; H  s&gt; var data_test2  = new Date("2022/2/11 9:44:43")/ D* b2 c& Q% F- ]
&gt; data_test2.toLocaleString()
* `; |# y& z0 ?4 V& [9 y) T'2022/2/11 上午9:44:43'4 o/ A2 G* A' }, s6 _

' Z3 u: _8 i8 {, A& m6 T5 @// 获取当前几号
+ V' U* D; }/ O' l4 j7 u&gt; data_test.getDate()
1 f* J' C% x; }  F7 w% G+ t11
( d5 F! r3 j% N9 g4 R// 获取星期几,数字表示
) J! v+ |2 O5 U( l+ `&gt; data_test.getDay()  , z0 W4 e0 @9 T3 R$ f+ B" c2 [, h
5# ?9 P( T& e9 N
// 获取月份(0-11)
6 l! f0 C+ o, T- B3 N/ C9 t&gt; data_test.getMonth(): D& e: n4 Z% j, ?4 W7 {6 `, f
1
/ ~. P* }5 m1 M// 获取完整年份+ h8 f# o8 ?8 Z. b, ^
&gt; data_test.getFullYear()9 K/ w9 U# y, _: W+ m5 c
2022
2 P* j3 `- M7 V/ n/ n// 获取时
$ b* m. |5 S5 P8 m&gt; data_test.getHours()6 k+ N2 [# R1 h; n2 Z; d* \$ g
21- m1 g8 D* p( F
// 获取分& r0 T. i& r7 W' Y" T2 M2 ~5 b
&gt; data_test.getMinutes()
9 P% W7 U4 q( n. C( c' z44" H7 M( N. V5 [1 x# \: M2 R5 \
// 获取秒( `: ]4 B, R+ r6 x
&gt; data_test.getSeconds()
; E3 k6 f, @& O; v+ s7 I43- m# F4 j7 u6 f8 O# q0 c$ U1 l$ J
// 获取毫秒) w' }' \" R' n) l7 z$ D, m! I$ W
&gt; data_test.getMilliseconds()
# y* O4 p- L! a290
2 C; y% E% M" w// 获取时间戳9 s; R8 m% {0 b8 v
&gt; data_test.getTime()
- w$ Q1 Z' `$ J& h+ H0 C1644587083290
5 C. |) u6 O, b& V. `. O+ I- t</code></pre>9 }8 Y, h0 J7 p, T% U
<h4 id="282-json对象">2.8.2 Json对象</h4>0 J7 C$ G4 ]$ s5 ~% H2 l
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串+ r, @% {6 S, ]  @
JSON.parse()  // 反序列化,把JSON字符串转换成对象
( k* r/ D3 \, _, e! P
; @* Q+ ^, \1 k4 i0 p// 序列化
! v4 }4 b8 M6 ?9 F&gt; var jstojson = JSON.stringify(person)
1 B) G( v; }% B  W( S&gt; jstojson  ) B- x) m% T5 [, d+ O# I
'{"Name":"Hans","Age":18}'2 w* W( Q4 G* \% d/ O$ F  W

6 i3 }9 B1 K5 w9 l7 f// 反序列化
$ F3 v' R/ ?/ C! i# [" ^. q. n&gt; var x = JSON.parse(jstojson)
% Y$ d: D0 ^( j, {&gt; x
. I% Q9 r# P( ?) Q* D# f2 R{Name: 'Hans', Age: 18}, ?+ F$ e% Q/ ~; {, C7 t9 s: |& X9 X
&gt; x.Age
& X2 R! a( I* w7 p# h18
) g6 T3 U* s" @9 M( W) R% [</code></pre>
  [; m8 y5 y6 P3 [! v/ k1 q<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
8 X1 Q& Q+ b1 s, X. P3 f) T$ s<p>正则</p>3 ^9 z  w& h$ S& \% b1 i
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");% t+ [1 k3 V6 B
&gt; reg1; h! k  i$ s7 N1 o# k2 `
/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 p) [/ p& O9 l& ]' L+ g2 T
&gt; reg1.test("Hans666"); d& t1 x# [0 g; q
true; B- h* S1 g( I6 P3 g( x* P' D
+ D# L- j4 [/ o8 T. i/ t3 P
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/% k% E4 K0 r/ w! Y" Q' _# p+ u
&gt; reg2
$ R1 I) s# m: @# |3 _/^[a-zA-Z][a-zA-Z0-9]{4,7}/9 w/ t: `' e5 I' i0 ]
&gt; reg2.test('Hasdfa')" k9 S* e) L$ x  M, y" ^3 h% Q
true
/ P& V  S) h. C  z7 k! c" }# z& ~+ a* c* M: c) f) F" I
全局匹配:
( r- m: ?: L6 ]; o6 D! l! {  P&gt; name; f0 f& a* d$ i, q8 n8 ^+ S& m
'Hello'
1 @% Q% o$ @% }$ \&gt; name.match(/l/)3 z; F0 f1 e$ C# _3 c8 q1 \
['l', index: 2, input: 'Hello', groups: undefined]! l; S0 Q# ]9 l! n/ k  P

2 Q# L2 I% x6 U- |&gt; name.match(/l/g)3 N+ c& o: O5 Q9 O: N
(2)&nbsp;['l', 'l']5 H  g4 S8 j/ U. }3 h0 S8 C8 J
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配5 n+ ^9 S6 |! A+ x

8 {! j% }6 E6 N- F3 q1 \全局匹配注意事项:
+ u. Z; O1 C1 ?$ w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g- z6 i3 t& l0 Z
&gt; reg2.test('Hasdfa')& N! A' \  r' i& S
true
: J/ F9 i8 i3 ?+ ]8 a&gt;reg2.lastIndex;  `0 S1 p8 j( n1 ?! J
6
  \% x+ C' U; h3 S&gt; reg2.test('Hasdfa')& V7 e. r# [% M) k& ]* y9 O, P+ z
false
7 R, c' t3 M9 f0 F* e" P% A( q&gt; reg2.lastIndex;
$ Q2 a4 s8 X( _7 q0
9 d/ z" i3 }* k5 a. I' X& J&gt; reg2.test('Hasdfa')8 e; i! V* \  {: H; u" M$ @& m
true
4 F( M: W& ]3 O&gt; reg2.lastIndex;
) C6 b, X  l8 @1 W, v60 H9 u6 |8 r# _+ s% {6 f
&gt; reg2.test('Hasdfa')
2 Q1 N. q! h3 j7 O! ufalse
  M. W( c. a; C) q. V) O&gt; reg2.lastIndex;
5 p$ ?8 L9 T1 [: I+ X; Q6 Q0
2 Z& L0 m7 o: i// 全局匹配会有一个lastindex属性' k: w* X: D% D: u" a: z
&gt; reg2.test()+ T' y" ~  F  ?
false% y8 g9 ?# ~! ]
&gt; reg2.test()
7 }, Y; h  h; m# t1 S$ \2 n# Otrue
, ?1 h; p4 B/ s// 校验时不传参数默认传的是undefined: k2 [' o$ V& M) r) ]3 s' X
</code></pre>9 D5 b! N) C' C. H
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
" O) O+ ^: E. P2 ?0 |  U<p>就相当于是<code>python</code>中的字典</p>
% l. D* A# F! J9 t% b& P<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
1 V+ x+ V1 [: K5 i( D/ @+ s&gt; person7 u+ J+ Z/ d. N6 M; ^) G7 p' P
{Name: 'Hans', Age: 18}
5 {7 w2 w* E( ?8 l: a&gt; person.Name
6 f. _2 Z" R  X/ u'Hans'
5 C$ v3 f9 H: s6 h; {# H- q&gt; person["Name"]
. |6 t/ B1 v0 z( \'Hans'  f3 F* U8 A6 {( Y" ?) _$ w
7 ~7 f8 P5 U& M: L2 l, m7 \
// 也可以使用new Object创建
0 @5 ]. n& d8 E8 ]) |; N' ~7 k; d&gt; var person2 = new Object()$ Z% ?6 {. u. L  j; [6 a( O9 s% u
&gt; person2.name = "Hello"
8 w  q& U2 A2 T" A. f0 F. P5 ]'Hello'0 M1 x1 C+ g) s4 R$ a- D7 N( }, R
&gt; person2.age = 20
' v2 \3 Q0 b! [! t20
  Z' `8 \9 S1 v</code></pre>
5 ]5 J4 y8 N! [. g& U<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
" b* d, i: N2 i. W0 J5 r<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
, G* v2 |$ E0 Y% a" x<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>) r$ k/ j9 V; |( P4 R
<h3 id="31-window-对象">3.1 window 对象</h3>
; Y* ^* U" J+ v* l/ p<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>/ B( i1 W- U- B2 T
<pre><code class="language-python">//览器窗口的内部高度2 s! f% w( U9 l+ T
window.innerHeight
' D' W8 V6 V" J1 q- f/ L7069 M' @1 w2 n2 R5 K' g, v5 @3 [
//浏览器窗口的内部宽度- c0 u  z4 a3 H0 \# k
window.innerWidth
& `; N1 \1 E( ?: {2 K1522
0 I# S- F& w8 Q' O8 V// 打开新窗口# I. m+ c* s' ~2 C0 H. Y' |# l. Q5 U
window.open('https://www.baidu.com')
. r1 i5 _: B  U$ fWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}/ L8 e* N# Y; G4 U/ T' T6 B
// 关闭当前窗口0 y6 s% L( i" Q9 U) F6 d
window.close() 0 C0 I6 @5 C2 S3 {
//  后退一页
/ C, R9 w# ~; q2 }* e3 J# jwindow.history.back()
6 P0 p: Y- A1 z1 J% h  s// 前进一页
4 F# L% g8 f* D0 D; s& s2 Ywindow.history.forward()
- k; }2 ]4 E& a3 {  d//Web浏览器全称
+ {. J( u1 d) Y4 k9 [5 G! \# K7 Rwindow.navigator.appName
- F# K7 [- t4 N6 _) @4 z% {'Netscape'1 d: D; u  ]0 S
// Web浏览器厂商和版本的详细字符串! m+ D: j- Q$ j# a  t" \8 j8 d
window.navigator.appVersion
3 q* v$ Z! e4 J: y, C+ i'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( h+ ]0 E- |' q& T- |  F
// 客户端绝大部分信息" @9 m4 f* E& Z
window.navigator.userAgent
/ [5 i' k+ j/ u, s1 y# W0 \/ j, I: m'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& F3 g" ~; x; _2 ]- Y6 O/ }- R! F& H
// 浏览器运行所在的操作系统
0 D0 m" c6 |; u& ]8 ^window.navigator.platform
& g, S+ N1 C# r( V'Win32'
/ F9 c9 A  j! Y+ L$ \& O: q- W9 \, _, D. k6 m
//  获取URL
" T: I) x6 ?4 d  ~window.location.href( j' r. K- I. X! y
// 跳转到指定页面
7 K% t0 B2 c8 [( Z; }  e5 Owindow.location.href='https://www.baidu.com'+ A; `3 ]& L9 H4 _! I# G, \" w
// 重新加载页面4 e. p( q0 I" u; |
window.location.reload()
$ [) N! \# c- k5 Z</code></pre>
' d0 b4 Q% \# s/ u* ]<h3 id="32-弹出框">3.2 弹出框</h3>
+ L. w2 r& D) Y* ^, q. @3 F$ m1 j<p>三种消息框:警告框、确认框、提示框。</p>0 m3 B4 @. e* S% t& _- n
<h4 id="321-警告框">3.2.1 警告框</h4># V7 F2 {  V6 S. Y2 q1 \! `. |4 T
<pre><code class="language-javascript">alert("Hello")3 _3 ?% p9 a( m; c- B3 R
</code></pre>( c% r( h: r" V
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
" M  a' G+ Y  t% t1 ?# m9 C, N: Z<h4 id="322-确认框">3.2.2 确认框</h4>
7 X: u) @" y. P. @$ y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>9 \, G$ j7 C3 H% i. h0 h" ]+ S$ F
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
  {  n1 {" t$ o  Mtrue
7 f/ s& T: z5 f1 T( b# Q&gt; confirm("你确定吗?")  // 点取消返回false
( t: e) O% Q5 H/ kfalse
! B0 X6 G+ I$ H$ f* L9 p1 Z</code></pre>' O: R/ k' X# h$ b/ C4 f/ D+ N. c
<h4 id="323-提示框">3.2.3 提示框</h4>
# g4 i* T) f. b# B% P<p><code>prompt("请输入","提示")</code></p>1 D7 U: z7 {" `) |
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>* m& [3 Q& Z; j3 t5 L
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>& C8 m. M) H/ A3 H5 }
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>* V/ x, H& ~: v! Q; N' k
<h3 id="33-计时相关">3.3 计时相关</h3>
1 m9 _% Z7 {$ K# L' B. T0 u: K<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>  e& o2 u8 b% }3 A, t3 Y1 B
<pre><code class="language-javascript">// 等于3秒钟弹窗
* P% y2 I7 i( p% _1 QsetTimeout(function(){alert("Hello")}, 3000)
; J3 H; Y$ g" @* n$ s! M( U2 @2 A# w
var t = setTimeout(function(){alert("Hello")}, 3000)
5 M* g6 [0 _1 P  K( L) _( W% \7 }* q! P7 I% n/ Z
// 取消setTimeout设置$ Z2 h! ~' i4 p2 {7 a* p' J# z
clearTimeout(t)1 C  F9 J5 `8 S9 |# l: Q
</code></pre>- ~4 @2 t# r1 B: Y% I) Q# A7 ^
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
; L9 W* v3 a( d, o. i<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>4 h/ q4 u9 }; ]( N8 f
<pre><code class="language-javascript">每三秒弹出 "hello" :: f! j9 Y# n5 r0 D/ R4 k1 m* |5 F/ [
setInterval(function(){alert("Hello")},3000);
& H0 t+ E! L& H</code></pre>
; Z! e0 P+ z+ i<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>( @7 ~/ S2 R% `/ U7 v7 E
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 e3 ^8 R; k$ N; a9 A//取消:
$ H, T6 v0 }3 G  B+ B# X( a9 n# YclearInterval(t)
( v( U# r$ W9 X7 j" I& s</code></pre>
# e$ l2 |: C5 |! v" K: g! u3 Z" ~2 p1 A, z% o8 F
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-21 16:57 , Processed in 0.074006 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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