飞雪团队

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

前端之JavaScript

[复制链接]

8053

主题

8141

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26489
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
3 {/ R- w$ Q' v5 r0 `4 `$ d
<h1 id="前端之javascript">前端之JavaScript</h1>
% \" q! D( I' M, |; G" D' D<p></p><p></p>
$ P7 Q- z$ T) v+ R( `, t<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>9 o+ }7 s+ D* U  C- F
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>, E% b8 z3 R+ ]* Z9 A- d
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>3 H9 w- F6 V. I5 Y% C
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>3 c$ R2 f6 O* \+ X" r
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
* z) V- U" G7 c# _# Q: {( t- T<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>6 N) i8 w2 K1 P/ v- R
<h3 id="21-注释">2.1 注释</h3>
( N: T, G) K2 O6 w1 b<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
) u+ d5 j# I+ U. t, X4 `<pre><code class="language-javascript">// 这是单行注释
! S9 L5 h. ]" V1 b7 @& D9 e; B$ d+ k% ^9 E
/*6 ~% t1 }5 ?0 W/ ?
这是多行注释的第一行,& p% P& k; B. G9 [, a' O  P% b1 R
这是第二行。
7 N+ o# H& V+ {*/$ a+ X( E8 h+ [5 V; ?
</code></pre>
4 t6 A* V" I9 M8 V. H<h3 id="22-变量和常量">2.2 变量和常量</h3>
0 K2 M' m1 r0 q) Y- Y<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>4 X$ F& c! e! j3 E  ]
<ul>! i  q3 o0 s$ P2 y
<li>变量必须以字母开头</li>
  v  L- I% W" A$ a0 s<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
9 Y' y7 u( K* o+ {- n3 L: T<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
: W9 t$ f0 s: h# C</ul>6 `2 \/ z% D3 y. t; X( X, W" E
<p><code>var</code>定义的都为全局变量</p>
. k6 w$ p5 T4 t, O<p><code>let</code>可以声明局部变量</p>+ m+ F, d/ I: |! k. t" c
<p><strong>声明变量:</strong></p>
* J0 ^! k) S# k<pre><code class="language-javascript">// 定义单个变量
& x4 E8 \0 u& T$ A( J! ^$ i, _, a% p&gt; var name% Y3 f0 Y# V& s% e& @+ k
&gt; name = 'Hans'
2 ~7 l/ o, D7 A4 z//定义并赋值
  Y; ?; D; }  Z7 m$ m1 ]&gt; var name = 'Hans'% e9 N" c6 X- O3 _4 g/ E0 L4 E
&gt; name  T6 U7 Q. Q: U; `1 z# x
'Hans'
' t$ U7 k4 h( V) t
) T2 b5 \5 A9 Y// 定义多个变量
! f) F: S3 }, r& j& Z( F&gt; var name = "Hans", age = 18
9 i- G; d) K! @" a) M# e0 p  y&gt; name/ o9 y3 l; G% }+ g
'Hans'$ a* M+ e& }! H: c2 ^
&gt; age6 K! r5 j- c. Y5 W1 P
18
4 b7 h  R& ]7 u9 V- f6 G/ k
. M, @5 T5 A' B1 q) D# `//多行使用反引号`` 类型python中的三引号1 A8 Y( p& l4 ^6 v, ]
&gt; var text = `A young idler,
8 J2 P6 j- X8 D$ ^# dan old beggar`& s" R5 l* n2 D+ H
&gt; text
" y' F# k& u2 p! F: C6 Y'A young idler,\nan old beggar'
5 h; S9 z  ^# s</code></pre>* z) k3 w1 t' `4 v! j3 l
<p><strong>声明常量:</strong></p>
' D( G7 n5 A' T0 _<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
. c* V! t3 j. D2 E1 i<pre><code class="language-javascript">&gt; const pi = 3.14/ o; m! Y# U. _! L
&gt; pi
+ J" k: K1 F. ?2 V3.14) X9 D9 U- ~5 T8 o
&gt;  pi = 3.01
" q7 y9 w9 L% F% ?: NUncaught TypeError: Assignment to constant variable.0 b/ S3 n) u, ^: d+ `& }
    at &lt;anonymous&gt;:1:4
; ]. T7 z, A8 b% U( F  I
/ n0 Z3 Q; ^. x$ k</code></pre>
2 @! w: D: }6 z- U3 H<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
; x: e/ B" P, A  ?/ G8 e, a<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
, ^# H- A  u. O6 ~+ a+ W' X& e<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p># A, A. G. @$ V4 c
<h4 id="231-number类型">2.3.1 Number类型</h4>, h, U" z, Z2 a  |$ z3 V$ S
<pre><code class="language-javascript">&gt; var a = 5
# g+ l& Y0 o; m# P6 U&gt; typeof a   //查看变量的类型  
  k6 Y9 ?1 T) ]! }number
8 ~/ \3 a$ l8 n. [) U
% {: u' D9 ^- P4 }&gt; var b = 1.3
2 i. |" i& X9 }. h) U&gt; typeof b( [% M! t$ F  ~& T
number
# O, F5 k' p3 ^3 p+ ]+ o4 b3 J! o2 T* z4 W+ I
// 不管整型还是浮点型打开出来的结果都是number类型, d8 s1 A  N9 b( B: n

  ]* G7 _; n" \/*
