飞雪团队

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

前端之JavaScript

[复制链接]

8053

主题

8141

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

/ h( z5 G' ], H% `5 @0 d7 N<h1 id="前端之javascript">前端之JavaScript</h1># {; z2 q3 G' k. K. Y2 N
<p></p><p></p>
# n" Z0 a5 h6 d& V<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( J. F8 y- ?* R( X4 T0 B<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>2 T* S9 O& s" n* m* r( n
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
: u( Q' b  e; ~! B% S它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
' _& x; U. P- |" y& j/ `它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
; u2 b4 R6 u% u  B' X3 L$ r<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>; l2 A8 P" T6 {3 T6 ^5 i
<h3 id="21-注释">2.1 注释</h3>0 W, ]( U$ L' A( d" N) T4 ~
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>+ b) r8 J. P$ |" l0 M5 \
<pre><code class="language-javascript">// 这是单行注释
" v1 b4 {3 g# B
, ]* V! J/ `0 b5 Y% h1 b/*2 ]) N$ q6 A9 Q! U, u; J# y
这是多行注释的第一行,/ S; X) r- w! M' B
这是第二行。
2 T: x9 M/ P+ N1 y4 r*/
1 W( o, f5 ~0 p: a% Y2 Q</code></pre>. f# C, Z- R+ a- t" w
<h3 id="22-变量和常量">2.2 变量和常量</h3>
/ \. u/ R+ F; q2 p) u<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
/ X- i3 j# k* s; q+ k' l<ul>
) R) L9 c& M: b6 B6 t* p3 M<li>变量必须以字母开头</li>
3 A0 |9 L: V9 H. s9 e<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>+ F4 S7 F+ b+ x1 a& R- G
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>- ]$ D- v2 J5 I( H0 j
</ul>
9 `) z6 O  f- P<p><code>var</code>定义的都为全局变量</p>
7 D: K; P; A5 G1 \<p><code>let</code>可以声明局部变量</p>
1 d$ q9 C# d9 i0 B( t0 L- \4 y<p><strong>声明变量:</strong></p>
+ d* v: H5 r3 N6 r% w<pre><code class="language-javascript">// 定义单个变量# {+ s7 {4 r& ]! {* F- h8 h
&gt; var name8 N) x, }' F% X
&gt; name = 'Hans'" g; b# A* X* [3 U/ g) ]9 n0 a
//定义并赋值/ P$ ?' Y0 X* b! J4 Q
&gt; var name = 'Hans'
4 H# l: ]* \* G5 h+ s$ b0 |&gt; name" k& H# D' K* T1 w2 n
'Hans'
1 L; q4 j4 K/ a: L. h6 L/ X2 I6 v# H
1 j# e. F$ `  l, ?// 定义多个变量
5 q( l' L: H9 _& _* m&gt; var name = "Hans", age = 18
/ w* e1 F6 j8 C5 a& @&gt; name
& q" V- Q9 c6 p5 v& f5 M5 l'Hans'
  z. F8 Q0 S% A- I- ?- Q&gt; age
3 s: e0 x: Q' \9 H5 ^18( x8 c  h4 R* q8 v" @8 d

( Y, u) j1 Z! I. p* H' U//多行使用反引号`` 类型python中的三引号
. R3 I. F) s5 \* W&gt; var text = `A young idler,! E# X; r  X( x8 E3 c
an old beggar`
  z" z( X# u+ C. n. b# r&gt; text
6 v# Q2 ?3 S" s* H% w'A young idler,\nan old beggar'3 S5 L8 u' D  M
</code></pre>! X7 z  N% y3 d# L! {+ P
<p><strong>声明常量:</strong></p>
4 p" f& L& o: \9 b$ f) P' l: |<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>3 Y+ T8 {  e! n+ k9 r
<pre><code class="language-javascript">&gt; const pi = 3.14( c3 T$ h2 ^! D+ }
&gt; pi
7 r! p" u9 F4 W8 J3.14
0 [5 V/ k3 p$ H: N5 b) d2 c&gt;  pi = 3.01; [2 W6 {- k) D6 l% e5 G6 k
Uncaught TypeError: Assignment to constant variable.4 p  q1 ]4 \' O7 g
    at &lt;anonymous&gt;:1:43 J2 K$ C# N& n* ~: G& T" f! o3 N
