飞雪团队

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

前端之JavaScript

[复制链接]

5896

主题

5984

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

5 m4 Z  G/ Q% [& L0 e; ^% }) a<h1 id="前端之javascript">前端之JavaScript</h1>
6 m* U* M( A4 _. \8 Z8 @<p></p><p></p>1 s0 D9 f, b  o2 {& W! u- \
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ M( D8 k3 I# M, h0 C
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>/ o+ b) e% v- q
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
' ~0 o8 ]1 U! `% [; ?  o8 n: k它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>- u) [8 Z- \7 Y; T- I# P4 w. e
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
' S  X% g8 J. N/ A5 w) F<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>' n: a; I- R% z
<h3 id="21-注释">2.1 注释</h3>
6 O/ k: t* }1 W( @7 z, |2 ]% _/ X6 s<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
- _; s& _4 y! E<pre><code class="language-javascript">// 这是单行注释- r2 y9 p3 }  Y( [
' o' r# X& [6 r7 T: ?* t: t1 ~& D
/*, U0 w4 C9 [& b8 B( b. ~
这是多行注释的第一行,
# L0 u7 U6 N! Z这是第二行。
7 C) E( c" H4 s" \- z*/! j% o3 i! x' h4 {  x
</code></pre>+ a2 t6 K  z  L% n: w
<h3 id="22-变量和常量">2.2 变量和常量</h3># }. Z  w/ U5 i5 B" x4 E
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
2 x3 l3 |1 a" ]/ H<ul>
9 S2 W+ R# H$ T- g7 s8 G<li>变量必须以字母开头</li>
  S5 x8 b2 o; Q/ q7 C. r' I<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. d; L! A/ c4 V% A<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
3 }2 K& K( g; ?2 J/ x+ H1 B</ul>
( H# g! j- Q- h  A<p><code>var</code>定义的都为全局变量</p>9 S, h9 Z! l! N: x
<p><code>let</code>可以声明局部变量</p>- I- O5 C* @8 x$ A2 v+ m  M3 z
<p><strong>声明变量:</strong></p>
( }% k8 T) r/ l: U<pre><code class="language-javascript">// 定义单个变量9 i9 v. M; K  Z) R7 f5 A5 R3 [  T
&gt; var name9 |( }( N8 T$ h' H$ q8 d5 ]
&gt; name = 'Hans'/ B/ L2 {0 n9 r
//定义并赋值
1 z# F4 H. \: l1 H&gt; var name = 'Hans'
% L& e1 \! Q, |6 I. y&gt; name
- ^3 p* t6 U0 g3 W! k$ C( G8 x'Hans'# a  G! ?' Y( Z- |) T3 Y8 G# _
/ H% ^, X6 b2 X- v/ _* [
// 定义多个变量8 L5 [9 m  l! g
&gt; var name = "Hans", age = 18
) @1 S+ n& y3 z! d4 ]8 A&gt; name
9 g) h* c5 g5 Q9 \( _'Hans'
6 R4 P/ m) R2 }; p5 \, X# R&gt; age2 |) r& e( z! N$ l
18! D& [! }3 |* N+ d. l9 y: f$ I! L

3 c( [6 r: u# G//多行使用反引号`` 类型python中的三引号8 \: b+ ?3 w) {: \* r# ]
&gt; var text = `A young idler,( P1 _& W! O+ f' i: m& N) O
an old beggar`
/ N1 J3 G5 [* w* Z; ~, U&gt; text. B% b# D( Z; B4 v( C" w
'A young idler,\nan old beggar'
+ H" q  J- L1 n! P3 b& c) o- r</code></pre>2 I4 f& Q+ P2 y  a! P
<p><strong>声明常量:</strong></p>
* m3 x  O! |6 A. d' \<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
* K3 U1 ^8 i& g, |5 t, `& q2 [<pre><code class="language-javascript">&gt; const pi = 3.14
8 e0 @. L: |% r' V, w' {" O&gt; pi% ^! s* B9 K: z: i# P- ?4 {: J
3.14
6 g  x' H. D9 [1 \&gt;  pi = 3.01% H) F0 }) N$ r) G3 }
Uncaught TypeError: Assignment to constant variable." |! x9 V" V+ i* a2 X2 i
    at &lt;anonymous&gt;:1:4
7 x* ~" O& f1 F7 k% l% @( K
9 S  z* a. G6 Y% j</code></pre>" B7 r; U) U& d; _& e* J8 L
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>% E% D# e# z5 B- X
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
  _* d- X8 T, g<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
/ ?! K- P% \- F2 X' ~! T6 b<h4 id="231-number类型">2.3.1 Number类型</h4>
- R! K3 V# k8 m# f) X) T% ^<pre><code class="language-javascript">&gt; var a = 53 s, t! c+ o: \3 k/ p7 B: z! ~/ |9 e
&gt; typeof a   //查看变量的类型  
: ]7 {" l6 i6 enumber" F3 Y, t7 Q# x; X' N
0 q/ ^: O. d" d( H
&gt; var b = 1.3" f( s8 ]& j1 a/ k
&gt; typeof b8 U" r) R; G+ Y' `. I2 f  ~
number
. w8 q9 w" T9 x
9 W7 W0 \% U1 Y1 ^// 不管整型还是浮点型打开出来的结果都是number类型
, i: ~0 Q- T9 [& |
' b/ n1 s+ M9 ^/*
% U7 W5 o" ~% \  C1 wNaN:Not A Number
$ a2 ]$ e( C* H2 [NaN属于数值类型 表示的意思是 不是一个数字
+ C% o. ?$ o3 G$ I- J*/: E. l8 a2 x& m* f( z
( m. |2 K! v) J! i
parseInt('2345')  // 转整型
2 |* ^$ N# t% z8 Q" w- S* Q* w2 b2345$ ~/ `: r0 S  S0 z5 _
parseInt('2345.5')5 F% ?$ H& B5 i8 N( x' n* O$ H, C
2345
: ?) F* z6 \- Z) \parseFloat('2345.5') // 转浮点型
5 Q" `3 \/ L+ p( U' E! G: n" T" U+ H2345.5
  k: k$ S6 u3 p2 I7 {8 bparseFloat('ABC')9 j. A, o- @- q# L8 R( y7 S
NaN
, [) x0 N$ I. _parseInt('abc')
7 L# I& b0 x8 F. M+ E: M$ J8 z9 eNaN
, H: P) i- m2 ?2 o7 g+ |! M! l8 w</code></pre># J/ B' o, z/ b# ?$ ]& F) n
<h4 id="232-string类型">2.3.2 String类型</h4>  g: |6 R9 @* W& b
<pre><code class="language-javascript">&gt; var name = 'Hans'' l$ [# {2 |4 F. K
&gt; typeof name
) S& r! j' _! o, {8 K0 d) E! k'string'
" z1 w" V; `. K( b1 R, O4 @
* d& v% I8 R6 l$ p$ n+ t//常用方法6 U1 L3 n6 Y8 D3 }, b
// 变量值长度
2 m" q/ d, b( |+ i* c7 W&gt; name.length
- G; C. [' {* ?* o41 X; `0 Y+ h; F" F2 a
// trim() 移除空白
  F4 L2 ^2 \% }- w&gt; var a = '    ABC    '
7 m/ `, R: @, T. U&gt; a
' _, j: O6 Y& B& X7 t'    ABC    '$ P5 n# E; B( {1 c$ E( l; k* G
&gt; a.trim()
- Q0 y! b; {* W. w  c% O8 u& i6 B'ABC'3 u. \) t4 f! \0 W3 o6 u1 G1 M/ e
//移除左边的空白+ i0 @% s& l- {. E" B. T; e. E
&gt; a.trimLeft()( {6 W8 x# @1 L) M  |
'ABC    '
8 S# f7 P1 p( L7 x, B/ u+ J//移除右边的空白
( I* f/ e* K' E/ x&gt; a.trimRight()
6 R3 X  E" R7 r* o+ K) z'    ABC'% ~4 H7 m. R5 A( h5 D# X
! U* ^5 f7 V6 b, N/ \; Z3 X
//返回第n个字符,从0开始
% A. x" q) `; v0 g7 C# x&gt; name% K3 C0 l, r+ a# u( Z+ B: `& l
'Hans'
$ z' J" C2 o' O&gt; name.charAt(3)( r3 B4 j9 i5 ]+ b
's') A; U/ j2 ]' t/ N; `
&gt; name.charAt()
; i' h9 _# r2 b+ [( K; t: V'H'
8 `3 l0 K- P, l2 }5 _&gt; name.charAt(1)) V: w) M0 A6 Y
'a'
1 s  I! ?- r  [9 K: g
+ |$ f5 B, }$ m  c5 z// 在javascript中推荐使用加号(+)拼接0 N5 O& Z  O; P* ?% `
&gt; name" S# b( d6 b* Y( v; t% K
'Hans'
. Q! y( {  M  S$ U, ^  D&gt; a( D+ _( ^$ c4 Y! ^* i3 @3 X7 P
'    ABC    '/ b$ {. P1 w& S  h0 M! E+ k
&gt; name + a
# M; j& |& |0 p# D% @- f'Hans    ABC    '$ x' G5 h7 L& M. }
// 使用concat拼接4 g! Y: S. z% d5 _
&gt; name.concat(a)
% i2 O. K* f- f# u$ Y7 u'Hans    ABC    '
$ p9 ?- r0 L, B& o4 u; E1 \, v, ~: `, H3 u( Y4 a1 {* \' J: c) i
//indexOf(substring, start)子序列位置7 [4 r# v$ a3 v! O7 y2 V: c6 A
' K, t4 c. j5 I9 v0 o- @
&gt; text& B( d& c9 [) z0 C/ Q1 |! Z
'A young idler,\nan old beggar'6 U" U$ x* g/ m3 c/ ^" n5 l
&gt; text.indexOf('young',0)
. O7 }; I1 I2 ^2 }: W1 j+ p  s2
5 ]3 W0 F2 z* Z; k
* X+ K9 I3 ^- N//.substring(from, to)        根据索引获取子序列
7 g% W: N$ t' _, x% W9 N&gt; text.substring(0,)$ I4 L8 S% h, Q! N3 x+ e/ G
'A young idler,\nan old beggar'# f% q4 h2 p" c8 U" i" U0 g4 t
&gt; text.substring(0,10)
7 Y/ k: I3 A6 W0 }'A young id', c( k1 D+ C- x  e1 m! e. e4 _$ B# G

% u7 U1 S3 J3 g5 l" N( G// .slice(start, end)        切片, 从0开始顾头不顾尾
! w) D# l' G% g% g: \- I) _&gt; name.slice(0,3)
, T, H3 d# m4 _" w  s% J'Han'6 G: G! s( u0 L/ b( n, @
5 ^+ U) p& w4 |. k7 `$ s
// 转小写4 u) V9 ^! L+ `8 L7 d% k
&gt; name
% v( q% [: i( c5 }8 f, l/ M: k+ T'Hans'
" B+ o' v( N4 O8 \7 w" S&gt; name.toLowerCase()/ c2 W1 k1 k/ r% P8 [1 c) S6 m
'hans'3 S2 P5 W5 a9 W' X7 a
// 转大写
- ~, P2 x' o: r9 U3 ^+ N/ i7 M&gt; name.toUpperCase()2 M& B6 }+ t! V
'HANS'# v! @' k0 z' v+ ?

' }- H6 B: N* Y9 k8 P- T% U: x  n// 分隔
& k! N9 u0 ?- q8 `' h: p" t&gt; name
/ O+ Z, l! C2 X1 z5 o. W+ Q4 K, z'Hans'# {3 O' s3 {: @
&gt; name.split('a')' j& I2 z: {0 G. N  G$ O
(2)&nbsp;['H', 'ns']2 N! n6 {3 S: m% z, P
</code></pre>
) g6 h) m7 Y4 t2 ?7 X- n, k/ t8 B<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>+ e+ R* ]4 c2 o* K: \
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
6 \) S0 s' n1 ?  C: A<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
; p! e! i0 L2 Y' [4 S<p><strong>null和undefined</strong></p>
4 S% Q( N  D% {<ul>
8 l0 z9 G% ~9 e$ U4 a<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
+ ~, R0 o2 u" i% I' ]  `5 ~  [* I<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
- D' g, A+ ?1 ~5 [0 U( u4 y</ul>
1 K; q7 {% R9 @<h4 id="234-array数组">2.3.4 Array数组</h4>
: {. z- y% t- W* N<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>7 |* g5 s/ j; Y6 w0 r
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
. i* j$ `: \9 D0 \; O" n" k&gt; array1
( `7 y& ?1 R3 u& h7 m) U$ I(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
  d2 ^( l+ o8 ?) ^. X) ?&gt; console.log(array1[2])  //console.log打印类似python中的print3 V  C3 L' k4 y9 N8 X, J6 u/ W
3
' P) U- R' ^% J: W5 D3 f1 |// length元素个数
5 Z+ s* M: @( G  ~&gt; array1.length
  W% Q$ m4 I! Y0 q/ F" Z' C  I- O6
8 q# ^" `% ?% W- ^6 I3 k8 w// 在尾部增加元素,类型append
0 A; k- r# E( J' c  U! ]% p&gt; array1.push('D')
- a3 c( [6 _3 M% `7
2 |! r/ {  i. E  D  |' |&gt; array1
- I/ z, f# k/ d. u5 {(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
( @  K8 o% |1 i' U, J// 在头部增加元素- ?9 K" d, V& u( w% A) H
&gt; array1.unshift(0)5 a2 L* L1 v- L! H
8
; B+ s6 _7 O- A! i&gt; array1) h/ P+ o# O) |8 g
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% d* A: @1 I* t1 \$ p( p+ [

9 k0 \4 I( @: N. _# L% x3 X: K//取最后一个元素2 O) \, G+ a' P* y7 x
&gt; array1.pop()! b/ S5 u- A7 H) v' Z
'D': V1 g( t3 i1 z
&gt; array1- W6 |  w& c& c0 f7 h
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']7 B2 q5 x& R9 E( N* l- l. S/ L% c
//取头部元素
& P( \5 M+ H. j: X- T7 |$ q% Q( S&gt; array1.shift()8 G3 n0 G- b) B# v- g
00 A5 A- L1 ^2 W6 H
&gt; array1
7 C* r/ q. Y3 i0 C3 o6 z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], A7 S' q; q1 s! I4 A; s7 }/ z
' y7 ]( g- A0 v# {7 w
//切片, 从0开始顾头不顾尾1 U4 s1 a0 j9 W+ r
&gt; array1.slice(3,6)* I+ r8 E' n) X: `8 W
(3)&nbsp;['a', 'b', 'c']9 w6 |& P; O& B/ h
// 反转
. A2 D, G% Y* {& I% \' x0 N. P&gt; array1.reverse()
" V5 J+ q5 l2 {% N8 x" X(6)&nbsp;['c', 'b', 'a', 3, 2, 1]: {9 l& I& ^7 x* f
// 将数组元素连接成字符串
$ j/ d# q' Y9 u) e&gt; array1.join() // 什么不都写默认使用逗号分隔
7 L- G3 i  D8 b( i8 u'c,b,a,3,2,1': ^$ x9 I2 y5 F
&gt; array1.join('')
. M* Q; F% O  {+ s'cba321'7 }9 a7 y; w; ?8 Z& S2 D. U- g6 S/ W' f
&gt; array1.join('|')
, F) O- r* k/ d8 u) z; R& K2 l'c|b|a|3|2|1'# v' z; N  F; @( g" d1 X$ `: H8 \
3 `" j# p. w1 M; l8 V; p
// 连接数组, h- {7 c7 {' O7 h% b7 ~8 y
&gt; var array2 = ['A','B','C']: W: d5 o7 d! Z7 F0 j; m1 x* A
&gt; array1.concat(array2)  w3 r+ g) f8 }% f
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
  b4 W0 Q8 b: h" e- h& S6 D/ L
# p1 {. ^; X8 U3 Z9 D// 排序
' Q( ]* K6 s7 K) G6 ]! R; m&gt; array1.sort()" U* p# a4 {6 ^- ^1 H# c
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 b$ L, }5 @5 I3 B4 _2 l
# _  g0 ~5 r& h+ {// 删除元素,并可以向数据组中添加新元素(可选)8 w1 s+ w. }3 E& p& P/ K9 R
&gt; array1.splice(3,3)  // 删除元素
3 j- I) z2 ~" {(3)&nbsp;['a', 'b', 'c']+ B7 M; ?, J6 I( P0 Y6 s# G. n4 p' ^  d& D
&gt; array1
! D& {# n; j: B0 Q) e; N/ m$ {6 y9 p(3)&nbsp;[1, 2, 3]
% l$ s$ |4 c7 p- @&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素/ @* ]% G3 K9 v+ _4 `3 ^+ ]1 w
[]
  P# h' D: H/ h( [&gt; array1
) L- w6 q* _& E7 X(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']( C) [. J$ a4 \" D2 u: k9 V+ }1 _1 c

  ~0 u1 I. ]. S8 _$ b: [" n/*
/ A: @$ g6 o$ C' {. s2 Hsplice(index,howmany,item1,.....,itemX)
% K5 R" V* F# i7 p$ M8 c; Iindex:必需,必须是数字。规定从何处添加/删除元素。
8 L3 W4 l0 J3 h: k1 E) p$ o9 A7 _howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。" z+ \+ a2 N+ _6 o) M: j9 j& d
item1, ..., itemX        可选。要添加到数组的新元素5 }0 q% `) s6 m6 R, s% a
*/
6 Z* o' z: S( s4 }
! R: y: h: }4 `6 v// forEach()        将数组的每个元素传递给回调函数
& R( f+ |; N7 H$ P1 L&gt; array1.forEach(function test(n){console.log(n)})8 e6 r2 f' V3 `
1% Y* U+ q  N& r6 _- G9 S
2
1 o) Y# s) R% f+ a: V- M 3
! M8 x" u9 F9 }" h. q A" H0 s9 _; r( i0 F& d
B
. k+ R2 A3 P$ r; I C: }# {+ R4 f- R+ I/ A6 Q
// 返回一个数组元素调用函数处理后的值的新数组, \1 n- X* [; ^+ b
&gt; array1.map(function(value){return value +1})
9 j8 a0 g5 q, Q( n5 S; I(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
8 h# J8 o: I* G- i- \% _</code></pre>" _( R8 {/ T& z3 G; C9 T
<h3 id="24-运算符">2.4 运算符</h3>
1 T! y3 |  t1 Y; D. W* X4 S) w<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
2 [* E8 K& C0 v3 M7 g<p><code>+ - * / % ++ --</code></p>' q2 @3 ^& A  y# G) ]" K
<pre><code class="language-javascript">&gt; var a = 6
) h: `" @+ k" @) l/ X' }( g7 \&gt; var b = 30 P* s( m' \& U% Q! _( G) y
// 加
: V/ ]/ T: |- |2 l! V0 D6 d  @2 p&gt; a + b
/ R5 ]9 e9 I4 n' ?) J9
, |) r7 A8 l. Q/ `# ~  n7 T// 减# T1 H0 H, Z5 T' o( l2 @
&gt; a - b1 d# h( b/ x' ~
30 ^3 j4 r- ^. G. P( v  g- O
// 乘
4 t; {3 N$ ~4 c; y# P( @&gt; a * b
) v/ o* i4 D; j1 V! U18
) d% w- ?9 |/ r& t9 A+ k// 除; v+ B! u! ]7 B
&gt; a / b( ~+ U) T) X  Y$ L& j* c
2
  t3 u$ k- V1 R) F// 取模(取余)
. P% ]) N/ z9 q* a/ c&gt; a % b
, m3 m2 R2 _, a0 a: T# _0
3 y! O3 c9 }+ h1 q5 E6 e7 M7 w// 自增1(先赋值再增1)1 j0 `) j+ }5 ?9 K7 e
&gt; a++% ~8 B3 I2 \. I6 R+ H9 r* j
6
! |# Y6 M8 K. r& b&gt; a
% s$ C, |& d2 N79 j( m0 ]1 d$ E8 a. o2 ^
// 自减1(先赋值再减1)' y" j" i6 x0 R) Z$ _% T3 B
&gt; a--& s8 }' h: s6 G
7
) M0 I5 s: s' i9 ^; E&gt; a$ u6 C1 L0 N3 G7 \  x" |5 A. i
6
) n1 D' ]- y# X2 c! |: N' s// 自增1(先增1再赋值)" V* y9 A$ u& K: ?
&gt; ++a# @3 j( r, c# i1 g: Z
7
; I2 b  u1 K" W  J. k) f4 @// 自减1(先减1再赋值)7 z" H4 J. [- Z1 Z& B
&gt; --a
7 n, I+ m8 x4 H3 i- ^6! Q- I/ u" c+ K5 R
&gt; a
2 e% b1 E( E- ^. }- e! `/ J4 |( k6
3 f8 q7 {0 T! ^+ P; b" X; o3 q6 P0 B2 k
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理4 G; X# E4 v- M. A! A
</code></pre>
0 x; I) G% V) h- D5 b# e<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
* s( z; |3 X7 o+ P: W$ E<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
7 B+ p. \* [2 b+ y6 `, N' _<pre><code class="language-javascript">// 大于7 f  \1 M" k( x0 C# d6 z- c- V
&gt; a &gt; b$ K: _9 ]9 g6 ^8 g% y7 Y
true0 {: V/ n& l& L
// 大于等于
4 G8 e9 D% ~; J6 y( K! K&gt; a &gt;= b- W& W/ v8 U9 I9 [* x& G
true
/ F1 E8 T6 g' d9 @9 F' p6 W) y// 小于
) r  P( A3 q2 K1 w&gt; a &lt; b# S5 |5 U) Z: C+ ?
false! C+ B. N% F$ s& Y1 }
// 小于等于
. w/ K" _/ n. _" j1 Q/ a. X&gt; a &lt;= b
# q+ L' J( `# ?; T4 {" I( Nfalse
7 `, v9 O5 E" W* ^. H% ]  ~// 弱不等于, a3 Q  l# P! e( ~, [; a
&gt; a != b
3 p- c) t$ v% g5 k. \true9 ?5 V( |) Y3 O$ u) L2 @
// 弱等于) _4 K4 R5 B4 s6 ~
&gt; 1 == '1'
- h7 T% x. B, \. V0 V. Gtrue
  c! ^3 n" ?" ~# |  L: i5 W// 强等于' f; g! T% F, w9 x* J9 n! F% U
&gt; 1 === '1'- ]4 k/ N% \  D6 V  e$ w
false" e- s5 Z! f7 O# s& n. q
// 强不等于$ v) Q7 W$ J/ c) N+ \7 B6 c
&gt; 1 !== '1'
1 g' ?% M$ U$ F* `true
3 ]/ X6 x* ^; q& {* i7 g3 x2 J) }, c0 R7 ~4 C5 |' k0 X, C' K0 `! W
/*1 ]( l, }/ ~6 y, u9 H( C& `
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
7 l* f6 B! N7 X0 _*/& ]  }+ C4 d! D2 T. }. |
</code></pre>7 R% a" P7 p  U7 H: Z- q
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
+ m2 |$ O6 D" h; l<p><code>&amp;&amp; || !</code></p>4 \# m, Q% p8 h& S5 U
<pre><code class="language-javascript">&amp;&amp; 与
% w% F$ Q: S) Q0 I! X|| or
) j" ^8 g) ?# N) h5 B- L! Y0 o! 非5 J& e0 t3 @1 u% R# b+ M
</code></pre>* O5 n  _& C" V
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>% _6 {7 `8 R: c
<p><code>= += -= *= /=</code></p>
: Q% x0 R* R8 M+ Y<pre><code class="language-javascript">// 赋值+ V2 J; L* A* A2 _: B" r
&gt; var x = 3
" I' f9 V* L8 ~6 ]# n// 加等于
, K$ L1 C3 p1 H9 K- d( V&gt; x += 20 Y( X7 Z. Y, x% D1 s2 ]" r& ~
5
7 `5 {* K: [$ G  Z0 p! v# B5 e- K// 减等于
( q# r" \8 V) G7 _5 U3 v( l8 T&gt; x -= 1& B8 f. T( Z. F. c2 m& l+ L4 P7 H
4
6 f& Y# M9 T% g- K" @! g// 乘等于
; P: `' |, @" Z7 k& X, i3 _$ [0 v&gt; x *= 2$ |& _( G" Z) F
8
- Q$ S  K  s& J: |! D: ~  q  U// 除等于6 L# N1 B* `% L. x2 |, I
&gt; x /= 2% S: j2 I5 g' C( e
47 q% Y" m/ ?' {1 r/ \
</code></pre>
) ]7 C, ~/ e. Y7 {<h3 id="25-流程控制">2.5 流程控制</h3>
# g  Y" ^( m) U) W<h4 id="251-if">2.5.1 if</h4>
& D' ^/ T3 {, d  Z<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
$ w; S$ z5 z) m8 G: M) U' }) E+ w2 T! w
&gt; var x = 3
8 z% v1 k8 A* }& s8 A+ i! F&gt; if (x &gt; 2){console.log("OK")}
+ i2 n! c: t) V. `3 P( f OK( v5 h7 W# `. Y: y6 p# ]4 X% d- T
7 n' x% X6 `* u+ {6 C: ]
2, if(条件){条件成立执行代码}
8 }9 y" c* ~4 L( P# X! l        else{条件不成立执行代码}
, J' j8 L5 }+ ?. z4 z% x3 @3 P1 h# q0 M
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
7 I; m1 E$ I4 [1 ]'NO'% U! J; g1 O9 y) V
, G+ u+ O5 P2 o( `+ ]
3, if(条件1){条件1成立执行代码} ( u/ y- D2 w% L" A. d' z1 i3 a
        else if(条件2){条件2成立执行代码}
: e0 `  T, M* i- e" G( q8 I" o    else{上面条件都不成立执行代码}
) b; Q* h+ X7 r4 |( h7 N
6 @3 \5 m% ~! Z9 `: s: _% J) H&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
0 m- i9 N- T0 x Ha
" M, t- }6 f- c6 A</code></pre>
0 M; C* U# I, v8 E# {<h4 id="252-switch">2.5.2 switch</h4>
2 Q% b* L2 {/ r- M+ V+ H<pre><code class="language-javascript">var day = new Date().getDay();8 d1 A. D; X1 y* x7 B: ]
switch (day) {& b. U! f8 G) n& h/ {+ P
  case 0:
+ p3 W% T* e: J) R% a  console.log("Sunday");' j5 B. v9 M0 l. g
  break;
5 a) t$ n& r6 Z2 l; u, F  case 1:
# \! \& q6 x1 |& |) H  console.log("Monday");
7 r6 o- A6 {; ?) S, w6 Y  break;
* a5 ~) p: A* y( e9 ]default:" K( ^+ M; I3 B+ w
  console.log("不在范围")/ E: B. K5 o% q- B: Y( |
}
$ D# q+ R) x& P( I5 K% _# k# ^% ~ 不在范围* {* Y/ X7 s* z7 O) t+ c0 _! m% K- J
</code></pre>
3 u' J0 J- T8 Y5 A! w8 G) d% y: Z<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
4 N2 N0 ~: v+ z3 w2 E<h4 id="253-for">2.5.3 for</h4>
0 k" z. D- l, Y, N3 s# c* S<pre><code class="language-python">// for 循环
6 O* v) y! Z# g        for(起始值;循环条件;每次循环后执行的操作){! V- Q, j6 C/ h& v3 n$ @% v
        for循环体代码
3 i/ n( }7 w) V* f    }# F4 @6 \2 f! E
* P" k  J; r' G0 K- E
for (var i = 0; i&lt;10; i++){( R& |. l# \: z
    console.log(i)9 i$ q5 W2 @0 J4 m0 \0 N  i
}" P0 P' x6 o+ t" q, h+ ~
        0
) h, }, r, r$ H* _        11 y2 ?5 ?: u7 h% V( L5 S' Y
        26 u) h; l' z+ W* v& H. h* m
        3% {; w( W+ s- H6 x
        4
4 v. k' h9 ^3 l: z9 M        5
# q* \+ T6 y& P, v+ \6 r- x        6. I6 }9 G. R1 V" G$ i) e5 P! G
        7
: q) S2 s. A9 ?1 t4 S6 `, j* `        8
: x2 E$ }$ f) k1 T+ b        9
  @  |  x* F* t</code></pre># m+ G8 Q3 Z1 q- b6 ~+ L2 x
<h4 id="254-while">2.5.4 while</h4>
/ n2 r' ]7 H9 |4 S( X9 s* z$ L<pre><code class="language-javascript">// while 循环% c+ p7 w) s: z
        while(循环条件){( G6 I$ b2 h; `& @
        循环体代码: W4 A# q$ ?! }0 `: o) T
    }
