飞雪团队

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

前端之JavaScript

[复制链接]

5344

主题

5432

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
18354
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

& T# X# H; z, S$ P' \( Q( A9 W) c<h1 id="前端之javascript">前端之JavaScript</h1>
1 b6 ~- Q+ E" l* V4 L  k<p></p><p></p>8 E' `% f3 s8 A4 j
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
2 d& r5 |# X) M7 j' ?$ E<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
9 h$ Z3 k! {# j% F# A1 i) Z+ F* O它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>3 R2 y) w- R' j
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>. B. K) Z% ]8 |8 ~/ u0 @
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>4 K! b, U) i& T5 S# d; y/ o
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>2 Y5 f+ \9 |' u$ O; V' s
<h3 id="21-注释">2.1 注释</h3>" z7 t6 {7 H, |0 ~: m
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>  p+ x) s# P( G% G# U
<pre><code class="language-javascript">// 这是单行注释
8 x6 t) h& t. j' }4 B% {' l( }6 F
/*8 [$ [4 e5 E: W+ a
这是多行注释的第一行,! A2 ^* M4 t2 D* h
这是第二行。
6 y1 ^/ \5 N% E*/' C5 {- J" K! S, I9 ~. G( q
</code></pre>% z) d6 q2 E5 Y4 P; Z
<h3 id="22-变量和常量">2.2 变量和常量</h3>1 S- S& m, b1 a  ^
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
8 k& A; `$ i2 q0 y9 _( {<ul>* Z  N6 k& B) N, w; {: x- @
<li>变量必须以字母开头</li>; l7 `  E9 o8 b
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
! j7 H/ g* p8 Y$ y<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>: x: P! i7 Y, T
</ul>
' \* u* V& Z3 x<p><code>var</code>定义的都为全局变量</p>
, V6 R3 ~, \: H3 L<p><code>let</code>可以声明局部变量</p>
$ S  G1 f4 l7 O# B7 L9 D# {<p><strong>声明变量:</strong></p>
# `) d; E2 ~* v& ]0 d( S8 O4 V<pre><code class="language-javascript">// 定义单个变量
# q  o0 s3 N! s7 A0 Y- J3 x0 d&gt; var name6 g( l/ l& k# |3 i; B# |
&gt; name = 'Hans'
/ t' Y& a& d6 ^2 w1 I//定义并赋值
3 q4 {* k2 X; ^/ W9 O&gt; var name = 'Hans'
$ e9 o# c) k$ S, }# K, N0 C&gt; name
) h8 u! m% N4 q$ z8 C'Hans'6 o4 M* v9 s, u/ Z1 f

) @7 S. o* z* e) k/ f7 K* w// 定义多个变量
, `* u: Y2 l4 l5 M5 m&gt; var name = "Hans", age = 18* c7 Z0 p6 u, R8 k
&gt; name4 C* f# W  {! V  l; S" i- \" p
'Hans'
( a; S4 p, m1 I/ o$ E&gt; age' M3 F1 ]1 G: N% |2 n5 R. I
18
! ^( E3 n3 h* y! N6 {
3 A5 c5 `' Q4 J: v( e/ `9 K//多行使用反引号`` 类型python中的三引号
6 D" v$ a" A' }&gt; var text = `A young idler,
" i( d7 r; E) }9 ran old beggar`
+ E2 D" q3 _/ m$ D. o&gt; text$ b* Y$ _. U: Q6 c( Z1 H
'A young idler,\nan old beggar'  h) ?# L" l4 H$ x! u
</code></pre>5 A& D, |% l8 i9 [# M+ v: x
<p><strong>声明常量:</strong></p>
$ d- ?- K! l) M: p) I- P3 A<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>. [$ H3 X2 T" W$ Q
<pre><code class="language-javascript">&gt; const pi = 3.14
/ b0 \4 |4 }9 B" ^  m&gt; pi
0 B7 o7 z9 F( H( m: n3.145 T" {; A1 W+ h+ p- D
&gt;  pi = 3.01. }' A  D0 [2 w" C. G2 u% O
Uncaught TypeError: Assignment to constant variable.* U) H  O8 u/ T% Z: A
    at &lt;anonymous&gt;:1:49 X- Y( A. w* w0 C) b2 J, O1 j
! j7 [% k+ C7 V7 B
</code></pre>5 O/ @2 R& t6 m* }/ v# J) L* |! W( C7 J
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
  X/ k) U3 v# r) F! x: w<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>7 m& X  ~3 l2 v6 I% u/ |
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p># K( Z1 `9 a- d. x8 x- X) a5 n
<h4 id="231-number类型">2.3.1 Number类型</h4>$ T1 [) a! k; c# D
<pre><code class="language-javascript">&gt; var a = 55 N$ a4 n, a, Z* `4 x9 j0 d2 O
&gt; typeof a   //查看变量的类型  
; I" m4 n$ t' P& v5 k4 hnumber2 I* n: t+ m9 G5 f# Y4 S

# h3 s# `+ r/ ~4 h&gt; var b = 1.30 J# c0 f" n; f$ C% [4 G
&gt; typeof b: O/ t" Y' @' r4 {% k, E9 n
number
1 l! U0 I: v  d8 E
: X3 ?$ F7 w- a' p, N: e+ @// 不管整型还是浮点型打开出来的结果都是number类型* |! |; t- Q( w
" q+ s1 u; B5 R; a$ `
/*! x$ A1 A. J$ e; z- H3 Q$ m
NaN:Not A Number% u( `! y5 C# j
NaN属于数值类型 表示的意思是 不是一个数字8 o$ j. f8 l5 r; H  O
*/
3 V, v$ b: v  u* E$ c: j/ V) }  C9 X, L* X' _  x
parseInt('2345')  // 转整型
9 G7 y9 q" R1 [' J. ~6 O/ x7 x- X- ^2345
; L4 A6 \' N5 X+ y9 Z. xparseInt('2345.5')5 ]+ o( P8 L4 D8 `6 O% P0 P
2345
) H. `1 m% E2 q* l& VparseFloat('2345.5') // 转浮点型
3 K& j5 A4 a; O1 t. i2345.5
; p- o! F5 u* S; HparseFloat('ABC')
# j4 {% |2 k! HNaN; u8 D. a9 T2 i* [
parseInt('abc')
  N7 c2 U1 }/ L; KNaN8 T3 e2 m, t- E( N5 M
</code></pre>4 }0 i% C# Y6 c' a5 P! u! t( x
<h4 id="232-string类型">2.3.2 String类型</h4>
* o1 G1 U/ B5 a$ v. E8 H9 `<pre><code class="language-javascript">&gt; var name = 'Hans'- j0 F! a  Z( a+ @: ]
&gt; typeof name
3 U5 K* }9 O. H3 m3 M/ F) l) M'string', L5 w% B% T. K" Z; |; q7 P! M

