飞雪团队

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

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

& w4 j1 ]0 I$ O3 V0 ?1 O<h1 id="前端之javascript">前端之JavaScript</h1>' J4 I* ~5 t4 m3 k
<p></p><p></p>
2 Y; ~. I# `; ^/ V. V) i<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
$ J/ y% D2 B- F6 K<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
2 m6 q: H3 z. P5 Y. d它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
- Z# D( b- a; j8 b0 [9 ?, Q3 {' F) o( |它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>9 z; ?1 o/ f% O7 y5 H1 n& I4 F" K
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>3 J- x- l2 s2 K" ?# A' `; Q' i2 H! C. P
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
) L1 t, c0 r5 v  {& R+ _3 B9 x8 q<h3 id="21-注释">2.1 注释</h3>7 Z0 K! B' h, S# H7 e
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
6 I, o# A, ]* `& p1 m( T! h<pre><code class="language-javascript">// 这是单行注释
) h4 W; m* q- k" G" ?# ]7 f# r  q; R% A- G, T  l( I* h
/*
5 B) ?' s' F: i$ R: K8 U( o- ~. I, X这是多行注释的第一行,
3 C6 m% y! q% o这是第二行。( t, |3 X+ Q) l3 q4 M2 t- H
*/
6 m+ r1 Q) r2 Y; R' J; P, t</code></pre>
* ~) G& e7 s; R: C& C' I<h3 id="22-变量和常量">2.2 变量和常量</h3>
. @0 W2 B2 c/ G2 R9 \<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
! X+ k# g: U9 q( j: w( g( E<ul>
) w6 o& J% y" e; g0 e<li>变量必须以字母开头</li>
8 ?1 s) @2 ~0 I% i% A<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>* N, E# r8 i2 F# b$ V2 |1 V% K
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
- y. Q  @: ^3 N+ e</ul>
4 m6 `8 E& I& G  O: J* H  ^/ [<p><code>var</code>定义的都为全局变量</p>
6 d- R/ v' E/ c- i# n; k6 X<p><code>let</code>可以声明局部变量</p>" n# r1 U6 i; _: L  [
<p><strong>声明变量:</strong></p>
3 G4 d$ n# _6 y  j$ W<pre><code class="language-javascript">// 定义单个变量
8 Q8 B8 H8 s# }. M/ W&gt; var name
. k5 Z5 o; T( G&gt; name = 'Hans'% S9 l3 c9 u1 I2 U. {5 s  r
//定义并赋值5 c# K+ |+ Y. [# n
&gt; var name = 'Hans'
1 S& g# E$ {9 ~3 {) X4 f' L- y&gt; name3 |) B4 \5 y( M. G8 P. U$ z
'Hans'7 ~0 \3 A3 D7 Z0 t, }

- Y4 q$ e$ \! b1 j// 定义多个变量. E5 `6 a1 C# X7 @" {
&gt; var name = "Hans", age = 18
5 Y$ M- A/ x2 R$ u$ B5 Y2 p' @* M- a&gt; name( w$ T3 n% M7 h: U$ f
'Hans'( L0 |* N  H; n- t9 x
&gt; age8 }. J) h6 `  j! T8 p' r
18
! K8 q. j' T, D1 U
& d7 O/ O; {* K' j. A" y//多行使用反引号`` 类型python中的三引号
: g: ]8 ?+ ?1 Q) q, l&gt; var text = `A young idler,
6 d. y2 A' Z3 h1 x% ean old beggar`
. t: A. s6 E$ d  _&gt; text" x7 o+ X' x& Q3 i1 _
'A young idler,\nan old beggar'
/ w6 c  \; k/ p+ Q8 I  H+ Q" G- ?7 Z7 l</code></pre>0 Q  m; o; s3 \9 `' l
<p><strong>声明常量:</strong></p>
  C/ _# G* d! K  T1 o! q<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
