飞雪团队

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

前端之JavaScript

[复制链接]

9321

主题

9409

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

+ D) B4 s6 ?' i3 J3 q  G<h1 id="前端之javascript">前端之JavaScript</h1>
3 k' o- X/ N  W<p></p><p></p>  B2 {4 f% @+ ]! Q; c
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
6 o8 m6 N9 h' R! D2 J4 V8 _<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
5 d2 \. M5 v3 l0 G& m$ G它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>) v0 }! j: ~! m( |; f
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
; W" G) k& h( n& n" F( J它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
# Y6 E/ O5 ^; f3 N! b$ x<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
* }2 Q2 ?2 N1 t<h3 id="21-注释">2.1 注释</h3>2 Q0 d* W; _7 ^: }  Y
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
8 d: p( G# H1 ^9 c1 @<pre><code class="language-javascript">// 这是单行注释
/ m, {5 A* u% n
# N- H& k& H0 C! j( _/*
+ h5 Y* {" r# Q& K这是多行注释的第一行,/ ]( j$ U% ?: `1 E% Y9 d2 W: D
这是第二行。
6 t3 G: }* {: J  K, D*/$ }! g/ X: t( J$ {2 Q) |5 G" E
</code></pre>: I0 k+ ]' P) P' e9 r/ b
<h3 id="22-变量和常量">2.2 变量和常量</h3>0 S4 a( [# w$ p1 H6 B
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>* _/ X7 l; J0 a" o
<ul>, e7 H7 J' G4 F, ~. |. v  C
<li>变量必须以字母开头</li>  L. \7 b' {/ ~$ k6 Y
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>% A/ r; C" w  X. n1 ^
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 y: D- ^- n* f; ^4 o</ul>
* G5 u. c. T7 p  s<p><code>var</code>定义的都为全局变量</p>/ K. d. {. q7 {8 o, l8 U0 F: u
<p><code>let</code>可以声明局部变量</p>
( |7 O6 L- a3 J, u$ u9 l<p><strong>声明变量:</strong></p>! C2 {3 U$ a. k) r7 u) }
<pre><code class="language-javascript">// 定义单个变量
; W9 V2 D$ G, R# ?&gt; var name" R) Z6 G. R2 l; v% b
&gt; name = 'Hans'* m! M8 Q8 p. D$ P+ J
//定义并赋值
' H0 _3 C5 S3 G+ f&gt; var name = 'Hans'
( j; c: I7 W7 m' T* s# n&gt; name
% E3 f+ H2 b2 {9 y'Hans'
0 y% H' j5 r; N. @/ ~* U) O
: @( k5 E9 h2 F/ V) X& J// 定义多个变量
7 t; A) {5 k- c: _) X% J5 P! ~&gt; var name = "Hans", age = 18
6 A! n5 U1 w) r, B* W" N&gt; name( [- F* a$ Z7 u) A6 i
'Hans'
$ w; I7 v: {" C% w3 O6 y; f&gt; age# g9 K* Y. x4 }/ y. Y8 R
185 H8 ?4 D  y: Z3 y

# g. @" s) v: d* `+ F5 j//多行使用反引号`` 类型python中的三引号! J( `6 u: N: |, |  W0 B# n; Z5 P# B: h
&gt; var text = `A young idler," T) A, H: `3 w5 F
an old beggar`
% L5 V8 ^1 {; F( m( O2 y&gt; text
, q- j/ F; V5 h' a4 c, {'A young idler,\nan old beggar'
4 B5 R7 {& _# L7 K" a; R; m6 \! ]9 f</code></pre>
& a! h" E3 j: L! g5 I<p><strong>声明常量:</strong></p>
* q# l% j( x3 o+ x8 {7 S<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
) f; t4 |4 Q  F- i7 e<pre><code class="language-javascript">&gt; const pi = 3.14
/ I! @) e! `  D# d7 y& V! s1 C3 z&gt; pi' R$ W  U" H+ X
3.14
9 V  T- D# t6 Q8 c- P&gt;  pi = 3.01
3 \3 h) z6 F- h9 h! j: LUncaught TypeError: Assignment to constant variable.
! K# V/ d: E3 n. V7 Y6 p3 K    at &lt;anonymous&gt;:1:4. W0 E& s' F* d; _

" o- k) C. \9 U( R& `+ c</code></pre>9 @. Y) Y) c0 a9 h+ p
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>) L7 M$ m" q/ \8 `
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
" e& i" _; {' n) m) i! K<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
. H: a9 ?) A  \2 f<h4 id="231-number类型">2.3.1 Number类型</h4>
$ q) R+ N) Z9 u# M. `<pre><code class="language-javascript">&gt; var a = 5
/ [' v1 J  |: T( g&gt; typeof a   //查看变量的类型  ; u3 H7 s  j' q. }7 @& s
number
" E1 \* K; _* ~$ W5 e# s9 o% I; Z) c# {1 S/ j  T
&gt; var b = 1.3: u/ ^# `  n2 R& r: o$ v3 u
&gt; typeof b
$ Q* ^# i- ]1 M/ t5 F% v  gnumber$ |% M- l: @6 I) t, N
) R: Q' o3 A, @) P$ c4 y6 f8 r) X
// 不管整型还是浮点型打开出来的结果都是number类型
+ T+ }* f' U' {% Q, [2 y
# X$ l" q8 ]- a7 c( Q8 U& h/*0 d% m, G/ K' K! ]: x8 X, b
NaN:Not A Number0 d6 o! B0 h6 [  G1 j
NaN属于数值类型 表示的意思是 不是一个数字. @% ]% _9 f- _( |
*/
" I' H4 p+ x) K0 L' B# H+ ?% k( M5 m! [& z- i6 G
parseInt('2345')  // 转整型+ @7 c% ^- D0 b4 `  M
2345
4 ^! _8 M* O5 h8 R: r: u: JparseInt('2345.5')( d9 z' n3 ~5 t) v& c+ T% {
23459 ]" ^$ J; T. j- q" C4 D0 e
parseFloat('2345.5') // 转浮点型  K" V( S2 @) @6 y
2345.5
  K. Z) q. S( t0 ], Z9 x+ }parseFloat('ABC')
; F8 v# D8 Z* i+ _. bNaN
' K; @4 i0 g% i7 A: n' h1 pparseInt('abc')0 L% f$ @% a; ~
NaN( B+ o4 H$ Z5 }, Z
</code></pre>- f* _" q4 m- `4 t' G
<h4 id="232-string类型">2.3.2 String类型</h4>7 r1 s+ j3 d2 G, F* m
<pre><code class="language-javascript">&gt; var name = 'Hans'
" a" Q( P0 w+ z- E&gt; typeof name
" S& x5 W, y% m. Y% a'string'
' L6 y  @+ B6 P9 j' y& z2 W9 s  d& ?: a
//常用方法6 N3 a0 C! ]$ k  A
// 变量值长度2 \9 K1 B4 U2 ^# I, n
&gt; name.length1 @( U% i$ m* m
4; L: Z! x8 X9 @* ~* t+ a
// trim() 移除空白
. X0 m5 w4 \; v' l&gt; var a = '    ABC    '
$ W2 i  w- F6 L! K) i& B&gt; a
- ]! {$ j  C  F% x0 U( v8 U1 _  O'    ABC    '7 T; f" ^* ]# E8 _+ L
&gt; a.trim()2 N# Q$ T% V) A& @9 U
'ABC'
9 ]' W! D& S$ l# |$ C5 v//移除左边的空白
* l$ j# ]3 M6 m3 E& n# m' f& d&gt; a.trimLeft()/ m' ^& C$ A- ~
'ABC    '
- y4 X7 I  @/ P0 ?( C//移除右边的空白
$ v! K& [$ @0 Y& w&gt; a.trimRight()# x2 {8 \5 ?# _. e( b$ w5 d' Y5 Q3 C- V
'    ABC'( n+ m6 C1 b& Q+ h4 {

2 ?, S) C8 W1 ^$ ^! R; V//返回第n个字符,从0开始3 |$ d+ C5 w+ a2 _+ e1 L; z
&gt; name
: g: J) h" P1 d: r, K+ ?" m'Hans'; o& k3 w& h; s! d4 K1 B0 b, q3 M$ I
&gt; name.charAt(3)) t# g0 Z+ `! ]; C+ i! [
's'
2 T7 s- j  u$ U% A&gt; name.charAt()
5 _8 O+ N* [* @; M'H'
8 n4 w' r: T( _&gt; name.charAt(1)3 C; P9 B# o: m. P* ?6 m4 T
'a'
4 A/ E. A: N& V" e1 g& L; h( l' M0 |3 ^5 e" l
// 在javascript中推荐使用加号(+)拼接: F* M2 T, ?8 j3 {7 L
&gt; name
3 K$ y3 w" p) b& u  ^7 R! s'Hans': ~3 c% Q8 @: q) s5 ?! I
&gt; a
, f& Z6 r9 i: A5 H% M'    ABC    '
, q* u- ~8 l3 S&gt; name + a
6 T- f- c) Y. o7 _' b6 ['Hans    ABC    '  x' q1 H) R# R: u8 z( j
// 使用concat拼接7 j: D! D+ C9 b6 X
&gt; name.concat(a)) \+ Q- T- R, ?5 {9 s5 w
'Hans    ABC    '" x4 U& \  n! y! @* o
" ]1 R, f& @; C8 V
//indexOf(substring, start)子序列位置
% d# G0 U9 d- y+ K" H" Z( U8 R1 J! B  s
&gt; text
% w; I1 J- A5 v2 n$ o/ v'A young idler,\nan old beggar'
% T- f0 q2 f; _0 s4 J3 I4 p&gt; text.indexOf('young',0)
7 s3 q* h' j$ k- h  F* s' ^2
2 a+ w7 v# u0 _6 R6 z9 k5 l  L& [5 }8 a6 o/ a- v% }8 P& x4 |7 Q
//.substring(from, to)        根据索引获取子序列: O1 h, a, e- z4 b. P/ d" b7 H
&gt; text.substring(0,)
, `2 b' t8 l8 j0 d'A young idler,\nan old beggar'4 K/ O4 ^& _4 @6 U' q
&gt; text.substring(0,10)
+ ?9 v- V9 H8 F0 g5 ^- T* |. i: p* @'A young id'
5 }8 L4 d5 K1 U3 y
8 e0 l$ X& j( |& }$ K) w1 {( c// .slice(start, end)        切片, 从0开始顾头不顾尾
, _+ B+ A. f3 s8 D&gt; name.slice(0,3)) J; g& s# x/ h, b, _
'Han'4 D5 V7 _7 U2 V/ |# s$ T
4 t  I- D3 B9 s* U* h8 B8 \
// 转小写7 S' H  v* b7 z' m; v$ L8 e; P
&gt; name
) X3 O% m' v0 M3 e( ]3 F5 e'Hans'
% h% g2 j* R0 j" X' T7 x* |&gt; name.toLowerCase()
; X6 G$ G" {. z' P'hans'
2 p) K0 F0 X( I# V3 Q4 U3 [// 转大写" Z( I) \% Y% D) ^0 _' ?
&gt; name.toUpperCase()4 {, a+ Z9 y6 T
'HANS'
7 f$ B5 y/ o9 j6 J- A7 a5 D- v2 N$ z$ f3 u6 O- w: k
// 分隔8 L4 k) w' n; P3 }5 I& ?( q
&gt; name
7 |2 Z' L# G4 H# M1 a; u- G! t8 W) e'Hans'2 D& ?- Q& K) _5 \4 N$ n% K
&gt; name.split('a')
+ E6 r! @$ r. r: d(2)&nbsp;['H', 'ns']
( l% i! I$ b2 t. j( ]9 ^</code></pre>% N7 K/ l+ t8 U& y1 U# U8 u8 }+ @. x
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
8 D4 e/ F4 a$ c8 n8 ^<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>) N3 w! m: e0 F, |  ]- L. j. N
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>1 \: j* E0 z! d/ Z( M
<p><strong>null和undefined</strong></p>
9 O& L# @9 J' C3 ]+ l9 h' G<ul>8 P0 ^, n4 h( M8 l0 j7 X4 d( c
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li># I1 s6 B7 x3 A; L9 O' [% e  B: V' r
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>* \" {4 x7 w. s% y+ l8 j& p# W
</ul>& S5 o, D$ t' x4 I5 V- j
<h4 id="234-array数组">2.3.4 Array数组</h4>
/ ~5 j) {# _) J<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
7 Z3 M/ M3 {& V  H2 B<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
5 ~5 q) }+ v1 {: d9 W&gt; array1
% m$ p8 g" M9 u0 f(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']3 c' F: f$ s5 f, E
&gt; console.log(array1[2])  //console.log打印类似python中的print
" l% ]* {7 a$ w$ v2 m  |7 c3
& l+ g4 Q) K$ d% X// length元素个数7 g2 w7 D$ k3 n$ g$ m
&gt; array1.length/ C( x; R# y5 s$ v3 s5 t
6
( _3 b( W/ o0 {' p% m" K& a// 在尾部增加元素,类型append- @2 i1 ~# N7 d2 Y
&gt; array1.push('D')
4 M$ s$ z" X/ o* G. n8 p+ ^7) r: z- ]3 }- u7 W- q8 {. g
&gt; array1
9 F3 y5 |3 Z/ `' t1 a(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']4 [& {. X7 N1 h, u! W7 k
// 在头部增加元素
3 H/ S" m/ N: S' v% S& j8 ^&gt; array1.unshift(0)
5 c3 B4 }+ `+ }, Y0 m* d8
( C' l* q6 y# p3 Y# K( x&gt; array1, `# P" t/ W5 g0 X& |$ x/ l
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']- A1 Q9 n1 m3 i+ Z& b4 b$ ^" X
/ }# Y" H" e6 _  e& |
//取最后一个元素
, z  c; b/ q9 [- c% t! ~&gt; array1.pop()
( c/ T+ o$ K* {2 e8 }'D': R2 @( v4 o5 B- Q
&gt; array1
7 B6 s( C8 i( y7 C8 r. X(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']) G5 A+ f& F: M- J2 r/ ~; o
//取头部元素( j7 F. d3 O& D: y
&gt; array1.shift()9 n6 q9 _* M: p( U) {, {; a. L
0! }/ [0 _1 _# V5 W* |! B
&gt; array1
" ?) y, u. V* |(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" q) c. h9 S3 N0 ^# W
4 k( X5 P2 D- M# x) L
//切片, 从0开始顾头不顾尾
9 a4 s5 S6 h, K&gt; array1.slice(3,6)
8 _6 P5 V/ J, {5 z# o& v6 U(3)&nbsp;['a', 'b', 'c']* H8 n: K' I# h9 t
// 反转
, s: ^. {6 C: Z' {' e# r6 }. y& B&gt; array1.reverse()3 N, n6 X, f3 k: B
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]% `! V" b+ g! F8 @/ s# t8 t
// 将数组元素连接成字符串
' v0 t, Z1 i! |1 e) q&gt; array1.join() // 什么不都写默认使用逗号分隔
) o( B( o! P! L+ N) _" K: \'c,b,a,3,2,1'
- X) T+ V$ e: d/ H5 i6 D6 r6 o&gt; array1.join('')( _/ w% m. Q$ Y; P! h; S
'cba321'" C" Q# I- G0 B/ M* K
&gt; array1.join('|')
) }' r# @9 Y0 e4 X'c|b|a|3|2|1'7 l$ J$ @9 ^, k& ~, M% h0 Y
" H+ S7 A2 t" y5 D- l. K* q2 {. i
// 连接数组
) P  k( F+ q! g  Z" O&gt; var array2 = ['A','B','C']7 c: l" C& Z. R4 U, q" E
&gt; array1.concat(array2), p5 |3 z4 d8 Q. }* f- a+ D
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
: s: L! R; _( P) h. P6 N0 _: {1 T" S! k0 A; b# e1 x' y
// 排序
: W9 N2 h1 v# R4 |&gt; array1.sort()0 D3 l: K/ i* e; B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' R- {( ^0 `: h' v6 U0 J+ X+ D+ C6 y( t7 B2 F  a3 ?  w; N$ b
// 删除元素,并可以向数据组中添加新元素(可选)8 S/ i3 @. x3 l  U3 p1 k  k
&gt; array1.splice(3,3)  // 删除元素8 c3 n. {% P& F1 D. B" P" s" P8 N
(3)&nbsp;['a', 'b', 'c']
* J, X, X, l: M! P  J&gt; array1+ F4 v  K( V. j% s% v4 }; {
(3)&nbsp;[1, 2, 3]
+ A9 c; d) c' q0 M" x- q&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素& x4 v5 F1 h+ V
[]* F6 l3 P: l' V
&gt; array1
5 F- E- B' d4 |7 p+ Q. r( B' p7 Y(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
* D+ c# a+ H( u9 F' ^0 C1 e1 ~) V& c  ~/ V% p$ k' u) `
/*7 F7 P; c3 ~) J* M& ]; Z& T* }
splice(index,howmany,item1,.....,itemX)
  W' {( o; p! P- I# Q' w/ [index:必需,必须是数字。规定从何处添加/删除元素。
2 I- j: I$ c9 j# v7 rhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
# _+ \0 I: c% O1 titem1, ..., itemX        可选。要添加到数组的新元素" v9 {4 Q6 @, k  |+ u. V
*/- J$ A) H. H# P) W! o
% _$ ?; w* a, I; k* M
// forEach()        将数组的每个元素传递给回调函数
* a2 t! a  J6 X- ~  {9 |; a&gt; array1.forEach(function test(n){console.log(n)})4 [5 M. `" [: u# G
1
7 |! v# T$ m. r0 ?, o# k4 { 29 N& r6 f) W# `/ D- Z
38 P/ R7 W6 }. {) v1 F" d
A
: g- o8 G/ d8 [  v& W$ n B. K$ T4 [9 i( L% |: n9 @  _6 i
C
; Z3 v0 C7 x% N) ^: r4 g// 返回一个数组元素调用函数处理后的值的新数组5 Q9 H7 M9 F1 a, U$ {/ U5 i! o
&gt; array1.map(function(value){return value +1})
8 P: i6 O/ k9 ^(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
* u6 G4 i/ j( M* F1 g; M- l1 {</code></pre>
( t& T, S: c4 |: q3 ]<h3 id="24-运算符">2.4 运算符</h3>5 m( l& p6 ~& ]$ t
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
# C/ R% B: R9 p& {8 ~1 A<p><code>+ - * / % ++ --</code></p>
" t( s3 R# _/ |<pre><code class="language-javascript">&gt; var a = 6" o6 s9 Q8 T2 ^( o
&gt; var b = 3. L4 h6 C7 U: s4 A
// 加% ?" `3 c. s- c3 E- ]0 b
&gt; a + b7 c  j6 C6 U$ d  m! `
9* G2 U! F; k1 @  m8 C
// 减( N, {& ^  S0 Z
&gt; a - b
2 w: B8 B3 D/ m2 x- a3, @0 j2 H- E+ M5 v2 _1 q" ^
// 乘
: Z2 W) j! D6 X- o&gt; a * b
; H" }2 i1 i, Z8 C0 u, |% o18
5 h; C5 ~* W2 \// 除) E. x/ B+ [2 j
&gt; a / b
0 N6 [1 y- R# @0 G' t0 k, m2' x/ E' R' g9 x1 z
// 取模(取余)# d7 \1 l/ u3 A8 f4 B* h
&gt; a % b
& k: F0 ~# ?" |! j06 ^" f, Y- r: L! w: }; w  w
// 自增1(先赋值再增1)$ ]3 f, `0 ~2 P
&gt; a++7 J+ J& Q- v- v# N5 Q8 c
6
# F: H3 e/ h4 H&gt; a/ b2 _0 p" ]& Z# O
7* K. f* g: e, W5 T8 ~7 c
// 自减1(先赋值再减1)
& U. I: M0 ~5 M+ D) S&gt; a--
7 l# B! v4 H# _% h: g8 W9 a9 @5 ^) G71 l1 f& N9 K$ w
&gt; a
0 U( A. B& |8 w6
% ~, P9 X6 I, Q+ u: s// 自增1(先增1再赋值)3 E$ o! l- ^" r( e0 \& h2 _
&gt; ++a. r- @, O1 n0 x7 O5 P" D
7* a# I: p% G4 `, u% P
// 自减1(先减1再赋值)
1 w3 B8 d- U; ]5 y, |+ f7 @&gt; --a
" U* m2 d2 h! m! u6( a0 a9 H/ ?  c/ s, y3 q# |2 t
&gt; a7 `7 R9 Z8 f7 C" o- i' R
6
! [+ T# g0 d6 n  ~2 Z( T- F4 {" H$ _$ t4 v7 U; F% G$ ?  f( T# p  {
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
$ p- q5 A9 \# U( S1 e7 v. [- p</code></pre>
2 D  D; c. N) x) T1 s* G7 C<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 _0 u: [% O+ z<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ I# u+ D! [, V* l% M: Y6 l
<pre><code class="language-javascript">// 大于. P% s9 s+ B. v* [: N' w
&gt; a &gt; b
  M: Q9 P4 C! w5 ^( D5 ^6 ktrue
+ X+ C8 A7 n* b5 P" S% U// 大于等于
4 F5 f- f" o1 {$ S7 h; B&gt; a &gt;= b9 d$ F# Y  b( h; n- `4 w
true
9 |6 j/ X* ?0 e" m8 m: o3 @// 小于
# E- t4 K, N$ L5 }/ f&gt; a &lt; b
$ U+ W6 g8 |1 v, z. |false( W7 i2 f% b2 {' x9 v
// 小于等于
! F% S: F: D1 G0 d) A# u) Z$ Z&gt; a &lt;= b
2 O0 x6 t5 b* q8 N: G+ L$ jfalse  s' z2 l: b. R
// 弱不等于
2 g# x, W8 X+ h  r8 h5 z&gt; a != b
  ~7 q: U% q" f1 R1 V+ X4 ctrue
- N9 }7 k4 E( A2 J// 弱等于
/ u7 W( [! Q' }! e0 z&gt; 1 == '1'
  S( q8 d) b: \true
$ v3 n4 ~. w# d! m// 强等于2 x) I/ r/ l1 C4 {' A
&gt; 1 === '1'4 p2 u7 `' v# N: b; ?2 n- v! z
false
, s5 P; T( U4 y6 ]// 强不等于
- x( P- R2 H/ H; T9 D7 S  Q&gt; 1 !== '1'
4 A0 L$ f0 ?" N, h1 Ptrue
& q/ X4 l- y& G& H, U. Q5 |" t- H9 u3 m2 Y5 N* R
/*
( b/ Z. T" E. }. v7 RJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
2 E6 x; `1 R5 |! a*/& o  d# o6 R4 x; Q# w- A
</code></pre>
) f& A: B- d, E! K<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
2 X) w4 [8 F) O% }5 A<p><code>&amp;&amp; || !</code></p>
. M' A0 b* f% x9 n7 P6 h<pre><code class="language-javascript">&amp;&amp; 与/ K9 O) s0 ]4 j1 u
|| or
2 l, T. [; F) c; p. a' S! 非( K6 O5 K& q0 ]( k
</code></pre>
& W/ g; b: R5 J<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>) B2 k: ]/ c( C; a# X: d
<p><code>= += -= *= /=</code></p>3 j) Y- I0 y: x3 {2 m
<pre><code class="language-javascript">// 赋值
5 Q8 ~2 p1 W8 P&gt; var x = 3
8 t6 k! x- @  r. m& L& x// 加等于
4 I! L& V: U: ~$ `8 ?  I&gt; x += 22 P) E  ^: o5 x6 O7 b* Q$ J2 o1 M
5; Y4 l4 z' A8 W) G8 Y
// 减等于
$ C% n0 n/ N: @&gt; x -= 1) V& X6 _: ]  H4 G- f  V/ p
4. p, T) b' y& ]
// 乘等于6 Y' j3 O: H! \, D: a9 X4 c1 J: R
&gt; x *= 2: s2 ]5 w3 w1 x6 k
85 `$ A* a" e1 X' I: p
// 除等于+ K8 i$ d/ h. a5 H/ A
&gt; x /= 2
6 M; X5 _$ y4 M- Y, s' K4" z7 b! L; b7 [' ]
</code></pre>/ |% r" a+ ~# q4 X4 w
<h3 id="25-流程控制">2.5 流程控制</h3>
! I. Y0 Q+ U% ]3 s" M<h4 id="251-if">2.5.1 if</h4>/ c$ r  U4 R. U2 c! W4 z4 h
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
3 Y' H% T$ I/ B1 {3 y
! Q: f0 a* b% x: O  a2 @( s, e&gt; var x = 38 m4 ?: E, i: Y6 X
&gt; if (x &gt; 2){console.log("OK")}. s7 A0 a9 c: B
OK
. u# H+ ]) j, D2 T7 S0 g' w2 V
. o$ k3 [/ {8 y2 Y6 Q2, if(条件){条件成立执行代码} - o5 |! f; b5 D
        else{条件不成立执行代码}
% j& |" L% ~! }& H' ~
8 J( m) Q0 _8 K# |1 c5 u' ?3 {4 {&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
; i2 e# U' \. V/ A1 L'NO'
0 C7 C, s- j  n/ P% M6 Y: }0 z& Y4 @
3, if(条件1){条件1成立执行代码} ! }! u3 C) `3 X. q! T& \
        else if(条件2){条件2成立执行代码}4 _5 M2 K) U# M7 R1 N) c( E/ O& r
    else{上面条件都不成立执行代码}- G# G: [! }" g& I

* T0 R6 l5 n3 z! {6 F( P  a&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
$ Q+ y" Y' `4 B) [* w, W" Z; M Ha& E4 e* k% e" k7 V: G
</code></pre>
  h# j& Y( z2 T<h4 id="252-switch">2.5.2 switch</h4>
1 d7 O: K; `6 {<pre><code class="language-javascript">var day = new Date().getDay();
; s# U$ r( w' l8 `# x! G* a' [  l4 y8 Fswitch (day) {
1 F! ]$ X! m0 A, u# @- Y6 [  case 0:
; Z+ w4 D) G' M* S3 v/ O9 c+ h2 _, q  console.log("Sunday");7 Y. f, i( y! W; `. U$ `- {  c9 h
  break;) o# @5 V) ~6 `' f
  case 1:. ~: U/ `' ?8 k! j
  console.log("Monday");
6 o# B& X: i0 o" _  break;
. v+ u$ h+ f+ Tdefault:! y& x) z) J  M7 y( v' b$ ]
  console.log("不在范围")
+ y7 L* j1 z- x2 F}% E! v3 z( P4 @. r: e2 q: k: v
不在范围
3 @+ c  G9 d2 k" m% n% C</code></pre>, j, U& P3 p+ a; _7 F4 r# s. X
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
. h! H. p- ^/ P( A5 _1 t6 z<h4 id="253-for">2.5.3 for</h4>
* _! u: x" t5 U" n2 G* o; g4 m<pre><code class="language-python">// for 循环3 I. x6 B6 n8 [  h- J
        for(起始值;循环条件;每次循环后执行的操作){: S5 B% C% T8 d- R2 U
        for循环体代码/ H/ j3 O! S  W) f
    }
& U' p/ I6 p# L  u0 m
1 R+ p" c: Z6 h2 E6 A6 ?for (var i = 0; i&lt;10; i++){
7 f- c" N( s3 t6 x# T8 D3 u/ G8 |+ q! e    console.log(i)- z* C* U' I/ t- _4 \2 \
}
2 ]3 y! V; ^: e6 f) |- g        0) g% V5 s0 j$ K% w; C
        1* @! ~5 Y, ]* U9 }
        2
3 \+ ]( o! ?+ r  L5 ^        3
+ `1 n" I5 x$ ?; ^0 j0 K  \        4% k! s0 m6 l+ N7 U
        56 W  \7 y8 M# B2 L1 c
        6
& Z8 p& m! T# b7 j        7
* x9 H. ^8 Q& @4 m7 L! x        8
" z$ E2 ?: D' X* D! d: ~        93 Z& S& N3 o, l' y' g( f+ r0 T
</code></pre>
: P5 v8 B8 M& B  S<h4 id="254-while">2.5.4 while</h4>5 d0 I7 Q; p, a/ N* p. ]0 t: s
<pre><code class="language-javascript">// while 循环& h( b7 J6 H$ H: _  M2 }* C
        while(循环条件){2 C5 m0 x1 }3 c' x
        循环体代码9 j0 E; u7 u2 K' A3 _# W5 o9 {+ s
    }8 r  ]% T) \% d* u
; V3 @* z5 n  l7 M9 K/ g
&gt; var i = 0
3 B/ V. U8 Q8 ~0 ]. P6 r1 V: X&gt; while(i&lt;10){6 K( Z/ T# p( a* u5 {
    console.log(i)
" ?/ H$ Y' F! d* o7 U6 C" A    i++
, P, T. Z' i  U' m' d. U}5 t: F  ]* N# k  H4 T& v8 M- O2 t6 x9 K
0
  |4 o0 d/ h9 i+ T4 Z 1+ U! J& R) R4 O9 c' I2 n
2
- ]. I) _/ v# W' m 3$ R& z) x1 W2 U) W) v
4' ?# Z4 a' Y6 }: U6 g( `1 C
51 ]$ E& N* C: o, V* x6 ]! a. F
6
# m  w& D2 Q: z( K/ `8 W  T 7
( F8 _% c& M  ]7 i5 I( ? 8
& C2 Y9 {' n4 n6 b9 a 9
! A; P; M6 K# h9 [</code></pre>
6 Q$ s" Y. J$ o4 H<h4 id="255-break和continue">2.5.5 break和continue</h4>
5 h# c2 `9 U; Q2 d0 z6 X3 q<pre><code class="language-javascript">// break
/ V* R! R+ c. C+ P4 @for (var i = 0; i&lt;10; i++){
" m3 p, L. I2 {. B- G& ^    if (i == 5){break}
' j2 M0 F$ U/ [" m+ b    console.log(i)
& [( N/ B4 d7 \. B  w}
. j* ?3 e# l8 G( _# S7 v* B 05 l; ^% Z& j* s# o+ k  M
1
* ^  ?( ^3 t6 D0 b. B 2! J5 Z. U6 e" y  o2 I% @1 V
3, {/ f- {6 {! D6 }+ V" [
4
8 J& `8 S9 q/ @  K- R" u) @8 a& {// continue" U! l, v& z+ Q( y9 y' k, [* m
for (var i = 0; i&lt;10; i++){, ^+ I3 {! P) `) \2 z
    if (i == 5){continue}/ i- b6 n/ r3 Y5 r: ]
    console.log(i)8 a, G6 Q5 D5 l* C
}" G6 Z7 g4 x$ c
0
6 Q6 K* d' t3 M& F 1) q( f( x6 [0 L) p
2
: ~! z, X! P0 \/ N  C 3
9 H( b" w3 q7 Q8 ~ 4
. w% y  J; M! H$ J# {: i 6
3 l% h( ~' \+ O4 D/ d- a: W! t 77 B; G5 t% d' P, j* k9 x
8
. F* p' [  ?: g9 }7 k 91 Y+ E2 q% \4 E5 ~* W. ^

7 d' k" {& d. M5 v</code></pre>
: g' m; y4 Z5 e<h3 id="26-三元运算">2.6 三元运算</h3>6 f: [# T9 W. {7 }% _6 m0 j
<pre><code class="language-javascript">&gt; a9 X9 {! [7 j. I7 k" u& v
6
. b6 \- R, Y- D4 k) ^. c6 s6 G% y/ |&gt; b
& m  }- p1 s! T7 m: f& U3) g0 `9 E# M) u# D3 P
0 O9 D' i8 i. d7 }7 ?4 A0 ?  c
//条件成立c为a的值,不成立c为b的值
5 _' ^3 \1 T+ N+ b. i! Z&gt; var c = a &gt; b ? a : b
6 U9 k) c' j3 s+ a2 ^( O&gt; c6 B6 g$ F$ p% w/ |; m8 y
6: c1 E# ?9 C& z- A% H! z' f& p9 j# r
: p0 h, c. e- E: p0 B/ G5 z
// 三元运算可以嵌套4 ?' }" u8 m/ _9 s( E. O
</code></pre>
0 r8 V# ~$ ~2 J3 Q: J* C<h3 id="27-函数">2.7 函数</h3>4 ?/ Q4 z& E2 m7 B0 X4 V/ B
<pre><code class="language-javascript">1. 普通函数$ V( A4 c1 k' M$ t6 y7 Z5 T
&gt; function foo1(){0 [' K( r& P/ w8 R! L3 g* b
    console.log("Hi")! ?/ |" `. p4 s3 ?5 ?5 Z' j
}, H5 ?; I. g& `1 N. t

, [' ~$ o& O/ v9 D&gt; foo1(). x% x* ~$ O2 k- g
        Hi9 K% c2 F8 J0 H5 N
2. 带参数函数
3 B; W5 x! }/ j) d: K$ |4 p+ Q&gt; function foo1(name){( P& L/ H7 i- N$ y* E
console.log("Hi",name)% I/ K0 s  x/ L/ R0 k' @
}0 \7 ?9 U8 Z4 u
- a. o3 {- C& n' ]
&gt; foo1("Hans")
( {, R* i- j: L# d2 ZHi Hans
8 ~1 A8 c+ `6 h- ^  I5 P. Q$ R0 R+ q' D! K
&gt; var name = "Hello"
( `' B* z! d3 U+ M2 _, S7 n' g&gt; foo1(name), @( g7 u6 V5 i) f
Hi Hello
, S) T" H% P( A4 t
2 T% Y( h4 ?! e* |  d3. 带返回值函数) p9 \/ I$ ]8 w! J
&gt; function foo1(a,b){+ A+ r# }; y% ~% H
        return a + b   
- y( h! t4 {$ s+ J}/ i) i$ z, E% n! o, V9 _) D
&gt; foo1(1,2)
! e# x+ z( g" F5 ~3
6 [  z# F  F: W, r&gt; var a = foo1(10,20)  //接受函数返回值1 h# E' H" ?7 ^& ^: F3 c1 I+ g) v
&gt; a/ t% ]" i# g. I) p) h* ]/ n
30) N* E1 a9 n: w. g4 A& M
$ {& Y& W" A1 y- B1 J; S0 L( S3 L
4. 匿名函数
- _. ?. v& f9 q) e; D. w% D+ {" D&gt; var sum = function(a, b){
$ Z; Y$ b1 }( c3 E9 h  return a + b;
( N" V6 g; |; ?" l}  `/ c4 {- Y9 d1 R
&gt; sum(1,2)
# l( H5 H1 p+ i9 E" k3
+ \0 M) X: L0 r# I! Z; f/ x# S1 g
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱( d7 q" j, \: `! x" j
&gt; (function(a, b){
) O7 g' z) B; C; R: [  return a + b: ~) d7 X& M9 A% }1 P- ]9 W/ _
})(10, 20); u: n8 p( O3 a  ~2 }
30
6 m7 O, M# F4 I! c( C
: ~$ q8 Q$ Q  u* H5. 闭包函数
- U: X( h1 b' [3 v// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
+ G) N9 G' [. v5 F+ Q* ?var city = "BJ"9 K6 I8 V+ b- r
function f(){
: U& S7 i9 E. X    var city = "SH", M: f: ^! B4 k
    function inner(){7 [+ J8 b6 \' H, L5 D
        console.log(city)& d; Z* Y% `) Y# K6 u$ O# k- t
    }
! W9 P: h$ [0 U8 @/ A" l4 w" @    return inner- z* Q& E& y' ?6 X
}$ M9 e8 ^4 W& H; v4 a
var ret = f()
& m- `- l+ k/ G  Y7 |2 eret()
' `* k9 M) {) X. [. y: Z  |. L执行结果:
: C# ]! j& x6 Z+ c6 V- H9 pSH6 k/ w2 e. i; I4 j
# i0 r; g) \+ p6 _: |  d, N1 f
</code></pre>
2 x5 a( W5 ?/ b  F' G$ }/ O$ g  _# c<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% y8 u" e' R; H  [2 I- o2 i/ v<pre><code class="language-javascript">var f = v =&gt; v;
2 F$ _) ]8 W/ o) f/ q$ y# A, o& |3 B- P// 等同于5 \  a7 A! Y% g$ V
var f = function(v){# I  K9 g& r8 c4 m" g
  return v;
) U# L. D; y0 k! Q2 f* s  f" r}& {, N/ h9 n7 b/ Q
</code></pre>
$ n4 k8 T+ ^) m<p><code>arguments</code>参数 可以获取传入的所有数据</p>* K7 S" p+ C( n) i/ w7 p1 p
<pre><code class="language-javascript">function foo1(a,b){( d& e: ^# e' L$ S; d- Y# ~2 w- o' B* Z; T
    console.log(arguments.length)  //参数的个数
. m- H! r5 r/ W: `! l* }( }    console.log(arguments[0]) // 第一个参数的值/ n1 j2 Z/ M7 `& n+ V
        return a + b     P2 [+ k7 c& {: G& z$ x$ p
}. z7 l$ E: R: @9 @/ y3 m
foo1(10,20)
' K) F8 |! D/ `5 z( n; N2 g) b$ Z5 r结果:) A% F4 T4 U  N2 A* {; t1 j
2          //参数的个数
9 J1 O6 @' a6 k+ E* @10        // 第一个参数的值
# C$ y: j* p: R% l4 T30        // 返回相加的结果4 e3 \0 l6 L+ \8 S) @. |  R  ^
</code></pre>
' R9 G( K+ Z/ w2 ?. ^. L<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
. Z' l6 N& E, d) Z; ?: }% k- _! r<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
8 f# _& u  [( _/ a/ z. d0 D7 {<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
3 {  A. X' k9 \<h4 id="281-date对象">2.8.1 Date对象</h4>- h5 z2 e; }% S5 e+ A/ N" H
<pre><code class="language-javascript">&gt; var data_test = new Date()
; h+ a" {. c) O5 q+ b+ i: z5 N' `&gt; data_test8 Z% M' v6 i2 Q# y1 W" V. Q
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)3 F  I& F1 }; V  q; G) Y' m
&gt; data_test.toLocaleString()( H( D! y" r: T+ }8 b. a
'2022/2/11 下午9:44:43') y4 ~8 C2 Q6 c& t- C! X. \
' p* h8 Z. ~9 W1 r, g. k
&gt; data_test.toLocaleDateString()
; i9 J* K; Z" z! I; v. q# ]'2022/2/11'
9 t. p. ]/ I% Z3 H7 Y/ M# g) d* U
- L5 ?/ o! {8 D! e% l2 Q' i0 S: X&gt; var data_test2  = new Date("2022/2/11 9:44:43")' `5 I6 _; }' h
&gt; data_test2.toLocaleString()+ `# |3 s. R4 _8 w: }0 [) G- u
'2022/2/11 上午9:44:43': }7 R2 ?! Z* f8 k* }6 g

$ G( y. P: X5 ]; w// 获取当前几号7 y. P+ k$ ]8 Q. p9 |
&gt; data_test.getDate()8 E# r8 f) c  Q- Z( ^0 I2 }7 ~
11! O+ b7 b2 X7 d
// 获取星期几,数字表示1 I& J, z5 X7 b/ V( @) `/ R) \
&gt; data_test.getDay()  
3 t3 q3 J7 X' f3 T* u5" M9 l: P. p  m3 S7 n: ~2 f
// 获取月份(0-11)! P6 |6 L6 i4 K! q; S8 `( J
&gt; data_test.getMonth()
& }8 [) F  l1 P1+ m2 W4 Z. |' c
// 获取完整年份2 I! N4 X8 `- h; k' r# A
&gt; data_test.getFullYear()
; d3 w5 o8 o) T4 M4 L+ n( {2022. }# P6 q3 ]; [3 ?3 J/ J+ H5 F
// 获取时3 t6 _7 ?- [2 m* y% B
&gt; data_test.getHours()
* d% R/ E: R  M1 q212 I% q- }6 o- P- N' A9 F% l$ q: ?
// 获取分
& c; }3 J" l1 S  [- {* _: O&gt; data_test.getMinutes()
! Q6 A1 W) T% Z; V44
7 G7 N9 ]: W. _+ s* m3 w// 获取秒
. d8 D/ a6 ?- Y# q) }4 s3 u. a5 h1 d&gt; data_test.getSeconds()
) J0 c+ ^1 S: Z2 u7 ?% b43/ u! Z4 W) w' U; Q
// 获取毫秒  i2 E- o  y, i: Z% |  I! W
&gt; data_test.getMilliseconds()3 x4 o; n$ O2 a0 Q7 u$ P/ Y
290
- ~/ ]8 j+ j/ R8 B+ D7 p// 获取时间戳5 p' c% W" V3 M# e% Z% J5 _: j
&gt; data_test.getTime()) x; \$ w: U1 R3 S9 b. M6 c
1644587083290: E( O+ p0 @* M, T
</code></pre>0 c& f6 Y6 [6 M
<h4 id="282-json对象">2.8.2 Json对象</h4>
) j2 l1 }/ @" x  ~<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串! K2 a, s( W  I0 A
JSON.parse()  // 反序列化,把JSON字符串转换成对象0 |5 p' j4 Y* H* F& W5 c* l
4 C+ s; X& h& a- E% Q7 ?
// 序列化5 I1 V  U7 ?  ~4 N8 U
&gt; var jstojson = JSON.stringify(person)
, W3 h6 {: B6 |/ g: L&gt; jstojson  
" g6 r9 ?& t: {$ y0 n* M'{"Name":"Hans","Age":18}'1 s/ q8 r1 _9 n

& W- g) N6 `5 G! C8 F// 反序列化
2 h4 R, f; S* H4 f+ M/ s. y&gt; var x = JSON.parse(jstojson)
& F. e0 n: U: s) {9 d, e5 X&gt; x
/ [5 R" W& c2 o1 q' m  j{Name: 'Hans', Age: 18}7 O) w2 a8 c; F, |9 @
&gt; x.Age
* p$ d2 c; m8 w" ?18% A8 q1 S1 `0 I$ n; _
</code></pre>8 m+ M5 W/ H2 J3 K2 i5 g# b
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
  S7 v1 V1 O( m) ^4 ~* x6 h9 M2 q<p>正则</p>
' d0 [* G/ [; h# S<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");4 u' Z. Z. p: l
&gt; reg1
) s* d, E7 m( T: Y' a/^[a-zA-Z][a-zA-Z0-9]{4,7}/
# g# c" j/ @  l) z- D1 E&gt; reg1.test("Hans666"): ~' v5 {; u# e# f
true
, B  O& S: B3 l; C
  W8 T& }# a+ }1 M  q0 A' D&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