& @' U* p+ s7 H, \9 T' c//常用方法  {$ N, ^! a1 ^) V6 z  K5 E* s) A
// 变量值长度1 D0 ~+ Q5 v- L5 [0 w" b7 B
&gt; name.length4 H% r9 l! j- k% z6 v
4( m. d& U/ h, b/ D- P
// trim() 移除空白
" r" O' O( T! r1 z' N' D2 K&gt; var a = '    ABC    '& \5 d. k+ {6 O$ x* X
&gt; a
. `/ B4 b( ~* ]$ P8 c( y'    ABC    '
# j* h) @% Y2 F* }; e&gt; a.trim()9 P- Y( N# H, }: |+ b
'ABC') a6 B- W, Q  @& b, u  B# _4 D
//移除左边的空白- b& S1 N. M# L0 b
&gt; a.trimLeft(), H. e, ~2 l3 ^6 d
'ABC    '
4 C2 S; M! _' o. k* y% j//移除右边的空白
2 m9 k: b0 Q4 g4 d% J&gt; a.trimRight()
1 @& @  I6 j; i'    ABC') X. k3 z) {8 l( F) C5 P7 x2 V
; `" v# f0 o) Z; z4 Y
//返回第n个字符,从0开始
' b- c) i8 r( V! b& i+ Y" a&gt; name! ?0 Q6 d9 z" B: s2 `/ _$ {+ v
'Hans'! T' S+ c2 j0 s
&gt; name.charAt(3)$ ]" |2 c3 f2 N9 S; y1 f% I) i" A
's'; k* A) P$ P4 A$ k1 G" e4 G
&gt; name.charAt()6 |: M$ N7 i0 N3 I5 P# U5 w. w6 T
'H'1 h; K, |1 D, F& l
&gt; name.charAt(1)
; u) |- V; Y4 k" ]+ Q: l'a'
9 w) p( g. x9 j& V" \3 E9 y
* B* T* C6 h* V. f  j$ s, _! v// 在javascript中推荐使用加号(+)拼接; ~1 j. T! I% j, m% g
&gt; name
3 S; ?6 O$ [2 v" G' Z7 |'Hans'* D( {$ A8 ^; \: w# `0 ~) g3 d
&gt; a
. n4 z* D4 x/ s6 `! H* j5 o/ r'    ABC    '
- [* K' v! v; x$ F) }5 X( o( R3 z&gt; name + a
% I+ |) f7 j0 N'Hans    ABC    '
- E6 t( O& W9 y/ C- K$ N6 ]2 a% A// 使用concat拼接# W7 }2 F4 `# U: i
&gt; name.concat(a)" {9 t+ c7 y/ [1 `0 k
'Hans    ABC    '
7 |+ p6 M) |+ I2 [% V9 y  p3 j' u, J  W) f; O1 r' `
//indexOf(substring, start)子序列位置
. y7 T' U7 s0 s4 W/ c) {6 S( r. r$ C+ d7 l" e6 Z1 G3 Y
&gt; text  g+ q: d% n8 T2 k1 ?( B8 n
'A young idler,\nan old beggar'5 B. C: R2 u( _1 @2 I6 t6 U
&gt; text.indexOf('young',0)
' x# ^' j0 N8 x2
/ O# f8 ?2 S6 y4 K. |
( K  C1 [( W4 i# A5 G8 o1 P4 R//.substring(from, to)        根据索引获取子序列
# Y3 I  {. b( e9 h&gt; text.substring(0,)9 W! R+ u" z+ M
'A young idler,\nan old beggar'2 O' P8 I$ Q0 U3 Z. H; P
&gt; text.substring(0,10)' t  o6 U& t/ o1 N" G: ^- z: ]/ j
'A young id'% F$ Q1 X( p9 ~- V

7 |* G! G% O4 b) X// .slice(start, end)        切片, 从0开始顾头不顾尾
, Y6 G7 k- \. h2 p% I6 _&gt; name.slice(0,3)
' n# L; p  O) Z0 a. b  k2 K5 K'Han'
$ K4 B3 ^6 r7 B
  ~) s8 i8 |& R1 Y& l1 J, B  s( ^// 转小写
, k- Z3 w- U1 [  k" N) ~# B# R&gt; name: P( p* j# ~( b( R7 E
'Hans', j% {' H3 d# B4 X% T
&gt; name.toLowerCase()
0 u- W" ~+ Z% H* Y/ w& \6 e' m1 D'hans'$ u( ~/ B/ v- L( j; u
// 转大写4 {) O2 H! w" N, K1 N" e
&gt; name.toUpperCase(); d3 r1 k$ N" Q" V
'HANS'
9 o, f: @5 H/ |- s" y9 x4 A, N( M( q
// 分隔; m, C, `; {5 c% k% X  Y* B
&gt; name
' V6 c, q. l* m5 A1 W'Hans'
% |3 Y" q$ n2 w7 i) ]&gt; name.split('a')
8 K! G% l# ]0 `- K) m0 ^(2)&nbsp;['H', 'ns']& b4 Z" f6 N( r* E
</code></pre>
- e$ s" M7 _8 e* `0 S+ M$ x: n: z6 C* i<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>% c; s5 Z& y; y; |: w
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
8 R5 d: Q5 l& [6 t1 T! @* f<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
2 I" R$ g9 U, J) Q( N% t) x' \4 @<p><strong>null和undefined</strong></p>& [3 m- E0 R2 }- J+ Q: |4 k
<ul>
' [9 E! q! p. F% V7 d7 Z4 E# g$ M<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
, a0 S7 l/ n4 x<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
( b* X) H9 w* E9 D+ c0 B* c</ul>
, P8 Z; N7 t& I9 C. e* P# w<h4 id="234-array数组">2.3.4 Array数组</h4>$ V- \& L1 \! `2 J  O7 |  N3 W
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>% x! g- o% ^/ S5 b
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
! v, U3 z, }( G) _- A$ L&gt; array1- Z; D, E9 z3 U$ |! C
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& A7 i/ _) i6 `1 z8 _1 S0 `&gt; console.log(array1[2])  //console.log打印类似python中的print
- l5 b  _7 @( N. t/ k3- j+ K0 L. a9 g1 W# p
// length元素个数
0 b& n+ {6 Y' b1 K# H&gt; array1.length, Q4 K& g6 I( M/ H1 E
68 S9 T& h: u9 t5 w) y* u
// 在尾部增加元素,类型append
- L% C9 N; ^& p- S1 {: u/ h# ]+ w&gt; array1.push('D')0 f, o, L) p2 G. D! |3 k' G; N
77 Z0 G, e7 W# O
&gt; array1- Q( q% g9 A6 g7 q1 W6 A! p& M4 _
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']1 q3 A( r. k1 I3 f$ h8 [9 t
// 在头部增加元素: r- ?" q$ v5 g+ B' g
&gt; array1.unshift(0)
! a: ]4 R0 m4 d1 Y* `& f8
4 L4 A! B% I5 F, p&gt; array1
- @; R- j* V( [(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
7 }8 |1 Z9 Q3 P- G. q
, e% A) n4 C8 l  M% G& {//取最后一个元素
! @4 B) E0 ~5 O2 G&gt; array1.pop()
  Y) m, }, v/ V'D') |$ E- p* i  B* m: A4 z4 F
&gt; array13 O" j/ ^! U$ l3 k) ^) K
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
: ?* t: A: B7 Z6 p7 V5 x3 _//取头部元素
: a, g' [% |! @$ ~' q7 h% b&gt; array1.shift()* @8 \! \0 N0 a
0
) ^$ S2 ?3 x* e: R' I/ |5 V$ d&gt; array1
- u1 U+ v2 I# @2 e" Y(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- o  a4 c' N8 r# K0 _$ t
- k- K  p) v) B' ^
//切片, 从0开始顾头不顾尾2 U& Z9 y' g* f, Z( i
&gt; array1.slice(3,6)' {# |+ s4 Q9 B& m( ?1 u
(3)&nbsp;['a', 'b', 'c']
# `3 E9 {# y" N// 反转5 s$ }$ o) }" q" d" @
&gt; array1.reverse()
6 M- Z  \3 e/ y# p2 R, I0 F& b% P(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
) s& Y# N$ Z/ r// 将数组元素连接成字符串
4 x8 `9 k* l- s. M: M( L# _&gt; array1.join() // 什么不都写默认使用逗号分隔
2 d" d2 O8 Z: _: E# F'c,b,a,3,2,1'
$ G! i1 `$ ~0 \&gt; array1.join('')
: x# I  t# u1 v: U7 B'cba321'; t0 m9 E, a5 y
&gt; array1.join('|')
5 V' @8 g* d) B* g% m* d; n' h'c|b|a|3|2|1'8 R7 c# r) a; E4 y3 n
+ s: s2 X3 b* N
// 连接数组
& u9 z  f7 a& Y( F- ?" O&gt; var array2 = ['A','B','C']& S1 t% d  G( R" j) _0 q
&gt; array1.concat(array2)8 v0 [2 u2 y5 P9 A
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
: e; F/ g) c. m  f8 x: n8 \) Y* g/ f! f$ h( a
// 排序
5 g. [7 Y. f9 [&gt; array1.sort()
. d/ _# ~8 f, p; s# v(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& H) @7 u% V4 |. A' R  H4 }* o1 G# a
' p8 c( b# X! A- W9 e3 {  M// 删除元素,并可以向数据组中添加新元素(可选)
' C, q: f+ c3 p7 i& F& _&gt; array1.splice(3,3)  // 删除元素+ J* Z. m' ]2 Y+ I$ U- ?
(3)&nbsp;['a', 'b', 'c']
- e6 S$ s" s1 l5 M+ O&gt; array1
# I% L; F( _- Q8 }) F/ `; \$ w(3)&nbsp;[1, 2, 3]
5 {* J8 k/ T7 m, ]; q) r+ L- W0 t&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
6 L2 A: Y2 ?8 W/ m[]3 u2 T5 b% k5 ]6 H+ P! }
&gt; array1
5 g- |+ j5 |% K$ y  F(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
& d8 {  n: Y! ]# e1 N. _/ q( ^4 q, ~, l# C
/*
1 |+ W, C3 r$ H! [/ l  ?3 Y5 Bsplice(index,howmany,item1,.....,itemX)
6 Z: F/ s. [; A$ ?5 ?index:必需,必须是数字。规定从何处添加/删除元素。
/ p, e+ Y- {8 c9 s0 b# d7 dhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
2 {+ A) o7 ]& w! h/ J: T) E2 titem1, ..., itemX        可选。要添加到数组的新元素7 F0 {' G, q- n
*/8 n+ f" @% I9 C6 U% h1 F

9 z  e" q' X) g$ L* x// forEach()        将数组的每个元素传递给回调函数
1 d5 M+ U- X2 w3 G&gt; array1.forEach(function test(n){console.log(n)})5 ?+ K# x' f% C' v% F- }4 a  p- L
1  R: W3 Y& A; F' m8 ?  M
2
7 B4 L: P( K) | 3
( L: p) D) M: x A
) I- i* x3 v  P& ]4 o B
) t) d8 @' r4 k C
' S* t* u3 J. l# D$ Z' R// 返回一个数组元素调用函数处理后的值的新数组
8 r+ ]8 d6 d4 |5 E, H&gt; array1.map(function(value){return value +1})
# i1 e) x% }- n! n, X- a(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
. C6 e6 A/ U6 w" N5 Y</code></pre>5 n6 }6 Q$ r+ P2 s* u
<h3 id="24-运算符">2.4 运算符</h3>
7 W* h. X1 j: m4 t- d9 @. m, W<h4 id="241-数学运算符">2.4.1 数学运算符</h4>. r6 }- O# ?, _* Q! @
<p><code>+ - * / % ++ --</code></p>
- |. a. c% @7 S  D0 v4 ]2 V<pre><code class="language-javascript">&gt; var a = 6
- i) V, `9 s& y- z6 D0 l8 Q&gt; var b = 3
/ C- t- V2 X* p// 加" g. l) ?% r4 L( M
&gt; a + b1 L3 E+ ^3 S! u4 J
9
! F$ E1 R9 g: j2 Z// 减1 g4 e6 c3 D  |$ n# A: U
&gt; a - b9 i+ w' U& Q% ?3 p
3
) `. d# o) i, W// 乘
( m, y# a$ n. k  Z% ^- r&gt; a * b: P1 j0 a1 s8 G
181 P9 @# U- f7 \% j% N& i  J# `$ j/ P
// 除
/ d' F8 X- d  O; A- y; ~&gt; a / b
% U' t! ?1 V7 Q) Z$ M2
  d5 m" S. \6 X% {3 y; s" O// 取模(取余)
5 L  i1 p; G# }% l/ }3 b&gt; a % b' Q; B. C! g( u/ k
0$ I+ H$ ]6 f; I3 j7 {
// 自增1(先赋值再增1)6 p: y7 H( k( F3 p' ^( w
&gt; a++8 U; N' |: Q5 j: m5 ?
6  t# B. G+ v* r
&gt; a
; S( F! I- y4 o0 [" S9 {7& Y" P7 _, O: f% F. a4 |3 Q3 H
// 自减1(先赋值再减1)1 h8 h0 h+ F2 @7 t3 `5 |5 d
&gt; a--1 V5 V  ^. D: l& d: X4 Z1 f
7
) c  X) d  l$ c9 U& ^&gt; a
# }1 r$ d# U' q% l- D69 _  w8 `1 H) s# j
// 自增1(先增1再赋值)
: U4 j) [7 {' E6 D3 [5 T&gt; ++a- b! p, M* _8 X+ |6 y: `
7
( M  i; |  H; C, x9 I// 自减1(先减1再赋值)
, E; r# d+ n- `0 _&gt; --a
, {  e. X/ N; A6 L5 b) M/ o# z6$ ^+ W5 t" D- @) ~
&gt; a+ \  @, ?+ p9 T! r9 y- Z4 D
6
: @9 p$ ~, [# {+ \5 @* M# Z3 c) y% h, w" o, u: O
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
2 R6 @' L4 E6 w3 A- I0 z9 w</code></pre>+ c0 r' \) W( b+ n- F" W, {$ J
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- q5 B! Z9 k/ J1 {<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
' d! Z3 a5 G5 z, K4 G<pre><code class="language-javascript">// 大于& _$ q3 S7 a+ z4 X
&gt; a &gt; b
5 f( R5 K. E0 k- p) Etrue
8 C# z/ [2 ~5 \6 O0 {( |// 大于等于
& ?( p. e! y. R( O# }: l&gt; a &gt;= b. r- y! s) Q  S3 z; R
true5 ?* ^6 Q) ]" {' {  x8 O' i
// 小于
! a  U- b$ A! j1 W0 f, A&gt; a &lt; b  e& `6 g' M( z/ F3 E  P# k/ i
false6 [& g/ y& K9 ^' M3 j6 Q: [: Y* n
// 小于等于. W$ S3 |; i5 q
&gt; a &lt;= b/ Q+ C1 A8 \1 L
false
. e2 F7 b( b& \; F# o// 弱不等于
  E( `4 }+ a9 ]: D&gt; a != b/ ^3 o) ]6 }! F% ?' b