6 r: M; H+ Y4 |2 w; q3 N3 d" g) k/ b1 P5 |$ s$ j
&gt; var i = 0
2 N* y) F$ m( S" c&gt; while(i&lt;10){& K+ z! w2 o( c/ I: b: e2 m
    console.log(i)
' T& n; J* {1 x" Q1 y    i++
' J" j, E: Y7 b. F( u1 y}
2 I2 j5 ~; _: }3 a  b( [ 0" z& x0 u* a2 W$ U) i( ]
1+ K% E0 V4 c, E  B8 ~3 O. C
2
$ m9 ~9 J; A% s: E* N 3
2 Q. t. t. N, z7 G2 l 4
- {+ }& E! K0 [ 5
% w+ k. w! a0 r. ?7 p  r/ K* { 6; M. J! N) s7 l9 B
77 N/ j" J3 ^% P
8& ?4 G  @2 s: ?2 N; n& d3 S- u, _
9; C! y# T( }! O2 y7 G/ v
</code></pre>
6 I4 Q, u- ^& z% T<h4 id="255-break和continue">2.5.5 break和continue</h4>
$ g- \3 R& r$ m3 w3 D( R<pre><code class="language-javascript">// break
: ?# G+ J. n: [9 f- s6 e+ a7 pfor (var i = 0; i&lt;10; i++){, Q, C  a) S  i9 A0 V* K: R
    if (i == 5){break}
, `* |! U6 }7 Q3 n    console.log(i)
! h1 D2 b% e$ P; V4 R0 M}- ^7 O! d4 s: q: t  }1 O
0
3 X% w# F- ^) S; S! } 1
( b, _. [- t& S5 o9 t 27 J% `, P. O  |0 F9 w
3  {4 {& y+ p0 c, B) _
4
% y" p! g+ w* [// continue
7 D; w. q' k' U6 s" xfor (var i = 0; i&lt;10; i++){: r% {! G% O7 l3 V% |8 w
    if (i == 5){continue}. R5 l: ~, z$ [4 ]! k) v% _* Q
    console.log(i)- ~- W: W/ r1 @  t) K  Y1 a% ]
}
+ j6 v+ {  [& E* ~ 01 i9 m% I- ^" U! t. E$ Q
1
" C* o+ `8 q2 @4 C6 z 2
& c/ H$ p4 g) i& ~: s1 b 3! W, I5 R! d7 R! M9 [3 N
4" T+ t" X4 a# v$ r
6
1 I) t1 D7 i2 w8 y/ ~+ o/ `+ C 7
: _( e# Q( X5 n8 }* s, `/ ?  s  @9 a 8
4 ~) C8 _2 P+ i9 k; Z 9
* v. C4 J7 i) W3 @- @% v& f5 f3 t9 d, w0 c/ G* Q
</code></pre>! e6 T6 b: e, a3 ^8 ?3 d
<h3 id="26-三元运算">2.6 三元运算</h3># G6 M! l% I7 E1 A
<pre><code class="language-javascript">&gt; a" C+ v# P* }  ^; `
66 M& b& _' J4 H+ T9 g
&gt; b
$ w. ]0 R. x* K8 u; U  H# [9 v3' x2 b/ F6 {! {
) r( i& [; X/ W
//条件成立c为a的值,不成立c为b的值
: ]$ _# Y/ w" ?4 b! |4 ], ~$ i&gt; var c = a &gt; b ? a : b
! @* k- i0 j9 ^3 m&gt; c
, v" M% ^/ h6 `" ?" @! J9 _6
# O3 {2 T/ @( l  N
$ Y. p+ Z2 O4 d// 三元运算可以嵌套% p+ o$ V' I& d; C% ^
</code></pre>, j' ?$ e: C) T% K* }. |* B) Y
<h3 id="27-函数">2.7 函数</h3>
0 X. ?' g3 h9 F/ T3 _( x5 n<pre><code class="language-javascript">1. 普通函数2 g+ ~4 y  A  _% V- T
&gt; function foo1(){# F! ~, s/ U1 n/ y
    console.log("Hi")' j! L# ^. f  i" n. a
}/ s' X( L& _9 r0 U8 ~$ i

: ?4 o- p# B! m8 U# d" t/ b&gt; foo1()
' y* u- i9 i' ]/ ~        Hi
3 R; x0 v3 |; C4 D! M. K2. 带参数函数
, T7 a9 E/ Z$ A& q&gt; function foo1(name){
' v5 s) u6 {$ a# `( l- d2 ~console.log("Hi",name)
3 Q8 {- p2 J. p$ N}
$ y" Q* A+ Q) i& X( a& H
+ d3 b2 M2 Y0 i- l/ g! u( H&gt; foo1("Hans")' g9 N( ?9 G1 `
Hi Hans
5 h  z/ g* O5 ]+ H9 F# q
# B7 H9 N/ n  ~, ~3 x: G8 f) @&gt; var name = "Hello"2 G- w* N  e) S9 h" ?. J
&gt; foo1(name)" k' y# A3 l8 ?; }4 {3 F. w
Hi Hello
# X2 i+ j% h9 o1 j, m2 h6 u9 G% L$ e: [
3. 带返回值函数. f) C9 I8 X0 x- v, f
&gt; function foo1(a,b){
: b9 A# A) H, k4 c        return a + b   
* A' h- }3 l( U! }, K}
+ A% _8 w- w4 Y5 F1 V&gt; foo1(1,2)2 H; X7 M- P  G; c
3+ m% j+ b4 T4 U
&gt; var a = foo1(10,20)  //接受函数返回值, A. a  B2 m0 g' u. n
&gt; a/ N5 g; _! d0 Y* c
30. I: q# x2 |" A8 h9 ]. X4 [
+ _  u( ]) G- B0 N8 q- F! k, S
4. 匿名函数* n4 u. E  ?7 W+ S
&gt; var sum = function(a, b){
% a- Y' b& P: x0 R  `0 ^/ M6 S  return a + b;
" ^' p  t2 Z* D  {}* s- E# R% V+ b$ S, K* m
&gt; sum(1,2)
6 K0 @: S; B  ?6 [3/ E+ z: ?* E- w' v! b
+ C4 a5 z# }0 T/ t: P
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
" T: d% @+ l' C" q&gt; (function(a, b){
* x: b) Z: P" ]2 d6 e! p  return a + b
: F9 a: N1 b0 d$ f  a})(10, 20)
* X2 ?4 m4 D: h: Q307 F9 _9 k# ^# N9 F
6 W  q# X5 b" _3 N
5. 闭包函数5 w  _$ R: ^" R5 Z. @* e+ u1 U$ f
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
; p0 Q1 U; a! R' P9 |6 r7 Svar city = "BJ"
2 r% D: J% z; \/ V+ Rfunction f(){1 g! Z4 P& D  M/ W: P+ y1 l
    var city = "SH"# S! R, J# l6 J- S, w
    function inner(){
1 g* T1 A* G3 _" b) O        console.log(city)8 n# r& V9 s& I  U' ~
    }% t: j6 S4 B$ a6 V! `9 j
    return inner
* l" L/ ]$ b( Y& C4 `}, {4 F8 y4 ~1 {8 Q
var ret = f()
) w8 q2 r* i7 m: D( hret()4 A6 v$ _, h$ g$ }' L
执行结果:
! p* c' k1 t5 d3 zSH
' `1 Q6 ~5 ?  B/ G! |( L( _* R7 A7 _4 g
</code></pre>
6 c/ {0 |6 {: M+ h<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
4 K# j- q, s) A' F<pre><code class="language-javascript">var f = v =&gt; v;
; r" @# _- q, p% w, H// 等同于
  k- T- T+ `0 |; v- [# l, Avar f = function(v){
4 o; Q$ }/ P- b/ ]0 P  return v;0 |/ j9 `8 X5 p' |) u
}* G6 D- h. h% j0 V, m
</code></pre>6 ]% C! }8 m0 e* ~
<p><code>arguments</code>参数 可以获取传入的所有数据</p>8 }  b1 D; C$ m
<pre><code class="language-javascript">function foo1(a,b){
( \3 {5 x6 [( S/ X6 G    console.log(arguments.length)  //参数的个数 5 }1 q  ^9 w8 @. }, G
    console.log(arguments[0]) // 第一个参数的值+ q/ T* V) `4 P; S
        return a + b   
9 U6 M: ~* K8 w, Q1 J$ K& z}
& Y3 \6 W4 |  C) T" z8 p8 Lfoo1(10,20)
2 I1 ], v6 J& e; _结果:
% r  z' p6 l% @7 ^+ `8 n 2          //参数的个数 1 G; ?8 J3 G: y; @
10        // 第一个参数的值) ~7 k- f. z7 w( n; y3 H1 _1 n
30        // 返回相加的结果
( j4 f$ m* H8 Z- p1 ^* b% c( ?</code></pre>! S* x& x% Q6 F; J/ C
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>0 i$ Y$ h- ]( O/ a( Z* ^
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
% H- f; Z5 }) y, s7 B<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
; L, J1 Z  H/ L3 Z<h4 id="281-date对象">2.8.1 Date对象</h4>$ a8 g0 a# S3 x' }! }
<pre><code class="language-javascript">&gt; var data_test = new Date()
* c5 \: g+ ]8 Z- P&gt; data_test  T7 `/ j, A' h
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)7 k0 Y2 t0 q8 Z6 N. O& v$ ~
&gt; data_test.toLocaleString()
3 e9 K7 m; O$ u5 l$ J9 R! F0 r/ @'2022/2/11 下午9:44:43'4 ~: q% ~3 f1 o$ V
. w6 n1 S1 a8 s. J# B
&gt; data_test.toLocaleDateString()& s; B, \, K: v0 \4 p6 H
'2022/2/11'+ w, G, u; Q0 `$ q7 \1 }

  [' K. z3 X. t" t9 Y&gt; var data_test2  = new Date("2022/2/11 9:44:43")2 p* T5 P& g  R& _1 |  R% @
&gt; data_test2.toLocaleString()
: v0 d$ M& C$ K+ N'2022/2/11 上午9:44:43'% T7 t2 \* B: o) m" h7 w

* z8 |/ ]) b- V) P5 d8 S; x// 获取当前几号
! X; e  ~" i, ]! h& @* Y5 i5 B&gt; data_test.getDate()! _" }! ~) \% S4 a  s8 [, w, T
114 }. l+ L) U. {  B7 p3 J
// 获取星期几,数字表示
- e- x2 V6 i& ~, i. J0 N* l&gt; data_test.getDay()  
4 U$ ]; g" a' m5
  K% A3 |: a3 u// 获取月份(0-11)5 T0 T5 }) O$ j& g
