飞雪团队

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

前端之JavaScript

[复制链接]

8119

主题

8207

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26687
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
0 t* \2 N5 I3 {" V; W; C: d
<h1 id="前端之javascript">前端之JavaScript</h1>
; f0 g' a* d4 ~  Q8 O* i: R! ?<p></p><p></p>
! ], \; u0 t3 z7 B; H' k. X; ^2 R/ ?. A<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>& D' E: V$ l- r1 N. s* d
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>3 r: f9 y2 o) n& x, T) M
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>$ y( \( N. K! N2 q. @( H6 z1 _0 ]
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
+ n' V7 ~9 @- c. q它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p># `5 p$ a, r3 m, V# {
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>. f) @2 S  v* t- c
<h3 id="21-注释">2.1 注释</h3>
" ]; h, u8 r  D) [5 K1 F<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
# G8 }9 W1 c7 I4 N, ^<pre><code class="language-javascript">// 这是单行注释
( w# w! _) X( Q5 R5 p( G9 _% o* X' j3 }/ j
/*
: z) l% h1 L/ V( |& O这是多行注释的第一行,
: J9 F# I9 [) f- e这是第二行。
8 ?4 E5 n2 x" @2 ^( Z*/: y4 X: v! F1 G: h4 J" _
</code></pre>2 q$ M: c1 c4 }+ e9 A* K
<h3 id="22-变量和常量">2.2 变量和常量</h3>$ d/ [5 c8 v# V
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>8 M# y" s$ x* d' ?
<ul>  I' P0 y3 ^; {$ ]- b  F3 I
<li>变量必须以字母开头</li>- j' f9 I1 C1 Z7 X/ Y$ p. P
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
9 x4 Q) R% @- N) P<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>' o2 s' c+ t3 h9 P
</ul>
7 j9 t2 Q! y2 A# r<p><code>var</code>定义的都为全局变量</p>. d, ?' J. o* l; V7 T# k
<p><code>let</code>可以声明局部变量</p>, G& Q; V  [( _7 b! ?& t' E9 E
<p><strong>声明变量:</strong></p>2 V- G& W" T, R9 V1 f, r2 Y) a
<pre><code class="language-javascript">// 定义单个变量
% k3 w6 q+ `( E+ E# P) [0 ]&gt; var name
& s9 W6 U  r$ |# }+ U&gt; name = 'Hans'
$ H4 J$ b/ H2 H2 g//定义并赋值7 c# ^( x% [8 Z& [
&gt; var name = 'Hans'
( x+ j! z' d+ f$ a: [&gt; name! b$ e- r- [/ [( Q$ [
'Hans'  X6 S2 {! k/ v  t7 U. p/ E( ]
) L5 \8 X; W0 W6 r" w
// 定义多个变量
" `& [; }3 Q% ~8 P) w1 }% |  `&gt; var name = "Hans", age = 18
4 J4 O8 @* P, K' g% l&gt; name
' X0 z5 @- L7 W'Hans'
2 P* O4 O1 v+ t- M; K&gt; age, m+ D2 m4 b8 ?# |  ]
18# S" j1 u- Y2 Q# G$ ]2 n
3 E5 `7 F% x4 [$ ^* v8 n1 Y; k
//多行使用反引号`` 类型python中的三引号
, q) U/ {9 {) {" r# |&gt; var text = `A young idler,
, U$ M6 D9 {+ @2 g4 @/ ean old beggar`2 p! N1 ^/ E* D3 u+ ~8 Q
&gt; text
7 ?2 x; i" T4 v6 n'A young idler,\nan old beggar'
1 I& f. F- v0 `7 |( e$ p* v</code></pre>3 m& b1 ?; e( l- G8 |, V
<p><strong>声明常量:</strong></p>2 G# }' b/ K8 H) m' P/ a  c
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
8 ~; i1 t' _9 g5 e9 }7 R% b8 q2 _7 a<pre><code class="language-javascript">&gt; const pi = 3.14
2 j+ q9 Y- ]* o7 c9 `&gt; pi
( _# p( s) p6 {9 y9 S3.14
; f+ M7 f+ c3 }4 v- ^&gt;  pi = 3.01
( @! ?3 S* b5 e2 J& q; }# ^4 L! ?8 bUncaught TypeError: Assignment to constant variable." `6 ~4 p0 B( K' y
    at &lt;anonymous&gt;:1:4
* u0 O% N2 A& _( T. \
. g3 ]2 M$ m- ^) l</code></pre>" o5 \! [5 K* y
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
7 D+ h& ]2 ~  C* `+ z<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
$ Y* c' E" }" y9 O, n: {0 a<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>4 s3 u8 b: w/ ^0 m; R; `# X: ]/ E
<h4 id="231-number类型">2.3.1 Number类型</h4>4 m$ v7 _7 G0 v# G  }: J
<pre><code class="language-javascript">&gt; var a = 5
( j! N# ]  K) P8 x&gt; typeof a   //查看变量的类型  $ y3 {( A8 P  [  X0 ]( y* n
number, q6 h- V1 j6 D* x+ I
; B$ e1 l) x6 _
&gt; var b = 1.3
* M9 e+ g1 S7 {&gt; typeof b( t8 f- q# _3 {9 \
number
8 ], e: f$ c9 R3 E) b& m
" O0 g/ C+ n" a& O* u// 不管整型还是浮点型打开出来的结果都是number类型* K1 l1 A  I% v5 b5 T3 L- k) A
2 F: [7 @* x: N6 ]) B7 z/ x* }
/*
  V# V- Y. q& \+ f& Y+ f1 bNaN:Not A Number2 u( w: }3 n2 u2 G: B, M
NaN属于数值类型 表示的意思是 不是一个数字
; F( E0 t4 d( v: c1 i*/6 q' \# p5 F" b$ j( u: z5 R- @

/ b+ L$ x1 D7 vparseInt('2345')  // 转整型
( L' G! @2 c! x$ [+ D2345. [) P; P3 m1 n) e' `( `4 j$ g$ D
parseInt('2345.5')1 P" O: ^# K# a
2345
- i/ E1 \; o  D4 w( f3 ^: wparseFloat('2345.5') // 转浮点型
/ F9 s1 T" a* C" s2345.5
( y2 z! q6 E* TparseFloat('ABC')
! ~! u8 @6 f1 M9 u) e7 V" {# _% RNaN! c% Y# V% {. ~3 p: c9 c
parseInt('abc')
0 ~3 k$ i2 i8 z* e% p% y' |NaN
. b  r) h( I) c8 X* Y</code></pre>) @! E6 R* A% ?6 v$ B3 r# d# k
<h4 id="232-string类型">2.3.2 String类型</h4>* x1 o% w) Q) I
<pre><code class="language-javascript">&gt; var name = 'Hans'
/ b7 i' {" \! P. G- g: \+ a5 `&gt; typeof name( {6 c: B- l+ Y
'string'
" y; \/ |* v( f) X8 A+ ]
4 v/ H1 c# ~7 b% }0 L//常用方法
- J8 M- {2 @& X// 变量值长度
- N2 a0 ^- P7 r&gt; name.length
4 @& F' V( B% \9 l8 T4
: y( E* E3 _. {- _3 W% x9 q7 B// trim() 移除空白
; w. U' p3 Q5 O2 S  ^&gt; var a = '    ABC    '
' s/ b  `! H! ?& I+ D) Q&gt; a$ [, L5 V( a: q
'    ABC    '$ l3 \& L9 @% `- @
&gt; a.trim()  E  a7 U, L1 }' _- L8 z+ R
'ABC'
- C% Z& |/ D8 S. Z0 K& G//移除左边的空白
# w4 a7 t" G$ i; ~&gt; a.trimLeft()
0 K8 @; d0 c  H. G  Y'ABC    '; d: P2 I7 [3 S. q- W. ]7 t7 ^4 f$ t3 L
//移除右边的空白
1 ]8 Y  m! g' @&gt; a.trimRight()! q. k0 I7 ^: H/ d  a& k
'    ABC'
5 ~0 o5 O3 o; N& _4 e) q% r9 s) k0 H6 ?
//返回第n个字符,从0开始1 @6 Z+ s2 l  \! y8 z# u
&gt; name6 v. w4 `2 _% I( p8 F6 C
'Hans'
# w" ~+ o3 x5 p" X$ o3 k2 Z9 P, K5 m&gt; name.charAt(3)
' |. C( M6 L5 V0 t+ T's'2 P) a; V' w; e2 {1 u
&gt; name.charAt()
  a6 c" o2 e  a2 n* f7 V; q$ W'H'
" j4 z' V& ?9 j&gt; name.charAt(1)( X0 O& P% _3 _" Y/ ~* B/ H
'a'. o9 v- Y2 W8 }2 w- U6 j4 K
& r' G% F, _6 b8 k1 x8 z5 c
// 在javascript中推荐使用加号(+)拼接
  F5 v5 F; {2 n&gt; name
# [) G. C, k! l'Hans'
. r: ]+ t& }2 B2 n&gt; a
1 {) @+ I3 t4 S3 }7 O  f; m'    ABC    '
- F0 \+ I: }' A3 q6 t/ i/ s&gt; name + a3 G6 B. i9 q1 r
'Hans    ABC    '
$ {+ T3 n6 @* H// 使用concat拼接+ @& {. J4 w9 {0 l+ U% Y, k- l
&gt; name.concat(a)
0 o: G* U8 N* ^! a8 s, A'Hans    ABC    '
, W% i% s% d# }& n( k' g% {" P; \- d" G: c4 W( R( X6 I& _
//indexOf(substring, start)子序列位置+ v! ^7 r: }1 W  |7 l2 y

% N+ u0 _9 p9 M; _* f& n. C&gt; text
9 G1 m# I, f/ e. c' E'A young idler,\nan old beggar'% J1 e1 q5 ~1 |, ?5 \8 y5 d. ]: N# b
&gt; text.indexOf('young',0)3 J% [* Q. C- X7 y7 I
2
0 o. R* o& E6 R& X4 V- Z) w$ J! E8 F6 w/ ^0 m8 ?3 S" W# p
//.substring(from, to)        根据索引获取子序列
8 T4 d! B/ A9 U0 A: w* _* k. r&gt; text.substring(0,)! ^" C7 ~2 s8 J4 {. Q
'A young idler,\nan old beggar'4 P2 b* Z$ P) b6 P( M6 y* b  k
&gt; text.substring(0,10)' E! y% i& P- @
'A young id'
, D+ t9 |9 P" F
! Z4 P, B/ @7 B9 Q* }// .slice(start, end)        切片, 从0开始顾头不顾尾' e  r, G9 V) @3 z7 Z1 {# y
&gt; name.slice(0,3)7 v6 f5 A) Y( Q
'Han'
  v2 r3 z9 d. e/ {
$ J) P0 T, m* S! ?8 N8 B5 S' d$ {1 z// 转小写
2 Y% C4 q, u9 @4 a4 W&gt; name
, T# @2 r; H2 K# G. \% v'Hans'4 |8 c- z2 l7 a: E4 C& i
&gt; name.toLowerCase()
- [& B7 C1 a  G9 p' Q8 t'hans'0 \. H, t$ n  l0 y" h6 f: A
// 转大写
- i0 ^2 v9 @  ]2 v; G, w&gt; name.toUpperCase()
) G$ J2 Q# |8 K, l" X0 @'HANS'
* l' M, Q8 Q9 c, b2 T
. C# d% t4 c( b// 分隔
% P9 J8 [0 X; p% }6 P# b&gt; name- Z9 o+ c% G) T8 p) }( M8 G/ e8 L
'Hans'2 ^, ]" P, I1 q9 z" |( e
&gt; name.split('a')4 ~5 p  q1 u2 u& u
(2)&nbsp;['H', 'ns']
: e  i' m# X  `* n! [) P5 q</code></pre>; o! m. Q6 A+ k3 p5 d( b
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>" D5 G( s9 h6 X( C, V/ J
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
( Y! c8 n! X2 @1 V<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>5 |9 d- W& T5 u* ]5 I
<p><strong>null和undefined</strong></p>5 L" b7 e8 `# G7 }
<ul>9 `# V- ^& _8 p% @8 z' N# j; {  B
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>$ A0 }$ Y; A/ u2 k
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) k! P. U0 O0 }- ]; v</ul>) y" L0 Y( P: D) G
<h4 id="234-array数组">2.3.4 Array数组</h4>" ?3 T  }5 I* U# ?- y! y( k4 w# z
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>+ T7 k: o$ z# O
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
" i( Z: C# j2 \4 }5 B6 S) E' {' I&gt; array1
" G0 p4 f6 e0 l: O(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 K2 `7 w1 x& }7 Q* l&gt; console.log(array1[2])  //console.log打印类似python中的print
% R# ^; M8 ?4 Q0 b, l+ o3$ U+ }- z4 I5 B: X5 B  J9 R* B
// length元素个数0 x; H: z0 P! A: A+ p6 d5 V
&gt; array1.length
! U2 b$ x+ h$ w6 A6
0 n8 Y& V4 j  n  T// 在尾部增加元素,类型append
$ A$ v/ f9 N) q+ w&gt; array1.push('D')
, d& m* I" I- g9 n' T. J7
' P# ?/ }- O2 [0 U* b&gt; array11 {& f) Q% Y. f  F. N
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
- M* i) v/ o8 x( Y' \// 在头部增加元素  m: {# ]6 m0 t3 s
&gt; array1.unshift(0)
* Y8 a  w8 u' M5 s2 C% r% i, k8
3 p6 I8 u: z# _" ]; _2 }2 s$ {% [+ H) c&gt; array1
& |/ O1 |9 S; n; k7 s8 b% i(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']2 B# h. o) [1 y$ R6 j" S1 P5 }, Z, D  i
! v+ a. \" M0 J  P. M, l
//取最后一个元素
. Q9 r  ], R% s- c&gt; array1.pop(). K7 B; f" k4 L( {
'D'
/ ]- ]1 R* Z( p/ q# F# ^, j&gt; array1) v! n. E/ j4 a- `
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
% S1 Q2 j7 v- U) _) K//取头部元素* V/ W% b9 L" f3 `, t
&gt; array1.shift()9 B( {; _" V+ @" \. n$ ]2 e
0
$ l, q7 ~. \9 i8 t  n" ^) {&gt; array17 [2 _; Z. o1 }! j$ A
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; q& T) w9 Q2 X, G" _' n' t1 J+ z8 b: X5 O0 ?
//切片, 从0开始顾头不顾尾7 B, a9 S5 ]" D! \3 U: h- N2 t$ h
&gt; array1.slice(3,6)
" h$ ?: l& h) T3 K/ R/ s(3)&nbsp;['a', 'b', 'c']9 \0 B1 e1 {) \# U! [: v6 P: s! d
// 反转$ t( U+ I5 \  S: A( t
&gt; array1.reverse()/ G6 Q* M, X9 E  i% N( d
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
9 E, G0 a5 a  Y// 将数组元素连接成字符串! z7 w! C4 [+ h& I* ]$ W; v
&gt; array1.join() // 什么不都写默认使用逗号分隔
' d0 v& q1 |% C'c,b,a,3,2,1') ~. m" g9 A& h! N: l5 o9 N
&gt; array1.join('')
' c4 [- B% z% s$ g3 M3 S% R7 ['cba321'$ g; Q0 @6 j/ c1 C3 R& ~
&gt; array1.join('|')
. ^% K% m3 s5 m% v1 B  g6 z'c|b|a|3|2|1'! m- p) U& F6 p) X1 {( M$ ?7 Y

7 V! P% r4 @  R5 D8 H// 连接数组
# T: t% ]' t7 R% u: ^- [  I# u&gt; var array2 = ['A','B','C']
& g+ l" Q& Z+ b1 V$ q' {7 H&gt; array1.concat(array2)0 M9 h" y! T0 n/ a: G
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
: H, K. q) ^1 q: e" ]2 L+ u9 G7 ?2 {/ V  I
// 排序" {1 L/ Q* y# O3 L4 n
&gt; array1.sort()' Y8 A4 M% U* o+ K
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" N1 {% F1 m* k- d5 D) |

3 Y6 c' a1 s5 g0 D5 I* Q// 删除元素,并可以向数据组中添加新元素(可选). F+ T- f# W  H! O. l
&gt; array1.splice(3,3)  // 删除元素
+ P; M3 N' a) i: p, x7 J4 d! i$ A(3)&nbsp;['a', 'b', 'c']( s$ _3 U5 ~. k, ?/ W1 C+ P+ p
&gt; array1
" T% a0 k  n$ A( u4 L$ g(3)&nbsp;[1, 2, 3]
  g4 D& ~5 L8 C&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素6 |7 ~. l$ \' p
[]
# d7 D2 }) W9 E6 I&gt; array15 B8 O* w+ d3 \4 d: M- T! o
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']/ c; |3 W) Q8 P) Z% M
+ w2 \8 Z# ~  f; W
/*% Y; Y- T- G3 R- Y
splice(index,howmany,item1,.....,itemX)  ~3 x, b( S( X- p
index:必需,必须是数字。规定从何处添加/删除元素。+ g# ?0 U/ u0 B1 }) n$ c- ~9 G8 @
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。1 K: J6 m/ b2 d# E6 K
item1, ..., itemX        可选。要添加到数组的新元素2 W# G9 E) K& [7 ?6 c
*/
. d. E% P& F  q" `$ d  A
" P+ `& c$ a# l' ?8 X// forEach()        将数组的每个元素传递给回调函数$ k* E( t2 ]/ h) r( A; _, R5 v' e+ H
&gt; array1.forEach(function test(n){console.log(n)})2 Q( A7 r  J8 {, d8 }
1
/ J" e1 O' S% P! T" r 2
' m( I0 z+ f2 F+ k9 H 36 |4 v. }2 q  H4 o( C3 O
A
9 k/ Q3 ^. C" c- m* _2 G% } B" P" o' E, k, g3 G" P7 d' Q0 s
C+ }; `- h6 T- l! T& y
// 返回一个数组元素调用函数处理后的值的新数组
7 c* ?9 H2 f! N" H! H&gt; array1.map(function(value){return value +1})
, s7 q6 p. y9 \2 u' f- s(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']# p; N& t0 @3 }* S. |
</code></pre>! t( K( k) |1 _! E% F: L
<h3 id="24-运算符">2.4 运算符</h3>* s& O& \9 [7 }! z
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
1 X+ M0 {5 z1 a* p<p><code>+ - * / % ++ --</code></p>/ N) c; C7 l/ n2 ~
<pre><code class="language-javascript">&gt; var a = 6) i5 b) s% ~% [
&gt; var b = 3
! C& U! P$ D  W! \// 加% n7 `$ ]* D2 p
&gt; a + b0 E4 I& O$ c# O7 O# B
9
8 N; J$ v( B/ a7 z; J1 m6 o" D// 减
: {/ S7 M) K! U& Q&gt; a - b% Q( b5 n" U7 w3 V
3
; z$ V# F3 d6 n2 k// 乘; z( \) U( o1 A1 v$ v
&gt; a * b
1 ~6 y# f; j2 Z" {- B' ]( Y" T! i* W184 P) C: E$ C8 R& e
// 除
. [  V- `0 j; t0 b/ t* d! {) Y# o& E3 W; R&gt; a / b
4 w2 Z$ i, M, T. X3 O7 Z2
6 @6 M9 @9 T7 J9 R// 取模(取余)# w  q2 B$ k* s! t7 q: I- n9 f
&gt; a % b! U7 e7 P4 c! ]8 P
0' p2 c3 t( S3 J. s  s3 v
// 自增1(先赋值再增1)2 J$ ]" R# o6 i7 V2 m8 e! {9 U
&gt; a++/ q  P) r$ @3 j
6
9 b/ H6 l% u2 u5 _&gt; a" f' T! S; K! N' T# y
72 g6 `2 k& T' |) s8 S) B1 o* y
// 自减1(先赋值再减1)
# h6 J- z* T- a2 N! R&gt; a--: j! ~5 p  p# \% l% V3 l2 g
7
8 s3 a+ e1 y. @: o1 I. k) A4 Q. J&gt; a
' o0 ^; ^0 S, l6
& A" Q2 k' i% R3 u7 F/ g// 自增1(先增1再赋值)
+ E% ^& C. i% j8 _&gt; ++a
; o! V" i2 G0 T: m/ C' t7" a: U! a$ d1 d' L0 f3 J
// 自减1(先减1再赋值)
! o; j& X# w* v2 E/ V5 M: R&gt; --a/ s; S! c& K. p, G( S1 D
6
8 t+ |+ a9 R/ `& ^3 L; l8 v&gt; a
. a0 u* h2 Q9 @8 Y) ?% ~6/ h; {' P9 P# z  y8 P. |3 c

. X  W- e; l! G1 |) ]//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
; X7 `% H  v* g0 y</code></pre>
% Z% b! j* J. D8 ]& ]3 q* X1 y<h4 id="242-比较运算符">2.4.2 比较运算符</h4>. R% U9 r) D6 ?5 Z8 o# |0 K
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
# J$ a: @' F+ \0 K6 n: L  Q- e<pre><code class="language-javascript">// 大于% o  r9 \7 F3 s) u
&gt; a &gt; b- H' n$ q- h& c7 B" ~
true
7 e+ ?& L8 V4 Y; q7 C2 [- U5 b) E// 大于等于6 R/ Z% n, f2 [8 J' D0 ~
&gt; a &gt;= b, H5 f1 \. q. n6 d$ Z- c" U% j
true4 @9 e0 R1 E+ ]
// 小于6 X  [3 W. r2 \
&gt; a &lt; b
; d5 g; l6 K1 r  K  @, }( c8 `7 jfalse7 b+ R7 ^1 \5 f3 }/ D/ T
// 小于等于* C' o1 j. s3 f+ b! T# ^4 h
&gt; a &lt;= b( d+ ]: S- c4 J9 A) o/ h
false
" I8 ~( p, @/ E! |5 H// 弱不等于
* J) G/ I! @1 c% v' E; O&gt; a != b- l5 W* y6 c% y5 K/ f0 C
true
3 n( |7 ~2 x0 S, o, J// 弱等于2 Z$ s6 N6 g" N- a9 B" |
&gt; 1 == '1'# f: S# W( S6 R1 T: }/ Q
true6 N3 [& q/ {8 s# ^
// 强等于. W: z- C: f" ]5 n5 I' N. J0 C
&gt; 1 === '1'2 B# _) G' g& R4 Z* D8 Z
false$ [4 J2 u* L& K, N& A6 N
// 强不等于
7 ]2 F6 m; W3 s4 W) F* }&gt; 1 !== '1'! z" s/ A6 E3 p" k
true' c' v! `% j3 f/ t
5 c. {: G. ]6 @& L6 S
/*
( o$ t# @" @# j4 i2 PJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误4 `7 p: V. e; D3 ?# a
*/
; h' k! l$ |1 Y) P" Z5 `</code></pre>- e- G) X; N8 @7 j- `, z$ M2 M
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- P+ W5 w3 z5 A<p><code>&amp;&amp; || !</code></p>- j6 R* `- R& W: e9 a2 s; Q
<pre><code class="language-javascript">&amp;&amp; 与: y* ^" s5 ?" B& r
|| or 3 B$ b8 Q* l" _
! 非
  J! F8 [; _% n4 x4 Z1 a</code></pre>8 V$ P' [& q3 ~9 W9 r
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>  z/ x5 N$ b7 d# Z5 x
<p><code>= += -= *= /=</code></p>
6 Q) @. h( L, z  p" q  M( b<pre><code class="language-javascript">// 赋值* `4 i3 Q* C0 d
&gt; var x = 3
8 m, e- Y3 `: R8 O( |// 加等于* d- ^. J# L: B. \3 w; O9 A( v
&gt; x += 2
( X' Z/ I- A" p# P+ H& ^5
" G2 Y( {/ M+ [  @! q8 l// 减等于
4 l9 v4 M9 S/ z; b) W6 q+ K7 F&gt; x -= 10 y" ^" v8 a$ y: y9 m3 u2 _
43 f7 F, ]  K4 ^7 b3 {! n
// 乘等于
" q7 h  j8 {+ m, H  L+ `8 K&gt; x *= 2
/ y1 Z& V) }; I  ~# ~4 W9 D; F7 S8& g, ]2 F8 d; u/ f
// 除等于5 \  b) e5 f0 o: R+ j
&gt; x /= 2$ }/ e8 \) }" \! u6 F
4
2 @! W6 @( C% R, l! c( L; M+ C; J</code></pre>
; O; v3 U# N5 k! D<h3 id="25-流程控制">2.5 流程控制</h3>  Q/ k) u2 l& y- U
<h4 id="251-if">2.5.1 if</h4>2 u* @( I$ @( U+ H  w+ a
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
. d1 n  t' X& ^2 t/ Z: J9 |
' n( u1 L- r0 R+ B0 n5 R8 g&gt; var x = 3
  K" Z  ?) q  M0 G&gt; if (x &gt; 2){console.log("OK")}! q5 n# L+ J- G" b: ?
OK
* T: L( ?% I0 y! F/ H: h& W
. c5 b. O( I$ L" b2, if(条件){条件成立执行代码}
/ c0 q$ U) {9 u, B7 ?# w6 A) ]  l( d        else{条件不成立执行代码}6 o: L8 _& p( ?1 r4 N) X4 q

1 Q0 c( `. j; H5 ~) T$ _&gt; if (x &gt; 4){console.log("OK")}else{"NO"}0 c+ k  Q7 x3 _  J4 E& K
'NO'! Z! x8 W- w' K/ `

. I2 r7 j7 r! {9 Z$ W3, if(条件1){条件1成立执行代码}
8 K5 J) R1 M. T  b$ Q        else if(条件2){条件2成立执行代码}% n& L0 n5 g& U; L- Y; U- s
    else{上面条件都不成立执行代码}
8 C+ e- _6 L# \& z' t! ^) c1 _- K7 I) `
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
  M9 I% q8 x4 C: s Ha5 `4 l$ M3 B1 Y6 H# N4 p( n; X
</code></pre>
4 a" w, e2 r5 B1 [2 D<h4 id="252-switch">2.5.2 switch</h4>
  U& E6 {8 T) ^" ?& o9 @<pre><code class="language-javascript">var day = new Date().getDay();
9 v$ L3 s8 E" q. cswitch (day) {# s1 M5 G9 v. e9 n
  case 0:
* A( B1 M3 m0 o& R  console.log("Sunday");2 W( y, L# m" ~( I2 q1 k$ B7 y
  break;
0 }4 ^+ }' E& {4 y4 c5 z! h  case 1:
3 `! ?6 C8 S& d; o2 |) D7 h  v  console.log("Monday");
# P# j' h8 y% F. _3 }  break;5 `* u' E$ t0 {( T
default:
" v/ [; `$ Z. \  console.log("不在范围")
( N# \! x: S' Q  b& o) C) M" W& {}
  D" m* `: H$ {! ]4 | 不在范围
) f9 ~8 j0 i2 ^& N& [+ |6 F</code></pre>' P' B: K1 C" T: D1 I
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
. U2 ?7 Q1 s7 J<h4 id="253-for">2.5.3 for</h4>
7 K4 D5 [0 U9 Q6 u4 |& z<pre><code class="language-python">// for 循环
7 r: w' Y7 ?* B2 J$ o        for(起始值;循环条件;每次循环后执行的操作){
: c. t8 ?1 N# P# ^        for循环体代码: v/ z9 R# i" A8 j: V' p
    }( g0 E" g+ x; _3 x
2 N( y$ d% A6 u/ c: N$ \
for (var i = 0; i&lt;10; i++){: ?7 _8 u/ P& e+ C
    console.log(i)0 k' o$ C$ e$ h- R( K
}
+ T/ C  [! G+ j4 r6 b6 `        0# ?( B  W' [% E5 _; Z( k
        1$ x  ?. _0 K0 @7 f" v- u: D: T3 C
        2
* @7 w  u. r* S' `6 k        3
: V! q& |+ M% S5 k8 Z0 s# Z+ s! n        4
: R- c1 G% o4 ~# T+ m        5
7 g* N+ b* B8 `  `9 _' |        65 B/ t# N( s0 w7 S
        7% J% B0 b1 }( H8 n; i7 F+ v
        8
+ C" A, p9 N# k/ E        9, e4 ?/ j' W. G
</code></pre>: A1 R8 T+ \) o$ f6 s+ C4 R* _
<h4 id="254-while">2.5.4 while</h4>/ L0 b, q9 s: ?/ U; x
<pre><code class="language-javascript">// while 循环  _. w1 Y# {% ]+ u; M
        while(循环条件){
  D$ w% N9 S7 a) }9 _: g/ K: O        循环体代码- O" W" |+ h$ R9 y
    }
! M5 O1 l: e7 W. L" y! C: I
/ |7 s0 y3 W6 o&gt; var i = 0
! J+ z: a2 L. U7 g  T&gt; while(i&lt;10){
- Y0 R/ G# W4 F7 D/ c" x: r    console.log(i)
, r* f7 p# d' F7 j) b    i++
/ m# E9 t% [6 B) C}
: l8 i+ ]! b1 i6 r* E 0
" g! n8 A- i3 W( q. b5 `2 g 1+ Q9 O2 m7 [/ J: y$ m6 F# F
2, X' L% A/ Q1 l
3) _' |7 {! @1 w4 x: |4 E
4. d8 r2 ~' u" y2 e9 h& p" f; R# }
5
- `6 K( D, v2 ?' E4 s0 J2 s7 r. Q 6
9 C3 z$ h" l: p8 y0 y0 F 77 d1 {) T' R& ]& c  I: }; ?+ Z
8) P2 B8 X. v- V. j# p+ J- h
9
: M- q  R7 \6 j2 Q. k</code></pre>. g. b6 q) ]* P( M( U
<h4 id="255-break和continue">2.5.5 break和continue</h4>
- P7 x5 l1 N0 h0 T2 ^' ^<pre><code class="language-javascript">// break
  @; |* N% z/ @4 Pfor (var i = 0; i&lt;10; i++){
1 ^) l5 F  z: m' g1 }    if (i == 5){break}
* U5 k# J: R2 y; `6 c+ i. b* I    console.log(i)3 `; z8 P5 F5 S; j$ {/ l
}
. i. y5 U3 k% V* x9 j+ U! s5 m 0
  J' X- z+ d2 g, p& v2 P" ` 1! U- t! K# S: f1 Y' v4 Q9 |% K
2
& R/ a% B: U8 U6 M& X6 V; S 3
3 s5 H. R. Z5 s6 V9 ]1 d3 N 4. h0 Z$ B  _, M" N, u- ]
// continue
: M% v# U# g; t/ i5 [! cfor (var i = 0; i&lt;10; i++){, B( i( x8 `3 s$ p' K5 h3 l
    if (i == 5){continue}
# G; o, B( [" q* p& D1 s: q; J% ~* l, Y    console.log(i)0 i# C; ]' _6 e& |5 V- y3 C7 \
}5 K9 W) J2 B* X. @5 U
0: M9 i- W3 k6 P. M
1
/ Q" n; l4 f/ ^  s3 X- @% h% E 2+ l5 E  M6 o- C) w1 e4 R! E
34 m8 A' k6 d. C- i+ U
4
5 L$ Y6 |4 Q8 e3 n* m 6
" x) b2 n+ Y9 `8 c( f 7# }! j; z1 T, C3 @& y4 s
8' A/ H$ Z$ v" w; d$ m
9
* K- H- ?+ q/ b# }& b: @
0 O$ e4 ~( q9 J+ g- z( }( e- ?3 X</code></pre>
6 o1 o- t6 W, Y4 V% M( r, H<h3 id="26-三元运算">2.6 三元运算</h3>( [- A+ y8 f. ?7 Q4 i
<pre><code class="language-javascript">&gt; a$ v/ G6 |- M- f. G
6. T0 B4 W) J, x1 c0 B
&gt; b, ]0 ?8 Q- }, d9 r: P3 d
3" M- X* X1 ~( X) X. o
- j6 w) G( Q. w& s( K/ v
//条件成立c为a的值,不成立c为b的值4 X# j4 p4 x" u: N1 ~
&gt; var c = a &gt; b ? a : b3 R4 w4 I1 F& t+ u+ d- Z9 ]
&gt; c2 G( [. w- l4 l4 p+ F6 z
6
5 L) f' v' j2 {$ Z1 G: ]( L+ u
) C( {0 P& S) X// 三元运算可以嵌套
, M" S5 \4 D8 `; u</code></pre>
9 [% H3 _5 |( t! l7 }" @5 ~<h3 id="27-函数">2.7 函数</h3>6 n2 M: j" c2 O7 `+ N/ R
<pre><code class="language-javascript">1. 普通函数
+ \  {% b* N8 H&gt; function foo1(){
9 W6 e5 A7 t  y% ~, b    console.log("Hi")
, [2 |/ U1 d3 V2 d9 u/ _( J$ l}
0 @3 P% R( r" ]8 i+ `9 [- ?. |9 y- r8 }( X
&gt; foo1()+ b; F' m  N/ M* p' m
        Hi1 @4 {0 p, u& A/ j; j% p. N
2. 带参数函数
( ]* H2 h3 V' u, h4 a&gt; function foo1(name){
' U! |4 P# c- x5 x6 ^! |0 Lconsole.log("Hi",name)
/ Q4 @! j+ B' p2 H* E8 D" Z}% r1 o0 c) o& w0 h
! G& t7 m+ M; X0 B
&gt; foo1("Hans")
# ~) W% p9 p" BHi Hans
1 g: T3 G% U/ O& R+ G/ W1 `8 e- S! l- f9 b. f
&gt; var name = "Hello"6 y1 E* R4 q6 Y( G* f
&gt; foo1(name)
" U, Y( i7 m, p) }  X( \  N6 E2 WHi Hello
2 E6 f: K9 `% y, Y6 N% _5 z+ M, m
3. 带返回值函数2 B6 S) H: {- A9 E7 O
&gt; function foo1(a,b){2 {; n, g$ V) }8 e( P8 {+ }
        return a + b   
( D9 E+ C! q" r1 r4 R' C! q5 |}& `; I5 {" H: z4 V" m, l* D  ~
&gt; foo1(1,2)
1 v; G# ~% i+ A' z) |- ]% M3
9 a. a1 n. U: R+ Y$ H% {5 |&gt; var a = foo1(10,20)  //接受函数返回值
) p7 `' k1 c* x- |&gt; a7 M& h+ h: H: @8 H+ ~- u2 g
30
3 C1 C- \8 ~3 P2 o1 j- d, J2 d4 c7 B" A  _
4. 匿名函数
9 f, C% z* Q3 g/ U* m&gt; var sum = function(a, b){5 E3 J; a- i9 P" C2 w2 {7 k
  return a + b;/ ]2 P$ N  s# F( n
}
! H2 l4 y8 V2 F6 m6 e3 h&gt; sum(1,2)
& S: ]8 @# u* ^. B5 O' {3
9 P# Q& Y0 h6 X# M. d. O
( @5 N( k7 I7 i# c/ b) z// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
/ }" x1 x' |( ]  N3 D&gt; (function(a, b){  ~8 X; j# m& R
  return a + b
5 s: {/ I; g. g2 ~. C/ u- A( M})(10, 20)/ L1 m6 b; O* V6 o1 h" ]; D: T2 x
30* s/ G- y: B5 `8 l1 m5 \1 l
, v* D9 ?% P5 o/ X& W
5. 闭包函数
8 h+ L5 a0 F( J' f// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
  ?( ?- U2 P- t/ Y) V4 q. D5 bvar city = "BJ"- [6 G) s2 c4 m
function f(){
2 P) h1 {" J3 `* g7 t, r    var city = "SH"
" S1 u' Y, R7 z1 P2 {. c5 U2 h+ A    function inner(){
  @8 c9 B' [" e8 `" D! K0 H! S  `        console.log(city)
" [" d  X/ `) G    }, X4 z2 S+ ?/ A7 q
    return inner
, }2 z5 J( {4 C- v# v  x}- `1 {3 J; r9 |9 ~$ `4 S/ h% G2 s
var ret = f()+ d* C8 R- k- t& x6 C4 ]2 A
ret()
2 U# Q( `$ |  f执行结果:
- z( v. Q9 y* g% R& S/ DSH7 N6 Y! |9 z8 ~* Y0 t3 @
' u% {& E$ J, W
</code></pre>
& n* _! _+ _' s) _) c( J<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
/ q0 [& g6 Q6 g. W8 p% H! `<pre><code class="language-javascript">var f = v =&gt; v;4 y+ |; V& k+ A  Z* `! X4 z
// 等同于" \" H( E( B6 T  i8 w7 d! ?
var f = function(v){
9 `" |: w& i' `- e  return v;3 y! `% m3 t, L1 O6 n, V
}
4 m. \, F4 T* N5 U9 b3 K</code></pre>
! Y9 \( B) q# {( o$ r<p><code>arguments</code>参数 可以获取传入的所有数据</p>0 C( E+ }. D/ j9 C4 ?! e7 B% N/ N4 \/ w
<pre><code class="language-javascript">function foo1(a,b){
, k; Q1 o7 ?4 L* ?0 w! L& p    console.log(arguments.length)  //参数的个数
3 |1 ]9 n3 W; w1 w" ]  e1 O. E    console.log(arguments[0]) // 第一个参数的值$ ^" v2 Q% \! S) h5 y) X7 L
        return a + b   8 g( Q/ f+ s* P+ n
}
5 s1 p- L% y5 W9 }! \foo1(10,20)( }9 f8 J# T7 m/ o
结果:
( E3 Z* q( Z: E2 Z/ | 2          //参数的个数 3 t/ X/ t; b4 d+ O# r
10        // 第一个参数的值/ J& N2 d- m/ Q2 U9 H
30        // 返回相加的结果
* B9 Q0 Q0 {0 t& A- l, U. [- F</code></pre>+ t, m# S! a% R& Q# w! U& F
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>5 r2 c) N4 j" N7 y; Q  y/ I# e
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>0 g6 @& \# z; K' i
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% O7 t0 ]; e) y8 e. }
<h4 id="281-date对象">2.8.1 Date对象</h4>7 ?# f0 L- e# U( r6 f3 J
<pre><code class="language-javascript">&gt; var data_test = new Date()
0 P0 F9 M4 I  @- e1 f&gt; data_test
% C( `& w5 e1 T$ t- F# Y. jFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间): a4 Q: O7 Z7 A
&gt; data_test.toLocaleString()
3 D  J! e0 P4 N) W% s'2022/2/11 下午9:44:43'6 C" d! `- Y: A% t* R+ i
% [& g5 i/ H- M3 c4 b( f# [6 O
&gt; data_test.toLocaleDateString()& q9 f" w9 {7 C3 ~3 W5 ?' t9 R
'2022/2/11', {" U* Y7 E/ c9 M1 \: a3 R. r
. x) \- n! r/ I" J0 d
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  b+ T: B% h6 ]7 O' I&gt; data_test2.toLocaleString(), J* C9 b: d2 d: E: t' e, j
'2022/2/11 上午9:44:43'
) u) W( [# u6 e. t7 J: o
' F0 n3 ]# M5 j# `// 获取当前几号
9 ]8 r' c9 {0 T4 q: {3 d) b7 D&gt; data_test.getDate()4 l; _4 H2 z/ a+ O4 o
114 G# Y. e2 R# X+ k) E$ \3 u
// 获取星期几,数字表示. C8 @* v# u; [6 j$ O4 O3 G% k" A  G
&gt; data_test.getDay()  
/ V+ X; j- ^0 Z9 e: `0 x: m5
. H, `1 S2 Y  a9 l// 获取月份(0-11)* b% P- q$ Y# P
&gt; data_test.getMonth()
" P6 r% U) I6 i# ]9 f; a2 C1
; u7 `8 u* G+ X: [9 a// 获取完整年份$ N1 }3 L/ I9 a  S" Y; {# M; K
&gt; data_test.getFullYear(); c  R9 ^  D1 |7 c
20220 d8 A4 F4 Z2 l: b: Q9 a9 Q  S
// 获取时0 b  W6 N! b! i+ d, x* k8 f
&gt; data_test.getHours()! ]- o8 s4 g, i% n& W" \# K, d) T
21( v' F7 c( l0 q3 `$ i1 h6 H1 \; a
// 获取分
  @0 ?" j: Z! `. M: l&gt; data_test.getMinutes()7 Q9 T8 k, I  n( D8 V+ F  j. S5 r9 ]
44" I/ r5 f5 `5 x; a! j0 O" @
// 获取秒
' H/ t) T* o9 k& t# L6 \&gt; data_test.getSeconds()  v- {& w, x7 S; n3 t9 F1 j
43! g2 Y3 R" K# ^! z
// 获取毫秒
3 e5 w9 B/ {0 {9 z8 J) ^6 t&gt; data_test.getMilliseconds()
( u# V! a7 g2 Y  J7 [! V2903 f; b! N8 U' B3 ^, l  h' R
// 获取时间戳
/ {7 q: W9 ~0 l4 l' I  c&gt; data_test.getTime()
3 A/ h. g1 A7 G& E; n1644587083290
" `: I3 y! o# F6 d% e0 B2 v</code></pre>
5 E- j+ f6 p! y3 a<h4 id="282-json对象">2.8.2 Json对象</h4>3 P1 R' m  z& Q; C' K- Z, L0 V% F% l
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串+ v8 R7 B0 r7 n' Y6 s7 R
JSON.parse()  // 反序列化,把JSON字符串转换成对象' `4 t8 i+ ]4 p4 [9 Y+ y2 u/ k  K
7 W, T% K7 I: `( A  J% H; @% d
// 序列化
9 C5 d7 N6 b% v& E* m- l&gt; var jstojson = JSON.stringify(person) 6 [) \8 D3 \+ c1 ?* g6 B
&gt; jstojson  
# ~6 m# v' a' v; b4 x'{"Name":"Hans","Age":18}'
  f4 `/ @* H0 r9 j- V2 V1 T* l6 Q& f/ }8 Y- U! G* ?; k5 {
// 反序列化
6 z  v2 L1 Q* [# h&gt; var x = JSON.parse(jstojson)* ^" n4 Y2 w. h' |& J
&gt; x
# u  ~8 D" y# _. c{Name: 'Hans', Age: 18}' e0 ~* P# V: o/ a9 R0 r) _. d
&gt; x.Age6 A5 g( }0 u& N
18
4 q9 y1 {& n* T- l</code></pre>
" I7 o1 g! F! @/ L. D- b<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>, f2 x9 s- F4 O: K. Y2 M, J4 ]! l
<p>正则</p>8 S1 B/ V; ~8 n- G
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
# E: p5 g  F" `; G) d( W&gt; reg1  h6 o5 E* z7 s$ w1 [4 k' c- {) o
/^[a-zA-Z][a-zA-Z0-9]{4,7}/6 P0 D! a, H& \
&gt; reg1.test("Hans666")
; x1 G. _# K+ D. u9 _true5 b. P8 y- C- Z- w' F' D

9 `4 Z* @) ?1 F( E& {/ Y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
# u3 ?6 t: g+ ?&gt; reg2: y& K1 U9 U" z. P7 n6 q# j* e
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
3 G3 O8 r, M  k* X&gt; reg2.test('Hasdfa')
: B# r- z, h6 c7 N- \& L9 Ctrue5 b# i0 X7 z8 _2 M; _: ]
, L& ^3 X& h: t! u
全局匹配:
/ N2 x' ]) ^  c! G* Z0 l&gt; name
8 {+ V$ {4 m+ P: F, N'Hello'
7 z' F, f+ W* g# b1 G) E3 n; O&gt; name.match(/l/)
/ w/ L% T/ C+ A3 D3 t% X['l', index: 2, input: 'Hello', groups: undefined]
5 W/ w7 f( I0 G- z" b
. c+ Q, B6 D' d# `&gt; name.match(/l/g)
; }2 w# t; d5 }' s( L' r(2)&nbsp;['l', 'l']
- z$ @9 E( R, O// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配1 J( S1 ~) M8 d8 Q0 j
3 Q' O, P6 l" @3 {
全局匹配注意事项:
. q& l  C/ n% j% A$ _&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 ]4 b) R9 l7 [0 H& R& G8 l
&gt; reg2.test('Hasdfa'); {( z2 @6 k7 O' @/ Q7 M. d6 M6 A9 p
true
8 D  a, Y: ^8 h" {! Z&gt;reg2.lastIndex;
6 [  l2 m( |. y# j- ~4 W, A* V% l6
$ a. r$ U$ L7 K3 ?$ @9 v  {9 b7 p&gt; reg2.test('Hasdfa')
1 B" d4 |) K! o5 c! cfalse
+ @4 A% e5 Y8 Z2 p&gt; reg2.lastIndex;$ Z' s" b6 m5 {# z' S" R0 @4 V
0
6 E* K. o5 g2 Z&gt; reg2.test('Hasdfa')9 m- w# L! C  }* n+ R( V
true
8 p7 {$ F3 x1 \6 D8 M&gt; reg2.lastIndex;" e1 u% g; `) S# }. [
6
, H+ Q: _4 J% C&gt; reg2.test('Hasdfa')
  j, k  t7 ?! Hfalse
2 t+ x2 N& V8 m9 T3 `0 M&gt; reg2.lastIndex;: f" b9 c/ X6 U2 _6 [
02 N; n4 T* |6 Q  v+ v1 {
// 全局匹配会有一个lastindex属性
* O: g) ?$ J) }" l&gt; reg2.test()/ d& R5 Y* q. e3 L7 I
false. S/ b( @0 N8 a% \# F
&gt; reg2.test()
1 }5 @7 m( |2 T+ n3 B2 O% ktrue
/ y8 Y, h- C9 a1 T+ o, [// 校验时不传参数默认传的是undefined9 k5 L! Y9 w$ ?, o6 b
</code></pre>
/ k% Z( a% W( E% u: u<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 y  s3 |# I" q7 L6 E1 N
<p>就相当于是<code>python</code>中的字典</p>6 c4 u4 ~* }: a5 R8 k
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}, f" T; v* C9 B. @2 ^$ z8 q
&gt; person6 G0 p( \) h2 U8 ^! n3 L
{Name: 'Hans', Age: 18}
) `' l6 A+ [' G, n2 m&gt; person.Name
* Q: p5 K! }  d'Hans'
# V$ r; x) P7 G&gt; person["Name"]; s1 J: |, T- h$ v( p
'Hans') M% V' l! j+ h8 x- `" i! \
, q' _+ r" U0 s8 P- p
// 也可以使用new Object创建
! K8 F  q! x# f% J&gt; var person2 = new Object()% h2 x" E( x, C. r0 a
&gt; person2.name = "Hello"
. [3 m; S$ Z0 f6 \( _'Hello'( N4 u' K( B2 s9 P7 u& o
&gt; person2.age = 20  [# L4 k. D. k* w1 n
205 A& k9 w0 O, Y+ a* |/ i, Z
</code></pre># }6 S8 o6 b1 m2 R
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>0 P* {$ t7 N2 M5 q5 w3 r, }
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
; I2 r0 e1 C% t* b, L+ \<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
5 B# j1 t) H: U% {1 K. `<h3 id="31-window-对象">3.1 window 对象</h3>. o3 r5 X; H" [2 k& e' m
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
3 ^6 z7 {4 u8 Y3 h* N, @<pre><code class="language-python">//览器窗口的内部高度
" {# w+ L% ~( K3 s6 A& }4 Nwindow.innerHeight 0 ]( ]$ G+ l8 v. q: G; P: D
706& o7 X( h* U, h- A# |
//浏览器窗口的内部宽度3 r3 N& v0 j" V6 |: s3 R
window.innerWidth# r# E, ]7 O4 B. b- p  b; x
1522
7 z0 K% x0 ?+ D2 r// 打开新窗口
4 j2 l& u) Z7 Z( ~window.open('https://www.baidu.com')
. D8 I3 B8 V, c. ^2 v4 ]5 V! `Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
! A+ f/ N$ y  C; V# \! r// 关闭当前窗口, g8 g9 k% n  r! ]
window.close()
  Z; p. |; `( Y4 o3 N0 U//  后退一页5 `, o6 P% l+ d" d# L! i/ W" G
window.history.back()
+ {! [% H& n! o; V2 P: Y+ W// 前进一页
' V* [, E5 A# W2 b9 lwindow.history.forward() ' R% X2 u! ]$ w. J7 k
//Web浏览器全称
# H/ b4 i1 |  ?window.navigator.appName0 t* z. R; M: E5 Q
'Netscape'
- C3 t4 u1 j% N! q: i) }" R// Web浏览器厂商和版本的详细字符串
, t: j! E  c$ L3 W9 mwindow.navigator.appVersion# ]# K" b6 I1 `
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
& H% B7 T# [; T" \% E// 客户端绝大部分信息
$ n$ X9 g8 r+ Ywindow.navigator.userAgent
4 l/ l* W8 k8 ?. W'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ `3 z: G5 B, S  `! _& s6 k
// 浏览器运行所在的操作系统
# r' h1 _4 _" J+ M% ewindow.navigator.platform
/ q; a7 `& ?) C* X'Win32'
5 p! v" n* T% ~! M
# D  U' y1 c* Z//  获取URL
3 l$ |  N% T' V; E8 T) c7 |$ ]window.location.href
4 ?1 n9 P. y0 a// 跳转到指定页面
4 o: K. I& B; W( h% |! K# swindow.location.href='https://www.baidu.com'& u8 ?% b) z" E% `! l( {& Y" h
// 重新加载页面% {! _* |5 ~" T; v4 ]2 x
window.location.reload()   M, T; Y4 b7 S! ?' S; [! f
</code></pre>/ Y% _* \+ G+ N) s: S! L
<h3 id="32-弹出框">3.2 弹出框</h3>
( r  u1 L# u" }; k: e<p>三种消息框:警告框、确认框、提示框。</p>
! ]8 d& _# z: o0 y: ?# f<h4 id="321-警告框">3.2.1 警告框</h4>
/ d2 W0 h3 X+ V& v' X& y<pre><code class="language-javascript">alert("Hello")
& k$ F9 e' ]6 F" X$ Y! l</code></pre>: o7 `6 x7 ~: A/ z* N
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
9 X; q% z! u- ]) `5 t<h4 id="322-确认框">3.2.2 确认框</h4>, K9 ~" X! F) V. y0 K
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
4 x* L0 r4 s- K& V+ F% i8 B. v3 D' Z<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true: v/ P% H6 G3 d6 D$ P
true
$ U7 b4 g) ^* v8 a) p" Z&gt; confirm("你确定吗?")  // 点取消返回false- y, u# S# v8 V( x) x
false
. |1 R* y4 R4 N/ m) ~' j</code></pre>
  a4 |* |3 T4 Y<h4 id="323-提示框">3.2.3 提示框</h4>
! b2 k7 k( N3 B  u<p><code>prompt("请输入","提示")</code></p>
3 y  F  |' a% _9 M<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
+ C" }! g0 t& d2 d6 G  U<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
# }2 [+ f5 ?: [6 r  w# t<p>如果直接点<code>取消</code>后端收到<code>null</code></p>6 N; @8 o0 q: u  S! J: p8 e
<h3 id="33-计时相关">3.3 计时相关</h3>! d7 l! I; }$ S+ O5 B
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>0 E! T1 _* p6 I9 d7 p
<pre><code class="language-javascript">// 等于3秒钟弹窗
% o, b* K( S3 osetTimeout(function(){alert("Hello")}, 3000)  P% _% g( g+ {0 V- \" l
) x0 L! }* E2 w
var t = setTimeout(function(){alert("Hello")}, 3000)
0 d/ ~' T: W5 K
2 I- L3 d- L0 A7 e// 取消setTimeout设置
; q% y$ g$ W: K2 I! |2 G$ @7 KclearTimeout(t)8 B8 D0 w/ Y* [) k, \% O6 p
</code></pre>
6 V! s4 A" f; p5 k3 I. S<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
( ?1 h' g  h) v0 m8 I9 u6 ~<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
, s+ B& w9 L. q7 E. t3 a$ j+ J<pre><code class="language-javascript">每三秒弹出 "hello" :8 {: O' i( x! C3 w  ~( s3 O% [' o- N
setInterval(function(){alert("Hello")},3000);
, d5 ?) I/ `. y4 g1 C. k</code></pre>
; F7 X+ _4 `* @6 m<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>3 E' T& n+ A3 n) ~
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
* f, p+ V' L0 P# A+ c5 \//取消:
; _! D/ ]' G& M2 }1 E+ lclearInterval(t)
, w8 v& k1 d' ~9 I2 n</code></pre>
7 I4 s6 v4 l, U5 R
1 T6 u& ?" ?  U' w+ x. e
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-23 17:46 , Processed in 0.072864 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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