true( V! W' |+ w, {7 L
// 弱等于
/ k6 S3 O$ d8 m; L" X4 Z&gt; 1 == '1'* |8 I. c+ |% _8 I& M0 F8 z
true
( I6 {8 N1 M" H/ L1 @+ X. N* T// 强等于
. v! y; `' O, u+ Z6 v1 p; Z+ p&gt; 1 === '1'4 M  W' W" F/ I* _+ z% H' s# n
false3 q. k8 B- v' O' l3 `+ _
// 强不等于
! [7 V& X9 q  Z/ i/ u2 ?1 a2 M&gt; 1 !== '1'! k* O  {7 v& f( k4 O
true
" H+ r/ m' Q$ s0 B
/ |' X) m0 x. g7 Y. |/*
  Q* {( J2 K( P' CJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
$ U0 C* J* t% m8 L+ d*/3 \! d& G  W6 |/ [/ n0 N
</code></pre>
9 X+ {1 I  S) q9 Q' }: d- S3 b<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>2 x) r# g' H" W5 Z
<p><code>&amp;&amp; || !</code></p>- b. t2 U- `# V# ?4 w+ U! n
<pre><code class="language-javascript">&amp;&amp; 与
: ?( C! }' ]2 {$ q' S|| or # @* p1 n- n/ f2 y4 |' }' e
! 非
; i  C6 p% x! k4 _# x</code></pre>0 t2 g0 h- e! ~% c
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
' m" U( I( ]7 ^7 v* M1 g0 w& Q& m<p><code>= += -= *= /=</code></p>
% C, _: N6 T: a, c' W<pre><code class="language-javascript">// 赋值% h+ \  ~  ]3 G+ x9 }2 y- S" r1 l
&gt; var x = 3
: l: b; O7 y$ r2 s// 加等于) S2 O. u3 B3 I8 E' i
&gt; x += 2( C7 A. {, Y/ m
5
: E$ i+ t) O& j" J4 p7 e// 减等于
0 i$ }0 N  I" J&gt; x -= 1
' t4 V% X% }6 Q* O: y0 |8 X9 F2 v/ t43 U# ^+ H9 [" ]  |* `# u% ?
// 乘等于# T: l- N2 d; O  ?
&gt; x *= 2
' s0 N$ l: i2 k1 a* o8
4 \- J3 v- {- i! P" V// 除等于
# w7 h1 A! R$ Q, A&gt; x /= 2
3 z0 S% b4 W; C2 U8 D5 F# [43 m* Z' h3 k' J8 d
</code></pre>
3 |7 `; E* ?6 z" n<h3 id="25-流程控制">2.5 流程控制</h3>& h4 N  R9 N% R- z
<h4 id="251-if">2.5.1 if</h4>% ]% ]' g$ s  X2 ], W% ]% o. ~5 i
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}5 D* \8 ^! v0 \
* }5 C" X) g: E: }5 t5 U) G
&gt; var x = 37 A8 J  s4 D, J9 Z9 T) i' _
&gt; if (x &gt; 2){console.log("OK")}- k" v/ Y8 |% |  z( H
OK' F9 W7 `3 C# w( l

+ q  a: w2 @" _$ c2, if(条件){条件成立执行代码}
3 \# u3 W7 b& W: ]0 b( G        else{条件不成立执行代码}/ R+ A" O6 Y. }5 E8 }7 k/ T
% z+ b. `. r' c4 T& G1 a8 ]; D/ C! x
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
4 h* Y9 C6 q5 x( v'NO'
7 n( M$ d0 N# W2 d4 O5 b
. x8 g2 }- ^  m6 e/ k3, if(条件1){条件1成立执行代码} 7 Z9 M2 W" M1 d) D% S( g2 h
        else if(条件2){条件2成立执行代码}" [& @; [6 j; Z5 }: I0 k) t
    else{上面条件都不成立执行代码}9 t+ g4 f8 G. }( N

' Y+ Y% p) o! j8 {- ^% P&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- }# o. T- \0 {' _. V Ha
- `1 s8 f4 @) k</code></pre>0 o+ P- ^, E9 S5 j; y3 L) p. h) Z3 N
<h4 id="252-switch">2.5.2 switch</h4>, ?& N! Y# ?# Z# ~
<pre><code class="language-javascript">var day = new Date().getDay();2 ~2 n8 E/ W- l  ]
switch (day) {( N: h- A/ ]+ ?& Q
  case 0:
( u: h$ |7 `$ m6 P! L$ r  console.log("Sunday");; s; d8 E5 Q0 `
  break;
0 F, d: R. h1 P2 O) `  case 1:
, h9 }; u$ U* X- l4 D: V  console.log("Monday");
/ M( N& M" ?# ]6 ?2 r  break;
# T$ I2 m& u" _9 c1 Jdefault:; {" }4 i5 C2 r! E# ^9 _% G4 Z
  console.log("不在范围")7 [5 ~; G; T# c( }# ^7 I
}" s. q, `# o* c: }9 o3 _7 x" c
不在范围
" u# Q# p( {) S9 P</code></pre>
% W4 R& q4 z7 p/ b<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p># ?5 T0 _6 S0 u" n1 O. g; {0 U( }+ u
<h4 id="253-for">2.5.3 for</h4>
+ {6 L% j# Q* [. s) w# V/ U1 E<pre><code class="language-python">// for 循环, C5 x: k9 G1 ?
        for(起始值;循环条件;每次循环后执行的操作){
# n! m1 n' i/ R$ J' b        for循环体代码# T/ d+ l. e9 t. G( E% m8 ]
    }
4 V$ F, ~$ o4 K. L
7 C8 ~/ H: \( \' a6 E+ \  vfor (var i = 0; i&lt;10; i++){
3 c9 h& _8 ?& @0 u. Q. j; t    console.log(i)! R& e/ U( ]2 i( x
}
/ o* [6 `. ^& n# S        05 A! Z3 R& \; M" i$ p4 |
        17 p/ M6 X% T5 F/ K" j4 W5 N: G
        2
5 D. r7 S' u" E" H        3
% g- o* h. q. G; c+ p        4
  g, ?$ N  b/ {% ^0 \3 m# ~        5
7 Y$ p; {2 Y. e- T6 M        61 H3 w1 c8 C7 c) ]/ [3 Y3 ?
        7) Y# s1 g% L2 P6 C0 y9 f* W
        82 l. Y. ]+ M9 b
        9+ l% G6 @* E6 \& v' c2 I. D
</code></pre>0 N6 b; q. E6 N* r1 w9 G6 `
<h4 id="254-while">2.5.4 while</h4>
/ T% C  O8 x0 E3 z<pre><code class="language-javascript">// while 循环
! e2 d2 ~( p) d/ C( H: G        while(循环条件){# g  F4 w( F: D8 n6 J
        循环体代码7 W( j- J' Z0 Y, t. r5 N
    }- I5 s$ D. f3 g0 a
! J1 f0 K$ z4 T4 y! z
&gt; var i = 09 @6 a) e1 ]$ a  x# m1 l
&gt; while(i&lt;10){: P( ?: x& `0 E  o3 \8 l& `
    console.log(i)" a0 U5 y; A' O$ c. J
    i++# K' j6 L, k# L1 Y5 v6 {, o  i2 }( R
}1 B$ v3 z' f" j7 E
0
5 r- t  j- `9 I# f 11 J9 i0 @, P% K  v/ P5 k
26 r# @1 D. H) V7 b! b! W
39 E5 l8 G2 @  J1 k+ N) k
4
. T& E* x2 j* f3 i; v8 E3 W 59 X8 [8 Y: K& i& ]; f, v8 y
61 r4 e. U. g6 ]' O" Z
7
7 P8 P2 y, N5 E, t$ \# f/ Q 8+ P: D* \% p4 o# p* b6 q# e- C5 n
9
7 M9 g& i0 |6 U# l0 W</code></pre>
/ M2 ~  i, [$ i6 v; h<h4 id="255-break和continue">2.5.5 break和continue</h4>
# w- M, C0 u; p& `<pre><code class="language-javascript">// break
, A: t6 e. f. Xfor (var i = 0; i&lt;10; i++){& Z8 f& w: w$ l( L; |+ S" \
    if (i == 5){break}$ k+ {$ B. V- M2 b4 D  y
    console.log(i)
8 q; Z! ~2 E# l$ \}
% M, `' X; i* i 0
) }" |. S. k+ N 1
$ `! F1 Q- Q+ x& Q 2
9 S# }' m! E4 R/ M. w9 W2 n 3( u$ r) M9 }6 u* C! d
4- x# K3 D' a6 j
// continue; ~7 P1 c6 X, f& P5 M! G& f+ w1 K
for (var i = 0; i&lt;10; i++){
- }: e* F1 v% i8 H    if (i == 5){continue}
/ p9 @; S% E6 f8 L5 k% [    console.log(i)
7 R  g( v0 d  z}
; l0 z% u6 b6 F' @# ?8 R# B 0" Q  h$ s$ q( J  k3 Y
11 E+ j8 h5 U0 m8 ?* Q
2- h7 G" E1 D5 J: A
3
6 D$ F5 ?# ~1 I  Z$ n/ Y9 v# A 4' b' e# o$ U' e! S9 C; E% D
6; n9 r; ^# d9 s5 I
7
% @% m  q& Z* q, T" P" [  U 8
( C2 Q8 \$ F2 |; u, z/ r+ m" O( X: A 9  o" w/ l! T2 o$ e2 O7 _  B& H
! x9 k1 a9 v/ s1 x
</code></pre>
- u7 T4 |+ t( g* |' g3 @<h3 id="26-三元运算">2.6 三元运算</h3>
- D$ m2 }& ~4 s  n1 Q$ ]<pre><code class="language-javascript">&gt; a& \( H9 {! U& x  e! Y
66 b$ {  t' F& [  C8 `: t+ L/ e
&gt; b
1 u" n7 O8 \  `& t# w3
: M6 }4 G+ ]8 x  Q8 G+ a
, b7 E3 Y9 ~( N7 S  ?//条件成立c为a的值,不成立c为b的值
- y5 z* p  d% }8 c7 V" n; a&gt; var c = a &gt; b ? a : b
6 g9 H! D; }0 L) `6 @, |( |&gt; c" R1 ^  z  ]" y! X: w
6
) \9 \& F: _) l0 h% n& _7 L+ L) j& r
7 a8 Y' `! `0 V2 E' |- Q// 三元运算可以嵌套
* U/ ^3 g# `# V# d8 t5 v7 {! b8 _</code></pre>! C) d4 E* p! H2 h4 N' c" y
<h3 id="27-函数">2.7 函数</h3>) m3 f9 y$ H5 H1 y5 D% K
<pre><code class="language-javascript">1. 普通函数
! Q, d) r9 s2 I$ ]- s  P&gt; function foo1(){
; U& q# n; D; B9 V, _    console.log("Hi")3 ]* ?1 ?; m0 x' ^. J
}
) Z5 Z! p* s+ ^" B1 D& o. ]8 \
/ [3 p5 P' v4 @% r/ g" f% n+ D* n&gt; foo1()
! A$ g) t. S4 q5 i        Hi; c, q$ y. ~. q
2. 带参数函数8 N1 r$ S! ~) e+ X
&gt; function foo1(name){
0 `) k, L# r) y5 bconsole.log("Hi",name)5 h2 _8 n" C5 E
}
' N. ~$ q- V, Z7 O4 O% x5 C6 z1 ~, _% P7 i8 f9 A$ b
&gt; foo1("Hans")
4 z0 h* E) m2 n# [# N, h. @0 K! hHi Hans
$ n# O8 ]+ ?7 n$ H/ ^
% ~0 z+ T/ R; W5 v6 Z&gt; var name = "Hello"* E) Q7 Z) d/ ?
&gt; foo1(name)' z7 z) N; c: {% ^
Hi Hello0 P. K* e3 W+ r$ S. Y% V
" B# K. O7 q1 k) A. k8 U( B5 _
3. 带返回值函数+ W& K3 {+ k0 r9 P% y
&gt; function foo1(a,b){
" I& ?8 P! A8 S7 @. y7 n( h/ E4 ]        return a + b   3 [# E- T0 e3 ?& o* E- R" a
}2 W7 v6 Y. ?# S2 f
&gt; foo1(1,2)
; E+ t' @7 o. A3
. j5 J$ n9 K" C' }; ?7 I) b&gt; var a = foo1(10,20)  //接受函数返回值
7 u; m2 S1 s  o4 I$ r&gt; a7 q, e  k) e* x( W4 M( F
30' v* U2 ~% b" x9 o0 a

6 [2 G: S: e9 ~  i- Z& j5 [4. 匿名函数
* k! z7 g& V$ q&gt; var sum = function(a, b){% e9 B; u( w& [) G! \: K# I" t
  return a + b;
- |" i0 e$ X' ~% X4 J}" }, }6 J$ i' {# t2 a" X  K
&gt; sum(1,2)
6 I) i8 {/ b. @6 z2 F  ^3
4 k! X2 t4 x" B. _, l- i1 z3 o
; h  {1 u7 F' h6 x// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
% }" U" J: Q2 c- \7 a&gt; (function(a, b){3 A  d6 A+ a# b3 i* d5 ?$ B8 [" h* d
  return a + b! s( j2 z( Y1 V0 S
})(10, 20)
1 S3 P9 L$ ?; M30
2 E) T8 h& Q/ z( q( z( Z
2 Z% _+ z7 a) J2 o% |* {5. 闭包函数+ u2 P! w# N; P
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数$ x$ v) M  @+ C  n5 D
var city = "BJ"5 V0 p2 o8 I) W$ S
function f(){% `) P8 t* F) `9 X# B4 c
    var city = "SH"
" s8 t7 d: w1 P3 K( Q/ G    function inner(){) n/ M- ^1 R) c0 g
        console.log(city)
' z: m5 `, @/ J6 `, k    }
4 G) L2 W7 _9 s$ r4 \    return inner: ^0 F" H/ C  ^( q  X: W+ k4 ]
}" ^1 B" w" [9 a8 m+ h. A" a5 g
var ret = f()
0 q$ d. n4 H+ ]! mret(): s" Y. d3 h) W7 A+ U( b
执行结果:, G7 U& W3 _( @
SH3 {6 I) F$ o( u# ^6 t
. }1 ?% j) R- V1 W3 X9 p2 ~7 \4 \; W
</code></pre>
( r2 u4 e4 p, M+ J8 T6 c; Q<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>0 c2 f- o/ P! ?4 @
<pre><code class="language-javascript">var f = v =&gt; v;
9 d$ i0 X5 p' l7 Z5 T+ t* ~( E// 等同于
) h! S9 `  ^9 xvar f = function(v){
( w9 C, ?  Z; P( `  return v;
* p: P2 D* D7 d& h1 s}2 u2 G0 @8 K4 Q% O# d5 i7 a
</code></pre>$ d' t9 N- F/ s' |2 _5 x
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
  Q& I* z3 h2 X<pre><code class="language-javascript">function foo1(a,b){
6 @5 G, U$ B" r$ F1 y) G1 }    console.log(arguments.length)  //参数的个数
4 c9 h1 j. g% [, j    console.log(arguments[0]) // 第一个参数的值) }% y6 M8 n0 A: P: R% w. n4 {  P
        return a + b   1 P: @7 b8 Z% q( m6 ~/ J/ V
}+ b+ m: Z5 V7 D* v3 \0 Q( k7 v) z$ v% W
foo1(10,20)
$ {; X3 ?: T, B, w8 I结果:
& }; }1 p3 `8 Q$ G 2          //参数的个数 ' L; [  \' V* M, f; J
10        // 第一个参数的值
  ^2 a( _# Z- i  |  t4 \3 @6 h30        // 返回相加的结果
! G5 R8 Y  z" k7 N1 U% m+ V& q</code></pre>, S: y! |; I; T8 M' t2 O* O
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( G; d- d1 Z1 f5 a( [8 r9 B) i<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
. m' G( F! }( [) q<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>$ q3 d+ P7 |1 m7 ^$ E, i: o' r# s
<h4 id="281-date对象">2.8.1 Date对象</h4>- v3 C2 l) a& S, a: ~9 B, F$ ?3 q
<pre><code class="language-javascript">&gt; var data_test = new Date()
( d7 p8 [+ g; z- F- v&gt; data_test
9 M, o+ j" R& j7 w6 \" `Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)8 E+ d" `  O7 }
&gt; data_test.toLocaleString()+ d: \0 p) D0 G" k6 w8 V/ }$ U  ]
'2022/2/11 下午9:44:43'' f4 \) |9 d6 ?% o9 a
$ u" V) k. k: {* u2 P3 R/ |
&gt; data_test.toLocaleDateString()0 X# D7 s# ]% l6 z! W! r+ K4 w
'2022/2/11'& c' J# @: d; n9 k7 P) W
" O8 k. D7 o' q: C
&gt; var data_test2  = new Date("2022/2/11 9:44:43")4 N, Y% R( m; d1 ]
&gt; data_test2.toLocaleString()9 J" c/ {. j5 c  C" {; ]
'2022/2/11 上午9:44:43'
9 O- S! h6 w6 U2 |# M0 f1 n, Q$ L+ ?
// 获取当前几号
: U. u1 {4 S3 Z) G6 M9 d2 S&gt; data_test.getDate()
/ X7 \6 q1 N( _/ _6 d: Z11
4 {; s8 M" M$ ^3 e) r7 G, d, `" F7 N// 获取星期几,数字表示3 ~& T4 S( J' r7 X; w
&gt; data_test.getDay()  # L" k& p# J( m4 `
59 Z! }  D7 ^" }
// 获取月份(0-11)
+ p# l  \; `1 h&gt; data_test.getMonth()3 H/ H5 I9 a! }3 }% j7 a
1/ d8 x3 J1 K/ g4 M! a. g
// 获取完整年份6 p) [9 s& b; b) F* n. s: V7 o: U
&gt; data_test.getFullYear()7 \  b# }3 [7 a- a( K" V, k
2022/ @' z3 x" n% _2 W; M- ~2 Y
// 获取时+ Q0 {% H% H4 r6 ^
&gt; data_test.getHours()1 g6 N% ^: {1 m) v0 z$ s4 J7 ]
21
/ {/ k' `3 Q2 b& x6 ?9 i// 获取分1 U) D+ J. O9 H7 p4 q6 \
&gt; data_test.getMinutes()
2 o+ T" Y9 P1 b447 F+ l  |' m9 W( A+ {* _' @
// 获取秒8 T5 U, _; I. W1 g" J( W
&gt; data_test.getSeconds()
2 _) g, F" D) a" Z+ W2 e. ^43
+ _; X' X$ U1 x6 i9 q// 获取毫秒
6 `. o2 Q9 h& k$ y; B8 }1 c&gt; data_test.getMilliseconds()
# x1 g2 d, G1 @: L2903 B' H- {. N# C  O/ I
// 获取时间戳; B' [2 W# s* I* o6 d/ ^& j
&gt; data_test.getTime()
  m, l1 x  ?8 r2 e  S1644587083290. _  z" y9 D/ c5 L; k; x* O
</code></pre>* q* X* U% b" o/ I9 F
<h4 id="282-json对象">2.8.2 Json对象</h4>
) W- O9 @, ?+ P2 D2 B! |% F4 i<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
$ l) W8 W0 t+ D  E9 D5 X, m* J& NJSON.parse()  // 反序列化,把JSON字符串转换成对象& [1 Q0 t  j1 _) ?  `
1 [# T& _9 l4 g  a4 {7 u$ @
// 序列化* x( t- j3 y$ ]" s
&gt; var jstojson = JSON.stringify(person) + [3 H3 P9 B1 K& Y6 X! l0 [+ Y
&gt; jstojson  
2 [1 H+ J) l' H6 c3 I0 {'{"Name":"Hans","Age":18}'# j0 E9 {* ^  Q' P) C' A
4 t& ~- C# J( x3 W
// 反序列化: `/ o5 Y$ v7 l( g6 Y
&gt; var x = JSON.parse(jstojson)8 C- i5 l( H/ c5 S7 ?5 _
&gt; x( W, e& Y  U* |, A9 Y! |  P% J
{Name: 'Hans', Age: 18}. l, _  W* B7 }9 p5 {$ @6 I
&gt; x.Age
# [6 x1 q3 g! i5 `0 r7 M$ h" P18; `! Y5 r6 H# H
</code></pre>9 S" ^" J% e! l- o$ ~$ }$ w1 X" a
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
3 ]" a+ v. A/ R% V$ z<p>正则</p>
: V! |: y9 q. _: y+ S; L4 b# t* K<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
& Q1 r3 N; j$ [( w* ^- A% Q7 R5 L5 g$ [&gt; reg1
2 c0 O3 j" [$ J2 `) s6 b) c/^[a-zA-Z][a-zA-Z0-9]{4,7}/
0 v4 x9 w" o2 u. x$ z; x' I' o' W. r&gt; reg1.test("Hans666")
) s1 V* w3 G: t1 i0 }' _' L: }; ftrue7 _9 j* y, x2 p, \/ b' w
( O4 ~' O) z! Q6 w# m
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
7 y, F; [/ U! S; M&gt; reg2
2 v2 C' M& \' ?9 U4 S& u1 M/^[a-zA-Z][a-zA-Z0-9]{4,7}/
, w* g+ Y8 \; r. i&gt; reg2.test('Hasdfa')
2 _$ D! @& p" N3 M$ jtrue  d* l: U8 I! n. M$ S
& M2 H3 d6 L4 T+ I8 c6 x
全局匹配:6 |! H' X$ y0 ?7 F1 R# I1 u* @
&gt; name# _+ c$ E: B; K' _0 F1 @' d
'Hello'
6 O* I7 _; ^8 T( d3 i0 y&gt; name.match(/l/)& R% t! p4 @# q$ \0 w, `/ {
['l', index: 2, input: 'Hello', groups: undefined]) ~# y! v% l' S

3 X$ n+ ?! B( h5 L6 \+ T. w&gt; name.match(/l/g)
0 w1 K$ L2 U9 r2 L(2)&nbsp;['l', 'l']6 q" W& ?' F4 C
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配& a$ u, P7 a8 O# P
- q# I& N" ]) _/ H
全局匹配注意事项:1 B( `- D' o6 U# q* S& w* q
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g: c2 {; {. c6 ^5 t1 y4 T; \8 a
&gt; reg2.test('Hasdfa')7 [! F6 A& K- |
true
% W. z4 ?2 k( Y) V2 v) P&gt;reg2.lastIndex;
% z/ D$ M5 K. ]. a, P63 V. R2 I6 f+ L! C  G
&gt; reg2.test('Hasdfa')- G; ?' t/ t& s7 d& V7 p- M
false
4 M9 j! r  n1 v1 f&gt; reg2.lastIndex;
' G( e0 Q0 V1 Y, v% {! J0* m$ p7 C+ r. y& }
&gt; reg2.test('Hasdfa')
# p3 v$ I: I- O- `, w# y7 D# ~true
" X4 {& C* d0 i/ ]0 X) R( P' ]: V&gt; reg2.lastIndex;- h: ]) J$ ?9 x/ x) r' q
6
4 @; V0 `" w! k/ |* ^  b&gt; reg2.test('Hasdfa')
- w" ^6 y; [7 lfalse
2 r5 U% ~1 Q; V; @' e5 h1 ]- T' r  |&gt; reg2.lastIndex;2 c% A, E5 o1 m# I+ E' o
0
5 L, x7 k5 X  w1 S( j" |// 全局匹配会有一个lastindex属性' K+ N+ K( }, R3 V) B- o: U
&gt; reg2.test()
- C+ n; k5 A; \% i; T1 ?, ifalse
0 }! T" q& S8 Q! U5 a. M( h&gt; reg2.test()! N, B: W8 B( D) B5 |+ ]" p
true
! x# Q  {( Y' d. s// 校验时不传参数默认传的是undefined1 ?4 S. P! V1 R2 Y! {
</code></pre>3 P/ J/ f- W. d) j% O* B3 J
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
( u6 e1 a' U# {  B2 S; j<p>就相当于是<code>python</code>中的字典</p>5 K9 S6 X) S( u% g+ j' c% c
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
( [7 [1 z) O7 Y7 t, Z2 T& R&gt; person
' q: K& y+ l& @1 _+ E+ ^% j' I{Name: 'Hans', Age: 18}
$ Y* L; k  s. Q/ z( G&gt; person.Name0 n+ x) P; g! i; |$ C' a/ P
'Hans'3 }% b! O7 Y, M  [' ?  a  O
&gt; person["Name"]
0 F: Y' v) L# q$ Z8 N2 h, \' Y2 u9 K'Hans'7 k4 y! q) ^; G8 X, P9 _
! _9 b9 Y4 @" a# M- E- W7 h7 Y, O
// 也可以使用new Object创建( R! v4 ^" z! h; I- N) Y
&gt; var person2 = new Object(); L4 b% u! l1 l: R
&gt; person2.name = "Hello"" y9 H% P9 m/ t7 }* m/ L
'Hello') @% V) N' r. i, ]" o4 i) L
&gt; person2.age = 20
: N. I! P& M# o9 d9 f200 E  z6 ~$ ?! @  ^
</code></pre>8 @/ w" p) N1 y. k0 m
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
1 k8 b+ p% c$ n  k- i/ \7 F<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
  X. A: Z5 {5 m5 q<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>4 K! v" J% K/ O. T- i. o+ b1 ?8 n# H7 C  J
<h3 id="31-window-对象">3.1 window 对象</h3>
, T2 M& @' V$ u0 {<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p># D; \4 u& w" @/ r$ y' O
<pre><code class="language-python">//览器窗口的内部高度) W" d  k% k* r# ], e6 \4 x
window.innerHeight $ x+ _8 e& w: o& _
706, h, a) m) E% J/ M9 j
//浏览器窗口的内部宽度
) H8 h/ k# u& `2 G5 B& P0 R$ k$ Swindow.innerWidth8 M; c* S( m" Q$ l# f, F
15223 z8 y/ ?: G2 l+ B- X+ m
// 打开新窗口
6 s: o0 }9 E) w3 ?6 dwindow.open('https://www.baidu.com')2 @/ X  A4 X( y7 k! s+ D+ H$ g
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
9 C' o4 i$ g# |// 关闭当前窗口9 z4 {0 H$ @+ g( t+ Y
window.close() ( N8 a/ `; e1 {/ h8 D* I: V
//  后退一页
  l# t- q# t  W; s- N  e' B" rwindow.history.back()
. p+ s& @/ E% l. F" S# T" K// 前进一页2 ~* f/ t8 A% z) T" i/ b
window.history.forward() 0 S+ K: P# H2 l* L8 G+ s8 c3 `
//Web浏览器全称" F6 |9 A; x# Q# j0 O6 c
window.navigator.appName
! Z) g$ ~# t$ t# Y'Netscape'
* d5 H* B( h9 F4 r; v// Web浏览器厂商和版本的详细字符串
( V  _# Q5 h8 A9 M* b& h! Cwindow.navigator.appVersion
8 A7 }/ T. y5 F4 E'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'# A8 q3 v. H3 E8 X) v
// 客户端绝大部分信息
( u- {& d4 O- lwindow.navigator.userAgent
0 N/ p! o. w( o" L" O; T'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 z4 p# a. {5 t: U: y0 R+ }0 I// 浏览器运行所在的操作系统8 H* _8 K( V: d: y4 m- C4 w
window.navigator.platform
; q$ R) ~, Y' D/ o1 |'Win32'8 q; f- L$ ~/ {! p  g. b

8 ~1 ^! A) o/ v3 ?4 m" M+ k0 V//  获取URL6 o4 B( f6 w* v$ c- a) y
window.location.href( y6 e/ s0 @$ y& L
// 跳转到指定页面
4 h  p# r5 W7 N( m, m* s4 d8 qwindow.location.href='https://www.baidu.com'7 u0 W+ D1 @- R! \
// 重新加载页面9 C% L( g* d0 C8 a6 G
window.location.reload() & K" Z$ W4 s- N) A, E  T0 d
</code></pre>
7 h5 `. C! S2 E; |" w  g<h3 id="32-弹出框">3.2 弹出框</h3>. R3 }+ v( W% ^; U, M+ j1 ]8 I7 W
<p>三种消息框:警告框、确认框、提示框。</p>
' |/ H5 K& A  }8 \' U; W<h4 id="321-警告框">3.2.1 警告框</h4>$ p9 n9 ~$ x$ q) e" i! m
<pre><code class="language-javascript">alert("Hello")  r8 S, B, }; N) \" |/ d  V$ t1 {
</code></pre>
: b% d4 J* u% l3 c; y# N+ G& ]<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
4 u) r1 a2 X% r" @<h4 id="322-确认框">3.2.2 确认框</h4>
9 {3 v  d/ l0 x6 D) {<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>2 B  m5 z& w' A/ L; k
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true' G3 m5 _2 L& y: V6 R; n8 X) i% t3 h# E
true( s* l! w. v/ h# r
&gt; confirm("你确定吗?")  // 点取消返回false
, @" L4 Z: K3 Afalse( C- `* E) o7 u0 M8 Q& x7 R
</code></pre>
. `" v4 I: J( g7 q<h4 id="323-提示框">3.2.3 提示框</h4>
/ v8 E# @/ {. @<p><code>prompt("请输入","提示")</code></p>
! T; s+ C3 D8 D+ P<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
! @1 Y! A  V' q6 D2 _: C<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
* q- d; `- n' w  C: V/ C<p>如果直接点<code>取消</code>后端收到<code>null</code></p>$ q. [6 e5 }5 l" t4 i. Y
<h3 id="33-计时相关">3.3 计时相关</h3>
5 O) _5 `# w- r- X8 M<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
5 n/ Z  ]2 E/ j<pre><code class="language-javascript">// 等于3秒钟弹窗! ], `" ^! c" n3 f
setTimeout(function(){alert("Hello")}, 3000)' h* o. T& a  ~
4 ?' L9 R2 Y! b0 e6 U0 n
var t = setTimeout(function(){alert("Hello")}, 3000)0 b" O, g, u8 |! x0 o
' U4 _' r0 [( d" R9 x% H+ `
// 取消setTimeout设置; l) Q2 u  t& c; L
clearTimeout(t)
! x- c6 X1 Y: h6 |& q</code></pre>- x; J9 ]0 e$ g! n
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>: ]0 d/ z5 D+ z' C
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>/ h& E( B0 K$ o
<pre><code class="language-javascript">每三秒弹出 "hello" :" Z- v. z7 p$ S
setInterval(function(){alert("Hello")},3000);7 m# l) `, ~# C4 _* K2 A
</code></pre>
# r* S: d$ N2 P5 D- ?<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>( ?- X& B6 g9 n
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);: \8 K) `6 I7 M) I( e8 @
//取消:& L2 y1 f' C, {4 t$ k! V
clearInterval(t)3 M1 M* \  r& ]% \4 l
</code></pre>( B: O/ v- ?6 {1 a
! q8 \8 v7 F: _
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2024-11-24 02:57 , Processed in 0.075497 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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