飞雪团队

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

前端之JavaScript

[复制链接]

6738

主题

6826

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22542
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
' ^  O; N& H/ Y$ {) }9 j( c
<h1 id="前端之javascript">前端之JavaScript</h1>+ |" x& m# Z. M( Z  R# A; \
<p></p><p></p>
2 E9 b6 ?' l$ _6 {* D<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( V4 W. b1 f( J  ]<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br># Y( j; k0 ]5 ]
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>1 M0 d  r1 @, O/ O. j# ]
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>6 d; I" T: ^, A8 t  P4 U
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
. s% y; Z8 l, q<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>; W9 S0 i# N: u# h+ c, C) {
<h3 id="21-注释">2.1 注释</h3>
& a: R2 p9 t" M0 K2 `5 z( |<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
5 h' L2 M$ e& a! i<pre><code class="language-javascript">// 这是单行注释
7 l9 H3 K' V" P; Z1 }! J  B' w$ w& h# m9 }+ `+ F8 @2 w1 v9 m
/*' R4 I0 c, d# B9 z% l! o
这是多行注释的第一行,
, O7 s$ d/ d2 u这是第二行。
8 k6 y" E! `0 I3 [# c7 F2 ^*/; ^% ]3 j: m4 V6 P+ s
</code></pre>
7 v1 C" H* O" k' G7 W8 R: S+ A<h3 id="22-变量和常量">2.2 变量和常量</h3>
/ z& N! v7 e+ w4 g' s, o: i4 |<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>% U1 n% a, I5 l1 W* a
<ul>" k) Q& [+ k' j# A  w, C' S9 w
<li>变量必须以字母开头</li>
+ R/ K7 j* E& T+ r/ Y<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
) s; w) L/ U# W- S1 z2 u# g! r<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
* V0 J* R( S# j- C</ul>+ p- X) m# u. g+ S' z% ^
<p><code>var</code>定义的都为全局变量</p>* ?" W  e# H5 Z( Y1 l7 I4 S) Z  }
<p><code>let</code>可以声明局部变量</p>
7 B9 U- Z# n5 n; [. z7 b, x9 {<p><strong>声明变量:</strong></p>
# H( N" @8 C5 b3 S  Q% J<pre><code class="language-javascript">// 定义单个变量
5 u1 m6 V% A! S8 I0 v&gt; var name) \$ K2 Q7 F: {3 g( P
&gt; name = 'Hans'8 @8 K6 x+ r2 W$ l) f' U7 D
//定义并赋值
8 q/ _8 d6 i8 y1 g/ Z&gt; var name = 'Hans'" W" W7 t. p9 |9 O1 y
&gt; name
7 ~5 O0 s6 w- |0 ]8 F4 h'Hans'
( U- p- i# U9 v9 W5 {( }% ^0 {: a( U! }
// 定义多个变量
: ^& d: F3 B% @3 ?  O  J0 }&gt; var name = "Hans", age = 18) ?# D* K7 v/ W3 @
&gt; name  u% @. a& I9 b
'Hans'
* E1 H" N, e) O( u&gt; age& S! m$ s$ P; z
183 y% t( x% Z! {9 c# W
, d' s7 K, Q, q& v
//多行使用反引号`` 类型python中的三引号
+ v" L. f, \! E) Z% F5 {&gt; var text = `A young idler,& ~6 t, ^( E( _+ a# j* d; Z
an old beggar`
% H3 ^0 W) k9 B: k+ N( ^&gt; text, J- J( I; B5 b+ L. o
'A young idler,\nan old beggar'
9 j- P& `$ T0 i</code></pre>
5 L8 t$ i9 y" O; Z' j/ @* W+ j: V<p><strong>声明常量:</strong></p>0 i8 l% {0 d9 y5 B* y; |
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>6 t3 Z6 e' L+ i! V( L
<pre><code class="language-javascript">&gt; const pi = 3.145 ~" x/ d" J/ x" p0 C
&gt; pi1 T6 s0 j9 \9 v/ V6 }- b
3.14
0 ]/ O3 n- {6 S2 W7 p&gt;  pi = 3.01
  i' J3 `+ l4 |7 E2 kUncaught TypeError: Assignment to constant variable.; v1 a; ~5 ?; \
    at &lt;anonymous&gt;:1:4
) ^" v# n! F! ?" u) o- I
/ t7 k, |. ?5 N. k2 B; O8 ]6 V</code></pre>
. [  u3 M% ^! x$ I3 ]<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
3 _3 U  ]( j. V7 p; r+ y* f5 ~<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
% ^6 Q. q+ i# ]5 g<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
! E7 b9 C7 K& l" E8 N6 J5 ?<h4 id="231-number类型">2.3.1 Number类型</h4># t3 K# V! a& I' ?
<pre><code class="language-javascript">&gt; var a = 52 _  J! A( w( U1 T2 {  M6 r6 c$ J) [
&gt; typeof a   //查看变量的类型  
9 r0 e5 C; o4 _; p& q, A7 H2 Tnumber) S2 P' v2 J0 C% X7 u9 x3 Y; x; I

$ C3 q0 g4 |0 ~+ |&gt; var b = 1.3& `5 V5 ?8 T9 f0 ^
&gt; typeof b0 F/ }+ E/ u: b' Q, I; ~
number" P9 X& W4 O- G7 h4 E* \
' A4 M7 |6 Q: S" @
// 不管整型还是浮点型打开出来的结果都是number类型% B* e7 O+ z! v- C
" a& F0 ~) K2 q* L6 `/ k& J, @
/*
$ g1 x# j, Q# r# ]NaN:Not A Number7 Z5 B* K$ t5 [0 W) O
NaN属于数值类型 表示的意思是 不是一个数字
1 ~  ^) f# ~  ]( p8 Z( u4 F( f& m% {*/
& H  K6 O  e" r0 q4 @( d. Y( ^- [2 L# }2 p! S6 h& L& T5 g
parseInt('2345')  // 转整型
3 r5 X! q3 G# Q# q1 \$ C2345, M8 q. w. F$ v
parseInt('2345.5')! y7 h9 q, M2 a' G1 p( w. `6 j
2345; t; C0 ~$ y: i/ U* N
parseFloat('2345.5') // 转浮点型; V& ^2 J' x; D9 ^* K
2345.5
' j+ V1 Y2 r, L1 s1 PparseFloat('ABC')
7 I- b& u" n- q9 K* C/ dNaN9 l2 V. _$ N. c  i
parseInt('abc')
) D* R' U6 J8 C# q/ ]2 f' yNaN, E: b# I7 K3 r6 M6 k  C
</code></pre>) w7 X2 x  C0 R* f+ R$ n
<h4 id="232-string类型">2.3.2 String类型</h4>5 {' p9 h" N8 c* j( i
<pre><code class="language-javascript">&gt; var name = 'Hans'
. u, u, T; E3 l$ o$ y$ Q&gt; typeof name
+ [* z) s7 X; z5 ]' M'string'. E5 X; Z' H. Z* x" j

  e6 {: N% s' f# U# y( c//常用方法# N- i* A: Y+ F" f3 |/ M) g  `
// 变量值长度
4 Q; I! i4 q3 N1 L&gt; name.length
3 V, b$ Y$ J) i6 J0 Z; s44 f, |8 V; x: o; d2 ]2 X
// trim() 移除空白
2 }9 c$ ?% h. \+ b, @3 A&gt; var a = '    ABC    '
" H9 @& g  Z- v9 W! W6 B&gt; a5 ?7 f# P! E5 z
'    ABC    '
1 {5 v2 c3 M6 [$ L, c$ B3 `) u&gt; a.trim(): o8 e% P2 Z0 y& o( G: F
'ABC'6 Q  A) U; g: x4 j; j7 e- ^# L
//移除左边的空白* h$ e' U# i9 n- s0 a. ?
&gt; a.trimLeft()
# r' z2 d/ A5 |+ G0 B5 l8 D) m'ABC    '
+ {  L3 W2 u4 o# \6 [2 c. a//移除右边的空白5 H% z( C% K. w4 Q, @
&gt; a.trimRight()
+ J. M# K5 F! a+ _: `) U  l, K% s'    ABC'
! s/ O! a' {2 Q4 h2 d& Y: F; ^5 {# E$ G4 ?
//返回第n个字符,从0开始
. E$ D# K* [9 O5 |, Z! g: s' G&gt; name2 H5 W8 H7 W; r) B0 X) M
'Hans'% \1 l! c6 Z- ^9 s3 }+ H8 D
&gt; name.charAt(3)0 S$ B) M' M) s8 q* B: d* ?
's'& o' B2 T7 Q$ `
&gt; name.charAt()
" F$ f* b( D: O8 Y'H'
2 R9 r, ?( |$ b% ]&gt; name.charAt(1)/ ?9 @" ?% {% O$ u9 V4 ]6 C
'a'
0 B1 W, m/ o: C
1 E7 }7 k3 o8 W3 r// 在javascript中推荐使用加号(+)拼接
3 H" K! Z% y0 Y&gt; name
  |1 T7 Q  M) Y( Z" I5 N$ X'Hans'9 B0 c; V8 e3 [% }& z9 v
&gt; a% U& X! C5 W; j7 A3 J7 O0 ~# }
'    ABC    '. l& z8 H; f* T
&gt; name + a
1 l; n. Y6 {9 S8 T  q) g1 b'Hans    ABC    '
' M/ U. H! A4 L# i// 使用concat拼接- ~) p2 }# P6 x+ R" e/ h
&gt; name.concat(a)
+ F+ b- j# [6 H  o& w'Hans    ABC    '
7 Z/ z, o5 D  @2 s% B- r6 c5 c9 `) y1 p7 q" c: x: }2 t
//indexOf(substring, start)子序列位置* t# a" e& r1 ]4 @1 ~; ]  L# l4 Y* ?

# W( @+ y# L/ J&gt; text
$ Q2 W, S; B. f* ?# |'A young idler,\nan old beggar'
( T+ e3 T% |6 r! V: `  S* C&gt; text.indexOf('young',0)0 b' V1 ^4 e, X" ?
2
: ?3 U. @- u' g8 r8 L" n: K
" f8 a& I7 e& f2 W- m# X) d//.substring(from, to)        根据索引获取子序列) C# j3 U. o( P8 w$ ?( I1 O) S
&gt; text.substring(0,)
; G. p7 x; R# |) ~2 W2 G8 A'A young idler,\nan old beggar'8 K$ \8 R- `" ~) n2 b8 e; }% x
&gt; text.substring(0,10)
  H- f3 Y; W5 `, h. r'A young id'
2 L$ J/ J9 |' O& q( S% H$ d
! o% O9 W& s, u$ z4 V7 Q- w  S' [// .slice(start, end)        切片, 从0开始顾头不顾尾0 Z2 [# x) X8 _- W/ {
&gt; name.slice(0,3)+ I8 `% ]  {/ A5 w7 x
'Han'9 d* M- }$ k* ]0 ^

