飞雪团队

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

前端之JavaScript

[复制链接]

6865

主题

6953

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22925
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
6 m) b6 b& {8 k) [0 c9 y! b( b
<h1 id="前端之javascript">前端之JavaScript</h1>
0 S4 w4 r0 E! e1 o9 m* X4 A4 t<p></p><p></p>5 Y1 `; ?1 u* O' b" T
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
' I" j1 w7 r1 X4 v' B  b8 m<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>$ P3 l+ L5 R: K0 H- R( G9 W7 y$ [
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>, q* u8 Q8 f. p* j
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>% c+ ^" d0 U( C" a
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>* O6 U0 g) j6 v1 J! {" G* f: `
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>7 l5 ^4 ]6 m* z9 n0 Z
<h3 id="21-注释">2.1 注释</h3>
" Z* D9 l! {0 g<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
+ J1 Z& G9 p. {( d<pre><code class="language-javascript">// 这是单行注释
& J& ]0 K% f! v# D
2 b8 f; G0 d* n$ {& F  o" D- c/*, F0 |$ s5 ]5 ?$ |% u
这是多行注释的第一行,
# ^' C6 x& m8 n0 m这是第二行。
! r1 q& n- d- E7 s*/. {* h; {- N5 y& ]2 }
</code></pre>7 v9 u3 Q9 Z0 Y" I! Y2 Y) ^
<h3 id="22-变量和常量">2.2 变量和常量</h3>
: I# s3 N: {" }5 @* r; g<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
: p9 v$ u( E: e  P" [" O<ul>
/ x! P' m8 @! B2 p3 e<li>变量必须以字母开头</li>' E. N! U. U% l, x) w' S8 z+ q
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>' R* T; a1 {8 ~0 y
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
( b1 L0 C% P4 q$ H' f5 o5 B6 H& [/ M</ul>7 y/ H4 w5 s9 Z% n2 a$ ^
<p><code>var</code>定义的都为全局变量</p>+ V. E' j9 G3 Q1 z2 M2 l$ m
<p><code>let</code>可以声明局部变量</p>
* ~& O2 i2 T  N. J- Y. R7 C<p><strong>声明变量:</strong></p>7 s9 b& C0 I% U% _7 l1 x
<pre><code class="language-javascript">// 定义单个变量; ~2 m3 |- q/ m' r4 ?- x. K1 U# r% V
&gt; var name
" Z# u8 A* ]3 e* j6 R( b5 M9 l&gt; name = 'Hans'
- `, ]( u4 n, `( c2 V/ d: k//定义并赋值
* Z9 C9 U6 k: A6 u" D4 x# l&gt; var name = 'Hans'
+ Y- |* Z9 y' A$ r+ W9 a&gt; name' o2 z0 [4 R6 e# X1 F- x
'Hans', o0 y5 n, W- W+ `
2 Q) Y/ |5 I2 d/ C8 L% ~
// 定义多个变量
, \9 N* N+ M- A& Z&gt; var name = "Hans", age = 183 |2 ^& v4 ?. x$ H: d4 ~9 P
&gt; name% s: b9 _6 e* ?3 q7 g% l% J4 X
'Hans'
2 x# g1 j; A4 ~6 _&gt; age
) O* l/ G% }% e  M+ o; v8 P' C18& r; s* o, O% E

% X: x3 x  Y9 ^* k  T7 k" L//多行使用反引号`` 类型python中的三引号6 |- H4 M) N8 C5 F# r
&gt; var text = `A young idler,
# Y3 j* K: U4 t8 D/ M7 Kan old beggar`
$ t4 X+ d& E; y+ a) T&gt; text
+ O9 ^: r9 O0 D: S+ T+ M'A young idler,\nan old beggar'7 F( K  g# {4 D; }4 @' m1 c
</code></pre>
4 H3 J  @. _6 r" ^. s3 Y<p><strong>声明常量:</strong></p>
! {) g& A! b' M+ i2 `9 M( d/ _<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
. s; Y, B6 o7 v" \$ @1 k<pre><code class="language-javascript">&gt; const pi = 3.14
, q' Y+ z9 O8 L- g9 b&gt; pi
" w) D$ O- P9 _6 K3.14) p4 t5 t4 E  i# e2 J
&gt;  pi = 3.014 B9 m# w$ b! c! Q0 @& p, K
Uncaught TypeError: Assignment to constant variable.0 P& f" G- W, w5 j5 o
    at &lt;anonymous&gt;:1:4
/ I" G- O$ V( O9 v) k2 n, y3 J+ e: x: i2 K; o) J7 l1 W
</code></pre>
  T4 W, y8 i9 A, n% t<h3 id="23-基本数据类型">2.3 基本数据类型</h3>3 q: O7 }. r! ~% _" Q
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>3 t/ q/ T& i3 h( P3 y* Z8 M
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>7 N/ M. |* C8 z* J
<h4 id="231-number类型">2.3.1 Number类型</h4>
( c! p' `) C4 I/ N' w7 I' k<pre><code class="language-javascript">&gt; var a = 5- d# l6 P0 ?3 T, [& j' X3 [
&gt; typeof a   //查看变量的类型  - A0 a' G" B9 Q; N, P2 U3 x% T
number* f# j" w7 ^; m/ h2 a

- R/ @. A8 A  O6 T&gt; var b = 1.3
. ^& X" \4 G. Y' @5 |&gt; typeof b
8 K% d& h! T. p7 b; l2 [number8 k% ~  q2 t5 i5 _3 s6 G

3 i4 Z; I/ G3 J1 n% l. n% f// 不管整型还是浮点型打开出来的结果都是number类型) w/ p# e$ w+ c1 W8 {! {8 D
. I4 q6 w# A- K% W: _" H
/*
! i. d0 J- n6 h  I% M  Q4 GNaN:Not A Number( h. e; c& f0 {- J5 p
NaN属于数值类型 表示的意思是 不是一个数字
/ U4 f  x0 ?5 M*/
5 X3 B; A# P# E% P# k# Z! x! ?" U5 i! q% C8 m: V' ]% c
parseInt('2345')  // 转整型
; u  d/ u( d! k1 t/ B2345; V8 o9 ?$ j- {: R" a& @7 T
parseInt('2345.5')- E/ Y8 z4 F" T$ O3 _
2345
3 Z4 @0 p5 X& y; oparseFloat('2345.5') // 转浮点型& U/ `8 V  b1 y% v$ H7 F! z8 Z
2345.5/ d) d, t. O/ h7 o6 q& x: X! H
parseFloat('ABC')
# E" O# D) H5 [9 Q# l9 \NaN9 W& C' g" x7 m+ Q
parseInt('abc')
5 @( f* X7 V8 QNaN: z1 y# {8 x* |
</code></pre>, x/ Z1 t. @- _" e/ Q8 X/ g: O, m* l
<h4 id="232-string类型">2.3.2 String类型</h4>( d* C) N) J0 }. }+ u0 u, A0 P
<pre><code class="language-javascript">&gt; var name = 'Hans'
% d1 B4 _6 B9 N, Z# L&gt; typeof name/ ^3 E$ F. ~- z. q: p  c1 ~" o' ~% ~
'string'
2 ]8 i1 Y  o7 D  I( T9 w$ s# H. `& X5 q: p6 w
//常用方法
& V+ A; N: U: c+ C// 变量值长度2 ^' ]) ?* O3 [5 O2 U7 F/ h
&gt; name.length
. O: ]. t/ S8 d- {# \  L4' \3 P( `+ R! \& F+ h! A8 K
// trim() 移除空白0 x9 o. I/ S: K, @2 Q
&gt; var a = '    ABC    '
, m- Q7 m/ X$ A  p; d&gt; a
' J4 m1 t0 I/ T$ A3 r0 O0 `'    ABC    '
4 ~: D' G+ K; M% {& R, l) Z  p8 O&gt; a.trim()
2 f: f; ]1 W; k7 T, `8 n'ABC'+ ]$ N; N6 g0 e! T
//移除左边的空白
; O( m, A9 V; s% Q2 i9 r$ q, X' I&gt; a.trimLeft()
3 U6 T+ j% h7 o. d1 W( Y1 I; w'ABC    '3 q- g; ]2 f2 l1 j2 G+ F' s. b
//移除右边的空白. ?8 F. c$ A" C8 \5 x
&gt; a.trimRight(); m* P- m) C) b- R
'    ABC'
/ g- B+ O/ X( N/ `& C9 _( Y- E
, [# m, p# N7 X5 v( @- W/ O//返回第n个字符,从0开始) e7 T! `8 o5 o" t
&gt; name
/ k# V# F$ W7 Z4 [1 s) j0 y- i'Hans'+ U; R. U; I: z
&gt; name.charAt(3)  P& R8 o- B( y  X. _* ]% s
's'% V1 m/ W0 T' R) H) i/ \
&gt; name.charAt()
7 e5 p3 u4 ~' [! m( e1 a3 O5 e'H'
9 |* [9 n! e2 a. Z5 O% E2 Y&gt; name.charAt(1)
5 C3 z1 s3 [, b( s" E7 q* l. }, K) o'a'
+ Q0 K/ }! e3 l& m5 S# o
) M, n% G) }# d// 在javascript中推荐使用加号(+)拼接
- r, ]( X  t, j: l" u0 y: E2 D&gt; name" w+ b( U6 u8 @6 C: w
'Hans'
8 Z3 k; M3 s, @3 G$ L&gt; a. K, [4 A  y6 K- U
'    ABC    '
- E& Z0 j9 l6 c- q2 J&gt; name + a0 V1 Y' _' L% R2 G) p8 h
'Hans    ABC    '
! [, N4 i5 K* i* R) ~5 |* L// 使用concat拼接$ c! @+ ^- z3 ^& x' Q
&gt; name.concat(a)
1 O/ w1 `$ L: ~8 x1 E5 U5 ^$ X0 [" z4 {  ^'Hans    ABC    '  M. L' @' ]$ T- H5 X* T; N! \
+ @  L& F4 N  U& X) t3 V
//indexOf(substring, start)子序列位置( L# K1 L3 T  }/ C

  S% J  ]) f# s9 O1 z7 ^; [&gt; text5 W; h& {- S& R& }
'A young idler,\nan old beggar'' K8 Q! d, C+ V6 L( ^
&gt; text.indexOf('young',0)
8 X  d2 \! }* E( ~9 D23 O( z3 `! B0 j
3 J, \$ R# u( ~8 S+ m8 r
//.substring(from, to)        根据索引获取子序列
% S6 X" C6 Y/ P% N! M2 q1 p&gt; text.substring(0,)
8 b) \, v6 L2 q7 Y" o( h'A young idler,\nan old beggar'
" r/ U' @3 j" P- i8 P&gt; text.substring(0,10)
; v: e! H7 p8 }* D  O'A young id'. l9 w4 z/ k& c; m  s2 x) ?2 h; e
. C( W. I& n; o* u
// .slice(start, end)        切片, 从0开始顾头不顾尾) t: l% V+ d$ M, l
&gt; name.slice(0,3)
  U, L* u% i. }% f, x4 K! b+ J/ h'Han'7 ]6 [* y! S7 ?4 c
6 X' D7 G; U% |/ P
// 转小写
9 L" ~* k; q+ G( n6 I" c( F  Z% R&gt; name
" e% I4 z* a+ r4 r% u/ q'Hans'
/ ?- v- q, j3 y9 Y" \' N9 V&gt; name.toLowerCase()
  w/ K2 ^/ T- {5 D6 X* ?6 q'hans'1 V+ C* o, C2 S/ u
// 转大写
3 ^' g  J7 u, l" x2 L7 G9 W6 s&gt; name.toUpperCase()1 w3 p# P0 u" |" L7 S3 C
'HANS'
' i% h* X; c8 v- Q% i
7 H- R/ I) M5 B9 C' K1 ]" x! [2 f// 分隔
1 j  j1 l8 a/ _" v0 E  m&gt; name: K( f- c, N( t6 S5 b) B1 u9 d
'Hans'" e" v/ _- x+ B. h2 q  m1 q
&gt; name.split('a')( m$ T$ I5 w- i; ^8 u
(2)&nbsp;['H', 'ns']
' y, T' y& V- H  V</code></pre>
, P% c* j% g2 V<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
6 G4 p. q8 V( j- u) A<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
( Z2 {- e/ }9 u  E  W4 W- E4 ]<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>2 J' z/ t& `. z$ i: O$ [
<p><strong>null和undefined</strong></p>
3 H3 s2 e) I: B; j<ul>
" A) q8 w' A" U* G4 }! J6 H<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
6 C3 O+ p% S8 R; g1 Q7 ]* v9 ]<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
4 y) p- x( b# x# }</ul>
& ]- a/ q3 f! j! Y" D" I  H<h4 id="234-array数组">2.3.4 Array数组</h4>& ^$ L- c6 G+ E7 K( X, R$ c  Y
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
) T6 ^$ S! x( M<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
  B5 F4 \# v  x' T&gt; array1
# {8 t# h2 t" |. y/ g(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. l. x  S' K  s% w" J&gt; console.log(array1[2])  //console.log打印类似python中的print
7 m2 \% h/ ~; C) M0 [$ T3
$ }- C1 u! a: Z( p% t4 ?9 b// length元素个数, E4 v6 F. S2 D% L& H2 H9 e
&gt; array1.length) a* a2 R* h0 _" M+ P* Z$ \$ b' u, g
6& ^" w; L! w6 Q6 q6 v+ c7 Q5 C
// 在尾部增加元素,类型append2 s/ w- p# V% A1 b+ s9 J
&gt; array1.push('D')
; H% N" e  s$ \8 a9 f3 H% P78 }9 T# z, r# J3 [* V6 |
&gt; array1
. E+ _  o& x: S) e/ S  _+ [(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
" u  f$ ~2 a% l// 在头部增加元素
5 R* L1 i+ h. _  d, V&gt; array1.unshift(0)& C* U5 @1 Q% }! W( m
8
, H) D/ u5 D( S( Y' I9 [&gt; array1- |- n* }. X7 C+ _3 t% ]
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
7 @7 n6 r1 Y& ]  J, S! e9 |( ^9 I
% u6 k6 ]/ T/ b- O4 y//取最后一个元素
2 |6 b: z) R* R; b7 [8 x0 {5 t! q) n&gt; array1.pop()3 C% N1 v  y" r% d7 A, O2 P+ h
'D'
6 m/ e; a! A, Z; y) W( {) [  U0 z&gt; array1: q3 [* ^/ w9 ?+ z7 y
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']  n5 i1 f) H- _/ q; K, V; `5 Q
//取头部元素
$ i$ u* l, K) P% v) I/ V" H&gt; array1.shift()
' X9 r8 l0 E2 l  B* a* y- k' r! \0
2 h$ d: r: s8 r+ q$ C( m&gt; array1# A& K( R# h& i# X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']) N% e6 W9 K( ]6 v
& n4 e3 u6 l4 n- o" `- R4 T( Z% ^
//切片, 从0开始顾头不顾尾" l# M9 L) a$ G  B4 Y) B
&gt; array1.slice(3,6)
/ P$ |7 Y: d* i) y6 Z1 v+ F(3)&nbsp;['a', 'b', 'c']
9 J- ]8 U- A' K0 t6 v/ U! O& g+ `' K0 X// 反转
7 j4 p3 A% G+ a) ^&gt; array1.reverse(): d1 r$ I3 r2 Z4 h7 q8 I$ }
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]; ^9 I$ r' t- M# j  v
// 将数组元素连接成字符串
: w+ c. g7 t, |' o$ L5 a! {! Q&gt; array1.join() // 什么不都写默认使用逗号分隔% w8 |; @7 q1 L/ U
'c,b,a,3,2,1'
6 T' \) y- M7 M% S9 J&gt; array1.join('')
3 j- r+ o' g  y'cba321'& H; O/ @+ _7 M5 _( `' f$ \! |
&gt; array1.join('|')  o: \2 w5 b/ H$ s5 W0 d' _0 W
'c|b|a|3|2|1'
. h; s3 k) b  i% k) A8 |. _) V  s; e& z
// 连接数组
  c: R$ e# u0 q' R: X( a5 f0 B&gt; var array2 = ['A','B','C']
