飞雪团队

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

前端之JavaScript

[复制链接]

8019

主题

8107

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26387
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

' }# l9 F& v: H4 x! C  K<h1 id="前端之javascript">前端之JavaScript</h1>
7 e' ?; W5 c' M9 y. J& S9 X<p></p><p></p>- q) r4 O6 w& B1 A; _* F9 F6 p# f
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
. f% O. M1 k( e- K9 q<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>6 k; k, J6 E' R' _  s
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 I8 q! ]5 O. K它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>) q' A6 k8 D: F3 E% d9 z2 x
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
& F/ C! Y  Q% i% x4 G<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
" ~' u! ~1 P- p# p1 M<h3 id="21-注释">2.1 注释</h3>' A  @+ j6 i" q
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>0 z% p% g  ^4 J: Y, ]
<pre><code class="language-javascript">// 这是单行注释$ }& I% c$ G( _& M2 q, x) x( _
0 L5 C0 a2 T# ~" v2 e5 _
/*
9 c7 \6 w% w8 m' U- G这是多行注释的第一行,
* D1 i0 H! s8 e( G这是第二行。
$ C$ H0 q, @7 {+ j*/
0 s! j5 e+ h8 X- G3 x3 s# Z</code></pre>
7 F# ?( D/ I& R9 C/ o5 n& a5 c<h3 id="22-变量和常量">2.2 变量和常量</h3>6 g( ]7 m5 ?  `) r: y& ~
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
0 n# ?" S7 Y2 s. M1 F3 K7 I<ul>
& z1 b6 G1 j: I<li>变量必须以字母开头</li>3 m) B' T0 t8 B
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>( w8 F1 |: H% {' z  e
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>7 p4 F6 B, |+ i5 |. C* l. |+ Y2 Z
</ul>+ R$ U1 A; q0 |5 ~5 ^' r
<p><code>var</code>定义的都为全局变量</p>5 U) S5 @, K2 a+ t3 u
<p><code>let</code>可以声明局部变量</p>' M; B: r1 p% m! y9 Q
<p><strong>声明变量:</strong></p>, E2 s: z8 \9 L  d) T
<pre><code class="language-javascript">// 定义单个变量
8 V4 P, W, t1 y; w  [&gt; var name
2 ]" Z( s% P1 Y8 x&gt; name = 'Hans'
/ ]& e4 G  ~2 j$ T, {8 U//定义并赋值* k9 Q0 m4 D; l$ o
&gt; var name = 'Hans'4 Y  A6 \7 F* _5 O8 V8 }
&gt; name, @2 ^. r) p% x+ v5 S3 w
'Hans') N* E0 s; ~" o& c5 x+ a

: ^; P+ j9 }7 |& w; e+ P( y// 定义多个变量
- b# z( v& I$ j&gt; var name = "Hans", age = 18, W" }, ]1 J2 e/ G/ t* C2 k/ h
&gt; name
2 U( Q0 a! W+ C6 U) f2 E& ?, m9 }'Hans'7 D4 b( z: f3 U# M
&gt; age
/ ]. Z  ]; o6 X' s# b18
: F3 `0 B+ \# n$ Z/ b1 v- f+ t6 W9 K' n
//多行使用反引号`` 类型python中的三引号
& Q5 S) k5 n; _; ^5 M. F&gt; var text = `A young idler,
( o* T( M' e- G. s, I9 man old beggar`/ M0 O2 N. o0 F, F1 {$ O3 `
&gt; text# G' r7 p0 D& |+ z
'A young idler,\nan old beggar'
' z- t0 a% Y- Y</code></pre># U8 m* X' `* b, Q( \3 R
<p><strong>声明常量:</strong></p>
1 c  r4 ]8 z/ s+ B8 \5 u<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>0 `  V' Q/ U3 G4 |0 D5 h# V
<pre><code class="language-javascript">&gt; const pi = 3.14" N# Q9 V! l1 C6 A
&gt; pi9 n5 n  t2 W& A
3.14
. M6 e- o- x/ M&gt;  pi = 3.015 v% x* e' ]. C6 P% D$ d; k
Uncaught TypeError: Assignment to constant variable.
- U) [6 X+ T% Q! Y1 r# D    at &lt;anonymous&gt;:1:4( r5 X7 C% ^) w: b7 t9 e

" x4 Q( L9 @/ `$ w9 {1 L! O# m/ W</code></pre>
2 _5 ]- E; D  R5 `<h3 id="23-基本数据类型">2.3 基本数据类型</h3>% ?- G& x7 m2 K' C* Z: |
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>8 A/ p& i' J3 j9 Z( |: I6 y% U5 A
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>* D: \1 r8 b! X. i! R9 L& |3 Y7 ]
<h4 id="231-number类型">2.3.1 Number类型</h4>
* W+ Y' h: s. x<pre><code class="language-javascript">&gt; var a = 5/ h. A0 O8 \5 c7 f4 S
&gt; typeof a   //查看变量的类型  / A  I5 m' p9 E3 R8 l
number5 O# X; p* \8 q& f( Q: c
$ o# ?9 p+ n8 W7 b- Z
&gt; var b = 1.3: x6 x! I7 ^- V, m1 D
&gt; typeof b0 S9 z/ h: y! m  c8 z
number" ^' Q+ y5 h+ g% _9 `7 a9 o. ~7 }

