飞雪团队

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

前端之JavaScript

[复制链接]

9171

主题

9259

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
29843
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
. U8 l5 f( d, u( Q) }0 I# l  v
<h1 id="前端之javascript">前端之JavaScript</h1>
( x' x* _( y; O- i; a, R( e<p></p><p></p># l+ j" y) A% C- a
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
- I+ e0 o) U3 v% H/ `! t1 a<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
8 i, t$ S* U# b- J9 z2 `: t8 E它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>/ b: S# i9 e% @9 \  ]+ ?1 f
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>5 c# e) m6 h$ k7 S5 t
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
/ f) S9 n+ t5 V. A4 g, q5 |- z3 F<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>" \# l- a3 r3 A- _# c$ }  c
<h3 id="21-注释">2.1 注释</h3>
% f( `* T( c8 k' c& ]; S<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>6 N! X4 D6 \9 K* U2 m  T
<pre><code class="language-javascript">// 这是单行注释
% T$ z2 x. G0 B7 s/ E5 Q! }
$ H& U) x* k+ _1 T! R8 e7 n/*4 Z4 s7 l% o6 o
这是多行注释的第一行,
, X; z) s: H6 i这是第二行。  M( l! x% B/ `& v: j
*/
) Y2 c+ T6 O8 u" T" n2 W</code></pre>. W! F# t8 ^. e5 _. [5 r. H
<h3 id="22-变量和常量">2.2 变量和常量</h3>6 g2 L' a" {: z, Q
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
0 m7 i4 r9 D2 I+ [3 t/ p0 d<ul>- |! z; L) x4 C+ K+ o
<li>变量必须以字母开头</li>  I8 `3 p' h0 p3 ~+ D/ E+ P$ P4 C
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>, d0 ?9 q# `, x
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
* X- v. y1 X5 d! t" @</ul>
# o/ U* o* y1 z  O) l<p><code>var</code>定义的都为全局变量</p>4 x' F- P4 t5 c2 ?9 D1 M
<p><code>let</code>可以声明局部变量</p>$ Z) z. N) i) L, a7 n* U
<p><strong>声明变量:</strong></p>
& @5 K* ^; H" W<pre><code class="language-javascript">// 定义单个变量
- Y* H# x& O2 K) O- n" ]&gt; var name
% D  O& I/ F1 _) K2 i&gt; name = 'Hans'
/ ?+ j7 j5 @# _" M, Z//定义并赋值
0 ^" ^; u8 M7 j1 x& s/ S5 n: e&gt; var name = 'Hans'
1 h8 l8 h( j+ [) \2 _0 S3 w+ B&gt; name* _- ~" s/ l7 ~0 H  d* D
'Hans'$ J: R$ a. v; S2 b' ^2 B

* }' }$ @. g- D& r, m( ]// 定义多个变量
0 V2 N# e: h3 b5 o- J1 D&gt; var name = "Hans", age = 18
, ~$ Q3 L3 i# M" C9 X&gt; name$ x) C" i2 ~- h! h+ m
'Hans'
) |5 {/ Z" h, j' S# v! C) d&gt; age
" I3 w% e% K6 s1 I18
' y1 L; }; g% t' {
3 c  M; c) E1 C& [' l/ u6 A4 M4 d1 T//多行使用反引号`` 类型python中的三引号" J/ @4 j% g* }4 ^" `$ @, b, E
&gt; var text = `A young idler,, p$ G5 R+ p. e/ u  r1 X' Y/ n: j
an old beggar`1 ?: G& ^# S/ H% @7 K
&gt; text4 O9 ]  q- ~. q! m
'A young idler,\nan old beggar'
+ [2 N  a$ v! o/ ~</code></pre>
5 j  l- j  l* D7 g2 h<p><strong>声明常量:</strong></p>  D9 k2 E5 W8 Q  s
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>: N* c# U! t+ b: F
<pre><code class="language-javascript">&gt; const pi = 3.14, p9 z& I# ^, D  c. x1 g4 Q( j  L3 f% u
&gt; pi
) A$ U4 X* K1 g, J6 S5 W4 b3.14
7 `" m. @' P' V&gt;  pi = 3.01
9 P6 N+ |! X+ a, o: wUncaught TypeError: Assignment to constant variable.) g+ E) b9 |) V! v8 A! N$ D  W
    at &lt;anonymous&gt;:1:4
* v# J8 ^) C; H, T( d- S* |( @  Q3 U3 }: |  P$ ~+ @# T# H' W
</code></pre>
, \! x+ q3 \# P  N/ k<h3 id="23-基本数据类型">2.3 基本数据类型</h3>: A6 u2 H! A5 f% R) z9 D; ]/ j
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>" N* ~# }* @* \  }2 r4 q" t7 r
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>" A3 L( Q* M5 L: l* b; {" d( a
<h4 id="231-number类型">2.3.1 Number类型</h4>" |1 w8 N4 u8 r
<pre><code class="language-javascript">&gt; var a = 5! A1 F$ d! E+ A6 A' i* w
&gt; typeof a   //查看变量的类型  
) I" D* b, Y8 q$ O1 a( L5 v* N5 Onumber
6 h3 T0 K- V5 U. @* r
( ^/ a' v$ N/ x5 L2 W* I5 x+ V&gt; var b = 1.3
, b+ e6 r4 i, q, M&gt; typeof b3 n) Z- T6 n! i
number
; J: m% }1 f) h& p( p$ o, Q  m* z% z/ V) I" ~' b0 q6 |
// 不管整型还是浮点型打开出来的结果都是number类型  @' W, E5 s! _5 D( c0 Q

1 L/ ]4 B% s8 {  I* m/*8 I7 R2 p8 A. Y) i% x
NaN:Not A Number, e, @6 Q8 t# _( T) j
NaN属于数值类型 表示的意思是 不是一个数字$ p& j& \+ L  T: k! ?) }, t
*/
0 `% s" O3 |4 Q/ N2 }0 u7 k  ]7 A  }3 H2 ?( o
parseInt('2345')  // 转整型8 y: z2 N+ I0 w" K8 O9 o/ ~
2345
. D1 j; m, O% ~' u7 i0 t) f7 gparseInt('2345.5')
, N! n' p3 A4 M7 G( B+ U% W23457 W$ x! J3 N9 U7 ~  y
parseFloat('2345.5') // 转浮点型
" L0 k, }/ b2 J2345.5
: ^! q  T; E0 q( Y8 c! m# v7 Y! e; ?; hparseFloat('ABC')
3 |/ g9 j" e) d$ Z6 {* `6 n! {NaN
9 a7 f2 L3 g; gparseInt('abc')
" Z5 p) e# b* h  _) n9 {NaN
# K* E) L& A* T7 O( j4 w$ G3 r</code></pre>- ~$ A7 K% f5 J
<h4 id="232-string类型">2.3.2 String类型</h4>
/ H, {: n  [3 Z3 C+ l<pre><code class="language-javascript">&gt; var name = 'Hans'! W8 `- w. n' o- t. v& S& J" E
&gt; typeof name
6 c/ j8 L8 D2 N) c1 j; k'string'- [# t/ U7 v6 f2 G0 I
9 {! \* _. M* w" T9 J' T6 T
//常用方法5 t, i, ]- H4 Q# ~0 C
// 变量值长度/ k2 \( a* X+ Y. m& I8 a% K0 @
&gt; name.length  z) F8 G. p  T1 G# Q% {
4
' w3 _0 O& A6 p% z/ {1 W  b) N% {// trim() 移除空白
% V1 Y/ s. {% E1 H: ?) b) `&gt; var a = '    ABC    '
3 l+ N+ l3 V3 k7 l; i&gt; a
. S2 y/ u' s  {4 Q- ?'    ABC    '+ V* E8 I  R0 [0 r
&gt; a.trim()
; [' ]; I" a, W( F'ABC'
2 @# L, m+ y4 V8 ~' F: @7 C//移除左边的空白
0 l& q, X2 _. O0 S& n5 L# c&gt; a.trimLeft()' I5 _5 @* {7 j: o" Y: E
'ABC    '. t0 H1 f" r) I4 ~+ D- t# x: W
//移除右边的空白
# G+ [+ z4 O2 B& b&gt; a.trimRight()
9 C9 P# S: H7 T' A+ Z'    ABC'  q" T# `9 `" z. O4 P5 I+ A
' n+ R# D% M' _1 n% w
//返回第n个字符,从0开始
: T+ E, w0 ^1 C&gt; name
/ D* l6 K7 p# t" o'Hans'
2 H. n7 H( J5 ~&gt; name.charAt(3)5 ?6 w' j4 D/ S, I3 [+ o
's'
( ~" T  T! w$ {1 c&gt; name.charAt()
2 w4 h0 m  c# R% ?, @9 s'H'
9 u. B  a" T% e' U&gt; name.charAt(1)
' y/ U, E* g1 D# L! S1 s! ~& i; s'a'& o1 [  r: g8 X) P5 r. b" H
0 F5 T5 B* r) O, q9 r. |( i; H" x/ G
// 在javascript中推荐使用加号(+)拼接: D1 X% \. R& s6 i; Y
&gt; name# L- T' G& Z2 H. k4 S
'Hans'* X  }5 m$ ~& @# R, D
&gt; a
$ O1 `3 z! `# l, v7 z- \8 D2 M- S'    ABC    ': @, T# ^" @" K0 H( X# ]8 c
&gt; name + a( g2 T) ~9 |+ R2 F' b! r
'Hans    ABC    '7 ]% Z: U, |1 \* ~" l7 w* {% F
// 使用concat拼接2 |5 h; k- Z. U3 o
&gt; name.concat(a)5 t  x, r: u  X& P+ e7 I: y. z; H
'Hans    ABC    '* a3 e. J5 k; m6 E5 B+ P8 \

, B/ k- h6 q$ z6 ^2 G3 N& ]//indexOf(substring, start)子序列位置
/ |0 Z+ p8 Y, N" b$ G
. S2 Y& X3 W* ~+ w! y&gt; text" l) c6 {: k! e- ?
'A young idler,\nan old beggar') s" G/ X' t) e0 U$ O; b
&gt; text.indexOf('young',0)
: s8 y& z8 g8 c8 \) H$ ?2
$ f- h% R2 f6 T9 M( {% l/ O3 w) I2 G9 D! M2 A' p! c
//.substring(from, to)        根据索引获取子序列
0 A1 C" h: s+ C) |$ {&gt; text.substring(0,)( P% w% ], q( R
'A young idler,\nan old beggar'
( n' v: o3 D/ n- B+ p; |! S9 ^&gt; text.substring(0,10)
) V2 I% c( Q9 ~; }( s'A young id'2 f. j% e) b* a

7 D# B5 _3 a- y% g: Z8 U1 J0 ~7 B" R// .slice(start, end)        切片, 从0开始顾头不顾尾
& h7 |2 c0 g9 c2 k! U&gt; name.slice(0,3)
9 {9 r' ^0 ~4 I( o$ y'Han'1 k" `; {1 G6 ^% B& N, `
, p) o5 c, j) ]
// 转小写# }8 Q: R5 l+ H2 h: S  s* H/ h
&gt; name8 S7 Z- y3 _5 n. w( D1 m7 b6 c
'Hans'  c+ g  Q7 @1 H& b4 K6 I* o
&gt; name.toLowerCase()
- _7 A5 r* D- P- w8 D/ Q/ j5 K'hans'% V4 K: g+ x  {; Q7 Y
// 转大写' g$ e+ k  f2 H" l4 [( E" P0 P
&gt; name.toUpperCase()
. o. n3 S( O# A7 c( Y& G" B'HANS'
( ~! W( J- W1 B% N% U+ S; j
1 B: `8 K1 Z  w1 W// 分隔
3 k3 J1 b+ i  K: l5 V# V" w5 f) |&gt; name
+ w  ?: w0 }6 G1 z, Y'Hans'
$ U- u0 P4 U" Y- Y&gt; name.split('a')* Z* P0 ]1 u  x- J' T% L
(2)&nbsp;['H', 'ns']
, _$ i, N7 N/ G$ u3 u& d</code></pre>
# k6 D) V* i, M3 l<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
4 b. V3 X% A% k) D3 `+ ^9 V: X<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>% J9 A) B$ b2 j; {5 j+ N+ Y
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
4 V9 h( C1 S& o# ^<p><strong>null和undefined</strong></p>. L# g! `: g+ P% Z. [
<ul>
5 i0 ^+ n5 ]- d- Z3 c7 d2 H9 K<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>/ r7 H1 O0 l3 v" d" D2 d
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>6 E6 o; w: k6 G: m/ y/ ~7 @$ A
</ul>+ P- Q; w5 w" e! ~4 J: _
<h4 id="234-array数组">2.3.4 Array数组</h4>9 y5 k9 n# E) t7 Q. X) u' T
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
, b& ?% e) z' I9 W<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
* n" _& Y( I2 S7 D$ e+ F* a&gt; array1" F7 i( m2 G: S7 W4 n
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], ^( U# z( ]$ ]4 u' d+ T
&gt; console.log(array1[2])  //console.log打印类似python中的print) i8 C; x0 u4 D, w; I& d
3
) {! b! [9 @+ d. O; b// length元素个数, g; {. N. v$ W6 Q- d* Y
&gt; array1.length# I+ ^1 a2 L7 f( \8 c6 x- G" U
6
1 J# G, t* L$ o3 A) e  l% e) i// 在尾部增加元素,类型append
) F0 K$ p+ R; j; ~&gt; array1.push('D')' Y0 L" g9 \2 ?, `) A$ A/ e
79 g0 |/ C  Y0 @9 k6 c8 A  d
&gt; array1
2 @( U: n$ d. x(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
3 m, S& }5 \3 @// 在头部增加元素
9 O, x8 w( a6 q! `&gt; array1.unshift(0)
3 o$ t( ?) J) w8, c5 T. f( s8 y
&gt; array1
% i( r- \: Z2 [+ q/ z8 r9 w(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']; ?; ~) h; ^% j* F2 b0 @

8 D& @7 i2 t6 u" J5 q//取最后一个元素( `1 V( G- R( R5 F3 w* N
&gt; array1.pop(), Y8 P+ w% A7 F8 Y2 b: l4 K
'D'! @2 ^7 n  Y' u1 ~* `& `
&gt; array1, D2 h& ]1 I# A/ O$ y7 n& J
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']$ a: a+ q" N8 b- p8 c# j
//取头部元素
0 Q' R* }/ V8 y0 {9 B&gt; array1.shift()
9 O3 [$ a4 H# ^0
8 I2 D' q) K$ |) v0 H. G; z&gt; array1
( {& A& B% X* P0 `0 z6 R/ a; Z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! _( b6 \- d4 D8 q

# G) g1 A/ L2 t4 }( {//切片, 从0开始顾头不顾尾/ v0 s5 e/ H' g
&gt; array1.slice(3,6): K7 T# z$ i) h; ~
(3)&nbsp;['a', 'b', 'c']9 T' G+ s! l" o: z2 N
// 反转
9 ^' h" ?  P; I9 F4 L: @( x2 c&gt; array1.reverse()
. f( u: Q+ J. ^% F$ J$ d% e(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
$ X. a% @( n: D  o2 h. N// 将数组元素连接成字符串9 q+ t5 E/ Y" F! s$ A/ m! u3 p
&gt; array1.join() // 什么不都写默认使用逗号分隔
' o& d: n7 A' p: k5 y'c,b,a,3,2,1'
4 }7 ?1 I8 r6 M&gt; array1.join('')
  W3 L$ c3 P" V) D) W0 \: ?'cba321'' _% K+ K6 T; P9 n3 ~6 A
&gt; array1.join('|')
$ J# |* u( O. h& t. S% R'c|b|a|3|2|1'& l  s( R2 V2 E! p
0 C4 |- o- q) `3 s6 p. L4 I" p
// 连接数组; l8 V" X7 K; T4 t/ L
&gt; var array2 = ['A','B','C'], F" V6 O, l  Z( b! ?, S6 g
&gt; array1.concat(array2)
3 z. X/ X# \7 \5 G: w0 t; P(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']6 h/ R* R  c( n9 @

* ^7 j6 a% k+ o// 排序
( H9 H) n( s6 A+ f8 K; W( n&gt; array1.sort()
. ~, k/ V& P( Y6 U(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 y6 b, [+ \, u  W

* {( C# x$ [0 r2 {; \9 m// 删除元素,并可以向数据组中添加新元素(可选): ]# O6 {0 D8 G, q
&gt; array1.splice(3,3)  // 删除元素
9 _; ]3 s4 T2 d5 ~* I; s) t1 o(3)&nbsp;['a', 'b', 'c']) _6 X+ X' b) f( o  C
&gt; array1. `7 b' e2 z3 w
(3)&nbsp;[1, 2, 3]
2 _8 S& G8 f! J' q& k. c9 C&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素" y7 n  b: r( }* o5 T
[]! A( h- Y) B. t* p
&gt; array1; D) @* X( d: b5 B- E2 X# p
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']/ V. G" J4 H; ~9 b  ~" ?% @

0 A; e$ Z! e" {( [& }( W( B/*
8 ~! L- ~$ Z; U/ q0 ksplice(index,howmany,item1,.....,itemX)4 e4 a, `. s5 o' g- `
index:必需,必须是数字。规定从何处添加/删除元素。
- @" |, F7 c. h' ?# bhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。; ^9 ]4 v/ H6 |# v+ s! b# s. ?
item1, ..., itemX        可选。要添加到数组的新元素
8 z+ Y& y/ h7 k, n*/+ ?8 n9 Z% a3 ]/ J) d
4 z. R7 _1 O2 C7 ^. A  p0 J
// forEach()        将数组的每个元素传递给回调函数, n8 H1 i# e: D3 ]& x
&gt; array1.forEach(function test(n){console.log(n)})1 T0 M. M3 w$ X, V. _
1# H' w4 \5 D) N( f( C  l- D. j
2
& F) ^7 l. K5 J5 } 3
" v4 z' {' c6 P7 } A3 u8 F+ u4 w5 n" B2 [
B- M6 o# i' W6 b+ ^
C  j9 E4 u" A# e& [. n
// 返回一个数组元素调用函数处理后的值的新数组
0 N$ e: }$ t  ^&gt; array1.map(function(value){return value +1})' b' o. P8 a% |5 Z! z9 K
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']3 ~9 h# P$ o; U; q9 W2 r0 \' J
</code></pre># J- b  N( R# [8 o) o; H) I
<h3 id="24-运算符">2.4 运算符</h3>3 p" M. s! J' _( C  Z) F* X) ]% M
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>% J) Z! J+ n" ^6 J' e( T
<p><code>+ - * / % ++ --</code></p>2 V. U8 d; u# a8 e9 T$ J
<pre><code class="language-javascript">&gt; var a = 6
# P! Y5 x; B0 R- v0 p# [&gt; var b = 3( {: K9 [* c& V9 ]* I9 y# c$ E" L0 C
// 加! ~- h) X' z. Y' U1 ?
&gt; a + b
/ j. K, `+ U+ h1 ?4 G9
3 @2 m; l3 |  C# a( x// 减
% Q5 W: C$ l. N% a&gt; a - b9 [6 m8 _% b9 _% i5 J3 [( |8 q
3, s4 t5 G+ v$ o
// 乘
8 K2 [2 |( X- O# K! V; `&gt; a * b( _0 P/ b1 O( t( |9 I
18
8 A5 k* c" z0 [* ^  C9 C/ j// 除
1 {6 r! y1 F" H/ i, H&gt; a / b$ R) Q1 [" w% j+ r
2
+ d5 n) G: T4 w# m- j// 取模(取余)
2 l  O' {. o4 R8 {: g6 X/ S( M&gt; a % b
* i* B0 x- i& v3 A0: |" J) W/ r5 @3 A
// 自增1(先赋值再增1)
- p/ E& B& F% U* O5 A7 Z! k8 P( c&gt; a++9 p8 r+ K4 j4 _) M/ v" X9 Q" g! G
6, L1 F* L+ J4 Q; |0 n: p
&gt; a5 U: c# _( i3 q
78 M1 ~0 ^1 \7 s/ j( l$ a
// 自减1(先赋值再减1)% c8 P! e& Y1 j; `; ~2 B
&gt; a--
0 ]" \  \; R3 }9 Q7
1 L% j$ Q; W7 a7 X) [&gt; a, I7 _' a. j8 n) ^( \8 k
6
3 @  \  d/ ~# j& [// 自增1(先增1再赋值)1 A  `0 j- [: S: ?* Z4 \) K! m
&gt; ++a- r1 x2 ~' `4 L3 v
7
5 L3 e+ ?  u- n  V, P& B- W+ p7 P3 |// 自减1(先减1再赋值)
' ?# \6 c4 r2 D! E&gt; --a
, x% `: e7 [+ Y; c1 u6
, Y* N  a# `1 W+ q+ s  a+ r8 H4 n5 ]&gt; a
3 r+ z2 @7 q' [6 L; q6( R2 E% q- z) W7 N# L" B" v

( G, z" J2 M. Y' X% V5 o9 ~7 Z3 |, s//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理9 w4 |- `& @: M  n  x) X
</code></pre>0 x! w2 B2 g+ O8 f; S* w
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 Z( R% ~4 P' Y; e/ n+ [<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
( V- z; u2 J8 G. q  t) r  |<pre><code class="language-javascript">// 大于
! t* f  \: K" Z8 `( g* P&gt; a &gt; b3 |' \- k/ {( `) J9 A4 B
true7 n; n% E( Q0 e: P0 z
// 大于等于
+ s: s* ~" W( V# J) i* v&gt; a &gt;= b* r* k5 a. h9 x2 n1 a& h
true0 F% c7 `7 s  }
// 小于( R! i3 `2 v3 `5 `
&gt; a &lt; b
) n' m4 V) H7 M% \, g, pfalse
9 _( q% |$ i1 \5 L// 小于等于2 ^: x/ Q: P! Z. e9 Q# \3 k  L
&gt; a &lt;= b
% ?, N/ d7 i. \1 M; Mfalse0 q' y$ X% E% f
// 弱不等于* l' t2 C: }* T/ P" @
&gt; a != b4 j) c# I- J6 p$ ~! U' S  F
true
! \" h* D6 T3 }! \// 弱等于! o0 z0 G. s0 X- d: e6 J3 f7 B/ l
&gt; 1 == '1'" r$ [* Z7 W8 Y0 i3 H: n! t- w
true$ f: d9 \/ d+ A( @2 m- h9 [: v
// 强等于
* }0 Y* t, k& h- p&gt; 1 === '1'( O: L* ^; ^; E& X- E3 `
false
7 Q& i% z  `& B2 s% b3 S5 E// 强不等于
' ^# i' n4 D# }7 F( Q! c  v&gt; 1 !== '1'. T* L6 Z9 d" s8 ~1 p# v0 ]
true
' A7 q2 Z+ F& M/ N1 G6 F, w% g5 D8 B0 V5 |; ~. ^  g9 q  _! y& N
/*
' Y( ^( ?' c# ZJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误; g! @8 v' l$ t; \4 N# I' Y$ l
*/5 a; Y% ~5 _" `! y$ O. F$ M+ E( M1 l
</code></pre>  b7 |7 H( X+ ]1 C3 x! o5 C
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
6 _  b7 b3 V- i0 R+ i<p><code>&amp;&amp; || !</code></p>
; [" ~* }4 S* b: G3 h<pre><code class="language-javascript">&amp;&amp; 与2 F' V$ _8 n) l( O7 D; c# D
|| or   D7 S7 f, j2 [4 K( j: U
! 非% N3 `0 \# x8 Y5 l+ ~
</code></pre>3 |1 D) z. c; S6 R9 @* R
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>& x  e  k2 y, i9 C
<p><code>= += -= *= /=</code></p>
& D& B7 u5 V) _8 B<pre><code class="language-javascript">// 赋值
1 t/ K* y( f7 ]- \&gt; var x = 3& y! o# u$ f4 P+ _4 c
// 加等于
- F) k) t& e, h&gt; x += 2
  x: ]! [' x2 r5
+ j2 m3 B) q8 \: B1 g0 i) g1 S// 减等于8 F( [% x2 H) h1 h6 ^, s
&gt; x -= 17 a! p) @/ a; o* Q
4
6 v3 S$ |- C' B9 X// 乘等于
# U4 Z% r1 \6 b8 }8 ]* n7 k&gt; x *= 20 R, B( z# I% T
8
7 f2 S" b6 d$ u# H' M// 除等于& C4 h0 T0 |; y
&gt; x /= 26 n3 r4 h& t; K! `
4
9 q8 T# W: ?& w$ K$ Y% f, c5 F1 e3 ~</code></pre>
4 m" Z+ N7 E# v7 D9 A<h3 id="25-流程控制">2.5 流程控制</h3>$ b8 z! }% b, h( C, f% f$ U+ X
<h4 id="251-if">2.5.1 if</h4>
* d8 _) G$ s' \6 D0 b<pre><code class="language-javascript">1, if(条件){条件成立执行代码}3 R9 n8 j+ [0 E* q

' f2 m5 x9 Z# T&gt; var x = 3
, W% b& `  E9 e. B  }&gt; if (x &gt; 2){console.log("OK")}6 V& [4 P6 I9 B- n/ t
OK" q: f6 E- C! F
+ X6 G! \- n/ |8 b3 j7 N
2, if(条件){条件成立执行代码} $ |3 e, O# l9 U
        else{条件不成立执行代码}( m9 b2 n1 Y& ^6 v/ s
% l0 b! Y7 t: j( c: G8 C. V
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
# l2 u6 ]7 g3 a0 S0 _' x. p'NO'
. R" V; o/ A3 u6 c( n3 X7 n- b9 T' T$ G* X7 I# N2 U  t: D, c3 Z1 H
3, if(条件1){条件1成立执行代码} : K' R7 I% u* j; A, }
        else if(条件2){条件2成立执行代码}
8 D& ~, g+ P% Z0 ]    else{上面条件都不成立执行代码}
$ i$ ?7 X' Y) f0 j! O! @
8 x4 c" w, S) H4 s& D, O&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
# ^/ C9 Y9 g; O- ?& s Ha2 ^) N* j) ~  J5 Z7 J9 }
</code></pre>
* m! I7 L" n6 `8 S) R0 U, Y- r' r, L<h4 id="252-switch">2.5.2 switch</h4>
) h2 G" [+ B. Q<pre><code class="language-javascript">var day = new Date().getDay();
* m' z% ^9 D6 ^: uswitch (day) {* v- F; J% Y3 @1 V1 t3 l
  case 0:. r' r9 e# o. f% I9 H
  console.log("Sunday");
. l4 m- ?9 Z. h+ M4 r1 |  break;
$ Z* l- P1 L" W! O2 e" P5 e. d  case 1:
6 a; j: X. J) U4 P9 _" z9 x+ L  console.log("Monday");9 h; p0 ?* U0 Y7 s4 k4 J# ~
  break;$ B$ }( W: e& H
default:
. T* N5 `7 h' W4 `  console.log("不在范围")
" B5 E, A) U8 U# p+ L2 W# @  k}
" v; V: C& B' V4 W 不在范围  G4 [4 O. h4 _; M& T6 Q
</code></pre>
, ]8 {5 i9 [) w7 [<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>& G9 |% P8 d+ C( g. \  O
<h4 id="253-for">2.5.3 for</h4>
+ S* @) @: O' R: t<pre><code class="language-python">// for 循环
& p" U5 m" l, O* ^0 F        for(起始值;循环条件;每次循环后执行的操作){
4 ?1 x0 A" y: i4 J, e2 r        for循环体代码0 ~& E9 ?' M/ z4 z
    }
  K; `2 M' ]& @# _% m& Y" e9 _0 B% N
for (var i = 0; i&lt;10; i++){
- {8 i5 z- D! i4 ]3 @    console.log(i)% Q2 t' ~6 G( |& c3 k8 U
}& P& a! H/ `* c: p7 }  }! R  h
        0
4 c/ b! E+ i6 k0 ~) ]( o        16 P% N/ Z% A8 `6 M2 `
        2) Q& o1 N/ p; N
        37 h$ E7 q% S. N
        4
6 I: `$ |8 x; k& A- t9 n6 T        5
( ~8 C# \9 c! O  K" U; `        6
3 ?' Z: E" Z0 k        7
5 W2 G# B; S5 a        8
/ V5 O% j5 ^- P( D9 e. Q/ C        9
- a9 R2 ?' d* _</code></pre>
: o% c; m4 |/ e8 V- z8 ]5 |<h4 id="254-while">2.5.4 while</h4>7 K* `5 W7 P1 P8 w& [& q* W
<pre><code class="language-javascript">// while 循环
5 M- r! v- l! v3 v- w        while(循环条件){
/ H3 c8 C/ o. \        循环体代码
6 j1 w# K4 Q7 L( m1 F    }, M. ^9 I$ o$ n7 t3 m

6 r3 H# U, ^+ k3 A# b4 R4 n&gt; var i = 0
2 b4 {0 m# L0 Y& M&gt; while(i&lt;10){
% W, V3 \5 _  [    console.log(i)6 `4 g& [: q* ?* f( ]
    i++
- M) D0 n$ G5 O- G) |3 F}& `' x/ i) P6 ^$ i) O. I! K
02 F4 i9 P) f7 a+ Z6 ]
12 O) }' w3 {! G6 H- g- h! S% ^9 p0 c( P
2
8 a  t# j( k/ ~5 J 3
/ S7 Q* U8 Y5 W0 W& W 4
$ F; C' n1 F) k6 ?) ~" | 5
$ y# M& e- J# B$ L4 F) h 65 h' O; U9 r7 W5 M
7* F: _8 Y% ]6 T: H. B7 V! ^: a! v
8
5 v- e$ E* p6 j4 ? 9
1 i, R3 b8 m7 q, B6 H. C$ j. B  f</code></pre>
" D5 g. ]; {$ o' V2 r<h4 id="255-break和continue">2.5.5 break和continue</h4>
" M' ?) s3 F8 H1 P<pre><code class="language-javascript">// break0 r+ B; R2 a# v$ r
for (var i = 0; i&lt;10; i++){
) |- V; r5 j4 T) `( i1 N& _    if (i == 5){break}
5 k# M! z/ y/ A$ j; Q7 D    console.log(i)
" k( r; C7 C4 g2 d0 [1 x1 H}
/ Y/ K$ h, g2 ?# c& u- Q 0; G9 ~; }/ U8 k
1
+ C2 E/ F" g) q# ^7 m8 L1 f  _- R 2/ p; E3 c. Y+ e0 e3 T* t
34 m. ]5 O. F% a# z
4
* m8 F* \0 I* @& Z$ y& M2 K// continue
4 m( v! I. K; }- X5 r: _- `for (var i = 0; i&lt;10; i++){% q+ e4 ^/ |  E+ j. c
    if (i == 5){continue}( M- |/ r! q0 g7 g4 x
    console.log(i)
  P3 \  e2 Z& G! K% X' s$ K5 n/ F}
& e: Q$ ~& R' j 0$ X( W  l/ L; A* e" U
1
7 x! g& C7 `0 @4 U5 [ 2: d9 N, r/ R! c0 k5 A
3# O! S) @7 [3 O) Z' m; x
4
6 M2 P" `" ?) h7 w+ F 6- Z0 Z9 H. H1 w; h+ g
7& r! C# X  N! k( X* {: g
8
) N" h3 s; v, j% ^+ j" i 9
. Q  n" Q4 ]# E' c- ]! d% r# @% `. N
</code></pre>: i9 g. C( f% I- T# V% {) j
<h3 id="26-三元运算">2.6 三元运算</h3>
7 ]4 s) \) V, b<pre><code class="language-javascript">&gt; a
. F- ?9 K! O; b, X6" U' j' ]. H1 o/ D8 |" |) Y: c5 }
&gt; b$ H& N  o0 @9 u, }2 h% o3 R
3
# L- n& v' m* L
2 h- ~) D3 a' r//条件成立c为a的值,不成立c为b的值
5 M: i0 p3 T  x&gt; var c = a &gt; b ? a : b! i8 ]. Z3 {# B! o, u+ |( i
&gt; c
8 {" D$ O3 G! i% U2 `% ?" q! _6
, T* z2 V' M1 g. d2 ?4 N
& D- n- {! s# d, l. F. e// 三元运算可以嵌套. C8 L' Q* g2 [! `1 p; }
</code></pre>
' h2 p) p" s! M. [# \0 O<h3 id="27-函数">2.7 函数</h3>
* I- P4 [$ X! i<pre><code class="language-javascript">1. 普通函数* A" y/ {! T7 j4 _. C
&gt; function foo1(){
4 _8 B6 _7 @& n    console.log("Hi")3 w& l8 \* B) [& s5 b
}6 n/ }" L* F& R9 b
, c( T2 k5 u% [  Q. h3 |
&gt; foo1()
3 L  R6 G3 k; j, J( A        Hi
. Z( ^; z+ i1 l9 T* e2. 带参数函数
  u& S8 E, z+ I$ W2 S6 I&gt; function foo1(name){' R1 j( R2 f% O, ?6 i: O) F
console.log("Hi",name)+ s0 g% V0 C% Z) |  q/ F4 M4 X
}8 n3 q0 t. M4 v% A

+ P; K: Q7 t6 \9 X$ F% ?+ i5 G' a: E&gt; foo1("Hans")
" A, r# n- j. W. {) U: `Hi Hans& k8 g2 I) S% z+ b. O* ?. v+ y
) }- `) d3 C* B  L6 Q2 l$ n3 K7 Y
&gt; var name = "Hello"9 t, k2 Z/ `$ Q( Z2 K9 e
&gt; foo1(name)- _5 ^) }9 e! j8 v
Hi Hello
7 g9 O2 }% j0 Y! P: T7 M
& Z; T# R% c/ Q3. 带返回值函数& t) k, d) x; h4 O" Z: t
&gt; function foo1(a,b){
- ~6 f( j" h( Q) J& x        return a + b   
' Q% v% l# `" _8 g1 m4 F6 X7 Q1 @}  \( \9 g+ c8 \4 g) k! h/ ]$ X7 v$ X) q
&gt; foo1(1,2)( f  F$ K6 y) G: a0 f1 T
3- O  C) u( J* g
&gt; var a = foo1(10,20)  //接受函数返回值4 t0 _% Q7 ]* l- a6 H
&gt; a6 q' t; x; r6 V" X, y; k  e
30
" n8 _5 K5 C/ l3 z& y
( P, V0 i7 n2 h" C  m1 F. c1 j, G' [4. 匿名函数
9 O* K" F+ g! m$ U. Q% r% t& z&gt; var sum = function(a, b){0 l5 R; `, t) r4 x2 j, p4 s
  return a + b;
, U7 ^1 O, t; F1 ^}
1 a$ X& d! U$ U5 U&gt; sum(1,2)5 O8 \- t" J. |9 Y5 T
34 M; c$ ^6 {( I* Q

  L- g/ [% r! P4 z8 g: y2 ~* l+ i// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
8 \1 P6 I  f8 y# t9 E4 z&gt; (function(a, b){
3 |; i/ P  q% E- w/ j. [+ |  e  return a + b
7 p# E' g/ w% G0 m. D4 B& |6 i})(10, 20)  T. A# Z1 |; j, N( C; K
30
7 `3 a9 u: Y/ [' Z& \0 M) z
2 C: N5 B- s: X5. 闭包函数0 l  H% {! O  @7 E+ V
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
& g: w9 H* [( v" a& evar city = "BJ"
* G" l: K/ I4 Q; C& D7 x: u+ X2 Sfunction f(){
3 X8 W% j+ g/ m    var city = "SH"& v: ^( q- F7 G1 L, w
    function inner(){2 P' R& _- \: ~6 s& v' ~& \5 p# S
        console.log(city)6 `- I' I3 g; K" [1 X- J
    }" s. X2 }$ j- u# T% a
    return inner8 t6 g9 h/ e! A1 j6 v6 o2 x
}- p4 H0 C# u4 _7 ?" @
var ret = f()
1 p! Z0 ?* [; E! P& {! }ret()
6 z( n- e, I7 ]6 L& P' e# }执行结果:% p( c' [; X+ O# k9 R
SH
& \8 Z/ z7 y& [# Z- v
7 j' `+ E  p3 g' ~2 D, L6 N</code></pre>
: \3 b4 [: q$ U<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
1 K4 o# b0 L$ X! e. Q<pre><code class="language-javascript">var f = v =&gt; v;
7 x5 L3 Z+ X" g5 y// 等同于# y! Q6 ~* b5 N9 H9 G2 A# L2 B
var f = function(v){. J; J: y  P1 [6 e- D
  return v;
; ]- J0 u0 g  v' m" U}
5 f1 J- K( E+ V% }" `- w) h</code></pre>
  @% N9 r( `9 U! |<p><code>arguments</code>参数 可以获取传入的所有数据</p>9 i7 ~) @$ j  p: Q) }
<pre><code class="language-javascript">function foo1(a,b){7 V0 _8 J+ W7 @$ P: P1 i5 y! p
    console.log(arguments.length)  //参数的个数 : A% z; W) @, W& _* T' u% @5 U" {
    console.log(arguments[0]) // 第一个参数的值# B, l. ~! m; r' P
        return a + b   
1 V. [0 i+ i/ n}( E4 ^) y2 L* Z
foo1(10,20)
8 e6 t" n' p4 k, O7 {+ o( t+ l结果:: o3 J" I8 B9 Y% Y* K
2          //参数的个数 / H( p7 N4 \. V  v0 @& f9 Y
10        // 第一个参数的值; H# ]' |2 r2 Q1 x. D& ]
30        // 返回相加的结果
# ]+ F3 p% l# N</code></pre>
0 i4 r4 T$ F0 Q" J3 I<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>5 q! i: y* c% A0 j9 [
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
' C2 Y1 H- [$ P. m. B: w<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>) a- q4 x# m3 w3 c) ?
<h4 id="281-date对象">2.8.1 Date对象</h4>7 b( }: i. y+ Q6 G
<pre><code class="language-javascript">&gt; var data_test = new Date()
& C& l2 w& Q# v+ ?% V( D5 ^&gt; data_test7 x( P. C# a% g* d$ K6 ]2 L
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
/ M9 E7 z* u/ }  t&gt; data_test.toLocaleString(); E/ w/ d% D1 X0 L4 d  d4 |" R- f1 l* O
'2022/2/11 下午9:44:43'
' G: W: U" K2 i0 `8 {. e
, w. q. W7 X$ _( e  j0 o: Q&gt; data_test.toLocaleDateString()
- z5 z+ e, j$ }'2022/2/11'* h7 y% B9 j3 x* S

0 h- d  T" O2 G0 @- [; E2 m&gt; var data_test2  = new Date("2022/2/11 9:44:43")
7 |& A' K: I8 q8 z&gt; data_test2.toLocaleString()
( S- l# n% n: E; M1 D'2022/2/11 上午9:44:43'
5 _1 E2 {0 Y' H& V
7 O- @# S% e5 R3 n4 S! W// 获取当前几号
& l1 a# a0 Y8 n. f' Y&gt; data_test.getDate()
" y4 d0 L" |1 T/ r11# b+ U( J- l/ P! j- U
// 获取星期几,数字表示" P$ Q0 k1 U2 G: o3 o! X
&gt; data_test.getDay()  4 q* H& O6 G: P
50 m# [% b7 K) D
// 获取月份(0-11)* h& o. }7 g5 M3 h( y  y: V6 J  |
&gt; data_test.getMonth()9 |; i9 a' f- e: G
1
9 q# d  d' X1 ^& y$ m& Z$ u// 获取完整年份
  a8 S, c  y& Q&gt; data_test.getFullYear()- Z# m  u' X& `
2022
+ M$ n6 u0 M% h, S* Z" `* i// 获取时, v! Q: L$ K+ m# n# z# c  O9 Y7 _
&gt; data_test.getHours()
9 ?& s8 `6 m% }! R: k- t% a21
  H( ]* O) j8 ^, M9 p# m* b9 t- j// 获取分
0 Y6 I# _! T! h! T) M$ m( e&gt; data_test.getMinutes()
1 g/ e: Y% Q, A1 `- E; `5 W6 `44
( ]" ]( N1 f3 O# \// 获取秒0 \% f) e! R9 ]2 O+ J. J' A
&gt; data_test.getSeconds(): s# t" T, b; r3 ~0 m" t! q  y
43
; ~3 m* z6 p' w7 Y# s( L// 获取毫秒- q8 X8 H, e! D) Y; p
&gt; data_test.getMilliseconds()
" u0 d' ]& x# m" f- N$ R290. `. ^* j9 }7 f) Z% I3 x
// 获取时间戳
9 k2 N2 F0 I, X7 y" u&gt; data_test.getTime()
- H* q5 s$ d1 t16445870832901 _% l+ L# X) g9 V9 }5 s) l5 b
</code></pre>
& C& k: V8 ~& @8 r- Z5 _8 E: K<h4 id="282-json对象">2.8.2 Json对象</h4>2 v2 M7 O* V& g* X& ?, X/ M: `! O
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串$ y" x, M8 s6 ~2 o, S
JSON.parse()  // 反序列化,把JSON字符串转换成对象$ W  t9 }8 {/ |& h$ m4 F0 F; ~

) v1 `9 z3 O: W+ {3 K  W6 W// 序列化
. S1 x. g/ Z3 b* v- r9 a0 d3 ]' E&gt; var jstojson = JSON.stringify(person)
( U/ u1 N8 o7 G" ~! k( [/ |# g4 ]&gt; jstojson  , G) O+ w1 ^3 z9 h9 Z/ ^
'{"Name":"Hans","Age":18}'3 E  @6 N6 K  C8 z4 N

9 P- ^4 @3 K5 C/ C. _; m// 反序列化
5 n) \. l7 A$ X$ X1 x* {&gt; var x = JSON.parse(jstojson)+ w7 q5 C* @6 [- `) k- F
&gt; x0 y1 l7 z% T5 @+ ^) R! O9 J+ f
{Name: 'Hans', Age: 18}
+ i/ e& e" ~, j' O8 M&gt; x.Age- l; j7 H8 e: ~  o1 }
18
. N+ i; H" \$ i; a7 w6 [</code></pre>! i! l% N5 G# O6 }/ ]" N+ I
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
6 f9 X: H2 A1 t1 `" d) r<p>正则</p>- U. c- ]" S1 z! H( ]$ |# {* I
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");5 ~% o8 `0 [* g" N( j! k: |5 w
&gt; reg19 H) R$ v' ?, L
/^[a-zA-Z][a-zA-Z0-9]{4,7}/, W; }5 p, [3 w6 L- U' G' g/ G
&gt; reg1.test("Hans666")
9 U6 f' G, g6 etrue9 E0 T3 S# I/ i0 v  {9 |

, {# B8 \( o3 v; q  w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( q3 Q3 b, T6 H, `2 J( P&gt; reg2
+ H% |: [. g9 P& x/^[a-zA-Z][a-zA-Z0-9]{4,7}/& u/ V% U2 `; O% O
&gt; reg2.test('Hasdfa')# \/ h1 l) }0 R0 [# Q* K: V
true& [' [2 p" {! o( h( t" ^6 O9 Q( J

0 ~& l8 {9 y5 ^$ h2 m8 E6 ]全局匹配:
. [& x* G$ Q& Y, K&gt; name
1 U( t& _: E3 e( H/ V* `'Hello'! D' h( F' q  E! g  V6 I1 ^% i
&gt; name.match(/l/)
5 {) ]# [- U$ K; `1 E['l', index: 2, input: 'Hello', groups: undefined]
4 l. r7 f4 w2 e7 M
  I* C2 Y; Z% {, P1 o$ ?&gt; name.match(/l/g)
# r* m6 V8 M9 L5 [7 F(2)&nbsp;['l', 'l']3 j( ~) L* X# y2 E4 ?5 P% U
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配. O6 q' J+ k0 i7 h
# W! @3 ]) y. i: P! x) S
全局匹配注意事项:. p: o2 d9 r* n; w/ F$ K
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g+ v  G  L, z3 X, k" e! D7 o
&gt; reg2.test('Hasdfa')
! K( d  I$ M1 b- i' k" t; u5 P  ?( ftrue
3 o& O0 u* p" ?$ V$ L&gt;reg2.lastIndex;
, Z& I9 [( j8 n" R60 ]: B* F1 @, ?. ^6 p, N7 ^# g
&gt; reg2.test('Hasdfa')
  l1 a8 |" s3 Ffalse$ ~2 {2 f: \: ]7 f
&gt; reg2.lastIndex;. l: A2 l/ q& }, w
0
- b) H) B0 o; U&gt; reg2.test('Hasdfa')+ [& Q: s4 b; U, b# W0 W- d( B
true6 \% Z* y& U+ i  L/ w# {, t
&gt; reg2.lastIndex;$ c4 ]7 d7 i* ]- P" ~. O
6+ y# ?- @3 ~5 h. b: ?6 k
&gt; reg2.test('Hasdfa')
6 Q+ K5 Q! u% f! wfalse
& I# C1 k9 b/ r- k* N0 }) p&gt; reg2.lastIndex;
6 y3 b0 X, O" A8 X' G" U/ U0' M* f: b! p+ ~; B- ^; I2 d% v% Y
// 全局匹配会有一个lastindex属性
* \9 y+ d, b- J% e&gt; reg2.test()
9 r0 t1 {2 f& R8 M* `  o( ^1 ?false- `! z6 z; T' @4 \
&gt; reg2.test()
: K8 J  d2 N9 Ttrue0 z/ \% l6 R$ u5 F% E$ o
// 校验时不传参数默认传的是undefined
  r# ?3 ]7 c2 [. x$ r$ X& C</code></pre>; {8 k7 \1 ^. |& ^& u
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
1 a5 \) T6 g2 q% o; ^  G0 c( G<p>就相当于是<code>python</code>中的字典</p>
3 K' f. e! @1 Z$ R! {( g( H<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
, b; K/ n$ J9 z  E, X&gt; person. I7 f5 P) _1 _5 V5 D
{Name: 'Hans', Age: 18}
; \9 T5 t% S3 P; [2 `; U&gt; person.Name
7 M1 i! i) y/ K- }'Hans'
6 J! t3 ]% ^: y8 K5 O( \, I&gt; person["Name"]: O/ m: ]/ g& \5 S) |( d
'Hans'
, ^% `3 u8 E% o) p( K+ T" I9 Q' a' l9 m( E+ d/ z' i
// 也可以使用new Object创建, N" a9 Y. R/ y% g5 F' Z
&gt; var person2 = new Object()
5 T& Z! ~3 ~. Q" ?% P&gt; person2.name = "Hello"7 `3 }- s: d  \/ I
'Hello'
/ s' w  Q" u' w; u# h7 k$ M, t9 B&gt; person2.age = 20" @) d9 e% h% @  Z0 ~
20" m9 T, G( N* H$ z0 K1 b5 r7 X
</code></pre>
2 N" e7 V+ p+ n5 J+ i<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>2 a! E& U9 A: S% w5 J  \
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
0 r7 p: h1 e' T/ v. g6 V! `& y& [  S<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
/ `) S/ p5 y* R7 E<h3 id="31-window-对象">3.1 window 对象</h3>
/ q' v# {. e) D  c( ?+ h0 B0 T<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
* J4 f0 Q$ n& p4 Q4 `& {8 y3 C+ p<pre><code class="language-python">//览器窗口的内部高度
4 `6 d6 w9 G+ X- K% ^9 m* {window.innerHeight . u( I5 c/ B, j: t3 U4 l3 Q: h
706
$ d+ Y5 R1 A- i$ q5 k//浏览器窗口的内部宽度0 @# \, r+ Q& I! P5 D
window.innerWidth
5 x! ~; s, ?1 c1522' \$ W$ ]# m6 d7 W$ ]% b
// 打开新窗口
/ l. g: p6 r( {8 E  Z( u  f  Bwindow.open('https://www.baidu.com')3 g- K! W$ b6 C  B
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}+ O: {  ?3 |, ?
// 关闭当前窗口, L$ _. E: K9 N" s
window.close()
8 l8 g0 t& y! x9 P) s//  后退一页2 a' T7 c; ]- e% Q: s. N
window.history.back()
' w4 ]$ e6 P7 e2 Z' ]// 前进一页- z5 @1 H' W, j# |1 m
window.history.forward()   y4 [# ^3 j, u: }1 Y4 u; t; d
//Web浏览器全称
- ]1 [$ e: e; w1 qwindow.navigator.appName2 `+ D3 M  V- [3 U2 L
'Netscape'% }3 {- m9 e+ H6 y* ~
// Web浏览器厂商和版本的详细字符串
4 m7 T6 q4 }2 B: l5 ^2 ~" Cwindow.navigator.appVersion
! J$ M0 D; i0 i8 c; ?. v" f: c- T'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'7 E: Y4 h( n2 c. D  H8 J! k
// 客户端绝大部分信息
: V9 j/ I; q- X  p4 o/ N$ a, D: ~window.navigator.userAgent
6 X' O/ r6 B1 e' D& X'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'9 ~* }2 y# u% a, |/ r* _
// 浏览器运行所在的操作系统
. ~  ^6 {5 |5 E& _window.navigator.platform
. }) T  `6 g, O  F) N" ~8 F+ C0 ['Win32'2 e1 P+ G7 p5 t  k6 I, i
3 ^" T: i2 Y8 m
//  获取URL
9 _& ]% v# R8 ?8 s+ h, ?window.location.href
: q+ t) \1 h, E- G- A2 E- g) |7 F// 跳转到指定页面
( J* ]* F; p8 q; J8 q) R4 \6 Kwindow.location.href='https://www.baidu.com'- Y/ z$ ?( K- R0 U3 H, u, b
// 重新加载页面/ B* T$ Y! ^# J! _9 `
window.location.reload()
0 \, k) w# q+ S</code></pre>
; t6 I/ k" I: X) `, S2 l* V8 a<h3 id="32-弹出框">3.2 弹出框</h3>
+ m7 M2 g: U9 X<p>三种消息框:警告框、确认框、提示框。</p>+ s$ X9 Q0 T4 a& {4 g* \' }  d
<h4 id="321-警告框">3.2.1 警告框</h4>5 C) i0 b$ T) \
<pre><code class="language-javascript">alert("Hello")9 I' z9 p- r4 |2 T" H- `
</code></pre>+ J: f* E2 S7 z# c6 T
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
+ r& y. {1 i: f( V+ H% M<h4 id="322-确认框">3.2.2 确认框</h4>
& b- v, \$ f/ f% E9 t9 @. y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; X+ f* Y8 |0 T9 \# X+ J<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
( I4 J! X8 ^( s# m' rtrue
+ \5 \, S# D2 P6 |" o&gt; confirm("你确定吗?")  // 点取消返回false8 f/ p! [& f9 [7 u, E' ]( g
false1 W- q( ]  _4 }  o* d  \
</code></pre>0 m2 y3 ~, k# @3 f. _# ]" V
<h4 id="323-提示框">3.2.3 提示框</h4>
* z7 N5 s' [; L& O6 t* L7 r( p5 n<p><code>prompt("请输入","提示")</code></p>
( a4 b; G0 i6 N<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
6 n# @$ C! v0 V<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>* r7 D* f, `* E4 I4 ^! n3 A# Y
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>6 |, B" ?7 X: S4 u' a3 P" |  D+ h1 ~
<h3 id="33-计时相关">3.3 计时相关</h3>
% U: B4 p, L3 @& i# Q$ s<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>7 s1 y& t; ]8 ?4 T; J
<pre><code class="language-javascript">// 等于3秒钟弹窗
% T; r, ^/ a0 hsetTimeout(function(){alert("Hello")}, 3000)
/ c  w" c8 y& W% V8 Z3 _& X$ s% ]  c/ U
var t = setTimeout(function(){alert("Hello")}, 3000)
! Z; e: Q& S% n& J1 t0 b" {2 o3 L; ~' [1 \( ~$ `2 ~
// 取消setTimeout设置: V: Y1 a6 F" ]( V: e7 @& l
clearTimeout(t)1 s( @5 i: q; i4 j6 x
</code></pre>+ k9 O1 j/ A/ `
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>1 L# J6 _5 ^1 H3 A; Y
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
# W( }: a" U3 a5 @<pre><code class="language-javascript">每三秒弹出 "hello" :6 g9 x) L% k) r& a: Q: U, u
setInterval(function(){alert("Hello")},3000);" I, T' Q& F  S( E
</code></pre>
' S4 |5 [3 q9 |: o$ p' o. W4 u3 C<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>: D  k. a  ?" ~/ `7 d
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 {5 d: b6 v  a# y//取消:8 ?8 C. O- I3 A) A7 O8 U5 w
clearInterval(t)8 z% s7 v7 S. ?  E
</code></pre>" p+ X% s4 M! Q3 l. _* m8 K5 t9 z

! T( P* r0 ?; O
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-9-2 23:52 , Processed in 0.344489 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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