飞雪团队

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

前端之JavaScript

[复制链接]

8034

主题

8122

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

7 F9 ~  [/ o1 J4 Q; {<h1 id="前端之javascript">前端之JavaScript</h1>9 z! |1 `0 y1 R, G. s+ C$ p
<p></p><p></p>
7 M! C& P' S. Q2 q7 ]0 F<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
% |/ u. G; n# [( p<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>. s$ t" K/ C0 O' u
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>* \; M2 b& F6 Y& J* k, f" \
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
2 l  [3 W( Q# a6 U9 l它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 n! r$ A) J9 W3 I2 K3 S
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
" g- {" Y* @' j; Y# e% P<h3 id="21-注释">2.1 注释</h3>
/ E7 E9 H) p- P& e0 Y4 q) Q<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>3 B6 A1 V* d& @* A/ G' L9 t
<pre><code class="language-javascript">// 这是单行注释
5 U( W% ?% }1 J- E& a3 Y$ x2 C. `* R! d4 ^: z9 p; ^5 U! X( R
/*) r& W2 I. o4 c" Z& L; s
这是多行注释的第一行,
2 Z4 w+ r# u0 r" L5 K4 e这是第二行。
# ~% I& p( y) q8 a. Z# Z* ?6 }- u*/; X& L. a8 t8 j' A
</code></pre>8 v2 W, ?) B: t! t
<h3 id="22-变量和常量">2.2 变量和常量</h3>
! k  R) u* P( c4 a% d3 e  M<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>0 M. B% s- T! k7 S& @& f- I! f
<ul>
* j1 o1 X& Z! [8 z  ]' ^<li>变量必须以字母开头</li>1 a0 J6 [; ]: A# @% [
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ x0 W. i$ b' W7 ]/ N. s( h: d5 e
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>1 [: J. H/ i8 W5 f; E
</ul>
# W/ Y, u; E3 W. m* a, i+ W6 }9 y<p><code>var</code>定义的都为全局变量</p>
* n) V& z! \5 K1 F2 Q<p><code>let</code>可以声明局部变量</p>( K7 Y1 M3 T' M/ A
<p><strong>声明变量:</strong></p>, R0 b$ u; b: p; m# E) w
<pre><code class="language-javascript">// 定义单个变量
. W1 g9 w9 B7 ^5 _4 ?2 L&gt; var name" ]; }1 _  `; A# L
&gt; name = 'Hans'
: A6 x  e) E3 Z# l" x3 |( B0 k//定义并赋值2 S# t1 f: H- o* w
&gt; var name = 'Hans'- U4 M, v1 L2 Q, p. u0 C* I; e
&gt; name& F  @* r% b3 b! w, n% v
'Hans'4 j' k8 i. [- }. N* E2 }

5 m9 y+ _1 Y( o// 定义多个变量
% d' V8 \$ o2 z/ m; N&gt; var name = "Hans", age = 18
4 Y/ c5 N1 O3 |0 U&gt; name' f' p* s7 P+ Z1 V+ h
'Hans'
' n$ K1 u* b+ s9 J0 X/ e  V7 @8 }&gt; age
0 v* K1 j! m4 h* U5 G# A$ A9 O7 A184 @% Z5 _/ m. R0 Y3 \: A
' `- L9 u9 @7 E, n6 R
//多行使用反引号`` 类型python中的三引号
2 K+ A1 U; ^0 Y( j( i. d( W, d&gt; var text = `A young idler,
: a8 k8 z1 Y) e+ \, |/ D- u0 ]an old beggar`& h- D+ S: ^( @4 o: ~( {8 W
&gt; text5 H( h0 u* f* R$ W. O* z$ ?
'A young idler,\nan old beggar'
9 P) z7 i1 @) K. g$ @</code></pre>1 j, r- u5 z' o4 e7 }6 {
<p><strong>声明常量:</strong></p>$ [0 c( N: ~) ^- O! U/ w9 X( k2 f
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
! V" E) g( U$ e& Y<pre><code class="language-javascript">&gt; const pi = 3.14
6 R) [: z1 F% n0 E&gt; pi- @5 T; ~/ k4 H  ]: `1 g
3.14
3 s% [2 F# M, l* W4 ?&gt;  pi = 3.01+ v" m0 a" |+ z+ i& R- V2 K
Uncaught TypeError: Assignment to constant variable.5 E7 c" t6 S7 _" O
    at &lt;anonymous&gt;:1:4
# d- D4 Y9 L. e0 H, S8 U5 A9 T; x( _4 p9 J7 B7 M1 e/ D1 v& N5 B
</code></pre>
% a  N0 H& X7 d0 K  N<h3 id="23-基本数据类型">2.3 基本数据类型</h3>: O7 B: I% M3 c% J
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>2 j" C  K" L  m
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
$ l% k9 U1 P/ T0 P. j9 t<h4 id="231-number类型">2.3.1 Number类型</h4>, _- X$ S+ B  ?- H4 h6 S
<pre><code class="language-javascript">&gt; var a = 52 P) Y1 x0 ~7 T9 {; i+ X
&gt; typeof a   //查看变量的类型  
$ Q  p5 K* R- z0 p8 ^& b) Anumber' `  Y9 T. R; S
; |; @$ W9 Y* n0 ]- B# }7 ?* a3 P
&gt; var b = 1.3& a4 {9 \2 @8 u0 L% k
&gt; typeof b2 ?6 @# U1 c* i2 C- C7 y
number$ k$ R/ S1 F; a) h6 r: b- C
5 W" ^, k& _  C$ g
// 不管整型还是浮点型打开出来的结果都是number类型% Q. M- a# `/ x$ s! L
; U5 a$ [1 Q8 j" `3 g$ X0 ]  L
/*1 H' b! Z% d' z8 K% m0 O) s
NaN:Not A Number
: f. K3 Z0 Q* @. b8 S) TNaN属于数值类型 表示的意思是 不是一个数字
3 v8 R  I2 _6 `5 F*/5 I/ ]) \, i% D: _+ F
! f; j4 m: i3 m
parseInt('2345')  // 转整型
; H4 d# P. m0 R  m% s23459 ?4 O/ I! Y$ @% o: I5 d, W
parseInt('2345.5')
; C2 O0 @3 o6 Z  ]+ Z9 N) |# x' R2345
9 Q. k: W. Q7 KparseFloat('2345.5') // 转浮点型' C1 B! g  {* L$ T, Q9 r; o
2345.5
/ e- C6 q% G9 a4 E% B3 cparseFloat('ABC')
& ]1 R: r: \$ |( K" mNaN
1 {6 d7 h6 \+ ?5 bparseInt('abc')
0 G3 \1 y7 @4 iNaN
8 O; I" g* Y7 n7 x7 ~; v  s7 _) {$ ?6 m</code></pre>
# o! p6 K' F) C: e$ r9 Z<h4 id="232-string类型">2.3.2 String类型</h4>
5 ^7 N' B% d0 b; u2 T<pre><code class="language-javascript">&gt; var name = 'Hans'! [2 V* Q# Q3 j$ n* Q/ l2 Z4 ?
&gt; typeof name
+ q) l6 O/ J) V& W# k- C9 I5 S9 g: o/ D'string'  x- Q) {  c5 v9 d1 K
. G0 m' \( {; k7 [, W/ F/ b% Q
//常用方法
, c+ t0 \2 w' l0 {// 变量值长度% v9 c7 l' S) a
&gt; name.length
* g$ X5 ]3 ]/ D) c6 U7 w6 i2 V( P: a4
! ]. P; t. x5 k- K// trim() 移除空白
& m) [" `4 i4 W" Z&gt; var a = '    ABC    '
0 U- w% ]+ U8 h: S# _' P2 z4 R&gt; a
$ S% w, V6 U4 F/ M/ h" m'    ABC    '
: M1 ?' x( B5 [" {&gt; a.trim()
  C0 I3 M. \0 \7 Z+ A'ABC'
