飞雪团队

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

前端之JavaScript

[复制链接]

8038

主题

8126

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ b5 L: U  r: q! Q1 w<h1 id="前端之javascript">前端之JavaScript</h1>2 C' l7 o% G- O- c* {5 u
<p></p><p></p>0 T' @( h) F; l/ J5 s
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
7 Q* n  R6 ?& N' x: q3 M<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>. v: q5 q' N" R+ f& h
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
7 e* m  F& D, n& x7 p* y9 @它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
6 E0 f$ w$ q! x7 M4 i& g  B# c2 \它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>. c9 h/ V3 ]# |; }
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>: Z) D  z  @+ {7 K* w# q
<h3 id="21-注释">2.1 注释</h3>! w2 a3 C1 L8 j
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>& G$ q) \0 p* q9 s0 v, `1 w  v& J
<pre><code class="language-javascript">// 这是单行注释
  ^2 A; Y( m: |7 Y6 g! g4 K
, [1 ]7 T  Y# G/*: b1 J0 X$ ?  N% @* {
这是多行注释的第一行,7 [6 D2 E0 S2 M" W2 j9 y, K! r4 C
这是第二行。$ f! _6 z- \9 V3 t0 b. e+ W
*/+ L+ c) ~# C1 ^7 P2 i! |/ w
</code></pre>: y& C5 G2 y% c) ?
<h3 id="22-变量和常量">2.2 变量和常量</h3>
! q% z/ }! x  X4 v" M7 w<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>0 `5 h* _5 t( F7 V6 n6 Q) a) `  j
<ul>% D0 \  ?: Z" r6 Z. S2 I
<li>变量必须以字母开头</li>
( A( t$ j& I$ N$ S# D9 \' X<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>6 |" a9 D4 a# n( ^2 g2 I
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>. P$ Q& V1 C5 h+ \
</ul>
" |5 W  D5 x2 _5 T0 c+ h2 @<p><code>var</code>定义的都为全局变量</p>8 m, S+ x  [) ^5 _. g3 g: u
<p><code>let</code>可以声明局部变量</p># z) D2 ^! V; f4 ?
<p><strong>声明变量:</strong></p>
" @* U3 O. O( L1 ~$ G3 d% \7 }<pre><code class="language-javascript">// 定义单个变量" ~* i1 t$ M* z% i' d9 H0 B: E$ W& s
&gt; var name
. x' Y9 c+ v/ E1 u&gt; name = 'Hans'8 {6 _" t* A; E2 s7 x
//定义并赋值
+ y' T9 C( w/ j+ _  M  l3 v5 n% W6 e&gt; var name = 'Hans'
- i8 D# U; x6 P4 [' ~: _&gt; name
- T. n7 ^: ?- l'Hans'
9 G( W* j" k$ `" }% O, {1 x6 ~9 F7 ~9 G
// 定义多个变量6 Z+ s" Z( p4 r3 K! ]8 L/ b; M% \
&gt; var name = "Hans", age = 18
4 ~5 m  c( d7 ]) p3 P$ h&gt; name
3 Y: i* d, Y3 Z( A' j9 A+ i9 o'Hans'/ f* [" B& o+ {  z6 R
&gt; age
$ s( e. `! _; U/ |+ `! n18% V$ u2 x) G9 u5 g, ]8 w% g
5 w! i, U1 |1 z
//多行使用反引号`` 类型python中的三引号1 E; ?: ^- ~  Z7 s  z) o
&gt; var text = `A young idler,2 ?9 O6 W  j/ s; F2 i; x
an old beggar`
1 d; k, R' l1 W0 m% p&gt; text6 F, L: P" p  `* S$ f. M
'A young idler,\nan old beggar'% _/ m& }2 {, a1 G) m
</code></pre>4 ]6 ?) O2 `! A+ U: S) t! j& a3 G
<p><strong>声明常量:</strong></p>; i$ u/ Y( \) a( N
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
& ^" H& e2 A9 k4 n' A% s<pre><code class="language-javascript">&gt; const pi = 3.14" ?) o7 b" y$ b4 u$ B" B, K' e
&gt; pi0 _5 T) [& r) b  X$ K. z# {
3.14' R! O! U& x* c7 x
&gt;  pi = 3.01
  O% a1 x( j# f) ?+ H- QUncaught TypeError: Assignment to constant variable.! Y$ C- @8 }7 T
    at &lt;anonymous&gt;:1:4
1 V* s. t5 K! b4 V: j
  I* G: j2 B% d/ f9 M- u</code></pre>+ t: |" r0 G1 |  m6 [; }
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>! Z. Z3 u8 y0 `# K' }5 I5 v% Q: u
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
7 H0 E) n6 b. S5 n8 v  ]<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>' @% H# e' @5 j1 ~" ~4 k, a
<h4 id="231-number类型">2.3.1 Number类型</h4>! J$ p) z1 i. y% E" ?) s, x
<pre><code class="language-javascript">&gt; var a = 5
+ K5 w; l; P/ g. `# S  @&gt; typeof a   //查看变量的类型  6 t& l5 A* s4 L5 O6 j
number
, v6 y7 @  Y0 s( x$ h% y
) z- `( V6 n; s/ V0 J&gt; var b = 1.3
  _4 q6 P5 `. o8 h5 |+ c&gt; typeof b
3 F; e# ]0 T+ E/ C! ^number) n) k) S+ A7 x  u) f: Y7 a4 r

  Z) N( h% M  a* T// 不管整型还是浮点型打开出来的结果都是number类型2 ]1 J' D/ |' Q& y9 P4 n& M- {
- g- O" U( D5 Z) B
/*0 g9 {. D' q; k$ n
NaN:Not A Number* \( z9 I! ~  t. k4 d  H$ @2 X
NaN属于数值类型 表示的意思是 不是一个数字
1 o! l" O+ ?8 |- h& A1 y5 y1 G*/
, |6 x4 D3 U/ |6 s
$ W3 A& d% M! G$ {; D4 ]9 _parseInt('2345')  // 转整型
+ _. K7 d2 h% K) M2345$ e" ~7 Z! D' A) D2 m/ s; q. k
parseInt('2345.5')
$ }* z7 o0 E% N% l/ h/ j2345
1 U# s; ?3 P* ~( F6 wparseFloat('2345.5') // 转浮点型
* D3 ~4 N6 k6 ^$ W, ?" K: m2345.5
5 I' Q' J7 t( g  J1 i! ZparseFloat('ABC')/ n  u' D9 Z$ G5 k( y$ l) G
NaN
( H" W& b) a- [parseInt('abc')
  T4 ?$ }5 q) S7 l2 W7 b0 N" {NaN1 |0 G8 m! C) u" w1 x8 c5 S! r
</code></pre>8 g, A1 X" d) X5 I1 `8 g
<h4 id="232-string类型">2.3.2 String类型</h4># J) ^  s: J* x" M$ u
<pre><code class="language-javascript">&gt; var name = 'Hans'
% P. q$ g3 i6 x1 Q( K" U&gt; typeof name) e! l: P! O% k' N8 V, L8 r, \4 |
'string'3 |4 E2 A! I% W
+ `. y) P" D4 w# A
//常用方法* ?+ K& a. j/ }" }: X2 I1 _
// 变量值长度+ O- G* a9 m, \/ Y/ H
&gt; name.length
3 R  [4 U, e4 b) y2 @; t5 e! W4: F5 G5 P- k( N7 B
// trim() 移除空白3 {, b3 Z7 ], w" \9 `" c2 x$ C5 P
&gt; var a = '    ABC    '0 n: J8 u% y+ y6 \# D5 g
&gt; a
' [- c/ j+ w% S& X'    ABC    '/ H2 z; N; V/ a) X
&gt; a.trim()& c% \" D0 k9 [) Z
'ABC'
# |' z4 R* J4 E5 P//移除左边的空白
5 G) u" [+ Z: X$ V0 R&gt; a.trimLeft()( ]( S/ D6 A3 Y  A/ I
'ABC    '
, w/ j" h* K/ F& j. F//移除右边的空白
" R3 `" J; a( ]4 A6 }- Q. L4 G! q" J&gt; a.trimRight()( @' ~# s& [/ M# x+ e+ W
'    ABC'' G  S) K1 P' E( B  q- p* \
6 A3 d: g" c2 [. T+ y7 Z" ^
//返回第n个字符,从0开始
3 G, Z. k% e8 a! e% ^6 L7 T, N/ w# Z. J&gt; name
9 s% w4 k) S! f2 ]( i+ {0 G'Hans'
: B0 J" s% m# P# L6 r&gt; name.charAt(3)
) b) S+ L, u+ }/ ]'s'
# `8 D* V  t4 X; _5 u&gt; name.charAt()6 t- p7 z5 k, e; F6 P" l
'H'
" T* H3 D0 \8 R&gt; name.charAt(1)
5 ?3 y# j3 k: @. Z'a'
: V) _: \" x# X
) l/ ?9 G5 m. v// 在javascript中推荐使用加号(+)拼接5 h" Z" j/ {2 ]5 ~- D
&gt; name
4 Q0 c8 G2 Y8 M. G'Hans'* f" e/ W3 x( v) `# E: t6 f
&gt; a
3 x! @: c$ l- j'    ABC    '( X: ~. }  E# L7 t# B
&gt; name + a' w3 o4 b( Q/ z8 F# t) M% y
'Hans    ABC    '
! C+ ~6 I# n  q: `. w// 使用concat拼接  l) y+ s4 Q- z. X8 d
&gt; name.concat(a)
; p% d+ D# \( A- D6 H' o'Hans    ABC    '+ ?* y& V# u, D" g% D( W3 W( v
, p( \& f9 Y5 q: |1 N5 k. R: d  F
//indexOf(substring, start)子序列位置" z) H; @# F4 a0 h* E: u: J
& C4 K9 l3 K4 k9 z0 Q
&gt; text' r/ N$ X. k6 D! U  T) r
'A young idler,\nan old beggar'* _7 G# J) j+ `5 Y4 A! d0 R3 p) W
&gt; text.indexOf('young',0)
8 ~, J7 ?5 f& h3 B& U) e2: {" t; j2 J1 \) x% A
+ J/ S! Z& o/ K! _3 x( E
//.substring(from, to)        根据索引获取子序列
$ Y  M# ?- S! G( O&gt; text.substring(0,)
% N& R  [! e% k6 c'A young idler,\nan old beggar'
( {8 g. o* [  \. S8 K6 T&gt; text.substring(0,10)
1 f( W+ @' t' z2 _1 C'A young id'
/ t: t) P& {2 Y' X* A/ w
9 ^- \2 D; f$ j! S6 @8 ?7 {, Z// .slice(start, end)        切片, 从0开始顾头不顾尾
( Z8 F5 T1 b9 b  u/ o&gt; name.slice(0,3)
$ Y+ r$ B, m) {'Han'4 H) u9 `* h& T* W' D( ?7 v* u2 l

! E' a: T" F% j// 转小写
7 n# W. G2 X' n# ?+ z; O&gt; name
- p& \" S0 d1 Y# _( ?6 g4 Z'Hans'
; `. j6 k- @0 w3 S3 m* A&gt; name.toLowerCase()
% g- ^3 t( o: ^9 F0 M'hans'
2 }* }% J, k, ^1 n5 `' H// 转大写
/ l* U+ m1 }8 ~! K" o, A3 [&gt; name.toUpperCase()4 i8 ~+ B9 T: |; E! [+ I) a0 o2 O
'HANS'
( t3 f% k' V. @/ k
* I* f7 X, }. g3 N4 j/ `// 分隔6 [7 @) G1 _3 @% k
&gt; name6 W- L: N3 B# O. }- ^, i2 ~. M
'Hans'
: I1 B  s/ W0 D+ w&gt; name.split('a')
2 m4 a3 @0 j; i6 B7 p; y% b(2)&nbsp;['H', 'ns']
- q; s) q# \' d0 T) I</code></pre>
1 J6 b/ P  ~5 {$ ^3 j1 V<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
; A9 G" s8 U, \0 u/ @. O# F<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
- [7 L1 g+ H8 K% [<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>5 a" D5 U$ A# G) Q4 @
<p><strong>null和undefined</strong></p>
8 E; ~! H: t( [( ?# @8 H9 n<ul>
' L0 r% E+ V. B+ i<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>! h9 [+ L( M# C% z2 s
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
: h, Y9 A4 S: Q2 |2 ~- z. Y</ul>
/ U0 K1 p/ K# R, j' _<h4 id="234-array数组">2.3.4 Array数组</h4>
# b( t8 o, i8 }  W# t1 A  R, w# Z<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>3 e% i$ V5 b( T6 r2 S' ~
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
! j' Q2 i, x$ T: B: k&gt; array1$ z* Y/ ]; T# @+ X9 G6 F& U( @9 n
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ A0 F* H1 g* H3 W&gt; console.log(array1[2])  //console.log打印类似python中的print
. [, V; f. `& P- i6 {3
) g7 Z% D& W4 r" a. b+ a// length元素个数8 z( x, J, v" p! T7 g# P2 X) Z0 }
&gt; array1.length, v7 k1 s' j! L- X+ Q3 [4 r
68 E+ F6 u1 y2 h$ l
// 在尾部增加元素,类型append
7 z4 j6 _5 M9 N* Q2 x+ \" x5 b&gt; array1.push('D')* l( [5 @, q# u6 _: ~
75 D( e$ j* @' Q) Q  t# @
&gt; array1' v0 [( O& X  v8 ^
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']/ e. z# t6 e# S6 x
// 在头部增加元素
' j; n9 R% {0 F+ f" k! c  s&gt; array1.unshift(0)& _2 B9 R& V% P- J7 Z
88 N0 _* `5 [9 ?+ l
&gt; array1
2 H0 G' h( E5 r6 h+ I(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']4 [0 O- k0 Q  s4 J. `

- A6 o3 A# F$ b3 {//取最后一个元素# I/ B' P0 g# e/ x* N: ^' l/ d
&gt; array1.pop()
# S2 R& e1 f# l& b+ Q4 F2 s; ~' J'D'# X8 q/ y* w  Q5 E$ J! r
&gt; array12 Y) k4 e+ b5 r: T. x- U- O3 W
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
4 y9 _) u% f# Q0 i8 C' y//取头部元素
5 V, _- f0 B  k7 c$ D# j&gt; array1.shift()6 F$ I4 _  r7 \8 h1 a
0" }/ ^3 a, n. T* S& M" R) V
&gt; array1# u  [5 q! A3 M
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ s4 v6 \! M' Z' j0 f
' S! O0 _7 `  g* R# T: S, w' L
//切片, 从0开始顾头不顾尾! m: N' S3 D8 d; _6 T4 o
&gt; array1.slice(3,6)6 G3 r# {' Y$ Y# r: q
(3)&nbsp;['a', 'b', 'c']- \" Q2 i3 m$ J9 n" U( u3 V- k% _; h
// 反转
, B! I6 s3 k# n, n. @7 t&gt; array1.reverse()
) Z/ w! z% p; _9 t1 |(6)&nbsp;['c', 'b', 'a', 3, 2, 1]6 g6 g3 R; R0 b# |+ z
// 将数组元素连接成字符串
/ h1 j1 o  v7 R& p2 b, r6 G* z, s9 ]) e&gt; array1.join() // 什么不都写默认使用逗号分隔
5 M+ q" g) F4 E'c,b,a,3,2,1'
: q4 h' _5 o5 A: y8 K0 X&gt; array1.join('')
4 t5 }7 H' N- r5 }6 b'cba321'
2 U" v9 d% s  v&gt; array1.join('|')1 p0 @. K- `$ ~! ~; J4 d
'c|b|a|3|2|1'
. n# w8 J+ b* d+ c- [) u/ \
' s$ n: z7 g' ~, `: R7 Y// 连接数组
  F! d9 i- D" E3 d) {&gt; var array2 = ['A','B','C']9 C$ M9 n4 X- p# r" l+ t( B
&gt; array1.concat(array2)
7 v; x5 i! [/ v( q! {+ t(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
+ v( v  a, ~6 h6 c9 A) C8 }
- g1 p* S( ~  T0 v3 y% X, U// 排序
) h) V6 ~! T! P) l! [% L( n&gt; array1.sort()0 @8 ]4 n2 s0 I$ h* P( n$ d- X
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- W# O; }$ J" R* Z3 f, d4 G$ _/ D
: u* I5 J. _4 j2 K/ X4 J/ l
// 删除元素,并可以向数据组中添加新元素(可选); i; o4 |: z+ a) T$ z) N( b
&gt; array1.splice(3,3)  // 删除元素
" e  G! d% T- j(3)&nbsp;['a', 'b', 'c']
" C, }% h$ Q# k* V' t* E&gt; array1! l* q; K4 B$ c! T" r
(3)&nbsp;[1, 2, 3]
. F/ n: l2 K5 e, I/ }8 w  R- N&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
8 ?) y- K8 _' @" {[]& O* ]8 ?& o! P
&gt; array1
4 k: m4 h8 Q2 x! o(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
, j1 o# f+ E2 }7 x& R5 a
1 ]1 l1 ]% O. X3 x+ K( O# U$ p/*7 c5 ]+ ~$ w3 ?# D+ N! ]
splice(index,howmany,item1,.....,itemX): L6 n. [$ r- E5 A) A" J) h0 @
index:必需,必须是数字。规定从何处添加/删除元素。* j6 S( n6 z. V" F4 f
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。, S% L* N- m7 `$ o8 b7 o
item1, ..., itemX        可选。要添加到数组的新元素
! N" K1 P7 N: x3 T# r2 N*/
" j. O$ r9 m1 m( Y0 F
# e' ^6 i* h' e) ]* v// forEach()        将数组的每个元素传递给回调函数
5 h0 O: O5 U: G4 ^- @  F&gt; array1.forEach(function test(n){console.log(n)})
) J8 k: I$ H2 f) o6 g1 e 1: ^: C. |# S  v: s
2
3 ?* x% a9 p) ^' X, Z: z 33 W& n8 b* s; ]: _) i% U
A0 u$ g/ C  k7 N4 ~' m+ b9 T& V
B
5 |8 T. w/ e, m C
  a1 |: c* ~, e" S. g// 返回一个数组元素调用函数处理后的值的新数组; x  O5 |5 P% x8 v8 H) t
&gt; array1.map(function(value){return value +1})
. r2 c8 _' b) z5 C) f& D(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']' v9 A. [+ O. ~; |2 [$ V
</code></pre>
0 P) z/ e- L; O* {9 b1 S<h3 id="24-运算符">2.4 运算符</h3>
1 `. C+ M6 `/ I7 t( Q7 X( I<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
: u( q# F! `, B: J! D$ c- {<p><code>+ - * / % ++ --</code></p>- [- A' k, A3 X
<pre><code class="language-javascript">&gt; var a = 6
: B$ n4 ?' R, t5 A&gt; var b = 39 v( z8 w2 E4 l& _5 t) J
// 加
& W1 K4 H5 `/ l5 f. \9 ~' Z" V7 I&gt; a + b- V$ s" A, \: i$ w# W7 n) K" W
9/ y1 U% A3 U& a$ \0 N7 _! V/ Q3 D
// 减, W: B5 y! u0 q; L: B  @" X
&gt; a - b  x! H4 Y1 k1 j' l( O0 E- I  D
3
5 J4 h: |& ^6 a* i// 乘( b' ?4 ^* d4 Q# d) ]
&gt; a * b
  V. M; t% s) R18
$ y- ~2 ~( P5 l- P' O// 除6 i  z: G' M. ?8 P& {$ u+ c7 G
&gt; a / b  p: c) ]3 H: r5 b! X
2. [* r' k+ ?" {- c. N
// 取模(取余)* W3 Z9 I! R. V/ v6 c
&gt; a % b
4 L3 I8 e8 w6 ], G* j3 Z# g0& K! X8 _; H! J& J' C
// 自增1(先赋值再增1)
2 }; `5 R2 S' J&gt; a++
. C# m* m* M4 q9 N/ f$ A6 s; x. _6
- Z+ P1 L. g( }- `/ X3 X&gt; a
) b) H. Q, W# @# _7
1 V8 \' p7 b( Y% O) N// 自减1(先赋值再减1)
7 B) S: [0 L* I0 G&gt; a--
$ U( x3 j/ p' c# ~5 k1 y, D7
3 j7 w; i( Q$ i6 |* M&gt; a2 q6 n, _$ e, D$ J- Z
6! m) g# [8 c% c/ _% ~% w9 r
// 自增1(先增1再赋值)
1 e$ d2 o: @/ H/ X) o&gt; ++a
' o4 g; ?* W+ h% C7
! z* C  _" f+ \$ T+ D// 自减1(先减1再赋值)
$ y3 P, r5 w( g&gt; --a& D" l5 \/ U8 H$ m
6
1 c0 }( H- o/ o$ Z' Q1 F9 H7 ~&gt; a$ u7 \. b3 q3 S
6. \: G! ]1 N8 S: O& `
# H9 E& \, T: `/ Y
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
5 a. }; W0 J) m0 v; z</code></pre>
' _, ~! a/ ?: Q: ?& k: l# T5 [# E<h4 id="242-比较运算符">2.4.2 比较运算符</h4>  _6 D! B5 x( A8 F4 `5 M* {' F) [
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>. P1 T+ F  O# v( {' o
<pre><code class="language-javascript">// 大于) @* e% L9 x( o% ^! n
&gt; a &gt; b
# j) _8 }- m2 K( F$ }( A4 `true
# _. h1 e2 O; S4 e: l$ {// 大于等于
( f. o" h. W7 I: e( Y&gt; a &gt;= b
8 V% H. J* n' y/ O, K( ^8 `true) T: Q6 m1 Q- S3 z' e. `
// 小于7 g0 p+ C- ]: t' I+ B( _
&gt; a &lt; b
. w/ C% O3 d4 v* J# I% x; zfalse, X! b4 B9 W; K! {4 }& H0 `. t1 F
// 小于等于
: Q! ]' P9 J! d+ R# j6 j&gt; a &lt;= b
- x6 V7 v" G( D4 d/ Y3 nfalse
1 w, k; s  ~: Y2 x& U4 m// 弱不等于
0 e4 q' n, `1 A" Y9 W, i$ d&gt; a != b
  Z  E4 ^- K& vtrue; c) M4 d: V; R: S( j5 P2 _
// 弱等于
) x+ T, `+ u4 E9 {&gt; 1 == '1'4 a  }' f. R( z7 L2 C- h
true
# X9 O3 t( D% g) i// 强等于- K" Z* \6 \5 @* K
&gt; 1 === '1'; r' O5 W; T# @( m7 l* O) d
false4 Z1 G9 f* V: D" @/ F- m7 ]% P/ p8 g
// 强不等于
. M! |1 q' d0 I0 `&gt; 1 !== '1'/ v: Q. S( |. v2 k! T6 g
true
; E/ T9 ?' ^, E* w2 A
8 f7 S7 G/ a- e' V/ I3 U/*
4 o( r' c! f1 j( P/ `JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误* p4 @" ~6 @* f* S) T; l* _* e/ X  @
*/
5 k* w: D8 M! ~7 A</code></pre>! |8 n/ U  z' w3 }5 u
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>2 t2 Z5 k( p# B4 F
<p><code>&amp;&amp; || !</code></p>
7 W2 f# M  S: c4 Z8 U3 e<pre><code class="language-javascript">&amp;&amp; 与% a2 `6 P5 Q/ I3 H" M
|| or 8 v& V$ ^! q  E1 p
! 非. ^/ ]2 o- @( Q( V) Z* J* }' a4 ]
</code></pre>
4 p. S& B4 ]+ q1 f' w<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
9 b5 M, P/ C' i  A2 _) [<p><code>= += -= *= /=</code></p>
  q* V6 x$ u# P. f8 |, f! T. o. w<pre><code class="language-javascript">// 赋值
2 m1 T( @& A) B" J$ t  E&gt; var x = 3( P# `3 D; Z: m/ E
// 加等于
; V$ r$ O6 ^* [8 |&gt; x += 25 c. m, d# K7 Q  D4 E5 }8 y& w: j
5
+ Z! \- ?$ ?; J- m! Z% \// 减等于- _; p" q; R9 ]0 u; Z+ E, X
&gt; x -= 1
6 Y9 F, R8 t, @; @4
* X% Y7 H" @; D/ ]( E2 c2 b// 乘等于
! S2 f" `6 Z. p6 y$ H- g- A&gt; x *= 2
$ M( j  y2 t8 l+ {8* g8 }  f* f+ [
// 除等于$ L5 B% h4 w9 l" T  }+ H: A
&gt; x /= 23 c8 u8 f* c: E+ |6 |8 t" q
4
2 ]; }6 o1 ]6 W' q</code></pre>9 @' c7 S' M. [5 [7 p
<h3 id="25-流程控制">2.5 流程控制</h3>7 J; L5 B. B3 }
<h4 id="251-if">2.5.1 if</h4>
' K# p2 o2 q& g<pre><code class="language-javascript">1, if(条件){条件成立执行代码}# e/ `2 r! k4 G0 M$ O1 b( e" }

  h9 b- F) f) C1 B" ^( Y( M1 H; Z&gt; var x = 3$ [( p; r# S& F; v1 B
&gt; if (x &gt; 2){console.log("OK")}! K6 S1 u# P# d9 ~1 C9 ^6 O" @
OK# ^' Q5 m% @1 [& `/ Q5 F6 \

' C# r+ T! _- m3 n4 h2, if(条件){条件成立执行代码}
4 V8 X1 O, Y1 a) o3 i2 H        else{条件不成立执行代码}
5 i$ Q& ?  J# M% l
, A2 V6 k$ L( I* }! A&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
+ P3 o& e* e+ i! ~5 S" h1 H) C'NO'! o8 j' C! G( X* x
! z. ?4 G' ~4 t( p5 O2 o! h
3, if(条件1){条件1成立执行代码} ' e7 J5 S- q# z4 t; a
        else if(条件2){条件2成立执行代码}: r6 _, B, U  }* d7 g5 _1 p
    else{上面条件都不成立执行代码}
! {! k+ n& y3 X8 Z0 M5 d) J7 B% v) `
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}- V; A! w1 T% }( {
Ha
9 F7 a4 X6 _( j; Q/ K; s. N2 N& j</code></pre>
  ?% X7 U' V6 D; c<h4 id="252-switch">2.5.2 switch</h4>% p1 n: b3 m* T, F2 N
<pre><code class="language-javascript">var day = new Date().getDay();! W, H) F# i  X$ ]) u
switch (day) {
8 f- R4 R3 @3 U! t! ~6 `  case 0:
4 ^* E/ g* ~' W" y& h  console.log("Sunday");
& d7 l! N$ j* K' @5 j& j+ Z  break;
2 D, l1 _* \1 B  case 1:" |$ u4 }/ [: l+ i. n2 k# s
  console.log("Monday");2 p4 W  }1 D! \+ u! ~, d! J
  break;
0 D: p( F& c8 N' \+ hdefault:( W4 h  S7 }5 s; n! t% M$ Y0 [
  console.log("不在范围")8 l1 R. p/ X' t: q7 F3 B5 R; X
}- @! J# m( {* [
不在范围0 @/ f' x0 `# h( L! G3 p
</code></pre>  L9 K; ]" h. d: ^! o* O3 t
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>* o; \0 x1 d# h7 A
<h4 id="253-for">2.5.3 for</h4>$ @# X  @+ _& y5 S% {) F1 c) t
<pre><code class="language-python">// for 循环
8 C# g1 s6 g9 F6 m        for(起始值;循环条件;每次循环后执行的操作){
9 b, {5 N; p8 E' n; y4 \        for循环体代码
. l2 H3 a' {$ H6 C, x    }/ W" O) a$ ^$ m8 e

# {2 ^% _5 b" Q4 ]+ @for (var i = 0; i&lt;10; i++){! G, {0 N9 I1 @1 L4 |* q- j
    console.log(i)# x4 U" \, [. e1 P% W5 L5 a4 n
}
& Z4 X2 k# G) T/ i  a) H! c6 ~        0
" ~  a- r- C+ h  g        1
# a( C6 |- y/ f& W        2
; U& B5 i2 Y/ [0 G" f/ c4 f# ]; W        3
& F- Y* p) y( f        4  K) _# `; u3 b+ T4 [
        5
