飞雪团队

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

前端之JavaScript

[复制链接]

8038

主题

8126

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26444
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

( c& I5 {/ V% h3 A<h1 id="前端之javascript">前端之JavaScript</h1>
+ O. e5 ?% O. y1 r( F  \$ S8 O<p></p><p></p>8 y' b8 K* J5 B) [* h4 O
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>: E" Z2 `% U. F5 J
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
9 q5 E5 t1 Z1 O$ S. ?2 c4 G6 @+ s它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
$ v1 m) }  a" [它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 G0 o2 U; ]% w8 c: B它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
: x, x+ @/ k( u$ P( ~* m% p3 Z2 M<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
# W* f3 R# w) g  D, @4 O<h3 id="21-注释">2.1 注释</h3>
- a9 M- \7 v1 t, I9 {<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
2 c! j: N( u% `7 U' l7 ^1 g. X- e<pre><code class="language-javascript">// 这是单行注释
4 t1 `4 n0 s5 O& X9 @+ }7 B$ H& {* l- Z$ y; z8 o
/*
& K' O# |" d# r这是多行注释的第一行,+ D  S0 u$ b' L& O6 ]" ^
这是第二行。0 |% z: V/ L8 M! N
*/
& H. @# s: u  y: v</code></pre>
* I5 e( O  `8 W! x, T" X2 t<h3 id="22-变量和常量">2.2 变量和常量</h3>$ X9 q$ `( v) }, g& R
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
, y/ Z5 ^) P) A9 w' q. J<ul>& @! Q0 S; N: @' p  z/ Y
<li>变量必须以字母开头</li>
+ x/ D9 X8 M: c/ m6 V& Z<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
) r, m8 U% Q. E7 O8 Y<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
% |1 R! \1 K6 a" E</ul>
" n! L% \# {& n<p><code>var</code>定义的都为全局变量</p>
, H' y: w# a0 N* i8 s, ^( s+ B<p><code>let</code>可以声明局部变量</p>
! ?; A  N7 a$ \, S9 _<p><strong>声明变量:</strong></p>- O& X4 Z7 x3 ^! h0 I
<pre><code class="language-javascript">// 定义单个变量# L; L# b% A# J% B: ~8 S
&gt; var name2 F4 a/ H% A, \  x" o% F
&gt; name = 'Hans'
0 T3 c6 r  F' m" b+ G* t//定义并赋值1 \/ V- F, f8 u+ a: D. S
&gt; var name = 'Hans'" m/ C' ?! N% U4 i
&gt; name* h/ Y# P0 l# P# s, q. ?
'Hans'
& P6 u; J! I( |0 R4 M( T" Z7 k) ^3 R, @
// 定义多个变量
7 ^" o9 o2 b* g; _& e6 ^( ^! [&gt; var name = "Hans", age = 18) \" }" u# x7 d; H6 n; A) n
&gt; name& [! V  J0 H, ^
'Hans'
. i! {! j  R& h* f2 p0 [! W( b& u&gt; age. c9 g+ }4 |" j- [2 g3 h5 J+ d
189 }% ]& f$ H, r) r: Q5 P
* V0 y, l* ~: m3 z' p
//多行使用反引号`` 类型python中的三引号+ q+ F' e% S2 ?4 \/ o$ {
&gt; var text = `A young idler,
% t5 o1 @1 t' p; q" Zan old beggar`, c( {& L; ^4 ]7 W
&gt; text
9 x: z) k8 O  j'A young idler,\nan old beggar'6 g% F) j2 A) n  J" n( t, W9 b
</code></pre>. C% I0 e6 R, \# }
<p><strong>声明常量:</strong></p>9 ]  J; z& R9 d
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
) [& H5 c  f# z! g<pre><code class="language-javascript">&gt; const pi = 3.14
/ c8 x. R" J6 }9 |- }&gt; pi
( S( O- B4 k2 m( o* j3.14
9 E3 G6 h. a& `( y  s" }&gt;  pi = 3.015 u  W9 C% s* O" W# v; \' C
Uncaught TypeError: Assignment to constant variable., t( n# f& h% X. X
    at &lt;anonymous&gt;:1:4& W& F$ ?6 ?: R, L$ U
$ x8 U/ ?! X% U
</code></pre>
2 o/ N! Y, ~# a<h3 id="23-基本数据类型">2.3 基本数据类型</h3>- G& [' R3 U" ~' Q
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 D' t: q, j! ]( T" H! |<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>- r* ^2 O8 e& \6 Q- R7 i3 r1 k
<h4 id="231-number类型">2.3.1 Number类型</h4>* e+ k; w) q5 I* Z& \5 @
<pre><code class="language-javascript">&gt; var a = 5
; t8 O7 X& C1 i2 H1 H( H4 _' C&gt; typeof a   //查看变量的类型  
; {& X3 f$ U* h; S- |number
% L4 o. R& E8 b
5 {- }: \4 S, l2 X- M( }&gt; var b = 1.3# l% h/ y( u- ~, W( i2 z
&gt; typeof b: i5 X! ^4 e+ K' e; y4 p- C
number1 l6 ~7 n; Y! H! ]- ~; z3 Z* P

7 z) g7 f7 R( r" C# c7 l- j// 不管整型还是浮点型打开出来的结果都是number类型
4 ?2 U( V3 h* q3 i
$ w' z! B5 \( `9 y4 B& i9 M/*. p" j, P4 q8 }) A4 t
NaN:Not A Number4 p5 E2 q1 a: g. n: R6 g" ~: z
NaN属于数值类型 表示的意思是 不是一个数字; C7 J7 @7 u$ `$ w9 D) P) t7 [% g
*/
" {* c, ~% F% h  T- L6 V  x  F. ~8 b  W3 l. @, m; M: C0 L4 P7 Q' c
parseInt('2345')  // 转整型2 a  t/ h/ S1 |6 w
2345. N6 W  `* m& y# p' v: }+ j2 f
parseInt('2345.5')  d' B, D8 z+ y* ?
2345
$ a4 z2 ]" `9 C, YparseFloat('2345.5') // 转浮点型1 N. G% E- ]. _' w6 K! `
2345.50 o* Q2 f) n" J0 Y
parseFloat('ABC')9 O1 K# b0 k* t9 k# w
NaN' O; u" E- l0 y# a
parseInt('abc')
8 |6 W9 f3 `6 q3 X* X/ FNaN
( J6 O8 U! {1 i</code></pre>8 q' R6 }# {. s
<h4 id="232-string类型">2.3.2 String类型</h4>
; B0 L: m/ L' ~: B<pre><code class="language-javascript">&gt; var name = 'Hans'6 _2 i4 N7 ?( ]7 n& ~
&gt; typeof name
& q- d. i# U/ i- s  c9 N) C'string'
" t  C. U+ `; [, B6 q
/ P2 e9 c/ O  S  C; X+ x//常用方法
" c  O! u+ |* z! i0 ~% U// 变量值长度
! p) i  g9 B/ A. v&gt; name.length! N9 [' S% X; ?% M( p
4
3 V! ?# G% l/ k# X1 r: d/ Q// trim() 移除空白
: |4 i  y5 }; W# i% N% b+ `&gt; var a = '    ABC    '. ?( |2 _+ @; W. F+ Q% p
&gt; a' D$ m( S# x) J
'    ABC    '
6 ]9 v3 C- @2 c) x&gt; a.trim()
( V+ v* H2 g1 U! }6 z% Y'ABC'
- a. y" I6 B, G. C" P//移除左边的空白1 ?; i* e4 @1 P; `
&gt; a.trimLeft(): e, c7 K! y+ I# m; {& t
'ABC    '& w( J( N# a" A+ e; H, T% t$ n- M
//移除右边的空白3 x+ x+ q$ I- M$ K9 @( P8 |
&gt; a.trimRight()
) m+ y) {0 L7 J8 }# s3 y'    ABC'7 c0 z' B, I/ j1 w) L- `
' Q) n) F7 i+ ]* W$ n
//返回第n个字符,从0开始/ L7 L: r: ?; S1 B; [5 m; D. p6 z8 s
&gt; name
* |/ }7 w) X  G( v' c7 r'Hans'
! f( w& Z. [0 E1 X0 ~&gt; name.charAt(3)% |- Z8 `. H0 L3 Q7 _
's'6 t8 Z/ a5 ^8 g
&gt; name.charAt()
/ r: q  i; A6 T7 A8 z0 l( ~'H'5 w* f+ p' t9 v! N# ]" J: Y8 y1 D
&gt; name.charAt(1)
. i, M( Q: {, x" ~( P2 k7 \'a'
7 M9 t; c- K! i9 {4 B, J7 m. E6 P( x( Q+ R/ ?
// 在javascript中推荐使用加号(+)拼接2 m- X3 H0 H1 n8 R% X3 i  `
&gt; name8 j5 o6 {  W" M: N/ l
'Hans'$ o* R& Q$ E, n0 p5 l" ^
&gt; a* P6 e. b2 c% Z& `) D) C* V
'    ABC    '+ a0 L8 p$ ^/ n
&gt; name + a; I" |+ w* T/ J3 ?+ M
'Hans    ABC    '
, p) X- f! Q! l6 }- Z// 使用concat拼接7 Q0 o- k) g4 e! n# p
&gt; name.concat(a)
. y' n3 S3 ?" k! c- P) X'Hans    ABC    '- c+ [2 u, i% G' ?2 s, [
5 w. ^2 w; [5 n* ~& a
//indexOf(substring, start)子序列位置
2 G* J/ M$ @* T- U1 ?# X
- y$ d+ _; f  z6 w' [&gt; text
2 q3 Z, u! b# ^; b" l'A young idler,\nan old beggar'8 t7 |& E" H/ s7 K4 u2 C" u
&gt; text.indexOf('young',0)# T- q) L, {/ t; B/ q7 v  Q
2  L- f1 Q. @9 \# O

' \2 P9 |. z) X3 j4 Z$ T//.substring(from, to)        根据索引获取子序列& ~$ m- y0 x9 K6 \( q3 s
&gt; text.substring(0,)- n5 @' {% L/ U% Z0 A" e4 k
'A young idler,\nan old beggar'+ A( [+ }1 U* \! m0 S3 D
&gt; text.substring(0,10)  O( t3 X2 V$ D5 O( q
'A young id'2 f2 p- l7 Y: Y% k

5 S) P4 _9 u! |// .slice(start, end)        切片, 从0开始顾头不顾尾- D- w2 O& J' {5 @, K3 i# d
&gt; name.slice(0,3)" P- S5 r7 o1 q$ ~4 Z
'Han'- [, M* S+ N1 X, F/ ]9 j3 Q- }8 E

5 t( j) v0 Y3 y6 l8 @// 转小写9 Z8 c+ Z$ e7 g7 c" I5 X' ]
&gt; name
) H  j- i- B6 [9 p# }'Hans'
! A0 }% A# X! I&gt; name.toLowerCase()
+ g/ X( p8 @7 V; ^- V$ ]4 b'hans'
. _: C) o# A9 U// 转大写
( X7 \; v; M: m, u&gt; name.toUpperCase()
  w  R/ }: g$ I- \( S9 W'HANS'# W; h2 H0 x( j3 C1 z
/ A% M* V$ i8 e, G3 O/ _7 o
// 分隔
/ c6 v% ]3 s' U& C&gt; name7 L: m# ^, V6 a  B$ }
'Hans'( I& m2 M; q6 q  e# e$ n) y0 i
&gt; name.split('a')3 m7 }$ R; |4 r8 l- g" P1 V5 M6 g
(2)&nbsp;['H', 'ns']
$ L  Y7 n6 @$ A7 p4 M3 y$ D& {' A</code></pre>
: }. C! w8 V3 z( s0 n<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
4 o2 h7 N* p. O8 z! a<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>! {2 O5 i" R& @3 Y! l( A: Q3 g& ?# q
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
; g/ K% P% n, l. t<p><strong>null和undefined</strong></p>
9 T* }3 }- N0 M/ V1 i<ul>
% [, l6 _) Z( K! ~1 X<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
9 P: }' m6 C/ q$ e" Z<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>8 O( a* p8 V7 S9 h! `7 F
</ul>1 E+ r/ i# k" d! _2 c* g, t# Q; y
<h4 id="234-array数组">2.3.4 Array数组</h4>  x, g! ]6 Q+ f8 s5 K  ?6 W$ a! S
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
. p8 Q9 A, C% }) |5 k7 b5 o1 f<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
% N2 q2 A6 a; A  l  E7 y( G% L&gt; array1
' X- i9 Z# t5 u( F! }2 i& P+ z% F(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' M" N% @# G4 Y% j6 d! x, o
&gt; console.log(array1[2])  //console.log打印类似python中的print- L/ B: m9 _/ |+ N+ d5 t+ F) O- h
3
* A$ H' O+ u# M$ \2 T! H2 V9 ^! \// length元素个数
7 m; I$ B* z3 A; z4 L&gt; array1.length
: ~+ B& i- J8 r2 |/ c9 l6
2 i7 f! O# n- t// 在尾部增加元素,类型append
3 h  c$ D  J% j&gt; array1.push('D')5 g' ]  g4 |1 D; N3 ]( F' Q* l& V
7
! k2 {9 h$ T( O& O$ E( h7 g&gt; array1+ s* `4 X8 w9 e  Q2 f! X" k
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
7 G8 _4 n( S' ^. m7 w// 在头部增加元素
! E/ q9 q5 g, ]# x! J& c0 H&gt; array1.unshift(0)
; a5 q" |$ i2 n0 h( s/ O+ B5 U8, U; r& E; @, @; T% i& K+ c" ^
&gt; array1
6 Q' \2 x  }. z& j(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']" K% M' ?; n0 U: [+ X
( G  v: H, f! N6 u" g! T
//取最后一个元素
, u. z7 J* X( ~9 X" |" ^&gt; array1.pop()& B5 A# [* g# L8 Z! A3 |
'D'2 X1 P# e3 ?% ]! r( U
&gt; array1' _) W5 ?1 H; D/ O! ]4 r
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
  C) `8 d2 _% o! g% F! }; V//取头部元素
2 P: a, S8 q" n- I5 k. T. G&gt; array1.shift()
$ Q1 k$ x( K; X8 g5 c  b) B$ Z+ e9 z0
2 ]) Y1 `. x; W3 w( m&gt; array19 j; J% R+ V9 P( E, q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
9 z. l: \2 `6 [4 ~7 g: o
% B  |( e( Q/ K( w//切片, 从0开始顾头不顾尾
& K9 ]* N1 a3 n! X&gt; array1.slice(3,6)
) \4 a4 `5 i$ y  L. j(3)&nbsp;['a', 'b', 'c']; s7 @; M, J/ l$ F% p' Z8 C
// 反转2 u# d$ O; Z) ^  x0 \
&gt; array1.reverse()6 F7 r8 H% b+ z$ g2 r2 D
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
/ m& k2 T- S* w0 D// 将数组元素连接成字符串
8 L9 h% D# k# V: N- D&gt; array1.join() // 什么不都写默认使用逗号分隔& ?3 D$ ~( C) [1 Q
'c,b,a,3,2,1'
! j5 {6 k, }$ U+ s4 v* P&gt; array1.join('')/ z, G6 `; q7 J: u. K6 A
'cba321'( n  j! A4 V- S8 X/ p, ?
&gt; array1.join('|')2 E0 c  ~. Z( o' N8 M2 x
'c|b|a|3|2|1'4 C5 r+ g- P% r# K

0 d3 [' G& d' c% m9 {7 F// 连接数组' Q# e  m2 F% N! r  o7 K
&gt; var array2 = ['A','B','C']
" G* j6 }5 L5 N2 e$ [2 L* P&gt; array1.concat(array2)
/ b0 H0 y1 H" L8 z0 q(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']5 j4 G" f* }; Z

2 x4 F3 `# ?5 W" r2 @// 排序
5 n& ?0 Q$ P' z&gt; array1.sort()9 ^# A& Y6 S8 w* |/ G# s5 U# B% j
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- P& i0 P$ s% o, F  G

  e2 i+ G9 i2 J8 a: J// 删除元素,并可以向数据组中添加新元素(可选)% }4 g7 S8 k# @. G, s6 Q& }3 }% V( M
&gt; array1.splice(3,3)  // 删除元素
# p: x9 ]2 j% J) Q# ~(3)&nbsp;['a', 'b', 'c']0 D5 H' r: n$ S4 S; h" l* P
&gt; array13 h- R/ E' E9 D1 T, k
(3)&nbsp;[1, 2, 3]
: `. F& ~% g% `4 C6 P( L. h2 h0 R&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素, ^8 I: p, B( B; c& \4 C5 m( T5 c
[]; P0 k4 x6 W0 J* w/ W
&gt; array11 t2 C1 u6 ?) b. O
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C'], R4 z( w7 r6 j0 K' R

+ M3 r2 j2 j2 Y1 X' T0 I/*: E' g) A! }; N! P. F" v+ E
splice(index,howmany,item1,.....,itemX)
3 @& c; t8 U! U+ f; d7 h1 lindex:必需,必须是数字。规定从何处添加/删除元素。
4 ]8 Q5 M. ^/ x# Y) \+ P. t! Y4 D4 nhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。, O/ a0 [! Z6 J9 [. I% ^$ J4 i
item1, ..., itemX        可选。要添加到数组的新元素
& X% \& d% V4 S9 z*/
2 Q, e  }  z+ }; W- T% t: A8 b" S" @" {1 q6 Z7 q
// forEach()        将数组的每个元素传递给回调函数9 R+ G) y9 S- L% }: j9 K: m, ]# L& a
&gt; array1.forEach(function test(n){console.log(n)})9 j0 f- z# R1 p1 X
1
0 t! V" D5 d+ D. y8 r7 v  j4 s+ Q$ j 22 F" l8 B5 L- h/ f2 M, x
3+ d! E  T4 [- \: W, \
A
# Z; ~8 @; y- o( q( o& H B) e3 u. W, g) Q3 E& y/ L
C
! c2 l2 t& L( V0 u// 返回一个数组元素调用函数处理后的值的新数组  N8 H. b4 R# y9 P) G* F' i
&gt; array1.map(function(value){return value +1})
& Q: r& a8 j# r) l(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
' ]& a9 I+ Y. B% i6 K</code></pre>
' m! o, \( [! O. R+ K, ^<h3 id="24-运算符">2.4 运算符</h3>
9 x; f9 @" `! i) a  K! h<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
8 r9 c2 G% Y! [2 V<p><code>+ - * / % ++ --</code></p>+ G; N9 s1 t6 f: P' f
<pre><code class="language-javascript">&gt; var a = 61 O9 A/ _' v2 r% ^7 f5 H' W
&gt; var b = 3
( k7 i) w3 \2 B% f// 加
; r. ]0 u. d  C2 l+ u8 \; O&gt; a + b! v- |/ g) W$ e1 O
9
$ W* a" X' l' ]7 p& {2 h, Y; ?" b// 减
& r1 I7 a1 V; V$ r, a+ z3 ]- U; w&gt; a - b
4 R0 s  K# m& `" T4 s8 _5 T. ]5 d3% M) b' W3 D0 \/ h/ C' z, w2 Q% k
// 乘! R- c: z/ w0 |0 K
&gt; a * b
& a7 o# J1 E6 N18. @4 h' Y+ `6 |3 W2 s. C
// 除+ K7 o, b) \' b; J
&gt; a / b
0 _/ A- e' f5 y4 Q, v5 ^1 w26 @& `+ Q* @9 a6 H7 L1 U& }
// 取模(取余)! J2 w" J1 ?% `5 e
&gt; a % b
% o4 a! l5 S* \% v) N8 D) W0
+ i/ n9 P  K4 K$ @// 自增1(先赋值再增1)
5 ~' f& _3 s8 \&gt; a++( y5 X& b8 Q# y0 }0 c0 n
6
3 A/ C+ c1 G' p, x2 M&gt; a
' {0 g, i2 k$ S7
; I! _  ]3 u" \" g0 D1 c// 自减1(先赋值再减1)! r1 a* m8 m+ C4 s
&gt; a--
! s  H+ e* v6 |# i1 n$ f% [7) Q8 E6 ~, `2 L& W5 I1 I8 O" O
&gt; a" P' Y- ]; K' \
6
: Y. f' ~; R2 `6 h* R9 Q; O// 自增1(先增1再赋值)$ O# Q( z4 K7 \! T0 c
&gt; ++a
0 ?3 Z0 n+ S4 Q/ W9 y7  @: w6 E: p4 D, p
// 自减1(先减1再赋值): v, `; [6 n3 H" ^& o% N. P9 D; k
&gt; --a
9 n2 G- ]9 J$ p& ^; F/ {" n; H! p6$ ^$ ?( w& K. m/ }
&gt; a" o. |/ }2 o  J- X  a- `7 x3 h( {
6, D  g. R6 z# t# W6 e( H, A6 q
5 t3 d9 x6 O1 D5 f3 s) x! J! L
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
6 l, S; x3 c0 U6 b2 M2 L</code></pre>2 N% I' j1 N! D! k/ w- ]
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>4 r: E+ j5 ]! Y* u' B0 U: ]5 z
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
7 g* ~  @5 ~' I& Q/ s6 ?# W; G<pre><code class="language-javascript">// 大于
1 |9 H6 h' c: p5 w&gt; a &gt; b
6 }2 P$ R. n! K' Itrue
$ Q4 x6 ^  ]' n4 n// 大于等于
, r* ~( n" f) O" P4 w&gt; a &gt;= b
% Y4 z) m/ e# Ktrue
3 }1 c' s& D( O' I  t// 小于$ U8 e, @) F: ^: T9 c; I
&gt; a &lt; b4 d, ~, d: s( W1 n$ a2 J
false
4 C* J" O" t" V1 _// 小于等于
- U8 s( N- x9 r4 p. T4 b& G, }* j0 M&gt; a &lt;= b% t2 w* f( w/ }) V0 }
false
, b  z9 j: z( m2 @7 ~6 U( n2 P1 b( P// 弱不等于5 s1 S/ u+ n; U
&gt; a != b3 y1 D4 s- H( }+ o
true8 e- M" X; l; q/ v- R
// 弱等于& {, d) T3 P4 S, z, f
&gt; 1 == '1'4 m9 x3 }8 J( ~& K
true* |$ d! o+ W' @0 e1 e; Q
// 强等于
4 a* n6 D+ W$ L8 w/ c+ l&gt; 1 === '1'- F, O$ u; J# h
false) R+ J1 k! b8 @+ a0 @; z* e# D
// 强不等于
+ Z/ O. P& L" ~) N- a% E, E&gt; 1 !== '1'% ^! O! \; s0 C' e, e- [$ n* E
true
- M' H/ a8 b" _/ h) w  d, E) S2 U: c
/*
: K  b6 ~1 }8 b' zJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误  v+ C! v3 ]7 b, w
*/
5 c% ]. X+ }+ c8 z3 N/ [</code></pre>
# s1 z* b0 D; O3 V! [- O7 Z# H<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
$ g9 L. s8 a# H7 l" w/ r5 m8 R<p><code>&amp;&amp; || !</code></p>8 @, V& T7 K, T. b
<pre><code class="language-javascript">&amp;&amp; 与
( Z3 ~. y& g# d; v$ d|| or
. }9 D/ ^  h8 W$ g9 ]! 非0 r$ s/ e( \, Z% e2 A5 R: G
</code></pre>4 C$ }: u/ o7 O& U$ G5 h
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
" s# b) K& @+ x4 s<p><code>= += -= *= /=</code></p>
( i" u5 E& ^, E5 Z6 z<pre><code class="language-javascript">// 赋值
) u5 ], j- h, {! l2 }0 {7 ?: f&gt; var x = 35 {: {7 T1 q  S7 |7 H
// 加等于5 `8 a3 X# R, @4 M, t
&gt; x += 2
) R' r& @( X6 P5 |& W5- L* I$ z8 C8 x7 {: u$ a5 j
// 减等于) {! e6 N4 o8 I# [# j6 `
&gt; x -= 1
  R0 v8 A! A! r  s! U# Q4
- @# A8 y; `, Y& W" [* @// 乘等于3 A% Z$ _; j5 x1 R% z0 K
&gt; x *= 2
: L- n( F# b- Y86 g+ X; p, A- L
// 除等于4 `1 d& E4 f. y! ^5 j
&gt; x /= 2
6 z# H3 x# Z) u4
& V- M8 s" D( d4 ~: a</code></pre>
( n: o3 E5 P$ g2 @* L$ m<h3 id="25-流程控制">2.5 流程控制</h3>' ~1 ], S( i4 Y8 N" ?- {
<h4 id="251-if">2.5.1 if</h4>
2 x8 q* |3 u1 p- M3 K% w<pre><code class="language-javascript">1, if(条件){条件成立执行代码}9 p$ ~- `# J/ L) l4 r) \+ d
$ D* {, Z% Z* S# `
&gt; var x = 3
6 f6 Y. ^  Z! o/ ]&gt; if (x &gt; 2){console.log("OK")}
- p4 ~  A* G  b8 Z& }9 ?. i OK
: r  m0 T  N/ t7 Z2 A5 n
% y3 w3 C( k: x& r  t2, if(条件){条件成立执行代码} $ q7 s  R2 L) A7 ?' b9 H1 Z3 P  ~
        else{条件不成立执行代码}+ |8 Q- D1 D, }9 Z; e( P0 q4 f
7 C( B: l- }+ e7 ]7 I
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}* ~; E! M2 u- o5 ]
'NO') n, \7 H- x" p

