飞雪团队

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

前端之JavaScript

[复制链接]

8040

主题

8128

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

+ [$ s/ O3 X$ i- I0 L  U<h1 id="前端之javascript">前端之JavaScript</h1>9 v  Y$ `* h) D5 H* E. Q# H
<p></p><p></p>
$ m& g( P. x6 k* X5 U& Y<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
6 f1 S: P# y- `<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
/ Y% }9 M0 X; V% a* G它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
# w2 s+ L  {( }( e! h它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br># h7 O2 j# d/ J8 e& ?# I
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
7 X3 q( ~7 q% {! k4 c7 ~5 ]4 u<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
. b- d( O5 N& t1 N<h3 id="21-注释">2.1 注释</h3>
+ B0 I& C1 f! l* z$ ^. e6 b<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>! r$ y6 Q( U) ~8 e1 M! c
<pre><code class="language-javascript">// 这是单行注释
+ a) c2 C, S. v$ Q# L. o; t" g: S6 x! s  X7 j  k
/*
1 X. O& [( c! V$ T/ n5 [这是多行注释的第一行,6 A& w' }' K, w# ^5 j
这是第二行。  i' ?! S! Q/ c* I  A
*/
% K5 \5 p! I$ A/ u2 u9 e8 W% R</code></pre>
4 x6 B( m, `+ R: |( n<h3 id="22-变量和常量">2.2 变量和常量</h3>  J5 P% |  i, H' _/ C0 Y! Z: U4 F9 O
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>- B9 W+ l( C! ]4 u- c
<ul>
) k& `4 C! D/ `! t- p0 y  [<li>变量必须以字母开头</li>
# @: V" f3 l& K( F<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
3 o+ D6 @# g7 {+ G0 H9 u% z, u<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>7 g# {. [. c- l+ J9 Z
</ul>
% i6 J- D4 A0 J9 v" s* F- m<p><code>var</code>定义的都为全局变量</p>; `/ L' a9 I  l! j
<p><code>let</code>可以声明局部变量</p>0 ]1 I% {; Y$ \0 ?8 q
<p><strong>声明变量:</strong></p>
0 N5 n% z: L  J<pre><code class="language-javascript">// 定义单个变量. @2 o0 N6 j+ [5 V
&gt; var name3 ]/ c# ]" J0 q
&gt; name = 'Hans'
+ C9 P/ `3 c8 w2 t. V3 P/ {//定义并赋值5 O4 w" n- H) [
&gt; var name = 'Hans'' j4 n" T' s) N* ^" P& p$ W
&gt; name1 {+ e$ B- U1 e" a( \# t- x
'Hans'
. `% Q+ a. s- U) ]4 S# q
9 E4 i7 K) R3 T// 定义多个变量
/ x- t: c9 |1 N+ S' H&gt; var name = "Hans", age = 182 J: q/ A9 N) s5 m* B
&gt; name/ J" o6 ?; U" L; R. Z
'Hans'
7 q+ |: w- u) P$ H7 L&gt; age
' {+ O' k. K( h" M- ]4 Z4 u& z18
: Q: o2 I5 a8 @9 Y
& t/ O2 M' A3 U$ U* x0 n//多行使用反引号`` 类型python中的三引号+ r  v8 V& z4 B! k6 C+ L0 d
&gt; var text = `A young idler,
! G! Q: B+ n% a1 M& J% Han old beggar`9 Z$ P( ?) u5 @- H: k! W
&gt; text/ x% M6 I4 B+ F9 d: f8 b5 ~  S
'A young idler,\nan old beggar'
9 Y4 I' b7 E# b0 D  S! G</code></pre>0 g! y1 u: c1 p& G5 S% V8 ?
<p><strong>声明常量:</strong></p>5 ]  p. Q6 u7 l5 y/ A
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
" v& u2 ?4 w" }3 h& n' ?! E<pre><code class="language-javascript">&gt; const pi = 3.14
1 y1 y! I$ J. y&gt; pi
& q4 O5 Y- _4 M1 @* _8 `3.14
( \) |7 I  H9 A8 [% \&gt;  pi = 3.01
$ m1 z- H! |! H6 y3 H1 kUncaught TypeError: Assignment to constant variable.) e. Z9 d! m6 f! I; B) Q7 j- h+ ^- P
    at &lt;anonymous&gt;:1:45 ^8 ^. a+ A% T* V* L2 ^1 L5 z
8 O- J7 K& K, D0 z
</code></pre>1 U7 }- H" j9 ^6 A/ |: U& K
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>. y/ ?/ Z* i; L9 m$ ~) A2 z  K7 n% J
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>) T" N, {% N# D
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>% J9 v  h8 n7 ]1 Y! Z3 V. c; T7 Q
<h4 id="231-number类型">2.3.1 Number类型</h4>
3 V4 J5 `3 ^) o4 c<pre><code class="language-javascript">&gt; var a = 5, [" G1 w( l- q. L3 u% N5 U
&gt; typeof a   //查看变量的类型  4 d, }1 p7 s$ G
number8 Y3 [8 R* W9 t# t: n& w2 ?

6 k5 M1 D9 T- |, q( m&gt; var b = 1.3
, m9 c9 J- V1 F2 A& |&gt; typeof b/ \+ E( E6 m3 e! }4 u
number2 x+ s( z3 y$ f' x. r# ~# t
: C- x. V2 q6 T1 X3 X
// 不管整型还是浮点型打开出来的结果都是number类型$ j% H8 t& r: T
% i, S6 m6 c# I% a; w- j2 @
/*% u+ x- d7 p. D$ x- }) Q% |0 F
NaN:Not A Number: }3 Z) _8 `9 c* I7 a1 N2 \
NaN属于数值类型 表示的意思是 不是一个数字/ Z) x: g& p3 R
*/* w8 v0 A% m6 o% n2 Z
) N8 X. a- _5 W  D8 o5 d. V
parseInt('2345')  // 转整型1 D( C, V% V5 J- v* ?! f1 o
23454 [! _+ E! o, S& l" D, t% a8 W6 ~. G
parseInt('2345.5'): ?( k, r& Y  y3 m" Y! |4 `
2345
  J$ f9 y4 i9 Q( `) Z7 PparseFloat('2345.5') // 转浮点型
& {4 G! }# Z/ B2345.53 V+ {/ ?. m8 A5 c
parseFloat('ABC')
6 J& ?# H1 z( u, s& xNaN! c4 e. q4 m9 L( ?
parseInt('abc')  @: O. B" Y6 S) [8 g
NaN( {) S" e, O4 u) |
</code></pre>. K8 B$ H2 j4 {+ L0 w, Q: v
<h4 id="232-string类型">2.3.2 String类型</h4>. p* n' U+ [7 }$ G# {% u4 a1 {& A. u
<pre><code class="language-javascript">&gt; var name = 'Hans'5 z& ]7 B& R5 v7 m8 ^7 |
&gt; typeof name
  W& o1 C* ~5 E( J' P: D'string'
: I( P+ E3 m3 h$ M# Q% N0 b* E$ a# Z7 k
//常用方法
% J, T  n" C+ `: l) e// 变量值长度% E0 x" z3 l4 B( Z( l
&gt; name.length, v! j& d& V& s
41 O" g- ~) `8 s8 U5 @
// trim() 移除空白
( E' F) g/ ?, n) R4 P' t" E7 T* t2 @&gt; var a = '    ABC    '5 {. S5 p( O. A; p# Q. U
&gt; a
4 o1 t/ x  m/ N: j: X& e2 L'    ABC    '  O  u( S; V! f* T- O7 `  O
&gt; a.trim()
- P' w0 [2 g! C' d! [, t'ABC'4 Y# b& ~. H- E( i- W1 E1 Q( `
//移除左边的空白
$ I6 }8 X) R& b! i. a1 }&gt; a.trimLeft()
! m8 N" {) ]4 W9 y, K7 i; o+ z  @* |'ABC    '
3 B6 A! a& h1 N//移除右边的空白* x# x" m+ \6 c, V
&gt; a.trimRight()& }7 f2 e" q1 w: F; f# D  I
'    ABC'
  E' b; L. t% S8 Y! j
0 {& o( z1 U/ T& E  M; }1 o//返回第n个字符,从0开始
4 d, ?; J2 q5 k&gt; name3 @2 f3 h3 b( \' k' t1 S
'Hans'7 R) n+ C4 }" [- ?
&gt; name.charAt(3)
2 @" w1 N" ^. z+ G3 m% M/ V9 r( E's'
/ u* ]  A1 L  B; K! \3 X: j&gt; name.charAt()6 P$ o' O0 r0 z  c/ J" w
'H'" ^  V! b& O+ X: q( O7 i! ]6 h
&gt; name.charAt(1). X. w( O8 c0 x, @$ ?
'a': R; q! p# @5 ~# K1 r6 E

: l" c  u% W% V% V5 f// 在javascript中推荐使用加号(+)拼接2 Y  }/ U  N, Q! L5 I
&gt; name
2 U4 n1 x! T/ c3 x! ?* _& J" j# |'Hans'
8 }) ?6 @1 Z- p! g&gt; a
+ l" c4 W+ ?& _- ^4 M  q8 ]3 l  f; X'    ABC    '
4 W1 X* O" R/ f( r) f$ e( ?&gt; name + a
* z9 o8 I; q3 Z) X% d2 v$ m'Hans    ABC    '
# m! J* V9 p4 m4 w; v9 A// 使用concat拼接
+ ^4 ~! N9 o, i5 r0 U&gt; name.concat(a)8 k9 `( L8 J+ h  n7 j" r6 b
'Hans    ABC    '
2 Z2 [$ \! C) D9 F
% a& |3 m" G) V+ W( F//indexOf(substring, start)子序列位置
/ ]' y8 G& q( F* |' Q4 u- u. n5 v/ N% v8 O9 w
&gt; text
7 n& a2 n6 R' E7 c'A young idler,\nan old beggar'
2 R4 W1 R& M+ o, o0 O&gt; text.indexOf('young',0)
+ j) d& k9 |0 S% g3 o# j/ R2
6 i& Q( j5 E/ X6 d9 e* @
. Q3 B: `: K0 }) X8 |9 w7 Q0 V//.substring(from, to)        根据索引获取子序列
, p0 k7 V, U" u- |9 ~2 s&gt; text.substring(0,)
2 S( u& i/ w4 b# J( O& e'A young idler,\nan old beggar'
# Q7 L$ h  [  _. G% o+ D( Q&gt; text.substring(0,10)1 G2 ?. ~/ ~' f- i/ o) V# e
'A young id'' q+ p: C6 L6 I& M% n1 c5 F
" v* U; c* ^5 ^0 |7 H& _& T( c2 w  B3 c
// .slice(start, end)        切片, 从0开始顾头不顾尾
; T. z0 v+ E0 D6 _$ B&gt; name.slice(0,3)
7 W3 E  q: |8 N- b'Han'2 s- d! H+ O! V3 m+ v. {# n- r

. p; _$ T0 k9 j) H, }9 [// 转小写
% N+ V/ L3 N: m, U2 g1 V  w" [&gt; name4 [1 C* W% [! I( B- i: V5 J0 s) U
'Hans'8 d/ V- ~% L: g9 `6 k/ y5 R
&gt; name.toLowerCase()
3 {* N8 o$ b# [/ \'hans'
" F% \: N2 F$ C( N; T2 a// 转大写' u6 b; @* V/ O& Q
&gt; name.toUpperCase()
( Y( |0 J, x7 t% C2 R'HANS'
% ~- Z5 f$ D/ D5 a8 F# Q1 Z2 Y7 x: g# S7 Y  p$ I
// 分隔
# U7 l0 b% L$ \8 l% h; L% A&gt; name6 F6 O# ]1 e1 c# g) ]
'Hans'* s. W  h& @0 H* s
&gt; name.split('a')
& j$ w2 c& S2 K(2)&nbsp;['H', 'ns']
, Z" D! N: }' B- C9 q</code></pre>
8 y9 B. l3 Y$ k; l! \<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
: h7 t& {+ s% k" D<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>& {6 b$ p4 E; c& c; ?+ x
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
+ h, ~/ @6 Z8 q0 [<p><strong>null和undefined</strong></p>
8 ]$ t  e$ ?/ e0 H. H<ul>6 l3 Q) l% T( ?7 F, u
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>+ s* A" q, F6 }$ B% u3 e/ u( z
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>. o) L4 _# [9 w; [3 k% l% }
</ul>
% x, a5 R3 ^/ I1 O+ C<h4 id="234-array数组">2.3.4 Array数组</h4>: i/ C+ H* V( I9 A' ~; Q
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>5 j+ q' F! ~/ B5 U6 p
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
  k5 R3 |4 }* P3 w+ W6 I&gt; array1
+ r2 q  r: v( S$ }7 w" v  O$ ^(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; e8 u- K" a- {% D; \$ F& d
&gt; console.log(array1[2])  //console.log打印类似python中的print3 P% p1 T; B& m7 p1 S/ D7 r6 a
36 @$ k$ E' L  D. `; M9 ^+ C
// length元素个数4 T! s4 k5 X; r3 ^0 K; O2 C9 d
&gt; array1.length/ o% O' h  j4 T9 l
6  I$ D( s; A* m$ D2 M
// 在尾部增加元素,类型append
2 X, f/ ?% ]! t; G4 e% \1 G, D8 S&gt; array1.push('D')
/ J& @& M. _% P" x8 S73 H5 e, ^8 V9 O. M( p/ r  A9 D! V
&gt; array15 \+ a& d7 p+ O) j2 U: d
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
% H& P# G) h3 M5 @  v# ~// 在头部增加元素
8 ]" G. U8 q1 G+ d: p3 E&gt; array1.unshift(0)  ]  \% C) }9 I% m+ O+ o
8
, `; l. ~+ y/ ^5 e. }. |$ g8 p+ t&gt; array1+ K2 F' B& @& o- x
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
/ B/ k! _  U. \/ g# B
/ x4 \, r1 X! I. h( ~//取最后一个元素
: P, q! L2 s1 F* ]: w3 e&gt; array1.pop()! t  I9 G4 c1 ^9 z& @$ U
'D'3 E* v+ W$ v0 S8 \! P
&gt; array1
3 N" I% Z5 v# l7 l. t* u/ v/ x(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
' n8 z. l# \3 ~' _//取头部元素
! `$ e+ c* q  B. S&gt; array1.shift()- J( m4 \" [' V. k
0
% O7 K0 d7 Y) X5 `&gt; array1: r3 O4 b' [, M9 d1 [, G5 F& B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 J+ s% [5 t. x( r2 @

/ b! ]" ]- w2 g' V7 p5 H//切片, 从0开始顾头不顾尾
" n% {8 U' F0 z4 \6 T1 ]&gt; array1.slice(3,6)
- g! m/ V  w: ?(3)&nbsp;['a', 'b', 'c']' U5 P: g- u/ q# B
// 反转* \" h9 x4 y3 b. m* \. b
&gt; array1.reverse()2 o/ N6 N) d1 p/ G$ \- H% w
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]4 U2 {) J. x( {9 Q; U
// 将数组元素连接成字符串3 _& S4 S+ \+ ?4 x( j6 k/ M
&gt; array1.join() // 什么不都写默认使用逗号分隔
7 c, V5 }. ?9 G( A& R$ j9 z'c,b,a,3,2,1'5 ^. S" b- x4 C6 W
&gt; array1.join('')" E1 I1 K$ q, t1 g1 q1 X& D
'cba321'
. Z5 Y; T; R# k  \1 j- G, m8 T6 s&gt; array1.join('|')
% l: O, ^# D, e: a) Q'c|b|a|3|2|1'
( B7 v5 F& T0 A0 W' _
/ s# ]" k! m  Y3 d* R& U// 连接数组
. I* q0 R% n; S&gt; var array2 = ['A','B','C']
" q. Z4 C0 X$ |0 M! u) D&gt; array1.concat(array2)
. C5 C: N/ u7 R(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
$ I% i, n4 @1 Y. h- k% F: B3 o7 h# l. v8 D0 K+ H! ^
// 排序
. f/ P2 ~) _9 i1 A! S&gt; array1.sort()
6 Y$ v  }, n. w( r0 X5 b(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
) @) E+ V6 h3 X9 L& }2 K6 y0 z  H9 r- d2 q
// 删除元素,并可以向数据组中添加新元素(可选)9 E. Q3 y; h$ e$ C: ^$ D
&gt; array1.splice(3,3)  // 删除元素3 e5 `) d$ a% C: `
(3)&nbsp;['a', 'b', 'c']; n& n8 K4 o" R* N: ]
&gt; array1' U5 _5 l1 N; T, w4 @9 |: P
(3)&nbsp;[1, 2, 3]- t# D3 a% d, n. B- Z: E7 Z
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
. k0 [5 ^% d7 Q# G9 L7 c[]" w0 |6 c& H6 U
&gt; array15 J, B! A. S5 B  m2 V
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']; q# x) [! _0 F+ U3 G4 j
; n* C3 Z4 A+ \. y
/*
# p6 U3 m6 w$ I2 n4 C: @: lsplice(index,howmany,item1,.....,itemX)
) r4 e, f; W; l! W' z( Xindex:必需,必须是数字。规定从何处添加/删除元素。4 T; d3 b9 f3 u
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. Z- c' O6 ^) P9 H
item1, ..., itemX        可选。要添加到数组的新元素0 h9 x/ v  D8 j+ f1 H
*/
4 p0 \5 ]& R) w) _
7 B( D  \) v% w, n// forEach()        将数组的每个元素传递给回调函数
, t& \7 N  O" b$ S1 Q& \$ [- q&gt; array1.forEach(function test(n){console.log(n)})
3 @8 X  J% M9 h8 C9 e8 ~ 18 ?0 p( d( C: j4 ?7 Y7 G7 K
2
: {& x' L3 E/ c6 \1 m( T& g 3' S, D& d" G4 U' d1 O
A0 k& F; a' G5 x- W2 n
B* w; ]7 i. @# E5 K* {( y
C
( M) Z. s4 p4 _' N  v, G// 返回一个数组元素调用函数处理后的值的新数组
! Z1 \9 k5 B. w* R&gt; array1.map(function(value){return value +1})
0 b% a& ?- b5 z2 P/ w(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
' G+ Q, Q8 [" U</code></pre>
3 E9 w7 v- x8 M. Y% W<h3 id="24-运算符">2.4 运算符</h3>9 {9 n& m  v- y; v* P# G
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>/ Z! ~, [9 Z5 S9 F% h9 Y1 s, f4 G) ~
<p><code>+ - * / % ++ --</code></p>9 T3 R2 ~' |5 m8 ]* R
<pre><code class="language-javascript">&gt; var a = 6- G  {$ [; A9 F
&gt; var b = 3
/ {' ]& F& {7 Z/ M// 加# _" Y( D- Y9 g8 z
&gt; a + b) ~' o* r8 j1 d6 K5 C! [9 s- `
9
" g) [; o6 p! N; Z6 @// 减
2 x/ X- X0 i: |5 T" P- {. @. S( V&gt; a - b
# A( y# d9 I8 v; T6 W$ h  q. F3 q38 R- u( ~1 W* h& O. ~- }
// 乘
& E- k8 Z, }5 ^3 ~( e; ~&gt; a * b( f! y, ]& A2 @3 Y7 S5 [( Q
18: b! d. t% v1 y  A
// 除
0 P% s) v& g% k! ?2 i1 {&gt; a / b1 s& [& W3 q5 B  a5 U
2
9 ~# {& P" v) r" ~9 d1 i// 取模(取余)
* A4 C. b- W; w4 M&gt; a % b9 y7 k' m9 w/ ^
0
; M; d$ x) \) @// 自增1(先赋值再增1)5 E, d/ y. x: v5 r3 [0 Q* K
&gt; a++
) m! m/ {5 u4 o) R. d  g3 }6
4 k. E8 s* Y$ i0 f2 g0 z&gt; a
) H8 G1 Z; G' j2 Z& o" k2 ?( a78 p5 P: e( a' p" ~
// 自减1(先赋值再减1)+ {8 z1 U$ T4 U8 C% |! ~! S
&gt; a--
. N. f6 S# J1 v) Q" g5 D- Y" f7
; P9 D: S1 K& H4 o* N& j# V7 U# u&gt; a
! E) O) c6 Q3 J- [* T6& R! Y* E' \. u7 R
// 自增1(先增1再赋值)2 Q% m, ~. q8 E: X6 O
&gt; ++a- `8 H& u+ S% L4 g  Y; T$ y8 S% f
79 C3 _: K$ T5 f, r; Q$ b! b
// 自减1(先减1再赋值), C( z1 y! X- a% m  V9 a% B
&gt; --a
5 b1 U% I  z% }! B) @6
/ S: `! Z$ K9 Y2 v# v&gt; a' D; z& \$ ^5 M& n" l! m& v
6- T; e. R6 A1 ^# S% n
3 x, R& G+ A* w# T
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理- K4 t% r! y% A  C
</code></pre>) m# X3 o) ?. m+ ^* o9 P5 j
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
' e- ^% G( K/ {- Y  w4 E4 Q: c<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
! Y; r+ e. q/ G; }/ ]( L& h<pre><code class="language-javascript">// 大于
  n* e2 q% Q: ?# S9 X5 N&gt; a &gt; b
) `+ Q, T, e5 Z2 Gtrue* F% u$ Z  N: J6 `
// 大于等于4 X! e3 U! A. X7 H% }3 W( |' ~
&gt; a &gt;= b. q2 i' E5 l" `$ x% X) [
true# o5 F6 M& y" w
// 小于1 r. t& r- c- O. r
&gt; a &lt; b
: F  p$ t9 Q# _/ O) C. q7 x( Sfalse
9 C3 d6 j+ F- P1 k/ j6 u; E// 小于等于$ d' s& U/ ^4 B! N& i+ I
&gt; a &lt;= b
; w2 b! N7 W9 w& e1 `false
, h! t0 t/ R+ e8 I, Q% I1 c// 弱不等于8 i" |* G/ y( |& g8 u
&gt; a != b3 X$ k: B7 z2 U  Z! a4 `# e. m
true) s; \5 D' u+ X# |1 H4 b
// 弱等于
* m; |7 Y0 g8 k  x. k&gt; 1 == '1'4 L7 g0 L  m3 S6 r1 J7 l
true
# ]% ^* b# z/ k% n( n- L3 O// 强等于3 P4 @) s; ]; t) _
&gt; 1 === '1'
# l; Z3 Y0 @: [( L% x7 bfalse! U6 \* k3 |$ [' Q! K! D' C
// 强不等于
6 ?2 U9 z' v! k7 U& ]& [8 F&gt; 1 !== '1'0 B+ w& ^' r# i$ F& z( o7 Y, K
true
$ y( }* V8 j, @9 X& ^; o$ e
+ |  {! b" \5 {4 w# E5 P6 z& F# N3 |/*
) U+ P8 O$ e- W8 {JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
/ m' Z9 q0 u$ Q7 {" F+ W. ^* Q*/
6 [4 J* u+ y0 z; @9 {6 T; g3 {</code></pre>) ]! E% O: o9 T% X
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
, a$ k4 u+ s; K5 V7 W<p><code>&amp;&amp; || !</code></p>
& M. {  d2 I* x* R5 ^" w" r5 G<pre><code class="language-javascript">&amp;&amp; 与
" }* ?( N; ^5 `4 A- L7 |! b|| or / t, S6 g* F+ i' I
! 非6 [% n# i  v) a8 `8 V
</code></pre>
! j) H# Z) Q! j" ~7 z; X# ^$ }<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>) x6 [! t6 y  t+ q
<p><code>= += -= *= /=</code></p>
* [& n9 O6 j) J+ v' O$ q5 w2 s<pre><code class="language-javascript">// 赋值
  C3 B9 Y; I. ~  D& s. d&gt; var x = 3
: M2 R- {/ t  g/ \0 k( u# V, m// 加等于
! B  r  s; @* E! `: I& h+ s&gt; x += 2
: [5 W( a. c7 L! d% J% X  m& K$ i* ?5
% e( K1 [0 Y% Z% M+ n, _: R; L1 q// 减等于
, n  }9 b1 }3 a) l&gt; x -= 1- R  U% M4 N2 s- W
4
' M* k, ?/ i* i9 a9 `* C// 乘等于9 k0 w+ i2 A$ ~3 \
&gt; x *= 2$ t8 p( T( L$ y. L! c6 }% y
8, V) t  O$ r$ v% I+ V
// 除等于
- h  s: X" A, R&gt; x /= 2
# G, |% F4 K- q4 p; b' {3 w6 p; ~! \4
* @% J; q& `5 F& s5 I$ l, \</code></pre>
5 n1 o% c4 c. C0 R2 ~! s; z. U<h3 id="25-流程控制">2.5 流程控制</h3>) e& {5 K  a' k) @  f, x$ N* ?
<h4 id="251-if">2.5.1 if</h4>
8 Q1 G9 h- I2 e- |4 M) ?9 l<pre><code class="language-javascript">1, if(条件){条件成立执行代码}' N0 s* s' z% t! ^4 N
) ~) \. }- z# Y' q' J- z+ Q
&gt; var x = 3. Y" I# M" w2 {7 k" X* E3 t
&gt; if (x &gt; 2){console.log("OK")}
  V+ W3 |: q& l OK5 }6 J" n- R/ v3 O' w& P* {% ~3 O

3 k* v/ N0 x) Y7 `% @2 p+ P2, if(条件){条件成立执行代码} 4 W9 e* N& S, Z
        else{条件不成立执行代码}% \) n3 B' ]$ i7 y, z* f

7 Z% j1 L4 Q8 o$ r, S" q, w&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
! a4 ^7 a0 d# {6 _# \7 u$ T( t'NO'
$ h# W8 D8 b, Y' {
* V  C# X5 d) w+ ]! `" B: K3, if(条件1){条件1成立执行代码}
/ ?6 o2 F/ t, n+ G1 E, Z        else if(条件2){条件2成立执行代码}
/ U- W) P$ z4 r    else{上面条件都不成立执行代码}; p8 l- |, [1 C. r) o

: a6 y1 V  p9 j* j3 t&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
/ [3 U! j* z6 m: h9 } Ha* U2 y% J# E, x( d$ ?3 m
</code></pre>4 z8 m* M9 a& `. B6 `
<h4 id="252-switch">2.5.2 switch</h4>0 s, t8 N8 o6 @8 G; O4 W. z
<pre><code class="language-javascript">var day = new Date().getDay();; Z$ c* C" a1 @
switch (day) {- S) [8 U/ R7 O  a
  case 0:4 Q8 f5 h6 B) r# A
  console.log("Sunday");  `! \5 H0 h* C7 K
  break;9 l. r; p2 S; s
  case 1:
) p6 P2 P5 c: x* M2 X  console.log("Monday");4 h3 r0 j! n/ H2 o+ v7 H- l
  break;' @5 I3 {1 o' |9 }: w! w( h
default:5 j) [+ D# W5 e
  console.log("不在范围")
( s& C/ S8 v4 t! E/ L7 `/ \$ Z4 o}- |/ A3 d+ f3 r  {
不在范围, A* q' p" T8 B( {4 A- l- n) y
</code></pre>1 F* |, l5 y# ^$ [6 }; H
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
! O! m8 A3 L: b' x: v<h4 id="253-for">2.5.3 for</h4>
& T% N  H; P0 M/ y- y<pre><code class="language-python">// for 循环. u: c- Q2 }8 n' ^
        for(起始值;循环条件;每次循环后执行的操作){' ^5 _3 w6 j: `6 E
        for循环体代码# L7 L# }8 }3 P- n
    }
/ c/ m0 i& C. E  Y3 s0 f$ h+ o& Z- V  ?
for (var i = 0; i&lt;10; i++){
' {- _; ]/ @* F    console.log(i)
1 ?! \4 Q6 M& ^}2 Z* x5 C5 s4 j3 ]
        0% h6 C4 p- l( s& }
        19 e3 ]$ q2 |* X: Q9 Q+ [* f. C9 h
        29 `% m5 w# S0 s8 ?( ]
        32 K* x, I$ b& Q1 R( m
        4! X' g0 g% V& l. s8 Y
        5
! @7 }8 q( I  G/ P6 Q        6
$ ?3 G6 P( G# Z7 S        7
/ ~. Z; L3 E% I$ t1 o        8# G, q$ a1 P' [8 b
        9- i+ |* X, T7 r$ P- j* T
</code></pre>2 e: p  d8 {6 V6 t
<h4 id="254-while">2.5.4 while</h4>
8 ?+ N" t  J8 ?  F<pre><code class="language-javascript">// while 循环
2 ^( `4 \8 q6 a9 f4 H" n        while(循环条件){
. U: W; F3 L) _        循环体代码9 _. h/ O5 |! y; o3 n5 C
    }
