飞雪团队

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

前端之JavaScript

[复制链接]

7903

主题

7991

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26039
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
; l4 \/ C7 i- w! a' q, Y0 [
<h1 id="前端之javascript">前端之JavaScript</h1>% F4 x8 K$ ~! `) X" y+ V: ~
<p></p><p></p>
; f: p* l0 w* g# C<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>; t8 w& A4 V: k) r! J
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br># V# B$ K$ J5 x! J5 t) r; [& ]: H
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>; P8 j3 R5 u2 @; _
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
; P4 Z& k, q  A1 R2 ^它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
( ?7 Z* a) `9 x% X* u' i<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>& }; r/ y7 q0 @9 u6 P7 Y
<h3 id="21-注释">2.1 注释</h3>
' e4 b! Q/ c! Z$ I, F<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
# g4 I3 P+ S  ~, n: u<pre><code class="language-javascript">// 这是单行注释
" r  O& B0 f7 p5 c* S: @7 @! L2 M; K8 Y  k' R
/*
5 w2 w6 w/ h- @$ x& {4 Z5 o% `这是多行注释的第一行,
( [6 f  c0 P. s0 z# P, w2 ^1 E这是第二行。
" [; ?! u" i% R; S3 D4 ]; v: Z*/; C+ r& p, `2 r  h  d# O1 _8 U
</code></pre>% d' a  H9 h2 E6 {
<h3 id="22-变量和常量">2.2 变量和常量</h3>& h1 |( A3 b  V3 g$ ]3 e* H
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
$ W0 g* S; A% m<ul>" V3 u) s3 Z6 g: K" P
<li>变量必须以字母开头</li>
  O. S  c( f/ \  C+ _: ?) W<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
$ n3 Y, B( R7 O<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>6 ~0 A" r' ?3 q" k" y6 ~
</ul>% U, ^$ _2 k! Q! Y
<p><code>var</code>定义的都为全局变量</p>
# ~: N# b$ B/ ~# N* E2 |7 h<p><code>let</code>可以声明局部变量</p>; C5 Q9 }' l! P1 M% A# a' ?
<p><strong>声明变量:</strong></p>
& [( u0 o: d0 Q% x6 A# [2 c2 P<pre><code class="language-javascript">// 定义单个变量' d; P7 a$ ]5 M- ~2 n. g0 W# J
&gt; var name) J5 }# l" l7 ^# N: Y
&gt; name = 'Hans'9 ?) i% j: |% }' \
//定义并赋值
) k  |2 J0 ^. J' d9 j&gt; var name = 'Hans'' d7 H- _" v, e2 h% s; _7 v5 k
&gt; name4 U$ S& m2 S  M0 }/ \( I
'Hans'
! i# J& X) U$ t( i$ q& R( U# Z+ F1 g6 d/ V2 h1 f
// 定义多个变量
* Y/ J: l- W9 P&gt; var name = "Hans", age = 18  z  i7 q) E; I. t$ u9 B3 |
&gt; name
/ u/ X( E! \4 T( e9 i0 L. y# C'Hans'/ d6 a) }5 @0 e% e8 C5 g
&gt; age- G6 T% S+ A. X
18! H8 I% x* n3 h! E, x1 G! Q0 d# s

' d9 T4 W9 }7 v& K5 E2 K9 c, q//多行使用反引号`` 类型python中的三引号! w  E0 z5 Z4 Z) ~0 G2 z
&gt; var text = `A young idler,6 x1 l9 p: o3 d' L. f5 d2 Z
an old beggar`
, X4 H- g, B5 @* ?# x&gt; text
- a4 C: V, ~9 S0 K$ c'A young idler,\nan old beggar'
" h, C$ F, S1 F2 g/ g3 X</code></pre>9 b1 b/ m% U  E) ?2 i/ G+ p" M! n1 u0 ^
<p><strong>声明常量:</strong></p>0 I- e. ]# B  d) n8 C! o
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>+ E* ~) t, R4 Z9 P/ p: b2 q
<pre><code class="language-javascript">&gt; const pi = 3.14% n6 {( [$ J6 y7 H
&gt; pi
3 K3 Z+ p- a2 @  T# ~3.14' R: P  Y, k  N
&gt;  pi = 3.01
8 R6 U' ]1 M  kUncaught TypeError: Assignment to constant variable.
0 r) u1 a. b& [4 }    at &lt;anonymous&gt;:1:4
( i) C$ U) g+ P& {6 r5 y; J! g, k# }; D
</code></pre>2 [! [2 j6 ^6 ?- j/ a
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
- f- O, K9 ~9 V/ D/ j6 ?<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>+ v" A% u1 }" L
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
4 A9 d: {2 N2 U1 b( D: @1 D+ W8 y<h4 id="231-number类型">2.3.1 Number类型</h4>: X" m7 P) N5 G8 p/ Z
<pre><code class="language-javascript">&gt; var a = 5% U" G$ ^) u" v  }3 q- I
&gt; typeof a   //查看变量的类型  : X* B$ e8 u( U+ j! k7 `. L
number
- S: q: b* d+ `/ s  }9 g7 a# A9 E5 @) o( [: z/ d8 E, u
&gt; var b = 1.3
) `9 C, t  O6 s& {&gt; typeof b
1 |1 q  q; M4 g# ^6 _6 s6 ^number6 W3 p* T& N! {; U$ w' b5 g
5 i; ?! f) P/ K; v2 }
// 不管整型还是浮点型打开出来的结果都是number类型0 o9 V3 C$ q0 ~
$ @3 a, e5 Q; J5 g5 T
/*( [$ p1 ~* u4 R& w* ]
NaN:Not A Number
9 g9 }  [, ~7 E+ F! `NaN属于数值类型 表示的意思是 不是一个数字
2 x3 X3 `0 ]( D- C*/& D! M/ ^& c1 W4 g2 E
4 w7 g0 N( ~4 q
parseInt('2345')  // 转整型/ x# R3 \! \" P; ?" R
23451 a2 H7 j' O: D% q/ v
parseInt('2345.5')2 ]6 B7 B  Q% W  q7 h
2345
2 p5 G1 f( r) `4 HparseFloat('2345.5') // 转浮点型
3 o2 B) \) J& W; S$ \8 @- L2345.5
% Z% Q% [0 z; K  _8 iparseFloat('ABC')
' r1 I5 O: `* h* c% d; }3 pNaN
) N# [2 M9 w% I4 V' x( LparseInt('abc')
9 q& o# u1 D# l. y' iNaN0 P1 n! i' {9 c
</code></pre>
- `1 f( m: H" z! `<h4 id="232-string类型">2.3.2 String类型</h4>3 y0 ^: d. K: R: G& g/ Q
<pre><code class="language-javascript">&gt; var name = 'Hans') b4 V1 w( Y5 f4 n
&gt; typeof name
$ w: p4 F& k5 y' v, T'string'* Q4 S- A! K( g
: H6 c4 z! Y2 _3 S3 z8 L7 ?$ ?) _
//常用方法
9 x4 u% U8 s, A, w// 变量值长度
4 Z1 f4 M) @# I' e& x&gt; name.length- i0 L6 b/ a9 G  [9 {
4( }1 G% n" o$ M4 s9 }8 i
// trim() 移除空白
8 w% z' C$ \1 a. ~) a8 R5 D&gt; var a = '    ABC    '6 f: r, Y( k. w( q
&gt; a, L6 T; r0 B2 P) Z
'    ABC    '
! N9 ^: f3 B. w&gt; a.trim()
) L: f  G9 _" t4 M/ U6 m) h. H8 ^) ?'ABC'
' @# z, q7 L2 Y0 c//移除左边的空白& [; S( V+ O2 p: e2 g, `0 O
&gt; a.trimLeft()- [# N4 J" {) l8 r7 Y0 S1 V
'ABC    '
" z# V+ D. r2 a/ M( Q" K/ w//移除右边的空白
! x: Y9 X- b$ J" F4 L, s3 |  s&gt; a.trimRight()
* y5 N( V4 z  Z' T3 i' P. G'    ABC'
9 Z3 L( ^! |4 k* k( _0 d4 N6 E0 Q8 g$ O* f2 u6 ^0 [" H
//返回第n个字符,从0开始
9 C; }# H* p) X4 ?&gt; name3 i3 D+ M# ?+ J& r  a- Q- ~' w$ D7 `
'Hans'
3 |( V; C- _+ a&gt; name.charAt(3)
5 K& V- D9 W/ z0 L2 F/ m, B( v6 e# g3 p's'' \9 Q9 `2 @. z
&gt; name.charAt()
4 K; F1 z5 O/ Y1 P) T4 g: F) a'H'! f0 j! {/ D- q5 O
&gt; name.charAt(1)' h1 M" [% Y& a+ d! V' z% I% r
'a'$ @1 w) E' N  [
# \9 G* S3 l- y0 x. H1 s
// 在javascript中推荐使用加号(+)拼接
, Q& I" P/ B- g- k&gt; name, i8 j" M$ J! G4 m
'Hans'
$ }! d( d  I' Z+ u# I4 O; x: p&gt; a0 a6 d& ]8 ?* V
'    ABC    '6 ]6 N, R. C8 a( m3 ^+ {. w3 M$ T
&gt; name + a/ Z2 e# i$ B  D* t
'Hans    ABC    '
9 S! Y& M5 a: S// 使用concat拼接
; n- B) _' L3 p# W&gt; name.concat(a)
( x' h1 H: A/ l8 C0 Z3 z+ z# y'Hans    ABC    '
: _8 H$ h1 e3 M* @7 ~
- n% c. u' [& n7 s$ {6 l//indexOf(substring, start)子序列位置
1 i3 w8 y* ~# i7 _
% D; ]7 D1 b2 k* d/ N( P; {&gt; text
4 x; v' Y: r$ G* x+ d'A young idler,\nan old beggar'6 N# G& r- c8 H; c# y
&gt; text.indexOf('young',0)
2 X1 D+ B# n7 t) N* \; b23 F- y$ m0 \$ b1 \% K+ }
, B+ G, O; k8 l& O) T) H
//.substring(from, to)        根据索引获取子序列
9 a2 [" D# H+ p&gt; text.substring(0,)
0 ?- T$ @' t+ l, a; Q'A young idler,\nan old beggar'& E) \/ a% B# O% s' A
&gt; text.substring(0,10)
( N. `+ \' w8 M! [, {+ [" N'A young id'
* _- R! H' }, C: X; U# B- p1 T& i' u7 ], b
// .slice(start, end)        切片, 从0开始顾头不顾尾# S' s, j& f) g( b/ q  z
&gt; name.slice(0,3), |0 p+ s3 X. R- `4 Q+ _% H# ]* H
'Han'2 ^% C5 S1 L6 n5 s8 K9 V
/ i+ E& n5 S. W! o% |2 m
// 转小写) o% p. S4 [/ x2 A0 g
&gt; name
5 Z% B5 X% h: @3 D8 ~/ o' W0 b'Hans'
! B) u. x8 y* p' n4 c% R8 U. U$ s8 m&gt; name.toLowerCase()5 g8 A* j" o6 y. C( x
'hans'8 p5 O( W0 t, Y' L3 V7 j
// 转大写# R; M. ~6 c2 y7 |: S! c9 c, I1 F  \& l/ Z
&gt; name.toUpperCase()1 h8 M* U' @2 \& C; [
'HANS'/ a8 R; [4 i) W( ^+ d' o

6 I$ ^$ g3 u  w# J3 J4 M( j' t. F// 分隔
- ^- B% j; a, J$ x2 r0 g( D&gt; name
# f# u/ [% k* }% I1 Z3 Y, ^'Hans'. v: Y8 i* V5 s: i# z! x" s9 T( g
&gt; name.split('a')
: l. R& Y, D+ m6 p4 q" U5 Q(2)&nbsp;['H', 'ns']
4 p+ @8 s$ [* E' i  g) s" J</code></pre>- j" i$ d6 M& n! s0 e! G0 v/ o
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>5 }8 T+ ]& Y9 Y" ]8 Z
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>: o, v' z- K0 s$ b- z; E
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
) |; e! Q  D$ f6 a$ o& [<p><strong>null和undefined</strong></p>
9 `/ z3 z7 L" l# P+ M: P<ul>
: U  ^, j1 I+ V( v! w. e4 @6 m<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>: ?$ s% |& b) l9 c9 P  |
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>" H! }8 H" `# I# r4 x, _
</ul>
2 `' L- S+ I5 f3 o  }, C3 N/ n0 t5 T( p<h4 id="234-array数组">2.3.4 Array数组</h4>- r( f# ^' ^4 \: z; |
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
' i5 }4 k6 K8 u7 q/ {<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
: v8 v" `$ ]6 s. V&gt; array1' X8 `( S7 s: b3 l, c+ H6 P$ t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ H6 }! g: D6 c# [" E# k. e, T
&gt; console.log(array1[2])  //console.log打印类似python中的print' g$ r$ _' p  f0 L0 _3 Q
3
2 A& M; x# W: o! ]. D// length元素个数6 N4 I& y, I5 ^7 U7 j4 r) j
&gt; array1.length
/ l$ q8 q+ o, B/ }4 O61 F" C! G) V6 i% N2 L* r
// 在尾部增加元素,类型append4 V/ L& I# a6 p3 e( U$ d
&gt; array1.push('D')
4 P8 V8 H% k; G% L7( ?' M( a1 K: f: Z; l- c  ]. m1 d
&gt; array1
+ X* ]6 m8 m, E5 l# E0 \8 C(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
) ~# \& n! J7 E, D// 在头部增加元素
% c" l: G8 m5 G/ S&gt; array1.unshift(0)
. N! O: M9 P& y& p2 s# q" a8
& I* [2 d% B3 d& T/ V&gt; array13 k) v; o3 \0 P2 l4 G
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']2 r! A; S. K9 b
7 u; w8 t! C7 S; i+ K" ]
//取最后一个元素
" o9 h( m% X( Z- j&gt; array1.pop()+ w3 ]5 X/ b9 d* }* V, o
'D'
3 E" T/ P3 u! D# v+ M  b&gt; array1% F0 k9 c4 G8 U* O5 h5 [/ @
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
2 H' x/ \- `; d- R9 B7 ^  j# |//取头部元素
0 j5 e2 V  z- B) u% k&gt; array1.shift()8 P& T  p2 y/ w
0
( G% S. H- f' F; i5 L% ^&gt; array13 Z( u1 m. X( f# t6 G* O( B. Y
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']3 q# Y7 t' O* r( {7 u
% ^; V7 s( }7 b7 d) z% F+ J
//切片, 从0开始顾头不顾尾8 [# ~) T, b1 P# Y) D8 k0 _1 ~5 U- t
&gt; array1.slice(3,6)+ {( ?! v% Q! O
(3)&nbsp;['a', 'b', 'c']
% B' C7 O5 a7 Y, y) Q7 [// 反转0 w9 U6 ?3 `7 _0 [
&gt; array1.reverse()
& Z5 W1 z$ h- ?3 k(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
2 H& d3 j; k9 [: c0 N, _// 将数组元素连接成字符串
  D3 O% K4 g6 a2 P2 U7 \: H&gt; array1.join() // 什么不都写默认使用逗号分隔5 q/ J! b8 f% t3 M. D4 K
'c,b,a,3,2,1'
" b, R; ^3 v- H&gt; array1.join('')
: m, X. n* S+ D, t: Y'cba321'
, j+ w. h% t+ l&gt; array1.join('|'). G. v, {: p* _; v
'c|b|a|3|2|1'2 Z/ [( C. e7 w
; ~9 \) }. M3 M) {/ S3 i4 [
// 连接数组
( {+ G# R0 E7 |: x% B4 J( m&gt; var array2 = ['A','B','C']
4 x, W! \, l+ C; L  i&gt; array1.concat(array2)
1 g6 z9 m: P, Y(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']% \- b9 |) ?: i5 p* p) f3 l6 |8 ]

! ]  p+ g+ E  R% u// 排序. }5 w' Y- w. I; p
&gt; array1.sort()4 ?; d  [. [+ ?
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 H# F) x* P' B! Y- M# {, e8 M
// 删除元素,并可以向数据组中添加新元素(可选)
4 N% ?# _4 C3 k/ h( P&gt; array1.splice(3,3)  // 删除元素
( d$ K5 i; Z3 l3 {(3)&nbsp;['a', 'b', 'c']
+ r$ u' z# Y: @8 _4 |7 T&gt; array17 h0 p- R+ m8 P! P
(3)&nbsp;[1, 2, 3]* Q  P/ ?( d' h; R( ~
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
8 L) C9 q% q* S1 N[]
+ e  q% O" L# I&gt; array14 k- s8 w* _* b
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C'], \, ]/ a0 w! H

! R9 o& {- k) Z- R/ W+ C- k/*0 |# x  a3 ?- S, x; x* f
splice(index,howmany,item1,.....,itemX)( a- ]1 x3 t3 G; h
index:必需,必须是数字。规定从何处添加/删除元素。& L2 V8 s: \/ g' e0 e- w& V2 ~
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
$ [( z9 J( c- v' _- N9 b/ T+ z/ A" Kitem1, ..., itemX        可选。要添加到数组的新元素4 C5 [+ [4 C5 H" D; m# D
*/
+ V6 d- y9 K$ r& P4 z* x; V( d$ D
// forEach()        将数组的每个元素传递给回调函数4 X9 ^% ^" M- o# p9 X& m5 S7 k
&gt; array1.forEach(function test(n){console.log(n)})
2 V3 H* y& @. W: s 1
* g: g3 S/ f( o0 X2 k 2
) I: w# w$ c3 e3 z 3
% z/ V" |/ E! f( a5 \6 U A9 W6 j, O% L3 n: \& m: K! a. O+ ^2 r8 |# l
B
. k; o; u: A2 o- P; i. i4 k C9 d. u2 l  @8 H: C3 q" n* b8 n' j0 O
// 返回一个数组元素调用函数处理后的值的新数组6 B& S' z4 m1 i, ~7 ]+ u' ?* E
&gt; array1.map(function(value){return value +1})0 |! d" g2 W4 A7 _
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
( c* S0 X' H! g: ]( o</code></pre>
! ^- F, F# [/ l! y& p2 h( V<h3 id="24-运算符">2.4 运算符</h3>
5 m9 X, X" f* d. L6 U( r/ z" X<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( \5 B  t( [+ c6 ~
<p><code>+ - * / % ++ --</code></p>
. @5 \6 U( T. V, `0 l% T$ ]<pre><code class="language-javascript">&gt; var a = 67 u! O* B9 @* _3 ~/ Z6 ^
&gt; var b = 3
* k" `* E. s2 I// 加
. V$ T+ ]: {+ R, ~1 ~&gt; a + b1 }; I: m; [( \+ w7 c
9
0 p+ r' B0 h4 O; W4 ?0 H% G2 H// 减
8 T' U1 `) X+ h7 u& g&gt; a - b5 j4 _" P1 _0 e2 h2 p- d
3
% L& G' I: y! J, ^: ]/ o+ k// 乘  t" G. n+ W, H3 T% G
&gt; a * b
' \9 m% V: e" O9 G18
  f! v( Z& x. l: w; t7 Z8 \// 除! y( W' t; g! y. u
&gt; a / b
' }3 ^+ U0 F& r0 ]2' m7 Q$ J3 X& b- B: H
// 取模(取余)
) ~4 Z, h/ w- I& C* G&gt; a % b3 u9 S- m- g: d" k
0. {* x1 n; {8 \: Z8 x
// 自增1(先赋值再增1), N/ d; B# ?- c2 d% p
&gt; a++
# {* O/ b2 I; a% M2 B6
# k4 X6 h* H! d. W&gt; a9 T  K9 R- X2 m- g1 ~% H
71 a. r: \/ c) M: S
// 自减1(先赋值再减1)
2 G# q0 H- r9 E7 x5 y  J5 Z8 F; R&gt; a--
; x5 d3 l4 R5 x" f7, ~, Z- B( C- w# d& e7 {+ Q6 c
&gt; a
, K  f( [9 l' n& A+ z60 `4 f% q. J- f
// 自增1(先增1再赋值)
3 V8 ~1 f" s6 u" O+ w& c! b( u&gt; ++a
8 ^/ C# C' r; b74 M% T% B; w' N' C( _8 K( Q
// 自减1(先减1再赋值)1 s9 s2 J9 w: l0 C  p( G! A
&gt; --a: l3 Q8 y* }& `+ J7 M; K
63 ^  S3 ^  M1 A9 \6 ]: h) A0 p5 |
&gt; a
; j% P& d5 Z8 {  ?- c6
+ r/ y8 M4 s0 |# D$ b. J1 U8 C- f- i# `* O% @" d9 H; g
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理: A, [' Z6 [# j- K+ g& T: M, J
</code></pre>1 E2 G7 H* G: j
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>' M. c4 P; B0 S
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>! L  \. T# K  F9 k% |7 ~/ b8 _- G; I
<pre><code class="language-javascript">// 大于
8 N$ ^9 _8 W4 [( e9 \&gt; a &gt; b
' Y- u  I% q/ A6 o7 Dtrue, A0 ^3 n5 K( x+ h) ]) u- L0 O
// 大于等于: Y+ K8 Z/ E$ u" p
&gt; a &gt;= b7 a8 x; e% `( L* N* F
true
9 Z, j/ ^' D3 h# W0 |1 ?// 小于# P" c! _; V. c- |) b( h, h8 o
&gt; a &lt; b
5 l6 f8 u- I  |2 t2 Mfalse( {: O  Z) A7 t( U2 O
// 小于等于8 K, ~- M5 i, y
&gt; a &lt;= b
! E- x1 B. U: J4 }# E: Xfalse
% L4 i  C% D4 ?; [. L& a// 弱不等于
0 Z; R$ M% h  p# F! u: L&gt; a != b% i* ]0 I$ o8 T  B$ m
true
- W* @* Y0 u4 ]9 }2 c// 弱等于
4 R' Q; \, o7 w&gt; 1 == '1'
& c9 M' z6 _2 Gtrue
5 d9 f4 e% U# F* g# z// 强等于% L6 h. e) T2 B! s1 j
&gt; 1 === '1'
% x+ w2 g4 L4 {5 L) pfalse1 O9 t. k* S! k
// 强不等于# P4 t# |3 ^4 l5 d% g
&gt; 1 !== '1'
# D$ C" h4 h" {6 f" C" @7 Mtrue1 F' N8 n! K* j+ O

5 w6 L# ^5 M4 A; S/*; U5 l( E5 @7 e
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
+ H" R9 m0 A2 v*/! D* M0 P$ I# o- ?
</code></pre>
( |( l+ Q7 m; ~: S3 k6 G/ p8 T$ d<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>7 A. @' c2 H$ d- I
<p><code>&amp;&amp; || !</code></p>
3 [' i3 m7 k5 y% E( |<pre><code class="language-javascript">&amp;&amp; 与4 D8 L) t) r) ?8 b: B
|| or
) i$ t: m0 E) [4 m! 非
3 K" c: ]& t& G' T7 \: S</code></pre>5 ^, n' {" {( J
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
  O! V, j- J) b4 {<p><code>= += -= *= /=</code></p>8 i+ f6 _3 u& f- S4 T9 g3 S# L
<pre><code class="language-javascript">// 赋值6 i5 E: q1 m8 i% P7 F
&gt; var x = 3
' S; Z2 A; f: D6 l// 加等于2 W; x' d4 A# M7 \
&gt; x += 2  S3 F; {, n' B5 l4 d& y7 }. y
5
% K# \1 U* K& z5 C" V// 减等于
- |7 z% e1 |: U&gt; x -= 1
, s5 l4 g$ _) m% f' D4
* t9 j  c) k! ^  R3 [) u// 乘等于8 V; t. a/ [: _4 T' _: \
&gt; x *= 20 `7 `# }: T& \" S( y
84 f5 Z8 o- V- X0 @" Z
// 除等于
0 E! P" {0 H4 B&gt; x /= 2' f# t9 B+ \* F1 i0 z: M& [1 C, g
48 A2 w% z7 ^* a- e* b  M
</code></pre>
( w$ l' h" R( V) p+ p2 g8 h<h3 id="25-流程控制">2.5 流程控制</h3>
2 O, e, q& z5 N9 ^. O1 v<h4 id="251-if">2.5.1 if</h4>8 u+ _5 l  L$ A- Z7 H3 k# L, R9 Q
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}% h" f" f* {7 b- K) D
& R1 K/ V* x7 ]" {% S! r
&gt; var x = 3
$ f6 T1 T7 {, |5 X: {/ ?( D& B&gt; if (x &gt; 2){console.log("OK")}
) Q) M4 l- A8 g1 x) ]/ k OK
4 ~5 H' C# W- S5 G& M2 y
$ W; o% f. G# p) ]2, if(条件){条件成立执行代码} # k/ ]$ H: V' z& N+ n
        else{条件不成立执行代码}
6 N  U% j( I) a/ R" U& D' Y) E2 _
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}/ n& r6 ^' i+ k. X
'NO'$ R1 R% J3 n$ s- ?! z! P2 T) W

0 b- ]$ j6 n- w7 }# X/ @3, if(条件1){条件1成立执行代码}
9 v" s: D7 R6 C# C        else if(条件2){条件2成立执行代码}3 k, {$ n/ v, o) ?3 t
    else{上面条件都不成立执行代码}
: }, O8 }' V2 x' D5 K- u
3 a( Y. G9 a" j  {) p& }&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- ]4 d0 A. b5 W Ha# E# v% p5 [1 P$ W6 k, \$ K! q
</code></pre>
3 _. Z! w3 r; z3 u2 D$ s<h4 id="252-switch">2.5.2 switch</h4>
0 c: H& g* N: S/ ?* a  c: i. u<pre><code class="language-javascript">var day = new Date().getDay();* K/ p+ o. [9 r, W, R
switch (day) {( x6 ^4 T6 g2 t' O( a; r; f
  case 0:
" r$ j' \; a) p; o7 d0 m( Z) I  console.log("Sunday");
2 D9 K* W9 W3 I! J$ j# T! P# c' ~  break;
) |; V9 d% [1 F  case 1:, r7 V; ~. k) m
  console.log("Monday");' `" w0 ]8 Q6 `
  break;  S0 b+ W/ o6 ~% o
default:# V- j3 ~# y6 u8 u2 k% ?
  console.log("不在范围")/ S1 A: C( Q) C" T
}& p2 ^9 }8 p* B6 O
不在范围
7 w) {  @& m. I) u" u0 W3 u9 D</code></pre>
  W- t4 j" F4 b' X4 r7 W2 D<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
* _9 l. [( a3 k: K* d/ d* Y! {2 c<h4 id="253-for">2.5.3 for</h4>
" s6 c6 Z+ O- }5 x- i<pre><code class="language-python">// for 循环  i9 F0 r& h6 Q, z$ H+ L, t7 D
        for(起始值;循环条件;每次循环后执行的操作){
& T4 ~) g: s8 E: @        for循环体代码
( _) K5 L8 f' g0 o    }
$ G5 {5 \* \( }5 T% b! v5 d! G5 _' c: [
for (var i = 0; i&lt;10; i++){
3 i% s4 F% k8 L! Z2 j) R% T0 ~7 s    console.log(i)
9 u5 Z) `9 c) M& H/ t% E}
+ E4 t4 ^! N, Z! M0 H" g        0/ F. u* `4 H2 \( ~# a6 d* C
        1
8 b  w+ k0 K) s        2& C8 a6 m5 ^8 o2 G1 L( I
        3! h2 v" {7 W: U  Y3 m& U) q, B% u( d
        4
3 @; \, _( c# u) s' A  v7 ~, b5 D        5: K# X4 m/ ?2 X& I  Q
        6, m* S, W9 K1 l5 Q9 s* V0 [+ I+ [% c
        7
) N' }* w  ]1 H4 h: W* n% V% z        8
% Z" A# W. c$ T" w" S        9  D9 X7 t( z1 `1 [1 j- G
</code></pre>: R' m  P* D% K" m
<h4 id="254-while">2.5.4 while</h4>
+ v$ b3 V' V: M<pre><code class="language-javascript">// while 循环2 U6 b1 E3 W  D7 F
        while(循环条件){
8 L* H4 p  c1 l0 k        循环体代码$ a6 O/ u) H4 k$ |1 D- W
    }" E$ D: T1 L) Q, D6 Z; w7 S1 D

; V! j6 o% k( b! H1 G&gt; var i = 0
1 s8 K' R/ A. t7 @&gt; while(i&lt;10){% ]3 G, k4 c3 x6 t) v
    console.log(i)5 m+ h0 F2 L' u, y( x
    i++, ]8 E( C' s  O3 m9 L3 `5 o7 _
}) M( p. h7 }* P( c4 m$ |, \1 W0 ~! M
04 @! X% I( v/ _% K1 ~1 }# ]
1" V4 U; c! f$ s0 l- K4 G' [
2# B5 m/ M, M7 _' _
3) R& Y" A8 ]' ~+ Z  ~( D: I) W
4! ]& K! I7 @. M0 e6 P7 Y
5
$ A' ]- ^1 R- B: Q; ? 6& g$ {* @7 P) }9 m! a
7
9 V0 F" N, r% Z3 |4 ^3 z7 n4 H" D9 X 8
: m. N8 B4 o6 L1 T 9
: e$ _, V- X  H2 ^. l2 |/ C</code></pre>
, a/ T* k5 E  Y: d<h4 id="255-break和continue">2.5.5 break和continue</h4>
3 [4 G$ W  g! Y. c& g<pre><code class="language-javascript">// break
* a. s% g5 I% g3 [7 B# Jfor (var i = 0; i&lt;10; i++){
* A$ `$ y$ \$ ?7 j+ @    if (i == 5){break}" R- ?3 D+ J& k7 d" C5 N. T: w9 H
    console.log(i)5 D2 x5 Z( t! I+ ]: F& g
}6 O6 u( X# g3 m6 Y7 G7 N2 r7 ]# a
0
' p5 ^$ s8 E3 B% d' K! B! T$ | 1  q, a2 m0 h, p2 i$ Q$ @4 C- }" ~
2& s6 I+ H. _! ~( q9 b' [  l5 l0 ^
31 N1 ~6 \9 b) _/ p& `' x
4
9 \( z# Y7 L- j# ?; U2 ~// continue$ I8 W; ^+ R. Z# Y" f
for (var i = 0; i&lt;10; i++){
0 j5 e) p. Y, i) K# X    if (i == 5){continue}
/ S; ^0 D, b1 S7 H* i! ^, i    console.log(i)9 j3 I, ^% |3 w/ o, f
}
7 A( m% Z: p- I- M9 C. z 0
9 _9 q% u9 n. w$ G5 O 1) ?' X' t( X: L  L& k) n, a
2+ S( I# E; u( Z. ^( B
3
) h% ^+ |% n: L8 N3 J+ e/ F 4- `. t4 o3 K! v  O1 X% t
6
  c( t: n' e6 n& n( W 7/ K6 C0 \4 L0 c  X: A2 t4 G7 c& z1 @
8* {! e# I9 I* \
9+ ^' `  @2 H& J% m9 m& C/ x
0 D4 A6 @+ {) c8 n; ^
</code></pre>+ N5 i& P1 u. s% {, G
<h3 id="26-三元运算">2.6 三元运算</h3>2 `1 [# x, H) D) U* n
<pre><code class="language-javascript">&gt; a
) _" g. k1 s8 M, h& I6
! W: ]! A$ ~/ |9 l$ H&gt; b
1 x6 |5 p' @5 s" w+ C/ u$ F: u. s3
  _" `5 W" a) w; w# I# Z3 \+ c* Q! b# Y2 L7 j( b* u4 e5 k+ r6 {
//条件成立c为a的值,不成立c为b的值+ L7 U1 R- \- a# y1 ~% e
&gt; var c = a &gt; b ? a : b
3 _# o+ y8 N. A4 u. F&gt; c3 y2 C2 s8 p+ o0 L& c+ q/ @
65 x% Z6 z' V3 }0 y5 T2 I+ {

' [7 C% H1 D+ X. W! Y8 t) I/ l// 三元运算可以嵌套: A3 V  B! q' u: F# y$ K
</code></pre>& n) U, x8 b3 p$ v; \* T
<h3 id="27-函数">2.7 函数</h3>) B& A1 r5 @, }
<pre><code class="language-javascript">1. 普通函数
0 K- ~. ]& f1 w( E&gt; function foo1(){
% j6 M3 U: X; }, P    console.log("Hi")
+ h9 B% _+ _8 Q! ]2 _' T}
2 q- {  G/ [, |
& ^/ O, s9 ~& ?  z" ]&gt; foo1(), L, e4 s) C- C2 {: o$ N
        Hi$ S, p; Y: S2 E% ~7 Z
2. 带参数函数& }* F9 z" l! i4 `& n6 j( c
&gt; function foo1(name){5 N) O) W! Y, Z% U8 G4 {
console.log("Hi",name)
  u, q! Q9 ]5 c: i& D5 S2 x' L}- D& t8 `; V+ ~6 ~! A/ E7 `8 |  E
7 B6 R4 S2 H3 t2 M5 Q
&gt; foo1("Hans")
$ D- [( a$ i8 }1 }Hi Hans
, w6 ^. @6 b9 L# |3 |( i
" T$ L. k  d9 u- s8 n$ J&gt; var name = "Hello", T. @1 o3 u& I9 _$ \
&gt; foo1(name)/ v- J) i  a, Q2 F9 a9 r
Hi Hello
! {& x0 x% ]# `; R
- G) N3 M# \! ]- h/ r/ s! n; |3. 带返回值函数* C$ H0 {6 [+ {" l7 {. ^8 T' u
&gt; function foo1(a,b){
/ I) U( n4 z4 a) l8 A- o        return a + b   * Y2 [  `' W/ f3 ^( ~% }
}# k: w% V3 w( @
&gt; foo1(1,2)
. M2 L+ y# S5 ^7 @- j; ?! `3
' @- N& H' b# k&gt; var a = foo1(10,20)  //接受函数返回值6 s+ h# p+ V; ]9 [4 h/ x+ {
&gt; a+ s" g6 K' T' V: G7 C
30& H/ g: j& q: y# I/ g" c* B5 ]0 T
+ \" I& K) T+ o9 ^) y& S0 b2 l
4. 匿名函数
1 L3 I3 Q/ k& p&gt; var sum = function(a, b){
4 U, ~" Z  C, R6 {  return a + b;/ N+ o9 w) j" r! _! {. Q9 ~& T( N
}
1 }8 U' m  `8 d5 Y* z( Z&gt; sum(1,2)
0 V0 {7 y: e; }6 R% z0 r3
# H6 k& S& a# X" \& R$ @! d3 [% n7 g! e/ h, ?* o3 }& ^
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱3 K/ @4 c) H( w( d
&gt; (function(a, b){
/ I0 E2 Z3 C7 u% e3 v  return a + b2 o( r5 M; ]- ?% u. T/ S3 `. j5 F
})(10, 20)
- a( U: t' K& u9 L' O3 j30
7 ^& \# R6 V' v$ v' E
' v0 S% B- `5 t/ U9 V% a  i5. 闭包函数
6 T8 |5 B1 a+ }* _// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数, c; K( [3 i8 J  \4 E1 e
var city = "BJ"
& p/ _5 W0 c0 z8 K: B5 c/ Yfunction f(){
% ]+ X3 l0 C- F2 z" A3 j/ N$ D2 [    var city = "SH"' ?8 }/ d  a. {0 @( v8 f
    function inner(){7 K6 y% _3 O( t' I$ ~( a9 ~
        console.log(city)
4 @: W1 T: f* D# [8 F5 d% N* G' f    }
# [) S4 q; t4 n2 Q. [    return inner; N9 G' \, K2 g( H
}
6 }% B+ `; W% p5 s  K6 `var ret = f()5 M: p0 Z, E9 S
ret()) X1 D8 ?: l# t6 L4 a% L# U
执行结果:4 I+ W1 k5 l9 L, [) Z; @
SH6 B0 f+ ^5 O( j& R
' N; i& R( N: Q" [1 I: c5 o
</code></pre>
, |2 t; B4 `; H: k<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>' R9 }9 ~# i0 ^* _2 }
<pre><code class="language-javascript">var f = v =&gt; v;' k, O" b  K9 `# W
// 等同于; H- z6 {+ C" d' {( {
var f = function(v){
1 r7 X! t; i$ u  _( a  return v;
* |3 J2 ?: `; R0 m2 d& Y: i}
/ j) z; @& D3 L9 G* G' K</code></pre>
$ c3 w& q( |) p& X3 |<p><code>arguments</code>参数 可以获取传入的所有数据</p>
% B: D. {9 j4 o! a' z+ g<pre><code class="language-javascript">function foo1(a,b){0 o$ I8 _) o( b8 F
    console.log(arguments.length)  //参数的个数
- D/ f* g: `+ T. l3 J/ f. O& D    console.log(arguments[0]) // 第一个参数的值; `1 {7 \; u. w, x* U. }
        return a + b   2 [8 D) N) y. e5 v. b; k
}* y7 G+ w$ L; ?! O' a
foo1(10,20)
6 a* e! Q& Z8 c3 ~结果:# V+ F& U9 y: k# E- r% |3 w4 I
2          //参数的个数 ) o" Y! ^! q! e0 I% f1 @5 ]+ z* Z
10        // 第一个参数的值/ a% U6 A1 t0 h! O4 J; a
30        // 返回相加的结果
$ L5 I, l5 c) P2 p, A3 e) v</code></pre>/ \5 h7 o+ v# k
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>- Y! q7 }7 H, n8 p9 g
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>0 z+ I. L& Q7 ?" i8 j
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
/ @8 z  p7 u. G; x1 c' S( F<h4 id="281-date对象">2.8.1 Date对象</h4>
" b3 B9 O0 e6 S. m' Y: a8 p( @* ?<pre><code class="language-javascript">&gt; var data_test = new Date(). U2 d7 S6 Y: N9 }1 i8 [% h
&gt; data_test
8 |4 r8 \3 v7 RFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
5 G+ i- a8 V5 o4 \3 D&gt; data_test.toLocaleString()5 u! K( e+ M4 }2 z+ g6 x0 N
'2022/2/11 下午9:44:43'2 m4 U4 H, C  {" p5 n
& N  u9 v1 X. g2 `- o. O
&gt; data_test.toLocaleDateString()
6 p7 u5 q. ^, n: _'2022/2/11'3 ]7 d6 `9 `( E8 i, l& j
) {& t1 N0 H! M- g7 W  a4 Y* U
&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 k7 M1 t3 s# Z! \
&gt; data_test2.toLocaleString()
! w6 O1 N% D' G2 p! m* L0 h'2022/2/11 上午9:44:43'- z% _6 _8 P0 p2 c" U
9 _2 `% K* N% g8 a; I6 k/ {
// 获取当前几号
% w; S0 j5 w  y# y! }* g1 o&gt; data_test.getDate()* \7 J8 D" @- d- D( ]+ O9 u
11+ T6 l+ n- O, |) F8 V
// 获取星期几,数字表示# h- P6 h# G; u: D+ K
&gt; data_test.getDay()  # a  p# j/ U/ T
58 r5 G' v' x1 t4 a
// 获取月份(0-11)0 w: i- `9 W$ n) b  l  y; j
&gt; data_test.getMonth()
; I) v& N; Z6 G, R1& l& c9 G$ q: U0 \
// 获取完整年份0 s! b9 ?1 G2 n/ l8 t, |- V
&gt; data_test.getFullYear()
, E: g; a" O% U) l* N& Y20226 m+ i1 s$ h+ A3 q" i
// 获取时( R# m2 u9 Y2 ~( n4 p
&gt; data_test.getHours()! P( v9 t' K2 P" g
21; Z4 P- i; V$ D9 Q/ [9 K2 g
// 获取分6 m9 `9 U& s) ]) \
&gt; data_test.getMinutes()) |+ R, w4 ^$ u/ W% p& s0 G" k
44. y' K! V9 `5 R) e4 D: I/ J2 h& d/ n
// 获取秒
3 Q1 B: d8 m- Y+ m8 D, c" h; y&gt; data_test.getSeconds()
/ \8 e' v8 y1 k# o- a436 i  X- U; p/ f0 p3 c! m- F4 k" @
// 获取毫秒
  f. T  \! D+ `6 J&gt; data_test.getMilliseconds()1 A" L: ^; @2 O7 f
290
8 X3 o  h" W  s; I- p5 |// 获取时间戳! }3 N! |. f6 c! r
&gt; data_test.getTime()
& H* c; F) a, ^; Q) D1644587083290
1 ~/ u0 y6 V3 P7 k8 X! W/ m1 ?</code></pre>- g3 T' F4 e/ [* D! J
<h4 id="282-json对象">2.8.2 Json对象</h4>
& S! N5 G3 e9 d# d5 l  w<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串+ Z6 F# {8 ~7 u
JSON.parse()  // 反序列化,把JSON字符串转换成对象- U1 k) Y" K  T8 T5 Z0 x

* {$ b& m  y2 P6 R// 序列化
4 j! C/ [) Y+ J& R* W&gt; var jstojson = JSON.stringify(person) & W  J4 u- H: z, Z) n
&gt; jstojson  
& o6 ~1 e4 M1 z; g2 O'{"Name":"Hans","Age":18}'4 f! i& L  j. f' Q' `5 T6 J( P

7 \# c' U7 r+ Z; ~1 U: Q! f// 反序列化" h7 E5 L7 k- o4 @/ q/ K( ?0 I) P
&gt; var x = JSON.parse(jstojson)
1 A9 O7 U: f) r- f; a, |6 i$ u! U&gt; x1 H) E6 d0 |+ c" n9 Q8 d( R
{Name: 'Hans', Age: 18}
" K+ B7 T3 z3 i. f& W+ ]&gt; x.Age$ N3 Q5 Y. `1 |* Z8 [% a
18
/ g; ~$ o- A0 h4 d5 ?, r' Z</code></pre>% U* ~" b4 ~! k& `( g
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>3 l+ f; m/ ?. Q4 B1 n8 U3 N# x% d
<p>正则</p>% M9 C/ U9 g! R! i( j. u! B
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");( ?& w5 A  _8 Y( w; L& K8 @. k7 p
&gt; reg1
9 y' Z* ]2 ]5 A7 A2 D' ]/^[a-zA-Z][a-zA-Z0-9]{4,7}/
0 t& o; I4 q8 i7 B* j&gt; reg1.test("Hans666")9 C, A, b# J4 b4 I; s
true5 M4 H8 s. `! h, H) X* s0 p

1 N( q4 m  Y. _% w3 i0 [&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则// s9 s4 \* d4 O/ g- c
&gt; reg2
9 K4 |% h1 O9 Q' U0 h( R7 d/ q1 t( x/^[a-zA-Z][a-zA-Z0-9]{4,7}/
6 G4 s! ~* T7 i; o&gt; reg2.test('Hasdfa')
) K% Y* }) u) B3 w4 Ttrue
4 a" O# Q6 g( U* w
+ n2 M8 Y7 I! e全局匹配:8 a2 ?9 J6 p7 M+ v& u+ V+ X
&gt; name$ f) X" z; E6 d+ g
'Hello'% X; o# ~$ P2 P; G8 ?/ G
&gt; name.match(/l/)& p" {; C- q' M; _
['l', index: 2, input: 'Hello', groups: undefined]
9 P% ~  \( @6 Y# X: O' Q; ?! ^
3 L8 x5 }6 P) K2 {* ?: j&gt; name.match(/l/g)
/ Y& t% j( b. ?: M0 X  T# q' ^(2)&nbsp;['l', 'l']
# s; r1 u' Z! V5 o// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
+ R' X) K$ m7 Y% W( n1 o+ j4 o/ u
全局匹配注意事项:
, L+ `6 p3 ?& w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g0 v/ X* B/ k) g9 J0 a: Q
&gt; reg2.test('Hasdfa')& @4 J( z. z9 E! t/ d! d& Y% s
true" X# O8 R0 H8 \$ A' C; a
&gt;reg2.lastIndex;
6 k: A( h' C2 C# M7 m6
, ~* u1 i0 h. }9 E/ D7 B  E&gt; reg2.test('Hasdfa')
0 J2 E- d5 ~* {( {false
2 {7 F" c5 d) e# M' W( I&gt; reg2.lastIndex;
8 l- P- P# {8 [6 b0% v$ u% W2 g% ?6 G4 U
&gt; reg2.test('Hasdfa'). }, U- M5 S; m- F: }- S
true. I& G5 i- y+ p  V1 W( h
&gt; reg2.lastIndex;
' D# A/ O# z, G" K7 k) L6: z) D4 u0 W7 |* m) k
&gt; reg2.test('Hasdfa')
% N/ w% [" V7 c* u4 s6 a: ^false2 x% I7 e3 [7 h' ^) z$ O
&gt; reg2.lastIndex;
, d4 y7 D, [$ c( [3 i, i. r0+ O0 B& Y- P/ c- S8 \
// 全局匹配会有一个lastindex属性
. w% l" a; E0 J* I&gt; reg2.test()
" v+ d* h1 ?/ n4 `; b; Mfalse
% O+ z& o6 m1 `& ?+ Q&gt; reg2.test()
+ z+ c3 f7 D" S( k+ ]& ztrue
3 R" _) U$ F( ]8 c- }' M// 校验时不传参数默认传的是undefined8 D) h& D/ x! s% Z" |: S
</code></pre>
2 d0 K7 x( T. f  x; Y. ^, [0 M<h4 id="284-自定义对象">2.8.4 自定义对象</h4>2 K; h: U0 J  A4 Z# K5 _! L
<p>就相当于是<code>python</code>中的字典</p>' L7 d4 q7 b* U" F8 k/ l! P& `
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
6 V, B  s& J& U0 p/ ~7 f2 q&gt; person
. M4 e) w% o- G$ D) Y8 l{Name: 'Hans', Age: 18}
4 D) H) ]5 }5 F5 A, V&gt; person.Name
! r2 @) `4 X1 |6 c# N'Hans'4 o2 u8 E( j1 Q. y& @
&gt; person["Name"]/ i1 J  W# W! m8 e
'Hans'
8 _1 L1 |; G5 ~& i; U2 D
) l8 l) W: Z: p7 ?* l+ k// 也可以使用new Object创建6 ~! Y. x: h: x5 I+ ~/ e
&gt; var person2 = new Object()
/ ]6 t) _. u5 M6 p: E; T+ |&gt; person2.name = "Hello"
& v2 j* B; {3 T'Hello'
' j' T+ v. p- L&gt; person2.age = 20
+ b" W, O& \. W7 {( k20# W& H" `8 P( X% t. ]6 l6 a
</code></pre>+ l* d2 d$ O. [$ d8 z# g7 [. l7 s9 d
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>8 G7 u+ |6 K1 I" L8 e
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>. C4 ]- A- w' Y) F6 r- B
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>' g( T& g. o( n6 `) l" m6 A
<h3 id="31-window-对象">3.1 window 对象</h3>
8 G0 b" V+ @: w. r& J3 `3 E5 S<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
" H* X! j) k7 ?<pre><code class="language-python">//览器窗口的内部高度- f1 }. a. D( F! h
window.innerHeight " x4 [; b! ]5 G' r! u! a7 E8 b" M! \
706
$ z7 F0 Z. {" _; ~( K* }) ]//浏览器窗口的内部宽度1 V1 c7 ^2 z, z4 T' m- {' X
window.innerWidth4 C, Z+ T3 Y7 w- x4 H9 [) F
1522/ t& ~9 X4 K$ m+ d- {7 k
// 打开新窗口- G. E  r; u  r/ l+ ^1 h& A
window.open('https://www.baidu.com')1 _7 c0 K1 N( G: u0 M4 G
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}9 w9 h4 j( E2 t4 \: S
// 关闭当前窗口
5 R. G& e; P/ @; \5 C; ]* L* {window.close()
6 o. B8 x1 F' x3 ^' g//  后退一页
, q! K5 A3 n, n# f1 d% g6 y* Pwindow.history.back()
( T. r8 z' z  ?3 J/ X: k// 前进一页, T& ~# ~2 N# ~7 e
window.history.forward() + w$ b. Y; K5 ]8 p4 y3 n2 K
//Web浏览器全称  {* |) F7 V  I$ z0 x
window.navigator.appName
" x' \. h4 ]$ \  p, Z) h'Netscape'
% o0 n: A% ]9 i4 I5 c// Web浏览器厂商和版本的详细字符串1 Z& |6 r" r2 N8 X3 l2 b# |
window.navigator.appVersion
8 R2 G( u( q5 z7 G3 C; B'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
& K' y; k% U, W9 X9 A// 客户端绝大部分信息
; u" u' t  @/ f  g; Lwindow.navigator.userAgent
: y$ C* ]9 K" `+ C'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
: {: H' R+ e! B8 _// 浏览器运行所在的操作系统
" U# d& C5 ?! b$ X5 _! zwindow.navigator.platform8 A6 t+ V1 t3 @
'Win32'7 N* e, P  B( |' R8 z: O, V0 w

& x* T) v. l- f( I1 V//  获取URL. t7 ~% }4 |9 ~8 U) g6 G) I
window.location.href' x2 ^1 P" r6 u9 x
// 跳转到指定页面1 T1 [+ @/ O. K4 u
window.location.href='https://www.baidu.com') ]- b6 E$ E9 O- P7 Q4 T/ x
// 重新加载页面
: L5 X3 a# Y+ y5 X+ Y7 i$ Swindow.location.reload() $ z- P4 B/ `4 \' g" ~, ?
</code></pre>/ @3 P- O1 d7 Y! S' U: w. x# J, B7 I
<h3 id="32-弹出框">3.2 弹出框</h3>
- K% N2 U& y" C# P) a/ Y* f<p>三种消息框:警告框、确认框、提示框。</p>
- v4 n1 C( M0 o<h4 id="321-警告框">3.2.1 警告框</h4>
1 C2 d2 q0 h5 V<pre><code class="language-javascript">alert("Hello"). [2 D2 M3 w8 G8 D9 p" L, |
</code></pre>
7 k3 z0 C- A! t1 U6 @<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
& P1 Z# E, e% r( f6 d& e<h4 id="322-确认框">3.2.2 确认框</h4>' @) t# W! ?: F+ h8 m* T
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
0 V! ~' e% G0 D) v9 r<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true* z/ I, Y# m9 P3 |$ ~
true2 V$ t# z9 G2 ^* X( W& X) g) R
&gt; confirm("你确定吗?")  // 点取消返回false
% i7 X* V2 u: Lfalse# f8 i: P7 m/ ?
</code></pre>) `( o* q/ _% r3 Y2 j6 ^& z; w2 T
<h4 id="323-提示框">3.2.3 提示框</h4>( f8 b6 o* ~; f9 X
<p><code>prompt("请输入","提示")</code></p>5 \8 B" |) a; b. D4 ^# g, m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
9 `0 j9 I% O" R" {( w8 p7 w<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
4 x, [2 q5 }" s' m9 d+ R3 Y2 k& p<p>如果直接点<code>取消</code>后端收到<code>null</code></p>, _4 T6 c4 d* n. V6 R! x8 V  q
<h3 id="33-计时相关">3.3 计时相关</h3>0 t2 N( M# @6 ?4 _0 J+ r
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
6 ]. c5 d( z  {+ P8 F- \<pre><code class="language-javascript">// 等于3秒钟弹窗- q; o" T% j6 x+ i+ i2 ]9 T4 R
setTimeout(function(){alert("Hello")}, 3000)
2 v/ a2 Y( ~0 w4 m  n# k
% Y5 ]; c7 _% ^) B6 Yvar t = setTimeout(function(){alert("Hello")}, 3000)& Z# D3 g- k9 s
& z: P1 y( H; ?& v# O" W+ s) H
// 取消setTimeout设置
' h+ C: ?) ~8 b( LclearTimeout(t)1 {; ]) Y  j  n; m% V& {) F
</code></pre>
. P1 E; w5 s! I% G6 h' s<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>7 ]2 e% ^6 H0 O
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
2 b  n- C2 A$ t$ y- R3 }6 Q9 @<pre><code class="language-javascript">每三秒弹出 "hello" :
. Y4 o9 S" y  b* r. JsetInterval(function(){alert("Hello")},3000);
; s' ^7 r' n: q7 A# X% r$ R: K5 A</code></pre>: J1 B8 U. s& g" [7 b+ J
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
- I( v8 l: ^4 `& G0 h: f/ |<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
1 d8 n3 @1 S* ]/ a//取消:& m& |/ x0 K" x+ H
clearInterval(t)% x+ r+ R& C/ m. a- v# ~/ f8 f* M
</code></pre>
( R% ~9 ]/ {2 y. `
' }/ Z, m, u2 W/ h) R! h
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-21 18:33 , Processed in 0.072663 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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