飞雪团队

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

前端之JavaScript

[复制链接]

8032

主题

8120

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ W9 U4 b' L' i8 u<h1 id="前端之javascript">前端之JavaScript</h1>
' Q: R7 G7 |  ^5 U: \: Z2 _0 d<p></p><p></p>: d/ t& B# O$ B& w$ \/ s) S% ?
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>4 l3 _0 E/ w2 n  t
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>6 a- v2 j% x; q/ d2 y# `. ]
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>2 d9 c: Q) s. G+ q
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
' p# g9 Z, x+ r5 \. J# s3 p它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
6 [5 b* E9 f/ r: s: J1 C<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
" T: [& X, u3 \: P( J" t4 v# k<h3 id="21-注释">2.1 注释</h3>
( M* {5 y7 Y' `' P<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>6 D: A8 u* f0 {9 c3 V
<pre><code class="language-javascript">// 这是单行注释
9 U0 }% `& y: K8 n4 s1 t$ B% @& t8 O3 @+ Z1 X
/*, i, W: Y6 \, c% e
这是多行注释的第一行,, k$ H, v0 A+ P
这是第二行。
' i  ^2 S) q* R2 J# Z' J/ o*/" @# T+ l0 |8 ~; G: B% U5 u
</code></pre>7 p' h7 J4 S* S; }& P% s: \
<h3 id="22-变量和常量">2.2 变量和常量</h3>4 ?2 n. z0 \1 e' t' `
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>! `8 d$ {( L5 e4 r
<ul>
. O* ^1 Q) u/ n: ]<li>变量必须以字母开头</li>
+ Y8 q; a# D# A4 K; @; A& u<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>( I% W6 j" q, L9 L/ z) \8 H5 Y
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
' F6 O$ P! e  j2 R1 G' z</ul>
: P/ _9 ?$ }* E! N8 Z9 M<p><code>var</code>定义的都为全局变量</p>
& g. e# A$ j$ j<p><code>let</code>可以声明局部变量</p>3 G3 c! b! L4 e' z( w% }
<p><strong>声明变量:</strong></p>
' a* I( l( s3 g9 D: s7 z% e2 n<pre><code class="language-javascript">// 定义单个变量
5 i" s( j, a  e' Z4 {- R&gt; var name, F; S- p# G7 Q! ]
&gt; name = 'Hans'7 v4 Y% n) K9 H( o9 U
//定义并赋值
9 a6 [/ c9 R2 Y3 \, `&gt; var name = 'Hans'5 V) H4 o# k5 m* s8 V: }, m8 A
&gt; name* d- ]7 E2 j0 O- i2 ]: a
'Hans'
9 w9 C! J+ t0 q1 |5 Q
0 x7 |3 c4 N. x$ T. R% l% J// 定义多个变量' Q/ s$ I7 O( n9 b# {2 x2 y/ B
&gt; var name = "Hans", age = 189 x( l) Z' {- l/ _4 b, P/ ]' u
&gt; name/ c2 z; V- s5 y) B
'Hans': d( @; k1 x) n3 I5 e8 s, i
&gt; age# w- [2 [9 j0 Y8 a6 c
188 L" F* f# I$ c  @% ~7 L
& J+ u  E8 u8 y4 J
//多行使用反引号`` 类型python中的三引号
4 L6 T8 h$ {9 w3 ^& ?7 |" Q&gt; var text = `A young idler,* _- M4 h' _* U5 v" L) L+ M$ s
an old beggar`9 m0 I8 T0 {4 J; v) i+ `: K7 Q6 g
&gt; text3 R+ R2 s6 z6 ]& G
'A young idler,\nan old beggar'
4 o6 n+ S' B9 v$ y) x$ ~9 g/ W</code></pre>( H# Y% R% R3 `2 P7 ?3 Q
<p><strong>声明常量:</strong></p>
% `7 D1 ^( q' n6 E3 [+ ^<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 R& I7 k* u3 a" q. H, u
<pre><code class="language-javascript">&gt; const pi = 3.145 \. k6 C; i" [( B( r4 r) k
&gt; pi
: u3 u0 T! X1 B" z/ G3.142 z( x) ]; h3 b: Q9 B
&gt;  pi = 3.010 q# ]" Q; ]$ n! K# V8 `
Uncaught TypeError: Assignment to constant variable.
6 g7 S; ?4 m: u& P' ?! g    at &lt;anonymous&gt;:1:48 H4 |' \1 s' q8 h7 r0 t! G

( ]  @9 x; g. y' U1 n</code></pre>6 ], K" T' E1 Z4 M2 x  z
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>* e( B$ R  M2 u- L* H. l
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 `2 _) M; |8 c1 d<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>: [. K7 e* A. |
<h4 id="231-number类型">2.3.1 Number类型</h4>
' _/ k# a5 i7 K<pre><code class="language-javascript">&gt; var a = 5
; K* v2 T7 u, F2 t$ n6 @&gt; typeof a   //查看变量的类型  , w. G4 }" |$ ]& K
number: o0 B' r% l# m6 _3 C( i

% P' U5 _; k6 E* p9 p9 b% z&gt; var b = 1.3
' F+ q% G5 C4 B- G; _* Y, O5 \&gt; typeof b
2 a& E) R' B2 B0 V/ Gnumber3 E' N! f/ a3 }3 Q7 n" h- a

0 \# Y) E0 \8 K// 不管整型还是浮点型打开出来的结果都是number类型9 r" |* V( g  m# P/ _
/ a1 h& s: _/ R5 }& V6 ~' {' f
/*
; d. H  G$ j' C: E: p/ T8 sNaN:Not A Number- @! q! e  Z2 a0 f5 m6 s# r3 G
NaN属于数值类型 表示的意思是 不是一个数字
* \3 B8 ^6 X' L% W% u* k' z*/
* {9 d1 X  F7 E5 g% G
  h2 q$ o7 f9 d! LparseInt('2345')  // 转整型
0 Z( s! {" p5 b2345% h# |; m3 T( r) ?. ]2 @, I+ |; \6 Q
parseInt('2345.5')2 m% r: O9 q* y  ?( L
2345
% I; m2 o3 ~6 u8 q5 q0 TparseFloat('2345.5') // 转浮点型
, L; L' ?8 o5 `3 |2345.57 B( H1 v7 m8 R' i7 \3 ?. t
parseFloat('ABC')
8 X) ^, F) g0 ENaN' \9 H7 V7 o! b3 K3 m1 ]
parseInt('abc')
8 ~1 w, [: \7 e7 RNaN% d  s' r, Y* }  w1 F5 }8 ?( Y, P
</code></pre>
  m: {  O& G6 G6 F2 A7 t2 C<h4 id="232-string类型">2.3.2 String类型</h4>& R1 M) Z( }) F( p0 }