4 x& C: T, z! ?NaN:Not A Number
: |. Y' d3 V! @NaN属于数值类型 表示的意思是 不是一个数字8 v8 i* S( P2 }8 q$ H* p
*/
. e9 H8 o" P2 A0 L2 K
. w1 J- k2 ~/ S* i) N4 T' r& L0 `parseInt('2345')  // 转整型
$ n  A' N1 k# j+ i5 |0 S3 [, u- U2345
3 K6 K" A4 }7 ~8 L, z$ lparseInt('2345.5')
% A- G9 W+ ~1 W) v, U, [; u5 v7 ~23459 r2 |/ k; n" L+ M, f; A
parseFloat('2345.5') // 转浮点型: r+ U! [9 ]3 i8 t$ p9 D1 }
2345.5
) x1 G: V7 O- d5 JparseFloat('ABC')
/ \$ [' F: S* @NaN* V' B7 _( x. n/ |" m5 n
parseInt('abc')
* p; [8 `+ u  C: eNaN
  U0 t# w5 v$ w; ^  o  E9 Q6 j</code></pre>
9 w. i* O: \% `( l+ S5 l* O<h4 id="232-string类型">2.3.2 String类型</h4>
; M$ B' `6 i' V% ~+ a6 M0 z9 p" ?<pre><code class="language-javascript">&gt; var name = 'Hans'' A5 \5 K, t- ]
&gt; typeof name" k% O1 G1 w; G" j8 i& }/ x
'string'
. s. K& `* T* A) g+ h. U3 S8 B; N
6 d% X3 r/ a, l, Q+ a. l& }//常用方法  O: F8 W  y: P$ ^3 t; c0 i
// 变量值长度* E4 o' n9 g8 w5 r2 s3 y# b; d9 U
&gt; name.length& T& G, d& X9 c
4/ U1 ?- s3 G$ z" M" Q8 D; g9 M
// trim() 移除空白& _$ m: Y" e6 H$ l) B; ^" R$ z; B
&gt; var a = '    ABC    '* z) v; Q4 v/ X
&gt; a, D6 f" z- Q+ E( d# H& \" Q
'    ABC    '3 k. j0 a5 l1 A% O, u
&gt; a.trim()' ~: y8 O; d. V4 P- F/ s2 F7 Q
'ABC'& {6 a8 {! `0 Y/ j& _
//移除左边的空白2 w0 E5 I0 H6 G8 C+ X
&gt; a.trimLeft()
6 a* J. r2 L8 P, l1 r0 h'ABC    '4 {& R" b! k  S
//移除右边的空白( U5 D$ _- a  q7 P0 ~. F& k
&gt; a.trimRight()" g# u  t  e5 ]3 E$ E
'    ABC'
8 @# a# E8 b, y1 F6 z! d! d  B1 k) }  b( s. O
//返回第n个字符,从0开始
: O" Y7 X; T2 `; H. W&gt; name
% p& G5 O. ~8 |8 r& W3 C5 c" S  [6 p'Hans'! {1 A# U) P( V+ ]* m/ a. Q
&gt; name.charAt(3)
1 c4 t3 w" m* C's'
) \' \" R8 S8 Z( I* Q&gt; name.charAt(): y% i" C+ u) \; d; p
'H'
3 }$ n9 u6 Y; o&gt; name.charAt(1)
5 ^( K4 a) I* U  U, E'a'
" q, B; ^% w7 O2 _. d1 w, W6 K5 b$ l* U' X6 \
// 在javascript中推荐使用加号(+)拼接, S0 B) _% C. A" Y" `+ \$ u
&gt; name
1 J, g9 P' f" r$ L'Hans'0 W7 B5 R6 h8 e7 ?
&gt; a5 l6 P5 z* G6 Y& u2 n, q+ U
'    ABC    '
5 Y( M/ R( J% }&gt; name + a
1 x& _3 Z. D0 ], T" p' ~5 J'Hans    ABC    '
$ i) g; I4 `, y+ F// 使用concat拼接
9 C( t5 p5 M& \  I0 d. M% [& \# X* p&gt; name.concat(a)
& w6 w8 z1 l1 d3 C'Hans    ABC    '
, w" p5 L, Q8 |% @  e
" g. ]1 z: B1 ~+ P//indexOf(substring, start)子序列位置, h& _! O% @* T

7 H2 q  \" P: z) y&gt; text) \' |5 [& r0 z. q
'A young idler,\nan old beggar'+ r8 z! i+ F- G$ g' f
&gt; text.indexOf('young',0)* p+ N4 g( A8 t  n
21 V. q. ^% a8 r% P) W2 i

: E8 s9 k% ^2 g9 j# L  F//.substring(from, to)        根据索引获取子序列
% l1 S, c. b) L  `3 U&gt; text.substring(0,)
* q& Y; B6 S/ o7 G; B: M% I'A young idler,\nan old beggar'
4 K- l) C4 m6 I7 W; G- L& g/ `4 r7 j. o9 I&gt; text.substring(0,10): x% q& w  B% C4 [+ z
'A young id'6 Z) i( R+ ]* Q( ~8 k/ O5 b
  X* d1 z8 {8 @/ y  A1 X9 p' M! I
// .slice(start, end)        切片, 从0开始顾头不顾尾
9 E* u& w+ S2 L: f# ~( j&gt; name.slice(0,3)
. P& I+ F0 x( H" d+ r0 j, d'Han'
& O) X- ]+ @5 b& @1 C' ?
4 `1 r( t& J& D7 _9 G8 K% j// 转小写8 [, h8 m! Y( Y+ Q3 D2 ~
&gt; name& Q$ X  [1 ]2 v, _
'Hans'! p' h1 ?" S( g* E
&gt; name.toLowerCase()
- g$ L6 D6 G6 M0 J0 w: V  D3 K'hans'
7 u' s" U; K- v& ~; z/ c// 转大写
7 O4 |$ i; P7 |6 C$ b) i&gt; name.toUpperCase()
+ i" c1 \. l4 _9 {  F8 P'HANS'
9 Y5 |8 C* E. M. i& N
8 a4 q* A2 Q$ n6 G* b- ]// 分隔1 \) b, R$ X4 z2 N
&gt; name
; W  D, H: o, x, j! U' v'Hans'9 D6 P+ p9 T4 C7 x# C$ V  K
&gt; name.split('a')3 E6 C- C: {/ z4 h
(2)&nbsp;['H', 'ns']+ `* v* M- y, F6 q# S: h. c6 o' D
</code></pre>) f6 g7 O% I0 i: _0 b$ p1 }2 a
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>) u+ |# `. v* S9 k% @  x
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>0 j; b1 R6 H; f. {( e( Q, s
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
3 F# H: R9 J+ ^7 G7 r6 }<p><strong>null和undefined</strong></p>
& A5 m* r# {( Q, W7 _$ X' S<ul>
1 N/ d% n2 i* X<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>7 l9 \# P+ D6 L2 {
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>2 f- m4 k* t; h. O
</ul>
1 h! p/ c- O; ~! R6 j<h4 id="234-array数组">2.3.4 Array数组</h4>) ]9 K9 W4 W% E" ?" c- F+ H3 F
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>9 V# z" ~6 S# }9 f& d  J
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
- Z  h- E$ b7 R; @&gt; array1
  f. s$ f8 C( @4 V(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( |7 B* r# X  i9 d) Z! `% ?
&gt; console.log(array1[2])  //console.log打印类似python中的print) M3 }, r+ c+ J% |* a- r' C! g
3
4 a5 \3 [5 D' G// length元素个数
# M; Y. s- T7 Y! E+ L, {( D&gt; array1.length
. A" V$ ]+ [+ }6
& Z1 v, H8 {' h& s6 G, g// 在尾部增加元素,类型append2 X" X1 m% U% k- `$ @
&gt; array1.push('D')' J; l' ~7 Q4 `9 R
7
% n  F# I5 V% o' h&gt; array1
3 y  a) x5 j- t: R; s# @(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
9 `: j9 j. g$ d3 y7 |$ J9 k// 在头部增加元素
1 m& x& q3 O' {$ |& K/ }0 Y&gt; array1.unshift(0)) F" p- }+ \3 T2 J# a; Z
8
9 z2 g# V0 w2 W&gt; array1
9 b# M/ B% u& ]$ K* g0 `3 w(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
8 A3 A7 ]" f# c9 L7 L3 [4 z4 w7 o* n- t  x9 P& u
//取最后一个元素0 {3 e+ M* m6 j- }
&gt; array1.pop()
5 W! P& O* K5 T'D'# s6 H& W, l* U- X3 R
&gt; array1# R  n9 I% i: Y; `5 M
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
: m" b" M/ m- l1 q! s' Y" ]% ^& c//取头部元素% `2 \) ~) s$ F2 p, [, X! Y& ]
&gt; array1.shift()6 S: \. o  J% I" ]# e# v( q
0! o( V/ E+ S. A: J
&gt; array1
0 g! a6 B9 u9 c9 @(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 f7 a- B- j# m4 x) M* g
, w4 y) u6 B* j//切片, 从0开始顾头不顾尾
2 y6 s" Q2 r( O&gt; array1.slice(3,6)
) i4 S8 V! |! [" b. S2 F! A(3)&nbsp;['a', 'b', 'c']; y+ U8 Z1 g: Z( F0 c; S8 K
// 反转
- J& J% q# `" M( a$ x&gt; array1.reverse()
: Q( ]* b. Y& @(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
# X" S- j' K: i4 h8 N0 E- q// 将数组元素连接成字符串) G/ k, Y8 y/ l- j/ O5 g
&gt; array1.join() // 什么不都写默认使用逗号分隔
2 ?" e( ^- G* v9 n$ v  ~'c,b,a,3,2,1'
' Y: W3 M6 h: t  L5 O& k- m&gt; array1.join('')
# Z4 I$ ~- A  W* S4 `+ h'cba321'" U  ~3 l) B4 j- j' q# }  ]
&gt; array1.join('|')
* C1 D# k1 ~- q: A$ \& l'c|b|a|3|2|1'/ h2 i' j! y, @
* O$ Q- J  Z2 {. g8 g- l( @1 @
// 连接数组; k: o% D8 m5 A; ]7 F0 X
&gt; var array2 = ['A','B','C']' W6 b* `0 R# T, W
&gt; array1.concat(array2)2 m* e9 Z$ Q  V& `: r/ H
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']# d+ p: h$ ]. ?/ S; A

( ]/ w  r% {$ p. @, u/ p" F; {5 ]// 排序
6 z$ e% F! r. S! D, R0 p5 g&gt; array1.sort()5 h# G% U1 ~4 X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* x" x; q' ]; ]6 \  _! j% P( f# J. X9 t) i& g+ M
// 删除元素,并可以向数据组中添加新元素(可选)
$ F4 P  w4 w. ?( H&gt; array1.splice(3,3)  // 删除元素8 d. n7 \8 [+ T6 }. E6 i; r' Z
(3)&nbsp;['a', 'b', 'c']
9 f" C) W' n  i) L  O& x. r&gt; array1
; G6 Y' _- S+ V3 Z/ p' J$ a(3)&nbsp;[1, 2, 3]
8 p& a( `! w' }, J" [" B: J&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素9 _, Z2 @2 z! q% x3 I
[]
2 Y" l5 Q) _+ I" b6 N# n9 I&gt; array18 @/ b" y0 i- B+ J- P. y* R
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']) q0 t7 X! ~8 h; ^: G: f

/ ^5 b8 Y9 b9 k1 c# g" ]/*, {9 {+ r+ R! p: F* d5 Q2 b
splice(index,howmany,item1,.....,itemX)
- z: k7 z" n0 v( K1 B9 J+ S6 M* jindex:必需,必须是数字。规定从何处添加/删除元素。
& v3 C& o* Y. c2 k0 Y. B, Fhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
* F+ {3 W; K( ]2 Bitem1, ..., itemX        可选。要添加到数组的新元素
, {$ _" Z; F) F7 U+ z- N*/
) C' s( t' c7 ]2 s! O; N) y3 M- j, B( C% D& ]7 {* `
// forEach()        将数组的每个元素传递给回调函数
, h: Z+ f3 {4 Z" M) ]&gt; array1.forEach(function test(n){console.log(n)})
2 B, t1 N: G3 ^0 V' q8 l 1
% \' N' @7 k: b, M7 K. | 2
/ k$ P- j$ g6 r; w& B. w 3( I% d$ c$ o, p& m# ]8 Q- y
A
% A1 `- J( @/ m- H' E/ O  S B
, }( `9 k/ G! S0 q- n0 D C
1 v9 E) {! v1 \4 {  y6 }// 返回一个数组元素调用函数处理后的值的新数组; r6 n( u' T+ K, Q1 i7 y: s
&gt; array1.map(function(value){return value +1})5 ?( ^0 S, P) w8 p
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']* x! K6 `+ I) C& ~2 R0 ?
</code></pre>+ R1 X: q8 ^" W2 F9 g
<h3 id="24-运算符">2.4 运算符</h3>
' i! R* @' I2 p, M$ q<h4 id="241-数学运算符">2.4.1 数学运算符</h4>5 b! ~2 G+ I, o
<p><code>+ - * / % ++ --</code></p>7 S8 U" j2 I! O9 o2 ~
<pre><code class="language-javascript">&gt; var a = 60 C) F6 p" m6 ^* A
&gt; var b = 3' R! R8 P4 T5 L  w) H% P3 D
// 加0 t0 M; h. H* h& y$ U
&gt; a + b
' W; G7 B" p- D. A  J0 j9% z! l; J2 F4 A$ @; {! e# ^4 ]; x0 H
// 减
8 m( y0 {' A3 Y4 D! h&gt; a - b
0 s* n' ?, _: C+ @1 B3
/ j* U# |6 I# O% T2 x5 M; {  y// 乘
. I/ x) U8 N3 Y0 S7 b3 a# Y" n- r3 C) g1 g&gt; a * b5 Z8 G4 n( d: F- j
18
& I' @' ^: G, L: k3 {; U// 除
9 S: Y3 d3 s+ {- Q+ Y/ I1 M&gt; a / b% j/ t/ X6 t2 ]+ n- G1 m
2; y# A  r# x% p3 B0 n+ y
// 取模(取余), C8 g6 A6 ]* M: C& z- g
&gt; a % b
8 k( u! W5 P9 x5 X' v. m0
4 s6 X% d* o) o4 g& ?5 ~// 自增1(先赋值再增1)
8 r7 g  C7 q) ^9 u2 u% H&gt; a++0 p6 ]9 g+ z3 f3 a1 v: z
6  l! }) {/ r$ b- P8 T; ^+ m* S
&gt; a! H- H5 f  j3 @
7
0 R9 n; w7 a1 v. M. O# o// 自减1(先赋值再减1)8 V7 s- m& N1 D! o
&gt; a--
- Q3 x$ c8 ]3 N5 t" a7
0 T. T6 t8 a9 T% Y&gt; a
$ t8 n6 r$ M/ A% m3 q6: E( h4 u8 {  e2 j5 L6 j7 D! i
// 自增1(先增1再赋值)0 B4 W+ L- n. O( {& b
&gt; ++a1 T! |. m4 w0 f( u) c) Y1 U* g6 |$ ]
7
0 F! c9 R& {2 K3 l// 自减1(先减1再赋值)
- y1 [' A& g6 v0 F3 X; y: E( W&gt; --a
  R. f. X4 E' O' Y( a60 F# l' D+ Z1 u7 |/ z; T# r
&gt; a, v# {2 I  ^/ a% s! i8 \
6
- C' I. S: L6 o% |0 v" t. U7 n, O
0 v3 q, m. C9 j2 `7 b; ]; D//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理8 ]& [/ o9 L4 [0 f% E
</code></pre>
  R! i& _! D1 w4 Q<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
/ q5 C( d" ]3 S) S/ U2 t+ i<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
" J9 r, D( E; h+ j1 i* w4 o0 |4 }% D<pre><code class="language-javascript">// 大于+ d2 L% e3 l! F: \* Y5 j/ b
&gt; a &gt; b0 X7 f# W. n  a
true
4 [' [( y* |- ]// 大于等于
( _0 p, x. Y, i+ P' g! `+ E&gt; a &gt;= b, t7 C  Z) b1 n
true
* M$ Y( t0 a' l4 m. V7 K// 小于
9 G: V- R2 r5 ?0 N4 U. d&gt; a &lt; b( S; a2 K$ e  B# ~$ C
false: h- F% x4 U, I) ^
// 小于等于
% L; P& F- S6 ^' k&gt; a &lt;= b
! V) K/ G$ |6 o/ g  yfalse
/ u) {( ^$ A% D' \// 弱不等于
$ X9 g9 A( T& |4 o9 D) Z- n) I% S&gt; a != b
- q$ \0 k2 q2 G+ btrue
) e4 c/ h( C3 ]+ b// 弱等于
. u4 N& S. A5 U( E% }: n6 w&gt; 1 == '1'% ]5 c/ S+ z- ~4 E
true
$ d; [2 y) T0 V: `7 z' }// 强等于* Y- j& C$ i3 {+ W
&gt; 1 === '1'
, Y$ q3 y0 w+ o  Z- m. {; Xfalse
7 ], V! x# S3 E3 G1 L- j// 强不等于5 A, E% |1 C+ P8 L% Y
&gt; 1 !== '1'' |5 N0 A$ f+ ~- t2 c3 S0 g/ D
true
( y# V" j, {. f
. Q6 w% I# h% p/*6 k, ~" S, z$ K: s; n; k, R" a, M( F: n
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误3 z: j9 w, I, M3 l1 f' C) @
*/
, R1 y, H6 T. P7 Q6 P% X</code></pre>
0 c2 A$ F1 j8 q7 a) f9 T6 v1 V<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
2 `* r9 B  h" _8 S% W& v( p2 x<p><code>&amp;&amp; || !</code></p>8 |2 y+ `9 E. L
<pre><code class="language-javascript">&amp;&amp; 与
/ c) h6 U/ }3 n( O0 b8 `7 x|| or 6 O6 R# |6 o, O- D. j* r$ {! z
! 非. q0 G+ h* t! _( s/ x
</code></pre>
* f' S4 ^9 I6 C: ]! h<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 w/ I# R7 Y# [; e3 x
<p><code>= += -= *= /=</code></p>
6 Y$ L9 h! W" C<pre><code class="language-javascript">// 赋值
& f& j7 b5 s& d1 ]' i&gt; var x = 37 Q; w1 c/ m9 D% l
// 加等于
% |3 b% Y8 ^. {& R, ^&gt; x += 27 C& R7 Q! o3 v
5
3 x* R- Y4 A$ x( y0 D// 减等于' Z+ J! \7 }. K4 c; ^: C# w) y
&gt; x -= 1' y- x5 F" b2 |' T& o# J8 J6 Z
4
" }, R+ \* A! h5 e" A// 乘等于
( v- L+ v" k8 w  Z&gt; x *= 23 i* w- Z! ~6 }# E& f# L
8  |5 G( x+ h7 S: R+ f
// 除等于
& f' C! P! f) h+ ^' Q2 v7 X9 M5 O&gt; x /= 2
: f" R/ Q  `4 M1 b. E% r; M4/ n% k6 D4 N$ W! G* F7 o, G* A
</code></pre>! ]" @$ _# J0 I; A: f* f: r) d# J
<h3 id="25-流程控制">2.5 流程控制</h3>
( I6 k0 q( T7 {  F<h4 id="251-if">2.5.1 if</h4>
0 h" w( X: |& R- Y<pre><code class="language-javascript">1, if(条件){条件成立执行代码}$ G" S% R* X" k9 R2 o
  Q3 Y( D% t2 Z" G* J# F/ O
&gt; var x = 3
$ ]+ Z! |9 b! d( m1 p3 `! Y&gt; if (x &gt; 2){console.log("OK")}  O8 u0 @8 M4 K
OK  C9 L) j8 B/ M

8 M% ^3 B( @4 N& p2, if(条件){条件成立执行代码}
& V' m1 w3 s" m  p        else{条件不成立执行代码}# L7 m2 Y$ h6 h+ r
6 \* U1 {& s: e# m) W4 [
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
! i+ ?- \7 e! U: `+ b$ P" b! b" e'NO'
8 C4 Y% h8 ]" B- H
: `' ]$ A" z+ L4 {$ ~3, if(条件1){条件1成立执行代码} * z* X+ D5 V) i
        else if(条件2){条件2成立执行代码}
% h  }- q3 V- o/ P+ o% i* `& C    else{上面条件都不成立执行代码}3 s" I6 D! N, C8 S  c' r: I
- P; b4 q  Q$ ]" j" M' N
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}" N5 e2 Y2 a5 Z; V/ A* }6 b0 s5 H
Ha+ ^$ o( m4 E. o# A( }6 t- R
</code></pre>/ f, s. K+ Z1 M+ Z
<h4 id="252-switch">2.5.2 switch</h4>& }8 p4 X8 h* }/ D
<pre><code class="language-javascript">var day = new Date().getDay();9 Y- ]0 B5 z: N  Z% Y' f
switch (day) {5 a4 t; k0 y9 L3 O. Y% S3 D% p
  case 0:
  F+ {) L* O- F  console.log("Sunday");  a# V- w! W. O
  break;* u. U. ~/ v3 D6 L
  case 1:3 x# M6 x% l# L# D
  console.log("Monday");
! J: L/ ^) Z5 y8 N  break;* F4 L2 E+ `1 m+ F8 H
default:
/ e1 O1 {  |; S' m) L8 K' w* N, N/ U  console.log("不在范围")3 e% t, I' Z$ Y; w% H, g
}
& f, K  D- C$ {) B& a 不在范围
# p& [) n: g3 D" D/ C# G# Z</code></pre>) P9 A- @0 U9 r9 c& r, `
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
. U' J6 b# K3 i3 b4 H! B# O<h4 id="253-for">2.5.3 for</h4>! l2 f! V' ?7 O8 w
<pre><code class="language-python">// for 循环" B' b6 _! d: y: v! }4 J
        for(起始值;循环条件;每次循环后执行的操作){
+ f* H! u7 D( q* I0 N        for循环体代码5 r3 u0 l$ B3 f: I" G7 q
    }
# j+ t7 l- c# N  q' i
0 X& ~5 n3 z: b) Yfor (var i = 0; i&lt;10; i++){
/ q' j% O7 c& k2 }9 u3 L    console.log(i)
, H; f: d/ B5 X( V7 `% ~}. ^1 R4 G3 X' T; P, _$ B
        08 }2 R8 @8 {* W  I" }8 ?
        1
: d& L# Y& f7 c6 c  L0 |        23 a# s8 }, p/ O% i' D! ]% o
        3
! D& n: ?6 I: F        4, k8 \0 j* V$ {5 Y- Z2 z, R
        5
6 l7 t5 U- f+ c: ]        6
+ X7 n. \% X& {$ Q: X8 ]7 n        78 B6 |6 [  O& x7 }* l( d, c6 u& f
        8
: A6 Y& R4 [) D. N5 D2 Y! E        9
' I$ P2 T& b9 _4 c; R</code></pre>
! {. n% D/ L4 T& o<h4 id="254-while">2.5.4 while</h4>
- Q2 a8 n4 j! [. t7 g<pre><code class="language-javascript">// while 循环5 ~! E; P7 E' B8 q2 u2 z. s
        while(循环条件){+ u/ s& o! w. i
        循环体代码
# b* y7 w" x' |    }3 T: \; l& G/ G; N) g9 F0 [5 `, Z

4 }6 w- Q$ w4 E) R1 m( a: \&gt; var i = 0
! B) \0 N6 i: o! x1 U&gt; while(i&lt;10){
8 }; R9 i3 _% v" [    console.log(i)
- }* A, Q4 h8 I! m( m: w    i++
3 u0 E. q2 \8 c1 u  |7 L}% W  g+ \9 [- O; t& o  Q* m- f1 d" o
0
8 `8 X# m: v% [5 _+ V* K" l 1
/ u# y  T% q+ V1 W8 j# o8 `& O 2( S  M* _: V( q2 ?% v
3
/ t+ Z# j: x( T% U 4
$ U& R1 T! a6 {* ?7 A  I+ u 5
8 ~( e  E' A9 b& ^ 67 P3 W5 t& r1 a1 ~+ J; m6 d
7
% j8 V# {- @# E1 {. v 84 l5 Y* [0 S, a! @, I7 b# F
9( W" v( @$ m; f, j) R% ]
</code></pre>
( t  l- B: g0 i) k<h4 id="255-break和continue">2.5.5 break和continue</h4>
& F5 r) z0 E  G  q0 Y# h2 F<pre><code class="language-javascript">// break) \: h4 i& Z9 v- W4 r" e# b
for (var i = 0; i&lt;10; i++){3 \+ |! @' y# ]5 |; X6 Q
    if (i == 5){break}& Q# w6 w" [3 R$ w' C- T9 C- _5 f# X2 e
    console.log(i)
$ X0 D+ O- C( v3 k}
7 g( W8 K% H7 }: { 09 ^# [* s) X% n" P" o
1* n0 Q: Q$ R' G! y
26 s. h9 ~9 b5 _6 ~
3
$ @4 L* X" y) Q+ i8 S 4& T5 _5 J4 M9 k7 a) E1 Z2 u" _9 U0 O
// continue8 D2 }2 Q1 R8 e6 S/ G
for (var i = 0; i&lt;10; i++){
; [& i, m7 X# y# q# ]3 j0 m7 s    if (i == 5){continue}* k2 f& u" J1 }7 n; v/ {. d. d% w
    console.log(i)
# M: \* K8 e+ Y( U4 k/ ?}
& l9 p3 S0 C; q! K" h 0
) c" a: I# E+ G" Y" S! `' R 1
7 R) Q0 S" X4 g9 F7 @% h) V2 \ 2
4 G" ~1 Q0 T8 C; {9 {3 y 3
4 t+ }% e5 [: m# ]$ m 4
' e4 z  ~) X6 r$ K7 K; m 6- ]/ d) V/ ~  B0 D% `
7
1 m/ x) |+ }+ H' d, D1 c; |: ^2 W 89 l7 |: _2 N8 h5 a5 X  {" R! T
90 n; S' F. E! o) C* X+ ?  h" H; D

) b9 l9 y, y+ _3 ^$ ~7 @1 j</code></pre>
2 X* j0 `5 \! J. N- _3 v' P3 e<h3 id="26-三元运算">2.6 三元运算</h3>
3 B/ X- o5 @/ i( S  G6 f4 q6 l<pre><code class="language-javascript">&gt; a
7 \3 J4 J/ O  D( ~/ U6
% C* [9 _' V: C/ ^5 w  L! ^( s&gt; b0 d8 N; X1 S1 u# B6 e
3
, q9 c$ L) A8 ?* i* m" r  x, m; o& z4 A7 B+ |) _# d) y9 Q. ?% B
//条件成立c为a的值,不成立c为b的值3 _, q# N) J* J' `2 {1 \5 D
&gt; var c = a &gt; b ? a : b& A# g% \" ]: k0 p
&gt; c: }7 r4 J; s  p8 _! Q' x- h
6! k$ @8 l" G/ U7 x# f: r+ P
0 y9 r5 g- D8 ?$ X) Q* S) M
// 三元运算可以嵌套5 P2 K" s7 I; v. g1 q: c
</code></pre>* Q% Z( B9 {' n; p
<h3 id="27-函数">2.7 函数</h3>
  |7 k8 p# }  S- h! x4 T' f/ V6 G  ^  J<pre><code class="language-javascript">1. 普通函数& K6 B  x, [2 u! }8 E
&gt; function foo1(){
+ O  K) F' t  `, W% J    console.log("Hi"); x* A" M9 c7 \" {, _
}! I( T" Z3 j6 b
. _- v3 {9 W$ N( m0 K- c- f: z: M1 e
&gt; foo1()
4 O8 K/ Z5 \+ `$ k! l        Hi5 `6 T  y1 n# L1 w- g/ n- }
2. 带参数函数8 I7 E; `' }4 k, [2 F' x
&gt; function foo1(name){4 ?* V4 j. U) z# s5 h' J
console.log("Hi",name)7 S; i& j/ T9 E$ Q% u
}, O- c. Z5 J3 e5 d' l, K2 i
3 c; J9 k( z* |) k
&gt; foo1("Hans")
& e4 ~1 W8 F' C' K3 u2 PHi Hans
9 E% |. Q* |9 j( C. b0 B5 C0 V* ]+ H" G& d- P& @: l
&gt; var name = "Hello"
- i7 E0 X, e! x, E( t: c! I&gt; foo1(name)
8 c' [) n/ A- [Hi Hello
' l) R) K* C2 D$ Q$ ?$ k. t! t# q: ?! J" q( W
3. 带返回值函数8 {7 c" J: }) ^& Z
&gt; function foo1(a,b){
* ?2 f! H- w7 i3 O" n5 D  T        return a + b   / \( k: m7 G+ d/ _
}) W+ ~& G/ W$ l! p/ d" q" S5 l. w
&gt; foo1(1,2)$ `( Z; M- V' m9 m) T
3
6 I) S6 j% |% V: l&gt; var a = foo1(10,20)  //接受函数返回值
! y3 ]9 W3 r8 w) ?3 z# K/ C/ ?2 {$ E&gt; a
( E1 F$ b0 {. P1 J" u30
" O- g+ q- b' h$ R5 b5 A7 }5 @9 G  z8 ?* m
4. 匿名函数! E& C& _* A9 V% T( P. f3 \0 d
&gt; var sum = function(a, b){# k. ?6 v3 B. a, H
  return a + b;
) ~1 Q5 x" g) i' q0 p7 [# @}% Q5 y# \) Y. v- B
&gt; sum(1,2)0 M7 f' {# X% T* g2 b* u2 I
3
8 H6 k0 k; v0 h% ^5 T+ h0 R  L1 e
; \8 s( i5 n+ l1 k: ^9 ]// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱3 j6 B, F0 h; b6 z, p" Z' n
&gt; (function(a, b){; `6 Y* m5 p: V' V8 y5 k5 @5 @
  return a + b
- q& ^; G$ n4 n& E  U" I$ q})(10, 20)5 O% w4 \/ ?- u3 @: r
30: ~4 l7 ^8 L7 @5 T0 M
& J4 ?4 A6 p" V* T8 F: o7 F
5. 闭包函数. t2 s+ E6 r/ g2 S% D7 z
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数8 S. H/ F9 M+ M, ?
var city = "BJ"6 Y6 p% h/ p' Q  D$ S, y/ u
function f(){" r4 g. E! \6 X# f+ |/ n+ A$ `
    var city = "SH"
8 U7 T3 C, a3 h/ n    function inner(){3 c2 E) [& z6 Q
        console.log(city)
* D: w8 }4 u  G; g6 D1 x    }# z: O- K4 d- K, q2 ?
    return inner
# K+ Y  F( u' L: T  O" y}
9 p5 F( V4 g6 z% m/ A% G& o+ evar ret = f()
# N9 J! W$ n: s  Eret()
+ a" x& C9 v, f! b' Z' k8 a执行结果:
+ f' m( U' ]. F1 R& x3 w$ cSH3 R- F/ Y2 p  F4 Z1 D; M
& S6 w- ~2 @0 a; k
</code></pre>
& N5 I5 X$ r" @7 q4 X6 h% E# u0 g" Z<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
/ O# h' v, q  F" t7 G# c% H<pre><code class="language-javascript">var f = v =&gt; v;
4 g- K6 J" p$ P; A' N// 等同于
) _" |# A3 c& Y) f% @var f = function(v){& P. i7 i/ R  k- p
  return v;
0 R: _- U9 T# y: ]}- k1 L' `9 D2 h2 i
</code></pre>" q) y) V% V/ y
<p><code>arguments</code>参数 可以获取传入的所有数据</p>6 H4 _  o, R) V9 v8 j  I: o( f' \
<pre><code class="language-javascript">function foo1(a,b){) ]0 U2 X! p4 {3 A7 Q
    console.log(arguments.length)  //参数的个数 / d+ B# {: m# [! L3 p( m4 y6 ^
    console.log(arguments[0]) // 第一个参数的值5 d/ I: O- e( b" X; d. D
        return a + b   
7 `9 w* i0 H$ a0 E9 d5 W}
$ E' W( @5 q2 @9 s9 r4 Ifoo1(10,20)
# T  P( K1 X/ s7 ^' J* B结果:
+ K  q! l) U+ y" e$ F! z0 f6 y3 t: b 2          //参数的个数
* u( w8 |0 q/ j" d/ K9 j: b10        // 第一个参数的值7 ]% n1 B; Y6 b5 P
30        // 返回相加的结果
- o" e( q7 U6 D* r, ^</code></pre>) N2 L4 _& q7 [; {$ j- ^
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
& v5 c& o, U) K, D- |$ H' `. H7 e<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>* J' u1 l( p1 T+ [1 }& T' z
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>3 ~7 B2 ]5 h1 [+ M- w3 R$ W
<h4 id="281-date对象">2.8.1 Date对象</h4>8 H) |9 M4 S5 ]0 u7 ~" [
<pre><code class="language-javascript">&gt; var data_test = new Date()  L+ D, ^* Y9 }% v* i" ^
&gt; data_test
7 N* V" Z$ M$ RFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)0 [* a8 `1 v: U$ I
&gt; data_test.toLocaleString()
: s9 g+ T1 s5 o* j. W1 K'2022/2/11 下午9:44:43'; C+ O7 ^4 ?1 X9 D" B8 ?! h

" J4 B6 Q+ x; \; r8 D2 Z: `& e7 }8 H&gt; data_test.toLocaleDateString()
  R, L) G3 N4 L" I'2022/2/11'$ l: j7 i- u2 U# G- D$ z6 o# b: r+ f& G

+ g6 Z( Q0 {( b2 K9 z/ g&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 ]9 F' S0 q* m
&gt; data_test2.toLocaleString()
+ r1 k; ~, U/ g4 |'2022/2/11 上午9:44:43'
  v3 V* w" Y7 u$ X" q+ ]5 g2 I/ X' O, N% f! K4 b
// 获取当前几号
& ?6 @* w3 E' b( p: K&gt; data_test.getDate()0 W) q! s: e, y% }  _
11
+ V3 I3 j0 A/ ?6 T6 ~) p0 ?. J+ I7 I3 S// 获取星期几,数字表示
7 E, b: w( s% }. `* y5 a&gt; data_test.getDay()  * t5 v# @2 n& Y1 }
5: F( A/ e2 K- }, w+ i# n0 f- O
// 获取月份(0-11)
+ q# ?" b2 d3 K# ]4 W4 A% l: y; f: |&gt; data_test.getMonth()
# B2 O" a( ^5 c3 A! c1, a; Y# S8 {5 U5 d2 I+ j$ J
// 获取完整年份
6 r/ f8 b9 q/ i6 D2 n# `&gt; data_test.getFullYear()$ I5 b7 x% b2 j. {! S
2022* H# k+ O  O) }* b/ y- ^
// 获取时# e- _3 F6 C1 E$ ^0 y, |
&gt; data_test.getHours()
3 u1 n2 ?; H! j: v. O- _" K21
  j& w/ V$ S  r4 G// 获取分
9 A* K7 L' P! [, |0 {$ s&gt; data_test.getMinutes()
# w' I+ t9 B% p( k! a  ~44
& c1 t+ L3 H  O2 [8 a// 获取秒: n9 r2 h6 S+ ]9 j6 p, _  ~- {
&gt; data_test.getSeconds()
% m7 _* |5 G- H5 ~1 z8 k9 d43
" W. X& ?' F7 H5 C! y- `: [5 H// 获取毫秒
! o) g- i$ H( R  @&gt; data_test.getMilliseconds()8 C! q. J% p' P: O# D
2906 Z' P; V; b3 c" I  o1 Y
// 获取时间戳3 ^. y# M: \' e; D- I# ?
&gt; data_test.getTime()
" [& ]! u5 s. i) S2 L6 Y( `1644587083290
5 T8 @9 Y' p% l( s</code></pre>
8 f5 D7 ^" M$ Y* ]- U5 Y<h4 id="282-json对象">2.8.2 Json对象</h4>$ Y0 M" K! _/ }; c: Z. C
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
7 p8 V# k: `9 \( kJSON.parse()  // 反序列化,把JSON字符串转换成对象
. Z7 u/ `0 H7 j; a
6 Y8 Q, g( ?+ {' }! k. D6 Q( q// 序列化; g: Q+ M7 U; y" M( S) w
&gt; var jstojson = JSON.stringify(person)
9 d: W8 C( j1 d&gt; jstojson  
' D8 T6 R0 s9 l$ T2 ~4 d'{"Name":"Hans","Age":18}', @( H0 F: [2 m4 S) G& d: p

8 w. @3 G# a3 Q// 反序列化
. X; U# c  Z, N3 E- M: g( e) ?&gt; var x = JSON.parse(jstojson)
# I- W" X3 U1 _6 l4 w, g4 H&gt; x' @5 `: O. [1 H3 x3 l) \$ Z
{Name: 'Hans', Age: 18}
$ }9 _& F: l2 C7 b/ D; q% ]&gt; x.Age
3 o% p) T5 _$ a" S2 L: n- c18
& I- C  ^5 A9 c" L</code></pre>
: q7 l! O3 \4 {1 ?! a* w, j<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>) R4 r9 I0 A( W6 U1 m5 Q5 p
<p>正则</p>
4 b' u! ?4 ^/ {3 |<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
" ?( F$ g) }; W$ m&gt; reg1
2 ~- U& W9 o; x  v  F9 L/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ B+ t6 v& \( u0 E( q
&gt; reg1.test("Hans666")" K2 u, w0 v$ e5 d- b3 Q
true
3 v9 F- ], Z6 Z& {, b% l" u
# B* g- g' v6 i& @&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/8 f/ B% {* _( A1 ]! ~& {
&gt; reg2
/ k3 B9 `# J1 K- L5 F2 w- Z8 `1 H/^[a-zA-Z][a-zA-Z0-9]{4,7}/
! s, D, E3 ^6 l) I5 u&gt; reg2.test('Hasdfa')
7 T' ^! P8 F, K. ]8 e6 ?7 Utrue! v" u+ `- X. u* a, _
7 [  _6 @: i" g, p1 l2 Y
全局匹配:
% |8 j" d5 K4 s% @8 [2 X&gt; name; A" U$ Q/ Z+ V8 `0 S. |& g
'Hello'
% O2 ]5 t! o$ W+ S/ z&gt; name.match(/l/)
/ ^: k  b7 J/ D! ]! U['l', index: 2, input: 'Hello', groups: undefined]
  F& T' [. d- y1 ]4 A& N; x# U4 ^$ N
. y; c/ R, x/ N# ]&gt; name.match(/l/g)
: c. ^$ I! {% T# f(2)&nbsp;['l', 'l']; t. A" M* J6 t0 l* P# ?
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配$ q3 w( E4 Z% M' `
3 T9 ~2 T/ X/ \$ R; ~
全局匹配注意事项:
! j8 v- O- x& Z. e7 q% l&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
7 z  d$ _" d1 h& ?8 _, h7 U&gt; reg2.test('Hasdfa')
, }- u& g. l0 V( a4 c3 _& ]true% P: a8 _: z$ c7 h" y- R
&gt;reg2.lastIndex;8 e2 n$ s9 a6 K" p8 D5 z0 S* i
65 n& K9 t& ^2 }, n  ?. z+ i& [. U! O
&gt; reg2.test('Hasdfa')/ n/ Y: q- Z+ V6 X
false
: ?! A$ R! }0 o$ O6 T+ m&gt; reg2.lastIndex;
8 ?+ {: j/ H: ^4 ^; @' z, A2 g0- [- y9 i1 X8 ~9 K/ M7 T
&gt; reg2.test('Hasdfa')  l/ t* I1 n: _8 [* A9 t
true
$ G* f0 ], B' z3 K2 M&gt; reg2.lastIndex;: e. m! i% Y: C5 f+ b2 S! C: _
6
% a  q: K$ T% J" U4 i&gt; reg2.test('Hasdfa')9 `; n* Q4 k# ~5 X; Y, h' }4 E
false
  j7 w- F8 J  K# i" ~+ W8 G&gt; reg2.lastIndex;
: Y  p2 ?2 F( Z) ~; w+ O- N0; M7 w1 C- z3 e
// 全局匹配会有一个lastindex属性
0 f1 F7 x- n4 |: d# C&gt; reg2.test()
; `) `1 k* g' \* sfalse. J/ a+ P- u3 W
&gt; reg2.test()
: \( ~" l  t( R3 V9 o+ xtrue
" {. v5 `: K, F+ b$ `( n3 V$ |' W// 校验时不传参数默认传的是undefined' |; a5 O, }! T
</code></pre>
4 V' `6 P* z7 A! s+ y, U! i  o<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' P) s; l1 ^" q( n- U2 e4 O( v
<p>就相当于是<code>python</code>中的字典</p>% A* Y9 z4 N) w& u  X, q
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
- H- Z# E/ Z: [1 M, x' p- B8 h&gt; person9 A7 s/ L8 |- P: C
{Name: 'Hans', Age: 18}
: m. }$ X0 H- K: L&gt; person.Name1 Y$ H- {+ I% Z4 t1 h  y0 d
'Hans'& P) e2 _+ b- F7 l! q$ G
&gt; person["Name"]
. }0 ~2 h( z0 @9 t$ x'Hans'
9 L" @; Z6 f$ ?6 O3 A$ w8 ^/ v8 j  [5 W% G% M) B; E& \. H: P
// 也可以使用new Object创建
' V; N2 @& w/ l8 e&gt; var person2 = new Object()5 z$ a/ x0 I2 o3 q7 X1 T
&gt; person2.name = "Hello"0 @3 Q1 f% r; y% I$ m
'Hello'
. Z, k2 ?/ `9 S  d  G  A$ G&gt; person2.age = 20* ?: f) J, u" n& O: E3 S
20
9 b# e/ D/ P# l( f</code></pre>
, D( c4 z' w7 E7 J0 }<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
1 p# i! L4 [0 L2 Y<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>7 X- h& s4 N; G% `: K
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>: w7 C" a/ N5 F0 v, l2 x7 k
<h3 id="31-window-对象">3.1 window 对象</h3>" o/ m# ]; _" _: E* N- R5 @4 f
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>: M% Y" T& e1 b3 i( \8 L
<pre><code class="language-python">//览器窗口的内部高度+ n9 w7 {* e" h: @: h
window.innerHeight
7 B6 F9 W1 G+ Z5 c; H706
  m6 ]. Y* y) w( F; _+ @& C& r//浏览器窗口的内部宽度
/ N8 j: e2 C, c4 swindow.innerWidth, H: k7 ^/ s; o
15222 k8 H2 n$ G4 `; d  g
// 打开新窗口' i/ P8 j  D) K' b& Q
window.open('https://www.baidu.com')2 T) F, z" M8 I7 B* x
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
; Y2 G$ h! b% l) s( v// 关闭当前窗口
* s. v1 p9 Q+ \) a/ Bwindow.close() : W1 O8 j2 i: j1 t( e) H7 @: B- d6 |
//  后退一页6 i- ?' Y) u4 g) E4 G! U/ l: x0 w0 G
window.history.back()' E5 ]" G% d- [! S6 D/ ~
// 前进一页
6 r; p9 J# |7 B0 r/ {5 @window.history.forward()
! E. `- W+ ?6 c, Q  N//Web浏览器全称+ N* n6 [( X& M' x# ^
window.navigator.appName
: c& C! w" K  m; J'Netscape'
+ ]: `& a- h- q& R// Web浏览器厂商和版本的详细字符串
; h1 W6 F# R) C8 ~9 a1 D# a" Ewindow.navigator.appVersion( b* q0 q- J! k; \: t
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'! K9 G* a" f8 ?& d* P( k/ D
// 客户端绝大部分信息, c- f4 x" I5 F- \. \/ j4 D2 O; ~
window.navigator.userAgent
( J% W& ^5 p% R1 K) K* C0 ^'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36': Z" H- W! j* z5 x8 s* ?
// 浏览器运行所在的操作系统4 f# `& l& O# M
window.navigator.platform- N- B% r6 }: x, e9 _9 m
'Win32'& D: ^) Y* s( Y! d0 ^0 \3 o) s

