飞雪团队

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

前端之JavaScript

[复制链接]

7726

主题

7814

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( Q) Z( H* n* D<h1 id="前端之javascript">前端之JavaScript</h1>) p2 Y! [! l$ F3 p+ ^* b3 l0 x
<p></p><p></p>
2 J( D) z0 a* Z4 D( j<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>( i6 ?; w" s6 [2 J
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>! W, l9 Y$ i- t# M- p( A4 Q2 L
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
+ T) a7 _# s, n/ t# c- n它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>; `# m8 A" z; c6 o* G
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>" n) x7 Z2 m1 A! p6 D* c8 A7 ?' Z2 Z
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
( k' B$ m; F$ l( i8 Q9 ]8 c( E<h3 id="21-注释">2.1 注释</h3>6 a0 N& k1 J( w' ?
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>8 R  `2 C: }6 a- q' G& `
<pre><code class="language-javascript">// 这是单行注释
9 J0 x- T/ f! ^
# J0 j: l' _3 O/*; {. M0 @1 p# f2 i9 `
这是多行注释的第一行,$ i8 Z1 e9 w4 N9 \
这是第二行。
% O4 {' ^, \* L! C# X3 E7 K7 @' U*/
4 u: }' f* G+ |- O</code></pre>- C8 q; A, k0 n; {. N
<h3 id="22-变量和常量">2.2 变量和常量</h3>7 F2 E* o7 F4 u( G. @8 W( H
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
; E0 \0 {5 H6 O/ U, \+ ^<ul>
3 Y( w& Z! _- n. Y<li>变量必须以字母开头</li>9 b5 Q+ s1 i& P; }( P# z! _4 }- |
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
2 K$ U- m2 E! g. W7 Q<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
: p0 ?8 Z) l1 d$ @1 _. ]/ B8 N</ul>
7 A2 g8 I2 B! I+ B5 |; M3 C% U<p><code>var</code>定义的都为全局变量</p>
9 M0 h, U  p2 @4 W, P<p><code>let</code>可以声明局部变量</p>
7 m/ @$ \' O7 m8 h# y0 t5 d<p><strong>声明变量:</strong></p>( V3 H- k% e, s9 U; r
<pre><code class="language-javascript">// 定义单个变量
; @% I0 J& i. o- I- ~1 c# n&gt; var name4 }/ y% t8 Z6 L( h
&gt; name = 'Hans'" K! D5 N& C0 {
//定义并赋值
1 @* s) j% ]# Y9 B6 Y! b' _( _&gt; var name = 'Hans'
, w: U8 ~: T: E* [&gt; name
: D6 M8 w' r" A6 b: `8 l& P'Hans'
1 Z9 n* l/ j- u, ^
  b* V9 H; j" ?5 s// 定义多个变量
2 C+ c/ G) d5 S- T6 j&gt; var name = "Hans", age = 18% h& B1 e5 z9 o$ F! f' s1 u) _
&gt; name
4 e. ^5 _# v. L0 P: }5 U'Hans'
  p8 |- s' T+ i  d* a&gt; age
* S+ r4 Y, I, x$ d18
9 n! z$ p2 j+ g: t3 o7 `' Y8 @4 ?& X
# |2 E$ S) I+ o/ E( c- ^5 }//多行使用反引号`` 类型python中的三引号, |: E. [$ a/ Z" G) e, {
&gt; var text = `A young idler,2 @; P, T) K  p# R# v
an old beggar`# F4 L. p- p. `% C3 `
&gt; text
; C1 d" @+ J3 x" F5 k9 X5 S# w'A young idler,\nan old beggar'3 C- m9 R$ P# P* A* k5 m% j' n
</code></pre>0 F4 x. e% d: G$ Q" z; _. P
<p><strong>声明常量:</strong></p>
6 u3 |; N% U" K<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& ~) i/ X- k) Q" A5 {7 w  u+ \) o<pre><code class="language-javascript">&gt; const pi = 3.14- t% U9 v  a9 L! ^
&gt; pi
( A) h6 p! P2 x% [- ?- D0 n3.142 {$ S" a% Z1 V3 v
&gt;  pi = 3.01
( [- \8 E/ G0 B% lUncaught TypeError: Assignment to constant variable.
1 R: `& _$ s6 l6 W  @    at &lt;anonymous&gt;:1:4+ U7 L- j7 R: w; O+ p

" J5 ~2 y8 G2 q9 P' y1 J</code></pre>
- X" {" y1 ]- K; k4 I; a<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
* e6 S% d9 k4 f3 C# D4 D<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
6 u# h' |9 i( Y5 i# I<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>" D2 F, B- L- l: l6 V
<h4 id="231-number类型">2.3.1 Number类型</h4>
  E5 Z  \% J% {0 K7 }! V7 X<pre><code class="language-javascript">&gt; var a = 5
0 ^- ~) v) u  `  s% b" S# `0 z  L; u&gt; typeof a   //查看变量的类型  
8 ^- ^8 Z$ s: P& ?  i) Q8 bnumber! _2 Z; v; O  x; P+ Y* L
5 H* u/ P. P4 `6 r5 v: M3 U2 u% Y
&gt; var b = 1.34 q5 X8 c$ p$ k, E1 }& ~
&gt; typeof b! ~, }3 _! w6 M5 z
number. q7 Y" X- T: F9 \; M9 M8 Q0 z( c
# N7 w# m1 A, Y! s4 W
// 不管整型还是浮点型打开出来的结果都是number类型% a9 O9 y" I2 [! T+ k8 P

. ^2 x0 B5 x! j5 |  {% ^/*  R+ z5 d6 L2 J, b, H1 |; [
NaN:Not A Number' {: L7 N. H+ ?0 H; |6 y
NaN属于数值类型 表示的意思是 不是一个数字
% v: }2 a; Z, A& @4 m" c, Y*/
# k5 ^* N4 O4 \/ ?, G: O
2 g" e8 L0 l+ z3 A$ h1 k! Y6 NparseInt('2345')  // 转整型
( ~& p- U' w; D" e$ G7 _$ m2345* E- ^; V, I/ R# F% S( i' S; W& ^
parseInt('2345.5')
2 G% W) x9 D" I" l7 |( D) u# A23459 x; q( S# c% x5 g4 o5 q; e9 z  i
parseFloat('2345.5') // 转浮点型! s6 o9 w  H" t; W, l
2345.5
2 h4 }4 s( P* f2 C5 T! RparseFloat('ABC')/ J: I7 Q! ~. @( d" Y
NaN
% {: B( ]* N3 q. n2 D& y1 mparseInt('abc')
' U. E8 V2 O5 F8 |8 T: ANaN3 i9 Q) x- L- H5 ^# L/ P
</code></pre>+ B0 Y: P/ N7 N+ X
<h4 id="232-string类型">2.3.2 String类型</h4>
: r* b) R4 ]1 g' d& `$ T) l<pre><code class="language-javascript">&gt; var name = 'Hans'
6 e3 {) C7 s* Y&gt; typeof name* z' M# r% y) e$ ^1 u
'string'! ~/ R1 ?# E1 t8 y+ U

