飞雪团队

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

前端之JavaScript

[复制链接]

8993

主题

9081

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29309
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
. r1 N$ P' f* \
<h1 id="前端之javascript">前端之JavaScript</h1>; _+ j4 U5 t+ Q9 g4 y
<p></p><p></p>- M! s3 d' b' w- [( V1 f( R
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>" N) t3 M2 o7 l3 }
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>0 R2 Q- M0 ]8 T6 p  R- f
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>  e: Z1 k& B3 f( O0 M& h3 z5 P
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
# I* ?3 u# }4 M% j* L它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
0 [* d3 V/ F: Q! A' t& T( ?6 x<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>7 r$ E0 ^5 g$ ]' d, k
<h3 id="21-注释">2.1 注释</h3>
4 M7 J6 u. i% D$ M6 ]! q<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>0 c' T8 x' a6 |/ P* D# J" U4 ^6 Z
<pre><code class="language-javascript">// 这是单行注释
2 K% b; X( @5 h# Q1 S% s: \1 A  w1 J; d3 f  o: y
/*
" @% Q, o7 O! D  C- _+ A这是多行注释的第一行,
: A( s" K$ \/ {/ e这是第二行。
: B" ^: O. ?2 W- y*/
7 S0 t1 K9 d% A/ Q</code></pre>
# a) r/ w* S& s7 y<h3 id="22-变量和常量">2.2 变量和常量</h3>4 ^: E/ v) D  q0 }1 K2 f- O
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
+ T) k/ B  c( H* M0 r<ul>
+ q1 t- g$ X; A# ^: C# V# u<li>变量必须以字母开头</li>( ^/ W# v  `8 s
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. v. F/ m7 D$ j<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% ^" B; ~" y% D' @& q9 E( u* K
</ul>
$ j5 f. A8 W4 c: y* j; c# l0 x) b<p><code>var</code>定义的都为全局变量</p>
  Y% ]# J7 k2 G* ?' F<p><code>let</code>可以声明局部变量</p>& }6 H4 s1 n4 p* c5 A
<p><strong>声明变量:</strong></p>; X5 E. L3 W; _( m& n/ P& X2 _! P, U. U
<pre><code class="language-javascript">// 定义单个变量
- V/ L8 s" v! o& w2 L! D' }  v&gt; var name
0 }7 H  _/ H- X! r: z  C&gt; name = 'Hans'9 e, i( Y( |; {! \5 h; N
//定义并赋值
5 i, f- M% N, m5 q% w&gt; var name = 'Hans'
' W! g# P0 Z5 B4 b" d&gt; name6 ?1 l& M2 G4 n
'Hans'
$ H; B4 [+ K; w# {  x/ s" Q
5 }4 x2 E" y; v2 \" T// 定义多个变量
5 g0 B! P& i. A2 ~6 x5 g&gt; var name = "Hans", age = 18
1 `7 V( ]& T$ x1 t&gt; name& f" W* y' _6 P
'Hans'
* u8 x$ Q0 r2 |6 o# m- `5 }; P&gt; age
6 _8 I4 Q: l9 `" p) h( U18: L* O, \, z. P/ Q0 @# k1 t9 k) }
3 b7 \( l; U0 |, r. j$ }0 j1 X
//多行使用反引号`` 类型python中的三引号1 {/ d2 @$ z5 n! y  t
&gt; var text = `A young idler,
6 f- T) c# P( M8 H& E! X; ban old beggar`
1 w& m& w. n/ ]3 G. _! g$ y5 [&gt; text; e) R, h# M+ V, J" m+ _
'A young idler,\nan old beggar'
+ z/ g/ j5 f3 }2 s8 A: u6 s( E</code></pre>
) h* L, K  k+ X5 m<p><strong>声明常量:</strong></p>
' U; e& ?- R: l2 F3 s) o<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>+ `. w; d  `+ a. f
<pre><code class="language-javascript">&gt; const pi = 3.14
' g4 F0 s; g% P' w4 W. }& V2 ^2 `' W9 I&gt; pi6 k% E( t$ N. l  E( b/ h# u
3.14
* B, I' W! q* M3 S5 E4 d+ f&gt;  pi = 3.01. `, t% G* j7 X! E  y! w" w+ P: Z
Uncaught TypeError: Assignment to constant variable.
. T0 j6 F1 f" ~5 Y    at &lt;anonymous&gt;:1:4
3 e8 v) c0 A! R8 b* p* [* m, o+ G9 r3 |: \6 E
</code></pre>
) n5 d  |2 }# s<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
$ f; ~" y, V# P' z0 Z( p<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
, u* }6 ~6 w5 L  i<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
7 h# q% m- Q0 E# R) J+ N6 i<h4 id="231-number类型">2.3.1 Number类型</h4>- `+ N2 |8 G5 O
<pre><code class="language-javascript">&gt; var a = 55 e9 B' }1 y  U$ Y: }! X6 G1 A
&gt; typeof a   //查看变量的类型  6 Q1 w$ Z6 [) T. C! T. n
number
! T2 f# M1 m- R
, V! N- n; R' L6 h1 M( _&gt; var b = 1.3
: w, [( }. k  _2 U: V, p$ R&gt; typeof b# J. q( Z, b$ Y, A$ `
number( ^4 o" |+ I. Y1 S
6 H. }# ^* f' r6 W. g
// 不管整型还是浮点型打开出来的结果都是number类型: L& k( l: n% h: o# R  M* z
$ T* J  ^6 T+ D2 R! }+ X
/*
+ }/ V" t1 x: U  M" R9 JNaN:Not A Number
7 ~9 Y6 k% c# d: u, INaN属于数值类型 表示的意思是 不是一个数字5 @9 K+ i6 |) B$ e# y
*/2 u& M- L2 ?& h) P
! ^5 P. F; U& m
parseInt('2345')  // 转整型
1 j/ k+ A! P) d  u1 b2345
! L, t( x' H; }% H) x5 jparseInt('2345.5')0 h( A7 z1 ?- k7 s- W
23456 _: ~: w: L" J6 }& a* v
parseFloat('2345.5') // 转浮点型
$ k* f, `+ i4 `6 x2345.56 ^( r1 l# r# u, A. N% @% X
parseFloat('ABC')5 v( U" \8 J: k; d/ ^% \7 `  X
NaN
2 b( i; v8 B3 i) T5 x! Z% BparseInt('abc')3 ^! F2 X+ A. Z5 Z  @/ @
NaN; Y6 [, t  \& x6 u& D
</code></pre>3 ?$ g  h2 w1 u( e
<h4 id="232-string类型">2.3.2 String类型</h4>% ]# O5 U% }+ v' n! J: c5 v
<pre><code class="language-javascript">&gt; var name = 'Hans'/ Z; W4 e! J5 f: V' }5 Q
&gt; typeof name+ l, d3 S1 X) Y6 \- q
'string'
2 v% z' j" b# v8 E+ T% }0 @( j# I6 o3 i
//常用方法8 v  I, c/ A; V
// 变量值长度6 j  E5 c( c& u9 t5 d! i
&gt; name.length
4 Q% I/ T7 z6 r! Z5 P4
# E3 I6 h, ^. u0 _// trim() 移除空白# A; i$ i4 V0 G3 F# ?  k) c3 Q1 v
&gt; var a = '    ABC    '' J5 n0 C' r8 N5 ?! Z: _6 B
&gt; a
$ U" p1 t1 u3 N. t7 k, Z'    ABC    '
, T8 H; H1 z4 f# j) b0 O8 q&gt; a.trim()$ W' c' C) A& o+ Y3 o' U: h9 H6 G
'ABC'5 W& a( v# T  g% i$ A
//移除左边的空白" r5 a0 ^9 W2 _
&gt; a.trimLeft()8 X- y6 m+ u- E( f
'ABC    '# e; S2 T5 W" C  l- p5 _
//移除右边的空白
$ J% `# @. R9 v( g' k9 w&gt; a.trimRight()) ~7 S0 g/ v1 w1 Z4 {$ x
'    ABC'
* _& Q5 ^+ g( |7 ?' g% d* E4 l2 j$ l9 J3 ?4 a+ h: ?
//返回第n个字符,从0开始
' F, Y1 I9 R* N/ R/ m; L# t6 y&gt; name5 [7 a9 B' n" B) J
'Hans'
: o! @( _+ n+ U' U/ a7 Z8 V&gt; name.charAt(3)2 m, U  P& u% d: X
's'( _# o0 E2 V: r: C
&gt; name.charAt()/ J$ k" j2 v1 V$ ^$ L# @
'H'
- T$ G* z8 A, X/ ^: B&gt; name.charAt(1)( N) L2 h' Y, H
'a'
( \4 p1 n) }5 B3 E( `7 b& H
$ `, ~9 ~: Y6 _3 a; }// 在javascript中推荐使用加号(+)拼接
9 D, k1 G1 t) O2 r&gt; name) B) f5 C8 O; w; j2 o2 {8 x
'Hans'" t9 a" u. k- L# l9 o7 C
&gt; a( B% c1 K8 D9 a+ Y
'    ABC    '
  @5 V7 q% A+ \- {&gt; name + a
/ x& d+ d/ r& S- O+ R5 G7 K/ _  h'Hans    ABC    '
# R' a: ^5 z7 w/ C8 U// 使用concat拼接
" P* V* ~$ A5 o+ h; L+ Z, L&gt; name.concat(a)
) C+ c/ r8 W5 Y+ D: f'Hans    ABC    '9 A1 R- E! g& o- O7 K- x$ _

! a9 T* I( B' w( M% `: G. x4 [/ N//indexOf(substring, start)子序列位置
# U+ {* X- t# q: _1 b1 H: `$ q: |9 G% o* u% N
&gt; text# B! `# c& |. X$ H& {8 O/ D% N
'A young idler,\nan old beggar'
- M4 X1 o1 f' o+ `% X6 _( d6 u. r&gt; text.indexOf('young',0)$ V/ k* V: ]1 T. e3 j
2
' L  ?$ o6 U- F
- n& p6 W( V$ B//.substring(from, to)        根据索引获取子序列$ e4 M( Z( T( A( I3 e
&gt; text.substring(0,); P* w$ l' k: [4 E$ C- m: S+ v
'A young idler,\nan old beggar'
! e  i9 i$ ~  A: t&gt; text.substring(0,10)
- H) [, v. N, S# _" Q  i& M'A young id'  i# f/ Q! j4 p% e( {* c, f

9 B4 \7 [! N. f  G4 y: t// .slice(start, end)        切片, 从0开始顾头不顾尾
8 t% C. p% i/ i* K# L( o& }# d&gt; name.slice(0,3)0 K) u+ b1 p7 z% T6 f3 R
'Han'( b% Z0 m- ?9 f- I! ~' A

2 R- u$ n5 B$ ]6 r// 转小写  R. @' p3 C6 v5 x
&gt; name
  e0 g/ E' p! r/ b'Hans'
. K) l% Q  g( H: S&gt; name.toLowerCase()
" \$ L. N2 R7 C( q) u'hans'
+ J* z4 ]+ |9 G9 R6 K' k& S( b9 ~// 转大写8 L" C$ a6 o$ q) C# p& {
&gt; name.toUpperCase()
8 y6 }8 f* `- f+ A'HANS'$ N7 x( b% K+ U% w) k7 ^" J! Y

( a, u: g$ ?/ G/ K// 分隔
8 g2 B2 g7 K5 i* G! w. t&gt; name0 P: D+ z9 W0 u3 \; [
'Hans'" _# O3 d3 \  [8 }6 W
&gt; name.split('a')9 ~) _) J7 t/ X( f+ T0 p( [
(2)&nbsp;['H', 'ns']
) j' t5 _6 k8 I" O</code></pre>
8 U) r+ u" I4 o<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
/ F* ?3 @& X2 H/ B) o# Z<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>3 u/ `8 b/ o0 f4 [$ k) E
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>; N; S, ?8 `/ R# M  x! A$ q
<p><strong>null和undefined</strong></p>
# J" {* V3 Y4 c1 x6 \9 B<ul>( O8 O& o( ~8 C" g7 l5 G
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
( N% S) Z, m2 _. v- t' c4 H<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>/ h" C& U9 {  f7 u
</ul>
/ H6 n; X' G/ J$ D7 m<h4 id="234-array数组">2.3.4 Array数组</h4>
8 g6 W8 K# T. V: s1 l<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
( p5 W, T9 w' A# F8 t% z<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']   ]; z* e8 d+ o7 }) D, ]) e/ b
&gt; array15 b& [: A+ N) A
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* X4 Z+ ?' L0 {6 N- U9 o&gt; console.log(array1[2])  //console.log打印类似python中的print* z* v8 m( J* b
3
5 W% W1 P, E3 E0 q3 A// length元素个数+ X2 s3 @, A* y# ]. H6 |
&gt; array1.length  ?6 I  V, L+ v, I( U4 y" M
6
/ _* N! Q+ U, H, T// 在尾部增加元素,类型append
9 r# @9 m( V% x1 m6 G  P&gt; array1.push('D')* @# w% r2 B6 K+ h6 w! z3 @8 S% {
7
$ P4 A  p( U) j3 z&gt; array14 R2 X; A* P4 J" O* K
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D'], `% R; O) B& d2 b9 s9 L
// 在头部增加元素& E7 W* N. I7 Z% G& R4 Z1 j0 D0 o
&gt; array1.unshift(0)
# z2 N$ s% I. @, R2 C  P$ _8
% h- w+ V/ u! G* r* X/ I&gt; array1
& p' L" A. d/ T9 b  l; M' |(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
6 I" q) }$ Q/ Y2 ~4 _/ X& ~7 o# b2 t% a$ [' a# R' ^/ `" z; N
//取最后一个元素
- n( t  e: d/ N) I! G&gt; array1.pop(); k! Q2 K( ]( L% L/ O
'D'+ h( P: Y6 w# U1 D6 S
&gt; array1
3 ?! W* u6 k6 ^0 L! B; i6 t: G(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']& G; d6 l8 ]9 U% h
//取头部元素
# d' f( ^; N# T5 i7 o5 i&gt; array1.shift()
7 ]) c, D8 E1 w5 U% k! `# j0; F; x* g1 C) m$ m
&gt; array1! O! i- x! d' j1 h, M4 m
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 r' }, G0 f/ _, y- T1 S  h" z; }4 l5 o$ l
//切片, 从0开始顾头不顾尾/ ]; u! r( S! J# S: ]
&gt; array1.slice(3,6)
' i8 D) T: }( u4 Y(3)&nbsp;['a', 'b', 'c']  Z: l) O& ^9 n
// 反转; {! W* ^4 g5 l
&gt; array1.reverse()% A3 k! M/ x6 G0 ^5 ]
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
; t6 F5 {$ u1 P4 b" g: T# p" m// 将数组元素连接成字符串
  |* F) C3 G  v&gt; array1.join() // 什么不都写默认使用逗号分隔8 Z0 n! f) X/ Q2 e
'c,b,a,3,2,1'+ ?5 f+ j4 ]" O, E2 W- _. x
&gt; array1.join('')
0 F% P  T) U/ Q( T2 |8 ]' T: j; k; z- l'cba321'. e4 I: j& A. ^7 ^' H% Q
&gt; array1.join('|')
( K5 F6 S. [; y'c|b|a|3|2|1'; @1 w: ?- i* e& H* w, _

: o. E! r, |. u; P// 连接数组" z% V. t. O9 ?- X7 p. S. R
&gt; var array2 = ['A','B','C']
# b# D3 ~$ O2 s6 C* N&gt; array1.concat(array2)
/ R/ W/ X: {3 \3 M7 g; B(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
7 ]' P) x) M. K+ ~& X0 b
& P  m6 w" Q* t0 P6 a// 排序
, F: D/ A$ t2 p' }: ]; Y3 I&gt; array1.sort()! a6 m- Z- j  c# r
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* c" W. R! B7 P7 x4 Z5 N
: ^( @/ a0 ^& d// 删除元素,并可以向数据组中添加新元素(可选)0 D- i! B$ b" O/ ^) d
&gt; array1.splice(3,3)  // 删除元素
/ y: J. d' K! F+ U/ [(3)&nbsp;['a', 'b', 'c']+ e2 h2 j+ B% a6 e, d' @
&gt; array1
) a9 U6 o$ Z+ ~(3)&nbsp;[1, 2, 3]
% ^1 ?  q2 L7 a; f1 L&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
' Q- _6 R* {1 k[]  f/ s# V* A: ]' s. i* P1 |
&gt; array1
  _# Q9 `* Y  a7 w: |) v(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']% L" O3 F; E+ q& y0 z/ g1 s6 o9 S

3 p6 ~* E4 X. b7 |- [/*
1 C; z0 }% Y( N% B! b2 l, b5 [splice(index,howmany,item1,.....,itemX)2 S- {) r5 o2 e2 G! C1 M
index:必需,必须是数字。规定从何处添加/删除元素。6 k" }5 m0 R' Q- o/ C& |; N
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
! K1 w5 W9 b' g3 Qitem1, ..., itemX        可选。要添加到数组的新元素/ K  _  P- e9 O  g# p2 M! v/ X
*/
: L4 }9 L$ _* y0 Q+ \  }+ I7 ]; O' W: \/ T
// forEach()        将数组的每个元素传递给回调函数/ S9 C( M, }3 V9 v! w
&gt; array1.forEach(function test(n){console.log(n)})% P8 w* Y' |( R8 u6 F4 m* y
11 @; `9 D1 U$ ]
2
: `4 K6 E3 l* f1 e+ |$ e 3
+ P& {8 Z' }2 t A* p) z* g' T7 I% F, k) o
B
4 Y% T2 p2 |5 a9 Y: g C  ~0 e( R% x# q- p+ w& r( B; ^8 ~
// 返回一个数组元素调用函数处理后的值的新数组
) j0 n& L4 u4 H2 e% `1 c: ?/ Q&gt; array1.map(function(value){return value +1})
2 E( O% G' W: d. Y1 }(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']$ {" ^# e+ m7 R# r3 V# c: D
</code></pre>, E9 q' ]# h. k" d' W9 i6 \* f/ J1 M
<h3 id="24-运算符">2.4 运算符</h3>/ N- P, k: U' S7 L
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>8 ~& C% q5 U% T  G/ i; N; X
<p><code>+ - * / % ++ --</code></p>0 Z4 r2 s: H7 j) y, M7 r
<pre><code class="language-javascript">&gt; var a = 6
6 t! i) K6 y9 Z  M5 [) T4 J, Y&gt; var b = 3& p5 Y5 R/ G6 t7 ]
// 加2 M" ?4 C8 Q2 b' r2 o: S
&gt; a + b; s* f, f& R  |
9% K3 H! B. X% Y
// 减
$ _6 g' A9 Q( l2 `' _&gt; a - b9 E1 W! `- I% F& l6 K
39 H1 Y. V) N- Q
// 乘
( t( i% J! x1 Y+ a&gt; a * b
; q) E" n' ]6 j" f- s1 R180 F/ W& p  L- f+ L. R
// 除# s" |2 _; ^  g( O% u; T( [, e
&gt; a / b( s/ ]1 e* v  _
2
( g: o" S* \; y; Y// 取模(取余)! }, s, ?" D* Y2 m/ x
&gt; a % b
2 w. ]# C1 H/ M( A. B0$ S' h7 B: t! _/ {+ E  k" h4 P
// 自增1(先赋值再增1)
' M0 K( A% d6 E% m$ b&gt; a++/ Q- t; d$ e6 m1 P8 Q# X( f
6
7 q& T/ O. X/ F! _: R/ I2 H" S( Q&gt; a; @3 f6 _! D/ [6 t4 U
7
. ~; K& _: B. Y8 l// 自减1(先赋值再减1)4 ?& I& F. M: }8 F/ q# x4 ?
&gt; a--1 `) _4 o% P0 X0 T
78 u5 O( Z  k4 X
&gt; a9 M  e) ^0 m0 C0 S) H
62 \  s# S3 t0 y8 b0 u+ R6 U$ w. O7 C
// 自增1(先增1再赋值); L% O6 F, t/ m* |- D/ x# L
&gt; ++a
4 l" \" h2 W8 w3 c: {) b1 i# ^7
! ?( i0 s& r4 d9 ]7 q7 @9 l// 自减1(先减1再赋值)
/ D* u" x9 ~$ @  E1 w&gt; --a
) G" E$ }9 h  S; P) b! Q, t# y- w6
, t2 m$ C/ ]& x  f&gt; a! X, }  Q' [: u, r
6) K: E/ \8 ]* l$ D$ A# n
# D' K- k: e- n8 J
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理1 _, L3 W, Y, n6 y
</code></pre>
0 h" v+ R! g8 s0 ~8 i<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
* ~% R3 T1 \) v<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
2 r, S7 O( Z& R7 r7 W1 c5 B<pre><code class="language-javascript">// 大于' G6 ]% S. h- d& ]% {$ W
&gt; a &gt; b
/ v+ c* R; H. Y; S* d! ~+ utrue* O( F0 B0 N, A5 Q& ~5 G( I
// 大于等于
3 K' F8 U& @1 |1 j( c&gt; a &gt;= b
' J# ^2 e# H1 T' N7 `) xtrue
" H/ j: ^' R, G; W// 小于* a. H6 z! {7 Q/ F4 }2 t1 o
&gt; a &lt; b
- x& w) ^; Q8 efalse
  C" p! D' K4 s* r: Y# Z// 小于等于% A% B$ W9 \# I, |! e
&gt; a &lt;= b
6 M  ]  p( X9 c* K; d: Pfalse2 t( R% h5 F/ o2 ^7 s
// 弱不等于, _. a7 |0 p; t
&gt; a != b
8 y, O, O8 n4 V  |- F0 Strue
8 b3 h( G! Z# X7 G3 ?// 弱等于: z3 y4 t. u- W9 c
&gt; 1 == '1'
2 Q) R$ q* f0 c7 ?5 {3 p+ ?true: [7 f5 l  @* B$ g* e
// 强等于+ }$ R/ q+ h5 U4 ]& {2 d- H- D
&gt; 1 === '1'' S$ m5 p" G: L+ t5 J
false
: U+ I0 V& W7 r& ~* @  N8 |" J// 强不等于% D) `+ s  m! @! M3 R
&gt; 1 !== '1'
8 a7 F% t5 `/ ptrue& j; m5 s2 I& z) y2 G1 ]( w
. U( f# C6 y3 D" h9 [. Q* O
/*
  P* I  R; P8 yJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
( r; {: M* h% z*/3 u  F# T# R$ O' Z& m; ^; r
</code></pre>
0 G' n8 V- p! A# [* c3 ~; l<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
) w7 ?$ v- h0 s1 Z. }. v, I<p><code>&amp;&amp; || !</code></p>8 M0 P  ]) \, k( V. [
<pre><code class="language-javascript">&amp;&amp; 与/ E& O4 e: ^9 B. }# p; `3 L
|| or
+ Z# F1 t2 `8 [3 B! 非  A7 {/ v. Z! g9 Z3 C" S5 {
</code></pre>
4 n9 Q0 X0 _- _8 P2 t# T8 Z/ \<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>) N( j" A+ q) e0 U, C
<p><code>= += -= *= /=</code></p>
0 e5 _+ R+ }" \& k/ @! y9 m<pre><code class="language-javascript">// 赋值
- V# T( m  Z7 p&gt; var x = 32 Z, w6 p) G; W
// 加等于! u4 r" j$ s& B' |0 w4 ?& e
&gt; x += 23 @" o& C8 t& @% j
5, B6 Z+ b( b1 ^4 j9 C
// 减等于
3 D. U: l6 o* D1 Q&gt; x -= 1
/ y) ^* N; j8 p  s( \+ g44 ]6 [/ Z5 K4 F7 i9 U* l
// 乘等于- b# h! Z( B( N8 F+ a: Z+ o% u
&gt; x *= 2
% D  Q1 B5 E* H0 d; w2 Y& ?: r7 ~: A8
1 s2 C) U  [/ H' ]- C- ^3 y// 除等于
  y- U1 S- q, u6 w) ^2 \&gt; x /= 2; ]* ~0 D% |( G8 ^9 Z5 u
4" }/ W6 s2 ?2 C* Z, F/ M, M
</code></pre>0 M  o1 f1 y$ z# b' D$ B
<h3 id="25-流程控制">2.5 流程控制</h3>/ T; E  f5 M$ G* s' w7 M
<h4 id="251-if">2.5.1 if</h4>3 S$ y1 W0 Q6 q0 p$ U- y
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}  Z5 q8 R; ]+ m2 ?5 Y8 }0 w; D( ^
2 z7 ]0 p; G3 S* J% X
&gt; var x = 3" u+ g4 v# A& x5 \4 j
&gt; if (x &gt; 2){console.log("OK")}
8 k: c9 f3 \$ U OK4 ?1 v) c5 o# }9 _$ C

- B1 O. @0 f- N( O: e2, if(条件){条件成立执行代码}
4 @5 C" _2 ?7 x" A% O7 g3 f) I; B/ d        else{条件不成立执行代码}
9 \8 E8 A% G. ^7 B' z2 T3 _$ C' v( Y' [0 p
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}0 `0 K7 q* y( T# s
'NO'
+ t7 q3 x. o5 F/ s/ }
# ?0 ~3 N: Y$ P( v3, if(条件1){条件1成立执行代码}
7 A0 t- j4 Q. R        else if(条件2){条件2成立执行代码}) |; ^2 O; H; t' n
    else{上面条件都不成立执行代码}6 D( J: H9 j4 K( E! `

$ A2 J" B2 a+ \( c% Z) J" V&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}6 d( n! [; ]! F8 }# F
Ha6 x; f* H/ m2 }2 F# Q+ ?6 ~) S
</code></pre>
7 ~3 S" n! e( o! }) M* z! Z: F' v<h4 id="252-switch">2.5.2 switch</h4>
  g6 T9 c. g9 Q* S! W9 ^<pre><code class="language-javascript">var day = new Date().getDay();' w& E: }4 K+ I8 O# o! h
