飞雪团队

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

前端之JavaScript

[复制链接]

9321

主题

9409

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
30293
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
- U# ~! E; ]4 a9 c0 l0 G
<h1 id="前端之javascript">前端之JavaScript</h1>& r5 d1 Q* E& D9 R5 c8 z; t
<p></p><p></p>
: a7 W7 I2 F0 k4 l( d$ R5 A# X<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>* a* o/ h$ s, y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>4 W3 z) P' t* W* S! d
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
$ i# R! X$ @4 Z! k0 L/ k5 g它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
* w# ]( k. k) ]  p/ k它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>: g' Q  [" {/ i' A5 f
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
0 Y. H$ T/ l; f# g* @& Q<h3 id="21-注释">2.1 注释</h3>% o- r0 ~5 A6 C. O: F
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
/ ~( |* c3 d3 V<pre><code class="language-javascript">// 这是单行注释
5 E; z6 d, q( G+ Q+ ?! V+ i' g& k2 _% I
/*) `! u! v9 g  D5 ^- D5 v$ s' N
这是多行注释的第一行,; M" A. q5 E! t. m; d
这是第二行。5 S2 W* W' ^: F. j0 r
*/
$ e' D& Z& U* Z0 p</code></pre>
2 f! y( ?3 D" g" p: Q, r- V<h3 id="22-变量和常量">2.2 变量和常量</h3># {7 x- z8 _% K. S  l* Q1 G
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>1 k9 P/ ?5 N4 `  p
<ul>
! I, X( d6 f' s<li>变量必须以字母开头</li>
/ h1 ~- g  k0 C, x<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>* X$ K  M' J  c& Y8 E: B4 A, l7 T
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 b3 u0 x" L- }</ul>
$ [4 M& g4 s0 g3 _2 c$ h<p><code>var</code>定义的都为全局变量</p>; h. @! s2 o. K# d
<p><code>let</code>可以声明局部变量</p>, h4 r/ f0 n1 d4 N
<p><strong>声明变量:</strong></p>4 i+ U0 x' \- m- l" }# t& f
<pre><code class="language-javascript">// 定义单个变量
; E' w& I: k. B&gt; var name
* g, ~  K7 D+ A& y&gt; name = 'Hans'
* k3 d/ f: C8 H" J+ y//定义并赋值
/ ?. d* T$ ^5 @, p  Q2 J&gt; var name = 'Hans'
- a3 Y0 Z# r, S* i, s&gt; name
: ~3 L/ D6 `5 k8 r& R% ~'Hans'# p: T7 l7 x8 m% v0 J2 \
8 X' N9 D) H/ p' y* L
// 定义多个变量: ?  i/ R! A: w$ T: Q
&gt; var name = "Hans", age = 18
" r- c; K: X% Q9 k9 _&gt; name! ^5 v5 A5 m2 i) d, V: M
'Hans'0 x, Q' }. B' O+ {7 {8 b2 Q2 L
&gt; age2 \  S6 ~2 }( L: m2 j1 r) z
18
3 F( r: }/ d( c& _1 w; }
5 Z  E# {0 o5 w. l: a9 \//多行使用反引号`` 类型python中的三引号
8 _$ U! _% E5 _# }  o&gt; var text = `A young idler,
5 N1 o8 b' Q9 zan old beggar`
. \9 H- R( H+ S) Z0 t&gt; text
. N; J1 t; ^) G7 ^0 L; `'A young idler,\nan old beggar'( i, o: Z5 G& L5 A* a/ N- a! [# E0 n
</code></pre>' @) O/ H: p) U+ q
<p><strong>声明常量:</strong></p>
2 l9 n9 R1 x1 }& \% O$ q<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! E2 v# n+ i# F8 A; T<pre><code class="language-javascript">&gt; const pi = 3.14
$ i* |& s& s/ F% X8 t" q&gt; pi
# i" S1 @) d: s$ ^1 ]9 @* J; S* C3.14; }; ~' F0 H; b: ^& u& y9 w
&gt;  pi = 3.01
$ g, z, J8 i' ~8 P6 G6 D3 p- ]Uncaught TypeError: Assignment to constant variable.& t2 O2 g3 t- ~! u2 p6 |2 C
    at &lt;anonymous&gt;:1:4
6 _) @# c# b$ ^9 e. S
0 T! {/ v: C; o5 _& P0 g8 j</code></pre>
% c3 B% b2 n1 D$ Z/ p<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
7 v: i& b8 X) d8 v<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
. b  r# Y( g8 I8 R- ?<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>, n5 J$ C5 {. R: \5 c! e1 U
<h4 id="231-number类型">2.3.1 Number类型</h4>
2 i$ W, F2 _* d' D<pre><code class="language-javascript">&gt; var a = 5/ q; P4 ?% J: Q! {# }  o0 c
&gt; typeof a   //查看变量的类型  
$ P1 ~1 e9 u) h  o8 F- k! m  Nnumber( G) r, l* F# F
! J, k+ l; J0 B* O6 f
&gt; var b = 1.3
: a1 h; Q2 A1 V; m&gt; typeof b
" ]' w! i; j' g! ?. a- Inumber
7 g0 ^  {. W- }' ^' _' U0 p& J1 l" W
5 ~: k' N/ x) |/ l& V. A( {// 不管整型还是浮点型打开出来的结果都是number类型
" R$ `& k& H! V9 K1 W# u
% S- E# P2 {$ }; w" z  z/*
) Q6 Z* d2 D0 F" S8 NNaN:Not A Number; u( f5 g" S7 s
NaN属于数值类型 表示的意思是 不是一个数字
5 X- q) A% B- ]/ E. [3 C' v*/. a1 Z  H; @* R4 _0 C2 {

/ t7 H1 ~9 A  Y) r! kparseInt('2345')  // 转整型
/ E4 B/ x* T. B+ h0 D" x& M23454 h4 G" G, u4 X
parseInt('2345.5')$ M+ K/ g3 L: j5 Z% m0 W
2345
/ l( N- d( e/ F6 p# qparseFloat('2345.5') // 转浮点型& c$ c/ m  X2 u8 m3 _6 T, s) A
2345.5
! E0 C( q; B2 i) _/ l& [parseFloat('ABC')
0 ]( b& n2 y% q9 oNaN8 m" D( W0 s; n/ ?! P* O
parseInt('abc')
3 A; u; q/ ^/ y9 ONaN$ R' v# }7 e1 j9 `, Y. l6 f
</code></pre>
6 W( @# C& S1 u1 O<h4 id="232-string类型">2.3.2 String类型</h4>
6 h/ {9 d  P: g5 U<pre><code class="language-javascript">&gt; var name = 'Hans'
# T! @4 D$ V1 q8 `6 J' j, x&gt; typeof name, u$ y& O0 }) G9 T$ [, h+ K
'string': e1 I! E- T/ K* R- Y

" J3 ?" s/ |8 z+ L//常用方法. v! y- B% p9 J0 e5 i
// 变量值长度
  ?# h/ m9 {8 R- S& \. I2 y&gt; name.length
2 U  C* q7 n6 ?' ^) i40 O; T6 W/ p1 a" B$ B
// trim() 移除空白# l6 s, L6 [4 E
&gt; var a = '    ABC    '& y+ ?5 f0 {! Y
&gt; a2 j7 P9 \3 c' L$ p2 D* p
'    ABC    '  \+ L2 `7 l- h& Y& J3 N
&gt; a.trim()+ Q$ c/ N; \2 _: j+ x" Q
'ABC'1 ]! w/ u; Q9 L: c: v
//移除左边的空白7 x: k# X+ S' ?% ]7 J7 |
&gt; a.trimLeft()
0 @* B7 o, e6 Y: @9 w% R  H4 K'ABC    '
' [/ f; Z$ q" u( C' d+ g  ^/ w  ]//移除右边的空白- o9 ~& Z" u7 w  ~( J; }. [
&gt; a.trimRight()$ e" A% \4 D+ X5 @% q9 I+ v
'    ABC'! r! i$ f( K( m$ i1 U  a" B5 [

$ h: z- ~# W6 W//返回第n个字符,从0开始
  S. ^2 N8 F- d. S1 d+ E" T) j$ Q&gt; name" R& [0 J) ~8 q4 W9 V+ s
'Hans'8 D3 V1 H+ W6 S; ]7 d
&gt; name.charAt(3)  O6 ~( Y% U! J4 K
's'' x3 R% Z, a1 O  O+ m) E  `( \
&gt; name.charAt()
& x/ z$ q( M1 X3 g) [5 \2 {8 Q; k'H'
3 H0 Y5 D& n: i&gt; name.charAt(1)
* a( W: {  U9 |. H: e" D'a'% f* s1 G1 h) L4 Q0 {4 `
. z! k. M/ K% ?0 k, {
// 在javascript中推荐使用加号(+)拼接
! L3 v) P% U0 c' K% ^8 _$ X&gt; name8 J+ L/ ^& ~7 q
'Hans'/ P# y7 t5 a6 g+ D
&gt; a* x( z0 J4 l9 _% R: v
'    ABC    '5 r" o7 M( q2 l
&gt; name + a8 b' Y: O/ D$ q! l. g
'Hans    ABC    ') h- n" K4 u% W# R
// 使用concat拼接" f) a& q( V, u/ H9 n
&gt; name.concat(a)) L$ ^/ T$ ~# Z6 n. l1 ~
'Hans    ABC    '
( D3 U& ?* c# I/ d& Z! w& Y! t* _  {& F. `
//indexOf(substring, start)子序列位置
7 D6 I/ x% I  y8 ]; h
6 H) \+ K1 f$ c0 ^/ \: B( k9 Z&gt; text8 m7 n* {* d5 ~0 P( h9 _) j. B# |
'A young idler,\nan old beggar'
% x) x; Z5 p6 w1 ^7 f&gt; text.indexOf('young',0)) ]; E/ C) D6 m1 H7 G" e. T
2$ B' f. ?/ b8 T8 d

7 U4 L4 {3 O8 i//.substring(from, to)        根据索引获取子序列% w) t$ s! o- H/ V
&gt; text.substring(0,)
8 {1 F: b* J! q, _6 }& @0 A5 [/ Z'A young idler,\nan old beggar'
. b% Z' v7 ]" V$ T1 U&gt; text.substring(0,10)
1 }/ P* v8 l7 |( Q$ h* b'A young id'
% J; {5 t+ W( `3 W; J4 a3 N  N! P# S& K8 i& y  ^4 ~
// .slice(start, end)        切片, 从0开始顾头不顾尾' h) V8 q" Q- ^4 a
&gt; name.slice(0,3)% c5 b7 M: ?! J1 I; u  d
'Han'
3 M5 P' B: y& Z6 L  J* R6 ^: |, u4 A& ]* U6 [9 g6 l4 r
// 转小写  I/ G" P  Z/ D6 P
&gt; name* k. z5 c& T6 w. C! U9 u
'Hans'
7 s- b! _1 z: o% ]' F2 r&gt; name.toLowerCase()
4 a8 x) y$ v  A7 X'hans'6 e! _5 K+ G. g4 Y7 O2 [6 x
// 转大写* h. Y( k7 u3 |2 i+ G/ t
&gt; name.toUpperCase()% R* b' e2 J% p5 q' w  l, e
'HANS'! X- c6 v( V. d9 o8 a& a  g
6 \% J2 e" t- y( X. R+ Q
// 分隔
; i$ @  p& o4 C7 b&gt; name
5 _0 o0 k) w$ j! @'Hans'
# V4 F- l1 V9 m, m$ @&gt; name.split('a')
6 w9 P" W- ^/ L! P(2)&nbsp;['H', 'ns']7 R; P: J- a9 P" y0 O+ w
</code></pre>
8 G' j. }$ a2 c# J, K<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>' ^# U8 ^" f8 U4 f! T0 R
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
! Z4 J: Z  m7 v# k- A7 `/ T/ q<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
6 j" j7 t* p3 ~. v) r% E6 @7 n# u<p><strong>null和undefined</strong></p>/ w- x5 _8 @6 O5 N; ?
<ul>6 W$ {0 j5 Y) P4 _
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
5 k6 m; I1 a# [8 O8 V  r6 P( l4 ]<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
$ T* z/ S& k: C- s( g; ~9 X4 [</ul>: B2 Z6 M8 g7 l/ L- C
<h4 id="234-array数组">2.3.4 Array数组</h4>
8 t* ]: P) F6 G/ J, B# ~7 ~<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
& v4 V, J" P0 d8 S# ?<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ( x5 h' k2 C' \$ Q, {% v; |/ K' m' z, |
&gt; array1
' j4 q1 V( f7 k' i5 L- r% d(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; S: ], d/ _, `4 ?2 B  r: c! y
&gt; console.log(array1[2])  //console.log打印类似python中的print9 d1 U& x: v7 O% M0 H! P
3' W9 H$ x! \9 @' b
// length元素个数; F* {2 s! a- B. N* V& i# h3 [- v  j
&gt; array1.length/ k! H% B2 y9 m! @3 e! {; _
6% g. ~& A: `9 X; M
// 在尾部增加元素,类型append
; O' S) T- q$ I9 Q, \&gt; array1.push('D')
5 W1 k+ T6 I5 ]; W5 E1 a1 E7
& X0 y8 W! _5 K- O$ w# b&gt; array1
9 }1 {# C; V  d8 U/ c  ~3 b(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']: F( e! C3 A) j3 o, r* z& x( L
// 在头部增加元素/ k6 K0 `+ @, q( z) h5 w
&gt; array1.unshift(0)
& q& M: h( L8 K, Y% q8
$ @7 u* I4 D0 G' J, Q! W3 J9 j. M&gt; array1
: f; H3 s+ m7 J( [3 F' w2 j(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']- R2 r' _0 w. ?
' o5 v, L# T+ R3 ^; p
//取最后一个元素1 i2 I0 d/ P/ v% t$ p$ G
&gt; array1.pop()# M2 ]8 ^& C2 V% j! y% H8 E
'D'
( q5 w3 H- m0 F% A2 l. J&gt; array1( q# G! e7 j7 S1 A- k( W
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
- a( R3 [+ n% J, o8 V//取头部元素
/ H# S- m- x, \. v/ M: x- s; P&gt; array1.shift()
0 v0 Y+ o! `; C; M6 t& J0/ w# `$ ^: k6 W3 n) [
&gt; array1  u3 Y5 N  j. M) R) g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; f+ P/ Q# J6 Z+ [$ w( C
: V" b) ^1 D7 C# s6 q( m7 E//切片, 从0开始顾头不顾尾
7 z' @$ x( `5 a&gt; array1.slice(3,6)
4 R( K+ g# T+ b: [8 I(3)&nbsp;['a', 'b', 'c']
& D% A" q( [% D( @- |5 b$ |// 反转/ P& h+ J. k, W6 A' u- P
&gt; array1.reverse()
% M  W, @/ O3 @/ P(6)&nbsp;['c', 'b', 'a', 3, 2, 1]4 p, k5 k+ X4 ~. U
// 将数组元素连接成字符串1 ]2 l. _! x0 b3 \/ ?
&gt; array1.join() // 什么不都写默认使用逗号分隔3 I3 l1 h$ u+ G+ h* K% Q
'c,b,a,3,2,1'- b$ [3 G3 F# t  d8 w
&gt; array1.join('')
* d0 r- q1 \( y'cba321'
) \* S! E8 ^- @&gt; array1.join('|')9 o$ X: U, x; {
'c|b|a|3|2|1'
: B7 P: Z: R& O& q' @2 z! u
8 e& c! q( h5 a# K' V9 }, p% E$ ]3 g3 ?$ r// 连接数组( y$ @$ W5 P+ e4 R
&gt; var array2 = ['A','B','C']
/ h# u4 f: V5 U/ |$ z&gt; array1.concat(array2)8 w; c5 p* \, h; X6 R- K# ?
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C'], G/ y: P8 x( _! v& ?

) b" M) W# ~8 [+ Z% u$ @, X// 排序- Z0 a. U0 w  ?
&gt; array1.sort()
7 U8 v8 @0 q. V; K( p9 p(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! t* O( w4 A) Y2 D) }
. x. W& `% V0 }+ m0 E* v/ F
// 删除元素,并可以向数据组中添加新元素(可选)
, K, N: u6 _# z( l% F&gt; array1.splice(3,3)  // 删除元素' t; ]( x6 p/ n/ w; ~# J7 S
(3)&nbsp;['a', 'b', 'c']
2 F" D4 }$ J% @1 C# m, L/ Y&gt; array1- n! }( E/ P7 t' ^8 D4 c* |7 L
(3)&nbsp;[1, 2, 3]
( [: Q7 C$ j. s&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
( q: `7 f# O) v  X" t) a[]5 I# w1 r) u: p$ c- I1 e
&gt; array14 M  G& x/ ~6 y  X, ?+ ^
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
6 w0 c' d6 Y% |1 n# K) ^7 U9 `8 c9 `6 v; J" f& `) k0 c
/*
3 u, Y& R$ g" `+ z: Z5 G- qsplice(index,howmany,item1,.....,itemX)
% u  I' B* Z& g- J* n; Z& xindex:必需,必须是数字。规定从何处添加/删除元素。
3 [. p/ b) d6 Y( s! Whowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。) A6 ^. N4 k1 m( t
item1, ..., itemX        可选。要添加到数组的新元素
; V. ]5 i- y* G- W  r9 }" w/ c*/% Q( D5 C9 y( I

' q+ {1 X4 C9 ^& @1 X// forEach()        将数组的每个元素传递给回调函数
2 e8 r  O1 e( v$ w8 [: @&gt; array1.forEach(function test(n){console.log(n)})+ A8 f4 D' A8 m& f" w& [- K" g
1$ G3 c  n( K; l
25 O% h/ }2 M. k
3
' w7 H& d4 \+ t8 z1 C% \+ h A+ @8 _1 B* t: U0 X( Q8 u
B# R: s6 l8 B' N, y) |
C* p* R! K- U7 P
// 返回一个数组元素调用函数处理后的值的新数组. U$ W( x  Y* k4 A9 |5 q8 E+ K
&gt; array1.map(function(value){return value +1})
; q1 ^* h  N9 d# ]+ Z+ l(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
7 U9 Z) |8 N* l: {7 a8 ^</code></pre>
: ?  r0 G  e8 i<h3 id="24-运算符">2.4 运算符</h3>9 h& p+ \& G" O5 e6 z; ~
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
% o/ M" I( w* t# y( @: w<p><code>+ - * / % ++ --</code></p>4 Z* S, Y# O6 m/ B' D
<pre><code class="language-javascript">&gt; var a = 66 K, g$ R0 V/ |7 V
&gt; var b = 3
7 E0 b/ ^" f# L8 v; Y* v// 加' m# ?8 K. k( V, l4 z
&gt; a + b
2 g0 {' a9 y  }7 Q5 F6 z9
" ~# i3 k9 G' V/ |9 D// 减
# u6 P) ]# e0 I8 Q" t&gt; a - b
0 l6 G) j: R+ r# a# d3
- c# D! ]' ]8 M6 H# y7 k* @7 L9 K// 乘
* k/ e" s9 I/ y5 F4 _&gt; a * b
1 N! u9 t* E6 G$ [5 U18
) l! ]& h! ~2 N6 ?! G+ M+ e// 除8 d9 ^3 a; K7 ~# P
&gt; a / b2 o9 ?/ ]2 H5 ?
24 a( o1 K: P) u0 y) p# v+ ]( A; {
// 取模(取余)
5 S* i" q9 @6 s  `$ g. P&gt; a % b
+ R) V4 v/ z8 F) e) B0
! [  M2 p* y; Y" p3 V* D& x// 自增1(先赋值再增1)
/ }0 s0 n% Z2 S&gt; a++
. Y( a* c6 J' p4 k9 u6
8 J8 |- A6 J! l; c' }, Z3 H&gt; a3 Z2 }- B& Z7 Y3 o4 e
73 G6 b* |0 ?) J& a, J
// 自减1(先赋值再减1)
. c/ @0 n7 X* B&gt; a--& K8 b/ ^. z* L7 s3 z
7( p: W8 j$ l8 C! z1 t
&gt; a  v* [6 @( E' H4 ?
6
# E* `4 @: F% C// 自增1(先增1再赋值)+ `; [& x; N+ q
&gt; ++a
7 S% ^8 K* y6 @# g3 x7
5 f- W& d# T. A5 R/ e3 s9 F5 v, ?( I// 自减1(先减1再赋值)2 A& [8 @6 b& [5 P
&gt; --a  y* B: [) O+ S. s# T- I: B' r' d
6
2 o6 T0 |4 V  p/ V& {7 e&gt; a
6 I. |! n/ w/ l/ y! u) a* I6
7 y5 g8 ?- M- F$ v8 q% m, I* g4 m7 k  W8 e" K1 L; ~" Y6 u
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理/ }$ p+ |, g5 E% P5 k2 ?
</code></pre>* E4 B5 n( \1 ^4 q+ [+ ^& Z
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
; p. @$ Z* A; [' [: i1 h<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>6 F6 D9 H$ N$ {8 ^3 i  `
<pre><code class="language-javascript">// 大于9 p/ r. h; h% n4 t. @
&gt; a &gt; b% Q' I9 j) R4 a. k/ j" D( E
true0 n  x/ ~  O1 z$ z; O7 G
// 大于等于
+ A! h; I+ M% r4 r) b$ q&gt; a &gt;= b
2 }" s2 ~2 D9 v* N& z5 J& Gtrue
8 }% D: i& ?: _: q( T// 小于" p) t) w' D) B/ K
&gt; a &lt; b$ R/ j+ r& q8 X6 h
false
1 E: S. n  L3 h& U' M9 u9 G// 小于等于  q0 k" l- t$ J; {% K# `
&gt; a &lt;= b! v1 c- r, T. p( K# x
false, C$ p$ x5 o+ c" J, g7 T# ]8 C5 `
// 弱不等于* g, M* a6 ^" g. d1 H. z
&gt; a != b
% N$ m# H0 j, A+ @7 f- f+ n) Dtrue
2 s% g  l4 N* L0 A; O// 弱等于
% ~6 c: Y/ }" T3 _8 s&gt; 1 == '1'
2 D- r2 K+ w6 \- j$ |" E0 Ptrue3 i! O; B+ `+ F. x( L: S9 O
// 强等于, Z0 d( a( Y+ N# P) d- ^$ n
&gt; 1 === '1'0 Y7 \, v; \* [0 b& E
false
2 l3 t! F+ u& m' A4 c6 f// 强不等于0 \& K; T2 \% v3 v6 g
&gt; 1 !== '1'8 p1 }6 j8 l" i6 [
true
7 H% |& F/ f% f$ L
) ?- i' T/ O4 M; I. o, V/*/ K- G, D" n+ P! Y& W/ ~2 p4 M
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
2 P$ R2 a# [2 r5 m*/
/ t% F( w1 z) v; Q# X/ r: p0 u. V</code></pre>
( M7 g$ O% h1 B! l: l<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>3 v- k& }& l" s% \/ l
<p><code>&amp;&amp; || !</code></p>
0 J+ }: {# I+ x  g  d5 Z8 c<pre><code class="language-javascript">&amp;&amp; 与
/ ^; z) ~/ `  o; D" _6 f# i|| or 1 z0 T0 `8 }5 v
! 非
( B2 E1 ~# O$ s! T2 f9 f& v8 e9 V. X: _</code></pre>
! V' s. }" W8 [<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>$ l2 i1 Q. H- ?5 E( X& f6 ]
<p><code>= += -= *= /=</code></p>+ s7 k; @  [: u1 ?, c" f
<pre><code class="language-javascript">// 赋值" W7 a% I; T" p4 O& V+ J6 {* v" u
&gt; var x = 34 A0 M' s7 n0 H" a
// 加等于
6 ]8 ]# C  W! a4 [&gt; x += 2
0 e8 {  n+ ?! t5
3 M! e7 K% e' U  X0 Z! @. U// 减等于. k1 R% w( e3 x
&gt; x -= 1' i/ {0 A+ L, N1 q6 u
4" f6 N+ C4 T8 ^- Z
// 乘等于' i0 h$ S$ s/ P+ Z
&gt; x *= 2
6 x9 R/ e' B& s# ~  ?8 _8 \1 s  g0 S8
5 g: ~: v- z; W// 除等于
" `6 {) V! Q, G' D&gt; x /= 20 m/ V; {) ?9 Z* V9 ^
4
0 ^+ `) B: V3 y' C2 z& R</code></pre>
6 D; T0 z' W# K( S6 H& ^<h3 id="25-流程控制">2.5 流程控制</h3>
4 X; o9 w& R& {; J4 N+ b<h4 id="251-if">2.5.1 if</h4>8 H  t8 e- v; \0 L9 _) a# M& A
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}4 i9 K8 s/ n, Y3 d* I4 X  O0 F6 _: u( E

2 s/ \1 i- z, I$ w2 ]3 X( v&gt; var x = 3& [3 S( J  r$ y3 V
&gt; if (x &gt; 2){console.log("OK")}0 r9 d$ m% U! O7 k
OK
" _: I6 c5 h  I+ ~/ K4 J3 X8 G7 _2 \5 H; _( Y  h8 d6 v( z) c+ I
2, if(条件){条件成立执行代码} . v/ p) P  S3 |  L& W4 q6 }1 ]
        else{条件不成立执行代码}" h# f! k; u3 t- H
- e  G( F. D7 J- V, e, S0 s4 w
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}8 f/ G9 s# K/ ^$ I$ I. k" o+ e
'NO'
# i( a, C. Y) A2 I9 U1 d$ j& A. @
+ g) g& W. W) r- g! w* M4 r) `' e3, if(条件1){条件1成立执行代码}
* a/ X1 x; d' A1 e        else if(条件2){条件2成立执行代码}/ ^8 J# W0 T% ~+ o1 l7 z
    else{上面条件都不成立执行代码}
1 ^1 q" X& G$ `7 S9 M! `  k+ t7 b+ G0 r5 G. c
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
7 A* M0 K0 p. m  S4 s Ha
. M6 Z! M& |% A$ i: a</code></pre>7 @& W0 I3 w, H/ S  n
<h4 id="252-switch">2.5.2 switch</h4>
5 X, Z' L' [% u0 G/ G) [+ L<pre><code class="language-javascript">var day = new Date().getDay();
; T9 s/ G# Y* K7 ^  u* mswitch (day) {
: G1 A6 y: Q9 P  case 0:
  h' |" Q/ `% L  E! X  r$ X) v  console.log("Sunday");
, y4 e* y- r* t; m7 X7 T" n  break;, ]1 N7 h" f5 |# ]
  case 1:9 B5 I# v+ W0 m" Z# \7 ]& g
  console.log("Monday");7 I' o% b0 H4 w/ V- f) N4 ^
  break;+ f3 F2 z' O0 Q. ?" J
default:
- v& K. S7 U# z2 A+ [6 [; q  console.log("不在范围")  h2 e& P; o6 O/ c) m
}
- |' {* k( _9 ]+ ^8 v4 ^( B 不在范围
; b- D' P1 e  x' O' D3 [* p</code></pre>& C5 w# D0 h2 ]" c, n. @
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
% Q; x+ t6 h5 ^5 Y0 I- S# s<h4 id="253-for">2.5.3 for</h4>" N) J6 ]9 `% S2 N9 I
<pre><code class="language-python">// for 循环
' |4 z! w! [+ g7 B# l% E* D# g        for(起始值;循环条件;每次循环后执行的操作){% T7 y) e1 G0 {% i
        for循环体代码
. A% q& Z1 u: ~$ @1 K& e    }
* W3 h$ l0 b( I. i
, b8 M; S. j+ @for (var i = 0; i&lt;10; i++){3 b9 t5 E/ l4 }7 K
    console.log(i)# p+ @" `/ O: }: ~
}$ V0 g; t# N' a, _
        0
) T4 _  d9 I- O# V* L        1
) V: q" R% _" r1 O; Q8 v7 Q6 m        2: t) T- N* t# [& |# }" t
        3
) N3 I: ^- |2 a3 E& q& D4 D$ X        4
' z3 T3 k' w2 H  Q; y, Y        5
$ Q! _' w" o; T4 Z) z        6: F- p: r& w1 G# n
        74 h8 Z- U* H: _8 r+ b- J
        8  G$ D1 q) i( x4 u1 g" ^
        9
8 Z) f) |5 T7 D</code></pre>& X/ [2 J& ?; Q! M6 e  ?
<h4 id="254-while">2.5.4 while</h4>
% Q! J/ y8 V) F  m2 _' Z<pre><code class="language-javascript">// while 循环' r+ e+ w, C/ H
        while(循环条件){' m9 b/ q' J+ T; c& f5 [# Q5 s
        循环体代码" H! ~2 p9 d  p) H  x9 j- w, D2 e
    }: {9 f  ^+ u5 e6 V

* V) y- y4 M) p0 f&gt; var i = 0
2 p8 X  A8 }" `/ j5 f" t1 V  O; G&gt; while(i&lt;10){" c3 N  s! j; |/ X
    console.log(i)
& e6 N7 \5 X& @5 Q    i++
! Z, \' ~( ~) W0 F: _  w}( w, u0 n+ [8 V1 k) n! `2 W
0, }# d! R5 W3 f$ y4 S
1
5 t6 k. o" u9 ^- M7 B  \ 2
) O( `( |7 q7 D; R/ h: x8 Q 3% f* ?/ O& {+ i3 \4 X  q. `4 d: X
4
9 G  R& `+ j, l9 m* m4 Q, ~) k 5
$ D& G. D  ?. K2 E8 Q  i, `- P 6
2 V  h, }) H+ f 7$ `3 T8 v5 S; W4 o* B8 s
84 [8 G# k/ K1 Z' X& m0 j
92 ^4 M1 C. N. D& ?4 ?
</code></pre>
7 Y, j2 c/ Q+ ^; R; U<h4 id="255-break和continue">2.5.5 break和continue</h4>
0 t8 s% q# t6 L) b; x<pre><code class="language-javascript">// break
% q2 g: ^% ^9 k' K/ k; Q5 s$ sfor (var i = 0; i&lt;10; i++){
, g" o8 w; Z% b$ {! d7 V    if (i == 5){break}0 Y8 M$ W1 @8 B6 P  F! L
    console.log(i)
2 o+ P7 q& S; U, T. B& p0 s  o9 [}% D$ E! n$ F, o' A. F$ y' p9 {
07 ~4 }* x$ w- L" c4 P
1
% O1 k" o( a% U, m5 |6 L8 r9 s2 H0 K2 ? 22 y  w  D/ i' R4 K! O! \
3
% S# Q4 B  K. R# }7 z$ [2 X 44 h  V# @6 h; K! B% D1 R+ n, b
// continue; f* ~2 m0 `4 c5 @1 @% U+ R% K+ a
for (var i = 0; i&lt;10; i++){
, @: J  k6 `9 q    if (i == 5){continue}
' d4 Z3 ^2 U: m7 I. h    console.log(i)9 h- q. k3 D& T5 U  M
}
. l3 l6 y% L, P) L, {, [ 0
4 y% |8 n* `! J5 {( A# k 1# G/ V  ?* Y, ~4 b  C! m- E& e
2
  P7 y8 k6 Z& R& f  r  ^ 3
! A1 Z& m5 g( o8 ^1 i* g; z: X 4
: D) U1 F+ T) J+ U0 Z8 `  |5 ` 63 w- t" p/ L1 _% Y8 P
7
- N) K5 ]9 z7 q+ I; H 8# _5 q' y( t. Q- a" S0 X* @  y0 E
9' g, k3 j3 [( |7 E, ^( |# w# A2 ?  n0 T
1 N' u' U0 i, J8 d3 T( L5 G2 ?
</code></pre>' E! g- |5 Y+ B
<h3 id="26-三元运算">2.6 三元运算</h3>7 p' f) m$ ?0 O% l6 m
<pre><code class="language-javascript">&gt; a
5 u/ w, G: J9 u% G, u62 v5 Z, l! i5 r( `* m
&gt; b+ p0 f3 [& s+ [' w, P
3  m) A6 z1 c, L: `. x. C* \* a8 ~! I

& M# V2 e4 f' d: P9 K0 `3 f//条件成立c为a的值,不成立c为b的值7 d/ s. W8 g# W( e7 l  @# r) ^! F
&gt; var c = a &gt; b ? a : b
0 P3 {' D1 [$ v4 K* ^&gt; c9 U! i; `( S5 H, H( ]- L
6
* d6 W/ O9 G/ e% w
/ O# s" l0 }# Y+ U3 }+ `' g// 三元运算可以嵌套
+ ]5 s8 L- o9 e</code></pre>9 K0 g- {& j% }% f* L7 L! O
<h3 id="27-函数">2.7 函数</h3>
3 o# i  t* W# u2 A1 [<pre><code class="language-javascript">1. 普通函数
1 T+ w' y5 A3 |3 b9 ^. t&gt; function foo1(){
$ m) @3 E4 h: I    console.log("Hi")
# @' F7 q5 f1 c0 M0 s0 H5 p' O}
0 u1 a0 y3 ~, j$ m2 _) a8 D1 H( j* B" a- g8 ]& b- v
&gt; foo1()1 d! C/ v- m+ a
        Hi; J8 l0 M5 Y  y: p
2. 带参数函数
/ }- ^5 S( h, p&gt; function foo1(name){$ C4 b% }6 v9 B1 L( T' k2 b' V+ w
console.log("Hi",name)% ^* H7 N$ s! x" ?- |) v. c! x; g
}
+ ]4 H9 r' v: T$ y: U
9 h# G/ b# V% _# f&gt; foo1("Hans")$ |$ p- x8 M$ v' i! W
Hi Hans
' N4 r6 `$ ~# ^0 x* W& c8 ]
2 g; L6 D9 @% J2 C% C2 F2 f&gt; var name = "Hello"% A7 y0 e4 y0 F$ K
&gt; foo1(name)
8 w% n0 \$ O0 \8 RHi Hello* R( o" V- y2 j$ r0 s, a* e

) n. n, D9 }0 t" Y4 A7 ?% r3. 带返回值函数' o. [6 w, {' u, [3 {0 f( w
&gt; function foo1(a,b){
) `  p6 K( ^; e        return a + b   
  r0 l3 L, o( i2 n}. J# m% U. K, {( ?8 O( O
&gt; foo1(1,2)1 j! s; r. Z! p$ b8 I
3
+ L( U' g1 _4 m9 Q- X; d  U&gt; var a = foo1(10,20)  //接受函数返回值
- o! L% I" V# [+ Q! @8 ?&gt; a0 d4 O: G2 Z: b$ g. M2 t' \3 c7 Q
308 s" S& k0 ]$ L7 e: S) D
; q  {  C6 A+ T9 e
4. 匿名函数9 z$ z9 u" _4 u, [
&gt; var sum = function(a, b){
- n% I/ z5 _$ _+ P( i' ~$ v  return a + b;" \; A! `" k" d& X
}
: B7 V; ?5 ^" u6 B9 Z&gt; sum(1,2)
: ?& |& n( Z, p# ^$ g" Y5 r3+ a9 P2 Y' e. N1 X
' o9 c" s. i: X+ p+ J
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
5 K+ F. v3 I  [&gt; (function(a, b){7 w3 M8 ]1 Q6 H
  return a + b& b  c0 ?* h3 @9 y8 U! ^- k% |* Y
})(10, 20), Z5 [; t' c- m, X
306 l: L# |$ M9 T! |1 r
1 r7 E3 }3 A- g
5. 闭包函数
& S# a& |% M* q# j0 ~) }7 A// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
+ R8 \. N" D: Z& m6 E8 [9 G3 Q4 Evar city = "BJ"% Y  I1 K- r) F6 ^7 w
function f(){
% N; {/ m9 H% \9 ?, i    var city = "SH"# G5 \  [% y2 _# U
    function inner(){
& `, T# W! ^3 m2 k) U9 d        console.log(city)
4 H  B$ }/ s+ h. n+ j+ u$ B    }
4 V; K2 h+ ~$ F    return inner: P1 X7 _4 ~2 p) {& C' h( D; |* O
}' F; x/ U" ]$ ]7 @& Z7 w! S0 Y0 S
var ret = f()" n! W* f8 a" s: y0 H- b
ret()
! b1 F# `1 l8 i. O执行结果:9 C# |& \3 L) m+ t6 y
SH! x8 m- N2 k/ J, k
/ o: p) ^. K9 W$ h6 ]+ V" t
</code></pre>- l4 H/ u4 q' m% `2 X; z
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>) M2 M) {6 `& m' O6 O2 o
<pre><code class="language-javascript">var f = v =&gt; v;
; P2 d- c% H. m9 I- n// 等同于
, r( K4 T  w, {, \var f = function(v){
  y* z7 h1 H/ |4 S! ?  return v;
. `' |! U# }; [9 L; `$ S}3 v; B2 Y- ]6 m- U5 z% @) I
</code></pre>" E9 j; ^& |2 V8 U* K* q$ Y/ J4 @
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
$ N0 r, Q4 r  S<pre><code class="language-javascript">function foo1(a,b){! S  b% s* I! g2 K0 i8 V4 `
    console.log(arguments.length)  //参数的个数
. j  ~4 W" s6 l( U, F) ]" ?4 ?- G    console.log(arguments[0]) // 第一个参数的值! h& E, R9 b9 ]! z1 C
        return a + b   
9 j3 T0 a+ _1 i/ C}: y4 @, r$ q5 y; o4 p
foo1(10,20)0 V# ^( ?& k* E5 |: Y
结果:( R+ ]0 T* B9 K% |
2          //参数的个数 , x8 m2 h' k  r  U  U( U1 y
10        // 第一个参数的值' u9 k3 A+ b) I$ Q. V1 ]
30        // 返回相加的结果6 ]- V6 R0 n. O6 G: ^1 j" z
</code></pre>3 f3 v" z( I2 X0 \! S  H8 R
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
; o* g* q7 ]: [- ?<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>1 J0 q/ _/ [6 _
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
9 u3 ^/ x6 ^# @$ K<h4 id="281-date对象">2.8.1 Date对象</h4>
% m2 q& L2 I6 w- F/ @<pre><code class="language-javascript">&gt; var data_test = new Date()* C: [3 x3 p5 L& R5 }# B: J
&gt; data_test) {9 Z, @6 K* I
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间); g/ c. K0 K$ M+ [% ~- m% [
&gt; data_test.toLocaleString()
$ |" `" J0 d6 A: k; k'2022/2/11 下午9:44:43'3 N* b& j1 y" x4 @( O5 Z# R$ a( Z
+ d8 T/ w! A* ]
&gt; data_test.toLocaleDateString()
+ T; A: n6 Z2 V; c8 n'2022/2/11'
1 e  f! _* }% m6 u1 ]$ g; J5 N& B! c5 R1 f0 D3 b" S
&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 D  P! e" {) U" v
&gt; data_test2.toLocaleString()6 f7 V3 T. V* _3 ]. {
'2022/2/11 上午9:44:43'* q5 Q" h  m$ M
( r  y0 L& w5 b+ r
// 获取当前几号
% V, F$ H% c  T6 T; t&gt; data_test.getDate()# T8 B) T9 t* X) Y$ w8 N$ F
11
3 V! p6 v2 w! O  h) `// 获取星期几,数字表示
3 p! V; e) H3 v+ q$ o! m&gt; data_test.getDay()  
: Q2 [) b" W& g! o) U5
  E4 K2 I* G( T3 c// 获取月份(0-11)
+ D3 g; H6 `5 B9 |; ]&gt; data_test.getMonth()4 `1 t4 ]1 x, p: M. L# h
1; i7 j' u1 }2 t- @
// 获取完整年份. O5 O, Z& \( @9 E( y- z
&gt; data_test.getFullYear()
# V  I, G2 \* H2022
- ~4 k, c) `- {3 Q4 M( v% N# e// 获取时
' U" G' g4 o+ {- [7 L1 K1 J& t9 |+ Y&gt; data_test.getHours()0 K' i7 @. T- C
21
" K) O- Z% |- s2 g, J  m  M// 获取分, k( \5 m, Z- P3 ^7 S3 ]
&gt; data_test.getMinutes()
7 c! d3 h: G, l- g. T8 |" \9 L44* j9 ^* ^! I" p) H" d% s
// 获取秒3 |1 ?% ~; z7 o3 |* ?
&gt; data_test.getSeconds()
' x5 d* G  a/ I* J43* c. d# J& U% X4 m7 C
// 获取毫秒2 X! J/ V+ o' Q7 H
&gt; data_test.getMilliseconds()
4 a/ l: }8 e, A* V# k290
" u5 F. _9 H8 Z1 U  k8 }, ~+ b// 获取时间戳9 K7 c! Y/ \, K3 ^/ O8 l
&gt; data_test.getTime()" H( D9 k" R' z' u7 T& r8 P
1644587083290
$ }. Z' i& e) k' B) g0 H6 Y9 F</code></pre>
/ O6 R- n# s+ @4 e! _# E4 J- S8 s<h4 id="282-json对象">2.8.2 Json对象</h4>
- N- f7 R5 I8 u$ y' {/ }1 o! m, E<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串7 F- v4 o( V& I7 @
JSON.parse()  // 反序列化,把JSON字符串转换成对象6 R% F8 N( y! k$ x' \8 g
+ s8 c9 p) ~7 C+ @! W! S
// 序列化
) c" S$ w  @$ e9 }3 Z9 ]2 ~&gt; var jstojson = JSON.stringify(person) 9 E7 M3 c* ]" F# k! z& }/ Y9 `
&gt; jstojson  0 ~* h$ ?7 P9 d
'{"Name":"Hans","Age":18}'  j* _' r8 J# Z1 p2 s6 k6 M
2 `) U8 k$ _$ z8 g' G5 E4 p
// 反序列化
/ a' E8 F' m4 d% x6 F* d5 `; C) o9 a; m&gt; var x = JSON.parse(jstojson)8 s( z5 I( f% t3 S
&gt; x
. G- q1 }' g3 W' Z3 K1 \% V{Name: 'Hans', Age: 18}
5 P7 q2 @3 }: s  g1 L2 U&gt; x.Age
9 K) m, J% a% `' h' o4 V18& h0 K# X# C! z$ P
</code></pre>, g( a' D4 L) D* v% N  p2 j1 [6 a
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>' X& B0 d  h# {6 B) T0 N
<p>正则</p>
- i, n% g  W8 ?' I<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");4 A) S1 b! i6 e& t8 c: u
&gt; reg1
; }+ h' E  C& A( r" ?/^[a-zA-Z][a-zA-Z0-9]{4,7}/
. ?  i" T, r! G1 Y# ?% _' \&gt; reg1.test("Hans666")+ N3 D9 T# o2 F) [
true
( H. u7 |2 d5 ?" q* F% c0 v( M1 ]# J7 k# q  g; X
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/4 w8 l3 I3 J  d  y: }5 b9 a( G
&gt; reg23 A% j" w5 @# p) e9 B% g9 y* c& r
/^[a-zA-Z][a-zA-Z0-9]{4,7}/. V- W* ~3 D; I% Z  L' G
&gt; reg2.test('Hasdfa')
* T7 G/ C# H. g& z9 b& B/ [3 G" Ttrue
+ K/ }' }  z6 H) L# `8 c% K1 [# f) b( q3 v7 @9 C, I$ m7 c0 M  n5 G
全局匹配:% ]& Q) d( Y5 M/ ~* w
&gt; name2 T' P" @9 Z. a- a0 U
'Hello'
8 _7 {* b# O1 X3 D# {! _0 b&gt; name.match(/l/)" I7 x3 A; ]* ]; g
['l', index: 2, input: 'Hello', groups: undefined]
4 \3 P  c. J2 ~0 F4 t( O1 a
* o& [6 e* X3 J: _" j' w% w1 v&gt; name.match(/l/g)  N0 G6 k9 ]' }; Q) x
(2)&nbsp;['l', 'l']
! j' I5 u) E& s2 U" k" c// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配- z) m7 J/ W( ~0 Q" Y/ g6 s

; E2 B. s* m: j/ Q: r. t全局匹配注意事项:0 _$ t8 R0 J) O0 Z4 M: @1 G
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g3 d& k: v/ T5 m$ L5 m0 ]8 q2 h, y
&gt; reg2.test('Hasdfa')
' ~3 g  l+ u# U2 {) ]) A- N* htrue
7 q9 {( v9 [$ Z&gt;reg2.lastIndex;
8 e' @; n; w8 L) \; |( B6# l7 F$ W7 E( p" U: R5 {
&gt; reg2.test('Hasdfa'): g# B8 t7 l$ C) |+ U
false
) s* d" E8 k- o: S  N' U- y&gt; reg2.lastIndex;
0 z1 K: E4 d( Z. z7 K0
! ]7 C. d. }5 A! A( J4 v$ E&gt; reg2.test('Hasdfa'). {4 W% k8 v1 X: v, n3 \" U
true) k' q4 X7 [$ `+ G1 l/ N* K
&gt; reg2.lastIndex;& k+ ]: I; B# Y9 W+ ]/ @
6, h0 q# |& g4 x# D: I8 T8 y6 ^/ y/ Z3 V
&gt; reg2.test('Hasdfa')3 Z4 D: h" b5 S3 D, V/ d, E1 _  P! E
false
3 _& e/ ?: q3 X+ V7 u6 f1 |' ]&gt; reg2.lastIndex;
; F( X% U3 H( m9 P) q0 w0
: x/ T- L7 a: h9 M, {) i6 _6 {// 全局匹配会有一个lastindex属性2 t% R9 X, B' u. I. P; z$ n9 @
&gt; reg2.test()2 d" t3 x/ g. }6 j8 N! w* h- u
false
# q0 N0 Y$ n4 y5 D( u  B) n/ D* g&gt; reg2.test()) A: l% N( ~+ Q) F3 k
true
4 `8 l" C- E( E% ?% J// 校验时不传参数默认传的是undefined6 C& d$ G* H* x: X3 H& u; P4 V
</code></pre>
' Y* z6 G0 H+ u( m. ^! n<h4 id="284-自定义对象">2.8.4 自定义对象</h4>; q2 c" ~' M7 z! L$ ]5 H
<p>就相当于是<code>python</code>中的字典</p>
# p0 v. d6 B1 r- X7 O& ]<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}! ]+ b# X4 D3 i1 L0 [
&gt; person
  J. k7 [9 J3 C" B" ~( e: ^{Name: 'Hans', Age: 18}9 r. X7 s: x! q* F8 v
&gt; person.Name+ Q" Y6 ]4 p) \
'Hans'2 V5 d( @; [1 j- p( N1 k2 [
&gt; person["Name"]
; B2 a# B% f9 Q) a: g'Hans'8 p( i5 q8 F6 E1 M0 A/ g8 j9 V8 r

0 {( `- p6 H- s+ G! W: A3 W// 也可以使用new Object创建0 }6 _; J1 ^; U+ y# n
&gt; var person2 = new Object()$ n: Q/ A4 v* A' ~! y
&gt; person2.name = "Hello"
6 L4 O$ A4 M# Z0 T' Q! |9 o'Hello'
( D* a  s2 K$ a7 e&gt; person2.age = 20
) U, V( ^. ?% u/ c9 _9 Y0 \20" N" Y6 ]$ Q  S
</code></pre>5 W% t/ W6 F# n7 d. T! b6 k
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>4 e, l6 c1 Z$ ~- Q  i4 Z9 {
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>' L% k/ n+ X' M& c1 Q, p
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
9 d' W; B0 e1 y$ M; Q  m<h3 id="31-window-对象">3.1 window 对象</h3>
2 Y  t9 U$ K" v% y<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
. ]( v! {% f( S( ^' q0 L<pre><code class="language-python">//览器窗口的内部高度6 M: p' e* j, C) s
window.innerHeight
6 K& Y8 E. M0 E; G7 Z! |1 |706
7 u$ Z. M8 E2 h8 G4 N+ G% N//浏览器窗口的内部宽度. M1 J6 Q( u- h! J3 n  B
window.innerWidth
* V7 ~7 g! x: ^: S0 a1522) M2 I3 D- V5 N6 A" T, k0 M$ \
// 打开新窗口
8 |# J4 d+ w7 ?. wwindow.open('https://www.baidu.com')
  ]0 T1 b' N2 @' X% W6 hWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
) g( P9 m  t0 \8 A// 关闭当前窗口! i) ]3 e* s4 }& G0 p
window.close() 9 O# Q: A0 N: P) u
//  后退一页
  @9 b$ r% o; L4 Kwindow.history.back()" i3 i/ u& V0 {2 d8 |: E8 p
// 前进一页6 B" M- [5 I' N* E
window.history.forward() , F: X/ y3 N: w4 X
//Web浏览器全称
8 {! E7 {2 j4 T& rwindow.navigator.appName3 R5 B' N0 d. W+ O; B0 q0 P8 M/ e4 ^
'Netscape'( N4 [/ W3 T" N" w
// Web浏览器厂商和版本的详细字符串
4 w' F( p2 m. S& q) K5 Awindow.navigator.appVersion
$ f# U% y/ H0 y3 k' C$ j" h( V) w'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'. i  j* \1 H# T; B6 V
// 客户端绝大部分信息
. i* b1 M5 S8 a: }" M1 N! Fwindow.navigator.userAgent+ B, S) L& I# z  Y: T; U4 `8 v
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36') c6 T. Z- t& S3 [( \+ J
// 浏览器运行所在的操作系统. {/ Y: o8 [* G5 P& n4 P
window.navigator.platform" l% ?+ P! D4 w; g4 Z7 Z7 K
'Win32'3 D: y# I5 F4 i8 n) \% ?
1 }, Z. N. E% W. X, i5 W7 z
//  获取URL! s5 h. u8 A4 D- ?  k1 q1 ~, B" L
window.location.href- z8 j' H0 t& L; U
// 跳转到指定页面0 U  b3 w- D9 S* O
window.location.href='https://www.baidu.com'. W6 h& r: ^* c# k) N4 X5 m9 W
// 重新加载页面
; H% V/ g' ?3 v, p( B, f/ @; @7 l5 Swindow.location.reload()
, d5 T# d" a$ c/ s</code></pre>' s+ A$ u" y* w% X8 x
<h3 id="32-弹出框">3.2 弹出框</h3>9 E6 W0 @& ?1 d$ f$ j" {
<p>三种消息框:警告框、确认框、提示框。</p>* K7 Z) G( o+ @9 ]5 u6 k8 z* m$ }
<h4 id="321-警告框">3.2.1 警告框</h4>
. Y; M  N4 N7 J; G3 ~% ?<pre><code class="language-javascript">alert("Hello")3 n9 ]3 ^& _, U- c, t
</code></pre>
( @9 p; Z# S! ^' r: m<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
7 F% {( e3 ]$ ^6 l3 R- H<h4 id="322-确认框">3.2.2 确认框</h4>
3 z% @+ \5 C. Y  W: z; Q' D<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>" g: d) F8 C3 w$ w  j/ n2 e) K/ }& M2 Y
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true3 c6 s$ r, M  F; y0 J6 x& o4 D8 k
true
8 v* q$ _- d/ B6 r&gt; confirm("你确定吗?")  // 点取消返回false/ T  G5 y: p! ~6 O3 `0 B; m
false
) u& E2 {8 _6 h" B$ l( P</code></pre>3 g# W+ Q3 p; b* A" A2 z0 j3 F
<h4 id="323-提示框">3.2.3 提示框</h4>: _, J! j& T4 U; U  y3 d
<p><code>prompt("请输入","提示")</code></p>5 @9 c( ~; e3 ^- \$ A
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
, P7 r8 w; |6 D  W  U3 C<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p># }  P. F; B5 _9 R* m/ z$ `5 l
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>: C1 D6 D% n) I4 {6 _
<h3 id="33-计时相关">3.3 计时相关</h3>/ N7 R; m& J" |
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>& ]. D; @) Q; |$ ^% h: \. @' ~
<pre><code class="language-javascript">// 等于3秒钟弹窗
! e7 p* |: Z4 `+ w% Y/ q6 C2 vsetTimeout(function(){alert("Hello")}, 3000)  e: h: ~7 Q  m! M$ j8 T

# R0 Y6 u7 M! a4 [) \& Qvar t = setTimeout(function(){alert("Hello")}, 3000)
+ w6 g4 M6 c# a1 ]+ V3 r
8 V6 T. |; D7 E; x+ ]4 g// 取消setTimeout设置
2 Y; x& z6 ]7 tclearTimeout(t). ~( h$ T6 {, i2 h
</code></pre>
) H( m2 `+ `1 ^3 j( [* Y: T  T8 \<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>0 j# u3 @! I) e) H9 `* w# A
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>' J" c4 {' g8 E0 I* l
<pre><code class="language-javascript">每三秒弹出 "hello" :
: N7 I  E6 d$ H  u6 `- G& DsetInterval(function(){alert("Hello")},3000);
& D" [) t% F/ P0 H: X% j* p( U</code></pre>4 ?: g, Q7 y1 \! V# j6 E. s
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
! _' S5 Y6 T! E<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 Y/ T3 R( w3 P  Q/ \% n5 i# E//取消:) B, e- D8 \* [
clearInterval(t)3 g0 e: F7 u" C& a, P; j& P7 [0 N
</code></pre>
6 }% U8 q, u3 R! Y, i/ Y  w3 Z
  B( o* r# _( y- M0 g) a# M7 l* g
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-11-5 14:51 , Processed in 0.073069 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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