3 y+ g3 S9 ?( [$ Q# j$ j// 转小写' s! m  g. V1 r( a+ U
&gt; name8 H* [" z9 D! i, T& P9 Y
'Hans'
: R1 {9 \( @+ D: L5 i&gt; name.toLowerCase()
: `8 ?, q: i0 t1 ^" p; m+ x1 q# Y'hans'  H6 o( y% }( r9 k+ d0 v
// 转大写) e- e& a' n5 A" X
&gt; name.toUpperCase()
" `7 d2 h% ]$ V4 y# u2 \'HANS'! c7 o5 @: Y$ t7 a6 \' p" u9 g

0 A4 s6 q6 n& V. U// 分隔
7 D8 d0 z  S/ Y& }! m&gt; name
2 ?9 T* e( ?1 L/ I'Hans'/ K6 Q, F% C, N8 n& u" S8 V: X
&gt; name.split('a')
4 i0 i' W5 M6 q/ {(2)&nbsp;['H', 'ns']: G& h: J: t+ {+ m% O3 i+ g0 ]: F- i
</code></pre>% E5 r" g" l7 g! R7 z& t7 v$ ~+ z! B# o
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
% d0 V9 o6 s+ N) r5 i0 C, U. {<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
2 c! a& l$ y" ^. ~; C! \3 k<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>. l) m" ]+ q7 n3 u
<p><strong>null和undefined</strong></p>2 w) w0 y' A! H9 ?
<ul>
" X/ G! S7 @6 r; t3 V* u<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li># e# W; [: e- V. {' D+ E7 ]" y/ h( w
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
; X/ G- G6 ^7 J- e7 E</ul>
, E3 w  C) b) R+ F' h) p<h4 id="234-array数组">2.3.4 Array数组</h4>
; X9 Y! e; k2 i: q! n4 z9 B<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>8 K) d0 W8 _1 |+ u' `
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
$ G  ^( [  x+ v6 l" q& Z* K" K&gt; array18 k" m# l5 @! h6 j/ W! T# R  B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' n# q0 K3 x. }: s" y
&gt; console.log(array1[2])  //console.log打印类似python中的print
% i0 M2 @! Q3 L3
( b3 g& T2 k7 Z1 h7 E7 d8 S// length元素个数. b) v/ D8 o% O; f1 r6 u3 `9 ?
&gt; array1.length
8 Z0 F* C# K' C& J% y$ H, D6
0 b( _! x! o1 y# Y8 W// 在尾部增加元素,类型append- [% n9 ~" S3 s- V; ~
&gt; array1.push('D')# ^1 ]; [7 ]) x$ P' H) \
7
+ z9 {" w9 b* P  @% `% p/ e! J* T&gt; array1+ r: |7 O; ]; X, V, @. M
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']8 `6 t9 n: D1 o+ V8 M
// 在头部增加元素
  ~* m8 F' W1 |- a&gt; array1.unshift(0)
' G8 ^# v1 b+ _8; u6 J/ c9 R/ O9 u% \- v9 y# O1 f/ O
&gt; array1
$ B& {; z0 y+ p/ b, O(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']7 m) d* e. p/ c) ]# Y! O

3 Z5 Y$ w; W4 A$ W6 P) ^" A//取最后一个元素8 M- o( {" Q) |
&gt; array1.pop()6 U! s& p1 z( i
'D'
2 N  @+ N* c8 I" B' k( c&gt; array1
3 [& X" T" X9 J$ i: @/ u1 W. H9 h+ x9 {(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']1 e, K) o- J0 J. e
//取头部元素! ^: }! W8 W' ?: d) O3 W4 H+ ~
&gt; array1.shift()4 z' i# Y  @% u9 Y, l% g
0
6 i# L1 J3 C4 c' p) o&gt; array1( F: I8 I4 @* e: l2 p, W
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], X; h. S; y$ T3 B3 [; M  g

8 Z/ k4 l' T" ]1 x//切片, 从0开始顾头不顾尾) ~" n* |) ^( I- i
&gt; array1.slice(3,6)* z+ O0 q: p. y. G2 w9 }
(3)&nbsp;['a', 'b', 'c']
* X, q3 S' H7 N% c' U9 P// 反转
( O# {* u! x1 M1 ^; W1 }&gt; array1.reverse()
. A4 x: c1 x; |+ H! H5 K(6)&nbsp;['c', 'b', 'a', 3, 2, 1]( o4 E$ Y& @. z
// 将数组元素连接成字符串/ h2 t8 @: h! W1 E
&gt; array1.join() // 什么不都写默认使用逗号分隔
8 i5 a  y% F9 t7 G  j9 V. M/ G'c,b,a,3,2,1'3 _+ V' I% g6 ~7 ~9 O) @6 n. ~
&gt; array1.join(''): c' X& m* {6 e% X$ J, L/ y
'cba321'
/ a8 M  ?8 \) u! T&gt; array1.join('|')
( q* D3 T; y. q5 h" C'c|b|a|3|2|1'% q7 A5 G7 F/ n7 h. O+ S, H
  b9 I- s$ r1 \. b- K7 W
// 连接数组; [5 A, v& K6 {, ^# O6 m! w
&gt; var array2 = ['A','B','C']. J7 S5 @8 T% m+ c6 M  }9 |& H( v
&gt; array1.concat(array2), B; u' J0 p' C& w# ~1 S! J
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
+ t$ V) K- O# S" c6 _4 a# m2 w5 ~+ \' Q* b! a" U, `) J# y+ G
// 排序0 n: H1 r& h9 d7 n1 c( R
&gt; array1.sort()
: u* @8 j6 k) v6 G' Z+ C' Q. L; a5 z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" H: S0 z( x' h4 @$ @) W0 T
- i3 T! I' R* I1 R0 x: e// 删除元素,并可以向数据组中添加新元素(可选)
$ j7 A3 e9 l  i8 k, {$ X&gt; array1.splice(3,3)  // 删除元素: ?2 m+ r$ X5 X# Q  q
(3)&nbsp;['a', 'b', 'c']& {3 A" t3 ^4 y* t' w3 w
&gt; array1. L& V; q6 D5 K- q' B' P5 p
(3)&nbsp;[1, 2, 3]
) G" z! x8 C" [! n, M4 o+ l&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
1 U4 b+ y1 {# C% q5 f7 [[]
+ S& }4 W, Y3 H1 ?&gt; array1
& b$ h" o1 }! f8 O4 \) C(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
0 L& W  S0 D/ T" d1 W* l
' d# g& i& [/ z: b/*
- j, B: l2 w' c  @/ v/ Zsplice(index,howmany,item1,.....,itemX)6 M' A2 O1 S$ x) }- I
index:必需,必须是数字。规定从何处添加/删除元素。
/ G1 a' D" J' Xhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 o( p* N$ n; p/ e  L) Vitem1, ..., itemX        可选。要添加到数组的新元素1 l, X" V7 r0 @* d( ?$ I6 P
*/% J, z  ?+ A/ S0 d# z% H) j

- s. D0 ?9 x. D0 t# P// forEach()        将数组的每个元素传递给回调函数# D' c$ A9 p# \% [9 M# z$ J
&gt; array1.forEach(function test(n){console.log(n)})) ~/ o1 J  \  B. w
1. q$ Y" r2 C  N% I/ u) Q7 R
2
! d9 |; Q& \$ y7 ]0 d5 | 3& j1 Y. |. H, k  X9 z0 A% }
A
- ]. Y" G2 q: X$ q8 q, \0 p  z3 \ B$ a" Y% D, a( w$ F* r1 Y
C
$ N4 Q- y: j- @. n4 ~+ b// 返回一个数组元素调用函数处理后的值的新数组) R4 ]; r; B! _' r% A$ ]3 k
&gt; array1.map(function(value){return value +1})2 }- O2 E# @% y
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
: W2 y( u3 ^+ u9 {* ?7 M; w- R( W: f</code></pre>, K+ W# V# q/ p3 _& x. v
<h3 id="24-运算符">2.4 运算符</h3>
- U7 H8 c  q$ e/ d( g<h4 id="241-数学运算符">2.4.1 数学运算符</h4>9 I6 |9 Q/ B9 T/ K! C1 Q
<p><code>+ - * / % ++ --</code></p>; j- u, b! v* ~' o  E$ \; U6 ^& y$ y
<pre><code class="language-javascript">&gt; var a = 6
6 I# E" F2 E2 Q# v8 k&gt; var b = 3
& j5 \6 @6 Q- a5 M0 B  m$ a// 加6 A- v' N- b  D4 L# j: M
&gt; a + b, j9 {+ g! C0 p7 g, B: P
90 J! D# \$ Z+ v6 _0 K- I9 u# j7 p  O
// 减
  I, p' Q4 K9 o* Z( [" _1 e$ J, Y&gt; a - b' N9 E7 ?0 R3 w' O) U4 q3 ]
3
- a0 f8 V) T  E9 C- d7 m// 乘- ^' g) O( F7 F$ {8 Q; e7 E
&gt; a * b0 c0 p5 @' n% N; `
185 ]/ `( k6 I2 Q; d: A" T3 {4 v- `2 U
// 除4 Y9 x+ T  Z! ]9 H1 U  T
&gt; a / b
/ v  @! S8 j0 N2
. L0 W5 n" @& c- f0 e// 取模(取余)& t: U4 q- a3 x8 K, G/ u
&gt; a % b( @6 j: T1 ?/ |9 A+ ]. P! A
04 v0 [1 A5 ]% G6 E- l
// 自增1(先赋值再增1)
( i/ H7 |4 H1 e( s* @7 v# [: B&gt; a++
+ F$ m% R" d; E- K% O" D6
. N4 _9 B+ [! O& R% P! X9 ?# x&gt; a
( l  I$ S. q: l4 V5 E# ^, v7& B( Z# K9 N$ E! K1 j  @
// 自减1(先赋值再减1)$ X7 Z! c5 g/ ]$ y% \0 B! ^7 S) u
&gt; a--
% O% d# p7 @2 f+ {& N7" _6 a2 z, q3 o4 m! p( E2 j/ Q
&gt; a8 v- V, Q" h" d% e+ N
6
6 [' H5 Q" E" v9 }$ N8 `// 自增1(先增1再赋值)
# ]# V* [: e3 c&gt; ++a. r. J, p  g4 d# b5 N8 y
7& u" `2 h8 [( C7 t9 [2 |
// 自减1(先减1再赋值)
  ?8 x+ T) W: O: u! r&gt; --a
  E0 }" u( H3 Q8 Y6
7 |+ V, V0 n5 m; M( R: X* C&gt; a
  @$ M1 g; H$ r' a6# r4 Z" m7 _. ?. Z# Q) E

' E- W. ]  @2 Z4 i) ^9 @- B4 U//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理# _' L9 c9 K3 Q
</code></pre>
- P3 r3 p0 Z: s$ V  K) c. D4 v8 f<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
/ ?% \( c' c" P& F! n<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% [# {9 [4 {! f, h. y$ ?. j  f<pre><code class="language-javascript">// 大于8 F* I0 ]( U1 @
&gt; a &gt; b* u1 ?5 a8 Q2 j/ q" L! W( M
true) K. e; ~( F8 \1 a& e0 f( I
// 大于等于; {2 n7 t  ?, S4 e' b
&gt; a &gt;= b. u* i# {9 X* I' [. H, J* V9 p
true
% m/ P  X% v' G+ g// 小于( ]8 Y$ q$ J* e9 E  S; K
&gt; a &lt; b
/ W$ u8 Y) S  ~) _/ u/ ifalse, b1 V; u! q2 F% S5 l' b) [- h
// 小于等于
* M0 P& y& r3 A7 o* d&gt; a &lt;= b
$ {) M% b0 p7 w# P0 [false+ \- Z/ T6 o8 V, _& E3 T3 F
// 弱不等于
, u( a* }9 F9 q7 A; o$ F&gt; a != b
  Z0 D* J3 k, ~; N3 @* @3 g. rtrue. K1 C- e" p  z5 b& r7 n) I) w" Q' s
// 弱等于0 l4 T# t1 d& v5 Q* j
&gt; 1 == '1'
, R/ r; N/ m. g$ @. {true) Y# G" Y1 G$ B4 [# X/ x' b9 V
// 强等于
4 r7 R) B& O( u. I. T% \&gt; 1 === '1'! ?# X: X" x/ O  s# k; H
false
; i& ^. S6 T) r2 Q5 a6 n8 e0 v, i// 强不等于
2 R" B2 R) ]  p&gt; 1 !== '1'
' \5 o6 `7 D7 ?, L- L  w- \% ltrue( t! @7 D( T- }+ v. g. g, n% f: c4 S

5 q" E+ H& k0 u& ?/ S3 S. N; y. b5 \/*: Q0 I2 g0 l: ?6 v2 N. Q2 h
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误  Y8 X0 F0 n5 e" X$ V! ^& v
*/
+ H5 q9 O0 c& j( F! `</code></pre>
% g; D5 r; L" H( b$ V" z8 {% C<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
; ]7 z" b* ]8 e* c+ I  c<p><code>&amp;&amp; || !</code></p>3 j! W& U* q2 Z! ^4 a2 }6 b
<pre><code class="language-javascript">&amp;&amp; 与8 Z0 j8 B, u2 d9 Z! _, a% W
|| or
5 ~1 E$ R. o" n; E2 z, L/ Q! 非
* t/ s% \9 \5 K: s. V5 [</code></pre>/ ^) X& L1 J9 w& M( p. j0 I( x# y
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>3 P$ G+ P4 E, E3 d4 X
<p><code>= += -= *= /=</code></p>3 @0 S- |* w: _
<pre><code class="language-javascript">// 赋值
2 H0 r, o1 t8 y3 d6 [&gt; var x = 3/ G  [4 j, O8 n; q. X. C
// 加等于+ C+ F) I) D9 J' `' o! P
&gt; x += 21 @2 y. Q, c; a; \" M% @
5
1 E5 g2 D6 \, O$ k3 r+ d9 G7 {) A// 减等于! S7 Q4 P  B2 {" c
&gt; x -= 13 u0 T0 o2 j, O+ [8 E- D+ Q
4
2 m+ r& ^' S( X' V( v( O' ~// 乘等于  o* R) x; j2 h
&gt; x *= 2, S% d$ _  L) r* H% ^# |* `
8
  w) H2 L2 a0 y2 u* m// 除等于  `4 v; _: Y- D- k* d
&gt; x /= 2
* L5 |0 O8 X3 |- _9 e40 I, D  D' @! j. c
</code></pre>7 o2 r1 I3 h& [# x3 e4 b
<h3 id="25-流程控制">2.5 流程控制</h3>
( ?  u1 j7 W# G' n) O3 G<h4 id="251-if">2.5.1 if</h4>' S, Z2 \+ J' \! q9 L, d) e
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}! e& s7 {6 p" M/ b. J

* c; M, A$ [! n! e2 h5 S6 p&gt; var x = 3& j0 R# O8 w' k- d+ J+ B7 k% q1 m; u4 D# a
&gt; if (x &gt; 2){console.log("OK")}; s$ Q2 g9 X, l& n1 V- O6 j
OK
1 b( {, J9 o: S2 F
2 R( i2 G+ z0 s( p9 W" V" Y' u1 q2, if(条件){条件成立执行代码} , B2 i% z* f' }0 j0 P
        else{条件不成立执行代码}0 I0 g; N5 n  v6 v! L2 {8 D  x

+ k# O; H3 }4 e+ l9 N4 `* ~/ ]&gt; if (x &gt; 4){console.log("OK")}else{"NO"}' z1 Q& j: m: p, z
'NO': G, P* [8 U7 F! q1 u% }& @( K! W1 \

+ P0 K; g- x+ s1 `7 G3 J3, if(条件1){条件1成立执行代码}
9 P% J8 Z# Y1 I" H5 {+ F        else if(条件2){条件2成立执行代码}# U* ]7 u( @9 S1 z
    else{上面条件都不成立执行代码}; u8 X: E$ ?3 u: `1 E/ [/ m
- T; O$ D" w' N- E& V9 I) I! p% W/ v) {
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
6 M$ \$ }$ j8 y  S* @ Ha
3 x, Q4 \8 O; H- Y9 }) j5 i</code></pre>
. X* S. }6 C+ m( p, F" n4 [. c" s4 \<h4 id="252-switch">2.5.2 switch</h4>
1 Y& L" S0 p. o# u$ j. d. A' s7 p. ~' s<pre><code class="language-javascript">var day = new Date().getDay();( K7 V" G# C2 j% w+ J; _+ z
switch (day) {
/ o, h1 J& ~2 f  E  Z  I. H& M  case 0:- n4 r! z5 k# g2 c3 o
  console.log("Sunday");7 U7 }8 i2 M& a8 i/ U
  break;
; e$ N. P0 U7 J' ]  case 1:/ y5 a% L' U5 S/ V% Y! c0 c- p
  console.log("Monday");4 W7 L9 W6 F3 p$ D$ U( E; X
  break;) Q+ ^2 N/ G0 Q! k* [2 u
default:- x- b$ G1 m! L4 E8 ~$ y2 K" a( R
  console.log("不在范围")5 f* o" X! Z" ?4 {7 y
}
- c+ ^  ^- Y1 f 不在范围
/ P3 s  ^( u/ k</code></pre>
7 ^+ [( y) d6 _, a, m! |' {<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>& [  [2 ]! g5 h
<h4 id="253-for">2.5.3 for</h4>
) M) M% H# e0 k; s. F4 l<pre><code class="language-python">// for 循环
2 C! `  z7 E- I# L# n: X* {( _        for(起始值;循环条件;每次循环后执行的操作){) t8 H# a# ~2 L% B) b8 e
        for循环体代码6 L9 B- J1 Q9 ?5 {1 L2 x
    }
$ }7 B* b" X$ Y6 x7 Y* d7 D' a  `# a8 E  ^6 f- V
for (var i = 0; i&lt;10; i++){
- D/ I, B+ W  J" [    console.log(i)# `' i  [$ n+ S) i) u
}6 l' }' N& L# I3 B9 S
        04 N* Q$ P, d7 m
        1
) D9 t1 M7 U5 N4 T' ~        2
8 w: L, H1 [  u' w        3& a# X* \* K/ w
        4
& @) a( E4 y# ]! k. [5 V' m        55 ]  m/ X8 U/ z0 A# `0 a& h: [
        6
* p; L2 m& a9 S4 L- u) \) V/ ^2 W4 \        7$ a7 t3 H, {/ c/ v; c. }+ p
        8
# ^& t$ y' D  G; x        9
, F3 B+ }- Y/ @. X2 o/ G</code></pre>/ x4 C; ]& U9 L- M# Q5 o
<h4 id="254-while">2.5.4 while</h4>
+ N* L6 H6 Z1 m8 C<pre><code class="language-javascript">// while 循环7 @9 M- \# O" S+ r4 I
        while(循环条件){; l" H8 s4 G) O' J1 a4 E" z0 F
        循环体代码
6 E+ D) u" ~8 P6 R: _0 U. H& R    }1 M4 A% k! C0 [# Q
0 {- S/ Q& C8 D* I
&gt; var i = 0
# L6 c* ~1 j# d&gt; while(i&lt;10){
- j: m2 w$ J$ _% o5 g4 c$ u    console.log(i)
3 `5 P/ P7 ?; l8 n% n. \    i++. T) y: s! o0 Z1 W7 D. G8 t' h+ W
}$ P2 T2 a4 C+ t4 W* x: S- r7 _! _$ _
0, E$ j$ x2 S; m# t: W8 y
11 K4 T- u# A) ]* u5 M
2
- i! w- f3 T8 U, J# X 3
, c# E5 p& K& H( u  S. W 49 o/ j, r* ]. W5 b8 t
52 f8 ?7 k3 H: P1 e$ I+ t" b. ~: [3 k
6
) {2 M% s4 l- R2 I 7$ |1 J" d2 S' |, F
8
9 U- T/ Z* y0 O0 s, e: D+ A 9
3 L# ^% m' C, I3 f: A</code></pre>
/ A0 Y1 Z7 B4 N' |- M* ~! X. n<h4 id="255-break和continue">2.5.5 break和continue</h4>
# l3 Y2 M6 d$ s; e: \<pre><code class="language-javascript">// break" K5 b% L. H& R0 f. j
for (var i = 0; i&lt;10; i++){, c0 d. b8 b8 ^$ f  N; M
    if (i == 5){break}1 O. f7 m* ]* ^9 a" d" a' H) u9 K
    console.log(i)
* p' J8 G  I0 x" |- l6 j4 K}
% t: L  S) e* w2 J& X8 _0 s- o9 d 0- E. r/ ?5 \# m+ G
1
# G) D( q5 |* L- v 2# g% b/ [3 k4 F5 [
3
8 l% s# D2 f9 L1 l 4+ H6 p3 j; ?( h4 @
// continue" ^0 z# A+ B2 e* o- D% T3 w! K
for (var i = 0; i&lt;10; i++){& f+ c( v3 u' ?" K* }+ M
    if (i == 5){continue}
! p1 d8 \6 P1 g  d1 U: G4 \( u7 s    console.log(i)
. P1 Y2 ~- H9 f% @}
; V8 O. [5 ^: |! `( V 02 `$ t, `# j6 W3 L! ~, n. ?8 B
1
" k7 E. e3 a& X8 \" W 2
2 g( _% @* R, }$ T+ H4 z 3
" m. L; D) i% h& f# E 4
* ]6 |- U; a7 P% j. o 6* i8 Z* k3 [$ |1 u! ]
7
2 z! G% ?0 F( I0 t, W0 ^7 T( ^ 8
7 j. Y# P( v6 y/ Y 91 G3 ?0 }6 i+ X6 O; S
& P! m/ }5 Q1 M9 Y. m% R
</code></pre>
- s* }( P7 q" O3 B  z( |<h3 id="26-三元运算">2.6 三元运算</h3>
+ W0 m# X, v" t+ h. G& h<pre><code class="language-javascript">&gt; a
8 W6 ]" }& A! [- N$ V) P6
  K. k/ j7 D! r( x/ K7 z- G2 d&gt; b5 f% o  k# Q% H! y! ^7 [
37 X& z6 ~) c. @' y" ]& \) c) A
( s8 L& q+ W$ N' `, W
//条件成立c为a的值,不成立c为b的值9 W/ m: h: B! K+ ]) }
&gt; var c = a &gt; b ? a : b
# W- F4 q4 I# y5 G( ]4 s6 P; O1 Q&gt; c
" H9 P3 C0 `+ Q+ F7 k: n6, P+ J3 s3 T( K- l

9 K" ^" {2 S" @4 S5 A, s. u7 t// 三元运算可以嵌套
* X  e5 U' s9 |' C9 A, Q  X  W</code></pre>
5 |, u, c6 {4 M' h( O( ?( T: m<h3 id="27-函数">2.7 函数</h3>6 }/ \, q/ C  l3 h! \
<pre><code class="language-javascript">1. 普通函数
; x; c. H# [' k# _- `* m( E&gt; function foo1(){
9 z# [# b7 i3 q8 {! M6 r- @, Z    console.log("Hi")4 }9 Y* k2 g9 W8 C& M2 j
}
# U7 O* s  u' s: Q
2 N: A+ E% P2 t# K, I7 z, Z" x&gt; foo1()
: P! g, h( B2 V  H        Hi! l1 w7 O' h8 F, T( O8 U& d
2. 带参数函数& k! R$ }+ y$ g( {
&gt; function foo1(name){
" r: w* t" ]# C: j6 P+ [# ^console.log("Hi",name)2 x# i* p7 t0 B5 l& x
}/ |" Q: W  o; {- ^3 a6 y

& [# }; q& u8 T; H; A&gt; foo1("Hans"): j: ]  h$ n& c7 z1 T- D# o
Hi Hans
. A6 J/ x, ^" t6 C2 B7 ?6 ^
& K) s9 \8 ^$ B&gt; var name = "Hello"9 Q( Z' m. V  S5 L" Y. S
&gt; foo1(name)" B' Q1 J+ o3 }& M; [3 Q
Hi Hello
3 m7 O7 r9 v' R( q. @1 T" `& |
! w5 ?) X: ^. [# \6 Z9 q* a3 U3. 带返回值函数
1 {0 a8 R, J2 [, l&gt; function foo1(a,b){
3 ~% w* e# m9 [9 f- i4 v        return a + b   ; n( _2 `$ t5 a0 B! v' P6 A5 Y
}
/ ^% A5 |; c" A( s1 M) F) h' j&gt; foo1(1,2)9 w6 |7 g6 x. o' \' x
3
1 A9 q4 V0 M9 r% Y/ ]$ E6 D&gt; var a = foo1(10,20)  //接受函数返回值
# G) o5 e4 S4 d# s% S8 v7 U&gt; a
* s$ g2 ~7 @8 Q/ }7 O; [. a30
" e; o6 H+ U: n3 U! W& @3 ]2 W! N$ ^4 z
4. 匿名函数6 x8 }; x" r/ @5 q" C& D) c8 L
&gt; var sum = function(a, b){! g9 f2 P/ @8 x) j: B7 h$ E
  return a + b;; J* e8 R" C4 |3 x$ w( {7 `
}$ z8 p$ c4 y* n! {
&gt; sum(1,2)' s8 N9 B0 i% d- g  D
3  q) W5 E; j/ s  V+ c
: ~* g/ V  M- D+ {! e$ R
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
* i! ?: d, o+ s& R( m0 P$ P&gt; (function(a, b){
% ^0 P+ r; m0 x/ z  return a + b5 e: @1 u" l1 I
})(10, 20)
7 N6 U$ Z5 J0 n# h30. X+ S: ^/ D" Z/ ~9 F8 M

2 h0 Z" Z4 B" }& {5. 闭包函数
7 ?4 }( J/ H' X; }+ w7 x2 X// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数+ m1 \! G" v% S, G) l/ {  ?: ?( B( X
var city = "BJ"
( N( z8 o. B# Ffunction f(){8 Z: y- u% Z2 Z5 K7 P) I
    var city = "SH"
: ~( L% Z  Y- V! S( O  T& T    function inner(){& n+ `& P) ?/ r
        console.log(city)! k  a! f- ?/ z( d
    }' K2 W6 W1 [$ r8 r
    return inner
5 i" K: x3 I" m" ~}9 k# c) H2 d: u) G1 s- M4 y$ Z$ z
var ret = f()
; O) g8 e3 w# ~# O, `ret()1 t5 }% Z( h& R2 e5 f2 A/ z$ ?
执行结果:% y" A* y+ R( u( Q% |
SH5 a7 T! X1 w$ G. ?, G
! A! [$ }, @# h. o- M& M5 u2 e
</code></pre>
* |) R3 g! Y: w<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. [9 Y7 m! u. @, R. y5 E
<pre><code class="language-javascript">var f = v =&gt; v;+ T2 S; i; |! @3 Q; [3 o% b
// 等同于
9 d: @7 ~: t3 @- F( Ovar f = function(v){
2 P9 g3 A  l. a  return v;
* H& R2 H' f, i$ J}
+ ~4 ^& S5 F7 C% {) Q% j7 M8 D* D; p</code></pre>
  n+ ~5 s) H) B  U( D* d<p><code>arguments</code>参数 可以获取传入的所有数据</p>( `! G. t( Y1 a$ E$ E+ m. R3 e& }
<pre><code class="language-javascript">function foo1(a,b){
/ I) }6 c' S$ ~1 T    console.log(arguments.length)  //参数的个数 & F# D& y; o" W; n: Z
    console.log(arguments[0]) // 第一个参数的值
1 D, n: S8 N! d, d        return a + b   
3 c7 L+ M0 r3 ]+ q- l6 `7 }}
& i, [% D% n1 x& H/ x1 k4 ~foo1(10,20)
/ x0 Z0 m! j+ z9 a4 K% g结果:
( t! y6 s0 a- ]4 ^) V& }$ w 2          //参数的个数
  |. \2 x% D' ], z3 k10        // 第一个参数的值2 r& u: \, j, E
30        // 返回相加的结果
' t: e& E! t  E8 x: |; i$ g  |</code></pre>
& S4 L4 R# P  k% A<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
- u- D) T  }1 h* {4 G<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>' t2 |  S0 N3 }+ D, f: `) i# ^
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
: Y' h8 @1 J( D- {  q3 \<h4 id="281-date对象">2.8.1 Date对象</h4>
0 m" A) k0 \* s, p& [+ v/ d<pre><code class="language-javascript">&gt; var data_test = new Date()3 E  L- A7 h8 h' y) v0 f: ~
&gt; data_test
" Z1 {( H& Q+ I/ [- r: k$ nFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间). E9 Z$ f8 }6 F- T: l: v
&gt; data_test.toLocaleString()" I; E8 |7 O6 X0 V0 d3 M
'2022/2/11 下午9:44:43'
8 o: W) o% N* G! W5 z9 w+ w
. B& g# h. g! n0 S- u! w0 K&gt; data_test.toLocaleDateString()
8 \5 C. ^+ E3 ]'2022/2/11'
3 T% p2 l9 B; q$ k' ?) k" H* G/ H* B( w5 a9 D7 P
&gt; var data_test2  = new Date("2022/2/11 9:44:43")  l% u" Y. Y* \$ ~* c/ @
&gt; data_test2.toLocaleString()
; C4 {/ v: V2 S# Y'2022/2/11 上午9:44:43'
6 @) d# X! l2 c# m3 r4 k3 _  {" v; M- E: S. S& G
// 获取当前几号  F/ j$ E3 h! M7 u4 l  d
&gt; data_test.getDate()" K/ ^7 g9 `/ }  M4 @% M$ J# V
11
$ T1 Q2 n. z1 A4 z  E' E% H" }& [// 获取星期几,数字表示+ c% _' s7 h" q; u# Y; w+ u( F1 \( Y" o
&gt; data_test.getDay()  / S7 W) l0 e3 c8 N$ x4 _
5% e& O5 o3 t8 ~* A% Z6 b1 D0 r
// 获取月份(0-11)2 |# A( R/ C: z& `/ [
&gt; data_test.getMonth()1 S" r0 z$ M+ {8 q  M# ~- L
15 k8 ]8 `* o. o4 ^
// 获取完整年份
+ G6 I; f( m9 G7 R9 y&gt; data_test.getFullYear()
" v) c# L* s1 ]( b  Y, N7 z; n+ _2022" @1 ~+ h/ |3 W7 a* b
// 获取时
) o+ c) \! w) Y( p4 Z# z1 q&gt; data_test.getHours()" \% `: @" k) E, ?* V4 ]8 |
21
! O, B. C: O& ~9 `8 e' M// 获取分
3 H: R/ H1 P# ^) {# n" j&gt; data_test.getMinutes()
/ q2 o) Y; r! m! k44: g' I/ D+ I/ E0 j" s$ {
// 获取秒! ]* c# C: W7 g2 u4 I  A
&gt; data_test.getSeconds(); c" J2 \7 G. ~2 G' z& n3 b$ Y$ @
43
, t* s2 E0 B5 R+ `6 x! ~// 获取毫秒
" ?: `7 N  @9 q1 W&gt; data_test.getMilliseconds()& z# S  T6 ~2 ~0 ~' O  l
290
7 F' i1 G; t( J; k+ x. B, _1 ]5 w// 获取时间戳# |  n. o0 h9 W0 Q3 n1 K
&gt; data_test.getTime()( H0 r/ M+ z+ A% f: C# ]
1644587083290
2 R+ h/ S9 s# w9 U$ Z1 w& {# ^</code></pre>& p8 V4 A6 ?- r
<h4 id="282-json对象">2.8.2 Json对象</h4>
% l6 a3 t* j) A7 w( E<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串4 q3 J$ o0 L4 |8 V
JSON.parse()  // 反序列化,把JSON字符串转换成对象' D/ h) z$ `( k' `

/ R6 }0 \. f7 ]3 r( B// 序列化  N; F4 g4 A1 G. D
&gt; var jstojson = JSON.stringify(person)
! E" ?1 C- x& d3 L# T2 J* Z&gt; jstojson  
) s: o% ^5 p# G% x1 U'{"Name":"Hans","Age":18}'
7 h% P6 r3 P% `
- v! x. @/ H( ~) u8 ?& C3 ^- ]$ @// 反序列化7 O* p+ K/ a2 w1 j9 k( B4 j
&gt; var x = JSON.parse(jstojson)
, U; r4 Y  @0 h&gt; x  D6 ]' m& f: e" L, s1 ?2 d
{Name: 'Hans', Age: 18}
2 P+ S% t. L' G! [' j&gt; x.Age' b# j5 J6 W. J7 f$ p1 {4 w
18: t1 T: W" V- O, N( h
</code></pre>4 Y- `$ q4 G. `$ r% s# P
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>3 `5 Q2 w# d6 k7 s1 {4 T
<p>正则</p>
# f9 j/ D/ j3 y  e9 i8 s/ c<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ s! x8 `8 E0 ]0 C6 g( a& O
&gt; reg1, @& ~8 ~1 Z. g! f: i# ?4 h
/^[a-zA-Z][a-zA-Z0-9]{4,7}/' b% m0 U' K  a/ B1 p
&gt; reg1.test("Hans666")1 s. ?+ t! h+ e/ k
true; V# L0 C- E9 H! B: v/ J2 q& `
/ V1 e4 t: m# I3 A$ M  R. h# z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
, K% T$ ?5 N9 U# a&gt; reg2: b8 f4 M# X" \7 s
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
3 M# W2 Q, ^- o9 L5 m&gt; reg2.test('Hasdfa')
0 s5 v1 z# [; M# G9 t. d. rtrue
5 P$ c) o8 R* a, M! I; b) g7 G# M& H4 m% u
全局匹配:
4 @% G+ S6 C- P  ~5 g9 g&gt; name
) e* X1 ?- j/ p( r'Hello'
# h' R- n3 {' j/ ]/ y% y/ m3 v0 M. [&gt; name.match(/l/); K5 ]; ^, D5 e% q5 k1 d  T
['l', index: 2, input: 'Hello', groups: undefined]
0 a* G# X/ P* l' X0 h+ u, T8 {( F3 l3 G4 p( P
&gt; name.match(/l/g)
* N  J& a8 ]6 S. O" Y(2)&nbsp;['l', 'l']  a9 u5 ^9 e5 t4 c" w$ k
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配" l9 q4 ], R. N1 H% r- _5 U

, G  a" a; }$ e$ Z1 S全局匹配注意事项:
. H% `+ b2 d0 x9 L  W&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g; L/ x4 m7 [5 ?! ?; |3 D. |
&gt; reg2.test('Hasdfa'); T9 Q# b2 Y) R' J+ ?4 h# q
true! {$ `! U8 P4 h+ |/ g
&gt;reg2.lastIndex;
, O, d. |* B; O. d6- l4 _; A) v: ^1 _( Z: b
&gt; reg2.test('Hasdfa')% a! G( W, x/ R  p) S, T$ L
false
2 O$ `6 c* `- L! x  C1 u&gt; reg2.lastIndex;
; j2 N' x+ H5 i& S9 V- Z# g- C0
: n& _- b8 M# D: ?& F- p&gt; reg2.test('Hasdfa')
: U; Z5 g# \  ^1 ^( Etrue/ g: f7 t6 n8 s; ^0 d) u7 ]9 Q
&gt; reg2.lastIndex;
& j  l9 z. `* B2 d6) Q% L4 d9 L. M- `
&gt; reg2.test('Hasdfa')
$ m- j; |0 p# l3 F" I* B1 |" n3 nfalse
0 x0 w" A& J( m0 H) j: h3 T&gt; reg2.lastIndex;
7 R) A* M3 `1 X' t0
) H+ V; I! n, d6 @( B8 X' U  G// 全局匹配会有一个lastindex属性
$ g' f  U; Y* I$ T&gt; reg2.test()8 Q& i0 e* B; P1 Y; E
false7 v* {+ B  ?+ c
&gt; reg2.test()
% U& \8 f5 f- t4 s$ Ntrue
4 ?1 e4 u$ e( ^5 i// 校验时不传参数默认传的是undefined8 C% Q2 q* `( `- f2 q4 ], G0 }8 x
</code></pre>
' U) ^3 ?% t8 v7 }# R- u9 I<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 k! s9 Q. C, E/ q; f$ V8 {. @
<p>就相当于是<code>python</code>中的字典</p>
( S0 |0 V# q8 U2 l1 G4 u<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}) g$ d) h/ E* p- w* ]# }
&gt; person
* Q4 h1 M/ Z+ D! u8 o3 p2 z/ a) J{Name: 'Hans', Age: 18}
9 T0 K) \  ]( [- P" f&gt; person.Name: b/ M5 i- [: q& [- l
'Hans'2 l: }, H. [, w. E( I! A3 _
&gt; person["Name"]: D; S9 n9 v. }# ^6 q, T
'Hans'
  m( X0 T2 j9 B9 u8 _) q9 h. p; r) l. E
// 也可以使用new Object创建
7 w8 i/ {8 u! R&gt; var person2 = new Object()' f1 C4 D" i  u1 a; _& q
&gt; person2.name = "Hello"
( z- v. I5 w7 n) u9 X'Hello'
) [/ Z( d8 U' U+ b9 B8 D+ ]+ t* J&gt; person2.age = 20! Q- b- p* e% J2 f1 ?' }. U) z
20
$ f$ |( o. ?' R5 ^) B</code></pre>
/ ~6 L# B6 E5 ]! t<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
, f) p0 l6 a9 d<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>+ k- U1 j+ M# y' o7 {+ C
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
& Q  W; G" I/ d2 ]0 i& y<h3 id="31-window-对象">3.1 window 对象</h3>
3 E) _7 l! W, ?* ?  o! H<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>% }- c. X0 [! [, \
<pre><code class="language-python">//览器窗口的内部高度& t; p- y7 L* Y, n4 y/ Q  j) e
window.innerHeight
' `) K  y$ l6 Y( ]4 V* ]7 z/ n7067 Q9 X2 w$ [0 A$ z
//浏览器窗口的内部宽度
- y% C0 t4 D8 ~window.innerWidth5 U- f$ {9 t& W- [! f
1522
  [; U! P; W$ ]& s// 打开新窗口* s. Z: \7 j! r
window.open('https://www.baidu.com')
4 L: s4 H3 Q: C" H, uWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}& O5 j6 X$ w) Q! v$ D( ^$ T
// 关闭当前窗口
' s" p3 w( ^  @window.close() 9 }; M; T& f8 I+ q( ^( n9 ~
//  后退一页1 y" K, z6 c. m  p$ W1 G
window.history.back()
2 _: u6 L2 {: x// 前进一页
) J- c! r& Y) kwindow.history.forward()
& I  L2 e. e- d  e, Y2 _//Web浏览器全称
9 R3 a" t! `; H, C* s8 K5 Q& Bwindow.navigator.appName2 L+ N9 X% h5 K
'Netscape'* x0 f" ?/ w" Q  o' w
// Web浏览器厂商和版本的详细字符串
) v1 v6 y; g* ]9 G) N, \window.navigator.appVersion
- [' y) h8 _( I5 H2 O6 ?'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
% K  Q8 p. l% o* S+ \7 \// 客户端绝大部分信息7 B0 d& Y* j! v/ r# e7 q4 ^
window.navigator.userAgent
. N( ]" Q7 ]$ [6 l$ c' E'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'+ P3 a0 P" l; U% q8 n; I
// 浏览器运行所在的操作系统
- e$ W, O5 t# b. M" _/ ^window.navigator.platform
( Q7 }- U" w$ T! S" s$ H  @0 r2 X'Win32'! s- `" Y" f8 H2 t, z
, H, u5 e' z# C0 H8 f- j; J
//  获取URL
& i3 L- Q2 F8 W  `" Iwindow.location.href
; ^' C0 R! r% b5 s7 E, G// 跳转到指定页面! D& y; r; Q4 n7 B  ]& o$ w& e. N
window.location.href='https://www.baidu.com'& z2 I3 x( G/ Q" f! d
// 重新加载页面
8 N  s% d0 t0 Q8 Jwindow.location.reload()
6 _/ `- o: \2 s- X</code></pre>
( C3 p" W0 H+ ?- U% ?<h3 id="32-弹出框">3.2 弹出框</h3>
/ X% o3 q! s5 i' y<p>三种消息框:警告框、确认框、提示框。</p>- X( Z8 Z+ U, o% U
<h4 id="321-警告框">3.2.1 警告框</h4>4 a0 p# t! Q( _6 I
<pre><code class="language-javascript">alert("Hello")
- z$ g) l1 g  X- U4 L</code></pre>
- c7 B; B5 a$ {& f2 M<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>+ m& u4 j! O* w8 A
<h4 id="322-确认框">3.2.2 确认框</h4>& R$ t; a2 B0 c: [( I! U
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>% q  U5 n, r  o  Y( p# X
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true# r$ j. T) X* v' J
true
& j& Y, n( |1 V3 w1 t&gt; confirm("你确定吗?")  // 点取消返回false# ~3 @  ?4 }" ]8 w% n0 z
false2 |. }' d9 h& W4 k% n
</code></pre>& ]# y* t( u/ z) b, g" |- p5 @/ o
<h4 id="323-提示框">3.2.3 提示框</h4>
+ j' l  x' u) N4 ^& w( l, \. x<p><code>prompt("请输入","提示")</code></p>$ `' m! K2 d. i3 G' H
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
4 g, R; r9 F0 ~& N0 s* B<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
* |8 D4 e- O+ _<p>如果直接点<code>取消</code>后端收到<code>null</code></p>( z5 B$ v; l% A
<h3 id="33-计时相关">3.3 计时相关</h3>
  h) [7 ?/ ~) G<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
; t% L- y5 x4 q7 W9 m" l<pre><code class="language-javascript">// 等于3秒钟弹窗) d0 R4 z' S, N
setTimeout(function(){alert("Hello")}, 3000)% ^, R4 H! v1 B4 ]/ C4 v. n& V

% a7 x5 B* B4 f% k, |5 N+ O9 Mvar t = setTimeout(function(){alert("Hello")}, 3000)& f& s* w3 t  d9 x$ Z8 s
4 k$ t; y& |0 U  R% W( p; E
// 取消setTimeout设置8 g8 w- d  D* e6 G
clearTimeout(t)# ~  H3 ]6 X7 u- a
</code></pre>
& R& w2 j4 W4 t0 R<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
- |& C# ?+ Q- t  D6 r<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>" e( N/ n& q+ _( m* D$ _
<pre><code class="language-javascript">每三秒弹出 "hello" :$ T  m, X9 X9 t3 y7 U8 j3 ^- p
setInterval(function(){alert("Hello")},3000);( s  g$ z! l* Q2 V
</code></pre>
$ \  u* @1 o- n+ S, w<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
- w) b, M5 W8 U3 n1 t" j* {<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
2 B  c) D3 v* }9 X# A5 t/ C//取消:- p* t- D/ V4 R& e' E
clearInterval(t)
3 g, j- y' H( f9 T</code></pre>
5 }/ O. U5 s  Q9 e0 e# s: u! X1 a" z4 j' ^
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-6-15 16:15 , Processed in 0.070151 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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