飞雪团队

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

前端之JavaScript

[复制链接]

8240

主题

8328

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
27050
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
6 f/ X+ D% F! ^# R" {
<h1 id="前端之javascript">前端之JavaScript</h1>
$ f6 ~9 t- N4 h" M) }; E<p></p><p></p>( u1 h4 K5 n0 E2 W- ]
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
$ S; L' N# j( s; R# o0 o<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
. i4 F& \" e9 W% l! m它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
4 q, s- y! J# f" W0 V9 ]# ]它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>8 k+ ~) Y: w7 L# P- ^  p
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>" }' f2 T* h3 [; ~
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>) F# b/ L# C7 H. U
<h3 id="21-注释">2.1 注释</h3>
4 b" Y! N- G1 |$ l3 e( v<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
$ c+ R) o# `7 x* ~<pre><code class="language-javascript">// 这是单行注释2 ~! [! W( O$ q* K7 C4 c

% m9 d  O( L5 |9 }; b1 u/*
' P  ?2 f) `" N  k' A  R这是多行注释的第一行,  R) c% d! q. v) S* L: P  w
这是第二行。! L8 l9 M% j  [7 f; v, Y6 H0 W
*/
  h4 h) E- i# k" p+ G5 u7 I</code></pre>' X; y' K$ i) F# ~2 t+ l
