飞雪团队

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

前端之JavaScript

[复制链接]

8030

主题

8118

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

5 V! R& r5 B* U; A<h1 id="前端之javascript">前端之JavaScript</h1>
$ Z5 T; f, ^" f% o<p></p><p></p>5 p" T% |7 q* l
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
) f% [( n5 k8 K" k; s4 e& I4 h<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>( ?+ J9 |9 N+ \6 W: Z( w
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>" `! [' |. }$ B9 v: z2 ?
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>2 A+ P& W3 {( ~! A# S5 w
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>; y' c0 O% l% f$ {
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 ?1 e. p- [' g8 a! o( F1 P4 L2 ?- P<h3 id="21-注释">2.1 注释</h3>
' B+ z- Q8 x* r; N7 I7 V<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>- W* n- j: b2 W0 M0 Z! ^
<pre><code class="language-javascript">// 这是单行注释" S' c1 m6 b0 ~* `) N
4 S9 d. N2 a. p7 S6 h, N) I% T
/*8 r  ]3 M) @& D; t$ X7 [! M
这是多行注释的第一行," P) n# B0 z4 I3 w# H
这是第二行。% m) Z0 Y1 z$ F3 v9 n, Y; m
*/
7 Y& g3 F7 m6 s. i$ R: A7 b& N</code></pre>' ^1 p) P3 ^/ o5 X- ^$ }
<h3 id="22-变量和常量">2.2 变量和常量</h3>
2 Q3 \) c" b0 l, `4 Q/ v+ O) `* O5 Y<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
. H# r! S8 q# Q# i) \/ u& r<ul>! f; h# |  ^, H1 V4 F/ X" ?5 B* y
<li>变量必须以字母开头</li>
( t5 n  M8 M; d: x2 p$ M: m<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
. `) f  n. v; b! ?* w<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li># \& ^5 J2 o0 B) y5 N
</ul>! p' d: r4 R- U. G& y; B7 m' a; O
<p><code>var</code>定义的都为全局变量</p>
1 y3 e' |. R  t4 _" Q; U* o9 s<p><code>let</code>可以声明局部变量</p>
/ P5 K4 v7 N" l* F9 L# k' ]2 I; z<p><strong>声明变量:</strong></p>2 A; y7 ^2 g8 V  U. l2 u, v
<pre><code class="language-javascript">// 定义单个变量, X# @  Z+ Q" Q- ~4 d
&gt; var name. @& I$ y& c/ ]5 S) g; Y
&gt; name = 'Hans'
2 w9 l* x; {6 o! M: m( ]//定义并赋值, c4 p+ \' X7 B: b
&gt; var name = 'Hans'
! L  e8 R2 ^- x* s4 ^# s0 n; V&gt; name
% \: j  ~, S% Q* R'Hans'
' V/ k; q, y$ C& x& B  K, C) i  c/ I( W; ~. {
// 定义多个变量
' e! B+ x0 m3 w" k% Z&gt; var name = "Hans", age = 18
5 l( R, p7 V/ e; p& n&gt; name
* B% m' o! X- U'Hans'1 v. `0 G2 n! [( }
&gt; age
/ ^" e- G, u% e. v9 k% M18
8 ~6 n' a9 A8 C! |# F+ W& O+ }0 p5 R; y; E0 F
//多行使用反引号`` 类型python中的三引号
0 G1 T' A4 `) |) ?4 e&gt; var text = `A young idler,& U$ g- d, n( v4 ]
an old beggar`
$ P5 N6 T! x' M0 b  g6 Z&gt; text
8 m8 q0 R  }/ g'A young idler,\nan old beggar'
5 w) y, G: O- A2 b% I6 ~</code></pre>. b/ u" E, ]3 V% _$ _- j
<p><strong>声明常量:</strong></p>* a3 J1 p7 |, [% @7 w) n+ n# j* z
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
2 u& h" n5 N8 n9 u/ @7 G<pre><code class="language-javascript">&gt; const pi = 3.14
6 ]+ r  d0 |7 w0 t- ~8 y; ]&gt; pi: h6 N4 B7 ^! V9 p( c
3.149 k0 C- w/ w9 o. X# n6 |: ]
&gt;  pi = 3.01
4 a4 }8 L$ e9 @7 R; s6 ?/ b$ v/ F/ }Uncaught TypeError: Assignment to constant variable.; c2 P. D# F' }3 S( ~+ a3 F
    at &lt;anonymous&gt;:1:4( \3 ~  x- M; w6 {1 n

* J6 n- l  c9 q) }/ b1 q</code></pre>
5 g+ Q, r  @0 M7 Z9 B1 ~<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
, ]3 F& J1 p* E. S8 h" v5 S<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>2 |' g/ Q, s$ U' _5 U
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>+ I0 q7 _9 P+ [* I9 J) x: v
<h4 id="231-number类型">2.3.1 Number类型</h4>6 I+ g: b4 n7 z0 L1 }
<pre><code class="language-javascript">&gt; var a = 5
. P) \( d7 ^) x' Z' W5 m&gt; typeof a   //查看变量的类型  
) G" a. r: P6 Unumber1 t2 j" D' M5 Z/ I  C9 j8 {, u( W) C9 {& I
2 h  F! D9 b# c
&gt; var b = 1.3
' K; p. O% x7 a1 Y8 ~  f* j0 W&gt; typeof b
' g6 S3 }) {) j2 [' D: S$ Inumber
/ f# `: t4 Y0 c3 O$ B+ h
& ~0 {5 T8 ?5 z// 不管整型还是浮点型打开出来的结果都是number类型7 s1 z4 b% X" I8 s* G/ @

7 K; D( [, A/ Q! x$ U/ J/*
7 Q: N6 L# Q8 q* b9 HNaN:Not A Number
5 ]- J" J/ o6 d0 y  BNaN属于数值类型 表示的意思是 不是一个数字
4 G1 Y! s. |  |*/
7 q! G& F- ^; T$ k
% j1 c5 D/ k  |* x, [# v+ eparseInt('2345')  // 转整型( U* ~) x2 P' Q, Z
2345
6 f3 t8 O5 M% g9 hparseInt('2345.5')
  n# C$ d0 \" J$ q. Q2345
& S. `* c* l; @$ }parseFloat('2345.5') // 转浮点型4 \3 m9 {+ \# g6 A4 H
2345.5
, g. o6 z, d& PparseFloat('ABC')
: _; E. l$ U* i/ O5 @NaN
& M% ?2 u: Y% e0 K1 `parseInt('abc')
+ S; G/ U5 m: l6 k5 tNaN
5 @) e/ k* c1 i9 @/ r  y</code></pre>' ?3 w6 @/ J. G+ I: O
<h4 id="232-string类型">2.3.2 String类型</h4>! c& n- ?9 S7 }$ C) N, n( _
<pre><code class="language-javascript">&gt; var name = 'Hans'  ?. Z* o* i% z0 k
&gt; typeof name
- L( r6 b# s1 L# ^; T$ E/ r! u'string'
9 d5 M- S' q% w: f% F/ ~( F4 M3 Z
//常用方法
6 s/ u  ^- S* G, m// 变量值长度
7 Q" v% }6 X6 W) F! r6 n0 v7 U&gt; name.length. W6 k: [" Z* i
4, U# J/ u1 g* u4 S- A
// trim() 移除空白2 y! d6 k4 O- l
&gt; var a = '    ABC    '5 h6 S$ S" ^( M1 [' n6 v: J
&gt; a1 F# Q9 Y+ w+ x
'    ABC    '' a* z$ V9 l7 \& r+ a7 j$ f
&gt; a.trim()( W' ]& c3 i# R
'ABC'9 a3 b* G# B# C9 ~4 U
//移除左边的空白" H  ~; A8 b: I; G
&gt; a.trimLeft()0 T3 @6 L0 F7 O7 t- y0 I+ q
'ABC    '4 c* w2 N) F6 D3 h1 v8 K$ ^. I
//移除右边的空白
& I3 z4 j* {) M3 F. G/ r0 j) a# i&gt; a.trimRight()/ o# P& N% e) f, S  |
'    ABC'$ B* {. E. t) ^4 w
% M  q0 l! x2 z; S' ^
//返回第n个字符,从0开始
" v9 b; Z' H7 Q0 s2 {&gt; name
0 D8 S4 O8 C2 ]) a" Y8 X: U" @'Hans'
; F* i& k8 A; t% Q&gt; name.charAt(3)
5 ~2 x( |* Y8 C. P' }'s'
3 X/ \+ f5 _" E5 K&gt; name.charAt(); V# G+ [) W, h9 D$ f" J3 D
'H'+ A7 K) P* m' t' s0 `
&gt; name.charAt(1)& W; r) q1 Y9 [4 K1 B
'a'
% P2 e7 ]% s( Q3 H# x3 z$ @
0 R5 \6 R3 w* a4 Z" x// 在javascript中推荐使用加号(+)拼接
$ |! R9 ?" M& V) L  P&gt; name/ o5 g) X0 x" c3 k6 [
'Hans'
6 I* ?! F* O# l( T&gt; a1 d& e/ `. i) P
'    ABC    '; }5 k5 R2 r1 @# A# k% l4 F% w  k. {
&gt; name + a3 b% P# b3 s8 R; X* ^
'Hans    ABC    '6 @( D3 e( C; G2 ~
// 使用concat拼接* t( N! K1 Q2 o+ C- e4 T, B( T
&gt; name.concat(a)+ Z8 }7 d+ v- X
'Hans    ABC    '
3 ?) ?' @3 S/ }, n; E! I: z
& n4 T& `) Q. L% r//indexOf(substring, start)子序列位置' Y- r, H- |" [9 W# t5 X  u7 f
, c- }5 \7 e/ P+ Y- w; g5 P
&gt; text
0 y& U4 M) i$ F& l/ n3 B'A young idler,\nan old beggar'! x7 ?! N  E+ ]+ D  R# @1 B9 e
&gt; text.indexOf('young',0)0 o* H- d' E4 V/ S8 Q6 U
2' v7 ^3 C' O8 Y3 e4 b
( E5 l' q3 m6 S8 u
//.substring(from, to)        根据索引获取子序列
' ^, b- L( B. k8 F&gt; text.substring(0,)  n- j; a, C" d
'A young idler,\nan old beggar'! b! x; e. i8 S# {! n5 k
&gt; text.substring(0,10)' K4 X8 j7 A! B* r" f  t/ Y
'A young id'
0 Z3 W: [1 ]1 W' J+ C
8 H$ a; p  i9 J. Q: w, n& H( a! ^9 _// .slice(start, end)        切片, 从0开始顾头不顾尾
% d" Y  {# g& @. {1 @7 J9 z1 s&gt; name.slice(0,3)
6 L9 v7 F# R- C# y9 l3 E'Han'! L" R# u3 D4 T: {# w
; [& z0 i$ @8 S) P- s
// 转小写0 O; M+ B8 q( T$ e( y+ x8 ~% i
&gt; name. ^" i# X  {% }8 A5 v
'Hans'
$ A' P5 W, `) `3 y8 O( [&gt; name.toLowerCase()
3 T. C) o5 f8 h* w( L3 c'hans'; P6 y0 U! B: z+ y. {
// 转大写
! @4 k: x; b* s8 T" l5 E/ D3 F% @&gt; name.toUpperCase()# D3 W. ~9 c2 m4 x9 p
'HANS'- L" i$ n1 U5 l' j3 m% c: A5 C

$ C; U3 S; h3 D. h: u% P! G// 分隔0 F( q: j' x" Y
&gt; name
$ E9 F& k, c. J* T. H+ ?0 i'Hans'
4 h5 l3 Z! q4 ?% J9 I&gt; name.split('a')$ T+ p0 u3 o8 V$ T% F
(2)&nbsp;['H', 'ns']
/ Z+ g9 o! g9 ~: }  B2 Y* B</code></pre>, _( o' n; c. p
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4># l8 J! u6 u( ]- a
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>: h' n  T1 I: l; E3 `! [  |
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
$ ?& \7 Y% L% M<p><strong>null和undefined</strong></p>0 y. R* Q; m+ |! C) Q/ \; h
<ul>5 O" N) l6 w9 g* N" w6 ]
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>+ M# k* J  w1 V" i
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
; G6 ?5 H3 V  s* o</ul>
  H  f9 c5 W3 l<h4 id="234-array数组">2.3.4 Array数组</h4>' M/ m' [( |+ A4 }5 v
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>+ f7 n( Y0 o1 d# g2 n- H
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
) O1 d* z# F) L( u, a4 G! r&gt; array1  x1 A8 w1 L( ]' h2 M
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ e8 F5 S' s% Z
&gt; console.log(array1[2])  //console.log打印类似python中的print
1 o; w) L6 X! b3
% Z( R5 Z/ g( }2 t// length元素个数- L6 z9 p$ V7 Q' S2 c
&gt; array1.length
6 h$ I# F, n: I9 T* q  i68 U2 C+ l; e+ k% u; D: Z! a' j
// 在尾部增加元素,类型append2 N3 D1 k( Y+ h. H' y5 \: E6 q) Z
&gt; array1.push('D')
2 c2 H  o9 V  A' v# |- d" Q3 ?74 M) X8 m1 i  _& ?. r
&gt; array14 H0 I9 G& K* l: [
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
# v: W' ]  g; ~( B, x// 在头部增加元素2 ^( A0 F7 J; t3 L' i) u( M
&gt; array1.unshift(0)
3 F& H: `. u: \% q. O, m! U83 ^. H2 X% r, M- i
&gt; array19 Y$ R. w+ L2 _8 X6 R2 e+ E
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']' c) b5 m+ d% |6 F

* z* \9 i6 s  O7 j' |" }! `//取最后一个元素
. T  R& T, m# ?; h&gt; array1.pop()6 Y7 m+ S% T' y' V  U
'D'
; u3 K8 o/ j9 T, }; W&gt; array1
: c2 d( k* P' b' m3 a6 s0 @(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']  w( u) B& v' a1 V
//取头部元素
* Q. t& c+ K  l- s  l&gt; array1.shift()) Q( F0 g" d0 O
0
' H- v: a1 B! a&gt; array1
* G" a! n2 l1 X+ f- s1 e8 c(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ M& @3 C$ ~: Q/ ]+ t  e+ Y, T( i4 m$ ~
//切片, 从0开始顾头不顾尾
) P9 {1 g6 }) Q2 s8 ]1 A) f- C4 ?0 t&gt; array1.slice(3,6)- F' a( y3 w' d  {
(3)&nbsp;['a', 'b', 'c']
! i* A6 S6 P4 m8 `! V// 反转$ {1 ]8 R5 h( p$ F7 A
&gt; array1.reverse()
% o* v1 [0 `5 U3 u(6)&nbsp;['c', 'b', 'a', 3, 2, 1]4 m9 c7 e; o2 S8 m
// 将数组元素连接成字符串9 Z, {7 s1 c/ K
&gt; array1.join() // 什么不都写默认使用逗号分隔2 U" C- r" s  g6 @. G9 p$ W# O
'c,b,a,3,2,1'
/ M5 y* n2 v8 M&gt; array1.join('')6 `7 T  ^8 h* Z) x. k
'cba321'
! u5 l/ U2 W7 n! b&gt; array1.join('|')
  f/ P! i5 w+ |1 N/ [/ n# N'c|b|a|3|2|1': O2 w' k3 |& `) W