switch (day) {+ O& m2 H! N; t( z
  case 0:
' ~2 h. v/ k1 b* K  console.log("Sunday");
9 @' Q0 u; K. ]  break;
6 H9 ]/ `* `: W, i+ _3 q/ w7 {4 v  case 1:4 c" R5 J6 s# `  F4 {/ w
  console.log("Monday");
0 z# L: q4 J" _: B  break;
) N4 S+ i; q! mdefault:: r" L: N* R8 Z4 g) X! m
  console.log("不在范围")" j2 O( f5 d/ O  B; h3 _% P
}
6 E/ c2 T/ T  O  G* M- I 不在范围
3 ^% l# A1 q1 T7 U- o( Z</code></pre>
3 ?/ S" O  F* B. \! O<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
  X9 ?) O9 r2 U5 b* ?# _<h4 id="253-for">2.5.3 for</h4>
( ~4 l! ^( W( I6 D" s<pre><code class="language-python">// for 循环
# ?& V$ R* ]6 y) v" d0 T$ I        for(起始值;循环条件;每次循环后执行的操作){; Y2 c: \" W# e8 c" P! ?$ R  B
        for循环体代码7 k" c, L5 v1 N5 ]1 j
    }
4 o% j9 U0 ^* P; G- ]' {, e, X) T4 V( O. u( D( E. c  @7 p$ Z" w' c
for (var i = 0; i&lt;10; i++){
1 c! `& d* o$ N8 x! ~! X# @% q    console.log(i)  a0 x& g1 h) H$ L
}/ L' F* i- c" j6 {% o& |
        0! X/ P1 W) O5 w
        1# s9 v$ J  |* N; R- ?# }* y9 b+ [1 K+ y
        27 B) q$ G9 B8 y& e1 m2 T: ?; R
        3
) k# L8 e  Z2 z  t# b# n% h        43 q  ]/ u; C) w5 E  v  {3 [$ `
        5
5 A9 d$ b: ^  A# A2 B  O1 w; x        6
, Z/ o) h) ]8 Y' u        7
8 {$ ^: R3 g/ k% p( g2 y, I        8
- i% l" O. i# _  v' e1 y        9
6 C6 L* j6 e* C8 i# t. x</code></pre>5 T# ~0 M) ]  J+ K0 C2 o. Q
<h4 id="254-while">2.5.4 while</h4>
# t" d/ K( a7 N) a5 o1 J  {<pre><code class="language-javascript">// while 循环/ Z  q2 Q$ u! I4 y! y5 V
        while(循环条件){2 n# a) U2 s' i4 i& ]
        循环体代码- T  z/ n: V, p* @( o& ^0 T4 I
    }! I. ~8 z  K- V- B

. n) Y' b$ `) h. x&gt; var i = 08 u  p, Z" X, t
&gt; while(i&lt;10){* [  U7 r/ n2 M2 C
    console.log(i)
3 b5 {& ?. b( n    i++
  g/ O2 A# F" ]8 ?3 d$ N( I  N}
/ q/ C! a" i4 L6 h- C% @ 0
0 e$ d& {/ n( [& f9 D" |! g 1
! M( C3 s+ n% h2 D. j- x9 H! y5 h; ? 2
4 P3 C9 e3 L. D3 C0 D% |! D# h1 V 3+ }: e) S! ^6 Z2 ^
4
# s+ A$ F5 k, U- g* H# a 5$ n# \" r) `, @4 L1 I6 g% a
6
+ i( p) }" Y9 c$ L 72 M( `" m9 A* s
8: G% E( ?' T; `$ n4 w4 O0 J7 ^
9
! c& Q$ A& r8 S' N</code></pre>1 H0 n& U0 N% D+ n4 K2 O4 E
<h4 id="255-break和continue">2.5.5 break和continue</h4>8 y+ j% C0 R4 a/ {- ^* B  V
<pre><code class="language-javascript">// break
- U  F0 ^5 V" Q, {+ s. {for (var i = 0; i&lt;10; i++){
6 Z, I  M# |9 l& C, C* ^    if (i == 5){break}8 e' ^: t1 }% p. T
    console.log(i)
* G  h* I- y) w# C) S, S; L8 |}# }0 P% L3 @; V8 G7 e
0
! j7 w, N# S- I% F  d- r7 ^! \- j 1
3 Q( j1 @$ u, ~1 I0 G) ?+ L 2* w! j* `( v6 @5 C  T
3
( m; w' r# s) T  X6 ` 49 ^9 g+ J& o7 w9 f" X+ L. a! R
// continue; J; e; `- B) r3 Q1 ~; D+ A3 E
for (var i = 0; i&lt;10; i++){, X$ H% ^( n, L2 W6 Z- e1 |9 ]4 ]' @
    if (i == 5){continue}8 p8 u1 r- z/ f1 V' H+ J
    console.log(i)8 f, K' ?& i1 f
}! {" S' M5 q. y5 |; e9 E  D+ R
0. p- O, O- F: o
1- F- a+ N; _, K2 ?. u( @4 n0 K
2
7 J9 r8 ^' s! @! r, c 3% Y6 C7 D: M9 N8 Q
43 R1 y$ a9 v6 q: V6 }% Q
6* J3 \% F+ D+ `' I: L
7
3 a, l9 y" J1 l1 ]7 n: A+ \ 8- A# U3 @$ b4 Y: n5 c2 m4 O
9
3 T' R- g# [. w, B
& K4 f4 O% T6 O& L2 Q  y9 P</code></pre>
3 P, ^, p+ _9 O  m) A/ [! J$ T! h<h3 id="26-三元运算">2.6 三元运算</h3>* u4 r' g8 y3 d/ V2 r6 l
<pre><code class="language-javascript">&gt; a$ ^2 J! q1 N& G- }! p8 F( m
6
. k/ g4 i5 m, W% H&gt; b; [  V/ l6 S) P; g1 `4 K8 H' @
3. j4 J8 m7 V$ N4 T, p
, e6 w6 K7 X) i7 k
//条件成立c为a的值,不成立c为b的值) U7 z# _; Y; l6 ?# e; t. T
&gt; var c = a &gt; b ? a : b
9 L* c$ O2 Z4 c: J# @&gt; c4 H* b) U) J# w2 y. @
6- y7 X* D: z& y2 B( m" z2 x2 v0 B
) d- K3 z& |3 D
// 三元运算可以嵌套
9 p1 P; B, s! ?+ z- \  r) B</code></pre>
# ~) u+ w' H2 u2 E. X8 M, Q<h3 id="27-函数">2.7 函数</h3>
4 L! G! |# r+ ?( J5 i- c4 s) g2 f<pre><code class="language-javascript">1. 普通函数; `& j; P  a2 r; \
&gt; function foo1(){8 g, @' p) w% J$ G
    console.log("Hi")# p' _: V, z0 `. V# M
}
* @: E6 U9 @) e* B' Z7 e+ g; K  B* O" j0 M
&gt; foo1()
. s" m2 [9 e* Y        Hi( E1 A+ R7 J6 X6 W  w
2. 带参数函数4 T9 ?1 E2 l, |! s3 L
&gt; function foo1(name){+ d( a; B" p' f5 F
console.log("Hi",name)' t4 @; X- H0 l. s/ [7 I0 U; C
}: ?9 t  W* N% A- _( o
; H9 ~% F" a( f8 B  N' T6 @$ I
&gt; foo1("Hans")
" U/ b5 v8 t- U" d1 s9 MHi Hans
  c$ W$ E9 P+ W( P' d5 J8 A7 \4 x# I& r, [  H
&gt; var name = "Hello"4 x" [& H3 ^" Z- v9 x# |4 t$ k
&gt; foo1(name)
. s' m3 j0 X  T* [) ~! ~$ n7 t4 x, mHi Hello
7 ^1 H1 V- m% R7 Z) V7 a$ M2 Y6 C2 F! z# a
3. 带返回值函数
6 ~5 W$ o6 ]$ V! ~; I% C6 @&gt; function foo1(a,b){
* K* M$ C7 {8 n        return a + b   
6 G9 z1 }1 |( t! [% x5 e- U}9 w/ p* m% f2 j# v; D& G
&gt; foo1(1,2)2 ]7 A7 z) C  j# n9 d1 {! P5 f$ r1 `
3: x" o8 W- o5 l% T
&gt; var a = foo1(10,20)  //接受函数返回值
. q; V# `' s1 I5 u. p3 L&gt; a
, z( a3 I, T3 w300 `" A; n, G4 Q1 M' Y: ]1 b

4 D: x; M; t% X1 _4. 匿名函数) n1 L! V% \' R. A( m
&gt; var sum = function(a, b){
4 p! `9 i- A9 }; V0 m4 L  return a + b;
2 U$ W3 }& I# [3 G) d}
* Q: |4 s8 W! R&gt; sum(1,2)
) d4 K% G8 e( P/ C3
5 G8 H) v  e% ]# ]/ }( z& C
: Z" n8 U( U( D) s! p& {. p// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
6 X; N  L- x0 u7 e1 M" B&gt; (function(a, b){$ h" Z/ J* ^. G. t# N
  return a + b
6 {/ @9 h# n# F& y3 k})(10, 20)
/ ~& V# s& J/ s% C30
8 L; W* C' e1 M% ?7 l7 P# u6 e2 X" n7 p/ `
5. 闭包函数% H# [3 _5 t: E1 S5 V
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数2 F  k* x; s4 s5 k
var city = "BJ"# N8 \* h  n5 U4 |# D* ]- G  \
function f(){
; j& D8 k7 Q1 E0 t' b    var city = "SH": s) l: z2 K& y
    function inner(){7 C2 P' s2 L) Q$ ?/ f
        console.log(city)
% g4 b7 s5 B; @+ h    }
6 C: B3 ^% n. J; H' x) s    return inner4 m# H" V3 J  x& C2 N
}% M- C: o- O4 E6 D& M
var ret = f()! t5 v. G: _/ a# o( d
ret()
& r' E: }& ]$ f* J  `7 h/ E% Z执行结果:
# i, X3 {. Z, K! L, P! OSH
  }, C  l! v5 R# |: I& A
. f: p2 V0 d/ N' @3 }, j) h</code></pre>7 Q; G( ]; ^+ _9 ?
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
0 q; B7 o7 y- I0 N<pre><code class="language-javascript">var f = v =&gt; v;5 p& H3 Y$ k! J/ y- J! C
// 等同于; M8 y+ c0 v7 ?1 x# O- g, B
var f = function(v){5 t( b' e5 z2 L( j' c, J
  return v;5 w! h* t0 |# G! E  Z: }7 \3 X
}& }: W% B* z4 x2 B6 m& |9 q/ P3 K
</code></pre>
, J6 Z' }* w$ V4 e" T<p><code>arguments</code>参数 可以获取传入的所有数据</p>" B( L9 H( L4 U& f' n
<pre><code class="language-javascript">function foo1(a,b){
1 W  Q' Q. F* K4 ~0 }: o    console.log(arguments.length)  //参数的个数
% n- x% m/ r0 g. r: ~0 c* I% w    console.log(arguments[0]) // 第一个参数的值
3 O! I! t3 m) Z8 F* o: e0 ?        return a + b   
7 d0 X) s; y+ Z& j}  Q0 i. {7 ^1 {) H  E, d
foo1(10,20)
8 P  K6 X# n' ^  [  h; M9 ]2 K结果:3 s1 {0 ^" D5 I( r" b  m
2          //参数的个数
2 i' w5 K* G8 b! x$ Q10        // 第一个参数的值
" N: ]( H) F$ `. t7 o: p, T% V30        // 返回相加的结果! x* k* U6 ]- T  {& `1 k4 j
</code></pre>
9 X. t& h3 N/ J6 _- P9 N<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>; {) `$ I& ?; A; }
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
6 m$ V  M/ [/ p# H9 Q6 s  X<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>' d1 W4 @9 c* l- I( E& ~& h
<h4 id="281-date对象">2.8.1 Date对象</h4>
9 U( @; ~9 {% l& u3 }( w+ D  H, s+ Q<pre><code class="language-javascript">&gt; var data_test = new Date()7 C7 d! B7 B& t# ?* ~
&gt; data_test
9 G& }$ z  x2 U' K* b+ f' bFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)2 q4 f6 w+ ~# v  k4 V
&gt; data_test.toLocaleString()3 o  r3 O% H/ q
'2022/2/11 下午9:44:43'
5 R+ T/ L, A3 B2 P- U4 B0 y0 Z! Z( t# Q" ^: o- P, z3 E
&gt; data_test.toLocaleDateString()
4 g* }+ v# ^1 o( b) W'2022/2/11'
2 E) R- y  L  \* Y3 r- E3 t0 g- M, Y: _5 s$ Q6 x. q! ?% N' y
&gt; var data_test2  = new Date("2022/2/11 9:44:43")& e0 v; K) }/ {( G) Q
&gt; data_test2.toLocaleString()
  I& u6 W6 U; O" Y7 n6 m'2022/2/11 上午9:44:43'
! y7 J3 ], g5 J8 m' e3 [4 T: N- z( p( E! D* M7 o
// 获取当前几号
; o" a0 ]* |$ ?2 m% C* d&gt; data_test.getDate()+ G+ u. A/ K5 V6 u& N& U
11
" e$ X$ Y/ Y4 x3 U  A9 L$ F// 获取星期几,数字表示3 Y% J2 J& u  Z7 P+ Y) ^$ W& D
&gt; data_test.getDay()  # C. \( O& v& x* S4 T
52 b; ~; M* N# J7 m6 Q+ G
// 获取月份(0-11)7 @, e3 `0 _* L3 B+ O  s; e" X7 _
&gt; data_test.getMonth()8 X$ h, I, u: b2 U3 R( p9 W
11 M+ p8 K$ e* A+ |/ H6 Y
// 获取完整年份
9 \6 u+ l* O6 x' `5 }1 ]&gt; data_test.getFullYear()" H) [$ V( [) [; j; j2 ?% x
20226 v# d) l8 Q: P' y/ V
// 获取时6 \, ], v* b9 |( [3 S( A  |* j
&gt; data_test.getHours()/ S/ w# ?) r% ^$ `
21$ H# L3 a& X  M) O
// 获取分
  n; b! E* t$ Q# N- x5 {&gt; data_test.getMinutes()) L* I/ E! o6 U! y$ l9 X. `# i1 x
44$ H; E  J! ]3 S
// 获取秒
( ?$ s+ E" g' r$ {9 G* I6 Y&gt; data_test.getSeconds()
5 |. p9 `1 T; a; u43
- f' F3 U& D% S/ ?- e// 获取毫秒
1 t2 d3 u" ^/ ]4 l, _&gt; data_test.getMilliseconds()5 G* [( o5 P+ o
290" I2 x1 Q/ o6 {, g2 |
// 获取时间戳/ x0 |  y) o" e
&gt; data_test.getTime()
. S* r+ E# y5 s, H0 n1 Z1644587083290
* |" W3 }: D% p: l3 \</code></pre>
. _2 Y! F, I+ s<h4 id="282-json对象">2.8.2 Json对象</h4>+ \+ O1 v3 q' G% P# t) v# E
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串+ O' H/ p& u5 b
JSON.parse()  // 反序列化,把JSON字符串转换成对象
8 \. K1 ?5 U' U+ P. ?) R6 [' K" G
// 序列化( Q1 r0 E6 g5 w+ f( J
&gt; var jstojson = JSON.stringify(person)
' |$ _4 U# o# i0 f( {5 W7 z&gt; jstojson  
! Q( H6 P' C4 k* |3 r$ {) @: h'{"Name":"Hans","Age":18}'1 N; x9 t9 o& t" I! P0 M4 o
, c0 A9 V) C! E2 [% }6 J
// 反序列化% q7 @+ e1 \4 [, ?  J% J; u' }
&gt; var x = JSON.parse(jstojson)$ Y1 J$ c3 N* V3 h
&gt; x
* J2 ]3 p% j, ^3 O7 G{Name: 'Hans', Age: 18}
& @0 }2 e2 M& d6 Q6 d( }/ F' u&gt; x.Age
# e: L7 y% ]! S. U  V: K; u( }* i- A18. X, X0 s) S" B. I( ]. F% Q
</code></pre>. [  F$ m1 ?, x, ]% m6 U
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>- h( _" D- q6 M9 h6 `: f
<p>正则</p>! q, |+ D& q% J4 y- Y- c
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");8 o9 l3 e9 E- {$ [' W
&gt; reg1
& X  E; z) @' d' f/^[a-zA-Z][a-zA-Z0-9]{4,7}/9 m3 ^- a4 g( M* r% a( C9 D
&gt; reg1.test("Hans666")
! y5 a8 \' k( d( o+ otrue
  d; X& r! ^, k' \' s
5 w) B; U$ V6 T8 v. n) f6 W7 y$ D&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
' e8 W! J' q3 G' ?; N/ @&gt; reg2$ I. F% B! [! }$ G8 ~
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
% u! l: Q8 s2 t4 W/ f& A  E1 j&gt; reg2.test('Hasdfa')/ F9 v* V8 M& e! \$ u/ _. S/ x
true
( e3 Y, X0 J) C. E. D  I% Y4 _/ n; G$ J$ c
全局匹配:! m+ U+ K6 V3 l; j7 ?$ j
&gt; name
; ?6 \* W9 h3 p! U1 n'Hello'! I5 E9 D0 T  m8 h& B2 }
&gt; name.match(/l/)1 V7 y7 ]- m$ `  z5 i0 C# ^
['l', index: 2, input: 'Hello', groups: undefined]
- ]% T8 {3 |! @. ~* _( A$ K% f* z. i) Y
. I8 D+ Z8 _3 M, B( G7 }&gt; name.match(/l/g)+ t; j! q* P1 }& ]( W' S  E
(2)&nbsp;['l', 'l']
2 r. U$ G1 |2 g// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
/ `5 i+ m- Q5 c' A. {) `; _) K
. d! ^  f7 x: b" ^& n8 x/ I# ?全局匹配注意事项:
  H1 b1 J/ D3 _4 x  B: w7 o&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
; a8 [" R. D& S$ U7 U&gt; reg2.test('Hasdfa'): a/ z0 h8 J( u8 ~! H2 N
true
  Y% d" E7 A8 j) \1 ~: b&gt;reg2.lastIndex;
0 f0 \& `$ n) K& U69 Z4 {; J: u+ s' z4 G
&gt; reg2.test('Hasdfa')' q# S$ @( N5 s+ b2 z
false" `2 {/ s+ d/ I% X; }1 s0 [
&gt; reg2.lastIndex;& w* S) o( N3 e- B& F8 _
0: z) Z. }* o# W$ p" W
&gt; reg2.test('Hasdfa')
! y. d( U. q) p, N/ Ftrue
5 p3 K5 c1 J/ C& Y( z&gt; reg2.lastIndex;
# P0 ~) M! G8 m; E& b6! m1 y% T- U" V* x3 e4 s( d( }
&gt; reg2.test('Hasdfa')
5 i# J, f+ N/ x4 @  Lfalse
  C: \$ K4 Y, C7 S9 d# c, G&gt; reg2.lastIndex;( m+ U* i  F, B
0
6 x; z, _+ m7 v8 T// 全局匹配会有一个lastindex属性0 @, t5 M" k5 ?. K( Y3 V! |
&gt; reg2.test()
8 z/ F0 ], J, o6 [* [: pfalse
/ m- w4 A6 P+ R8 a  u$ s&gt; reg2.test()
3 t6 D" n% O, [true  @8 {. V1 ?5 P/ J( r
// 校验时不传参数默认传的是undefined
2 T% G) H7 q: h/ U0 n& Z</code></pre>
% I' h+ t9 ?! N" r# c3 E' v<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
7 J1 T$ n$ a5 j3 n. n<p>就相当于是<code>python</code>中的字典</p>* I$ u: @5 P9 a; L! Y% j. w/ B  j2 ]2 o
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}! o9 N. w' y, W' f
&gt; person
) [/ D4 e) L) {6 k5 c2 f2 y) k{Name: 'Hans', Age: 18}
: f$ R! M; r3 J4 j7 b. N&gt; person.Name
7 A2 D/ o. c/ J, t'Hans'
9 H/ d4 M" S# ^/ }: g&gt; person["Name"]
9 v' n' k5 i3 ^" z3 P'Hans'5 z; M) v  ]' P% m" d
, X8 V6 n( h) g, [4 B
// 也可以使用new Object创建5 K/ Y4 f1 a9 H1 Q
&gt; var person2 = new Object()
) w9 i: F; G9 o- n0 Y4 `- e) H&gt; person2.name = "Hello"* ?+ L* l4 e5 c$ ^
'Hello'
) R! V; T  G  Z! q2 ?- C&gt; person2.age = 20
; w% o) `, w' M" c& B. z, v, P$ ~20
2 ^# x. _3 F1 X6 [</code></pre>
( ^* i9 M  @, P% E: P1 x/ w) |# h<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>6 p0 f" U1 R0 Q, \
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>% B% Y* R3 ^/ U; W
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
$ h* T+ e/ ?- L# y( @6 c: g<h3 id="31-window-对象">3.1 window 对象</h3>
' A8 _* W; }+ l# p' J<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>) w7 k* P3 y4 u$ k
<pre><code class="language-python">//览器窗口的内部高度  L6 v; k  K; F; U6 F
window.innerHeight
) R" b! F  h5 l$ @( H706
4 G- S% ?3 A6 p+ p# a//浏览器窗口的内部宽度. N# J) ~9 x+ R0 q
window.innerWidth
. A) F+ g# H" Z& s' K( Q! Y1522
# d: \6 h4 P, H, p. z$ d7 M, S// 打开新窗口1 m5 n, L7 L# Y0 s# ~  u5 _; b2 N
window.open('https://www.baidu.com')5 X6 z, ^4 S: _7 l, n; P  `
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
: [+ d5 ?/ c8 }: P// 关闭当前窗口
  c/ E. }, r9 I( M- swindow.close()
! R- K! V% X0 J//  后退一页
7 e6 H- F  Y# `4 Y0 j2 }window.history.back()# _4 V' r6 z2 z" @8 ]
// 前进一页
: c4 H( c6 W; ]window.history.forward() 6 f$ H2 U. T$ G! N2 d
//Web浏览器全称# d% K( d6 K% ^0 D" m# g
window.navigator.appName/ [5 Q, ~* ~3 b' z# g5 @6 X7 f8 n
'Netscape'
8 P5 n0 d* ?0 P// Web浏览器厂商和版本的详细字符串
5 Z- e% f; ^, S+ b; gwindow.navigator.appVersion+ r( Y7 q. ?7 L) h4 J# H
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& U& q0 M+ Z" L# R5 \
// 客户端绝大部分信息
5 r$ P; t  I" \( k' Z9 i+ ?3 Dwindow.navigator.userAgent
* m5 i7 D( h( O0 c* ~+ U'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
1 t, V9 g3 k5 a  J( {% `! Q" ?// 浏览器运行所在的操作系统- t: W; Z  C; |# g$ b3 X
window.navigator.platform
) S. E& h( \& b'Win32'
3 V. ^" A# L; @- s5 _/ a1 Z  m4 k/ \: J/ B& o9 K* z( S
//  获取URL% V; P, ?- h1 G( r7 ]
window.location.href
# J3 @$ w1 V# j! K// 跳转到指定页面
! W! B. q" A7 L, f$ kwindow.location.href='https://www.baidu.com'
& U; h+ X! u0 `- q8 D  J// 重新加载页面' M; r- ~" K6 g4 Q- J+ H! E  Q6 ~
window.location.reload() $ o. p/ K7 g% W# |( t) e. v
</code></pre>) v% d5 v( n. ]. P3 b) @
<h3 id="32-弹出框">3.2 弹出框</h3>
, }6 ]7 F$ C* L$ e# @<p>三种消息框:警告框、确认框、提示框。</p>. M# h! B) H8 d7 |1 V0 B! C
<h4 id="321-警告框">3.2.1 警告框</h4>
/ D% E2 o  O) B# I, j" r<pre><code class="language-javascript">alert("Hello"); t. C1 d# I6 [. y
</code></pre>
1 I2 [: p) j+ P. \<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>4 L) O0 M5 e6 c  ]/ c$ f3 o
<h4 id="322-确认框">3.2.2 确认框</h4>% o# i9 u# {+ F8 D& W" P0 |
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>  Y8 B- l2 f% Y0 P
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
5 W# h. {0 l' |8 B8 L0 [2 m, atrue
& g) Q* W: W2 J2 w9 I1 d5 l&gt; confirm("你确定吗?")  // 点取消返回false5 v# l6 S) V& f9 C% h! v
false
0 E$ N+ ~8 a3 _# E5 s  X; |; }</code></pre>
8 c" A# F, a1 A7 k/ @1 H! C2 e' F<h4 id="323-提示框">3.2.3 提示框</h4>5 O& E+ ]' G( ~. m# k  u
<p><code>prompt("请输入","提示")</code></p>
5 g4 A/ p/ ^6 X) h4 r2 _$ J0 i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
: i$ ~8 a6 T0 w/ S) q1 o<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p># \  O1 l$ R0 o/ g
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
/ [, x6 N+ y8 O" A3 s1 g8 p! X<h3 id="33-计时相关">3.3 计时相关</h3>. ^, ~3 ^3 K) |& l: O( t
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>0 o4 ?# C, `* B9 }
<pre><code class="language-javascript">// 等于3秒钟弹窗$ K" [7 ~. U# x
setTimeout(function(){alert("Hello")}, 3000)
: I  B: R9 P& g: T8 G9 e: J
- t; `1 y, G9 N8 wvar t = setTimeout(function(){alert("Hello")}, 3000)) r& M. \6 E3 q. i2 x7 B) m* ^( q7 \

7 M* \! k# Y6 q% E2 c4 _6 v// 取消setTimeout设置$ v3 ]0 _5 T/ k7 `
clearTimeout(t)
4 q& M) B- ^, C8 z4 N</code></pre>0 i+ `4 H8 }+ w, e1 a0 n7 E5 _" `
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
/ R. K$ k7 H! p# D<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
2 Y* S# x1 u5 c/ ^$ z" l- W<pre><code class="language-javascript">每三秒弹出 "hello" :
+ ~+ w) @- x( h* m9 osetInterval(function(){alert("Hello")},3000);
, h# R% L# }  u* p5 O# c7 ?</code></pre>" p2 {: g- ?- D5 L
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>8 A% t* @4 e2 [- Z# T1 Z
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
; p; [  }$ W3 j, V" K9 N; p//取消:
! M3 {' I- t" A& ?4 s; DclearInterval(t)
0 a3 B* q+ S* y1 O0 S$ W: r1 s( ~</code></pre>
5 ^* p* j9 k5 W* N* J/ p' x; D5 |9 n! f$ X' A
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-7-12 07:20 , Processed in 0.071431 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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