<h3 id="22-变量和常量">2.2 变量和常量</h3>9 |: C$ |- s" F
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
2 o3 u7 `7 c% P7 H2 T" a<ul>
* f2 L6 q4 b& W# C+ c# ~<li>变量必须以字母开头</li>& A; k  H) Y6 S
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
4 E2 u( n& _- ]6 ^1 f<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>; G+ O6 v# k2 I7 Q
</ul>. s' C( r' \  \  ]6 D( }  a  E6 Q
<p><code>var</code>定义的都为全局变量</p>
: G8 e) i( |2 g7 b<p><code>let</code>可以声明局部变量</p>/ }/ b5 l: T: x! x
<p><strong>声明变量:</strong></p>: z# n2 s: ~" ~* O, w4 I
<pre><code class="language-javascript">// 定义单个变量% R2 @" e% c: G9 J  r& @
&gt; var name
; U5 H3 U4 E/ [% q' F; Q&gt; name = 'Hans'5 Z* r0 h5 ?; V# @( K2 f
//定义并赋值
# z. n# P0 `+ R3 V( I+ P&gt; var name = 'Hans'
& H7 N% K" o4 P0 `/ c&gt; name
( }- J  n' F# K  x8 }; B'Hans'" ~- B3 G# |% e0 M6 j

0 O$ c& k: B' U$ z0 T0 ?  I// 定义多个变量
- z& A: u% M0 D* A# {: S&gt; var name = "Hans", age = 187 A) O; J  u# _# q8 H8 p* J5 J$ s0 V
&gt; name; y( G" c7 T) f: c% E( n4 D
'Hans'( I- n: \4 N+ `8 S: L  I+ L
&gt; age& M! o3 G6 Q" s: E/ X2 D7 _
183 \, z8 E) |3 e: ^% q! v- o. Q' s
% l" a( _/ A3 K  y/ N* X( \
//多行使用反引号`` 类型python中的三引号. O# G$ \" Y+ c: l2 N1 `
&gt; var text = `A young idler,$ t( v+ l) `, v2 l) L6 o0 y1 q3 Q& w
an old beggar`
! p4 `% O7 R! j1 K) U/ M& |) E+ I&gt; text
8 G6 g7 E, K% Y! P9 P. }( u9 j3 z'A young idler,\nan old beggar'
4 A2 ]& ?+ v/ F) X9 ^% w: ^* T2 S</code></pre>+ Y; o$ C4 z, c0 ?) p" O' j
<p><strong>声明常量:</strong></p># P" c$ a6 R& Q7 g- i6 F0 t
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>$ `- k, m1 H+ i  U$ ~
<pre><code class="language-javascript">&gt; const pi = 3.143 W2 n. e8 w3 K
&gt; pi) s! y! p8 D+ x) a& f
3.14
- e. F- n* S1 F4 T: I# i&gt;  pi = 3.01& H7 Y0 Y/ M9 R7 Q4 p) C
Uncaught TypeError: Assignment to constant variable.' Q: w& v& L, V* v  u3 B6 Z
    at &lt;anonymous&gt;:1:4' h2 K( U. ]2 |" F, t
0 q8 s6 Q7 R! a2 ?  Z" Z
</code></pre>8 l7 B( y0 O5 U! }$ D
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
  {. r- q  j  D. h, @. a, I. v<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
& ^5 m/ J3 h9 `) \+ z9 @<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
% U& o& [) P9 ~6 N& H) G  t<h4 id="231-number类型">2.3.1 Number类型</h4>% W! U- B% h4 O
<pre><code class="language-javascript">&gt; var a = 5
6 y* i4 o6 J% I/ A! I# ~&gt; typeof a   //查看变量的类型  , R. _' H$ V8 A( E
number& A/ C* j6 o& Y3 ?* p6 i8 }
, J1 @! g% _2 h. s5 I. o1 D
&gt; var b = 1.34 {0 q3 r& _7 N
&gt; typeof b
" h1 S- Z& N5 m) S* E( qnumber6 E$ z2 u8 A% I" R; q& l2 e
9 h4 e, `5 K7 A5 O% J1 x( }
// 不管整型还是浮点型打开出来的结果都是number类型5 q0 p0 u& w: \, z# @1 j- i3 w( A1 ^

% v9 D1 e4 H5 m+ |+ x+ C6 l# ]% r/*0 I. }5 H) d9 e* O
NaN:Not A Number3 N* S/ h2 S6 d6 z
NaN属于数值类型 表示的意思是 不是一个数字2 }" f1 H$ Y$ u: C8 E1 L: d9 Y2 s
*/
3 v) z. N; I$ p1 E! I9 N" f
" Q: i# L; Y# B* j, F3 I* @2 p0 lparseInt('2345')  // 转整型5 w+ C. Q2 t( T7 M- W. w
2345
! j5 w3 D7 F3 o3 v2 m- P% ]* {8 R+ b! DparseInt('2345.5')
6 f& f3 i, |" }2345
+ M% F; S) Y8 A! J) X! w7 a8 TparseFloat('2345.5') // 转浮点型! L# A$ Z( Q  R. o  r9 E- h
2345.5
/ d0 g9 Q* ?) NparseFloat('ABC')
. E/ n/ O) ?3 P* s* D' \NaN
6 B' R6 j5 m. ^- Y4 f% P& YparseInt('abc')7 `7 `& I: U$ V/ H4 A  b
NaN, c3 ?+ I& k* V/ _0 Q0 f
</code></pre>8 u$ P0 j$ c+ G9 H, }
<h4 id="232-string类型">2.3.2 String类型</h4>
# I$ w1 Y3 B2 `0 b<pre><code class="language-javascript">&gt; var name = 'Hans'$ I7 T: M% T& C/ E& I3 ~+ Q
&gt; typeof name
) `( Q& ?6 z8 R7 m) `'string'/ @/ C% D& v* v" V" K6 A" W9 n
) b/ H9 ^4 j4 I8 o% u
//常用方法
( ?4 l/ |9 T! k, n' ]* Z2 Z// 变量值长度
5 t  z+ h4 ]: l0 c  _&gt; name.length
( @! ~7 K, Q; v; w( s' I4
/ R  h. C6 f6 O/ r// trim() 移除空白6 t0 O- o' h, \* V! B1 K& |! i2 O
&gt; var a = '    ABC    '
( C5 t1 w0 S; t8 W! M&gt; a
5 ^1 z+ Q4 c6 S3 H  d2 M0 v'    ABC    '
6 R% T: e- n3 X% q&gt; a.trim()
& c2 y  h! p& _  \& A1 h( c" P+ S+ A'ABC'
9 }3 @$ ?0 F  {2 m+ w3 R+ e  I: I//移除左边的空白
* G4 ?  G5 }: R$ g& b1 m$ ]&gt; a.trimLeft()
0 d$ B7 {! t5 [1 U'ABC    '' p: Y3 V$ E. p
//移除右边的空白
# W2 g1 a' b/ l  K& t# m0 M&gt; a.trimRight()
1 k0 ^0 a3 ], [' g3 M0 M% s'    ABC'  u$ l- j9 ~7 _& U  U! a

8 q  K) v' C& g- q2 H) d  W0 f//返回第n个字符,从0开始
$ l6 u5 s) @, c7 H7 `&gt; name
' a/ |6 P' O  S% W% j/ c'Hans'4 h% |. p0 l! t1 \! I
&gt; name.charAt(3)0 d5 G/ [. t. f+ }
's'' r  g( n& Z& c, ?, a9 |
&gt; name.charAt()
' y; s( `: K5 O+ ^: J'H'
, J/ G7 P+ R# ^$ o: r&gt; name.charAt(1)
$ H7 `6 C0 W) _1 s0 _- A" y6 d+ i'a'
, U9 N& e, X* ^2 k: c2 u, X6 {1 [$ J; L, `( X. j2 g
// 在javascript中推荐使用加号(+)拼接
# P; ^# z7 g3 N; |0 C  v&gt; name
+ o* d$ o! w1 ?'Hans'. d3 U6 W8 ~6 [' S# H% u
&gt; a2 E5 [$ {$ B, Q% K8 W
'    ABC    '4 z* ?0 U8 l+ `  h' i) \
&gt; name + a
3 Z: b. e& x( _0 s, j6 H) R+ z'Hans    ABC    '3 a" o$ Q+ {- f+ n1 q7 ~$ o; r- n
// 使用concat拼接: d8 i0 w+ X1 a# |% T2 k9 M3 n, E3 {1 P
&gt; name.concat(a)
& p6 Y/ R' B# d& n'Hans    ABC    '
  O. @" h* o5 P, _2 R+ q7 V) G8 E
9 A* k, K6 h+ L& r/ W, `+ [% k//indexOf(substring, start)子序列位置2 V+ b% F  ~1 b4 g6 z2 ~

& K2 x* ~$ C' }&gt; text( x# x( _( b# I
'A young idler,\nan old beggar'
9 ^* W" \8 _8 W* d&gt; text.indexOf('young',0)
' w0 f0 H  \6 W2 T& C7 D2
( }$ I/ \; r  K+ o0 E, t$ \- G& G4 [- f8 Q
//.substring(from, to)        根据索引获取子序列
. `* w9 c1 q6 x/ W! x) [&gt; text.substring(0,)7 G! N1 T$ D" ?. K  `8 H
'A young idler,\nan old beggar'
: ~, f6 ~0 ?1 q, V& d&gt; text.substring(0,10)
; N6 ^" k: U8 ~& q  W'A young id'8 p) |- U4 A# f6 C3 l% b

: I* I; g2 b: V// .slice(start, end)        切片, 从0开始顾头不顾尾
; f8 R; W% |" J6 G1 S* @; n; l2 s3 l" P&gt; name.slice(0,3)
; H8 m4 E7 X1 O5 R'Han'
5 @+ z# s+ ?$ m& G
  W0 p6 v) `4 z% e// 转小写- m  x$ _4 O, f2 ~& U/ G( P
&gt; name# Y; t2 h" C4 x, I0 R
'Hans'' D; F2 b  ~. R, z& y
&gt; name.toLowerCase()
9 s, u6 x4 H, ^3 L; H6 B' e  I'hans'4 x6 p- O2 E$ x- X! Q
// 转大写8 i' b) b6 U: m, D" ^3 g
&gt; name.toUpperCase()- B' r$ n+ H! @7 c- y
'HANS'
8 \. T! \5 m  `8 S1 Z2 U: g
! p8 h. S5 q1 E9 B// 分隔
( u8 Y1 n8 |/ d7 ]3 T&gt; name1 ~) ]) C8 a' h5 e% x; S
'Hans'
4 x2 A$ k! v8 u) e2 F# P& }* C! `8 z8 o5 U&gt; name.split('a')6 b- C3 G& r9 D# E3 k
(2)&nbsp;['H', 'ns'], A2 T/ j1 z  W5 P
</code></pre># c$ |) e! U6 `/ O  S: ~0 ?; ]! m& l
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>8 g; A+ ~3 G  f: p- f" m7 |3 l
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
  E% D0 D% P6 @<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
) S) X5 b7 m5 L/ o. l3 ~<p><strong>null和undefined</strong></p>
4 r, T, H: W" b6 V; e4 w<ul>
8 d: P0 a3 [, J( d! A8 H2 N<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>( q# Y+ \( }$ ?
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>6 s1 Q9 J2 l& _
</ul>' o. S/ a+ N+ L1 @
<h4 id="234-array数组">2.3.4 Array数组</h4>
' i5 W& G. p+ m' r<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
) S! O, u7 _+ w6 _+ ^) ?<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
- D' u: W# N: H) Y& B&gt; array1; v( x& t# d, i, r3 w+ O
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# A! k1 ?% j* {+ L8 [&gt; console.log(array1[2])  //console.log打印类似python中的print7 N+ \4 \- ^8 d2 S
3
9 E, P- l3 \8 x, o, \// length元素个数
9 {5 m7 D4 i; g0 x&gt; array1.length
7 [& G2 w; v, X9 B6
0 o7 y! i0 h  I7 l- S- o# I5 P// 在尾部增加元素,类型append" o9 k: s! o% K  i0 X
&gt; array1.push('D')
! M  L4 \9 U- ^( r5 h8 [7, C. j7 X* q6 b0 m8 \1 W9 I
&gt; array18 Z2 \: ~' q; y% U2 T9 i4 R
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']+ T) y& C1 n- s, l" h
// 在头部增加元素
1 R4 k( s0 Q7 H- }  {+ [# l&gt; array1.unshift(0), \$ Z& o* x1 z: f
8
- A+ U6 l- d/ A# C% n&gt; array11 q% i& b# R9 G8 `4 P1 _
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( i/ d9 i) e- D' A8 g' ~9 M& q, b. X( B
3 P2 |% m5 @0 o* h, Y$ y8 {$ Y
//取最后一个元素/ f+ r  V: S* s" H$ o9 Q$ s- d
&gt; array1.pop()
8 @6 E7 P9 C* l. v* {'D'
) e7 Q9 E, }* s* A&gt; array1
% T0 o8 N8 o& d(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']6 Y+ |9 ]& z" n: E. T9 h
//取头部元素) m( o# H+ R# X3 ^
&gt; array1.shift()
8 V  C' {' y$ a3 W; P- X0) k$ m1 S8 p( F. Z; p3 _
&gt; array1
. K0 n$ g/ S1 O8 v9 ?  N9 g- X(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], s# J  x  U% Q/ V4 |+ ~

! s% V) u( H9 n) v//切片, 从0开始顾头不顾尾9 j3 P; k- p0 s! [, j6 m' U3 W
&gt; array1.slice(3,6)4 x; t$ ?1 g5 e8 T9 k3 w! ?
(3)&nbsp;['a', 'b', 'c']9 x: n" @- z( `' }1 d
// 反转. j) N0 H/ o3 L0 w
&gt; array1.reverse()& U  P# H% L/ W& G# l5 w
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]$ i$ y% p4 ?7 G% ?0 _% E7 y
// 将数组元素连接成字符串9 O1 t  n% K. A" ~
&gt; array1.join() // 什么不都写默认使用逗号分隔
# \* l. t: r# L- e1 F$ k'c,b,a,3,2,1'6 a7 i. q: X/ f% Z" a; W/ Y7 C
&gt; array1.join('')9 y3 c6 S, N) S& g
'cba321'/ L/ L# B6 s8 g6 v1 O
&gt; array1.join('|'). e8 i1 V& V5 e7 Y
'c|b|a|3|2|1'' ^6 E# W8 E) @" i
& Y7 T* Y/ E1 ^# T9 k; F- A
// 连接数组
7 Y* O+ Z0 Q: m. u/ D2 }) H- R&gt; var array2 = ['A','B','C']& n6 I* I2 ?) I
&gt; array1.concat(array2)" P& I3 {6 }) S! i; j( N9 T$ H
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']& U; }% l* F& B( i( g& o% A

/ B& b1 g/ z, }// 排序
, O1 Q# d  s' f5 H/ H& u" _& x&gt; array1.sort()0 G4 ?2 B7 m9 L7 u: z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* Q" D' }* h' |, M4 F) i, R: j* G9 T
' ~2 |# t) V* t- q* I// 删除元素,并可以向数据组中添加新元素(可选)5 n* |( i+ z8 e
&gt; array1.splice(3,3)  // 删除元素
  ^9 W9 l  ]4 {: N" P(3)&nbsp;['a', 'b', 'c']: [9 f( V( @' M+ H
&gt; array1
0 V- ]* U" ]0 P9 u4 J) g6 q(3)&nbsp;[1, 2, 3]
6 W# \8 W) v+ x. Q8 J& N, h4 Y# T&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素1 y& Q' \8 `3 v& ~* x
[]
1 m7 S3 T) Z  n* G0 t5 X&gt; array1
* }: L- \5 q& b. z! N* Z(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']/ b4 w9 j/ H/ g" Q' F2 b( I
' _0 B0 r4 E: t& g9 }
/*
9 ~# p5 I' p1 e$ I% o# a0 Xsplice(index,howmany,item1,.....,itemX); u2 ^) }8 h: V4 q
index:必需,必须是数字。规定从何处添加/删除元素。; s: x, g- L7 Y" U+ y2 e( V
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
% |# M# R/ o/ g* Y5 v) yitem1, ..., itemX        可选。要添加到数组的新元素. Y: f0 G) @2 l" [: L2 F
*/
* X1 \; V3 S4 O* q4 v
, J2 M3 w3 s( i/ Q: R! C* q# u// forEach()        将数组的每个元素传递给回调函数
/ S& A7 v( ]% D, M: a5 d+ L5 L% b&gt; array1.forEach(function test(n){console.log(n)})  p+ P+ |  Z5 ]. I' S
1
! p' p2 t- c3 b" M: \ 27 G  q% x( L' w( z& A2 {
3
9 f" ~5 N4 P- u; W& y A% Z: k( g& B2 b
B
/ v  n, H9 O. [, T" g C
: F; M, f& m( v" E7 @5 i. W/ p// 返回一个数组元素调用函数处理后的值的新数组3 z6 ~; E- B1 h5 g) Y) a8 k1 q
&gt; array1.map(function(value){return value +1})
/ G8 `9 |; \+ f5 b(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
8 Z6 [' ?8 j9 R  k# M' o/ j3 f</code></pre>
9 @1 k: p. O0 L' d' B<h3 id="24-运算符">2.4 运算符</h3>, K" u/ B2 q$ C& G2 m6 q/ e
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
* f* k1 u+ G2 f$ W<p><code>+ - * / % ++ --</code></p>+ ?" L: Z! k8 ]3 f9 w) j
<pre><code class="language-javascript">&gt; var a = 6
1 m4 n* Z5 K+ I$ Q. ^3 G- R7 l&gt; var b = 3
/ Z" K1 c" Y" V- N+ P// 加0 \9 _* z3 o" c
&gt; a + b
3 b2 g6 A" ~. Z9
& f' D5 Q" ?3 j, G4 g// 减6 {4 }2 m1 I+ o- j7 `
&gt; a - b1 |, C* M7 u3 ~
3
2 j% x) b2 O6 Q- N3 q: z# V// 乘9 d0 L5 q- B; X" H* @3 L) v" @
&gt; a * b4 i. F8 |% \: O2 e0 |
18" _' C! p! t5 D, h# U$ F5 m
// 除
& g$ X4 D- {7 W& I9 ^  z! l& V' J) W& f&gt; a / b, Z7 X/ x; }; h
2$ r$ d% [# v- r
// 取模(取余)8 U# ~, Q! j. F/ h* \, j# s  ^; u
&gt; a % b
' j8 Z2 b! _' b0
) h2 L3 w  N' C, b4 m7 k, @# n// 自增1(先赋值再增1), ?% H# Y" T1 C! p4 H7 m" w
&gt; a++
: w. R, \0 G! H" `9 Y6* b  C# h- U) b, F
&gt; a6 n1 _/ n% T3 D/ W
7
, F, z- }7 {$ \. {9 V5 |' z// 自减1(先赋值再减1)
2 N1 b0 f$ P% |  d# Y- Y$ Q$ `&gt; a--5 V: R) A3 V: R: G1 a. W( X
7
7 s4 f$ e7 s, O( F4 H0 O&gt; a7 c. j# A" a" b( D
68 j% q3 J7 _& W
// 自增1(先增1再赋值)
$ U9 e7 K4 U9 U6 E: |&gt; ++a/ H$ z/ Z6 r! ~) Q4 R/ j" u# g
78 g( ~" L% ?: ~& `5 C( m7 K
// 自减1(先减1再赋值)% V2 X! G- a5 U& o+ H3 m& J  g
&gt; --a
; \% r, e0 t, s% K% c9 m6& e; T% _0 _" b7 D# ~
&gt; a, a4 E9 T- ?. ^* o3 I
6
) D" a, v7 j% t1 }8 e8 y2 ]* h" e- ]( J
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理4 n) r0 P% v; T, T1 d/ n1 N: c
</code></pre>
4 o" W! P! V9 f1 z! A0 \<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
  k0 B$ K4 ^$ s<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
: C! O2 J- `1 K+ O3 M<pre><code class="language-javascript">// 大于
$ `% ?5 p  ]8 f1 q/ P. ^: w&gt; a &gt; b* s6 {% ?# R1 ?! q5 ]1 O# b
true
; w2 f; o1 T2 J& [  H6 _( `  ?4 p' P3 r// 大于等于
" `: l$ l$ f' q( s&gt; a &gt;= b" p* y" e, h: C& w
true
5 _" b2 O3 s5 m9 T, W% f: f5 C) o// 小于
; G3 d8 e# P7 n2 C&gt; a &lt; b# t8 W5 ^4 ]3 d7 W" g; u9 _
false& Y$ F* A9 K8 k
// 小于等于% f/ h5 @$ O2 |5 Y& q. Q3 G
&gt; a &lt;= b
8 C* k$ ^0 b1 J8 ffalse
7 M7 y. c( o7 r2 d1 @( h( {// 弱不等于& E1 X9 e' C& k, n; q6 r0 s( c
&gt; a != b
+ @( ~3 E% c7 {! D$ c: A% Xtrue
" ?- X' [8 Y: `. F$ k2 V& N// 弱等于
; d  \/ U: e; s/ s" }8 y&gt; 1 == '1'7 D1 \! |4 a( Z
true. l# ~" a$ T+ N9 R- A  Y: b
// 强等于8 X  M8 k, U3 j! o! Z: A: ~
&gt; 1 === '1'
, V% ?) L7 e3 \. L5 }1 m' Mfalse
$ x; G5 @3 y: o& K# {5 _: I+ Y// 强不等于: F2 e: e& I( A& H' h
&gt; 1 !== '1'
$ b  C6 W9 R3 x: q- |true. d3 B, l3 i8 y7 z* k

/ ]# N4 o4 L$ G9 b8 k- F8 ~8 T, i( f/*
1 S+ S8 w% Y/ c" T. iJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
: R! C3 `. N$ s- C! W& L' C*/2 r: {: R2 b2 V. B/ }* D* R+ ]
</code></pre>
% Z" n: A( U6 ?) r3 _5 H2 Z% S1 @<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
  k, V3 d! N' ?: V  |- m' L% h0 M<p><code>&amp;&amp; || !</code></p>' G3 @& @3 ?. a, q( v
<pre><code class="language-javascript">&amp;&amp; 与
# |% W! h, v2 N1 Q6 x1 Z|| or ! z5 k, H/ ]- [! l/ }; v
! 非$ o) Y* {+ k6 O7 |
</code></pre>  t  d( z# S2 X) a" L
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>5 G" U8 M0 Q0 L: l
<p><code>= += -= *= /=</code></p>
- p1 `* o8 f; |5 _/ ^& a<pre><code class="language-javascript">// 赋值* I5 M1 b; `! p8 v" o
&gt; var x = 3  I6 M; r2 n, F" @3 P
// 加等于2 {3 v0 N+ G  U4 m$ Y
&gt; x += 2
* N/ G( C9 s1 h; K5
8 G* e  n! p( I// 减等于
  _2 q+ \9 g, w* p% T&gt; x -= 1/ k# a6 b8 C3 I5 V& \6 h. W/ {
4
+ q% z, \6 Y3 X) g0 Z$ ^: q5 g// 乘等于
0 ?  C, p) o4 m8 L2 C0 G/ L&gt; x *= 2
" [: p" q$ L# [1 o$ ]6 \8
9 k1 W: M7 w, \$ K// 除等于
! a* h1 D# G( x! G4 S# `&gt; x /= 2  d7 ^5 Z4 ~/ y1 O* y; S
4. K* k; R) v5 ~0 j2 x% e8 S: c
</code></pre>. d* V9 R9 @4 m/ _& i
<h3 id="25-流程控制">2.5 流程控制</h3>: T, \$ l2 V, }8 C
<h4 id="251-if">2.5.1 if</h4>- p, ~. W% V6 y# N
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}1 e2 Q3 u3 c& O- ]& m
2 T, v  v- n1 X2 S6 x( |' v* c
&gt; var x = 3- b' t/ G% i, a# a$ ]- X' c* k' r
&gt; if (x &gt; 2){console.log("OK")}
7 J6 c2 l1 i, C$ M OK
# t/ K& q) b7 `4 ^2 q: y8 K  N3 I  d; J* a6 T1 w& r" u- Z. u7 Y- N: @
2, if(条件){条件成立执行代码} 3 v' ^6 ~4 ?5 X; G$ w4 Y) A
        else{条件不成立执行代码}
, r: o' P, H5 b# w3 o& K' H8 ]  C; T! e+ r$ B
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
2 t( I. P/ D8 N& D' W8 y'NO'
, D' n( K4 C* D2 F6 @% ~) j0 v3 @! }  ]  M5 G) D$ g$ I
3, if(条件1){条件1成立执行代码} % K3 b0 O/ U" w9 B7 u2 d
        else if(条件2){条件2成立执行代码}
, u) v/ E1 H7 ], G) ]/ p8 K    else{上面条件都不成立执行代码}7 m2 ?. L1 ]) l- U+ a1 }

' u. I  x; G$ D; F&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
: j; y' _( |* I# a: b6 g/ a# y Ha: I$ [# z% X) H9 a
</code></pre>
* u% k+ q  ^7 X<h4 id="252-switch">2.5.2 switch</h4>* e; N: ]  ]$ h' \
<pre><code class="language-javascript">var day = new Date().getDay();* @3 ]2 w& l+ V9 R
switch (day) {  ~; w; v- K% J! b7 @
  case 0:
5 l4 {7 _4 U9 Y; I, m5 H  console.log("Sunday");1 j2 d  k0 D0 H3 O$ }
  break;" v# X- I" ^3 q8 l# g& n' O& A
  case 1:
; a; e6 j+ P1 ~  console.log("Monday");, w' S4 g+ q3 g, a5 @5 i& N7 c
  break;% S2 O+ c$ U' Q/ V& w- X: N3 b
default:7 ~) L+ K# U8 l4 Q/ ?
  console.log("不在范围")1 {+ f- d" ~; T/ ?
}
+ u% I3 y0 F0 v! x* D" A 不在范围  l$ n# }7 ^6 d0 X) w5 l$ E, T
</code></pre>
+ m+ K( X5 H8 d+ J( [<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
) p/ J  o- |4 k, w% v<h4 id="253-for">2.5.3 for</h4>* t' v9 O8 N; v0 ?: y/ N9 Y0 R8 U
<pre><code class="language-python">// for 循环
# ]5 I$ E5 S, A: ?; s* S        for(起始值;循环条件;每次循环后执行的操作){$ T, {, j( K- [7 `  L- M' T6 u
        for循环体代码
& a9 t% S  ]* p6 {4 x    }0 m/ @( O6 ]; S( o( `  [. k

& f5 p3 {0 G2 J8 p) r: I% u9 Qfor (var i = 0; i&lt;10; i++){# W* S! v: V, _; I! u+ f  P: n
    console.log(i)
+ ^6 U! n1 E% y! ]% f) p' F* n}! m% T. ^5 ^' ]' a" o2 }; ]4 y
        0
; \; C1 P+ K0 c7 w3 J; [0 y* s        1" ?* \8 T# E; c6 j2 r
        2
3 I; a2 ]' y' t8 t0 e. B3 G        35 q& ?+ ^+ Q" T8 Y2 }
        4
. ?. T9 L9 y( C2 S        5
0 `0 M7 a6 Y$ S5 k        66 x4 y: F3 m+ g
        7) V( ]% t  Z  v
        8
- \% N$ c6 q4 s1 j' C; f        9
3 j& N& {$ R+ I3 P! b# z+ m</code></pre>. x5 I( E: \  o, I. }
<h4 id="254-while">2.5.4 while</h4>+ f) O1 [7 [2 @9 V* x# F- |0 Y
<pre><code class="language-javascript">// while 循环, i' X% c8 z- H; W% g
        while(循环条件){
0 l4 Z! A/ a* M. l2 v$ i        循环体代码. g: D0 o( ~4 N/ b% Z+ K4 z  w
    }+ i( X4 g# e' E2 t0 m) F
9 ^. S/ Q# z9 s! [' c& `2 R2 F8 O
&gt; var i = 01 ^4 R3 ?% f% K& U# j
&gt; while(i&lt;10){) Y" t( n! Q2 ~: u' `* U: r( ~! u
    console.log(i)
) j% i( F; p- ]; I    i++
" E$ L, ]! b0 N2 @% D}$ i! q9 X) W4 L( `7 l. V
0! S2 R! g" q& v/ p8 c  b4 q
1
' o, O$ A, u2 P 2; k6 ]2 {* ?0 H$ j8 N4 |
3
* l% g. }2 k) J+ I8 R) k: P) R$ ? 4
4 p0 T. o3 g/ S, f" [  E" _. H: N 5
7 f% L8 t: ?# i# B$ a  V3 G 6
6 ]1 q' E! U3 A  Z$ u 7
0 W- ?5 ?) ~1 L% ~ 8
4 \$ M$ o' f+ y$ Q' W' ] 9
3 f$ L# E1 E! @2 p</code></pre>
6 Z- O& Y+ }$ S! X% K8 I9 p0 O<h4 id="255-break和continue">2.5.5 break和continue</h4>4 I! s; S! `/ V  Q2 S
<pre><code class="language-javascript">// break7 i; j3 O+ F- }0 m
for (var i = 0; i&lt;10; i++){# T2 y8 K5 k. L8 R5 z  J
    if (i == 5){break}
' b9 Y& S0 r7 s0 t+ _) Q2 w; z, Y    console.log(i)
8 w) ^; ?1 G- x, e8 E* P  g- n2 j}
3 z1 {& [" o( M! ? 0
! @' o' x* }6 d( K7 L6 J 1
  e( P4 {: k0 ~# {& s) c 2" ^9 Y! F: b# D& `