<pre><code class="language-javascript">&gt; var name = 'Hans'
' @+ ]3 r5 `& h&gt; typeof name
( w( Q) n; ^+ T0 n& y'string'( L9 f! i* q# I# v; [  R
8 A- h" p+ T7 e/ Q# L1 A9 G5 x' u
//常用方法
8 Z8 g2 d; D* `. C# q// 变量值长度
# r( X0 k7 S; t6 K+ z&gt; name.length4 q4 H/ r5 ^' C/ B
4
! u  Z$ q* I$ J! g2 Z; K+ J0 Y// trim() 移除空白
5 K: R: r8 b: F; d7 B$ d! _&gt; var a = '    ABC    '8 A9 q- L* b" s0 q
&gt; a
4 G" f& Y& K" g'    ABC    '6 y" A% n  S$ w. r9 w
&gt; a.trim()( Y- k- t6 W, C6 z' n  W
'ABC'* f- ^; n+ k# p. C# _2 v5 P% k* C
//移除左边的空白5 r' p$ d. g: x1 D3 c. d  p
&gt; a.trimLeft()# ^# b% _9 z4 G  k+ i
'ABC    '' M9 }0 B6 N6 o; `" N$ \" l7 L6 e
//移除右边的空白
9 p; x6 Q- b! D; e: ?5 D&gt; a.trimRight()* j( K; D$ \* T) `. W
'    ABC'
: @7 m7 J' J( S) j
: `& r9 q3 E# ]3 X# i& N//返回第n个字符,从0开始; F, t4 S2 n) q% H1 i1 k: G
&gt; name
$ h- c5 E9 V/ c& H9 \7 D'Hans'
2 J7 Z5 N4 L; W* M9 F2 r&gt; name.charAt(3)- M' E4 N5 e4 f+ E7 y$ |' {
's', w( t7 W4 ?  C" y; a
&gt; name.charAt()
- v3 b0 d4 h, M0 L: k/ q4 s$ c'H'
& C' Y1 H  {# N9 B" I9 @# M- w&gt; name.charAt(1)
  @/ Z0 F; L1 v  e( \# v+ b'a'9 V1 X' l3 q' f% J

. c: s# V+ t- x6 s( t5 @// 在javascript中推荐使用加号(+)拼接3 W2 l# O2 a( C1 [  B  Y
&gt; name4 z9 F  J3 k7 g" t
'Hans') k7 A8 F  c+ X6 ]. P
&gt; a
( Q% x1 X% a7 B& J0 c'    ABC    '5 a! `) `/ v( E8 p3 r
&gt; name + a
2 S& y8 s5 Y8 q# X7 Y0 `- Y/ i'Hans    ABC    '
( H. w* X& u+ g- N& m1 q// 使用concat拼接
1 Z2 _* C( e; n: t( P4 t% q( ^&gt; name.concat(a)
" J4 ~1 _% f2 }* H( G'Hans    ABC    '$ O- V0 H8 T; T) L  o( z

% ?0 ^$ R& v4 e( V" y& x' n//indexOf(substring, start)子序列位置
) G. F# _3 N) l, z8 {" T% d0 V
' u/ |6 a: V1 ]! ]9 ~, N$ ^&gt; text# `1 u7 C( ^5 n6 i" m
'A young idler,\nan old beggar'
- _" Y/ P* p9 B7 m' T" n( F&gt; text.indexOf('young',0)
: R" A8 ?4 }' J" ^4 k& t3 q5 n* k2
6 P3 f2 b& n# {( Q. q
  V# O  h( M) \//.substring(from, to)        根据索引获取子序列
% T/ n/ n( A  V4 l( d&gt; text.substring(0,)- y! K. h" L. q' p4 C
'A young idler,\nan old beggar'
: S( a5 S# C! F6 W&gt; text.substring(0,10)$ _8 W+ z% p# S8 H" g
'A young id'8 D1 V4 I! @  d0 I& T! u: M# V
8 j  G4 ]3 o: }, g
// .slice(start, end)        切片, 从0开始顾头不顾尾1 _: I2 n' E6 B+ e6 i- ~, ~
&gt; name.slice(0,3)
& a2 M3 i( x) U3 q'Han'
. P! g3 G* k1 p! Z; U8 b% a0 [# c5 Y% J* j! _% W- ~
// 转小写
+ j# M; \0 U; }&gt; name2 W5 p1 ?- n) j& ?$ I  T
'Hans', c) k0 X$ z; G* w- J: H! ^* Q
&gt; name.toLowerCase()- P/ z- _) W( S% b9 F
'hans'
, r6 \8 t9 l. }1 Y7 R% h; T3 u// 转大写0 @$ p  V) ~* D
&gt; name.toUpperCase()
' I3 K$ c: m/ M2 O. p) }" K'HANS'
1 t8 Z- w3 R4 o  w2 N* o$ d) ?7 x( m  c. d/ h* L
// 分隔8 t& k8 a) H  W, w
&gt; name
( M3 }6 ~9 {, [4 B7 N0 s'Hans'& C$ I- v' j& _( M- d2 C$ q1 _
&gt; name.split('a')
) ]; o# |3 n( u* ^) W: M(2)&nbsp;['H', 'ns'], x; `+ M6 Y" l  U' v+ X7 m# m! F
</code></pre>0 h3 Q$ @8 Q: x/ Y2 F7 @
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>  p7 u' D4 j( y3 A7 i# ]+ [# D
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>% r) k( A' A, r
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
& `; o( ~, Q0 T' O- F+ P+ B: r<p><strong>null和undefined</strong></p>* [( y: O) n) _- [5 K& M& |  [  t
<ul>( V% b" p3 n$ p6 H9 j
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>3 s3 k9 |/ r1 E% `8 s1 _  c
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
: Q( x5 t2 B4 |+ e! b! e9 o</ul>3 E- E$ s0 g: k- v& J% h
<h4 id="234-array数组">2.3.4 Array数组</h4>" |: V9 t" J1 X* j* U4 w. e4 D
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
) H& U8 O: U* {- m<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
" J& K% @# u0 ]0 N4 V8 T' v&gt; array10 \) A& z- V& X/ O! H
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ H! S! u8 h2 \0 J- ~  H8 e
&gt; console.log(array1[2])  //console.log打印类似python中的print
& `9 |2 L, F5 j) F! G$ }1 M3% z# ]# v, V5 t6 r0 Z+ Q; G  O- o
// length元素个数: M' z9 u# P7 Q0 D
&gt; array1.length) r% y+ X5 o; s9 U/ h- R
6
8 V4 r: c& c8 n$ Y. y// 在尾部增加元素,类型append' Q/ {+ h% Z4 }1 p7 x
&gt; array1.push('D')2 U& w, {6 c2 T( z. ~
7* O1 M2 `2 K6 W* J1 r
&gt; array15 b/ A/ ], Q: V- j- ?# d# d
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
7 N6 B" c5 G3 S9 }* y: A// 在头部增加元素& }( A7 [% _3 d" j) G
&gt; array1.unshift(0)
- Q+ m7 E3 j7 ]6 J8
3 I0 Y: G# j; z& V&gt; array1" @. R' m  Q* P
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']. d, k- z0 q+ p4 U
* D# w  a! V! C: n6 G# K7 }
//取最后一个元素/ ]* `$ s5 B2 g* e* z2 @
&gt; array1.pop()  J1 R+ T4 d6 D/ K
'D'
  I3 p# H) H; n+ [' \&gt; array1
$ P8 x% l5 {% @, z. @  `(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
( b0 }1 f/ W$ V5 P; `//取头部元素. e! c' M1 G7 C: q% V7 t
&gt; array1.shift()
1 }& P" c; b; H- Z% M  E0
3 k% a, O) Z* c1 L&gt; array1
" |5 ?# C9 r% S5 b: B- o& P(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" w, E8 m3 ~8 e" I
# V6 `7 J$ _4 b" V8 ]) u7 o* I//切片, 从0开始顾头不顾尾2 C; Z6 Z2 J- p& h9 ~( F9 v% @4 I6 Z
&gt; array1.slice(3,6)
$ r# w! g0 m+ Z: C% B+ N' G(3)&nbsp;['a', 'b', 'c']$ k& G' R3 G5 u/ D
// 反转: v# [) I0 J" ^  \
&gt; array1.reverse()# N2 [4 a1 W  k) h0 _$ C
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
) r  B0 F% {) f, J7 Q/ @// 将数组元素连接成字符串
& c" \4 k: M9 d9 M% _1 R( ]&gt; array1.join() // 什么不都写默认使用逗号分隔! B3 [, t7 o2 u* w, Q6 R& M0 Q
'c,b,a,3,2,1'
/ c  A; u7 Q+ k) E0 }. c9 m) r&gt; array1.join('')0 i4 C* K) R* c8 [; |1 |
'cba321'9 Q: E) w7 U6 T7 r# X. J
&gt; array1.join('|')" b' e: X: R( l9 l' a% v" b
'c|b|a|3|2|1'+ p" s" h: ~7 F; V
" Q, D" F0 K3 F! ?4 J, l. V3 z" g7 b' z
// 连接数组
; G, R) s, Y* e&gt; var array2 = ['A','B','C']
; _) y5 u4 t) I: ?6 g' m1 F&gt; array1.concat(array2)
+ V: [4 N1 b) E) U(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']9 V1 ?% d. O: i+ [0 l0 j

8 S* ?' l/ F* N// 排序
* P% `. j, k# E: T$ }&gt; array1.sort(). T0 v. M; g# `
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
! z( b4 z7 X- P$ M( ^( u, J/ }
1 M& ^+ e8 L5 j; b& ]3 T) X. h// 删除元素,并可以向数据组中添加新元素(可选)
: r3 f" V0 |9 W$ Y  t1 S9 S  m$ \&gt; array1.splice(3,3)  // 删除元素
9 r5 k! Q* @  o( S(3)&nbsp;['a', 'b', 'c'], x3 Y4 h1 ^* h, _- U" H/ v) X
&gt; array1
& d1 L, O% t! R( Y2 ^* ?$ G' d(3)&nbsp;[1, 2, 3]* r& v% b/ [- R- b/ R- A
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
3 e( X! T2 K8 }7 l+ `' }[]
% K( ~+ D5 Q3 v+ d&gt; array12 [; G- G& y  f: q9 s7 w/ X* E% ]
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
/ G! S9 M, m5 x* _
- I! k) I  m' \6 W) k& p& ^/*! c* i! W. v) U; z/ c
splice(index,howmany,item1,.....,itemX)7 v; G) N4 X$ D3 e, c9 x( ~4 S
index:必需,必须是数字。规定从何处添加/删除元素。
& R9 ~  ^" L% ^howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
0 k  R7 x% ~: g( i$ V" w3 g* T# k* Citem1, ..., itemX        可选。要添加到数组的新元素& f" O1 ?  @" U" Q6 ]# X9 n
*/
/ s: o6 B1 _% F! B3 S' ^6 X. m% {4 P- W5 Z* i9 ]* j
// forEach()        将数组的每个元素传递给回调函数
( T0 A& o6 z  p2 ~&gt; array1.forEach(function test(n){console.log(n)})
6 P# M% [9 i6 `- J4 L# T 1* d0 @8 J" Y5 a
2' j3 p& {" W- i$ F/ z4 D# o( x
3  i. A( l& T6 p4 s5 U( {
A
8 Y( x' x8 Z- G+ [2 A+ b* U; @ B; s: d  Y. D5 S/ Q/ z! Z
C! J0 s2 H9 h- d# O0 k
// 返回一个数组元素调用函数处理后的值的新数组
" B. g) Z/ m, }3 l$ B&gt; array1.map(function(value){return value +1})
& ~+ B; ~2 c1 z# |8 v, @(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']: W" \5 A8 \% `4 o
</code></pre>' n) c! S- z2 N3 Q6 m+ A4 r, ~& b) N
<h3 id="24-运算符">2.4 运算符</h3>
  X9 n3 o5 s1 I& _<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
7 c; m% }! D; A7 O% {, h/ \<p><code>+ - * / % ++ --</code></p>! @% @! P# w# U8 B/ g' g% Z& v
<pre><code class="language-javascript">&gt; var a = 6
# \2 f5 I' v: e, Y: v4 r- w# _&gt; var b = 3! g! O) V7 l" k2 T! r! e' t
// 加% S0 N# Z- \8 m- y
&gt; a + b- @0 Q' b! N" f$ b1 b( r. D6 y
9
  I0 l' x7 e  f2 O9 g/ ?4 j+ C! Q// 减
5 H; M& |8 z' j/ H&gt; a - b0 r2 r' ]' T" L2 N8 b3 ?5 c# e
3
0 a- z5 d$ k2 K" q// 乘4 j0 {  \$ i; O- w* [
&gt; a * b* E1 ~9 O- r  }; V$ Y
18
1 X/ R  ^. h7 i; `3 e+ |// 除& U- H: |4 \& Y0 ~
&gt; a / b! B5 X) N3 U. B. W% r6 e
2
/ F- v  e2 `! T4 p9 Q  C: o// 取模(取余)
; k, ~$ y: ?; ?$ p( A+ e&gt; a % b- a# x. }7 l1 z
0& k5 F4 u& o7 u8 s, F; t
// 自增1(先赋值再增1)
9 g5 ^5 I  t' m1 G3 i& C&gt; a++( ^* G4 z9 F1 T) V" X
6
" [; O4 }' K1 x&gt; a* Y  {" A: A$ [( P" x* G. q* e
7( p- N% j* C1 Y' r' l# G1 i! K7 _: |
// 自减1(先赋值再减1)
2 i, K4 W9 n, Y2 F2 n* X7 Z& j&gt; a--
/ V, Y/ ^9 |" K* n) _. {7 f3 f* A# S7' F0 p2 |, b  }5 m6 f
&gt; a% Q+ B9 q) Z; U* L3 M
62 u% n" P4 z7 t# W0 R+ Z( W% X
// 自增1(先增1再赋值)0 Y+ d+ M! I6 v( }
&gt; ++a
# q# l! q$ s9 z0 \* i7
8 ]9 B* h# K5 v  E) A* E0 c" N" R2 N// 自减1(先减1再赋值)
+ i9 |' a' Q& S, n1 D&gt; --a
( b$ G9 W+ m- V. g; Y6& |+ m; z/ {; B0 w+ G% T
&gt; a
, a9 S! ~( c* i/ [) u6
' g: {2 t5 t  j5 P" \5 ?4 y. e" i4 z( E
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理% R  E0 z  G6 c% m
</code></pre>; `7 L: w+ y' Z8 j# Z, v
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
/ S' z# Y! n# y6 J$ J5 Q<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>0 y2 W2 g8 i/ G( @
<pre><code class="language-javascript">// 大于  m' z2 F, C$ X' @5 {
&gt; a &gt; b
3 h- }; K. O" _6 M, Y9 P* htrue
  u6 g/ F2 A5 i- j7 M* k; N6 R// 大于等于2 k8 }5 T) G; c! u1 f, D: z2 z
&gt; a &gt;= b4 k1 d/ |3 ]' ]5 |$ L* s
true1 u, s0 V6 P/ W  w! Z$ p. J
// 小于' g' R4 f0 Z& `" {" }( r
&gt; a &lt; b" [' A& z' J+ u4 r; a
false8 F- K- G0 {: y' w  R5 G
// 小于等于
/ z2 _, y5 {) C" b1 ~1 r# O! t&gt; a &lt;= b( T$ R9 D- ~- ^! _3 e! v0 `
false
7 u9 P' E- i3 k7 |// 弱不等于/ L1 ]' b7 V9 A9 l
&gt; a != b
$ i$ W7 \9 l  v4 G5 M. w1 `5 U* dtrue% j# S- [/ J  {2 g& |8 u. M
// 弱等于
7 {& j9 @; s$ }3 W&gt; 1 == '1'4 s3 \" ^! _' q1 `, g: z4 g- D1 ]
true9 D( o% l* r7 t
// 强等于' y- s$ a! h, c# T! j8 D
&gt; 1 === '1'. T2 E8 W; h4 |4 _" \5 r
false
& Y) D6 t$ p& }% V// 强不等于' z6 a0 E# L* n$ F$ _$ v1 i5 O
&gt; 1 !== '1': n+ ^- f! k) r! Z8 j1 @, Z9 l' \
true$ P9 ?+ t7 C8 N0 l9 @  o: b" H
, ~( r) T) _5 y' a" u: E- K
/*
" m( `% F: \: gJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
! T6 y/ G4 h/ K8 H*/2 G: T6 K# {! m8 v* v0 D5 y1 z
</code></pre>( }0 [6 O' O  K' ?/ v4 S9 l" Z
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>0 ]" T+ o' {3 d* ~5 Z8 ~' Y1 T1 ?6 M0 s
<p><code>&amp;&amp; || !</code></p>; k7 {8 c. Y+ d) [) L. p  l# b
<pre><code class="language-javascript">&amp;&amp; 与
; ?8 P9 |9 ~7 p2 V( Y  z|| or
, i- z0 X# z8 E8 D. W! 非" `) ~* e4 l' o
</code></pre>
) ^( [. d2 ?4 @; X<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
+ J+ [, g! w  Q4 U<p><code>= += -= *= /=</code></p>; Z9 v' L# m8 j- h" Y7 u4 k& S. R
<pre><code class="language-javascript">// 赋值
* X. ]1 ?: s5 e&gt; var x = 3
, k! ^  |, I8 `// 加等于5 Y3 q4 e5 t! M% J$ I. ^
&gt; x += 2' |. F9 j. p9 [' O3 J1 v
5
' ^, f$ y* _- H1 G0 n- {// 减等于* j, o, e5 Y& X6 \2 t- B: M. \; ~
&gt; x -= 1: l& ?) H. q) [& v
4
; I6 U( h* E1 e# s/ q+ J' S// 乘等于
% e- w: O# C$ S&gt; x *= 2
: m$ _1 R2 N7 j8
( H- I4 y% s2 l4 _1 r// 除等于
+ \# ?. a5 \" |8 D2 X4 v&gt; x /= 2
1 b% E) g$ a! q  E49 a5 Q+ C: ?* ]: \
</code></pre>
2 d3 o) e2 R8 w* e1 j1 u$ ~<h3 id="25-流程控制">2.5 流程控制</h3>
% W' p! n5 T& w/ O6 t<h4 id="251-if">2.5.1 if</h4>/ g+ v! l3 M9 ]
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
( b' u' ^0 ^! J
2 a' O! `+ X+ w* [6 x- a&gt; var x = 3
8 v( y; e% g4 R7 I5 B: _1 c4 ~&gt; if (x &gt; 2){console.log("OK")}
  G8 {% k4 R  R OK* R/ v1 L: G7 c" f+ B" v1 X
+ h" S1 c2 W7 y$ x/ A2 F* h) [
2, if(条件){条件成立执行代码}
: u$ i3 o' A! ^& S. w        else{条件不成立执行代码}
( b0 A- {5 L9 K: h# b* t
) h2 m7 Q7 x( F&gt; if (x &gt; 4){console.log("OK")}else{"NO"}! E* G- ^& v1 r9 E- L/ p
'NO'
. O8 a: N4 A8 n. m* N  ?$ d0 G0 G
; w$ T" D. o/ E3 Z+ F/ e( A3, if(条件1){条件1成立执行代码}
! N" C0 J- s8 w1 M        else if(条件2){条件2成立执行代码}/ @) s  F9 r7 c$ L
    else{上面条件都不成立执行代码}
. d/ Q$ O, d* G/ S/ L) c+ }2 v, n- Z( k$ c4 V6 i: Z0 ^, j3 D
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}; l- C  F0 B) V/ s# `0 u
Ha' Z- i4 v- e7 W# G7 B4 h( X
</code></pre>6 O+ p" s2 O- Q: \
<h4 id="252-switch">2.5.2 switch</h4>' v8 p+ L% v* F8 w7 {
<pre><code class="language-javascript">var day = new Date().getDay();
, X6 k0 d5 ~- U: P% I4 D. |% [switch (day) {0 j. N8 N$ h1 W0 ]9 ^& n
  case 0:6 L5 r1 {5 R4 S9 _$ b# }; A( g
  console.log("Sunday");
- o0 n. I' m' W( _: l' X. I0 S  break;  R$ |9 ?' ~$ Q" n/ R
  case 1:2 S$ U* R5 R( o' h7 V
  console.log("Monday");
+ i$ Y& l* f( p5 o+ ?7 V, ^9 [  break;
* a2 K( g+ O, q- q% w! ^2 Rdefault:! Z- c& T. D$ \: O" A& R% I% C
  console.log("不在范围")4 t; e5 Y: h0 S
}# ]- H9 R* d, o: Q
不在范围' |2 _- z' y8 F, H$ S
</code></pre>6 ]7 b7 O/ L% ?
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>! u! {, C2 N9 Q& e5 H. Y$ D
<h4 id="253-for">2.5.3 for</h4>
- R! g7 |( ^9 o5 `; ~! e2 u+ u7 x<pre><code class="language-python">// for 循环
; _- z! U. a1 E& c        for(起始值;循环条件;每次循环后执行的操作){
: |( [3 t- z( e# E: @        for循环体代码
- \! X7 c/ U+ R& I    }
* K! A" u" b2 O/ U- ^8 r( P& W! }! x
for (var i = 0; i&lt;10; i++){/ e% X( ^* u! U; |" Q3 x5 O
    console.log(i)0 l/ t; i6 {1 p: B9 l
}8 E( x3 u$ m3 _0 X
        0- N: [3 W! E0 j& V' @8 B- i+ n
        1
) b' G7 k6 F- D3 G0 S. y2 }        2
2 x$ P, [" m! @* l5 j! h- Z        3
  y$ F" T7 t& U2 H( F        4
: ~: f# |. F* b2 T+ @        5
) W, B$ p# ?; X( ?; n' l' Y        67 r; T$ _% Y& W- F
        79 c1 _9 T$ L2 ?! R5 d
        8
: c5 D+ g9 t* C$ E        9
4 ~9 N" g# j: [/ d/ ~" O</code></pre>
" u) b) u. M6 ]& U& K3 o<h4 id="254-while">2.5.4 while</h4>
1 t8 E6 O, l& j7 i/ B<pre><code class="language-javascript">// while 循环
  _3 h& K8 {/ D: B4 z6 t        while(循环条件){8 D6 D" p( ~) z* l# U8 H
        循环体代码
1 H" _" O" n- L+ O+ e# |/ p    }
$ @. j5 U" q( i
' }2 \3 i& K  U: H& k5 I&gt; var i = 0
. _4 e, b& N0 e) i6 ?&gt; while(i&lt;10){' g. Q0 \7 p* E' c3 \" u
    console.log(i)
' o( {) P9 J3 B* z; t% R9 O    i+++ M3 x; n5 M  h* \
}
% |, L3 I1 O( {$ O) y, @' g 0( h' _6 Q" j$ ~' g+ d' L$ g0 Q+ A
1
& p- k: t. m9 O* b4 t4 w9 _ 2
) r* Y6 b6 _8 ~: X+ w9 {3 a2 M 32 ]; z# Y; c- Z, t( J0 s
4
# }+ e0 B6 g3 `4 T; G0 m: ?& ] 5
9 ^* b  J4 ?) b 6
- r7 q' B$ x7 y- w2 a6 u8 k9 k" Y 7
- S1 Q" e; l" m4 b+ M3 \ 87 L6 d3 I' K  f+ [. i
9
7 _: E: U) ?0 I2 v" h6 |. E</code></pre>& H0 [' \5 k' O# @1 @2 T
<h4 id="255-break和continue">2.5.5 break和continue</h4>  D- N' C) R: {' j# x
<pre><code class="language-javascript">// break: {9 B0 E  I) n3 [5 U+ a
for (var i = 0; i&lt;10; i++){
3 m2 N6 m6 O4 Z1 @9 W6 _6 x    if (i == 5){break}4 i5 {, y' L2 E
    console.log(i)
+ K5 o; u9 t  N6 H}
+ d3 _4 u/ V4 @1 _ 01 G* q: X1 I8 e6 O0 ^) _
11 w2 q. Y5 y# a" b
2
. y' N+ I1 a7 Q+ _8 |& @" `( } 3; a1 p  `- `% v- P, g
41 @9 ?( ]3 m3 h; V, A6 U
// continue
! C" a  X, m' n; hfor (var i = 0; i&lt;10; i++){
' @+ q' j& Q$ L$ q    if (i == 5){continue}
7 }6 r/ K# ?% x+ x    console.log(i): t# Y# y, Q; v( ?
}
$ e" h/ M2 Q; J& A. H/ p: \ 0  H6 q- A& [6 |9 @# y' e% A
1
. a0 f1 g* |/ N8 l/ N6 C; r5 U 25 h7 ~: S+ Z* j9 ?
3. J8 E# ?2 d: B; W( _- L4 Z
4
' S& ]2 h5 S: |) | 6
8 S& L0 u. k/ v5 D 70 V! B  M7 p1 m: n. P
8! O/ Z1 T( ~/ }9 u
9# l% {+ u2 {4 g1 y2 o0 _& [
8 W* i# Q7 ?! O" Q+ ?8 g
</code></pre>1 w$ G( |. S& s2 p7 i
<h3 id="26-三元运算">2.6 三元运算</h3>
  W- V) a' P2 T* r% M% v<pre><code class="language-javascript">&gt; a3 ?+ w" x6 Q( {6 @5 C
6
% s" p) X) {: t- p9 ?&gt; b. x  w; ?4 l8 p* W. u+ L
3
6 c1 b8 i1 R! p5 X8 h1 C3 R( q; C. b7 G
//条件成立c为a的值,不成立c为b的值" q# q$ l& a! r1 Z7 X7 A) Q
&gt; var c = a &gt; b ? a : b  t* ~9 z5 l. y9 f/ R+ {
&gt; c; a: R  c0 g1 U2 |& p7 y6 Z% O
6  p  T7 p  s- \
8 h( a" k6 f9 e5 u) {6 m6 y  A8 S
// 三元运算可以嵌套
7 p* e+ ~4 f, k& Z$ S0 v1 n</code></pre>
6 R, F' L2 f" p; H/ y0 h<h3 id="27-函数">2.7 函数</h3>
0 n6 |# P) ?- b. K/ v<pre><code class="language-javascript">1. 普通函数
: N  s7 _' ^: {: V1 N&gt; function foo1(){
8 R+ b# K7 q4 K# C: Q( U2 m- c    console.log("Hi"). ?5 y9 g* H1 c2 c: I6 @
}9 N, S$ ]1 R* }: Q2 j; G

& V0 u1 H; p0 V- ]* X4 H% k& [4 r: ~&gt; foo1()7 z8 a) f, ^. {* l' n. @
        Hi
  Q' [0 `4 N: V( F2. 带参数函数- t4 x; D4 o( c; \" R% M
&gt; function foo1(name){3 ?7 \1 x: o" @' b
console.log("Hi",name)
+ V" C9 `' E3 V6 x, s5 `, |}
8 j1 }$ p: o! b) ?6 v: H9 e. C" s) @& `7 H5 n& R
&gt; foo1("Hans")
5 K6 S- R8 g# S4 [. C2 IHi Hans, @5 P% f+ Y( P3 v$ o) t# n8 q" H
) c6 @' e- [+ ~5 m; M& J5 @
&gt; var name = "Hello"
- R0 |% C! E6 k$ ~3 Z&gt; foo1(name)- g. O5 A3 k4 D9 x7 S& {" K
Hi Hello% N  s7 y" k9 _
# v( h- i' ^' x. p
3. 带返回值函数0 \+ l  z4 F6 p
&gt; function foo1(a,b){8 i# a& @9 {( r8 }& W0 [
        return a + b   & ?8 C, Y+ K* G3 e% X4 M; T
}3 z: o6 G, o6 a5 f4 J
&gt; foo1(1,2)
2 @+ c& ^8 M+ k( E, @# A3! o9 [" k8 [8 @
&gt; var a = foo1(10,20)  //接受函数返回值  `$ s& Q3 q3 r1 H7 m4 `0 ~( y& w
&gt; a
* X% h8 l( ?7 C; {8 l1 S( n30/ Q8 [, N; q# Q% i, M
# t- T) s+ D2 B& D! ^
4. 匿名函数
% \" A$ }) ^$ h0 {, V" K% t&gt; var sum = function(a, b){$ w5 |& Y- w5 t0 D9 O0 h0 x
  return a + b;
  C, R: ~3 o9 x7 v1 j  B}6 }' v$ j: f4 X  ^' j, _
&gt; sum(1,2)0 r: }7 B1 k3 z# {
3
! ^: n1 L6 w" C4 _$ Z, A+ I
( R6 Z- i! l/ O* U) r: i2 Y- Q// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱6 a, z4 E* J) {* w/ Z# \
&gt; (function(a, b){
( a0 h2 q. w: N* {( E8 t/ _3 C; H9 v  return a + b
  [7 M* ^. {5 f* }4 z})(10, 20)" U; R% c. i( n/ {: q  `7 C2 }% j
30
' m' e2 H) R' c7 H: k/ {% z% B$ ^$ Q
5. 闭包函数
# r" v4 _3 e6 T3 c' F/ j// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
3 B3 X/ M" `' Y7 m+ D( H1 i2 M( hvar city = "BJ"( ^6 Q6 B4 F7 d- F8 q8 s
function f(){% C& b/ c8 L! a: X7 w/ ^
    var city = "SH"
6 [- ]3 ?, E) w    function inner(){
0 B0 @0 {/ O+ u0 d9 b1 ]        console.log(city), a1 v' U  {. x$ A3 I  b6 ]
    }
7 a  H. m2 b% y' m% e    return inner
4 K0 z1 S5 S  Y7 x}
8 c7 _2 S% B+ w( _& s% mvar ret = f()
; ?' T/ B+ g! P: [ret()' O& V; v' e3 G9 f0 A
执行结果:6 T. A6 D' z+ Y
SH1 O/ `+ Z; m+ l1 {: G5 H$ H( S( s0 N& W
" ]' z4 R0 V/ f0 s: O( \/ D1 W2 G
</code></pre>/ _9 R( X: v. x
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>8 Q( O* t0 X: o% o% ~) w1 r: S* S
<pre><code class="language-javascript">var f = v =&gt; v;' I4 p( E& |8 F0 g
// 等同于
: o2 u$ x& k; U& v9 T7 Yvar f = function(v){
. Y5 W( i1 P. C% v' o7 Q  return v;3 Q9 b3 ]; G7 {+ L9 |
}) D3 D8 Z# `6 l' C( v+ t0 C
</code></pre>0 }9 b( O- W; W  E2 d- I  W
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
" a5 {& i0 ^/ v. \<pre><code class="language-javascript">function foo1(a,b){
; j7 R1 L1 [: ^0 \5 N    console.log(arguments.length)  //参数的个数
, z8 q$ u: `3 g. l    console.log(arguments[0]) // 第一个参数的值) m% h/ {. n3 C4 C7 t- K
        return a + b   % M7 x0 N6 R+ o0 C* }' Y& l$ u
}
3 _9 e! d; P" Xfoo1(10,20)& V4 E7 ]4 }1 I% O5 B. v8 l
结果:" i' D3 Z5 K; z: Q$ v- u
2          //参数的个数
- ~1 g% w. ^5 C- T10        // 第一个参数的值  s! ^0 M3 a+ _" b2 T: p
30        // 返回相加的结果
* @4 ], ?& i: Q# I</code></pre># X" s4 ]: t) ~. o. \/ _( d
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
$ c# d4 e) G/ h<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>! g" y( e, w, \
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
: S: k( H& {; U5 i0 ~# l7 B<h4 id="281-date对象">2.8.1 Date对象</h4>
4 X' P- N$ ~& W8 t7 ^3 y<pre><code class="language-javascript">&gt; var data_test = new Date()
" b' u- `% W( W&gt; data_test
  t% y% S0 n* i/ J& WFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
. _4 t$ z: `% |" U4 \& c1 n7 H* [&gt; data_test.toLocaleString()
/ V8 r1 g9 w. z! h'2022/2/11 下午9:44:43'( b+ y0 M( D/ y1 y8 O

3 J9 f) n' w( h3 [&gt; data_test.toLocaleDateString(); j& ?% g; y; |- J0 n. R, r1 Z2 b; X
'2022/2/11'
# a  W7 l; z6 i: R+ N4 C* J
1 B4 ?) T! u+ S0 z* b&gt; var data_test2  = new Date("2022/2/11 9:44:43")
3 B. M( j. Q- t% f7 t3 q&gt; data_test2.toLocaleString(): d! i- E9 q' I) V; T2 A
'2022/2/11 上午9:44:43'
7 [. Q  R8 R  x& X
6 U7 [3 [+ e! t/ W3 T// 获取当前几号& Q% l" `: h2 [! i
&gt; data_test.getDate(); ~- _' z9 |2 D  I0 Z. e1 d
116 \: T( \" m* t! x& U# U8 C
// 获取星期几,数字表示0 c, t: W  {  @1 U$ P1 B. Z1 Y
&gt; data_test.getDay()  
. d+ e1 {3 h9 g+ a' v) l53 }+ p7 J: b" m0 O2 K/ p8 k
// 获取月份(0-11)  G, W. W3 N# C7 v* Q
&gt; data_test.getMonth()4 l  k. ~- B% C6 y
11 O9 n1 m9 q/ C3 h( y4 O: S
// 获取完整年份
9 |& D% h2 P2 S# |9 d& J% t/ G4 t&gt; data_test.getFullYear()
8 }; H. B  a! A6 b2022
0 V  ]! I8 t1 P% I9 L0 I& g// 获取时" \8 l) I( [+ p6 S2 d3 x
&gt; data_test.getHours()% s4 F7 o* l, e- n
21
" n1 ^8 [0 y) h3 y// 获取分' }. O& G- m" X, l& m
&gt; data_test.getMinutes()! E- h1 }2 z8 q- g; V  {
44
2 Z) @# `1 L& R2 }6 E4 x// 获取秒
3 u& I1 y; i$ f+ F&gt; data_test.getSeconds()
  I) ?! u2 J: [  i( o% ]' J; P436 Z4 K! `( a& j% }- W
// 获取毫秒
  E. }2 C0 {' ~0 c, K3 K&gt; data_test.getMilliseconds()
& l' |* q7 D' @" M$ X290
" U8 h% A2 e2 @0 I# f, M' |// 获取时间戳
4 Q8 }( r1 f2 T! I&gt; data_test.getTime()) `' U( o8 k* z& m" |) |$ T3 O
1644587083290$ R* K1 G$ @  h
</code></pre>
$ |6 ~; O4 i, l<h4 id="282-json对象">2.8.2 Json对象</h4>
; X4 C4 H$ R4 [6 H<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
5 d% {1 s. ^1 }! k8 ~JSON.parse()  // 反序列化,把JSON字符串转换成对象& |( `) D# g% M
6 ~4 f6 K% O7 n  S
// 序列化. W9 y: F0 ^2 g) o. S8 ]
&gt; var jstojson = JSON.stringify(person)
, r: b! {" K, j&gt; jstojson  0 S8 o! T/ x$ R6 x9 |( y
'{"Name":"Hans","Age":18}'8 {/ \% M" \! i7 z

6 D! s# O4 G/ l( d' f# X- _// 反序列化
# x# Q+ Y, ?1 W6 d% I&gt; var x = JSON.parse(jstojson)
4 @. W: y$ Y# |2 s&gt; x. {+ @0 I3 v/ O4 N+ y  @, f+ e
{Name: 'Hans', Age: 18}3 ^; p0 ]; X2 Q, X
&gt; x.Age
" C) @' u! `" ]4 J% M4 i18
' o& E) ^; `. D5 H9 l3 g</code></pre>
1 t5 z/ Y/ k$ O% \<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>0 Q/ ^, j! W! K
<p>正则</p>4 |5 o" v5 D) ?# H0 J) Y
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");  G5 @- y' t: i2 a  }, b
&gt; reg13 l/ B5 A6 X7 B/ a& W
/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 ]$ t, k; {1 ?8 Z7 e
&gt; reg1.test("Hans666")
# h5 e# U' w& }# O8 @6 V& d, Gtrue, n$ U8 Y8 U6 O- V9 U6 a9 z: v

6 @$ t; V. U9 [' [&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/& X% b. I; g' O$ g: h
&gt; reg2" o' [3 S: y( e! J
/^[a-zA-Z][a-zA-Z0-9]{4,7}/- W- O, {* u% }9 c$ A. d5 ~' j
&gt; reg2.test('Hasdfa')5 m( \/ \6 w* _2 U: |! h1 |% }/ c
true
, I0 y% J1 i: h1 l1 H4 K' [+ C7 d) j( s1 b/ o; N( K& ?
全局匹配:
6 n6 P2 O- T8 u; \9 t' c7 m&gt; name# |+ |5 ^* J" M# }( E& ~
'Hello'
: E3 A4 C' E( _% n, V, R8 L&gt; name.match(/l/)
% u2 u) s& H4 C' L; ?1 w; D. L['l', index: 2, input: 'Hello', groups: undefined]6 b* F: V& g  ]* \+ `
4 }, g% [4 r( }7 a6 |2 D4 G$ e
&gt; name.match(/l/g)
9 @: k, b, j! D  }$ X  R/ }% }# E(2)&nbsp;['l', 'l']: Z, Q8 ?4 l7 q  }* u$ B" W
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配0 t  M" M( C4 T6 C
7 l5 e) A0 L6 ^+ }" o
全局匹配注意事项:
2 Y3 L7 ?$ c* e" [& O- L6 m: R* w# f&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g+ ~6 x, ^% D+ k! ?
&gt; reg2.test('Hasdfa')0 o1 d" s* O4 {: S* W
true0 f1 w8 l  R- Y' }7 |% u
&gt;reg2.lastIndex;. B2 }4 N* R+ s
6( @6 L" t$ W1 G, v& o; L0 _
&gt; reg2.test('Hasdfa')) G. ]1 u7 |. R9 W6 ]; r1 f
false
" R% y% m. F- V" D) E7 k. F+ g&gt; reg2.lastIndex;6 A4 \; o2 x% w5 Q
0
* J; P1 t  _) V3 B; Y4 l+ t&gt; reg2.test('Hasdfa')$ g& _7 Q0 j6 J: @! c
true) D$ h; W) i5 R; I# J
&gt; reg2.lastIndex;
4 g- U+ @/ U) ?6
# d  s- M( _% r0 |4 x&gt; reg2.test('Hasdfa')0 L+ P& v9 i: `/ f" k/ Y  e
false
+ c: G! X# q1 f. @: R1 k2 k&gt; reg2.lastIndex;$ T) y4 H0 n! k. q- W! H; `4 v, r
0) F. V$ n- m8 A8 _/ D9 i
// 全局匹配会有一个lastindex属性$ {6 s7 T+ R1 |, a; [6 i
&gt; reg2.test()2 r1 n+ M# l( O) C1 T
false
6 `3 h/ e3 c0 o* n* y  ~& g+ H: `" u&gt; reg2.test()
9 S. \# g% r9 C/ dtrue3 _" c7 w) H  ]: F2 `
// 校验时不传参数默认传的是undefined" _9 @2 U& N6 R5 ^5 W
</code></pre>0 H$ F  a) k9 i; h
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>9 l+ n) E/ q# }4 e
<p>就相当于是<code>python</code>中的字典</p>; l2 N3 h! n" f, O' Q& J  V6 ^
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}* ?- i  M' F, d* X( @* z, ?
&gt; person
7 i* A. p* z' {{Name: 'Hans', Age: 18}
5 B- X% L, s0 W5 K. W9 [0 z&gt; person.Name* W. R- ^5 M8 C4 F! q# i/ R+ S
'Hans'4 \! Z% r# P+ L; E/ c
&gt; person["Name"]( Z& k! P2 `2 t
'Hans'% N2 x7 @6 t' J$ _% g
" w; l- \  t- m/ O8 U
// 也可以使用new Object创建
, b+ C* }  _) N1 e; ?) I&gt; var person2 = new Object()" O: K, ^7 p) D* c1 _' @6 g6 ~
&gt; person2.name = "Hello": A( \5 T) w. G! e9 E' @
'Hello'
' ~) }; V7 G4 S&gt; person2.age = 20
% j/ z" ]9 Q, M4 ?6 {, ^203 a/ F. c) V+ h; n" c) @! Y# m' h0 v
</code></pre>
* ?- y  s& j& F& L1 M4 @: Y3 k<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>$ ^) G: g# c4 L2 O
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>* P  e' Z5 B$ o: @
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
- h. H4 f( n) T7 S6 n  a<h3 id="31-window-对象">3.1 window 对象</h3>
/ i6 m6 B! l' A; [1 X<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>) {; X& M/ n+ ~, s7 {1 u8 k
<pre><code class="language-python">//览器窗口的内部高度8 ]8 {# J% l/ Z. x; v
window.innerHeight
: E6 [! _  \6 Y. H! @0 h+ e706+ O3 a) @0 @9 m
//浏览器窗口的内部宽度+ R. ]( _# @3 o. f
window.innerWidth
2 D6 R8 P7 [3 m- r" }8 [8 p2 a& q1522
3 c6 F- H% G0 ?$ C// 打开新窗口
, `0 ]* X1 a7 E" twindow.open('https://www.baidu.com')
) Q! h9 a3 y, o5 gWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}; C5 @& \- h) Y! K" q5 ]+ M
// 关闭当前窗口
2 e, y1 m; y  b+ }* o6 Ewindow.close()
( H" ?6 g$ o5 x4 I: {! i//  后退一页4 m5 m/ {/ g. t$ r8 c
window.history.back()
* I$ m5 {" P" r( R$ o// 前进一页
9 c0 P4 P4 z4 {/ Ewindow.history.forward()
& e9 ]4 z+ q- ~1 O, y//Web浏览器全称
+ e2 t6 U  H6 z/ h$ Jwindow.navigator.appName
! V8 x4 b( c  h9 f1 b4 j'Netscape'
2 w* S6 H0 S" o$ e6 G4 }// Web浏览器厂商和版本的详细字符串
5 M$ @$ s9 l8 F& X) \window.navigator.appVersion
, h  B5 ~7 Q) K$ v) c2 P! d2 F'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ ~7 N  w, T! D! r' X( w2 z2 K
// 客户端绝大部分信息+ @6 h, q7 W1 J) T1 N2 l" N9 _
window.navigator.userAgent" t* n" t' c& K7 a* `/ _
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
: ]0 g6 H8 C- J9 H. T// 浏览器运行所在的操作系统
+ ]; ]/ r; v1 Nwindow.navigator.platform
  o# @( k  c: s- c'Win32'# O" Y& [9 H% \0 ^: T