6 {; ^! Z1 n( `6 v3 m// 连接数组$ ]7 Y' `9 T# W/ F8 G% f
&gt; var array2 = ['A','B','C']
% [+ ^- u; o. l. y' Y$ x&gt; array1.concat(array2)
: j1 ]. }4 y9 F! N+ Y- N(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
+ F  |$ Y! C' r5 Q7 d# e
/ [0 t' h% b( E5 i& y. e0 t- Y9 J// 排序' t! Z8 F1 z! \' ]% M9 u
&gt; array1.sort()
$ G3 o; n8 E4 S2 o* `. S( t. x7 t' C(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  Y- N- G' L7 O2 S; g0 u: ]

* K& G; k5 @/ D! \# T7 g// 删除元素,并可以向数据组中添加新元素(可选)( A; t$ N7 k3 d  Q$ G5 J- B
&gt; array1.splice(3,3)  // 删除元素
4 M; u) L1 i* J; j6 K; C0 q(3)&nbsp;['a', 'b', 'c']1 {) B' A1 Y9 _/ a- K4 X; T: Q
&gt; array1. N1 F  V2 A) e' m# D8 F
(3)&nbsp;[1, 2, 3]/ Y% m2 r% n- M9 p- r, N5 F. \
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
8 V. x' D/ ^. H* q& J2 @[]7 h$ Z0 o& B' X) I. v6 N
&gt; array1
9 U" ]8 l3 w; @$ {( e( A(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
9 ^; ^" F, K  ^' b5 K! V" {2 I
, {& H6 Z5 M* _6 a8 J+ x/*
5 h. z7 O# \  z' G5 Ysplice(index,howmany,item1,.....,itemX): r; W' V& n1 [8 L# U6 O
index:必需,必须是数字。规定从何处添加/删除元素。1 i4 k5 o3 f, X8 ^7 Y% {
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。& k$ \: A$ d# i# Z$ ^
item1, ..., itemX        可选。要添加到数组的新元素
& A: p! h$ o" N  P*/
: m) ]- q2 R" \$ u# V+ A& I$ J7 t/ P
// forEach()        将数组的每个元素传递给回调函数* g% z% d; ?7 |3 O. |: R
&gt; array1.forEach(function test(n){console.log(n)})8 w. p2 v9 |9 U- h
1- M) H3 N8 x, v8 x) N" o
21 Q8 F" u/ q4 W, @4 T
3- i# r0 ~: ]  f1 j* }  k0 W
A
4 K% n% o6 T8 W, R B0 g' j) t; m- @) ]( N% M
C
! }6 C6 ^$ S4 V1 n4 K// 返回一个数组元素调用函数处理后的值的新数组
+ S! E% o0 J5 H  I, Z&gt; array1.map(function(value){return value +1})! b$ t( `" X$ N- M
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']% V: H* n3 V8 u" V3 z) S6 X
</code></pre>
" K- h/ Q/ _; ?5 k<h3 id="24-运算符">2.4 运算符</h3>% B& m% }8 h8 g4 i' K
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>4 X* L$ g. Q# u# ^
<p><code>+ - * / % ++ --</code></p>
" V9 x. v+ B1 l# {! B<pre><code class="language-javascript">&gt; var a = 6
5 [# H: O' S5 z&gt; var b = 3
/ i' M" Z. }) W. F& ^/ P9 t0 a2 L// 加! X8 E/ @! o1 @1 @  u
&gt; a + b; }8 g, J; f) O5 r- j0 `# O
9
$ C1 J+ e* E3 Z3 C% v: R- l  d  [// 减7 n9 o. V' I  s& f( V" h' b
&gt; a - b$ e( ?5 ^/ W2 K4 @" E: p$ D% m; @
3+ V1 ^* y& k$ v9 d9 ^* A' [( |$ a) h
// 乘' }6 A1 t1 q, g9 f+ c
&gt; a * b
1 r% N1 t$ c5 Z18% O, }3 z: A. ^# R! j
// 除
: ]- a- B9 C- l! a- V&gt; a / b6 {) [6 i/ M5 j% n$ Z
2
% P/ W; F$ [" q4 _5 a// 取模(取余)
# s: X+ {6 j# P7 j&gt; a % b0 i" `( \# |3 @* I* W/ ?( S  Z
0; [4 x  q& V1 q7 j; Y+ T0 H
// 自增1(先赋值再增1)
/ X0 g$ u% E, ~: ^" @3 \# o&gt; a++
9 B1 g2 s: z7 i* x' Q% G6% ~$ g+ z1 l5 B# b& f1 a3 O
&gt; a. H7 C; t" x- _7 s" x
7- G+ W6 [$ [; R+ h
// 自减1(先赋值再减1)
2 B( h3 Z1 E& y- t3 _&gt; a--
/ _/ C3 y8 V6 ~, h% @) ]7  |4 ~2 `! T: T; f! m5 ~
&gt; a
( o* Y& S) E. @" C6
& m7 F) u: j( @( f+ X// 自增1(先增1再赋值)& |! W8 ^: E5 k; V4 I
&gt; ++a
% ~7 M; o$ h. t7
. v& o, C6 _2 ]  L5 R2 a6 r( ~* A4 u// 自减1(先减1再赋值)
! s- ]- q7 C) l3 b5 @&gt; --a1 t! z- T1 C6 x
6* m& D3 T0 C% j" U7 P. N3 W$ {
&gt; a* D, R3 c7 `/ A2 u$ S! Z$ K
67 n. M, b& x4 _2 ?9 ~' g) @- z

7 V& M: K4 b+ @* z+ b1 W% u. r7 b//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
  {* D2 l4 ]% k( T, w# ~. R</code></pre>  O+ {9 r2 S. \2 O  ~/ \
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
& H, g* c6 h/ w; y$ D; `7 v) ^<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>4 e- M# U, H8 @* n) ]0 _+ P
<pre><code class="language-javascript">// 大于% e! h; K, [5 s( f: b# _$ m  `' n
&gt; a &gt; b5 W, R9 k- ], f) O6 j
true5 r* k+ l/ }9 E/ J, \
// 大于等于. K  e0 T2 h5 K* I
&gt; a &gt;= b
8 ^: C$ m& ^1 j9 F9 O1 l2 ]: _' Wtrue
- b4 W4 d: `0 Y' k// 小于  {4 A) L  ]5 x
&gt; a &lt; b
2 [8 r$ @/ l! ?8 z  C9 m6 gfalse# C: h5 j' |/ D( A! ?" Z3 J
// 小于等于
3 Q6 K+ d9 b* X3 O4 [% \: v&gt; a &lt;= b- r1 g1 h0 ?1 j' b+ M; `
false8 V( U" P* ?  {
// 弱不等于
( B- e$ ^% F/ v3 b0 [! x! t: m&gt; a != b
* Z; R- J+ G0 a" O' s  vtrue
  L( E( n: f+ o* }6 ?$ ]' F// 弱等于
4 d' f; i1 F+ D( u&gt; 1 == '1'
0 z1 h5 ^) A2 c! ]6 d# s3 rtrue8 s% s) {/ l4 \8 P
// 强等于  X; E/ A! K/ B! g2 ^
&gt; 1 === '1'
% {+ @: c# M3 q% nfalse
; V& C4 ?) j' e, P" g* B// 强不等于7 J5 c: B& U" r; E! i2 v
&gt; 1 !== '1'
8 X0 I" B9 I6 W2 D2 T) K+ }5 K) \5 h4 Y% Qtrue' B0 C' s5 y& Q& Y
( Q8 E4 R( z* A2 `1 e! s6 G
/*
8 T9 l( u' [. x/ \, H1 OJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误' [1 R8 L" @% n
*/
- ^" O0 S0 n6 ~5 ~4 P; L$ c</code></pre>9 w$ I6 M# _- `6 ]: t2 Y& M3 Z/ i
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
4 K% ?# c3 B4 ^  o0 a<p><code>&amp;&amp; || !</code></p>, {( \/ M' H7 }9 @! |  g
<pre><code class="language-javascript">&amp;&amp; 与
  T6 A/ c9 A1 l|| or
* m& S5 [* m( L1 |2 i' j  H" R! 非
$ t) W% H  g! p( J& e% b</code></pre>9 S3 u) s! V, ^3 C' b" X
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
' G; }. F$ U1 Q8 T<p><code>= += -= *= /=</code></p>" a& O" G7 o, _' V- S
<pre><code class="language-javascript">// 赋值
9 Q* `$ e$ q) C7 X5 R2 ~5 K&gt; var x = 33 M! T" t; z7 i+ x! E, p1 a
// 加等于+ ~8 a0 T, O" d9 N; R
&gt; x += 2
9 b" g( |, i6 l; }0 c, B3 D1 r2 L5- u1 N) M& d* p* e- w% ~) G, {
// 减等于
5 t0 t) b( @9 @2 A8 ^&gt; x -= 1
3 Z, Y4 n$ I3 e* u9 i4
& A" f. L" P' s, A// 乘等于0 i: @5 X1 B) r! @; g5 r' K+ L
&gt; x *= 2
6 J3 V. s8 ^8 }" k& K$ T- U: x8. V# B& ?4 C' o' S: @8 S
// 除等于5 h8 ?) @9 r: V. |, B
&gt; x /= 2& l9 z+ u& o" K
4" r+ J7 m! w: c' c9 @% |* ]
</code></pre>5 t! k5 [2 G# z, y& W
<h3 id="25-流程控制">2.5 流程控制</h3>
& N+ n( O, V( d3 S/ I+ f, l<h4 id="251-if">2.5.1 if</h4>
+ W& h3 g( S# R* b. \5 m<pre><code class="language-javascript">1, if(条件){条件成立执行代码}, Y4 s: [/ R6 I

! Y, f- `* G, X& R+ j&gt; var x = 38 q# g# G# Y9 S4 y! l5 w7 m- X
&gt; if (x &gt; 2){console.log("OK")}6 D$ O4 A( R2 c' z; l( h" d
OK  M+ X3 f" @8 u" ?
- w9 J) L3 U7 g7 x: ], ^9 n$ Z% A
2, if(条件){条件成立执行代码} 1 q: l7 A% A! ]; ~
        else{条件不成立执行代码}9 E) D* I& E, J$ _0 I

) O$ w# f* @& h: s&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
6 m7 S. F; }$ d3 |'NO'
9 X  W- l: }/ X& Q$ x) Z
8 z  V9 p" u& m3, if(条件1){条件1成立执行代码} $ j1 a: w% }' J% d1 H
        else if(条件2){条件2成立执行代码}0 G9 Q6 ^  [. C5 n9 J' V
    else{上面条件都不成立执行代码}
) Q" s$ y0 {4 x5 F* i, ^! v6 ^
  ?7 M7 D6 g* Y% V+ x. h&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