3  V/ H2 I. s, s$ a
4
+ w: }( h! ]* I& t// continue
! k( \) A9 R. e! pfor (var i = 0; i&lt;10; i++){
3 m# t3 A! _. r! t    if (i == 5){continue}
$ K+ m7 J+ z, e9 |7 h7 Z% ]4 r    console.log(i)
2 v. q: U7 l$ h1 S}
0 j+ c0 N$ j1 S0 P9 u 0# a' P3 l/ L/ ^  G+ W6 Q
1
. M1 x" F4 `4 i* w' r# } 2( F. W- v2 D; P: q: b; ]
3& A7 w# z* U( F
4" C1 Z$ d2 |, ]4 X- c! h' v% C
67 b7 a5 P" c) x; d% X9 Q
7
5 w# J) z  C, g2 [* |- g3 S& l" u# v 8
' k/ \. D% Y7 j. I% R8 ? 9
/ I  M; h+ l; q" Q; L
2 P( D9 Q% n  c</code></pre>; ^/ i- X0 B4 ?
<h3 id="26-三元运算">2.6 三元运算</h3>0 r  L3 ?$ G+ B* D3 R
<pre><code class="language-javascript">&gt; a
0 k( |, R, @7 P- \2 ^% Y6
  F4 K9 y9 u" g% c&gt; b$ e; `) L0 x& r) i3 ]- Y
3
0 n: [+ d8 l4 k9 h& n/ O' e4 d$ V  k0 e
//条件成立c为a的值,不成立c为b的值
* A+ h) W: g- P$ Q) I&gt; var c = a &gt; b ? a : b
4 w6 X6 M* s5 ~0 b6 X" B4 \&gt; c0 Q& h* q8 L5 t3 n6 \) G' u
6
" O3 o! E  A9 y+ ]; A) R9 M/ m& i: g9 S/ H4 O7 N. N$ q  Y$ j
// 三元运算可以嵌套7 v4 d1 g4 t6 R  _6 Y1 i
</code></pre>, {5 m% A- d% W! P( Z+ F
<h3 id="27-函数">2.7 函数</h3>+ d* @& O% N  `
<pre><code class="language-javascript">1. 普通函数
2 y/ e" ~' A9 J% w; r&gt; function foo1(){
9 y, X1 y. |8 E3 _* G. H6 q    console.log("Hi")5 F: {" y0 N: I4 c2 m! z/ ^
}. m/ B  q* o2 y. I5 J

" C, U5 C8 @6 k0 o- H# M&gt; foo1()( Y9 p" B' k0 ]# l3 O
        Hi8 o, a) _9 E. ], R% ?
2. 带参数函数
& O- N: T7 \& c9 B& g&gt; function foo1(name){
9 c( f9 T$ {+ ]2 r( O5 mconsole.log("Hi",name)
; l7 R$ X1 L+ c# e7 B# ]}
% W. Q. x/ N+ P) V' [3 z/ i
$ b! K' ]: p; q$ t) \&gt; foo1("Hans")1 x1 x9 `+ e/ E7 F& |+ [
Hi Hans
1 U+ S2 S7 U) K% k9 @
4 }4 R# [4 z9 K# R&gt; var name = "Hello"
  ^0 L/ ^( {9 p&gt; foo1(name)0 x" y) n  V; W$ Q& x9 l7 C; q9 ^# t
Hi Hello
' z* y4 `  A) H5 R8 }! k
" d) Z/ L# x1 ?/ Y1 {; F) P. v5 [3. 带返回值函数7 y7 ^3 N7 y0 m
&gt; function foo1(a,b){
# C0 |& V& M6 F* ]5 C5 M# P8 P        return a + b   
8 s9 z8 G. X* G. p}
& @" N% D. X- R. q&gt; foo1(1,2)
' T2 _; r1 B0 m. J1 i8 f3" {- @* v( s4 F7 [& ]7 d9 _) u8 w
&gt; var a = foo1(10,20)  //接受函数返回值
4 ^+ q8 Z1 k: l: B&gt; a
; S  f5 L3 ~# `, s0 |30! [/ n+ ~$ e; g: Q- R6 S

) j+ _8 e$ z- T4. 匿名函数
$ x, j4 {1 N" R# j0 ?&gt; var sum = function(a, b){/ |+ H8 v& x3 y6 X- a6 u. p) b( r5 y
  return a + b;
1 M6 g; @8 W' q}1 D) o# L/ ]* y7 f8 ]/ {, n
&gt; sum(1,2)
/ c; C; ], Q, E+ p( y' H- u3
8 b/ X' B4 g" ?5 W: i* B: N& N6 t2 }, Y8 B) m7 }3 I" T2 l
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
7 m% R9 T' P8 t0 c0 m&gt; (function(a, b){
! O- W; h/ B' V# P' ]8 H. q9 Z  return a + b- j; D4 e- Y9 u
})(10, 20)
1 F' e$ s4 b7 @) p4 |8 p1 R: L30
! o9 T5 Z' f! _! F: `$ c- _
( `; B$ f& ^* C  R5. 闭包函数
9 R" k& m3 K+ Y% m// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数" I' I# s0 N9 d- j' R
var city = "BJ", ]$ u( I0 O9 x, ]
function f(){
) M' y8 F+ P3 w$ [- {    var city = "SH"6 [- M, l0 x& j  q
    function inner(){
1 T5 f5 O8 R% j- ^; x        console.log(city)
% |- _$ f. E" ^; V( @, G' s    }
9 Y: ]  i( I5 M/ I, L1 o- D/ t4 t    return inner. G/ m- p, S* U4 P1 t# A
}
' Y5 Z& i2 Q- [! O* q4 Kvar ret = f()' E' R' a6 p- x, K. n; |8 B
ret()( O1 r1 U& I- Z
执行结果:4 l( i. `' j2 U0 B
SH$ U- x$ C1 n7 [# j& c  b4 y

+ m7 g' g. ^3 e3 C3 s</code></pre>& m+ E: }6 T% ~9 a
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
  x8 \) K' K  x  G! f" o1 l<pre><code class="language-javascript">var f = v =&gt; v;, p" D0 A9 ^. V$ \4 v, X. p$ }& g
// 等同于
# u% J6 d) t, I# q7 K: B, [var f = function(v){
6 H/ R3 @: h7 {) S1 t6 V  return v;
$ V0 R1 F. u9 g- [( f  Y}, r7 Y) R$ \6 ]; e& l
</code></pre>
) P- S) F  ^9 \0 f3 v" J<p><code>arguments</code>参数 可以获取传入的所有数据</p>' q0 Q+ g, n; ~0 @# ]: ?4 b
<pre><code class="language-javascript">function foo1(a,b){
  K# x# y0 U7 T+ s    console.log(arguments.length)  //参数的个数 + x. z! C9 D/ m0 S8 O
    console.log(arguments[0]) // 第一个参数的值7 O) ~6 V: d2 |# t& G
        return a + b   ! _1 c1 S% e7 ^1 O
}: v( Z/ x% @% g# L$ \
foo1(10,20)$ M4 i6 ]/ m  t/ }" g' d+ z
结果:3 s2 F: \/ A/ q8 x+ y& X
2          //参数的个数
$ o  p' d! Z7 l10        // 第一个参数的值  K; W% j% D! O: @
30        // 返回相加的结果
. S% V! w' v0 B! I8 N3 c- x</code></pre>4 m; {" i9 a2 H% u% f7 k0 Q6 r
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
4 Z+ @+ j& [% B, F. s<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
; b9 x$ Z$ ~: V9 x<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>, a! s/ c* U  C! y1 n
<h4 id="281-date对象">2.8.1 Date对象</h4>
9 }" c9 ^  L$ Y& k<pre><code class="language-javascript">&gt; var data_test = new Date()
/ o, e6 k0 H5 |& A# s&gt; data_test4 [# Q. m" d" V! Z: ~. |* o- A9 a. h
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
, ~; \* M% |! U2 R9 |) h&gt; data_test.toLocaleString()3 v' A2 M8 w! N
'2022/2/11 下午9:44:43'$ M! z8 r; ^* f5 x; g