1 Z1 E- H3 b, p4 X8 w& w//  获取URL
! \$ h6 _1 ~* j' S8 F, Gwindow.location.href
* O0 }8 e) ?  X- E  B( y// 跳转到指定页面; P6 H- u4 i/ r2 \6 V
window.location.href='https://www.baidu.com'# S, B4 Z3 ~$ h6 c, t2 J
// 重新加载页面
1 J5 |: ]1 K5 Z6 m2 hwindow.location.reload()
7 w+ I! F# h( Z</code></pre>
/ E' |5 |+ u6 ~4 c7 u1 j  D<h3 id="32-弹出框">3.2 弹出框</h3>
* ?) ]0 J) \, `3 _<p>三种消息框:警告框、确认框、提示框。</p>
3 \( V9 I4 W9 l<h4 id="321-警告框">3.2.1 警告框</h4>
! h: M( Q0 S, s<pre><code class="language-javascript">alert("Hello"); M% F4 x, {+ J) A) ?
</code></pre>
" e6 J6 e: r5 b0 p% ?<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>% @% }0 w  N% M2 M% V
<h4 id="322-确认框">3.2.2 确认框</h4>) q4 C2 o* l# Z5 C1 f
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
4 x9 v0 [+ V: B! J<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true4 }, A9 V7 S# {) e2 G5 }( C0 n* Z3 i- w
true7 u( `, E, I% w6 z7 N2 Q. W1 x2 m
&gt; confirm("你确定吗?")  // 点取消返回false" H7 _* ]6 y4 N3 M7 r  d
false+ w# z, P; a; e. f
</code></pre>
2 S, h5 Q7 h5 w/ i& [3 J1 f- R<h4 id="323-提示框">3.2.3 提示框</h4>
. Z5 N+ x# I. P<p><code>prompt("请输入","提示")</code></p>& J5 w3 B2 W: w) @; h  _9 m; b
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>1 {/ V6 Y+ }1 \$ T+ B
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
, c4 x5 @  R; G  l2 v# B<p>如果直接点<code>取消</code>后端收到<code>null</code></p>& w5 {! x! X, e9 |/ u* S0 |9 w2 _
<h3 id="33-计时相关">3.3 计时相关</h3>2 |0 e# {3 H' D% y8 ?/ J
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
  v* K. _" a% h<pre><code class="language-javascript">// 等于3秒钟弹窗6 t3 B& [& d4 d8 C) m9 w
setTimeout(function(){alert("Hello")}, 3000)0 @' K! K- c, H& x& u/ o2 k
- O) F0 a6 v5 t; e  h% {8 g- e0 J# A+ A
var t = setTimeout(function(){alert("Hello")}, 3000)
2 r- f7 N9 }# ^) q
" x" Z7 R3 j6 P  M& {// 取消setTimeout设置1 R8 R) h9 ^! F* J6 G5 a" L
clearTimeout(t)
# Q" ]+ @# ?& h, d7 j1 }/ m, W* K</code></pre>
9 S" v* ^2 ?( T- O# J' G' c- l<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
$ h# V4 g0 p$ |- n: ?<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
( s5 I/ c7 S% ~<pre><code class="language-javascript">每三秒弹出 "hello" :
( Q( ]2 n4 \- |: k1 e. {, osetInterval(function(){alert("Hello")},3000);4 @6 s! Z# n% |
</code></pre>
/ C: T" B" M0 U) M7 D<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# S* ]4 d% n6 `. ]& y" Y0 N<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
# S* V: J6 Z! Y  P1 z8 J8 }  F//取消:8 K5 s  U' I% J8 G# k' V/ }  T
clearInterval(t)- K, M7 `7 f7 Y/ ?
</code></pre>
# @2 A( C: K# D  Q9 x) ?! s+ U* x: W) F7 K% P1 V
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-4 01:07 , Processed in 0.072592 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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