5 y6 `/ Z/ v+ @4 B        6
5 v3 z8 c, ]% b, U5 N% a        7* L/ f6 g/ P% [+ i- C
        8
* l1 E# V" E2 _3 t        90 i) |/ J' w/ E
</code></pre>
, J1 u% J+ a$ _, a1 j  E- D<h4 id="254-while">2.5.4 while</h4>
6 V8 `, Q7 \! X  h6 m<pre><code class="language-javascript">// while 循环
: G" o  H7 M8 F  k3 {        while(循环条件){. M) ^3 [0 V( @/ E( `
        循环体代码# C: r# C3 Q/ _) t
    }& ^! V" j" h. s. w# X
: v- Y1 G$ a; A7 z; b
&gt; var i = 0
: ]5 f) O; R7 f( S: e&gt; while(i&lt;10){
7 j" ^5 b8 N, }    console.log(i)
& ^* t5 i& p) T& ^: g0 {    i++
5 [# X6 k/ b: V( c# P4 l5 w3 d6 M}0 U0 g0 s, G! l7 ^- o* r
0
0 x! P1 ?$ a( g2 G" } 1
' F$ J' Z$ v/ w. L: [ 2# \& t* u9 W  g# n
39 @: {+ Y1 D% ^
4% f' r$ C4 g! d; V3 C
5* }1 S% z5 X% X8 `% t. X
6
5 ]* J, ?6 {# S  {0 r8 p 7
7 ]7 b* Q3 E) d/ W+ a, N  {5 `9 O 80 I/ x: `+ o; H1 D6 R
90 P* U8 a7 {) V: C1 j6 Z
</code></pre>
; A( n9 n+ h9 L9 g( L: C$ I<h4 id="255-break和continue">2.5.5 break和continue</h4>$ h+ m  X* O2 I+ x
<pre><code class="language-javascript">// break6 r+ x( z8 V% H! l
for (var i = 0; i&lt;10; i++){
9 _0 s" S2 ~" L$ b5 S    if (i == 5){break}  F& V: e! k8 X+ G+ b0 ?+ u. v, M, W7 F
    console.log(i)& M* Z6 _+ n6 U' j
}
8 p3 h3 o+ }) {0 ^' }, d( ? 0
" n% W1 ~  A$ T, U  G' L0 t% @ 1
% [& G2 [- b) I( S6 X 2/ S5 B# n( ]( d8 U+ m
3
" e) |+ A) i2 G2 k 4) P% M/ ]1 v) A/ c
// continue( q% }' }2 F0 [& g; ~  @7 @
for (var i = 0; i&lt;10; i++){
' z% ^3 Q, h  k) i) z) i    if (i == 5){continue}
+ e0 R9 z2 G# w  g2 d3 F& B' V    console.log(i)+ L! Z+ d; n/ }& h+ p
}
8 u6 m4 O3 O. [$ X* D 0
6 g8 c& I( D) i2 N 1  w5 O' i; M6 R
22 j/ o6 O7 k; [0 J; o
3
* F1 N/ o3 G7 I5 u8 _5 l: p  B 4
5 V' U! A# E& v" j& J 6
0 }! V; D0 _2 M% n 7
1 E- S* X3 f2 H% f 8; T! I$ L$ c* z* o8 y2 d( n2 u+ ~# ^
9
0 j- ?, L/ H5 P" ?7 [' q( v  }1 L; c/ O3 K  D' n
</code></pre>; J* w' E4 }7 ?  R, S" F
<h3 id="26-三元运算">2.6 三元运算</h3>2 d- R, p! [0 z% \. r8 H
<pre><code class="language-javascript">&gt; a4 Z0 p7 @& p. {/ |( I0 _1 V9 F/ t( u' q
6  r, s/ H" _! L. I: E
&gt; b
6 f+ t( R1 G" L. Y8 W3  k. ~! S& G( J7 g7 Q& k

. k  }* J$ i2 f. x  m//条件成立c为a的值,不成立c为b的值
" m5 I4 V9 _, U4 R2 C&gt; var c = a &gt; b ? a : b7 n; |- }" k( }2 x# E1 `! ^
&gt; c
% D8 G- Y: B/ a! Y' _5 r6$ a- z" ^; i( h/ e

" J2 q* e. N0 L4 C; |// 三元运算可以嵌套9 U3 W5 A1 a3 s) N- d" d6 L
</code></pre>* e) b- h+ g- t
<h3 id="27-函数">2.7 函数</h3>
, T7 X7 K- p' l* {<pre><code class="language-javascript">1. 普通函数
+ u$ T, X& D, ?9 Q5 K0 P&gt; function foo1(){
9 D, h: V8 u4 S% L% z* Y    console.log("Hi")* ~/ i0 u. d' z& m
}
4 W" i" |8 }$ U0 [! S1 Z- a5 @' ?5 [! Q6 ^  |6 N8 K
&gt; foo1()1 `! v! L6 s  b/ @+ ~3 X( Q8 n
        Hi8 T$ I; `% B" w8 ?( g2 d
2. 带参数函数
$ n! N. d- ]- }3 ^&gt; function foo1(name){4 f! a# x4 E4 b9 |  g4 `4 s
console.log("Hi",name)
. x2 S: Q5 X1 _& ^}5 h/ V# G' h* y: P
6 C: K5 Z/ a- V& m4 f
&gt; foo1("Hans")
) v4 X1 y0 H% CHi Hans9 Z7 p! C6 r  ^$ ~5 H6 O7 i( O
8 u% A4 K* s+ n& z
&gt; var name = "Hello"
# l0 r) P3 H3 j, a6 h&gt; foo1(name)8 [3 A9 z; w- k3 Z/ ]2 W
Hi Hello3 F7 q9 U8 y4 R! p: m

' T" O  {$ v& P1 w. f3. 带返回值函数
5 p1 _9 P: t% E) r4 t2 L&gt; function foo1(a,b){
4 ~. T4 Y+ r6 f7 Q        return a + b   
: x* T: e5 Y% H, }2 k6 g7 M9 n}+ G1 m: {( g6 [1 _: Q6 [7 A  [
&gt; foo1(1,2)
* X4 a- ?+ ]% _. d34 c- Y( ]% }% d4 \( @" j
&gt; var a = foo1(10,20)  //接受函数返回值5 V' O: J( j" @: p
&gt; a+ g. r$ g: D% r" V, s2 x
304 J5 m) [- I. R* V
, l4 B5 _0 A: T: B6 c1 [
4. 匿名函数
+ d) w; t4 a" }. y&gt; var sum = function(a, b){* z8 @4 c1 |* f% r' Q3 p! I- I, {
  return a + b;/ i# r( j, _( ]& z) V: t+ w
}
: ?  t: ?" J$ {( T7 f( A" j1 H&gt; sum(1,2)4 Y0 |4 A% r" V; r1 _4 t
3
$ z0 N9 t! V  g; Z. E" F. y: m6 _# D+ U6 I" g
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱! i( L4 F& p5 r' B0 I
&gt; (function(a, b){
" B9 v" v1 G% I* N, M* l9 K$ R  return a + b
* e5 C, r  |( _" Y})(10, 20)4 L/ L- y4 j. ?
30$ I" S6 G/ B9 G: M8 e* s: {

; Z8 X$ y, t) g2 R, _9 f+ h% v5. 闭包函数2 J9 ?2 k+ T2 z* E* H# c# t
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
" c5 s5 D2 ?2 R6 ]  _0 L4 nvar city = "BJ"8 ]! m% i! p3 E( y' C+ X" F0 Z
function f(){
, o( p% n. [4 U3 |* G    var city = "SH"
( C, T: W, _$ P6 L% q; X0 m9 t" \    function inner(){" o2 s+ P' n$ O1 T& `4 P
        console.log(city)
3 ]; ^, ]! S6 }4 I9 ~& V    }0 w( p$ f" z/ ~, ]
    return inner
3 O! j2 c( \; ]}
6 W  Z6 C: }* Y( U8 Q7 Svar ret = f()
2 N& v! b/ u/ B; ]* Z: {ret()/ f5 L) a0 r* o% U
执行结果:
6 Y- Q$ n4 g# R" i9 ySH3 w2 `9 j$ w5 N$ E7 J$ {
3 S7 j3 d3 R, a6 i1 |: x, o
</code></pre>
& q2 `7 |3 ?) C7 @<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>1 U$ E# U1 B+ K# L
<pre><code class="language-javascript">var f = v =&gt; v;. D7 l2 A5 }6 A5 X
// 等同于
) ^( r; T( U- n6 g! G& W5 Ivar f = function(v){0 e1 t2 u. G* X  {
  return v;
# @- D+ E* f5 T5 t! d5 `% E! @}
- J$ K2 l+ G; H9 U</code></pre>
& o* G) C! ~& `) N; U( n& I6 K<p><code>arguments</code>参数 可以获取传入的所有数据</p>* V9 H6 b9 R/ @
<pre><code class="language-javascript">function foo1(a,b){
7 F5 l/ B3 w2 W" k4 C. m1 d2 b" n    console.log(arguments.length)  //参数的个数 * H* i8 ~! b( `# n. ?* U. ~( I
    console.log(arguments[0]) // 第一个参数的值
) v5 C& \' A) ~' N        return a + b   
' X2 K3 z; W( k9 ]; c; M1 b}1 p8 |6 Y* _) b$ `3 k( U! [
foo1(10,20)7 _0 ]7 m- c8 |4 ?1 G  b$ p; Y
结果:* i7 K2 ~5 L( v% \: P
2          //参数的个数 4 f8 f  N/ F$ ]' [3 F
10        // 第一个参数的值7 D- c$ z$ U( D$ x' ^$ F1 z
30        // 返回相加的结果
2 M  h" ?7 E6 D& U</code></pre>
# b; X* v' ~6 H" N1 t3 e9 ~# E<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>1 \/ E$ S$ Y! R* l! B. p/ I5 y
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
! y3 [' b3 X+ H; B% T<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>4 P+ D1 m; f7 C9 q
<h4 id="281-date对象">2.8.1 Date对象</h4>
$ P6 E* u5 n' W  Z4 }' t<pre><code class="language-javascript">&gt; var data_test = new Date()# O/ N5 D' B& _, s
&gt; data_test( {8 S, C( A/ o3 @
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)  M1 T# w; `6 v4 E
&gt; data_test.toLocaleString()$ x1 V) `4 P- O( _, N7 I
'2022/2/11 下午9:44:43'5 B/ v- S6 O+ J. n$ {9 c
7 h' y! j/ r( V, w# G  H; i
&gt; data_test.toLocaleDateString()4 X6 P4 d/ [0 T7 p  r
'2022/2/11'
6 ]: ^  I, d3 @) }* M. ^- i. S. ?
7 B* K% i1 Z; I, L& Z5 W3 `&gt; var data_test2  = new Date("2022/2/11 9:44:43")1 `8 M" G- F. D8 y
&gt; data_test2.toLocaleString()9 j. o3 L5 Z- e( t
'2022/2/11 上午9:44:43'# M5 J7 c8 t2 N  k

" w, i1 |6 M' c# g+ m; |: w// 获取当前几号
9 m) o! \: R0 w; R7 A. r&gt; data_test.getDate()
; [3 l+ X' x( N6 q/ D11
( |( p2 _+ Q" w$ B/ X/ J* z: Q* q// 获取星期几,数字表示% V- F) y; a7 \+ H- v+ C
&gt; data_test.getDay()  
' S$ u# {0 V, b0 _2 |5
7 Z1 y; ]+ m. w/ l4 R// 获取月份(0-11)
$ q  ]8 }4 m2 Z&gt; data_test.getMonth()
$ }2 L+ T/ M" f$ [5 S+ w% \15 p5 [* F  e/ P/ C
// 获取完整年份( @3 l8 q+ o( @  d0 _
&gt; data_test.getFullYear()6 |' w0 B! E$ ^( H
2022. r6 r; |4 K' Y) a
// 获取时7 C" V, t8 ?, Q7 n& v* \
&gt; data_test.getHours()7 j& _4 I4 Q+ K: j  |( |8 E" p
21
  D- t# M9 h& |# K& @// 获取分# m: N" Q5 l1 I: q% d2 q2 k3 M9 F
&gt; data_test.getMinutes()
. a: ~) X- o6 Q44
) I' O! i4 r1 S# p! \// 获取秒3 `% x( O! M2 Y& {. g
&gt; data_test.getSeconds()
# z/ }$ |$ p; Y+ Q2 B( ]! _1 L43
, |: D& J& |4 W. \5 Q, ~& b9 F// 获取毫秒2 }& L/ X( l4 {  c3 v& ?
&gt; data_test.getMilliseconds()
& m# h. y$ \9 \5 |* t. _, N290- O2 B- _! ~3 r9 P
// 获取时间戳
" R+ R, B0 S4 v# d. o&gt; data_test.getTime()
  [" m8 B; u! v. H- M1644587083290
; N" e5 J+ `  p( k* u0 v</code></pre>
: T9 r2 f  b5 v; u% i! T<h4 id="282-json对象">2.8.2 Json对象</h4>& `  s& r4 r/ L/ w
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串4 E. K9 `. h2 U/ r
JSON.parse()  // 反序列化,把JSON字符串转换成对象
2 R: I! E6 c  H9 B: u( w  q0 {- X& [3 L1 h* J. D0 V7 _6 i
// 序列化3 G. F! z1 i$ n+ ~, p
&gt; var jstojson = JSON.stringify(person) 3 N! f! y2 M9 g/ k8 s* v/ m9 D! @
&gt; jstojson  
* s, O. Q5 o( g9 }'{"Name":"Hans","Age":18}'+ ^- o3 Z- A* g2 Q; c

) I/ u5 m+ j- v* u: T1 A// 反序列化' Q8 I5 A; s) o! h2 M6 ^! ?
&gt; var x = JSON.parse(jstojson)
1 P% [0 }# a- s, s4 [* ~&gt; x
8 U& D6 T& [3 v% t$ [3 O9 b{Name: 'Hans', Age: 18}
/ l  ^$ D/ s) j9 E- o$ `, S4 u&gt; x.Age
/ |5 U% l7 a' T' Z. V7 v# V- E18
8 T" E% |9 d4 z2 W</code></pre>
( n  I  ~( ^- f; r6 `3 Q8 l<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>/ a5 t7 ?  V  ]; F$ f" R2 D- `
<p>正则</p>6 u1 R* _( [4 @; C7 e
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
! I0 @) }! C2 z. `  o, s. ?0 h( i1 w&gt; reg1
! Y. z+ L. Y/ [1 M! o/^[a-zA-Z][a-zA-Z0-9]{4,7}/: A% \* N& W! v, s
&gt; reg1.test("Hans666")& ~  z1 V" N; @$ ^1 l1 e2 z1 Q
true
( O# T& o3 b3 x8 _
7 L7 l# A& V2 o&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/! [, o' k) g* v8 U
&gt; reg2
7 f, y& t* I' C7 Q- T/^[a-zA-Z][a-zA-Z0-9]{4,7}/: E  D( u6 L3 E+ n; Q7 z+ {( q
&gt; reg2.test('Hasdfa')
0 v3 C* ^- F# K" N* D" Z  B2 [% wtrue& k# b1 p% _, Y0 u5 h% N  b0 \9 t
8 P4 L5 s  e) b3 b4 E/ i& K
全局匹配:4 ?; D! m, {1 {) Y. z
&gt; name
3 u, g& z0 N9 j4 {4 L3 Y8 \+ ]0 j! p'Hello', }* U. Z6 U, F! M6 ?. ~* _: j! C
&gt; name.match(/l/)
8 h1 N; p5 H% P& T5 _$ {' R['l', index: 2, input: 'Hello', groups: undefined]) p8 ]$ l8 v, r! U- b0 D: q% e
  c& O$ p$ F3 ~8 p$ ~) W
&gt; name.match(/l/g)' F% h* B$ d8 Z! G
(2)&nbsp;['l', 'l']$ e) |& e/ ^1 T2 c( h
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
5 O) ^4 n9 G( Y$ r# {
" N+ h. K$ O* [+ V/ y全局匹配注意事项:3 B7 b% b) s4 C2 n
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
. b* G& G( \0 d5 U1 |&gt; reg2.test('Hasdfa')
4 Q2 ]6 D  Q+ ^; O7 qtrue! R: i# D* H" a3 Y
&gt;reg2.lastIndex;3 L/ O( O/ X6 f4 }& k: y& _
63 E- |+ j5 q/ l5 Z) r" _- I" o) p/ x
&gt; reg2.test('Hasdfa'); |7 }" q$ U8 l: h" \1 D
false5 Y: Q# G' O1 \" _) ]
&gt; reg2.lastIndex;" t. J9 O0 @( ~$ V  g. s; U0 _" [7 O
09 ^1 ]. y7 C$ N0 ^
&gt; reg2.test('Hasdfa')5 m+ @" @2 M4 D
true7 u, {4 s* e( L* o8 w# `* `. i
&gt; reg2.lastIndex;. R" ]7 E3 I' J& o) F; r& \# r
63 v  q3 W7 F3 O' r! |" r- n
&gt; reg2.test('Hasdfa'); S+ n& J. J/ c* E% b, u* J( z- @
false' C% W7 C/ ~0 v8 C0 c3 I
&gt; reg2.lastIndex;
6 N0 i& p5 }1 ]7 `2 C; Q0+ J9 n0 Q- ^6 p4 ]" c) c
// 全局匹配会有一个lastindex属性$ y3 L3 u9 n* F& z1 j
&gt; reg2.test()
5 f: R9 s& j+ r# @5 C0 D' Ifalse
; o* N' q3 |2 c" J&gt; reg2.test()( a0 Q6 b- k; D+ Q& e$ D
true
) c0 h5 ^$ w- D// 校验时不传参数默认传的是undefined4 t. F" r7 v& t3 a/ ]$ v! {7 B
</code></pre>7 u: l# g8 G. |" g1 Y% d8 ^
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
2 J; d# N: E* I2 Z( [4 n<p>就相当于是<code>python</code>中的字典</p>" ^7 V6 T) O6 d2 ?4 O3 n% ]
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}, q; k& Q$ A5 i4 |1 ~
&gt; person* x8 P9 O9 J+ d
{Name: 'Hans', Age: 18}% ]: ?8 B2 E9 h1 b6 O" o
&gt; person.Name% F, f$ Z: p) v' H) [
'Hans'
+ ~4 I! @* {; T8 `9 ]7 P&gt; person["Name"]
/ K+ o2 L$ ], f9 b; ^" V! l'Hans'
8 F/ w' t/ e. X6 f6 V6 E2 v
; r% V8 ^9 a  [7 S6 U# ~8 F; W' I// 也可以使用new Object创建. x& H' W. [8 Q) C+ S! m" D
&gt; var person2 = new Object()) u, k' N. A' _. ]6 B
&gt; person2.name = "Hello"- n  }- m8 O$ u5 C" p' X  q4 c
'Hello': |! J' m/ t5 y" }; L5 M9 Y
&gt; person2.age = 202 g& h0 o2 j* n: }
20
1 n/ P- N0 L$ ?% S0 i- b( r</code></pre>9 ]) G" ^  K# H. I0 x6 v
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ U, Y; \  ^7 k# A<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>0 q% E0 F2 V1 Z8 T# K+ L
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p># v: E5 m" y( x( L0 g' `
<h3 id="31-window-对象">3.1 window 对象</h3>1 S, K( j/ X* b2 v! S, s
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p># k; u/ |- Y3 X! l. u$ N
<pre><code class="language-python">//览器窗口的内部高度' O0 z* W0 k9 }
window.innerHeight 3 N( r0 l( `1 O- x2 O. h
706
6 o. i0 ^3 A* ?' M, M+ S//浏览器窗口的内部宽度2 d+ w2 T! w- F4 h" h7 k
window.innerWidth4 g& t# ?: P) K5 b; `
1522) p( B! j: ^& Y7 Y
// 打开新窗口
% x/ l) q" @4 u) Rwindow.open('https://www.baidu.com')% e/ b- T2 b# x, K" }6 ^5 u
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}( H$ \7 w7 L5 Z
// 关闭当前窗口
( f" G' H" u3 p0 r5 pwindow.close()
" s! y/ I& d. e7 H//  后退一页- Z' `. v: @+ \- W
window.history.back()
& t5 t& ^2 f& a& S  f8 G// 前进一页) A# I% ~  f  ?/ m" ~1 a( E
window.history.forward()
# L8 h9 q! D: K7 T, ~! W//Web浏览器全称* a$ P2 G0 n4 h, r2 A0 {
window.navigator.appName$ W2 m1 Y8 d' U
'Netscape'4 D1 U& X1 k/ E9 |4 d3 |
// Web浏览器厂商和版本的详细字符串; o0 ^& X  p: x. w- B/ o
window.navigator.appVersion
# Q+ b; D3 u( L'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. k( N4 A' N  {6 y+ w2 ]7 R; `// 客户端绝大部分信息
$ \4 @, _1 i; b5 Kwindow.navigator.userAgent
2 W- Z& X, r3 I: }4 c) U& m'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'$ m( F7 ~8 t* d% H
// 浏览器运行所在的操作系统
% w, L, t% m/ ?/ L0 Iwindow.navigator.platform5 y" Q' s6 i0 m, K: N! _
'Win32'/ W. K4 v% @* W8 U; v

  O8 K- H# i3 ]7 `4 J//  获取URL
5 c9 M$ T# `9 i9 \7 Z/ V& i4 bwindow.location.href' j  m, o, S+ N( b2 E" y# l
// 跳转到指定页面
8 `0 M. @2 h  S4 @% \window.location.href='https://www.baidu.com'
1 u+ y# T+ k' Q4 C// 重新加载页面
+ C1 J2 i0 W; Nwindow.location.reload() ; y4 f. S, `+ `) \9 o. @
</code></pre>0 X1 Q/ f/ z$ v5 Z& i
<h3 id="32-弹出框">3.2 弹出框</h3>* O; s# Y4 |2 Z1 `! @7 @$ E
<p>三种消息框:警告框、确认框、提示框。</p>
0 l  B( G! @# B5 w<h4 id="321-警告框">3.2.1 警告框</h4>8 L4 G; k2 F  r
<pre><code class="language-javascript">alert("Hello")
0 A5 r. D. U- I8 Y; g& u& r7 K</code></pre>
2 U! b: Z) \6 f+ d! H; \<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
+ Y9 S& N) h" o. {7 k5 J<h4 id="322-确认框">3.2.2 确认框</h4>
2 d7 a0 M% ]5 _9 O5 V' B7 ^<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>. {' b& D7 c. u: Y- O( P% W
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
" ~& y) E. q4 H4 y6 ytrue" D, q4 M8 v7 V8 A2 P
&gt; confirm("你确定吗?")  // 点取消返回false4 t; S3 u$ i. Q9 Y0 ?7 E( o
false
. s. f2 l% x! K, M% ]6 ~! s</code></pre>4 W7 ^' \- d; Y) ^
<h4 id="323-提示框">3.2.3 提示框</h4>
, ]) n1 Y" u% V% Y% A: W3 q* q' ~<p><code>prompt("请输入","提示")</code></p>+ f9 G7 ]2 s- H4 X
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
% X& A/ k, d2 Q* c<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
" s, K+ D( }0 y5 ?<p>如果直接点<code>取消</code>后端收到<code>null</code></p>8 b! \  |8 U* K& b9 I
<h3 id="33-计时相关">3.3 计时相关</h3>5 L7 l) o- S4 b( ]) P% i
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
% L% H' s# K; b  }1 Z  k' E5 ?<pre><code class="language-javascript">// 等于3秒钟弹窗
3 S8 r. `, m& D. m) q6 @setTimeout(function(){alert("Hello")}, 3000)+ T. G7 B( k3 g1 v

  h" B0 W/ E3 f5 T, Avar t = setTimeout(function(){alert("Hello")}, 3000)
6 O! G$ E/ J1 Z! B' C, N
1 \  [% w2 R. H0 {# t- O// 取消setTimeout设置7 o/ L2 m2 `! u2 h; Z; ?5 z: c2 B
clearTimeout(t)
- k4 L. l; X6 u7 a  J</code></pre>. j7 G: q2 i) b9 F8 v1 c
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
: d4 ?3 p6 {! d, r+ j<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
; {. r3 L( H. {: x  v<pre><code class="language-javascript">每三秒弹出 "hello" :: k) Z& J' ]+ U# w4 o! q
setInterval(function(){alert("Hello")},3000);# U1 P5 N2 r) s, O6 M
</code></pre>" }: z/ B0 e9 U' K- R& V6 h
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>- K0 E; H/ ^: ~" \
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
, r1 d1 s, ?) q) _; p, N. k! H0 @//取消:
2 M, b& Q- ?: }9 U; bclearInterval(t)9 D9 g0 P2 J9 l; T$ c2 a: k
</code></pre>+ g& p( p- C4 `1 {& B; A
* S3 d/ L+ `2 U; L' P* y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-6 00:56 , Processed in 0.079047 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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