飞雪团队

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

前端之JavaScript

[复制链接]

8058

主题

8146

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

& ]% W1 Q* P/ p6 [5 T5 z$ \<h1 id="前端之javascript">前端之JavaScript</h1>4 \5 g* |/ k& I3 B. I- E: w
<p></p><p></p>9 F* f4 f6 y5 S6 T; t4 i
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>5 a7 x$ J' w0 ?. ~5 q
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>% K$ N; K, ?9 e- O
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
5 |: h8 ^" H6 i它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
( ~( c" k9 p9 _1 q2 ?* d; n! H它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
( E7 d* }0 T8 d8 Y0 O, ~" C; [<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
3 [9 {+ Q3 u" Z& b1 B3 w<h3 id="21-注释">2.1 注释</h3>+ |7 O( e  M& N+ ^
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>( w4 I0 @" G4 t  g
<pre><code class="language-javascript">// 这是单行注释. G5 j; m5 _) n7 }7 o
% ~4 M. x# c; Z3 Y/ v0 r
/*
5 ?, e: `& B  J' X: |8 E) i这是多行注释的第一行,
, T3 u- O0 z: T" C; m! T这是第二行。: y# m% a' r" ]4 |
*/9 @, N/ i: _1 s% C! o. |7 N
</code></pre>2 j9 ~% {3 A, ^/ C7 k
<h3 id="22-变量和常量">2.2 变量和常量</h3>
6 `$ L5 F# o, [3 @<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
, X! N& k  ]" Y& L3 S7 D& j<ul>; s" [! x. ^3 F  t: W
<li>变量必须以字母开头</li>
0 n  U( i" x% V<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
1 ~3 k% t- U! Q! e<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
7 m8 s. B! \3 J7 X4 b</ul>
9 D2 e6 M! z, |- s8 g" x<p><code>var</code>定义的都为全局变量</p>9 T1 |$ m; d% ^! f4 I4 q; t
<p><code>let</code>可以声明局部变量</p>% w6 _* F( ]2 O  H7 O
<p><strong>声明变量:</strong></p>9 D, K6 Z2 N2 M
<pre><code class="language-javascript">// 定义单个变量8 k4 N) e  K$ Q
&gt; var name8 B, i+ e8 _) c$ I
&gt; name = 'Hans'
4 F# D) y1 @$ E& V//定义并赋值4 A9 D2 ^0 n. R; i7 V# v( ?
&gt; var name = 'Hans'
4 E6 f. q) M4 ]- P0 F) Y&gt; name4 g. H( b: ?7 Q& t$ o" |0 @* P
'Hans', k; F  B# I; I2 @

, m; D: Y3 t6 M) X// 定义多个变量& [+ q4 a0 u. i- N% x2 X
&gt; var name = "Hans", age = 18
, @' l3 J- U1 Y7 N; `7 c- O+ `&gt; name+ y6 S) N  t2 o& h8 d3 ~
'Hans'
& F" o* {0 K- Y+ [  z' M&gt; age
( Y9 m: Q+ K: J6 j18
& j2 t- g$ U- S: I, F$ o! R; y
& }0 U$ K) z8 s0 I" f6 M3 q//多行使用反引号`` 类型python中的三引号
6 U* i& n( f  U# p9 z9 d5 }2 z&gt; var text = `A young idler,
6 [' N: M: a6 F  f8 f$ jan old beggar`
$ ^/ I  C" F7 q! C&gt; text
' K# [$ {5 P5 p/ f'A young idler,\nan old beggar'
+ i6 G4 P: }- ^# s1 u% t- s</code></pre>, x4 ]1 {+ I0 a, W% H+ k: i! }1 M' E& f
<p><strong>声明常量:</strong></p>  y1 F4 c! k, c8 f
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
5 _$ f% ?) w, n) R2 Z7 G9 A0 I<pre><code class="language-javascript">&gt; const pi = 3.14& d, Q, M8 U" o2 J
&gt; pi4 L  N& N0 n+ _* C4 @
3.14: c6 O2 @- e  k2 t5 U, p* j
&gt;  pi = 3.01
6 R: E+ }0 @$ o: F0 SUncaught TypeError: Assignment to constant variable.) O6 C3 A2 z- _  b4 c
    at &lt;anonymous&gt;:1:41 e$ K  G+ o( a1 W4 a) c

' i4 z& E( W4 |. Q! l% Z# \% |</code></pre>
3 Q( B4 v1 W, @$ @7 F; s  H<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
3 B0 u2 H# C" f9 ]<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>2 J1 O  T3 N6 A) g6 F) K
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>9 O4 F$ r* v0 T( K5 d7 b
<h4 id="231-number类型">2.3.1 Number类型</h4>
! ^: f* _7 e* C9 O<pre><code class="language-javascript">&gt; var a = 55 w) W9 T3 n; e# m' Y; I8 n& I- c
&gt; typeof a   //查看变量的类型  
3 |2 m) J- l8 f  @( t6 q/ b6 Qnumber
- {2 a  G/ _) k' n7 h5 l
( H' p0 z, ]0 a; r&gt; var b = 1.35 y7 Q# j/ l5 N+ x. a+ q
&gt; typeof b
8 w! z9 f# @0 I9 i' M& a1 o& V3 Snumber4 L  j$ L* o9 s0 F& }

# M& F1 I+ H7 i0 a( W% p+ f// 不管整型还是浮点型打开出来的结果都是number类型
9 g' L2 R7 u+ ]) Q+ ^* u& w# P
* ?8 k, x$ r; y2 S# E0 x) l0 e1 D/*- D; y; c  _- b! U+ P6 P
NaN:Not A Number" P$ a- c9 l" S% p* T
NaN属于数值类型 表示的意思是 不是一个数字! }5 w& I" f5 ^1 _# O5 }: m7 f/ u
*/
5 G$ U/ r' P/ C; Z# Q$ `$ Z- X+ x! d
parseInt('2345')  // 转整型
6 H$ C; a* Z* Z. ]2 O; B1 a3 P2345/ I2 k- S$ c8 x! d. L
parseInt('2345.5')
) l1 L" [9 c5 y9 B6 Y3 j2345( l  c+ n  t4 N1 G4 d
parseFloat('2345.5') // 转浮点型
# F9 T0 j+ K5 V  L2345.5
$ Q* o4 h+ _' G5 p* A5 d$ Y7 |parseFloat('ABC'), n/ ^7 i& G# r/ X
NaN/ U9 G7 J( ?1 m; ~* F
parseInt('abc')& o/ J$ F6 _; a" X+ Z: i
NaN$ j, ?# f+ v+ e5 g* V9 O
</code></pre>
! @2 q6 t- B% C* Y3 I; p1 Y% C<h4 id="232-string类型">2.3.2 String类型</h4>& O8 s" m' o! i& e5 b: E
<pre><code class="language-javascript">&gt; var name = 'Hans'
# \8 O/ H3 }' W&gt; typeof name
6 A* e3 j& M+ _- F0 @; N'string'
! C9 G/ A- R6 a/ \
; b% N9 m" y  Q* P8 W, M) x( n//常用方法* Y; o. D* u+ F. S4 P
// 变量值长度
. h0 G8 S; u3 [' X&gt; name.length
) X1 }& k' X" Q# H4
, L# Y7 O4 K8 b// trim() 移除空白- E% \2 K8 m- }* r
&gt; var a = '    ABC    '! |2 g8 G2 ^4 {. Z: m$ u
&gt; a
! Y$ c, @9 N, t( l* S% Q4 g& _'    ABC    '/ Q# B" J( x( s
&gt; a.trim()
8 W& Q7 B  F) }, n& H5 e6 P( r& J'ABC'; W. A7 E2 J- `7 E6 p
//移除左边的空白
+ b, l" P1 F/ _5 e&gt; a.trimLeft()
3 |5 j' {) W7 _% l'ABC    '1 V! b9 n  p+ p  u
//移除右边的空白! r( K: h* e9 ]! T  d
&gt; a.trimRight()- I' I6 T; ?% d; c
'    ABC'
2 ~; \# u3 @- B5 F, B; |! P
+ d$ B6 k, R! S! L5 T0 S9 z//返回第n个字符,从0开始
) S: k2 ^& d7 x( {0 O2 j&gt; name
$ @) Y! f, O/ o6 w" P'Hans'
  U" X7 r" V4 K0 e) e&gt; name.charAt(3)8 g9 H) z7 W7 _1 t* L! |/ h7 @
's'
2 l+ t$ o5 L8 n) h! h2 R&gt; name.charAt()
8 {6 y) I* K6 ?'H'9 `8 V2 r, ~/ s0 r: G. t
&gt; name.charAt(1)
$ ~+ x, W2 o, H: j2 m'a'0 e- N5 a! W6 f

( J- s/ B9 Z- D; I' W// 在javascript中推荐使用加号(+)拼接6 J! t* D: k, b- ~, ]4 |
&gt; name
( s3 E9 w8 D! w* T! ?' I'Hans'9 u( q8 R, }% O% r9 S: J0 c
&gt; a) q7 T$ m2 o9 t2 F7 s
'    ABC    '8 m, G: W7 I; _& S: i2 p8 i
&gt; name + a
1 O: W! i+ R" s( |$ t' @9 C'Hans    ABC    '  L" R# t) X, f5 b# e
// 使用concat拼接5 n5 w/ p- q# K  j6 ~% z
&gt; name.concat(a)
0 \3 V# p9 v0 x2 Q'Hans    ABC    '
. V& E% x" H- A3 f: _  m0 j  O1 _- b4 \
//indexOf(substring, start)子序列位置& m$ \) V9 x' q8 p8 y2 e9 g

' W  Y: _" p% U$ X! D! h/ N: Y&gt; text; [. S" Y# r8 C' O/ `7 S+ O5 j  w5 [
'A young idler,\nan old beggar'
4 a! @' O- _- O3 y4 T  I&gt; text.indexOf('young',0)9 C" o% g) U4 W8 C: K- ~( k8 u
2  g, {0 U, B3 R

( [- w: c5 M: u' Q) S6 W//.substring(from, to)        根据索引获取子序列5 t/ `& }7 L! _- D. _- `
&gt; text.substring(0,)
& N+ z$ h" s7 ]% i5 _3 o  `& S'A young idler,\nan old beggar'
+ |+ N- X9 g# ]6 C( A9 t&gt; text.substring(0,10)( f6 b; J+ f2 j$ t
'A young id'
6 N( ^0 C; E6 x1 ~0 W: k, M  m  j' T. p
// .slice(start, end)        切片, 从0开始顾头不顾尾
. U+ I5 ~8 A3 \8 `0 ~1 g/ ^&gt; name.slice(0,3)) _& z& ^3 r- w
'Han'
7 M% Z/ i# p' B3 Z3 k2 Q/ L$ B4 |1 H; N& W4 }( X0 v; W; d5 |
// 转小写6 H1 |) H' S- ]$ }
&gt; name
9 g6 z" C8 n0 o3 D2 H'Hans'5 H7 v, \" G1 ^- b4 U
&gt; name.toLowerCase()& ^0 N9 M, x& e! \
'hans'0 _+ m# _' o5 w
// 转大写
* m* v/ Z6 n+ f2 K, L& ^$ p# n&gt; name.toUpperCase()
3 G2 ^/ m- ^5 j. X1 j& `  N$ M'HANS'! Q/ V& C0 j- U6 ?+ B$ n& Y& G
& l7 s1 \) b4 A/ F/ D
// 分隔, h9 k# R# x; e# P% P' @
&gt; name; U" p& D4 ?9 U8 j; B
'Hans'/ U. {* ?/ o' {  D# L
&gt; name.split('a')
5 }' ?% a7 Z9 ~(2)&nbsp;['H', 'ns']) A4 w. v) j8 m  z& H- a
</code></pre>
9 F+ `1 G0 r5 y8 |5 \& F: R<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>, [! O/ U: C& S  q3 M& v
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>* z; W! G; s3 i0 V+ s& L9 x
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
) N& m+ f" i; n# H<p><strong>null和undefined</strong></p>2 w0 n# q2 A; h% m. t6 V7 n0 `7 m
<ul>
9 I  t( a; N0 v1 R1 I<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
8 q- M8 L% E% H<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>$ V7 U) Z# g! A) r: r  U! W
</ul>
- h8 F! {0 G% ^4 |<h4 id="234-array数组">2.3.4 Array数组</h4>6 ?+ F5 A( {7 R" i8 q$ K
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
7 a& D. @7 f/ r4 O+ V/ l7 r) `<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] ; p7 p3 z4 g( U. k6 ]1 A1 T
&gt; array1
  K- z, s& }+ K/ S) \8 H(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  I. a0 f% w' p6 q( E) h0 _
&gt; console.log(array1[2])  //console.log打印类似python中的print. R7 m/ j& i9 v( V+ d! z0 ]4 V* Z9 ?
3* D) N- {' j# i4 O+ \: w9 O% @1 K. ^8 h
// length元素个数
! n& l1 d: E! u&gt; array1.length
8 ?; f- ?( ^0 V7 X+ t6" _* r, d* R$ V! ]- K( f% k9 y
// 在尾部增加元素,类型append0 z, e/ r8 u, [% n+ f5 F* Y
&gt; array1.push('D')
- b) u( ^/ K2 v$ p' U$ }7: w7 ~- R* I) {% z: ]
&gt; array1
9 s: |6 ~( T: u% F: S(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']: P3 {, D( l9 Y0 s
// 在头部增加元素- `  t8 {& i$ D+ Q: [7 y7 y
&gt; array1.unshift(0)
: D+ f% @& l0 {4 E: _8
. x* H3 H+ U! m/ Z&gt; array1
; f  {( J0 m0 S(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
) ?' C, y  I. |% \5 T" Q
% B* |* g' ~$ d/ D' _//取最后一个元素6 `0 o9 q+ u8 ^- Q$ s0 G
&gt; array1.pop()
& p0 E) C" m+ O# B0 h9 D4 e  W7 E- C7 W'D'
* I- w+ H) O- K. f$ {&gt; array1
9 i7 Y. B) n! p(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']! d; F$ Y  w1 O% Q7 R6 T1 y
//取头部元素% l8 T* O/ C& E/ h* c
&gt; array1.shift()
( L5 y' Y/ O5 m% ?0
; c; r5 s0 g2 w  f; ^1 R&gt; array1, N. k! l9 x* l! M
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ z* L4 l6 Y  f* L2 d1 {3 n
2 y7 S7 x4 x! x6 r6 h//切片, 从0开始顾头不顾尾
% s6 I2 l2 H7 V/ ~8 I! S9 f&gt; array1.slice(3,6)+ b; o( b6 p' ?% N5 C- M: h
(3)&nbsp;['a', 'b', 'c']
! _- V( \& ~# V$ T% U: R% n$ }// 反转
) |5 D! p4 {  P( {9 M&gt; array1.reverse()
( }8 w+ [& m4 K9 N5 i(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 p9 O  N0 k2 P! D3 _8 D
// 将数组元素连接成字符串
# s4 t0 X( y; T2 r& x+ s&gt; array1.join() // 什么不都写默认使用逗号分隔
  ?( k( u9 \; k! h# _+ ]/ `; U'c,b,a,3,2,1'
  ]$ j% f0 N1 v&gt; array1.join(''). |+ ~8 q+ U4 |
'cba321'
; x4 B  x8 G) Y&gt; array1.join('|')' o2 o- m6 w8 y7 e% W
'c|b|a|3|2|1'
) h3 _: f, X- C" }) ?9 X5 ^6 O# h
// 连接数组0 H' n' o& [5 N& D7 O* f& Z, \
&gt; var array2 = ['A','B','C']9 X3 R6 }1 s. }  e' ]9 w
&gt; array1.concat(array2)+ G0 e; j5 Y( W( h& G5 ^& d
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
, x! ~! {+ n2 }7 `5 X! T
% A7 m/ m# Z" |# h: b$ E4 G6 q. G2 C// 排序3 g: V6 Z& V4 M. E! `! n" Y4 O2 U
&gt; array1.sort()
8 s0 V7 N% S  s" w+ G" I(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 d3 q5 _5 n" g* i2 o! ?) F

2 M  J, C% w. @% O// 删除元素,并可以向数据组中添加新元素(可选)& u# f6 N/ S7 R" \: J3 m5 d! x
&gt; array1.splice(3,3)  // 删除元素
& x2 `- k% {/ k(3)&nbsp;['a', 'b', 'c']
" A' w! j1 r$ u" y2 L* \+ m&gt; array1
' K' G+ ^" G" O: o5 o( a! ?(3)&nbsp;[1, 2, 3]: D3 x* {+ W. F2 |( X# W: X- K3 v
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
* |  N5 ?' v1 X9 }  p4 |) L7 `[]
+ P; ~( t  Y  O, K! F. ?$ _5 H  S&gt; array17 u1 [2 \. r. ^" I9 |' w0 Y
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
, m) N9 w; W  @& r% N  X8 m; N/ W' f( a! s8 v
/*
2 ^! L( w5 ]9 R6 Csplice(index,howmany,item1,.....,itemX)
5 h3 D2 I6 ?! H, W, G. `index:必需,必须是数字。规定从何处添加/删除元素。
. B( R" r: y3 [+ m) O3 X1 phowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
- f! B0 T& N$ z( citem1, ..., itemX        可选。要添加到数组的新元素) Y. F7 t( Q: E6 {$ U/ o
*/) x* k& M* [* v$ t7 {

+ @' C* I$ K$ X/ S+ U// forEach()        将数组的每个元素传递给回调函数
: T8 c# U9 I' B- Y' O0 W&gt; array1.forEach(function test(n){console.log(n)})
5 l& I: D- s8 k8 b 1* U( `8 u4 J0 f$ M7 A; B2 l
2
: J+ }5 m+ y2 O( F  F6 F4 s4 ` 3& b& w$ ?; G9 l. g8 a
A
+ O5 D$ x/ N5 F' v B
0 p) h4 x$ c6 P6 E' R; |0 K% T C  g( M( A) g7 {
// 返回一个数组元素调用函数处理后的值的新数组/ ^6 x; X" ^  I$ ]$ e
&gt; array1.map(function(value){return value +1})
0 u: f7 X! U* m(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']9 ^$ M- |/ |$ o! O8 ~; s3 ]
</code></pre>' t% o8 G" s/ f/ |  |6 U: W
<h3 id="24-运算符">2.4 运算符</h3>3 k' e* v3 r6 X" X: E
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>: C, a, Q" a% U  q. v
<p><code>+ - * / % ++ --</code></p>- e' s1 i7 k0 B2 B8 O) I
<pre><code class="language-javascript">&gt; var a = 6
) ?7 W) n* G, ?5 Z2 v&gt; var b = 3
8 ^- o7 l9 r  ~$ s7 G// 加
: [! f5 A9 z6 q8 n5 Q6 Q/ R&gt; a + b( }+ t, _: ^. y  u4 @: r
9* d4 S7 x# O  A  o
// 减% h! N1 C& m/ P: {* g- f! A
&gt; a - b/ J) v( j0 }$ e* R  r; s; k
3
5 `3 O( K3 p7 ?* p) b// 乘
" {4 c& T" S5 Y; U&gt; a * b
+ P1 W) J; H" ]. L18# g- w' m- J6 h) E7 M9 C
// 除
3 U9 |$ ]6 c3 N&gt; a / b
0 Y0 o4 T5 `1 z5 s. ?+ A2, v/ \8 O2 t+ {+ d" n5 v
// 取模(取余). |  {& G1 g/ L5 y4 S9 g
&gt; a % b, ?# J, S2 E! l5 u* U9 G: B8 i
0
" O  `7 g' ^# u5 W& E// 自增1(先赋值再增1)
5 e8 O1 E$ ^0 C2 ?' b7 j&gt; a++- v9 W3 w6 u( d4 ?+ i" P0 z
60 a1 ?7 Z0 @2 f! Y' l4 M  E+ k
&gt; a. V3 {! `! y3 w( `- t2 [
70 c- B: ^  S% D
// 自减1(先赋值再减1)
" S# v) D1 c3 ?) t5 \8 F# _6 s&gt; a--/ J1 b! \4 b' w( X
7
! z$ Q; e+ p4 T7 H" l4 i&gt; a1 j4 N$ |6 |' C8 i! S  i7 c
6
0 E3 w  ^9 ^8 X7 |( x0 @// 自增1(先增1再赋值)
& U. U6 ~1 r! e' D2 S0 B& c/ m0 K&gt; ++a
7 |5 H2 s( [# ^3 c+ ?5 C0 B" O7
- B& l" @8 \( w7 U# `" S( W- D// 自减1(先减1再赋值)
0 A2 B8 ^1 k% ~3 T% V# w&gt; --a( U/ M# j9 Z- W
6
6 H) v0 S* C6 f( M& ?+ p&gt; a
2 Q# g1 c/ v5 m- N4 o# M60 e; ]. y+ q, n
3 X+ L- X: r8 E# a
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理1 p. s+ ]( ?0 V4 N1 c( b
</code></pre>
# P0 x& t3 m3 ~+ W- ~<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  P' \% g5 y. Z( a- O+ {% [
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>& `1 x" j9 N6 p7 w# Z+ S
<pre><code class="language-javascript">// 大于6 N9 q# T6 a/ d# a
&gt; a &gt; b
6 I2 s8 \3 n! l3 e1 w1 dtrue
7 d2 _9 |5 w0 N& \- n// 大于等于
  i) a* [' {( J& {% v&gt; a &gt;= b1 \# P, _2 L7 K0 X3 U. f( x/ M2 [( H. d
true1 J, p+ J' A% g: w
// 小于3 C% M- H. n/ l9 ]  h
&gt; a &lt; b
( P3 ]4 R- V4 [- [false
) h8 D: R4 c1 \# a* M6 M// 小于等于5 e+ i/ [- V2 ~/ |7 P
&gt; a &lt;= b9 Q8 ]; l# R" V! O! K
false
$ U2 w1 L" N1 x0 z1 w5 m2 \( u( V// 弱不等于: ?0 X2 f& B$ m8 U, d" R
&gt; a != b
2 Q  s6 ~" Y! h* D( d6 k* j) m! utrue( h8 b% s: m; s$ w2 Z: U1 C
// 弱等于# @. J. B, f2 u9 h- e6 C0 d) {. h
&gt; 1 == '1'
% E- P2 r9 c' ~- ?: R% \7 _4 Atrue
' o3 `% B7 S+ k$ U( ^7 x% W2 B// 强等于
2 U( D) i9 r' m&gt; 1 === '1'
  T1 Z) M- o* k, efalse" z$ x  u5 o3 o  c. Y* G' }
// 强不等于
, [9 g' S' V  C+ a' z: x&gt; 1 !== '1'1 o3 K" p: y' j' a  v: w% N' v
true# l$ r5 @! H- ]% H" C

1 [; x" e, X8 H3 R3 t% o4 ?* ~/*
- I0 u- A/ L# wJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误- l; @6 X4 r$ O, W4 g$ X
*/
/ {2 x4 ^1 J, W% }4 \</code></pre>
. x8 ~. x( B- P<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>. o0 j! _4 H) V; K/ u' y0 K  C
<p><code>&amp;&amp; || !</code></p>
: F+ m$ x4 S) K<pre><code class="language-javascript">&amp;&amp; 与
  |! U% i/ h+ G( e: I5 i|| or 0 f4 x- m9 l. u/ n6 p3 N
! 非, c) x" s4 J7 B0 Y8 h+ i1 D: E8 D
</code></pre>& V5 Y" |+ T6 {) ~' l, e! g/ J
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 D( z+ ^+ R; k- Q, y
<p><code>= += -= *= /=</code></p>
" U* ]9 Z. s  R7 T<pre><code class="language-javascript">// 赋值
$ u, K5 q' ]6 j- w* Y$ \6 A$ `&gt; var x = 39 u, M4 E" _5 L0 y( q$ G( Q- e
// 加等于+ t0 X; k- q1 K1 J6 h+ e  L
&gt; x += 2
2 `" }& v" e2 P6 @- q0 S5
, X" @$ d+ Z/ H5 a$ M// 减等于
% `* q. b2 T) D4 e' P&gt; x -= 11 u* `# m6 d& @* J
4
* z: x+ X& e  r: [// 乘等于* Q6 L% w" `$ z$ ~  j. |8 ]
&gt; x *= 2' E; ~+ O8 K( e2 i) ^3 M
8' {6 [% d$ Q$ s; J+ v# P* l
// 除等于
- R0 ~( t$ Q/ Q0 X. _% \&gt; x /= 21 c! X$ }. Q' K2 k* W
4
3 E, D1 {3 r3 s* K7 V, ^</code></pre>
, `( ^: s, F0 |5 c' h<h3 id="25-流程控制">2.5 流程控制</h3>) g. Y: }3 ]' _0 k  G! C! }
<h4 id="251-if">2.5.1 if</h4>) R! ~) p- d8 U$ N$ p( v& o, W
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
$ [( Q. G- |) \% ^& ^2 r6 b! C% @. ]8 j% i- n/ c
&gt; var x = 3
' C! X+ K, D, z, X& j&gt; if (x &gt; 2){console.log("OK")}" s. y! G" X8 o. |
OK" P& m# J# M$ C) E. X+ ~

" n5 ^. `' q( s2, if(条件){条件成立执行代码}
( \* T% ?7 D/ r- b        else{条件不成立执行代码}; `1 m8 P  j) I% {3 Y( G6 ^" e
6 a6 Q9 E0 v  G: C6 {
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
. T1 z  {  N$ C( h' o! o$ W'NO'
$ v, r8 ^- \* y6 y( @! B" E) a" ^- |
9 z  U' v% t  r, Y$ ]3, if(条件1){条件1成立执行代码} ; C5 \! v' ^  Y9 A/ h# c
        else if(条件2){条件2成立执行代码}
7 D! \  J7 P* q) j1 y    else{上面条件都不成立执行代码}' D9 J$ r2 c1 O: U: p8 g
2 g, f) z( K0 `7 p6 m' }& R
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}* J- W" V4 u: r
Ha$ [" ]- T5 `& Q9 |8 U7 k
</code></pre>
5 d) e6 l4 N+ {9 j+ g( w- {<h4 id="252-switch">2.5.2 switch</h4>
; j8 Y- ^! F6 W9 v5 u<pre><code class="language-javascript">var day = new Date().getDay();) K: R% G& G  J6 }( f; c# B
switch (day) {
' M3 s8 y) X$ \, d; t6 T: I  case 0:
2 e9 C8 y2 {& x! ]% D! g  console.log("Sunday");' C$ _8 a! T; i0 i$ e0 O* t# t
  break;
9 f+ w" l7 x$ Z" b3 _  case 1:/ D- j4 @+ T, S8 H
  console.log("Monday");! Y9 y9 J7 {, n, u  X6 k2 s5 U0 P3 e
  break;9 Y5 `2 I0 m; N6 U
default:
, y: P4 l$ F" v$ V  console.log("不在范围")
1 t* [, w9 B% @+ k}/ f  d& m' O8 ^# ]2 Q% w, o
不在范围0 ?0 U4 ^8 ?6 D( U% f; W
</code></pre>
: W/ b& C; P6 `- g0 h' i' O3 q+ g<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
" ^# N) x) g3 n2 ]<h4 id="253-for">2.5.3 for</h4>7 {5 G. q0 l& J2 p8 Y
<pre><code class="language-python">// for 循环
( R3 n5 l5 C6 P4 v/ i        for(起始值;循环条件;每次循环后执行的操作){
2 ~$ ~) h" Y5 v3 W% C! C        for循环体代码
9 v$ ]! f$ z3 J( P' X6 B    }
' F4 g8 T( S6 E. L( A% b: p$ q
' n/ }! y' |' R* zfor (var i = 0; i&lt;10; i++){0 b7 s' }, d2 U7 i& Z
    console.log(i)7 C1 ^0 F. Y1 |8 L6 g
}
- P5 n6 c% M1 ~9 Q; E        0& W& q1 L: S" O& Y* }* V4 F6 k
        1
" @- \# j, x. y9 D* t4 y! B        20 [! Y, |0 \* G# U6 |
        3
% U7 `" l- A- P" h5 V9 s9 ~; ?* a' O        4$ {  E+ j! v  Y+ H3 R' p" x6 G
        5
) \8 f2 A9 x* Y        6' D1 i& a9 [: }9 H' E
        77 ~* S4 x8 Y  e5 v, A* F: k9 S
        8
- x% M1 e& i, r        9
" j, t; Q* z9 q7 _& Y  N# s7 E</code></pre>. t8 R% y) L! i4 L' p. H3 @' u
<h4 id="254-while">2.5.4 while</h4>
4 Q" P$ Q2 F: ?2 h9 K<pre><code class="language-javascript">// while 循环
1 v+ a3 M4 O0 |) g2 h' Z# B        while(循环条件){2 w3 ^& @( p! G) ^" ~  a
        循环体代码
/ B' f) f% W1 N) O" O# ^6 `+ |1 I, `    }
. l& i1 L6 x4 J: C- G) t
( Z) y5 L. `4 H9 \; d3 z&gt; var i = 0# }, b9 C( d4 i7 p7 x; k3 S" Y
&gt; while(i&lt;10){
9 a$ B1 v, n( ^! W" \    console.log(i)" z' F( |; n9 O3 u. _
    i++
! h# t* j+ @9 r. V! g9 e}, _) h; Y) Q& }" m2 R
00 D' i1 m' r9 S4 _8 \5 w- n, e4 }4 p
1
# y6 u8 c5 p7 v! L 2: ?  ^$ X8 K$ L
3
8 s! Y1 \" h+ [4 r1 g% |5 w 4
7 l' f  U* _: \3 b4 {" |( t 5
" \4 ^* q! x+ T. S# Y 6
9 U# s9 O  V/ v! P' u 7
* K) S+ }9 R  `2 V* q 8  {; x" Y  A* h! _
94 U, k6 {; i" _2 u9 w) R: {7 ], F
</code></pre>' d1 Q3 m/ d4 m4 o
<h4 id="255-break和continue">2.5.5 break和continue</h4>
; C1 D6 t- v" `- H1 Z+ g<pre><code class="language-javascript">// break8 j3 R# d* T0 G4 w( ?
for (var i = 0; i&lt;10; i++){% v$ M) E. K4 X: R0 [- b, n
    if (i == 5){break}
9 S/ j/ a7 d3 J, D. L; @% x/ l: x    console.log(i)) }& B5 F( q  `) n$ t% a0 T- N4 u
}
/ r) v! s1 ]3 M7 M: n 0
1 R  d9 v  i3 z4 a 1
" [% q: r$ }# u6 L: Q: v: b7 ^ 2
6 [7 m: a% A8 \7 e 3: F/ P) ~6 R- \8 \2 }! R- M: b
4
& `1 j5 j3 r9 u9 y5 U# \0 e! a6 `// continue
: u1 ~# p" n: Hfor (var i = 0; i&lt;10; i++){/ j6 K% A5 \/ t) G. l: X( L) M2 [
    if (i == 5){continue}
. c& f5 O3 [9 m! m9 x4 ^9 h" ~    console.log(i), D& _+ f+ o/ h5 F
}
' k' a1 t2 B$ f& u5 C$ f, d6 q& S 0
6 G' ~( k- U5 W/ D7 u9 L 1
0 U% l6 @+ b9 ] 2
* o: B) x( m2 }& t" l& O2 n 31 C/ X$ [' q. u" d
40 S4 J3 t$ [# `; e2 F
64 h3 \- \- G, E4 q% c$ ?) k5 h
7
; X' J8 k2 r$ v1 p 8
: e* ]! Y/ }9 `/ I) S: C 9
! K& Q& q8 E+ T# L8 S- g
" x8 B8 x' N- A% ~4 |5 f</code></pre>  H+ T( f- r$ a% I0 Q7 ^
<h3 id="26-三元运算">2.6 三元运算</h3>
. x% y8 E$ X$ ^" C<pre><code class="language-javascript">&gt; a9 F& |* S) ~( O# I, n2 n
6
5 d: d% m6 P) w; z8 T&gt; b
3 j  B3 M+ \+ z. z$ O7 E0 m; ~3" M6 J% r' d' u! W4 y, o
" o' T7 {% E' E5 q# L$ G1 N4 Y
//条件成立c为a的值,不成立c为b的值# t7 n" Z; |8 \
&gt; var c = a &gt; b ? a : b
: a7 \% ~! x+ ]) j&gt; c
3 ?; c! T5 n) N6 W2 B4 H6 ~6& Y) r. X% n' b0 x( h( \

+ {- ~' {, i2 A/ Y5 I// 三元运算可以嵌套3 {' [3 J( u" r! e0 C  l
</code></pre>- ~  B% L7 I6 K/ z  m& o2 j9 k  z
<h3 id="27-函数">2.7 函数</h3>
: s+ Q6 Y/ g6 x; [9 b<pre><code class="language-javascript">1. 普通函数
9 K  e" ?9 N6 V% v&gt; function foo1(){
5 I6 p, E0 i& t    console.log("Hi")5 N# S& _9 p  r) C% w8 U5 `
}  L# b! P: x, h/ |
  l+ j6 v. W8 g7 x& [! `
&gt; foo1()8 q& u; C% f" J2 G9 z* j) t
        Hi
2 v* A( s! I- X5 o9 \% y2. 带参数函数0 Z9 o/ k, |# T. ?% e
&gt; function foo1(name){% x  Q( i" \4 V0 I
console.log("Hi",name)
0 H& b7 [) d& F, {; f$ ?2 G' W6 j}
5 g! X7 C+ g/ w" w. Z; V. L  u
& M8 Y2 Y/ \( S  {+ f" |. K% D&gt; foo1("Hans"); w: Y0 [2 }/ e! R
Hi Hans4 F/ S! P& U" P) Q$ ~
$ A/ ~! I3 x! i! }
&gt; var name = "Hello"
$ w' m4 y4 t4 |& O&gt; foo1(name)8 O. @& K0 s4 Y; e6 z! S8 k* O
Hi Hello
1 A" F7 L; A) c  c. C( P+ }& q6 ~; [. Q0 P) n9 S. T+ B
3. 带返回值函数) x5 h3 m; w, J" M, T1 j* b' H
&gt; function foo1(a,b){1 R4 M  j+ l: H( S. \9 _$ o8 \
        return a + b   
* F1 U4 G) X3 x, m" g}
1 o5 f5 J9 @4 B- }  ^&gt; foo1(1,2)8 d8 `# m: Q, j
30 Z& `( e4 p1 c
&gt; var a = foo1(10,20)  //接受函数返回值
$ M! j" i  q! O0 y, t&gt; a
. a9 t% H1 E8 i5 y8 @! [5 H30
% L# q$ Y2 p- }) t% ^( D6 E* t( c( `8 K# a) P* R  g
4. 匿名函数
! m: \' B5 e6 X" p&gt; var sum = function(a, b){# s" d# k# W  B: {+ Z
  return a + b;
3 \' z* K3 ]/ s( \}# X8 ?' x1 ^! |) L- }7 Q* r
&gt; sum(1,2)
! C( z# x/ h2 f4 o6 Y! S# Z' f8 p3" q; |9 ?% z% o; U* T) G% E+ l8 {8 \

, P9 x6 r- W7 W+ T# |// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
- {+ W1 D; K- ?/ o9 w0 Y+ S&gt; (function(a, b){7 ], p) Q+ t$ I" c4 x
  return a + b
- n9 J. d+ a" d+ N  E, N! v6 I})(10, 20)
" h- r1 ?7 L5 a/ ~2 i" i/ ^30% p) K: p* W6 v0 y- D& m" E  Y- @

2 Y2 c3 n* P0 F% {+ n5. 闭包函数5 }' t( Z8 a4 k3 Q- e/ w: m. ?
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
# V6 S! E$ ], A/ Q: c1 r3 T# ], [' evar city = "BJ"0 |$ }3 M0 ]/ H
function f(){0 ?  k3 o" \* ]& |7 u" @- w7 d8 y
    var city = "SH"
+ e  N6 U1 W- Y: w; u: S; C    function inner(){$ o* y* p7 {2 \" G2 r
        console.log(city)
: {% J; H, R3 e$ S& Z- u* F" q    }
! C# U9 s4 O; f+ {! c( B0 q    return inner
4 p* e% M2 z2 u# O4 P}' L7 R1 a3 V3 |7 W* z, L
var ret = f()6 S; q  _) j( ~- W) I  I
ret()
& F1 @2 _; f7 C% e7 ^$ {2 M执行结果:" ^, o: Z' J$ I( }) b; t/ K  X
SH
/ y' r- ]# v& C: I% J! }, o. f% p7 O. s
</code></pre>2 ~' R* l3 o2 g2 @
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>" w: I* I" d' c
<pre><code class="language-javascript">var f = v =&gt; v;
% `+ {8 l  |5 o1 n// 等同于
+ ^8 m8 ^' y4 e* z9 q9 r- |+ m) avar f = function(v){
( I0 P/ O8 k" o9 B' ?+ g( x" i  return v;
4 g% B0 g8 h2 U  `- m}
6 n& _6 k1 I4 T2 P* N' |5 y/ Q</code></pre>4 d! y) Z8 Z% n! R$ B
<p><code>arguments</code>参数 可以获取传入的所有数据</p>* w4 k- O! B  ]: k
<pre><code class="language-javascript">function foo1(a,b){8 g, X" j% ]) k9 [8 Z) C
    console.log(arguments.length)  //参数的个数
; q& L/ \+ V! V% b6 p    console.log(arguments[0]) // 第一个参数的值
6 m0 ]$ `( N5 {8 b) Y& {8 x% M  ]        return a + b   0 [" y. a) ]* N
}
1 [% ?, Y% B! r% r6 I0 v( afoo1(10,20)! b) Q' \: D9 n& Y( Q5 i( d
结果:0 g- i- m8 u) _9 E
2          //参数的个数 6 I, V7 a7 h# N/ C+ v
10        // 第一个参数的值
! N& A4 f1 t, N$ u; p9 n6 Z30        // 返回相加的结果
& j. ^' n: Z" P( u  H</code></pre>
3 T, c9 _5 _4 V* R1 ]: X<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>7 z; W0 m: i1 {6 C* B
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
7 i3 C3 P( g: P& I  k5 {8 A, ~<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>4 C- y9 B2 L! V; T; `9 ]7 s
<h4 id="281-date对象">2.8.1 Date对象</h4>9 o2 ~) K) ^+ K
<pre><code class="language-javascript">&gt; var data_test = new Date()* R; x* ]/ `7 v
&gt; data_test
  @! X/ ?# a, [! DFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)* c% Q. E& ~& r% D" V$ p
&gt; data_test.toLocaleString()
0 a6 q, A- e) [/ Y& I'2022/2/11 下午9:44:43'
1 f; B# ?4 W. _! N$ c5 s/ t: i* U0 J8 q; u6 R
&gt; data_test.toLocaleDateString()8 L( P* H0 G# y  r
'2022/2/11', H# H; Y9 i+ m( {0 }
6 q1 D% ?6 g$ R0 l& _9 O' _, O$ z
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
" i2 v/ j* I4 A6 z" w7 H&gt; data_test2.toLocaleString()
, I1 Z6 v- `3 m# S+ `! q'2022/2/11 上午9:44:43'
2 B- M! v' W0 {7 r
( y1 O! ~7 z; T$ d$ }// 获取当前几号
+ X% W1 w  K1 S+ m. I: `&gt; data_test.getDate()
+ P. P  x* a5 i11
* G2 u' g1 }( s3 h  f4 g; P// 获取星期几,数字表示& B' u% W% D4 b; I5 V
&gt; data_test.getDay()  
7 i/ F5 p7 ?. }+ A  I5
/ u+ {4 C$ r1 e// 获取月份(0-11)7 I& \/ a; w. U
&gt; data_test.getMonth()* T3 E& s+ F0 K+ U  `
13 @' z4 A' W7 `" ~; c; i
// 获取完整年份
% L3 J; V) g8 n) E* S$ H4 m&gt; data_test.getFullYear()* w: E: P; g' e2 Q; e+ Y
2022! H8 n$ ?6 L+ i& m# R4 h
// 获取时" C$ w/ y% z) s0 P  N$ i
&gt; data_test.getHours()
  r% ]  i* ~7 u" Y21
3 T: R/ D' u+ G6 z. ]" ?9 m// 获取分. C7 a! M2 B: m# U7 H. m* A+ |3 r, h
&gt; data_test.getMinutes()' ^  U9 M3 I1 W4 B3 @
44. T0 o$ X; U4 d: Y6 {, O9 e
// 获取秒. \; T6 _# ~  E6 ^6 v$ m
&gt; data_test.getSeconds()9 D& _) e7 E" S  ]. \1 e
43
: ~% q0 Q0 x" N. Q3 W// 获取毫秒# R' w+ M, h/ w6 m+ L) [+ M) u- Z, m
&gt; data_test.getMilliseconds()
, X/ g/ M  F3 f290
4 w3 Y1 x7 K9 l( s8 l9 m5 I// 获取时间戳
, o6 l- ]: u" \7 ?7 \# g&gt; data_test.getTime()1 @) E+ o+ C; r9 n' T( ~
16445870832906 u9 R. C& _! F  ]) D; T
</code></pre>: n" O9 L1 Z- u0 w2 u
<h4 id="282-json对象">2.8.2 Json对象</h4>, I9 ~) }+ W) r% U% i8 B5 L
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
, O3 s3 c# R  X" ^- e4 EJSON.parse()  // 反序列化,把JSON字符串转换成对象# r3 d+ `& ?5 Q5 G+ e2 w- ]' n4 g
& f! N+ _& Q$ Z3 s5 Z
// 序列化. w7 H4 J7 H, L, T6 }: Q
&gt; var jstojson = JSON.stringify(person) + w: B  n& i4 M5 Y. T- B* @
&gt; jstojson  
3 [6 M, b8 b2 l: P: u'{"Name":"Hans","Age":18}'
! |+ x- E' a* A! Q0 {) E* |8 Q- ^# |9 }4 a" I
// 反序列化
% h8 {6 X* T) _1 I5 Y&gt; var x = JSON.parse(jstojson)
1 ?/ R$ q' L" b. [* U% b&gt; x' G$ v# X/ i# Y2 E3 Y
{Name: 'Hans', Age: 18}) u" c% Q6 L( {- N0 [/ {# b- I
&gt; x.Age
/ [# V' p' C- x& i! f  Z18
- G* I: Y4 f& _1 x: T</code></pre>0 j4 A5 a- d( x8 R$ O" y
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>2 A; h/ p- g* V; N; N& n4 I
<p>正则</p>+ E) L$ ^+ C) ]9 D& ]
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
$ m! \4 L  N4 Z$ _2 k9 P&gt; reg1
5 @$ t" u2 m! b/^[a-zA-Z][a-zA-Z0-9]{4,7}/% d5 p$ R/ {; q7 u  X
&gt; reg1.test("Hans666")  }. s/ n6 z! [- F! O  ~
true
* H' ], b# V- X* e9 e$ L( y: V$ o& V$ Q
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/( b- W  _# y1 i2 p
&gt; reg2! ]* a9 {, N5 F( x, E' q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
( f0 ~9 R, }! c' R; w1 D&gt; reg2.test('Hasdfa'); ~% o9 g) M. n4 w. l" D1 j5 @$ n
true
& e+ M/ Y; G5 i& }2 c- f+ C
* Z/ M# ~& X* u# I9 P: N, G8 P全局匹配:& ]8 f  D) ^7 q( ], y
&gt; name2 x; o, h! [% h5 r9 B* A. H0 {% m
'Hello'
, u9 |. L0 {1 {8 j& o&gt; name.match(/l/)" P* X1 M  r0 l7 c+ z* N
['l', index: 2, input: 'Hello', groups: undefined]
. A# q9 ]+ p( C' o0 Y
0 R' `- Y2 [% W% R! z% l7 h. V&gt; name.match(/l/g)
& l$ {) K1 c/ u. ]# @0 V- ^7 `(2)&nbsp;['l', 'l']! K% Y/ R5 p5 B  r. D* S
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
+ C: {( {* }: [5 U" H8 u5 k& e: U( U+ ?9 k
全局匹配注意事项:
$ G" P2 T! T6 q&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
" m2 k" S' v& n' z; _! Q&gt; reg2.test('Hasdfa')
  S9 m; m9 \) W- E! Ytrue5 T/ h, r) r' c) M( S
&gt;reg2.lastIndex;4 w9 j3 t5 |( s+ q6 R( X8 t
6* t: h/ M! N! Y2 B+ Q, t
&gt; reg2.test('Hasdfa')& i- p$ A! I- d3 [  H  w
false
( k( j$ c) K/ s&gt; reg2.lastIndex;: V8 u5 f& S- f
0
5 P5 V' g! [& n+ u5 A8 F( V( R&gt; reg2.test('Hasdfa')8 g' V7 H5 J  o4 A8 {6 e8 D# y- [" x
true
  W+ ]4 S8 [: I7 i2 j* N6 R/ v; q&gt; reg2.lastIndex;
$ r( N( `# n/ v* K6# b, x. M+ F) I4 g) r
&gt; reg2.test('Hasdfa')
- G0 b) ?" D6 b4 m0 O  v7 X/ v, ?false
+ Z% U0 Y7 @$ i&gt; reg2.lastIndex;
6 B3 [! v1 S5 O0
4 i6 ?1 T4 h  ^5 R// 全局匹配会有一个lastindex属性
* Y) t2 C; l+ p5 f1 N&gt; reg2.test(): L# g  I& d0 h. i5 F3 `+ H0 b
false
- h) d* r$ J7 g6 C&gt; reg2.test()0 z2 a3 a( l6 _" w' L  k% q1 D
true. C$ `7 v" u3 E/ }3 @
// 校验时不传参数默认传的是undefined$ t. J. ~" T  B/ n6 R. Q# }3 p
</code></pre>2 f6 P) @6 k/ X2 _( Q; T
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
' X8 O5 G. P  @% W5 E4 q<p>就相当于是<code>python</code>中的字典</p>/ V/ W- T6 L: Y' E+ v" z! ?  v
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}& w" L' o- R4 G, A1 Y
&gt; person
8 P  M3 L4 ^/ m) A& m0 {{Name: 'Hans', Age: 18}3 ^. Z5 L. i. [# |) N
&gt; person.Name
6 N* C, n+ o/ a! p  b'Hans'5 y+ I% W- w2 f( Z. q& V
&gt; person["Name"]
1 V/ G( f3 q4 {% p# @'Hans'( l" v8 C4 a' ?& N+ n0 Q: \# x
9 E( K- B& c7 Z' t( r& r5 c
// 也可以使用new Object创建% F) Y/ z* o( H, O6 z% ^
&gt; var person2 = new Object()
3 _8 ^$ J7 l, A9 j% G: |4 \&gt; person2.name = "Hello"
1 o. w/ S- z/ H( V0 R4 R9 d- M3 q7 @! O'Hello'+ `0 d% U9 g* N  l6 P4 u* Z% Y" k
&gt; person2.age = 20
8 o& S5 r$ ^4 C5 _& [) `4 \% \20, _8 P6 e4 G- j+ d$ c) f4 H, T
</code></pre>! m/ z7 w( D. t+ y
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>* h! J1 {$ P. ~4 c" ~: H
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>: i) w( v( [2 z4 q* V5 {- D( G
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
1 V3 y+ t0 m( S<h3 id="31-window-对象">3.1 window 对象</h3>  S2 G- u' R9 ?1 ^: y
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
% U4 D/ H# [4 ~  ?3 Q- n4 ]<pre><code class="language-python">//览器窗口的内部高度
/ g  z& g1 C% M" Q6 e* q( |: Wwindow.innerHeight # O7 l7 n% B! B7 k- \& C# [
7064 P4 J0 S0 t$ a8 S* w
//浏览器窗口的内部宽度- i6 j& b$ x5 T# i
window.innerWidth! W6 g& k  v$ `4 P* A, [: r
1522; Y9 A; T& U0 a7 J
// 打开新窗口8 Z! I) O& A/ `6 t5 v: B( L4 }
window.open('https://www.baidu.com')4 c$ t8 l2 C# U5 J
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
- s- |* V6 M7 N( E' A// 关闭当前窗口$ k4 q0 G% D7 X! F
window.close() % o' q$ e; U3 |# g
//  后退一页+ l# Q. p! P; C# X2 }2 D
window.history.back()' I) I( P1 v+ d' |
// 前进一页
3 x/ \) s; U8 X3 o+ V; C) jwindow.history.forward() 0 X& @3 j0 Q2 H& B- V, e, Z! S
//Web浏览器全称
: M3 {. c' O) T9 O9 O6 n2 xwindow.navigator.appName) [9 s9 E8 E: j; w! ?. f& \
'Netscape', Q9 N: M# N* b: S
// Web浏览器厂商和版本的详细字符串
" D+ F1 u% Z- U9 l7 W5 ]: twindow.navigator.appVersion
5 [$ M$ `* J" u3 D( c# `'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( X9 A# q6 ?2 |& P, C" [- ^, o* L
// 客户端绝大部分信息
6 I! ~2 J" d# e; g4 }: y  W4 p$ Hwindow.navigator.userAgent: N. K0 w9 b' e5 _( C2 t% G
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
( c8 n8 O, }7 Q4 H& S// 浏览器运行所在的操作系统
9 Y* C3 Z* S. Q6 {window.navigator.platform. y0 z! ]8 d: c% ?$ H+ W6 _$ }" |
'Win32'
" ~; x% Y2 w* ]' S- M' l8 A( F+ c: D
5 F. i3 M' W- q/ w, u! l//  获取URL
$ I" f* w) T+ y6 rwindow.location.href
7 H" q# X) u& Z* d// 跳转到指定页面9 z: u3 D8 F% {
window.location.href='https://www.baidu.com', r7 V6 p7 O, x6 F* m. n
// 重新加载页面
$ t6 P& }- |  {4 k0 n% Swindow.location.reload() $ p& a6 G6 M/ e- }# V
</code></pre># j6 J4 S3 B- U: I* m
<h3 id="32-弹出框">3.2 弹出框</h3>
& L9 I& F4 Z% @& i<p>三种消息框:警告框、确认框、提示框。</p>' I+ s8 U& E" M) O2 R, l
<h4 id="321-警告框">3.2.1 警告框</h4>- J+ @" z8 z% s( [: d% g/ v
<pre><code class="language-javascript">alert("Hello")0 q( x2 F5 Y, O( }
</code></pre>
+ L6 H& [6 `$ m$ q<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
; ?; Q: M6 O# p: I<h4 id="322-确认框">3.2.2 确认框</h4>/ r5 }8 w) L, T- l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
' q+ G6 F1 e" v4 d5 l<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
% [1 ^9 N8 R0 Htrue
4 @5 y* m' g. C5 k2 s&gt; confirm("你确定吗?")  // 点取消返回false* A: q  m9 U9 B! u7 Q
false9 a/ ~; y" [- E/ F
</code></pre>9 @; P* d  b' S* b! N3 Z
<h4 id="323-提示框">3.2.3 提示框</h4>
0 X$ V1 y( `8 Z% ~<p><code>prompt("请输入","提示")</code></p>
# V) f: r% K: r8 ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
5 N3 d6 H7 ?; @  g; q<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>4 t/ o* u. s/ X  s
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
* u4 R+ Q% A8 X" W3 ]<h3 id="33-计时相关">3.3 计时相关</h3>
( r7 U  D* X2 A% C1 d. V' o<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
5 C. H2 K5 @% p* O+ a# ^% p- m<pre><code class="language-javascript">// 等于3秒钟弹窗, @" m" @5 I& `- ^" B
setTimeout(function(){alert("Hello")}, 3000)+ @( q) g) k# k+ c# ?
' ?" U5 s/ i6 O1 b
var t = setTimeout(function(){alert("Hello")}, 3000)
$ q1 A& [( i5 g8 j! a/ b9 f9 m. Q6 V8 n: v2 P- l- K- Y; \, y
// 取消setTimeout设置
$ V- d- E# G$ }6 IclearTimeout(t)
! w4 ^: P6 o( u% E! B! ^% ~</code></pre># \& b! C5 v6 e
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>* s5 {4 [: |2 t5 V
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>! c" J8 }. d( b
<pre><code class="language-javascript">每三秒弹出 "hello" :
$ {8 `+ N: @+ S, x! O% z; O' e5 n, ssetInterval(function(){alert("Hello")},3000);
9 W& [, j( c- v6 q( R+ M</code></pre>
  J) U  R! L* n1 y" H' ]% N1 x<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
% ~; d! X+ ~) k, ?) |2 g4 j<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
: f/ ~5 }4 x; p5 {$ j* ?' A//取消:
" l4 ^. w+ l$ v9 V7 ^0 lclearInterval(t)
8 z$ _+ ]+ k# v8 S# \</code></pre>
' O; Y3 z7 O/ G: G! z# |5 g
3 Q. ~* Q# l, i" P
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-14 09:30 , Processed in 0.073542 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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