/ P* Q+ }) G$ Q# \' u( ~0 X1 o1 [2 P/ ]& O7 q* {0 T
&gt; var i = 0) _! H% d4 T/ e' |( F: O/ K4 ]
&gt; while(i&lt;10){, G3 ^, l5 b; W
    console.log(i)
. G6 u6 S" J" \$ R8 S, C2 l    i++
# M6 ?) }8 a9 T. F- ^}
# c5 A7 @2 B4 _ 0
% v0 }5 a( E8 {  ^ 1
3 |8 a8 s; D1 @" B 27 |5 {" c1 N4 [
3
3 i+ Q1 M1 Y. |9 Y6 T7 G3 u1 o6 | 47 M8 U. _' z/ @8 q+ l, c
5
0 U- Z7 \# [/ G5 o 6
) E( r! g# t9 ^ 7* T- x3 H  q1 X+ y/ B2 ^4 \1 R
8
$ H  H2 ^7 j, T, `, Z: v2 w7 B 9# v' x  Z' d/ k# V$ D0 K+ I: g% y+ ~
</code></pre>6 V/ E. ~" l- T1 J! s& p+ p, V
<h4 id="255-break和continue">2.5.5 break和continue</h4>, g5 S) X+ P. W2 Z' G  V8 W
<pre><code class="language-javascript">// break; _* v9 x- y4 [' `/ b
for (var i = 0; i&lt;10; i++){# p/ v5 I- Q  c* |
    if (i == 5){break}
, v) g8 y9 ]3 q! c; e, e6 R    console.log(i)5 v+ k: P8 N  D- @
}
+ f# Z$ Y2 L; L9 L/ i/ H8 U 01 D* H' r- R$ W' ~( X
1
7 {) v. D) C8 T. _- u9 q 25 [+ K% a+ Z9 t! b# u
34 _$ U+ ~+ M' _9 e3 s. {" x
4" k0 }* H! B9 X! k
// continue
. E2 [4 l; C" q3 O8 _0 r5 l3 u; u2 Qfor (var i = 0; i&lt;10; i++){5 H: Z! t/ a- f
    if (i == 5){continue}& ^' _  r+ z. D/ d+ u
    console.log(i)2 h# H3 Z& S* i& ~
}9 n% s# q' W7 W! F* n4 Y1 S& I3 n
0' k/ z3 G: ^! p" z, q
1  j1 ?8 S5 S9 x! D; v. I+ v6 @
2& `; X0 [7 h' t
3" z5 t& C2 @9 w& W9 R6 w4 o7 ^
41 c4 j  I8 k; [9 B7 m) L: y
65 s- A  s1 x7 x4 }0 E+ D2 X
7
8 Y: O6 s# x% P, U 8
. |5 S6 e* _# z' ~9 E$ `& e$ ~- `- n 9
# P6 b$ \' W7 P, \1 Y4 Z
& Y& [8 u% A2 [: J- s2 c- s</code></pre>
! _9 N( V7 V5 V' @0 \<h3 id="26-三元运算">2.6 三元运算</h3>
& K6 o4 x% v! H<pre><code class="language-javascript">&gt; a
; U+ r  G  L2 Z6
5 K$ ]0 K2 l# |& q# ~&gt; b
- Q" ]+ o4 G+ X, @- f0 p5 D35 Y: `1 ]+ J6 h8 e& F& b. v

