飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

2 k9 \: t8 `+ F4 Z<h1 id="前端之javascript">前端之JavaScript</h1>% d8 }5 ^2 m8 B' Z! v
<p></p><p></p>8 [' i  o2 C. j/ e
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
% Y, L% c  ?) E; B0 z- p  g<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
1 x8 r9 U' d% i3 @: P它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
: e0 I/ t5 M# P! m. ~9 j它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
7 P  w/ ]& x$ P  ^% F/ W8 y它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>+ \* t/ x" P" n1 i# s, \% N+ s
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
' b- f1 V( q5 ^7 j<h3 id="21-注释">2.1 注释</h3>7 B& g. e# d( T; W( y/ a/ W
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>: j! d9 E$ b7 z* U; {  S
<pre><code class="language-javascript">// 这是单行注释8 V0 {( {5 ~" G$ N
2 G+ O- X: d, x4 x8 n' h
/*
8 D% o! \6 G& @( N这是多行注释的第一行,! M; Z7 A( d$ \3 ^  F$ G
这是第二行。
: A+ z" ~$ u2 `7 V- G*/6 F( x5 s  y8 g( L# Y
</code></pre>
  ?6 b! |* p. X; _0 f6 _<h3 id="22-变量和常量">2.2 变量和常量</h3>
$ }; {: w4 }6 b9 |<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
! R4 q& O+ x( t; r+ u; P0 H<ul>8 h+ v, U' s' `  W& Z
<li>变量必须以字母开头</li>7 y/ {8 L0 e$ x' ?1 A
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>+ l8 A, c& i$ ?: ]: i/ H* Q6 e  u
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
. |. n1 u6 m- Z6 z! c2 u3 C) f</ul>5 M6 w7 u( p1 V& h! \* @8 E3 h' c
<p><code>var</code>定义的都为全局变量</p>5 l7 K+ I* P1 J2 r
<p><code>let</code>可以声明局部变量</p>3 T$ t& |5 }2 T# e/ J& e" J; u
<p><strong>声明变量:</strong></p>
1 Z6 U5 l* y$ k! v" s5 [<pre><code class="language-javascript">// 定义单个变量
! ]" L& u3 U, Q1 I% b8 P0 i&gt; var name: C: I3 P; F* w4 A
&gt; name = 'Hans', \* u% c7 v" g# [" _' ^# O% q
//定义并赋值
; u2 ?' l1 d) W: o- z; c&gt; var name = 'Hans'
# [) [# h6 e( g- k( d. j$ ~& p1 g&gt; name4 m* ~' K. j4 r) T0 R+ u8 r
'Hans'- q( a* Y2 c+ U. V- u# o$ V* o

8 f2 j1 W2 w- r( Q0 y5 g// 定义多个变量$ i- v: E% T# `5 Z' S9 q
&gt; var name = "Hans", age = 18
+ D+ t' p  z5 c&gt; name
$ e$ c, z! a0 R. f'Hans'9 E% O) C/ Y5 b7 o7 F4 i
&gt; age
) d6 A% J6 Y* O  M; [184 @/ F5 a7 X4 c# A$ ?

8 B* ^' L4 H1 u1 t* K//多行使用反引号`` 类型python中的三引号
+ {5 `3 W% ]' ^% |# P7 Y&gt; var text = `A young idler,
- r% J" l" ]7 e7 Can old beggar`$ ^3 C1 I" L3 o" u( I# O
&gt; text. ~: Z+ \2 N! o( \; g
'A young idler,\nan old beggar'# N7 R, h7 T/ U$ ]) Z! d! V
</code></pre>
0 K, L3 B7 i5 M* l$ ~<p><strong>声明常量:</strong></p># I. q3 y. u8 w
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
. x# N6 a4 E$ h<pre><code class="language-javascript">&gt; const pi = 3.14
8 @, z% ]" [8 k6 U! W&gt; pi/ p$ w3 T& e7 T' j$ z2 Z2 `6 }, W
3.143 \6 Q" E- w) g6 W2 H# o
&gt;  pi = 3.01, s$ X5 p1 z  u! q( k0 c
Uncaught TypeError: Assignment to constant variable.
7 m: o! R) F- J8 p! r# b; B1 G    at &lt;anonymous&gt;:1:4
6 Y; j( z) q8 [: W; l# H+ [  p1 H6 H* X
</code></pre>
# i. x; D; [& K" W<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
, c8 `5 j- l3 v7 @$ d/ n/ G9 {<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
8 f8 g4 ~- Q* O! J6 y9 I<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>/ c) ^1 U3 p8 ^6 V5 |0 E0 c
<h4 id="231-number类型">2.3.1 Number类型</h4>
$ Q! p' C% G: B/ H9 [, t<pre><code class="language-javascript">&gt; var a = 5. C1 j# z: |! E3 s- G5 [
&gt; typeof a   //查看变量的类型  5 j7 p: u/ {  u' f  I: Q8 n
number
2 V" v- u6 A- j9 o1 d5 ?
! _. H* F' R# L5 ~. I5 ?$ I* Q&gt; var b = 1.3
+ D' y5 g* a9 x&gt; typeof b
8 |! i/ g( q9 \* x3 t5 V/ w; l! bnumber2 D9 \; ^# |) ?" u
/ ]3 H  k7 Y/ b1 X8 ^, T2 X& o
// 不管整型还是浮点型打开出来的结果都是number类型6 T  }# B+ i* E; e( ~3 c" D

7 t6 p+ I+ D+ K5 P- a0 d: W9 o; M/*1 [+ d  l2 d$ m' x5 A7 R8 B+ V
NaN:Not A Number
& A+ }1 O9 t5 S. T8 B7 e$ Q  W+ PNaN属于数值类型 表示的意思是 不是一个数字
) W' f6 R; N: L$ P*/5 a/ I9 ^! b) f. ]' l1 \# C

; F" J# y( y2 U# `, S  H: lparseInt('2345')  // 转整型
1 f( o1 o; r% F* t! A: |2345
: n! l( I( l0 E. L- i! s; c. yparseInt('2345.5')
. Q( F9 a: W# l$ E2345
! ^5 o, r3 [3 R0 Q1 QparseFloat('2345.5') // 转浮点型: {: E& _6 A  n
2345.5
. O) f% G, Y" A3 `, F! v3 cparseFloat('ABC')
. p+ k5 J. c) w$ Q3 Z  s' u  pNaN
4 P8 m% n! s6 T1 J# yparseInt('abc')
6 W" h  z/ G' M4 R3 ?. B( O: NNaN
& k. z7 i* S9 S$ a" ]4 E5 T' |</code></pre>8 e5 V7 h9 l+ {; \4 L0 G. B
<h4 id="232-string类型">2.3.2 String类型</h4>
6 \/ o2 K2 O3 ^# M5 P4 }<pre><code class="language-javascript">&gt; var name = 'Hans'
- q$ Q& C: O, `+ j% G  V/ S+ p&gt; typeof name
8 e# ?0 b, _4 z" ?8 h5 h% ^1 v5 A! W'string'
5 E# B6 j/ k, p2 G  V/ E; N; @
7 Y7 E% a( I) w* l: c: ^2 D- j//常用方法
+ A" F' }9 _3 s2 d, p// 变量值长度+ ]5 C! E. H( N! T/ l
&gt; name.length0 @) \/ E' B" F0 a& b
44 O$ d" f( D$ A  t, z* X$ Q
// trim() 移除空白
1 D4 _/ n( @+ @7 Q& q&gt; var a = '    ABC    '
8 {7 P% S) a6 }5 @&gt; a
/ p8 l/ M  e  w7 ?'    ABC    '
7 r! R% S9 d0 J9 w% {&gt; a.trim()
) Q0 f6 C. F! n  H7 b'ABC'
$ B$ J7 P5 X1 @) S* l* g) m! M//移除左边的空白
2 n, Y0 a' Q) b&gt; a.trimLeft()9 S. [0 [2 Y- ]7 e4 ?9 {9 \# b
'ABC    '6 s1 I) e) a* \0 b8 r
//移除右边的空白
! @6 p# Z6 H# ?* ~( i9 X&gt; a.trimRight()
. Z8 n- R9 U; v'    ABC'1 @9 \0 _( u6 ^& m/ f
- v" Q9 T, Q9 q3 u$ ?6 ~
//返回第n个字符,从0开始
8 j$ b5 `, Z$ T6 @$ ^9 ~8 A3 g% K&gt; name9 M& b% O/ [& P$ h; a9 R9 G
'Hans'5 F4 J$ H9 {" B" O- y3 Q) H% e
&gt; name.charAt(3)
$ N: e& N' h& b1 c* `. n's'3 [& Q8 n# T0 Q2 P; I
&gt; name.charAt()/ }  q( H0 z, M6 r5 X
'H'
  g2 \# t; `' @& K- D&gt; name.charAt(1)+ E6 s% C7 G6 ]# |+ Q% Q0 T
'a'
6 I/ t8 o! Q$ s3 r$ G/ i. ~7 g3 L
// 在javascript中推荐使用加号(+)拼接
) L6 F1 I% }! ^5 q0 A6 t" k% k&gt; name
8 v7 M7 y4 V! o: Q9 M/ U'Hans'0 n6 `; p6 F" s4 J
&gt; a! A" e4 m0 {& N$ T' w
'    ABC    '
; Y% y" X, L. k6 m1 N) m&gt; name + a
5 F: b, S9 E, E5 j6 X: X4 G& C0 {'Hans    ABC    '
8 }) M) c1 _3 d5 u' @! r( d1 ^// 使用concat拼接6 H( y. c! i& v0 ?* C1 {
&gt; name.concat(a)+ Q9 |5 x( v. T3 c4 W  Z
'Hans    ABC    '
: L( n9 x$ @2 |! j) Y% D; _! I
//indexOf(substring, start)子序列位置: n; Y' H. }# j, G
% N9 V5 A2 H# R
&gt; text
" G: F' H  k& \% J, z  d  n'A young idler,\nan old beggar'2 t! y$ g* N6 j8 @
&gt; text.indexOf('young',0)
7 t3 n& ~6 k4 A, @+ o. k! y* k27 r  M  u+ z$ X/ f* J. N

! ?. a* Z+ @1 D6 ^//.substring(from, to)        根据索引获取子序列
, y' a/ \0 y; k) _4 ^&gt; text.substring(0,)
4 ?" I* F' r) X'A young idler,\nan old beggar'& K0 K9 w/ d  D5 z! o- Z
&gt; text.substring(0,10)- f+ U; k1 M( B; U4 H5 v9 w
'A young id'
  Y- L* {% W5 G" e2 v7 Q  _) L( v' ^9 @8 A$ z8 a
// .slice(start, end)        切片, 从0开始顾头不顾尾
- ?7 S6 `5 ~$ y! @) R&gt; name.slice(0,3)
3 ~- v) ~' v; g3 U9 C; F' v8 k'Han'
; A) r9 a6 I" r# f* {
/ ?2 k$ L7 }& V! v- Z6 R4 c2 f# \! r// 转小写2 @$ \% u6 Y) J  g. \# q6 ~
&gt; name
' V8 I* v0 }7 S9 _5 {- }0 f/ ]'Hans'- m8 v6 j! M9 w2 D! a5 [
&gt; name.toLowerCase()
0 L" o  S7 q) U" `- r; b# |" U9 {! L'hans'
% D1 B, A. [: R3 `// 转大写
; g: B9 X1 r) t, D* p&gt; name.toUpperCase()
, u( n6 J4 T0 W  }'HANS'- s2 R# g2 [+ W2 |3 h+ u