2 \; |( Y3 {1 w0 q3, if(条件1){条件1成立执行代码} 6 N* n: A  y+ X6 D1 R  v6 Y
        else if(条件2){条件2成立执行代码}
/ ]' y6 i, h7 \7 f7 F2 y- B, g2 ]    else{上面条件都不成立执行代码}
8 a- u: q0 r& ~8 n& K& _
$ i7 m5 y: C1 l( |) U&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
4 E$ p) j: Y( H% H1 W Ha1 H+ K- D9 O0 \% G- V
</code></pre>
) x, J1 T& r$ }" L$ G* v7 h<h4 id="252-switch">2.5.2 switch</h4>5 `. n! D; J2 X; D0 Q
<pre><code class="language-javascript">var day = new Date().getDay();
! A- m. I% @9 ~switch (day) {
, `0 g7 L9 v( s0 @3 }9 b0 D/ x2 P  case 0:/ N0 F9 j  [: a) q
  console.log("Sunday");
4 e% y  X& h  ?) K  break;; b$ V1 V0 x1 Y; A7 Z
  case 1:
. @0 G$ d( H: `* p/ K  console.log("Monday");- R5 f2 e2 \  q4 n2 w1 y
  break;2 X) T6 ^) l+ k2 T5 |6 ^
default:" Z( v9 J' g, D$ h$ Q& K" K
  console.log("不在范围"); E3 {: \1 A! D; B6 O: \
}
$ r5 I+ ?. Y' d% M- N 不在范围# l$ b+ |: X; T4 d4 X
</code></pre>' i' v+ ^' c; M% ]
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>; K. Z3 [+ J- @
<h4 id="253-for">2.5.3 for</h4>: J' z8 ?! z3 `1 n( c( }! }! c
<pre><code class="language-python">// for 循环# U" N$ I* Q+ ^, N( F4 V, _
        for(起始值;循环条件;每次循环后执行的操作){
. N) N, _5 e. @+ Y* d        for循环体代码6 S9 D; Q& ]/ i  u3 E- d
    }