1 u  N' [# S0 R, V' U. @// 不管整型还是浮点型打开出来的结果都是number类型
9 e7 Z5 z& a3 u" `* j+ A- c4 ^$ H) d- y6 x9 Z2 u, ^
/*' u% X3 L" |! r2 t9 F
NaN:Not A Number, M  F* s# m( d0 f6 R+ b: i3 r! C
NaN属于数值类型 表示的意思是 不是一个数字
1 Y; n, r" \1 H' A+ ^*/
% \# W9 }. ~8 j! ~+ E% Y3 A/ [, G% u" o: I5 i: Q- Y( Q
parseInt('2345')  // 转整型  ?7 U' J' K) A/ k4 S2 _
2345
" @* P- g/ r+ t; j) b8 G7 nparseInt('2345.5')
, \- w- e: R  s23450 E( P. w+ X% X, A4 K7 C2 H, \
parseFloat('2345.5') // 转浮点型
4 J- G8 @, W+ S1 S$ u9 K" m2345.5
2 G+ U! Q. I# yparseFloat('ABC')
' l4 A2 q# Q% j6 RNaN
. J9 @+ Z5 v; c$ }7 `* [: \parseInt('abc')
. U( R* U) B% T. X% hNaN
0 g; X  P0 |' P4 h# p</code></pre>- N+ ^/ U* u1 f  W/ z
<h4 id="232-string类型">2.3.2 String类型</h4>
# u; L4 z0 c1 x) L7 v<pre><code class="language-javascript">&gt; var name = 'Hans'
# a3 s. o8 V3 ?0 z) a$ k! T. G&gt; typeof name
8 H; a' c! l9 l1 B'string'
. L7 x& d: a# o9 H
: p, t; X7 X- ?+ U//常用方法
3 i7 z8 m& W1 P. t& Y// 变量值长度
; A" w. p- ~6 E9 C&gt; name.length
: e7 q$ ~: P6 s# M3 O) Q" f4
0 X( G1 X% b5 d8 a8 u// trim() 移除空白. I* _; f% x0 g" N! S, L: s9 }
&gt; var a = '    ABC    '
8 h; Z' s2 g% M/ ~&gt; a
# `* a5 n& ~. f( E3 M0 `% e0 a! o'    ABC    '
" O. J* X0 p3 x' F5 v  M&gt; a.trim()
& N& B  Q7 Z6 Y1 @5 ^  S'ABC'
5 N+ ~# s, |) E  N0 M//移除左边的空白
5 z) w% X1 E" Q$ [4 S&gt; a.trimLeft()4 _; p2 Y7 Y3 n/ H# y
'ABC    '
5 B* C% _5 e. J, z6 X" `//移除右边的空白
1 L1 S6 u+ J+ z/ e&gt; a.trimRight()' I5 ]* L- G0 _: J; }. ?
'    ABC'
3 y/ V# y0 x5 z, G4 z
0 H: x4 d! Z5 ]* T! }; G$ Q//返回第n个字符,从0开始
; ?% `6 i0 c( P0 n2 ^- z&gt; name# W$ e4 U9 q. w: E
'Hans'
  o  F9 j, K% v+ ?4 W. n, K; b&gt; name.charAt(3)1 l9 [6 }: p* i+ p6 X; P3 X
's'
& k4 u7 N# T; W: s; z" e&gt; name.charAt()
/ Y% K* w& l; v$ W1 V' H% [- H'H'" K* B' O2 M9 `& }
&gt; name.charAt(1)$ G% J# |8 J7 J* A! n5 ~- k6 w
'a'
7 }7 T! D( i$ P/ p3 i3 {( j* u' J3 v3 M8 g0 b( q) I& l. c
// 在javascript中推荐使用加号(+)拼接
; r  }8 e; Q2 I$ b&gt; name! i) C7 [9 c# N3 o: @
'Hans'% x8 L+ ^$ B& w- a
&gt; a
9 R3 X8 z  l& C7 t% S- S0 N9 \  G5 e'    ABC    '
; c: K% J0 w; n8 y+ y6 I3 R% M&gt; name + a
' u! Z6 |/ o: m0 e: D# p'Hans    ABC    '( [/ M6 O  d" s4 V" H
// 使用concat拼接
# r. D& f# g! F! u&gt; name.concat(a)
1 z: q, M6 n; F+ m'Hans    ABC    '
% a: W/ @- w: ?# G! d. r1 i# W$ i4 i/ |& B3 Q+ D. b0 [, B
//indexOf(substring, start)子序列位置
8 k4 V8 d1 H+ s+ h
: M  h2 g1 J: W$ E&gt; text4 D9 O6 v3 F1 H' I% W
'A young idler,\nan old beggar'
4 i: S2 l/ q' p' b6 v+ p&gt; text.indexOf('young',0)
. N2 D& j! t5 ]' B# E* e- ^2( j- g9 @& {0 {3 ~4 Q. s

4 z$ ^% ]/ H* Z5 l//.substring(from, to)        根据索引获取子序列+ d; h1 v* v1 Y5 p0 `8 g$ a
&gt; text.substring(0,)* ^" I+ R& z; {6 @8 V( N$ d
'A young idler,\nan old beggar'; }* c% s# p& S5 V7 p
&gt; text.substring(0,10)
/ {) Z  r  M2 s/ Z) I'A young id'
% U' N" O4 t: P7 H  m3 w% ]. E4 S4 p+ [) \* l
// .slice(start, end)        切片, 从0开始顾头不顾尾
3 i* W% Y# R" _) y6 ^% m2 Z&gt; name.slice(0,3)
0 U5 R  l% F3 z2 ~' ?! M/ W'Han'
4 Y* L, ^" ~7 y9 m
& T3 B# F# ~# H) p) |4 {// 转小写
7 R. t5 P+ s! _1 s2 L- n&gt; name
) d# m$ t5 T4 j/ X" _* u5 I$ \'Hans', v6 F  X+ p, C* ?1 i
&gt; name.toLowerCase()
8 Q3 a( T+ Q; y9 e7 q- D'hans'
; X- ]5 {8 Z" h: S1 Y* H5 m9 K// 转大写3 P/ T4 A: Y4 W+ |: R
&gt; name.toUpperCase()
( I& p$ l0 T  N7 F) v'HANS'+ p7 A0 A- y: t! W8 K
7 k1 d: l3 p$ Y0 q: ~
// 分隔
: q4 i) @: n( Y# i4 G+ @1 I9 G&gt; name
% L) O! z* c& k; S! k+ O'Hans'5 G3 |  A, {% j5 O
&gt; name.split('a')
) \: e3 D1 I  H# K(2)&nbsp;['H', 'ns']
* j9 R' A" }* Q1 s  {' T</code></pre>% \5 a* F3 s. h. g3 a
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>2 B, P/ P; K( ^7 W1 K/ D. Y
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>8 x7 ~1 y5 R) t/ ~. x( R: l. r
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>3 x# q+ ^6 a: Q  D
<p><strong>null和undefined</strong></p>3 O2 w. G0 f$ [$ C5 E2 R9 A4 @
<ul>
. r, s1 S" g4 J<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
, W' Q7 U  W! c  u: o8 V) V8 ?<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>5 f' M  D: m+ V
</ul>: A$ v5 v0 M4 B3 r
<h4 id="234-array数组">2.3.4 Array数组</h4>" J7 s) L  a3 f: m0 s& \3 Z
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
% a1 ^  y: ~5 p) x; j2 |& v& W) c: M<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
1 D9 g4 [0 {9 k: ]$ [3 y&gt; array15 m8 E' M0 k8 R- `" I! t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! g% y- P4 I2 e3 R
&gt; console.log(array1[2])  //console.log打印类似python中的print
" V" h8 s/ y+ q38 x, G# s& g% e3 j: ~
// length元素个数
& Z+ U3 f% j( f7 e" o: \/ i+ d&gt; array1.length  T4 T& A8 G& k1 e7 Z
6+ d  ?/ S2 X/ j6 K+ u
// 在尾部增加元素,类型append1 p* n- u5 [( K& ?' Q2 C
&gt; array1.push('D')7 @# u- W, b  a; D+ @. n
7
" ]# U: ]& q% i3 g" B) d7 H&gt; array1
' M% L& `& \& t( y' U& L(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
9 S- y/ n5 w- k/ u; M// 在头部增加元素: Q7 l7 O- p) A# x. Y, ?% w. I
&gt; array1.unshift(0)4 x  l0 _8 A- D+ }# y' B5 Z' L
8
8 ~+ G& ?; D1 ?3 ?&gt; array1
) A  E  c$ z7 K  t0 m+ C* h(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']2 C) T6 p0 r, A- R

3 ]0 y; j; \! E, u. e5 q) |//取最后一个元素+ B. o) @/ q+ P# `/ {
&gt; array1.pop(). Y* S: W$ U1 V6 V3 W
'D'
  x8 t8 R, S/ r' O&gt; array1
