飞雪团队

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

前端之JavaScript

[复制链接]

7953

主题

8041

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26189
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
, J1 \, c8 H# j3 w6 u
<h1 id="前端之javascript">前端之JavaScript</h1>
' \7 ~+ c* I4 f% l% c8 a<p></p><p></p>
" i& V7 b1 G+ r) J<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>. }  }2 Q7 a. e3 ?# b
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
& m6 ~0 N+ c& U9 [* T它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
* I" ~6 J" ]- T' x0 W- a它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br># F1 M$ J! @8 `. ?
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
8 o$ L6 h5 s$ Y5 m* g/ T<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
' ~0 g+ N$ g: B8 j<h3 id="21-注释">2.1 注释</h3>4 O% G1 C6 G+ c0 v
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
; F' d  _0 ^. q# O- r<pre><code class="language-javascript">// 这是单行注释  i  h7 i% Z, m  P. b

1 y  C, o8 n; x" P, K/*, `  z" j  ]3 n. D6 b
这是多行注释的第一行,
+ x* o# r$ ?1 z" g& {这是第二行。
. m0 E7 R$ D7 v*/% V% ^. b% V9 |, N* {4 i# X, O8 m
</code></pre>
* c9 c4 ]7 D5 ~* x4 ^8 \<h3 id="22-变量和常量">2.2 变量和常量</h3>
( I9 a  F$ n* F* p8 g" a4 o* I4 m<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>1 _+ k1 V& J6 w
<ul>
5 n& a& E3 _1 x: I6 V( r<li>变量必须以字母开头</li>
! `7 u9 t! Q& m: K) I% d<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>3 ?1 A! m' X+ ?
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>! }: x; b+ s8 \/ w" ]9 @. `& Y$ ]8 Q
</ul>1 d% D, m/ y% C8 h  w0 P
<p><code>var</code>定义的都为全局变量</p>5 f% s' @9 ^( u; W- y8 c! r% f4 L3 x
<p><code>let</code>可以声明局部变量</p>
. U- y$ z" [6 i- S0 O& b4 `3 ?<p><strong>声明变量:</strong></p>; D( ]& q" t) T% n: q4 G/ p
<pre><code class="language-javascript">// 定义单个变量) [, o/ s- B, x2 b
&gt; var name
; V( ?' ?: T% W. G9 y0 e! J6 n&gt; name = 'Hans'! Q: S& e" T( K, s0 j0 O* a/ X
//定义并赋值
. Y' I  [( `2 x' M( A1 {. U7 b4 j8 k&gt; var name = 'Hans'
; Z! U: i$ B% q! o3 Q8 \&gt; name  ?2 S7 x9 A5 w9 G0 N# ~
'Hans'& x! A; M2 m/ t: o- i( v

6 {/ a% F1 v5 V5 V  Y" {3 O( e0 V& \// 定义多个变量/ P: i6 a# o; h
&gt; var name = "Hans", age = 18
8 J& |2 y1 Z' G' a9 I( q6 G: q&gt; name
' S  H' ?( F, j; u'Hans'
* ?6 d0 O6 M8 s&gt; age
9 e) G% E0 C, ?0 A2 L% [5 I. i18% o  D6 E8 z# G8 x
% [' u, r2 t0 T+ e; G" W) x
//多行使用反引号`` 类型python中的三引号
- \6 n5 P* Z, N) w  F&gt; var text = `A young idler,
5 \* ^6 d) d7 Q( m0 b9 T) Oan old beggar`
. W. h& w( U# F" k# e8 I&gt; text6 r5 _& [& B2 W4 A
'A young idler,\nan old beggar', \& O. B  V; }
</code></pre>
0 \. T+ h4 i* p; W<p><strong>声明常量:</strong></p>2 H# W% b3 ^& A$ }# l: b
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
( ~7 t" ~1 m1 m2 T, z0 Z9 p<pre><code class="language-javascript">&gt; const pi = 3.14
8 y$ q( |) |* _: I( P0 r' `- b" p&gt; pi
1 a- C! [7 v1 f2 r, O" a6 }$ D3.14
4 ]( U! ~# a/ _4 P2 Y& K# V&gt;  pi = 3.019 S; @; b/ }. h0 N
Uncaught TypeError: Assignment to constant variable.; ^6 N7 a- z- C! L  T* g9 P
    at &lt;anonymous&gt;:1:47 @+ t8 [- \5 M2 h! ?3 ?% k

5 C7 B% H9 T0 J* D</code></pre>
6 S0 X0 u) e5 h- b6 K: Z1 |<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
: k: y5 Z' \) z<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
6 o' M8 a0 W& g<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
1 b: o( k6 }+ D$ u) B<h4 id="231-number类型">2.3.1 Number类型</h4>- G4 g: b% ?- P8 P; K8 c
<pre><code class="language-javascript">&gt; var a = 5
2 l3 t2 }2 v5 x0 M+ X/ H&gt; typeof a   //查看变量的类型  
7 J) K' P/ t+ B9 @number4 u9 a- N4 s# N1 Q6 r2 b6 I7 d5 d; _. k& [

% T2 T7 l- _9 C6 f1 M" k( S&gt; var b = 1.3! v: i% L9 T! D: i
&gt; typeof b1 W& R$ e/ {# U. o6 `/ v2 \; L! e
number/ I/ b( h9 \, u# `* h7 o- L/ x

, u4 R6 `7 ?5 {" R( R  A- ?// 不管整型还是浮点型打开出来的结果都是number类型( c5 I2 Z( E5 @/ B

  t$ S* e2 |: Z( g/*
# m5 U$ k& A! p; T% I( jNaN:Not A Number
( i/ x! I2 k0 v+ A$ o" SNaN属于数值类型 表示的意思是 不是一个数字1 E! Y/ p  m$ o7 b3 a
*/1 {9 V) C# M3 Q/ }! r
% O* s0 `! ~) T; @% J$ f9 ^
parseInt('2345')  // 转整型' x) g$ q' L; t" W; A: E* R
2345" @* e, b- |0 t: [3 p6 ^6 v% v4 n( |
parseInt('2345.5')
9 U9 ^3 A  h: e' ~3 @$ U$ T2345" r: U% ~+ b& ~2 J' h
parseFloat('2345.5') // 转浮点型
0 B; v( R6 Y, a7 c. ^! t; c( c2345.52 u0 ?) e) E, Y- a
parseFloat('ABC')
5 F; U, p' s- x: b8 eNaN
* B+ w2 P. c$ I% n0 \* ?4 Y$ TparseInt('abc')
2 A* }3 W* ]. b" Y  b, jNaN4 F' E, z, l4 ~! |! E: h$ C4 n1 j
</code></pre>
. p8 V; x1 t% e/ \1 j* e; h<h4 id="232-string类型">2.3.2 String类型</h4>! @# Q  J; h9 B5 g
<pre><code class="language-javascript">&gt; var name = 'Hans'
5 Q1 t" i& C; \7 D' E- ?&gt; typeof name
- n( V0 S" Z3 \3 c3 a'string'
0 G7 U2 g8 `- h8 R& a2 E  u6 G% M9 F% a, t, i) a! _
//常用方法: O8 i3 N. Y  U. C4 `. O3 ^$ U
// 变量值长度7 [) z. p, T2 s
&gt; name.length
! q7 D: g# ^! {" X4: r  L1 X7 A0 E" X% \  G: ]: e5 y
// trim() 移除空白
+ f3 ^* w4 ^6 ?' R# i9 c&gt; var a = '    ABC    '/ \7 ~3 Z$ N8 r2 t4 z; B
&gt; a8 Y; m  ^# y" z5 }/ Y8 r# ]9 Q) M
'    ABC    '# ^& ]3 ^, k  P; O: U1 V+ g: i
&gt; a.trim()& p; D7 n0 E' k3 W
'ABC'2 n) V9 V" d' c+ v4 X$ y
//移除左边的空白8 f, A7 v* z1 E
&gt; a.trimLeft()
: y9 b% ~& F( }' j2 q3 i9 u'ABC    '3 l; H( }$ I) l
//移除右边的空白
- P  |# D. U$ w$ r$ V, D&gt; a.trimRight()
# K8 R' k/ w; t# n' C5 \'    ABC'+ d) {0 |! n# n$ a! K

7 p, ?: d/ f1 {, P+ \8 h//返回第n个字符,从0开始
: f( O1 E* r6 i9 Q* F3 A( x&gt; name
$ e8 f" n- v+ N- L, b( _! r% n- G- q'Hans'
5 M! E! D0 J+ o4 A, G3 l2 _&gt; name.charAt(3), y" L' e! E+ n0 s& f6 r
's'
) x# p9 j, D8 B7 J3 x&gt; name.charAt()8 D, N9 J2 o) s& v3 D+ p& t
'H'# D& N% j7 E4 d& ]  `8 |
&gt; name.charAt(1)
: \: ?) ~9 G6 @5 R; s8 s- X( q'a': K! l5 k; S; T
! a4 ?: F; i, w
// 在javascript中推荐使用加号(+)拼接
# o" B; M9 r; ~1 P; V&gt; name: b; P: o0 W) g
'Hans': P: V6 U  y1 i" l/ V4 N
&gt; a, V/ ?% F* s7 Q
'    ABC    '( L/ |4 }+ v6 k7 e' b0 l$ E
&gt; name + a
) H) p& B9 M; X  g/ u% F) K! c'Hans    ABC    ': I- d+ P7 l; ]
// 使用concat拼接; X4 p% R1 y! N* B
&gt; name.concat(a)7 D3 U: H$ n& G, h  ?* U
'Hans    ABC    ': K6 J) o0 ~5 Y0 n1 `0 x$ C

# F2 G" f  N  m, m* |, f9 W. V//indexOf(substring, start)子序列位置
( ?% T3 J8 P- g) C: \. O
' r/ B- C; m, A+ Y! Q% ^3 D. w* ]&gt; text* l' g3 U7 Y6 k+ v) j# y
'A young idler,\nan old beggar'& m2 K. v7 \4 `' E! o" f! C( h
&gt; text.indexOf('young',0)2 F  J* O3 [; Y0 _( p( h- u
2$ y6 M) j* S/ @

- F9 ?' g1 _* B) [5 y  t/ o//.substring(from, to)        根据索引获取子序列) Y- }' k0 \5 {0 [
&gt; text.substring(0,)) y* z6 P8 M0 e) @' Y
'A young idler,\nan old beggar'% j% s) l% G& A
&gt; text.substring(0,10)
# Z" V1 w4 [0 v/ V  w6 Q: @'A young id'! Z3 j" |2 V1 a  A0 c6 i, _  p
$ W3 [4 Z) L% S
// .slice(start, end)        切片, 从0开始顾头不顾尾3 u' I3 B& S6 o
&gt; name.slice(0,3)
$ a/ s% k+ v, M" `3 n'Han'. P% Y! s% c0 `0 O' i5 G
1 k, s, i- X; b, U. q7 {' m
// 转小写
. m9 C  _; i9 b&gt; name  u' M# {( F- E2 ~0 J
'Hans'- z) J# [8 S  ]
&gt; name.toLowerCase()
& G6 Z" P5 \: j$ G! }, ^% j; f'hans'
* H( t0 g2 x2 ?. t% ~1 Q: m2 A// 转大写
7 f! a0 B" H+ m1 x5 Y&gt; name.toUpperCase()
# I1 S. h. p, s: s  a( ['HANS'/ R! V# O6 A. J+ ?9 G0 Y( y
0 y# t/ |: {3 d+ ^9 J" A9 ?3 k. x
// 分隔
8 y. k9 V4 E6 O, c, p4 P$ Q0 D&gt; name) N( r! w5 b% e3 Y4 K* x2 R
'Hans') \* {+ V& }5 n' p5 A- x& B
&gt; name.split('a')% o  ?9 h% l! b% Y+ \( r" Y2 B! H
(2)&nbsp;['H', 'ns']
0 R# T4 E* D; Z</code></pre>
$ u7 `" O- f/ X) U  u9 }<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
. b% f- m' T- n) i<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>+ M1 r; N- G9 S( d
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
5 ?" A+ z; x6 W) G. P- L2 l  d; h( }<p><strong>null和undefined</strong></p>
9 w3 _# j  H+ w) ?<ul>. g/ P0 [) J3 \4 b
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>- A; P, Z# L8 x# b* _- x6 L  y
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
3 x1 N2 h4 |5 X8 S" f- t</ul>4 y5 ?) i$ D' M, l! p  E
<h4 id="234-array数组">2.3.4 Array数组</h4>% N4 X5 I, Z, j/ P0 D% s- e
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>  Z' y, d( F7 a1 g1 h9 K% P
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] , d$ \7 [' C* S  V, z
&gt; array11 b5 J( K) [2 X) Y6 t  M- g3 Y0 D
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% [/ u% [) h2 g) d7 V&gt; console.log(array1[2])  //console.log打印类似python中的print) U  }, W! e9 j; d3 x2 X
3
8 B, s5 R) u  s; M+ I: s. f// length元素个数/ o! m4 y2 `+ H6 |9 t* u
&gt; array1.length
4 n+ u$ |# Z& c( O5 ]8 h' g0 |$ t6
, z8 v& H* v# y' p5 C& K// 在尾部增加元素,类型append3 ^9 W+ v* g3 V7 p+ t5 F7 k
&gt; array1.push('D')
! A: M9 y, ^8 Z0 H8 z5 O  R7
, f! d  d' w" n0 G8 L4 }+ C&gt; array1
1 F9 q+ b/ Z, E8 M8 _, Z(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']; G3 M7 x6 F/ i- f& V
// 在头部增加元素
6 V7 j7 v$ Q4 U/ h# s/ {. x& T&gt; array1.unshift(0), n+ E! d3 ?- H7 f; X# S: Z
88 b3 h4 y3 m# ~7 F3 J& [, h0 U
&gt; array19 V# A8 u3 W+ n6 ^# s( [
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']1 ]8 [+ e7 t# e6 ], l* B7 ]

7 z+ M. i" n6 B//取最后一个元素1 T. g' m6 J% P9 k) e  l* }
&gt; array1.pop()' L6 G2 @7 C: E. R3 s* P' R
'D': C- x* @; I5 D- `9 ~3 E9 G  D
&gt; array18 {+ ~! T% Z2 C9 u; O* k
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']6 \+ T+ p, @6 O) I$ w
//取头部元素
  x/ T* f: ]" a, k4 E0 s&gt; array1.shift()/ t7 e: @+ ~! A  P. Z9 J  u3 {( R
02 e0 n( d; E; v3 c3 s' k+ J9 x1 E
&gt; array1: v& v9 k& O" N$ X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']8 Z' k% ?$ \" T$ W
! `6 Q3 F. ?- X. F
//切片, 从0开始顾头不顾尾
/ P" \( t- Q, d&gt; array1.slice(3,6)% W* s" @  Q/ U+ Y' K3 l8 q7 b8 Y
(3)&nbsp;['a', 'b', 'c']
3 s* Y. D# w- _2 M// 反转$ N6 o9 m% f9 k% d" c& {! N4 b
&gt; array1.reverse()* M6 q3 y0 n3 w5 j. W  x
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]/ V2 C# E5 b$ ?- Z! K- D
// 将数组元素连接成字符串3 ^/ o1 c$ e2 n3 P0 s
&gt; array1.join() // 什么不都写默认使用逗号分隔
0 G0 \& c2 R$ {' d- |$ ^* F'c,b,a,3,2,1'
/ o0 n# r- g  ?0 b: \&gt; array1.join('')
3 E6 V* s+ Y' G% o'cba321'
# R( }6 c( K0 o1 ^" W7 |: _&gt; array1.join('|')/ b' D; C1 p0 N  o) M3 Q
'c|b|a|3|2|1'+ O$ O- i/ T$ D

! D6 M# K: P% [7 Z* H// 连接数组" J2 D  [( N6 W* @
&gt; var array2 = ['A','B','C']
7 N6 ]. N' \0 W0 ^  Q&gt; array1.concat(array2)
) y. Q8 T# X" A2 |6 F: ](9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']; _. a, t1 K' Y7 }8 p3 g+ ?9 N9 V1 a
# N# }0 m5 h2 j8 U% g; v, Y
// 排序
/ R. U+ a/ z% K9 a&gt; array1.sort()" I9 z6 x( Y8 t0 Y( ]9 }' k
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; w* a% y0 T3 y6 E* |" a2 d3 X7 g0 ~' v* C$ N
// 删除元素,并可以向数据组中添加新元素(可选)
  @' n2 G" A+ M, H5 k+ [3 H6 q&gt; array1.splice(3,3)  // 删除元素
$ U9 E( Z1 c- @- o* B(3)&nbsp;['a', 'b', 'c']# v$ M. |, o2 l  |! \; W
&gt; array1
. y& @  o9 S2 g7 U) z) _5 A; w(3)&nbsp;[1, 2, 3]
5 x/ z, u0 P6 |5 x$ P; p&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
5 Q; x6 q/ H* ]; Y# C: h[]
& A) q  f9 q8 Y% a+ |&gt; array1
5 m( q" Z9 o6 U9 Y(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
9 E4 Z3 J, b: l# e* K  Y& g' J# T6 }6 m* k7 c$ Z( }4 B/ N! U" K
/*
/ [3 ?) x; u& u+ i' G4 Jsplice(index,howmany,item1,.....,itemX)
  i0 l% o. s8 T3 K, l/ Cindex:必需,必须是数字。规定从何处添加/删除元素。; ~( g$ c" L4 w2 ~8 N
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
# m* C' ^) Z& |6 }' }1 ?item1, ..., itemX        可选。要添加到数组的新元素3 q$ F! b! l/ o" A
*/
/ i( J+ q/ q+ G8 ^; H& i7 v4 x) y% J3 n4 L* Q$ T# v, V1 T
// forEach()        将数组的每个元素传递给回调函数( x" g" R# A4 Z6 `% b
&gt; array1.forEach(function test(n){console.log(n)})
% C* ?# V& Z+ O- E& m# _ 1
( f8 d$ q, [5 o7 P 20 H' _, V$ H. O9 B1 j
3# K  i! V; H  Q2 t1 N% ?
A# `/ g* C! z: N+ \' f, X
B
0 ?8 Q7 ~, i$ l/ x" P C6 Q: Z6 r( `' V' {0 F  x& b
// 返回一个数组元素调用函数处理后的值的新数组( ~# Q5 S7 d( a8 n
&gt; array1.map(function(value){return value +1})- ]  W$ c' q5 I$ a2 d* ^
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']0 \  W" A4 h$ Q! S! _9 y
</code></pre>" `: r) D" B# W
<h3 id="24-运算符">2.4 运算符</h3># C3 h4 i' q* X# ^
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( Y% M2 ^5 K( R! o
<p><code>+ - * / % ++ --</code></p>
) g) P/ x' ]# p, f% b<pre><code class="language-javascript">&gt; var a = 62 _$ |( _3 V9 @+ D/ y# y
&gt; var b = 3
+ h4 Q2 f0 @. K// 加
# ]* d& x) G- g  q, @' ]&gt; a + b7 M# g3 G" ?8 x+ E% O# P! D
9
% P0 Z5 B' P# ]( Q! a( ]; S// 减% N0 L4 v7 w! T; y1 y( A8 f8 h
&gt; a - b  O- S' c" V: U( ?1 E2 K
3
: L1 v( F. A0 T2 z) t// 乘+ k1 I* D2 O8 ^+ a9 E; }+ L) |
&gt; a * b1 g$ Y! ?' ?+ N
186 ]. u6 E0 ]- d. N/ N# p, T
// 除/ F" u# U" @) Y* H( a+ t! n- k
&gt; a / b+ R# w+ ]8 z' m$ x/ v+ V- K$ r- [
2
, m) J% K7 f/ p5 i; n// 取模(取余)# f# m) T" {6 L0 x2 l
&gt; a % b
: S" y& S7 p% w+ W  ^0% g( X7 j& P7 M. K# I* a6 E
// 自增1(先赋值再增1)
/ J5 Y% H9 K9 Y" w- r) M& F&gt; a++
/ z  s7 n, m$ x6 w: c* f2 k7 S6
0 ^* b5 O+ i. n  i0 ]1 S$ y&gt; a
" D* g! p8 `8 s0 c( Z( ]7 q7
8 X& ?- ~: K' K( S" y0 z// 自减1(先赋值再减1)6 E( w% w, A+ L' c
&gt; a--
8 I$ ^1 y6 q, K9 S1 F7
+ \. p9 l7 y" h% e! Q&gt; a
2 X  ~" l' a+ A0 u( k- t$ T1 r6
! r! R2 v3 d1 S4 `' S7 Y// 自增1(先增1再赋值)
( c* ~3 Q6 [+ t- @/ _, H) |& ]; Q&gt; ++a6 g! _2 Y# ~9 {2 |; B
7
+ p% ?) P( P" J1 ^& T! V! Z// 自减1(先减1再赋值)% {- _1 c9 }1 C. J
&gt; --a1 Z8 c# [( W" ]9 m# c) K; v& ^
6
" e6 H1 e9 A' v6 Y&gt; a/ E) j1 Z* H# ?  R9 N" ~
62 N# ^$ ^: \) N
% U$ U3 M6 H6 r  u& \4 H2 J; h
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
' {  J) R# |. o" Q$ R8 l</code></pre>
4 P( b! v" D8 D1 P! h<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- N, v  W" c: a$ p<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% l' M! V) q3 H& O) u8 {<pre><code class="language-javascript">// 大于
( S. ^& [( a6 @% m& M&gt; a &gt; b
& s/ L$ t5 g- @% z' g6 ^9 M  _true: z4 e" K$ X* A# A/ y2 y* P
// 大于等于
. u' b0 o7 x5 ^5 [4 G5 a$ [0 E&gt; a &gt;= b! n" C/ a; O. P0 F4 e+ Z& \7 S
true
) }3 h) K' ^, L* D: u! U- `// 小于
8 S7 Z$ g9 |2 k! P5 w: ]&gt; a &lt; b
' [8 B2 N/ v4 ~! J5 w" q$ Vfalse+ j( j" B1 ^7 ^: n
// 小于等于" G  ]- U7 K! G& P
&gt; a &lt;= b! L* V  X1 e# a1 ^
false6 \( `" B- A9 P- T) F
// 弱不等于
& W; A, m! ]; o3 o% }& O&gt; a != b
8 S) e9 W) R- p8 r% s, k  j6 ttrue
6 f, {. \; G4 d4 W* l// 弱等于. p& ?! W! g& z/ I" Y& \
&gt; 1 == '1'- W, P6 U( A2 [
true. {- j; j: x8 h, e6 ~0 |& Y- _7 X
// 强等于
  M+ k0 [) P( `' E' p&gt; 1 === '1'
$ m7 f, B% k1 U9 I# H) Xfalse
# P2 B& G" }5 e; n- R// 强不等于* Q7 `. n( ]8 Z* s( z
&gt; 1 !== '1'
$ P4 w  c* `. z! jtrue
) Q9 I" p% y* x0 v6 \$ u# Y8 M' L( i2 ]
/*# \& _6 n* v0 ^! J* O% H9 G
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误& K* m1 c6 W% m( `0 e9 d9 r4 F" x
*/
4 X$ k( E& d1 _+ S7 l$ t" q" `6 r</code></pre>
- w) I1 X; |. R; m# ]' s$ i<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
# @7 y7 C5 Y# ^3 y4 w* Y<p><code>&amp;&amp; || !</code></p>% h3 ^& H# f# I- l9 U1 W- O
<pre><code class="language-javascript">&amp;&amp; 与( U" y, `' ?8 L7 F
|| or / X$ a: n: s7 }. `' |; g$ `
! 非
- e# y' ?7 n: h' C( M+ g2 v4 ^</code></pre>
" F1 W% R" Z/ P2 ]<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
( U9 ~& ~  J% v' O6 k" U1 o<p><code>= += -= *= /=</code></p>3 d2 w+ O1 T9 e  g* l
<pre><code class="language-javascript">// 赋值2 B+ ^- N  k1 r3 z- G) ^" F3 t
&gt; var x = 3
& r. t" V* I. O* W" X1 R0 s+ {// 加等于4 V% V8 }/ X! W0 `: c: V
&gt; x += 2
; z( h  K9 ~. s) }5( @! d0 _' ?9 t. D; z! b# M& K& |
// 减等于
: c" K% u: O6 I+ A&gt; x -= 14 m/ i: k; V7 Y/ T& L* U' @: c
42 N$ m7 Y) z) X/ H4 F
// 乘等于& L, J" }! f1 @6 g% p9 r* p3 c; N
&gt; x *= 2
. E1 y3 I5 A; A( J81 U# y9 Z: I) a/ `. N+ |3 q9 a
// 除等于( C4 w8 l0 ]4 q
&gt; x /= 2( H$ \+ ^7 c2 j4 i) |0 a
4
- {2 m% J+ p8 c8 }* @, p</code></pre>* b  }: f$ ?& l& e  a5 v1 k: L* w! o
<h3 id="25-流程控制">2.5 流程控制</h3>
  L! r- D1 S8 ^, c  q! r# l0 j<h4 id="251-if">2.5.1 if</h4>' Q. x9 \: P( F+ l# c+ x! j  `. J/ n
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}- k1 `5 F/ ^6 Z3 B; J( U. w
6 z' y( h% \+ W: o! g4 d
&gt; var x = 3
* M4 n# k1 M( C&gt; if (x &gt; 2){console.log("OK")}' G/ Q; d  H, Q9 H# i4 p
OK
4 K5 d/ C, o/ u6 ]9 F
$ q) h' V# E6 [8 R2 q2, if(条件){条件成立执行代码}
4 Q; @. q! D8 m0 E        else{条件不成立执行代码}8 J) Q7 _; V8 L" n* a

# d) \# Z3 f1 _: q&gt; if (x &gt; 4){console.log("OK")}else{"NO"}/ _) P* H% m4 @! q" X2 M& H
'NO'3 {9 R2 K& n: P7 A& ]/ y
5 t; R( ^( U$ s
3, if(条件1){条件1成立执行代码} ! ]" n, R  \: c# J; i( V
        else if(条件2){条件2成立执行代码}3 J0 U6 o& O3 k- U, r1 b
    else{上面条件都不成立执行代码}" C! s8 n- T! \  O3 f* s, S
' e. y* ~1 l4 l9 T- {& U7 h
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}9 C6 h0 q& i" I3 I
Ha
# T' b0 N4 v5 D9 ]' [- B' J- X  U</code></pre>' H2 y, G$ R. o  H
<h4 id="252-switch">2.5.2 switch</h4>: v: L) _( P3 N8 N
<pre><code class="language-javascript">var day = new Date().getDay();! Q8 S8 i) t) v) `, |/ F
switch (day) {
1 ^3 ?' b/ d7 `# a1 ?3 L  case 0:
' A* J" T9 x. G( y- ~, F! M  Z1 l3 M  console.log("Sunday");" R8 t4 Y1 P- P1 n% A
  break;5 v0 s* v8 `1 I0 `' p  Y
  case 1:
2 T- \% x- H5 j  console.log("Monday");- c$ F% A8 r4 A, i* m
  break;
  }, a+ v* ~. Rdefault:
9 D1 n7 d+ b: P9 T  console.log("不在范围"): |8 k3 V: ], A" Q+ v# W; J
}  K6 l9 {6 y7 |. Z; w7 ~' d
不在范围+ g) O/ W. M! Q& L6 ^8 s" Y2 W
</code></pre>, k1 D+ ]( W2 R: M$ r# n$ l7 x
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
' E; l6 d$ t/ f6 u<h4 id="253-for">2.5.3 for</h4>
3 e1 }* j, z, g<pre><code class="language-python">// for 循环
9 L& O  N; A1 M9 a        for(起始值;循环条件;每次循环后执行的操作){, a6 `3 N3 [& n1 }
        for循环体代码# Y1 u; s7 k) f
    }  w2 n0 i$ J! l+ o) c
! H' [; S/ \( l+ Z$ F! v% {
for (var i = 0; i&lt;10; i++){* ?- K, C! R# p- ~. @& i2 ^
    console.log(i)/ n4 U+ G; w# l3 G) ~& _
}7 }! ^  J$ r9 ^7 E- o7 H* \
        0* m- d/ p7 ~8 v- I
        1: u2 o3 n* ~6 x
        28 A4 }5 y0 D0 A/ e3 D: n  n  h
        3
' A; W3 j5 \# I2 D        4
7 d% r  L/ L3 n, F        5
& F$ w+ |+ Q  P, h$ c        6
- W+ n5 B* r* f. l0 n        7- l/ U! q4 ~3 X2 F- H& G  K2 |
        8. w2 {1 h9 ~/ \7 w+ q. a1 x
        9& M3 T* `: q( L5 f/ S5 K
</code></pre>
. o. F$ j% V$ C8 _$ I5 k<h4 id="254-while">2.5.4 while</h4>9 S: L3 E& d+ ~3 {
<pre><code class="language-javascript">// while 循环# j! T, D+ C! F& y" K3 ?% b+ O
        while(循环条件){
2 M9 ^& Q6 g" ^        循环体代码5 E$ |2 I0 N- [3 d. T5 m- v
    }
) Q: g% ^3 [6 p- Z. G+ P8 [2 P/ U7 V0 T& u2 i) D" K
&gt; var i = 0
0 v+ U! ]7 y# Y/ ~/ S4 C&gt; while(i&lt;10){( i5 I. P5 f) c7 f1 [2 B# Z' ~
    console.log(i)3 v6 |( K5 {& _4 w
    i++$ n8 H4 L8 \+ _( w' M$ A
}
0 [: P; Y' i. e5 f 0' O* w' s$ E  |4 Z0 ?9 w7 m
1  Z8 L! |$ G/ R& f0 G
25 V& Y) J6 i) r0 S
3: f) d, g! g3 C+ W% ^6 N
4! H6 {2 a6 g$ y  F2 T
5$ l2 `; y/ J# a1 o5 V) j
6
% q* t/ X6 M8 j. b, Q 7
6 Z2 `) U( B+ }9 I+ w' J; C- S 8! b1 d( j6 I3 T$ j- k
9. X3 S* K& U2 s8 p; B
</code></pre>9 j* ]6 Y- H$ E" J
<h4 id="255-break和continue">2.5.5 break和continue</h4>' k0 i8 f# }% K' k
<pre><code class="language-javascript">// break
7 M4 O5 I" B! y: n( tfor (var i = 0; i&lt;10; i++){. M! o& v* x3 A6 K8 T& ~# O9 b  y
    if (i == 5){break}2 |5 ?) a+ _% B- [! j
    console.log(i)
" S: E- W* d& T8 o7 i# U* X}0 ?! m8 [7 G/ E$ o
08 X: h5 |+ s  j: D; p
1! h% Z6 c7 I, z) y5 L7 V4 Q/ A
2
' K/ s% }$ a2 t; l  I 3
. o6 w6 H. |" B6 ]- ^ 4% r! w& s  w# r# l: R
// continue
! i, S( P- P: A( Gfor (var i = 0; i&lt;10; i++){
# |9 _  A0 T* \1 f' r( `; m    if (i == 5){continue}
  i0 ~1 v. c, G8 t2 j    console.log(i); T3 Q; e. `& `0 h, [
}
* ?% m1 d1 T" U0 r 0- F4 |) |% {' E% e; H3 F3 q
1
* y4 S: k" u) O# E$ G4 K  `: X 2
5 H3 s8 g% o3 u, ]: L' _/ S1 |! G5 J 3
9 ^- `  o+ y9 v" _! M5 P 49 G$ r5 k) V  W' h
6
) ]; s+ y  }( G8 _3 t! m% s 7& u2 t$ U/ C0 T. _! n5 w$ j
8
& R: S! H; m4 Y: f 93 L# K+ U3 G6 Q  V2 B, E% U

( _4 a3 T4 j: C  s% E5 q</code></pre>
% L1 h' c9 o4 d* S9 p<h3 id="26-三元运算">2.6 三元运算</h3>4 S  ?6 v( P  ^# a
<pre><code class="language-javascript">&gt; a. c& g8 v7 d$ a
6" f, N- T+ Z; |( v, M% z- ^7 G; x
&gt; b6 v$ u, u2 f% @2 Y' C, e
3, L0 B0 U3 d/ O% N4 N# Y2 r7 M/ j

9 B! r0 O+ I0 o2 O" s4 u- ~% O//条件成立c为a的值,不成立c为b的值0 ^$ \  D8 e$ @2 H1 K# c
&gt; var c = a &gt; b ? a : b" l& J/ A8 F0 Q& K
&gt; c8 [/ |+ R0 }4 a. g# m
6
& ]: B$ n' y8 W* V" J( G8 I% g, {$ W. q% U: D7 N) r: H
// 三元运算可以嵌套! t8 S5 j! J+ x# ^3 t
</code></pre>
8 O# Z% h$ h- [4 o; x7 Z& ~* h# i<h3 id="27-函数">2.7 函数</h3>( G& Q% V( U. E$ J9 s7 O5 O! x
<pre><code class="language-javascript">1. 普通函数
7 }2 S% V. U7 \9 R&gt; function foo1(){
& u1 }  T5 ]) X2 e    console.log("Hi")
+ {' ^# o8 B" K& Z) w* V}. \; o( V+ W/ I: N* \

4 r: L. @: J: U& J5 S% f0 k9 {&gt; foo1()
6 B- s9 G! M5 E5 @        Hi2 ]9 ^' T/ I5 U; J
2. 带参数函数$ l1 n% U9 L$ G' n
&gt; function foo1(name){, l% F/ Z* x+ Y3 G
console.log("Hi",name). W9 C6 [+ c% p3 i
}
' `1 f1 i8 @% s! u; b  s1 W5 j5 D/ o9 d8 J/ z
&gt; foo1("Hans")  x6 G7 _% ^' k" Q& K9 E
Hi Hans9 R" k7 t, |/ d9 ]/ [# |
2 y9 ?  l* @/ v5 g$ z5 Q4 E- }
&gt; var name = "Hello"9 `3 j, {; A5 i! T1 N$ Y# ~
&gt; foo1(name)
4 t' S( h+ b6 i% s; Z+ AHi Hello  S* z3 t% J3 i8 e& O

$ H' \& T0 o/ G  V5 _$ ?3. 带返回值函数' |3 z9 M. o- R' s
&gt; function foo1(a,b){+ i5 `- i* ~/ P: N/ x# T; l* n
        return a + b   . @7 h4 D- |5 F4 R! A: B
}
7 {) I2 w& j! t4 W2 K6 Z' [&gt; foo1(1,2)
& b4 U, ]1 a/ `! N9 q/ N/ E3: u) Y; o% g" W) T; E5 G. B
&gt; var a = foo1(10,20)  //接受函数返回值$ y/ r* h6 U0 ^( k
&gt; a
% d. M) P# B, w4 _304 Q: K9 Y  b& I; z; Y

' ]! ~1 l2 j9 n' n9 W+ I4. 匿名函数
+ A" S+ d1 y4 ~( y/ i( V+ O&gt; var sum = function(a, b){
2 @; X5 i( ^  U5 \  return a + b;
: e" R( {( v$ T2 I/ N  R}; h  ]6 }. I5 i
&gt; sum(1,2). u8 f6 Q; J  g# W
3. j! Q5 G1 F2 m. r: B5 w

, Z9 b, B+ p- u' R9 `/ z* d5 O// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱, V8 S5 p% J7 ?/ R. }+ a. d
&gt; (function(a, b){) J* @1 `3 s9 {# H
  return a + b1 {% X6 L0 V) V1 r/ E
})(10, 20); _: G9 m# S# L8 g- L# e* ~! d6 ^4 Q+ ~) A
302 M6 V6 u  W3 H9 Q

7 y; p0 u- C/ o/ j% P3 H4 d5. 闭包函数& W* G; R& |( u3 b- b. h
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
3 M% I  l$ M1 j6 K( N4 |var city = "BJ"
7 c! s, f6 |( x7 Y3 a; g0 k* _function f(){
5 T0 T6 Y) d, B* l    var city = "SH"+ z' D( t  E8 D! i7 s+ [, K. q1 J
    function inner(){
* I" D+ f* H0 f9 v. B1 N) R        console.log(city)
9 R* t: T" x2 m/ e    }: b) U' K# R$ q! m7 ^  b. o( R% h
    return inner
5 u  ]9 U* |/ ~4 ^; K}
8 t: y( L7 |6 gvar ret = f()
8 x) T4 ~8 D6 T$ i" Bret()
) g+ v. d( m1 a9 A  q2 [. A执行结果:
9 _3 ~, `# `  ^, B0 MSH4 U/ P' k; P, W* l% }

! X# M4 W& n# i) s0 j# A" ~% `</code></pre># T. `% |; Z; l
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. ?6 _) K( ~9 d
<pre><code class="language-javascript">var f = v =&gt; v;7 U, W) w2 q  h  _6 N: k, @+ f8 h
// 等同于9 k: {# ?( u! T- L5 y) i
var f = function(v){
, o6 U; T: b' }* F/ o2 A) c  return v;$ G5 R: L( L. [. R7 L  p
}
: I- {% K# @4 e6 p* C/ D7 n2 a2 m! I</code></pre>
- \. `. O. \$ c<p><code>arguments</code>参数 可以获取传入的所有数据</p>
8 D& Y- F1 `; H) y<pre><code class="language-javascript">function foo1(a,b){
. ]6 B) x9 P, Z4 x0 P* T$ d* ^    console.log(arguments.length)  //参数的个数
8 J6 G# h4 Z5 o/ n5 e    console.log(arguments[0]) // 第一个参数的值
" H+ L+ O6 t$ M6 I# o2 w/ K5 B        return a + b   
0 X9 [; o% i) d* A. n7 h* e  q}
( p# f1 S! K% Y' t/ K, vfoo1(10,20)% n4 ^) X8 H% R; F9 \
结果:0 ^, i) @6 n8 L1 x1 w! _
2          //参数的个数 : n+ K( a  O' U" ^
10        // 第一个参数的值. }& I3 e0 @/ Z3 n0 K) S
30        // 返回相加的结果! S" U  D! F" k. h
</code></pre>- ]% g+ o$ O# n+ f
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 {7 J6 i( I: @$ i3 M<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>6 q  p* K. t4 |; ^: T1 _! S2 }
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
) P" R1 z! P/ {; v<h4 id="281-date对象">2.8.1 Date对象</h4>  ?8 N2 r6 C& @7 m5 o4 f
<pre><code class="language-javascript">&gt; var data_test = new Date(), Q9 s1 C8 {8 q3 E
&gt; data_test* H0 @8 k  @8 K8 m2 s
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
3 d& A( S0 e- h1 u: A8 E5 a% K&gt; data_test.toLocaleString()( B# m6 T5 K- E! q6 ^( f
'2022/2/11 下午9:44:43'
4 L  h0 \3 a# C
# F3 r) g( \! q/ ]: q&gt; data_test.toLocaleDateString()
7 W0 b5 p, N, W6 y'2022/2/11'
7 |" |7 i* E; u% ~/ f' R
1 d0 Q& i$ z, ^8 Q& L$ ^&gt; var data_test2  = new Date("2022/2/11 9:44:43")
" b1 l3 B  Q9 p' P# V, z  U&gt; data_test2.toLocaleString()' ^  [, a7 K: D+ Z& J
'2022/2/11 上午9:44:43') ~9 g  f, t; _7 w  B2 G9 n- E
4 S0 S( S" j) T0 t
// 获取当前几号
0 C. a: f5 @- G&gt; data_test.getDate()0 j. I9 Z% t# u% M' Y- ?
112 Y* u. c) b& P2 z& b8 X- Z
// 获取星期几,数字表示0 \" N- B; [0 {7 i5 x* `) ~0 _" I
&gt; data_test.getDay()  ! a, j& V; ?' L5 @/ U  R# r
5+ W" l. H0 B/ ?- w8 N# W/ l
// 获取月份(0-11)8 M0 j5 i* ]8 }( J' U
&gt; data_test.getMonth()
1 Y) |2 `7 ]1 _/ \8 [- q0 K7 t" A1
( T3 e5 L& E( K+ C// 获取完整年份
/ p' e! b4 z$ Q! H" V&gt; data_test.getFullYear()! K& d8 N& f. n/ H$ X7 p3 T
2022
  y7 C: K7 b- }, k# p// 获取时% u1 v: G: H6 p
&gt; data_test.getHours()* C5 b( t% W  P; E' l3 V- `
21$ K' U: y& G8 J1 V% c0 _5 @% M- ^$ x
// 获取分' M. u- G+ S' l) j3 U* u5 z
&gt; data_test.getMinutes()0 F8 X2 B: N, M6 Z, {! v
44
7 P) a" x2 R. ~$ ~1 J6 q( L5 f// 获取秒! ~* @5 R5 }; o9 B' X
&gt; data_test.getSeconds()6 w& B" C9 Y  f/ |' Z* l9 l3 d
43) O/ d% u2 N% m: C: {
// 获取毫秒
3 K& e$ ^& g9 U&gt; data_test.getMilliseconds()" O2 H% l$ E+ l/ v8 A% C
290# J3 U3 g0 b, I( _- ]' z1 D: J
// 获取时间戳
# Q2 ~! ~0 v2 o8 {/ X' Z&gt; data_test.getTime()
: _! ^6 W2 m5 t5 b9 Y2 u% \1 v1644587083290
5 ?  \0 `: L1 k% z</code></pre>5 I8 T+ @% n* m' @% ?( R# P/ C' k
<h4 id="282-json对象">2.8.2 Json对象</h4>
* g) K" N; E+ ?<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
% J9 V( @: |' m. K' R, z/ u% Z& PJSON.parse()  // 反序列化,把JSON字符串转换成对象
; u6 H9 I' H) g* r4 G7 _% g! e! U5 X
// 序列化/ @9 ~+ u& a: v" T" h  ]+ S
&gt; var jstojson = JSON.stringify(person)
  ~; {: m- A/ J+ x8 l&gt; jstojson  
; W1 e# J  c% c7 m4 i  f'{"Name":"Hans","Age":18}'
; X( J9 E2 R8 v3 H$ m' @5 S' j, q" W1 E& c( c  X3 H; U
// 反序列化' \6 ?; H5 E7 d" f5 x: ^( n
&gt; var x = JSON.parse(jstojson)
2 N* ^! K9 |8 n5 P+ g&gt; x
$ |& M- K7 x4 i: m) K. c{Name: 'Hans', Age: 18}
9 r9 t) s( E# d2 o* e0 I% L; {; _&gt; x.Age
, C% C' U8 w3 t8 Z1 t! ^: j/ f18
- s; O, a4 T+ |</code></pre>
( w0 Z6 }( E7 ?( l3 w<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
9 u6 {7 `: ]: B* r% O<p>正则</p>
6 D0 h+ W/ r. x% X<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ n* t( c5 C- b1 |  L  U# x# j
&gt; reg1
5 n  M4 ~" H% S  \" t% A5 Q& t' `; e/^[a-zA-Z][a-zA-Z0-9]{4,7}/
( }* Q: ]* _7 q  l- e" x&gt; reg1.test("Hans666")6 U$ j. }( R5 X$ R1 N3 S: a
true
$ E; @+ _7 M: p! h1 C% r( y1 ~! I: p, R0 B
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
4 b- ?" E# l/ u3 C6 l&gt; reg2
( @8 \& k, X3 A8 a! z/^[a-zA-Z][a-zA-Z0-9]{4,7}/
3 X6 ?4 J+ `6 A# T2 b* g2 B8 S&gt; reg2.test('Hasdfa')
8 {: e5 D% {/ S0 a8 }! b+ Ptrue; W3 L3 n3 I, Q$ O- P

+ k! e% S' @7 |全局匹配:( y$ o1 K- B! j( B
&gt; name! o# s* J* z  ^* J* p
'Hello'
- H* D3 o% Y# l3 I; Y2 o&gt; name.match(/l/)1 ]/ b, b3 W# X" L3 B
['l', index: 2, input: 'Hello', groups: undefined]/ L% ~" i6 ], ]2 z( H

; K0 {2 O! \0 `; |8 E* L( p&gt; name.match(/l/g)
- s5 `' Z+ @6 A0 x. M  T( [8 C(2)&nbsp;['l', 'l']
9 r' P/ @8 W2 V+ k3 k1 J8 ]; H// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
" W  Z- y/ g/ j3 Y- ^$ {& [4 b
" w1 H* r; {% _* H$ z+ Z7 n( C全局匹配注意事项:
4 v1 ]7 a! r# v& e' d& A&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g/ o$ \: w' T) H& ]0 K* q: f% N1 V
&gt; reg2.test('Hasdfa')
% d7 O  v4 _4 d1 W9 Z$ l8 @true
0 D! [( K7 g0 D& x6 @&gt;reg2.lastIndex;
! w7 d8 y  @. {1 W1 P6
, F- {1 I3 g0 u0 S&gt; reg2.test('Hasdfa')
# x! A" m7 ^$ V" u% qfalse: p5 S  O7 |$ C4 O0 E, N; j
&gt; reg2.lastIndex;
2 n# ^9 x- n/ z0
& P1 l3 [1 _5 J7 N! ^( v  u&gt; reg2.test('Hasdfa')+ @1 `. K" K+ G" _% _
true
# Y; q( t8 J1 P" i&gt; reg2.lastIndex;
' k0 F3 N3 p& _. `1 Y6) d% h9 `2 [4 Y9 Q
&gt; reg2.test('Hasdfa')- g' D& I- N( W$ D
false
& V  `, l) `9 b4 g/ ~* w! H: y9 X6 b8 v1 A&gt; reg2.lastIndex;
7 i' z! J! v2 p, L. n0 d0 @% m0. a8 g$ C8 ~$ ~# L
// 全局匹配会有一个lastindex属性
) [+ m; n5 A8 f&gt; reg2.test()
9 l& [  I( u2 r) `. w7 c7 ]0 J; {false
# d; j( j' S' P% G&gt; reg2.test()7 R5 ^* t4 `' Q% B6 r) F* B) u
true
% H; t- ?, [- J0 [' _  f+ _// 校验时不传参数默认传的是undefined
' ]  `9 S7 ]' |% |( V# P# ~</code></pre>
; |9 d9 I$ t6 ~6 D: z- i<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
) N+ T! {& n3 l' B% ~6 W* c- W<p>就相当于是<code>python</code>中的字典</p>5 D# Y, m  r( o. q
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: h) G$ `: X' X&gt; person4 q: N0 a- ^: H4 J8 W
{Name: 'Hans', Age: 18}  d: b0 U' q/ M2 M0 r* X" j  P
&gt; person.Name
( Z. n8 S& d8 d: {'Hans'( W' H  Y+ P+ ]2 n
&gt; person["Name"]
, ^! r( y$ M+ k'Hans'
7 W( j, X- K* Y/ J0 `! `3 h4 v6 D, p  E
// 也可以使用new Object创建
/ N+ t5 }" O+ x&gt; var person2 = new Object()
2 S" X/ W4 b) m4 p5 C6 n7 A+ h&gt; person2.name = "Hello"
( q+ P5 I+ d, k" E) R) B'Hello'" t6 ~9 c& y) j1 B
&gt; person2.age = 20
* h5 P0 [( P' {0 v4 K20
: u, @* c( }4 N</code></pre>
2 u1 Q( U* g* g<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
6 i+ B2 F1 z+ W# v1 C9 I<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
5 Q. B$ u  W% G! P' O( l& Z<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>/ M3 h" r" z2 M" ^( K
<h3 id="31-window-对象">3.1 window 对象</h3>
  d0 Q" H% e1 P; `* X<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>& ]% U0 b2 E, I0 X: W9 Q
<pre><code class="language-python">//览器窗口的内部高度3 j% P$ n$ i% p+ X' I5 t
window.innerHeight 0 h  `  n( [: b+ W0 ]
706! |1 k* P2 {) ]9 Y& S( K  Z
//浏览器窗口的内部宽度
( p. T9 y( t8 `( `7 e) [" D6 Zwindow.innerWidth
* H& f, C$ O, r4 e' ~$ z! j: j( V1522, R- `7 |4 s/ ]5 T1 O, y  J
// 打开新窗口
3 A; I. m# ^! q% }, ywindow.open('https://www.baidu.com')! q; \" v: F! m
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
* g6 H4 e* H' q$ G* R// 关闭当前窗口
- D: h( J' h" \- B) F. ^" G# {window.close() , m" z# I* }( r$ \  P, z1 d8 s
//  后退一页
! n: ]. ]' P6 ]6 P" x7 d3 Cwindow.history.back()0 v+ I0 u1 K6 t/ Q1 [& o, x
// 前进一页! \* X* y4 p' j+ N3 v
window.history.forward()
: \; `  ]; L; N4 O% q8 V//Web浏览器全称" ^- U/ I' L# Q$ a! I2 R7 M% R
window.navigator.appName4 }# ]  K' A0 j; o4 x8 g$ A: e3 J
'Netscape'
7 E2 M0 _; |) O5 _2 d1 i- L// Web浏览器厂商和版本的详细字符串# R9 w, q7 h* W* R9 i
window.navigator.appVersion7 z; G( ~) G5 e" }6 y) W% A# c5 e# P
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
7 }7 u6 E" C! E  z  P2 P// 客户端绝大部分信息# P  l  [# l$ z
window.navigator.userAgent
7 S8 y6 O& u+ v! g$ k" Y$ i+ r'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 _2 ^3 h2 D% x- q) b, T8 M$ K& z
// 浏览器运行所在的操作系统
  o8 @2 s1 k/ m" p  _, x, `window.navigator.platform
0 p) b6 m* l( l4 f! N/ ~'Win32'+ B1 B4 m$ x( Q" [: B# l* ^

, `$ B* k8 c% K//  获取URL4 p6 \8 A; Y- g: j1 O) v- ^
window.location.href
1 i- z2 U1 ]8 ?- M6 x// 跳转到指定页面" |1 b7 L/ z+ w; ~" }
window.location.href='https://www.baidu.com'
2 }* A! \0 Y* u// 重新加载页面  W* j' e* T* v$ Z- j" _; u
window.location.reload() 0 t0 A9 M) c; @' d
</code></pre>
0 @* r; J& ]. n$ I* M0 N) [<h3 id="32-弹出框">3.2 弹出框</h3>
) A/ k$ |% ^3 e<p>三种消息框:警告框、确认框、提示框。</p>
) K% Z; ^4 u* {$ I0 T<h4 id="321-警告框">3.2.1 警告框</h4>9 s0 t7 W# e9 a$ _$ t
<pre><code class="language-javascript">alert("Hello")
( C& h+ B0 ~; g7 d- P# I</code></pre>& H* ?  Q0 D4 w) ^! h% P; L$ `
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
/ Q' S2 r9 Z; H3 O( `0 B3 w1 w<h4 id="322-确认框">3.2.2 确认框</h4>4 ]' G$ q: B* y0 r: b% r2 P
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>  l/ x/ L6 `2 L, u4 `5 j
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true- u; M" C# _" n' h
true
% c) C7 u* \1 u5 q% E5 ]) O! C7 N&gt; confirm("你确定吗?")  // 点取消返回false$ `! ?) b* K- f5 J( H
false
0 _7 c* c, g, S: w</code></pre>- ~4 ?+ H- P2 b& s! v* ]# E
<h4 id="323-提示框">3.2.3 提示框</h4>0 K. L$ ]( ?9 T& Q5 T  A/ K3 J5 C
<p><code>prompt("请输入","提示")</code></p>/ W3 H/ [. A2 @( }
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
1 v7 e: Y+ I$ }- g" E7 o<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
# M& s  Y1 S- B% T9 j- A) F( E<p>如果直接点<code>取消</code>后端收到<code>null</code></p>8 b) V8 j* X' `" N) K# A  Z
<h3 id="33-计时相关">3.3 计时相关</h3>! ^1 Z+ Y! @, ~
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
! r" H) z5 d7 X) O<pre><code class="language-javascript">// 等于3秒钟弹窗: V6 o& J9 W) c4 M/ A# A" v
setTimeout(function(){alert("Hello")}, 3000)0 h6 [, v6 Q7 L6 u$ G; s" m' D
7 `5 k$ ]# e, d$ ]+ _* K0 l
var t = setTimeout(function(){alert("Hello")}, 3000)
: {( C* {. @, R  \
9 W; F3 Z; @4 a, Y+ A// 取消setTimeout设置
+ u2 j4 \" ?+ Q/ i% k& B+ a2 pclearTimeout(t)  a+ d/ |/ d7 z0 W( E
</code></pre>6 s/ L( W# e8 W# ]
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>: R+ {5 L! q! c5 q& ~! B9 T  \
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
$ M/ ?; J( |: b- j<pre><code class="language-javascript">每三秒弹出 "hello" :3 Z) i$ Y5 q/ t7 P4 r! O5 a: B
setInterval(function(){alert("Hello")},3000);( Q9 P1 z) r' x1 }9 K
</code></pre>
7 e/ l- b+ }! M* }6 ]$ {<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 O) ^1 C6 b6 u, c<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);3 c. p$ G9 U1 N: g- b0 A& i2 T
//取消:3 V7 I5 P% b  S+ n$ {* \0 @
clearInterval(t)
6 w, b- T  @9 l( R2 g& ]0 R3 N</code></pre>
, P& x3 J- R4 ?  |$ J( t( o( F, C2 b
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-24 15:55 , Processed in 0.131970 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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