& o  n+ {+ ?3 V
</code></pre>4 n& J8 h" E; _, T- t6 p( ?
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
8 Z  H' G$ n* r) ?" t<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
% Y" O; \% s$ B  K<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>; J" x. f7 o3 c, R8 F$ j8 ^
<h4 id="231-number类型">2.3.1 Number类型</h4>
' {; ~, T0 q! U/ T<pre><code class="language-javascript">&gt; var a = 5) ?5 d/ U& C& M8 {6 V
&gt; typeof a   //查看变量的类型  
# i' S7 ?' N# x' \9 qnumber
" l% N" c' S; |. g' A, O' A
  A3 ~4 D  U7 q&gt; var b = 1.3
3 C7 B; T; v" P  x" A&gt; typeof b' G. b# t4 ?' U  V6 I; z6 W* t
number5 L9 m9 y1 I$ y$ I
" d3 x' V+ D  H
// 不管整型还是浮点型打开出来的结果都是number类型
- L9 V. F# x6 ?# j. h1 s5 U; }( e& ]7 ?
/*0 M/ i3 c. X6 U: m# m
NaN:Not A Number/ L; M: ~% m' t: e8 G
NaN属于数值类型 表示的意思是 不是一个数字9 K7 Y9 K8 o$ ?3 b& A3 [3 S
*/
. q! E9 k8 \/ C/ e: a
2 {* N( n4 M8 d. `! s0 c( lparseInt('2345')  // 转整型: G: E9 ?" H$ m' M
2345
" ~6 t0 N  o* T/ @parseInt('2345.5')! n# ^) P( d& Y9 F* E
23451 e) P  }4 z8 C6 P+ n( v1 p$ k' s# Q9 |
parseFloat('2345.5') // 转浮点型! L4 G- n. X# E0 u) M( |
2345.51 i2 H, ?- V: u: o' n9 i' `5 }
parseFloat('ABC')
3 f! o! r: K: W% w9 wNaN2 n8 O; V4 |7 [: x* H. {
parseInt('abc')1 F, c1 n! B: i
NaN
+ l2 I1 v( v+ ^  f</code></pre>$ o# l* H) z* W( g$ ^
<h4 id="232-string类型">2.3.2 String类型</h4>
: s* h, K6 O! W! ?' }: X; F* o<pre><code class="language-javascript">&gt; var name = 'Hans'
3 X0 C+ {9 w9 A' ]7 D( g&gt; typeof name) t0 c7 R7 ]/ c5 m4 G
'string'  q: E2 A1 y" ?1 r9 \( a5 j( T; x5 j

" h1 B, O7 T3 i2 J1 V//常用方法1 y$ z: z4 l: w0 r( ]; c4 @2 _
// 变量值长度
- R$ C/ g5 F0 U&gt; name.length6 f1 k& b2 U) f3 z
4& Z/ K0 j  C# B1 n) Q+ L3 M: C/ E
// trim() 移除空白
( q8 f- p( Z/ ]! M8 a( y&gt; var a = '    ABC    '
6 r, o  l) V  F% W! U2 F. ]  {&gt; a! V# A' ?( p4 ?$ ?
'    ABC    '$ _3 |; \" t6 Z- \, n; I' I9 n
&gt; a.trim()6 S- z% G- l- l4 {4 u6 u$ R" P
'ABC'
, W  a  \- l( `//移除左边的空白
# h* p, i2 ]( S4 M* B3 T&gt; a.trimLeft()
1 ~8 Z1 l/ E. ]- d'ABC    '; W% t7 S) r- p" n3 I
//移除右边的空白, N; t$ N7 Y9 g- ?
&gt; a.trimRight()
! R3 g; i7 Y/ B! b' A'    ABC'
6 ~/ S; n! ~: F& |, o% b- r0 f$ s& K7 e. L) ~  t. T6 ]4 C
//返回第n个字符,从0开始! _# W0 t! ]9 d
&gt; name
/ E/ O+ O  H6 o4 H- _'Hans'7 a# A$ ~3 B7 W* x' e
&gt; name.charAt(3)2 }" M, ~' I  y/ v4 U- ?8 N
's'# m) E' E+ d" }1 \1 X! Z
&gt; name.charAt(), _& a( @+ {( L3 S8 J
'H'
: m  M: p5 q9 C- t  }&gt; name.charAt(1)* u* O) ~7 j: E$ |2 i  q( P
'a'0 @# c# e1 l/ d% f! C% ]
5 W; N. W/ X1 W9 _
// 在javascript中推荐使用加号(+)拼接
0 {* N/ {/ M3 y: r& @' W&gt; name9 [3 m7 d9 W$ a5 O% q. G
'Hans'5 ], H1 x) E3 k" x/ e* n1 q+ V" }
&gt; a4 P; \; ]) w) e/ S& x; ~
'    ABC    ', L- C  F) |$ u
&gt; name + a
6 H& f) s% [8 R2 M' @) `'Hans    ABC    '
) v0 m& }' t' _0 @& ]; \- R$ A% w+ o' f// 使用concat拼接- A, |; k& W( u% R
&gt; name.concat(a)
) s/ I2 X% ]: G  {; p4 C1 r( u* c8 Z'Hans    ABC    '* z9 }6 g$ |8 _/ u) o" \8 J
9 g' A" r: C/ U5 D
//indexOf(substring, start)子序列位置
6 i/ o8 ?' p+ {$ `8 h& ^6 j+ S1 ~% `$ Q4 ~0 k
&gt; text4 _- e8 V  s- P0 {: ]
'A young idler,\nan old beggar'
  _  ~5 I% W5 j4 c9 l& ~% p&gt; text.indexOf('young',0)3 i/ {# }0 {; `6 x; z
2+ j4 }( F' l/ a  T9 e7 B
4 J" j! u8 {# }7 C+ T" b
//.substring(from, to)        根据索引获取子序列
# ?" |, f& m0 k7 U&gt; text.substring(0,)0 r* d$ l# {6 w" P
'A young idler,\nan old beggar'
. h4 c  d+ `. N&gt; text.substring(0,10), w5 o5 I9 u+ F% _: j4 [% E
'A young id': w( w/ _4 x% ~

# F3 W; P: x- `: ?// .slice(start, end)        切片, 从0开始顾头不顾尾
6 ^( ~% A# ]) s7 e  v' I: \&gt; name.slice(0,3)
2 |5 h$ [7 F- ]'Han'
( p# S2 K$ Z, }) i! v# i
" G+ w4 }9 k% y" T5 o  J; M// 转小写
& w9 h  T; p7 {: S: N&gt; name3 u0 F) V2 T3 K, C5 j. }2 U
'Hans'( _8 x2 _  I0 ]: u
&gt; name.toLowerCase()
+ b0 C$ x! R/ h! T'hans'
* B/ l2 S; q, U// 转大写6 h5 h+ {+ ?" A
&gt; name.toUpperCase()! c; m% E" f- l& F2 y# w. m8 U
'HANS') P* N2 A6 Y+ U% ]' a' F* q4 s

( Y0 A8 R+ ^3 }3 Q7 F/ H- A2 l// 分隔
! P) u6 \  M) M6 l5 L# s6 U&gt; name5 R0 n! x9 I: \
'Hans'
- c- t! T. l* u7 T6 v&gt; name.split('a')% E4 Z  [3 u& P8 e0 E& U
(2)&nbsp;['H', 'ns']( i+ c3 T) _% L% Y
</code></pre>* Y/ |9 L" h8 x# C! w" T( N
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
9 g7 V! _, W5 H# @- E: ?<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
0 h8 z9 W  @1 p$ [<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p># r/ o6 D6 V' u7 M
<p><strong>null和undefined</strong></p>0 n) A9 k( p% e4 J6 r* t
<ul>
) q! q" c' n& c# g<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
6 ]0 Q1 ]) ~2 a8 i; f" Y6 W: l9 F7 t<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
+ o1 R5 A( y  r+ ^2 v  K</ul>; B3 w' j+ Q) w; X( T: N
<h4 id="234-array数组">2.3.4 Array数组</h4>
2 j, k# `* ~5 [2 q' _, E# ], [; @  Z<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
% z/ M" }8 m2 I" O" K, H<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] / a9 d1 Z8 ]3 x2 H% `
&gt; array1
0 R) h1 s, }* e5 C6 e5 r(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
: e# ^: \9 r6 j- K&gt; console.log(array1[2])  //console.log打印类似python中的print) c" s) C0 Z7 J! ?& d3 h
3% x9 r0 Q3 v( P" V
// length元素个数
2 M9 S/ ~. j2 b5 ?&gt; array1.length  X6 Y8 a% L, F8 p/ @% L( q' m7 W% g7 P
6
* I9 r9 Q1 v* Q8 m: H- i3 z, G' ?! ~4 e// 在尾部增加元素,类型append; u) m8 q5 N8 ~: q/ ]; U
&gt; array1.push('D')& C6 A( o' j8 {8 q
74 Q4 h7 y5 w& h1 k7 M* r2 C3 ?$ y
&gt; array1
* ?$ w- i8 K" u) H  U(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']& ?! @" ]: K5 x
// 在头部增加元素: s" J0 _+ M9 v# d& W
&gt; array1.unshift(0)7 t! t5 @3 l6 K
8
. L0 j& S+ [) G0 y&gt; array1
* M- ]. t- y1 `& ^" I+ P(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
' O; x* h5 U0 W- O, h( ~* M) |7 B/ `
//取最后一个元素: \9 R4 s# r. G1 C$ k5 B) H
&gt; array1.pop()) |$ ]6 G8 {$ s3 j
'D'
* ], }8 Z$ d9 Z. z&gt; array1
& i: Z7 t- F$ a6 m(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! N, u5 O) z( l1 u//取头部元素
7 h* p' k) ~0 x7 l7 f& q3 m&gt; array1.shift()
$ }( }" Q: @7 z- f9 p0
' g) N2 H0 E4 Y8 d1 B3 Q' i. u+ O, d&gt; array1
1 R% |! z5 i2 m/ G8 l(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  k$ h( I& s2 v4 }4 S& T9 `

5 z9 l% T# A$ @7 o! Y1 c$ ]: G( g//切片, 从0开始顾头不顾尾
3 L" F9 E" G+ R2 B' t* C  L&gt; array1.slice(3,6)0 i' O; m6 f: W) X
(3)&nbsp;['a', 'b', 'c']
" l8 l1 Y" A3 z8 Y1 g3 W1 J// 反转' U8 u; |( c, ?& ]5 g
&gt; array1.reverse()6 ^* z1 I; w2 H, y) R
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 g: R: \+ k* e
// 将数组元素连接成字符串
0 F+ J. y" ~2 v; E/ u&gt; array1.join() // 什么不都写默认使用逗号分隔
2 c- p1 @1 B  P1 N% n# j  E'c,b,a,3,2,1'
: i$ x4 m3 I+ E4 L' I, g* Y&gt; array1.join('')
$ l( n4 M; r* i( M' O! m! s' j'cba321'( d6 k# }5 ?4 m/ z- d
&gt; array1.join('|'), c% A7 F  l/ A) l4 g8 t
'c|b|a|3|2|1'! v/ c% @4 O# f
9 d* m5 X$ N+ k: L8 G
// 连接数组2 s' m' t. x- r# J
&gt; var array2 = ['A','B','C']
$ k" s& R! n, o& P. r( Z- u&gt; array1.concat(array2)3 U* y; ^/ e( m- T3 J
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
  T" w1 s* K- B2 [# v  m9 g. R- A' f" e$ c! |* q
// 排序6 u" j0 E& X8 l* S" Y/ o
&gt; array1.sort()' j$ |/ h4 B& S2 C, ^* V
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']2 a0 g$ U1 [: c
' U3 c  ~4 o6 j2 B
// 删除元素,并可以向数据组中添加新元素(可选)8 I3 [( n, R, |
&gt; array1.splice(3,3)  // 删除元素' I8 l! U/ B4 m* A- t+ ^& D
(3)&nbsp;['a', 'b', 'c']: i9 v( t7 I( A/ U; D' V! R2 A7 z; K
&gt; array1
8 H0 _# a- L5 x0 S3 p* X(3)&nbsp;[1, 2, 3]
; v! j* D) A: X8 n&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
6 i# ?1 J. N7 A5 i' |: i* c1 `9 E[]
$ a6 W$ f0 P1 s4 w&gt; array1
% H8 S# Y+ k, a; K4 I6 b# `(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']0 b( P; B$ K: Q$ Y* H

6 \1 K3 i* g* e$ T/*
8 S5 b, ~  z" T# l& X- L0 g' d4 wsplice(index,howmany,item1,.....,itemX)6 h7 g( C" W' j% ?% O7 b
index:必需,必须是数字。规定从何处添加/删除元素。* X0 b/ C8 G' U( `& q  A
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。: i1 y% ~+ h* J! h3 I
item1, ..., itemX        可选。要添加到数组的新元素
5 m# c" J0 f- Y0 P9 X*/- f  n8 A6 k- z
4 L5 _$ ~) H: q3 r, S2 p6 @
// forEach()        将数组的每个元素传递给回调函数
' E+ t& N9 u( j* U&gt; array1.forEach(function test(n){console.log(n)})+ B" L: N$ w! t$ n2 y0 L3 G, z4 `
1
6 S& i8 r7 P% ?% w0 |) D0 f+ p 20 _; }. u( \- i$ `* ?' O) A1 n0 y
3/ ?6 w& D" Q* G8 K% J7 E; \7 w
A) b- l. L& W' J: {8 c
B
( A1 t4 A" t# w4 Y% R) e3 x2 V4 X C
: [% f0 ]8 m9 l6 ~$ H// 返回一个数组元素调用函数处理后的值的新数组
! A. N9 d0 ^$ C9 W&gt; array1.map(function(value){return value +1})2 z7 [8 @; C' E1 x! j  y1 k
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']5 K) p, K: I: h7 E# t. G3 U
</code></pre>
+ G; T( G& F4 \; H& n' ]<h3 id="24-运算符">2.4 运算符</h3>
8 ~; G) ^- n; t4 K$ o<h4 id="241-数学运算符">2.4.1 数学运算符</h4>1 J* ?7 A3 u- q3 x( g
<p><code>+ - * / % ++ --</code></p>
5 H- a( a% a9 S9 V- e" W<pre><code class="language-javascript">&gt; var a = 6
& i" _% ]9 R( ~) x&gt; var b = 3
5 c& G6 f* ~  J1 S& W8 Y2 h// 加1 ]  e6 v2 q. ^( o7 F& c
&gt; a + b
0 N( T- @1 w/ [7 K% D8 n9
  A7 H) W, x. s1 i; W% H/ `// 减* J& l8 h1 U7 D* I$ A
&gt; a - b" f2 S# ^7 D& s( V4 D* l, p# h
3$ ?* z# n+ e' _: J: f8 M
// 乘
  u- M+ t+ @# q$ \* q/ U1 z&gt; a * b; X$ U6 P( H/ B: d' @5 C
18$ H. u1 N; ]$ C9 N9 S/ l
// 除
( u" A% b" C3 p( \- m: t3 e3 K: v, P&gt; a / b
2 W6 D5 \1 _3 Y. g) U. n/ w0 l5 ]22 ?. O5 g5 ?  J. U0 y
// 取模(取余)+ e: {$ P5 A0 G5 M) @$ \5 Q
&gt; a % b: c5 a+ J7 }* s0 w- q# ~# F% y
0' k" x. L+ }9 D% J/ v
// 自增1(先赋值再增1)6 w7 W9 u4 j3 F0 J  \4 B3 w7 i
&gt; a++0 n0 y3 ~  ]  v
6; {. z! A4 d) D' L
&gt; a
" }- ~; k6 K$ H3 ]5 a3 X7+ E1 l: @+ C- |% J4 a, l
// 自减1(先赋值再减1)
0 U& ?; S2 M' B9 Z' O; K# y&gt; a--
) R  n8 F% a9 [! v/ \+ j7
2 M+ r/ O) k1 j% N0 f&gt; a2 M4 a0 z, @! B8 {" X
6
1 G4 _) ~! Z, H// 自增1(先增1再赋值)4 @3 ?. w) G' ?7 r* D: n' S' u
&gt; ++a% Y7 w6 a- ~& k- J2 f# s
78 y& p! F, B& |' @5 G
// 自减1(先减1再赋值)
& N; \. E1 W  M4 T7 i8 i, y&gt; --a* G% Z6 [( w! D! y; |/ V
65 c5 `5 C) p# l  G
&gt; a: m: g: E1 v% l% h7 x5 t
6# M3 m( x: F! R9 `$ |* p

6 w$ P9 V% u4 Y% q$ P' x  }//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
0 |  e& E% W8 n2 C. w" R7 E</code></pre>& q$ F  U: X% d3 w/ x7 W+ ^# n4 c
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>" Q! S0 N2 U2 `9 b3 k9 _
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
% i1 j! h0 e6 i3 e9 z) s( N7 w6 n<pre><code class="language-javascript">// 大于
9 E1 @' J# K& Q' a, l% d&gt; a &gt; b
+ q/ A6 y% p% P' u7 Ztrue
# T# T8 a/ v6 |& e4 L4 W// 大于等于
( T! [2 d7 v7 @% }&gt; a &gt;= b2 x& j- p) |4 F( |0 D
true) b+ m# o( G: [) c
// 小于  X* j( W% b+ W, ?, p. o7 |
&gt; a &lt; b0 }( H  W3 |8 ]( Q1 n/ x5 ~
false
/ \9 a2 C3 c9 i2 z2 z. R// 小于等于4 T- e" V8 X4 V$ ?
&gt; a &lt;= b' [+ }+ g. T! p! b* v, G
false% Y0 E0 ~$ P8 ?6 F! x$ K: W+ Q
// 弱不等于$ T! \' X; a/ Z3 l1 m! R
&gt; a != b' `) `$ x2 S+ G- j' S+ J
true
- H8 X+ B/ z2 T$ k// 弱等于6 C, Z6 V( Y' J& T2 x
&gt; 1 == '1'
, ^! F+ P2 W3 l4 [/ E( Jtrue
6 Q1 a  X/ I* U2 L// 强等于/ M; t) z. W, s+ T
&gt; 1 === '1'
$ x& x. U: y8 O- d, u- c9 f6 yfalse
, w) A5 X; z& x3 e" ?// 强不等于; B, N. R# S" U& c7 A( \/ X
&gt; 1 !== '1'* r8 [4 g: N4 C
true9 R- g7 Z2 q( b( ~
$ N7 ^2 g2 D; _: R  X
/*
$ i7 X  g5 w5 M; iJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
* s9 r+ \% c% j3 r9 h8 n0 n3 w*/
2 i. M0 t  S7 B9 _1 \* A$ R</code></pre>
& {* E1 T. J  w+ h. T<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
4 G* I+ {) Q/ P. l6 d) b  G<p><code>&amp;&amp; || !</code></p>
' H' g: N7 M) C9 \* ?$ `<pre><code class="language-javascript">&amp;&amp; 与
6 m# G8 X( B# U& k) Z0 \|| or
- |* p3 z+ A) A9 A, l7 J3 \: ?! 非
  D* M4 p- y4 D$ {! p# A- _</code></pre>
& k) z: u7 x$ Y6 p$ g/ |' G<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
; f, c6 V6 K& G2 m2 a, D2 ]<p><code>= += -= *= /=</code></p>
8 v, v+ F9 q7 C5 Y4 [. }<pre><code class="language-javascript">// 赋值5 d2 j5 W3 g+ Y: n- b1 g
&gt; var x = 3
. z& P+ ~7 e! `( ]3 }% u. A// 加等于
% f9 ~( C% _1 G* i2 |$ R: g6 J. L7 }&gt; x += 2
$ n! n0 q+ V* l/ n) D/ r5
  X- ]9 F% q  ~2 r. W1 K// 减等于
* V2 K- u8 Z' X. N' J&gt; x -= 1' t% f6 y) w5 t' a
4( C  }- ?/ H$ A% w& v0 m' Q# d
// 乘等于. U9 X+ a2 i& {7 p! D
&gt; x *= 2# L5 ~( P/ q# C( X0 j7 ~. w! Q5 P  X
80 K# W/ P3 d6 y- s
// 除等于4 q4 g" H6 N! A4 b
&gt; x /= 2
8 G2 f% u: Q& j6 {! K& D, X, g$ w) X4
- A& l: w9 c5 e</code></pre>
' X/ J' ~, D' b- W<h3 id="25-流程控制">2.5 流程控制</h3>' c  k& i3 C% V% R4 c! s* W
<h4 id="251-if">2.5.1 if</h4>
7 U) q/ s7 W( w7 Z! c3 K: @9 o<pre><code class="language-javascript">1, if(条件){条件成立执行代码}4 B! L2 X4 j0 a! {
& W3 W5 \% w$ C
&gt; var x = 3
  P) A# k( ~2 n" ~; j# u3 d9 A&gt; if (x &gt; 2){console.log("OK")}( q: {2 y8 b( H4 d3 b, ]" u4 E
OK7 P1 }, l* @  ?. b+ e- h* _  a( h# J
2 q% {  c, ~) v8 o
2, if(条件){条件成立执行代码}
% @; G* s0 }: X, v/ X        else{条件不成立执行代码}
! e7 P, G" m- `. J! B+ V" J: |( d% O: X, [# W7 M( C5 q, l
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
9 B6 a2 s7 G' P" ]% Z- m5 h4 k'NO'& ]/ H, a9 O$ l4 d; [4 t

% x0 }: i( S' R9 k9 t) H' ?3, if(条件1){条件1成立执行代码} . d. w+ o4 j5 T& R/ a. S* |% g
        else if(条件2){条件2成立执行代码}& y9 }  w' g  Q* Y
    else{上面条件都不成立执行代码}
0 i* g1 m' i2 Z: K  j8 c, M- C3 H0 Q% e: Y3 P; j
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
; R; i4 ]0 i# `- ~* f Ha
: s% M6 s+ [+ S5 @5 q</code></pre>) X/ b! A1 c) N. |( G- D
<h4 id="252-switch">2.5.2 switch</h4>; }" C, m9 B. z) E" K! t
<pre><code class="language-javascript">var day = new Date().getDay();- W' r: \+ b5 a' `' S
switch (day) {& n; \" z0 I8 @3 e8 |2 m- U
  case 0:
$ p9 g+ ^* y7 m  console.log("Sunday");( P( j7 A* z2 W) \
  break;
% P! i* D- g; [: E# M5 L" i2 Z  case 1:
, [" z8 V0 C& j9 G5 T  console.log("Monday");) M& w, K8 W8 u- s, F+ R
  break;
1 b/ z& w+ h9 H( m, T# cdefault:
8 L, @- N  |2 {# X  console.log("不在范围")
' I( P% S/ K9 a: w$ ~7 t}
* Z. J+ W: ^6 C8 C' j. u4 H 不在范围, k4 c: l1 b3 i% T- G& Q
</code></pre>
2 H+ f: _" l" ^+ h  [. m<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>  p) H$ P: q- U7 g, U0 L% U
<h4 id="253-for">2.5.3 for</h4>: p* H, r7 D+ h$ u0 H& D( _
<pre><code class="language-python">// for 循环+ m' f$ b: i# J2 s
        for(起始值;循环条件;每次循环后执行的操作){$ }2 n2 {. }- E- n! m3 L
        for循环体代码
0 D# o, j3 n, Z) q' b    }# R8 E1 R0 C$ l

1 A* ^, W% y# {9 \for (var i = 0; i&lt;10; i++){- \% X3 q  V& u* K/ R2 p* r) H
    console.log(i)4 \3 u* r' m; |# c" a+ C
}" o6 }- a$ d4 n" @6 c6 u
        0
1 T9 g, z! Y* ~: w        1# R# G" T, g% N+ y3 `2 K# B8 M
        2. H# Z4 [9 B( [$ @, z: r$ A; @
        3" ?5 _2 U5 Z, \; H
        46 w: Z; {: Y6 p$ W. w
        5
; l( C2 A9 u. @        6
$ F. C% V2 I: O2 d2 U* i        7% C' v/ y2 R" n- v+ `4 b! M
        84 M8 S% {1 e- d$ @" H
        9
5 j7 }0 g0 t' u, d2 y; i# `</code></pre>9 Y  t) J& U: ]7 h9 @
<h4 id="254-while">2.5.4 while</h4>5 }! F. I) F) K( j' I. C' Q
<pre><code class="language-javascript">// while 循环
0 m( _" {( l8 N, A        while(循环条件){# d8 Z4 s! o; n6 i) i* _9 Y9 g
        循环体代码
: z5 q. L8 i1 H# h$ t% r8 k1 Q    }. d% F! F1 r" g

# m8 E8 Q; }) i. u&gt; var i = 0
. t8 `" j; ?0 B4 x& Y&gt; while(i&lt;10){2 H+ ?+ k. c* `; {
    console.log(i)% b# P8 U, d' b
    i++
5 `+ R9 o! v7 U; U}
8 M0 I5 T4 e/ \. x. z1 T" L' D 0
6 G2 L' [9 \; @2 t6 ^ 1( H. }8 `4 \2 f* s2 y% E- B: _; w0 U
2
. `( A& b% C0 n0 p5 B$ z 3
; v8 n+ \( c# z' r8 s 4
& m1 c) t2 v  ~1 Y( H; c* w* o 52 P/ ]% m% v; N8 G- p( X5 p& B# o
6
' w  R5 k+ H2 }0 }- O( G* n1 l 7
. `& E& r" h3 R5 d 8
$ U* T2 `7 M- r, g 91 r8 T: Q' J2 c. t
</code></pre>
& W* g8 f6 A3 \' K6 l/ W3 Q<h4 id="255-break和continue">2.5.5 break和continue</h4>
  E) x% h/ Y; x* b<pre><code class="language-javascript">// break6 l3 W: G2 p6 X& @- a' f" n/ r- f6 \
for (var i = 0; i&lt;10; i++){
$ y3 P- n  \5 u/ Z* x  L8 Z3 D; O3 V    if (i == 5){break}& R; \6 \# \4 \  ^* ~4 `
    console.log(i)
6 N  W  P- C+ g) X; z! Q5 R/ `, t}
; V, p8 c" N5 g1 n 0, A* h2 A" u+ {' j0 G
1
( J: D$ X4 \! L8 h" N 2
; i) Q5 F2 y+ [7 i  { 3
1 z* L$ Q( `: m4 N& ]% N 41 [  T9 s( \* V2 ~7 S8 G
// continue0 r# V6 r) S% ^& `" i2 R- V4 ?
for (var i = 0; i&lt;10; i++){
' ~" w4 F* i6 U* w; t    if (i == 5){continue}
2 p) d8 z1 r3 D1 u+ |7 g; d3 k    console.log(i)
- c% U* Z/ w( r3 g% ?9 V}
8 [- O% O3 J+ K0 y" N5 Q  g 0( ]- C- h9 O" B2 V8 ^* a5 w+ s
1( \, i: f4 r+ _8 I
2
* n6 @' F$ I. a- Y5 T4 O 3: W* F7 ]* a% A
4
# \, R9 Q& C4 ~0 _  J* I 6/ B& m  f7 [0 Z- R& F) ]1 L
7% V0 @( D. K  C! a. |; W
8+ e# F% H0 l9 Y0 @  o5 E9 `
97 Z9 a* o% A) `8 Z8 |& {1 z

4 @/ C* j, N+ {! e9 K, C% l6 z  C</code></pre>+ Z( q$ P3 n4 s3 H. {3 r" K
<h3 id="26-三元运算">2.6 三元运算</h3>: p9 e( e5 a$ i& h& h
<pre><code class="language-javascript">&gt; a
/ j$ z9 a7 r  s! P( U3 h66 d* x0 B. O4 }, \& o- a2 E
&gt; b, o2 |; |5 T8 s/ g! t
3# V, j" d5 c8 x+ {/ ~- m, o4 b' Y

1 {$ C+ i; ?# Y# h//条件成立c为a的值,不成立c为b的值
2 f/ C; M. V; n) g# l&gt; var c = a &gt; b ? a : b
9 N9 F3 N( g& c5 ^7 F6 h) i7 G&gt; c/ X6 Q' Z5 {( ?# h* X+ S# u
6
: ~  `7 O' ^2 u
, g3 U3 m/ G0 T; |% \// 三元运算可以嵌套$ O6 w9 P6 A/ z. N
</code></pre>% W) {/ A# M& j) ]5 `3 S
<h3 id="27-函数">2.7 函数</h3>
) u5 O8 D8 m6 a/ t<pre><code class="language-javascript">1. 普通函数
0 l" l) X7 x  u* v9 I- e&gt; function foo1(){
( l/ _: e4 Z4 g* M  l& ~( h; l( s    console.log("Hi")
" ~, n+ [7 n& k! v. }}
7 L: F& D4 ^2 ~. P& E5 z% Z& k' d4 X1 `3 H' i8 x
&gt; foo1()' X# e( g* Q  o: x) a/ V
        Hi$ B9 Q/ U  H# N: m
2. 带参数函数
  x# J  i& F/ Z4 s& X7 U& J&gt; function foo1(name){
! }9 N) _% l0 Lconsole.log("Hi",name). \& ]6 ~" {9 A
}2 y0 O; I2 K1 v3 Y) p

+ M/ [, a5 s$ R9 g8 B! A0 n1 R&gt; foo1("Hans")
* n4 a* y" q: N* C7 Z# }( m  c( {Hi Hans2 y2 J8 K8 S$ M9 v" h
0 v. Y1 V) [8 H0 M3 X- D
&gt; var name = "Hello"
3 ?$ P3 y0 y, q3 G3 m6 V4 u* w- |&gt; foo1(name)9 E& z: E$ M7 o" J
Hi Hello
% {- K' G! n; b' c! b  Q7 e& T9 B( |; N( v! H/ R
3. 带返回值函数  v% |! [' r! |2 E
&gt; function foo1(a,b){0 E- G1 S+ h# K) ]7 c
        return a + b   
" z/ i% {4 x& R1 P5 N}$ Y% q5 {$ A' H0 r
&gt; foo1(1,2)) _" q. j0 ?6 d: R9 @- o; f
3
2 m& J9 l) ~) |* n* x( Y&gt; var a = foo1(10,20)  //接受函数返回值( q. p# h8 E1 |1 H7 Z
&gt; a
4 z6 U0 ^0 V" L30
) @( ]: }/ x7 `7 O. d1 D. y( }1 ]9 O4 J
4. 匿名函数( R( w7 \* O, N% g0 ?( h5 \
&gt; var sum = function(a, b){8 q% O7 q2 ]' ^6 q8 ]3 `/ \' q
  return a + b;
5 c/ H$ b9 j9 ]5 h' }}7 m3 u( I! B1 G: |' z
&gt; sum(1,2)
0 e# b8 k* w7 t. Q; k" }* g4 t& Q/ _37 _5 Q; B- M0 U7 O- i
6 D. Q& b9 J2 _1 ^
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
7 V9 r$ J7 c4 Z6 y  d&gt; (function(a, b){
- C* }9 \- S4 t5 S  return a + b' r: x4 ~/ K0 F$ L6 ]
})(10, 20)
- e( K/ [9 Z( d0 V3 n, i30
' a5 |5 z" Q8 [  X6 F  o, C4 c7 r3 y; r, Y1 _
5. 闭包函数
/ M0 b( \5 {/ [4 O! O0 x) f// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: B. t% p' a5 H. u9 D! w3 T
var city = "BJ"  U6 Z( C% j, @0 I; B' ]! F8 N
function f(){! ^) j' a. T# r9 p5 E/ T6 V
    var city = "SH"
/ Q* f0 v1 P0 Q7 q  x    function inner(){8 O; e- D4 ~" A  V+ v
        console.log(city)
8 h2 Y% X: J( L2 m4 x, m; H    }
2 t# Z- `$ Y1 H9 j7 J8 c    return inner$ F* j* k# N- k- [2 J5 F  S
}# j" ^" u$ R5 ]; I1 g. e. G/ C
var ret = f()7 B* ~" Z- L' v! L4 l8 P; \
ret(): N+ a& p1 K; [3 v3 o( O
执行结果:6 q6 M. S1 ^) m3 \" [; }
SH
/ s( S1 e) y" v, O$ K5 j% ], i7 \( I0 |: m6 M
</code></pre>5 J1 V$ y  u' [/ P/ E8 I
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p># z& k3 {1 O  u5 g0 D
<pre><code class="language-javascript">var f = v =&gt; v;
. }) Z' W3 n$ E- Y// 等同于: j2 Q9 T% u/ i; M0 B
var f = function(v){. X5 h( y! S+ k$ K% z/ J8 k
  return v;
! G! u  ~1 h4 s2 W- y}
5 |; B5 ]! `8 R' V& c</code></pre>* v. Z+ q# l; @# }* F/ U8 g% w
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
4 Z9 M) z. X# w$ k- T<pre><code class="language-javascript">function foo1(a,b){
+ T3 L2 l$ p) ^% X    console.log(arguments.length)  //参数的个数 - R! `) `) d6 j
    console.log(arguments[0]) // 第一个参数的值, V  a: K) h* L! S" d
        return a + b   
3 p1 _: d7 }1 M( [! p! R9 n8 p}
! \9 \5 R" t! U" z" O/ ufoo1(10,20)
5 y2 A* E6 r2 R结果:
. L/ g2 k  O# M; ]7 ], o0 k 2          //参数的个数
( B  Q) d% g  I; T. c10        // 第一个参数的值
" P( ]- n8 g1 X: s30        // 返回相加的结果
$ z# K+ m( G$ U# _2 g% b4 k</code></pre>
" e' o& J- O% t5 c! \' ^- I& u) t<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>8 _2 [5 F/ D+ [. A, r9 ]9 k
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>$ ^7 k# i. a- O) `# H6 |2 w5 ^) u
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>! k2 R9 g( o3 x! f
<h4 id="281-date对象">2.8.1 Date对象</h4>
# ~  c1 e: O% @- n6 X# g5 V<pre><code class="language-javascript">&gt; var data_test = new Date()$ d+ W6 z- O6 E* V% w, J
&gt; data_test
' _( `$ Q/ }( l0 i$ |2 s7 nFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)( \% V* w0 X" p
&gt; data_test.toLocaleString()
# @# v; n9 L2 ?/ g' X9 G'2022/2/11 下午9:44:43'% T, i& G8 l9 e) w8 y
: k& m0 M5 t% m5 R4 r" A1 B7 |9 a
&gt; data_test.toLocaleDateString()+ T4 g/ ]- m, s
'2022/2/11'
' t5 a  y3 [, v8 L! ?; i3 v$ b7 ?8 w8 x% g; b: \# g/ _
&gt; var data_test2  = new Date("2022/2/11 9:44:43")0 q# |8 N, j7 M# B3 q
&gt; data_test2.toLocaleString()
* y, |2 r0 O6 u/ {8 q* y'2022/2/11 上午9:44:43'
9 N4 j: _$ ?# r( t) x7 F5 M" t' }3 t5 T9 B3 `4 n. a5 ?
// 获取当前几号
8 U5 a. O. y& H' l% C&gt; data_test.getDate()0 }: v7 e' v% H  |
11
7 N8 G1 z- J8 }: X" I6 x" T' \// 获取星期几,数字表示7 m; G- {2 Z2 c$ C) v* i; F! e
&gt; data_test.getDay()  2 y0 X* }8 U  g2 e
5
0 x' ?9 C" g; {// 获取月份(0-11)
6 C/ c1 ]: T2 a  m) J) y, Y&gt; data_test.getMonth()9 E* [0 L4 n, ?" q3 I
18 \( ~3 U+ l; b/ s8 m/ I$ p
// 获取完整年份
( d. [$ Z- x4 ?( G6 j&gt; data_test.getFullYear()" q% V0 C! `, [$ y. @9 F$ M
2022- Y, E! W! i" r  |
// 获取时
* \. b9 s2 D. y" A&gt; data_test.getHours()3 I; Z8 Z' E' W: @
216 A3 P" K6 p# T# |0 r3 b" J9 L( ^
// 获取分3 \/ P1 V* t) B
&gt; data_test.getMinutes()6 h+ R7 U( A* q! ^  i
44
, H+ K3 F2 z1 y2 [// 获取秒
  X8 d6 Z2 z$ n) P3 H3 q% S6 B&gt; data_test.getSeconds()6 A4 W& S9 C: l  m' D+ W2 M
43
% Q$ x+ [/ ~# Z! R- e// 获取毫秒# m+ t0 Q8 J, M
&gt; data_test.getMilliseconds()1 j/ S7 L9 @; x! M6 w8 \
290
9 E8 r" l3 c$ j% ]/ p' H// 获取时间戳' F+ c7 _7 ^1 ~* c; r; l* n7 O
&gt; data_test.getTime()
3 [& r, b% w7 w; B" U3 G$ I1644587083290
& K) y! }) g' h( m1 j* m# {  E</code></pre>
1 V! ]6 x: z* ?% x. {<h4 id="282-json对象">2.8.2 Json对象</h4>
7 l( g1 `9 T8 f% j5 M; V<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
: Y! I' a( f1 B$ T6 S3 _JSON.parse()  // 反序列化,把JSON字符串转换成对象0 F- R1 S$ o9 Z7 d+ P# d/ f( e: n
! Z* h" h0 ~$ ~; M. l4 E. H: u
// 序列化- @: n* J  o; b3 T) s
&gt; var jstojson = JSON.stringify(person) / A) X6 s) c* Q' f
&gt; jstojson  2 e- k9 n3 b! U( X
'{"Name":"Hans","Age":18}'
1 R& m" @- ?7 d4 H- o* `, e
+ s- f) V2 b% u0 @& N6 D// 反序列化% E5 N$ w: \" t, O( C. H( c, [
&gt; var x = JSON.parse(jstojson)
9 g5 x2 B5 d8 q* m' G; h' R&gt; x
& k3 t0 s3 S6 y* W* j4 R8 ^# R{Name: 'Hans', Age: 18}
, P1 L; b0 M, o6 f( Y& @&gt; x.Age
0 G  o2 i0 u7 f2 y18) d( W$ @" L! M9 V& m0 w. Z
</code></pre>
6 [/ Q: _- r4 p5 D6 [( z1 W" @<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
: W' D3 z" f. T/ a8 t+ A3 v# b<p>正则</p>1 I! \* k0 [" g! C  u6 s, {! R" W
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");7 d4 o- G9 Q& U+ G0 Z
&gt; reg1/ x: \  i" ?5 D
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" f- ?! W9 k. [- e; U  ~5 I- h* H+ I&gt; reg1.test("Hans666")
" Q5 A; M7 F+ m' Vtrue
: w# t+ t4 }5 u1 ^/ ~9 H$ F, f" x3 K5 Y/ r' `1 J1 ?
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
  W1 r& y' P1 w* O&gt; reg2& ^* C) n4 L5 j$ S
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 n8 m7 Q1 Z: c9 ?& r) f# D&gt; reg2.test('Hasdfa')
) i, M4 Y: r+ H  {" m: T8 Ltrue
$ S5 `4 g0 Y0 T; I6 D% f$ a; j/ r& @
全局匹配:
+ G0 }+ ?" i, w; y- \) Q4 M- T&gt; name
6 R, K" _' i+ D* \# D  g'Hello', E1 j& Z$ s# d7 G5 ]$ v  Y! ^
&gt; name.match(/l/): c! r+ n5 |5 f" @9 W7 `; k
['l', index: 2, input: 'Hello', groups: undefined]
( w9 k3 L# v) _
* M# Y) j6 s9 |: _- ]&gt; name.match(/l/g)
: ?0 x) w+ _/ d: S7 x5 ]( n(2)&nbsp;['l', 'l']
- Z% f* \, d5 ]: u0 u3 E3 S// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配  X' Z6 Z1 R6 E) \" {

! H" S; ^" C7 }9 ?0 d2 \全局匹配注意事项:3 [7 _+ U3 s+ D$ R; _% R3 b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
2 c; T5 [7 L5 C$ B5 ~&gt; reg2.test('Hasdfa')
' P9 {$ u: b  y' ktrue6 D! Y  [# B/ V, R* v
&gt;reg2.lastIndex;8 x# M0 {; M( x9 M7 t, c/ F8 R: g
6
- d! \% {8 P& x# P! C2 k  L# @6 P&gt; reg2.test('Hasdfa')3 R) M+ r; ?; w3 U; ^' E
false
' r# A9 d& E  ?8 y&gt; reg2.lastIndex;
/ W/ m& j4 U- \6 S, S% q0- e' n- q. k0 E, ]; k
&gt; reg2.test('Hasdfa'), B# G: r9 \4 I0 n+ M1 ?
true
3 C# o# u$ |. ^8 }6 H" t% F&gt; reg2.lastIndex;
' w, H0 W, S4 C3 z3 l7 w6
2 T! w- O4 I; @* G! ^" }& d&gt; reg2.test('Hasdfa')
' [  L# @3 S  l0 v! j- z" pfalse. z  x) K: G$ ]+ J- L5 g# J3 T
&gt; reg2.lastIndex;, G( X/ |3 y# U; L/ z- ?0 c5 ^
0
; O6 Q# O+ \1 e2 q( |( [// 全局匹配会有一个lastindex属性/ }8 T/ y1 W, n& e8 Z/ X
&gt; reg2.test()
" C  E- {' q  i& K" m% Ifalse
8 v" p7 N8 X5 O, k&gt; reg2.test()3 p; k) F$ @' g& n9 D: d" q
true
- G) y' W3 g0 |. c9 e// 校验时不传参数默认传的是undefined
, {3 v/ |! M( t$ y* A' q: X</code></pre>  i3 T- J4 r; m+ B2 S% g5 D
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
( c" k. I* L: ^: C+ Y<p>就相当于是<code>python</code>中的字典</p>+ k, g- Q4 b6 i
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}- |! U  ?1 B% U$ z7 l+ K6 n$ x2 O% h
&gt; person" e' U0 x0 J+ \  f& W+ X% y
{Name: 'Hans', Age: 18}# t# b4 c6 R- v# p& B4 l/ o
&gt; person.Name
9 t$ N9 r; H! [' X'Hans'& y, K: u; V, d, P
&gt; person["Name"]
/ u" Q, k. W3 d% T, q: C: n5 `'Hans'
+ j- M# c* H) I1 o' u
9 ^/ Y- n0 i! y+ T// 也可以使用new Object创建- P2 d/ k+ p" ^2 B! M; l  B
&gt; var person2 = new Object()9 K6 h' a- u/ n5 S& v
&gt; person2.name = "Hello"
  w4 p/ P; s. a8 p'Hello'
# k+ G6 A, S7 _% ]" ?3 F  M8 f&gt; person2.age = 20) h$ {+ @& e& C9 Y2 C
20* \, H* _  A7 O9 W' d4 S- y
</code></pre>: A* A0 Q9 k9 L+ t& ]) A
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
& |, C1 I1 _" a' j4 f<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
" W! |; s7 |% k7 f1 o' z* u/ w<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
5 z4 h# B* L3 S. i0 N<h3 id="31-window-对象">3.1 window 对象</h3>
% Z+ \. p' L; \: M: i" ^<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>. L/ L6 h! P8 a& k
<pre><code class="language-python">//览器窗口的内部高度
( o  q+ Z5 Y, O% W- V2 owindow.innerHeight - s5 g0 V' }2 U0 `! C% I7 j; }
706
7 w" m+ I# u- W//浏览器窗口的内部宽度
. o# n- s4 T4 L/ b& b) D5 f$ b( ywindow.innerWidth
. h( \# c! U* V  ]. a4 f$ H15227 X/ `5 z2 h1 W- r) m
// 打开新窗口$ |0 S  G# Z. D
window.open('https://www.baidu.com')
0 Z+ ?+ x8 S. V+ p8 ~' bWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 ~3 ]) H% [4 {( [  f2 J// 关闭当前窗口
1 n6 [. A2 c& B6 x+ ]2 K( Pwindow.close() , H+ F) P( W$ J4 n& ?7 B# U
//  后退一页" }: J& e: t# i# h4 |/ T  T" I/ g
window.history.back()
, d& h. \0 C4 ?. }3 p" i$ ?7 D// 前进一页% F) d* P1 M3 P+ t2 R
window.history.forward()
/ l# c0 Q9 v' }& I  q//Web浏览器全称
4 @% r6 _# y( s: E8 j+ [2 h% jwindow.navigator.appName
! d7 p. ^' V5 l# [7 O# v'Netscape'
  j3 V, m3 [4 _* ~+ K// Web浏览器厂商和版本的详细字符串
8 [8 X+ V) G5 d# }) U5 Vwindow.navigator.appVersion
5 H% C' ?- J% e/ T1 t6 }'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
0 X7 Q, V/ T  W0 Y// 客户端绝大部分信息" T& ~- {0 _( r  F8 [  I/ R
window.navigator.userAgent9 z4 f7 \7 g4 O) G( A" w6 C) J4 X
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ Q" t  s3 n8 \
// 浏览器运行所在的操作系统6 U" S" K, l/ M
window.navigator.platform
9 j9 M% N3 f: y7 j'Win32'
3 E1 J( n* {0 R" o+ k9 \9 }, [: n& {! X  y% p) e6 \
//  获取URL
8 C6 M& W- r* K) y% Kwindow.location.href: b8 m2 q+ d$ {6 k9 X6 O4 T
// 跳转到指定页面
+ i5 Z, S5 v9 q' P! c/ u6 [! `9 Qwindow.location.href='https://www.baidu.com'" J8 `' @, k9 F" s
// 重新加载页面
* ?$ `7 G! I! ]0 [window.location.reload() , n. u5 i: J# V& y/ u  ]8 b8 x
</code></pre>! s+ u, v; Z% E) _0 y
<h3 id="32-弹出框">3.2 弹出框</h3>. x# Y% Z3 `; I
<p>三种消息框:警告框、确认框、提示框。</p>- i7 {" n) |5 x8 x* o+ N
<h4 id="321-警告框">3.2.1 警告框</h4>% F4 V! e0 d) q9 R# g
<pre><code class="language-javascript">alert("Hello")
9 I; X6 I4 f, Z; F$ N' b, I3 h</code></pre>) Y1 e( M% `/ T/ r
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
+ c1 ]+ Z0 T0 Z, n  ^1 d! ~<h4 id="322-确认框">3.2.2 确认框</h4>
" ]6 e3 N$ W' u! E: z+ m7 d3 I) Y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>; u6 ]8 o, _. e6 }
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
/ i  a- R! g) D) f' r/ @5 Rtrue2 b7 c" L# {$ q! j
&gt; confirm("你确定吗?")  // 点取消返回false7 \* S6 {# Q3 J
false
- e$ q1 o4 N% |1 a4 V+ y, W8 G</code></pre>4 p: h3 L; X7 D2 j) [: O4 Y5 i8 e
<h4 id="323-提示框">3.2.3 提示框</h4>
3 n, [+ i5 W, p<p><code>prompt("请输入","提示")</code></p>
& X2 v8 K, ~; p8 `<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>/ u/ Z2 s. J- r" C; }
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
' g0 \$ g- m* h, U<p>如果直接点<code>取消</code>后端收到<code>null</code></p>7 @) F/ K3 X2 J9 N3 C" Y8 k
<h3 id="33-计时相关">3.3 计时相关</h3>
3 h' P3 ?. H" F- s9 A, j4 B<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
# |- O& a5 f: K* q<pre><code class="language-javascript">// 等于3秒钟弹窗
5 d& j) w2 R5 j( j( u- f. v$ Q# NsetTimeout(function(){alert("Hello")}, 3000)8 ?& |3 D! f6 d" }

/ _' Z. \, f8 [% Bvar t = setTimeout(function(){alert("Hello")}, 3000)6 s9 n9 t  Q/ w, ~9 s9 T2 R
6 l; }; i* ~  y0 J7 {0 k
// 取消setTimeout设置
) L7 e& ?5 n& E6 sclearTimeout(t)
  o: M& Z, V2 O) s0 D9 O5 p</code></pre>
: B/ ]1 L5 E$ ~<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>7 z2 A5 @* n! p' ^" E' c
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>$ V. j% Z1 |& X  U3 O
<pre><code class="language-javascript">每三秒弹出 "hello" :
% v8 F6 Y- ?! o  ysetInterval(function(){alert("Hello")},3000);
" y1 A; M: N' J3 @</code></pre>
& w2 R) e% J3 S! \( x" n<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
: G: s. `+ d1 z- U<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
1 u( H3 x: D' f3 Y3 B3 g% P//取消:6 u% ~9 }( `/ y: `; x8 O0 u8 {
clearInterval(t)
! r) n; `/ w4 w' s</code></pre>
4 x1 C2 K6 B, }: ^0 b* Y& h, y
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-12 07:51 , Processed in 0.071012 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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