# e; J& X8 E; _+ z, R2 C$ E" i" H
( e8 `. H  M) p0 Z7 N# `; F. _% zfor (var i = 0; i&lt;10; i++){
3 o. }) s( u1 a/ Z+ R9 |    console.log(i)
; ]& u, |, b, B}
  d5 B1 Q3 S5 y        0
7 i' I' R& ?" r1 h2 u# H        1
2 m" S0 a# n0 z        2
8 Y- Z7 q- g' e2 @$ o        3
8 s3 N- y* L" O' E" d/ y5 ^2 @1 x        4
9 _5 g0 j1 W& D9 O9 z        5
3 r8 p8 `, t' L! ]4 R+ N& K        6
8 }; m- t$ b) C$ a! K+ |        7
7 W- F5 `0 ]5 q5 u( P        8+ u- u! R! I# X4 x3 O: P
        9
& E# P6 a5 X+ @+ g  o</code></pre>
9 c2 d  ^3 Y" c/ d8 ?3 c; S8 `; \<h4 id="254-while">2.5.4 while</h4>- T; C  b7 X# a5 O5 V- Q! g/ h
<pre><code class="language-javascript">// while 循环
  G2 w% s$ `& r        while(循环条件){# C5 g' B4 v& k
        循环体代码) J- S% X4 Z, p7 `$ R. e
    }7 d) G5 A3 _: y* y