3 H. T0 l' T/ W: E1 P&gt; reg2
3 A9 u& ]: |) N' c/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 U8 Q: X; E2 a/ k
&gt; reg2.test('Hasdfa')
, u6 h2 e" k: O2 O- e" c+ Dtrue
+ C& V$ x& C& b$ K) P
5 L, n/ E' t: V, E9 @$ T全局匹配:
3 L8 w5 X+ Q) t&gt; name! |# S3 Y8 |/ c  ^+ e- L
'Hello'  y+ ?1 G2 N& L' H; \/ `
&gt; name.match(/l/)% e7 I4 m0 Z% |: `! f; v1 g# j0 g
['l', index: 2, input: 'Hello', groups: undefined]9 t' s( d$ r9 ]& V  R+ K9 s

0 P( l) B- f  K6 e/ ?* }" R! G' ]&gt; name.match(/l/g)# u' N4 l5 c# Z. g
(2)&nbsp;['l', 'l']
0 m4 K: r6 B. ~6 V7 }// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配! q* `: o. F4 p+ U

6 G, ]1 G) e0 i: M6 e) _$ n全局匹配注意事项:0 m1 }: p: V% d; W! b+ H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g  t  o4 ?, o4 s
&gt; reg2.test('Hasdfa')
) D. K9 P1 n  d& Htrue
3 e+ ]  d+ M2 W&gt;reg2.lastIndex;
- T+ A" @* O6 M1 k) C$ Z6* B: g) c" e6 _% A; Q/ f
&gt; reg2.test('Hasdfa')
1 X) t0 w) E  c5 u1 G6 ^false- v7 C3 I4 X  S
&gt; reg2.lastIndex;* ~# P5 N) @9 q7 w
0
6 C2 _5 |& _, m+ N+ M&gt; reg2.test('Hasdfa')3 p/ g0 X* ~' B6 J9 ~
true& W' T- c: D& F% _
&gt; reg2.lastIndex;  ~+ p' ]( b0 b  |
6
, ]* z! c  @8 V2 U&gt; reg2.test('Hasdfa')3 w8 D+ F. i( F
false2 e0 w9 C, l4 J& g
&gt; reg2.lastIndex;" l7 C# U6 k) U  M; L8 F0 D! f% ]
0
* M$ H' v' `9 ]! h* I3 C1 _) v// 全局匹配会有一个lastindex属性, X/ o. B9 X; a, d1 F
&gt; reg2.test()/ I1 Z! z% Z% R4 B. I
false* ?6 a( ?2 V: n6 J4 `
&gt; reg2.test()
, T5 Q  q! G8 T/ k7 v) R" R6 ktrue! o  k2 A3 }3 u* d
// 校验时不传参数默认传的是undefined. D, |6 B3 E1 ]! j
</code></pre>( F/ o1 k: e) v9 F! a
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
% Y/ W5 b! i$ N+ e$ X<p>就相当于是<code>python</code>中的字典</p>7 o, C. }0 c5 W. {
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}, D; A/ y; J8 P/ V7 M
&gt; person, C, g, C/ V$ k/ C+ Z
{Name: 'Hans', Age: 18}
# W/ d- K$ z6 v9 i. {&gt; person.Name; ^' j/ `& n8 n7 W8 J5 r- _/ u' g; E
'Hans'
8 }: r9 V7 X4 x: y" b! O# r&gt; person["Name"], K$ X7 c8 ^: s, L2 L
'Hans'! g3 l" P2 O- v7 `) t- M( i