1 \" M( p8 k1 K" t2 d9 j6 x//条件成立c为a的值,不成立c为b的值
/ Q+ K) I) {/ m&gt; var c = a &gt; b ? a : b9 B; {4 y, X4 o$ q; K+ N! {- E- N
&gt; c  X3 ^, y4 b" b. d( ]: }
6
, N  c; h/ [' r8 t3 r+ m8 f3 q! V8 Y6 |$ p' H! _2 k" t: _
// 三元运算可以嵌套  m) J/ q% p& \* n) {3 z, A
</code></pre>* g. E* T! T0 @' e
<h3 id="27-函数">2.7 函数</h3>
. ]' G% k) m/ |, S( m. Q<pre><code class="language-javascript">1. 普通函数. E% K3 S* W6 m' X
&gt; function foo1(){* P' I( L: {, {* `
    console.log("Hi")$ p& S8 b6 \. w' W
}
, r* }7 W1 G, o" ?5 r7 P, a3 N) I) x( E1 S" M/ d
&gt; foo1()
# w: S' J$ S& f- V. H7 Q8 m        Hi) x2 M% E/ T: r- \$ K
2. 带参数函数2 G8 X7 M3 k& m8 M
&gt; function foo1(name){6 X3 V& y, H3 c1 B# f" |' F
console.log("Hi",name)
. ?% F8 D9 @  I( q5 d) m( H}
, `9 F. U& [( ]) R: s, @/ t5 j9 X& S7 m( u8 g/ \
&gt; foo1("Hans")0 z5 G7 D: u7 S1 F' C7 X( N
Hi Hans* k: ^4 P3 E/ w. P3 r8 C8 b7 ~( u

3 V2 _2 Q2 e; T&gt; var name = "Hello"
& n$ R4 Z  \$ F( j6 i: ^&gt; foo1(name)
( w, O. ^$ L0 x2 eHi Hello
% J- ?% X/ T* j* z/ g/ c! \4 Y1 E# u9 w, \; u% l2 x3 v0 }# X
3. 带返回值函数
/ O3 G4 O0 P% t3 B: A8 t/ o6 j/ p&gt; function foo1(a,b){
7 x) Z7 ^8 j* x7 P        return a + b   
8 w) W; U+ p7 q. C- {}% p2 R& a2 {1 q9 z
&gt; foo1(1,2)
& r: E* c& F- N) s3
$ J: h7 E8 B. {$ o&gt; var a = foo1(10,20)  //接受函数返回值+ R" I& M. G7 I" R
&gt; a
. C0 E* P5 k8 b, C30
; ~2 Q* T2 I" s
8 I$ N: X& Q0 J+ `4. 匿名函数
3 L8 Q; l, ]5 u( g( M5 Q% L7 y&gt; var sum = function(a, b){
" B' K- E9 J. ]! a) r2 q5 x! ?  return a + b;
  v6 d# ]1 P5 S4 Q2 W8 v3 [}
7 o/ N4 y5 R6 x' `8 V% b% z&gt; sum(1,2)
: t* J  F( C; Z7 H5 g6 S; a3) O& T) v' d' U) o0 d( c
5 c7 o  Q9 X8 f2 p
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱! N* f) V/ w. o$ l
&gt; (function(a, b){$ C' `- o5 j, Y
  return a + b, Q9 I" q' |1 E5 r
})(10, 20)
$ s# O- W2 P, \9 b( X/ f30
+ C! E, i2 ]. {+ W/ S' O: m3 S% o; T, B
5. 闭包函数1 `# k% c& B, Z( t
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数) m9 ~4 f, {) C8 G# f: W8 h% [; s
var city = "BJ"3 w1 R- G) r/ c
function f(){
$ X/ p+ l6 o# b8 @7 f% Z3 Q    var city = "SH"
2 O7 i  M1 k$ M# e% I& S9 E0 [; J    function inner(){
3 _3 f4 g5 q. x* H2 R        console.log(city)
+ w9 g4 d& [6 E) _2 p    }
+ ?1 c0 ^  E( g7 n7 N    return inner
! V9 K9 h9 @6 P}
% v* F; _) h7 pvar ret = f()
! x8 N9 ^' ~# L2 ?+ Mret()* A  _8 n* i  X  d6 a
执行结果:
) B% Y5 ~) _. W% @6 `+ W$ o* M8 ~8 sSH
' U+ O+ v: y' k6 Z8 `6 b  f/ }/ G3 P7 i$ y8 C, |* E  A- M
</code></pre>
9 Z& m/ F6 B5 S  e; q<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>4 o: B) R& ~+ y4 Q& b) B2 r% v( p3 B: H
<pre><code class="language-javascript">var f = v =&gt; v;, N! U! Q7 o" a6 K4 W
// 等同于
" ^& \, W/ m1 x9 s+ X9 Kvar f = function(v){) O0 u) N8 B% j5 q8 Y' ?
  return v;
: J; Y. z% x" r$ z7 c}
3 X( _2 a" k6 N</code></pre>( B) Y  o8 }& k
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
" |( U; @% o: ^; T% \3 c- v<pre><code class="language-javascript">function foo1(a,b){) x! L; T' E$ |4 D- J
    console.log(arguments.length)  //参数的个数
8 c* }  [) Y0 N4 f! c  l4 g    console.log(arguments[0]) // 第一个参数的值2 W# o6 U8 V9 A. n' o
        return a + b   
" e9 O, w8 c  z+ T& e}
) Z  s9 I9 n/ s0 V2 Ofoo1(10,20)9 O; ?3 n: z* M  S; }- W
结果:2 z, W  L  r6 C/ R3 v
2          //参数的个数
: ?4 V# [3 K1 ~2 O* ~10        // 第一个参数的值
( J5 C' `  ?6 \" s& X' t6 R30        // 返回相加的结果
) _0 [0 m, y6 V+ w8 @5 n</code></pre>
0 q( A# r3 \' @4 K<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>6 w: Y+ J: I6 m" z/ e7 e9 x
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
6 {9 R. U3 J! M$ q1 `<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p># k3 y5 Q& a: _3 ]+ N) d
<h4 id="281-date对象">2.8.1 Date对象</h4>
9 P! Q9 Z+ r+ |<pre><code class="language-javascript">&gt; var data_test = new Date()' e0 @$ l* [; C) J) }7 A, j
&gt; data_test
) K* s/ w% j' c6 E1 ]9 XFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)3 N) ?) c) D- W8 F
&gt; data_test.toLocaleString()
( N; S' I! b0 W0 ['2022/2/11 下午9:44:43'
5 V- B" G* z, P6 c' |7 s1 B6 H5 ~7 f
) J" W: P) V1 M) I' c- p( E&gt; data_test.toLocaleDateString()
  }! z4 u% g4 Y1 L& K4 ~$ f0 E; B  U'2022/2/11'
2 G# @8 y& h: f2 N, L( `; d# C0 K6 Q. O/ z; O+ @
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
/ A/ x& x2 z7 n- Y&gt; data_test2.toLocaleString()% g" }# n7 |) \! z
'2022/2/11 上午9:44:43', W6 M. J/ K8 |. j

( l+ y+ o, w3 ]( x// 获取当前几号
  h) ~% v, ?* M: j* B; z; b" a&gt; data_test.getDate()& k8 N) r2 U8 F3 W
116 Q( w1 v; e" B7 z! O' @  }
// 获取星期几,数字表示- [  A) Q5 n# g! N' g3 f
&gt; data_test.getDay()  
: l# |4 E( c  k5. c4 S* T4 P# d$ M' }
// 获取月份(0-11)
6 z. g9 Q' B1 a; N5 Q4 L2 E&gt; data_test.getMonth()
' ^# y* V1 |  _! v, I3 ]6 {11 p3 C4 y1 k. `' ]: }
// 获取完整年份
, R+ m' O9 [. {5 b/ L& v&gt; data_test.getFullYear()
  S; ?" Z  u1 ?% ~3 Y) Q: u# k1 D2022' g6 {- S8 K" `' i
// 获取时3 J3 B% y. o; z3 v; E# K# g$ L4 N
&gt; data_test.getHours()4 c7 m9 G/ M( {  c" y% C* e- H8 c- {
21" G, r( Z6 k4 w6 t' O; x& Z1 l
// 获取分4 @- q% p5 d3 p/ G
&gt; data_test.getMinutes()+ M  B. V: a- X# I2 q4 d" V2 F
445 T# p& r' |1 x
// 获取秒9 V: G9 |5 f4 T  f6 }& L
&gt; data_test.getSeconds()  z8 l! h# s/ z! k
43
( O9 L5 m" W$ |0 f8 C7 h' Y$ O// 获取毫秒. f5 C" }7 Q- H, O& I+ z
&gt; data_test.getMilliseconds(). `1 w# S- m) G
290
# A. `- B* }5 @& b' R) Y// 获取时间戳, R& F7 x* ]8 m. K8 Y" K% c
&gt; data_test.getTime()0 q: @( a: z; ^/ u% i
1644587083290# ~3 v8 ^/ i: O2 Y
</code></pre>3 L  n! c% t0 i# n" D# _
<h4 id="282-json对象">2.8.2 Json对象</h4>- _" @& N5 O" u4 s1 f4 b
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串  P: ?- y4 E5 L/ ~; C
JSON.parse()  // 反序列化,把JSON字符串转换成对象
& a- R7 p  @0 R
( u9 Z0 b+ A* A! m# z9 T( ?' d// 序列化
* X" f9 D6 L1 q" l4 P6 `5 E&gt; var jstojson = JSON.stringify(person)
, t$ D8 Y  b# R! Z$ w! ]&gt; jstojson  8 l6 v, k( e# w$ Y1 Q) }
'{"Name":"Hans","Age":18}'
0 T, O* L$ s* `* v8 F" X2 f. y+ [& w$ S7 H" ]) ?
// 反序列化
) U7 S( m/ n0 |2 E7 ]) X. f+ O$ j&gt; var x = JSON.parse(jstojson)
6 S; A$ {% m+ H: ]7 E3 {: z&gt; x% a5 h# b6 q% k. K$ Q7 \
{Name: 'Hans', Age: 18}
5 d: [8 b3 l6 x2 @* p8 B&gt; x.Age
: O% V9 n# R% O0 o) ?) B; m187 e! v+ _4 y- Z( P" u0 w; r
</code></pre>0 Y. u% u! w/ o0 P. p
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
3 {8 j0 X7 F/ w' N3 i/ W! M( G<p>正则</p>: H8 g/ Z* d; x' s
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");( W) G1 _& G  }: J
&gt; reg13 S+ u4 d- }/ w4 b3 Q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/% X. f; O5 N1 V6 A1 D& w
&gt; reg1.test("Hans666")
" X  t5 g& |6 X. r* M( w5 Dtrue
  B$ Z& q$ l3 Y9 P& Q  X4 E$ F9 e5 U7 Q1 f4 F
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/. B: |% Y- K" O9 ]& I" B" N8 k
&gt; reg2
, ~" |3 Q8 @/ a. e* ]! K4 a/^[a-zA-Z][a-zA-Z0-9]{4,7}/# h2 V4 n) Q/ Z1 a
&gt; reg2.test('Hasdfa')0 p% X: f6 k# b5 U3 D. ~1 M
true
0 e* [$ j# ^# D2 C% j1 t5 R7 u
. V: z/ h. p& D/ s  p全局匹配:0 ]0 D6 M0 D; D2 J* ^6 {  \, H7 C
&gt; name$ w8 Q# t9 v  T* M/ n# u5 M* ]
'Hello'* U, @) r" g* s7 R  b, L1 E
&gt; name.match(/l/)9 P. t# ~- t/ R
['l', index: 2, input: 'Hello', groups: undefined]
: X; y- N8 y* [0 G+ }5 O, W1 \2 ~9 p+ M( u% k$ E3 L* i
&gt; name.match(/l/g)4 J; {6 a! u' \+ x# ]
(2)&nbsp;['l', 'l']
# O5 s# M6 \: Y9 E( c. H* m( A+ Q. Z  e// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配) }1 a. E) G, X9 E# E6 g
' W0 q  W- ^$ z* \% Z: b1 B7 Q# w
全局匹配注意事项:: m5 Y$ _3 Q6 b5 B
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% r/ h7 Q9 x5 D/ a# r8 H) B
&gt; reg2.test('Hasdfa')7 |9 [3 L2 m# R+ M# x* O
true) r) F8 ^3 g1 z8 S4 M
&gt;reg2.lastIndex;
; x# B: U" B- ]( O/ {" a9 C* ]% S' P6) ?- s" `/ P9 |- p
&gt; reg2.test('Hasdfa')
5 T0 [) @0 \! q& B" {false
7 r3 [7 c& a# h2 m- j/ n4 g&gt; reg2.lastIndex;+ I% D. b6 K; `0 L
01 r8 N" z+ U& H. I6 E" f6 V
&gt; reg2.test('Hasdfa')' ^  ?& d8 E: d( V5 }  ^4 S) e  l
true* ?) X' w# [# q0 |
&gt; reg2.lastIndex;
7 A3 i' ?# l3 [4 {  Z  @( Q( Z6# u/ N4 x; D( ]. Q
&gt; reg2.test('Hasdfa')
& E2 E5 b1 b  U: w! Nfalse
2 S/ Q" t! E& g6 d&gt; reg2.lastIndex;5 A/ g- g, X1 [
0! J6 a4 o5 c1 T& p9 Z6 s
// 全局匹配会有一个lastindex属性* Q, {" B; J$ N& p; |$ W* `1 S2 d% m/ u2 e
&gt; reg2.test()
/ [% f' L* M  ^2 t5 ~false
. ]& u8 p% p  g  y+ B' D; T4 r&gt; reg2.test()
1 G$ J0 f# ^) N* q2 B# btrue
' k$ }/ H$ [) [2 N/ i// 校验时不传参数默认传的是undefined! ]; y  y) w2 c7 t
</code></pre>
  F# m% N, q6 Y: e0 w, L<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
: c  x4 ^7 x* ~; X1 L<p>就相当于是<code>python</code>中的字典</p>3 C1 m" Y) U: c+ l' t( l2 K5 q
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: J+ `% t/ d- I&gt; person% a9 [- ]  Z( |4 l
{Name: 'Hans', Age: 18}/ F! w: C9 Q  z3 O6 H
&gt; person.Name
0 X, x* l1 C2 ~& f8 F0 O2 L'Hans'# a9 [" X* q) j6 @* b7 r) r$ c
&gt; person["Name"]
& \' P% Z. F) W# A9 f, H+ _'Hans'
: b( f* A/ a9 l# o( L* |" Z" N( q# d9 h8 p
// 也可以使用new Object创建; K4 G8 {5 }+ p
&gt; var person2 = new Object()
; ^% r& Z$ @9 D7 \& k, D&gt; person2.name = "Hello"
8 T' @* F$ w$ r; R# `'Hello'
+ g" ]4 `5 y# }" ~&gt; person2.age = 20# D  [7 a' e! q0 m
207 h' G. i2 v6 k- B: t
</code></pre>
. ^) ?% p+ o4 ]3 w' R) W# e, h  z" Z<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>6 F# v+ }. [  `* ^# F
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
0 F* F2 q! N! V+ ^' n5 o<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>) d- l  _( Z" H1 ]8 M# E
<h3 id="31-window-对象">3.1 window 对象</h3>
9 J4 i3 [8 H# q$ n9 Y: A<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>& ]3 T+ s7 n/ p0 X; K
<pre><code class="language-python">//览器窗口的内部高度
! H) s+ q4 w7 b% @; R! T. ?window.innerHeight
- y7 y% A5 q! ~! K7 L706
8 Q6 I2 O& K# j6 X7 _4 ^//浏览器窗口的内部宽度
8 O5 W' \' d8 i; J0 ?# Kwindow.innerWidth: b( I9 A" c9 y. L4 F1 s7 E8 M
1522* {% V' W6 y9 ]% s+ `  y% C5 M
// 打开新窗口
& |  X; d$ W1 P* b5 i% Ewindow.open('https://www.baidu.com')" W# E- O, Y! b5 G( \8 k
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
/ K2 ]6 L8 k+ U3 x2 N; T' r, c7 W+ w// 关闭当前窗口
* H& c  x* B5 v8 \6 A2 o( pwindow.close()
1 C8 Q8 F4 t  _% ?! L8 E' n4 p0 z//  后退一页8 {! w+ c7 N9 T
window.history.back()
2 s" S- a) R2 a8 g// 前进一页
0 [- A* g; {8 ?4 Z$ E  qwindow.history.forward()
+ x& W' V6 v6 @: z: x) o//Web浏览器全称7 i% o, h6 F  z% t; H
window.navigator.appName
8 X3 d$ H7 L) ^7 D'Netscape'2 ]# @/ L  g# Y5 V# X
// Web浏览器厂商和版本的详细字符串8 w( c/ C& m1 E9 I. {2 H% s
window.navigator.appVersion3 D/ `, E; ], z' o* }
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) {! A) Z7 T* G9 T' a/ a) g// 客户端绝大部分信息8 C  J/ f; X) g- ^. e4 k
window.navigator.userAgent
7 w0 _; e8 s+ A7 O: ?. t'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ l/ W/ c. Z! g4 b: F; B
// 浏览器运行所在的操作系统
% V) Q- ^# ?, \1 q' R+ c% s3 A( Dwindow.navigator.platform
4 m# d. F+ L7 t, K7 S- U2 X'Win32'' o! H/ o: r; o

' t- x; N3 Y# O& s4 ~//  获取URL
( v! i# F) ^& R; e; j0 v5 q# C. ?window.location.href
7 K7 y2 Z6 Q, S% I  l0 {8 T9 t// 跳转到指定页面
# X4 ~# I9 n* e/ q3 Wwindow.location.href='https://www.baidu.com'
9 c3 @1 h4 l, }+ P4 m+ O9 s// 重新加载页面7 S9 q  f! m' y* E  o) E
window.location.reload()
) h1 c3 |$ r' Y1 X, [& v</code></pre>  N& }/ S9 h( E6 `# @
<h3 id="32-弹出框">3.2 弹出框</h3>
. G0 d4 g$ A3 w/ [& @0 ]- Q<p>三种消息框:警告框、确认框、提示框。</p>
3 Y9 F4 v8 g6 ]' P+ `% r<h4 id="321-警告框">3.2.1 警告框</h4>
% g+ N) D, K* t4 L6 u/ X<pre><code class="language-javascript">alert("Hello")$ A' h5 F/ _4 r
</code></pre>
8 T8 Z( ]  \& V' u  p<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
1 K+ e( ?* O1 J6 K: p$ K4 h<h4 id="322-确认框">3.2.2 确认框</h4>! _" w, G6 n( y  k8 J/ A
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>. J# j% d, g: \9 P  Q( I
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true3 T& M. w4 \* s) a2 D
true" \0 G  Y# A2 R, e( e9 L% [
&gt; confirm("你确定吗?")  // 点取消返回false# C( L0 X; D1 k+ [5 q/ }1 i
false
! g+ C6 B" e0 p# ~</code></pre>+ |3 K' I4 p' s& B( N
<h4 id="323-提示框">3.2.3 提示框</h4>2 P! x  `: R6 l0 {
<p><code>prompt("请输入","提示")</code></p>6 W5 B( \6 J; c5 N, p$ F
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
, G- e3 i- [" x+ V6 o2 ?<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
! |3 P' j8 f- N- V2 C$ b) T<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
: Y1 P( ^1 A7 Z/ }5 u) \<h3 id="33-计时相关">3.3 计时相关</h3>$ {8 E8 W7 b; s
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>5 _6 R: [( }& a! p- M" c! Z! o
<pre><code class="language-javascript">// 等于3秒钟弹窗- s  A  @1 @0 n4 }& z
setTimeout(function(){alert("Hello")}, 3000)
4 H5 U0 Y4 I# J- M/ \+ k5 |* h3 o/ `% d
var t = setTimeout(function(){alert("Hello")}, 3000)) Q! h- P, Y# m7 a- y/ {& q

# u- B' q, X6 F" k  j6 H7 k% \// 取消setTimeout设置% C3 K, C  n1 B0 ]
clearTimeout(t)' `" {* Z6 k5 \8 U7 A
</code></pre>
2 p' v6 ~6 [: Z. b<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>& G8 |2 {# B7 V
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>7 |! J7 @0 X  h4 q9 a! @
<pre><code class="language-javascript">每三秒弹出 "hello" :
9 F4 Q8 a; f4 n7 JsetInterval(function(){alert("Hello")},3000);
. N, W; _) T$ A$ K, f- R</code></pre>
! @1 j/ h2 U8 j+ U+ S/ w  I<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>6 q0 a% }2 V1 B2 b& ]
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);: n2 S$ ?! _, t8 d% I
//取消:% n+ `2 F! v$ o* ]4 \- v; x
clearInterval(t)$ B# w/ g! R7 }* S
</code></pre>8 I2 Z+ Z8 A' Y- a1 B
/ b& P4 N& U* ^$ j
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-7 07:13 , Processed in 0.077808 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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