* n9 F, }( v  g" t3 S, q$ v
&gt; var i = 0' x; S) A( E) B0 D+ I  f
&gt; while(i&lt;10){% s4 @6 |4 a5 @5 w: ?
    console.log(i)
: R7 x8 T! p: G6 M  n$ j" y    i++
3 h3 R$ J) O6 O}& I6 P3 U" X9 I# v
0, m: G, X* B* x2 w+ j3 S& D
1) E# p2 m6 L# D5 p  p$ `5 u) ]! m  N
20 ~  g: b2 O+ T0 a% v
3. X$ F( _2 c, w* ]2 j& `8 d
4# w& N. p5 T5 h: P/ G  o* v
5' ~9 v& I& I1 w  u
6
! T5 U4 c3 d2 U5 f 7
/ z  }# K3 W# S) v# M 85 D6 U0 f, L  X; S* F* Q1 L
9; i/ P9 C' K$ V: H8 O4 h
</code></pre>  }% b1 q4 X# ]2 H+ L1 h- p
<h4 id="255-break和continue">2.5.5 break和continue</h4>( F& F/ n( s! Q
<pre><code class="language-javascript">// break8 Y( l# M! |5 X$ S2 r2 U+ x5 B
for (var i = 0; i&lt;10; i++){
' z" u: e* E# t9 b2 W: ^    if (i == 5){break}
) S, ~6 V: A, @; [+ S4 j" k    console.log(i)
* H, R% `5 {; N7 `, [5 q# h! S7 O}
% M, e0 t+ S3 a 0; ^0 a: S) F- Y9 F$ H! S5 z
1
* A/ Q4 I( b! G0 ~) w 22 @' U' q) S6 Y0 N# ^0 F( |
36 J; C1 H* ~- h- f0 M+ z
40 x3 R2 \0 Y7 A& q2 d/ d3 D
// continue2 s- y! s9 h! d' a! m7 V
for (var i = 0; i&lt;10; i++){
: o# d: C# J, f1 z8 U$ a    if (i == 5){continue}
* B( k+ i+ ^& U    console.log(i)
- \# G3 l7 X* N! {7 A, _}
9 J& Y. d7 e/ I$ s# V6 L* `& V 0
; E- v* f7 M* c6 G, v+ |2 ? 16 h3 E* j; P$ ?: o0 X
2
3 o% R* z$ [4 n) K' q( o 3
: I0 ^5 O& W0 Q$ s/ k5 |9 r 41 H/ f  k3 ?+ }. H
69 \: n- w- @/ R% ~; S1 H6 ^
7
: W5 C0 y5 l1 Z/ R# n! c 8
, k  Y) r7 G" g. b5 J% e0 [ 9
8 \$ {) {; w9 N! k
- H6 k5 ~- l, m3 a$ C2 R</code></pre>
0 C" }/ u% n5 l& ?6 c<h3 id="26-三元运算">2.6 三元运算</h3>( v$ ]9 p! ~1 g, P/ S$ R% U
<pre><code class="language-javascript">&gt; a
1 J" I# ^# L6 `& K6
! w6 m; ^3 ]% B( c9 c&gt; b
9 _. e* C  B  G+ z1 l: i4 m3, ^2 v/ C& H* K% l+ b+ M

2 a; v4 P# ]1 `- a. A//条件成立c为a的值,不成立c为b的值
( S# [9 S9 {. r6 [$ I; g* N$ A2 v&gt; var c = a &gt; b ? a : b. `2 ?7 M0 ^1 }3 S$ ^1 y5 z! K
&gt; c- ~9 H  d# \0 S/ x
6
6 ?8 c7 \9 s% U. m8 P
8 G1 P& d& a3 G// 三元运算可以嵌套7 |% F' t/ G1 E$ a8 N% u
</code></pre>
$ g8 I8 ?% O' s<h3 id="27-函数">2.7 函数</h3>
5 ~( J$ W5 F) Z  N<pre><code class="language-javascript">1. 普通函数$ S. z: o  b) }( t" T) e7 h2 J1 I. }% v
&gt; function foo1(){3 N! D/ Q- v0 Z% t
    console.log("Hi")
3 i- D0 h# \- ~. o& S% O* Y) F1 s  O}, K1 ?$ ?( w4 |3 M) _$ t

% M: W$ B6 f/ S6 B&gt; foo1()$ c$ Y% R5 {1 `' v( |# _
        Hi; x6 B& Z. r+ l  o
2. 带参数函数8 b+ M) e: c; S1 \
&gt; function foo1(name){
# v. g3 y; `5 z3 W( x; o/ wconsole.log("Hi",name)
! y( K4 }# o) i5 z  T2 O# r8 Y4 F}
4 A- X( X9 E% M: L
/ d3 @( X3 w3 W" G( @! `  S% C&gt; foo1("Hans")/ ]! a) p( b( M5 q! b% f
Hi Hans
, H) Y. F  ]# }  }$ d* h6 o5 s, Q5 w4 N" b) o: ]7 @
&gt; var name = "Hello"4 w$ U& K, R; k  {1 S  z( u
&gt; foo1(name)6 p' @2 F% m+ o0 h7 h' b
Hi Hello
4 [% Z! s# s/ U" Z/ S. n) \6 X* S& ~
3. 带返回值函数
; |$ W! }- L2 r4 v; |5 f4 i&gt; function foo1(a,b){& v6 {+ V7 e) b
        return a + b   
' v& `& W  C) S3 H* S) W$ A& S* K" v% B}
8 N& W* R9 [7 _4 R6 h&gt; foo1(1,2)4 e4 x( {: A: S+ G& F; W4 ?6 }
3
& P, D5 y  r; ?0 R&gt; var a = foo1(10,20)  //接受函数返回值; j$ e$ b: e$ s4 A" A8 n1 u
&gt; a
( S$ y! H" G( d0 y30- P! ?1 a; O. A# r9 f

7 o. j' Y, K- p& `, D/ j4. 匿名函数- D3 [" U- X" \7 S3 K: x& W# S
&gt; var sum = function(a, b){
  ?& H, u* z$ R8 a4 c7 g& J4 E  return a + b;8 Q7 ^8 W$ G3 W0 h; ]
}
0 R) j6 r' Y9 {% A5 k. ~&gt; sum(1,2)
( j' P# j# Q- V* x: z3 Q3
3 ?; Y7 c# y) ^# K& I
: @: x5 o& a3 L' _/ h; j6 |# b// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱9 y; Z# R) O, F' g# C! s  A
&gt; (function(a, b){% R0 T$ g# e% x! [
  return a + b
- i2 A! ?4 L3 n5 F})(10, 20)0 |) Y. Q8 X. K- w- m
30- p3 }- y# z0 w) ~, m

& s4 C+ ^! V' n* Y9 q5. 闭包函数; I$ v2 q3 n+ j/ T* P
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
/ f- V9 v, x! I$ Svar city = "BJ"2 q, V: D# `. x0 h7 m
function f(){" z& F! L" g/ S' T  p
    var city = "SH"
# ^  l3 e( ^6 n( `9 L1 |    function inner(){
2 z$ n& w: P" W        console.log(city)$ Q0 S' ^6 c5 j  w% p: E* B
    }7 ]9 R3 y1 q+ d, @& u( e
    return inner- ?8 E/ l% I) W: \# B
}1 M' K8 I% R1 j; d! n; r9 e
var ret = f()
9 @  P; i' r$ M# Z  G2 yret()- u8 Z0 K8 T  f- O
执行结果:
: F0 Q( g: H" H# qSH
+ K) M& d7 b$ F4 c5 a% l% I' J  d9 b/ D- Y# U& U( f0 h: u7 J
</code></pre>/ l# L2 E' \* ?6 O
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. r) s+ i& P$ V( n
<pre><code class="language-javascript">var f = v =&gt; v;
5 ~2 L- A& v  @: Q// 等同于7 i0 T. Z9 R2 A# N/ v
var f = function(v){
( R1 M3 H* }2 I  return v;
- r; E" z' J' ^}) N9 P9 m/ G4 @2 ^1 @# n0 U% k
</code></pre>- c$ W* H6 L. i; j8 t1 e, `- g
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
# o$ M! V) T! `8 o3 _* m<pre><code class="language-javascript">function foo1(a,b){
; o. R2 V8 i+ w9 K, P    console.log(arguments.length)  //参数的个数 $ ]$ ~4 B: {1 ^5 f' t
    console.log(arguments[0]) // 第一个参数的值, e1 A+ J9 ?4 p- t, s" h
        return a + b   ( p' j* u7 \* }! Y3 ]
}
9 H) B6 l1 C8 ]( S9 Efoo1(10,20)" s9 J- `% g( y4 r) q+ `
结果:
- `4 j! r+ X  {1 c/ s; E( y 2          //参数的个数   ^2 v: y; L' B9 ^( _
10        // 第一个参数的值
3 ~1 _% E5 o( O* L% h30        // 返回相加的结果
+ K6 j& M( U2 L1 M8 N& t7 s</code></pre>
+ `& A; m& q) W. K6 v9 p- _<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
3 P8 T1 ?, o6 H. c- J<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>+ b" A8 j- Z  R- `. J9 y
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
. G2 G6 e( E# F<h4 id="281-date对象">2.8.1 Date对象</h4>1 ~0 {' s' _  ?7 ~' O! H
<pre><code class="language-javascript">&gt; var data_test = new Date()
  c1 K$ B( E2 q3 D6 z&gt; data_test8 h+ L6 ]. v# C) T7 j& m8 u- i
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
, x3 f% x2 W1 j1 U( q$ M1 @9 `* C&gt; data_test.toLocaleString()
: A6 r( I8 d; i. w'2022/2/11 下午9:44:43'! k) f+ K$ a. L4 b7 q( c( y+ Z, {7 H
& s4 X# q  o9 Y) f, A  m: Q
&gt; data_test.toLocaleDateString()  A; o/ A) ]1 o4 i( ~+ e2 ]
'2022/2/11'
% [" v. O- `' ~/ N5 {# K3 Q8 T
5 n' ^, j( p- y4 f&gt; var data_test2  = new Date("2022/2/11 9:44:43")
* M8 o5 b5 q' i% i" L& [&gt; data_test2.toLocaleString()
; _$ w1 C" x4 c+ g! q/ t'2022/2/11 上午9:44:43'
" `. g; K6 b' W4 @) J2 U0 h7 x8 z# s" ^; J; T
// 获取当前几号3 B* d6 ~- a1 c4 _0 d6 s
&gt; data_test.getDate()
- C$ x" ^& D- F$ b& K11
; S$ P$ v$ u9 X// 获取星期几,数字表示
, S( Y0 l  K# m$ F&gt; data_test.getDay()  
1 P, l* m/ n; _5
( s$ i2 t3 ^% A; X. o# v// 获取月份(0-11), K7 F  w. D+ m
&gt; data_test.getMonth(): v5 `# [$ d* Y' v: T
1
1 z1 u! ~1 x7 f; s6 Y; K// 获取完整年份
& D' q. g, ~! I( ^1 u8 F&gt; data_test.getFullYear()
4 t' L7 Q& v2 v6 f' m$ ^1 Y  [20228 j2 n3 F! ]& z" O  w
// 获取时
9 x/ {8 x, C3 w- ?8 t&gt; data_test.getHours()8 i; Q% K9 x& ~+ q
21
) D% u7 r/ B2 h& }8 o7 Q// 获取分5 j  y, g5 D  ~; D8 l, Z
&gt; data_test.getMinutes()" q/ i6 K+ o8 H  R, \# O$ i2 q
440 y( m, f1 g$ r
// 获取秒  L( v2 B( z! j6 H- D# Q
&gt; data_test.getSeconds()
5 Z2 x' @" ]" z3 ~( U43
9 `1 c& j2 `5 O; L0 [// 获取毫秒
) ~# ~6 c. _' V' W0 B$ U&gt; data_test.getMilliseconds()
, b. M0 s8 g' S" \290/ V: I( `% r4 H/ C) Z2 F
// 获取时间戳" u; l" y$ H* Q  h& S# i
&gt; data_test.getTime()
, o6 f5 j0 a! p3 Z; ~& v6 z0 x0 q1 R1644587083290/ l, ^- f. ?  C% K& Q0 N- ~
</code></pre>) L. M( o# G, n  J0 d% g8 |
<h4 id="282-json对象">2.8.2 Json对象</h4>
) l( `: d+ J# A8 Z! U. I+ P<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串" Y. q( j# B8 @0 W. ^" Z# Q5 ~/ P
JSON.parse()  // 反序列化,把JSON字符串转换成对象
+ ~0 R2 Z4 _7 V) j# \8 |
  j* k1 `" N, E! |( R- X* s0 s// 序列化
" l1 U: i! p  d9 }/ U) D&gt; var jstojson = JSON.stringify(person) 1 m/ M& F/ n1 f; C+ y
&gt; jstojson  
; d% U# g3 H& Q'{"Name":"Hans","Age":18}'
  @7 w! p5 h8 H& ^* h* }
1 F% V+ P  J' [" P% z" D! [/ {/ w// 反序列化) N) c0 ]2 V+ @6 H0 ^! t2 }' O$ @5 q
&gt; var x = JSON.parse(jstojson), h- V/ I% F5 Y9 E
&gt; x
& G8 W# |- E: f4 b: p1 R* L{Name: 'Hans', Age: 18}5 M# Y9 {) O5 X& y8 w
&gt; x.Age6 h- v( h- v5 w9 j6 Z5 a4 j: M
18+ k9 ~/ f/ E5 r0 N4 x' u
</code></pre>( o3 @) `+ a" P& `9 n
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# Z$ c- b+ A5 k9 E& C, X/ m2 Q; h% J' O<p>正则</p>
# m' b. F4 K. f+ M/ e<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");% ]  l! F+ j+ k5 M' n5 }
&gt; reg1
8 n* W5 h$ c. K7 `- _/^[a-zA-Z][a-zA-Z0-9]{4,7}/
7 i  t- Z# m% d* g* J0 O1 ~9 A+ V&gt; reg1.test("Hans666")9 a( E. Q: {: B3 a
true
/ @5 e( A1 m$ `
0 l# Q) I% v0 t7 t! W0 \&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
$ H; c2 r7 N; w: Y' s9 Q&gt; reg2
) N7 L; m- b2 q1 x) K7 z+ \/^[a-zA-Z][a-zA-Z0-9]{4,7}/' @6 D1 b0 ?7 Y, e! ?
&gt; reg2.test('Hasdfa'): g0 g4 z" q$ J9 k
true
; N3 P; C. q; j! F/ x; A9 H9 z, m; i" j- e
全局匹配:
' H) E  D* N0 q4 ]3 o8 g3 f&gt; name: u, L& R/ s2 I  G6 D0 E# Z2 j
'Hello'5 Q1 }2 ?' e2 _. X, h+ {3 S/ j1 u! W
&gt; name.match(/l/)
" s" r9 ]" C2 y& y* t4 c['l', index: 2, input: 'Hello', groups: undefined]! M( i5 I1 r5 V; c& d
  b6 W5 W3 m& K1 l
&gt; name.match(/l/g)8 d  _  r8 m4 I* Q3 ~8 H5 P; u
(2)&nbsp;['l', 'l']
: n9 m4 `- C2 }  ?// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
' A2 h) P  d, c5 b! {9 B5 j) t  L5 }, a  V1 `; j
全局匹配注意事项:. z* Q: G8 I( h( M* [
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
% @" P; z5 \* v1 _; a&gt; reg2.test('Hasdfa')" [6 R% ^" o3 {+ Q
true7 P/ z. s, \- m2 O  F9 O) }
&gt;reg2.lastIndex;5 `9 \/ ?; H% K5 t& ?' ~: J
6, H( ^( Z8 _0 R+ H- ~
&gt; reg2.test('Hasdfa')% Y* L, Q% f3 h& H$ k& z
false, M6 A- {4 p5 w, {) W  d& q3 v1 `
&gt; reg2.lastIndex;  Y& n" O. E2 X' q- U
0& t* e  h5 X5 J( @  d
&gt; reg2.test('Hasdfa')
# |1 {) |) L1 J- H% G& Ktrue. C( Z+ j. L4 `, d  j
&gt; reg2.lastIndex;0 K4 ~" e/ n( e6 [" |+ `- F4 y
6& d! B* M1 B9 G4 u9 K+ @* O
&gt; reg2.test('Hasdfa')4 d9 j& z% d  x+ p
false! P& E. l* K) d& }
&gt; reg2.lastIndex;
; S( C! ^, S' ^5 l3 {3 o0
! W' G+ Q. T5 R( j// 全局匹配会有一个lastindex属性
# d1 \; R4 O* D( C" W&gt; reg2.test()/ g+ }4 C& H5 ~9 {* z+ i% u
false% ]5 X, X) ?( ?8 y
&gt; reg2.test()
7 N& \* s, H5 a' j0 Vtrue: X, i& n4 N( `0 M! w+ n
// 校验时不传参数默认传的是undefined
! C, @9 }0 `3 b. o+ G( F</code></pre>+ b, M4 M" w0 w8 w; u
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>2 K# W* ^; @. E+ @
<p>就相当于是<code>python</code>中的字典</p>) r) i6 m* i" R5 _- I$ h. o
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
. [; s# y) ?* \% r&gt; person' C; d& m" \2 `- M2 H. W
{Name: 'Hans', Age: 18}' k1 r- e+ f- M. D6 {- C
&gt; person.Name- e' k5 C" X7 z% b# u, u" V* B
'Hans'
4 w) ^. R: t) J8 P0 m& d5 C7 {4 D&gt; person["Name"]: V' ?  a1 w8 ^) C. {% L
'Hans'+ A9 r% Q+ L1 Q; b
8 m) D4 S; o& W; {* N/ q
// 也可以使用new Object创建5 u1 _4 ~; `% \! H/ c
&gt; var person2 = new Object(), g- c4 i2 E  J; n! o
&gt; person2.name = "Hello"
' e6 W  f8 @1 }5 S& {7 V'Hello'
& r: H/ g3 {2 W3 O  j&gt; person2.age = 20
9 D/ a) g4 R, f20
6 c! d$ ]2 |4 m3 l/ h& V" @</code></pre>* j4 ]9 o5 t/ U  H& F
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
! n* X& m1 T- [9 u<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
. ~5 l6 b& b' Y* U<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
- |( s8 a# \; A8 v( r  D# O<h3 id="31-window-对象">3.1 window 对象</h3>3 S+ b6 F$ p% L/ {! r3 V* b
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>2 l. j4 s0 a* j
<pre><code class="language-python">//览器窗口的内部高度
2 F- t- o% W8 l. ]0 l7 iwindow.innerHeight
# h7 D) I% J! n3 r' e7067 |4 a- @& s  ~8 h- a
//浏览器窗口的内部宽度3 ^4 X2 p2 j* Z$ t( T7 i
window.innerWidth
# {- C+ d! b) h5 _( P- j$ j) M1522
+ P4 a% Z: |( y// 打开新窗口
+ Z) D  {, j5 u- C! G) `( ywindow.open('https://www.baidu.com')
9 ]" y# P. C$ i3 a. w/ R( rWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}9 T3 `9 z6 A6 F8 W$ I( A
// 关闭当前窗口
3 [7 c  u' _( t9 e* S4 mwindow.close() ; \1 X( l; B6 ?$ |# S, ^  R
//  后退一页3 _5 q2 [: w6 ]( D! o( D
window.history.back()
  R! B7 ]% V; w// 前进一页: [8 P4 S7 a/ g- W( `$ I$ ?# ?
window.history.forward()
; Q  |1 O5 O) ~' _//Web浏览器全称- t( `4 o# M' _8 R
window.navigator.appName6 T4 E& k- Q  ^$ H
'Netscape'1 A" p' @  e( B, n# p( [+ q$ x5 w, n
// Web浏览器厂商和版本的详细字符串7 h3 r, U  b4 K! |" e
window.navigator.appVersion
* l* k, ]; w, P& I'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
% W1 B8 }! z1 |# ?+ Q$ M// 客户端绝大部分信息$ `# [! W6 {  d6 x5 w# ^' d9 y
window.navigator.userAgent
2 S* M, F9 O; [3 o# j8 ?5 Z* ~'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36': t5 w0 ~! E9 }$ |7 a
// 浏览器运行所在的操作系统
8 M) K# a, O: k5 u9 K9 c& ~window.navigator.platform
: }4 R( z9 }2 y% P, U'Win32'3 z3 x" ^3 y1 M' o# R

( R& D* e& V& M//  获取URL
* ^' l( ]; H) R$ awindow.location.href
& }1 `' C) S6 _  \// 跳转到指定页面+ Q$ w' B: E* [, w- B
window.location.href='https://www.baidu.com'. V0 a- C. w! u& l
// 重新加载页面" r9 `2 D6 i/ J& [4 n  I
window.location.reload()
% Z7 {7 ]3 c" ?( u( ^</code></pre>( B1 d% M: E. Q( h& H& r# a
<h3 id="32-弹出框">3.2 弹出框</h3>! ?; |) {( R% b( \- s+ r
<p>三种消息框:警告框、确认框、提示框。</p>
9 Y& u% n) t6 v- y, U<h4 id="321-警告框">3.2.1 警告框</h4>
3 _5 L& a3 Q: y# ~<pre><code class="language-javascript">alert("Hello")5 ~; {2 S8 f5 \8 y; m- b. x
</code></pre>% `6 R5 N( i6 o
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
& F+ e! Y% O% M<h4 id="322-确认框">3.2.2 确认框</h4>
, R" G0 x9 Y3 x( i$ F<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>7 Z9 t8 M: S4 v6 [& {
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
7 }( }& L8 B, U, m/ v# s6 }- @$ `true
7 G) P1 D: @0 u" }7 s' v&gt; confirm("你确定吗?")  // 点取消返回false: |. R( L% S) ^  a) C3 O  @
false
; s! ]9 C. X1 M3 [, _, j</code></pre>
' X$ u! Q: x4 ]7 L<h4 id="323-提示框">3.2.3 提示框</h4>
9 m  t% b2 K! N<p><code>prompt("请输入","提示")</code></p>  k3 I) Y# M* D  u3 H9 j% a; o1 i0 z
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
4 L1 n  l% m0 }2 D; |<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
' _( N' W# a. j! p) P$ }<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
& u% t: J3 N! ]<h3 id="33-计时相关">3.3 计时相关</h3>
( U7 J- K' I+ ]+ @  R5 a( x1 X<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>% g$ k$ Q) n" d6 I5 m5 V! V6 ]8 F
<pre><code class="language-javascript">// 等于3秒钟弹窗* q8 S- M6 E$ s& Z  y
setTimeout(function(){alert("Hello")}, 3000)) M& V% N4 G% W- }1 D5 d

8 v4 a( N/ W; r7 lvar t = setTimeout(function(){alert("Hello")}, 3000)
+ |9 b, Y) h7 y  `2 F1 M9 t- Y0 e7 D0 M# X/ f
// 取消setTimeout设置
: q4 Y+ v( z5 `; N+ o$ tclearTimeout(t)
$ l# c1 L% L9 \8 H</code></pre>
) P3 a6 m5 B: m& y! }<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>& g( d( M% f. ~0 }) v
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>" A) b4 n( a- _! R) D
<pre><code class="language-javascript">每三秒弹出 "hello" :; |" l1 S# q8 I# K4 v. R3 K% F; v
setInterval(function(){alert("Hello")},3000);
) H+ X; ~' C) \9 ^</code></pre>
0 N# v. E/ z0 s) h, c: G2 I$ y<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>( S* z% j3 [; C# H! K" [
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);! e2 S6 u, F' \2 \: H3 E
//取消:  Y/ C6 H4 F3 F1 Y9 E  K
clearInterval(t)
8 V; ]+ C3 F* x8 t: H</code></pre>5 Z0 [( w& i$ Y  a
* c$ e% B: ]; k% f! h& K/ u" W  k* ~
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-6 07:26 , Processed in 0.074500 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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