飞雪团队

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

前端之JavaScript

[复制链接]

8993

主题

9081

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29309
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
( L( I$ D7 c# i, d, @% |
<h1 id="前端之javascript">前端之JavaScript</h1>
1 ?/ S% Y$ x( ^% ?5 l<p></p><p></p>% Z5 o" m* \- }3 Q( K. ~( q
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>- v" _7 N6 ^" f( H7 [" B
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>  i- x. P9 Z3 U8 r
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>3 U8 o: D1 }4 ^2 J
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>4 x' O( ?  v$ i6 u; w
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>9 d4 m) X2 \# x7 |& F8 \
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
8 A0 W. Z. M3 M& l% y% S4 t; g" S<h3 id="21-注释">2.1 注释</h3>
# h. h3 l% r( m<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>' ?3 ^/ y4 N/ S6 _4 l
<pre><code class="language-javascript">// 这是单行注释
0 d0 z4 J2 d  d, ]) x
" w" q, E1 n6 L/*
; }3 ~7 `4 @: u% W4 N6 E+ Q8 Z  `这是多行注释的第一行,
2 i" e1 K) S. |! [# [  b这是第二行。
6 V3 c' O# E4 V1 R# S- }& X+ o*/
$ O3 Z, N2 V8 H0 Z</code></pre>
( q9 Q" U# l8 z8 Z) |# r! K8 h; r<h3 id="22-变量和常量">2.2 变量和常量</h3>
. c5 Y6 @0 ^" Z  Q9 S/ a0 ]* t- X<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
4 h' s, n2 J6 b4 C: Y<ul>5 p: {3 P2 Z5 \& s9 {% J, V' f
<li>变量必须以字母开头</li>
* a! H& y0 Q$ k8 ^, m" z( G<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>0 Z* \2 x) a& s) g
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
9 \5 K3 T$ Q8 R) l9 A: M</ul>
1 n  S' Q; }1 L4 k7 v" s+ q& b$ L8 _<p><code>var</code>定义的都为全局变量</p>8 Z% m* e9 Y: w
<p><code>let</code>可以声明局部变量</p>  Q& l! N# L1 z7 ~! W8 s% g; W0 U) y
<p><strong>声明变量:</strong></p>" h2 S1 @3 l' s8 D
<pre><code class="language-javascript">// 定义单个变量6 f: W/ s& i. G3 x8 Y" C
&gt; var name' m+ H8 \& _( X, H9 ^7 N2 s
&gt; name = 'Hans'6 b3 T0 T' Q8 o/ A+ X, p$ t
//定义并赋值
8 Z- B! W4 N8 F+ k&gt; var name = 'Hans'
) ~# ^& \7 A8 a+ M&gt; name
# g/ ~) V0 o: N0 o( D& i  |- {3 R& F'Hans') J: p! y% Z1 y1 v; G6 q$ U/ f