& Z" g  J* f7 Z# ?(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']' O2 Y# L4 e2 U  k6 P
//取头部元素
* W% X; b, D7 Q- Z4 ]" H  Z&gt; array1.shift()7 U! ]' F( z# n; U, t8 r
01 E! t4 c$ E' [# S" o3 v
&gt; array15 ?- l0 i6 Z/ S5 p# Q, D
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% \( Z' B( Q+ Z( s3 ?5 B# l; p; a6 A& P/ L5 d5 f
//切片, 从0开始顾头不顾尾
& Z8 d! m5 Z2 D$ M7 Q- N2 c&gt; array1.slice(3,6)5 S: @& c; ~8 J$ [# ?2 G
(3)&nbsp;['a', 'b', 'c']
  X+ X$ y9 [$ G# R) [6 `2 j3 ^// 反转* I6 U0 F! ~+ M- s
&gt; array1.reverse()
5 a: b7 y% p8 }2 G$ Z% |9 T, x$ |(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
. x! J3 [# ]6 R7 j' |8 s/ H: D4 v// 将数组元素连接成字符串9 Q4 u; \' O1 t5 A8 L4 @& U7 ^" I5 |
&gt; array1.join() // 什么不都写默认使用逗号分隔" s6 d6 @/ j0 L/ u. w
'c,b,a,3,2,1': l& c8 U& a# l5 w
&gt; array1.join('')" d, P* G8 ~! I: a% }2 r
'cba321'5 A- _, L0 ]0 o+ B5 W7 u  h  l' I& H
&gt; array1.join('|')
+ r9 J7 f+ x9 p/ N'c|b|a|3|2|1'4 h) y+ ]; U; ]* \$ c

6 _; k# M1 g* {1 z& w6 U! p# x4 j// 连接数组
& t' L$ ^' z$ S' I&gt; var array2 = ['A','B','C']6 O) U& ?$ t, Y2 y0 a
&gt; array1.concat(array2)
# J+ W) @& _: Q, Q) j/ ^, _3 G  }(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']3 b% ]2 R2 i+ c! N/ Z, w% k* d
/ h# c, K, H- p# V" R4 y
// 排序* x( G: [$ T; v+ ]; `) ]% o0 C, }
&gt; array1.sort()
9 P8 e" H3 x8 P. D- W. d; a(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], d( [6 h4 _: S9 |' J: e8 T

' J- ?8 m# J7 y// 删除元素,并可以向数据组中添加新元素(可选)
8 H$ @8 N: t/ p7 e& Y&gt; array1.splice(3,3)  // 删除元素- S; U" M4 L- V8 a0 \6 c
(3)&nbsp;['a', 'b', 'c']+ s# E# v; T5 t% G8 V
&gt; array1
' J' L/ |7 c7 b$ g1 L' D(3)&nbsp;[1, 2, 3]
* F3 W$ H' o, T* X2 X% v' C&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素2 K( @5 _- B! h3 B4 ~
[]
5 b3 ?( C; x/ Z& h; Z: S# A2 t&gt; array1
# ^3 x) L8 m# M- O) ](6)&nbsp;[1, 2, 3, 'A', 'B', 'C']$ o. ?+ z2 P$ [- e4 K1 x5 d
; l+ V3 p  a, @; c: C+ A4 p/ d- Y
/*2 Y% C# V  r4 V* K8 u/ ?
splice(index,howmany,item1,.....,itemX)
7 K. H/ F$ F4 b7 e  t: J/ Y2 y# l, O/ Bindex:必需,必须是数字。规定从何处添加/删除元素。
+ n' g2 ^' H5 A( M# B/ khowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
2 @0 W7 w- W* r, E7 aitem1, ..., itemX        可选。要添加到数组的新元素. Y' ?6 W  `8 m7 E. C
*/
' J0 R- Z6 b6 O* M
; ^- w" Q* J1 \( d9 s// forEach()        将数组的每个元素传递给回调函数
9 s) z( k% @2 ^3 m- C&gt; array1.forEach(function test(n){console.log(n)})  ]/ U! I' q; v7 S5 T2 ^, t
1
& }- |( K- k( V! v 2" m" s' ^2 U3 J7 s8 V
3
: j( L+ a1 w* Z$ W* K A/ {0 c0 y3 y) ]; r# V  Q! b
B
7 o- w2 i+ D. _$ y- T C
9 i/ G* t. }( T% h( b/ |// 返回一个数组元素调用函数处理后的值的新数组: F- @9 s4 x% ~+ C- f" S! J
&gt; array1.map(function(value){return value +1})0 c/ O. S( U" C1 f: Q3 Z# M, b
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']3 r0 |& N( f1 p$ x, u4 F, U
</code></pre>
" j! D  p# c, l% `<h3 id="24-运算符">2.4 运算符</h3>
' v* {6 B, D: d- \8 @# ]: I<h4 id="241-数学运算符">2.4.1 数学运算符</h4>0 l# L8 q* x6 ^5 @, F& b; f4 [3 ]$ T
<p><code>+ - * / % ++ --</code></p>2 T- n4 T% @) X4 ?. R
<pre><code class="language-javascript">&gt; var a = 65 T4 A! s  |  s
&gt; var b = 3
2 S% H% D1 Y; H7 u/ l" {" v// 加
% Z$ U& z: F/ k( g. R) A  {&gt; a + b
$ y" e4 F4 s" n7 e% D1 S. Y9- H2 X2 {, t( ^+ f3 d! s# S3 A
// 减
9 E4 }- o+ l/ s- L3 |4 _&gt; a - b: }7 z' H5 f+ e" d$ t$ P7 B% x
3
! [" t0 o( O7 ~: J- A' s// 乘8 w8 E* g2 |. \. x6 u% B9 M
&gt; a * b2 M6 @! w& s/ Z# ]
18! O, g+ J, ?) H2 E
// 除
" k) y$ t' Z* o+ e  u9 ?) X/ O&gt; a / b  ]: Y8 L3 w! W
29 x) q! Q; j: O& G9 w% W
// 取模(取余)
; o, ~+ p* ?1 }8 c( Q9 g&gt; a % b$ e# k$ F& v/ g* K+ Y: V' {  H
0
4 h- J6 J% F/ ^. l6 _  v7 T// 自增1(先赋值再增1)
. J, \1 j4 d4 J5 Z5 S8 s&gt; a++4 G/ c2 g7 Z/ j. Z/ K+ L
6
4 j7 I: @- U0 u% r( G0 i&gt; a) c8 c$ M( m3 q( F" P- @* `) t8 g
70 A0 W' T8 Z+ U. D7 M5 o' Q
// 自减1(先赋值再减1)* ?/ ^$ F6 P2 p* F
&gt; a--
7 o3 \7 E% G& ]: B8 X/ R7
/ d3 r7 x: m/ t, v; D$ w1 X2 h" {&gt; a
" k" M$ n8 b  Z6 y/ @$ v6' g8 y- J; w# ~5 e  \$ ^
// 自增1(先增1再赋值)" n7 [2 [' }$ L
&gt; ++a
" {6 Z4 u# U$ l7
- W+ ]. v) S. |/ x( k7 b# w0 K- I// 自减1(先减1再赋值): d- E' ?. @+ T/ D
&gt; --a3 y% B! p7 u; _7 m
6
; \% k/ v! ]/ L# E$ C: w&gt; a( p" D+ y7 G$ |' ~5 n3 }
6/ u+ v/ Q3 |, z3 d$ o8 ^/ W2 U
& p- i# F8 S8 Z% R0 y/ }
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理( ~. |) T& N# @- P& U
</code></pre>& V8 ~5 L7 Z& y3 ?
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>, T# _- d) J. H/ b1 @9 X& Y6 b8 ]8 o  x
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>. U, M9 v' j2 T/ S6 H
<pre><code class="language-javascript">// 大于& u4 S# v2 l9 |' k
&gt; a &gt; b
- P# F* N) z! n# B' S; Ctrue
% J& z2 N$ s! ~% M. l// 大于等于
6 |; d  ^. w  j4 l&gt; a &gt;= b
% |2 _+ ]: `% k/ C. v( atrue
/ k. j8 R) O2 x9 P// 小于
' S( Q. p& F1 s, L3 h&gt; a &lt; b1 I# R5 }2 l2 j
false
# B5 T/ o$ @/ D4 |: Z! o1 f1 L# [// 小于等于
! P; [- [9 f1 M* z( l&gt; a &lt;= b( J; d* J. p, v% n
false
3 O# P" n2 r- w$ k6 t// 弱不等于
% Q) X) @2 i- K  W# B' f&gt; a != b5 ^' `% h) g3 y7 W
true9 m1 Z$ w+ P! }3 x
// 弱等于
( T5 A2 Q3 g: j" u2 u# |) m&gt; 1 == '1'- p- m. \$ S+ ?* j  @
true7 [7 N' O8 A3 {* {/ K
// 强等于
3 n& A& Q# q2 t8 z- ]&gt; 1 === '1'  O3 Q& g3 M7 x9 U* x9 p7 |
false
  d) i, D1 X6 l! ]- d: Y1 M// 强不等于+ f+ T, a. @: o