( k, [4 R1 A& Z* m6 w* c: W. o( _ Ha
6 Q1 x3 k# e% R+ Z+ A: v; U  `/ n</code></pre># b! S6 k# n! n; g7 E
<h4 id="252-switch">2.5.2 switch</h4>; W) y0 i: J8 |; P! N
<pre><code class="language-javascript">var day = new Date().getDay();8 A$ ?+ i3 q5 k" X5 ?
switch (day) {# N' l, z1 A( U- ^2 d/ k( B
  case 0:) K) E/ z6 Q' [' Y* n: a
  console.log("Sunday");8 b/ W7 D2 d' w5 ]. Y2 U
  break;  T, x9 W* g6 ?- c8 A' D, |
  case 1:
7 d. z0 O" a* m$ A4 d  console.log("Monday");
7 P4 `- g) [4 J& N( I( e  break;
& w; Q  u. f& e4 pdefault:- s2 O) [% I5 |4 K
  console.log("不在范围")
3 t4 q6 I2 R! i- E6 J) b; u* r- d}+ g! w1 \+ N% z
不在范围
* m& F" N3 k# @! i! Z</code></pre>" D) U; }; [; H5 v
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>: G& y: @( u7 P: x( ?7 h
<h4 id="253-for">2.5.3 for</h4>; i( |" i/ @6 n# n, a3 ]0 A
<pre><code class="language-python">// for 循环1 p7 n- M/ u5 V0 F
        for(起始值;循环条件;每次循环后执行的操作){) y# [" e1 u* B& m
        for循环体代码
, u* f8 ?- R! x; t( i, y    }
0 C5 [5 t, v5 N
: r. t/ ?' K6 v* ffor (var i = 0; i&lt;10; i++){
! A. T! x, P$ k: S. _' g    console.log(i). k: s+ o7 y9 n3 H+ z- ^
}; \5 F& j+ R, d7 O& B8 C
        0
: i, R. e1 S7 I        1
; A' w- }8 G& g0 V" L4 b5 |        27 b) X8 B& k! t- f$ W
        3& s" X2 I# e& ^( C; ~3 N4 ?
        4
8 k8 P$ P# P3 k9 ]/ R) A( `0 |: [        5. L5 s9 ~0 B3 k& d) @/ R
        6. t6 S. Y4 p- K( g7 P2 Y3 K  k: k- n
        7
8 w: z3 W- J( c$ P# T# l        8
! w+ \8 @8 w9 _6 d4 n        9
' m) f0 z6 o" |% g4 }9 x& s</code></pre>
+ y# O! l! n1 L: F- B<h4 id="254-while">2.5.4 while</h4>3 ^% }( i5 _1 u( N- n4 W9 P
<pre><code class="language-javascript">// while 循环
) p0 A! n! y; G0 `        while(循环条件){
# Q3 I- D) N+ I, J: ?  G+ r  e, g        循环体代码
: b% G/ W( V/ S8 t& m. {) {1 ?: Y    }: n+ Z+ T/ s  d) m' T& J5 h* z, P
( f( T! M  {9 F- }
&gt; var i = 0
- L( o6 t' q' G$ v( Z&gt; while(i&lt;10){
; w( ^/ S8 V' C; T) X    console.log(i)
% C3 U% q, ?1 ^8 O9 E    i++
5 A; p9 ]) b2 v5 A" ~% X6 M}
5 W) [" s- p5 L! I 07 _( F5 E4 U5 F+ W$ l0 L+ n1 r0 }
1
) `9 ?: B5 H8 M6 ?; f0 | 2
, [: P$ W8 O- g9 y4 W! z* u 3$ i5 B+ x! s$ r  d( r
4% D- ?9 X9 E( s9 B7 b! H
5
( ^+ F9 P  N, B7 ~/ r 6% v5 U' y7 W) w0 t+ K2 _
7& s9 E" p: m* |8 w
8
$ p3 j( s, c' T+ i 92 w# r" z8 c# b5 o( ?" s% s4 ]" l
</code></pre>0 z% B# }# X+ i; g- M9 T; K
<h4 id="255-break和continue">2.5.5 break和continue</h4>2 D/ p- X; d  X1 q
<pre><code class="language-javascript">// break4 c; y3 w! Q: U5 F$ @
for (var i = 0; i&lt;10; i++){# I! x# ~# U+ ?3 m+ u$ }
    if (i == 5){break}
: _) s8 A) A% g6 Y" b0 ~% |    console.log(i)
! i) ^+ Z3 B5 ]# N}  V4 @: I6 i7 j  E0 y
0% m* m/ w  D, U4 {) L+ u! _
1* `- H$ h; y4 c6 V6 H% Y
2* g0 o2 u- h/ p9 ~1 x! ^% w3 |
3
0 F% ]) J+ {! y) e* R 4
: q9 x. }. K  M4 d' y1 V& H+ o/ s// continue) O. t% v6 h: ^+ ^
for (var i = 0; i&lt;10; i++){0 F: A$ b0 ?# N- o  x
    if (i == 5){continue}) U3 l1 W4 I1 Z. f
    console.log(i)
. B% x; g7 a$ a$ d}
- r6 `/ x" v2 g1 S4 b2 e 0/ }4 S- a' [% Q+ @1 [+ L% L/ V
1
" k6 t% ]4 ^) h- {2 e+ B1 _4 G 28 w5 L1 l5 q) S. |
3
) p! N6 F4 _3 w/ u9 p: i$ D8 m 4
+ o6 w. ]  ^. P; g 6
/ R' T- e! N" m4 u( J( p 7; Q1 L' R+ `) e7 k( i
8: F6 y% t# d# f
9
% w" G/ Z( B/ S# x+ R2 ~
: |0 `/ y1 V( x: `. x</code></pre>4 C4 H( [0 o/ o* f: V; }# c
<h3 id="26-三元运算">2.6 三元运算</h3>' n9 a9 ]: m% Q; K
<pre><code class="language-javascript">&gt; a
3 ~" i" s/ V+ ]6
, e4 k6 h9 I; U. l# g&gt; b
1 F( f; z7 g3 }4 P% [3
: U& w% ^$ y' ^3 o, e
9 \# I1 {+ U: O/ l( t//条件成立c为a的值,不成立c为b的值, m  e" j+ Y3 I" L- r: e  c; G
&gt; var c = a &gt; b ? a : b9 X5 H" r& x% S9 y* j
&gt; c% }( m& {- x% v
6
. Z2 L0 I' x( h: m. y3 G
- s% X! J. z$ _0 l, A8 Z// 三元运算可以嵌套( w/ [4 V4 v5 W) v5 K9 |, ^! q
</code></pre>+ d$ D$ Y, g9 R" Y3 S% V. x- G
<h3 id="27-函数">2.7 函数</h3>
: g$ ^' p" H1 W2 m: P4 z7 g1 d<pre><code class="language-javascript">1. 普通函数7 F, k/ ]4 I) Y3 ~+ V( i3 a# H
&gt; function foo1(){6 M! \. n, O/ e
    console.log("Hi"), K6 A: d: P) D" ?0 G0 p" o
}6 X( b5 r3 Y; J# b+ l: X0 \6 @

# S0 I# u* _. m# f" V+ r/ e! Q* U&gt; foo1()2 C' f8 {! q9 P( |; E, ]
        Hi
4 u; h3 |8 E6 j0 ^' @/ D2. 带参数函数) F; E# x+ e6 \1 p0 v, b
&gt; function foo1(name){/ x( o  j3 _$ t2 w" K$ c
console.log("Hi",name)
4 u/ z2 h: F6 U& x}. f% m, t* M, m8 Q1 k3 T4 C

7 B( ]$ g$ a# b6 n* ]0 H) }/ w&gt; foo1("Hans")
" w: D6 _$ r" ?. K4 `) M/ }6 U  a6 CHi Hans5 a( w  P. C( D! Z: S. `
5 M3 F/ b1 Y# R( ]- [
&gt; var name = "Hello"
& `! x3 r+ s& d% c) l&gt; foo1(name)
/ @. K. Y1 P  q$ Y$ \$ ZHi Hello* N: P- Y- ^& [/ A+ w

  D7 ^7 B  ~3 {3. 带返回值函数# `) o( g8 H+ t1 }" m
&gt; function foo1(a,b){( U9 O8 Y5 T: B+ ^" P  c  B
        return a + b   
+ m  G/ E7 Z2 U. R: v$ m: g4 N}5 A# x, m% w! d8 I* V
&gt; foo1(1,2)# Y4 F% I: e% f0 q5 d5 }/ V+ o* E
3
: G1 _/ ]1 M4 w: q&gt; var a = foo1(10,20)  //接受函数返回值
) t; u3 x. a  {' h# r2 w&gt; a
( l7 _, F- o4 a; Q# w30# C8 ^" S6 g& a8 ?0 Y

, q; X7 [/ ~8 W$ \  t5 A, R# a4. 匿名函数
# r; Y; T6 b& t2 m( m( g/ ^5 }&gt; var sum = function(a, b){+ x, c3 W7 E$ \; X7 a5 G4 C
  return a + b;
5 `6 I$ v5 q4 o: R/ H/ N$ d}
4 }. K: n: Y+ r$ t8 P&gt; sum(1,2)
+ Q2 E0 C) ?) K" c# {3; a9 |$ V( Q( g, Y0 M8 H
5 t, d7 ~! x7 j) Z% {
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱9 K4 l: G% a& J5 C
&gt; (function(a, b){5 }3 R% J( c+ _8 `! _
  return a + b
# R6 ^  z4 {( Q) @- @' T1 k})(10, 20)1 F2 b/ X' X4 r+ |3 ?4 H9 v
30
( k! T7 ]. |8 V/ j4 d6 q  |! v. V0 X% U$ N0 ?; ?, C, ]
5. 闭包函数
( g0 K5 [, d$ J$ I6 x- b// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数6 b  E# t* q5 `
var city = "BJ"5 u) c! q$ y" M* f
function f(){! d% F& \/ E' L/ ?. F7 D
    var city = "SH"3 ?( V( z) [. T+ k) w$ L
    function inner(){
, m6 ^; e% c# \* l7 X        console.log(city)  i4 H8 B0 Y1 y) \/ h+ z$ c
    }8 O9 F3 a( ~; X* W% v1 _1 K" T7 k
    return inner
& M$ r7 _0 m& b7 {. ^4 D}! U0 V- b7 [+ [6 x, E
var ret = f()3 g/ N4 @( I- ]; p! T- s3 p) e
ret()9 u. d  h7 ?; a! f/ e6 `, W1 N
执行结果:6 d7 [: a4 L* t3 u  o, R! d
SH& {% c& S( L3 x- N7 R

$ }! u# J% h6 q) L) C4 M</code></pre>$ o: }& i/ n! \- X! V
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>& u3 z) ~. B4 Y, M$ _$ V# ]$ Y
<pre><code class="language-javascript">var f = v =&gt; v;
# B4 Z, V% f2 P8 U; s) T1 o. c// 等同于
% G% r. Z9 @& \* r: @var f = function(v){' A# O) ]. N* Q) h) m6 V2 u: e
  return v;; N+ o5 f2 w: `- e
}0 O5 B  |% @& @: [: s( Y
</code></pre>
( K2 \2 g0 ^8 Z<p><code>arguments</code>参数 可以获取传入的所有数据</p>
) R9 t& j" d6 j- [<pre><code class="language-javascript">function foo1(a,b){
/ y# V$ \& X: L9 A, f2 x' T' {    console.log(arguments.length)  //参数的个数
8 @  {; I/ F; e% L- X    console.log(arguments[0]) // 第一个参数的值
! `, k; ^( n7 v' {4 J% L        return a + b   
5 }& k. y4 {9 ^  t}
0 e+ ~: @5 W* xfoo1(10,20)
" Y9 d3 r: ~2 f: S' m9 R结果:" m- y# |2 ^( M, y
2          //参数的个数
' r# V  j, C9 {, ]3 l10        // 第一个参数的值8 g5 S! [% m  Q4 {% x
30        // 返回相加的结果
2 K5 G, D& J% W# {! p' ~</code></pre>" d. R2 Y1 H) D' y" H8 R
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>) Z3 Y1 `: X- x/ ^
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
" K, V9 m4 P- f; ~5 c<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>5 E9 I# f3 H/ ?: M! Q" @
<h4 id="281-date对象">2.8.1 Date对象</h4>
9 w/ B$ }( U: U, r$ m/ H<pre><code class="language-javascript">&gt; var data_test = new Date()" B7 y/ k0 j- D
&gt; data_test" _, G! f2 i1 n* |
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)4 ~  W8 K4 t" L: _+ G
&gt; data_test.toLocaleString()) W. X. b4 z, ?; j( L: z. l3 W
'2022/2/11 下午9:44:43'
5 a4 D) f" t; E6 |; z/ t- F) L4 q% m8 V! N1 U
&gt; data_test.toLocaleDateString()8 Q* a! L$ ~. h8 G/ C% `
'2022/2/11'
+ }8 n' x* F: [" R/ ^+ D& `7 A! b/ B0 N3 _5 S3 t
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
& V8 g& C. N1 u, M4 W&gt; data_test2.toLocaleString()
. T0 U8 ^1 s, _'2022/2/11 上午9:44:43'* Z& R) q1 l0 a6 P

7 q8 \- s& |8 @) f, G! d// 获取当前几号
- H9 E2 [/ M' K! ]5 O&gt; data_test.getDate()
5 n! m6 O6 M  @1 e% m11
+ S6 J4 C4 b* J: f6 z/ [// 获取星期几,数字表示
5 d! s7 L! q$ `& [9 }5 _0 B&gt; data_test.getDay()  
5 i! }8 ?1 }0 l/ |) O( V# E; G' U5) h- N7 k2 {/ H( |, X7 A' K
// 获取月份(0-11)
! S( e; N. y: C  Z: j5 D- D1 e8 G&gt; data_test.getMonth(): }/ E& d8 |6 q7 f* R! t
1
" p, O  k0 {! v// 获取完整年份6 s. E9 }/ `) N) n' [9 o
&gt; data_test.getFullYear()
0 F5 X2 L4 W& `* N% Z9 ]2022+ g3 R, i( n1 L8 I- N6 z/ C/ I3 x
// 获取时% m3 @( l( Q% M1 _3 N& S* y; m! b5 U
&gt; data_test.getHours()
1 [1 Z  z; r" g# m3 S0 ?21, p. _) Q% t) z, v: M
// 获取分
: }! v& `# X0 w% ~&gt; data_test.getMinutes()
! P% D% T: Z. e! r4 q* ?44
+ y: K! r) R* S// 获取秒+ E1 a9 @' s& W1 v  ~4 ~: H- m
&gt; data_test.getSeconds()
( S6 S! Z2 r- h3 c  }9 @43
0 G  ?( i% l( L' h9 O// 获取毫秒
' ^7 G' _2 F4 l  y&gt; data_test.getMilliseconds()* e) K( ]! K# A3 S7 L# `
290
" x& G+ Y2 |# }// 获取时间戳
& g' t" u9 V% [7 `8 [&gt; data_test.getTime()+ \" i! E2 z( Y! G. D& [! `
1644587083290
7 V2 L9 _2 o+ x) [; v# w' s</code></pre>
; `& x1 D# `5 ~<h4 id="282-json对象">2.8.2 Json对象</h4>+ X2 u! |6 L: B. B! {
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串( Y6 {8 w; R/ [. j# A% h5 F. A0 d; U
JSON.parse()  // 反序列化,把JSON字符串转换成对象
! F4 G; E, Q+ e3 Y& ?
% t5 u9 H- }5 P0 f4 {6 k// 序列化1 p0 M' t2 e6 n
&gt; var jstojson = JSON.stringify(person)
+ t; |3 @+ a. s! [! B) q&gt; jstojson  
, t9 A' L( q1 A'{"Name":"Hans","Age":18}'
* @- L3 H# }- `# x( Q+ C/ i* Y8 |; ~7 _- j! t6 _. ^2 z' U' w
// 反序列化0 _. c$ y! u  b2 E) g4 T
&gt; var x = JSON.parse(jstojson)
0 f1 S# O6 H, K9 E+ j7 I& L&gt; x4 y5 E- a' p0 O. E0 t8 W
{Name: 'Hans', Age: 18}
6 Z" ^! L- G* o  P5 N&gt; x.Age. ]% U# V1 q& E! R6 h7 i
18, N& q! X" ]1 [6 |. F4 m
</code></pre>
2 i" s" F5 t1 O4 }6 W$ O<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
( A0 W% X0 C! D- O' r& u<p>正则</p>
* h8 r( G7 }4 t$ ~6 e- j3 t<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
3 }+ `% r+ P9 w% P! F&gt; reg1, g) c! k0 o2 r7 f7 i
/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 J- j& T* H& @3 |& w3 z
&gt; reg1.test("Hans666")
( O6 W$ e( w0 [! f/ V. _true
0 {) ~/ B, E& x& Q6 ]* F9 E
  e% J: z( c3 ]/ e) N&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
8 Z. Z2 I' I2 J4 S&gt; reg27 p$ p. q, R" V0 j8 J) i4 Q: b
/^[a-zA-Z][a-zA-Z0-9]{4,7}/# ^& j3 C. _: i" u/ V9 I
&gt; reg2.test('Hasdfa')
  S. A/ U2 i4 _5 ~; m! E1 otrue
: i) L" K! V+ c! \# @2 R2 g0 t* T! m/ B. s, Y; L; p' b
全局匹配:
' t7 l" T+ D. A, o1 G$ N2 T8 m&gt; name
8 e+ E. }/ \2 K$ ?$ N8 n! a'Hello'
4 E6 `8 N( p$ |3 c" {8 P: W# g/ U&gt; name.match(/l/)
3 {% S0 e  q# U% v& a! o6 A6 q+ b['l', index: 2, input: 'Hello', groups: undefined]$ g2 A; s$ r, x
3 R4 ?$ [2 A, T# i. K+ }
&gt; name.match(/l/g)
* X9 l8 }! K0 W0 l- r  _(2)&nbsp;['l', 'l']/ [4 c# U7 g5 D8 k# x; ?
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
, `/ g) M7 M5 U2 ~7 d" _% W# p# a& L5 d, Q% l1 [  v6 C$ T8 J
全局匹配注意事项:4 J7 s' A: q6 L3 A8 \
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
# |: F* T; W2 ]&gt; reg2.test('Hasdfa')
7 ]; X: Z- x- P& q8 vtrue
7 _" d+ o. V- |; y+ |- L&gt;reg2.lastIndex;  z8 @! R' k$ p  K. @# D! t# V
6
" r' ]4 Z6 }1 I5 E( {, w&gt; reg2.test('Hasdfa')
# D) F* s& t6 _: \false
' @% E" |# e  Z$ w+ l6 U4 a&gt; reg2.lastIndex;
. J5 \# A6 p0 C6 @5 x+ B6 f0: X2 F& _, W. x  p$ ~
&gt; reg2.test('Hasdfa')
, `  H4 {) N' O# u+ `1 ?; `3 j+ ytrue
4 A+ K$ e5 a% ^&gt; reg2.lastIndex;' M7 ]; V6 B$ f! i4 m/ V, a2 j
6
: F# D! ^) P- G. c1 ?9 N* o/ y&gt; reg2.test('Hasdfa')& v4 O# e- E- i1 L$ D- q, l  w, M1 c
false
7 r: V8 V' \% e" O6 |&gt; reg2.lastIndex;, h/ x4 b  U( L8 Z2 y6 ]% e
0
) S0 x  A2 }5 J2 {// 全局匹配会有一个lastindex属性$ ~  B; ~! b  s: S; O$ f2 I
&gt; reg2.test()
7 [$ n# z+ U2 Ufalse
. w# ]5 x$ U/ n1 }# P3 y& _. w$ b&gt; reg2.test()0 h) E, l) |; ^+ T) [' n5 f
true1 A, c# n' Y; w+ W- K
// 校验时不传参数默认传的是undefined
5 w4 y! M/ ^8 ~: a/ E</code></pre>' B7 l5 Y9 ]& x$ g5 Z# A
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
$ r! k- W1 l. G9 k<p>就相当于是<code>python</code>中的字典</p>' O. |6 X7 {. j
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}$ a" N' A7 H4 _+ \, x
&gt; person
  {! f6 Y( A. W7 h. h{Name: 'Hans', Age: 18}' H8 g7 m  Y. ~
&gt; person.Name+ x1 W* ~& r: m, }* R
'Hans'
9 t2 R" L2 {$ F8 S&gt; person["Name"]
, G: q' A. G0 k- @2 g'Hans'
8 g, }/ w  ~" H8 |) G- R
2 o2 S! D+ x4 y4 D% G$ R// 也可以使用new Object创建' |7 @& X& Q$ X- @9 W
&gt; var person2 = new Object()
( i( T, |! [) H6 B( F" b&gt; person2.name = "Hello"
' C* ?2 Q/ ~! y) U8 p. x'Hello'
! [! Q0 G( H% D' f&gt; person2.age = 20
& @8 X, d8 x1 t0 z9 t% t! H20$ Y; D4 X. Y) n9 ^6 I" I( u: i$ A# X
</code></pre>
3 m4 M% Q# n- h1 F# y5 _) L<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>$ P  D$ y" r, F0 ?! X
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
* {  w( U4 z1 t# R0 c+ g<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>/ w) q* J7 c8 q" P$ Q8 H
<h3 id="31-window-对象">3.1 window 对象</h3>5 c! j+ t* M0 a
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
' @3 _0 {% A) V% }<pre><code class="language-python">//览器窗口的内部高度
! z: t& V' M" n" W/ |0 swindow.innerHeight
% w+ x, S3 q& f6 ?! r" J) A4 e7067 I5 k. M: t, f8 m* j7 |0 U/ t3 W
//浏览器窗口的内部宽度. K  ~  i( l% U  M! n0 L
window.innerWidth
7 ~7 u- J2 m7 U* p5 h/ I1522
& q- ~' r1 h% Y8 \7 b! A// 打开新窗口" G4 ]( E0 q# I. q" O3 h5 Y7 W
window.open('https://www.baidu.com')$ A0 n! S1 ^& m* j, l$ b! x$ ^
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}4 G! @: I1 e: E0 D
// 关闭当前窗口
8 H- \" H9 T/ _! L& U4 lwindow.close() - I3 ?7 a2 }  n, C: \+ D' ^
//  后退一页
- M  k4 A/ K4 Y$ \window.history.back()% d& Q8 s+ u3 ?( p% O5 V
// 前进一页( R8 v5 Y" X% h- w
window.history.forward()
1 f/ i9 Z# t9 h1 V* J8 E6 l5 D//Web浏览器全称( }5 p0 q. o9 g3 k# z1 `' [
window.navigator.appName# t# {, b+ J( E$ `. X9 `
'Netscape', v2 W* B( U: o  W) Z  F! `9 d
// Web浏览器厂商和版本的详细字符串
+ y$ a- T; ?' y. }$ X& wwindow.navigator.appVersion
: l! ?) y4 h3 C: ]# @'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 a2 [6 l: F$ p: Q; ~) ~, ?2 c9 R
// 客户端绝大部分信息
* p! G2 J2 ~8 Dwindow.navigator.userAgent
/ ~# v+ i: S5 K; x'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 {) f2 o& B) h1 _// 浏览器运行所在的操作系统
! X5 u& N1 }9 \; L6 z- u& F5 d7 ?9 Lwindow.navigator.platform6 _! n5 a8 P" E, k; A
'Win32'
7 V# |6 }/ G/ b# ~5 G+ e# E( N  p: L' q/ c6 m. j
//  获取URL+ T( H! J9 F" r5 b/ q. f7 [
window.location.href
# Y6 r- h: J9 D0 A* b  ~// 跳转到指定页面
+ d) o+ W6 v, y: O# Y- A5 owindow.location.href='https://www.baidu.com'3 U) P" b* ?% |' _/ k* z
// 重新加载页面
: c+ J9 `9 n% K& dwindow.location.reload()
9 x% e/ L3 i7 H1 w! ^</code></pre>$ ]8 E2 u* o8 x* W9 E; ~
<h3 id="32-弹出框">3.2 弹出框</h3>, w3 N+ j, L. A1 ?
<p>三种消息框:警告框、确认框、提示框。</p>* B: U6 J5 b/ y0 Q: u; p+ n; O
<h4 id="321-警告框">3.2.1 警告框</h4>
# ]3 g7 F/ ]1 j  L  P0 U<pre><code class="language-javascript">alert("Hello")7 u2 I+ D) E6 V4 [2 o
</code></pre>
6 c6 S7 H' w& p& B/ w% Q) E3 `( q<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
, x8 F* c6 q# O: E. A<h4 id="322-确认框">3.2.2 确认框</h4>! J( P" Y  z9 `  O, h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
5 F0 i1 M9 H9 r" o& b* ]0 q; B, t/ @& c+ n<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true* Q+ v: G! D( y; {' l5 I/ A
true
- I# u. f( Y: p/ I- O+ ]( S&gt; confirm("你确定吗?")  // 点取消返回false
9 {) e1 }% Z, `$ b, `false
) B* J* @# ?$ ]2 q* R. p3 U</code></pre>  ^" {0 y; }0 U2 s, V% J. G) u$ L2 p
<h4 id="323-提示框">3.2.3 提示框</h4>
+ N' k, @$ K- j5 v8 V<p><code>prompt("请输入","提示")</code></p>) y1 `8 ~, T  j5 }" H
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>8 W9 g! K" T5 b( l+ D% W) r8 b
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
1 W6 V1 Z; ~! h- j$ T4 v' i<p>如果直接点<code>取消</code>后端收到<code>null</code></p>2 W6 w' b  z8 u' q8 z. P
<h3 id="33-计时相关">3.3 计时相关</h3>5 h7 K: c; C+ v* d$ _; B6 }
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
! C1 `# |  \% d/ _) G6 U$ i* z% n<pre><code class="language-javascript">// 等于3秒钟弹窗7 k1 ~( Z! }" I% I- w7 U
setTimeout(function(){alert("Hello")}, 3000)
* ^( T4 j. w+ ]7 c) f. a* ]6 W) [0 X7 J% b; I
var t = setTimeout(function(){alert("Hello")}, 3000)5 r# f* a) m* h: q$ l) x
7 ]; w# x' L6 V9 d7 m
// 取消setTimeout设置, V4 p$ }7 @1 Y: [
clearTimeout(t)8 d/ q; o7 \+ g! j, b
</code></pre>- u2 I: u$ d2 b" c/ n
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
* v* N9 A. r3 w: P/ Y7 }6 I<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>5 U  x( d& X5 O( O  u5 l7 p
<pre><code class="language-javascript">每三秒弹出 "hello" :8 ?  t! ?3 B  D. f% D0 E# ?4 _
setInterval(function(){alert("Hello")},3000);" R% p: O; C3 p8 i3 L
</code></pre>
: t* j3 P5 X- f& U  \% w1 ]<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>1 a) s- G7 w9 I* Q) P% i
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);. }5 T# f, x  p  H+ Y/ [" M5 U
//取消:
/ E# w( A- ~5 `% [9 ?3 cclearInterval(t)
2 C/ R! ~/ c) `% ^6 G' d</code></pre>
7 I# d9 o& @' C/ X# F. q5 u. S* V/ n0 L4 M
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-3 02:50 , Processed in 0.072674 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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