. e& e6 |- j& `3 K) h1 ?//移除左边的空白3 t2 B% b1 E: d2 B  d) ~& s& L% u. [
&gt; a.trimLeft()4 M5 Z( f4 Q7 W3 V
'ABC    '; ^5 a1 `6 ]$ H
//移除右边的空白0 A- d% a  E5 m/ ^
&gt; a.trimRight()1 }$ D& E2 ~- R5 b7 {, ]. S  A( W' D
'    ABC'% v& h. }  |; Y/ `
8 ~0 k0 s, J: `3 w9 \9 m
//返回第n个字符,从0开始
; N2 @% g4 W" ]! U7 P&gt; name( y, p( R& s  k' l1 m
'Hans'4 e; K  n$ k8 ?1 H& \
&gt; name.charAt(3)( d) h+ q3 A. t, V" c1 i4 h  S
's'1 j4 N% T% x! ^+ ~$ P+ X
&gt; name.charAt()
/ E9 o! J: q" e7 g'H'& b  m) F  H- b5 b$ i* G7 P
&gt; name.charAt(1)
' A4 S9 R  J7 t3 }6 V7 S# {' W- a'a'
/ Z, s9 ~+ \, Y$ |& b9 Q9 B$ H  h' ]! u
// 在javascript中推荐使用加号(+)拼接
1 k2 h$ w* ?$ A6 f4 B&gt; name, l7 n% F+ ^9 ^6 |1 Z/ O
'Hans'9 t" _% Y  Z% m" ?
&gt; a0 Z% S- ?: L  E7 g
'    ABC    '
( h  A& y1 X: _2 W$ {9 m' G  g+ W&gt; name + a4 e+ H; F. f$ u. g
'Hans    ABC    '
( U" A8 r8 j6 V& g3 i7 A// 使用concat拼接
3 ~5 m, ?% x- Y) [6 r; U% w&gt; name.concat(a)7 q8 j! \' e) D4 J% \
'Hans    ABC    '
. F# D2 R( H- {1 a5 Y, Y/ K$ w
5 K. L- R* o) b//indexOf(substring, start)子序列位置! X- i: |- t/ x$ F* V( l' {
6 G0 X, u% A0 {3 C/ }6 y! d2 k
&gt; text
- Z3 w, w. Y7 @3 v'A young idler,\nan old beggar'+ n( _0 w  y2 C: T9 P
&gt; text.indexOf('young',0)5 d8 h* E& n  v3 E4 t
25 m0 _% E; p1 e1 h% f  N

  }" @0 [5 {4 L( ?: e4 D5 h6 M) B//.substring(from, to)        根据索引获取子序列
( j9 i* P& l0 f+ ~- V&gt; text.substring(0,)
# p2 x; F+ Q3 x7 s+ E'A young idler,\nan old beggar'
" ~! L( I3 R0 T7 D9 r* b2 K6 v/ m9 c&gt; text.substring(0,10)
" e" E4 N. ]: W: C6 s3 R'A young id'
3 o+ H, N+ N' k8 m: ]9 F/ ^( Q/ \3 A# Z0 O6 o
// .slice(start, end)        切片, 从0开始顾头不顾尾1 B( ~2 N  R; Z) d* T9 K
&gt; name.slice(0,3)
+ ~9 `% z* g: k7 f& S'Han'
& z- ~1 p  {6 q( k" h! m  h* T4 g' V" q0 X+ r: J. V( A
// 转小写
% j6 I% J7 J! b* d, D& A&gt; name
$ B7 B( m  b- f'Hans'
8 j/ K  t% l- \! M&gt; name.toLowerCase()
/ c5 u& x: {1 _8 E# Q0 \, E$ p2 \'hans'
6 h3 t4 @3 u9 D: R! u// 转大写
7 @  n" o  W6 ~+ m- o# ]. g& i4 C&gt; name.toUpperCase()  Z9 p9 d' \& Y' G* K9 X5 {! G
'HANS'+ C# s5 j. n% ^; X6 `  O
) D; E) N: n- }( {+ V( k
// 分隔1 @% ^  n3 N8 i% z
&gt; name
5 a4 I5 ?" p, c& x'Hans'" X# i- n  L% h/ j% j& `( Y2 H# ^
&gt; name.split('a')
4 L- P: A# a: ?(2)&nbsp;['H', 'ns']
" _1 Q+ ^% t4 X' B3 l# R0 f! e! m: \</code></pre>
+ t# L' _7 ]. E7 w7 @7 S: e( p. v* w<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
3 ~7 @. `- b1 `! S) [<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>3 f4 z/ f, c- \9 k$ w3 D( n
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>  J9 ?' \1 z! R$ T
<p><strong>null和undefined</strong></p>5 l% B1 T  g, Z4 }' T( l1 o+ M
<ul>
! ^$ I5 c- a/ h+ \6 e1 g5 V; ]<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
8 R" u7 S! V7 X% N, j<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>6 J  f  R: b+ L+ D
</ul>& b) c1 s$ k& S4 _& e. L
<h4 id="234-array数组">2.3.4 Array数组</h4>
& j" V9 q( B: y+ C: Q) O6 I. a<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
$ u8 S$ z) g; e, s' ]<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
# D3 y! o: w  T  Y&gt; array1" y, y8 y1 W% L+ Y6 e, ^2 e; H
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
$ X0 e" I+ S: n4 P&gt; console.log(array1[2])  //console.log打印类似python中的print
: C$ w1 [( ~! \. v! O' v3 |4 o2 k3
; H3 d2 [% Q, j) a* p// length元素个数
; X) ~6 {- d( K! W/ a&gt; array1.length9 b! n/ v" g6 q; B( [2 ?
6: H( m, Q$ d/ M4 L
// 在尾部增加元素,类型append4 _' f7 {3 f+ j6 g5 J, ^1 Z- u/ }
&gt; array1.push('D')
# k: V, Y" {! A, ^: z# o. d7- f1 G( C6 u6 p, a
&gt; array1
( Q9 f5 k- |: ^' B0 l(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']7 N! o2 r4 v+ [
// 在头部增加元素, ]: [7 h- ^/ x9 p! [2 R( q6 e$ I# N
&gt; array1.unshift(0)
0 u- V8 @  ?/ z; j  s2 H8% h1 ^. l9 q: F$ f1 b
&gt; array1
/ y2 p" a7 }: C! m, i(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
8 q" U: ^6 ]% s1 s0 o1 v
: ]# B* M; q+ e$ Y6 s* Q! k6 P//取最后一个元素3 J  k" |1 z6 n( K2 @4 t
&gt; array1.pop()
4 r4 e1 O7 o3 w3 B/ W2 e'D'
' Z* I2 c* V7 I' w( x&gt; array1/ c3 f! L5 Z3 I1 B0 a
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
/ L  V! p+ o) r& N//取头部元素2 u2 L  \" Q5 I/ l; V' K
&gt; array1.shift()% w: _/ Z  O" \% z- k$ I7 D1 c+ b
0: T: y# p' ^. K) n
&gt; array11 v8 G0 x# K9 L4 Q
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- V- x: M5 @# z  Y8 X- A  A3 k! u

. p" g5 T/ i& v: J3 X# s$ U//切片, 从0开始顾头不顾尾' }, ]# i9 F0 E9 K" A
&gt; array1.slice(3,6)
% n7 F1 E& j9 p- I0 x) _7 k& t7 D5 h(3)&nbsp;['a', 'b', 'c']  V: E+ O/ r8 L; E
// 反转
! B  }3 _& r& e( P3 `7 H&gt; array1.reverse()
3 Y7 b" R& M1 w* {+ X, v(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
, a' K+ ^  F. ~8 b// 将数组元素连接成字符串
/ _5 x0 g- Q) r4 z- f; @0 y# }&gt; array1.join() // 什么不都写默认使用逗号分隔8 u* H0 i% w/ }, o6 }" o$ R. v
'c,b,a,3,2,1'
- d4 |, C: g2 S! w+ G9 D+ c&gt; array1.join(''); ]+ Z/ a6 j8 F
'cba321'  w, h; [3 l7 n; |' u2 {1 t
&gt; array1.join('|')
( R' x& M; P- Z: Z4 a'c|b|a|3|2|1'
  T* a. V/ B7 v0 D$ ]8 i8 E& k5 _( X7 c  d0 [
// 连接数组
% {6 A! C$ o: E+ i1 z2 D6 [9 A8 Z&gt; var array2 = ['A','B','C']/ n' @2 D5 W6 T7 U* ~- A
&gt; array1.concat(array2)
; N" m9 w5 J! a. j) p2 l(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
7 K7 {! }( Q! ~7 D
4 y# w9 b$ H: N& ~6 t  R: Z3 }. C// 排序5 r( F& a  o# I2 M7 e3 C
&gt; array1.sort(). o8 {  G$ W2 S, l0 V
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 k( J; o$ P; `$ T
0 U; S. `* v6 T1 M* Q
// 删除元素,并可以向数据组中添加新元素(可选)# z3 g3 R$ o# H$ e
&gt; array1.splice(3,3)  // 删除元素
! q8 X$ e& Y* u(3)&nbsp;['a', 'b', 'c']: y% g6 V( `! p! F
&gt; array1+ }. M) A6 h  b1 z# Y
(3)&nbsp;[1, 2, 3]
- I6 d$ S! `  F; _& D&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素; p2 ]& ^$ t" W$ E3 M7 c  x
[]
0 h: r# Y3 B9 ]&gt; array16 o8 i/ V  L4 ^# X2 J/ Z3 [
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
2 D7 s) |: w0 n: b0 D' z' R
: ?  d8 X; O2 `. k% h/*
1 @$ |( w3 m  fsplice(index,howmany,item1,.....,itemX)
: k6 a: h, x5 ~* Hindex:必需,必须是数字。规定从何处添加/删除元素。
7 d# r  O' _! Y3 Z6 r+ {2 t/ ?3 hhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 |7 s+ p( G# A) z/ q3 I0 a+ H: W4 Jitem1, ..., itemX        可选。要添加到数组的新元素- R% N9 U/ i3 O
*/
$ |) [* a& O7 }$ x2 A7 y9 \( B# c
& |7 j' M) H$ ]  i" H& U// forEach()        将数组的每个元素传递给回调函数8 l' [$ d* V$ J/ x' u4 F* Y
&gt; array1.forEach(function test(n){console.log(n)})
4 E4 ^! r5 h, M* e3 x0 l$ P 1, S! z6 X; i8 M% w4 Z/ S" I9 w1 L
2
. Q; M! V( ?, _  E$ H: f5 T 3; J+ i$ \  ]- y" y
A
! b5 ~5 `3 k- g: w% Y B% h" {' W# x* g6 X* ?) o
C7 |, K2 q- n  Y+ C
// 返回一个数组元素调用函数处理后的值的新数组3 K0 u# e0 m: [9 {3 `
&gt; array1.map(function(value){return value +1})
2 A# C! \4 W6 Y7 Z% L5 w1 c(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']3 n! t# Q# D& Q7 ]3 p
</code></pre>
* c+ u4 Q3 c$ R$ A- `6 j7 p9 k/ ~, t<h3 id="24-运算符">2.4 运算符</h3>+ X( }9 l7 w) x! O
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>: ^, w8 P3 I2 l% g  b
<p><code>+ - * / % ++ --</code></p>
- u$ q# x6 o& S$ ~) }<pre><code class="language-javascript">&gt; var a = 6
2 Y  b9 v8 v3 A0 b&gt; var b = 3
. I7 U/ X8 K% P3 D/ R2 P$ L; d// 加
5 I. _/ d/ W" L' g* d) D&gt; a + b
5 d6 n2 t$ l' }6 ?5 K9+ e7 F0 S" L& k# G+ T, g7 n
// 减
0 |2 o6 `; @, f9 F& l0 T# ]&gt; a - b6 }- s- l1 ^. T) L/ L
3
! }: ^3 W) j3 Z& }- B// 乘
* M4 [& [1 G% s6 G, v; V9 o&gt; a * b
, a5 |% v9 C( N18
+ {6 l+ x5 y3 S& f7 Z( V, g// 除
! z% i) a* J/ H0 R7 i8 W&gt; a / b
0 A; |6 A, S' r6 J, U" C2" L1 x5 t% p& q8 Z5 m# N4 `: t1 Z
// 取模(取余): t0 P( u( J8 i- A) S' I* ?
&gt; a % b
/ C& k* @. \1 \0
# k  L* j7 s0 t: v1 \; k6 a% i; A// 自增1(先赋值再增1)
+ C9 B' b# [0 w6 K! b8 @( S# g&gt; a++
1 c2 P7 ~" }' m; N+ N6 ?6
1 e& q4 ]; {& ?. h&gt; a
5 m$ `/ \! ~3 V3 G0 `7 N5 [7: O; F7 G. w2 L) F) _( }, M7 v$ Y
// 自减1(先赋值再减1)
, e6 |0 _$ j: A- B% h1 y1 F&gt; a--4 \, y2 h3 {# p/ n- l
7
6 d0 B* ~& R; ?  S; Z, R&gt; a2 M. Y3 n# [6 s
6
$ f$ c) V2 q) x// 自增1(先增1再赋值)
& e& U+ H7 y4 \9 Z8 J, D&gt; ++a( ]3 t9 {7 m7 z
7) ~: W4 {5 q! e4 K+ L7 x) W
// 自减1(先减1再赋值)
( q. y, L- B  N2 s6 {. J- F4 u&gt; --a
' y4 [) _4 l4 g4 x$ P6 o6- [8 @( R7 y3 |) |( C
&gt; a% {% D6 R: {: n6 U
6
* \# p" ]5 t8 N+ W6 L/ S) P$ S. C1 X, m1 _
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理3 P& P9 Y" Z, m; a
</code></pre>
$ M3 s! {1 B; ~) H, C8 a<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
/ a' Y+ `; S& ~9 Z<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>  `7 y! C0 v0 M$ d# F7 Y
<pre><code class="language-javascript">// 大于& O* K% t: T& Q7 `$ k* Y
&gt; a &gt; b$ F* B$ ~0 c# V7 k' e, Z9 G
true
3 Z5 D% P, z6 d! z4 P# R) g// 大于等于  r$ Q; _( }. o. K  \, t/ H
&gt; a &gt;= b5 w9 Q7 m) R7 {5 ^
true  f4 H; ]' S$ d
// 小于
* o& S- s$ _$ w8 S: T1 ^( j&gt; a &lt; b
* r8 C8 Z) R+ y" c( [3 l0 c4 U) @3 Rfalse# L+ T) Y$ ]3 ~, ]- E- S
// 小于等于
' a: l+ [/ z2 o2 f) j+ l&gt; a &lt;= b
9 N" G. U0 U* t4 Z# M1 x/ \false# G& U4 c0 ?8 y. |3 |* R1 Z! _
// 弱不等于
0 y+ O) n7 @3 o; H5 F2 e&gt; a != b
5 k0 x* q# i. I/ N: b6 E4 u( Qtrue2 J: q$ L. |( A" y4 k+ _$ U
// 弱等于. f+ [' |, y8 X. V3 g. W
&gt; 1 == '1'
3 x! b5 h# E+ R7 c" G' }$ [8 s. ]true
3 M' r9 \5 B: U. F9 G// 强等于
5 v/ i% Q( y" U. c& O2 k  P&gt; 1 === '1'' m! o- A  P  j& S
false& s( v( |* `7 a" j7 l. r6 u
// 强不等于
5 V" S# y! w* G: i  q! C&gt; 1 !== '1'
/ [) {% e' \+ g: Ctrue
$ T) j+ D# |( i: E+ _" ~: i1 h' N: A
/*
( q) E$ M9 P) eJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误4 {% R' Z" d$ w; _" s
*/
. t; m$ U/ H6 |& |; }7 f3 `% X</code></pre>
7 o7 ^+ l0 i/ }6 b1 y7 E<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>4 n# n/ H) V! ~5 [+ o: Z* Z4 U
<p><code>&amp;&amp; || !</code></p>4 a( D( o- Y, w% g+ E) n
<pre><code class="language-javascript">&amp;&amp; 与
  j) {7 F! S3 [$ r4 L! s, X% n* a) t8 @|| or - A# S6 m' C8 V7 w
! 非$ H  N% J+ }" o1 N; E/ J# \
</code></pre>. E* j, Y. m+ J
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
! h* V- C. Z* r8 S<p><code>= += -= *= /=</code></p>' C6 b& C* d  ^4 W3 X# m
<pre><code class="language-javascript">// 赋值
8 b" t% u, h2 k# b&gt; var x = 3
$ K5 Q. l- @! @% o- v  |// 加等于
0 J& \1 \, {+ A3 o&gt; x += 2
5 H' b* {5 ^7 ~1 s% w4 i" v$ y5
0 l9 u, J; K' }, |% }// 减等于
7 Y2 u( z& F+ T. Y&gt; x -= 1
8 ~, ~7 z6 m" W' Z! g7 R4% i3 i0 h1 o$ i, j8 Q
// 乘等于
! w) X9 |9 a6 ^" u. F9 |3 C* I; O&gt; x *= 23 k  U/ f6 E$ L0 H( l, o! d
8. I* {: C+ Z9 l; v/ e* r
// 除等于
/ I- w& C% {/ p9 D7 b& q1 R5 |3 E&gt; x /= 2" U: |! z& p5 s; H! \
47 X8 Y9 G3 ^0 H0 K" J; Y6 M3 B( S. x
</code></pre>$ _# B) K4 W) H. X0 ]8 a
<h3 id="25-流程控制">2.5 流程控制</h3>' X. a' F" @1 R! Y6 a' \1 {* Z
<h4 id="251-if">2.5.1 if</h4>  [* p7 a& f5 q+ K( J4 ?8 N, Z
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
% V. _/ f+ X: U! z( a1 [. x: I7 ?2 Q* w
&gt; var x = 3
! D2 W+ j5 t: s" h9 B9 B; ?$ w&gt; if (x &gt; 2){console.log("OK")}
5 B' U% Q* \1 U- c  s* s/ o OK- ^+ b- B6 ^- Q" ^% h, e& v
, i* ?, b7 D1 K
2, if(条件){条件成立执行代码}
' m( S$ b! l8 [        else{条件不成立执行代码}: A  w' J2 u( d+ K9 M

, X) ]- k. D% g&gt; if (x &gt; 4){console.log("OK")}else{"NO"}: J$ l1 s) `0 g/ W( L0 A; g
'NO'
6 c: O% a9 y' ], a. ?9 `7 ~* J. G
2 d7 ?& F0 b9 i. j1 ]3, if(条件1){条件1成立执行代码}
5 ~3 P: _2 O' r: J3 k5 B% k* \        else if(条件2){条件2成立执行代码}
" t4 f3 Y9 F+ i2 ?1 Y; ]    else{上面条件都不成立执行代码}' w* I, q" H; J, J
) ^- p. m( i+ b# v
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}" S$ M/ N7 ?/ Z5 f, T" n
Ha( q. U7 @" O" B0 k; r
</code></pre># d( W' r- z2 D' j5 Y+ f
<h4 id="252-switch">2.5.2 switch</h4>$ b( F: ?" a; s6 d
<pre><code class="language-javascript">var day = new Date().getDay();; t6 V1 W$ F  p( t$ m3 }
switch (day) {
% |! z, s% s) ^- g5 F+ s$ X7 V  case 0:
# E6 k2 i( F  I% m0 I) b" l  console.log("Sunday");
+ ^0 U6 R1 {! p& v3 S  break;
# @2 X: C' v0 B9 t  case 1:
6 u* i* ^+ l( }  console.log("Monday");3 v4 {! J* k* p, g, u
  break;
: ]) Y- |2 V( O& T/ Udefault:( Z8 h, [$ h- Z6 z0 g
  console.log("不在范围")
" ^# N* V* p/ y+ U* B  L}
6 k; K  j% k7 S2 t( u 不在范围1 F% P9 J# ?, k  j0 N- B7 ^
</code></pre>1 ^4 B9 J/ J" }/ W. z
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>5 y. T; a( ]7 {% R: g2 u- Y
<h4 id="253-for">2.5.3 for</h4>
$ I, p% }; h" B<pre><code class="language-python">// for 循环* V0 L8 J. K# Y9 s9 i, @4 [, [
        for(起始值;循环条件;每次循环后执行的操作){
5 e" s8 |1 k7 d- S/ ~: e        for循环体代码
! K/ Z! e! b  O! A! ~+ V' N) s    }
3 R4 q  A: R7 N" U# `5 E
; J6 h9 O0 F; `$ Y/ e, Z3 [6 Ifor (var i = 0; i&lt;10; i++){; S+ D- v1 J, T. k% j
    console.log(i)% s( c4 L$ y; C, ~% e5 Q! r
}6 s- O/ A% q5 ]
        0
/ l# F+ g. s; }* a        1
% n; m  i+ s7 p# Z" n' g8 b        2- N6 t5 ^5 V. B" x7 Q" y
        3
$ T) n) g  Y7 y1 K6 c4 n) l        4
1 B1 w1 m/ a2 H/ |  N4 A        5
$ V' T9 `& P# r        6! e+ ?0 x% O1 H2 [' A& e; O) P
        7
$ U8 Q: m" Z1 }1 x: K) T        8
) N9 D1 {5 b8 r) Y& Z        9
1 n  t+ X" S- T5 O7 V</code></pre>
$ N% N9 {. \4 o# o/ ^1 F2 d<h4 id="254-while">2.5.4 while</h4>) H6 }, {8 O9 B7 C0 Z
<pre><code class="language-javascript">// while 循环
5 U6 N; a6 }+ W        while(循环条件){0 n# p/ k! ^% G: w
        循环体代码
7 k% F" M; e/ b7 G2 `0 s    }( X$ D& y0 y6 A0 h8 `; B( U' e$ S

# w; s8 A1 @: O; @&gt; var i = 0
& v: ]& j6 n2 T0 |( Z&gt; while(i&lt;10){
8 _3 _2 B" q" S5 k$ b: p    console.log(i)
" x  `8 B+ o. ?) w2 v    i++/ e0 \+ ?. u! \
}, h* h# K8 @6 o4 M
0
. C% ^9 }& ]. r( m 19 O% `' L7 r$ B0 F* L- b
2
9 u% I& W+ O( X 3, _6 O3 {8 n* b
4& }$ v2 @6 b% d) z8 E! X2 B
5
1 y  C0 V% j2 n- } 6" u* g2 m7 W  @" X6 V5 i! ?
72 D1 P& K4 {; K& e( P
8
% ?- q* g# l$ V, d9 q! U 9
" B4 O) C8 n. C' R</code></pre>
  _: e- A- e; k( [<h4 id="255-break和continue">2.5.5 break和continue</h4>
7 Q) e' x+ }8 a& G<pre><code class="language-javascript">// break
0 ?1 }9 _9 m8 p0 x' {8 [3 V% e: Hfor (var i = 0; i&lt;10; i++){
* u3 O- h- f: x! n" o    if (i == 5){break}
* a1 J' M* Y1 `8 M8 \/ w+ N7 l    console.log(i)
2 |3 _6 {1 @% k5 x; ~1 J}) k, d; Y9 A  d: L
09 q2 d' y( k) F, F  h" M5 E+ Q7 x: ?
1
" M' t' @+ y$ L" B; r: C" q6 b. i% i 2
. `1 n6 \: V, J) @5 c 3
2 d3 J+ M- U9 k$ L 4. d. {7 M3 L! C
// continue. J; r: e0 _3 _9 ?+ ^3 O" x
for (var i = 0; i&lt;10; i++){
  Y3 F# j' U. u6 e5 c0 r  V    if (i == 5){continue}
1 c" e4 r2 c; N# M5 B+ w    console.log(i)1 P' ~4 A1 X1 V9 I$ U1 `' @( h
}) I  ]+ B2 _; x8 T+ }9 v, m
0
% D! v1 H) e# {5 R0 r# R( X 1, L2 E: o* }8 p  Q- I, i+ n
2: D9 c* }/ t' K0 ]$ s0 }
3
) ^2 L# k# [8 F0 ?, r1 r0 W 4% m4 w+ u; D$ c4 o4 I* v% z
6* d- g, I  t& p: \4 ^
7
! i9 R2 t$ v. N9 e1 r 85 q- o# d* F0 r
92 p9 I0 u/ d5 O- j5 ]5 p: q  L) r

& ?3 T" t; }; p; M</code></pre>
% ^* q4 C( H8 A  M<h3 id="26-三元运算">2.6 三元运算</h3>
1 s) s  A$ A( [0 j: ~" _<pre><code class="language-javascript">&gt; a
0 k0 _9 `6 \: |4 P- Q/ ^$ w6
5 h8 ]: h4 _4 {3 o9 P. o9 }&gt; b- x" B; C$ N- |2 O  ^
3
7 `; R. J# L- s6 n) N# j+ s: x( x: ^7 |1 Z& i0 K  f$ A4 Y
//条件成立c为a的值,不成立c为b的值2 J, y% t1 s3 B8 a: |
&gt; var c = a &gt; b ? a : b
) j/ s  _" H( V7 U8 M: ^&gt; c
3 q( V7 a  `# l3 V0 d6
2 o4 M0 S9 S$ S4 k% F% U
' t8 Q) E6 q0 k// 三元运算可以嵌套
% a* M# s) g( y) `8 |* [" B  C! @</code></pre>- m' k1 r% |8 `8 P
<h3 id="27-函数">2.7 函数</h3>) A- v) f* a) k8 t% v" B6 x5 K
<pre><code class="language-javascript">1. 普通函数
4 M, A$ j: L$ K4 D&gt; function foo1(){# a6 F8 k3 G0 y# ^4 h
    console.log("Hi")
0 [' m; A" e; z  S& Y7 Y4 {}6 ~8 X" v2 u) Y. q  M# ~9 B5 Q
# Z' P8 X* p/ [/ U. K
&gt; foo1()
' C& L) [0 w7 m) L! w' K* K6 D        Hi
& v! \- H1 ~- |# }+ ]2. 带参数函数( _/ n0 Y! K0 o; Q- C3 x
&gt; function foo1(name){" x# x$ ]) p) s- L6 m% r
console.log("Hi",name)* G# s; `3 [! J0 y. `7 D
}
/ E0 Q, N. H1 y- b9 k. }
" U' e# F0 X5 \  P7 O  {2 v3 ^. s* Q&gt; foo1("Hans")
' A$ |- v& s0 UHi Hans% _5 U/ K0 ]+ l+ R( L
' U+ |- M" z% N8 d- L" d/ w! Y5 t
&gt; var name = "Hello"# `: A  [8 C/ Q' B) d
&gt; foo1(name)0 P1 c8 `* g; a# f- {* e4 _$ H8 K
Hi Hello1 K9 t8 `( s8 g* v: ]

# C1 \' I+ I9 j4 T! [& b3. 带返回值函数
2 K3 j* O. m. C; ~4 r&gt; function foo1(a,b){* K8 V. u& Q8 u9 o" Q3 N& t! L) o
        return a + b   
& V" x$ J- h; P3 [$ `}
4 H) l6 ]0 N- g$ s8 D8 m- H* i9 q/ n&gt; foo1(1,2)
: w+ z, l, x9 S  Z3/ @# r' Z! u6 y$ A3 I
&gt; var a = foo1(10,20)  //接受函数返回值$ [" ~( c6 l! x5 p
&gt; a9 Y2 k- T# E8 I, Z& t2 j: Y
30$ p* l- Q+ ]% x# }( m
0 \  x' {: m, {) a2 T; V
4. 匿名函数
. p" j7 v$ d: ~) O8 ^&gt; var sum = function(a, b){
- s" h* X4 F" H2 r2 S  return a + b;
" [7 P8 c1 q8 {# y) E4 H% b}
1 @! [/ I$ l& |+ O1 ?. @&gt; sum(1,2)
" h2 |, r( B/ L# m# `" h3
* L1 c$ T: S7 t4 d( o) ]3 j0 i! g% A0 ?% m! s7 P- R% t& u
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
) ^7 O9 p5 t$ o7 z, a& j+ Y4 k&gt; (function(a, b){
. ]# J- c* q+ i3 [6 V: t  return a + b
" X# h1 V; h& e})(10, 20)7 F) U' G. f/ w" R( w9 q/ I! w
30
7 s8 [" m8 g  T9 @. M, @/ ~
3 r9 ~' l7 m6 G. E1 J/ ~% r6 O8 J( @5. 闭包函数
5 }3 ~% k# I$ V6 a! o// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: J) n. q3 H5 r9 K/ h
var city = "BJ"
* H3 x( Z5 t) u8 j9 g' ofunction f(){( W" k$ i. s7 b5 s
    var city = "SH"
; `5 N1 k" Q' A    function inner(){
4 w- i1 P5 k$ G" b- R. A        console.log(city); A- v# A; Y) K% c" J4 M
    }
4 U$ M  z% v" c% }, y! ?( D1 w    return inner
8 t( j5 [6 z2 j  t}
7 @8 A+ y0 H2 h) ovar ret = f()
  v6 G; y4 Y) ^% ?* D) gret()
3 p1 B9 l3 a; [2 h1 k) D执行结果:
4 e/ Y4 i4 [$ s; L( fSH1 |8 D- l$ t8 ?' M0 {$ `5 h

6 ]2 z: g& d3 e3 S: G</code></pre>
. x+ }: Z) Z/ r7 v$ ]( C3 e+ Q<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>/ [$ ^8 J% }- E' [$ o& ?
<pre><code class="language-javascript">var f = v =&gt; v;" X4 f; B$ H) c5 x+ l7 |
// 等同于
1 N( c' _9 }8 V0 P  jvar f = function(v){9 K& B) A- O4 K1 N( a0 x
  return v;4 B  f; ~9 d. f4 |
}
1 A' X% q1 U1 m) E8 p</code></pre>: F. t5 l1 K5 b; K; F5 V
<p><code>arguments</code>参数 可以获取传入的所有数据</p>+ ]! {; x0 W  I6 A8 T
<pre><code class="language-javascript">function foo1(a,b){+ S( X* I( I# s* _/ a- V
    console.log(arguments.length)  //参数的个数
. F. \6 @- o! y5 H5 o9 E' v    console.log(arguments[0]) // 第一个参数的值! t) I8 p& R* W7 \2 F
        return a + b   . i; h! ?6 o6 r/ Q: d4 n4 r
}. [$ q/ p4 ]+ \# v$ t
foo1(10,20)
5 \4 @# T5 E' X1 G/ Q# u( P结果:# L5 `! }+ E- K2 N% k0 o
2          //参数的个数
5 u% O! r9 H2 {: L* }$ w10        // 第一个参数的值9 y, R5 z. @" u) d
30        // 返回相加的结果
3 l2 p9 v9 w6 S  f, s4 y$ @$ Q</code></pre>4 d8 m- Q; P$ {6 `- \
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( S, E; q% q8 u% c# R1 T<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>7 n; x  J) m# U' C: u
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
. X7 Z  k; K+ p4 ^+ {3 z4 w<h4 id="281-date对象">2.8.1 Date对象</h4>- E0 e( U8 [$ D
<pre><code class="language-javascript">&gt; var data_test = new Date()
, J' \# {5 ~& O2 y* w&gt; data_test  ]; a; U. T, K  B- c; Y2 {& }5 V
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
5 H; w! {2 I& X0 A4 E( T, H9 F&gt; data_test.toLocaleString()
5 [4 z6 N0 N% |9 f5 N, Y% I'2022/2/11 下午9:44:43'/ p0 A8 A! q" ~5 u. E8 `5 A+ E  z# x
2 F* k' b$ I- [: y5 p1 m
&gt; data_test.toLocaleDateString()6 z9 h6 N4 {( ?& y
'2022/2/11'( _" _4 V  g* k2 C

7 ~- R$ ~2 d/ Y: U! r: N) P&gt; var data_test2  = new Date("2022/2/11 9:44:43")
; b* R4 b: o8 ?6 Z5 E) |! s&gt; data_test2.toLocaleString()) [" l: p2 J( K  ]3 E5 R
'2022/2/11 上午9:44:43'1 @  q1 a: B3 a( i; h8 j3 `9 _1 I
8 [, u7 U. R2 {! t! E/ Y1 Y
// 获取当前几号
( W: j2 A$ R& `& Y# x&gt; data_test.getDate()
5 l1 P6 {1 \9 {) ]8 @& P9 V113 F  u- U0 G% i
// 获取星期几,数字表示3 D, R) l3 f& q2 o5 y5 V. A+ e- `
&gt; data_test.getDay()  
2 _; J' X2 O. y5
! c; K+ l7 b5 Q// 获取月份(0-11)  l  ^% T+ ~* H5 o+ A
&gt; data_test.getMonth()
, S6 ^* k5 l6 U& y& Z/ Q1( w" r; ?2 _1 F
// 获取完整年份  I9 y! w4 l. j5 T* m& P$ C$ c
&gt; data_test.getFullYear()
0 j1 [0 x8 Y) Y- V2022
2 U3 \/ z; ^3 W! ^& b// 获取时
( w/ C2 F; ~" x' q% n3 O; A: q&gt; data_test.getHours()' r* I' Q% ^. o* j* b
211 D# S, W3 h. d) w4 Q) E  ~6 A' u
// 获取分
' b# Z: p* ^8 ^0 S4 i&gt; data_test.getMinutes()2 z0 d  r( _- ^
44
3 Y6 C5 v5 p! r0 Y* g4 N// 获取秒- k' a+ F; D9 Y4 V
&gt; data_test.getSeconds()6 B! n4 t! ]0 Y* W( ]) F9 X
43* C  }! N% ^  A3 z) w4 {) F. ~
// 获取毫秒
' Q' v' k( k$ F8 \* L! v4 p# P% D&gt; data_test.getMilliseconds()3 c- Q; s4 K1 N  G: ?: C* U" @3 d8 @
290# c6 P. ?- P/ T( g) o+ I5 O
// 获取时间戳) a) g+ [  Z5 U, D( S
&gt; data_test.getTime()8 x% E, C9 R* k5 z
1644587083290
0 X* v* }" y* K8 K5 j. w; |</code></pre>7 Y; N9 {/ j# M# v. j3 C& N
<h4 id="282-json对象">2.8.2 Json对象</h4>+ p$ t! W$ r- ]' B
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
1 K, T6 D+ v" q: ~1 J5 C  GJSON.parse()  // 反序列化,把JSON字符串转换成对象3 `8 c; B) q2 \* {) H8 S% Q
$ j  s' {  z5 G5 T$ M
// 序列化0 O1 u) }" Q( D" B6 P2 ]6 R
&gt; var jstojson = JSON.stringify(person)
1 H) E/ E% v# A) f% D&gt; jstojson  $ C5 f2 q" T) }
'{"Name":"Hans","Age":18}'9 N% k6 o1 N- F2 c' t- A

, w0 h& {4 n  m- \/ K, H// 反序列化7 P: y) L; |- M% ?( t4 n
&gt; var x = JSON.parse(jstojson)
; T# |! T: Y) b9 s+ ?8 X&gt; x
3 p- O% I. _; N( H5 W) O! P6 B( T( Z{Name: 'Hans', Age: 18}
( z, Y; A6 d8 z, |# |% N&gt; x.Age
3 w/ i, U& c+ `3 }; }7 ]* ]" y18' @# u; i$ p, }8 b" F, H" d
</code></pre>( ~7 ?5 M) V; i/ b# u' F
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
0 E1 e5 r9 L/ h<p>正则</p>
' I- S; ^/ ~! s- l' Q7 ^<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");5 `+ s8 m8 O# V# h1 l
&gt; reg1
7 Z( }: s! g) \1 Z2 C4 S; l8 B: b& x/^[a-zA-Z][a-zA-Z0-9]{4,7}/4 O% N" ~9 R4 j0 m& B3 \, {
&gt; reg1.test("Hans666")) v5 \: V: C5 z( C* ~4 U3 o' I0 v7 u) a
true0 b+ i+ P4 e7 f3 j. J# p/ r: a5 ~

" d( o# X7 g$ U3 I&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
. K+ J7 M5 @' p- V$ t&gt; reg28 A( @: _/ X# e% x8 R( q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/+ K3 ^2 m: P7 g; L1 [
&gt; reg2.test('Hasdfa')" _3 q; L) W1 a& g+ r
true  K; k- Y) h- f% U+ y7 B) e" B4 w
9 R8 _9 {$ B+ G7 _/ N! r
全局匹配:" B! p# J0 E8 \  j1 p% w% D/ e" V
&gt; name
* j  W; `5 D6 k  a3 m'Hello'. v0 P  {' ^. M. v* |, p" H
&gt; name.match(/l/)* I: h% X2 P# G
['l', index: 2, input: 'Hello', groups: undefined]
) \, `* U0 e5 J8 q
# p' n, J" N6 H( Q5 J5 k' t6 c&gt; name.match(/l/g)
5 d* S) L/ u  E  {(2)&nbsp;['l', 'l']
% o8 ~3 n6 Z) A* ~0 X// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
; t3 \5 o; q2 t, k1 @( s& F( D- E' |" p
全局匹配注意事项:, y4 A/ M( H# l) H3 J, X
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g: r2 A( i1 ~% c, S% N: F
&gt; reg2.test('Hasdfa')
3 L% ?& @; U- l2 X; F" a% P1 \( ]true
6 C1 W' A6 I0 \' W- y3 k4 K4 C2 r&gt;reg2.lastIndex;
; B& S) m" l3 b1 ^6
! y) u4 }# x3 k8 x) c7 u&gt; reg2.test('Hasdfa')
- ~5 z3 V7 U8 H& T2 y- Y% l6 Wfalse" d; W/ v* t2 E( ]+ g$ J/ \' \& o' P
&gt; reg2.lastIndex;: v& }; w& E4 `7 S1 Z! A
01 y  z* \/ i) M! O" q
&gt; reg2.test('Hasdfa')3 R  L& `- j/ |  s
true
' R# d" a7 s8 J6 x/ s! M+ @" W&gt; reg2.lastIndex;
1 _4 y5 s! Z& ~! C; D" W8 _5 \# ?" `3 u66 @- N  g4 j) R/ \
&gt; reg2.test('Hasdfa')
; j4 |5 P$ v& X' Z  G- d* m) Mfalse! p9 }  Z& T$ h) Q$ ~3 v
&gt; reg2.lastIndex;
% i! D0 f% U1 t! ^$ P) T$ S; n0  X6 L/ f- S1 b/ a8 E
// 全局匹配会有一个lastindex属性7 |2 Z3 Y( a9 Y( K0 D
&gt; reg2.test()' k) j- ?$ J" b
false
0 }! z# ]7 M# S+ [&gt; reg2.test()# b: G; l9 M  u8 `# m, f; ]
true: D! k. X- {  h  w; f
// 校验时不传参数默认传的是undefined
/ Y& Q9 p9 ?% d& J- {! d7 l% G0 H</code></pre>; o: B* h& F3 @! m. B' T. u" Q9 P# @
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>5 r/ N  _) f4 |3 L% J) ^' v
<p>就相当于是<code>python</code>中的字典</p>5 x6 T8 }4 V% h# t
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
' _$ {& z5 q* i4 b! F) k&gt; person# e4 I# |! F! G8 f$ }
{Name: 'Hans', Age: 18}
; e- E, x9 Y9 ~( @1 a) [! \$ }&gt; person.Name
3 D2 y' X# ^7 n$ \; s4 ^1 V" Y'Hans'
9 l* d$ N# H8 z/ T* m' A' ?3 M&gt; person["Name"]3 E8 Q; C7 ?8 ]$ T( i' a
'Hans'
/ P: l. H3 k  n
( F0 N. e8 D. O( O// 也可以使用new Object创建. R9 k, y2 D/ \: U6 m
&gt; var person2 = new Object()1 U2 T" \$ ~+ q5 }9 |% O! Y  [
&gt; person2.name = "Hello"
3 Z( F2 b; G, |2 g'Hello'( w1 [" i7 c- r2 h5 n
&gt; person2.age = 207 ]+ h' j, d( o6 g/ Q6 A2 L" K
20
* U' v0 E3 U4 A+ J</code></pre>
5 v& F9 {0 `: c- S9 y$ Z3 k<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
/ M7 L: |4 o( h. A. _7 X  U/ q<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>" A7 N, r, O  @9 y5 B4 G/ b
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
0 P+ s/ N8 X4 O' U# `- \% q<h3 id="31-window-对象">3.1 window 对象</h3>: p& ]! B: y# H0 A
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
$ a" ]% c& d' t; h* Y  |<pre><code class="language-python">//览器窗口的内部高度
) g: z" `2 d! Y1 u2 h% B& zwindow.innerHeight
0 [3 M4 n% c; X, |8 ]4 d0 i706
6 S* c9 v! L; h//浏览器窗口的内部宽度
, f" W* E7 P% B5 ]window.innerWidth
: B! E1 Q1 z/ x8 I( |1522
+ h1 U* ^+ Y8 t% P9 x& t// 打开新窗口' V0 B, i% m0 e9 Z! O
window.open('https://www.baidu.com'), l! m4 q  l0 p6 o. y
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}% ?+ @3 p3 D' M) f5 d* g
// 关闭当前窗口$ G" W# |* S3 Z8 |6 o6 k
window.close() / O& U6 E, u, t+ J/ ?) W% s! {
//  后退一页
5 P3 u2 o6 ?& b+ mwindow.history.back()
3 H8 S* J' T; G8 p1 V// 前进一页9 W2 y/ p$ _% X* \! |, M) E
window.history.forward() / j6 o: `( B$ i3 h3 P
//Web浏览器全称8 x0 ?  h: e; H2 a$ j# w" d! u
window.navigator.appName
: b: A8 S* T& a# v4 f; ]'Netscape'
5 ]6 F2 w- V' S8 [/ d// Web浏览器厂商和版本的详细字符串
) j3 f2 T3 D3 ?1 R5 owindow.navigator.appVersion
  \& Q$ ~7 S# H$ d; k" X'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% S2 {4 A$ p4 F) K1 |) C
// 客户端绝大部分信息$ h  I9 i. V' z9 i3 A: c# c
window.navigator.userAgent) Y% s8 }( T/ s& l. j6 r
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'7 d& h; r' }. `9 V. W
// 浏览器运行所在的操作系统
4 p0 u9 F) f# c6 A( }$ s. Cwindow.navigator.platform
+ z# r% `( U* U' q( Q' c8 }4 }'Win32'
4 t3 g' a! F* x+ _$ I* r; b4 |  @# Y: L2 _* e& T& S* r0 D" L
//  获取URL
# [* E1 b3 J5 X' u' l- Kwindow.location.href: Z9 x$ M: A6 R! v; w. @7 u1 }% }
// 跳转到指定页面4 e/ A# M; O+ C) k; B. R) i. I. ~8 q
window.location.href='https://www.baidu.com'. N# P4 P" J( X% ^5 w6 q
// 重新加载页面! N+ f+ r- _& }: N. Q3 P
window.location.reload()
, F$ O0 g& |+ Z- [% e</code></pre>
9 A. V0 k' _' ]<h3 id="32-弹出框">3.2 弹出框</h3>, T, D) e6 T' h, Z8 r' h7 j
<p>三种消息框:警告框、确认框、提示框。</p>1 _# m$ U4 s0 w; y$ W2 \/ E
<h4 id="321-警告框">3.2.1 警告框</h4>
+ W8 p: Z7 L$ C7 H8 X* v7 e/ J<pre><code class="language-javascript">alert("Hello")# P* O. d. u8 ^' ^- _6 |* l
</code></pre>8 `$ k) b) G3 H3 A) k5 {+ H7 T
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>: B/ |$ v+ [5 D$ j
<h4 id="322-确认框">3.2.2 确认框</h4>
4 o7 G" e7 d, x! l0 ~0 E8 ^, d<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>" }7 q1 ^% x; K" N; \
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true' _4 ?) h+ N+ D8 y
true1 H% w  F$ b6 G% D  ?$ [
&gt; confirm("你确定吗?")  // 点取消返回false
* |& ^9 R' X6 z$ m( qfalse
0 {. q8 |  d, B! k</code></pre>
6 j- t) f) x+ T8 n$ A" z% \<h4 id="323-提示框">3.2.3 提示框</h4>8 H" |* j- f  O# ^9 b
<p><code>prompt("请输入","提示")</code></p>
+ x& l* o- r# l/ |<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
* v/ D5 C# X' ^( G7 d' Y<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>* H4 R$ A9 h0 p+ A  u) K' o
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
! i, M5 }, ?& m' E2 J6 M; I# ~+ r<h3 id="33-计时相关">3.3 计时相关</h3>
" W" O$ R/ c: K3 r<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
+ S8 |- B4 e3 n3 p  x+ {% j+ T<pre><code class="language-javascript">// 等于3秒钟弹窗
# M$ |  v: m! t$ i( H# nsetTimeout(function(){alert("Hello")}, 3000)  M  v( k# S0 L; s% N+ c5 r
2 o8 E0 Q# D# ?+ f) F
var t = setTimeout(function(){alert("Hello")}, 3000)& v% U, {$ e0 C1 O  ^) X0 @( Y

6 M; S" i. t; s# C) Q" m2 d// 取消setTimeout设置1 |5 l+ m9 t# ]0 j  ^
clearTimeout(t)( q: C/ i, w. w3 o. m( N5 j
</code></pre>
; |+ d) d; f- w( c. F! G% Q, F<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>3 L" f/ T3 k' @4 u' n) P. u
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
1 {$ ~2 \1 t0 u, I<pre><code class="language-javascript">每三秒弹出 "hello" :, w2 r8 D/ s/ y, B& C7 _8 f' Y
setInterval(function(){alert("Hello")},3000);
- _; \; W# c+ d5 m& q</code></pre>
/ @, a, f" o! w. x<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>( ^7 U) @8 t8 s
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 w3 r4 s5 Y6 {' J' }6 C* L//取消:: v+ a/ Y2 ?9 M7 E
clearInterval(t)5 I/ v8 S: K0 n1 T8 x, u* Y5 [5 V+ ^
</code></pre>, s( g$ A! p. g  L: ]6 O
4 }( U0 ~1 |  I
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-4 15:10 , Processed in 0.070858 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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