; [2 a# j) g) |8 N" K6 s6 G// 分隔2 U/ z* R4 h+ k8 c
&gt; name0 _; [& v7 J: f* L2 T
'Hans'5 y; i% e9 Z" j$ S1 s' @) a
&gt; name.split('a')  u  X) K/ z: W: p6 p) d* Z1 B
(2)&nbsp;['H', 'ns']
, t& k% [9 O" s$ m9 O8 ]4 t( X</code></pre>
5 W8 @3 n: m' t/ c" \5 n<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
; c* `  Y: M% S2 }<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>! b5 X7 G: \* r, c: ]' M
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
- a1 _$ n! h7 C+ x+ K  `# F<p><strong>null和undefined</strong></p>) b; Q  p6 _# z+ S5 l
<ul>/ {! n7 S, n( b0 u
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>* d; \( _* |& X0 V2 c
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
/ K6 `' B4 o7 o& U8 ^# F# b</ul>
  ?+ _! D0 N! w8 z1 L! V! A<h4 id="234-array数组">2.3.4 Array数组</h4>3 L* q4 J$ B: Y. e5 T
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>$ }2 v6 M, v* V
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] , g, H3 a9 O# c% C* V: E4 n/ C
&gt; array1, g, d: q5 z, _% }4 `  z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, n" {$ ^7 |5 R+ ]* A&gt; console.log(array1[2])  //console.log打印类似python中的print
' h: O  _# {; k. E36 Z  g% I- ]# Y& u5 ^1 _# T
// length元素个数& A7 ?3 M, H! l
&gt; array1.length
: [5 y4 N2 k' }  i: n6 |! L3 f& ]60 x! N' R7 v  N0 n  I! U
// 在尾部增加元素,类型append
/ b( Z: V& g! J) @8 z&gt; array1.push('D')
' L; n* e6 v7 x, C: |* _) Y74 U; I, ~+ _+ k4 G# A9 N0 S% f
&gt; array19 ]* C  B2 g2 r- {
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
+ p& l# q+ L3 c$ }# ?: J// 在头部增加元素* ]( w8 h$ o- p
&gt; array1.unshift(0)
# w( n4 n% X% X4 g8
) J7 M& G" ^0 `5 ?3 L( B7 L&gt; array1
- e! `: ^' u) Z* i+ _! D(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']2 P; ^  E" t& X- @

+ m, g8 t7 i" D+ ~8 t//取最后一个元素
& n& f! J# r. z&gt; array1.pop()
3 T% |% n6 m0 b, F'D') V" Q$ |7 S' r2 |4 l- B' [  k
&gt; array1
7 ^% M9 ~6 c8 {$ v(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
5 r  ]  e7 d4 E0 [- {1 @7 v" U. H//取头部元素
2 g4 C  W8 W8 z1 v$ _; F5 C&gt; array1.shift()
% J3 n" f: D- u& h* W5 O$ J0
2 l- X2 B8 T* n* M&gt; array1: L* n6 M* T' I. ^) G
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% i6 F+ \, G7 ~2 V9 {* e0 ?
% |( E+ [7 Z9 [. y- ]6 F//切片, 从0开始顾头不顾尾
( d: M$ S5 M; w&gt; array1.slice(3,6)& N5 f# x8 p. K1 b4 w' W
(3)&nbsp;['a', 'b', 'c']) m4 w4 h) U. D3 {6 k! M
// 反转% S, Y8 F4 A; r  l3 J2 Y0 C% [
&gt; array1.reverse(), |: a9 ]7 d7 D4 y, C
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
) g- t* q; B" E2 F. G// 将数组元素连接成字符串
# S- O8 P8 M, B) R, A) V9 f&gt; array1.join() // 什么不都写默认使用逗号分隔5 Y& t' H2 E4 o4 [
'c,b,a,3,2,1'
4 [- ?' @/ `8 H5 U+ D  t! F0 V" X&gt; array1.join(''); }6 @9 S" I' j& q" b9 G
'cba321'
) j- n* e' `! U; H&gt; array1.join('|')
; g3 y! Q. f8 q9 [4 c'c|b|a|3|2|1'
% {' c( h7 J: ]/ \: K2 l) W. e7 f8 x$ E4 s7 C: M
// 连接数组3 N% I" [3 @9 U& L  _+ n5 J+ Q
&gt; var array2 = ['A','B','C']
7 B) J5 {" U2 y9 T&gt; array1.concat(array2)
% p: ?! M, ^% p# N% ~  `8 \(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
, c+ ~  j# d" g0 G. j' G3 Q& Z9 B* L/ \; k1 ~* j1 `
// 排序: d5 z( @7 L7 \2 P
&gt; array1.sort()
. s: c, U8 q& i+ N1 _* e(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- t* u- E7 |( y5 |* t$ q5 e6 {% V/ v. u& x, w2 `" f
// 删除元素,并可以向数据组中添加新元素(可选)# @$ _7 |$ v, d0 w; {
&gt; array1.splice(3,3)  // 删除元素9 ^$ f3 F, m) X/ l; R# x
(3)&nbsp;['a', 'b', 'c']
  s: S: T$ Z! L3 M3 w$ |& h&gt; array1
: o7 M. K/ K+ j' Q2 \! E(3)&nbsp;[1, 2, 3]( \/ V0 Y* K. c, o" G9 N
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
3 u) N5 M7 P8 ?. J8 T[]
: n/ S- k7 |  v% R3 ~&gt; array1
  o  V* w3 L+ @/ P- ?(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
: q/ s- o0 `& u, o: d: e1 R
  ~+ B! U  _6 m  I* U/*5 v4 y3 y6 o% o) C& g. K3 _) k) b
splice(index,howmany,item1,.....,itemX)
5 Q) _; _9 l- h9 gindex:必需,必须是数字。规定从何处添加/删除元素。" T0 U4 `- [; Q( ]
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 s$ U3 S- O% ^- L* _4 f3 p( w1 S" E9 P' m( s
item1, ..., itemX        可选。要添加到数组的新元素
! D0 z! N( L3 s4 D; }*/# J5 @7 ]* h9 z$ b2 v" B' t

# |+ T7 e  n% J* |/ p// forEach()        将数组的每个元素传递给回调函数) u( O# C, I$ v6 \, F
&gt; array1.forEach(function test(n){console.log(n)})6 x8 p  w* _0 V; Y
1* t- N+ S  w& Z* `) F$ A
2! ~3 g  \6 r, S
35 |) {" e/ v: N
A
5 c& @3 n" Q: @0 v' K B  W6 g2 G; o& C! g9 `
C) b( Z# R' e3 \* `& W' h
// 返回一个数组元素调用函数处理后的值的新数组
6 g& f" i0 d1 v3 Q&gt; array1.map(function(value){return value +1}), ]- B; _" G4 P4 W! H" A( B# f2 ~
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']; D1 G+ @- O: z# m* o( \
</code></pre>
' p  l0 i* B% ?" p$ m<h3 id="24-运算符">2.4 运算符</h3>
$ g4 K4 y( {, F; J) P) N' P! S4 z<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
. T5 ?/ Q! p8 L& `2 W<p><code>+ - * / % ++ --</code></p>
7 q3 X! a, g* ?* [  R<pre><code class="language-javascript">&gt; var a = 64 X7 D3 L4 `9 T
&gt; var b = 38 Y# ^: n/ k8 n
// 加
' i* G3 y8 ~+ M! a. X( e; e9 N&gt; a + b
/ b- |- a, v' o8 @9 C+ t& h+ ^9
0 H/ B$ Q2 t6 w3 T# _6 O// 减
3 ^2 [) C/ u- Y' ?2 B&gt; a - b: K% F. z8 j  L" J* b
3* L  g7 d# \0 i2 G" ]: w
// 乘
6 U0 W* J0 J* ?1 z&gt; a * b$ ~7 v& B) _8 L) f
18
7 M! _2 b8 e; f! ~& m! u// 除
: l( I2 `! b$ p7 V&gt; a / b
6 X& e4 H7 W: R& A+ L2
/ z  t; x2 @, U# b5 U4 Y8 c// 取模(取余)  O  W! z: k; T& E
&gt; a % b
, h( \' a9 I7 I2 h9 a3 A0& K0 R/ D3 m4 l! p
// 自增1(先赋值再增1)+ E" u1 r  D: _+ M
&gt; a++
4 k& h) @5 A3 D. \/ x* ?# E64 o* j8 u7 \, K. d, ]: l
&gt; a
  }: y( x* K6 ?7  b5 K: D4 e# Q
// 自减1(先赋值再减1)
7 d8 w  T0 P9 M) p& r  G&gt; a--4 h; }( W& I( @# o' m) @
7
. _4 ?8 }3 H7 ~- d& g7 t8 T&gt; a9 y: ~+ h3 v& h& b
6
0 z9 Q- X4 G: W3 R- P9 ~// 自增1(先增1再赋值)# ?  D- C* H" G+ q
&gt; ++a
) \' x3 P" `; s3 P. I+ s8 j7. ~. S, r" Y0 g% L9 @# N( Q
// 自减1(先减1再赋值)
7 x% F- n6 y4 {5 z" k( Y8 m/ I&gt; --a3 q4 V8 Y' f0 ?6 o( Z& L: b
63 T3 L7 h+ Z7 v5 C$ |/ K* u
&gt; a
/ H1 Z6 z+ `) g) |, V$ v0 T6
! n5 K- T  l' P0 G* t$ o# ]* @# V/ S, @# R" A) t
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理' q! o  |# m( J& O- r1 ?
</code></pre>
. L. ]. j6 T2 j  z! E<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
9 ^9 d5 U" H4 |2 I0 \* a<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ i. [# t# V5 C2 Y. B
<pre><code class="language-javascript">// 大于4 H8 z) x1 T" R+ T( e# r# z" a
&gt; a &gt; b  Y. h, f, q) a: C3 C1 v
true
" G; R; T/ x! L) Y+ u! _! [8 l5 w& K// 大于等于
2 }; g! O% g$ I2 y5 Z, _&gt; a &gt;= b% |& P3 \9 G, ]8 R. n, I
true
7 Y7 _5 S5 K5 ~; k' v// 小于
) i3 r9 D* w+ e. n&gt; a &lt; b
2 R8 g, {. {5 P- T  ~false2 _2 d, _2 u! H2 l
// 小于等于% N; c" `' Y0 `! \( v
&gt; a &lt;= b
0 D, ]8 f& I7 t: n! J! }false2 n' C! D& B9 h4 ^7 R
// 弱不等于  P6 \7 ]- O2 L, W
&gt; a != b5 w3 X3 [9 s+ K/ m7 }
true. }+ M! |0 E' T- N5 J# Y5 |9 i
// 弱等于4 X1 _; n# a2 `
&gt; 1 == '1'
- U- {0 O3 m8 c1 k* o$ h4 \- ]true( Q9 Q$ U: c( T
// 强等于
8 e" f" O$ B# G&gt; 1 === '1': X6 D& |* P, Q9 Z
false
& e* I3 O3 z  W$ k5 J! l+ {, S// 强不等于
; `7 ~2 v' b1 e$ o&gt; 1 !== '1'
1 ^0 S5 t9 o5 @4 G2 Ctrue
+ L8 y9 d& e7 u/ L
  N0 {; K+ Y* ~- X/*
. w. v. J4 a! A( eJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误$ m5 g) K  f* D" B( L4 d
*/* U2 V% w1 X. n7 H) a2 F2 L
</code></pre>
+ |. T6 `1 g. B+ e/ M8 f( ?<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>* R6 J& M( C: N' g. _9 H! B
<p><code>&amp;&amp; || !</code></p>
2 |8 a$ ~. h: f8 s<pre><code class="language-javascript">&amp;&amp; 与/ a# w+ J3 h6 M: I
|| or
' z6 T- k" v5 y- h! E; P2 Z  x! 非- F  b$ `8 l0 @/ m
</code></pre>
( }8 l, [) C) i- K4 I& f; s<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
$ r8 _) }7 e" q( s9 p<p><code>= += -= *= /=</code></p>3 q: G+ c- T' z  Z. R" |) W" w
<pre><code class="language-javascript">// 赋值% [7 w  ~) _* |5 Q
&gt; var x = 3
9 c5 ~) |+ \# P0 F: ^$ b8 J4 G// 加等于
6 L1 K$ }/ Y; F: r- m&gt; x += 2( @9 I' ]9 j  l2 V+ x, \
56 L% O; \: }7 g( f% Q
// 减等于
' P5 P2 F: _# S1 `6 d8 M&gt; x -= 1
! M+ z- Y/ H4 M6 X2 H4
. J. B' }2 Z, ~1 y% B% K1 k// 乘等于, m! S% C9 y0 S* k
&gt; x *= 2
$ J# }& a3 f; H$ D3 c8
0 [$ W5 D$ W2 ^* Y// 除等于3 f1 `: o, ^' S  D+ W; Y/ c; b
&gt; x /= 2
# K$ o" G3 B. b' [4- T5 H" ~1 b" \- B9 E) s: x. X
</code></pre>
2 r6 p9 I$ ~$ _# b/ v- {  ]" e<h3 id="25-流程控制">2.5 流程控制</h3>
4 i) h! W. }  F: l/ B) Q<h4 id="251-if">2.5.1 if</h4>, S: W0 o: J# y  Y* T) q' ~/ N
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}! q* d0 `1 y# \/ ?& A/ L
' d( n0 C+ A( O0 p3 r) b
&gt; var x = 3
; @6 E5 W7 z* o&gt; if (x &gt; 2){console.log("OK")}9 a7 `4 C5 p6 C4 e' I' j
OK2 _; P/ Y# P( d3 d

' P7 v! e+ K* o8 l# C2, if(条件){条件成立执行代码} * w# \. {  Y& J, X* g, s
        else{条件不成立执行代码}# \5 ?4 [* N  d" h* ?2 V

4 x7 Q  k9 V: b$ O&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
7 `6 `  _2 \  s- k0 K0 C- a'NO'
4 l, t& R9 I( s* Z
- ]8 r7 l2 j: R; {$ E) p4 n3, if(条件1){条件1成立执行代码}
8 d" `# S' z- |* @! A        else if(条件2){条件2成立执行代码}" ~5 N" v/ y; q
    else{上面条件都不成立执行代码}1 ^$ y1 N9 ^$ k% J. h* o
5 N: V/ j" r6 r2 z1 f; u
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
9 _% p7 m0 e( X$ V Ha
/ {( \& i* X% k: i" C8 ]' h9 ]</code></pre>6 J* R( F9 @% @: t
<h4 id="252-switch">2.5.2 switch</h4>) N3 k, ]' h3 B: c% r7 G
<pre><code class="language-javascript">var day = new Date().getDay();
% |' u3 S" m# r3 Qswitch (day) {; c* o. Y8 Q( y' j& \) i
  case 0:
& |* \& \! s/ Y8 v1 d% z  console.log("Sunday");
) h' N" r4 K2 V) d" l5 E5 Q3 k5 ]3 r9 l  break;
) F- e; A7 l& @1 |7 h  case 1:
7 J( r0 w0 d6 {& c. j1 U+ F6 g  console.log("Monday");
3 z. F: L* F! h: O4 ^9 Z+ f& e8 e7 n  break;
8 U; }4 C+ ]+ R6 @: |default:
( g  |; ^: J6 i3 |( ~$ Q/ B  console.log("不在范围"): _2 j& R- L! z  B9 @1 x( l. q- q; @
}
- j& A8 r5 V, h8 a; D. b 不在范围
5 R  m6 M4 z4 f</code></pre>( A. k+ }! ?* e; _4 f
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
! t- w6 v! c, W<h4 id="253-for">2.5.3 for</h4>
% u* b' n, W$ r* [( y<pre><code class="language-python">// for 循环
( p; |: `1 G9 X        for(起始值;循环条件;每次循环后执行的操作){
. n2 X, _+ b6 q7 T! }+ G; j        for循环体代码
! i) n7 {" X/ T; y/ C8 Z! ?    }' [8 h# H1 i( l* e) M; p$ P1 {& N% y

- s$ {0 V! i( W. Jfor (var i = 0; i&lt;10; i++){) Y+ N% q$ P2 u; Q% ~( a
    console.log(i)9 l- `  m) l3 y2 M4 X
}
6 p% d" r- Q6 F" H& t; j3 M" l        0) o/ ~& ]9 d' p! d( A  X' A  r
        1; I' {$ ]+ v! b: s1 B2 A# B' Q
        22 a, K/ I" L7 `1 I" ^2 A
        3- S1 `9 K. u( G5 V
        47 Z0 r, E% r% Z7 S4 j8 f1 S7 d
        5
8 b( O6 |7 o$ b& T        6
1 o: @9 H$ a% Z4 |# T        7/ L% c! a& e9 ~- c
        8
  s% K# [! t4 Q! J, ?        9( S) K! N% ?- |, Z; q8 J
</code></pre>
# ?9 O2 X& |- Z<h4 id="254-while">2.5.4 while</h4>! b' C( Z) ~/ j" I1 u
<pre><code class="language-javascript">// while 循环1 w& V2 K7 Q# x/ K4 w
        while(循环条件){
) t& P' c0 w% l& \  x/ ~        循环体代码* U8 G/ h: z7 D
    }
+ k7 O& {, u/ I. X4 s" p- X8 h* r/ p
. A' Z! O3 S+ `9 I0 N, i& t8 ~&gt; var i = 0
4 Q- C3 r. b# m% _5 W+ t&gt; while(i&lt;10){3 P# M" f- H, {5 ]3 m
    console.log(i)6 W+ U7 D) ]/ w  K- h
    i++