&gt; data_test.getMonth()3 A' C5 T( e" ^9 f
1" N+ T) |& o9 A* l! l
// 获取完整年份
+ A4 s" Z' K; u' D& i&gt; data_test.getFullYear(); ^' ^6 ]' Q! ^" R: Q
20221 J7 u% e; S! o6 K8 u+ A
// 获取时
9 D" u" T8 W6 v2 ~' U& A! ~) L" @&gt; data_test.getHours()
8 |; F1 R& E+ ~4 _0 U212 G& j, ~4 r# n# f- L0 T: [
// 获取分
' X" Q! z; V" q9 p1 Z  b0 ]&gt; data_test.getMinutes()& w1 P' }7 i, h' c
442 K* _7 F" k4 V$ _, a) {
// 获取秒5 l. E4 x2 f5 T
&gt; data_test.getSeconds()
! S7 [$ A7 L) t$ R9 J* h( i43
1 h/ y9 W- w7 {2 C: V0 {5 }// 获取毫秒
: T/ ?$ \; M  r% \5 a( R) o" k# U&gt; data_test.getMilliseconds()
' X% Q+ p! R- R  f. |290
! ?+ [, m; [+ K// 获取时间戳
& w5 ^) }( s5 v6 L/ M: T&gt; data_test.getTime()$ @4 @" p, y$ N4 v% ]
1644587083290
/ f6 n: i1 i. o' m+ u# F5 X# ?2 |</code></pre>
. K5 Y8 R. J; j5 X& \: L: f/ h<h4 id="282-json对象">2.8.2 Json对象</h4>' }8 Q6 ?1 f7 ]
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串2 I! d  a, F; s( R2 w: V1 s
JSON.parse()  // 反序列化,把JSON字符串转换成对象$ a7 U, q& B$ [" X/ f' h! y0 V
+ I# Y8 l+ Z% M, u' s; v
// 序列化  U- A# @3 y4 k! q8 c0 B: C
&gt; var jstojson = JSON.stringify(person) 9 a# @: I( C, x) h( @9 X
&gt; jstojson  + l  v! f  x! z9 C8 T2 \
'{"Name":"Hans","Age":18}'8 Y5 A9 R  M6 S/ ^9 P/ s

/ [% a- Q5 d; j; d. ?// 反序列化7 [; o. K4 N/ R& U2 J+ `
&gt; var x = JSON.parse(jstojson), {) L1 P8 }5 _1 _$ f
&gt; x
' h' w$ j3 m- ~- t{Name: 'Hans', Age: 18}
0 z4 K: o, S4 ^: H! {  J: O; w&gt; x.Age* ^  U4 n3 _7 o$ u9 _- n8 K  u
18
( m! k+ [$ ~1 [2 h7 ?</code></pre>/ f# ?# V( n( ]: Z% |$ q
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>3 U7 k) L+ P" L7 u6 @* t' u* n( A  V
<p>正则</p>
5 p1 {* I. X" K<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");# X3 n: J6 h* L' I# i# y0 T2 c
&gt; reg1, U3 ]- E, {' }* U
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- b8 c0 C: H4 V&gt; reg1.test("Hans666")1 V& I4 a: U- j& a- @# j
true( c0 i* {9 K- m' v

$ @" }) `8 `0 N/ ~&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
$ P; `/ a* T$ I4 d# `) X&gt; reg2
8 l9 X9 \- `2 {; S# F7 K" W/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& ]  t3 k9 S2 {&gt; reg2.test('Hasdfa'). J1 F- P* n2 R0 G2 `' X
true  d4 {% K) A4 S$ n; z+ f: t
" o. o' n/ X4 d8 {$ Z5 O( F/ f
全局匹配:7 k" a) w/ Y2 \4 k" ~
&gt; name+ k% s8 ]0 H3 z
'Hello'8 ?; }! [3 G; k. N8 E1 P* D# U' c
&gt; name.match(/l/)+ T- G$ g# |3 D$ e' R
['l', index: 2, input: 'Hello', groups: undefined]
0 G9 H; m3 A  ~3 U) f* `6 n1 G+ U" U7 \/ ?
&gt; name.match(/l/g); I' t! }7 r2 @; }
(2)&nbsp;['l', 'l']
7 u  d" w0 _# S. T// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配0 @3 A( D) l; `/ |0 t3 m
4 C# T# d; N+ R5 N/ e/ V4 X. C
全局匹配注意事项:
4 Z+ P6 J5 E: T&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
+ z3 M7 F( a% ?( U&gt; reg2.test('Hasdfa')
0 [- k. J* i0 g  X* _true3 |+ M6 [, q" z% D) f* F& \
&gt;reg2.lastIndex;
* V3 O$ p+ w( ?  {/ [; }' B6
# A! {# `+ W: y+ T6 G) H&gt; reg2.test('Hasdfa')
$ |: R% I# r0 k) I6 _/ ~9 q$ yfalse4 Y7 L% b$ `( ]# q- ~
&gt; reg2.lastIndex;. e( z. M- D0 o* q
0" a/ H" r6 C# N" S6 u
&gt; reg2.test('Hasdfa')4 }. u  L7 _: u4 {9 l
true4 [( r6 N3 @  l+ Z, y
&gt; reg2.lastIndex;% N2 O2 ~5 J% b* r
6
# |$ |: v9 \9 ~; d2 P  ~&gt; reg2.test('Hasdfa')- G4 L- |: ?# i6 X
false
5 ?# g& b# J! K- s&gt; reg2.lastIndex;1 J) y0 M* K  v0 Y( f
03 O. M+ p" O( O' i) r
// 全局匹配会有一个lastindex属性" v$ e9 ]. e9 r/ N2 Q* i( i
&gt; reg2.test()$ {  r" M% e: r- C7 v$ _) U
false
# j, j3 t7 u# W7 a2 l& E&gt; reg2.test()
9 |. Y5 b. b8 P& d% `- P# C5 M9 |0 [% Xtrue
: c  w3 W) @, W+ Z+ f8 q# p// 校验时不传参数默认传的是undefined
$ Q; p7 X+ _! r% T$ K</code></pre>
! o0 D: x- ~4 l<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
9 Q8 K- x- j' i5 `" B5 c<p>就相当于是<code>python</code>中的字典</p>
1 h/ C. H' F' G8 t% K" d* x/ H9 Q<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
+ r" k8 b1 k5 t* V* l* t5 {&gt; person
4 v7 q9 U  H. c  q{Name: 'Hans', Age: 18}# o- g0 k# c+ X
&gt; person.Name8 j1 C" P' J+ \& i
'Hans'8 o  x5 Q  R& H& k' |
&gt; person["Name"]  i- r0 k" C; V6 ~2 q
'Hans'
& v* _' z# P% b; z8 [
0 ~; K  z1 ^# \9 Q( A0 W' f// 也可以使用new Object创建$ n0 \( e9 n9 T# E
&gt; var person2 = new Object()+ J/ w+ G# L6 D. U
&gt; person2.name = "Hello"0 q7 I3 ]# u, S. E+ Y" T$ E/ v
'Hello'
4 o% h" ~. K1 z) ~( F' L&gt; person2.age = 20
- U5 C' l2 Q; a$ |; ?; ?20% d/ G. R$ E# t2 K& z  {$ s& V
</code></pre>
' K; G2 ]1 C1 e* Y1 Y. w9 C<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>  e* l7 f3 `: O" I" e
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>/ g& I) ^& g# c, ^3 I5 M5 U0 y% j
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
8 M) f. L! V' k<h3 id="31-window-对象">3.1 window 对象</h3>7 `2 R2 s# C3 H; k7 W2 {
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
' \2 r6 x2 i$ _* c9 c) S<pre><code class="language-python">//览器窗口的内部高度- g5 a& d0 d3 g1 J+ Q$ i& C
window.innerHeight 8 k! i* F2 a& F
706
  b8 @9 W! b2 r, j( ^: B" `- \//浏览器窗口的内部宽度9 X. h3 W1 ?3 I# l# n+ a4 Y
window.innerWidth" q% J2 _! g, R+ k- Z! f
1522( a/ Q: S' U; f2 Q- G- j6 @
// 打开新窗口% K2 F( }+ o; h5 ]3 u, \
window.open('https://www.baidu.com')) |3 l# G1 p' X0 X' Y
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}: d% W. E1 l* T3 G$ p# v0 Q4 J
// 关闭当前窗口9 e$ u+ n: ~: g, \
window.close() & N7 C+ v! v: u5 O4 @
//  后退一页
6 P& o' b! }( _window.history.back()/ C$ L0 w1 G  @3 m4 P+ W
// 前进一页, ~' O$ h4 b! U* ]5 L' E6 l
window.history.forward()
  K: _' t8 ~% |+ m$ x% `5 N6 S' c//Web浏览器全称
" ]" B& \9 l: awindow.navigator.appName$ {! b6 ^( ?  r" ~% a0 z& n
'Netscape'' n8 b4 [$ t0 r5 }
// Web浏览器厂商和版本的详细字符串
; f1 J3 d$ s6 A/ H6 ]window.navigator.appVersion7 f0 |  v0 s9 c$ T
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'" w" U9 t7 j9 Z# H
// 客户端绝大部分信息) I" c- n- }0 f. }7 X
window.navigator.userAgent/ {7 I% @1 d0 g7 V" T8 v# G' X
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'+ \7 ~7 b* Z( {3 ?3 n
// 浏览器运行所在的操作系统4 ~6 N" B) C# t/ w$ N, D2 L
window.navigator.platform
: \8 |1 R0 e, _# M3 u- Z" [1 R; N'Win32'5 K3 R6 ^- n& n
9 t2 A$ K8 l" E( b$ \
//  获取URL
5 l$ ?- B1 e7 \$ H0 x8 xwindow.location.href
/ g3 B" G6 J8 }' E// 跳转到指定页面/ O. z* ~+ k4 T' g- \! a) o
window.location.href='https://www.baidu.com'/ x/ D9 @# c" [. i1 d. @
// 重新加载页面
' A- b( S4 _0 G- x" u9 o$ ^# k4 G% nwindow.location.reload() - Q* H( h8 B' |, l2 ~8 U9 z$ a" H
</code></pre>/ d. Y3 y3 U6 [- k3 M
<h3 id="32-弹出框">3.2 弹出框</h3>1 g1 Y3 w' f6 W2 j4 @# L# v. h
<p>三种消息框:警告框、确认框、提示框。</p>: ?9 ^( i8 w- z# x& C8 X
<h4 id="321-警告框">3.2.1 警告框</h4>6 w! G; b0 v! D& {) ]) \8 M3 [- Y2 K3 |
<pre><code class="language-javascript">alert("Hello")8 n& w" N% |/ N4 z/ |2 ~
</code></pre>
  I* m: \7 D& g' v, y9 }<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
: U- m# N" w  |" t8 y7 q8 x<h4 id="322-确认框">3.2.2 确认框</h4>
3 H/ }( B$ O: {+ F/ W" _<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
, i  d+ t7 {& e<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true5 [9 O# t. M& B" `
true. H6 M7 }( E* ^; y
&gt; confirm("你确定吗?")  // 点取消返回false+ U4 A+ D( `0 K# V8 f! V5 Z
false
, ?9 d) ~6 ~7 d- K2 l</code></pre>7 i3 d$ l8 L8 W/ c* H" e
<h4 id="323-提示框">3.2.3 提示框</h4>
8 i$ \( x- B1 y2 @0 z0 m1 [( s4 ?<p><code>prompt("请输入","提示")</code></p>
# N& ]5 M! l' E4 r7 j( J<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>9 d, }: ~6 ^6 Z" ]0 b* S$ E5 s
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
4 E  }9 j+ M' S/ e/ w1 Q<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
1 T$ Y% L+ m$ b# Y! T<h3 id="33-计时相关">3.3 计时相关</h3>' u: x$ c2 o) ~* o& {
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
/ S7 |: |* c+ D8 i<pre><code class="language-javascript">// 等于3秒钟弹窗8 J: s* q; u  U0 m# C& e0 ~
setTimeout(function(){alert("Hello")}, 3000)" a- o; c0 p$ z7 `8 w, [

% ^4 z6 F4 d: N; Svar t = setTimeout(function(){alert("Hello")}, 3000)
; H; f1 t$ @" C; C/ _4 K% o; V7 q  t$ ]2 j& F9 W7 u) E4 b6 Z2 L# \
// 取消setTimeout设置
: K4 l1 S( z. m, o1 DclearTimeout(t)9 D$ }4 g0 S( ]2 J8 F6 ^
</code></pre>' ?6 r3 @9 G" L5 c; S- C4 g
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p># _1 E" j! X* L4 I7 C( X
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>1 T0 r# L! Q/ ?1 J
<pre><code class="language-javascript">每三秒弹出 "hello" :
* ~1 b& H. D+ x+ R! k1 I; T4 IsetInterval(function(){alert("Hello")},3000);' e1 Q: H3 f5 v5 Z/ Z
</code></pre>, Z, f% b) e) ?$ P0 s5 d
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
& Z, {" j7 ^; H<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);2 L7 Z/ q+ N* x4 e
//取消:' x9 e  V, ?  X; O3 B! m
clearInterval(t)4 G/ `! V7 q0 Z# E( {3 Q9 J
</code></pre>$ A6 ^' [" b+ V8 b8 Y
8 }: a* y+ p1 c  t4 C
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-2-19 07:06 , Processed in 0.079895 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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