飞雪团队

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

前端之JavaScript

[复制链接]

8131

主题

8219

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26723
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

# B4 ^* W$ w* p* C" a<h1 id="前端之javascript">前端之JavaScript</h1>
5 I  {) T- }( n" ^! c' W8 D( f<p></p><p></p>2 r& d* D5 ^' m8 G) p4 f
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
! d- |2 r/ ~  g, R<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
6 h+ h5 H  A3 }它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>$ G4 |( W& E3 u; v
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>- N7 P/ }# G9 j( n: b: E; Z& U
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
. P. ]2 @& U/ m+ ?4 D, A<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>8 P+ m5 G1 ?  z- {3 b+ q( ]
<h3 id="21-注释">2.1 注释</h3>
. G4 {3 P- b+ @9 L  _$ Z<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
  R; {* \) v, w<pre><code class="language-javascript">// 这是单行注释1 V$ N8 q% ]! o6 x+ Q0 D% P3 K
1 L* z- @6 B: s6 H7 I7 P) K
/*# ^1 K; o/ R( u+ w# J1 i
这是多行注释的第一行,; i. N* Q" y+ N5 u2 R7 z" f
这是第二行。
/ T, q* S: s7 d( J1 t; `+ j*/
' X+ X2 _) R6 n& s+ }2 J0 N* K  R( w( ~</code></pre>
0 P# e: q9 _+ ~<h3 id="22-变量和常量">2.2 变量和常量</h3>
% o& {: x; O% O/ v( W: E<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
. T3 U  N1 B. j  W1 G<ul>
! q7 _& ^5 O2 a) U' n<li>变量必须以字母开头</li>
# Z6 R; y) X5 n0 K<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>8 U( B2 k5 k# ]6 \9 j  m. _4 o
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
: h* B) q3 D2 q% w</ul>
( V$ ]2 Z1 q4 K6 {3 i' `<p><code>var</code>定义的都为全局变量</p>
' _: n: L* K. q" o- G7 H<p><code>let</code>可以声明局部变量</p>6 }# c) w- v9 e' R/ ^6 n" f% |) q
<p><strong>声明变量:</strong></p>
4 t" \. t( D/ i7 f. d<pre><code class="language-javascript">// 定义单个变量7 v) D) p7 ^2 }+ C4 }2 p
&gt; var name. @8 Y4 e% B% b- ~% ^5 o
&gt; name = 'Hans'+ y+ b( e9 v7 ^- K( L
//定义并赋值! X+ |$ D( M, S$ h7 L
&gt; var name = 'Hans'
9 [  ^; B7 O- V1 [. E1 h&gt; name& y6 t1 j5 k3 O$ }6 C
'Hans'' b4 ^& r  v. E+ z: U' e) h

- }0 K" Q$ T( j! p$ w9 a// 定义多个变量3 }2 Z) `5 Q# H  x$ L# K9 h
&gt; var name = "Hans", age = 18
, h- u2 |8 a3 b4 {" A6 l&gt; name! X6 @- E: Y8 T8 d; C
'Hans'; ]1 _! {' ^5 V
&gt; age
: l7 @* W8 K4 d, S  s) o: }18
( h, w# @% A# W. k" {; x2 ]" ^3 g6 Z6 f% J
//多行使用反引号`` 类型python中的三引号
; V( j4 A7 Q- v* D, z+ W+ I9 d; v&gt; var text = `A young idler,
/ c* D4 T5 h( z) E4 ^an old beggar`
' b1 j. ?" P% }/ _; V- _&gt; text
% `4 O' e  g% D8 r& M% m'A young idler,\nan old beggar'  \: L$ a  b" n* e
</code></pre>
/ h3 U+ s1 G# s% i0 r<p><strong>声明常量:</strong></p>2 I' W% \- r* v* }3 n  Q" Z
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>: K9 T& q! I1 l/ J* E0 m$ q3 k7 }
<pre><code class="language-javascript">&gt; const pi = 3.14
: c' ^4 L$ {7 n0 e; h$ v4 M&gt; pi
$ N) M0 j% _/ ^3.14
+ Y$ f# w, `/ |( u% d3 o  a' r/ _&gt;  pi = 3.01' [, }+ w% `) E+ |
Uncaught TypeError: Assignment to constant variable.
: R8 ]  e: G. J' }( V0 x0 H3 v    at &lt;anonymous&gt;:1:4
6 ]5 G" I; L! U" l9 d  M3 G: U' k! a) r
</code></pre># L7 D8 P' K: o, k2 D
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>+ F( j$ w0 }8 z. x& L  G- j7 g
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
( K4 L$ Y( ]1 F! D% X9 r$ P% ]- I<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>8 r: y/ l, _8 l, N3 I
<h4 id="231-number类型">2.3.1 Number类型</h4>$ B1 v9 r/ m( _  o: n
<pre><code class="language-javascript">&gt; var a = 5
# Y6 e& X3 F% S1 n&gt; typeof a   //查看变量的类型  5 W: C" u' c$ F( l2 U
number6 q7 @6 x. V' ^) j0 u

( C) H. |! [; |( ?&gt; var b = 1.3
. G8 W% u8 r1 p" P/ E  Q5 e&gt; typeof b
, x5 h: T0 s- U/ A$ \number: u& B1 N" r" T! P" m
+ C/ E- {' d- C8 v
// 不管整型还是浮点型打开出来的结果都是number类型
' b0 V% w6 w( D4 p" |
; W- [/ s: a2 H/*
3 p  I6 z# j( \8 j. z7 T) ?4 rNaN:Not A Number3 a8 i1 q4 ^# H
NaN属于数值类型 表示的意思是 不是一个数字9 h# w# l" P4 a5 m% y* A. d
*/
( H9 A; N9 ~% m9 Y  P' j- k* X
! T# }- _) k  h" B& l$ d( KparseInt('2345')  // 转整型1 i; `$ H* A+ b3 s3 G
2345* F* {) Z# g, g  E; Q4 Z
parseInt('2345.5')5 G+ S( z/ I% I9 ~( [  D
2345
) y) {: C9 C" w4 IparseFloat('2345.5') // 转浮点型8 b# R' s. ^* X7 t4 s2 F
2345.5
) @) E. Y3 S9 CparseFloat('ABC')" l4 @' c% [5 Y8 X' ^
NaN& z3 j" ]$ D- T' S  A0 a, y3 o
parseInt('abc')% z9 |" Z5 h  q5 r4 {' C! M0 L2 p
NaN) p6 _" p3 c9 @1 U7 E6 {
</code></pre>% @. T" G9 a$ J
<h4 id="232-string类型">2.3.2 String类型</h4>
4 u$ t# t$ c+ o; Z& p7 G/ D<pre><code class="language-javascript">&gt; var name = 'Hans') k: ^$ }, u' Z. G
&gt; typeof name
3 {9 N8 g# \  p+ v9 ^'string'
( M' B4 I5 l5 d; _$ z$ c5 D* I
2 I; v# d% _7 o- u//常用方法4 P8 g6 J; p" ?/ j
// 变量值长度
- h' d2 ]' U" ~0 b3 H$ t0 B&gt; name.length
4 H0 f7 B# _+ I! J) k% U- E! m0 d44 J' p/ ^( A4 c& k7 D% q2 l
// trim() 移除空白5 M; U8 H! k, Z. Y$ n! G
&gt; var a = '    ABC    '3 S' y" f* W, a5 s! [. P" I0 ]* m
&gt; a# A! ]6 \: z  S4 b" M/ h; v; i
'    ABC    '
* d% l4 T) V) T7 ^0 D) @0 `&gt; a.trim()7 J- g/ X& q! s( L; a. X; d
'ABC'1 M  i% e/ E! X6 X6 E8 n  ?
//移除左边的空白
5 \- W( t2 P1 M  Y, o, i( \&gt; a.trimLeft()
/ x- Q4 C. T. F% e  l3 L'ABC    '
- Q* H1 G, X- b//移除右边的空白
8 p0 S4 P; h& {1 y3 L&gt; a.trimRight(), a  ]6 L  X; W2 v9 }/ c( p
'    ABC'& H; G/ G! i! @/ L% G

5 X/ F. D3 A2 F, f4 b% P//返回第n个字符,从0开始" B$ O$ r1 T! o/ c6 H, T- t
&gt; name5 b* o! n% S$ N' J2 c! I
'Hans'7 b) c! ^) T; Q$ Z; X
&gt; name.charAt(3)  ^  m# Q- K2 E% {- D# T2 S  g
's'/ m% l- c" O/ Y- j6 \  W/ X0 a7 B
&gt; name.charAt()8 s6 O2 d8 s/ I. `! ~$ _# ^
'H'; y! C# A8 r4 W" X& c* I1 s7 ]8 c
&gt; name.charAt(1); U5 x% p' z6 w: w5 s) R! B
'a'; b6 s5 h" ~9 m- q

) ^  Q0 d3 s  ^1 l2 [' h5 J// 在javascript中推荐使用加号(+)拼接
2 P- F2 x' L! O+ c" m- N&gt; name
$ ~" E2 v' w, E3 q& _/ q5 g'Hans'
# I9 q9 T/ ~8 d4 @4 l% @" U4 W- e&gt; a+ |% [# Y  V6 n: r% L
'    ABC    '8 q( o; r2 k  w
&gt; name + a& G9 n- H: v1 n2 z2 B
'Hans    ABC    '1 g: o$ p6 e3 l6 t' y
// 使用concat拼接* S% a+ U7 H& p8 f9 ^, }7 `' t
&gt; name.concat(a)
2 w$ N0 {8 q  Q, U5 o) S'Hans    ABC    '
) q( ~+ `) x& Z# t2 b" V' m+ f
( J* k5 G+ ~. S, L//indexOf(substring, start)子序列位置
8 j) e% {3 l6 h. p/ _" I5 a4 I' K
. Q0 o- A( q0 n" _8 m1 i2 i8 @1 E, p* U&gt; text
) Q* q0 e! d. ?'A young idler,\nan old beggar'$ S0 m" D1 O7 m
&gt; text.indexOf('young',0)
7 B: v- F' W0 ?) l5 V, {0 p6 L28 a, o6 I- B/ |

1 ^1 g8 }  g) R: {* C//.substring(from, to)        根据索引获取子序列
6 L1 A9 X# k# J, k; p5 c&gt; text.substring(0,)
# m& v' A: |3 r3 P; ^" l' Q$ p'A young idler,\nan old beggar'
/ I2 o% Y8 |. G7 F5 O. c- o/ |& |! y&gt; text.substring(0,10)% B0 Q4 V4 a# p! T* Z
'A young id'+ G- d$ z4 K( s: g; K# Y

. }' \7 V% R( Q. \// .slice(start, end)        切片, 从0开始顾头不顾尾: Q: u7 V( V+ q2 {
&gt; name.slice(0,3)
$ k& V3 d7 ?& e# E# I'Han', Q) K% d8 d. M

: K$ _( N% X1 u) l* H) A// 转小写
6 t9 E: c+ N; p&gt; name9 G3 ]3 M: x  h% q) k
'Hans'
, g3 \+ j6 t6 f; w) [&gt; name.toLowerCase(), c, S  d7 Y" i! [' G* h, ~
'hans'# d) Q) v& @7 L+ }# F- F
// 转大写
% W2 U" z  _( j  o' |+ W&gt; name.toUpperCase()
, A5 r; l& c2 f0 X' O2 G( @'HANS'
1 g5 I0 Y2 `  V
" P+ E' ?. @2 j/ G( @- ]' C) s+ n& X// 分隔
3 c5 R  F3 ]! e&gt; name- J( e, e  X5 u7 l' f3 J, h
'Hans'
4 H3 r7 V9 s/ D' T* _! c&gt; name.split('a')
9 H* {) o$ U/ m(2)&nbsp;['H', 'ns']8 o! V. w5 O/ U
</code></pre>
7 w* x' g7 {  v! F$ E: x5 F<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>7 i( K7 J5 h4 g
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>! |  c! C; u- L! I
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>7 N* Y0 F1 D8 {$ L- ^0 W
<p><strong>null和undefined</strong></p>
) {5 u0 S, u/ u+ p% I8 }) t6 \<ul>3 c1 Q: t, ~; Y  b6 F  Q
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
% d9 i- y$ N2 e<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
% O$ S% k7 ]( k9 z( y. j. {5 K</ul>
0 T1 O' |' r% r1 v; C8 v<h4 id="234-array数组">2.3.4 Array数组</h4>' ?1 H  l0 ?  C! E+ y, F# U5 F
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>/ Z' m, ~- z' |# O: ~" K6 F
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 3 `+ G& k* B+ |9 ~- H
&gt; array14 H" ?+ U( z# H/ T7 F
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& D4 T. z: {- _! |) j* O3 E/ o
&gt; console.log(array1[2])  //console.log打印类似python中的print
% R5 K' E) e; m* `" G6 _38 t2 ?& n' W& k* B. H
// length元素个数: \$ l: N, u, E' M0 e
&gt; array1.length6 a9 r$ m8 S4 ^5 I* Z# k
6+ a) i2 b3 {( S3 a- o6 t
// 在尾部增加元素,类型append
. n' n2 q0 D8 K) m6 q&gt; array1.push('D')
' C9 E- P/ N- s- v3 s! ?$ }7. T& S$ k) _) L! `6 L6 ~
&gt; array17 g# n4 @8 [" B0 M% z' g' _' g
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']4 U1 T, u) M  d3 C4 ^
// 在头部增加元素
8 y' y7 C! E" L0 p; Z&gt; array1.unshift(0)1 |$ t- L" d4 e$ ?7 h
8
  @* a- g) n% B6 H  u&gt; array1# N7 K3 d. p8 L7 a. J4 {' L
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']* g5 G. F4 X  b: F0 Q; d

- X+ r9 i+ w2 _//取最后一个元素$ O" v, K7 M6 q6 b& ^, [
&gt; array1.pop()8 [' n$ K1 `0 N+ ~
'D'% W6 m0 s; t) \) N
&gt; array1+ [1 m. U& l/ r, A5 Q; C% I# f
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
9 [/ {$ R9 \$ i/ J//取头部元素
0 M5 o# O" Y' P7 S- f9 J% b&gt; array1.shift()/ l- x/ B( d& j' |+ q7 \
05 s# C+ K/ I: S
&gt; array1
1 E. X* ~4 L5 u4 o(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
+ J9 Y5 A5 m7 L& F( {9 j3 I; y7 [, G$ X
//切片, 从0开始顾头不顾尾
5 X( {5 {1 A( Y&gt; array1.slice(3,6)2 `9 g/ V' M% ^! m' o5 ], v+ |
(3)&nbsp;['a', 'b', 'c']
( e9 E, F* \' G9 X// 反转
( i$ m* l  u4 z9 b&gt; array1.reverse()
- B! `4 j# \8 p% Z(6)&nbsp;['c', 'b', 'a', 3, 2, 1]  }4 Y+ I6 G* q3 l% T0 V  ?
// 将数组元素连接成字符串
* h9 s! l3 j) t3 r) b( k, Q&gt; array1.join() // 什么不都写默认使用逗号分隔# z4 m7 m5 F3 ~3 Z
'c,b,a,3,2,1'' m7 b! C0 L# v3 ?" \$ l3 n
&gt; array1.join('')
# H7 {0 F2 u; k5 `' q$ P/ R. d'cba321'
! a( k: Y( W" o&gt; array1.join('|')
' z; {0 t8 {( G. D; P'c|b|a|3|2|1'; g' [7 P! ~7 x4 H' s! d' V% ]

4 `+ q$ S. W+ x. k( b6 j// 连接数组' g% _6 d7 Q) r" S! g
&gt; var array2 = ['A','B','C']
7 V5 _+ Q8 Y" E! b9 C( {&gt; array1.concat(array2)
" B2 p8 e+ j! M' j. Y' }(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
' V4 y/ P, H2 }4 h. {% c5 H1 d
* a& N7 w4 n/ H4 Z7 V( ^// 排序
8 e4 F' K  `: g&gt; array1.sort()
  q: M$ i3 Z3 N9 J) F% @1 H(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']5 X! A  |7 Z( i% k: X

; \% ~! B, B8 r$ f2 i// 删除元素,并可以向数据组中添加新元素(可选)4 F  G6 D) {# G+ |6 W
&gt; array1.splice(3,3)  // 删除元素) o2 a; U: M( L5 u% p+ |0 i) W
(3)&nbsp;['a', 'b', 'c']9 c7 L. [9 |; G( J! L. b9 F' L
&gt; array1) t# J0 Q1 Z; }! N3 S' O
(3)&nbsp;[1, 2, 3]
7 g- j' }  ^  W' v. ]&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
) I0 J6 _3 I' C2 m; S9 i& D. Z[]
: R/ y$ G. ~% I3 C3 C5 E1 y; I) m&gt; array1+ n7 U/ Q7 }. q* N) l0 J
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']# {" J$ k- }8 o$ j7 f: [

0 K+ l* D6 X  i; ?/*7 v7 G; Z# M: W1 f2 C
splice(index,howmany,item1,.....,itemX)
- V+ ^8 s+ v0 q0 L8 x' z% Z. zindex:必需,必须是数字。规定从何处添加/删除元素。
9 x; u  P- K5 n9 E) V& _, k2 Rhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 @6 h  P1 S) p) l1 z
item1, ..., itemX        可选。要添加到数组的新元素
& C2 D' m7 ?, W* U4 A' n*/
4 M& ^1 d0 N4 |$ d
. q' i+ D) l8 h+ `$ z/ I// forEach()        将数组的每个元素传递给回调函数. ^1 ^* |8 S) C6 M% }5 j: Q
&gt; array1.forEach(function test(n){console.log(n)})
/ T3 i+ [' e* K 1
% }0 k) M+ i8 b& i: n 2
& S- {1 U! _) z* \9 V/ L5 X 3
9 ~+ U6 P- X$ D' h0 M$ q& ~  m A
( y0 b7 v) j+ V( }) _ B. a8 ?) v" P. G; c
C. c6 o7 `* N% q3 F& V
// 返回一个数组元素调用函数处理后的值的新数组7 [* g" s3 o9 N
&gt; array1.map(function(value){return value +1})
5 k2 Y2 m% q5 o+ g$ E(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']5 f# s+ W+ L% P/ b$ m
</code></pre>8 \; F+ Z4 P# s$ h+ l
<h3 id="24-运算符">2.4 运算符</h3>( R# ]( q) _8 G: G
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
$ c: E/ ?1 \7 W& H<p><code>+ - * / % ++ --</code></p>
, j. c+ |) w4 @3 v<pre><code class="language-javascript">&gt; var a = 6/ |& ~# T$ J$ |+ H- Q
&gt; var b = 3
9 f- C1 Q: F8 b// 加' x9 i6 s0 H# I
&gt; a + b
$ X" Z# e" _1 o; R, M  M  x9
" n; u. _1 l2 _0 n5 V6 |// 减
7 J6 i7 u' {; h5 A5 {; W&gt; a - b
6 n" r2 Y+ c. |. q0 U  A9 U3
( \4 }; R7 D3 ^9 y8 U( m, j. v0 o# g% i. F// 乘% a2 E- V( X4 t
&gt; a * b
6 |5 `/ p3 ?8 b18
( a/ d6 h# N  G0 D- h// 除
" q) `7 G& r/ h- o1 ?0 k  p&gt; a / b, f" V) {; t- h2 x) r% ^
2
7 |4 h$ P) x$ e7 e  A6 w" F// 取模(取余)* o* D' ]4 v! {9 I# G% b
&gt; a % b
" I3 A0 m/ }0 q+ r  m* T& W; U! i0$ H6 t7 f9 f( n. A& ]$ I6 n; B. e
// 自增1(先赋值再增1)
9 r* n/ H, c! u! d: p&gt; a++
) D- ^6 t& D7 a& V+ j6
5 d( ~6 _4 ~1 h' b3 ~) G&gt; a
0 {& H' C6 ?3 W' Y4 u+ e7
6 C$ `% O8 }2 G8 h. p// 自减1(先赋值再减1)
1 X! V3 ]/ [1 _1 a$ t&gt; a--" S6 i! v2 o( z2 ^
76 P! }% W0 C( n5 }% V* Y
&gt; a; Q$ C' Y2 F; F
6
" C$ ^# p- U' p% {// 自增1(先增1再赋值)5 ]7 U* `. q/ K
&gt; ++a- D6 B7 B+ C' X- q7 u
7& J5 e3 f) z# J; g( o5 M1 \
// 自减1(先减1再赋值)
1 p( Q6 ^' F9 z( L& P/ \&gt; --a
. F1 l0 z9 ]  [4 }6
9 t& X6 D& c1 ]) h&gt; a0 N2 x0 E# L4 D9 l  I5 f' W
6( Q: D4 p$ ]3 a- P1 Y

; m7 ^7 o# {  h# I: H//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理$ J4 b6 V- H6 \1 w+ J7 x: U
</code></pre>
4 G+ v. G" v2 s+ r$ S, e<h4 id="242-比较运算符">2.4.2 比较运算符</h4>6 \# A% l0 k7 P6 y; g
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" x) d$ P" I* J6 ?( j
<pre><code class="language-javascript">// 大于
; A9 g5 N  M6 L' i/ D, n1 K&gt; a &gt; b. o0 [, h5 Y) H0 ^. I
true
' i3 t& i" M' M// 大于等于
3 \7 Y/ T) P, N7 _&gt; a &gt;= b
# Q- F" i* Y  m$ E7 }true; R) l& ?4 q; A+ V0 F
// 小于
% J% P1 g3 c0 U2 C  p9 A&gt; a &lt; b- C* v& i6 [( V# ]* |1 s0 ?
false7 N1 w) n$ u/ `
// 小于等于( i( i7 M% D7 T3 P/ K2 p
&gt; a &lt;= b
" b( }1 X- D+ }! g( Ifalse
& H/ ], p7 H( S0 k6 t6 i% V  a// 弱不等于
$ w" Q0 Q% `. T1 ?&gt; a != b
, O1 f: ?5 f1 h- n  P8 Ctrue
4 Z3 q% t% _/ J5 ^// 弱等于
7 e/ j/ M* n- O: B. B' q$ K&gt; 1 == '1'. {2 u8 {- M* Q4 E
true
4 G7 W0 Q3 t1 q6 d// 强等于- X2 W) I" K5 o
&gt; 1 === '1'
5 c" z0 ^  \" V1 K9 sfalse; E9 N0 e9 B, P5 I
// 强不等于
% {- y7 G% h7 c4 x4 n; W&gt; 1 !== '1'- N9 \- R& E9 ?; I
true
" X2 s8 j; f" Z% c5 I
/ X# Y; i7 K+ f) }1 e  R/ o5 X/*
  u5 J: u6 y) O, h. ?9 VJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误1 D1 u3 }+ G% t! P  j" d
*/
) U8 _: R! y' C</code></pre>6 t+ _8 B: k2 p4 c5 z
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
1 Y- I, G0 _- S( v& z% d3 \+ R7 E<p><code>&amp;&amp; || !</code></p>
& [' T" B6 y, C( Q3 N6 b0 b<pre><code class="language-javascript">&amp;&amp; 与; x# K6 e2 F! A, U) `
|| or 5 \2 q5 [/ Q) Q' z! A' N1 {7 j
! 非* a) {" m# [/ d9 o
</code></pre>
) Y, `* W. c  G1 ^; P4 S: P" t; y<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
! t: u0 D9 f8 B( `<p><code>= += -= *= /=</code></p>
8 a' A: Q. f' {* |<pre><code class="language-javascript">// 赋值/ T! x& E8 I/ O: j
&gt; var x = 3+ z8 N0 r% X& v+ H& ?
// 加等于! a" f1 @3 M- J
&gt; x += 2
# o7 ^' _) Z- T, Z1 E* y; P5: A7 t) Z6 m5 X
// 减等于
1 p0 z  H* w/ Z&gt; x -= 12 v& v6 z" n7 s+ i( h3 [# `& k0 f
4$ _/ X* D: ~  ^, s6 |$ q% W3 L
// 乘等于
2 c7 C$ d8 ~# p' o) W&gt; x *= 2
& {# b, D6 d% A5 V8
0 i: v& B+ V5 |) I// 除等于: S$ F. ~, j- [! t) R
&gt; x /= 2& D* m& g1 k# g+ N. P
4/ ^# y+ `; T! H
</code></pre>
$ A, P: f6 L" ?<h3 id="25-流程控制">2.5 流程控制</h3>$ h& ?6 T4 C6 I+ [- a% S
<h4 id="251-if">2.5.1 if</h4>" T* @5 ?- Z" t1 k4 d$ L6 M
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}7 o) f. Z1 q; R( m; a0 k( l
( L# k2 ]% C. K) R0 U" o- k
&gt; var x = 3; O: G9 u! k- h! k
&gt; if (x &gt; 2){console.log("OK")}
# ]1 v) c6 B" ^+ X OK
3 B* Y3 B  W" g/ ^7 \; Y4 A! k& o
; @& i/ m4 K+ i7 [2, if(条件){条件成立执行代码} , j$ |, M+ y6 g2 P- M0 @* }/ W
        else{条件不成立执行代码}, k1 `' u; [1 U+ N) q' X& V- D+ |

' h0 L# C$ g) P&gt; if (x &gt; 4){console.log("OK")}else{"NO"}+ c# m* r7 e' s; ]+ E8 N
'NO'
; Z( J4 f) f$ H7 _2 e' ?) G$ d3 Z0 Q# f, r' E2 T9 c
3, if(条件1){条件1成立执行代码}
% f  D* Z" w& s# S4 C        else if(条件2){条件2成立执行代码}
  q) O7 \8 P! g' [+ G& q    else{上面条件都不成立执行代码}
3 O4 @6 `! M( ?  j0 t
: T* w0 w, B5 P9 A9 L$ k& \&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
/ l8 h' g6 y! n/ o7 R7 H Ha
+ S% x, @/ `# _( V</code></pre>6 a: }' o9 T: ]2 h- E& T
<h4 id="252-switch">2.5.2 switch</h4>9 w3 \9 Y, u3 P$ H
<pre><code class="language-javascript">var day = new Date().getDay();
5 x7 D' B) V5 f4 _9 L( l( ]3 iswitch (day) {
6 h2 _- \+ q* T! W/ M5 H  case 0:
6 U$ E- {, s0 R" p* v" F  i  console.log("Sunday");
/ v! O* |9 M+ }5 }  break;! r8 S9 {0 P  @+ _/ K
  case 1:0 @3 o$ @2 N. ~1 i2 y3 V6 B0 q; i
  console.log("Monday");9 i; Q: d: E' R. _* W4 X
  break;
6 Y' p$ }1 z- C- k& Z" rdefault:4 U% _: l) I3 V# y9 w; k. S
  console.log("不在范围")
; ~7 w" C1 x, E}: t  {  q& j* s9 S
不在范围
3 v: q: N( ^  @1 H$ o' [3 B2 ~6 O</code></pre>2 l) g. ^9 `- d3 ~( g- L: L
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>4 N% k* N0 q0 s+ m+ {5 l. a+ p
<h4 id="253-for">2.5.3 for</h4>7 w2 ?( e- ?, Y/ P/ F
<pre><code class="language-python">// for 循环! l0 }$ D) b7 ?+ K# R
        for(起始值;循环条件;每次循环后执行的操作){% N, X8 ?# h2 V! H: e, b& T
        for循环体代码
) H; g5 n/ f, g/ {; C& T+ k    }* X9 P3 @& a, C2 g: V! E% z

5 ~- P" Q3 z9 B9 R3 e1 ofor (var i = 0; i&lt;10; i++){- F/ Y. E9 s; ~8 D6 h/ G9 Y' D; a
    console.log(i)
* h0 Y7 y" H9 C: ~}
9 i2 X( J, M9 S* u, M        09 V+ _+ _! f+ [5 H- B' L
        1) Z: T1 ]" K1 P
        2
7 J; B2 t+ g: E: e, a7 x        3
( |3 Z5 C" q/ ^4 v        44 `% x/ R+ m" `
        5' E  K2 F) i4 G7 i/ C3 h
        66 P1 C6 n: K9 f. B( z" d
        7" p( s8 y% R1 c+ Y4 J! x
        89 Z8 }  u9 n7 R  |/ R# n9 U
        90 r& P. G, ?* O/ a; d' A0 F
</code></pre># R2 F1 R+ x+ p2 q3 M4 e
<h4 id="254-while">2.5.4 while</h4># d7 B$ G9 U5 l0 Q
<pre><code class="language-javascript">// while 循环
& J: t! [  e7 p) h& t+ {        while(循环条件){5 X2 v0 M4 a) F  L
        循环体代码9 Q$ y: j; M  h+ ]& h# f8 t. X+ O
    }* k" h* }9 X1 C/ |% L
- _8 ?% h4 L4 ]& ]  E9 u, X
&gt; var i = 0
0 }: O  y4 w" k' t& z- A+ C: M&gt; while(i&lt;10){
! c7 b" l) ], X! g    console.log(i)4 ]) w. C  j5 u* [) j- G2 _
    i++
2 v- X, u/ @3 m; u}& f, q; n( ^% l+ p* d2 V# B# s* `, g
05 j( L& g* z7 y% x& R' u
1
' |8 c8 m7 ?$ t+ A5 M6 W# ]1 p 2- C% f0 i0 a; q, ]: D' ~
3
7 s* R1 r6 V- X5 l# d 4
8 ~3 ~: `! O; p& p; \6 I1 m 5, t! b* r9 ]5 Y+ r
6
" a( f# o: |: l0 F 7& n4 a8 Q' l& Q8 c& O& p$ D5 e
8
: e6 m3 [& d+ a: W0 ` 9
3 R6 k6 Y8 R8 n- l4 w</code></pre>1 }" P3 E: ?$ q. K
<h4 id="255-break和continue">2.5.5 break和continue</h4>% g/ W. [  p+ `, U
<pre><code class="language-javascript">// break0 R2 n# i! r% |, B
for (var i = 0; i&lt;10; i++){5 p$ u5 [6 K: j
    if (i == 5){break}
$ x) V$ S5 X6 @# G# v    console.log(i)! z: |+ {- J. ~% x0 s
}
6 I* C8 K* K/ b8 i% b( [9 t% v 0
6 o* Z/ P- g3 E' L0 J2 m) |* r3 U 1! T/ c) z3 q3 K& R! U6 c- ^3 v
2
9 }8 m# p" Y7 G% R( x 3
  }! x: }# b+ X, _5 H" p. E 4
  }1 q: X, m4 {: ~) g" i// continue" [+ {4 v* N) ^. g5 n
for (var i = 0; i&lt;10; i++){( w$ V( G- N* }. ^4 s) p  ^4 w! M
    if (i == 5){continue}, P0 f) ?5 X/ E. Z, B3 s' p- L! N1 y; \
    console.log(i)) E$ ^3 C5 h1 A, t) D! C1 `
}
: w' y5 l( h# n9 }( B 0
1 \: O: b8 R$ R1 @ 1
/ @0 ~1 X* U" o" ^& N# V3 A 2, A7 v% r2 i! @- Q7 H0 |# }, b
34 y* N  C' H) \3 _% _
49 X/ H& R# i+ L' r; l, I+ P
6
$ a' N# F$ F( Y/ X1 z8 ~1 B* x( t 7
4 l; Y) H: \" P1 f+ `6 p+ P 8
0 a  p9 _4 |+ S 9
+ ~' K) Q' Z& U  H1 _  }0 C8 }0 T( t9 i1 L0 s2 x' a, ?
</code></pre>5 x! U9 q5 U* c
<h3 id="26-三元运算">2.6 三元运算</h3>
9 Q! G2 n1 d0 K. S" i<pre><code class="language-javascript">&gt; a* z+ a0 u% U! M/ Q8 f5 A3 b
69 n! O$ Z6 a8 g# Z0 b
&gt; b/ H8 ^+ k" }( r8 b* ^2 v1 P6 E
3
# F2 z- v/ d8 ?6 V, S( E
# o, v1 z! W1 C' ^1 `//条件成立c为a的值,不成立c为b的值$ v2 e2 Q6 y: W; m# Y- f+ Y: N$ J1 g
&gt; var c = a &gt; b ? a : b
1 I& x+ o+ s7 h; I7 t3 p&gt; c
8 j+ T+ v7 j% N4 W% K8 }6
0 s! W! J/ x4 _1 E- j+ Z/ E# N% A. d: W; u  \  N
// 三元运算可以嵌套
- r+ J' n3 ~* `. H) ^# N8 s</code></pre>
& x' J% K7 ?2 m! l# f+ C5 ^<h3 id="27-函数">2.7 函数</h3>4 B3 W3 o2 o# s: o% E7 @7 H
<pre><code class="language-javascript">1. 普通函数
& R" z3 p+ g" P% o; d7 [% y; {) d0 I7 I&gt; function foo1(){! v( x! J' U- A5 g/ {
    console.log("Hi")
4 I& x3 s! H, U9 ^  h}
9 G4 ~# b" _0 b8 E/ A' ?4 F% w! e$ n' }" p2 Y0 Y1 \
&gt; foo1()0 _% |2 L5 o& }& _' R
        Hi
3 [. v6 ~9 e9 h; }2. 带参数函数! Q: b" R+ ]# ?  ]5 }
&gt; function foo1(name){7 s9 i1 u2 f0 f3 c+ K
console.log("Hi",name)6 g6 T6 j( p. W* I4 r
}1 l* f# }" J( C2 K9 @0 d* T! w
& K- j7 f3 M: m+ }, d. u
&gt; foo1("Hans")3 Z! c2 u* f" R. F) `2 e- C8 p$ n0 @
Hi Hans% q, r+ A3 A) J+ [
( p- ?4 {7 [. a( G
&gt; var name = "Hello"
/ ?. m; x  G8 I& W% d- N7 ^& H. _&gt; foo1(name)
4 R+ h9 D% ]0 r/ Q% fHi Hello8 ~1 }! p* H8 [: f: b
9 r) h0 {" E2 Y% ?4 C
3. 带返回值函数
" o) m% x' P" Y% f3 E( r) V) h&gt; function foo1(a,b){
- K4 l* A) d  f& X* o        return a + b   6 ~3 b9 t- f; ~. j2 E$ z/ w2 ~+ h
}6 ?0 n, S4 P' w1 n% D( x& z+ A
&gt; foo1(1,2)7 z4 Z- M7 ]2 v2 f
3- \8 E# m2 o/ p% l. s( i' o6 _# Z
&gt; var a = foo1(10,20)  //接受函数返回值
  W! ]- H( D& r5 L3 X/ B3 Z/ f&gt; a. L. a: Y- F0 H! I% z6 o5 O6 W
304 B( b& i& |, j) t. B+ M

7 B6 ?( |# x$ v) s* n: x5 Y1 B4. 匿名函数
/ E& ]7 k# Y9 ?4 Z&gt; var sum = function(a, b){3 m( q: m) d/ l, X- z* Q
  return a + b;* W0 I. J$ x! p6 z5 J! G% P
}) A# f0 L, R, u, e9 ~# H* J1 y6 S; t
&gt; sum(1,2)
5 E& n  z* \/ x4 ]# g! I% V3
0 K1 a* K/ L1 u1 x! x
; S1 a( B7 D& S. R! x// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱) e3 X4 x7 @4 E; N' e6 ~  {0 y$ c
&gt; (function(a, b){
% F! ]- G8 {/ l5 b7 e  return a + b
4 R+ O! J+ ~4 q})(10, 20)
6 ^$ c8 b+ X# S2 A( R: ~30
) x% x- O0 [6 I: i! T1 X: }3 J/ S9 Q' H- `3 V) _$ y1 L+ I; j
5. 闭包函数
' z0 _, F8 R. X8 k/ w: g! B6 K// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数. B5 L9 o  U; t* Q, u. u, U
var city = "BJ"# b2 ]. i! @' z  Q
function f(){
4 F& B, J/ m. d) b* }# ]6 ~) ~  k& B    var city = "SH"1 y  w4 C. m' V2 _( S
    function inner(){: ~/ ^. o% t( a9 k% I& @$ U) L
        console.log(city)
' }: h$ q' l. _0 D0 `    }
: B& N0 o: ]( e3 {; [% s* ?    return inner
; l; r3 U0 f3 ?, \# I2 V9 @' z}; K) x  `9 G- G9 o
var ret = f()
4 C( u6 T% E- T- O! [ret()
) J/ a+ g3 d8 W' \执行结果:( [; Z9 ^. T" P0 d: d+ K
SH
+ J' V/ n7 x* i& J% T/ u. p* l% y/ X/ ~9 _- W+ ]( d
</code></pre>
6 M+ B* `2 q. z( J, y<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. i$ t$ I. A5 I. G8 j. s( X
<pre><code class="language-javascript">var f = v =&gt; v;
8 A( }1 o) i# `& I6 ^// 等同于4 n5 r# p6 f3 p: q. L& O
var f = function(v){
' }2 d6 L4 i7 q% t2 C- U2 ?; H  return v;
8 x! ?% m" ~5 E3 y0 ?4 i  z* E}1 m4 z4 \/ u4 p/ H
</code></pre>
  ^  z) p2 _/ `. ?<p><code>arguments</code>参数 可以获取传入的所有数据</p>
- F6 R( y) q, z1 j" ?: w<pre><code class="language-javascript">function foo1(a,b){
$ d3 P5 A% n$ T/ v" o, _9 h* J+ a    console.log(arguments.length)  //参数的个数
) R' h* W/ n0 U- U1 ?    console.log(arguments[0]) // 第一个参数的值' b6 K( A2 \* q0 @3 h1 R
        return a + b   6 V' @3 [) q6 v2 D* q3 T
}7 R; {' W* u% e  A: c& K/ C
foo1(10,20)
2 _4 {* R4 s0 |; h3 ^% P5 l结果:
9 B/ x( N5 v# O& ? 2          //参数的个数
4 A1 O& {) C0 b7 F2 ~7 a$ c2 c10        // 第一个参数的值
3 L: d% f& R( M2 n. O4 ?* m: o30        // 返回相加的结果
8 C% k, U2 z% ^  r8 \6 i2 ?</code></pre>
9 N( {/ S7 x3 g3 p3 F5 V1 o8 ]<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>/ G9 n# q( k% O- F+ C0 D7 w) R* }5 E
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>% t5 v" P" `% ?2 d
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
! f* ]8 s' T$ q2 C<h4 id="281-date对象">2.8.1 Date对象</h4>
7 M( Y0 u! i& J/ f. H<pre><code class="language-javascript">&gt; var data_test = new Date()6 l9 ~* J; V. ?
&gt; data_test; g- O! a# @! }7 B! h  b4 r  B
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间), h) `- i+ Q9 v& \
&gt; data_test.toLocaleString()
4 t5 p" @  P# a, _9 y'2022/2/11 下午9:44:43': r9 B) l& H  f- v& ~
5 J( \; M* T% N3 f
&gt; data_test.toLocaleDateString()2 u9 s* Z6 R5 M: J/ @3 `
'2022/2/11'
! a/ T# Y3 u# g! X' n  @1 B" u6 y0 Q& O  Q% p
&gt; var data_test2  = new Date("2022/2/11 9:44:43")* c% n! B  w. t0 Y1 q; @( k
&gt; data_test2.toLocaleString()$ R3 l% s8 b% x
'2022/2/11 上午9:44:43'+ U& p0 C; \& p
. {" D# I) P  v- N# X
// 获取当前几号
2 W: N1 c7 Y: y! M: H# R+ e- Q7 E&gt; data_test.getDate()
$ O' N! J; c3 \. k8 }112 n; d8 B# P3 g, M+ X* m
// 获取星期几,数字表示
# z9 ^8 D7 a6 I6 ~&gt; data_test.getDay()  " l' u; D- C5 J+ J4 a
5
$ ^: m3 E" d/ p" r// 获取月份(0-11)4 v/ _# \+ H6 d/ C) g
&gt; data_test.getMonth()
" W9 x5 v$ U0 X: B1
$ [2 [. V, A. r: F) _9 ?// 获取完整年份  r2 ]1 Z4 Q" x6 f
&gt; data_test.getFullYear()* E( ?) q- q- d% [
2022: P4 [* _& {1 i% p- N( o
// 获取时
: |2 B( @, t/ d1 M; C- I$ \&gt; data_test.getHours()
- b- z! T% m  P% ~  p218 a( j5 r0 L$ S3 i
// 获取分
8 `  _$ x3 D9 q. q$ u&gt; data_test.getMinutes()
) R5 a9 E* N# e, P( B44
) I" `9 m7 k9 X// 获取秒6 \6 ]" N: d0 a3 ?+ W6 \3 x
&gt; data_test.getSeconds()1 d+ V1 @+ N) R- J
43+ o! ]5 e. b3 L6 p' n8 r5 N
// 获取毫秒
! V% P% Z/ N& h, F: T&gt; data_test.getMilliseconds()' W' {0 Z; R- R7 w2 Y& Z
290
! M% `6 X% \; I3 H, g5 K// 获取时间戳3 u/ u1 A' m: V7 t, A& Z. e6 E
&gt; data_test.getTime()
; y) |; l6 k* k1 q% w1644587083290
7 X$ }7 q6 l+ F) Z</code></pre>
: ]; I5 w% Y0 i+ A+ ]<h4 id="282-json对象">2.8.2 Json对象</h4>
* h2 Y* n% ~' s& M<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串# _. X1 y$ b2 k& l
JSON.parse()  // 反序列化,把JSON字符串转换成对象
& P8 G' A& h1 N) y7 Y; j: G, R; u. b
// 序列化  ^+ q  Y* ~# {. |- t# i
&gt; var jstojson = JSON.stringify(person) # G) _7 O$ Y! v4 D, Q
&gt; jstojson  
7 p# Y! u* g. g6 m' i3 X' i'{"Name":"Hans","Age":18}'5 b- b$ k8 v" k* G
$ ?2 y' k3 A' E3 V3 |: Y' U! F
// 反序列化
4 ]5 S0 u" V: O% e2 i&gt; var x = JSON.parse(jstojson)5 k8 V2 b$ V) }9 m
&gt; x
2 P% q& B( H8 ?: G) K6 P; M{Name: 'Hans', Age: 18}. ~/ E+ J9 [5 D7 u) F, h& k: e/ m
&gt; x.Age; Q( I  E) l; C0 W% H! C
180 O9 w6 Q0 [; Q( d+ L$ e) L
</code></pre>
7 {0 y0 K  U* R* _3 e( m6 K<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>/ u$ D+ a6 L' c% W* s
<p>正则</p>) \. X) Y+ {# a# F
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");- {% x  a: U3 H/ s" B' ~
&gt; reg1* W% |5 N$ }5 W3 g7 L" z4 s
/^[a-zA-Z][a-zA-Z0-9]{4,7}/& ]/ }1 m" }( O% f7 I
&gt; reg1.test("Hans666")
2 y% f6 r  e2 ?5 h6 Strue
& x) \# [! o6 l/ l" M/ ^: a! P& \$ D& N" v$ y; q' W8 w
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/1 j7 l$ `( D( D; ]- ~8 n
&gt; reg2% Z) E; K; M4 L
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- K2 X6 x! b$ n9 ~. M2 t# U&gt; reg2.test('Hasdfa')7 [2 w$ k7 H1 X& u6 ?
true5 n* D3 C: W' a/ X

$ G1 Z: s2 ~2 ~$ Y全局匹配:
* G0 K9 U* A) E0 H- ^1 w&gt; name- z4 N8 J8 c, l& t. G/ S3 g' h
'Hello'
  Z7 G; ]9 i" ?3 j$ L&gt; name.match(/l/)
4 R* {5 k9 }3 w1 S) f3 f['l', index: 2, input: 'Hello', groups: undefined]. H4 x9 |" X5 z2 C* @

4 B3 ~0 j' `  U. {&gt; name.match(/l/g)
' w4 j( y! c* k% w. t+ P(2)&nbsp;['l', 'l']
4 b$ @3 k5 H7 C8 U3 |* _// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配! b8 @0 ?, M7 Q5 }( k0 S) ]6 \: u

! ]; _1 V2 g* `0 t" A全局匹配注意事项:7 N7 i% P  M! G8 Q- z4 |& O$ q/ d. `; b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
4 U( \9 s& ^% s) V&gt; reg2.test('Hasdfa')  E" ?6 t( O" G2 [+ G
true
9 j" a: L/ a7 R& s&gt;reg2.lastIndex;7 h' M2 w9 }5 y0 z
6# ?! g. {/ Y3 M& p' ^
&gt; reg2.test('Hasdfa')
" {1 R5 d3 i; W' a3 vfalse& |, C6 E. y2 @& u5 j9 M
&gt; reg2.lastIndex;
" \4 i3 D  A) F, Z02 ]# o4 l3 m  ~2 {4 t
&gt; reg2.test('Hasdfa'), g, y5 X! _5 J& X
true1 d& f5 z; _0 o# ~' f
&gt; reg2.lastIndex;: g9 s$ r/ N' C1 |7 Z% O8 X  r( ?" r5 r# I
67 Y5 S9 Y) {6 C' P6 U( F( r
&gt; reg2.test('Hasdfa')  ~! |- l/ @# y; U3 ~7 C
false
- X6 v3 q( I+ y: W&gt; reg2.lastIndex;
4 @! j; i$ G/ A  T  e0
4 Z- h7 _& K1 y' j* j% s% s: v// 全局匹配会有一个lastindex属性* ~. v5 A5 U$ }, Y) l+ X/ q4 u
&gt; reg2.test()9 s+ d4 [, O& f% O# `0 p
false/ n* {- G( E7 U2 C
&gt; reg2.test()% E$ e# k) N, u. U
true- n. o( K, |2 r: N- f. i; H% U, M
// 校验时不传参数默认传的是undefined0 w" T! M8 |) j, `# L
</code></pre>
1 R( h! I% R/ K3 u1 Q% U<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
# m" m+ j5 L, E<p>就相当于是<code>python</code>中的字典</p># ^: r+ R1 |, g5 l( V
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}' A2 S3 Y% U/ K# ?6 _/ J% d
&gt; person( O) I  y, X4 @; |& L* D7 i  W
{Name: 'Hans', Age: 18}
5 f: k+ ?. o4 P: o&gt; person.Name. ^/ t7 K6 I$ ~$ b
'Hans'% C& \" t9 s% v/ Y
&gt; person["Name"]% H5 Y0 ^5 O; k7 K
'Hans'7 }# U7 R8 U& D# E, z. [) b

' E: w1 W: _$ P0 T+ W9 i# S+ x8 r// 也可以使用new Object创建' u5 T4 y) i* ~- R& K$ D. w% f
&gt; var person2 = new Object()
5 J/ e0 @( p- L& v% y" |&gt; person2.name = "Hello", O* k3 k- I' x% S
'Hello'- E2 j5 i* _; o
&gt; person2.age = 20
$ e$ i' B7 s( X/ ?20" H/ y% d" N( J; }3 z
</code></pre>0 _/ I3 b( x# w; Q
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
' e  l/ ~2 S" J% o7 w! }3 ]<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
0 _" [* n# a5 p<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
4 a8 P- m  n2 {: s6 |' c<h3 id="31-window-对象">3.1 window 对象</h3>: V: C2 a- {, K5 H, D# p% \" J
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>) Z% F' q! K" ?* q5 N
<pre><code class="language-python">//览器窗口的内部高度* J6 F, [; k; }. f
window.innerHeight
, `6 h0 ^# J' c7 O706
  u: }' G$ g' q//浏览器窗口的内部宽度
7 D6 O5 j- ^" p3 {window.innerWidth6 n' [# r0 w* U$ J7 ?- l
1522
3 ~9 A* I, I5 X3 |; p; F' f// 打开新窗口
( z( F5 ], T( l! R/ ?8 ]/ Uwindow.open('https://www.baidu.com')1 h: Z8 P3 M3 z$ A7 g
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
, |# T& b0 E- |1 U: p// 关闭当前窗口# D* Q+ ]; }: a! s+ o
window.close()
' P$ d' [  I' v" X/ E//  后退一页- r: s% G- }* v" Y
window.history.back()
' {; |9 C6 \9 ?' ]; }: W// 前进一页
, Z, h5 z/ E6 ^( f, ewindow.history.forward()
. Q0 A) K3 x2 h//Web浏览器全称
- d8 W8 H3 d8 }$ }window.navigator.appName8 ?. T" ^# A1 e  a$ T
'Netscape'7 R) H" M) g  B9 X
// Web浏览器厂商和版本的详细字符串
5 O! p5 n' O( Vwindow.navigator.appVersion
# w" r  m3 a/ y* S' ]+ h' {'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ h: Q& F* U3 W- c8 {& Y1 ^// 客户端绝大部分信息
: ^( X; q3 S, e3 M( Y& e% awindow.navigator.userAgent
2 A. q: |3 V" |% [5 e'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ H' w+ @$ l; k// 浏览器运行所在的操作系统
' }/ J* b, b3 ]) ?+ U) W8 jwindow.navigator.platform
& E: j$ b( e, t4 B'Win32') l& p$ C3 T6 C4 R0 E
# c* S5 r7 M" ?2 Y
//  获取URL3 H* m9 y6 b, L7 n& s$ u8 c) }
window.location.href' @# n$ K1 r1 d) c
// 跳转到指定页面
) t9 @1 R$ v% ?; Z% Bwindow.location.href='https://www.baidu.com'. F# b' J4 T+ J1 P" @* W
// 重新加载页面
4 ]+ l# O3 Y$ D" r1 U, j5 [window.location.reload() ( Q& Q0 X& [6 O+ [/ i: i/ `6 H
</code></pre>
& ^( Y4 y* u6 o; ^/ M$ ~: l<h3 id="32-弹出框">3.2 弹出框</h3>
& o. C7 i& U) X, M9 b3 _<p>三种消息框:警告框、确认框、提示框。</p>
! @/ k+ A& c& D) x<h4 id="321-警告框">3.2.1 警告框</h4>
5 h7 o# P/ h! i<pre><code class="language-javascript">alert("Hello")
" q/ L' }, }5 ?5 U( r) L</code></pre>! p' k) x5 H  {" |0 p+ b
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>+ i1 g' _- r% _, _. W# q+ M
<h4 id="322-确认框">3.2.2 确认框</h4>
' E% _# w& a; V- ?$ k1 h<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
/ }! p( E* O0 Q7 Z* F5 K2 z" t" d<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
1 y, Y) p( B8 y8 L8 ^( @3 }true
; g, i4 p5 T. f" I8 K&gt; confirm("你确定吗?")  // 点取消返回false
1 @2 S8 |9 E1 lfalse1 Y) f3 c$ ^. i! |( I
</code></pre>
! h- l* j, _% Q& I<h4 id="323-提示框">3.2.3 提示框</h4>& {. T/ y& }2 Z) a
<p><code>prompt("请输入","提示")</code></p>
* J6 N8 K+ [  r2 m. b+ E/ {3 C<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>2 y, K+ C$ a, `* e1 c6 ?
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>! v' T( U( W# e  S- j( z  X  H
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>& g5 _% c: [4 w6 g
<h3 id="33-计时相关">3.3 计时相关</h3>3 |& [# k, p  w: \7 Z/ {3 v1 y4 n# ]# w
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
2 \: z( _6 J6 U" I9 f0 m1 H9 y+ p$ U<pre><code class="language-javascript">// 等于3秒钟弹窗
% n" K9 `, b# l$ H" A9 d) r$ VsetTimeout(function(){alert("Hello")}, 3000)
' f  s" Y' W7 i+ z0 N. Y" B! }- t
3 V4 D& ~3 I! y" qvar t = setTimeout(function(){alert("Hello")}, 3000)
+ [+ j6 j% T8 t7 a) V0 `4 K
9 M& Z6 h+ o8 h4 `& R// 取消setTimeout设置* l8 a& i+ g9 R  C4 I" Q) M  o1 ^# B
clearTimeout(t)
: x: t. j' G3 K3 G3 N, }0 u</code></pre>+ M- t# c. u! C" a
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
6 C8 c5 w' P% B! h<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
' z6 [; n' U. B7 K# R<pre><code class="language-javascript">每三秒弹出 "hello" :
2 }! T/ t: ~, B% s3 ?2 ^4 BsetInterval(function(){alert("Hello")},3000);
# C9 R  A  z0 z) i) a1 S* p</code></pre>
1 f9 b5 n* e8 L) B<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
7 U8 f7 {( [+ B- ^' R* s  c<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
. ^) F' S! p. Y7 O$ t! w2 Y//取消:
' x# H. O$ _2 D- d' SclearInterval(t). Y; o0 u! T  _; B- D% {' C
</code></pre>
$ r: \  g4 A3 I. b3 q
* O3 b- M4 C3 h+ d& {& C2 n, D
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-27 08:57 , Processed in 0.073078 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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