飞雪团队

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

前端之JavaScript

[复制链接]

8059

主题

8147

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26507
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
/ L# k% z/ s4 r3 z
<h1 id="前端之javascript">前端之JavaScript</h1>2 C7 {! D5 z4 D& O' m' x
<p></p><p></p>
9 w. z( v7 Y2 Z% ]$ f0 L<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
/ ?/ _& L' i6 K7 h6 P<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>$ t& m9 n; U1 q% C5 r
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
$ T' T. w1 G) d: f它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>4 d9 ?/ S& X! F' |# N5 Y# Y
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>4 [3 m& H2 I- X* P
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>& W7 Q3 o9 I6 y0 l
<h3 id="21-注释">2.1 注释</h3>, S) w- d% g. i
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>/ _/ O3 p! x4 |& K/ a% J
<pre><code class="language-javascript">// 这是单行注释/ E2 G% u2 l$ N. s% X/ X

) w* R) E, `  K& h. |) q/*- Y, C+ R% d. T3 k4 t
这是多行注释的第一行,
3 l* J, f; }; _# y! V5 y' n4 M. C2 Z" @这是第二行。
; P$ p6 q, f; F7 H4 P*/
% v) G. x6 I6 H</code></pre>& F; j8 Q/ l5 |. ]  u( v
<h3 id="22-变量和常量">2.2 变量和常量</h3>; a3 n$ Y) {3 c0 E
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>& D! b* I- d8 Z: L
<ul>
! N2 X' W0 E6 O2 e  v% X<li>变量必须以字母开头</li>) T; V) {! z9 H& H1 j! B
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>5 I, s: P9 p! F2 M4 o
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>; G$ S0 w- Y- r8 G8 U. G
</ul>2 @7 M6 E# {  n% f
<p><code>var</code>定义的都为全局变量</p>
, m& L% l5 J4 `; g9 e# _& o7 N<p><code>let</code>可以声明局部变量</p>/ A6 @+ O8 H6 S8 a
<p><strong>声明变量:</strong></p>
. @$ U0 r9 Z  ?" w  ?7 e) C6 O9 O<pre><code class="language-javascript">// 定义单个变量
$ S% C2 r0 ^: v: O&gt; var name
* L3 x; O7 U% _/ z# I) Z&gt; name = 'Hans'
5 p9 `' W4 P. L//定义并赋值
2 |: ~. G4 T! ]&gt; var name = 'Hans'
5 _6 d) t) ?& l&gt; name- d% b% z1 o3 E' [/ d1 m; q/ h
'Hans'# T' F& `9 ^2 `' _# x+ {; ?

9 E/ f' {- }. ^// 定义多个变量
/ ?6 j& K7 ?' o! Z" I&gt; var name = "Hans", age = 18
" s/ D$ ], W3 Y* b# V* r- Q&gt; name/ L: r3 ^4 R1 x! {! B
'Hans'
* ]% f! p# d2 h+ u9 X&gt; age
. w6 p, o; I: k5 X4 T7 G* u18# b" K* }; h! t5 j, N

/ e8 ~0 i5 X2 d* E8 g//多行使用反引号`` 类型python中的三引号' I" r: A; Q6 p( ^
&gt; var text = `A young idler,2 q3 b/ m8 J; F3 L+ t2 B
an old beggar`4 f2 |6 a1 f2 n2 b- d5 R
&gt; text
+ h/ d* D+ }4 B'A young idler,\nan old beggar'
3 z8 I% K8 x$ r7 l; C3 j/ t</code></pre>4 x$ [; h0 t* @* u& {
<p><strong>声明常量:</strong></p>
6 F$ u0 _7 e$ h) h* a<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>" p9 K7 ^; K& @+ p  w' t' I
<pre><code class="language-javascript">&gt; const pi = 3.14! Y# ^& v6 V5 p+ N+ c
&gt; pi$ h1 T# [0 S; ]* T! m) f% `
3.14
* k7 @2 {+ y; r1 q&gt;  pi = 3.01, ]- A4 ?- h5 S! a% o" Y7 W
Uncaught TypeError: Assignment to constant variable.
6 e, W; w4 i9 Y: {& j  C: x+ f    at &lt;anonymous&gt;:1:42 G" x) Z* _6 I' q8 a* v% E
5 G4 k; k- O6 H1 |% |
</code></pre>
2 [" |; ]4 v' [4 j& ?<h3 id="23-基本数据类型">2.3 基本数据类型</h3>: e+ W; r/ }. n/ j4 }- u
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
0 v5 g0 K; e% h, g  Q<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
* e- ^8 N& P2 a/ H% G3 H. m<h4 id="231-number类型">2.3.1 Number类型</h4>  j# k3 _* u2 h6 W* R! ^
<pre><code class="language-javascript">&gt; var a = 5
% p& R8 b+ P$ X  e&gt; typeof a   //查看变量的类型  , d! y( p' s( l9 g
number) j4 d* j$ U( q; ~, Z

( f* n) d# q& d&gt; var b = 1.3/ i# Z0 g+ z3 I8 `4 z; n' E
&gt; typeof b
! D& A; o: J6 Mnumber
7 Y# V* e! k3 L4 y, g7 L+ g4 y* }- J, o7 _) D5 T
// 不管整型还是浮点型打开出来的结果都是number类型
% S/ O; H) f; b4 C, s: X  V" B; b& q) g4 c  `8 ~
/*! d- ~7 y7 i$ H
NaN:Not A Number7 U2 ^+ x. D. P0 ^7 M; J* S9 f/ p
NaN属于数值类型 表示的意思是 不是一个数字# g, P1 g& @& l: F- Y% ^
*/, h* t% Q5 U  I& M! n1 f# ~
% L; [# m; M' k
parseInt('2345')  // 转整型
, Q: n, F2 u) d- F1 K& n; ~3 F" y+ Z2345. b1 P% Y/ s. M2 y* b% y
parseInt('2345.5')* [" S# k) w2 q7 y
2345
6 y% V! L! U5 ^5 l; q% O5 QparseFloat('2345.5') // 转浮点型2 ~% s6 O1 a4 b( |
2345.5
1 r$ C- ^3 }1 g9 [% IparseFloat('ABC')9 W/ H$ i1 [$ L1 W
NaN
4 o3 k' M+ o/ yparseInt('abc')/ ~0 o# u, c* x
NaN* v/ m9 ?7 w; N* Q' E
</code></pre>$ ~, Y4 n) S' B0 h% {' B5 {
<h4 id="232-string类型">2.3.2 String类型</h4>+ D4 Z# A( @4 D8 N5 e
<pre><code class="language-javascript">&gt; var name = 'Hans'+ V+ k* u- f' ~9 }3 v. p; T
&gt; typeof name/ A* X7 i3 K( x' p7 d
'string'& x% E1 t4 d: L$ H$ ~

! F. l9 P% A3 w' w! \//常用方法8 N1 z. T1 O6 g7 L, D3 z2 g  J
// 变量值长度9 c4 T$ Z8 D2 b$ s+ N/ U. J4 K
&gt; name.length0 x) A' l6 C( u6 F7 f2 T
4- H5 {. Q4 k$ V5 O( P
// trim() 移除空白' Y/ `2 {9 q9 O
&gt; var a = '    ABC    '
( b! H0 z2 z- m+ H&gt; a4 h. Y2 E3 [. b2 s, R
'    ABC    '2 y2 W8 o5 F3 \1 T$ A# s
&gt; a.trim()0 i9 A; o/ ]. ?
'ABC'
2 f2 y- N; l1 w//移除左边的空白- r3 d: E; Z3 U  ?: f  h
&gt; a.trimLeft()+ Y* h7 `$ M' I! j" M
'ABC    '
% v  j" X4 @6 a9 ?+ Q//移除右边的空白
. ^+ V; {5 k6 I' Z&gt; a.trimRight()
8 J  f9 L. Z: N; }7 l'    ABC'
1 v( b* [6 G2 n0 o. g& s9 c( z  F: [  h% w8 P1 f/ Q: e
//返回第n个字符,从0开始4 f+ R' w4 N( O( `! K. ~" X
&gt; name
/ l  f! m0 h! ]* l) p9 ~'Hans'5 u- _/ t. \' m
&gt; name.charAt(3), G% a) |. A/ q/ Q! t7 Z
's'5 ^1 Z) S, b/ n8 {6 H8 D
&gt; name.charAt()$ g- ^* \! C  r  K! d
'H'
" A0 L5 B5 O0 b: Z&gt; name.charAt(1)
& v" K- i$ C- x$ K- S4 h; R1 j'a'9 e/ m  R9 C: @

: C' o7 R5 b9 a5 y// 在javascript中推荐使用加号(+)拼接: e* h% W- A& m( M9 d
&gt; name
" q! M* y* F; o! Y& a& R'Hans'' Y! G/ c+ Z) S+ _7 F
&gt; a: Y# U( B4 X" f$ C
'    ABC    ', M) Z- S- V9 r
&gt; name + a
3 |5 g9 ~9 M2 d! I& _'Hans    ABC    '% Z% \) c- k4 u7 e
// 使用concat拼接6 |, E0 F0 f0 ^2 O; ]
&gt; name.concat(a)
7 p6 m8 h; F+ F$ Z1 `" |'Hans    ABC    '9 Z1 o$ h; {6 v$ J% t5 r
, a9 j0 _$ h% G% s5 E4 K; L2 Y) \
//indexOf(substring, start)子序列位置
, I( \3 z$ F  }
$ N* ]1 `, @- j  _" p9 k&gt; text% m( L$ X9 N& j& K& D3 Y4 W
'A young idler,\nan old beggar'
: Q+ B2 H+ f5 {6 C$ {0 f&gt; text.indexOf('young',0)! V7 T$ _+ H3 G' _8 T2 m
2; L0 d9 e' t( m0 Y, }5 P# v
* w3 Q3 R4 ~. s- k( ?
//.substring(from, to)        根据索引获取子序列
1 C. j) b1 ^7 \0 b&gt; text.substring(0,)
" r# N( r% U- u0 D1 {2 ^7 @3 f'A young idler,\nan old beggar'6 \' V. k* O2 m3 Y3 j5 X) r# H
&gt; text.substring(0,10)
1 d$ h" i: t% Y; R* m# X8 j+ Q'A young id'9 |+ \* b) J( y9 c: n" f6 P6 R5 p

5 U6 m  Y9 U: d// .slice(start, end)        切片, 从0开始顾头不顾尾+ Y3 G4 z: L4 {# M# k* N, s
&gt; name.slice(0,3)0 u5 D* b9 S" z5 x* B
'Han'
  M0 |3 s3 t/ v$ y9 a9 A
5 o, A; z( ~2 W/ l: g  f// 转小写
( `: X) q/ C& I2 L( M  T5 D$ T&gt; name
5 m3 a: `4 j3 I5 k'Hans'. D& x( B6 g' m3 Q
&gt; name.toLowerCase()
' t- B5 C/ u  m1 F'hans'
5 n: ]% Y) k' b+ s// 转大写7 y: I/ [7 I. E" V5 u
&gt; name.toUpperCase()1 ^. c( K/ m+ l
'HANS'  z  B) \( A! H: B0 ?' _
# y" n, d' C& k4 |: V
// 分隔6 k$ _+ k  [6 h' w
&gt; name
) c3 x2 _& S8 H  P# k1 z, O'Hans'$ k6 b0 n7 @: E) D% q' O& F! }" A" f
&gt; name.split('a')
$ ?$ q3 V' w% b(2)&nbsp;['H', 'ns']
! O% ?: ^, l" l5 a* T</code></pre>
1 O6 u  ~) U# ^% H/ Y. q9 K0 y<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
' Y& m- o6 d$ S. H* o1 |<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>% L0 }, J/ a7 D. K
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
: |0 Y1 g& ?7 l( Q" ~<p><strong>null和undefined</strong></p>1 U3 u& R7 E9 V# J/ e9 @
<ul>/ m8 }& m: s* u9 C6 P; k% _
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
3 a0 Z9 Z  A: L! C$ }$ T/ D4 J<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>0 ?2 |' O9 y8 `, K+ [# [: F2 V
</ul>+ K% Q+ ?1 q7 _) s1 g* J) h! L
<h4 id="234-array数组">2.3.4 Array数组</h4>& V1 U, A* d' j& F% t% @  J* ~
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>; z( q$ B) i8 K" u# Z
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 7 l- G/ V& g! A- N; N2 W
&gt; array11 b" T. n. b7 Q0 p4 S
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 O3 a! p# K$ K' C3 H9 a&gt; console.log(array1[2])  //console.log打印类似python中的print6 b- F+ |0 F" V! P1 r
3
1 W: j0 Q; g8 r6 x, J4 ]- Q: f// length元素个数5 `. M9 q6 ]! e! K& U
&gt; array1.length0 J  ~# l3 O7 F5 S
6  i/ _/ w9 O! O  S/ P5 V  i
// 在尾部增加元素,类型append
+ V( v4 S0 N: G# M8 `&gt; array1.push('D')* |! k" |/ W+ i6 K6 a  `. Y
7
9 z3 E4 I8 k; [4 {&gt; array12 m9 @4 z' p0 H# J$ [5 Y+ p
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
. j* ]: e4 `9 f) g* y1 H) k) C4 z// 在头部增加元素6 h1 g# D9 o) D' x( J; l! Z
&gt; array1.unshift(0)
. `( G1 i8 k* M) J8& e& m- s, P  ], n, u/ I- {
&gt; array1% t5 H9 V+ C/ ~/ z& R' L- I
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
7 s# M& C! Y/ ?) i, c3 l% S: t2 ^/ q: m3 T2 ^7 R
//取最后一个元素+ x3 m+ ^, Z3 S2 ^9 m
&gt; array1.pop()8 l/ T+ r, C+ k+ [5 U
'D'
0 t; x2 M3 v: Y" ^: n) [) G9 q&gt; array1( |2 q3 j" D0 [* t( Y# }0 ~
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
, s1 B* U  ]) p/ N. L//取头部元素8 S" |/ ]/ v; ~, x( F' t+ n/ {$ Y
&gt; array1.shift()
* e1 s6 Z! q7 b- g: N0
. d3 L& K! p! E: Q: G1 p2 j( a&gt; array1
5 U9 l" m/ s  N7 F( ], M- l  u& Y- _(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; O! M% e/ _) W4 h6 J
/ X# o9 F) g9 i4 \' B) D6 [//切片, 从0开始顾头不顾尾6 [% v9 A1 `9 G1 e% b  M
&gt; array1.slice(3,6)% I$ l+ A* ]& b8 S) A) x
(3)&nbsp;['a', 'b', 'c']0 W( v& c. V2 V( J' D
// 反转
1 L( z' q0 _5 Z&gt; array1.reverse()
2 H8 u; L, E0 R2 C(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
- R# {7 e& T4 O: N7 o* W3 m, v+ _3 i// 将数组元素连接成字符串! \% _/ z8 `1 w& Q; h
&gt; array1.join() // 什么不都写默认使用逗号分隔4 H; p6 o1 I; F( m  ]" ~" K! b
'c,b,a,3,2,1'
& d. n+ m' e; T+ z2 m1 r&gt; array1.join('')1 S6 F2 t7 i. `
'cba321'
; p1 ]* O- Q& B. n! T6 Z7 s&gt; array1.join('|')
, ^9 k9 [8 O2 r4 @0 d$ W1 G'c|b|a|3|2|1'9 N$ t5 g, i$ ]4 H2 w( P
" J1 `, w. e- D( M! S2 g
// 连接数组! b0 B+ k. e7 {. `/ r9 C/ \" }5 I
&gt; var array2 = ['A','B','C']
! h, c) ?9 ?9 E9 Z&gt; array1.concat(array2)$ U6 o! e. m; q7 I1 \
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']6 U" t5 n- L: _, O
! K1 L) H# S" u& r+ _4 t/ `
// 排序
$ M8 s5 d! A# [& S3 T. ?2 |&gt; array1.sort()$ y. f; L- B: S9 }; s( Q1 ?
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& q% t( i: b4 Z% y3 M9 u
$ t- o$ Q  r- ?! S
// 删除元素,并可以向数据组中添加新元素(可选)
. ]9 \5 ]5 X5 j- m&gt; array1.splice(3,3)  // 删除元素# m- X, X5 {/ C0 V5 T0 |8 z
(3)&nbsp;['a', 'b', 'c']+ [0 Q9 B' T, W" c/ s. b
&gt; array1
/ k' _2 r9 }% ?* ^( y7 u(3)&nbsp;[1, 2, 3]
7 V* x. I* N3 x  k&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素( `$ w, p* a! q0 r
[]8 q) F3 A$ V3 J* P: c
&gt; array1/ [) W5 {" u1 g
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
6 Y' E3 d5 v' |. L3 N0 M. J
* k5 j& K" P' o  H4 E/*
4 B$ H2 _. u* ^8 [4 lsplice(index,howmany,item1,.....,itemX)
2 v- q9 C9 u" Aindex:必需,必须是数字。规定从何处添加/删除元素。
1 W& z/ s- i9 N8 Ohowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
7 x- `0 M  ~8 d/ P( I0 [item1, ..., itemX        可选。要添加到数组的新元素+ q' S; N& c6 H: U$ g# I
*/
. q+ {" J0 d. P6 h5 C' o
0 B3 u  i, q+ m// forEach()        将数组的每个元素传递给回调函数7 F6 C5 t; o& M, d0 Z" [
&gt; array1.forEach(function test(n){console.log(n)})/ N  P* [2 B$ p8 T' G
1
: D  u% ^8 V$ k 2
! E. @) E' \! O1 l5 H 39 B: s1 Q6 c  P
A
  b. h- U& I6 A7 y( O, P1 b B3 u; t% @! W# h
C
+ K( _" l; m& [' E5 a* e// 返回一个数组元素调用函数处理后的值的新数组
3 T. ?+ a" U4 n0 _! g&gt; array1.map(function(value){return value +1})
. `8 _, x& _, [) }(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
- \- T9 ]/ S% z" P3 T, A</code></pre>
0 l7 {, p( y' _8 l- {<h3 id="24-运算符">2.4 运算符</h3>0 c" O! f% T/ `3 F" p  R
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
/ f1 C; K2 u. H/ D* D: ?3 A/ T<p><code>+ - * / % ++ --</code></p>
) q% n- [* v! s5 A. Z1 L" A<pre><code class="language-javascript">&gt; var a = 6* e2 v  T# q" {, s" m2 x$ Z
&gt; var b = 3
) a! A  v1 m# k/ H, h8 a7 k// 加
/ J5 X6 u! s$ W' ]/ c! @: y&gt; a + b8 F7 m/ D9 H% B' O8 B6 _/ n
9
( v) I2 O' X; I: ]3 L8 H8 b9 Q0 G// 减; J. {" `3 Z7 c5 ~
&gt; a - b
7 Y3 }' x7 _% [7 Y. b: r+ h0 K3
# K0 M- {' U1 }1 x; G4 Q6 _// 乘
. O3 T$ F5 |: p4 \8 ~&gt; a * b4 `# Q( ~5 |  W
18
" c) j- D! a' q# J% s0 d// 除. b) r5 @/ e' F8 \& T: g
&gt; a / b. w. J( z5 j! P( _
2
# t! r6 x2 i3 k, R2 y& Q0 T' B9 D// 取模(取余)) Q! [3 L/ H8 T& A$ v: w
&gt; a % b
! h" W  O  r8 ~# u0
) h/ }  k: M; }# `7 z9 A// 自增1(先赋值再增1)
, F2 y# W5 W! V6 n6 C; P&gt; a++' h  f$ S0 H; X5 F3 p7 _8 f  ]  F
6& @! c) `* c. E
&gt; a& {' Z: x/ a1 F( O; ]
7+ D' o" ~& L! q7 t
// 自减1(先赋值再减1)5 R: s, U  j) s6 G0 U( a' a% _: k
&gt; a--+ M- h( v+ M! d6 T# D/ b* H
72 G4 d3 B# k+ b/ s/ X4 C
&gt; a
; p8 t8 L0 A2 {: F4 K/ ~- F6. m( a# I* k) P% R8 A& M3 @% h
// 自增1(先增1再赋值)
2 }% M2 ]0 F. s! q) t9 V3 y&gt; ++a
! K4 _" r+ w, o$ p0 N7, z  H6 l! ]8 q+ W4 a7 b5 S
// 自减1(先减1再赋值)
0 r: q! s0 p% d  E6 ~&gt; --a, Z8 h" T. A0 @: `
6
$ \5 c5 J% ^' Q4 `2 _" r  L/ S) @% F' t&gt; a
1 D. I% e: p3 r% R0 J1 y61 M7 {: z4 h0 c: C
7 F' ?6 t1 r& D
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
7 L, M* t+ d8 ^; P: {</code></pre>
8 p9 J# A6 `  \5 ~6 y" ~<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
5 y: z* ~  k; W<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>4 z7 j3 G/ k' h. i. V& x3 c& ^
<pre><code class="language-javascript">// 大于
/ n8 h9 Q/ R+ |6 T( L&gt; a &gt; b! C1 D5 g1 A( V
true
' o5 x/ @8 t' A, D// 大于等于
( @1 l6 q6 j! X2 A&gt; a &gt;= b
1 `& z" [2 u8 ktrue9 e- x, Z) K3 A8 C+ V0 g9 F
// 小于( ]1 K5 n+ W, o9 W( ]6 t! F
&gt; a &lt; b9 D  S. s: \% {% @
false( c- o6 l! D9 v# i" G/ m
// 小于等于
" e* V1 Q! u* Q! U&gt; a &lt;= b+ a3 o$ z# B: b# i5 ~+ N& K
false
0 ?% S7 b& I" s* D( S// 弱不等于
, k% f6 M% x; _7 [6 o9 r: z, Z&gt; a != b1 O+ ~% @! ~0 P- M- Y
true0 ~6 o/ q$ x0 e: h; G6 P4 A
// 弱等于+ J& U) r3 p0 S+ e
&gt; 1 == '1'! W6 ~  @, D% v! k- q
true% j. E5 N; B6 Y) R5 Y, v" Q
// 强等于' }8 Y# a% N# P8 B* P
&gt; 1 === '1'
: p2 [  N# N5 @: _# Qfalse
5 c! ?  o: m# O  l' G// 强不等于# V2 w" V* q1 M% _) y
&gt; 1 !== '1'
- l6 B/ n, U2 k/ g7 |: c$ Jtrue$ j' ^& ^  C5 C" _9 f
  _; ^) n/ U% y' l
/*
  a# C0 K% V1 u) j- z# h3 kJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 X7 I0 G' L+ e! n
*/
* P; _: y/ _8 |</code></pre>
% a2 q' o) r9 d<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>; f+ E) M, D  V8 k( B
<p><code>&amp;&amp; || !</code></p>; Q- ^4 t2 g, b
<pre><code class="language-javascript">&amp;&amp; 与1 G2 g8 b# W2 s) ~1 O
|| or
; j: u% M) W1 _/ ?! 非
* V# T6 P) Q3 r0 @! K8 T</code></pre>3 \2 x6 T8 \( G5 a6 S  I
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
* K3 t0 k+ @+ s8 F2 L4 w8 x1 |<p><code>= += -= *= /=</code></p>% l  G, w7 F! A) b: o. {+ s
<pre><code class="language-javascript">// 赋值
, M- w2 X% {& |: }&gt; var x = 3
# r! _; O# C+ q* [  a// 加等于7 {. P1 ~" N% o: ~( R0 i+ L4 u
&gt; x += 2! x$ R( T' y. R/ I$ W7 \. v5 I0 E
5
0 S1 L$ s. ]7 Z3 ^) R* g// 减等于
8 I- h# ~4 p. d&gt; x -= 1
' m& {* x, g! O- k2 @4
; O1 B# |8 K) x( a3 E  v7 J5 b// 乘等于& p; a% U0 s9 [/ w2 h
&gt; x *= 24 d; z. V3 R: H" l# O' Z2 q. P
8
( E% a- d- @; s) S6 ]% H' B# z# D* V// 除等于
( ]. G8 t1 S- [* e&gt; x /= 2
+ p' ?" Q9 G) \! e( \5 F4- B1 @4 X; f: |( m& G7 l/ t1 W
</code></pre>
+ p' w) d+ r$ H9 ?; h<h3 id="25-流程控制">2.5 流程控制</h3>( a- a, B# A7 ]2 x
<h4 id="251-if">2.5.1 if</h4>- V* f- I% R6 A3 _' X
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
$ I# O2 b! M- |& u: e  x
# {5 w# m9 D. \; y: k&gt; var x = 3; Y" B& u$ [# J7 F7 n% s
&gt; if (x &gt; 2){console.log("OK")}
# \. \9 B: I' T7 u. ~9 w0 l OK
" b# M0 r$ S; v! ?6 a* [' h0 g9 O' m9 N$ Z) i7 }
2, if(条件){条件成立执行代码}
1 i$ a* B' D* d: J' ]0 t8 a) t+ _        else{条件不成立执行代码}) Z6 _/ [. ]- {. h# }: N/ w5 ?
& ~  Q3 _5 {" l; O% t
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
" ?  ]; d8 |# E& E/ _, x, I( \'NO'
: N: z4 d; R+ _' }3 S% s- B! c" Z# H, J, Z7 y+ H2 P
3, if(条件1){条件1成立执行代码}
( \+ `- G2 V& ?) }+ i' ?        else if(条件2){条件2成立执行代码}
+ h5 f/ t% T! s- ^' l    else{上面条件都不成立执行代码}0 X1 s5 ?4 z2 c+ @
5 n- z' |/ X, g
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
8 S5 n1 t4 l5 Q/ ?1 y Ha& D4 r7 t) ]5 s. _" ?
</code></pre>
  }% Z' v1 E; |<h4 id="252-switch">2.5.2 switch</h4>; |+ }/ o7 b; O3 k) Y
<pre><code class="language-javascript">var day = new Date().getDay();% N& _8 q$ M7 W& O* [! n% f; M
switch (day) {
6 j( {  c9 i9 y$ A  case 0:. ~5 ^) G8 {+ H1 |
  console.log("Sunday");* z, K% ^0 R' f6 l1 ^% c9 E
  break;
3 }; C8 X9 l- j& z+ K6 H% m  case 1:
: p4 f! {# J# C; C9 H% V% A, |1 v  k  console.log("Monday");4 e$ _! O2 ]* j, w
  break;* L' v" j" b8 \( Q# X
default:
3 {! C- I) k& U  console.log("不在范围")4 S2 {# Y# j6 \  ^
}
/ o/ a2 o  u. u5 k" y: D- D 不在范围
1 X& p( B3 x! w) Z! ]</code></pre>
: w  }2 Z1 Y! |" o7 N<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>- ~& n& S; U' H) A7 c- o
<h4 id="253-for">2.5.3 for</h4>! Q. b; V: w* U" u$ ?/ ?
<pre><code class="language-python">// for 循环
+ s4 H( z$ F# J; S. l% ~5 t. @        for(起始值;循环条件;每次循环后执行的操作){6 B6 n1 o% f- f+ I
        for循环体代码
) w9 c3 G  Z' \    }1 o6 b+ p* v9 ?1 O6 W7 \! Y

$ b# t. x; e4 y8 `1 rfor (var i = 0; i&lt;10; i++){
  a( ?" s; M) Y" b  v- [    console.log(i)
: F4 o' A$ ~! j$ z}
, B. z. `. d0 `$ K        0
# U, d" Y  w9 c0 F9 l        1" I( [) T6 h& v, S
        2
/ X& l: B+ q, q$ ?9 S        3" A% k+ G( I) M) y
        4
; \* P7 S4 Q* l2 Y, @" h4 p7 h        59 D7 C' ?: N" E& s& }
        6
3 Z) w9 ~/ ~5 d: x" k2 ^/ `; s! b        7* X8 V" p4 k( d5 v
        8
% s" u, |) V1 y4 L5 o! N        9! J) W/ t! Q" b6 d2 ?7 p
</code></pre>
5 [8 w# J, U$ y, ?- _0 D<h4 id="254-while">2.5.4 while</h4>
. ^4 N3 `7 K) g; J0 P- T# J  d<pre><code class="language-javascript">// while 循环. ?9 K1 S6 I2 Q  u& O! E/ d1 ?
        while(循环条件){" r+ Y! O. s' f- G8 a
        循环体代码2 ?" ?4 `0 d/ O( {0 M1 Y
    }
$ N3 l& k  E5 v/ o4 \! A# t( a; T3 ]+ H# Z$ g! D
&gt; var i = 0
! e0 {. i; ^4 j% T&gt; while(i&lt;10){
& ^4 H% |9 Y+ o- o    console.log(i)6 D5 o9 w# m2 }5 C% Z
    i++
7 V' y8 q" [( d}" M7 i  ^0 f1 `
0! p( E; X: {  L7 k4 K! R
1
' o' z1 H  F" S4 G" X8 Z& v  W 25 h5 y( s% F$ h- s/ C
3
) u! V) V: s0 R) M( \- x# ~ 4
# A; B3 Z1 H+ Y3 H' M2 ` 5
& Y3 F' ?! T' L: J1 i! Y" N% y 61 q) B5 T+ P" O( b2 E
76 S+ l) B" d9 c4 t1 m1 Y$ [
8
/ d* E0 K5 l4 X$ K" u& m% Q' Z 9
4 W: T9 q  ]: Y0 p</code></pre>
" ]7 V) X" z; L8 U$ g8 l  b<h4 id="255-break和continue">2.5.5 break和continue</h4>
( j2 v* K3 `- a5 g+ ?  ]7 ~$ K" B<pre><code class="language-javascript">// break* u* K: K& H4 ^* r/ G/ Q# T$ G
for (var i = 0; i&lt;10; i++){
) ~. x" C  N3 T    if (i == 5){break}
$ O, ]- D: h- d6 w    console.log(i)
. H/ A$ p; `; q) x% \% F, ~2 v7 ]}
! B8 n" {; d  p0 R2 b$ m 0* O1 Z8 p2 i: Y0 j( c1 t
1
! l& v: M, L; Y 2
! d% C+ i) [7 Z0 O; U5 u: M9 Z 3
7 a) J' U3 a) M5 B, G$ T* U 4
0 @" B2 t) u4 i" s6 _// continue* ?: i* q7 [9 P6 e5 N3 _5 K
for (var i = 0; i&lt;10; i++){8 l4 S1 a( n% l$ Y9 v2 |% `" N
    if (i == 5){continue}1 v# l# {8 N4 y9 |+ S
    console.log(i)
- ?- |  a# Z, D: Q* Z}
) X) r7 V2 t$ v4 M 0
! r+ c" {' l2 G# J+ S& Y$ R5 G 1
" x* |% T2 @* p! m- C 29 r3 ?& b& N+ W3 d& T+ A" Y
3) V. x, f6 l) d4 w3 ~. I3 P) @" I
4
' E$ l" U& [2 [7 r0 C6 { 63 w" L6 l' z+ ?8 c2 f
7
0 O2 b& B$ }* O+ P0 ?5 i* l 8
# X, C; D" o) h8 L4 M) [- c 9
$ [3 ]+ R2 \4 g& E. c, Y3 G
" M$ |* x, |: |3 f</code></pre>
: o1 n# D. |9 g, ~# A$ M<h3 id="26-三元运算">2.6 三元运算</h3>- Z& z" B3 W9 e# E0 P; W9 c
<pre><code class="language-javascript">&gt; a
. h+ V7 l/ t6 o8 x6) y0 N0 V" n& ]6 \( p
&gt; b
4 Q# J6 q5 ?8 l* a$ t8 k9 I3" B+ J- t6 `6 g

! P# f: ^1 y5 n: I* s( v//条件成立c为a的值,不成立c为b的值4 ~9 d$ U7 e8 w- @* V$ l- [
&gt; var c = a &gt; b ? a : b
& h2 u, G- C' \1 [2 A- ]&gt; c
4 Z+ v; D4 v. \" {% g! z3 Z6
  \" n4 c& I7 l
$ F2 F2 _  v4 n! X  n# @// 三元运算可以嵌套
% @( ^* ~/ x- Y</code></pre>
  c1 y) a1 o% Y: R% j<h3 id="27-函数">2.7 函数</h3>
- z- m2 j9 |1 l<pre><code class="language-javascript">1. 普通函数7 ~$ a5 {/ }2 ^: N/ j/ x
&gt; function foo1(){9 Q" p" g4 S( V( F- Y6 Q
    console.log("Hi")
2 f3 S/ h2 S; q* D/ `}5 B* X7 U6 |- n( `2 G4 h
2 v. O% ?! n1 s1 Q4 w
&gt; foo1()- E' s! g9 @; p. ]. N  y! n+ M5 E
        Hi
$ x% L0 U' o; W& z1 ^2 A2. 带参数函数
* Q( \) ?5 l% ~, ^. ^; T&gt; function foo1(name){2 X1 ~6 X( A( ^9 Q' I- E6 U
console.log("Hi",name)
  o& j/ v6 M+ [}- B# g# j/ x: @
5 ?. I+ S  |" E/ `3 k3 W+ g
&gt; foo1("Hans")) i6 a/ s0 F; f# x
Hi Hans4 j9 f2 j2 S# Z! P3 |; p& ?

! U4 Y; k+ z8 D$ W3 W& e&gt; var name = "Hello"7 y/ q; v" y' j* C' M* {
&gt; foo1(name)
0 N3 {3 X" _8 p* ?! j1 C% yHi Hello5 E& [/ ]2 o  `- ^2 v
- ^; l! E+ U: {: r2 D0 Z: e
3. 带返回值函数
8 E3 I( G* p- V, t) V: `& C: Z&gt; function foo1(a,b){- F2 ^  e+ k# P! K( q3 o
        return a + b   . g' N* ^# G$ S  f* n! ?
}
1 C' |) \1 n9 Z0 E" [&gt; foo1(1,2)' m6 E" Z5 l  G2 Y" t! D
3
8 |- q* ~7 ~3 T- i1 F5 ]&gt; var a = foo1(10,20)  //接受函数返回值
3 a$ I9 M* N: E# L&gt; a, f1 @4 w! M" n
30: n+ j4 R# e/ F( V

9 M- f( f  j, A5 s7 D, F4. 匿名函数
& x, e, t( u& x; \/ s$ O# r- G! P&gt; var sum = function(a, b){: V) v+ d7 w* v
  return a + b;' E; @4 G& J9 S7 W( ~
}
: ~0 s. x3 }8 b1 v- y&gt; sum(1,2)
" U+ d, W( Z. T. s3! ?$ B1 R. O# N' G6 }0 y' s5 h

) A8 o1 i$ j$ j- n, Q* U// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱2 l' w6 E4 s+ ]. s% l* ?
&gt; (function(a, b){
5 V+ A5 `4 |) B* y6 m1 P: T' e  return a + b9 G  H0 K. [1 D) X* y
})(10, 20)  V, Y  _8 A, m: F
30
( R( Y  A% U1 u9 R1 t
+ F6 d6 z0 n$ C" [' T( m) w* R5. 闭包函数
# u+ Z. p+ J# C, C# e// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
6 C6 u$ [( E: Gvar city = "BJ"" F9 t# c* B7 G1 \- Q3 \. N
function f(){, i8 x$ Q1 x( c- R  b) v; `
    var city = "SH"& w- |: H! d( I- D8 m7 x
    function inner(){$ Q5 n, S! W2 |/ z
        console.log(city)
$ j8 c5 p( u, {2 `    }/ ~1 u0 y8 Q4 i0 U" }+ P
    return inner
+ d$ K6 ?3 s5 W}
9 S: d( C7 R3 w. V1 w3 Z+ P4 s) Jvar ret = f()0 G# {8 D4 g9 l$ U* w+ m
ret()
1 Z- Q3 Y* s! m# t. V8 K执行结果:
, Z- L; c* A  P. B# r6 W4 d4 R: KSH
% t. |$ U9 i9 w6 M, W7 w* c3 Q# S+ b" z& L
</code></pre>
  W3 ^1 f: }+ _% e+ O. C<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
1 p9 |& a6 s* J1 X9 N/ t<pre><code class="language-javascript">var f = v =&gt; v;
/ z  O* t" Z4 Y" B8 V// 等同于
0 W5 F% Y1 f' ^var f = function(v){
5 M; C5 a2 h6 s0 I  return v;! e2 F* p  E) a; `8 ?
}4 J* G8 b3 @- B
</code></pre>
% L8 l% G# t; z- ?. t* l5 g' y<p><code>arguments</code>参数 可以获取传入的所有数据</p>
1 Y% ~% G" A* M5 s; B2 H. y<pre><code class="language-javascript">function foo1(a,b){. h( o' e& B8 R1 `! C0 `0 l
    console.log(arguments.length)  //参数的个数
7 |& y! O& o6 a3 t3 p. u    console.log(arguments[0]) // 第一个参数的值8 r) V' `/ F4 `7 h2 U, o# A  I$ H
        return a + b   
; ]. x4 K' O, Y. w: ]}
) b) I/ m, ?1 E! m) Y( [5 Zfoo1(10,20)
) Y* V  @& ^8 O结果:9 v% ?0 j0 i( d3 p& P
2          //参数的个数 9 P4 D! x. B4 ?: b# R! `# `
10        // 第一个参数的值
* G$ _. K% A, x30        // 返回相加的结果
  ?7 o# m! a; i$ c1 k</code></pre>
! q* l9 \) {5 G" y<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 v/ K5 O" w  T2 B<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>2 k" E& o% |, F6 Q  M5 I
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
* b, M! C- f( g$ _( c" [, O% ^. Q<h4 id="281-date对象">2.8.1 Date对象</h4>
# p1 z5 D! b5 P0 z' X1 {5 e$ s- f<pre><code class="language-javascript">&gt; var data_test = new Date()
& J& L1 l. u) b) @* w. \&gt; data_test6 q6 D# ]- K$ E' e
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间); j  k, p4 ?9 g
&gt; data_test.toLocaleString()
" D2 S5 w! B6 N2 M' p'2022/2/11 下午9:44:43'
9 f- N% b* Y0 [2 ^6 ~6 _# d# O/ f0 g8 g9 V, p
&gt; data_test.toLocaleDateString()
  ^6 Y/ V& W/ T! L'2022/2/11'4 P/ W( m+ F! u9 \/ R0 u
! G0 o" `: x0 ~4 P
&gt; var data_test2  = new Date("2022/2/11 9:44:43"). }( [. ]8 a" f) o3 [! r
&gt; data_test2.toLocaleString()
/ |% ~8 K( N) v6 _, o'2022/2/11 上午9:44:43'
' `5 Y/ F: W# L  A! C
6 S' _6 T. I) M& v// 获取当前几号
+ u1 v8 y' |1 a: j&gt; data_test.getDate()% b: @0 z  Q$ v9 x0 ?* a6 h9 s
11
5 c- j8 d: O3 K6 C3 L* A2 t4 \% G// 获取星期几,数字表示
& h  V' E- @( P&gt; data_test.getDay()  
; T9 j: H. z- d5) |# @4 f% u& V# m! |3 w
// 获取月份(0-11)
/ l- E* t* J$ L. a; h& J. |&gt; data_test.getMonth()
6 p7 x: ~9 |5 d$ O" q1
4 R+ {7 P4 w7 D% ?5 W( w5 t// 获取完整年份- d* L- z  H2 u' }
&gt; data_test.getFullYear()
" V9 L; ^! W/ f2022
8 [$ q$ H+ m! i- T: ^6 r0 h// 获取时! Z" |/ F5 m9 \' L
&gt; data_test.getHours()
5 r: x+ b3 L$ m2 ^' ^21& X5 K) K) k  v# I7 x
// 获取分
8 y4 _/ x0 _# d9 s' h+ a&gt; data_test.getMinutes()9 C9 f5 b% X* |0 f
44# }6 `( b9 w% o5 x/ f
// 获取秒5 S& N, F+ z" m2 {1 C* M
&gt; data_test.getSeconds()! ^) o4 l3 I) E7 J( ^
430 J0 a3 }) }2 _3 M: y* G* G
// 获取毫秒
' x: @! p4 ~3 I9 q, J" A2 o&gt; data_test.getMilliseconds()- {. b4 u- D8 W" X$ @& v& f
290
4 i7 ?% M. z, P1 W// 获取时间戳
- B  @5 `+ j( O1 g6 }4 e&gt; data_test.getTime()
/ @$ I% w" A, O  |, J- P& s16445870832909 \: l& m% @* m0 |1 w
</code></pre>* F; o' e6 J4 a4 k- u/ L' f
<h4 id="282-json对象">2.8.2 Json对象</h4>
6 ]$ q0 V) w# ~$ m2 [! D<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串* z1 `3 s3 y2 r: g# G0 e. t; ^& m
JSON.parse()  // 反序列化,把JSON字符串转换成对象- n" z3 R( V' P% ~! q3 X: t8 d4 f

1 x" S! Q" v' M5 C// 序列化6 e: {. _% y0 ^/ R, H4 K
&gt; var jstojson = JSON.stringify(person)
' k# x3 ^4 _* G8 V: b&gt; jstojson  4 [, J. Z: n! A1 T5 ]- V
'{"Name":"Hans","Age":18}'
% ^* _* c' X+ w9 Q5 c5 `% Q: P  H) U) q( N; ~, ^; t0 d! {% w  y
// 反序列化2 M, S. Q& P# H5 ]$ r+ K: d
&gt; var x = JSON.parse(jstojson), i* c  _5 x+ ?  ^0 g' J6 ^
&gt; x$ M! J& n( e+ j3 N' w
{Name: 'Hans', Age: 18}7 ~1 f9 ?, T, u* L
&gt; x.Age
9 s1 g9 ]7 q/ L9 ^18( b9 P( y- }" H* p
</code></pre>
. Q! U2 n& n. v$ h<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
" x% L5 b6 ^  m+ Q3 e<p>正则</p>
& {7 y% s. @: ?0 m% e! J<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");0 W4 A/ `3 b; F1 W* D
&gt; reg1: T$ \# }9 L* h- ~. y
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
) v% g* y8 Y2 Y$ j* D&gt; reg1.test("Hans666")
% N: T% W' {! }! [/ L$ y% ]true6 u5 X$ d+ N) N  {

! H5 s2 g" m  D, d5 V&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
8 E) m0 z/ i, q9 T8 \&gt; reg2& w' l0 |, V1 l/ `' h: x
/^[a-zA-Z][a-zA-Z0-9]{4,7}/- L$ R" q+ C1 P) q3 B# |3 N
&gt; reg2.test('Hasdfa')+ ~# U! E5 z3 |& l4 b& J1 H  r
true/ _4 G& s" a; m+ K; q
; g, G$ [5 q  ~7 C- I
全局匹配:, R  s/ ^+ C8 \) D& `
&gt; name
+ O6 [0 G/ X6 C! R( a# k+ }: z'Hello'
5 r2 S$ T" t2 Z4 C  c; `; E&gt; name.match(/l/)
! Z4 ~( c* i- X# V0 E['l', index: 2, input: 'Hello', groups: undefined]
9 q; a* l6 Z0 x; q
) S( ]3 W* Y6 h/ `$ C&gt; name.match(/l/g)
* R/ I  y- v$ {/ S( e(2)&nbsp;['l', 'l']
: U* }" y! f3 p* S8 u. `% E& S2 a// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
( ]. }- d0 K1 _9 e0 g$ n, N2 u
2 o# Q" i. w6 s  g9 c0 q全局匹配注意事项:
3 K" a# h% h, M5 }7 O&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
5 g4 {# x# a4 _1 {' z&gt; reg2.test('Hasdfa')" Z/ k+ {9 C! t
true% H  T- x. D6 k3 \
&gt;reg2.lastIndex;( i7 Y7 {+ O$ F
6
3 Q2 j- i0 E  J) x&gt; reg2.test('Hasdfa')  o3 S* ?( `- p, O$ q" @- E
false
' j% Q$ V& Q( q+ D, e&gt; reg2.lastIndex;
7 x: k( E: S# b0
1 d  `4 ]) m" U& ]! o. @&gt; reg2.test('Hasdfa')
; i3 p/ O( s4 w% y6 Rtrue7 X$ D! l( D) b: F/ D( }0 C
&gt; reg2.lastIndex;; h! s; M; Q4 R+ ?9 u0 H+ n! O
66 h& d) ?5 k4 t8 Z  J' w
&gt; reg2.test('Hasdfa')& N7 M# I' `3 O' ]3 V8 P
false6 c0 e4 q/ V3 L2 ~' W; Y
&gt; reg2.lastIndex;! p. O. _# D8 a  [2 B
01 b- C6 F8 a. G6 W5 {! r! X" L
// 全局匹配会有一个lastindex属性
4 U$ w0 [) ~; ?&gt; reg2.test()
4 ?9 _4 d. q9 [false
' Q6 w$ \& ^  B) c! y&gt; reg2.test()- Z. n6 s( y% c$ J) ~9 ^9 x2 u  ]! ^2 W
true
6 t- E: ~# R! l. U// 校验时不传参数默认传的是undefined/ J6 j9 A% l# H6 R
</code></pre>
- S, Z4 w$ q, V9 l. a<h4 id="284-自定义对象">2.8.4 自定义对象</h4>8 d! D$ g& K. ?9 n0 T
<p>就相当于是<code>python</code>中的字典</p>
6 T9 F; D8 X: P! @! i% e<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 o6 B7 y1 e. G  [7 Z&gt; person
; ^# t9 g8 Z# B3 y7 }7 B{Name: 'Hans', Age: 18}
" ]  Q0 N/ y0 u; z) F&gt; person.Name) V! ^$ i( s8 U/ N8 @1 ~" H
'Hans'' ]  {8 Z2 n2 S& y
&gt; person["Name"]
8 O$ c! Y" ]6 H9 L: l'Hans': ]9 Z6 m2 @' o. X5 W. Q8 F9 e
! D# a$ j2 x9 B0 c5 u% r
// 也可以使用new Object创建
2 J, [% Q9 E( d. Y' ?&gt; var person2 = new Object()
! F+ }8 g1 l% g( ?&gt; person2.name = "Hello"( p; {# Q0 t% j9 P
'Hello'8 l3 S, J/ T$ N% w
&gt; person2.age = 20' j+ j' [" a! n8 o6 p3 w) Z
20& y% x/ e3 A& E" U/ \' ^7 E
</code></pre>
  V; W. W5 e4 p5 A( k" K<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
' b. d3 ?9 L- f+ i! I( O! E<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>* E6 l; x* ?( F, V( M  H/ |
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>) G; @6 P0 @6 }& l- [" p0 X( Q4 I
<h3 id="31-window-对象">3.1 window 对象</h3>
+ l6 G6 d8 l4 D- F. H3 C5 a<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
; \! S& {1 r+ [: q6 ~0 k- a5 k<pre><code class="language-python">//览器窗口的内部高度" y3 d$ D: c; z
window.innerHeight ' ], }+ v; W) M% X
7066 F$ ]( ?0 d- W
//浏览器窗口的内部宽度1 E+ c: n$ X9 f  d5 Y) a% u
window.innerWidth
" S$ `9 }" D: A. o, K' C1522
1 h3 ~4 D4 z$ Z// 打开新窗口- h4 e/ L7 V! w7 w# I7 M+ u0 @
window.open('https://www.baidu.com')
. V" z8 ]7 s, q- b3 z% b, f8 C+ cWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}; _4 i0 q9 P: F7 P7 U
// 关闭当前窗口
1 \  v/ \0 y* e# b7 x! Twindow.close() 0 N5 G$ N, X- h4 r# ]- K2 E% Y
//  后退一页% U" ^  g4 m/ Z/ V
window.history.back()
8 }2 W) @3 Z0 U// 前进一页
% k) j8 f* ~6 V9 O: P$ N2 F3 xwindow.history.forward()
9 _2 e7 T( \" z$ a/ W& i//Web浏览器全称- l$ K) B7 |: w- [) c7 s+ \6 Z
window.navigator.appName2 F6 ?4 ]4 b3 J
'Netscape'' w2 Y- ^) {; i$ |; `, G  v
// Web浏览器厂商和版本的详细字符串
  V* w. q* t( w+ F6 swindow.navigator.appVersion* \2 `$ ^! ~5 v- Q
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- d6 N% ^1 ?4 b$ E. A; L
// 客户端绝大部分信息3 `3 ~4 A' M# q  [
window.navigator.userAgent
' o- i# W, \# ]- m* Y/ E; i'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
  {& Z, n. u) U3 u1 ?// 浏览器运行所在的操作系统
6 p' \% w! W/ Q; ^window.navigator.platform3 H8 o2 V6 t6 L
'Win32'
% I" N9 u0 v( c/ n* G/ z& i3 N" J& ^, b% ]( p$ ?+ y
//  获取URL9 @  J4 @7 ^- K
window.location.href8 ~' P* e) c  X; R: e
// 跳转到指定页面; c' a* N+ ^. v
window.location.href='https://www.baidu.com'
3 W: ~5 d. _7 v4 {3 x. W$ |3 ^// 重新加载页面6 d* @! y4 d, u' F; r( ?
window.location.reload() , y) p( C7 o5 p2 O& z0 |
</code></pre>& c; F. e! U6 E
<h3 id="32-弹出框">3.2 弹出框</h3>+ T# D0 h# l% m* Y# b$ ?
<p>三种消息框:警告框、确认框、提示框。</p>
! f) z8 q, [- M, R: K<h4 id="321-警告框">3.2.1 警告框</h4>
# s# E5 c/ U$ a9 i: U0 \' E) F<pre><code class="language-javascript">alert("Hello")- H0 i% H: H8 G: R6 _
</code></pre>
) @" x; n+ G( q/ z' X: `5 x<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p># M' j& T6 p) [" G& o% F* V+ V" J
<h4 id="322-确认框">3.2.2 确认框</h4>
$ ?* Q: ?- V. t- _8 G<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>, L. {0 {" e/ T' p/ E8 a
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
; Z/ O0 A6 `- S% ttrue5 _' J3 a& I. _* F
&gt; confirm("你确定吗?")  // 点取消返回false* H4 s; Q  ?% B' S  I, z# q- Y  B
false% a7 f" N0 z# f0 M$ f
</code></pre>" v4 M7 C- t6 q
<h4 id="323-提示框">3.2.3 提示框</h4>9 a, g0 i5 s  k1 E6 e3 U2 E
<p><code>prompt("请输入","提示")</code></p>
, {/ s% C! C- E<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
7 P' B8 b: ]) y3 e; o! G6 Z! f<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>9 _0 S, w7 a3 S
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>4 J( c& ^! O9 g' V. m+ c/ l) M
<h3 id="33-计时相关">3.3 计时相关</h3>
6 [" g* _; e0 h2 ]* r<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
4 B2 \( t7 Q9 g+ j& H4 P<pre><code class="language-javascript">// 等于3秒钟弹窗
; c# H; A1 b1 BsetTimeout(function(){alert("Hello")}, 3000)
+ u0 N% Q, H8 F% {" G" `
7 f* D9 l9 V9 o) x. j9 jvar t = setTimeout(function(){alert("Hello")}, 3000)) [) x2 |5 c! B+ W; a

- Q% k2 i9 }4 h- v7 ^- V// 取消setTimeout设置  H3 D' }: h  p: a1 k0 |# I
clearTimeout(t)' s0 \8 \2 u* K3 H1 Q
</code></pre>
9 Y7 T# \# M0 C4 d' v* \<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
) r/ J0 W/ s! }2 w' D<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
7 y) E1 j' Y+ C) ]( q4 ]<pre><code class="language-javascript">每三秒弹出 "hello" :# {- W6 J; @/ C3 N1 J  x( v
setInterval(function(){alert("Hello")},3000);8 I$ x2 K9 F( o
</code></pre>2 p6 r$ e% b1 ?5 m$ z% N6 M
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>0 ~, o! H* h$ E3 N
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
$ g$ \3 `) J2 _# G: {//取消:
! g9 B# }. @% E' B* B; B4 \clearInterval(t)+ P+ B& E, t5 g, i: i
</code></pre>
2 I9 Z' J- M1 j- c" \4 B' i* e+ V" W+ w. s$ \8 F- C8 p( Y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-14 13:45 , Processed in 0.084254 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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