- n2 z" t3 G* y0 ?" P&gt; array1.concat(array2)
' L. W5 j$ f7 N. s) q(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
; h7 `. D( M8 F: f# d5 P
' T0 m" k( m3 u' F% J- n( X2 k// 排序
1 X% M& Z0 }1 \2 g  W+ z/ g&gt; array1.sort()
0 u+ X, L" g% _" }(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ b0 j! @' g/ G; h3 L4 e
( Z; Q' n& O: K9 J! \$ ?5 k+ S
// 删除元素,并可以向数据组中添加新元素(可选)
* r& s0 n$ a" \. \$ @&gt; array1.splice(3,3)  // 删除元素- B( F& D3 J" k9 a9 ~
(3)&nbsp;['a', 'b', 'c']
+ x" j; c- K" B4 E% e&gt; array17 m( {9 {6 ~+ S
(3)&nbsp;[1, 2, 3], U2 N' i( g/ x1 j8 g
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
+ g2 O2 m/ V) W[]. ]+ S$ B, o# P# }3 s# C7 Z
&gt; array14 J# ]8 G0 s0 R- e) }
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* h+ a- J! [( D$ _5 ^0 g; W! `' X) f

& m  B3 n5 Y% w/ B6 }* t/*; \( T. g6 P% o/ Y5 ~4 `
splice(index,howmany,item1,.....,itemX)
  ~- m, Z( `. q' aindex:必需,必须是数字。规定从何处添加/删除元素。
0 ^' \8 h) T" o5 j- T( }) jhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。8 G& D- l! e* c2 u
item1, ..., itemX        可选。要添加到数组的新元素
3 W. l7 C& ?: D*/
! Y6 K! z. f$ n: ^' E$ U; V; |0 _7 g: q( A% m
// forEach()        将数组的每个元素传递给回调函数
! Q' }# W, Z1 `; Q&gt; array1.forEach(function test(n){console.log(n)})/ |9 V. c4 {9 w" [
13 Q" w% m1 Y0 Y
29 q6 P9 B- U# ~) j/ @& F' a! f
3
9 _" H: F+ s$ Q: y, b' x+ e A
' ~5 ]8 R3 [5 Q# I1 j B- D* M* h9 S0 q. e! h/ H
C
# X& B/ v3 Y( [: J2 D) e, E// 返回一个数组元素调用函数处理后的值的新数组
$ ~$ {+ O  _5 _9 O5 h4 O0 `4 f&gt; array1.map(function(value){return value +1})
7 D2 V' P- v7 s2 f' B2 C(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
# D) H. X0 _9 t</code></pre>
+ h! `7 b8 r# y, |8 Y, d" E8 J8 G<h3 id="24-运算符">2.4 运算符</h3>
+ D- k9 w0 A  E<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
6 s( o6 x8 t% I( l. n  e, A<p><code>+ - * / % ++ --</code></p>
) P. y) U4 D1 K$ {6 ~<pre><code class="language-javascript">&gt; var a = 6
7 ?% }2 O- G% [&gt; var b = 31 |' E, M  w/ Q; m6 I% B
// 加0 D( ]. m9 Z& E1 ~/ z* Y. a
&gt; a + b
5 b2 {' {7 R- j, J9
# }4 w, A: j% C6 S/ P6 a// 减
" W3 O2 r7 g: b+ L0 a) v&gt; a - b
  e% g- W2 U& _9 ]* a; W3
, j8 V  d! l2 s$ a: o: e// 乘8 b# j: J- n" D0 \  s" o7 C3 a
&gt; a * b% V. @4 s. G6 g# K' X
18
0 O- T! ?1 x& @/ s// 除
4 w# G# S$ U: T7 l4 Y% H4 E&gt; a / b
/ X$ g% o) E' I4 U2
! h% f+ H0 f6 c9 @' y* e& _! ~// 取模(取余)( q7 G. T; g1 k# b
&gt; a % b6 F5 B: }  d; b" C' S) ?5 c
0( ?: R" Z% o. q3 _0 @+ b7 A" m
// 自增1(先赋值再增1)# R7 B6 v- u1 W- I+ t9 W
&gt; a++4 Q/ D* y' M( C
6
& ^3 z' k* {% H; F$ E2 @- W&gt; a* `' R% Z( `6 \: l
7' ?4 ?5 k8 \$ o$ Q$ a' Z
// 自减1(先赋值再减1)  `/ T# F: o3 y; I5 H, A
&gt; a--
% P+ b1 [5 L; r. `( q6 w7; i, Y! |; x" {
&gt; a
  M1 M  B" V. k& V6: Y$ F2 o3 h. H, y& W/ X% u! o3 j" {
// 自增1(先增1再赋值)
& J4 g0 G) h; u0 {% j&gt; ++a
* Z. w1 R# o: U$ {) s* Y' a' q3 r7
2 e1 J2 L# X8 T// 自减1(先减1再赋值)/ K: ^6 {( Q  i
&gt; --a; W5 `) E$ o% V
6
, e5 t( `) _. J8 \, U2 c4 Q1 Q8 |6 M&gt; a. t8 [& Y& h; ~4 d
6* \  L& j0 w* l0 c! d! O% M

( s/ J# N1 j6 _6 R* w9 ?% U//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理& e; k& j, E/ p2 o
</code></pre>
$ B3 V5 S& v; l/ b, n<h4 id="242-比较运算符">2.4.2 比较运算符</h4># @: Z. ~3 M: ^; m; Y; g0 \" |& F
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
1 A# z7 e- D  L* K* X+ `. \<pre><code class="language-javascript">// 大于
  Y4 R1 p" g) b: _5 x' V8 G8 e# P&gt; a &gt; b
9 |6 c) \3 k+ ]+ V2 d: x# Jtrue+ L1 @. p% \: G: V# R  w
// 大于等于: I/ e# V# k( P4 `& R5 Z* \
&gt; a &gt;= b* r; w4 N, Y$ j; U0 G* _& P
true
$ y8 q8 o6 N: |% F// 小于
0 s  u1 @  I9 t) }&gt; a &lt; b
' E4 h" s4 e8 o' p1 |& g* bfalse5 s1 \# w  _3 u1 |/ A' U4 b! j( ^
// 小于等于  x; {9 K# x- J. R$ u
&gt; a &lt;= b
6 V, l% C" u2 J( g9 r4 Yfalse' `! Y6 E( ~# b9 f2 X: \$ t
// 弱不等于
1 ]( p" R# Z! h" |" v! d2 N6 m&gt; a != b+ t: }# X& j: A" X1 G- L
true7 \* W2 G! H* h# j
// 弱等于/ n5 Z5 \2 k5 {% {
&gt; 1 == '1'. {/ w0 W' h0 o, M. Z) U* J2 i
true- i4 T- A: }( a2 \; y8 ^
// 强等于& z7 m# }' N% j' i8 x$ O
&gt; 1 === '1'( s" d; L9 Y2 U2 f" K! j
false, i: g7 a% V9 `9 l6 _% N; q
// 强不等于
$ d+ H/ L" w9 g&gt; 1 !== '1'
; `# w& k6 r$ N) Xtrue5 r8 e: I& q8 P: D) w. A

6 K2 h4 M: x4 _! C5 T9 Z& h/*
* E* y+ i! t% B9 Z( XJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
' d( @2 M: F3 A; e- w+ E*/
! t( O* Y! u* }/ K/ J6 W: m</code></pre>
* ]0 D9 u) A% V<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>! n3 ^2 _: ^+ Q
<p><code>&amp;&amp; || !</code></p>) \4 q. G4 r/ L5 K
<pre><code class="language-javascript">&amp;&amp; 与2 O+ O8 H* H1 B, h( w- C
|| or
+ q( N# i& [2 |2 V, M5 E! 非
+ r1 R  E2 @9 C5 r* t+ k& k8 v</code></pre>! u) K+ R* i6 _; ~& _: q' M% K; s
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
% Q. P0 W7 a3 y$ |4 d<p><code>= += -= *= /=</code></p>
/ t1 y" C! f4 H5 U<pre><code class="language-javascript">// 赋值% A/ F3 O; `) p0 k- @( o
&gt; var x = 3+ }* |$ x* r  J8 p9 u
// 加等于" q+ H# \+ C0 W) L1 _
&gt; x += 2$ f$ F. P/ j& l! l9 a1 V
5! F  Y' ^* U! M
// 减等于8 Q5 r8 Q. w6 X& E! a, p
&gt; x -= 1+ p! Y% R) p% W6 l6 W9 Z
4# t" D* M* ~0 E6 Y6 s, Z/ _
// 乘等于
9 K- F+ Z. h9 ]2 `5 I&gt; x *= 2
* d, ~7 |* [/ W, d8% N% L! }0 o# a5 T* i* M  f
// 除等于
$ u7 c' Z% S5 \8 h&gt; x /= 2
$ N% I  X. `' d4
! H# u- c% p7 J  y; T4 N5 O6 [</code></pre>
/ B$ g0 W% u* Z, y  b4 G+ O<h3 id="25-流程控制">2.5 流程控制</h3>* a+ |( p) w- ~- I% P
<h4 id="251-if">2.5.1 if</h4>5 O5 r  x' F/ @9 R+ |
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
1 x$ N/ `' e- |8 M1 S
5 h; ^3 P# f( d2 Q&gt; var x = 37 s4 X- q" {! k" N
&gt; if (x &gt; 2){console.log("OK")}
0 S) l7 @" |, d1 W. }7 p8 M- C OK
: U& A: m, K& t9 o; m8 Q7 Q9 _0 U
5 I. h  G3 p/ q2, if(条件){条件成立执行代码} 9 Y" |. O4 t" `, u" ?# p
        else{条件不成立执行代码}/ Q- o- ^+ [, ^6 H9 S& E$ g

: p: b) O3 V* M3 Q1 d&gt; if (x &gt; 4){console.log("OK")}else{"NO"}( O4 S; m; t$ w3 {
'NO'4 H# l& j: Q4 r2 r; H

) Q' m6 S- I) |$ q2 g4 J3, if(条件1){条件1成立执行代码}   B  }* d" x1 [* o" M: f' q( A+ _+ R8 `
        else if(条件2){条件2成立执行代码}
* V  K7 P. ^' R" }! L; Z6 K! v    else{上面条件都不成立执行代码}
0 x3 I% ?9 F* L5 ^2 r1 ]' X9 T+ L( u6 i
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}. G2 i0 j: R- z* W( r( [
Ha
+ s1 y' p/ e" k! p</code></pre>
! a: X( `. y+ w( n<h4 id="252-switch">2.5.2 switch</h4>
& S& q9 v$ q) }0 w<pre><code class="language-javascript">var day = new Date().getDay();
% m! b0 `9 `9 \2 }8 L1 c$ kswitch (day) {2 K/ G( k! b* T* h% ~9 g
  case 0:
4 y, x8 k8 l3 F+ H  console.log("Sunday");
+ O  e: K. n) x/ {- v  break;. o; T' r; j% q% a2 d9 _
  case 1:; x. w2 |( S. t
  console.log("Monday");
" i4 N3 w! {: h3 ^* x  break;
+ s0 p8 a% ^1 L' T6 Z' Rdefault:2 V0 V/ G) M/ o, v3 _) s2 s% `
  console.log("不在范围")
" k; y' w0 ~& N}
' k2 Q0 m& E# b2 W* b4 ~ 不在范围
/ A1 |2 i6 b6 ~+ a5 p; ~# I5 w0 P</code></pre>5 G6 Z, K2 Z3 }; K6 J
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
& F, h; L3 n$ c7 _; }7 r: c) v* r$ y<h4 id="253-for">2.5.3 for</h4>
; r0 `! W  Y8 A4 a# m, }4 L7 y<pre><code class="language-python">// for 循环
' u/ q# g% c2 J3 J- W        for(起始值;循环条件;每次循环后执行的操作){
5 @- R0 f" u1 @1 C' H( M        for循环体代码' X# @* t( j4 o) l6 X) v* w+ Z
    }