6 e: U8 i: J; q6 W, ^) f; u7 X//常用方法/ a9 ?% J1 i6 |% d* k+ d. y
// 变量值长度
7 s1 b, i0 x! m2 Y&gt; name.length7 a5 c" l+ H) b/ q7 p
4
6 _2 A' w0 _% d1 I// trim() 移除空白; \$ f1 Y0 o9 j3 y' N
&gt; var a = '    ABC    '
' V/ y5 h: j3 `&gt; a; \/ W) b% U; q- [. m8 p2 g) `- \
'    ABC    '8 t3 Q9 P( l: |1 @! T8 \
&gt; a.trim()) b4 p3 e% v0 f% n1 S. C1 M& S5 S
'ABC'8 O& ^' n8 h% Y, i
//移除左边的空白
: @/ y5 l$ e" d( x  ]) B" q+ x8 H&gt; a.trimLeft()* m% r0 o+ Y0 d# M) Y
'ABC    '5 W: [+ G4 w. R
//移除右边的空白
: i2 t5 ?3 @( c$ r( j6 U& P&gt; a.trimRight()- ]; s& Y- T0 L# G( e
'    ABC'1 m% q8 w, p( i( C. N$ a
& Y' g; E% O1 o, w- C
//返回第n个字符,从0开始
. w9 z5 I9 P. `( i2 x8 ]&gt; name
' Z. Z9 l4 _# A'Hans'
3 N+ \% u9 A2 c  R. H&gt; name.charAt(3)
% g( l, ]0 W. \. U# }: k4 D1 w2 d+ b's'
# w* J9 }* T6 w( g) h&gt; name.charAt()
' Z- h" D6 `- j3 X2 y$ s3 H  g& N  _( R'H', }5 S3 P( J' g2 t( z/ x. J
&gt; name.charAt(1)6 Y9 M! N. ^% z4 l
'a'3 E% m5 P) t$ C# f4 J8 W
8 x+ O  q$ S* k8 s' G5 a, ?
// 在javascript中推荐使用加号(+)拼接
, D( f$ N5 V6 L8 W, K3 a+ s4 E8 ?&gt; name
/ P( j* N3 p0 r; r. c'Hans'$ [  @+ P: r, Q0 J8 N/ e. i- {
&gt; a
! t, B9 @+ ~8 T( D7 B' f) Y- a'    ABC    '
3 U  s5 n- Y0 o8 d: O1 u9 C, ?( f7 ?" {&gt; name + a
4 b2 m2 k% j7 d3 e# y2 j+ g2 N'Hans    ABC    '1 z2 q  u% s& }+ Y( I% D
// 使用concat拼接
1 t2 y; p# M0 S* ]9 Y/ u# |&gt; name.concat(a). S/ g8 j) P* S7 E- v
'Hans    ABC    '
( z' k* H* Y  G8 V
' h. O$ H3 z, G, a" S//indexOf(substring, start)子序列位置
' g2 i: H! T7 \& X. {% }6 T0 l( ]# ?5 c; l
&gt; text& t  h; a- l2 c
'A young idler,\nan old beggar'+ N% d; A) N! S
&gt; text.indexOf('young',0)- u: {" n+ i( {( k
2
/ g+ Q; T; ]8 x  `
4 [$ W" J6 I" L0 J' r//.substring(from, to)        根据索引获取子序列
6 A5 `# F' d- `6 f. K# S: X&gt; text.substring(0,)
! X7 T: x" t& K! G/ ~7 g7 @8 I'A young idler,\nan old beggar'
0 A/ G: z" i% R  y$ V) m4 @&gt; text.substring(0,10)
6 p( g2 g8 j: j6 f3 K'A young id'% N4 d/ \, R  [& A
+ U6 e5 X, n: O8 N' L* k% v
// .slice(start, end)        切片, 从0开始顾头不顾尾
/ p& n$ @* j, ^&gt; name.slice(0,3)6 f* Q' T9 s. d
'Han'
) L/ m/ W- R/ P0 M% }- u2 t- T. B. M! C1 p- E
// 转小写" I- l: Q4 H6 a4 D/ h( B7 W! m. w; v7 p
&gt; name
& a6 p2 W7 ]$ n'Hans'
3 y) S. y% F% m% ^0 b&gt; name.toLowerCase()+ o. {3 s9 Y7 V9 m0 v2 T
'hans'3 z* w0 r  \. v7 Z3 X. N
// 转大写$ R  y& D9 {* c* Y' s! Z# Z
&gt; name.toUpperCase()
+ W1 j5 q+ U- V6 i* L* k9 \'HANS'7 r) U4 O3 O. E, r3 K) A# x1 \

& W5 C- V- U# a8 V, T: A// 分隔. }# g8 M" T' h% x
&gt; name
5 _* z0 K8 B: C2 o& @$ u7 u3 K8 l$ ~+ S'Hans') `* O$ e4 e! Z# _+ H
&gt; name.split('a'); A& m8 m. J! |! E  Q4 H* p. K# ~
(2)&nbsp;['H', 'ns']( P( S& _/ R2 i
</code></pre>
2 h0 @9 E0 ?0 J<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>, W6 N& K, R- a9 K# j
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
! |% m6 L; z3 q0 M. e0 a' @& Q<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>4 E& @4 g! N3 s2 [
<p><strong>null和undefined</strong></p>" d0 O  l: A( S
<ul>7 F( I% a. M9 I" s- y, ?
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
& l" ]( n0 X6 w5 G2 A* P( R9 v<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
5 y7 S" S. H; G</ul>, o6 S" W7 }- Y8 s5 H
<h4 id="234-array数组">2.3.4 Array数组</h4>
. ^$ O5 {9 w" S: F<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>/ {+ ~9 E/ `- v4 w- O6 G% S
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
! `' L, y5 O2 I" V&gt; array1- n) o, i& a. _# E" E) m
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ Y. T$ N$ f* h&gt; console.log(array1[2])  //console.log打印类似python中的print& l! I! P; f6 W
3. Q8 u7 x; \' h- f: \5 ~+ r$ n* P$ a' m: h
// length元素个数
4 Q0 `  }0 q% n$ t&gt; array1.length/ T& O4 G4 S5 r
6% e' ~* }/ G& ?7 B  E
// 在尾部增加元素,类型append
- c& Y/ q, Q! f# G&gt; array1.push('D')  _. Z1 A/ @8 X1 U8 |  x0 j
7; Q& ?8 B) W" U9 M% {% y7 Z( u
&gt; array1
6 U8 N" t, p, R  O  {(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']3 u9 u- \- |' V! g* J' z
// 在头部增加元素; C" ]+ X: ^5 z3 C9 R* Q
&gt; array1.unshift(0)1 ?2 W" N8 @! N$ j+ I' K3 q
8. Y) p4 S  D" C) L, n( }
&gt; array14 b7 g4 t, g, g. G0 Z" f
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
4 A5 N% r  K: R9 c
5 L+ j2 G! \' F6 W//取最后一个元素/ y3 C  N1 i! K4 n
&gt; array1.pop()& M8 ^; S4 ^5 o' ~% A
'D'3 z8 P% f; \( y
&gt; array1
8 ~" h8 e0 J- A* A0 h4 }(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']2 N5 Q8 r  M+ h
//取头部元素
! l* y# ?# _$ o5 L' u&gt; array1.shift()
' L+ j" H$ ?6 I0. P1 v( Z8 D! o9 e& E  `: ~
&gt; array10 t8 G' y' _& H* D( z" {% ~
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ Y4 m- \8 a2 A$ x3 O
/ v, V/ _4 i5 I- ^5 B; J" X//切片, 从0开始顾头不顾尾
& I! D$ j  U( F0 C6 L1 `- c( h&gt; array1.slice(3,6)
/ K* i6 }' t) j+ ?4 \5 m$ y(3)&nbsp;['a', 'b', 'c']3 S- l" H/ [2 p; K
// 反转- F& @4 m8 ?9 b+ C
&gt; array1.reverse()
4 I  m8 U' g4 A3 k! N$ L' ^- J(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 e5 y9 }; I; c8 N" d% n
// 将数组元素连接成字符串) F  e! W0 B# i) r7 K3 i' j6 b7 S
&gt; array1.join() // 什么不都写默认使用逗号分隔: v7 J+ D+ R( W' F
'c,b,a,3,2,1'
1 Q% R7 O1 c( x( L/ o: O/ e" A&gt; array1.join('')
5 V* t, C4 X5 z; o'cba321') T; i( a" C0 S. u1 ]+ j
&gt; array1.join('|')
: c& I$ ?! S) J* N3 P8 ~# p0 a'c|b|a|3|2|1'
, p9 Y& c" ?/ o7 u* H( i5 u$ U1 |; W2 K6 P& q& x
// 连接数组
) d5 V+ L- I) w/ i. c: {2 u&gt; var array2 = ['A','B','C'], [" z4 f0 G7 i. T9 \
&gt; array1.concat(array2)
6 C7 [4 j/ r# ?3 N0 l(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
' k) l0 N1 d  O, U' l9 z4 a% D* N, \- S0 a7 b
// 排序
8 N8 Z( A) d3 w  {* b( {" r( F2 l&gt; array1.sort()
7 @( w( e" _1 l% C+ I2 O; N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
: m# ~5 ^  c! P; l2 v
- ]2 i" A  {4 a8 f; `, Q// 删除元素,并可以向数据组中添加新元素(可选)# a/ K$ V  x2 b
&gt; array1.splice(3,3)  // 删除元素
9 D7 X) Q# S1 ?1 _* y(3)&nbsp;['a', 'b', 'c']
# p; ^2 h! b  n# D&gt; array1
6 G* q2 n( N, X4 r9 w/ q0 M(3)&nbsp;[1, 2, 3]' L  A% `% H% t$ `$ t
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素6 ^2 R9 s4 S/ e7 z
[]+ i& ~3 ^" a  f5 E5 w% l+ o+ G" @% N' n
&gt; array13 T1 `" C$ U# U9 X9 Z5 t
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
4 u1 j& h4 ~+ p& {7 _% s+ U/ g* E% @/ Q  {) c1 [
/*5 k% D7 V, W5 K6 q1 M1 e' Q
splice(index,howmany,item1,.....,itemX)
: H; r6 T2 g) j- L; ^) `( tindex:必需,必须是数字。规定从何处添加/删除元素。: H8 k  j, k# g2 R0 Y- J) |; n+ S
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
8 `4 \# C7 k$ ?item1, ..., itemX        可选。要添加到数组的新元素
" d7 ?7 @# I. u*/
4 N2 w- w! D1 z6 J  m5 u+ Y
0 q6 q- }6 E- a. x' }+ N// forEach()        将数组的每个元素传递给回调函数
+ N, n! s( E$ f/ j+ a( v6 J5 r&gt; array1.forEach(function test(n){console.log(n)})1 c/ ]/ z7 s. C- S) g
1$ I$ {- f6 Z+ N& m% u# a: z
2" [$ z: q) E4 b2 Y- F7 [
3" p0 @5 d6 r& }; ^* z
A' _! a4 j3 m) x  e" F: t
B3 c3 W: h" ]4 L  @  m& N" ]8 k
C
; D; k7 T1 l2 z" ?// 返回一个数组元素调用函数处理后的值的新数组0 t. Y0 |1 F5 C* m$ D
&gt; array1.map(function(value){return value +1})$ [, t+ @$ c: }. t
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
/ S5 ?# L& r8 n# t</code></pre>
0 L$ |: }- H1 N' W# }- l, J<h3 id="24-运算符">2.4 运算符</h3>
6 ^/ u& |( @4 f& L<h4 id="241-数学运算符">2.4.1 数学运算符</h4>! \$ v: v5 t' S0 x2 G6 Y; g: {
<p><code>+ - * / % ++ --</code></p>
3 ^; s$ Y  ^  B! }, x+ E3 O<pre><code class="language-javascript">&gt; var a = 6% T+ H! S/ ~& l
&gt; var b = 3
% I7 _% _! v" ~' B/ |7 V! t// 加4 v3 }: _3 ^0 m" ?8 c
&gt; a + b
3 d7 G1 f8 {; v1 ^- }9" R) ?; d' b- j0 Y9 e9 w0 h' ~; L
// 减
( x" w( L; ?4 g( U0 E' e&gt; a - b
2 S7 G' G( ]# [3 W% J8 G: F# D, t3; w8 B- _$ c% O
// 乘
% y1 _) J" _1 u" z8 @4 g8 J$ T&gt; a * b
3 E' ]6 _9 [; ]  L9 e18
6 {, q6 g* r8 N3 N// 除
/ C. ~, G9 p. ~( n# R&gt; a / b
8 a* [8 G* |: ?6 n2
8 @7 t; ?% {7 C// 取模(取余)/ _6 Q+ x' L5 ~8 Y# {
&gt; a % b
# ?+ ^$ o8 ?' E. t1 |7 E6 p0
# Q3 L5 v5 d' {/ f( C. F- s- Y7 y// 自增1(先赋值再增1)4 }2 e/ H8 a+ Q1 _1 F
&gt; a++
* j/ L! m, h8 y8 ]  @' F6
( B7 S9 p% X7 w! J- g2 O6 [$ j3 b/ X&gt; a
; e2 g8 r- q$ F0 s: p% D7$ m4 B$ Z4 S7 u7 s9 Z" V
// 自减1(先赋值再减1). `0 y# G9 t( l! {6 R
&gt; a--% Y7 n. K; d5 _5 u! s( N- c
7
: [' ^3 m( W' v6 m; _" U) Q3 [! y&gt; a5 t9 O# h7 k4 x9 F  |7 ?
6
" |1 D$ z' f- N$ e( `" d/ j9 Z// 自增1(先增1再赋值)
! O5 O0 h$ Q, O  Z% Z&gt; ++a
8 |# y7 |( G, G: G7 k3 Z7! D5 \$ W3 n. |
// 自减1(先减1再赋值)
0 g, w: P  W" g( D9 w&gt; --a
. O$ Q+ K# [$ J) o& |3 W" s6
" T& z1 H5 t+ r. v&gt; a# z3 x- Q! D- x4 Q; X/ d5 \
6
6 F3 B! Y/ m- m5 Z& [( r9 C( ~+ z
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
' i& [2 E8 L3 i3 Y</code></pre>
: v- t& a% z! J) p8 x<h4 id="242-比较运算符">2.4.2 比较运算符</h4>1 g' v% Z" a; x9 n9 Z8 Y# W
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>/ _, r# j8 I, t
<pre><code class="language-javascript">// 大于) T2 y( g! m& E6 d# ]! p8 p
&gt; a &gt; b/ q, Y$ s3 ~7 {2 V
true" A! c2 S7 d3 n. l8 u
// 大于等于
* l& @( z6 u- W/ f& d" \&gt; a &gt;= b  V; M4 N2 U) h! n4 x
true2 g2 }/ ^2 y) S/ Y1 z5 s, z
// 小于
1 n1 F8 s; v" ~8 }&gt; a &lt; b
" T- X5 i6 k* s: E* Q& L2 c- V0 Sfalse0 n" ~+ k" }; W$ O
// 小于等于
7 V, q2 {5 N0 o" m& }&gt; a &lt;= b+ B. U% _2 e# Z7 w7 }
false
* f) G# n3 I* O// 弱不等于" b# h) a: i7 f% H& _2 B: F
&gt; a != b
$ N9 |5 x. {) D4 F- A/ \4 i# @% Jtrue
( ?$ h9 j+ b. j: f// 弱等于- W% X7 ]8 V5 [" G# @
&gt; 1 == '1'. G- _. X0 D! k8 P0 y
true4 a- R# j# [5 n9 P+ _6 Q
// 强等于5 i& `3 s  k1 k+ [
&gt; 1 === '1', t% D' o4 p# w, Z! z& l
false
4 b" p* |9 z1 z" d( y- i// 强不等于7 H* ~% b+ d* h+ {) A: ~
&gt; 1 !== '1'
! ~6 L* q/ o: J2 D* Y8 ttrue
0 y4 B' W" @2 Z. e' n& R. M% q/ G. x" t
/*
& v' d" u# E5 M; L6 LJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误& k  f; @7 W3 L5 B: s6 ^
*/1 i- L' y# y! u
</code></pre>0 I5 g$ l# ]! O! R3 z
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>4 d! T) i7 N' e: V9 P" x1 _% B7 L' D
<p><code>&amp;&amp; || !</code></p>
7 L) M; ]; a3 D" _3 E% U8 w5 q' ^<pre><code class="language-javascript">&amp;&amp; 与
2 q+ K- g; D: v|| or
  w9 F( R8 p4 @% n! 非$ _, B& }' `% b
</code></pre>* N! V' ~% A' ~) R- Q
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>4 G/ z# i8 H1 z- V7 q0 ~( g) y
<p><code>= += -= *= /=</code></p>7 h. F. N* R, }
<pre><code class="language-javascript">// 赋值
4 d0 A- Y( v6 L, r& y7 X. |&gt; var x = 3
6 a; d* N! i5 a' z- {  p8 `// 加等于
: c6 X& S: F" L; p/ U&gt; x += 2
5 H, \' y; g; U9 L+ ]5 e' D5- h$ G2 _5 s+ F& Q
// 减等于
* T' O& I% F0 D5 ]4 _&gt; x -= 1
' e) \0 u2 |/ V" i4 l* F4/ ]8 g' j! W6 P
// 乘等于, c$ X7 p6 C6 U* n$ s) g6 q1 T8 e& d
&gt; x *= 2
6 V1 Y( S. N4 |) c80 L8 e, f1 F* u4 z/ @: ~
// 除等于& B* l! a: r) z* T& X
&gt; x /= 2  h( x4 F0 o# }" ^
4  U# ~( w: i. {+ h& _# i
</code></pre>: {- ]  Q+ {) ?) J2 w. T4 S8 X
<h3 id="25-流程控制">2.5 流程控制</h3>
$ D  F' v+ s& O8 \: s5 P3 [<h4 id="251-if">2.5.1 if</h4>9 U  R0 _5 j2 g
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
+ P3 X1 S: u# g4 ~8 h
2 Q, G' U7 z5 K& }  A&gt; var x = 3
2 f! }3 R" k: p&gt; if (x &gt; 2){console.log("OK")}; k% W/ y$ a* w- r
OK
, g7 |! l/ W  V! s) T& e1 P7 E/ U- X* {. Y) I
2, if(条件){条件成立执行代码}
. {2 ]7 m" \1 f" d        else{条件不成立执行代码}
: B" P) R* D+ ~% ]5 V! E/ N8 R" Z: s$ j1 J3 M
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
5 f" R/ y/ V# W3 W' R0 t- T'NO'
- }% Z$ i- n  F- t- Z% r  G
3 k; q* }1 J- z& G% Y$ ~3, if(条件1){条件1成立执行代码}
% a0 G' g: x5 R4 Q        else if(条件2){条件2成立执行代码}
9 u  p- M+ b& K! L& M7 M    else{上面条件都不成立执行代码}8 R$ z6 Y  m- v
  q# \- |4 p$ V% n
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
# ]( @) H2 i+ [  K8 I Ha
/ h, b- g& P' _. E) _% A</code></pre>$ k. k" x) s2 u
<h4 id="252-switch">2.5.2 switch</h4>$ T+ F7 B7 Y$ k# O, a( X
<pre><code class="language-javascript">var day = new Date().getDay();
' I( t+ L% u: h, y& P, U; O; ^; oswitch (day) {
9 q$ V% c: u' e: T  I  case 0:' {( m5 b/ l, D, j& s$ H: I7 G# n, T
  console.log("Sunday");  S- J5 ]. S. I, F2 ]; F
  break;
% g7 h. [5 h# o4 T  case 1:4 S, D9 a5 i! G# R
  console.log("Monday");/ `' U8 u5 r' r& X- H
  break;
( b+ h. L: i9 I  P% b: h. T+ s1 v, ydefault:: f& `* X. w$ Z* R- l
  console.log("不在范围")
6 b3 M( S, \! ]3 e  H& {. |4 q, x}
- }& A- }: f$ b1 G. _% ` 不在范围' R; n+ I8 r! q
</code></pre>
9 r2 j  v- W4 ?9 {. h; V8 h7 }; m<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>% {0 R" M5 L3 i% Z
<h4 id="253-for">2.5.3 for</h4>
* i+ M! u; ?$ S<pre><code class="language-python">// for 循环
/ K: ]7 l, v' p        for(起始值;循环条件;每次循环后执行的操作){  K4 y& |% u6 X+ p
        for循环体代码
# R0 `" {4 K* V; ~$ g    }
5 ^9 a. m$ o1 N& M3 R; Z; c* J& N) s! h7 H# j1 G
for (var i = 0; i&lt;10; i++){
/ O3 A; u4 n7 s. }0 T) \3 b    console.log(i)
# b" d4 D6 {1 M% Z4 }}/ o# b) K: F3 y) w0 `8 r
        0+ {! P) A5 f: z5 F  e
        15 K5 R8 [& ?& l$ c& I3 L) o" c
        2
5 ]  O* V5 a$ q. U! Y        3' B! h5 [$ L/ [: P
        4
! h) r# t. Z/ q1 y9 ~* w        59 M! r! L: U# ]* ^0 o" g* G- M' g
        64 N; p( c$ }% W
        7  _# G" V; w, u! L
        8