" {# X- @& a/ P. a1 F" {) A  n  |//  获取URL4 H) c( O1 _" |% _( K" `
window.location.href% }& J3 M( I! s$ I
// 跳转到指定页面
1 s4 w) c# j" M) A5 D) i- c7 D* vwindow.location.href='https://www.baidu.com'
0 \+ H2 }5 Z# z! z0 l" o) _" M// 重新加载页面+ }0 Z& U) t) ?! s/ H  z
window.location.reload()
5 [! N6 u" s7 T5 r+ Q3 }1 ]</code></pre>
, p7 X' _5 L) ]6 ]. R/ `<h3 id="32-弹出框">3.2 弹出框</h3>
# p. N" I8 P& G6 Y<p>三种消息框:警告框、确认框、提示框。</p>+ W1 [, t, Q$ B4 [6 J# F
<h4 id="321-警告框">3.2.1 警告框</h4>) h; H: Q* S2 l
<pre><code class="language-javascript">alert("Hello")% U5 l8 K2 r5 e: X% s
</code></pre>. r1 [: ?% U- e* O# {' m1 `
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>/ C  M4 d" z( L5 Q" N
<h4 id="322-确认框">3.2.2 确认框</h4>
& r+ u4 {5 T3 g( v& ~, c<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>9 Y7 U$ i! P' F3 R  t( g
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
( V# O8 l! f% I" N; ztrue
- C; u9 X( O  t&gt; confirm("你确定吗?")  // 点取消返回false
) T* E! |4 J. @, X: S* w- gfalse
. _% d' @1 M' |% L</code></pre>( l6 Q- N  k  f& y( L5 V7 V
<h4 id="323-提示框">3.2.3 提示框</h4>
7 h" y8 Y) B! k2 u. B<p><code>prompt("请输入","提示")</code></p>3 z  i/ V8 z5 k7 b0 l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>( d! t# V8 {: l/ K4 O
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>3 Y/ p9 X- j% e$ O8 G) z8 D
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>5 z' u2 _5 A% c& i
<h3 id="33-计时相关">3.3 计时相关</h3>4 r! \+ o. D& A* ]* Q( L# q
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
9 U9 R% b+ c" F; N7 N5 i! n<pre><code class="language-javascript">// 等于3秒钟弹窗
+ K$ g0 T( C' X0 ?setTimeout(function(){alert("Hello")}, 3000)
/ H" f7 K- s0 q, ^8 ?. p5 M3 {9 L# Z" w; ]
var t = setTimeout(function(){alert("Hello")}, 3000)$ }: L3 b9 S+ `6 o: E% ], H
! D- z- s# y# }# r
// 取消setTimeout设置! W1 L  e# i1 e, b! u; @) k
clearTimeout(t)
1 o+ u( U9 x) R- _, A</code></pre>" \2 c# K" I. M) H' d6 F8 D
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
. {% Y- a! [( q+ c8 r  r<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
! d* R: T% p4 b; h' {$ \<pre><code class="language-javascript">每三秒弹出 "hello" :
  }* o% |2 }+ Z1 psetInterval(function(){alert("Hello")},3000);; L3 P/ b9 A7 e4 X4 F$ f7 j
</code></pre>! o1 @4 l5 A1 g3 W" i* P, F
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>2 U6 _( c1 Q8 v0 J) \: N
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);: T0 h4 k8 ], h7 J9 w& ~
//取消:+ u3 Z" [* Q# f! t; y! t: N, H, p$ V
clearInterval(t)
5 T& R  K$ [5 Y2 C/ B) E</code></pre>% E; ~* T' J3 ~( ^( K
8 \( Q: ?* \& {5 e- X$ }( U* |) p
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-12 01:55 , Processed in 0.077152 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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