# G5 [8 _% w1 F9 G) ~+ E// 也可以使用new Object创建. c0 J# i4 C5 |
&gt; var person2 = new Object()! M) I7 m) b3 v
&gt; person2.name = "Hello"
- T. H4 Z8 l# @+ p  X'Hello'1 H+ Y# h4 G' ^9 A+ K
&gt; person2.age = 20
* e" a% i9 ]5 A20
5 e1 C* u; U+ `' V% a</code></pre>$ U" X7 h/ H& N. d* f
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
$ ^2 ~+ J2 x  ?/ \" Z<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>, P( [2 S0 s' W# j
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
- Q+ W  H( i; N<h3 id="31-window-对象">3.1 window 对象</h3>1 m; h% v9 Y3 A) L
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
" k7 p3 x6 x0 @7 {4 T<pre><code class="language-python">//览器窗口的内部高度
6 h6 }4 @, k# I1 X0 y2 F) x) Gwindow.innerHeight
7 e" J% @* M+ c- p6 m" b706
. |! s/ x7 d7 a% Z' y! w" Q//浏览器窗口的内部宽度
" V5 o/ c5 b' R* swindow.innerWidth
" I- C$ T- I# \! B1522
! F0 o" j% [' J# Z- F& E, P// 打开新窗口
( A" Z- T# k' m6 Qwindow.open('https://www.baidu.com'); _1 N, _( F/ x6 U7 V! V$ G
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
0 q$ x. k! a7 H7 S( D  s, L// 关闭当前窗口
" X# g! p. q. N' A! dwindow.close()
# h* {7 a( p2 ]//  后退一页/ z! _. e5 B! G6 l& v4 ^' h1 V8 p+ T
window.history.back()
* b" Q# j0 E( z& C: f3 ]( R9 G7 T0 a// 前进一页' d+ P1 z6 Q: X2 N$ ~. u2 q+ D
window.history.forward()
. d# W8 S% h# q//Web浏览器全称
/ g3 g: f, `2 b' h+ ^6 f9 x2 ~window.navigator.appName
# n4 h5 h  D! ^# l- j" n'Netscape': |% m9 |& p- Q
// Web浏览器厂商和版本的详细字符串
8 i" O" ^/ ^) Q$ t, Y7 d: y5 Twindow.navigator.appVersion6 d% C$ @5 c) M% m' [9 ]% H& f6 f
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 a1 Y. Y- }  D6 @& W6 |/ N7 C
// 客户端绝大部分信息, `8 ~9 C2 r. B5 t8 Z; B
window.navigator.userAgent3 f0 u* _  o$ F7 Z
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'& ~: {' A2 ^$ Q; z$ P8 u0 H
// 浏览器运行所在的操作系统
+ W5 g& s1 `- Q( F6 b# dwindow.navigator.platform
# V5 O* O1 H' o. V5 v2 K4 ~; ~& `3 M4 y'Win32'
' ?- y3 W& H( R9 n# H
# W3 D; R6 C, ~4 Y0 i$ C, G- I//  获取URL
1 }6 G) U% Z8 ~: {; Xwindow.location.href
( e* z# o' x' X& W// 跳转到指定页面6 }% X  T; ]( ^
window.location.href='https://www.baidu.com'0 M1 w4 N- T% c# K( H3 S- H! a8 A
// 重新加载页面
6 _( g4 Z4 l: Pwindow.location.reload() : ~3 ]* |. _1 ?# F) B
</code></pre>. U  Y# [3 L7 A7 p1 Z' {
<h3 id="32-弹出框">3.2 弹出框</h3>+ I# Z, H6 b( y/ c
<p>三种消息框:警告框、确认框、提示框。</p>
' k9 i+ G; X% B' B3 M0 t7 v4 R<h4 id="321-警告框">3.2.1 警告框</h4>
3 t( y7 L9 C! d4 A! q" [<pre><code class="language-javascript">alert("Hello")9 T( O" k/ C9 H* s
</code></pre>
( H# a+ O! h' m2 h5 }. `<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>  |! g( O% Q1 y# n
<h4 id="322-确认框">3.2.2 确认框</h4>
( u% J6 S+ R* o# }5 Q<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>0 |# _! [; x# g% f0 z3 |$ ]( d
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true. W0 W* N; f3 h3 g2 l
true
3 u" w( y3 `  o7 V9 K1 _5 B&gt; confirm("你确定吗?")  // 点取消返回false. t$ t) e8 @/ a; ^+ I2 e1 D* m
false
3 b0 F* e4 V1 n  D& E# Q</code></pre>
# D; u% p% ]6 ?( v# J<h4 id="323-提示框">3.2.3 提示框</h4>
$ @; L) D: s5 E& G1 I/ p. `  q4 T<p><code>prompt("请输入","提示")</code></p>
" l/ L2 h. d, R- E7 |<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
4 _7 ~) y. p- C3 d' k9 [<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
" z( m& E* A4 G<p>如果直接点<code>取消</code>后端收到<code>null</code></p>5 _9 ?" E. B0 f+ v8 q! |! U
<h3 id="33-计时相关">3.3 计时相关</h3>) r6 U* b: y: y
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>) \3 G# Y5 C. o
<pre><code class="language-javascript">// 等于3秒钟弹窗5 j6 I, ^4 ?2 o' h
setTimeout(function(){alert("Hello")}, 3000)! V$ |+ @7 o$ f8 t  Z, |( B0 t' [

$ k) l/ W. n" N2 [8 P. z* Lvar t = setTimeout(function(){alert("Hello")}, 3000)! A: J$ C3 ?6 i; G
. K/ P$ N) o3 |  O5 ?' R# a5 S
// 取消setTimeout设置2 n: |7 Z1 X$ p) ~3 j
clearTimeout(t)7 O. v" v! J) l
</code></pre>0 |9 X$ T( v7 m* S
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
/ n2 y5 D% M% d2 s# G<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
1 @; Q  \6 u+ t6 ~- |<pre><code class="language-javascript">每三秒弹出 "hello" :
* Z/ ]( @' T7 E7 U0 A+ P' }setInterval(function(){alert("Hello")},3000);
9 ~: [- e" O% Y1 Z4 `</code></pre>
6 Z# l9 h, V  c8 I+ ]<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
/ a8 K& ^& i, }7 Y. z* a  a4 j) B2 v<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
- c4 P7 H' m* h" B, a- u+ r$ `# q//取消:
# L% l3 s. O/ |/ K' C2 sclearInterval(t)3 m' g9 ^/ V, o: X& [" K' M& }8 A
</code></pre>
, o4 y) j! k! Q& U' j% z- j
" `, a# r( a3 G$ W7 O3 y, Y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-11-5 14:25 , Processed in 0.108931 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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