: M8 P, ^- |+ r0 o& \&gt; data_test.toLocaleDateString()- h+ Q  d- K3 h
'2022/2/11'; b: k4 V+ b% r% E8 p5 _. w: x! z

5 m9 \" v; y) F/ T1 _) D+ {&gt; var data_test2  = new Date("2022/2/11 9:44:43")
8 d2 T' L6 y. L9 X- ?&gt; data_test2.toLocaleString()* T; d7 F# a9 q) W
'2022/2/11 上午9:44:43'" O# V: t2 H. C2 y: u& b/ q6 O/ R

+ C! [+ ~* ^; k" x" C) M5 ~& z/ e// 获取当前几号. ^# e- Z7 ]# W1 ~4 i0 d
&gt; data_test.getDate()
/ A4 w7 a" r9 ?" V2 W7 N3 X11$ a9 P" ?; ~$ w- ?0 y* z) C
// 获取星期几,数字表示
7 G0 D  ^( @  B  k  x&gt; data_test.getDay()  
. j: q% H" c' t/ H2 g  m' Q9 X5+ v! N: V9 `- q: b& {& G. L' q1 O
// 获取月份(0-11)
& g5 |0 y. l1 n&gt; data_test.getMonth()
1 _5 @; k$ i% t7 R: x8 O14 ~& b% R, Z; t3 X1 ^) N
// 获取完整年份
* c+ v; p- A- u. a&gt; data_test.getFullYear()
7 r5 V  `% Y# W2 ]/ g20222 D' \! y0 H7 |* F7 u
// 获取时
6 n2 a7 k5 p2 t! W# b&gt; data_test.getHours()
" Q# t; n& t! g) C7 ?4 y* l21
; K% j. `* B( P9 ?// 获取分& J' Y1 X/ j8 f8 X, U
&gt; data_test.getMinutes()# f; n9 `. F1 K' ]& g
44
8 d6 j$ X$ m+ A$ M7 v// 获取秒
: b* |: w* f7 y, Y. V# e/ _) i&gt; data_test.getSeconds()3 n, c* n* V1 Y& E2 m
43
' n. k' w( A  Y6 _- i! a// 获取毫秒/ K7 D0 E' Q  h+ P  t' U1 ?
&gt; data_test.getMilliseconds()4 y& {3 B# ^. f( X
290$ V  i' r3 |$ \3 e& C
// 获取时间戳
$ X6 U2 [" Q" ~6 D" l; D" H&gt; data_test.getTime()
9 o" `) ?. M5 Y% w. q/ M1644587083290
3 d7 K( h; e  ]& \8 ^# N</code></pre>9 C2 h0 S, ~6 f$ R; @
<h4 id="282-json对象">2.8.2 Json对象</h4>- ?: C! \+ V  t# K0 Y7 C
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串; J8 ]1 H6 U5 S3 c% r- M* h4 |8 n% u- X& q
JSON.parse()  // 反序列化,把JSON字符串转换成对象
3 q7 B& c: X+ @+ a  S, M2 z
1 g+ B+ i# N9 m& _; e// 序列化5 k  d$ u) o' D$ O4 d+ r; V
&gt; var jstojson = JSON.stringify(person)
1 A7 k0 ^/ Z; S8 X* J5 i& h4 F5 x&gt; jstojson  # B; t4 C- o; H6 m2 v
'{"Name":"Hans","Age":18}'. E' c5 x& l- v0 F% ~: l1 S

5 t( z8 r8 k! Z% Q6 m// 反序列化: t" {4 g! f+ C9 j& G& F
&gt; var x = JSON.parse(jstojson)1 n1 ]6 \! ?2 T# E9 c6 d& j' W1 Z( {
&gt; x% Q+ X6 k. o. `+ {* w1 A% s
{Name: 'Hans', Age: 18}  F7 u: D' G5 B3 @8 o
&gt; x.Age
1 u5 l3 O* n: n18# s) m3 x# E1 V1 V4 A. _& R
</code></pre>
! z! V& S- x7 O" I( M<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
$ `3 I9 |* N( ~9 m) y<p>正则</p>
. F, @) D5 k8 N$ e1 k<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
7 J+ O1 r* ~# i' z+ O6 q+ {&gt; reg14 D' y5 v- G! O1 E
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
; X: f* U0 [( }4 C) f$ I6 L8 n&gt; reg1.test("Hans666")
4 {4 E/ Z# B. D. Ftrue3 L; X: h2 {) q

8 H' P) H' p5 B&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/2 g! J# U9 R9 g( i
&gt; reg2$ }/ V1 v- X3 f  q3 T" B; g6 c
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
  B' s1 o- F- }0 a9 }% T&gt; reg2.test('Hasdfa')
; X0 P5 B( q9 D! o2 w2 p* Ytrue0 b7 `5 {4 ^4 t1 c* x$ x
- J1 e, n+ U/ A" @) k/ a
全局匹配:
5 I$ C2 {- h# P3 v8 C) a/ w' y6 X&gt; name
' ]$ v! r" U; E'Hello'
: x, |( A1 m1 ?# N# Z&gt; name.match(/l/)+ N  [8 j+ n4 z) D' d- I" S6 B
['l', index: 2, input: 'Hello', groups: undefined]
7 _5 l$ ^2 G6 Y% W+ o9 }! H, d. A  y. Q6 J
&gt; name.match(/l/g)
: F/ f1 _4 t3 l% [6 Y% [(2)&nbsp;['l', 'l']
9 M$ V) f- \; y# Z// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
% T# |" M  ^4 U7 O5 w5 a# F5 n4 F* s) u0 U, S
全局匹配注意事项:
( G! y! p2 R$ V&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 d3 Y8 l' ?7 b# |
&gt; reg2.test('Hasdfa')- c3 I! {, b2 ~8 _7 ~9 M1 e1 t
true% h2 }# D8 p% N( E" [% {# V
&gt;reg2.lastIndex;
7 Z' E! K  B" b' F7 b6 ~2 I6
+ K2 ^) a/ F. @' G' F% _&gt; reg2.test('Hasdfa')# s3 w/ v0 ~9 v9 S5 j* L
false  ~1 V% G) R9 u
&gt; reg2.lastIndex;) v+ z- W/ I' O
0
% S/ N2 \/ k2 G&gt; reg2.test('Hasdfa')
1 O& n  F* _$ Ytrue0 Q4 W7 H7 i% g- o  C
&gt; reg2.lastIndex;
5 b4 H. ^! j7 m; ]8 l3 F" }; A# B6
0 M) u9 |" c: e1 a8 j&gt; reg2.test('Hasdfa'). V6 G% G! J# {7 x6 j7 f& z, y' c' M
false
" c% R& C$ J& [&gt; reg2.lastIndex;
; D/ q+ `2 [1 l08 x* `/ U( |6 F$ d" q/ u
// 全局匹配会有一个lastindex属性
1 k* |8 q' K9 W; s5 {# h&gt; reg2.test()
$ J( }: a5 \. F2 K5 W2 Q, z0 ffalse
0 M3 e! |9 B. ]) @. ?' y&gt; reg2.test()2 D: U/ }6 \: z* c
true4 \# q# i) ]) H
// 校验时不传参数默认传的是undefined) e: w5 @2 t8 v+ c
</code></pre>
) @1 P8 A" X! ^5 N<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
6 _! j% y) v( i8 z+ s+ Q<p>就相当于是<code>python</code>中的字典</p>( S* Q, `8 ?0 P) h! A" L9 s
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}) w7 S, D' {" w/ z# x! j
&gt; person
) {( M3 t6 D, {3 K  q: u{Name: 'Hans', Age: 18}2 w5 @) |3 w" c- N5 S2 Y
&gt; person.Name# C* `5 L9 T( \: _+ Y
'Hans'" j9 B$ s; S) Z
&gt; person["Name"]
% T" b3 I; o; [' _'Hans': b, d4 d  e. {9 [5 A4 S

. q- r$ Z3 \1 a, W* M// 也可以使用new Object创建6 v" S% ~$ f$ n  A+ }
&gt; var person2 = new Object()
; R2 K8 p1 E& G. M5 ~&gt; person2.name = "Hello"2 h! M* j% [, j( j; T0 P% m* Y
'Hello'
: |+ _) [0 t- ]. d$ M2 f" {  ?7 y&gt; person2.age = 20$ r9 Z# P3 J) D8 N; y# m9 E, r, t
20# u& S2 j+ N; v% ^+ C
</code></pre>
' y2 B! D6 O$ X5 Z! ]/ L- \<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
/ s! d: e" q3 G7 m/ R<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>& o; g4 U2 |, ^6 I+ b2 t
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
3 d8 {# L: L1 Y& L- I8 a$ Z* C<h3 id="31-window-对象">3.1 window 对象</h3>( T# |& R) R% i) _
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
! ?7 u0 q  V- @) {  [% [9 W- W4 n<pre><code class="language-python">//览器窗口的内部高度) }4 y, d. G0 ^) l! I6 E
window.innerHeight 1 @' o% U3 W# C  V1 w6 N8 G, @: {
706( |. N! R) t: M. K' [/ f# ^! U( h5 @
//浏览器窗口的内部宽度
, N) F* O$ ~  p; H& \window.innerWidth4 g' b. l  G( ~7 n( C; h( P9 |) Y
1522
" W% L$ z5 i/ Q1 Y// 打开新窗口
4 u8 A% G/ r; W" o* Uwindow.open('https://www.baidu.com')" P( K; m% s' t" b
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}  V: @9 E( J! ^  d; r: X8 u
// 关闭当前窗口- M( ]# i+ N) k: ]* y4 }
window.close()
! N7 j2 |* X/ b5 q% @! ?//  后退一页
) n" h0 X$ [1 H8 o# Nwindow.history.back()/ ?0 q( V$ i& W: Z* z) \: n
// 前进一页
% c# \2 @/ E4 H3 hwindow.history.forward() # K' _0 w( k% _6 X0 S9 E8 m2 z8 i& J
//Web浏览器全称
3 M$ x0 S  t$ T% x. z  ]window.navigator.appName
4 ]% f! h% _2 x% X- O7 F3 _'Netscape'9 [: R) a( K, W8 B3 w+ }8 @* `3 i
// Web浏览器厂商和版本的详细字符串9 Y; W; }+ I7 q5 i; l- l& G6 t, y/ m
window.navigator.appVersion( n7 O7 R+ |2 o2 \4 s* G1 a- |
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* ?2 G% ?  D+ y) o9 c
// 客户端绝大部分信息
/ S* T! H2 G8 D7 ]5 M2 {9 Y, h6 Xwindow.navigator.userAgent6 [/ Z' s5 G0 h/ k: w
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
: a0 ?0 v4 K8 c( ~* v5 }// 浏览器运行所在的操作系统$ {( h+ t/ C7 ]9 ~
window.navigator.platform
' }6 X% B& D8 A6 \* {'Win32'
; K6 A4 Q% c! \9 o' `' C( N! T; l- \6 N: v& |
//  获取URL
* f" R0 m% A8 V9 q+ Wwindow.location.href
. N: V& M# u0 L1 P# l: \- V// 跳转到指定页面9 w7 L7 \4 D7 k. D1 l! \
window.location.href='https://www.baidu.com'1 E( R! l* g5 j+ P! u( G
// 重新加载页面4 f- p$ N9 c7 a! M
window.location.reload()
8 t9 c5 b, Z) {1 {1 f</code></pre>
3 y: ]' E% T4 S5 j# ?<h3 id="32-弹出框">3.2 弹出框</h3>
) G8 ?2 n- M" J  C, l<p>三种消息框:警告框、确认框、提示框。</p>
/ |- B  V& O# Y; F6 m<h4 id="321-警告框">3.2.1 警告框</h4>2 n; K3 C0 W* G$ n% W9 t* e& a3 h2 _
<pre><code class="language-javascript">alert("Hello")$ P$ _2 y- J0 ]& R) M& u% }
</code></pre>4 M1 [7 h+ N, z& @5 M
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>: Z0 S( t) I( L& E& C6 W+ K3 c4 O
<h4 id="322-确认框">3.2.2 确认框</h4>
% N- d& p! F8 \8 F5 L) N<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 [+ V3 N; c3 T) A% \$ q) k" R9 [( w<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
0 y" B5 ]- {1 H. Btrue1 x) R$ b: L+ A% v/ E
&gt; confirm("你确定吗?")  // 点取消返回false! ]6 V8 }5 k& x1 B
false3 M  @( o6 G0 S$ k5 H
</code></pre>( u: ]' B$ c5 L) k* n) p5 [
<h4 id="323-提示框">3.2.3 提示框</h4>: C9 l( P4 Q8 F& A% L
<p><code>prompt("请输入","提示")</code></p>) w) y4 A. I5 t  F) W/ r
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
3 Z4 P5 }( H5 {! h0 t( `& X+ {3 o<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>5 H0 ?# r4 v, w8 X
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
& o: R" @& P8 n. U<h3 id="33-计时相关">3.3 计时相关</h3>
% c" v: T: |5 B* N7 Y/ c. w/ i4 W<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
* x9 V+ d6 Z$ X/ R. d$ [6 g9 q<pre><code class="language-javascript">// 等于3秒钟弹窗
9 [% Z! v9 ~" [# j4 j6 xsetTimeout(function(){alert("Hello")}, 3000)# X9 [9 p" `8 j
1 \: ^( }! g3 t( r8 r" C
var t = setTimeout(function(){alert("Hello")}, 3000)
: f( w3 D1 @; f7 k  t7 d/ n# _6 Y! z' F0 O
// 取消setTimeout设置" L6 A( C7 Q* \, _
clearTimeout(t)+ z, x% M  S' W( [: d: j6 w* Y
</code></pre>
  u+ B' w, z+ X+ ?4 f. X8 d" t<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>( W" k' E, e* H2 |; ^+ [- s
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
# Q) B9 U7 q7 Q; G<pre><code class="language-javascript">每三秒弹出 "hello" :5 k3 g, A, h3 H2 G2 h; s' y
setInterval(function(){alert("Hello")},3000);
+ v: f3 r0 `# j3 u2 p( C' p2 Z5 [</code></pre>
2 i: o! i0 u: O+ }: k$ C<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>! d4 q2 m; W5 J0 p4 A4 ^# {/ I) [
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
% j! N, z) k- p, X7 x//取消:
$ s) v7 V7 g, w9 c4 X; CclearInterval(t)7 W3 t; d' H% m$ k2 Y$ a
</code></pre>9 C9 {: B4 n: }. v: K

4 ]6 P' y* {  l  U
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-1-13 10:53 , Processed in 0.072295 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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