4 W' F: P! d* q4 |/ a# ^5 D8 K
' D4 C* V2 z6 V8 Q7 Qfor (var i = 0; i&lt;10; i++){
+ J* o2 U! f# F  D" A    console.log(i)
9 x3 Q$ [$ ~0 u: [" Q}
- x4 P4 n  r- u, Z1 S- X: H. j$ g        0
8 e# @) |2 }# b+ B  y% ^        13 U" n6 s1 C+ I2 Q8 Y/ P
        26 U3 w3 t$ }. `
        3& r; l2 J% x* P) ~& U" B' N: y
        49 ^! M" K  M: z
        5
" ]* B: k+ c" n+ n( |8 u        6
1 m5 S3 J; F- N% l2 m9 M" l        7
7 r% h$ G1 q' Q4 D8 Z% ?        82 z1 a# Q0 g5 Y' l' T( p! M4 P8 D
        9
6 \) Z5 W' g, `9 J6 r</code></pre>. n1 `1 b8 m' I0 q9 B1 p3 k
<h4 id="254-while">2.5.4 while</h4>
7 ^0 u6 _; v% J<pre><code class="language-javascript">// while 循环
4 g8 \5 s. f- H9 w& r6 {        while(循环条件){& Y' Y$ w: G2 @6 S; f# D
        循环体代码
& }) z5 V3 Y/ ?$ j# d    }
* w  p4 z9 ]* r% J. w
/ {4 i0 e+ D- L% L&gt; var i = 0
$ }7 `7 i% C& n/ N  P7 X&gt; while(i&lt;10){
' T# G% c& \% g* N) H  V/ y    console.log(i)
, l+ x8 ^9 ?! i0 e) E+ ]  O# K" c' g    i++; u5 T! N1 u8 L4 i2 X& c% G5 _4 s
}9 P3 x: v' @- O6 R) V
06 b9 n1 w& d$ y* k5 L: ~
1
- Z! O  a% X1 J7 p) y: \ 2
8 F. [0 Y( C  J: V 36 G- A+ |" f9 l+ ^: {, n
4+ t& d1 A; L6 C2 Q6 s2 V% O
5$ T7 k6 \. ?& ?. }
64 M4 b% x) ]8 r- R0 ]
7" U& M' s9 B$ B9 e
8( E3 j; }( v1 w
9
# m2 H1 ?! R0 ?+ p5 k7 D7 h</code></pre>
) ]/ ]- @( p3 M4 M; p<h4 id="255-break和continue">2.5.5 break和continue</h4>! n- j& N5 v! ^) r
<pre><code class="language-javascript">// break. I* x$ c8 \" h; q' A' w# [0 h
for (var i = 0; i&lt;10; i++){1 ]1 \& j( g9 _" Q: ?+ \* P$ j
    if (i == 5){break}
: g4 [8 P" W; ?7 F; N$ T    console.log(i)
: J$ C" k/ |4 d# c- f* D}2 K0 y8 Y2 @$ b! N6 G0 D! ?5 p
0- r, ~8 Q: D* V. F  S
1
# p. s7 I6 @* m) G, {5 f. a 2
. l' e8 I/ D  Z$ i 3
. n2 v' ?9 q* k: W- j+ A 4
7 E  h2 L$ [& g6 Y// continue6 o' M1 X( m( m4 k
for (var i = 0; i&lt;10; i++){
: P, [+ s& D; ?/ @6 l" C7 W    if (i == 5){continue}
, h# Z% C6 m: ^- z    console.log(i)
* n2 f/ K# G4 r) z/ _( I/ G}0 R1 j! U  G2 W' a
0& A; c1 O  x% E5 [* F  J  q
1
( f; }, `. |2 R" V& ~- | 2
: A1 t( ]$ A( P 37 c7 X3 N3 w/ W3 I; R2 C
4- a: Y# O. o3 o; n
6% j5 B! J2 @8 K% w* c% \+ [, t
7
" d/ J& b4 I. g, }4 H' _/ a 8: J8 [" H# V6 P) G* v- D) ^
9& X8 a1 c+ Z$ C# a) Z- C$ T! }
/ A5 A8 Z. ^% S. g. C/ l
</code></pre>  r- r" w" L! ?% o' A1 [
<h3 id="26-三元运算">2.6 三元运算</h3>
2 }+ T3 k# K0 Z$ c$ ?<pre><code class="language-javascript">&gt; a
; M7 A* O3 W' k4 E4 g6
6 b' U3 r( s+ V  w&gt; b1 C9 C6 j, Y- B4 [
3
( p+ d+ M" j3 V& ^  H0 Y2 R6 J9 q; \  e; \6 R
//条件成立c为a的值,不成立c为b的值1 J: e: I8 M9 @# O
&gt; var c = a &gt; b ? a : b
0 ]7 n, E9 q8 w+ w& C&gt; c) F7 C* ?5 r: W# Z7 l. ^7 ?9 i4 U4 l/ F
6) q# @$ b7 d% u* p
  ~& n: m, C' K5 l  V
// 三元运算可以嵌套" u( B+ t/ M! m0 G& m2 c
</code></pre>. Y4 D8 F% d. Z' X( u) l1 v
<h3 id="27-函数">2.7 函数</h3>
! |# K$ W) D# E7 X<pre><code class="language-javascript">1. 普通函数
! e3 V- ]8 h6 A  H# G2 Y6 u0 ]1 K&gt; function foo1(){
! I% f) D. `7 _% @    console.log("Hi")' m$ X! X- L* p4 R6 z7 Z' a
}
, k6 Q% S* }& v( S5 B  ^( o* c5 L5 d' I  y8 G
&gt; foo1()
- p/ ]% S8 q; g. K5 r" u0 A        Hi3 d! G% b* ~) {/ q1 N5 \
2. 带参数函数9 J' \# u& \0 [/ {$ L9 m
&gt; function foo1(name){2 G2 W2 {7 j7 B6 U/ S
console.log("Hi",name)
9 `% ]! p  A5 T1 {" J0 L* x! U}4 C. A- y# V) F8 A* f. S7 f
. N5 m- e4 d5 A
&gt; foo1("Hans")  [3 e8 p, R! J$ B* J
Hi Hans: x  u8 f' b9 T: p2 }; x

5 l; E& W1 l  d% w4 `&gt; var name = "Hello"
# s4 b  @1 X, x$ x- q$ j&gt; foo1(name). {; z! Q) e/ a2 @9 \& v
Hi Hello  x4 J* G$ y) @; V6 S. C

7 j4 m; u8 `5 u4 M- P9 `3. 带返回值函数
9 ?/ V$ o$ q: J9 ~( [' C: r&gt; function foo1(a,b){
, a: n( P/ L" j' ^        return a + b   
6 E0 |7 n2 o5 F}4 U# G. b+ r; f$ f
&gt; foo1(1,2)0 g  t. I6 @) m% s- n7 a- ?
3
( Z$ q/ L/ `6 [% h0 a7 _' b: p&gt; var a = foo1(10,20)  //接受函数返回值8 ]9 `7 Q) T6 l% p
&gt; a
% n( I' b, s/ m* V, g& `- \5 t309 o6 @6 J; h1 E2 z
* u9 Z0 ~0 _! n) F/ Z& Y
4. 匿名函数6 g* Y" m5 I/ I5 u$ [3 }. U
&gt; var sum = function(a, b){$ m! h- y9 y2 N9 F2 e* e
  return a + b;; f) X. v4 E8 W6 A% f' ~
}- W3 e- ]7 v" i& n+ k
&gt; sum(1,2)  t' W- I7 B; N( y4 J2 \9 X' S
3: k2 O" a' K: f. I- ~

& g; o+ B8 L9 F; a% |* m3 |4 V// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
$ e% y+ N- u3 J3 `8 g&gt; (function(a, b){2 s& I; L- z8 Y. l
  return a + b
- e6 f  o' P, H% J. Y7 c% T7 v})(10, 20)4 R' y/ ^3 J$ b2 ~& {& e
30
. s' O) O  }  t; W' X* N+ [
+ @' Z4 P2 Y% u: ]2 D( }/ Y7 x. U5. 闭包函数4 m4 b6 |  b6 T+ [, S% U
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
& v0 Z' Z1 ]- u* g  }var city = "BJ"
8 N, e1 v2 ^% y. J/ Jfunction f(){4 ^! X( s) m  s  ?7 Z' u
    var city = "SH"* `+ j  @) G. m1 x& ]. H
    function inner(){
1 n9 _2 F, f/ K0 o7 y        console.log(city)
, p1 W$ H2 @) I9 h8 v- e" r( y    }7 i" c$ z& j$ E" L* h
    return inner3 ]2 v3 Y+ J' t3 T% w
}
$ e) h2 n! v# j, b' p% ^8 Mvar ret = f()
" x$ n. L, o6 K  S/ v/ lret()9 s" s. j! K: H4 R
执行结果:% U0 G/ F) n4 s5 i& w0 |
SH
- t# U9 H( @: Q0 d. P! c/ p
  p; U( ^+ R% y/ e/ j</code></pre>" Y2 _8 r3 }8 Y
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
3 Q  j# s% o' Z$ k<pre><code class="language-javascript">var f = v =&gt; v;! h: H; U0 ]; o& ~4 y
// 等同于
# Q7 E1 h8 G- p( ?" H! \: W7 `var f = function(v){# a2 o4 E+ h6 W9 q( M( K+ T- a
  return v;  X0 ]- [- j& z3 e2 M
}
& O1 \' C$ a) C8 [' x</code></pre>8 x4 t. u" f  j& S
<p><code>arguments</code>参数 可以获取传入的所有数据</p>" D0 l( y5 f6 y7 p8 F7 N
<pre><code class="language-javascript">function foo1(a,b){9 U4 s  y* H9 T2 B' Z1 Q6 f
    console.log(arguments.length)  //参数的个数
+ O: Q' w* X* V) p7 x  ^6 U$ K' L  e    console.log(arguments[0]) // 第一个参数的值
: A; ^8 o2 Z) b' s. ~        return a + b   
; [; O4 w9 ^2 P+ G  P}
2 W6 |: P! K  B) W) k" dfoo1(10,20)
% H) s9 M. k- r9 E+ U结果:
+ B9 @8 v, c+ Z- U 2          //参数的个数 " J" R! h( m, b/ v
10        // 第一个参数的值
! h, p5 w5 ?; S; u9 N30        // 返回相加的结果8 n1 U% _8 r0 o0 v' |
</code></pre>7 _& q; l2 G0 h" d
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
- {6 d* Q+ i4 D. Q<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>: V% i+ x* ~* O% E3 [
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
  M- k) r( {0 p" E! z. i0 j* R<h4 id="281-date对象">2.8.1 Date对象</h4>
+ }* D- q3 X8 e9 t& c) R1 s# Z<pre><code class="language-javascript">&gt; var data_test = new Date()
2 t9 g, F+ _0 P$ z0 N&gt; data_test. m0 Y3 A' z7 `- }  ]
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
0 e5 A5 W# @; i( a. [$ o( x&gt; data_test.toLocaleString()  _$ y4 _3 N  M) A: {! R
'2022/2/11 下午9:44:43'; P/ P, n1 {2 V" ^+ y4 f4 q; Z4 T

: I( \: J6 R6 K4 t&gt; data_test.toLocaleDateString()
* s* s$ a- C: N9 s! g'2022/2/11'# J: C5 X7 q; L

. d$ `  I! D+ Z" @  d&gt; var data_test2  = new Date("2022/2/11 9:44:43")
: [  l) y' l2 Z: Y: n&gt; data_test2.toLocaleString()
* |4 d/ K, r% _2 d! v'2022/2/11 上午9:44:43'! i/ o0 U" X1 ^8 ]) O* f

# f& `2 Q. s4 Q, h8 [// 获取当前几号; X4 k0 w5 X& N# W/ x" j
&gt; data_test.getDate()- E; M4 a: i, r' K/ n
113 ^) ^  f0 M5 l3 g
// 获取星期几,数字表示, h( m3 u# T% P- w: U
&gt; data_test.getDay()  . x2 H) U" `9 @) e# F
5
9 [4 ~' j0 Q+ J! p  T$ d1 d8 i// 获取月份(0-11): ~, \0 N: ^) P2 e
&gt; data_test.getMonth()
8 P& S; Q9 R" M. e2 O$ {1
: G1 u* ?# Q) W/ d0 u) o$ g) ]& t// 获取完整年份
' R# W$ f% e5 M  J+ c&gt; data_test.getFullYear()
  Z' [' v! Z. W/ n20222 [0 n  d" G$ B' B3 U, b1 p. E
// 获取时& P2 E* h, ]  Z" _: ?6 |  r
&gt; data_test.getHours()
0 G* r0 U& f& A8 z5 x9 K- Q0 A21
! C( v& v$ I' A0 D// 获取分- \  F% x: {6 i# n' w  b6 k
&gt; data_test.getMinutes()) }8 O3 \/ j. j  Q% u# Y
44! E9 k) P. @) @9 D) f1 |, {& X
// 获取秒& E2 {& D/ |1 _1 G% W) v
&gt; data_test.getSeconds()
9 a2 x! C, {# A. H43
& d( R' V2 c" u/ ^9 V0 d  Y0 y// 获取毫秒% t* \+ R" l1 Y$ P* w/ u
&gt; data_test.getMilliseconds()6 e8 X" q' s9 Z$ P
290. t% e( K! i! l# v
// 获取时间戳- M7 M. B$ x  d
&gt; data_test.getTime()
/ f; L/ V7 j  H8 f1644587083290# [5 g4 _0 D+ l5 P2 W% a
</code></pre>
  \# c! @6 a0 ~<h4 id="282-json对象">2.8.2 Json对象</h4>
4 B, H1 m: ~: N; ~4 f% M4 Y1 y<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
* h9 P6 X5 h# Q  {" b7 B( DJSON.parse()  // 反序列化,把JSON字符串转换成对象- N9 _  P4 \- E4 j: R
# D/ h" _/ f) [* e
// 序列化# [, ~  [; D' ^7 z' N# `
&gt; var jstojson = JSON.stringify(person) : A# Z3 O* e9 b/ W, q9 w$ g& V
&gt; jstojson  5 D0 e" N: e: u8 x* D
'{"Name":"Hans","Age":18}'
! Q; ^" j" E8 p; C
* s* A: Y  u' D  ?$ q// 反序列化  O+ x7 o- a8 L
&gt; var x = JSON.parse(jstojson)7 }! j* d" N7 O' i
&gt; x/ j. h! v1 F8 E& K# |
{Name: 'Hans', Age: 18}" R* ^$ p6 w$ H4 c
&gt; x.Age! |0 R- C* X- G) B
18
7 B+ L7 X5 @* C2 K</code></pre>' ~0 |! m: |+ k. Q1 d
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
- c1 \$ @5 V1 }- L" M  g6 Y  p<p>正则</p>
# S* }( V) Y  b<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
7 a% y  J' q( k$ o/ X. i) C; F&gt; reg1/ n2 j) e' \7 p, R! X
/^[a-zA-Z][a-zA-Z0-9]{4,7}/' Z6 H3 D' a# k
&gt; reg1.test("Hans666")& q3 A- O) a" @7 p# z+ ^) [
true
2 {5 ~/ p- e8 N: p5 v# h5 _; }. R7 r2 z0 s% \3 L1 k
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/5 J# b& d$ A! Q* h5 S
&gt; reg2! @9 [9 c9 G7 U4 i8 _* \- E
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
2 z3 e( K: V- T&gt; reg2.test('Hasdfa')" F+ B$ B6 G# O3 a/ P+ M) [% T
true
. W; ]# t! g/ y8 g5 L! w0 v
8 L" I4 d1 k1 a, e/ q( f全局匹配:. j4 P" _2 ]( K
&gt; name3 v+ z- p7 I. G+ ~
'Hello', C7 I9 g: G+ i5 C" R
&gt; name.match(/l/)# |  U4 ]  m' F  t! F
['l', index: 2, input: 'Hello', groups: undefined]# E8 ~& K1 A5 S( w

0 X* \" p" u" S* A: R; O+ }&gt; name.match(/l/g)0 b; m3 o: `2 d( j
(2)&nbsp;['l', 'l']
, z0 m' p* H9 C// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配& R. ~* L) B5 Z3 \
/ u! D' u- }2 r7 D, {% G8 L
全局匹配注意事项:
: m! U% w% t2 r&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g+ J  Q/ e2 `" g! R
&gt; reg2.test('Hasdfa'). n$ l( f  k; z0 [# H
true7 n" _; Q% D7 v3 L* m, o5 D
&gt;reg2.lastIndex;% I# L) n, N+ z  W& k
6
0 Q) r" L0 N1 V$ ?+ J( {&gt; reg2.test('Hasdfa')
  J9 a: s4 D) F- P+ jfalse
  t0 s8 L- p9 ^( l* t2 l7 D&gt; reg2.lastIndex;+ O, y  h; O) o- X4 S9 w
0
: T& [5 H2 v  V  k: C  V, ]$ G$ T  c: S&gt; reg2.test('Hasdfa')+ N' q$ O' C4 {) K  v5 A9 Q  s
true5 s! c  |% A) \+ V. M$ S
&gt; reg2.lastIndex;3 g' |6 B8 [& ^  a
6
* l1 x+ p/ `/ |  g3 X" r5 c&gt; reg2.test('Hasdfa')
) v3 @- o' N5 a, i3 S+ Bfalse7 P( m6 P1 _+ L7 f; V, `. E
&gt; reg2.lastIndex;+ i+ H0 i8 U# P# H
0: v' _; H7 R/ p- u& q& ^/ |% n$ E+ ?
// 全局匹配会有一个lastindex属性$ w$ U1 u3 |6 i, j/ |
&gt; reg2.test()3 z9 @! W1 F* h7 v! L! t% F, x
false
6 t0 d% @2 p: e$ x7 p9 H&gt; reg2.test()
9 t: U3 x! {, t1 N/ J: J( J5 m/ ?: K2 _true$ N& J, z' `" J
// 校验时不传参数默认传的是undefined5 p2 X( x. h! e
</code></pre>
, D' ?8 j7 i5 X* h8 @<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
! k9 u6 l3 ]  V" z2 ]<p>就相当于是<code>python</code>中的字典</p>
+ \' ~$ m- K2 J) j<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}$ Z5 X* S! r- w) E
&gt; person
7 f) ^1 x4 ]% r& f& `& ?5 v& _{Name: 'Hans', Age: 18}: n" F& H: F# d* ?: k# N
&gt; person.Name
+ L1 P1 Y- @9 l, ]1 b'Hans'
+ a% a4 A* f) L&gt; person["Name"]
. D8 k$ k/ y0 H9 n$ d. R'Hans'
" m# P5 e/ A  h* G4 E" n# _
2 U# _( M1 t$ d$ ~// 也可以使用new Object创建; _% X, \1 h! H
&gt; var person2 = new Object()3 ?, x% h6 P# u' Z- x
&gt; person2.name = "Hello"
) {: E8 i+ S3 M! V'Hello'
& ^& m4 a  b  n3 v&gt; person2.age = 20
6 p6 A0 E6 T" s/ [* ^; C! H" |20, B/ R- e( O( V# N  g5 h! N9 g" S
</code></pre>/ d2 ~" Q! B& M# ]) w3 ^; C
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>/ w/ m- }& u$ f% L/ t! x
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>5 R: N+ d* t$ q5 A. f" D2 Z
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>4 w0 E/ g/ v/ Q
<h3 id="31-window-对象">3.1 window 对象</h3>
$ u' o6 m: s1 n/ r8 a<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
; b$ o' `) H+ o7 z, v9 K<pre><code class="language-python">//览器窗口的内部高度; c% E( p( X0 y  W5 S+ ~0 x: P
window.innerHeight
9 D/ I. X+ E9 A0 `! V: M706$ Y3 R! T- ?3 ?& D6 H
//浏览器窗口的内部宽度+ f( q& }5 R1 ]9 F* i% _# }
window.innerWidth
) J- a" Z' B! ]$ W" ~1522- ^& E1 }& X( x- F9 N: ^5 T) y
// 打开新窗口
3 @2 d: a* n: g3 }' [' hwindow.open('https://www.baidu.com')0 X5 v" \6 v& k  ]( g! }- I
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
3 C8 Z1 s: K/ L9 q! c// 关闭当前窗口4 [# ~+ q5 g$ E' u9 u3 Y
window.close() " v8 k. }4 W% Y0 z- l! ^! J
//  后退一页
+ X$ |5 w8 ?5 q' hwindow.history.back()) ]2 _! J) {7 {6 {+ A1 ?
// 前进一页
  O8 P; e0 t$ u1 N# W* G- I7 zwindow.history.forward()
! }: O! P: ]7 _  Z: U//Web浏览器全称
3 S- R* N) a6 N; Dwindow.navigator.appName' b! K1 _1 u; E* \, R; M% Y
'Netscape'
% `) J9 D/ b, R& {( e6 ?// Web浏览器厂商和版本的详细字符串, X; Z: K! p# Z; u2 T. @
window.navigator.appVersion
: e1 A5 h% d$ C  A( x'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
7 j# r* N: m( g' Z// 客户端绝大部分信息3 e( n; b& w* g4 y
window.navigator.userAgent/ s/ R; K# t# }6 E8 a5 s1 \( ~" j
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
" J) O" h5 e! L. }, {// 浏览器运行所在的操作系统' H% {  d7 ?! X" @: {
window.navigator.platform8 l) k; s3 t1 k
'Win32'
+ W% S0 z7 }/ {+ v. l1 K
  ?& u, J  b7 l* f7 C* N( T5 p; B//  获取URL
1 E8 X$ i# F2 Z2 m9 j8 kwindow.location.href5 A, d; L5 u6 m& g( T
// 跳转到指定页面& ^7 Q' V; I: Q4 a
window.location.href='https://www.baidu.com'* q% g" }/ f8 g2 C9 H/ j* H' c+ |
// 重新加载页面
$ q; e1 u# ?& L! e/ Qwindow.location.reload() ; y- n$ O& R4 r- g
</code></pre>
& I. I4 w. Q7 u* U& P+ h& j" @<h3 id="32-弹出框">3.2 弹出框</h3>4 C( x" Z1 Q- f
<p>三种消息框:警告框、确认框、提示框。</p>
: h2 P/ A$ h' g+ _: p8 f- |<h4 id="321-警告框">3.2.1 警告框</h4>
% m" S3 q: @( ~5 ?<pre><code class="language-javascript">alert("Hello")0 g7 f( \7 ?# V3 k+ a+ m% _
</code></pre>
0 |2 j- \) V* X/ N<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>! V: K0 @+ x7 @2 e+ |2 Q9 V/ K5 @* M
<h4 id="322-确认框">3.2.2 确认框</h4>
4 l- @0 n* \0 a: N! x0 ^$ m/ j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>' h! A1 p8 s% C8 N8 ]
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true# |2 S0 U7 Y2 R
true  c4 Z+ T% ~. Z' x
&gt; confirm("你确定吗?")  // 点取消返回false; |5 x. `, l5 b5 v; V6 N5 S+ b8 j
false$ _4 \$ H( Z$ P7 ^
</code></pre>
4 U& O! Y+ Y2 m' o* i& n<h4 id="323-提示框">3.2.3 提示框</h4>4 r0 R- h7 n, O
<p><code>prompt("请输入","提示")</code></p>) ?4 _' s6 x3 ]
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>! {  ^! Z6 V0 C( l3 r8 `5 A: I
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>" B" p3 l- g. _
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
* }) N7 B* s' l! _' H4 w8 h8 S9 W<h3 id="33-计时相关">3.3 计时相关</h3>
6 c& _! R" i1 q/ o<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
. i$ q+ k& E$ q: {  I7 u8 P<pre><code class="language-javascript">// 等于3秒钟弹窗& J! }, d* _" {! ?  I
setTimeout(function(){alert("Hello")}, 3000)6 T$ a% g- L( b( O& }) i# W
6 f/ F* t2 E5 o
var t = setTimeout(function(){alert("Hello")}, 3000)/ k/ @' f9 G$ J  V6 V
0 I8 Q; a# t& p
// 取消setTimeout设置
* C. \; s8 U1 J  r. qclearTimeout(t)" I" b; Q% a$ e+ S- H& @/ ^+ j/ N- U/ V
</code></pre>. T$ W3 M. \- W; i3 v5 [
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
; j' i+ s4 v$ Z6 H) a5 \. p<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
: `1 _( P' f2 f, I<pre><code class="language-javascript">每三秒弹出 "hello" :6 u' }8 m8 a4 Z: }
setInterval(function(){alert("Hello")},3000);' r: Y3 k7 b8 Z
</code></pre>3 L/ k$ c) Y" d& O4 \" i
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" |, @1 N4 J  k7 p  ?( I
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
+ F. v- `( [6 J  r/ Q* [5 S: k+ Y5 C//取消:2 ^. f" W+ N* @
clearInterval(t)- O3 z1 E2 J8 d/ N
</code></pre>& e  d* c0 m+ q, p) a5 b8 J+ a

; r- B4 D! r& A3 C6 Z5 ^
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-7-4 09:08 , Processed in 0.070132 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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