4 x# T9 `$ y- \}* q7 u/ D/ ~+ [* ^. e% E$ q
0
4 k6 C2 B: R2 {+ U 12 ]' H% `$ l: W3 q9 g. N9 y
2
) H3 r3 \* ^6 F( \0 r) Y7 H 3$ |( {9 u6 m7 Z' [: h) i- [' n
44 }8 I# w& a' Q. Z, C4 l
5. Z2 Y# Z4 ?( x0 I8 p( Q
6
- ^! b. I1 s/ P2 ^. e5 y5 W- A- p 72 c" K4 w5 D# C. y, i7 C7 a
8
/ b4 b1 Z' ]/ o. q/ \/ Q6 H0 ~ 9
- F5 q0 j6 _& K. r</code></pre>
3 W/ F# K6 }8 ?. {4 Y8 ~<h4 id="255-break和continue">2.5.5 break和continue</h4>
/ C; _8 f: N- T: ]/ j4 E: x7 u<pre><code class="language-javascript">// break5 @7 V8 G# }8 T+ [, X) U/ D& w
for (var i = 0; i&lt;10; i++){' G: J- [- {8 t0 d4 }
    if (i == 5){break}$ O3 m+ W% f% c0 _8 B, @
    console.log(i). E4 f" Z! \  `; ~8 }4 r
}% X8 ~  e) b0 {- G8 S- b
0
! t4 A! ]! J7 g: e1 y 1
% p; m8 D3 P- H 2
) F  D5 X2 [1 S 3' a: A  C6 J8 W6 D2 @- e3 w
4" p" D( L/ X, |
// continue
) X9 B# e! p4 E: L# p( D3 nfor (var i = 0; i&lt;10; i++){( c7 O/ u$ e: ^% R! r( h" w9 ?& |
    if (i == 5){continue}$ u1 z" v7 q1 J4 m6 y) y
    console.log(i)# \5 S- n/ t/ @  \! \) H
}
1 s- i8 [, H5 w; c9 _2 |" |+ \ 05 W9 h6 J! D% ]8 A7 o
1+ R5 R! @9 N4 p/ \/ X
24 A2 E+ V4 h) K* A4 O* O) _8 j' ^
3
0 \# `1 P0 `. b; a( G* @ 4
# X, m6 x4 @# d5 ^& W: b 64 b5 F5 |8 H2 j
7
* C9 C) z5 d" `% a9 h6 W 8
) v  }  ]; z0 e1 q$ P! @' e2 A 9
7 H; c: u0 {  g- w6 D8 [  `. _$ |; D
+ X, N8 U1 U* x! ~</code></pre>
! b8 u5 j6 w, n% A# z<h3 id="26-三元运算">2.6 三元运算</h3>7 X4 ~* K1 ~- P7 [0 ]
<pre><code class="language-javascript">&gt; a
6 U1 w, D6 G. i) `- s6
: l' E/ o  Y- P/ \# @2 b" c! F&gt; b
5 h" g; D. O5 Z/ N3 \3
; D7 W  {  }' d; ~7 K; t# r0 ^" w5 g
//条件成立c为a的值,不成立c为b的值
7 i5 w6 V$ f9 b9 M$ {&gt; var c = a &gt; b ? a : b
) O" {( r" y! @: I& H$ _&gt; c0 F. T1 {9 \- e4 Z7 w* v
6
4 B+ t" `  H& [' O: `+ i+ M- h9 x7 `; \# x
// 三元运算可以嵌套
) L- k- E( b8 \</code></pre>
. H1 f5 r  m9 _' G8 y" Y7 c$ Y# @<h3 id="27-函数">2.7 函数</h3>% i. r' D; b7 f8 L( p: w# n7 e
<pre><code class="language-javascript">1. 普通函数
5 V% v- @! c, S; R&gt; function foo1(){
9 S* A: S, Q$ E" d    console.log("Hi")
2 @' w5 C/ e# [! a}/ N- m( m; B  p: g0 m1 \4 u3 q
- C& ^- O9 b' [1 C* Q, j& d) l
&gt; foo1()
2 ^9 n. g1 H" E        Hi
  d8 Y9 W" K5 p2. 带参数函数: N. w9 t2 m; I% L
&gt; function foo1(name){
$ g6 S5 p4 T! H$ rconsole.log("Hi",name)6 \9 N" d" H! j5 S# ?2 k4 W( i
}
5 J; v8 F, P5 p  a: W9 K3 Q$ H2 m/ C) L$ {9 n' D3 d
&gt; foo1("Hans")
% F2 D- x+ T) `! I% l5 z4 xHi Hans
9 n8 O3 C8 d& S) J* B4 j- {& r! ~/ Q. b- T4 B" q
&gt; var name = "Hello"
; v# J$ T/ f1 T&gt; foo1(name)0 z3 i. E  N, D& c; l
Hi Hello, }! U+ o: J3 ^4 y/ X
7 E. e0 `( F0 L# Q4 P& e
3. 带返回值函数1 w- R$ f4 A# n  U
&gt; function foo1(a,b){
7 }3 }' r0 T, H6 @        return a + b     @$ s# P1 r* Q
}3 t6 F4 k6 p: o+ s$ l: R4 u
&gt; foo1(1,2)7 y1 l; z# |* f3 ^
3
2 A5 G. }0 C, o" B# p. L&gt; var a = foo1(10,20)  //接受函数返回值
) d; g# ?' e% T. R4 L6 j- m% \&gt; a
  o9 w7 E. c! f30
* E3 S8 B& A) R9 E' A) p4 a3 ?3 C/ ^% W
4. 匿名函数
8 [; O+ H4 l" J! q9 x( F&gt; var sum = function(a, b){9 A0 [2 L5 X% B3 U/ H0 A0 P1 a1 V
  return a + b;8 H) o/ i' _/ I8 [
}2 X$ ?. }* N  K0 ?
&gt; sum(1,2)
( p/ @2 F6 \+ G3 n( l39 i/ h2 J6 ^% N' N1 w* Q) [4 t' H; p5 o: `
/ `& G7 l$ Y/ ^. {9 L  b
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
, D4 O/ X2 h/ I# B" V5 \&gt; (function(a, b){
$ d" S$ ^" A$ y" {, v# f  H$ C  return a + b# c# Y& L& b1 t9 u8 L. m
})(10, 20)
7 V3 y) x/ I9 J" r" ?30
; R' E8 s. S( e7 B6 j6 w1 Q4 `
4 R* K6 w4 H  n5. 闭包函数
" e/ `& q1 I$ K2 l) @* y) T// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数$ a" h9 h6 O( ?: f4 m
var city = "BJ"6 q/ [' I/ Z# E& z$ T
function f(){
. D# Q% e' ?. W5 {( h9 E% T& X    var city = "SH"
& P$ u' \3 |6 v' ?    function inner(){$ T" H" j% ~. G4 z
        console.log(city)
/ S2 l, S% F. S8 S    }
' c6 Y/ [% c$ d5 m, u, b. R    return inner
* m; A, m9 z& |% D1 i( S( ?0 d1 o. V}
) Z) P: A9 {1 `" H/ mvar ret = f()9 v, z/ H0 L( r1 A8 x/ s- {
ret()" X5 H3 O* S2 s- e* n' u
执行结果:
* a6 U: `( e# r6 G- d5 ?SH
" {: ?. d9 ?. w) K9 g) |+ Z# k0 k3 o; w/ d
</code></pre># ~6 `1 L, A" C' L
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>% ]: p5 q1 q7 l
<pre><code class="language-javascript">var f = v =&gt; v;
% B2 ]" _! X% Z/ y# M// 等同于( _/ _6 b8 y8 G0 k
var f = function(v){# I! a- J! M' I; Y) Z
  return v;% W3 i! `6 v" g
}
; u$ L* ~0 k. D</code></pre>
, [  Z0 P' m- d  Y# x0 }<p><code>arguments</code>参数 可以获取传入的所有数据</p>
4 h; \8 O& @3 O; ]<pre><code class="language-javascript">function foo1(a,b){
/ b1 [* n. p6 M% _    console.log(arguments.length)  //参数的个数 ' d! q  T" M* {; x
    console.log(arguments[0]) // 第一个参数的值( u" [  |, p; M& P, n( W' o
        return a + b   ' B; U7 J+ Q2 b: K6 f" B9 @! U
}, C  v& R0 ^1 I/ X' ]8 P
foo1(10,20)
+ X; V& k" N2 W* @  }% s# H结果:
- P* \% G8 _0 G3 a; I  Q( {1 b) \ 2          //参数的个数 # V" _$ q' H2 G; u
10        // 第一个参数的值
& f) T1 }% {! y/ ~, ~, z- r1 u( t30        // 返回相加的结果' M$ i' \; @0 c' C( ~# L: S+ }
</code></pre>8 [5 Q' q9 Q) x/ u4 z3 p
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
* N. \( j) Y" }<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3># i  |# s2 U' }: h! x- r* |1 {
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>; F  x1 I. _8 Q8 O2 Y
<h4 id="281-date对象">2.8.1 Date对象</h4>
8 H  L! f. U1 A' Q<pre><code class="language-javascript">&gt; var data_test = new Date()
9 P" R; Y5 p. R1 C&gt; data_test- T9 O$ p% b& n) k' W( y
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)9 i' r0 ]/ ^# R: g
&gt; data_test.toLocaleString()
2 s! n) F& u" L' ^1 d'2022/2/11 下午9:44:43'1 E6 ?) o  }6 J1 ?
" z1 X: A4 X* x
&gt; data_test.toLocaleDateString()/ K4 }5 t; J1 p! a9 {1 N4 O
'2022/2/11'
; n$ N  j. w5 P5 C* `! l5 `
7 K0 E; H& R) |  Q8 S3 W, J( m/ h  d&gt; var data_test2  = new Date("2022/2/11 9:44:43")
! x1 D8 i7 y( ?% s, G0 C&gt; data_test2.toLocaleString()% W( K+ Y7 B6 Y; s4 L
'2022/2/11 上午9:44:43'$ `# k/ G! c8 g$ d; u! m: P

8 ?+ n2 K( H# j7 E4 I1 _" S$ \6 t// 获取当前几号8 ]: @, g* C; n+ h" a7 U5 h0 `
&gt; data_test.getDate()
" q2 V; n0 `4 X% w3 t+ L11
+ ~3 |1 c( l8 U. s  W4 @7 l; O// 获取星期几,数字表示
1 E0 ]4 F$ u  G! \; t& V&gt; data_test.getDay()  4 c+ V4 Q+ \  s+ O
5, A% \+ _( w3 O% z: I9 H
// 获取月份(0-11)
- B8 G4 e6 D4 }9 x&gt; data_test.getMonth()
3 t* D: e& y) o: m& I$ V  {1% m& f4 n: c7 R0 g* e
// 获取完整年份
$ E! W$ Q* C, M, j&gt; data_test.getFullYear()- |4 F. R! T0 }* f8 r# s
2022
" ]2 i5 B1 J' T4 f4 P$ a// 获取时
5 Q2 l; C8 B% c1 [0 F8 c&gt; data_test.getHours()
  w8 H" i. x3 c: W0 i* h1 I21' o2 L# u5 n) t# b
// 获取分
' |! e, Q8 n7 V) _/ U, t&gt; data_test.getMinutes()
5 k0 m; G. w+ ?; h* p44) f; e5 T: L' r$ [1 I3 U8 v- p
// 获取秒
1 D* j" w; n0 W6 t" K1 c& U&gt; data_test.getSeconds(), U$ T9 r0 D9 u# x
43
* }4 k# X% E0 V4 y4 q// 获取毫秒3 W9 q( }6 n6 X" D0 E: E- f# n
&gt; data_test.getMilliseconds()
1 O2 I2 i5 n& r5 ~  q# i: P290
& W! c/ H# y7 C2 v5 ^' h% n/ _// 获取时间戳6 t, u4 y# f& b0 O* j9 k: b2 ?4 I$ J
&gt; data_test.getTime()% @: d) R, [4 m' Z8 r2 B
16445870832901 H) d( L" J0 ~1 ~
</code></pre>
7 J9 Y, Y2 k6 O; o& l<h4 id="282-json对象">2.8.2 Json对象</h4>
& X( k' M. F) }  |  P& r8 [' T( l<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
3 \4 R) \2 C5 V$ Z/ SJSON.parse()  // 反序列化,把JSON字符串转换成对象
) f. L6 i# q: b. I" l
9 U: |  B4 x+ w5 `- h// 序列化
! X! o3 Z, m2 N* r/ Y2 b&gt; var jstojson = JSON.stringify(person)
6 x# }* @" J; r# i3 j&gt; jstojson  ( O( K, e5 }- G- ]/ _) b) W
'{"Name":"Hans","Age":18}'
. y& [8 l  y' b
' z$ A' b- }: A( @& K5 n9 Q8 c// 反序列化/ c- n/ o3 o0 H. _
&gt; var x = JSON.parse(jstojson)
! ]* ?) D; h8 j' V# `( F&gt; x" y; }- V/ e/ l; x4 O% n! F6 V
{Name: 'Hans', Age: 18}
( N2 a* w" I7 F/ K&gt; x.Age
$ I' y6 F; n7 f# Z0 O18
' ~& _6 S+ P  k/ u# v</code></pre>
, X, f2 Q& s) J) h% x<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>8 f- V+ l. F" c1 c) R8 v8 Q) L
<p>正则</p>; s3 t- Q3 H+ g- _: W
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
2 |) v: `7 j& h( j7 ?&gt; reg1
! c1 c2 D! O# v0 ?( E: Z/ {/^[a-zA-Z][a-zA-Z0-9]{4,7}/
; q' T* N9 J) x& U&gt; reg1.test("Hans666")8 Z& D! V" Z7 G. w, q+ i
true
# n) W/ \" [# f, i* D3 x* E! {+ x2 G3 k3 h
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
* s. f) `8 m3 c8 z0 n0 Q( K3 T+ P&gt; reg2# ?. f$ Z8 m6 n0 b; P. B  D9 H( C1 w
/^[a-zA-Z][a-zA-Z0-9]{4,7}/5 ]/ {( c6 g8 g$ I+ `4 g( d2 i
&gt; reg2.test('Hasdfa')3 Q: F# _7 N0 o5 p7 |1 o' N2 Z% j( W0 m/ d
true
6 i/ e9 w/ C6 }7 w/ M
1 C3 u9 O7 |9 g4 t: {5 T* p全局匹配:
0 b8 ^0 y* o* k! [&gt; name
5 U) x/ ]4 j" g# N'Hello'* I' A/ Q$ l$ G& v' U& E
&gt; name.match(/l/)$ s  R. w# v$ }
['l', index: 2, input: 'Hello', groups: undefined]* j, h1 u7 \( ~- k: {6 x  L( M
$ a$ z2 G) X/ L) F$ A, o
&gt; name.match(/l/g)! L$ W7 h7 q. L8 y
(2)&nbsp;['l', 'l']% M, X2 k! i1 m5 T- C  h3 \5 }
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配  Y& k3 S* M+ y6 y/ R

- H1 v& Q$ `1 \7 m全局匹配注意事项:
- o* \4 ^  g5 @7 b) T5 U1 k&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
+ ]# s- o# e/ d6 S3 D&gt; reg2.test('Hasdfa')
5 W8 [  J/ U" ~true
, s: A( |) _* m( N! W0 z5 [7 ~&gt;reg2.lastIndex;
3 v! B: `! H# E6: `0 ]1 {& ~4 W, E0 U4 [
&gt; reg2.test('Hasdfa')
* f+ l/ p  s7 T+ I8 yfalse
. W; t4 I/ `; G2 Q. i! p6 O&gt; reg2.lastIndex;5 m9 R, g2 C) ]5 y' T
0/ i' p% M! _. K# l% s
&gt; reg2.test('Hasdfa')
6 k; |1 }. j6 S/ W2 rtrue; x0 J! H$ z4 F* Y5 `& Q, r
&gt; reg2.lastIndex;2 G; e0 P* m8 o$ G: d
6
+ {5 V( p7 b/ z: V. Z&gt; reg2.test('Hasdfa')7 F8 k% N/ t! @! ]6 D
false
( c  S8 `8 E% \* A( s# [+ E. l&gt; reg2.lastIndex;
5 v5 q. M. k' @6 V0+ C  B! E- M% y3 I) c! {& T
// 全局匹配会有一个lastindex属性7 |3 M; s1 Y# K3 m: x$ n) O
&gt; reg2.test()
0 K  X. \. u1 G+ A8 ^  L; w9 ]. Cfalse+ W" ^1 U5 R4 V
&gt; reg2.test()
. Y/ X! x1 p. N" h1 o: ~true5 \1 \+ p" S4 s9 T. D9 q6 g
// 校验时不传参数默认传的是undefined; f* G  K8 r) O) ?% `! o: @
</code></pre>; t3 y9 m  ~8 O/ y. I
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
4 R2 b% t! a$ V2 X0 z' S+ r<p>就相当于是<code>python</code>中的字典</p>( v* P0 |8 o# h! E) X
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
0 P6 i3 i: \2 S: H&gt; person, q1 f: I% F, {/ D" I  m$ J. g
{Name: 'Hans', Age: 18}( Z% i6 v& ?. {2 ]
&gt; person.Name
6 M( l* u4 D. j'Hans'  q; C4 l  O4 F( y; L4 A
&gt; person["Name"]6 N" h; s' A' g3 O
'Hans'/ r. c2 p) K5 c

0 W+ f$ Z7 l9 c+ }5 y// 也可以使用new Object创建
: [: V7 U6 _1 e: N&gt; var person2 = new Object()
/ f" a6 h: a; B&gt; person2.name = "Hello"
/ Z4 E! }) G  H$ o4 i8 _/ ^, ^'Hello'( U5 q# Y6 W, _
&gt; person2.age = 20
% t; Z+ V6 l( `  |0 E+ ?/ u+ d208 u- M3 w3 x. l7 S2 z# W5 o
</code></pre>) v  y* R( p+ u4 F! s: f
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
5 n2 ~5 G& \, c3 @; X, @" k& I<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>  w' S! k% w( V: r9 ]6 h5 I, E
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>$ O) L/ |. C2 o; o1 c; D
<h3 id="31-window-对象">3.1 window 对象</h3>- t; W& R; J0 |5 w7 p5 R3 ]
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>% H: `: G& ~$ t( k
<pre><code class="language-python">//览器窗口的内部高度
/ O% l; \1 x  R( G8 R* c' s1 w( dwindow.innerHeight 8 M' w* b; l% u  [, d$ O6 P5 O! t
706
2 `: d  t5 ?2 o9 ]" D; V# `//浏览器窗口的内部宽度8 _$ W% a2 |. x& U6 q. j, o. ^
window.innerWidth
( ~* @  W. k9 G/ q0 b7 y( q15222 M/ f6 z2 M& I* Q# }
// 打开新窗口
$ }& v0 M: [8 kwindow.open('https://www.baidu.com')
: D1 \3 M3 F9 S+ \# \+ BWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}3 y- ?/ o- g' ?  H
// 关闭当前窗口
: j5 K' e0 I4 J' s3 F! q8 }window.close()
3 C* k7 x8 Z* Z' S3 X' S//  后退一页/ R3 o8 X8 W4 @7 a& x# X" m  d
window.history.back()
4 ~1 D9 F4 C% a# l8 g// 前进一页, \6 K; c4 m) o3 b$ x+ ~8 B
window.history.forward() 1 e$ i& @. o( m! Q# R  g: y
//Web浏览器全称
: J/ P& a3 c% x/ ]* ]& \! r9 Awindow.navigator.appName
% |& _( Q+ T6 V. m7 W4 R'Netscape'
* ?7 ]8 o' F2 K. x// Web浏览器厂商和版本的详细字符串# U: {. T* a0 P9 P
window.navigator.appVersion6 J0 F4 x. _. p6 |
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'+ H7 S! V  c1 c3 a! l
// 客户端绝大部分信息% W0 F" Q  X2 W+ p
window.navigator.userAgent) c; o9 g8 z1 U2 z1 x
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 Q4 J0 R! u4 G: N6 y5 J, ~4 L
// 浏览器运行所在的操作系统
: g3 ?- t2 D! mwindow.navigator.platform, Y3 R' w# G2 r+ J0 f: |
'Win32'
  Q) A" I  N& `$ y5 O1 z1 @% V
5 X3 I" M- L, K# d+ ~) F//  获取URL3 z; v* G8 W+ Y: z; F& o5 ]7 u# q' V
window.location.href+ m- Q0 R  B8 _- {# C0 U
// 跳转到指定页面9 @0 @  _$ d5 ]2 X% v
window.location.href='https://www.baidu.com', t! L. p. @. d4 B1 k. ]! T* T3 H
// 重新加载页面
' b5 `9 v0 J& h/ c# |; e6 J( O# rwindow.location.reload() ; Q9 c% @+ b* N( T* Y; L
</code></pre>
( }" J4 m. Q7 Z1 `0 c3 k<h3 id="32-弹出框">3.2 弹出框</h3>+ R. M. R4 W- j* T& r) N
<p>三种消息框:警告框、确认框、提示框。</p>, p0 v; \' Z9 P: ?: o5 J1 ~% u
<h4 id="321-警告框">3.2.1 警告框</h4>
9 G8 D  I" I" i/ y' A; E; @<pre><code class="language-javascript">alert("Hello")
7 K/ B' F1 L! G" f; d</code></pre>
, a4 _0 r$ R; ?5 F; ]<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
+ p2 S) w  v9 i<h4 id="322-确认框">3.2.2 确认框</h4>7 a& V7 @" j9 v2 K- M0 [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
: ?. I# I' \8 }4 I* n<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
' j) a; y( G) utrue1 y* P" x3 C& M" z( S; A& L) R
&gt; confirm("你确定吗?")  // 点取消返回false
# m' N1 p1 s/ s/ y4 Y& Afalse5 X2 y  q7 O" u5 ]4 u( [) X
</code></pre>
0 V8 g1 }! [: y. |1 x& E3 U. V2 f<h4 id="323-提示框">3.2.3 提示框</h4># F3 U3 h( f4 J1 z# Z1 }  Z) x
<p><code>prompt("请输入","提示")</code></p>
' n& e( T8 ^* E& q# l; _. d<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>+ o) E9 V3 v7 |- K$ {
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
% P! P; @; \" v) K* P5 R: o6 j<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
8 _; Y3 Z0 w+ S+ L" {0 y  f<h3 id="33-计时相关">3.3 计时相关</h3>$ H/ e  a* j7 y0 {( R* I0 i3 R9 b
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
4 e2 w- o4 V- ]$ b<pre><code class="language-javascript">// 等于3秒钟弹窗
; z: D% T$ ^2 }0 E5 lsetTimeout(function(){alert("Hello")}, 3000)* u; W' P& f+ E. Q& V3 _# q$ E
" l! `7 ^, s3 l
var t = setTimeout(function(){alert("Hello")}, 3000)$ w" s( O& N' I. F% f) Z/ }
6 ^8 s2 P$ H; J) r3 _- R$ |+ @! o! l
// 取消setTimeout设置. h& ]0 p( p9 X$ U% w
clearTimeout(t)3 t- g( O  ^& X( d# a
</code></pre>) H1 z) p# S! W- k' K$ E! B
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
# I6 F9 @* m0 V8 [; q<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>3 \: h2 Q  w  T# d
<pre><code class="language-javascript">每三秒弹出 "hello" :1 Z7 k1 _- z( \* k0 W
setInterval(function(){alert("Hello")},3000);% @2 S# ?% m$ u" n8 W
</code></pre>
; E& m) E2 }2 f, A<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# |% c) }) a$ g6 A- ]5 ~% a" X<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
3 U9 e+ H% G8 M# u; U//取消:# J1 l; q) ~8 [" d- }/ v
clearInterval(t)7 @! }6 F( u! c: o$ S5 i
</code></pre>- X, g$ o0 c7 P6 g

: q* T+ `* _7 o7 I) f8 N
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-8 13:31 , Processed in 0.072504 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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