% \/ C! B0 U5 u// 定义多个变量
8 _3 d# k' G( ?/ `& _0 Y&gt; var name = "Hans", age = 18
! g& J3 C* g, l3 X6 X! Q! a, s; G) J" r&gt; name
, E1 @0 L, M8 q$ d  N& t'Hans'
* J6 Q7 U0 N2 [( E9 l&gt; age0 M6 y. j2 F& c$ n6 J
189 U0 @, s/ U  }5 Y/ L

; r8 G; f% Z3 [6 H7 K//多行使用反引号`` 类型python中的三引号" g) P8 }4 {: {8 i" r- D' t& F
&gt; var text = `A young idler,7 k' q2 k6 ?& |& V
an old beggar`
8 b8 I) E& }+ n4 Q$ |- z&gt; text
. v9 _% z/ d* W2 X'A young idler,\nan old beggar'
5 L# `; R& j/ W4 N( c- @</code></pre>+ c* J1 H- V. G9 v7 L7 Z( M. k
<p><strong>声明常量:</strong></p>7 M& n1 F8 _! d' G
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& ~7 Q' d# ^6 P7 F# W<pre><code class="language-javascript">&gt; const pi = 3.14
' R1 f: `9 x5 E6 b) x5 u&gt; pi
8 c; W+ g$ g5 w3.14  P8 |2 N. A" P3 [+ f4 N
&gt;  pi = 3.01' v1 e& f% ~# A3 h# ~
Uncaught TypeError: Assignment to constant variable.
, Q; u' `- u% A6 X    at &lt;anonymous&gt;:1:44 t. z' C) ^- E, D( x
$ l. }3 [' z% n+ b0 m
</code></pre>! V& b6 B3 j2 s5 D& {
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>$ A4 k/ x) J# w2 x
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>- V. _- w5 W* t% N3 U
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>, N4 J4 @0 b' _7 {  Z6 x) `$ Z! V0 r
<h4 id="231-number类型">2.3.1 Number类型</h4>' `# l0 P: T* z- ?" b3 p
<pre><code class="language-javascript">&gt; var a = 5/ \; a& t9 _- y4 k
&gt; typeof a   //查看变量的类型  & |4 ~* Y8 N6 k
number
0 I& t6 D' f9 D% f: V0 U5 ^( J; x- \: d0 r# I0 c  r
&gt; var b = 1.3
! P# b8 m! ?8 z: k4 z&gt; typeof b
* L- W$ @5 ]( {4 |6 Hnumber5 W+ |! A( {+ j, A8 o' F6 d5 a, ~6 d
& Y0 \7 R# ~- J  _8 e" h
// 不管整型还是浮点型打开出来的结果都是number类型- a8 m3 J# `& V. G$ \

" V  l  b/ ]9 c7 r. l# t6 w: L/** N. C: I5 J+ L5 k
NaN:Not A Number+ f) c4 C( ~6 d. a' k  D
NaN属于数值类型 表示的意思是 不是一个数字
2 e1 Y9 h, p! x. M8 r*/
  y( R% J1 Y& f( \: @$ `2 _" b' e
1 `2 [/ L  h) b& B7 d( _parseInt('2345')  // 转整型
7 }( B5 J7 {1 ^2 i+ r1 W2345  c& p% V9 Y- J( j+ S8 [! ~. l
parseInt('2345.5')
4 d- k7 G+ O3 w) z2 }2345; R2 ~  E% y1 }  Z: `: v" t+ t
parseFloat('2345.5') // 转浮点型( P6 w3 j9 M; M7 [2 s
2345.5
! W. ?8 D" K7 d9 zparseFloat('ABC')6 T7 S3 {+ {" Z' S6 \8 r
NaN/ s. i; W; \: r
parseInt('abc')8 u% w$ w; i$ B/ t- W
NaN0 ]; e9 P. t/ X6 T. Z$ A
</code></pre>
1 j5 p  W: |) Q; C+ I- i+ P' e+ U1 t$ K" K<h4 id="232-string类型">2.3.2 String类型</h4>
7 F& Z: {; O! K, j# g" v" d+ T0 w<pre><code class="language-javascript">&gt; var name = 'Hans'
- P8 V/ `4 W) s  ~- @&gt; typeof name8 y9 z! v& H# c6 n; l1 I
'string'9 {3 j9 f& ~, B( I. k
- W: e5 u, {+ Z; I1 F
//常用方法
" V4 s; ]) n; N8 x. ]// 变量值长度
  \# h  l! ]: Y&gt; name.length5 @& K7 }+ ?1 i( W
48 F( E  t* Q# a! {
// trim() 移除空白  O& C* @! @7 w" y" c2 e( T
&gt; var a = '    ABC    '
( l; L" K. l  L; K( H# i&gt; a1 a! [6 h5 u: [
'    ABC    '
% i$ v; S$ ~# ~/ P8 g- E&gt; a.trim()  v' Y# h* r2 }5 S
'ABC'
* \/ T$ W$ o1 n5 Y//移除左边的空白, X1 }; ]) J0 z$ b1 c3 j
&gt; a.trimLeft()3 o: N$ e0 D" ^7 m
'ABC    '
9 S6 G+ O6 m8 ~& a0 `- r4 m$ h//移除右边的空白8 R% `# u# ]% G# j
&gt; a.trimRight()
% X0 u% N! l. d( k1 E, a% b) b'    ABC'
$ w# k0 w  e7 C% Y, G
) w, {8 C' A/ \6 ^//返回第n个字符,从0开始
" K& ]& I% c3 n* o* K&gt; name
: \+ P5 z0 R; c$ o! ~) A'Hans'
7 p. R1 \4 E. W! c3 |& Z&gt; name.charAt(3)
. R# m3 q; t: Z1 d's'6 q( e- F' E9 R8 R- \( i; @
&gt; name.charAt()
# ]0 X- E0 @9 F'H'
" ]$ }1 H1 d9 ?. w4 X- I- s&gt; name.charAt(1)
$ e4 L# v5 d, d* _9 ~3 b'a'
* \! r  L* D' O! x  h" `, I5 D' w2 H2 t9 X9 {4 R
// 在javascript中推荐使用加号(+)拼接
# m* Q3 E( T% ^( Q, q&gt; name
+ k$ e3 x9 M% M'Hans'
, N# A: Q0 J( [&gt; a0 n, }# T/ b; O  z( v, _8 `. Z
'    ABC    '
$ p: K9 Q* t! R&gt; name + a
: o; {9 |( L  _' V1 U1 u; c( C( }4 }'Hans    ABC    '
/ N3 b/ y* P* u9 y+ D. G// 使用concat拼接" c4 S, R; R( l2 n
&gt; name.concat(a)9 J: o& r- s- N" Z1 @" i
'Hans    ABC    '
$ H1 i" h1 F* _  n3 p: T; ]! q# h& ^* {6 N/ Q7 @" V" p
//indexOf(substring, start)子序列位置
+ F+ A  |/ b5 Q4 O1 V% R( T0 R) D2 e7 m" J, j
&gt; text
- A% Y& X% d* B3 ?'A young idler,\nan old beggar'
. t0 {) h2 L9 j1 }# ?&gt; text.indexOf('young',0)
2 A, a" |" J% s( D2
5 g( B- C9 m  s" V" U- m/ l; e5 P8 F) j) p& R. @
//.substring(from, to)        根据索引获取子序列, k" N- g' z1 H6 I) V+ O
&gt; text.substring(0,)
. H9 t1 L6 G* a3 R. W' b'A young idler,\nan old beggar'. ~7 N. J6 e% O1 U9 [
&gt; text.substring(0,10)
  q" v. M" Y- F# w'A young id'5 Z8 ~/ \/ G1 g' p
# i) U2 p4 b7 d3 T# J# M
// .slice(start, end)        切片, 从0开始顾头不顾尾) ~( C* V$ U; y7 l/ n- B' Z. [
&gt; name.slice(0,3)& W; G* \) }3 B# g! G
'Han'+ N' e) q) @  d. V9 Y2 R+ L# U
( v0 X# S( u$ W2 E  u' e
// 转小写
' z* E2 Z  O  z& \&gt; name
4 Y2 O+ D# T) e'Hans'
3 |( i' S4 \: `; j&gt; name.toLowerCase(). l5 i8 L' A+ X0 _" m
'hans', E$ m; p% k6 E
// 转大写
. G# {. Z  }3 O+ f+ a&gt; name.toUpperCase()
/ y  b, k) t- [) H' \$ a' m'HANS'% D3 ~2 f" \. z5 {
6 o8 H/ C& L: t9 C9 z
// 分隔
3 K& \/ k+ @& U; K&gt; name
8 s! u2 `+ \, @- |8 n8 r: `2 I3 @'Hans'3 k& x0 \# S0 c) U/ h5 h
&gt; name.split('a')
" `$ x: I1 E  {$ \' E- Y& R(2)&nbsp;['H', 'ns']; i9 g1 ?; S' `  L; _
</code></pre>' @6 y0 Q/ x$ i1 u: M5 u& d3 j
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* e6 Z0 m5 A6 U% M8 G" L& _' T" d<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>/ `2 q* y% h2 n( B6 S$ E' E
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
3 U8 T3 u0 ?1 \( T& J( e<p><strong>null和undefined</strong></p>9 \& C1 t3 o9 T* X, ^% @
<ul>/ u7 ?3 R" |# b; D8 D( ^
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
1 U) ~+ N& q2 G& }% T+ w<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>+ C1 V+ J9 D8 }, L
</ul>% m- ]/ _, \9 s! f! p
<h4 id="234-array数组">2.3.4 Array数组</h4>
8 {! S+ R4 X& v6 i6 M: a9 I<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>; h# a5 D% j6 _: u
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']   x& J9 g0 |1 Q" F0 z
&gt; array1
0 F* ^! E$ q% R& ^9 y8 S(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! h6 E3 m4 M! ]' \
&gt; console.log(array1[2])  //console.log打印类似python中的print' v  M- t9 @& V
38 `. x5 R/ M; C$ v( P8 _; p. Z. D# k
// length元素个数; ~2 N! r& x" {( o0 i! U/ c  ~
&gt; array1.length
" L2 f* h+ }) A3 K3 Z; |6. j) Z+ `( m, n# O  l3 i
// 在尾部增加元素,类型append
* A: J, x. |5 n% B) U&gt; array1.push('D')
# O9 k, V" [( F* L- a+ Z" _7
4 i8 v/ a  T7 E" o&gt; array1! j& r* M5 F2 V0 v( r' O. k
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
: I& d' R& g9 c. D# r# ~+ J// 在头部增加元素
1 C. i4 [! O9 S& G( }/ M6 ?8 V&gt; array1.unshift(0)
2 f7 |  l' U; e- b5 E# p8
" ^: u3 i+ |. b4 `&gt; array10 F- V3 T' H, v3 _' ~4 N& V' I) M
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( F% D( ]( K: o

, K" T/ g" o7 b7 C4 H7 [* [" _0 }//取最后一个元素  y% K1 v5 e( z1 W
&gt; array1.pop()
5 U9 E3 E  ~" L7 {# F/ _6 e'D'
, \9 a+ X+ k; x9 b  V; }7 K$ g&gt; array1
9 M8 e1 j# Q$ V: I(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']9 p( E8 t, l7 j6 N% G6 E1 n
//取头部元素4 s" O# G' B* N5 a; E
&gt; array1.shift()
0 g  [# O/ u- g0 w6 _0
, c/ z2 s& b2 N! i' C! V, l$ X2 u&gt; array1: }6 e, w* W  S% E- P
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ S3 E3 D5 K& d8 N0 O/ E9 K0 ?0 q/ }3 q* W
//切片, 从0开始顾头不顾尾% V4 S+ G( h6 [" G
&gt; array1.slice(3,6)( z) U7 h8 k% U  j! }6 v1 g
(3)&nbsp;['a', 'b', 'c']1 V/ n: h- i' P( x9 K; c
// 反转
4 a& H8 U# _, X( Z* N5 i&gt; array1.reverse()
  q* k# m! m( X5 Y' H(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
* n& A  w2 f- z1 }1 I$ z$ E* q// 将数组元素连接成字符串
- K" g: x4 n! {6 t&gt; array1.join() // 什么不都写默认使用逗号分隔9 n4 [5 X9 n, I7 O5 `! q
'c,b,a,3,2,1'
5 j* r3 r, i; G9 l6 J&gt; array1.join('')
4 ^! K: u0 s( Y5 U6 b1 i) p% v'cba321'
) s( L0 o9 m4 y) [, p4 E&gt; array1.join('|')
# Q; N1 ^# q: l'c|b|a|3|2|1'2 h$ N" j+ |% x# o" E

* I( S: M1 v& t/ ]4 N, y// 连接数组
3 ?9 ?$ }# ~, U" m&gt; var array2 = ['A','B','C']
0 A& g) K4 f  u. {/ C+ S; w3 {6 _&gt; array1.concat(array2)# ^, l( n1 D) Z1 P$ T" }; _
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
: i/ O8 z: p1 q. |, l4 C
9 ^( u! [6 k8 j' E3 j- X// 排序: c6 s( Y* h1 G6 Y2 v
&gt; array1.sort()
2 n3 F3 V' W3 `6 ~(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ D- A. S% e& `, G4 C2 a  V3 f
6 B# v! s3 {3 c1 V
// 删除元素,并可以向数据组中添加新元素(可选)
2 A! z' P! d: X+ N0 w6 Q&gt; array1.splice(3,3)  // 删除元素- m/ Z+ W/ n2 k
(3)&nbsp;['a', 'b', 'c']
4 V- P" o5 r3 Y4 r&gt; array1# W# L% Z6 r! A2 h
(3)&nbsp;[1, 2, 3]
; T1 K+ D8 r3 \* P8 j&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
$ A: w, {" _0 ^- d[]
1 b9 P  ^/ ^& M0 u9 E' l&gt; array1; Z7 j3 x( V* U# N& `+ f
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']$ R1 {; E+ z! t7 d- p0 h8 {

  z* u8 T# b2 x0 r/*2 B  E1 Y- N$ j8 D3 B
splice(index,howmany,item1,.....,itemX)
% ]. K( r+ ]' j5 B5 r  x. Tindex:必需,必须是数字。规定从何处添加/删除元素。; H6 ?7 c% B9 ]* G: e
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
: F9 b" Q$ B" v  eitem1, ..., itemX        可选。要添加到数组的新元素
$ P- p6 r( v3 M1 Q* r*/
0 z* m4 h$ B% ?2 s6 t. W6 \$ s: }5 M2 N5 z( b/ j& ~
// forEach()        将数组的每个元素传递给回调函数& D+ j4 g. m0 `6 a3 g
&gt; array1.forEach(function test(n){console.log(n)})# B( u! l1 o5 f8 q* `, Z$ {
1
# h( q( y' T. K5 t$ o0 T- x6 a 2
# y$ m- y5 D! _9 t 37 ^0 m, e! G; ~; X
A% R% }9 O5 C) l( g; i
B$ m% j% Z, c3 ^/ m" L
C- `- J. G+ {& f" c, W9 j
// 返回一个数组元素调用函数处理后的值的新数组* h! D7 l/ X6 C! E
&gt; array1.map(function(value){return value +1})4 p" b# @0 S" Q0 n
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']1 z, L" K" {$ l3 Z
</code></pre>" p* h) ^0 R1 c: Q7 h
<h3 id="24-运算符">2.4 运算符</h3>
7 I3 c( M2 a% P! [/ C0 a. n+ q<h4 id="241-数学运算符">2.4.1 数学运算符</h4>- P. t  v' V: U, p
<p><code>+ - * / % ++ --</code></p>
! K+ J$ @3 I6 |4 N& m7 u<pre><code class="language-javascript">&gt; var a = 6
' H% t" A% S5 A1 R/ k, B/ {# ^# H&gt; var b = 3
( W; P4 r2 ]+ _% S( I2 p# T// 加
' w7 ?* q) |& H4 T&gt; a + b' h, I+ X* ]  d
9# b, y2 s+ ]/ @# S& o6 [  B
// 减
) A1 z) U8 Y! W6 ^&gt; a - b
! i3 T4 C. }& P: p6 q4 Q3/ j& u: Q$ Y2 k: R: W
// 乘
* a$ `: i# _& B  b# \&gt; a * b
6 E. }& D+ j, A, f) T183 l3 p6 ?5 P/ q' m+ z% G# s
// 除% g/ e0 H9 @6 A' B
&gt; a / b7 p; q+ s: R9 W3 x" C! v, y0 p
2
+ c% M, B# o: z) B" G. Z// 取模(取余)
$ m& M" D& z4 T& t, I&gt; a % b
1 e$ o! `$ h, c( p7 s; _04 @1 o, N5 a- x' I0 {( o
// 自增1(先赋值再增1)$ U) K; ?9 h* \3 c: X
&gt; a++! a- u4 e# L; L" N& k
60 e- G% G0 g5 p# D5 S5 m
&gt; a
9 ?& m: ?/ L7 R8 M7) `& y  ~+ `% K
// 自减1(先赋值再减1)
1 k7 x$ Y  d8 y! ^( _&gt; a--$ j* Q) ?  c$ n( u, D( F4 b4 P
7& `( P: @- @" p; C8 f8 I
&gt; a$ i5 G/ D/ p. z+ m
6! c; I6 W6 d& O! C% S6 Q( x! d
// 自增1(先增1再赋值)" A/ _* l! I! {! o' b
&gt; ++a
% Q! k& i' g. g& p2 d7! O7 v% w8 S8 g0 p7 D7 O
// 自减1(先减1再赋值)9 k4 Y8 k6 j" Z) o2 P
&gt; --a
3 ?  r3 V3 A- _6
9 r# J0 g/ h7 e&gt; a# i! y& W2 N1 G" d0 ~/ u$ c
64 y) _5 N' e' _' b

' c/ r6 ], J3 k//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理; y) M' o+ z# L6 x! ]+ z: y
</code></pre>, C  N$ g% z6 Q" u# I5 U
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>4 r* @' i/ {- q* ?6 U( v
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
/ O8 V2 T6 A$ c6 Z<pre><code class="language-javascript">// 大于
7 g& v3 ^  }8 ~6 W( D5 e5 N  Q&gt; a &gt; b6 V0 s- r9 t- g" u2 a7 `# q
true
3 S: h% p- B8 ~3 U// 大于等于' N! p" F, Y# X$ }/ [
&gt; a &gt;= b
! n+ k9 t+ I5 x, y2 ?true/ |' a. Q3 [5 x" J! Y
// 小于
' ?5 ~! l7 m6 B# E$ M* O&gt; a &lt; b9 W# A6 ^2 y' O9 Z  ^# o9 l' G
false
- L3 l! z5 Z" q% R1 X1 B6 P// 小于等于
/ H: ]2 _9 G( ?! M$ }&gt; a &lt;= b
8 Q$ `  t1 K$ @$ [) l* j0 Y; Jfalse9 x  {! h) w$ l! c
// 弱不等于
9 s& `5 Q; u9 _7 v&gt; a != b
9 v0 _1 g1 g6 a# Q1 i5 [9 P( [2 Btrue
- ], r+ ]$ ]4 J1 x( w( d/ k// 弱等于7 g9 u$ S: x% T. E- j
&gt; 1 == '1'
' U% n  T/ |: ~. ?4 E! Etrue4 m. D7 c$ k6 E. t3 V. Q/ ?1 N
// 强等于
6 a2 v. T" a8 }; h&gt; 1 === '1'# f3 m/ i1 V# \+ C( a- d& g
false3 b' y. @' Y5 i1 t  b
// 强不等于1 M: O% s& `4 E8 [. O, F
&gt; 1 !== '1'2 v! O, m& A+ F1 q" ^
true
- c1 y5 O3 t" k/ I
! l: M, j; V; x, k8 y/*
* c9 S* h9 m: E$ ~: g. SJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误3 r9 d6 J, P' B9 m6 t( G
*/
$ ], z5 ]; S  u8 d% {</code></pre>! r8 |' p: x4 |7 v- K" B% r. Q
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
& O! b* L1 T0 R& A  j6 H<p><code>&amp;&amp; || !</code></p>" x) ^5 {; E, ?  l& l% Q+ ]0 T* b
<pre><code class="language-javascript">&amp;&amp; 与
# l+ A1 J" t' |" l2 v1 T$ @; R6 C|| or
' R+ r7 Z5 Y1 z; l  W! 非, m0 J0 l& w1 v, p$ R. N) j3 `8 {
</code></pre>
* W* K) R, o: P, o/ u; h<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
  ]; `* E( V5 d' Q9 f; l8 H& d<p><code>= += -= *= /=</code></p>3 X# ?: B5 x4 h1 F$ R6 ^
<pre><code class="language-javascript">// 赋值
- _! A2 ~9 n! e. U&gt; var x = 3% ^0 T7 l2 Z* A0 R: q9 ^
// 加等于
( `7 u: w* S7 X7 }# y$ m&gt; x += 2
4 v: R: v" T* L; ?' q4 N/ S( T/ a5
+ D; O" T) o$ L; x// 减等于/ `: j0 ]. k( M9 x+ \9 F. B+ s0 S
&gt; x -= 1
$ o0 E( N% U4 n  d4
, l3 W5 U' N) w1 y- i8 r// 乘等于
! T3 H3 L* F( z( P% q&gt; x *= 2
! g+ d3 @) a! N( v# I8( U1 W) n7 c: R* t2 T) \! ^
// 除等于
+ N1 `: z' C& p( v/ t5 S&gt; x /= 2, F7 n( ^: q/ J$ a7 h) J4 B
4
" U+ w0 f5 X: [2 s' P8 J% U</code></pre>! y! H0 j( y7 [  u" P: K
<h3 id="25-流程控制">2.5 流程控制</h3>, ?1 Y, _& x% P; m/ t. Y
<h4 id="251-if">2.5.1 if</h4>
1 ]( k8 A, R# M5 ~8 V<pre><code class="language-javascript">1, if(条件){条件成立执行代码}  n/ g$ U3 c2 J* T
) x, a! X: Q0 r" |$ g& r& d0 q
&gt; var x = 34 Y& Q6 i8 j2 D5 x, O2 @+ O# x
&gt; if (x &gt; 2){console.log("OK")}0 v7 k! a# }7 {- L+ @
OK& h/ v. L2 h, u" k

+ ]0 }3 R+ y0 K2, if(条件){条件成立执行代码}
7 F: T4 B4 f& C3 O, s! e        else{条件不成立执行代码}
( r& W' u  L9 H- s; m
1 {: {; k8 w* u9 S&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
8 Q$ {* k  f# S'NO'! z6 p$ Y% J5 U& G  j
! C+ k8 }$ L4 k2 y( v
3, if(条件1){条件1成立执行代码}
/ N7 U  _0 y- \1 Z9 q$ K        else if(条件2){条件2成立执行代码}+ |0 d% g# K- E5 |5 m% c- a
    else{上面条件都不成立执行代码}
) j+ L; n: S+ M6 g9 z0 W( w8 `
$ G2 w5 n3 t  g- N6 [&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}* v9 ?& D; K2 B7 e. e' _6 n4 N
Ha$ k2 m/ E% j1 b: U0 [
</code></pre>' _% n; E. g8 B: p& @, x8 g
<h4 id="252-switch">2.5.2 switch</h4>
& Z& `. y6 s) \6 H) J<pre><code class="language-javascript">var day = new Date().getDay();
. L5 ~1 m  y+ s" T) n, |" bswitch (day) {& B. g% s& a+ `7 [; X
  case 0:4 j  w" m% c2 E3 I
  console.log("Sunday");
/ m' C' i6 i* n8 H% A2 a) D  break;
$ s# f6 w  K3 L" m) ?* q1 `  case 1:( W5 A3 e' A) ?2 \: n# z
  console.log("Monday");
9 I* g; A, P& d/ m  break;# s0 W6 A4 C9 s7 N2 v' }0 r
default:
, A2 N# n" Z( F( o( b1 u1 K  console.log("不在范围")
4 t/ e; w  Y0 c2 {' h# j}* n9 ~) B0 {8 k2 K: M
不在范围
: G" P) U6 \+ X9 f4 M4 D</code></pre>
4 B0 n: _) J" r0 j& J* m<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
+ O# l* m4 m. P+ s0 ?# x, x  ~5 H<h4 id="253-for">2.5.3 for</h4>
: x# v# s8 N: `4 Q) \( q<pre><code class="language-python">// for 循环1 E) K- G5 n# l; h5 s; I
        for(起始值;循环条件;每次循环后执行的操作){
% o/ v" ~7 W0 K6 g+ h/ a3 M' E        for循环体代码
: b. S$ f9 J9 j* f/ {% I, u' t' z    }
2 F0 b2 }$ J& K) o
3 h. \5 O, x2 J$ o9 Q+ P  wfor (var i = 0; i&lt;10; i++){
* N6 L' g; i' t6 Q9 M    console.log(i)4 X; B) C! n2 E: s1 S) M. f) w
}
6 p- `3 I8 v2 B8 F- V8 g        0
$ c) y# s- b) L        1
. Q4 k( i/ u4 A9 N5 p        2
( T) H0 r5 F% Z3 L' y$ b; n        3
3 \  I# T- \% E8 o" L+ ^. c( v2 J        4
5 r8 W5 O$ Q8 k        55 z4 \0 m: b! L. M/ _# R$ g
        6# M: g1 _& e6 v
        7
' q: _8 l/ {( U9 \2 e5 @. d' I        84 U$ [- _1 x3 [* ^0 ~3 M) p  G  L
        9
: T5 e( U3 c( d: @7 k6 y</code></pre>3 \! C: r6 ~- E& v7 d  e
<h4 id="254-while">2.5.4 while</h4>
3 V6 h" C) ]; i5 L0 _) b9 U<pre><code class="language-javascript">// while 循环
& Y* O2 O- K- u8 [: E- A2 ?9 o        while(循环条件){
7 \  D: ^# }% _/ ?. @' M        循环体代码; L8 y9 V9 X( D7 B' v
    }
8 t4 j- Y4 w" a. n9 [) }5 x- f- F; ]' T  g
&gt; var i = 0
! V8 r8 `3 c: k6 O- `&gt; while(i&lt;10){4 v  `- J3 z! z, s7 e3 p
    console.log(i), s% }9 Q' `$ U
    i++
! Y- H0 A, k' s7 p3 E}8 J) I; y" d2 ~/ A8 N  b
04 n; [( \8 b, _5 ^9 v% O9 x
1# |1 Q1 z9 w# i7 t6 S; b! C4 m) Z/ g' t* i
2
. F8 o% G: N& @) l5 P2 e 3. A+ e9 M+ W" y6 T6 a
4* v8 O1 }* Y3 i* U9 z) n" W
5
" r5 u, k  W' r5 p9 ~- N. f 62 ~! m+ k: `" B% [" y
7
9 p" C5 d2 X* k 8* f& t: Q/ I( ?6 Y* L
9
4 F. Y! I$ ^2 J8 ?7 R3 a</code></pre>/ R. b  a; s( l  A4 m9 m  C
<h4 id="255-break和continue">2.5.5 break和continue</h4>8 G2 i$ [7 j' S* |
<pre><code class="language-javascript">// break. Q& y! S) g' J$ u
for (var i = 0; i&lt;10; i++){' Y4 b5 i6 W- ^6 d" U7 X8 T
    if (i == 5){break}; n" f' {# D4 ?* G! h5 P: k- D
    console.log(i)
0 }5 ]3 j; T+ z1 ^9 B}
% U- i: g( Z& T" e2 V 0) J: Q, E% j5 o" H7 c; x# y; P
1
( e9 y- M/ Z6 E+ d 2
/ E4 ?3 A( t/ U8 s  W' \. S4 Z 3
* N2 U' D+ L$ ^: [. v9 F6 B! ? 42 B/ n: ~- K* g
// continue# ], k! X6 ]9 p
for (var i = 0; i&lt;10; i++){! c0 O6 s' ]: }! D9 R
    if (i == 5){continue}9 S' O3 P1 l* Y! b/ v
    console.log(i)
( J% ^6 F/ `$ e}8 `( a+ ^$ @  n0 M% t
0
8 c/ t' N* V1 _ 1' |3 I3 V, i$ Y5 s. {/ r+ u
2  V) J6 ~* i2 r6 @  Q9 V* X3 d
3$ Z5 D/ }$ _6 S' A% j$ Q
4
$ g, I  U2 C% e; D5 ~ 68 a; {! S5 n4 l: ^( P' [. I9 \% w
7
3 J" B9 C0 m: B2 }# j 8+ b5 Z7 _: J# K, o- g- Y# ?
9) W: C. k1 ?% F

( s% r* x2 f  y- E5 e9 p: c</code></pre>
/ ?3 K0 S& N: e: x0 C( L<h3 id="26-三元运算">2.6 三元运算</h3>7 l2 s: ]/ L: F9 M! ~3 L+ ^. _
<pre><code class="language-javascript">&gt; a
% o. }* C2 u. j/ y* f# F6; ~4 u* P7 I; D3 k- F
&gt; b7 K4 f9 P" Z- [! o
3
- V0 t9 H# {& D* V  G5 N# Y8 }0 u3 V0 K% |4 E! X- X3 i
//条件成立c为a的值,不成立c为b的值$ ]1 w5 i5 q0 e1 v& g, K
&gt; var c = a &gt; b ? a : b0 _9 I" M0 b! g3 p3 ]3 [
&gt; c
+ ]4 m- p% A* U  }. h5 g) v69 i; K1 U* ^/ H3 }8 X( |

; P3 b1 R4 L" p( Z// 三元运算可以嵌套: x) N" Q6 V1 F& R1 [
</code></pre>' l* L' G7 }" K" S7 _
<h3 id="27-函数">2.7 函数</h3>
0 \2 P+ n; o, ?' z# R( d; ]<pre><code class="language-javascript">1. 普通函数
% A. F/ ~: U0 @$ d. A) W- B2 \&gt; function foo1(){
+ V' x% O. U7 `& w; c' O; @0 v    console.log("Hi")
4 Q0 @2 w: r4 d  A1 ^8 n" y}
1 {( x; w$ z8 Q9 B
8 e6 [4 |9 s+ _4 d$ a( L&gt; foo1()7 \7 {' K( V5 J) C; _
        Hi- c* h4 ~$ w- T6 ~
2. 带参数函数
5 d, T5 g3 k0 M&gt; function foo1(name){. W( q/ G  ^% T0 L1 N
console.log("Hi",name)5 v" r! J! \! L$ A' Y  o
}9 S) _+ t/ q' e0 h- H* V/ |

. `- S1 q2 U) y& ~1 V0 X# @% j! }) A&gt; foo1("Hans"). p1 y7 F" H; Q& G! I) Z
Hi Hans2 e. T! e# G" Z' w7 K
# s' Y4 K+ N* h7 ^) u$ Y
&gt; var name = "Hello"  ~5 p) [, Y3 Q+ d2 C+ Y0 |
&gt; foo1(name)' O0 a) K  [( v+ i8 m0 ]9 a# H' W
Hi Hello5 ?% I1 h1 [3 `( p7 W8 [( _% `# U1 t9 C0 l

) k% f3 q' n: E/ A! W& m+ x3. 带返回值函数, N  `+ a% ?7 J- r
&gt; function foo1(a,b){
( q! _. ?' [; S9 b        return a + b   
( I, c: P9 k1 h) J}
  k4 H! d9 `1 f8 A0 F1 U9 N$ j- E&gt; foo1(1,2)) I: X% c+ A# `( {7 I( ?. |6 S
3. Z3 K+ O5 J$ u7 q
&gt; var a = foo1(10,20)  //接受函数返回值% f) S# a, D/ w; t0 N% C
&gt; a4 g& P1 f4 c6 K7 Y9 ~$ K$ c
30
* s7 X6 E) i. b1 {! k
# ?. V  C  |% U% a8 c, V4. 匿名函数6 o0 E( B1 T' W. g7 j2 u5 h. K
&gt; var sum = function(a, b){2 T) ?6 Q1 Y5 ]" f
  return a + b;  x, R2 _% y% S8 C$ D
}
- d2 ~0 f3 c4 F& t7 }" O" ]6 P; Y&gt; sum(1,2)
/ w% k, s4 V! H  z- o37 h  L1 ?7 Q0 j. p4 {% m  f9 f& [

$ W8 E8 _$ `+ c$ t1 }// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
1 ]9 F3 Z9 r0 j&gt; (function(a, b){
! \7 K! g, ?) V8 Q; m" ~5 U  return a + b% }7 _, q4 u: T2 a) w; S) q; x
})(10, 20)
6 {# L/ V4 x! E308 [1 N& E! F; Z) j4 y6 }/ q
5 K: m" F2 o+ b& r/ k& d$ ?
5. 闭包函数, T9 R. T- b4 [# g7 N! t
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数+ m8 Y% T8 f) o, p, v
var city = "BJ"1 c# b. _+ Y7 x5 m- M! L2 q0 D
function f(){
& d% \7 c. T7 t4 D" V    var city = "SH": M" W& J+ [3 k; f3 H) Y
    function inner(){% `. G* q* k0 u. p
        console.log(city)
. z+ a0 ^1 ?$ h& i    }
8 l; t. q4 I; h) G6 g    return inner/ H. I! A, q8 G' {" t
}
" S/ R4 M# H/ U. W4 ]var ret = f()
, \$ B& }8 F; t8 p, a/ ^ret()
5 I9 a, Q  `& [* V- w执行结果:0 S" N, E% @) v7 @1 i8 a3 J
SH
) |8 b1 o: R. r% _* O
3 M3 t+ c8 h8 K4 X& D  R/ P</code></pre>  }2 o! I1 p: T9 f
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
: ~- Y0 T3 ~1 F<pre><code class="language-javascript">var f = v =&gt; v;; z. x/ f' `, k# E; `9 q
// 等同于# B7 p$ N# V" {
var f = function(v){
' X- B% N9 h$ y5 |  return v;
8 }) R4 X5 i" n. i. [' ~}
4 F2 @9 t7 O+ y  ~- {</code></pre>. W% d* R+ M5 V/ |" M* p
<p><code>arguments</code>参数 可以获取传入的所有数据</p>) Z% ?! a2 x2 t5 x' x  F0 X
<pre><code class="language-javascript">function foo1(a,b){$ I+ o# K2 Q4 N0 H/ w5 n  z# u
    console.log(arguments.length)  //参数的个数 * m; ?  `0 z* M, z( P# {
    console.log(arguments[0]) // 第一个参数的值
2 K2 Y3 M# D) o$ O6 H2 [        return a + b   + I: A: ?* r5 ~) Z. u! A( H
}
) R5 J+ H! z1 p% [( r/ {: _" ]3 Kfoo1(10,20)8 N$ E1 R: o; D& X/ _
结果:: |5 O4 X4 E* Z0 B! s( D9 A) U
2          //参数的个数 . u# t: i& c& D  O) b
10        // 第一个参数的值
/ y% E5 p1 w( d# `+ x  I1 {30        // 返回相加的结果8 R4 a1 K1 ?8 D* w1 w3 h
</code></pre># |; k- p4 M* v% ~- L
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 t9 W  s# X* r8 l2 E<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
/ Q1 i! U4 a- O: H; v7 H$ z<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>6 o+ S1 K$ {& n" \. O
<h4 id="281-date对象">2.8.1 Date对象</h4>
  a: @0 R7 ~8 y% e) E+ S; C<pre><code class="language-javascript">&gt; var data_test = new Date()$ K8 ~. \' m& Q* s8 e
&gt; data_test# p1 U' M/ {9 l; K, D# _7 H
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
( J. ]  _; s' M7 D&gt; data_test.toLocaleString(), e/ M7 l( X0 z- x
'2022/2/11 下午9:44:43'
, w8 y5 I# D/ ?; \6 c9 ]. C" W" E0 _. `5 {/ n8 [0 e( x6 Q
&gt; data_test.toLocaleDateString()/ x$ _  n9 W: }4 i
'2022/2/11'
3 d1 c5 F6 L: k  G% H) Z: H3 m( O. Y+ u* X, U( \
&gt; var data_test2  = new Date("2022/2/11 9:44:43")) K, ], s4 R, M  J2 ?
&gt; data_test2.toLocaleString()' L" s0 ]- W4 \* c' {% V- q" y
'2022/2/11 上午9:44:43', @: F, E7 S( w9 |
9 @5 b/ l! F: y
// 获取当前几号+ k1 a, X* _1 j5 I; L; z
&gt; data_test.getDate()' g3 W: I7 e+ v: H' Q: J
11$ d5 I9 E" |8 i3 P" [& i' y
// 获取星期几,数字表示
! a% ^5 H8 ~0 h6 r& A% P/ k5 C&gt; data_test.getDay()  
9 s, ]- ^& o  Y- x. a2 T' |5
3 B4 n$ _' }$ d- g2 Q& k3 G// 获取月份(0-11)
. l- ?+ S8 Q# j0 i&gt; data_test.getMonth()2 ~* m7 H! c$ i1 e
1
4 G2 K! z& S$ q// 获取完整年份
' M) \9 C3 {4 a6 P&gt; data_test.getFullYear()
0 d4 {" u* H4 b) _% m2022
$ X! q+ @. }) I// 获取时4 K( Q1 T' g0 w' @* z
&gt; data_test.getHours()! {) z! r" q2 ]/ K3 w; L2 @
21# [0 w" n, q$ H
// 获取分8 C: q; _3 h5 A5 R6 ]2 a
&gt; data_test.getMinutes()
8 K, V& r; U+ B- e7 z. L( b. Y3 l44! Z2 D0 j2 O6 ^8 k# t/ l+ z8 l
// 获取秒
. b$ y& A: K6 H0 C&gt; data_test.getSeconds()6 d; a; I" v" ?$ ^( x
43
: U/ r% b# I' j3 b9 H5 ~// 获取毫秒
' G1 E1 ?6 Z1 d! R8 X, v7 E7 d&gt; data_test.getMilliseconds()- u0 @# t" v2 g* |
2907 E1 u3 R. y# v
// 获取时间戳- O* B, N7 D. ^7 C) G
&gt; data_test.getTime()& O, K# H; F  u9 H3 K5 F6 G8 W
1644587083290, |4 V5 a5 L7 z" }4 `# [, c8 x
</code></pre>* F8 B* I0 g: o& B& }& q- M
<h4 id="282-json对象">2.8.2 Json对象</h4>0 W1 Z6 M) G% I& M- s' Q, s
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
& O( Z# y+ G/ C# u6 K6 G9 i! ?JSON.parse()  // 反序列化,把JSON字符串转换成对象
7 c: R0 P& \7 R1 u* d# z( N0 {0 s& q( n4 g
// 序列化' p* A' @, _4 T  e
&gt; var jstojson = JSON.stringify(person)
( m- c) h  S- c2 ]&gt; jstojson  1 _& Q( N$ E  a5 ~( }0 J
'{"Name":"Hans","Age":18}'
- B6 r2 x3 S) J$ V$ b8 T
+ T2 S: z$ t( @/ \' Y// 反序列化4 C( W, g3 l# t4 {1 Y
&gt; var x = JSON.parse(jstojson)
7 m8 r. v, b2 B( U9 d0 w6 ~&gt; x
$ J* F. b0 w3 g{Name: 'Hans', Age: 18}$ s7 Q+ `) z5 g2 Z3 ~9 D7 k
&gt; x.Age
. n2 v- \( j2 I4 |0 Q18; X3 x% H0 y  \  J1 \& S( N- ?4 J" O
</code></pre>% N% {! V. s* m1 `/ V
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
* J% s$ Z) ?) {, f$ v<p>正则</p>4 `4 G8 @& E" s/ M3 U
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ u) @% z0 F. I5 {
&gt; reg1$ k* s7 N, @, r4 a1 q$ m
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& g' o0 u8 d" u" I3 w&gt; reg1.test("Hans666")' j; T9 w) [' @2 u  A# ~
true% a% x8 w( ^- c6 z4 ]. i* C; Q( Q
& c% F( ~8 W8 h
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( Q# [! S  }2 g/ q&gt; reg2
+ Q. E( s+ u# M/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- x% p( m9 @! S  ?$ d) F&gt; reg2.test('Hasdfa')
; D& i0 ?( O4 i" I+ Mtrue
5 k% N) V3 |2 M/ v% ~
; P, B* b) d+ q, ?7 Q: I全局匹配:2 p; m2 J: [& g7 B  Q" v6 l
&gt; name
) \" R( ]3 @$ {; j! O* U( ['Hello', {+ k' y9 \+ p
&gt; name.match(/l/)* g+ Y* I" {& D1 |1 n# ?
['l', index: 2, input: 'Hello', groups: undefined]% V6 o$ Y" f7 b# s' h
! V5 d) Q0 q1 A4 Y, U
&gt; name.match(/l/g)
" D4 i, J& H# P4 y- R. l(2)&nbsp;['l', 'l']. c$ e! T$ [: w3 M
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
% F: H/ ~3 e$ s" ^3 s( q0 p# b7 `' Y  H2 w$ q1 ]
全局匹配注意事项:
- E% c) Z# O% F- P! M6 U&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
' \* \+ y0 \$ g; z&gt; reg2.test('Hasdfa')8 a, F/ i) u3 X" V% p! {/ b$ g
true# T+ o' R: i# s& M4 h2 y
&gt;reg2.lastIndex;
4 i: ~6 N2 q6 X0 ]% R66 W! {! j- z/ ~, Q* K* V
&gt; reg2.test('Hasdfa')
. F7 v1 F+ L+ ?( J5 o6 ^$ Gfalse/ l, d7 h0 o' S
&gt; reg2.lastIndex;
' k6 H. f0 Q# R2 B) d% A0  ^' Q: V) @. W! H' [1 O; G
&gt; reg2.test('Hasdfa')
2 w9 [% G4 ?) V( G* _- F: S* n6 F7 Etrue
& f% Z2 B* a0 d2 _3 m&gt; reg2.lastIndex;6 }, q* S6 a. `
6
$ F; a% f' w- E+ i&gt; reg2.test('Hasdfa')
+ j, g# m3 D8 U# U- [1 _false+ f) W( [2 i% \
&gt; reg2.lastIndex;
$ |; l) S6 ~/ `" u& O0
) n  v6 v7 J1 Y! u: B$ c' J+ ~1 \// 全局匹配会有一个lastindex属性/ _8 Y" y/ u& G. x) X
&gt; reg2.test()) `( z3 k/ c1 t1 r0 i, K" d$ R
false1 T: `; F& m. ^4 ^: @8 Q" |
&gt; reg2.test()6 X2 V3 L1 Q/ @5 {6 ~$ k5 d
true
. z, G! v, y- _6 l$ J9 k- F+ Z$ _// 校验时不传参数默认传的是undefined+ j/ C7 \- e! h
</code></pre>
! f/ b# {" L2 M4 d3 }& I<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 c3 @1 \/ j, a5 W6 l
<p>就相当于是<code>python</code>中的字典</p>8 e  c3 P  g) y7 ~
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
. n& ]9 V. J3 p" m  J&gt; person$ [8 ]3 o9 r. L9 ~/ d- R# G/ r
{Name: 'Hans', Age: 18}
, m$ x1 o) r5 X% t0 T  [&gt; person.Name
* b( J( o- g3 s4 O2 Z'Hans'3 J' k0 ^0 e2 `% b& `# D
&gt; person["Name"]; _/ ~" i" F0 E5 {
'Hans'
- U3 ~) @: ]$ E6 t1 O8 G" y0 L- S0 g% B7 |* }) b
// 也可以使用new Object创建
- q9 n  H; t  l+ b0 b* T&gt; var person2 = new Object()1 t/ y9 @) O4 N# @4 q
&gt; person2.name = "Hello"2 x4 X$ f& M% q! L; `5 X" h. K9 c
'Hello'& y, M, N5 M% w/ W3 U; V1 _* E% ?
&gt; person2.age = 20
! D7 p$ @+ F, Z% i& c$ o. v20
$ U( ]. {9 h* ?$ u8 c- B</code></pre>
' H% B. o3 o" v' U# d$ P% y<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
6 ~3 \+ W& h& x# P; i<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>: E: V# z" b# q9 `3 a
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
1 F: r8 V. s: N4 l0 s# \. }" g<h3 id="31-window-对象">3.1 window 对象</h3>0 _* }" p' \5 k" `% X4 X
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
3 Q, X! e6 d/ v: f9 ~' A, u  P<pre><code class="language-python">//览器窗口的内部高度
5 O) F9 v+ w4 Qwindow.innerHeight 7 S$ O$ s1 K2 j: b9 `  ^
7068 D0 q6 p3 c3 N% t" |
//浏览器窗口的内部宽度, {- V4 s- T! a6 B: {4 q) v5 N
window.innerWidth; L  `6 ]6 m  T' S( \* ]
1522
# ^; A8 q- a. @8 e4 g// 打开新窗口
2 J  r9 B3 Y6 P0 R( m8 i( [3 Twindow.open('https://www.baidu.com')
6 L; _0 `  ]5 A4 k. L2 ]; I- F# lWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}# r7 b" {+ Z) l. k: `% W+ J6 B; v0 c
// 关闭当前窗口
; `' H6 x: o9 O7 i/ uwindow.close()
% P, o0 `0 V$ M2 e9 i6 v//  后退一页
& u1 d1 W& e. w; _window.history.back()
1 K6 z8 r3 S# j7 I// 前进一页
) j; x% f# T( H" x/ Ywindow.history.forward() 6 q9 W- M! _& A. M
//Web浏览器全称! H: h# _1 m& j  Z' F
window.navigator.appName* w/ E4 c1 }  e* f$ ?$ A6 _
'Netscape') }  t$ D3 m# R5 |, t
// Web浏览器厂商和版本的详细字符串4 @, l9 u9 b' O( x* `8 O4 p
window.navigator.appVersion: C3 ^5 Q% {. V& C
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. ]! J* T& z4 m5 A! j" j- O// 客户端绝大部分信息5 d- o8 x3 a) E2 c: |; T) j, |
window.navigator.userAgent
4 _6 [- L0 t* S5 |( s7 A'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. r0 G5 r. s1 v' c5 s// 浏览器运行所在的操作系统
- L1 g7 ]% x1 N; V2 e8 ywindow.navigator.platform/ ^; G- t! \) D
'Win32'
3 B& _) L4 o7 C. r- t: Z1 P& ^5 l, l. p3 V
//  获取URL: _. @( w1 q5 d- @, r8 p
window.location.href) U' R( X" b- ?. W1 Z$ n
// 跳转到指定页面
2 Y% i3 y: c# i2 b3 x" x  ~- G) [window.location.href='https://www.baidu.com'
  D/ y$ D' c7 `) ^: Y! m// 重新加载页面
: i, J0 N8 c$ {4 p) Pwindow.location.reload()
* q9 W& Y: H; O# w# V</code></pre>3 G: |( [: K2 B% o/ y! P" J! {  V
<h3 id="32-弹出框">3.2 弹出框</h3>4 I6 Q/ B9 T% {; E) ?4 N
<p>三种消息框:警告框、确认框、提示框。</p>
0 B" W+ `& h$ |0 N5 p+ \<h4 id="321-警告框">3.2.1 警告框</h4>
4 N2 \+ h' y8 b. T0 M9 E( u; _<pre><code class="language-javascript">alert("Hello"), z3 a8 V; U  f2 K& W
</code></pre>
4 s) p9 }5 _, J$ @# k3 ^  m<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
/ A0 z' g7 A9 Q; }<h4 id="322-确认框">3.2.2 确认框</h4>% B/ q' f& G' B  ^8 d
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>/ ~6 r1 O( y6 w7 [+ B/ ^- m
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
  }4 k- i" f4 l% T  Mtrue
& l( Q) g# e4 C& c- }&gt; confirm("你确定吗?")  // 点取消返回false
/ P9 w" Y5 W, X% _& _1 p+ hfalse
# Q: C/ T5 f4 F</code></pre>
3 i% [+ @1 S& m+ b' @0 H" b<h4 id="323-提示框">3.2.3 提示框</h4>
8 F# e' r7 G2 U# o7 k, a7 C<p><code>prompt("请输入","提示")</code></p>" Q/ e, i, u" \  e
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
0 k6 i2 h$ Y: t<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>8 g5 Y  O& \2 ~* @9 q0 i
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
" G" J) E1 v2 E4 H6 m7 a<h3 id="33-计时相关">3.3 计时相关</h3>
4 k+ K  w  Z& I<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>: z0 R2 y7 a3 `( l- w: y
<pre><code class="language-javascript">// 等于3秒钟弹窗
5 i  f5 J( f3 Z& c5 asetTimeout(function(){alert("Hello")}, 3000)
: D* B/ j1 M! f! O2 O$ O7 T& j& I* ]- M% l& j4 p: M9 b
var t = setTimeout(function(){alert("Hello")}, 3000)  |/ b5 ?6 T& i1 B  r( U& n6 U

9 p1 y7 E! E& U/ K// 取消setTimeout设置
  f5 @/ p4 X; n& n5 \# ?+ I' cclearTimeout(t)) g8 r9 i# D3 s) t/ T, j; p
</code></pre>
0 v2 Y. `2 |: {' ^4 Y1 u. u8 O9 g<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
* h; s# _& F- o1 C8 o<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>7 V" p9 b3 G5 g' s! j
<pre><code class="language-javascript">每三秒弹出 "hello" :0 R, S+ ]* g& Y. P" q1 u
setInterval(function(){alert("Hello")},3000);
% l4 f9 }* b" r( `</code></pre>' g7 K* n/ X5 _! c& u; i5 F. F
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# E" {. k# ?6 s. X: L<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);- @! _! V! B$ B3 ~5 l" k3 x& C
//取消:
0 E7 m$ z) {/ Z" Y2 X1 X. T4 VclearInterval(t)) c& p3 v9 b5 N7 J
</code></pre>( h! C* }1 Q! t5 g( N9 `: a
0 M  L2 o' z# a+ I& J3 ^
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-7-12 09:06 , Processed in 0.071424 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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