&gt; 1 !== '1'
3 u; n. y5 L0 s2 l4 Y, S+ ^) ?true
# Z4 x1 m( n) q$ r1 \1 V* f+ d$ e7 E! z( _# o$ X- Y! }, |
/*5 u& s8 u2 F7 _$ t2 u3 b' I$ \
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
) W6 U9 \6 h& e* \% Z% Z1 w; U5 q*/) }4 s, w' ~! ]: y
</code></pre>
' c% O) ?3 b. E% v<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>; E6 ?# ]8 Y7 C/ |+ n
<p><code>&amp;&amp; || !</code></p>8 L1 q' }% S6 ?0 H) A* s' e4 `4 b
<pre><code class="language-javascript">&amp;&amp; 与
8 d) P1 y; @+ T|| or , K6 X/ ~+ }/ x: A: a0 L! t: P
! 非+ K+ z8 j9 z% z
</code></pre>
, L: q3 c( O" i7 [+ l<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
4 _( `0 Q4 y6 _1 o. s2 s& ^<p><code>= += -= *= /=</code></p>
5 U0 S' V# M( r<pre><code class="language-javascript">// 赋值! w* \& y/ u: Q/ X* A. ?
&gt; var x = 32 d; y  d' d3 {) {# E$ N( u0 Q
// 加等于& A  _  ^0 p8 h
&gt; x += 2: h/ g5 ]  W( s' q- j: V
56 o: z0 P; `. Q6 n/ O8 T9 s
// 减等于
+ s0 s& ]; n( ]" F" d% s. }, y2 t&gt; x -= 1
6 f, k' w. B9 k4, m9 i# e" |$ A" B# @1 b
// 乘等于
  N- m! L1 @, B' ?3 [: }# M3 @9 x+ s&gt; x *= 2& I+ a; l; P( X& F% l# `
8' U: J$ O. l8 j8 @3 t
// 除等于" {, \  K. v# m4 ~. ~* {& b
&gt; x /= 2/ d% Z' [3 E7 r% {
4
1 k0 v( N1 q# o1 x3 I- A1 X# ?/ T0 i& i</code></pre>
4 u' L2 G6 c7 E9 _; F<h3 id="25-流程控制">2.5 流程控制</h3>
  F# g% _& q3 e/ u<h4 id="251-if">2.5.1 if</h4>! k% N. L  J) T. b& y- H" E6 {
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
( J3 U% U: N; o* |6 x
- x1 x" l/ r1 D, D) V/ {3 o6 u&gt; var x = 3
9 F0 J0 O; k* F) S3 g7 f&gt; if (x &gt; 2){console.log("OK")}
' v8 L" F6 o. V2 A! A OK
9 {& C9 W1 ?5 D  q7 }+ |" N3 K$ Q- h3 @. x( l  J0 v
2, if(条件){条件成立执行代码}
+ O5 _, v& y) P% w) T0 C        else{条件不成立执行代码}
  f' P/ A. G2 F5 I/ L# B. q* d' }! y; |: `
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
7 V9 u8 x  @4 V0 z9 H: H'NO'; f; V/ y9 W, E0 [  e5 w) f1 H
3 r( C9 G' Z( t1 E& G) `7 n+ M& o
3, if(条件1){条件1成立执行代码} " u0 h$ N( J3 |! z
        else if(条件2){条件2成立执行代码}
