飞雪团队

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

前端之JavaScript

[复制链接]

8038

主题

8126

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

' d$ {' t8 U8 S9 T# q* j. r<h1 id="前端之javascript">前端之JavaScript</h1>
2 Y; p" x6 {" \$ Y<p></p><p></p>7 ]# x+ O8 x3 g" E- W
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 r+ O8 d0 E$ Z& q6 Y<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
# k5 s+ |% ~  F& B它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
' ?4 G- \) h7 q( h, I7 P) n. ^它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>$ h* r6 n6 Y4 l: e1 `. @% \
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>- W5 {* T& K/ ~: S  S9 S$ `
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>" E) ]& F) }# T3 _, _6 E
<h3 id="21-注释">2.1 注释</h3>  L5 o5 s! ]7 W9 f
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>* q: s8 r3 Y+ @3 |  t$ s
<pre><code class="language-javascript">// 这是单行注释
% O0 e7 ?, ~$ A3 Y3 w5 _* Z. o% i9 o: j
2 u; o6 W, Y0 g( @/ E) ?' t/*% {% J0 f! ^0 ~! j7 x2 ]! N
这是多行注释的第一行,
& k: F( h# Q5 l4 t这是第二行。$ J2 P1 \6 M+ C
*/# z1 R' S: B$ f' d- @, \
</code></pre>
) Y6 y4 u$ o- J3 {5 ~  t- A% d* t<h3 id="22-变量和常量">2.2 变量和常量</h3>( ~! @4 M; _9 D3 T6 H6 t7 M8 T
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>+ d( `$ e0 d! j' q+ u
<ul>( u2 h8 l( |$ \8 h; ?. l
<li>变量必须以字母开头</li>
$ n  H6 G! e0 i<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>3 @( _9 ?3 t& \& q. u$ o0 v! a0 a! [6 `2 S
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
3 l: Z. H* m" V+ R9 o9 _; b</ul>, _5 O" k  D" w# t
<p><code>var</code>定义的都为全局变量</p>9 U! |# J) I! o2 I
<p><code>let</code>可以声明局部变量</p>
! o, ?9 \8 l2 g+ g% S<p><strong>声明变量:</strong></p>
8 J9 H% p7 @+ j- G: j/ K  t# _<pre><code class="language-javascript">// 定义单个变量2 K3 Z* N$ w" `/ h5 A
&gt; var name
! `9 p% S$ h2 }" {3 K5 f&gt; name = 'Hans'7 B8 l0 p7 [* W6 ^
//定义并赋值) p: K7 z* f+ V3 f8 Z9 F0 O5 r
&gt; var name = 'Hans'+ C4 W' p+ n0 g
&gt; name
4 }4 t! t9 o0 s9 }8 A'Hans'
0 b9 D- u0 E  R- V0 a7 `" d
5 j' Q0 i/ ^: G& P// 定义多个变量
/ E! y8 Q1 r$ d&gt; var name = "Hans", age = 18+ m. j; k9 B. G
&gt; name/ k6 ~" v# ~& u- Q0 \* ^5 e
'Hans'
3 D5 a; i% w2 e* \: ~8 U! b0 X&gt; age. l/ r2 ^2 ?4 _6 G" @
18
8 U! u4 w4 n- o/ r! @/ y% _1 d  x+ d$ n0 E
//多行使用反引号`` 类型python中的三引号
0 I/ a, R( X! u8 F$ Z* @&gt; var text = `A young idler,
+ l' l6 a5 I7 I: y/ L/ g4 nan old beggar`+ n2 k6 _, m* ^% a$ u9 i' c5 g
&gt; text5 ~& e( p) o1 n, G2 w
'A young idler,\nan old beggar'+ w8 Y% P' P0 Y: b" v/ [
</code></pre>
; n, M& r# Y! p7 ^0 A. c, ~<p><strong>声明常量:</strong></p>
! n0 s: W2 o; {<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
7 l/ J% I  m: O0 f* `  \1 D2 p<pre><code class="language-javascript">&gt; const pi = 3.14) F3 j2 N3 i1 D1 R6 {
&gt; pi
+ O/ V: B+ q8 L( \3.14! R$ N2 U' J+ {, n  n! z
&gt;  pi = 3.01
  u2 S2 b2 d8 _; A$ m" nUncaught TypeError: Assignment to constant variable.( `3 f8 q) x) |1 b* v! j
    at &lt;anonymous&gt;:1:4
' ^" y' w" p3 [  w, e! y
& [8 [: C+ v% t, y</code></pre>( S; x4 J, R6 \  J' L8 R
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
  _/ t7 ^+ Q* p$ x8 n/ o<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
2 g- b- D) m3 ?; S: c3 Q0 V3 U' B<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
, d! y# ^4 A+ b* A$ e* v" N<h4 id="231-number类型">2.3.1 Number类型</h4>+ w. e  p; e9 J- W7 j
<pre><code class="language-javascript">&gt; var a = 5
' h( `6 T. q7 u+ H7 q&gt; typeof a   //查看变量的类型  
7 y' c% b4 B' D. inumber
4 T( l( k2 [! j( h# k: q. E
' f; b3 c6 w9 o&gt; var b = 1.3
% |/ }9 |2 f% R$ P&gt; typeof b
0 I4 d1 v+ e5 z5 unumber" A$ h% g8 Q+ i/ ]
% n5 n! E& M2 T
// 不管整型还是浮点型打开出来的结果都是number类型, O* p+ r; ?) H( O9 P9 {) U- U

% A7 i. x/ o( w# p. q, X/*
& D8 O& g; ?$ w3 W" D; Q- U# N# INaN:Not A Number1 Z' D2 c$ M" j; {5 H- {$ F
NaN属于数值类型 表示的意思是 不是一个数字
* H: _4 ~# F; U  ?- E" g( m0 B8 K*/" Z$ m# Y- o4 L( A6 P1 o  H

0 U* U. a7 U& W$ J3 l( m7 C- QparseInt('2345')  // 转整型, v; S* V9 R+ r+ }
2345
4 a4 T( Y0 r. J1 j) VparseInt('2345.5')
, B, W% F8 V4 f) k" m2345
5 _. i. n/ H4 k6 t' N" a7 v+ yparseFloat('2345.5') // 转浮点型
" ^( b* I4 h0 [7 ]  z* x: m# Z2345.5
/ u3 }8 {. W) jparseFloat('ABC')
" E* D3 w2 I* x* bNaN
* \3 c2 ?* h# a9 N  r- X- Z5 Y4 sparseInt('abc')/ x2 X& U" N6 o. \* |7 T+ s
NaN$ P! R  E: x: x7 s' R
</code></pre>2 H% {' r4 B& A' V" F# s+ I
<h4 id="232-string类型">2.3.2 String类型</h4>
2 \9 I7 W4 J  c! W<pre><code class="language-javascript">&gt; var name = 'Hans'
; {8 {# Q" ?" k&gt; typeof name
) D2 L5 i! C5 T1 X# z& |0 F5 I'string', R. F. d, @& [7 l( b4 }4 D
" ]2 B6 N; r% S- X# P0 n
//常用方法
% a! g0 g5 u) ^// 变量值长度. m7 u9 O8 G! L( H3 ]" k: @
&gt; name.length
3 ]+ }# Z* O9 z+ R. ~45 [5 n# C! f% E; k0 o
// trim() 移除空白
2 I4 k" u! D8 ?% _6 s0 M&gt; var a = '    ABC    '1 d$ Q2 j" X5 D  u
&gt; a- N0 ~( t, S* h5 j5 ]: I
'    ABC    '
" W( R2 r6 Y: P( y/ z" ^  V0 g&gt; a.trim()) Z- o7 R- O  D9 p
'ABC'& s; t! }3 {' t! m- w
//移除左边的空白
& I; s+ b/ o% n! |( P; c&gt; a.trimLeft()
0 u6 i/ k. n( |# L/ i/ g: ~- J/ F6 E% d'ABC    '4 i2 M1 e* A+ d
//移除右边的空白3 u/ v8 W  ~* J4 e2 g+ Q5 V# f
&gt; a.trimRight()
7 e6 |4 M& e( |'    ABC'! I, h. `7 k- |% a. i9 |
2 {9 H# R( l0 E
//返回第n个字符,从0开始" Y- Z7 S7 R8 ]) a8 C
&gt; name
/ }; I$ O  J0 V1 f/ p# a'Hans'9 x* j: a3 ^: m
&gt; name.charAt(3)1 ~  {2 z, l- j, f+ j7 |$ W
's'" N- b/ v2 F3 |5 ~! b! j7 T9 i6 x" E
&gt; name.charAt()
- ]5 k+ o4 ?2 i7 Q: S; Y; A6 ?  P'H'
+ p: @! x! x" L' m2 y+ R  |1 ]&gt; name.charAt(1)7 ]7 A% F) O) F* q" _6 V
'a'
/ l  ~! m7 C1 L. B
+ Y# Z6 t  f  C// 在javascript中推荐使用加号(+)拼接
0 @! m9 d# x1 e! ?, y( }  Z- {&gt; name
" O: A, K1 I( s, j  A" O'Hans'5 Z9 A8 t, r- B# b- O3 K& M
&gt; a2 v" w' _2 J" s& ?
'    ABC    '
1 k' `: I6 @$ U) b6 `! y- M2 K2 d6 U&gt; name + a
& b7 i6 J$ _% I'Hans    ABC    ', P2 x, G! m5 Q  [# P+ t
// 使用concat拼接: s9 Q% s% H: `+ I$ f
&gt; name.concat(a)
$ A4 g6 Q% Q, w& [+ J) `'Hans    ABC    '
4 x8 n4 _0 x% P3 L9 W: b& C
0 b3 ^# A, e. X1 w" W& _+ `% Z//indexOf(substring, start)子序列位置
0 T2 A7 j; |7 M+ \8 x
/ W' f! K$ o  `: q: l6 B0 v  F+ I&gt; text
& U0 P. q8 x8 v7 q5 |3 U'A young idler,\nan old beggar'
- n" p8 t! p7 S' m&gt; text.indexOf('young',0)* x+ {: [8 Z8 P- @: H% E
22 H1 d9 S3 @8 j6 p
  `$ R, h; |  P8 }9 u, {( G! q
//.substring(from, to)        根据索引获取子序列
  [* P8 ]0 u& J9 |! `& x; g&gt; text.substring(0,)
2 |9 n# ]- x7 l" h1 z, E'A young idler,\nan old beggar'
5 R8 n$ r6 n% I; T6 G; S: M4 \&gt; text.substring(0,10)
: x$ k3 W: T, m; g'A young id'8 p+ {/ L/ |% w5 y+ @/ f
) ~+ B- r; E8 M6 V" s
// .slice(start, end)        切片, 从0开始顾头不顾尾
2 M! x5 W' A$ s2 U( s4 _, G&gt; name.slice(0,3)4 p( G5 }: @, S6 m, N" K& C; x
'Han'& ~) {' a& X) q. [5 r+ t

" I8 Q" N! }# A( L// 转小写8 p+ V* c( x- y- T. s4 Q
&gt; name7 w; L& N8 F" A, y- \
'Hans'+ m/ j" I: K7 Q. k2 ^* s2 Z$ h5 W
&gt; name.toLowerCase()- c" g+ W/ i& E( ?' _4 Y
'hans'1 Z# ~* a. K; W) j: o7 B" G, r
// 转大写# g" Z; @6 P1 B2 u8 E
&gt; name.toUpperCase()" K$ N' t" P* c8 H4 R- w1 ]
'HANS'
! C' Q6 k4 l4 y4 j% n' o5 g2 k  D
2 W) o% v& Q2 k6 A9 d2 q: i// 分隔2 g. X3 L. Z7 D- b/ j7 o
&gt; name
( H2 c6 A4 u( B! p: M# Q'Hans'
7 n  E4 M$ e. F&gt; name.split('a')
6 [3 A( J5 I- o9 r(2)&nbsp;['H', 'ns']
- W$ P6 W# z1 G# ^. C</code></pre>
6 T/ ^* [, u$ A  E, R<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
/ Y8 Y2 H" g) n# V8 h<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>  b% j3 [; [# [& j( `) t
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
: p/ n3 [/ O; L3 E5 ]5 I<p><strong>null和undefined</strong></p>
: ]+ o9 P; z. X% N) l<ul>
1 v" e( o" T5 @$ O<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
1 ]* C8 _* z. r; G6 O8 i( X<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
& G) o( p6 Y$ G8 ~- k8 _</ul>
: y5 D) D6 W( G- B- B* M% h<h4 id="234-array数组">2.3.4 Array数组</h4>9 u. G" z0 _' r4 l1 @7 h
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
0 D: w  t3 x2 u0 T8 \<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
: D0 N2 w, F- I% J) l8 w4 }&gt; array1
0 C; m6 x7 a  O$ Y' p(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 W2 W: G, k- |3 Y* U) R2 G9 W&gt; console.log(array1[2])  //console.log打印类似python中的print
. K8 S* z% S+ R7 K% P0 L3
. }8 W7 n( z; Z$ _# B// length元素个数' ?7 x  Y; |) V) A" S7 E
&gt; array1.length
( ^5 F7 g8 M) Z+ R62 k4 ^0 y  V0 j& u; u- x
// 在尾部增加元素,类型append
- [' T: K  y! ?# x+ s&gt; array1.push('D')
: ^: ~( C9 P6 H! R7) Z- M8 B0 O* j, C2 E& R& h- l, x
&gt; array1
9 a5 B  g% ~2 X% m9 E- E- y3 x(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
0 Z# E1 k0 z' f" w: y// 在头部增加元素% Z, F1 i( v0 e" f# y
&gt; array1.unshift(0)
; w9 V9 H" s+ X7 o' I9 @( N8
2 Z2 o& O& l. m! a" M: `0 n/ E&gt; array1
1 X; p3 q6 e& O/ v  M, l  K( _; h(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']1 r! v4 J6 T$ ]  D

- P: n& C& E! |# \//取最后一个元素
4 g, Y- L: |3 F$ e, Z4 x# Q  ?&gt; array1.pop()7 f5 w! s: t% m; w
'D'
+ R1 S' K7 ^0 \5 e% u/ b$ o9 h6 T&gt; array1
5 g6 S; v) r7 b  h1 K- u; j(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']& R' n3 W2 ~  \9 a% {7 ^* |
//取头部元素. i0 R* W1 I; u/ f. h7 N3 X; I1 j
&gt; array1.shift()0 k6 H# r$ z/ ?0 O
0( H0 ]* F* e* v  L& p
&gt; array1
5 d8 m% L1 o; V. A1 d9 Y; I(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; ]% I" P8 T3 y+ J3 K

3 M" Z% u% d+ h8 N! P//切片, 从0开始顾头不顾尾- a; S8 r* }+ S  H8 s6 k
&gt; array1.slice(3,6)  [' E0 a! u0 Y5 Z6 k, Z% P: ~1 C# d7 C5 m
(3)&nbsp;['a', 'b', 'c']2 g& e' U% B5 m( S2 B, v
// 反转+ s8 v4 K* P# ]
&gt; array1.reverse()8 P' g/ k/ `" ?5 O: H7 X3 V0 T
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
# V/ y* ^' Q* I# J// 将数组元素连接成字符串1 A1 u$ _) r! k' j5 _, }* k
&gt; array1.join() // 什么不都写默认使用逗号分隔+ ~0 ^5 [2 M" U; X: v2 l( U; _0 b0 t
'c,b,a,3,2,1'+ p% y* d$ I8 c: m: u  b
&gt; array1.join('')* H* G4 C6 K8 Y2 H
'cba321'
0 R6 I& t+ {; H&gt; array1.join('|')
5 w5 J* y: d/ ~* @9 P'c|b|a|3|2|1'" M& z" ?; c- N" @
* Y1 Z" n6 [3 Z3 H$ n
// 连接数组
6 m2 N1 ~) F+ k: x9 ?* c! K&gt; var array2 = ['A','B','C']. s9 X# t* H$ m$ B# m
&gt; array1.concat(array2)3 @' d; C! E; n. ]8 ^' s) n
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']8 K; j% \7 }0 d. ~3 \  B

3 c* I( l% w) F& q9 i5 ~- d// 排序
- @' K5 b" X8 ~8 H: l% ?4 `&gt; array1.sort()
2 Q( G# n4 x& p0 f+ m- t3 U(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
1 d& u$ `0 ]' \; \2 `4 W) Z+ z4 H, q, r1 R/ [( @# Q
// 删除元素,并可以向数据组中添加新元素(可选)
7 s* X2 q1 B8 A4 i1 O&gt; array1.splice(3,3)  // 删除元素# J- t6 z7 K6 H0 |
(3)&nbsp;['a', 'b', 'c']' H$ g# h; ]$ S) q! d' r
&gt; array1
% Z/ V! H1 z2 B' r(3)&nbsp;[1, 2, 3]
" p# x/ ^% d! |! M% g( N. t. d5 B4 W&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
" m6 S1 D# n: A4 x[]1 @8 C1 j' J2 h7 |  ^! ?1 u
&gt; array1
) `7 M5 [9 e1 e5 C4 F: g(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']0 [' A. a! s- b
1 ^5 p7 u- ^9 c! c( [
/*) `' b: B3 Z# g2 Z. k9 t3 |
splice(index,howmany,item1,.....,itemX)
8 r, _; A2 x3 b$ uindex:必需,必须是数字。规定从何处添加/删除元素。/ y/ O' [9 f' r$ X6 @! D
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
& I! j- g$ t9 {, [6 }, gitem1, ..., itemX        可选。要添加到数组的新元素
! }4 ^0 Y8 G$ {3 X2 U9 E*/4 ~+ a& R3 [1 g9 \* `

) V8 Z% K* a' n. `$ q// forEach()        将数组的每个元素传递给回调函数
6 A& R! J' u) p  o&gt; array1.forEach(function test(n){console.log(n)})
3 K6 B& p5 q# c7 S6 ?* N* b- l 1; w1 Z: ?: j) [' f
27 Q- \( j) M" H7 m) G. z1 `' ?; }
3! p6 p* \. o- \. n
A, {! D0 {' |! v: w9 y6 Z
B9 N/ h7 c& C7 u( J. l; I
C8 \; k1 c9 F0 C$ k0 h: U! T
// 返回一个数组元素调用函数处理后的值的新数组, l1 ^$ O; n4 D
&gt; array1.map(function(value){return value +1})
% h7 A; d9 Y9 I% @+ ~# C1 x(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
% t! s+ a" T8 ]% G# K</code></pre>& H4 H9 l  H  [  ^7 B; b; @' }
<h3 id="24-运算符">2.4 运算符</h3>
8 ?6 u& S8 C6 H8 }, ?: C! a8 R, ^<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
/ \( {" f  U7 Y9 j& p<p><code>+ - * / % ++ --</code></p>/ T9 `6 S, _5 e5 Q3 p
<pre><code class="language-javascript">&gt; var a = 6
7 d  p( z1 y: f2 P; h&gt; var b = 30 h- H9 i+ ~0 [3 n) f! [
// 加( r9 u1 |* H. h4 {* T) \
&gt; a + b
; r8 ~( G6 T/ \9
4 k! ~. x# L* @) u7 p: }// 减
: x& |0 y+ m! [5 R3 e) _&gt; a - b
9 i0 U( h, N1 I4 {3
' y& f0 r' w  l: Q9 d$ l! ^/ Y// 乘2 ~, |7 w6 t" d7 f: ]+ F
&gt; a * b
9 f. U$ I7 Y5 L) x189 ]8 f9 t5 W" ^& U. o: i- `
// 除
! }0 l  a5 P6 O7 P$ n# |2 |&gt; a / b% j3 C; y7 K# v; P. w$ R# l  E
2
# c$ p# S; t& _( P// 取模(取余)
9 F4 j- g' r1 {# S2 J) O&gt; a % b) ~6 F# S; b* |1 e0 e2 j
0
! [7 u8 n( j5 ?: |3 C7 z// 自增1(先赋值再增1)5 A9 f2 ~6 e2 r0 D1 V' h, E
&gt; a++, I; x; x6 b: n- a# V6 L% X, F
63 ~. e- s9 y% B/ ^
&gt; a$ E9 T- }( E( f$ n! T% I1 D
7  {/ J0 w' p+ |; ~
// 自减1(先赋值再减1)7 a& {+ W3 B5 E  b6 g. _) J
&gt; a--4 w; C5 _# \7 U# R% Z
7
) K8 Y4 O3 a7 K; K6 p&gt; a, M$ U# S- p" e2 J$ L7 l
6. Z' t9 C% _! a2 F$ B8 t$ y# t
// 自增1(先增1再赋值)
1 _' |& |3 c8 y+ B$ N&gt; ++a
+ x& E! y* f+ s7 f) p* \, f# ~. d) P7
- }. x. N8 K4 V( f) _1 y" O// 自减1(先减1再赋值)% C$ E* D! s9 A) I; s
&gt; --a% L, s$ z  D1 V) o. ?- `/ L, k/ |- l
6
2 t6 C( g2 T2 \2 V( k&gt; a8 V, C8 M$ p% W
6
; u+ x3 x) N4 v: M  {. m# k) Z8 \/ D0 V/ x' H4 F
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理! s3 |+ Q0 E2 K4 R0 R$ P
</code></pre>4 A$ W; Q0 k3 s* u$ Z' `+ S' D
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>9 b6 v! B" f( }2 r' A
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
) ?/ b7 N! H7 m; X<pre><code class="language-javascript">// 大于
- R' s: K  j: W; [/ x&gt; a &gt; b% R3 U& }9 h; t( E0 d1 f, K1 x2 |
true
9 ~. k, d) _; Y) x. l3 Q. Q// 大于等于
: E, v, [" v: ^&gt; a &gt;= b
( N, ~# \7 o2 z6 Y7 }6 Ktrue
" a6 V5 \' X5 T+ k// 小于( ]- L% x5 v3 u6 S9 b- t( b, Y
&gt; a &lt; b1 z* D0 h5 j9 a" H  _
false9 v4 B1 Z/ P8 e* q- h9 J$ X" c
// 小于等于3 o) G, D3 ]" L* ~# ?
&gt; a &lt;= b, L/ B( Y3 |% F
false
6 p3 _, I! h% b+ k4 O# ]% r/ }# P// 弱不等于
( s4 z/ q* F& b9 d% ]7 D* ^  N&gt; a != b3 E+ i! N" e+ J* O  V
true
/ B6 U( K7 ^" l/ `- O. d) R// 弱等于$ N: d6 p' R. M& f4 E" R; e
&gt; 1 == '1'
- P0 U' _) k0 r. Atrue9 {8 Z& t- k  ?! ~/ D1 ]
// 强等于9 D4 X8 t3 h2 i2 T4 y$ x/ U* l- P6 \
&gt; 1 === '1'  g) A- n1 J) J& P$ j4 }
false) |& O, Q0 ]; j) q/ @" ?% a0 f( \
// 强不等于+ C6 c- O% q- K" V8 n
&gt; 1 !== '1'- G/ F  U7 w5 L1 Y
true
( ^! y6 x+ w' c- x4 P, j  A: v
0 T* c9 f5 E7 D3 a3 @/ |3 O5 L3 R/*
1 V) V' f0 r( e" q" l% Q/ P9 U# VJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误- _9 s( G; N; m: v5 r5 e
*/
& B* z# x7 q' L# _; s# C6 C1 d</code></pre>3 i, ~% y, Z4 V+ M, |# E
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
! d+ |- S7 W: x, r3 ]' I% }<p><code>&amp;&amp; || !</code></p>
! b! P+ A) N* N+ Y# B<pre><code class="language-javascript">&amp;&amp; 与
# V( Q5 D0 {7 t2 G|| or
; _5 u  T3 |8 `' f3 S2 o, q: y6 M1 G! 非5 Q9 A8 l# ?& x7 c
</code></pre>
/ O- X* u# k' q4 |3 [0 W9 x3 B<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>% z' L9 p3 X6 \4 F* \( g# C
<p><code>= += -= *= /=</code></p>
; u# l& J9 Q* m( C# R& x) c<pre><code class="language-javascript">// 赋值' U+ ~3 `6 T8 _- E
&gt; var x = 38 ~4 V4 U& P4 W
// 加等于' f) \1 E) I2 i) ]
&gt; x += 2
- }1 s. q2 I( f; L- S5
. @7 H% [- \: P3 U& L: b+ z// 减等于
% p) ~, u- N" Q  U  g$ s&gt; x -= 1. G  Y* x% e; h2 s! C2 e" I
4# ^& h4 G5 }1 ~* d
// 乘等于
6 Y) H' `. E3 \: i3 o. C  K&gt; x *= 2! O& D* `$ S& P1 x7 Q+ A$ c7 ~" e
84 Y+ H) u6 j( k+ \1 I6 D8 W
// 除等于. f( I! s! C$ S7 m' D: R
&gt; x /= 2$ K' u' Q+ D! G
4" U! n8 i6 U/ H: q0 f3 {
</code></pre>7 Y$ C* K) i  Q. p0 B" c( O+ d
<h3 id="25-流程控制">2.5 流程控制</h3>
3 z9 K) f$ X( g. [4 O+ |<h4 id="251-if">2.5.1 if</h4>/ ]  M8 k! ]3 p; `
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}2 m6 m$ W% O& K$ C: f8 F: [8 A

# ~/ x; L) Y' i8 @&gt; var x = 39 g3 ^/ W, Z' J4 k- M9 D
&gt; if (x &gt; 2){console.log("OK")}8 f; j& h- t" o
OK
. A- Z, ~- X- T
. |4 t; }' V- X5 i; s/ T2, if(条件){条件成立执行代码}
+ A1 h" i0 p4 h1 k; y! E' y        else{条件不成立执行代码}  Y4 [  \; i8 h' w: ~6 G# z
! T. A' `' w% M; L  u
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}4 A# S9 z6 h% b# M2 e7 Y+ B& D9 O$ y
'NO'( J9 k9 K6 Z1 f: A
' `2 C( W, y7 t0 Z( Y
3, if(条件1){条件1成立执行代码}
* c7 q- K* m5 l% C        else if(条件2){条件2成立执行代码}
( H$ h# ~: s3 l, h# u    else{上面条件都不成立执行代码}: O7 z+ r" Z" c; o4 o' U( M

  V" Z8 C' p1 H# Z# v* q1 U&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- z2 r! X) \, E1 r- H, _2 D Ha- ^# t% r7 W# Z% v4 i3 u& e2 B/ A
</code></pre>
: f- W1 q$ s% [# y0 }) y4 J<h4 id="252-switch">2.5.2 switch</h4>
+ x, r6 c/ K2 I7 R8 X% F<pre><code class="language-javascript">var day = new Date().getDay();
6 g8 S' k! Z/ o2 s4 E& oswitch (day) {
- T' j/ O$ v  d( `  case 0:/ \: ?+ q2 ~! B5 b
  console.log("Sunday");
& K* k6 f, U8 ^; H6 T  break;8 j& {, d. x- Y& ~7 e( W8 _4 `
  case 1:  x# ]6 t5 [, Q$ l  ]5 s* W  A. D
  console.log("Monday");
0 v. E9 ?/ H% U+ e- y  break;
8 Z3 p* r4 ?7 e9 |default:" {2 _  F$ ^1 s8 |( V* [
  console.log("不在范围")
, A( e7 `. H( f5 r' x}$ d* y& b* y1 x. s# \% @
不在范围
& Y# x. i. P: A+ V</code></pre>$ B/ R# [& e. c
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
  F( E- m& t' H$ b& l<h4 id="253-for">2.5.3 for</h4>
2 c, n( m- T! J<pre><code class="language-python">// for 循环: Z2 l2 ~4 _& l# w1 _
        for(起始值;循环条件;每次循环后执行的操作){4 b3 X8 M' v4 v0 O  W
        for循环体代码& t: k6 k& y2 z9 g0 x) [
    }
' q. p/ ]- b* \2 F" r* L' b( `$ R( _! G$ P4 j% Z
for (var i = 0; i&lt;10; i++){
5 C( U* ?. k% W) m% \" k0 }    console.log(i): _  s0 N* K6 \1 ~- M2 W
}% H6 Y1 f( C9 m
        0
' _1 W+ z: R8 g% E! h( i- @7 K        1( c* O4 C/ v1 d) m
        2; x9 }5 r; T1 d0 b, K$ T" u
        3
5 M! M9 X, Z# a8 N        4. L6 H4 P- P, g) {
        5
; a7 `3 v% O; E: [        6
* [8 l$ y9 _6 W        7
7 Q; e' u3 f( F6 B+ g' C+ v" n$ ~        8
5 }; r, k: w+ {, \5 V7 W        9
# |: O+ t& R+ N4 ]6 d& E</code></pre>
5 g! d' V( W% K0 D9 f  `7 E<h4 id="254-while">2.5.4 while</h4>  ~0 f5 |" k' c$ m; E
<pre><code class="language-javascript">// while 循环
6 u) v  |8 l. e! n9 B- t) g        while(循环条件){
6 M3 [5 {; |) ?( U        循环体代码6 Y$ l8 `5 w& B4 r5 ]( \! _
    }
1 T5 i. g* C+ a3 F* x: U0 @6 i
; V- W, j- S: e% f, e$ [% U&gt; var i = 0
' U6 z1 O7 h( ]5 h: \/ G+ M; t&gt; while(i&lt;10){7 o8 U7 c2 ?4 N
    console.log(i)
( A7 N3 {# v6 ^/ i  x    i++3 _4 R' n- s. q6 a( g+ |, ~" t
}% p' q7 O9 ]  z5 K" a) t
0, b2 _/ t& c, j6 w. [
1
5 K  }$ @( W0 S+ {. O1 D: b' F 2
. j3 d5 \- A& x8 K7 k! ~ 3! y: r/ C* s! l7 l
4. G7 y8 i7 ^+ M7 q. e! G) l
5
! v2 e, R  O4 I( ^( k& {  j2 c 6  k4 d4 Y9 f) b# B
7, ]* V8 ?: b9 t( H
8
. o0 C3 V* }5 M# V" o 9
4 j8 l1 p  J7 K</code></pre>
& t; E3 P% N- U( v" s<h4 id="255-break和continue">2.5.5 break和continue</h4>
% b# x+ X3 S2 g* V% `, _<pre><code class="language-javascript">// break
2 {! y" V& L3 d# s- F: Dfor (var i = 0; i&lt;10; i++){
9 m" j: P" S. W9 Y0 z* O    if (i == 5){break}, n) O$ Z; K* k/ ?; _$ F( w
    console.log(i)
" M. l* [' A$ d1 N7 Z4 W0 x}3 Z9 O/ A( h$ {" L" j# X
0
; H3 W1 r/ z/ }3 f: t 1
! z# C, \$ M) ~, Z* Y. w3 B# u) ] 2' H& q9 O7 ]7 z4 C- z  c6 L& }$ U
37 S( a& r, \4 ?* [3 {% b
4/ `6 E8 L6 f* n+ }# x
// continue: A7 I$ g3 P( r2 i
for (var i = 0; i&lt;10; i++){
9 p4 ?+ [7 J3 w' q! c    if (i == 5){continue}# ~2 P8 w6 h' ^
    console.log(i)
3 W6 k' t- L8 O& u% t, P9 C' C}
, M0 e7 g1 j; F 0
7 G( |/ @! G( Q. m1 Z3 I 19 Z, i' S  [, w3 v  `  H  b
2
# j' _, Y1 ^# X 3
: {, G1 M. I, j. r( G" e; `8 s$ H 46 H- W5 b: y7 ]& H- v* {
6
* `2 F5 @; V! k1 I& I: r 71 N  {* Z* E  M7 d! {9 [
8/ ?! p# d4 A" {2 y% X
9
. B# U5 }% p' \' G0 X: {* G3 s( \& |6 F3 o1 D; D! ]
</code></pre>& t: d8 G* V) [; d5 B
<h3 id="26-三元运算">2.6 三元运算</h3>
# X1 s- W' z: J4 X+ D6 n6 Z  N<pre><code class="language-javascript">&gt; a+ N9 r8 j, f$ z5 x4 p9 ^3 J1 K0 b5 O
6
" ^2 k7 i7 W/ f' f% f&gt; b
9 C# O0 z4 j. A* Z3
$ u5 J& x! A6 ?3 u! c; v( h
" x, G7 Y6 y) o: X  {/ z//条件成立c为a的值,不成立c为b的值3 G8 P7 G7 g. S" H+ ?
&gt; var c = a &gt; b ? a : b
& a# Y: L3 E* G1 N# B2 O0 j  v, l&gt; c
( O; K6 M. [$ v1 z0 O6: j9 J& U0 G9 V0 C

/ K; i) _' _- d" ~* _3 [; M8 N& a// 三元运算可以嵌套
$ E  z2 M4 J' G4 J' n# C0 g& S</code></pre>5 w  y  b0 ]" V- ^" P3 c0 E7 j8 e
<h3 id="27-函数">2.7 函数</h3>
- {" K+ Q$ u, u0 w: |<pre><code class="language-javascript">1. 普通函数
1 n$ |; n* F3 V% x+ E3 D4 V1 E0 S&gt; function foo1(){
/ I) n! w- B8 @% _" G    console.log("Hi")
: v, I7 p' T  m4 o( ~}1 e1 t5 @8 N. ?' i) J$ k1 {1 v: _

6 I$ ~% _. J& d0 T- {&gt; foo1()
, M6 D" r  o, q  @        Hi
8 G/ U& w3 u9 c2 n. g( U9 Y2. 带参数函数7 \2 ~$ [6 T& m: T: U7 E
&gt; function foo1(name){
* J- W3 X- Z+ }' M& T* r8 Aconsole.log("Hi",name)# i9 ]# J2 a# F; i
}
) G$ {( R" s5 c: E' t9 [4 B
& r7 Q, y6 I7 `&gt; foo1("Hans")  m( _9 |; }! N& [: i
Hi Hans5 f* F9 b& G# ^+ _" w

8 {6 _1 m9 U1 z&gt; var name = "Hello"  {: \- e3 g# V5 e: [9 ^6 q' a& ~
&gt; foo1(name)
: b8 m- \8 W/ Z! [" rHi Hello
4 g" _8 F9 i1 P9 Q9 R2 h  @2 w# E3 `: e( Q  I8 n
3. 带返回值函数3 L) k2 x( a) L, J; }- d
&gt; function foo1(a,b){
$ [; T1 p  r/ e        return a + b   
1 ?6 p& i  ?1 F4 D  H. t}
, ?9 E# E. H( d: N8 h* Z( Y&gt; foo1(1,2)/ s7 D9 Q9 m& V; k, h( Z/ l3 b
3% e) ~4 r  ^& u3 T8 p
&gt; var a = foo1(10,20)  //接受函数返回值" D& S3 ]0 s' n* ^: x1 |
&gt; a
% q- C& w2 C0 S( T/ Y30
6 k5 j( X: B' V: `- B/ r  @" m( A
4. 匿名函数/ v  G. |; A5 R+ a& r) z
&gt; var sum = function(a, b){
2 G  v7 P  T1 P6 w( D; N: t2 ]: A& j  return a + b;
  X- i; d" v$ x) m% \}
- X+ V6 c: g/ x" h9 t  l&gt; sum(1,2)
- {- \6 ~& w5 n; Z" c3 s" N3
: C( X  O* U% O% c9 o/ P5 O8 G% H  h1 q, T+ R
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
0 X5 K) l, }1 N4 [7 r0 M&gt; (function(a, b){
) r- c9 f" I! \  return a + b! Q& \( O  Z$ u& Z: h# [7 X, `
})(10, 20)+ }: r' x" _- N' f* E" K9 k
30
3 x' _: E* [4 U
& H: X, r# O9 \; e5. 闭包函数2 o; R) L$ L6 ?, d6 b
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数4 l2 N+ J5 @0 b  K8 m7 w
var city = "BJ"
( B" Z% p0 X7 H1 F' Y, K- s- _function f(){1 z+ S9 P9 Q2 M; r) ~. B
    var city = "SH"$ a+ k+ U' w) v, L2 Y  ^
    function inner(){4 ]; Y( j, N$ t4 O3 g  f, C- h4 Q
        console.log(city)
: I, m% W* J2 u' e% F    }
# t' q' i* p8 p8 d' Q& s+ z    return inner
; m5 ^  d# G% I& s# ?- e}
: h# [7 x  W6 a  Ivar ret = f()# O6 b. w- ], j& @. U' ]
ret()( y& d5 \3 G7 l2 T1 n' N
执行结果:2 k8 C: t3 B9 o9 n
SH
; ]' B2 L. w; ^% q7 D8 t
; B* C' Z0 D8 {# k8 J3 g</code></pre>
4 e$ x# E6 t  p) |<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
4 D) F) I' E) A' V4 U$ D6 P/ i<pre><code class="language-javascript">var f = v =&gt; v;
, u* l+ k  e2 ^5 a; \& m// 等同于
. s0 [8 N1 [- l/ ivar f = function(v){+ P) R- H% o3 T: h; ?
  return v;
) C: Z) C8 p: g) \2 L}7 @( M. V& U% V1 k" y
</code></pre>
- u, e+ x. G2 T<p><code>arguments</code>参数 可以获取传入的所有数据</p>5 L3 C& I9 [# u
<pre><code class="language-javascript">function foo1(a,b){. s% J* Z1 P, D  r( M( @
    console.log(arguments.length)  //参数的个数 ! s2 y8 x( z3 b0 f
    console.log(arguments[0]) // 第一个参数的值$ q6 t. e' C9 E, G$ j
        return a + b   
* G; l! E( v8 Z; J, y5 A7 q}
! g( [2 ?' k2 Q1 b$ J" Z2 p# ufoo1(10,20)! H. ?2 }- W3 G5 z- w9 F; v) t
结果:
& o% E1 h- M4 C" K1 K) [ 2          //参数的个数 5 ]5 E+ U5 T: c  d; Q7 f' v
10        // 第一个参数的值9 ]8 f6 s& R$ ~2 p. ^$ a
30        // 返回相加的结果
# c2 y8 q; P4 w# A2 N: k</code></pre>
; K# l$ {9 D4 F2 m! x( r2 N<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
4 v  r' f1 P; |* ?8 @% a2 E& h<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>2 X2 A9 B+ J" D( }7 R$ ~2 V
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>, M" @2 g: c+ z( g1 M. }
<h4 id="281-date对象">2.8.1 Date对象</h4>0 e( s+ W5 ^8 Y$ o' d
<pre><code class="language-javascript">&gt; var data_test = new Date()8 W. D8 P% N7 s2 H5 X( d
&gt; data_test9 i+ d# x7 Y3 u/ x  w5 u7 F
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
8 \! e% k; x7 S" E- ]&gt; data_test.toLocaleString()0 y3 T( N& {8 f! |) S# A, }# g
'2022/2/11 下午9:44:43'
/ W' H8 m' N) d  [. _% C
/ M# p/ z: k% m" S+ A; Q0 h&gt; data_test.toLocaleDateString()* c, G* Z* D/ |- c3 ?( ^8 T. W2 C0 C
'2022/2/11'4 V  u5 g; ]5 O1 p4 ~& @, h: m
* V& }  j0 E0 q. u  _' m
&gt; var data_test2  = new Date("2022/2/11 9:44:43")" q+ j% C! c& L* m+ J
&gt; data_test2.toLocaleString()
  o# D3 K6 {" k* z' A'2022/2/11 上午9:44:43'  c3 j/ Y# ]& I( R4 l0 D( u
7 `9 c) A% _4 d
// 获取当前几号
, k' N/ n. ~1 W% v* T&gt; data_test.getDate()- ]5 a7 a0 i- ^  u. t% I, S4 P
112 {9 I6 E" t- c3 i9 y: j4 ~$ v' F
// 获取星期几,数字表示
0 A! m7 F, H. h: m; J+ G&gt; data_test.getDay()  
" n* p" Q3 g3 w9 E7 f6 u57 M5 U4 x1 w& D0 P# N
// 获取月份(0-11)
0 M3 |" b) [* ]$ Z  b- [&gt; data_test.getMonth()
7 O, o: }! [( [+ A1# ~6 O% x+ @2 g8 o3 C- `  A! p
// 获取完整年份
$ j- a+ s% W# \. w/ M2 i&gt; data_test.getFullYear()
) A/ L4 n8 i9 C, P$ _2022& {( I: D9 ?3 ~
// 获取时
/ m6 C) e% G; H$ a% x&gt; data_test.getHours()
" x2 I1 V) G$ l$ t21
$ N9 t4 k* S5 N$ T// 获取分& P- s( s& @* T4 X
&gt; data_test.getMinutes()
% z. n' S' M( T1 Y! o& x% ?/ [2 P44) t8 T* c4 O% d: t( m
// 获取秒0 _0 N( h: \( A0 d
&gt; data_test.getSeconds()
0 c" X' V- J) C, t% Y1 H43' R: |+ @+ p- n4 a
// 获取毫秒
0 _; H0 a; z% }3 l( D/ @; _&gt; data_test.getMilliseconds()
# j$ j1 Z5 Q$ u- t2 L* `290/ g* F3 r0 g( Z( m- F
// 获取时间戳
8 d( j6 ]% t$ V% j4 z&gt; data_test.getTime()% R( c7 [/ I" }3 X2 R" _
1644587083290* {) Y- n' R: i( w' S5 Y
</code></pre>
" o+ W9 o* V3 G( b<h4 id="282-json对象">2.8.2 Json对象</h4>
& V* @5 E) ~. P! L* j# C, y$ S<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
" m# a" o) p) l8 V0 ~1 [JSON.parse()  // 反序列化,把JSON字符串转换成对象; d4 x/ c- H9 [& @

2 D( v9 E; D- l2 @; b// 序列化
6 O% a0 S: |+ [, C&gt; var jstojson = JSON.stringify(person) 1 p0 a4 m' M2 W% f
&gt; jstojson  ! w0 N2 X  k: h& g" E
'{"Name":"Hans","Age":18}'0 t# |5 c& I& a  X4 k; U
) u  d; }8 P2 P  M) y9 ~
// 反序列化9 ~. U; G) z, P1 j5 B! ]* |0 |
&gt; var x = JSON.parse(jstojson)
% [( X8 _; e0 m& o1 ~1 n: `' A&gt; x" d" b: `1 d( \$ Q6 R( {
{Name: 'Hans', Age: 18}
5 P" B  l2 E* S1 i2 {&gt; x.Age
2 M$ r/ R# H! _; {2 G; R! \4 |+ z/ l18" t2 A8 u6 T) n  u8 g9 j9 Z
</code></pre>
* ]7 m8 _9 j. }9 |! k<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>" a' I* F9 {8 o: y
<p>正则</p>* p" y  b& x7 B# p
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
5 i$ ~, A0 I5 f5 D0 P&gt; reg1
6 W$ A4 x: `+ `5 a0 a/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 |. x+ a, @$ G2 E&gt; reg1.test("Hans666")! `# ]: O9 P+ C
true$ H" v8 k/ ]3 r7 m- ?4 d) T

  g4 k( g( c, E6 V/ P% i&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
, A' d9 F+ ?( V: @$ X&gt; reg2* _& Z4 k: T. Y8 o4 Q/ X
/^[a-zA-Z][a-zA-Z0-9]{4,7}/' y! k. q8 Y- P; e* v7 F
&gt; reg2.test('Hasdfa')
/ N& X1 F" i5 {8 Ftrue
/ k# e# J' s% o' |7 f4 Y: y0 Y) l$ q4 l2 W9 M2 ~( N
全局匹配:4 B2 r0 U+ R3 E5 a( W; [4 J# m8 [
&gt; name8 T- W. ?* G; J! Y8 X" W# g5 t* p
'Hello'' q" L5 t3 z5 R) N* |9 A* \
&gt; name.match(/l/)2 _" e' q( w6 w+ m0 C" I' ?
['l', index: 2, input: 'Hello', groups: undefined]
+ O8 E" c2 A$ N5 O2 X0 v
7 V, w; w% n$ J# r/ Y3 B! _3 w&gt; name.match(/l/g)
* Y7 Q5 Z& }% V6 c3 l- T* G(2)&nbsp;['l', 'l']# r2 D$ x8 t2 h5 j
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
* K) n6 k' J7 p1 _# H2 s" F3 ~
0 I$ r* y" t; a+ }# n  n全局匹配注意事项:8 H1 `7 E! `$ q" \6 |. F* e: H0 }
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. ]9 {( a6 b- T, E% R  K&gt; reg2.test('Hasdfa'): n* d# \8 ]3 k' _/ f
true
, N$ P7 n( b! e$ d# D&gt;reg2.lastIndex;
- z. D' Y& f; {8 _6
( R! @0 Z3 `2 Y&gt; reg2.test('Hasdfa'); H4 Q1 m5 O# L/ u' b4 a; w) v
false
+ l1 o2 N! |* I1 h: e. O&gt; reg2.lastIndex;
/ E9 g- Z7 ?! d) x0
& Q# A1 k$ |  P* l&gt; reg2.test('Hasdfa')
! Q' M, L2 K/ O3 g1 z2 V/ Ftrue2 i8 U2 D9 h9 u$ @, E* e2 Z* N) e
&gt; reg2.lastIndex;9 V9 n0 y( o3 V( \  Y+ Y
6
9 p9 W1 n7 ]; B* y! O& Y&gt; reg2.test('Hasdfa')8 H' d" L* b8 {6 n
false1 ?% ~: W: c- Z0 d8 y
&gt; reg2.lastIndex;
! @2 z+ M1 q0 W2 M/ L, t04 D; E: c9 e" R! g5 s) A* L$ J5 @
// 全局匹配会有一个lastindex属性
1 H( S8 }( _8 W4 ^  v&gt; reg2.test()
! h9 ]4 p9 A6 e: `2 h% Qfalse
; P' `: D% a' D& R&gt; reg2.test()
! }7 S) U9 v: @true0 t3 t$ [( g; \) x
// 校验时不传参数默认传的是undefined% \7 v+ J5 k' p
</code></pre>  @7 z& H7 n9 \
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' m; |& ~  v  @
<p>就相当于是<code>python</code>中的字典</p>/ O  w$ y5 d9 t  @
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}' `" y$ \; R" X  s5 U3 T8 {
&gt; person
7 F* n% X* `7 l0 o& {. B9 O{Name: 'Hans', Age: 18}
( B) z( x4 D  W+ v% Z/ k&gt; person.Name/ K7 N1 G. r9 S
'Hans') t8 q' X3 [% t. j% y
&gt; person["Name"]2 U' Z( F: K& J, }  ^3 ?0 O9 F
'Hans'
8 w- B; O" m' j3 p" T+ J: q" S( T* Y5 N
// 也可以使用new Object创建
- K5 ^8 x, Q  ?; ^&gt; var person2 = new Object()
1 @4 l, ]9 V3 D&gt; person2.name = "Hello"1 Q3 _+ F6 J) n  O3 c; ?
'Hello'
- a; Z0 o& A8 p8 J1 L; A&gt; person2.age = 20
7 }: z9 j9 F8 b" M% |20
# F5 e9 L  y  s( l' h2 F( p" F0 k</code></pre>
- E3 X  H0 D: |- W<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
. S6 |/ }6 r  `1 J5 e# \<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
4 k2 `! D7 p4 `6 S( w<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
: v- W8 J, p: I; P<h3 id="31-window-对象">3.1 window 对象</h3>" }8 i9 @: T0 a2 p8 A& q
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
; q0 o( e) b/ f' A<pre><code class="language-python">//览器窗口的内部高度. W7 I# z$ y9 u, s! v6 A  n
window.innerHeight / e& T& q9 c# c# E4 ]: |' e# P
706) g$ M& i' D& ?, G
//浏览器窗口的内部宽度
3 @# D1 h1 M1 Z) ]6 Q4 ]/ q( Iwindow.innerWidth
- q, Q9 P: R. F1 J1522
7 T8 e& M. B  V" ^) c// 打开新窗口* C. k- r2 g$ V, b4 ?
window.open('https://www.baidu.com')
+ P$ |, g( e+ vWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}# Y; V2 m9 H- i8 Z3 V
// 关闭当前窗口
1 z/ h% B% m1 i% |# R9 u" B$ xwindow.close()
: [  m0 T  [2 G# t3 E//  后退一页. Z$ `" s! {/ q
window.history.back()
# Z* ^+ v( R) y) R0 ~// 前进一页) B7 A: u7 o: c- C
window.history.forward() , b& d  h3 v; A; k1 n8 Y5 ]( _
//Web浏览器全称
& G3 U' E" y5 D+ R8 _) Swindow.navigator.appName. Y  `2 y' A" [: q% |. t
'Netscape': o' q+ d* B, ?, o
// Web浏览器厂商和版本的详细字符串
; Q) {- s, N* f7 [3 A* m( ~window.navigator.appVersion
/ c" b, k  [: [& ?1 ^'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 d. F( ~+ T! d6 b% \// 客户端绝大部分信息# I) ~+ M" g5 @6 h0 K# }
window.navigator.userAgent  @4 S- ?4 o! `# K/ @2 x1 N
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
+ H& C  g9 \) D7 U) f2 V- s7 {9 o// 浏览器运行所在的操作系统' n* [: D/ h5 E% y+ L$ \# |
window.navigator.platform) P7 J) u5 u, @
'Win32'
% t* z+ l" E  U7 |  S0 G9 z0 _' r& l0 j, k. f
//  获取URL- }0 S" \8 [4 z1 |" S# e
window.location.href6 H6 Q- f& u* W, `7 o, G  I
// 跳转到指定页面8 `) z9 B2 d( \
window.location.href='https://www.baidu.com'
/ @9 p7 |: R4 Z) m// 重新加载页面$ y. R  _1 S$ k4 J" f
window.location.reload() 8 F; ^) D! i) J2 v1 ?6 Y
</code></pre>; `2 C3 o6 z: w( o7 |
<h3 id="32-弹出框">3.2 弹出框</h3>
" T/ m' `5 I/ ]# x4 I9 }<p>三种消息框:警告框、确认框、提示框。</p>
" j8 A& N6 C: h0 \! G/ Z, t<h4 id="321-警告框">3.2.1 警告框</h4>
; ~7 I7 b& y- A$ i  I$ h) p<pre><code class="language-javascript">alert("Hello")2 s( t" ?: V7 O7 M( x! {+ G- L
</code></pre>
- W& }2 u' |* K/ B8 S! ]) K5 ~<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>+ L, k- M3 ]+ J/ b, X: y6 O
<h4 id="322-确认框">3.2.2 确认框</h4>, f% q( x5 w; n1 H: W  ]
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
' ?! I. X: Y* o0 i8 [<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
; e4 B! n% y' V6 e8 w6 F0 ?true
4 F9 D" m# M0 V( X&gt; confirm("你确定吗?")  // 点取消返回false
, D2 K* D. ]' t. Z/ cfalse& U, H+ I# u3 H: e
</code></pre>+ Z. k/ Q6 w* k- B
<h4 id="323-提示框">3.2.3 提示框</h4>
+ V$ {; R, `. Q& G4 {4 J<p><code>prompt("请输入","提示")</code></p>
) ~+ k) O6 d  K3 v<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>" G0 a& ^4 X' P& \4 ]% S8 U& I
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
3 D% A" j5 O0 J; n8 m: d9 d4 ~<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
/ P* m9 y( z, q5 E$ ~<h3 id="33-计时相关">3.3 计时相关</h3>
  f3 i# z! X# j<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
$ `4 N6 P+ B, Y7 l6 ^3 V: S<pre><code class="language-javascript">// 等于3秒钟弹窗
4 P) A8 p& @, O  @4 PsetTimeout(function(){alert("Hello")}, 3000)$ C$ M, A* G% e9 a3 A# N6 _+ U
3 B. d/ z# q& D
var t = setTimeout(function(){alert("Hello")}, 3000)
% |6 @; g3 t4 p% ]; k3 Y4 F- h% G8 p/ x3 I  W
// 取消setTimeout设置0 l8 |1 z# `: n# x4 M; D
clearTimeout(t)* ]5 ^6 i; h- o8 ^. i% Q  Y
</code></pre>$ i) I) \, `, Y- L& L
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>7 b4 L8 f4 A$ H" D# t
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
) j. q4 B! h$ a<pre><code class="language-javascript">每三秒弹出 "hello" :8 M, g3 i' T. p/ a" Y8 L( d
setInterval(function(){alert("Hello")},3000);4 ~! l, ?5 K/ F8 V
</code></pre>
! q* D* S* c$ a' P( \; E<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
- Q5 n1 Y2 n+ ], Y3 o<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 u, D+ U* R: ?& w//取消:
0 Y0 O5 e! p2 _  u! X4 S& T, YclearInterval(t)/ _* x$ g5 Q- g0 r
</code></pre>
' V  U2 Y: h! X; @" z1 ~& `
- `0 ?8 s- y& B9 R/ J" `- D! F% i
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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