/ ~; ]$ Z' f, S3 h% m9 ]$ L. b        99 M3 o+ X: ^( z- F# M
</code></pre>
( K& b- n( M0 @8 V* O% Q<h4 id="254-while">2.5.4 while</h4>: R# {/ J0 f. \" C" z8 F
<pre><code class="language-javascript">// while 循环
; L- a8 r! o, B7 N- ^7 W6 {        while(循环条件){
$ B& Q. r+ ?/ I$ ~5 b1 U7 l        循环体代码
9 H/ ]3 T, t# y% x    }3 S) _7 {9 O9 v* ~! H" G! T+ o

  L' n; `' ~2 C6 N&gt; var i = 0
: ]" t1 A- V& p7 E$ g* [&gt; while(i&lt;10){, `/ R1 Q: C% d0 `! q2 \2 n" d; m! k
    console.log(i)2 O% q3 R" E: V
    i++
5 `) t  ?: M+ u. w* x}8 |5 A& i, S' }' y9 q1 P* S
0
: d% R" s5 \! l0 | 1& v# K# z8 l. _; h6 q
2  O4 F# j* C. x# X
3
: I2 N) H7 I4 ^# k5 k9 a 4
4 }+ O2 w1 B! X 5! z3 `0 H5 ?# Y* O2 ?9 z0 H. D
6; M7 o& k' {& E6 c# p" }9 K6 _( ^
7( Y& x" U7 q( s
8
) g- [. ~9 A; Z4 ^ 9& n: b) I# d) ?
</code></pre>! M/ ]8 y- \3 d0 _0 {
<h4 id="255-break和continue">2.5.5 break和continue</h4>
& V* I% R0 Z* O& L<pre><code class="language-javascript">// break
4 j+ i/ B' }) Z3 I2 H  f1 m2 E' p& Yfor (var i = 0; i&lt;10; i++){
+ M) a6 n$ H$ V" o" t/ i3 v    if (i == 5){break}
1 O9 k; U+ I! h1 N* n    console.log(i)
0 K. k5 p* x! E, [# U* s7 q6 i}
4 W! G: w" H! Y 0  D" s/ r9 P7 C- d
1
* R- \8 S* C; [: K0 ^9 K0 W 24 A0 S# M& }7 [* W# R
3
7 [( Q( I; t* A' v& M 4
6 {' j" r" L" d; s' U' E// continue
0 P  }! L; Q0 r6 e6 ?for (var i = 0; i&lt;10; i++){
% A% \' L' ^. _( ^9 |5 _  R3 o& O    if (i == 5){continue}
1 J& b, [! d5 v: _' j3 s( n! G$ Z    console.log(i)
* b1 a7 z! C5 J% U( R# G}# g0 o6 y8 c) R* ^
0" P4 w2 K% e# v; L
1# m7 W! n( r7 j1 Z; K8 T
2
3 b' s- P: r, P- W2 a1 e' _7 z0 h 3
) G( @: Z1 C8 f$ }- w 4
6 N; x5 X' b% J8 S) ] 62 g5 H( I1 I# ^0 d0 B' S
7
; X2 c' u+ u- B+ S 83 a- ^, G5 H% d- j1 Y! c9 d+ g
9
2 S) f6 @* o' N" @' A; {4 ?1 _+ o; k) S% P9 Q7 s" S2 d
</code></pre>
) |) R; D0 G& u0 e) h/ L<h3 id="26-三元运算">2.6 三元运算</h3>
/ N- C  ]7 B' S) {4 m<pre><code class="language-javascript">&gt; a
$ U  Z" X, m# q; E6
1 v3 f4 ~) k: x% J&gt; b( A4 }8 g( [: e5 B6 B4 D
30 z. W8 ~6 |6 i0 }1 s, I8 `

- ?+ ]9 `: S& D) i% _//条件成立c为a的值,不成立c为b的值
& J- Z8 N# S4 f- s/ S&gt; var c = a &gt; b ? a : b
) T, h! M& ^5 p- O&gt; c% A7 b1 K0 _3 F: `+ J
6
9 b. K+ p* Q( B% T% B' J$ d  S2 w5 G; Z$ L% k! o$ G
// 三元运算可以嵌套
: e: L* V6 m! l8 j% a</code></pre>8 \0 a0 x( h/ W& Z
<h3 id="27-函数">2.7 函数</h3>
0 x; m5 E; J: Y: H% p8 L<pre><code class="language-javascript">1. 普通函数
* C+ [' t' u/ G( j1 n&gt; function foo1(){) n4 J  A5 e3 @
    console.log("Hi")
+ X# o* `: I) q6 y. A/ q}7 c+ w% I6 j) W& ]" _# ?) v
" L+ ~) p' f' F, N
&gt; foo1()
- |  u% Y2 s- x( e        Hi/ ^& t" D- I7 b% E
2. 带参数函数- o/ G$ O: T# S5 w3 G, h0 j4 c5 ?
&gt; function foo1(name){
- E4 P' N* |+ Z4 econsole.log("Hi",name)  l8 u% k' [) i2 x5 ?- R6 B+ L4 ?
}4 K; K2 M* R8 P5 O, k2 T3 q+ H+ {

2 z" b) x- J: C6 @6 ?&gt; foo1("Hans")4 ?6 Y6 Q: v. r7 |
Hi Hans$ a( ^! @3 g  V  {1 Z4 }
9 I! V" {8 _6 }; P
&gt; var name = "Hello"
- i4 N; U. i+ F+ ^5 @5 h6 {&gt; foo1(name)
( m/ E1 D. x7 E% zHi Hello0 S6 L* ~$ v6 U& L8 v- o
/ I& Z4 i5 W; y' l
3. 带返回值函数
3 F& ~1 K. \% U6 W' P&gt; function foo1(a,b){9 }5 i) C8 Q5 Q& R1 _3 i& `1 b
        return a + b   2 p; [# x7 L. h( F' a
}
5 Z- I" Z0 Z- ~) g- o) w7 }) ^&gt; foo1(1,2)
4 v" R# s: O1 \. y) k3
1 Q! L5 v& Q, x# K, h9 O* Z&gt; var a = foo1(10,20)  //接受函数返回值
, x: d$ [; y& @2 ~8 B2 o/ Y; f&gt; a
6 F4 R3 k% D& w: u; Y6 S/ m# T/ I30% q0 _+ p4 D$ a9 z* u

; ~. D* \! \" O' @3 v! z* z4. 匿名函数2 m0 A8 \+ f7 {3 N: o
&gt; var sum = function(a, b){
2 A% d# T% C3 V+ j5 r9 l- @1 E  return a + b;6 Q! I) j( R& t2 k: c4 `/ \- D% \
}0 W( e" q, E. Z: B0 r& q0 w
&gt; sum(1,2)
6 q0 n% n& `# N" I3
& g8 y5 Q; ^  w3 m& H; ]& V' m3 N0 C& Q- h! f& c' r+ U- W
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
  N: G) e9 {% B" x' \&gt; (function(a, b){2 u2 e+ u- d5 y& J$ V( |9 H
  return a + b
) g. z8 J5 J7 z0 l5 b})(10, 20)- D( k8 t# S: p% r# C) R3 f6 F) t
30
/ P9 m8 \5 C4 l2 t" g- y+ y: d- v3 p+ j% v6 R
5. 闭包函数: v  d  C; r  f: \3 }% ^
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
: S1 n4 [% @+ X* L4 Q# ?var city = "BJ"
: D' ^# D1 ?, c% v9 C, Cfunction f(){
$ ]3 Z* T. J5 N" I4 r9 t( @! k5 O    var city = "SH". a4 f# p( F7 Z% Y# X6 ^7 [0 d
    function inner(){
$ F3 H& e* ]' ~9 e% M7 y        console.log(city)9 c% d& a3 K9 C2 e& ]( m! N
    }
2 G8 b5 F3 O2 W9 j    return inner/ v: s1 c  R6 |
}' \6 i- o- @& E
var ret = f()& k4 {* c  v# o1 G0 G' Y
ret()
/ C  P: i* W! q% `执行结果:5 C7 N& J% q5 Q3 S( J
SH5 w# ^' X$ M" |4 Y: E8 i9 P
) R, o( q% y& r
</code></pre>
" b, F- p* O4 D; l0 M<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>4 M& n6 T* Z- H' m
<pre><code class="language-javascript">var f = v =&gt; v;% A. L) F  D+ ~# ?/ A" @) C& x; _
// 等同于
0 H9 N# i: V: X: i8 i% Fvar f = function(v){
3 a8 q- I' `5 ]  return v;
& d( l, W" W* y6 A; i}% W7 G" Q6 g/ `+ x
</code></pre>
( l  ]' ~; f6 o: D+ n! O  \0 t<p><code>arguments</code>参数 可以获取传入的所有数据</p>
  ~' k& {) T  T; n5 I<pre><code class="language-javascript">function foo1(a,b){) s+ Y6 c/ {# _3 O, @) A3 p0 L
    console.log(arguments.length)  //参数的个数 0 v" t  o! Q3 h# g; [0 v) k- r/ \
    console.log(arguments[0]) // 第一个参数的值
* u: r5 S8 W& d% E+ J8 [! K+ Y        return a + b   
  }5 b* l8 \/ V" r: H}4 X7 `: d, @3 {8 G" e" J# a) l1 n
foo1(10,20)
7 H" V  M. f3 [  t. c结果:
" Q; o' e8 X/ }! T3 P 2          //参数的个数
0 O# K8 O) x0 u$ y0 `4 b10        // 第一个参数的值, l) D6 E, C8 ]0 K3 k; b
30        // 返回相加的结果
' Y) O+ N0 O+ s5 v</code></pre>% l* o3 S1 e* L6 F8 f- M
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>5 Y4 U/ t4 ]" e& `' u5 h% \& M. n
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>- q0 n1 h2 A+ A4 `4 m$ o/ ~
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
9 I& S: y# K6 O- [1 J<h4 id="281-date对象">2.8.1 Date对象</h4>
; o/ L: j. g1 C! c# N% V) f2 k<pre><code class="language-javascript">&gt; var data_test = new Date()% E& O: u5 T0 f
&gt; data_test7 D8 e2 ?0 u  h) N% `# j! z
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)2 E2 q7 r) @3 ~6 O% k2 ^# Q2 s
&gt; data_test.toLocaleString()
( a9 }8 {. u1 f) R* x- T( `'2022/2/11 下午9:44:43'
( m3 h/ a8 e3 J6 b9 c& j4 Z* L3 f# n/ A( Z
&gt; data_test.toLocaleDateString()
( q, B% R* d/ {! ~' Q. d) F'2022/2/11': E7 t* A. e9 J# W: ^/ z4 x

- M! I1 \; V4 R  l3 d: H  }&gt; var data_test2  = new Date("2022/2/11 9:44:43")( s" I1 t6 V' z' o8 \9 T
&gt; data_test2.toLocaleString()
! i+ n5 W2 Z$ X9 l0 b! k'2022/2/11 上午9:44:43'9 e) C' b% R) j  D3 d/ Z
( c* Y* a+ K% S) T7 ?, ?7 a& M8 X
// 获取当前几号$ w0 Q$ b. l9 S* @+ h  R$ n/ Y
&gt; data_test.getDate()
; w, {0 j( ^9 c& {1 G$ r% }11, B3 H! r$ o: @$ Y$ H" b% _
// 获取星期几,数字表示
! d$ x7 F4 {6 R&gt; data_test.getDay()  
' ~) m3 f! Z( |- d+ S$ _& v; M5
! s" J7 r5 k1 D7 i// 获取月份(0-11)
/ M) r3 |' ?0 d, z" A/ A3 |5 R&gt; data_test.getMonth()* N" d1 u* W! Z) e2 I; n
19 q4 J* D8 k% \; y0 M3 W( ]  k% \/ x
// 获取完整年份# _3 e, v1 {# N* ?
&gt; data_test.getFullYear(); y& N& L: X) w+ R
2022
3 x" P/ I  J- C2 W' F6 G// 获取时
. h3 o; |% `' j! d&gt; data_test.getHours()
& v. i: p7 T+ I  W21
8 L9 E) q2 Q" m% g4 k% X// 获取分
& d% m9 p7 E1 {- G8 Z' M&gt; data_test.getMinutes()4 ]( Q4 i5 j- v( ^* E) a6 B: {) m
44
1 [" e% a/ F2 p( v; W3 c% x  T// 获取秒
% o+ c8 c) ?+ r. o8 t: N&gt; data_test.getSeconds(): Z9 V' s6 x" ?* }" G7 ~" A
43
. c: G/ o$ ]& |4 |1 k! E// 获取毫秒: F$ N8 z7 e" B
&gt; data_test.getMilliseconds()0 a2 g/ E& H5 k8 O
290
2 f  P6 B% }, _1 E- ~// 获取时间戳+ T; f* p& J1 J# x: J* h
&gt; data_test.getTime()$ [- m6 Z( |7 ]  v! v
1644587083290$ e1 O$ |/ q* K8 x: @
</code></pre>3 F/ z7 }$ i8 o' z
<h4 id="282-json对象">2.8.2 Json对象</h4>
( ?( F' p- j: J! E* D. x* S<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串7 U$ r. _" D& w
JSON.parse()  // 反序列化,把JSON字符串转换成对象+ s! X8 w% j2 |/ F

& K( \9 g: p4 P+ F( |// 序列化
' Q* h" Q9 Q. t! W  G&gt; var jstojson = JSON.stringify(person)
7 U( v$ \5 U# J&gt; jstojson  ! }( I0 D3 q# H
'{"Name":"Hans","Age":18}'+ K, \- n- [) o

" j( N: q6 e0 e. _: k% M- H4 n// 反序列化
- ~' t+ b7 A5 b& E) Q  H* U) U&gt; var x = JSON.parse(jstojson)
! O+ G+ S' y2 T% f/ ]2 X; G# A&gt; x
0 H, R6 [5 ?" J, J4 }6 n" ~' A0 m{Name: 'Hans', Age: 18}
8 V$ C1 D) O2 g' `+ {1 `6 A&gt; x.Age; I) W$ b, }* h- x9 [( C
18% Y. ~+ b+ n+ S2 n4 d
</code></pre>/ `1 ~$ L1 O7 o8 c
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
- Q- v5 T- I$ h5 l. F( Z<p>正则</p>
% J! o8 ?! s- n2 `$ R<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");8 x: \4 B! ?: k) D; @9 l& [& F
&gt; reg18 R$ r% p  H( U8 N& k
/^[a-zA-Z][a-zA-Z0-9]{4,7}/3 R2 j) h6 f7 X( }4 x5 s# C" B
&gt; reg1.test("Hans666")
9 N1 o/ Z! _: v. \true# p  R8 b% N7 _4 S9 i) G- D4 t
4 z" E- s+ n$ [
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
1 {, [, U# Q/ @1 h$ a+ Y&gt; reg2
& i5 ^4 L7 f0 Z$ y) O6 x5 t4 u/^[a-zA-Z][a-zA-Z0-9]{4,7}/
5 G3 z4 S  V* b) I- N6 A6 W&gt; reg2.test('Hasdfa')
" \1 J: m$ W6 g9 J: Wtrue6 {: Q& q8 J+ Y' I) `% X* S4 W

4 t' p  v/ U7 X- z全局匹配:
  r0 V& A  @4 C&gt; name; X% t, Y  ^: L1 R2 F
'Hello'5 J; _+ }, e% p( e& W# W" v0 D
&gt; name.match(/l/)
" k8 L) k: v: E9 S7 o; I; w['l', index: 2, input: 'Hello', groups: undefined]2 N! @7 t4 u9 g; U

1 s. |; V5 R+ s! H, H5 N4 P&gt; name.match(/l/g)
" m5 T1 Z+ Q7 Z* c" m0 j(2)&nbsp;['l', 'l']
5 D" r) [8 J. o! Y// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
/ y6 k3 L( Z; F6 f3 h. m' S! A6 e6 f0 L! S9 ^
全局匹配注意事项:  @' N0 ^% p9 I
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g  l/ i3 U; f4 Q, [2 e( C
&gt; reg2.test('Hasdfa')
1 a" a' t. _& _: O/ ~" p4 Z3 Rtrue- p/ ]+ f% s/ V0 x& `8 Q2 @
&gt;reg2.lastIndex;) r( Z; }3 a- ~2 d/ R
6
5 `' j& y/ \: u" Z&gt; reg2.test('Hasdfa')
  q: X# ?2 p8 Ufalse
8 C2 l5 N& l4 v3 {. q3 t&gt; reg2.lastIndex;
: B' L8 \6 h) Y' V/ G2 X3 E  ]09 {% A& G( H) [4 U! h3 _
&gt; reg2.test('Hasdfa')# S) d5 U8 K8 O6 v/ r# u7 B
true
) D2 K. }6 K% @4 u) y&gt; reg2.lastIndex;: i4 n9 }4 b3 ^) s
6
# g+ Z) W4 v+ e8 Q&gt; reg2.test('Hasdfa'), W3 }! h) ?0 ^9 o3 G5 x
false5 K0 \5 _6 r+ W" h- v  O
&gt; reg2.lastIndex;% S7 }6 [( L- h/ L8 @: _
0' A, |8 I) n' m  K
// 全局匹配会有一个lastindex属性* g6 ]7 x  y1 p$ v- N' \- i5 A6 W1 ~. w
&gt; reg2.test()
6 S' [( n( B1 g- C; _" Gfalse
3 P* X" Q/ q! K% |&gt; reg2.test()
* i, L, b; @4 G8 Y3 ^4 d1 etrue
- S' L  S  c  n" O! D' X- D, X// 校验时不传参数默认传的是undefined
9 ?* W  Y5 U8 t2 R" H4 T</code></pre>$ n4 m1 M  q& [' a7 m5 T/ s! k
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
9 v9 b! E; l  [4 o$ b0 Y9 K# K<p>就相当于是<code>python</code>中的字典</p>% P0 ?5 F5 k/ h4 \" I2 x. A
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
1 @" e) r4 z& {3 z- R1 V+ ?&gt; person
) Q  a8 m; A, u( Y: [{Name: 'Hans', Age: 18}
2 H& V/ A4 w  A# }&gt; person.Name8 I% V* {; `0 x) P* J
'Hans'
& o, p1 a) W( L/ |, o' G&gt; person["Name"]) L4 k% Q* E: K) c, j' Y/ H, [
'Hans', y) ~: O+ H) x% |2 }; f$ n
$ x; P  x$ M7 m/ p
// 也可以使用new Object创建' L* e: r7 O# l. L& ]6 ]* e! S
&gt; var person2 = new Object(); \  P2 t% z4 N
&gt; person2.name = "Hello"
0 }3 S/ S2 h: C3 ^! g2 I0 e'Hello'6 r  `+ O/ h9 d# W6 \( n. \
&gt; person2.age = 20
/ d# Q- p7 v- d/ d20
9 A  q  G: @! }/ r0 N% p: m</code></pre>
0 t: r6 E- ~& U6 |: s<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
- {# k: v$ }$ Z/ g# W7 z2 X2 {: W<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
1 a% m% J' W0 z% B- e<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
3 W! F8 H/ L( W4 F; q/ U<h3 id="31-window-对象">3.1 window 对象</h3>
) T5 c6 c: }4 F; W; u" C<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>3 ]7 g1 L: l/ {* @/ y8 R3 s
<pre><code class="language-python">//览器窗口的内部高度
( @; @& R' a0 z3 Mwindow.innerHeight 2 q5 \8 ~5 I/ G4 S5 C" i
706% y9 T# p3 {% C3 P- g. E% S4 J
//浏览器窗口的内部宽度
. p' |) `  }& M! u0 h* W) x6 t  twindow.innerWidth
) G/ o! H& B3 N& O7 r; H- c& Q1522. P) ]" @6 F9 _* w1 i; x3 A
// 打开新窗口: n* b' \% q3 z
window.open('https://www.baidu.com')6 O5 U5 b- g$ g- V8 D/ U  d0 g/ u2 g. y. Q* l
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}/ }* F" v1 a. z  d  n) o; _
// 关闭当前窗口' E* }- B( m* l9 m' ?, K1 L% }- y9 ^' E
window.close()
# K. c" b" c6 l7 I7 R! ^+ d6 _, n4 q//  后退一页
4 U& I( r( W0 n, P: [window.history.back()* f( O. G, G$ i# j
// 前进一页
5 n8 z1 u  V+ u- ]3 |: owindow.history.forward()
* y4 \$ R" R6 e//Web浏览器全称- I. r1 A: h# o; B/ G0 V# R
window.navigator.appName
& x' _+ S# h& S0 N6 A/ u, M'Netscape'; G" }1 \4 x& P# f/ Y9 O
// Web浏览器厂商和版本的详细字符串1 O* D: v$ ?' M+ q( i8 g! a* U" d' X: R
window.navigator.appVersion
) \3 }7 e- I4 q6 h  V'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ a, L8 D/ y+ G: e: B// 客户端绝大部分信息7 Z) f7 a( W+ ~$ z9 ^' K& n
window.navigator.userAgent
; T9 U& F: [8 U1 W'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" C! K0 i& P+ q" X8 [7 n4 a; j( h// 浏览器运行所在的操作系统
% Q) T1 U2 ^. r+ N3 w5 I2 h, |# }window.navigator.platform
' k! O7 C' d* T'Win32'6 c* N3 V4 [, V: G4 N  m* y

6 U: J0 M6 F, i# |; f. T//  获取URL2 M- K1 v$ b6 m0 k3 f5 L- p
window.location.href
, F) P9 N7 b- S// 跳转到指定页面
  t1 @" i+ R+ z! T2 U0 X% kwindow.location.href='https://www.baidu.com'
8 i1 L' X, ~/ j# T" G1 s// 重新加载页面% E/ D; G7 D, ~; {, C. P! ~
window.location.reload()
  h5 [) s* x" l3 D</code></pre>
& {8 u# m5 @: n% o% B- I% S<h3 id="32-弹出框">3.2 弹出框</h3>$ t: f+ q3 ?3 _3 @: G
<p>三种消息框:警告框、确认框、提示框。</p>
3 G  N! f& Q; p' c% o4 m% ?  K<h4 id="321-警告框">3.2.1 警告框</h4># A$ D0 e: B  J, h5 v+ F* a6 N
<pre><code class="language-javascript">alert("Hello")% p" U6 h6 l3 j2 w( [
</code></pre>
; C  f% v3 J" a" E' [! S<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>6 O8 n* P1 ?; r
<h4 id="322-确认框">3.2.2 确认框</h4>' j) _  Y2 P0 v
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
2 s- ]! T8 b. }/ `/ g<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
1 \5 h. v6 G/ b' R: _2 U& {true
- a- P9 Y! l" Q6 A: {* X# |&gt; confirm("你确定吗?")  // 点取消返回false
) B3 }" e% C' ^) }false* ?% P! s/ G# F: ?6 ?1 ?# S1 U, \
</code></pre>
3 e% \3 V% W* `2 [9 H4 g. n<h4 id="323-提示框">3.2.3 提示框</h4>4 r! }  t& D& ~% o
<p><code>prompt("请输入","提示")</code></p>
3 w; L( g6 X& G$ x) c, I) v<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>$ D3 X; J8 P- h# d* V  v
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
6 @% Q  @+ A" B* \) k  J<p>如果直接点<code>取消</code>后端收到<code>null</code></p>- x4 T; u+ x5 K% d; ^
<h3 id="33-计时相关">3.3 计时相关</h3>7 r6 n1 k0 A: D- w. D$ |
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>' i8 ^1 b) X# L& X
<pre><code class="language-javascript">// 等于3秒钟弹窗
; J: I( i9 K) u$ P8 w; `setTimeout(function(){alert("Hello")}, 3000)
3 a( G  r8 p& _3 o6 j$ a- S/ Q& L6 o' J' d. F* A" I; Q- P+ V, o
var t = setTimeout(function(){alert("Hello")}, 3000)4 V) ]( v2 l- `; j/ @% e7 v
- h2 t  a" q3 {
// 取消setTimeout设置
  I* q/ u$ |' Z0 j# p3 X: {clearTimeout(t)
- _  n6 u# h0 S2 ^2 U</code></pre>. e) {* N0 \, i
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
% F, E0 p8 D# Y' ~0 S0 H4 W( y" T3 J<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
7 z. U! h, V$ F0 \<pre><code class="language-javascript">每三秒弹出 "hello" :, Z% c# X0 z* I' F
setInterval(function(){alert("Hello")},3000);, U& W+ S, N% J: \
</code></pre>
+ u0 n) s0 O9 w: q$ X0 \<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>' H# |5 F2 w$ _8 S* i2 H7 U2 T) L
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
$ m8 [9 ~& t6 h! j% g//取消:: F& D# |+ u5 t* j  L
clearInterval(t)
8 l6 }  E0 y+ p3 F$ h: L, P7 K</code></pre>
: l2 \/ V5 ^  E/ _4 ?
1 N( J+ Y5 ~* f/ d3 P
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-1 06:14 , Processed in 0.086374 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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