8 ~& E( M! A  z) o5 L: `$ A- c    else{上面条件都不成立执行代码}, ]$ f4 Y' R! i7 S0 Y) v: i
! v: ]# n9 C. r% E2 @
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
. I" r& ]& m% K1 R4 T* S  u Ha- _7 a. \' V" s
</code></pre>
3 r7 G* n: A4 @& t( D3 @- r<h4 id="252-switch">2.5.2 switch</h4>& {: _$ [5 X" h; S
<pre><code class="language-javascript">var day = new Date().getDay();+ W2 M9 X+ i" f  A" ~& y3 Q% j
switch (day) {
+ n7 p$ ^, X$ C; g7 n9 @0 g+ }0 w  case 0:
) E$ v7 C2 H7 z( F. p  console.log("Sunday");+ W: B9 Y& l( B* h
  break;' O8 U- |# r! f6 P/ r/ N. Q
  case 1:  F; @- t6 v  V3 d/ D
  console.log("Monday");$ _! u; ~0 c7 ?. Q' t1 B
  break;
9 j! {% d8 _; ~. H: h0 fdefault:
8 y: x3 q1 L6 a  G  console.log("不在范围")# v& ]. p9 O5 \* B* e  d  r
}
2 R- \! S6 P- t& y; c/ s 不在范围
/ Z3 Y# U* d  @- Q6 ?</code></pre>3 ~. E/ H2 e7 b$ ~3 d0 ^
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>+ D8 Y. S8 n0 _9 l; f
<h4 id="253-for">2.5.3 for</h4>
; G5 |' }7 F3 K( _+ M1 b<pre><code class="language-python">// for 循环
0 K7 ]! q+ L/ j. b& k" B        for(起始值;循环条件;每次循环后执行的操作){, v4 C2 u9 i' W& b- G% q5 x3 a
        for循环体代码
& U, q8 Y: @0 t8 c5 s    }  \$ h- B. K5 g1 K2 p
! k& b! G' {' v$ o7 v" h) w
for (var i = 0; i&lt;10; i++){
" k" {- d% \6 ]9 Q5 w. L    console.log(i)
2 g8 M# E. a% i( G6 @}
# Z. ?1 u( u4 Z& q        02 z  w* d$ c$ o) }% c' X. c3 i
        1
' S* o& @+ ]( I* Q  ]        2+ z! P1 Y" k5 ]9 n
        36 [9 {: b( t. t% X
        4
) g7 M, a& [3 D7 R" b/ C        5
7 u: \- V1 t! x% B4 s8 `        6
) z  b6 z/ G  P8 y2 f0 p0 y        7
/ P4 g3 O: {2 b# d2 q3 M% I        8
3 j2 h+ C% S+ H7 y6 t: U        91 h: a( ~' F& c( `6 I
</code></pre>' y3 R4 v) Y8 v  a& i
<h4 id="254-while">2.5.4 while</h4>* V3 b2 ]) A6 n( W4 T& ]3 ?: y
<pre><code class="language-javascript">// while 循环
; j: L' T: ^; K' e; O        while(循环条件){: A9 `7 h( L' h( E$ J
        循环体代码
2 B, m8 H* O! I    }
8 k$ k4 ]' E1 S. h; x
, v$ Z/ C+ N; u, ~* I- z&gt; var i = 0
1 b; z" y9 n) @! l&gt; while(i&lt;10){* q* u2 Q) e! n) _  U0 c
    console.log(i)
$ ^  `& d) H% |% d: c' I    i++% W: z  C& {6 }5 B
}
. m% g; U$ w, f% J2 s 02 s3 v" G) v. V4 X; A9 z' k
1" T+ O( T2 w( E
2
4 t; [1 \. d( H8 c 3
+ A( n) E# O( u! H; |" i3 K' ^ 4# j) P; P7 _4 k( ?" N5 ^
54 N1 [/ U; S4 Z% i
6
3 U# }$ U) \) j, w: o6 J 7( E& P, y9 Y) e
83 e0 X6 o% p5 u$ {8 B' Y- B  C
9( ?. k; l* W9 }7 L  {
</code></pre>8 x( q8 `% M( K3 E' l7 |
<h4 id="255-break和continue">2.5.5 break和continue</h4>
& Y" G! G# j, i9 T9 A$ o<pre><code class="language-javascript">// break, K% \% Y9 X( c. p0 b  ]5 z& ?; [
for (var i = 0; i&lt;10; i++){
! S' R+ t3 \  n! w7 H, Z    if (i == 5){break}
6 F1 _' r4 [! K    console.log(i)
) E8 L3 L, ?; ]}
* ^9 Y2 H8 Y& D% H* q8 W 0( H2 j+ |0 b4 `
1% O4 T$ M, \! @. f  }
2
. E# U9 R+ \& X! I+ ~ 38 U0 t, v2 h" O5 y8 l
4, E- y7 M% [' O7 L5 x
// continue
5 Z& u' l6 E# sfor (var i = 0; i&lt;10; i++){
" q6 ?% w; x- d8 R2 |$ [    if (i == 5){continue}1 Y* B4 s, U4 p! m
    console.log(i)8 P1 B6 `% r: v$ x, z
}
) a. l2 a: J8 ]! B6 I1 i 0
0 d# ~7 d% S' W( j; S7 x3 l 1& |( ~$ d; Z  D' d# O4 a" d8 V
2
+ w, e  m& {7 k$ I( t8 |! U# w 3
- M$ x6 ]1 F% m 4
- w8 h- Q3 o9 X% M+ u 69 ^8 D2 m$ w' s1 x7 ^
7
2 Z2 H+ x/ g& A/ x* Y* W4 i 8
$ _3 l5 L1 |$ }4 A; i3 U  R8 T* F4 o 9
& C% m( L1 x0 B6 S! r
2 ]7 m; o3 Y8 U+ W! a  r) i</code></pre>
0 A; h7 F; Z. J) N0 |<h3 id="26-三元运算">2.6 三元运算</h3>4 L0 Y3 A- Q1 c+ w" |1 p
<pre><code class="language-javascript">&gt; a
+ p, W8 t, H2 n; `. R/ X& q# Y6
/ h( V- L" s/ M5 ~&gt; b
8 T# e) q5 e6 c8 N, z. U3& q  ~2 \% Z0 P3 |& u0 o
  b  E3 [- n( X  H2 t
//条件成立c为a的值,不成立c为b的值0 {( c  x! e5 [% Q- @0 Q$ m
&gt; var c = a &gt; b ? a : b6 t! c; r  g, K' m
&gt; c" B3 e/ ~' c" m, s, }
63 Z% n; e4 T  F( F: j& ^
' D! v5 s$ P& ~  g& U6 N
// 三元运算可以嵌套8 R. D% F6 z2 o; V0 R
</code></pre>
0 b+ e% y4 N0 \1 b8 n4 ^<h3 id="27-函数">2.7 函数</h3>
$ s' _8 p2 b* q<pre><code class="language-javascript">1. 普通函数
4 o9 B- m, B: J7 z5 b; t: y$ q7 x&gt; function foo1(){2 W/ J, z* \: D7 W+ z
    console.log("Hi")
0 b% {9 B. ^) F2 l1 [% L) }7 [}
0 L) a  h; B. \  n- d
  f1 n9 [  q7 Q: B&gt; foo1()
8 ]* v9 h0 H, E! J* w# t        Hi
# N0 ?1 S* i/ l0 Q4 f- x/ y* I2. 带参数函数
4 W6 x1 Y4 P8 r, R. y$ l$ m&gt; function foo1(name){5 B# U" ^* u$ k1 G; J5 K0 X( K
console.log("Hi",name)4 `5 h; t3 c6 Q" n( M. s
}
/ p0 Z5 B3 T' x, b8 ^# q4 c5 \4 v% y) I
&gt; foo1("Hans")! r, O5 J" x( ?' |4 q
Hi Hans! g  h$ |3 j8 h' }: M( c2 E! F" G

, {- @2 o% ?, y/ n+ O. E&gt; var name = "Hello"4 }) A7 u8 x3 b' b
&gt; foo1(name)
% Y2 D" F1 I! B- T7 _; t* U7 E4 F7 kHi Hello
0 N# @( z- C+ G$ Y5 p: n9 ~- y2 a- E1 M) `5 ^: u
3. 带返回值函数
/ O! `! ]& C: ]2 Z( A. S&gt; function foo1(a,b){
  N* h, m2 E3 l, x        return a + b   
4 m9 a) X0 U. e" V6 V& n8 O; J}
& c/ p+ V7 [2 S& N* m&gt; foo1(1,2)1 K9 n: C7 J- Z( F& N% [
3
, q, s- t. t; j/ y&gt; var a = foo1(10,20)  //接受函数返回值* X2 W8 n. V4 H! S9 A$ X  D
&gt; a
/ [  I. s6 r8 y! `; [0 r4 V+ ^4 Q( j30
) B( U* |( I0 T  E. a. h4 _- t  ~8 ]/ b) h9 u4 {/ D, ?
4. 匿名函数
0 D3 x8 R6 a2 K&gt; var sum = function(a, b){
. ]3 I. ?" V4 Y9 W! J" W/ w  return a + b;
$ Q, k- |/ B# Q& b; K2 n* r}) ^+ w& L5 E, j2 K, b
&gt; sum(1,2): B1 k0 w  {9 u$ t- F: E% X
3
+ S; ^5 }0 @0 M- h
2 E6 h+ C3 R) O. d: u" F// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱' e$ H* C9 i* \& b- s# E! X, F
&gt; (function(a, b){
5 i) L6 R2 e# d  {( e# Z- s  return a + b" X; `8 b3 S2 l& i& W/ U
})(10, 20)( G) `; C$ h# W1 `; N
30
! d: ~# V! v9 t! f- q' p6 |$ W8 l2 j: u3 D
5. 闭包函数! \0 R# I. k- @7 ~9 t
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
% G) H- S$ J3 b0 \var city = "BJ"
6 {1 P2 a& {3 f, a- Ofunction f(){; w" k, V: H6 Z' j
    var city = "SH"6 j7 g8 l% u1 [
    function inner(){) O. u' {8 `6 \+ _! ?
        console.log(city)
. i3 A% i8 o; X* S/ n2 L    }9 C" `* A) t2 t
    return inner$ M/ D3 d7 [' G9 F) ~/ z
}
: J. i1 r" n) Q0 D& e% bvar ret = f()
& i) `% ]* N$ \. j0 ]7 O( f$ o: M) r& Qret()
: Z) U: \7 O, J4 I& @% r6 t执行结果:
9 U8 t! u+ r9 h( o1 ^, L) Q+ e' w- \SH- Z8 p! Z: _0 T

. p; P9 ?& o+ }6 S" ~' J</code></pre>
( w* t% q+ o3 N) T) e<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>3 d% i; \' j4 l$ v* y: c) V
<pre><code class="language-javascript">var f = v =&gt; v;
$ Y  |# T/ A$ G// 等同于# R$ s8 x; |& d" l
var f = function(v){( f4 j, u, b+ a7 r, y, O
  return v;
: `: g, ^3 n2 r, i  {) L- \, ]}% m) E8 _4 M1 o5 w- `
</code></pre>' O" ~% D9 v/ A' _
<p><code>arguments</code>参数 可以获取传入的所有数据</p>; Y1 l! ?( d, |9 K; l  Q0 }8 X# i% O
<pre><code class="language-javascript">function foo1(a,b){# m' a9 {" J( \( S$ Z0 M, A
    console.log(arguments.length)  //参数的个数
& w4 n# ]" T% x    console.log(arguments[0]) // 第一个参数的值
. J1 h$ R" W4 b8 o/ `        return a + b   * D0 L" d+ ^- m8 ]
}
: T9 ^' q& W& t0 ~4 ?5 Dfoo1(10,20)& {) C0 j% j7 B1 p' y
结果:
% V# U' ?# V9 S: r$ ~ 2          //参数的个数
6 t- T  A& U& d) S: d6 \10        // 第一个参数的值( k# \5 Q' v5 B* }! D/ k
30        // 返回相加的结果
6 ]1 d- a- f4 w  w</code></pre>
, |2 L3 ?1 m2 A- N1 s: p/ g7 x; s<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>, m3 [0 `8 e0 y& I
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
' w) s. R1 s/ m; z# q<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
' U8 M( N' J5 [! b  S9 T- j# Q<h4 id="281-date对象">2.8.1 Date对象</h4>
- T6 t. ^, R. o3 V) H$ A  l1 k! E  ?<pre><code class="language-javascript">&gt; var data_test = new Date()$ N. ?6 t/ ^2 s/ n
&gt; data_test' `, F0 t) q0 t0 V- }% f0 `
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
4 `. K3 Q5 v) G$ s! c' U" b&gt; data_test.toLocaleString()
8 z; o% z9 X4 c! S5 }# e'2022/2/11 下午9:44:43'' Q4 A' g- C# f, v
. R3 L0 E3 I1 J5 p3 r$ W
&gt; data_test.toLocaleDateString()
! F) d# [( F, Y( |'2022/2/11'0 x8 U0 k: v9 g! U: m5 X
1 @2 `+ }0 ?# |* ?7 d( C
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
' q/ j' _: k5 k! r, l&gt; data_test2.toLocaleString()5 W: N1 z7 S. L8 |
'2022/2/11 上午9:44:43'
/ t( F" \5 g0 K# O& I' x
' z( J6 g, m, C# W% @+ W* V  E8 T// 获取当前几号5 d7 {. @0 d- W6 C
&gt; data_test.getDate()4 t7 j4 E: Y& I' }  J7 w$ D9 i1 U* S
11
9 k6 {% B! j: C3 P6 `3 q// 获取星期几,数字表示
4 t9 L0 d# B, \3 L; F. x* M% ~&gt; data_test.getDay()  9 {7 d% o# g, S3 H+ m6 I% [8 q
5
  g+ Z! P+ d/ z6 D! J% d// 获取月份(0-11)* y. y( m. ]8 F1 A