# g) D) I# t% I: f<pre><code class="language-javascript">&gt; const pi = 3.143 j" z6 F* [9 A3 C$ r
&gt; pi4 x/ W5 r, N  `4 M
3.14  z* y5 A! W, c" L  k: Q2 a+ T6 ]
&gt;  pi = 3.019 ~8 L) X" v: u. L7 \1 v  T
Uncaught TypeError: Assignment to constant variable.
. G! f/ u4 j, ?% @% j1 S    at &lt;anonymous&gt;:1:4* `# A& A) u( R4 a

) L- ~! g4 C# K1 U" x</code></pre>7 L) H+ U6 O! Q( f
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>1 W: D; \+ m$ T, r+ o
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
/ ?5 t5 ~( K8 `4 O! |9 D<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
; ?, [5 D6 B0 @8 h  C6 I" @<h4 id="231-number类型">2.3.1 Number类型</h4>
2 o& T0 N0 V# O' o; H7 U, S<pre><code class="language-javascript">&gt; var a = 5
' D9 ^& b, k8 x5 W) G, ?: o&gt; typeof a   //查看变量的类型  
. L/ i4 m; M5 t( W) Pnumber4 [) m4 R2 c2 V# S1 c; i
+ ^2 e+ v6 d7 t4 E+ n2 ]
&gt; var b = 1.33 Y1 ^# @+ L% h1 e# G- D
&gt; typeof b
4 r; P, |8 k4 L. Ynumber
  i( e+ D8 i3 q+ s! D" u+ M2 ~9 w6 F" v* s% O. d
// 不管整型还是浮点型打开出来的结果都是number类型* {- V& Y7 K4 v

. l. K+ l( \3 ]/ B6 e/*7 |7 ]& k+ ?. ?( g
NaN:Not A Number
! s9 W4 r2 R( Z4 rNaN属于数值类型 表示的意思是 不是一个数字% g  i1 L: [" c
*/
9 c' C( Q) R- X3 G9 w. P4 ]$ U6 p) x: Q' j
parseInt('2345')  // 转整型
- W# P. q6 q& l8 c3 K) z; ?2345
- ]* H! Q% U% z  j6 [# QparseInt('2345.5')6 H! {8 b, B8 O, t2 F
23454 h0 v4 o, v* I  [3 w
parseFloat('2345.5') // 转浮点型4 [4 t3 }: F( V, D3 n& _
2345.5
0 d0 s# `! `' M8 ZparseFloat('ABC')
/ P" q( [, ]) h9 i1 }NaN
3 j7 K# X$ q4 r4 A# sparseInt('abc')
: t! k: ?) F2 ~4 g9 c& cNaN
2 ^- I  h, H  B* W+ b5 h</code></pre>3 F3 T( l( l3 X4 L# d7 r
<h4 id="232-string类型">2.3.2 String类型</h4>
" E$ D' k, }$ A9 D<pre><code class="language-javascript">&gt; var name = 'Hans'! D) f$ h1 q8 U( e  ]
&gt; typeof name7 D5 t8 E; x6 K/ v, G# K
'string'0 ~% u. ~' p4 O% z3 E' \4 |; P/ T

! S2 B9 l. u' z  d# D//常用方法  i, k( O% z; k) A6 q8 X+ p
// 变量值长度& `1 ^( F* w8 P. I( R& u! ]3 l
&gt; name.length
7 w( x' T7 \7 l3 }' n0 s' j4
  J1 P3 k& }0 f3 M0 c+ v// trim() 移除空白
2 W# u7 k6 }2 G1 v&gt; var a = '    ABC    '1 |7 s, a7 w- |8 ~. `0 E* r! ?
&gt; a
4 }, N% q3 d; y$ H'    ABC    '" p) F) L' e# l8 ~
&gt; a.trim()
7 Z+ K2 ^! K5 F- n0 K  I'ABC'
! |4 h  h$ ?% M( ^//移除左边的空白
  q* r0 ~' ~9 d0 i/ ?&gt; a.trimLeft()# ?1 ^9 f, v# r( _; S
'ABC    '$ x; w0 H/ P* _% ]3 a
//移除右边的空白8 q9 N( Q  E) w& b
&gt; a.trimRight()7 }8 m1 W% a5 Z) k; L
'    ABC'6 @$ D7 r( w, p) X7 U. F
' T$ v0 o- e) ^7 q3 ~
//返回第n个字符,从0开始  n3 d8 j" l% X) i
&gt; name( y1 w- e" `4 z5 h+ P1 ]
'Hans'0 o' Q' g* _. S1 p
&gt; name.charAt(3)
% b0 K, N; C+ O& e- @'s'6 }! E" g% c1 x: ?
&gt; name.charAt()' C$ n1 L& F, M. E) Y! T2 f9 }
'H'/ r6 C5 z/ y8 H- D" J* y* b
&gt; name.charAt(1)3 h% Z7 o# I4 P# B/ O4 h. N
'a'
- ?' }. Z8 X3 H1 h0 \
1 g/ F3 r7 w1 t2 z% ]. }// 在javascript中推荐使用加号(+)拼接
' c9 c6 S4 b7 g  u&gt; name) h- N: H: S5 n  T# g
'Hans'; p: U# ~. i8 ?" x
&gt; a
( m3 R  j' A) {" u'    ABC    '
! s3 Z& M, H, X& H; D$ }8 T&gt; name + a
$ f+ @: }, C. Y: H'Hans    ABC    '3 m% B8 e/ T1 J1 Z# f1 q% p1 n' W7 o
// 使用concat拼接3 _- I  }' r1 c' t9 o* W
&gt; name.concat(a)9 A4 i# |) j" r% l) P% V1 D
'Hans    ABC    '
" B) h& y5 p( Z% X4 X$ M2 t$ w" ~
//indexOf(substring, start)子序列位置
2 J; s0 t$ Z, N" d& b0 h4 b6 L9 I1 m, E$ u1 `
&gt; text
9 [& g1 I' L0 H'A young idler,\nan old beggar'
' P0 v4 c3 ~1 s9 e1 C' I2 C&gt; text.indexOf('young',0)
0 g! U1 V# z* g1 j0 i2 i1 ]2; s; K$ B8 H+ n8 G0 u
& t+ {6 }" h2 w1 f
//.substring(from, to)        根据索引获取子序列5 g. O, a! I! R: n8 C* }
&gt; text.substring(0,)1 {% F7 c- ^  f/ i" h& H
'A young idler,\nan old beggar'
7 g- N) I& k1 d# e&gt; text.substring(0,10)* ^. b) _( V) `( X' U5 q6 Z
'A young id'' q. U- N# j& d
+ Q" A" ?) K( `8 V+ o$ T4 `
// .slice(start, end)        切片, 从0开始顾头不顾尾
0 N& R& |- P. E& W0 l&gt; name.slice(0,3)" W3 y. M  g  h6 v
'Han'
8 i( g; i$ R! o6 p. J6 M: \' C# E
- L# v8 f; j6 s9 B& ]1 x2 H// 转小写4 L2 o; W! R( z% g+ a
&gt; name" G: K1 \. z6 ?% u$ c9 Z/ T
'Hans'
; t  M0 Q0 Q/ ]6 q! k&gt; name.toLowerCase()
6 `  C6 J$ O$ ~( U1 g'hans'* u7 `6 j* ~2 b+ n, _, ^
// 转大写
; H6 z% h6 L6 A2 L/ x6 I&gt; name.toUpperCase()5 i. M- h1 ?4 z( Y( p9 l' {
'HANS'
* v, d* ~0 N2 G$ g2 b& J1 P; S3 w
// 分隔
; v  a0 t. ]! I9 h&gt; name
$ {2 W  C( _1 x; e'Hans'+ \* I) C  c8 l) i0 k
&gt; name.split('a')/ P; p: B, z( _( x) N
(2)&nbsp;['H', 'ns']  o1 v" n1 p: X# e; ]. `# J. ~
</code></pre>- y6 {# x& {* |7 Q: f' X3 h( F
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
. \0 s- k$ _4 I  o% ?7 t/ A9 Z/ `<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p># ~( j6 \9 ~3 l0 d8 U
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
: H( a" t8 i; ~0 F0 z+ M% n0 g9 c4 e; v<p><strong>null和undefined</strong></p>( m' Y$ Z, P& f8 C/ f. H* \4 o1 e
<ul>
* C6 `7 H* T- @6 c4 W- _$ g: g" T, }<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>: T4 J. o' ?. l* k5 X8 l
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>" [: p) K4 D7 m
</ul>9 V% B& o* j2 T, ~7 Z
<h4 id="234-array数组">2.3.4 Array数组</h4>5 |; P: R3 X2 y$ a  _) q2 K
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>1 a9 U7 R# x2 S# [" W, F
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] . l# v4 V! F% t
&gt; array1
" ^- P! A/ X# ~(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. k. D0 i7 X7 x4 L&gt; console.log(array1[2])  //console.log打印类似python中的print
/ e" s+ s& \0 z5 Z& ^( s/ J3& u( t- t. ]0 J) N
// length元素个数; j2 n" L4 ]. Y  u% N/ \
&gt; array1.length( b$ r" N+ s( a: X2 b. j; \9 i
6+ `/ H: i( T- [9 r
// 在尾部增加元素,类型append( T# L7 o$ D$ e* j+ w
&gt; array1.push('D')! L2 b6 f) D: ]& l- ]4 H* g1 W
7, H3 e" [  U) U0 k9 w7 S: a
&gt; array1
% J' d. u/ g8 ]4 {! H" G# H(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D'], k' z' e5 |, ?# r) A
// 在头部增加元素
% s: ^8 C8 ^7 Q! L&gt; array1.unshift(0). {* ]& w" B7 V1 Q3 b; P
8/ P% v! T4 [1 Z, C
&gt; array18 ~3 r5 v. p. b/ u
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
2 x" R# L" g% ~; V: J
. Y! a# G  _' q* H9 m9 [0 ~( b: g//取最后一个元素% @2 v" A; e  P5 O. a' T7 Q$ S
&gt; array1.pop()
  J: i) G0 b/ ]8 w'D'
- m) K0 a( A  k, M. q. ~/ o&gt; array1
7 c+ N* X  v5 d1 F  a' c! t4 y$ i(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ Y% y% k3 |* z: o. `* ?1 P9 @, |9 [3 A
//取头部元素
+ `# X' p3 W0 z% C" R7 {&gt; array1.shift()# {9 ~+ b; x* q3 E# I0 i
0$ o8 \( o7 w/ G6 q- h5 h/ y) X3 M
&gt; array1& S4 n7 N; ]3 z6 \5 ?2 s9 G% s. u
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
" Q0 ?9 m$ ?# P4 e
# D  _/ n1 p  q  n# y+ `& a/ u0 t//切片, 从0开始顾头不顾尾3 k% h2 ?0 j& L; X# P+ d) h7 i
&gt; array1.slice(3,6)
1 u" l% w( G/ _9 F! U7 Q(3)&nbsp;['a', 'b', 'c']- A4 T0 {# M# \5 ^) o4 k
// 反转
3 o* u+ Q7 c# {* I% C8 n&gt; array1.reverse()( X, M8 b* Q! V. v
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]8 j" m& u: ]1 |$ ], w8 O. g: z
// 将数组元素连接成字符串- Q- m2 S! p2 t3 E, I9 f' X4 v
&gt; array1.join() // 什么不都写默认使用逗号分隔
& `! C6 i( A0 A7 ~3 f'c,b,a,3,2,1'5 Q' X0 {2 ?9 e9 A; {2 O; e2 R4 N. P
&gt; array1.join('')0 s. W9 R$ V, Z: _' V
'cba321'
, ]. s' ~; h9 T% M7 M! k&gt; array1.join('|')0 y  K6 s2 w( [- R( ]
'c|b|a|3|2|1'
& ?- G1 T( i8 _3 D' o& v( W8 B& \. x
// 连接数组7 R# ]/ x  ]* k1 p
&gt; var array2 = ['A','B','C']
6 ?! N6 f5 \" u# v4 O&gt; array1.concat(array2)
& q# v. O5 p- a1 ~( |(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
8 s. ^1 f# \+ F7 L3 T& u* l$ ]/ ]4 t) e" W1 b2 }# B/ V
// 排序
8 f0 [6 g  @; V& P, d# B5 O&gt; array1.sort()) n. L" I- M9 T% c0 C  O  N5 J
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 A' J0 G  }  A8 g! c
5 N# v; R$ q5 y// 删除元素,并可以向数据组中添加新元素(可选)
+ T/ g7 t. u; g# D/ E&gt; array1.splice(3,3)  // 删除元素
" k9 k" F9 P$ u; Z3 l- K6 i(3)&nbsp;['a', 'b', 'c']
6 U; j$ V3 J( Y! r/ s% s! j' q3 \1 o0 k&gt; array1
' A7 J3 J) O. ]: s(3)&nbsp;[1, 2, 3]! o. j$ d2 {; }. n- b3 K
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
4 e/ u4 x. m8 {9 }[]
' l" m! q* W1 a/ ~+ A! X&gt; array1
8 f) I6 P6 J+ L( @0 f(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
  d7 e, i/ x2 S. f+ k& p7 w( q/ i2 |: @
/*1 A8 o. S2 s0 L, Q' ]
splice(index,howmany,item1,.....,itemX)
+ c3 l& p  S6 N. j) [index:必需,必须是数字。规定从何处添加/删除元素。
/ U  V  P6 A0 N/ T1 \howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
) J% O4 _6 `3 N& a5 X& B4 @. y0 S( yitem1, ..., itemX        可选。要添加到数组的新元素, x& W: o( ~/ N2 o0 f
*/5 P0 ?0 C' r* u& |8 i

) |- |) [# A: x# D" M9 a& h# G7 W// forEach()        将数组的每个元素传递给回调函数5 t2 H0 s8 U5 l
&gt; array1.forEach(function test(n){console.log(n)})
" d) b# T  n. Q 1
2 q7 z% u- h& i$ t7 t0 I3 j+ c 2! X; ]4 [$ b$ \8 N0 j
3
" L( E, w0 o" ?; q A
0 v6 v8 M  y' a! d! F: ]/ e B4 }4 _$ _& l* y
C
4 \8 {6 k2 C, z// 返回一个数组元素调用函数处理后的值的新数组* o9 @; X' k  [( f- p
&gt; array1.map(function(value){return value +1})) o5 u: x. T  F4 u
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
/ H3 j" }2 O( _' l/ ?' q</code></pre>
2 q. i, I2 U- r/ ?% _<h3 id="24-运算符">2.4 运算符</h3>0 Z6 f; s+ m$ n& K% r
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>7 N" U3 _3 u" w# I) s  Z3 t6 L
<p><code>+ - * / % ++ --</code></p>& {/ G, _% R6 x
<pre><code class="language-javascript">&gt; var a = 6
0 @1 Q6 @/ A6 k$ ^4 v3 b. R- ^  u9 r4 a&gt; var b = 3$ H- t$ g6 H( w* }8 W5 @& B% Y
// 加2 ]: k# H2 K" W3 g5 n8 q
&gt; a + b
% ?6 ^  D2 J2 h$ t1 ~2 V9
) L% g" u- T& Q// 减
6 _( H! k0 Q) [+ v, G6 |) W&gt; a - b
3 }. Y  l9 w/ D1 i3
+ O! I# _+ v+ o+ v  p2 T: j4 h7 Z// 乘0 T: n# c2 |  C$ a
&gt; a * b
9 S8 w" Q# n& o9 s! l185 q4 l0 T1 p, a% L4 K; Y" i
// 除
5 L! t' B7 k* E0 a0 q7 f2 j: h&gt; a / b+ N2 |$ [' Y5 O, ^9 {4 W! T
2* i, Q% O" |. K
// 取模(取余)
* y$ J3 B; @% ^  x&gt; a % b
: ~0 w% v; T, y/ n! g0
' w+ G% ~! L' E, V, O7 Q// 自增1(先赋值再增1)
3 m0 J# t  p$ c$ t- b) s: q&gt; a++
& y( q; s. O8 E7 d$ r$ I" S" j) k6% [$ S/ @) i! q; e+ x
&gt; a
# W0 A" B8 O2 L' P* Z/ @$ s( Z70 W# V$ Z7 ^! [: H& j0 q' R; y
// 自减1(先赋值再减1)9 h: S5 e8 f& W6 D
&gt; a--
( ?( J. A8 G5 z# ^7- t8 q% F- a/ Q) p* L! M1 V2 d
&gt; a! w% d; @: h$ t% l
6
6 Z0 r, m# t8 ~! l// 自增1(先增1再赋值)8 O7 C0 t0 m+ B$ u6 l9 A$ R0 Q
&gt; ++a5 ~3 N1 f* v5 H9 n# E; D5 T
72 m# U/ \7 {& x$ H5 e
// 自减1(先减1再赋值)
( U3 B  }  L2 n&gt; --a) Z% \: N. k" j2 G! v& z* B) e
6& n  X& f) Q# \6 H, I
&gt; a, b  V# s! \! H) y
6
$ f1 n. y+ j0 G6 t0 i  u. ^, R
, n  y3 g4 e: f8 _: C' q( w+ v1 F//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理# V  v& T1 l; i" g5 e& b
</code></pre>4 J. ]$ a2 S. F3 c$ u
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- L& x# u5 R! `<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>6 l, w0 Q+ |2 O
<pre><code class="language-javascript">// 大于
  L- G9 ]2 |5 X8 X8 j* i&gt; a &gt; b. M2 s" r, L" l9 X2 W
true
" s8 h0 V1 l5 m4 u2 z// 大于等于
& z+ k% g  h) p* y9 j1 B, G' M&gt; a &gt;= b
6 n0 z# ?( t) d2 J7 ltrue% H. z4 T7 ^  W/ D% \# j
// 小于. _2 `$ I% E5 E4 I; z# b
&gt; a &lt; b
4 ~4 {/ R6 A6 Q/ H% f3 y1 Xfalse
* P6 g) b* Y4 [// 小于等于
6 R9 Q6 u' r) e7 d$ {/ }6 U&gt; a &lt;= b3 v6 \8 M3 f0 r0 {* R/ c2 H: ]
false  V- C6 w- ~7 J: w$ {
// 弱不等于
& o; h3 H1 t, r&gt; a != b
3 I+ F0 x- D, btrue
1 k: E5 e) [. K! n' z6 C* n- t// 弱等于
* m7 a$ N0 z' r2 O" U&gt; 1 == '1'
, O4 f) _- F% V; otrue# i, B( [+ J$ \9 P- i8 P
// 强等于3 \$ t6 |( ?! \2 U
&gt; 1 === '1'
  a$ a( Z! i$ \# m1 yfalse5 G- W2 e: f5 T) D: ]8 ]
// 强不等于  o( b6 a; H2 T, l/ b* `
&gt; 1 !== '1'# S' X: k' \# b4 |
true
6 l- I) P5 {5 s) D
6 ~. o% @& e4 F0 h/*
! h5 n& a3 f: c( t9 O% `2 c" hJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误! V  u2 _4 ], S; j) U$ }1 d
*/' x! Z8 S+ N6 I9 Z& {9 V, a
</code></pre>
5 _8 K$ X6 d. J+ x<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
( Y. ^  s+ R) U/ o/ s<p><code>&amp;&amp; || !</code></p>  E5 e7 _. T" l) |! X6 ~$ L
<pre><code class="language-javascript">&amp;&amp; 与$ }. B0 e7 a! C* n% B2 t
|| or
3 Y4 ]% p7 y, j9 ]+ v* }/ |! 非: H6 ?0 N# y# F/ \- G: ]
</code></pre>2 P: W* X% [7 q2 Q0 P  Q$ T
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>8 S5 h' h. w$ k3 @' U
<p><code>= += -= *= /=</code></p>
3 w7 T3 |3 \4 Q. ]<pre><code class="language-javascript">// 赋值! E9 f4 I- {6 h
&gt; var x = 38 K+ E, c5 j9 |8 _
// 加等于
; X, z% @& I! Y&gt; x += 2
6 I0 H' w! y$ J54 O, |2 a- I0 Y( L
// 减等于  `4 s9 v7 S. B4 R- J
&gt; x -= 1
% V% C/ i2 h  ^( I+ Z4
: n7 i" G  y% x1 K# t: y1 n// 乘等于
& a8 `  H' T) P0 {9 t/ _2 S$ z+ w&gt; x *= 2- _; k+ G( m0 S- F
8
. R8 r( M7 k% V3 Y+ x6 j2 B/ W// 除等于
/ ^- y5 ?3 c/ `5 c3 a* i&gt; x /= 2- ~6 C1 j: X2 Y5 }2 _& a  B  d
4
* D- L$ g2 z9 [0 L* @</code></pre>& T- j% C' `1 P3 ?) ~  v
<h3 id="25-流程控制">2.5 流程控制</h3>
: _9 j: r# n) Q6 ?8 Z<h4 id="251-if">2.5.1 if</h4>
6 k$ u% M& U/ n<pre><code class="language-javascript">1, if(条件){条件成立执行代码}. f) B6 l& Q; k

4 B( T- o3 j7 Y" u&gt; var x = 3
7 ~$ |9 b- s0 ~% r&gt; if (x &gt; 2){console.log("OK")}
+ c4 C  f, n5 ^: n; \9 J OK$ {' a& a, a9 A0 u+ \  c* I

" ?2 G. P; i% S$ r: e2, if(条件){条件成立执行代码} & A( W7 ~" O. A2 s1 }
        else{条件不成立执行代码}" {$ n' y9 n3 s) [4 Z2 N
/ [3 o) l4 s. w
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
) h7 a2 {4 o4 g0 ], J'NO'
6 \/ z5 \; x" G, R" @/ h0 G6 `0 s, z5 y! u! R# v, R  K4 z
3, if(条件1){条件1成立执行代码}
" P. J! F' t8 J& i        else if(条件2){条件2成立执行代码}7 b0 E& b- [9 H3 m
    else{上面条件都不成立执行代码}
0 x9 r1 L6 p5 b+ D$ n2 g2 M: k. C
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
, ^: W; b( w$ t5 @1 B# M' J Ha
, l; q4 x* E0 `</code></pre>
! Z+ p+ N8 t) r+ ]4 y% @<h4 id="252-switch">2.5.2 switch</h4>. f  J3 A' v! n# x# }
<pre><code class="language-javascript">var day = new Date().getDay();5 c# @6 v0 B9 o6 r7 N, r$ Q+ S# _1 x/ x; m
switch (day) {" T% S  Q4 O$ Q: w; K' k
  case 0:
! V# L' M1 q0 e. W) b# S  console.log("Sunday");4 E8 O) _! \& H
  break;
' D! C# i2 z; N  case 1:3 s2 l0 G9 R: _% d
  console.log("Monday");- O7 f4 _0 \3 X( _' y
  break;1 Q: j1 d( V, I' R
default:
$ ~* ?% Y. m$ \3 Q- @( m# f% \  console.log("不在范围")  N5 P! b: z) f' k6 u0 e
}7 r7 {  D- H) u5 \7 H
不在范围5 R' G0 G) T5 i
</code></pre>
7 @6 y  Z9 m+ o: ]" j* b<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>/ H, O, c+ w5 N* }
<h4 id="253-for">2.5.3 for</h4>
4 U( R( R+ U- H* [% x<pre><code class="language-python">// for 循环- d8 Q3 F4 {3 C0 G
        for(起始值;循环条件;每次循环后执行的操作){  I$ G& G5 S# L0 i
        for循环体代码
+ E0 I8 {: W, p; h6 g    }3 \5 n4 t3 g+ k" Q) Z) [) |9 _
; c7 c" P( E3 Q4 Z, S! d) i
for (var i = 0; i&lt;10; i++){7 S4 l6 Q( e4 _2 f! \
    console.log(i)  Z4 g8 s1 {: s3 k# z" A
}4 g0 Q: D% b& B' `2 d* [0 {( Y
        0; [' _& w, r1 s
        1% v& W* s0 @7 L' X1 j! |$ R  r
        29 t" e; Q) x* }8 S) Z, g+ x8 _
        3
% |1 s5 ~6 y" |        4
& y8 ~9 M1 j3 Q( e6 X& {        5* s& S/ A7 w! B6 Y" ?5 L  ~7 o
        60 v1 o  f2 E* I& k
        7
! F0 ^" J" ?' c; M. n. Q. N        8$ ?0 b( T/ }7 M0 _  a4 k( U
        9& n! Y2 p* D/ ]4 P5 \* k
</code></pre>
8 c0 A7 w2 V* ?: @<h4 id="254-while">2.5.4 while</h4># G- p3 c- U# [/ N# {/ K  i5 |0 T
<pre><code class="language-javascript">// while 循环
' ~) {  Y4 Z, L* h( l! L) G        while(循环条件){/ o, x+ }% X* e# ~# A- i9 x# e
        循环体代码8 g" ?6 S1 q' @3 Z+ ]4 O% V8 J% P
    }
6 c( [1 R1 b+ n' P; G4 b6 Y# T5 Q2 b- N. J
&gt; var i = 0
6 U$ A, z' L5 o) R4 C! ~) ?&gt; while(i&lt;10){
9 J% {6 S* V9 b) N0 |8 W; I    console.log(i)* I6 o1 P- F- h- [: g+ {2 g
    i++$ C1 d( c) E  ?' n
}
. [0 A. O. c( r0 Y8 W 0
1 R  R; C2 B  V- P 1
" R$ O  B2 e- G 2
" Y, Z1 L0 K8 }3 d 3
2 H, _3 ?+ L; y2 N; R8 N 4, W0 n" w5 g+ f" c# s0 Y) c
5
5 Q, {, ]/ O+ [' F. q9 J1 m 6
$ g9 \1 g8 G* N7 Y6 O: u 7
' Z; R6 T' L( l 8
' S4 n3 L, b! _: m 92 I$ ]5 I0 E; T7 H  x
</code></pre>* _9 H& [3 U7 T' P4 ~+ d
<h4 id="255-break和continue">2.5.5 break和continue</h4>
1 y9 _4 I+ M0 k' g<pre><code class="language-javascript">// break
5 b" {6 M0 {. R6 |) vfor (var i = 0; i&lt;10; i++){6 I( n6 d7 B7 R$ T* ^8 z4 t; i$ y
    if (i == 5){break}5 ]5 M( q  ^: r1 T
    console.log(i): _" h4 u, q8 C1 N. R0 s$ y
}  O2 V& ^/ j# ~7 {) V
0
+ d: e8 K2 ]1 [ 1
# q( R# Q  C8 i: R( @ 22 u7 l. b0 H* q
3
$ w" l( W( S* c 4* r& e" G  E& Q5 `1 v1 \* q
// continue
' [1 z$ X/ O& e2 u7 M4 S9 {( |& e4 lfor (var i = 0; i&lt;10; i++){
! }# S& w* l; j3 ?  J+ k& ?    if (i == 5){continue}# j: u$ r8 F3 I5 c  x) R
    console.log(i)
1 D  M3 v) M7 \, z# t. u+ n}
. i: m+ V: s1 P# I: N+ \ 0
- s# v) F9 Q" {. x 1
: |& i7 D, Y6 c! N! o( Y+ y+ u 2
$ Q  a5 W, o, C% G6 ~) T4 v 3! X! V6 p$ r5 z. b0 O+ `. T
4( Z) @( v. c4 K& ^1 K6 v4 {
6- D) s4 P# O) ]
77 x+ p8 z; M. p% o/ n4 ?0 l
8/ f, ~& i" l- o9 g1 p& u
9
  f, A5 D8 ^; @: F+ O( n. Z9 W6 Y3 M1 t
</code></pre>$ S4 I4 t5 Y! f# P
<h3 id="26-三元运算">2.6 三元运算</h3>
7 Z# G5 _2 X, _( R6 @<pre><code class="language-javascript">&gt; a
  f- d# x5 y$ E" ^6
1 v9 B& w/ `( b( L1 M&gt; b5 S  Y0 S$ a8 G0 j2 p0 r. I* b/ D: C
3
/ w, i% w/ m8 F. |8 h; b; Y0 D6 a/ H/ A
//条件成立c为a的值,不成立c为b的值
- Q4 |/ k- F' x: f2 }: }&gt; var c = a &gt; b ? a : b' X! p; P2 N+ M* M* `$ w
&gt; c
! p& _; w) i; c$ `5 P2 N4 l6: e  }% w' n- ^

6 b2 `% _+ U1 U9 h// 三元运算可以嵌套
/ h* g4 D) i9 t; e# m</code></pre>
3 V/ R  s  G4 M. v7 h+ o% B# g<h3 id="27-函数">2.7 函数</h3>* e  w* Z: ]3 l' G
<pre><code class="language-javascript">1. 普通函数. @4 o. o0 h( o
&gt; function foo1(){
. s6 A( J7 x- a3 b    console.log("Hi")1 Z7 X+ x- g3 [9 U
}
* Y1 s! W; s/ j" y
2 k+ C" C2 n6 N5 d&gt; foo1()( w) R+ w, D% A% q
        Hi
* h. A6 {2 N, X1 `) \0 Z$ Y& m2. 带参数函数
/ z5 S+ T+ X% Y- {9 v. k4 A. G( B&gt; function foo1(name){/ }' }' S1 t5 |8 k7 y$ d) b
console.log("Hi",name)# |- p% s2 K+ F2 ?* k
}" M; D  E" k2 w9 E+ U% A
1 ^" |9 z9 A5 U' J
&gt; foo1("Hans"): Q; |/ c$ }  ?4 v/ X
Hi Hans% n* \( \0 a2 m- T" [) q0 G

! a" v) i' \* T' s&gt; var name = "Hello"3 D2 I: k" l0 H/ E. [
&gt; foo1(name)' }; E! D1 Z) F6 X7 J# {, ~# n; W
Hi Hello! O1 _1 b7 w  f! D  s
' f6 @; Y/ N* ]& n" t8 ~
3. 带返回值函数
& Z: U) |3 p& N% p3 p&gt; function foo1(a,b){
* k$ l7 W0 K7 s9 p4 k        return a + b   5 r4 ^/ A9 \! X2 b
}
% S+ |# i  A) x' |&gt; foo1(1,2)
$ w+ b+ T5 @  L) N3+ J; l( _( u" P8 U" w# Z! n
&gt; var a = foo1(10,20)  //接受函数返回值
, I9 m5 r" Z3 h( k0 H  X&gt; a. t8 \" `$ ~. B4 E' S
30  r! C! G/ v. Y0 S5 I
. p0 B; K4 b5 S2 z0 O
4. 匿名函数) {! q2 J9 Y7 \. B% I6 a
&gt; var sum = function(a, b){
/ N2 O# z; n2 u' i  return a + b;
/ R' I! I6 o2 A7 f! J}8 j& a4 G" j5 N  f7 ^2 |
&gt; sum(1,2)& ~9 W6 P' I" u4 B9 D
31 Q' S$ f: q; T

+ j. E# k- {* P1 E4 A// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
# m. U& o' E% a9 G% ~9 a# s&gt; (function(a, b){
& p; I1 b% r/ h  return a + b* o  Q* m5 A2 ?" {
})(10, 20)0 M1 p+ [" [' q1 O# b. u' a8 T
30
2 g- D$ }% R+ U4 `. e* ?, r0 v- W8 y1 O" W
5. 闭包函数' {8 H; h" p3 c5 S6 r* f3 h; [
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数/ J0 Y% S) h! m* Z; s
var city = "BJ"1 x" O7 ]' X. e* g  A8 ~2 V1 P
function f(){
% u1 [( ~' t5 s3 |8 O    var city = "SH"& ]4 ~. Y$ b3 c/ O/ l3 |
    function inner(){
" b- M8 ?, ?% Y5 @# \        console.log(city)
- T4 [7 s" n+ ~. d4 ?) U    }# Y; Q( g+ H8 `4 H( B0 X
    return inner
( l# F# T3 A7 R. b* L- [5 E}
/ Q! \/ C, o0 w8 C! `( Qvar ret = f()6 W5 v" K- o- R! w  e6 P) i
ret()0 c$ J3 n3 G6 N5 k5 @" Y! N
执行结果:
# b7 e5 p: H+ h5 i: |5 bSH
* M3 z1 C2 a1 ^- c% [/ d2 ^1 L0 R9 n- X" {3 B
</code></pre># T, F$ n9 f# v* g( l+ g: ^' L6 ]0 |" A0 d
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>6 o1 ?/ f1 o$ |+ E; ?6 B8 d
<pre><code class="language-javascript">var f = v =&gt; v;! k, H% N6 K0 |
// 等同于
/ F/ w; _" ?+ Avar f = function(v){$ I9 w/ U/ g9 ?8 W' I! r& o  [
  return v;3 m3 Z1 b5 |  ^8 P, U( d, H
}, T5 R! G: _* r: B5 l) T! {5 p$ r
</code></pre>
1 ?& I5 j. m  l( _6 G$ W& L+ z& m<p><code>arguments</code>参数 可以获取传入的所有数据</p>2 \- n/ V. k" G- c, d; f1 m5 B$ E
<pre><code class="language-javascript">function foo1(a,b){$ t' V2 Y' j! R/ ]4 j: |
    console.log(arguments.length)  //参数的个数 - e( j# B+ ^1 w% e! Q/ e' i, c
    console.log(arguments[0]) // 第一个参数的值9 h9 u' Z3 i3 D5 L1 {
        return a + b   
8 f+ M$ X% w% r6 F6 p$ W}
9 Q9 D# [. U, z6 G# ~" y6 Wfoo1(10,20)
  M" R0 g% q, o4 c/ g: \结果:( c% K+ B7 _  v( Q4 o# m# S
2          //参数的个数 - W7 ?, M( B* ^% P; A
10        // 第一个参数的值+ U, n* [5 L: o/ |4 y
30        // 返回相加的结果
8 e6 }# w1 y8 J: j</code></pre>
$ p; l' N: Q% R& ]<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( D5 x3 ?/ n% a<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>, E2 o% N# D. Y9 R! B
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>6 Q1 V  W: E5 d" k- n
<h4 id="281-date对象">2.8.1 Date对象</h4>2 o  ?$ Z+ j: F- c
<pre><code class="language-javascript">&gt; var data_test = new Date()
2 B; ^5 ?& l" i& p&gt; data_test
* n0 S1 `- L3 p) q/ IFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间): i1 H- w" J  |  u0 e9 Z1 t2 E& m0 h
&gt; data_test.toLocaleString()5 \& G: W0 m9 r, K* S0 ]
'2022/2/11 下午9:44:43'
! K' w7 I" I: o8 d* }3 g
* g& X/ o3 I9 X3 A+ Z- U&gt; data_test.toLocaleDateString()
* W1 O; p9 v9 v'2022/2/11'! \, J0 ~' j( z  D9 G" {  g7 J/ w
9 n% q, \! p- F" Q9 E7 r/ e6 q1 R
&gt; var data_test2  = new Date("2022/2/11 9:44:43")7 D' g! o$ M: G8 B& z
&gt; data_test2.toLocaleString(), f& j6 N. c' E$ t! I9 f
'2022/2/11 上午9:44:43'1 ]* ]9 b6 t; o( h; ?% k9 U& \1 b; g% |5 E

2 G$ {1 L, x! j6 j6 L  W// 获取当前几号6 ?# s% X# E  L2 W
&gt; data_test.getDate()
- ~2 [7 _& H. s# r* ~11
$ y2 T/ _4 e. A) |6 q// 获取星期几,数字表示3 z: W7 E/ h1 O, R
&gt; data_test.getDay()  
1 E8 u" K8 M# {: @. {( [5! ?; e6 }2 a# Q0 T5 r* a
// 获取月份(0-11), y# a2 w! I& M/ ~6 q
&gt; data_test.getMonth()
5 j& W0 S( Q: p5 e1
0 u, _3 f7 _" o+ M// 获取完整年份
& v. v2 K  V3 V$ L&gt; data_test.getFullYear()
0 ?6 I3 q; L0 |, d20224 w$ R+ Z1 [6 e1 `
// 获取时, k1 V2 q, a; ?6 U6 L( _3 J
&gt; data_test.getHours()
9 M. q) e9 n, e# y3 B/ i; E2 Z21
! i; F8 t2 M$ d0 d+ y// 获取分
: I# }/ o* H" C6 j0 C& @: h&gt; data_test.getMinutes()) C2 c9 Q3 y1 T* h6 H
44
: I: S7 `3 ^+ ?// 获取秒+ U- }7 m( M, u* y
&gt; data_test.getSeconds()
% X, f# a5 y: v43, l0 X5 t$ W9 K, g9 H" w! s. Z1 L
// 获取毫秒
; L/ k% e1 K( Q3 z1 e&gt; data_test.getMilliseconds()
  s! C$ {1 A# H# {; @! v290# q2 C8 A/ T0 m$ K/ p  l- j. e
// 获取时间戳
2 j- u/ i5 [% {4 S4 ^&gt; data_test.getTime()- a  y% p3 d! y5 `
1644587083290
# \' @- m3 [! U3 O) E. v+ z7 ~</code></pre>1 s. P$ y/ P5 n4 k- Y4 X
<h4 id="282-json对象">2.8.2 Json对象</h4>) K+ D$ C4 q5 [: v
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
5 P2 q  Y+ S5 _) a0 t, [. jJSON.parse()  // 反序列化,把JSON字符串转换成对象
4 X. e, s5 d5 l& n3 E1 `4 T
6 b6 M; A( s! ?// 序列化8 u" B! z0 W  k: E8 h
&gt; var jstojson = JSON.stringify(person) ' n$ I  j& z: E4 V- K/ f
&gt; jstojson  
, o7 Y8 `) k6 Y+ P5 ?'{"Name":"Hans","Age":18}'
  a4 c5 L2 d0 j% K
  [/ V4 ]7 n- w+ v// 反序列化. O6 p( O3 V# W% V+ S
&gt; var x = JSON.parse(jstojson)
. Z" O) f9 \5 N8 I3 i3 {1 Z&gt; x2 y9 n* w0 u! M# t3 F! _! D9 `  _
{Name: 'Hans', Age: 18}
/ g  y2 u; Z: C9 ~1 y! i&gt; x.Age
; }4 J/ x! ~" _5 P18
5 N* Q2 A# l+ X4 @: I</code></pre>2 {$ |$ L* [% Z6 K( E$ i8 f
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4># X$ a: Z7 p+ H5 W! `' w: w
<p>正则</p>
! f- W) k7 B( Q% W& X<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");+ t+ O8 C6 H% v: ^2 X) F7 K
&gt; reg1
+ B/ [$ w" I/ J3 S# I0 `- X/^[a-zA-Z][a-zA-Z0-9]{4,7}/  {4 i4 j, @9 @, S$ x4 @8 ^
&gt; reg1.test("Hans666")! T2 `! Y' f3 g
true0 m1 @* |6 k/ q8 v5 a: C0 T

3 f* i; p5 r3 I3 Y, V&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则// _8 q" r8 U' M% `7 t) R
&gt; reg2  W  c5 S" y. c: X( C* H% ^) i
/^[a-zA-Z][a-zA-Z0-9]{4,7}/# E  @0 x5 I% r4 H& q% j% ]
&gt; reg2.test('Hasdfa'): |' g7 {, X4 r8 _
true
! s; o* b( {5 k8 P5 b' |
! a. m  D+ q- h: T) Y  m- b全局匹配:4 ]1 R1 R3 M- V
&gt; name
! J/ a/ C* u9 n( J- a'Hello'; ~. G" \  j; d& Y- O
&gt; name.match(/l/)
! ]3 G( G( H' k['l', index: 2, input: 'Hello', groups: undefined]
7 Y% c$ K0 r0 @
, m6 O2 S+ j/ b' U# m&gt; name.match(/l/g)1 S+ s8 R5 o" C6 p
(2)&nbsp;['l', 'l']
/ |9 g! U3 S9 s+ N+ y0 ]) k7 ?// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配/ H8 r& A+ e9 `$ e- Y/ z! `
3 k7 j( G) N) Y  d) D
全局匹配注意事项:
! l7 E8 @! Y) `5 D( `: P&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
% `# O. H7 o& t$ {8 n; [  c&gt; reg2.test('Hasdfa')
+ `9 x3 o$ v! X! r; X( Ftrue5 p# J3 G7 A+ {0 s6 n
&gt;reg2.lastIndex;! x. ~6 K4 V7 K% o; ^& Z* Y/ f
6- M  u) y! u" o) N
&gt; reg2.test('Hasdfa')
. B, j" L& C' k. b) Ifalse
( J9 x# y7 V! @/ _1 q0 y  h; e$ ~&gt; reg2.lastIndex;
& A# W7 k4 B& k04 q- q& o: m: Z6 e# A
&gt; reg2.test('Hasdfa')0 l7 X8 t& ?; u- S
true6 p- k/ w' F: t) N
&gt; reg2.lastIndex;
+ A- S; }+ P" ^: `, s" B* }6" O  w4 F. u7 b3 H5 R6 p' r! e, S
&gt; reg2.test('Hasdfa')0 J8 I3 ~3 S* t
false& Q' U9 X1 T4 w* T6 }1 m% U7 Z/ H2 i' ~+ j
&gt; reg2.lastIndex;; ~3 F) s& ~" R: ?) M
0  t; b* a' w7 Z) y: A
// 全局匹配会有一个lastindex属性
0 b$ ?4 G# E" ?4 a$ p1 j% O, `&gt; reg2.test(). i/ D- w- L( n' r  `$ Z
false
9 ]( _3 T4 Y7 M, S- V4 G' q&gt; reg2.test()
; S/ I% E; \- P5 [- C4 l: T: W$ A; Btrue- H2 L( F, |2 v
// 校验时不传参数默认传的是undefined
+ b3 b& Z" B( P' {: d) S</code></pre>. `  I" M, b0 r* a" u4 T# X
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
+ O5 U- E/ M9 Z. _/ {, x* e<p>就相当于是<code>python</code>中的字典</p>6 C2 V. i( \# s$ q& ]
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 q) C* }$ |& G3 Z&gt; person. d; n7 G# {% ~" n+ P" ?3 }
{Name: 'Hans', Age: 18}
8 W5 f9 E4 d' s) W! o" ?/ Q&gt; person.Name
( [% j/ R$ D) L' S'Hans'% B1 p& T9 S! d. y5 @; Q
&gt; person["Name"]
6 v! l, p# _9 o3 C! u7 V'Hans'
: S0 N9 C/ V' ~* z
$ n9 J9 d% X/ G, I$ z8 N// 也可以使用new Object创建
0 A/ O: y% P/ [" H7 K9 ^4 U" O&gt; var person2 = new Object()( A0 I* U$ x6 W2 P# q  T
&gt; person2.name = "Hello"
2 N& n& n8 _( L'Hello'
2 n9 o& g8 N) n&gt; person2.age = 20$ r3 q1 r, P& `$ O4 ]
20
+ k$ g/ s! G: g$ Q  L</code></pre>
: e: G9 `, [* o9 T<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
* ?3 Y; e. p% t2 x# o<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>6 ]4 l) Q  p/ ?( `' ~* y7 B  Y  d
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
6 w2 ^" H# _* K9 t<h3 id="31-window-对象">3.1 window 对象</h3>
: Z6 e# r: V- @8 M$ T# y<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>$ v) _$ @7 y& ~$ b) h4 ?' {
<pre><code class="language-python">//览器窗口的内部高度) R. k$ d1 [# b/ V& `, Z
window.innerHeight 4 _2 I! Y  k, I' Y8 l0 E! T9 x
706
8 X# {* f, g8 K. _/ h, j//浏览器窗口的内部宽度0 u* W5 Z: }# N1 B/ \# j
window.innerWidth
4 E  w, Y4 l4 {- x& g8 N3 H9 [15226 i4 V: r% Y$ c
// 打开新窗口
* P% K1 @& G: N1 o% U) b( z: U: bwindow.open('https://www.baidu.com')
( V; t* l6 |! x8 V6 rWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
( O/ g( I+ A+ Z/ R+ G// 关闭当前窗口
" @% t) o7 v5 zwindow.close()
5 V) j* b9 @- P3 a3 Y( w8 f0 V//  后退一页
5 G1 d8 s4 c# u* K3 Qwindow.history.back()
) u1 C! S3 m  f( I  I8 B8 d// 前进一页. e/ \+ ?' `! C! y
window.history.forward()
  b- P- f: q& f3 E0 _//Web浏览器全称
4 F* L/ n5 X, E" A, b+ Uwindow.navigator.appName
- g4 D( v& X% o/ F5 j+ @/ b. o'Netscape'
# j# A; I' x: h' F/ `) k// Web浏览器厂商和版本的详细字符串, |) C7 r( l; C! e) _
window.navigator.appVersion
6 e6 G4 x( f& R% C; H; e'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
# |3 l6 u6 W: E" T& T9 t- ]1 M, x// 客户端绝大部分信息
" P0 y4 ~& E6 M' Z2 a8 {, a- |window.navigator.userAgent
3 K' G0 e7 Q! I'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- X; m3 G$ X3 [$ K
// 浏览器运行所在的操作系统
% i4 c( v% V1 s8 g4 Y/ _3 @( [8 J9 jwindow.navigator.platform
8 O% k/ c- W; X6 K& R  b$ X'Win32'$ ^  B) m, G. h4 M' M. K4 J

! D( a9 b8 I5 G2 t//  获取URL
' d; s) @" ^1 Q5 M7 j9 h5 m+ J2 gwindow.location.href: {2 S: c! p6 y$ U
// 跳转到指定页面8 A5 Q5 E1 ^! u: o
window.location.href='https://www.baidu.com'/ k$ b0 q; c) b  M; A( r: u
// 重新加载页面
4 F# `+ N. A& x" L0 jwindow.location.reload() 0 j5 B  ~& X' k, p+ b" J& _
</code></pre>8 j; i, b+ n5 p
<h3 id="32-弹出框">3.2 弹出框</h3>
6 I+ m/ b8 {+ C* n  O8 [7 ?<p>三种消息框:警告框、确认框、提示框。</p>
# ]1 D: L' `- G) L# N- v+ ^6 z/ F, J<h4 id="321-警告框">3.2.1 警告框</h4>
5 K! {8 s8 v' B0 v' N; c1 j<pre><code class="language-javascript">alert("Hello")
" c' ^2 P+ u  [6 f</code></pre>
/ k- }2 z/ j+ S* t<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
8 b. U$ M1 e/ K" t<h4 id="322-确认框">3.2.2 确认框</h4>  y  L" u- [2 K/ m, W
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
0 e  b  C. ~, C7 u3 Q<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 s' G; T7 t' Z4 k6 C- F3 E0 Atrue
; g/ d1 w: q, M, o' n& B&gt; confirm("你确定吗?")  // 点取消返回false
- |" d& x9 A" L6 n7 f+ Z/ hfalse% g! S7 t- X7 M+ {: m3 ~7 q
</code></pre>
# g& H$ W  L, Q+ l) I9 G) q, U! K<h4 id="323-提示框">3.2.3 提示框</h4>; M; H+ f5 n$ T- ~* T& b) y
<p><code>prompt("请输入","提示")</code></p>
; P$ l) Q3 Y( ?7 @6 j<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>  U, b8 r$ d/ V5 a  A7 O" ]
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>3 \) U" x% F6 B7 D
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>, q, a5 y% C+ Z, B) S
<h3 id="33-计时相关">3.3 计时相关</h3>
2 ~8 y( S; k. j, S9 b$ j" _<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>/ r- l5 W. e! U  x  F  v
<pre><code class="language-javascript">// 等于3秒钟弹窗" w7 U" Y; O8 B2 P$ t5 P. _
setTimeout(function(){alert("Hello")}, 3000)) g) E! m9 Q) U9 T. L$ P# L
5 @+ Y( g; j; k/ j* Y
var t = setTimeout(function(){alert("Hello")}, 3000)
/ |" s7 O8 J' Q5 u% \5 ^/ }
. J+ a. X0 u3 O) l6 H' W// 取消setTimeout设置& o2 {! y6 j5 v) i% t* l
clearTimeout(t)
- O; [, C6 I+ q4 b( M# V</code></pre>) s! u1 q6 ]9 x& X6 ]4 l5 r
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
3 }( P" \: }( V9 a<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>9 S5 R/ m7 M, d. p# F% V8 C
<pre><code class="language-javascript">每三秒弹出 "hello" :
4 u0 H4 c& s) _* [1 ]  D& H$ bsetInterval(function(){alert("Hello")},3000);. n: E% M" E8 ]
</code></pre>. w6 f+ w' Z4 g4 U3 R
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>; h7 {+ ]  B7 H
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
4 h. D. ~2 V0 d8 P/ d  k5 c) o//取消:
, o; X- U7 t5 ^7 ~) V7 W+ ^6 z- h8 nclearInterval(t)
0 e4 K$ `% r) T- @* `0 l8 \7 t8 ~</code></pre>
' u( h  ]2 y# d: i, _6 Z0 _
1 R& O8 _. {9 C' m5 D# y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-27 07:53 , Processed in 0.071711 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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