&gt; data_test.getMonth()2 D) X% b9 v# ?. H, l
1# G6 D$ a2 C+ C3 U
// 获取完整年份
& r2 Y" h! p) k&gt; data_test.getFullYear()0 R( H" Y% }: @) N' D- W; |7 ~
2022
) w  a# N2 A7 G2 L1 H// 获取时  f5 E& E, T. i( `$ ^
&gt; data_test.getHours(): b) K/ N. Y9 a! |, i
21& P0 L/ V& ~" {2 J; T& P+ T6 `
// 获取分' @% ]1 T2 z! X  N
&gt; data_test.getMinutes()6 k' S+ @1 j" O9 P" ~# m8 R, u) ^
441 }9 W: T0 X- s
// 获取秒% \; e4 |# [! M3 J( K- _% G6 f
&gt; data_test.getSeconds()7 ?6 @' |4 s+ B" Y5 @6 f
43
4 {" L" G" Y; r- ?// 获取毫秒
3 A2 b' P  s; D( ]&gt; data_test.getMilliseconds()' ^/ ^5 Z( K/ w1 \" I
290
9 Y0 s6 B0 ]  x9 [' _. ?4 F; S- c0 d// 获取时间戳# O8 k0 Y4 k+ p' G( e
&gt; data_test.getTime()% G( ?5 [' `; N8 I: c' R5 Z
1644587083290; B" r% O7 J2 \( m3 Z) }3 v/ A: ~
</code></pre>
+ o8 d9 s7 R. ~4 w6 Y, v+ h<h4 id="282-json对象">2.8.2 Json对象</h4>
! E% g1 U2 |) ?. _<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
1 \+ [+ |7 {! qJSON.parse()  // 反序列化,把JSON字符串转换成对象
( j9 i5 Q5 X4 h! a/ x! n+ M
0 G) ~- m6 d' T! b( L' R! A, k// 序列化
2 r, R: P4 [' K+ q2 o# s3 H&gt; var jstojson = JSON.stringify(person)   x* {( }. R0 u. G; G0 C
&gt; jstojson  6 T, j5 ~; A8 `( N+ K
'{"Name":"Hans","Age":18}', x2 v, R$ M$ `

9 w9 o) v: J, \* r" Q2 a, p( t# p// 反序列化) W) ^3 \/ d1 [- w9 c
&gt; var x = JSON.parse(jstojson). w& G& V. A' k0 f
&gt; x" O2 s" S" B* s8 ]% d
{Name: 'Hans', Age: 18}. `# Z2 j$ `( b, `1 M6 x) @: O
&gt; x.Age0 p' W! H+ E7 Q, |0 {- n4 c
18
5 g/ ~" M, U  `# Z, z</code></pre>8 a$ z; U; t& j, C
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>4 @$ }0 |/ `( Z- a
<p>正则</p>* [: @+ @0 e6 i; R+ O
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");2 _5 [/ t4 U$ Z3 A! w% P, y
&gt; reg1
" E4 k% N* G0 ]/ H, R- I" `8 ]) l/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& a; @# P' ?* g5 [( r&gt; reg1.test("Hans666")) a9 r' _! L0 s# V! j+ }. ?
true
& X0 s" ~9 R8 ~" e
& ]9 x9 W' V" `&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
( `1 {  z' Y: ^. F( @* x! s9 E) e6 o! Q&gt; reg2
, w; \! `- ^+ B/^[a-zA-Z][a-zA-Z0-9]{4,7}/% L: m3 E* \9 J% @
&gt; reg2.test('Hasdfa')
( P4 n8 C) H0 ]" w" [& N4 L# A: itrue
: @7 l8 O. N. f& k$ }6 A
. |" z( e3 v0 b( y全局匹配:
8 ?, [, _) x8 U/ U# N&gt; name; V' z0 W( j3 V. i* V
'Hello'
6 w2 f  D. h# x, B% R, e&gt; name.match(/l/)
8 @* g+ K8 X3 I$ o% z( K* T['l', index: 2, input: 'Hello', groups: undefined]
# u& u% F. U: X( s( s9 {, o
/ L- w; c2 s4 k) c) {&gt; name.match(/l/g)
; I4 N/ f& _4 |4 q0 V(2)&nbsp;['l', 'l']* ~$ ^0 {0 s/ l  R& B8 g* t! Q
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配0 x2 T4 F8 o3 W* ]. @
- r, \) {, }- p4 v* H# w: k
全局匹配注意事项:& W# K1 D3 }) Q9 K
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g% q& g' z% k+ h: y; s5 c$ w/ t
&gt; reg2.test('Hasdfa')" |7 U. _2 k) B; O. j$ ?
true
) f" T$ v: [' J7 v1 Q$ A2 ?&gt;reg2.lastIndex;
8 e4 ?3 P0 G' P4 ]6" t9 ?' S; x3 W* a8 X8 {) C7 n. `
&gt; reg2.test('Hasdfa')/ R$ F0 Y7 ]/ `4 A1 j, _
false
) @$ Z$ e! y; _: O&gt; reg2.lastIndex;
2 a# z) m# y2 x/ _3 [- d+ L1 g0: H6 H1 I" K9 n. _
&gt; reg2.test('Hasdfa')  o; O  j, {0 g6 y3 m4 S# B
true
: X/ F0 {4 D2 s0 X  r  A&gt; reg2.lastIndex;
. h- e2 i  }' d& ~$ s6
: ?- o1 |2 [- t! L&gt; reg2.test('Hasdfa'); k$ m  U7 r+ W+ R/ V5 M5 D
false
4 H/ A; A1 |- e) P$ E$ d) s&gt; reg2.lastIndex;
! w- x) @+ m+ T- [. Y$ e0. v' M2 X& S5 G0 k: Q0 U) \/ E
// 全局匹配会有一个lastindex属性% N# F! G2 s3 Q. W9 W7 {; D% B
&gt; reg2.test()
% C9 @% f7 G# v+ ^9 X% H! nfalse" |, s! J  P: o* l: v
&gt; reg2.test()/ ]; J. G0 t$ Q- S' q0 R" }
true
9 z, d& R. U" B8 i) D8 E) [4 `// 校验时不传参数默认传的是undefined
% H2 }, M1 `: y! r</code></pre>6 H5 w3 L( d# h5 y/ o' v
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
1 R( i4 h' [  \1 @& p<p>就相当于是<code>python</code>中的字典</p>* m6 p5 L) @1 C# C
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
$ F/ e* y0 U9 Q. G  g&gt; person
# L: ]. _/ a9 ~$ B; C{Name: 'Hans', Age: 18}" ~' t: ~; X: E4 K; v# i3 N
&gt; person.Name" L2 o" t# `/ j5 f3 i9 {' p1 U( Z
'Hans'& c& U9 R4 M# q* O0 d% j  C! d2 K
&gt; person["Name"]
0 X+ _( E: [8 G& K3 Z' N$ I'Hans'
. f* a8 i& g8 U) |. R! n8 e- m, z+ A; d8 _3 l3 E- w5 P% G
// 也可以使用new Object创建* c+ @$ W; ^' y" k: v4 L1 H
&gt; var person2 = new Object()
9 N6 [8 r4 V3 @/ C1 i6 u&gt; person2.name = "Hello"
" Q/ r% b# k: n8 o'Hello'
& S* m/ T& z! }6 J&gt; person2.age = 20
9 `$ s0 `. S5 Y$ U5 \209 a4 o" Y7 k7 ^8 {
</code></pre>: X' f9 [% {; L4 R$ B
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
' L, p" I! |: f3 F8 r5 V4 a5 O<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
: b4 |6 [$ N# x" ^) W9 d" S( N, @' g9 }<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>4 e" p4 s) T3 ^4 v5 N* j& b" w
<h3 id="31-window-对象">3.1 window 对象</h3>
: q6 k/ x: Z1 h" w, u<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>4 P; X% B% B) O( q* v' i
<pre><code class="language-python">//览器窗口的内部高度$ J- ?' j6 h+ M& h8 p
window.innerHeight
* V+ s- a0 f% S- P; E: k: P- i. ^706
. ]; j7 `0 Z% g; X//浏览器窗口的内部宽度; u/ V& U! J* W& }* L
window.innerWidth
8 c& v' C2 M5 ]; z. Q7 [, p15229 _5 W! Q# U1 b& [6 ~% C
// 打开新窗口
0 _6 y. u) S, W* E; x2 nwindow.open('https://www.baidu.com')
! S$ y* }* G5 ]" x! KWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}! J' `4 q4 l3 S5 ^) M
// 关闭当前窗口
! t) l1 U. A2 j! i/ A1 P9 s+ {% Awindow.close()
! s, L0 q- k4 C$ ]. t//  后退一页, V" E, U. b) c) [: M, a+ r  h0 t
window.history.back()2 \  k. s, L& l* n
// 前进一页+ u4 r  S$ ?; o3 r4 P4 r) U
window.history.forward()
0 ]  `7 Y% _8 c1 p; ?# H' c//Web浏览器全称
- F' I. y7 Z2 A& s) |window.navigator.appName- o. d* Q  k6 t( Y
'Netscape'- P$ q' w. t5 A3 E. ]* @
// Web浏览器厂商和版本的详细字符串
" i+ \6 E' ^' X$ S2 L+ Kwindow.navigator.appVersion
3 a. s1 c  d5 D' ^( }5 ~6 b'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
( u, J# y7 X' }; Y0 @// 客户端绝大部分信息, Q, s2 _/ r  V' @
window.navigator.userAgent& g& L' t6 X  i' @" r; `& `& x
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 f4 d' @& l& Z// 浏览器运行所在的操作系统) R- i9 D* e1 n% i1 k; X1 ^- W
window.navigator.platform9 ?( {6 p' c# C% ]
'Win32'- \4 @1 |+ ~& {+ T, w
% y% ?3 G7 H$ K; m' l
//  获取URL
7 d' q& |! }6 G: jwindow.location.href
7 ~" g) }  R% ^; `0 C7 ?/ U; A4 q// 跳转到指定页面
( h+ b/ [, J  F# c- |$ gwindow.location.href='https://www.baidu.com'
6 I4 T9 f+ Q6 f( d4 L  Y// 重新加载页面
" Y3 u3 s, T  cwindow.location.reload()
3 D3 l8 Z7 p3 B1 g</code></pre>
! h0 W# t# c, s<h3 id="32-弹出框">3.2 弹出框</h3>, t$ K- t# [, B: B- {% Y% R3 z
<p>三种消息框:警告框、确认框、提示框。</p>
* E( S7 `& o* [# f8 O; h<h4 id="321-警告框">3.2.1 警告框</h4>, I$ E8 ^( Q# N, R% a
<pre><code class="language-javascript">alert("Hello")) h  z" E- E1 _0 v  z5 s
</code></pre>
3 s" h8 R# {% z, }' |9 N<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
% u  P/ U$ ]! ^4 a. |! K- c<h4 id="322-确认框">3.2.2 确认框</h4>
6 M! O: F7 S, q& O<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
1 Y0 W# d3 p- N<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true( ~* J' ]9 o- `( s. a: |
true
0 b/ |4 m, }0 W9 t( u' O; x&gt; confirm("你确定吗?")  // 点取消返回false
  y; B+ r( Q& P; L% a; n& hfalse
$ L7 a6 X( s4 i; v4 K: o</code></pre># B& c3 b# T" q- T) z. E# h. d
<h4 id="323-提示框">3.2.3 提示框</h4>$ }/ V. }8 O- U
<p><code>prompt("请输入","提示")</code></p>1 H; K0 a' E$ w9 ^# n- O
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>" F9 g% V5 a3 M/ C8 L  T8 R! W% o
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
) a; ?2 d8 y9 f  b. s<p>如果直接点<code>取消</code>后端收到<code>null</code></p>1 Q$ F  p) F; Y, N; c
<h3 id="33-计时相关">3.3 计时相关</h3>9 W; x6 m5 I; i0 ?- W6 Q8 Q3 v
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
' ]4 y/ ?3 R: f% z# i<pre><code class="language-javascript">// 等于3秒钟弹窗
% p' S- D5 i$ I( A& N2 ]( esetTimeout(function(){alert("Hello")}, 3000)! P. t4 r3 H4 z  _
; |7 R, K/ j' f
var t = setTimeout(function(){alert("Hello")}, 3000)1 h* j) z( o, s: N! |4 \' m0 F) b

! F  G+ }8 X4 u- M// 取消setTimeout设置* j  B3 C. j9 @$ z/ ~& @
clearTimeout(t)
7 n4 @8 j7 ?' G8 i: S</code></pre>
* ?3 u, ]0 g) ~" u! ?* T<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>1 H. @) G* n5 O$ q4 L( T: k
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
- X9 H. h% v; v5 z<pre><code class="language-javascript">每三秒弹出 "hello" :
$ n) \+ I( e- h1 f$ g' tsetInterval(function(){alert("Hello")},3000);
4 F- z% E7 j$ s# e$ W* [/ P' b</code></pre>3 [& L+ P3 W8 V6 c' [( T5 C
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>: p* Z% B# P. u# T; R$ X) Q# ~  Z
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
0 I# N! `2 N) p* W3 d$ r! h//取消:
2 R2 f; J0 w9 K+ }0 B# @' q# aclearInterval(t)
: g& @8 _, M6 l* e+ v9 h</code></pre>( W# e, p, x* w$ C' j, U# A
* i% E& ]& y7 C; Z- u& ^( M
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-2 05:37 , Processed in 0.075329 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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