飞雪团队

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

前端之JavaScript

[复制链接]

7992

主题

8080

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

# ~- d* }1 W7 X7 |9 s<h1 id="前端之javascript">前端之JavaScript</h1>
; C* b+ \- }& ?  s<p></p><p></p>4 o" R) v: u* f+ h1 H5 e+ }
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 u" I+ ?* M' x1 C' g<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>! W, D' T) p, W% n6 |7 O5 H3 w& Z8 @
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
- }* U' N7 r8 t# `它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
  f: y: u" E4 S! l1 w它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
5 X* G2 ?& s/ M<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
# Q" I6 |7 W+ q4 I<h3 id="21-注释">2.1 注释</h3>3 \3 |8 X* `8 O/ t
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>: L2 W7 l" N6 S& e
<pre><code class="language-javascript">// 这是单行注释
% y8 |' U8 S8 q! g
) i( F% g% M# l- U: k- N+ t/*5 F& N+ q# e; W! a
这是多行注释的第一行,
4 n0 t- h) F6 ?6 ?这是第二行。
8 \; b; ?2 g* ?*/
; k" N2 Z: Q" [; P! {% _</code></pre>
2 B1 Y# [3 W! H9 W( K4 e<h3 id="22-变量和常量">2.2 变量和常量</h3>' Z/ |% a1 D' T$ r/ S5 w; K% c& o% Q
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>1 X" \) X4 [# W0 a- Q  b( N( ~
<ul>0 N& d6 }9 B: ]' _
<li>变量必须以字母开头</li>- F4 {5 E& P1 o' _7 H/ g* u! s! m
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>  v. T0 m$ h: }4 W" s
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
+ D3 o4 ]' _& A  }( B0 m) H% [. O</ul>
5 C8 q. ]% u3 }: L<p><code>var</code>定义的都为全局变量</p>
0 E; y; Y; W' t, I, [8 U% U- s+ B<p><code>let</code>可以声明局部变量</p>
$ O" z4 D' H2 Z) W' C<p><strong>声明变量:</strong></p>1 P' S; v* y* r$ ]" H% j- J
<pre><code class="language-javascript">// 定义单个变量
/ R2 N4 d4 d4 D: M$ B+ {&gt; var name4 d- B* U0 R8 \3 e: p  M$ O) K( V- T
&gt; name = 'Hans'' s  F6 v9 A' C0 T
//定义并赋值# X$ {6 R6 c: F6 u4 E  u$ `0 S/ B
&gt; var name = 'Hans'
6 ~1 }7 o) p( Y' Q% H* C&gt; name
2 T: G4 F! S4 I'Hans'
7 r: ~/ k* k1 h; r+ f5 Y+ P7 f( ~3 V. v5 h# l/ P: ^7 x, P$ r4 ]
// 定义多个变量
+ u" N  T. L! Z+ C/ G&gt; var name = "Hans", age = 18
2 @4 V4 c6 P) S! u: G2 z&gt; name) J" k  p4 [( A  r0 ^
'Hans'
  l0 t3 l! m8 V&gt; age
: @$ c1 W# i' I5 w& n+ q18! U5 G: u8 ?8 D5 U5 f

5 m  ~" f& v3 `; G8 m8 s7 C7 V1 m7 ~//多行使用反引号`` 类型python中的三引号
, A' v: f! [1 _6 x( R7 x- h4 S7 @&gt; var text = `A young idler,1 q6 P4 o3 i; d' L
an old beggar`, ?8 E  R! f/ g" m* [7 K
&gt; text
+ J, ~0 P; b5 D/ D'A young idler,\nan old beggar'% R' N& V# p7 g: T4 U7 v8 v( ]/ x) @
</code></pre>
" B9 |. V- x  |9 U* R<p><strong>声明常量:</strong></p>2 ?1 ~* H1 L$ @$ f% ]5 \
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>9 J: t' y7 h. M  ]
<pre><code class="language-javascript">&gt; const pi = 3.14
$ _  q' a+ Q# G6 M( |5 F; g&gt; pi$ u& v" ]- i3 j2 H4 Y
3.145 n8 F5 a+ }9 K
&gt;  pi = 3.01
- G6 _' @' n3 I; p/ q5 U5 g2 s9 zUncaught TypeError: Assignment to constant variable.* m, H3 J5 R9 X( |* |. x
    at &lt;anonymous&gt;:1:4
9 p8 R9 _7 P3 t- a7 U4 t' M6 t; f9 }5 |/ I
</code></pre>
) o1 @4 v" V7 b8 n$ K<h3 id="23-基本数据类型">2.3 基本数据类型</h3>$ c7 G9 E$ y4 m5 N/ y% r
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
; c7 z' L9 m0 a4 H<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>0 i* O2 T, |4 f( r- N
<h4 id="231-number类型">2.3.1 Number类型</h4>
+ f; r" |0 Y1 g! V  e4 Y/ J8 ~<pre><code class="language-javascript">&gt; var a = 5
. N$ r. K+ n) X. h& Z2 M" Y0 c4 [&gt; typeof a   //查看变量的类型  
3 C0 E1 V& a$ F9 b+ s3 L) G/ u7 [number( F% y9 g3 \0 q7 ]1 ~) U; v) [% h

# I( c7 r2 ~, z+ q  X$ K' S&gt; var b = 1.3% u( f# O3 h$ V5 ^$ e2 n
&gt; typeof b& r8 A9 m) f, y. j1 {+ O/ u
number1 G* i. Z' C% C/ B5 E
! Y1 m. h! r5 ^
// 不管整型还是浮点型打开出来的结果都是number类型
& Y! X3 ]' m# c8 J- N! S) v. g3 g
) i# }" R( s( @2 S  l, p1 ^/** ?% A8 A+ @, G3 r
NaN:Not A Number
4 N4 ^% _. }, D, d& }NaN属于数值类型 表示的意思是 不是一个数字
0 P+ W4 r1 s1 u6 r: Y*/
; ^3 ?& U! Q# D+ f% o5 b3 s* b2 M9 {1 ]8 F" \# x* n
parseInt('2345')  // 转整型8 g& j1 F$ {+ h. c; v& i
2345, M" |; d  _! A1 I0 a$ l
parseInt('2345.5')0 e$ `6 E; S* p- B8 B$ [* k
2345
$ u4 |$ H. P5 q& T. p! I5 lparseFloat('2345.5') // 转浮点型
) D3 l( Z6 o/ l! b/ o5 [- v2345.5/ j9 B  ]* O/ Y7 k
parseFloat('ABC')) O" o8 u, q' V/ [% f
NaN; u1 V' ~/ Y8 b3 E1 f
parseInt('abc')) h& E/ Q8 q) o' t" [( ?
NaN9 B+ n" V* |) r. [- j$ c( V
</code></pre>6 K# e  \4 M1 M8 Z) q( S( T
<h4 id="232-string类型">2.3.2 String类型</h4>
! O' N5 I* I2 b3 t( _% [<pre><code class="language-javascript">&gt; var name = 'Hans'
5 E: J! j. n' O3 d&gt; typeof name
, h' k8 c) O, X; m2 Y- X'string'. J  ~5 K# r4 [. H! e5 y* Z
3 x  D: ?: f+ c1 p3 q
//常用方法; V6 K. N# Z) m, G! R% n; N
// 变量值长度' l( e/ F/ }7 ~# X4 ^" ]# U- C
&gt; name.length4 _* j: e! W) n  R
4& L3 p( v# D/ S
// trim() 移除空白
. v- }  d# R3 T- U2 i0 i' D4 f; L&gt; var a = '    ABC    '6 k5 K- W9 _0 }4 j: n8 d9 [# R
&gt; a
' W, N7 \0 _3 N3 c) w' u: U'    ABC    '# J* E& ^% h$ p- h- e# G
&gt; a.trim(), l3 F" J' X( ?* Y  v8 }: O$ Q* W4 u
'ABC'8 F* B9 R0 ~4 \* _" Q
//移除左边的空白! H  i9 V: L/ m5 \& o: B
&gt; a.trimLeft(). p6 |/ U( q4 y0 R
'ABC    '* h" x1 d+ g0 L0 _/ c  s- E' Q
//移除右边的空白2 ~7 x: l4 M. Q$ N
&gt; a.trimRight()2 z/ a+ @% E7 B6 l9 w3 I' J
'    ABC'
- x, O6 \5 w3 s# x" g# d/ G, a, S4 `8 t* H8 h% L/ Z& x! I0 `6 {$ o: _
//返回第n个字符,从0开始
. d) h" ]7 M+ v7 @&gt; name
# P0 W# ^0 ?3 }8 w+ P  G'Hans'- ]: u! s* ^  q6 P! i9 {! ]
&gt; name.charAt(3)
; k; [0 Z0 g0 |  Z's'2 p3 r, F5 Z! @& h+ `
&gt; name.charAt()) Z0 H- K; F# X% |
'H'
; H* G0 g( V% K$ K; ?  {+ x4 B&gt; name.charAt(1)
7 y2 w& q% n8 M0 A( A'a'
3 N' V) G! V: |8 H
' I+ U! o% f7 E: f7 s( }% l+ g// 在javascript中推荐使用加号(+)拼接6 k& W& E3 b: Y, b5 F  A
&gt; name( ^8 y7 H1 d% A- G
'Hans'7 i8 A2 G, P& Q9 [
&gt; a' U4 {; d' q- F% _" D* i% v4 `
'    ABC    '" c( \5 E. b2 d( y# T; O
&gt; name + a
, j% {( q. _' i3 h9 q5 x'Hans    ABC    '% M9 f  W8 S# k4 \. G, @$ X! G
// 使用concat拼接
9 S8 @' j, e! f' Y5 p&gt; name.concat(a), y1 O+ @- ]" I$ w& S8 v" A4 \( O
'Hans    ABC    '  Y6 g; Q4 e' o# y

* t" m  ^* I# r# _" I) E/ \//indexOf(substring, start)子序列位置
8 \, {# r  M0 x& F- m: ~3 r5 A) b2 B" P
&gt; text1 s! i  h8 c0 ^$ ]1 L, M- {8 ?5 k
'A young idler,\nan old beggar'- Y8 U+ [& G* P
&gt; text.indexOf('young',0)7 b7 S* e; y) E6 Q' Z
2
9 y, ]' K; F: Y4 m6 y
. S& I" K- X/ Z* j1 F  v9 s//.substring(from, to)        根据索引获取子序列7 v* h, V6 M1 F! e
&gt; text.substring(0,)
( `% k! e3 Z$ A% a) y5 |) M, u'A young idler,\nan old beggar'
. b3 m# D: t  k# \&gt; text.substring(0,10)( g7 Z8 w7 ?, m: m8 f8 ?. ~
'A young id'
2 P) x8 z$ Z, `4 }9 a2 I! |$ s3 h+ \' s; P
// .slice(start, end)        切片, 从0开始顾头不顾尾
3 }% V+ [0 T- V8 t4 }&gt; name.slice(0,3)- l6 D" r" `8 i5 O$ B- T. v7 l
'Han'
* [& Q8 F+ B' @* @
8 {( ]" S0 d8 s// 转小写
  w- i7 M! V+ N+ H$ a  R: R&gt; name6 F; l0 g5 H0 q& x
'Hans'
/ D0 e5 i, Q; d5 R# b: D# b&gt; name.toLowerCase()
6 g; D" X( [( I) O'hans'. n- i* f* x9 z
// 转大写! h8 o$ v4 i# ^4 u4 ~- g
&gt; name.toUpperCase()
  I$ I/ ?( b' e* k; j'HANS'
5 n$ s+ D4 |7 a! |/ J4 d0 X2 l. c5 ]- d9 x% ?
// 分隔. I* S0 V* y8 K& q0 a
&gt; name. b: w0 N/ y9 p
'Hans'
5 Q, ~3 F2 q) F5 t8 _+ c) R&gt; name.split('a')
! H0 C( e. v. j9 }1 C) K(2)&nbsp;['H', 'ns']" U4 Z+ d& {6 L% M
</code></pre>2 B6 u* H% l; P: o) l7 u) ~4 I1 n" r
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* i1 v9 G' U" D" I" q' P4 o! f% z<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>: |6 m+ o- K/ ^' P- [  T; o0 V6 u/ o
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
+ N% P: p  D2 Q  d* l6 h<p><strong>null和undefined</strong></p>6 M# m$ T. P; s7 k% T7 t- L2 l
<ul>. {  y4 v4 K; W: d% M: c; z
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
8 `7 q/ y1 s' v: n0 E7 {& V<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
% z3 F" d  ]! H$ a) e# ~</ul>) m, t- T2 y# L" H
<h4 id="234-array数组">2.3.4 Array数组</h4>
# f8 |' Q* D# U1 u* d  r# U<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
' A; s' K9 E8 I! n, s<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] + }3 {% [+ ^' t/ Z8 }: n
&gt; array1
7 C  _% G6 m( d) y, @(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 `9 r/ E' E$ y, H&gt; console.log(array1[2])  //console.log打印类似python中的print+ S& C, L5 x& p8 C
31 ^" c: S* s1 `  M: ]
// length元素个数
: |, K  J4 `, N( ?9 h# n&gt; array1.length
- e. p5 T! j' F! @) I- C. Q6$ e- o4 }% S5 g) A
// 在尾部增加元素,类型append
% o, v1 e* R$ b  b# r4 \&gt; array1.push('D')
( y" K- y2 }: c" [& N) A; u4 e3 r6 K7
  c# B4 w7 H, {( Z! K+ m$ I&gt; array1+ _; ~6 H% d: d* a3 `; P
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']3 c; x8 z. u& g% H5 {8 s
// 在头部增加元素
' t# H% @( [' x/ X&gt; array1.unshift(0)
# b+ D: M3 q. L8 Y& T. j% @8
3 C5 V3 v4 a" m&gt; array1
, |& E# [5 ]" B9 K6 B(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']2 Z- Y2 z. y. G+ Z
$ P$ W" v/ [  h" `6 B- k2 ^
//取最后一个元素+ p) v  H3 Z# l/ t0 a+ C8 e
&gt; array1.pop()
0 w5 {1 A# t6 A! _2 d'D'+ B% K! I/ s' u7 l# K
&gt; array1
3 }. ]9 Z2 I1 b(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
, ^9 K6 E# w0 d3 o& ]2 r: D2 D//取头部元素9 J! M! o1 d4 S. N/ c; E
&gt; array1.shift()
- E( B: o# [+ ]0 _! z$ X5 ^0
4 F4 Q. Y  P5 T1 u. i  {9 @&gt; array1  v& Z, q7 D( l* _; s$ F6 C
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ Q' D$ E5 [5 b: U
$ i3 I3 ~6 E. l
//切片, 从0开始顾头不顾尾* |; @8 P- U4 ]  N9 W
&gt; array1.slice(3,6)
4 C, l) U! z: J(3)&nbsp;['a', 'b', 'c']8 i( ]4 B/ Q" L  u4 K, k
// 反转6 V7 Y) h8 U" i1 T; Z3 {9 G
&gt; array1.reverse()  I  F8 }5 [0 }+ A- ?
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
5 C  N! h9 l% Z4 O( K// 将数组元素连接成字符串
& e0 w' O; u+ [" T&gt; array1.join() // 什么不都写默认使用逗号分隔4 x- A' n  U0 l9 Y# u& O
'c,b,a,3,2,1'
) R# Q  {. V0 t' {6 e&gt; array1.join('')
" D4 z& z  f7 g0 u  M! X' V" L- U'cba321'
' D# ]5 `2 F2 S: k3 W4 r9 x8 }3 p&gt; array1.join('|')
  l1 A1 Y* x( w. V5 D8 J  K7 o'c|b|a|3|2|1'
* M2 n$ J7 S" f/ u7 V, B- x2 i" U# l5 I" W- v6 i3 C
// 连接数组
) c. r; q5 d; ]* h&gt; var array2 = ['A','B','C']4 a6 [9 W! m8 G; ?" G: r
&gt; array1.concat(array2)
4 p  J9 Y5 J6 A(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']3 a& r( w' z* ?9 ^+ K+ u2 {

8 |: w  i" c% J. }// 排序
' v+ P3 A3 O6 E$ d  D. Z# w* V&gt; array1.sort()( W6 W. `, `  A+ E- `" a2 T- C
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 P7 H! ?6 ?& r" z3 j
9 ^6 u5 t5 _/ [' m
// 删除元素,并可以向数据组中添加新元素(可选)7 o% B% Y3 t% W1 H8 ^0 N& W
&gt; array1.splice(3,3)  // 删除元素
" c$ G0 H; K3 O( ^: y(3)&nbsp;['a', 'b', 'c']
$ m  a* U0 V' W0 z# A&gt; array1
: e+ ~. s" k6 g) v0 Q1 ]1 l(3)&nbsp;[1, 2, 3]! A' v. @- i' B" M2 H6 e- [, X
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
) p0 ?3 v0 c8 b; B8 n  ~[]
' |3 w3 ]! e/ v& C1 h. l&gt; array1
, _0 g7 t& t2 B1 r! M9 e(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']1 E7 s/ _7 s8 q  S1 N( l8 z7 e# j' V
9 {: d$ c4 b/ e7 R8 j5 y
/*
) y5 e3 G& k1 ]# I% ^splice(index,howmany,item1,.....,itemX)5 S7 F  T: H) p* m
index:必需,必须是数字。规定从何处添加/删除元素。
5 Q) z/ O* S( _9 Uhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。: V% U, Q  b; w+ v+ L
item1, ..., itemX        可选。要添加到数组的新元素
; @* b$ u: Q4 e' A*/
" G* r  R- s& m1 x3 I3 {$ Y8 A  n
( {7 G0 ~; I5 M// forEach()        将数组的每个元素传递给回调函数! m6 M) U9 R/ v: B& K( _* W
&gt; array1.forEach(function test(n){console.log(n)})1 e2 s4 n- H0 J3 y
1, \% r1 _( r' s/ a  L# F
2
2 P8 f. L: u2 {  F8 c$ h 35 i, {: t& j( a/ k! V- J9 j
A& C" d$ A* I; N0 R# R9 }3 A6 P
B8 t. g( p& y4 M" P. t8 A8 W
C2 Z# e' H  k7 b; S& Z7 h* G8 Y
// 返回一个数组元素调用函数处理后的值的新数组+ u" {' x7 u0 M0 b) N
&gt; array1.map(function(value){return value +1})
4 E: P; {# q' m: W(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']. b4 Z# s! A6 X8 s8 W1 _
</code></pre>$ ]0 Z5 I$ ^  C1 `, @
<h3 id="24-运算符">2.4 运算符</h3>3 M  r8 s( \* L- e
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 e: A. `  r. R0 A8 o<p><code>+ - * / % ++ --</code></p># U& `! r) g" I* P- a9 m5 K
<pre><code class="language-javascript">&gt; var a = 6; {# G7 Q7 X3 |* K1 C
&gt; var b = 3: a* k- P9 M. e$ R
// 加0 H! i! G6 z* h! O. H1 s1 m
&gt; a + b
; `  R% V; \( X4 n' i& K; E! f! X95 W& ]2 u) l. F- h2 H; v7 }1 \
// 减
# b5 |& N: U, |5 o; I  L6 i&gt; a - b
) n6 j5 Z5 R/ ?  k' l9 \0 x/ v# b3
/ v# V! F$ J8 m# Z// 乘
3 T8 X2 M- `! t&gt; a * b
, U" q; N- \) R* c' D# \( _  ]184 @) c& L0 H/ E5 G' ?0 M, Q, T
// 除
9 K6 q( b0 @5 L&gt; a / b
, z) i5 M8 |3 @0 C2
5 V- i- E+ ?3 i/ [  p// 取模(取余), b* h7 S1 C/ {, O& S
&gt; a % b
5 i$ Y- e3 j' o/ h0; ^' E8 I5 C: x$ q: Q; z/ U! w' l
// 自增1(先赋值再增1)
) y. I/ R! M2 D6 ^4 T$ @* q% p&gt; a++8 B( V1 ~2 [# N' s. R+ k
61 [. J# ?/ D; z4 I- r) X
&gt; a
  s+ H5 \  R+ u( D7
0 E9 x3 u4 }0 ^// 自减1(先赋值再减1), O* _, v& V7 F+ ]
&gt; a--2 F: d" X% r$ q2 G  ?
7
3 d1 \  W1 A8 [0 C$ [7 c&gt; a
8 N, \* }& n  \" e2 G- @! q5 y6
% [6 M' G, t% b. R2 F3 V! W// 自增1(先增1再赋值)
  U. M5 w' R# P9 O0 `' x2 p( j&gt; ++a
5 g  ]7 g7 v5 J# e7: P$ w9 B8 J) p/ q
// 自减1(先减1再赋值)) ^# _' W5 k; T  g: f6 t9 e8 x7 C
&gt; --a
, A$ W' v! n' a1 S) L64 c* q! B( A0 `* G0 s
&gt; a# {9 c+ S7 k6 Y7 A! {
6$ e/ O; K5 ?5 @
# P- b+ v, w. K5 k/ c# r
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理7 @- l, M9 x, G% k) }( r$ }$ Q
</code></pre>
$ i2 s7 ]3 [+ M, W<h4 id="242-比较运算符">2.4.2 比较运算符</h4>7 {. M* Q$ V" n. \; y- z
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
, {; e, p" A9 F) [, E: H<pre><code class="language-javascript">// 大于( P# j/ y8 v0 V
&gt; a &gt; b
1 {! H  t3 Y7 Z: [true+ A0 x0 k& x, U8 G! C
// 大于等于
5 K) |3 ^# P3 _% ]) n9 k0 u' i&gt; a &gt;= b; t6 X% Q- l0 V
true
4 |  V: G! F7 _/ q// 小于
) [: }0 ]0 i  a/ H9 O# E% B, d&gt; a &lt; b  i: f) V4 u4 r: g9 D, C
false( e* T9 y! K5 f6 W7 d
// 小于等于8 ~& G9 j5 ~; ~. R" c* H) D
&gt; a &lt;= b/ _) V2 o* y6 N( O; X  q# k
false9 t; Q! p) V+ a' X. n
// 弱不等于- k# N1 h: S# r1 F0 W5 S
&gt; a != b: o5 a7 h2 ?: Y. f9 H' S
true9 [& F( }+ J+ `! ^8 `
// 弱等于7 i; n2 U* G2 |& m" N) e
&gt; 1 == '1'1 ?, }' \$ s7 U- A6 F
true% `, c* P4 k, o
// 强等于# x/ q# _) ~0 k) @$ k
&gt; 1 === '1'2 P5 T% }3 V# b! V, D! ~6 o
false8 k$ D5 |# M' p" {* S
// 强不等于
! [+ S* Z; e) H+ f&gt; 1 !== '1'
* g4 |7 ^" S$ }& T2 m- b! A6 Ltrue4 a" j& J+ W7 |2 X2 F/ l

" d) I- Q& k) t- j: q8 y/*1 K0 ?9 U7 ^  }6 {; X4 y
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
+ m0 {7 B% T8 H) @, N" C/ A*/
" \1 e$ [3 W; C: H) r& W</code></pre>
/ j5 S& N# }$ v) b( {# P<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- M. |5 O  z9 f1 P<p><code>&amp;&amp; || !</code></p>
5 `) O) d; o' i. D; z  h<pre><code class="language-javascript">&amp;&amp; 与  `  Y: Y. Q5 Z3 w) |# T
|| or
8 R& c6 \3 n. E- F' C! 非
! R3 ^% M2 \+ A! _</code></pre>
. Q  p; X  |! ^$ Y% C<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
, P* k- K/ \& {! ]) u8 a! z6 q<p><code>= += -= *= /=</code></p>
* `5 e6 F1 Y5 g" i1 `<pre><code class="language-javascript">// 赋值1 g) K# l3 V  {' K
&gt; var x = 3) k. ~8 X* D- Y+ M; J1 r
// 加等于# x. y' p) C3 V" C
&gt; x += 27 t# k; `% ]# R1 M6 y' o
5
, r4 s9 a! r4 N4 }5 ], y# b// 减等于, g) _3 o0 T! j- X1 {  g
&gt; x -= 1
7 K2 Q8 a9 W3 r; e4
1 T+ o; M9 D' E5 u! Z// 乘等于7 P2 H( K8 d% x2 P3 @0 w) ], z) S
&gt; x *= 2' Y9 Z) V8 D- f5 ~# n
88 b) y/ m7 j# T! J
// 除等于4 G* R: w+ r, s  K% A  O
&gt; x /= 2( C% |# j% y: h! G! F* k
4, d, @& ^# t: \- n4 \4 U; ?
</code></pre>  a& X% U  t. Q- l" X4 y
<h3 id="25-流程控制">2.5 流程控制</h3>% {4 D4 B$ r( c  X+ U. h3 U
<h4 id="251-if">2.5.1 if</h4>
  G0 Z& X! O. F) O1 l& z2 d( b<pre><code class="language-javascript">1, if(条件){条件成立执行代码}6 C+ x1 q, R( l7 J
5 e  P4 Q6 Y6 G4 m' k  o2 D
&gt; var x = 3
' b' e  _# F( N$ z& l/ v&gt; if (x &gt; 2){console.log("OK")}
; m  A- M9 e0 @3 | OK, j# C0 I, O! U9 C! }" T1 i

, U- R! V+ W; {& Q+ c2, if(条件){条件成立执行代码}
$ t- O4 q2 o, B3 d$ N4 t$ Z        else{条件不成立执行代码}2 l6 s' ^. J" I0 e# J

) b- r, n% h! w3 R9 l&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
( Y( i+ g- L5 r2 m, s+ N( @# u'NO'
, r, q: `. C: A& \, Q
. W; U* h  u4 o6 c0 h3, if(条件1){条件1成立执行代码}
" g0 @3 i8 {0 p4 C) W: X        else if(条件2){条件2成立执行代码}
& K+ G7 X3 X: d- c- w- U, H/ o    else{上面条件都不成立执行代码}4 B. K. L* H7 H9 f2 ~$ y
. T, x4 W# k( ?0 u
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}* i- z- C" E$ m' s! B: B& r0 @
Ha
$ F( m' q5 K  a: Q9 j+ m* H</code></pre>2 \+ ]( o: E* P% }& s
<h4 id="252-switch">2.5.2 switch</h4>' `2 j: I* ~6 ?# h  |+ f! S
<pre><code class="language-javascript">var day = new Date().getDay();
1 u" Q) j, D: q& z& Iswitch (day) {) j4 e* K3 y. O/ s0 |/ F  V
  case 0:
  {* e, X$ O4 D3 s  console.log("Sunday");
* d9 r1 [+ E+ u) |  break;( S7 N# G9 k- C% q$ O7 }
  case 1:
& @2 w3 q0 k7 Z7 @  console.log("Monday");
, c" @! W  _9 G  break;$ R% t4 Y) U; W( t7 P7 C
default:
6 E4 c+ x& b2 b) H/ ]+ [4 a" F  console.log("不在范围")
- @* Q, R$ M  D1 c0 m% a}4 Y( \) ~( @5 s/ |- s
不在范围
( T" {) g; |( a1 \9 p0 e</code></pre># L" Q% a- m: F1 n0 u( a" e5 z, h. Y
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>+ _$ v! c& z* A6 Q; h
<h4 id="253-for">2.5.3 for</h4>& v" l  ~/ V4 Z- ~4 G$ v5 o
<pre><code class="language-python">// for 循环
7 {5 @# U- R3 s4 ?0 j- N9 e, [        for(起始值;循环条件;每次循环后执行的操作){
) ^2 d5 f: D6 \. z: {( W$ S$ U        for循环体代码/ v% d! `- [* d; j' A7 A$ @& a2 c6 k
    }" Q8 I3 o/ H3 R9 @" R
$ m4 T3 _) Y9 Z1 P( @5 A
for (var i = 0; i&lt;10; i++){% n  }. b( F4 W- i5 Q, O
    console.log(i)9 t6 f; D# e: g2 q5 c
}7 `+ H( D+ C7 }( ]5 b1 d" r
        07 {& {2 }" u# m, g
        1( Y4 ^" M+ N3 L' A$ ?
        2
3 q) x% w$ ~$ t5 E" Z" _        32 ?9 a( I* n* T: V2 B& a
        48 {( Q- n( `6 L: r) s/ c
        5$ `, C* |: w( b
        6
& h. M* c1 N9 ~/ G6 x. P1 g+ o% _        7
# P0 S9 P7 I  D7 x        8& {) @2 [4 y" A7 `1 X8 t
        9
2 V7 c) Z7 X8 J( a* X</code></pre>+ s! x8 X. ?( a! t& d
<h4 id="254-while">2.5.4 while</h4>
" }, g6 I0 x8 ~" S  S# r3 l<pre><code class="language-javascript">// while 循环4 u1 f" `$ b$ @, h) U' b
        while(循环条件){
9 l  K' L- A+ T4 z7 ^        循环体代码1 F! u5 M+ t7 K7 ^
    }7 ~4 b0 D7 v8 @
$ Z: G7 t& B: L/ K% Y
&gt; var i = 03 K9 J! X/ H9 M/ \" x
&gt; while(i&lt;10){
# a7 X( y! T: [- x% r0 ^    console.log(i)+ F7 y) q( S' e7 i' @  ?
    i++2 ^6 K7 K4 i5 H3 V
}
) w, ~; W) g! Y' ]& {" B 0
+ a8 |* C; H' z9 l* a& e6 B 1
4 z0 ~- O. f4 O! A3 a2 } 2
/ q& _( y* C% `. B5 n 3
) j4 J6 B. Y0 X: @ 4. w8 ?' Y5 w2 R  b/ \
5
+ w1 s  q1 Y" n" c- j  D 6, l9 K4 l: n/ `( d4 `$ \+ a) O7 ]7 k  e
7
% A1 U1 Q# Y* V: o, y 8! s- T2 l9 E  r* ^2 O. u
9
7 ~9 q" V  q6 l( h; c: {) d</code></pre>$ p: E/ n% B& p# _! g$ o+ N0 b
<h4 id="255-break和continue">2.5.5 break和continue</h4>
! o! p8 C2 |3 j; ^<pre><code class="language-javascript">// break" H( U" p3 L% r5 ]  `- ~
for (var i = 0; i&lt;10; i++){
' _$ p5 t0 U/ |! D9 E  ?+ y% E( ?6 @    if (i == 5){break}
  m3 N! q# b+ E- f( u% U    console.log(i)1 ~) n' F7 r; ]' s7 P: ^6 E, y
}- p# G) r% F% W' ?' ~2 D8 z
07 k+ }3 k" ~3 ]4 g( u
1: _" d$ M; ]2 k1 j# X. m# q0 |, h6 \- \' Y
2" f1 V& M" ?9 [* y+ O
3
4 P3 F  M* ~5 X% A6 K  [$ P0 @ 41 w3 N6 \5 z9 D" h
// continue
) f, ~" b5 P: Y9 b$ I5 I7 \5 Vfor (var i = 0; i&lt;10; i++){
/ d& H0 F; j3 T* E$ ?    if (i == 5){continue}4 H$ ]" y7 {1 P# A( B3 w  ^1 j: Q% T
    console.log(i)8 v; n4 O, e5 K/ T( M
}
( L8 y9 Z  F; G5 F) t2 w0 a 05 ^8 Z% s; D8 j: X+ F/ Q  M
1! {7 Y- \' L6 l9 X0 C: u
2* g( o* F9 \$ s  `
3- M: ]  o) A* \! t; _7 }
4
# p# [# S8 X  P' k6 Z( Q8 m8 V 6
0 g1 ]5 r1 Z. J8 w! R5 ^ 7
/ n# t0 G8 E8 \0 z* ]- A0 S 8
8 g7 Q, F* N% q  b; t: @, {! c+ J% J 9, g0 l  u, v; L  I0 |

4 n0 }$ _+ x. D1 U9 H( T</code></pre>
5 D+ ]  C* D5 g! f+ F4 p<h3 id="26-三元运算">2.6 三元运算</h3>
  Q1 B2 V* Q0 j- R" S! q3 i<pre><code class="language-javascript">&gt; a/ ]2 `, |. Y' F) `8 w0 I
6  S' D. W+ o: e( ?8 s( u
&gt; b
* b# k: C* T  _" w0 V3- {3 q# F# ~; a4 L- c" F' a
% P6 b2 H0 l9 U7 o
//条件成立c为a的值,不成立c为b的值
$ x5 h4 D' D( m0 R' B1 b1 v&gt; var c = a &gt; b ? a : b
7 s. F! A) A$ {&gt; c
6 q( T; Y, P7 w' h3 {& f* w6
1 e4 U% t+ O" M/ L+ @
% y& |; L) B- h3 H// 三元运算可以嵌套3 U0 K) a( E5 k1 m% J
</code></pre>) ?  F; o. t& e1 j
<h3 id="27-函数">2.7 函数</h3>- x6 G2 S( e* g) e  L8 o
<pre><code class="language-javascript">1. 普通函数) i" q! v3 ?! U, \+ i( Y+ A
&gt; function foo1(){
5 g4 f0 ?* l' h2 c) ~' \& M- n    console.log("Hi")
9 I; f7 i+ N7 @% A+ e}
  m6 i$ D9 {, [% c, _- v
7 X* v) V! n+ y( ?&gt; foo1()' `' B( d5 N& H4 e3 L
        Hi6 r7 J- i% k7 ]: j/ O
2. 带参数函数
. _8 ?7 S1 I" |' _) R* F. B/ {&gt; function foo1(name){
; g7 c2 E6 y9 H# o, }. Oconsole.log("Hi",name)
' v* b$ T. Y( M% v, }. _5 ?: z3 O}
+ _( B; s9 M+ I+ z0 s
# K; q, S) }$ |&gt; foo1("Hans")( o5 X  Q1 d# c- C8 s
Hi Hans
! y! a. ^$ H7 \  b4 @9 g
1 {7 e- G! k7 s* D) c&gt; var name = "Hello"( x1 D# T% N/ }3 ]( f0 i3 {1 i, e
&gt; foo1(name)
! `" c6 a- e1 q& b2 r3 D# {5 bHi Hello
2 k! |8 X- k& O: X2 Q$ `( I
( `: f4 d4 ?- o3. 带返回值函数
& i  U) m  v& n' ^&gt; function foo1(a,b){
0 N1 s  T6 E$ L6 g7 t" ?" c! y        return a + b   7 j* @* z0 @& t
}  q: w6 v9 B3 A
&gt; foo1(1,2)
. }4 q" `  v! D' ]& m( S$ d2 \. S3
% z5 H) |2 H3 N. K7 N&gt; var a = foo1(10,20)  //接受函数返回值
8 d( {& K% i+ }9 w8 U5 o# i&gt; a
. k* e) c( T; m$ n30
3 o7 A, g8 r5 z- ^& G
2 B0 ^) S6 l  `4 C4. 匿名函数% y( o! _8 Y4 Z8 v2 P
&gt; var sum = function(a, b){
9 p5 {! \7 y! ]- f$ Q  return a + b;
' H; A* u  u/ i0 l6 @$ E) m}
* ?' h- ~% C: G2 y. W1 F# q  m! m/ ~&gt; sum(1,2)4 e( ^8 G0 B8 R# b
39 [: X- ^/ o4 l0 x, o; E

! I4 ]4 K  j# e) o// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
3 x7 W. X, V$ ?&gt; (function(a, b){
+ }/ O: k" q% V; e$ i  return a + b; B' b) Q' d: d! i3 g
})(10, 20)* u4 v/ }* w( ~- |
302 p8 a$ y8 }2 n# I

+ l! P5 U' [2 b# m) C* ~9 @5 ^5. 闭包函数4 s, K3 f  t3 I, e
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: [0 M/ e2 P* S4 t! b
var city = "BJ"
1 J  n5 H4 o! `; Ofunction f(){- `# u; R( D* g1 {9 G5 i
    var city = "SH"  a7 [0 g& i1 C- B, ?
    function inner(){; R' v7 u3 H- M; f
        console.log(city)
, P- Q* g; ?+ l( f1 D    }
6 R6 h6 z8 h. g3 d1 F' {    return inner
( j- B, g+ i5 ]- v7 l5 [3 A. U}
; M: W0 y# n+ Q! P7 Dvar ret = f()1 F4 u$ f6 e$ ?1 e2 b7 w8 L
ret()7 t/ \# j' g! K1 L1 y* d% O  r
执行结果:
4 Y! k* S- X6 `$ k1 S" |SH* b4 g/ v9 f6 I/ N: ~' Y( ^0 u; F
8 x" p  G5 Z/ ^
</code></pre>& H/ y$ X6 g! b5 V2 f6 q9 Z$ G
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
1 n7 s8 c* F: Q/ V+ r/ e<pre><code class="language-javascript">var f = v =&gt; v;* n: s4 C; G- ~( x/ Q3 [
// 等同于5 s& d8 [) }2 @( n& H8 U4 J. a
var f = function(v){5 m& @& z, |, Z1 E8 Z$ |
  return v;
. ~9 U: l8 }7 P4 {}
+ D6 Z$ L; Y+ f5 Q</code></pre>, j; f8 j6 n3 ]% U. ~
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, {$ v$ ^# O5 l6 }, k$ G<pre><code class="language-javascript">function foo1(a,b){% C0 z" p% W) ~2 V2 a
    console.log(arguments.length)  //参数的个数 ' ?; S2 B; N5 H4 W8 z1 i+ ]
    console.log(arguments[0]) // 第一个参数的值
0 S0 S( R" ~* S0 ?' X: ]' t( Y- c" [        return a + b   
+ k" {2 \( e. @4 C3 h}: ?, O0 v% r, Z: |
foo1(10,20)6 d1 |& z& B, l& ~
结果:! n# }; F$ }) |' E" {$ D- K3 @9 Q3 ]% w
2          //参数的个数 7 {- f- m. v1 @& q
10        // 第一个参数的值  S( Q; j4 k; }, L7 g0 C
30        // 返回相加的结果, i$ @% B. X/ g5 ]; P; U% `
</code></pre>
/ Q' X1 H- o6 U<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
" U' {( t' s, _8 _3 [3 J<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
5 a/ q0 ?7 V% o1 G<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
5 k, u1 w; e; c& `! I& q- k# g<h4 id="281-date对象">2.8.1 Date对象</h4>
4 A5 x6 O* v0 D- z: l, o8 H<pre><code class="language-javascript">&gt; var data_test = new Date()1 Y9 K3 F# j3 \- Y, s4 Q
&gt; data_test
1 M# M  D# V* Q& F& P: XFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
4 |( O+ q. `4 Z6 \" o&gt; data_test.toLocaleString()) w' z. U2 `$ @' A* n6 D* |4 d
'2022/2/11 下午9:44:43'8 q/ J+ l* A1 r0 i
+ o7 S) v1 f7 }. t2 M) D
&gt; data_test.toLocaleDateString()
8 j/ S0 `/ C' v, Q% T'2022/2/11'
; _& l* K: s/ n/ y1 _/ N
0 g5 [/ L) L& k: E&gt; var data_test2  = new Date("2022/2/11 9:44:43"): x0 Q2 u7 W% p
&gt; data_test2.toLocaleString()
* P/ c7 u: J* W# G1 j& Y'2022/2/11 上午9:44:43'6 u# a9 G' {$ \* m) s% I
+ C# Y) H7 W+ }% X  V3 [$ k1 }
// 获取当前几号
: D( [) i: f: \+ L: Q&gt; data_test.getDate()$ i. C, {" F3 F: @4 j' \3 D. I& V8 }
11/ `1 n; h2 w( X3 _, W; {2 P
// 获取星期几,数字表示
7 P9 o' V2 q8 ]+ }/ a&gt; data_test.getDay()  ; @' P% B0 J0 s! Z
5) E0 ~, ?/ c$ y7 ]" Y9 c
// 获取月份(0-11)
6 Y* g; A) I0 {+ }) n&gt; data_test.getMonth()
6 f2 P6 }" j, R, p3 A1" j( K- ]9 F3 m& n9 ^
// 获取完整年份$ @; B7 Q8 j+ K7 Z3 y
&gt; data_test.getFullYear()! U- j$ F- Y5 d2 `
2022; [# R/ v0 S) Q6 H% I3 `
// 获取时
% a& f! ~# |6 T1 R8 \% ^&gt; data_test.getHours()* U) w2 `" s7 U3 y/ Z. Z/ F# o
21
* t! M# i) W6 Q) @: r) @// 获取分
+ V7 f4 J& W" o0 v' J! ~# b&gt; data_test.getMinutes()5 g' k$ f* F7 Q. k  f( _2 d0 x4 G
44( w. `- y, j% h* O7 ^1 M  n8 y, ^1 J
// 获取秒
2 ?9 o4 r6 Q: g: e&gt; data_test.getSeconds()+ X; r* j& `1 `  x
435 u' @: z7 r' n) k7 _' d/ P' D
// 获取毫秒9 {8 |% q( E" c5 t: e0 g
&gt; data_test.getMilliseconds()8 F0 ?2 Y2 V2 O  e2 ?2 o, N
290: |* `1 _2 o3 |1 E+ `6 c$ ]: e
// 获取时间戳
3 s1 i$ j: t$ e2 n6 ?&gt; data_test.getTime()
5 S3 ^* c8 u& U/ v$ n3 K- }; n3 g1644587083290
( L& n4 K$ v5 Z: \/ t( I</code></pre>2 b4 Y3 @2 D. b4 a/ l. |2 V6 F
<h4 id="282-json对象">2.8.2 Json对象</h4>
, p1 e$ v# w7 i3 \! U<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
8 X0 s; e8 s3 G. s" U* J$ e/ ]JSON.parse()  // 反序列化,把JSON字符串转换成对象$ w' L# _  a4 N0 n

1 |0 Q# `, {& j+ y, S/ m// 序列化
5 I0 {! A0 t# w0 Q8 n! a2 z0 U&gt; var jstojson = JSON.stringify(person)
1 T+ R7 s' ?" A) [&gt; jstojson  
+ C' h7 T4 |$ X9 @'{"Name":"Hans","Age":18}'( E+ @# }4 x9 G6 e2 g3 `: a
: H& |2 E* z* ^
// 反序列化
5 |% g5 N4 f8 K! f  t2 l0 `4 N) |# F&gt; var x = JSON.parse(jstojson)
; C- p6 W0 Q' _1 l4 X2 M. ?1 u&gt; x
% Q, l  l- B8 P: r' x' q- C{Name: 'Hans', Age: 18}- D* w4 z8 K! ?* @1 E
&gt; x.Age5 b8 R. f1 y; F$ J, i; y8 W
18
9 C2 q: y5 E, I( q) A3 Q, u5 Q</code></pre>
& x3 X! U0 Y, h5 {- U<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>( f& n0 j7 y; G0 }* m% Q2 R8 `% z0 g/ W
<p>正则</p>
# [  F# w: |2 t, [& Y1 h<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
0 `) _' ~' u: {- x. Z( L&gt; reg1
3 c7 o1 Y6 C8 A" S/^[a-zA-Z][a-zA-Z0-9]{4,7}/. _# ]% A% e6 p% i
&gt; reg1.test("Hans666")
$ Z6 d4 K, n( v! n/ z3 r# qtrue4 z5 S/ i7 H+ X" a8 R- R& V
0 z% k& n, }) _( [0 T
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/' `; K: g3 T  g4 {/ d# Z
&gt; reg2* E* P2 I+ {& S$ `$ Q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
7 J" p4 ?& z* t2 x; Z/ O  }' _! J&gt; reg2.test('Hasdfa')
0 p: ~! z8 i: O4 h/ {( r) ^true
6 M7 J2 j7 b3 m6 Q% n2 {" z* w) k5 o4 E# O; Q7 ~
全局匹配:2 ?8 a7 @- G& R, y  n! i
&gt; name; W* }. n- }+ t
'Hello'' \+ j, P3 u% H2 Y% i5 L9 x
&gt; name.match(/l/)
) @5 U5 a" ]& }( Q2 t! ?['l', index: 2, input: 'Hello', groups: undefined]
7 w3 g0 a5 p+ K( ?
( r9 u3 m6 `* r& H. @% P&gt; name.match(/l/g)2 c( K( V& J0 t) Q" @$ A
(2)&nbsp;['l', 'l']: A% @2 j# B$ m
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配, t; ?' \) N, J; c" A4 Z; Q# D
- \2 b& s7 @: D4 p
全局匹配注意事项:4 C* p. E! M6 [; o5 n
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g" p1 ]# {# ?$ _' U$ M4 N
&gt; reg2.test('Hasdfa')8 r% q) D! \' [
true8 L- B2 z6 ]# N. `+ n" V& y
&gt;reg2.lastIndex;  e* }' C6 P' y5 j/ A- u/ r7 N6 W
64 s4 k6 C! R3 Z/ t" Y3 I
&gt; reg2.test('Hasdfa')
& s7 l- s/ }4 ^  ^0 Z! G1 ~. Efalse# \1 V0 R3 i2 D* h- M' R8 D
&gt; reg2.lastIndex;
( T& C* k) Q: E& a: q! x$ _00 }5 S4 M2 f4 V* d% {1 k* `3 e
&gt; reg2.test('Hasdfa')! G! S/ J+ p4 o
true4 `; K) W2 r2 R3 l6 o
&gt; reg2.lastIndex;7 i7 W% N9 l% ]& G: y
6
% p2 n; Q; F9 m5 B" N7 b$ _, ^% E&gt; reg2.test('Hasdfa')
9 V# F& \6 J- i3 Y" `# cfalse& ^1 L; K) V0 @# W3 |% \, N
&gt; reg2.lastIndex;! r+ T5 B$ ^/ p8 J
0
1 r% z7 I$ {$ j8 e// 全局匹配会有一个lastindex属性  N: j9 _+ V" I' ^7 Z
&gt; reg2.test()9 n! P9 U9 e3 h4 n4 Q
false
% Y5 G8 i9 [$ Z&gt; reg2.test()7 s; {% g: t1 I4 s7 m' \/ n
true1 [' @0 p$ x9 z* O
// 校验时不传参数默认传的是undefined; h% }: H4 q$ a" k
</code></pre>
* _# T6 W) T/ U$ I; h7 P<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
% |' k6 s; Z: e: _1 x<p>就相当于是<code>python</code>中的字典</p>6 L  e7 M" n" b5 I* x
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
" i, |3 S2 D" n/ M* I. ~3 |&gt; person
1 E: m9 I& {; v/ {/ `( z{Name: 'Hans', Age: 18}
* a9 f* K+ V  C" u: ?&gt; person.Name
, P3 `" r9 \0 |9 ?'Hans'
6 s) v: |8 N. C: h5 u&gt; person["Name"]
( T4 B" H1 l& I! P  u. _* ]'Hans'
% f( J; f6 J) O: K; D# [. o( e4 G2 n2 {# C
// 也可以使用new Object创建# I$ d+ G7 d- s
&gt; var person2 = new Object()
3 I5 y# I( R5 d0 f4 d&gt; person2.name = "Hello"
) z6 b3 f% |# q'Hello'
- u# v) e! o+ |&gt; person2.age = 20
& N8 {9 d0 D: _0 Z& E, T2 E20
9 T- o1 K4 s2 a$ [' q/ ?$ m! D</code></pre>
7 T- [: |* M: u5 G& U<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
3 z, Y2 T8 q" v/ t- g' w<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>2 {2 T0 ]! n% n' s' u
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
* f0 M/ P0 k: t) a7 r3 t  `: t<h3 id="31-window-对象">3.1 window 对象</h3>
3 Y7 Y3 p3 u( `: Z( f: \<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>1 K7 d2 t( K( d3 @
<pre><code class="language-python">//览器窗口的内部高度
+ F% K% N( S8 [/ |window.innerHeight
' `7 v+ V& `+ ~/ a7 d( t7064 K/ Q) j$ W0 Z! j
//浏览器窗口的内部宽度/ ?, @* O) t& l" L& J
window.innerWidth) l# _7 |, F$ g. D% r
1522
# S& I9 X- c/ r3 e9 J6 U// 打开新窗口
# W2 ^4 `* t: _( T. Qwindow.open('https://www.baidu.com')% i& s# }( X  W2 e* Q0 F
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}- L. i0 I0 @+ T" [1 O
// 关闭当前窗口
8 V0 M0 g( Z- Fwindow.close()
8 l! b, g3 C- b3 K' V1 R//  后退一页3 G4 Q& j8 k9 r2 D- u" s2 U
window.history.back()( F' }  w2 F- i' M  w' S
// 前进一页" R  S. M: O- w; s
window.history.forward() : z' ?: I! J5 ]3 I7 _2 y  Y: ?
//Web浏览器全称( C$ ~5 x8 ~3 }) n6 u3 F
window.navigator.appName
, q/ r  s  j" ]" k1 [9 G2 I% B' ?" ['Netscape'8 l. f' g6 d& K* C% M5 T" ^6 p8 w
// Web浏览器厂商和版本的详细字符串
! L- `6 }- \8 q6 S/ v2 Ywindow.navigator.appVersion. c  I! N/ i1 b+ E/ V& X: ?- v
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
4 |1 t/ u2 L3 |" @; ~// 客户端绝大部分信息
4 x9 B. R+ d: n5 ^9 Q/ _8 ]window.navigator.userAgent- x9 t. s3 j2 Z  H) U1 S
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
3 A8 O, v8 W" J4 w( S// 浏览器运行所在的操作系统
/ z8 [$ M+ X; r1 o5 Lwindow.navigator.platform
3 O) y) H) c5 D1 ?: d'Win32'
) |1 z: H7 @( L4 P3 b( q) Y2 R4 z; H/ E9 U/ `6 ?4 v
//  获取URL# G% v5 z5 |7 [0 H% O
window.location.href! X: E; L4 J5 F' T/ B8 f' w" T; X
// 跳转到指定页面* l/ e0 h/ X' }
window.location.href='https://www.baidu.com'
4 \9 I( f0 D' |6 I% x// 重新加载页面$ G+ k% T- z4 N0 g  B8 u. p8 \: ~
window.location.reload() : Z' G' q1 v  h
</code></pre>
7 d+ y& r! A2 R) s7 b5 V* ~/ L<h3 id="32-弹出框">3.2 弹出框</h3>* ?1 L" C! z5 R, Z
<p>三种消息框:警告框、确认框、提示框。</p>) K; m& H  {" e# ?: L
<h4 id="321-警告框">3.2.1 警告框</h4>
( F) t3 p3 k& C! A<pre><code class="language-javascript">alert("Hello")
0 J% R# j) E* U. ~, j! H</code></pre>6 B( }5 C9 r3 \' a2 Y4 q1 O* [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>( {/ y: C& g& O6 Y
<h4 id="322-确认框">3.2.2 确认框</h4>1 z; j% n0 D: U; n# Q  R* W8 F9 T
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>0 A  g0 P. U9 i
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true+ ?# B$ g* }1 S9 {2 p% }
true- S  f2 M! a* `( ~4 G7 \. b
&gt; confirm("你确定吗?")  // 点取消返回false& e. X9 r1 \  K  }0 H* q  g1 ]
false& p3 V3 g+ \# }  @
</code></pre>
! k+ j# ]0 D6 `4 [<h4 id="323-提示框">3.2.3 提示框</h4>( s: n6 ~; y$ R( g7 U
<p><code>prompt("请输入","提示")</code></p>, o/ v: e4 ~% {% J+ J& _
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
# ]6 N' N1 V2 Y9 u% C+ E<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
  N* I$ W7 ~, Y! j5 y9 H<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
) a5 y$ G: z# _4 u( h! x<h3 id="33-计时相关">3.3 计时相关</h3>7 L; X' x3 r) }  G6 ~
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>* s, c& v, W# h' k/ ]5 L
<pre><code class="language-javascript">// 等于3秒钟弹窗, @% c: C, \0 e  H
setTimeout(function(){alert("Hello")}, 3000)
3 G6 }- f& m7 h$ O9 C3 U
3 V- v* O- C* d7 z) xvar t = setTimeout(function(){alert("Hello")}, 3000)" e& x* t; R$ W) |  H

2 d8 `4 J# L4 I6 H* g# l+ a/ i// 取消setTimeout设置8 @0 D1 t8 {  z; B6 P
clearTimeout(t)
6 s& W8 c! K* [0 d+ j2 \</code></pre>+ X6 s9 M- P3 L2 B
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
# {$ @8 @! L* d- x4 c# z<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
8 Y5 L" e% `5 |. F2 s9 P9 I1 w. J  o2 c<pre><code class="language-javascript">每三秒弹出 "hello" :
+ H" a- b; @* M+ a* Y/ msetInterval(function(){alert("Hello")},3000);% v% v: U9 h& Z% ~3 O4 n8 L
</code></pre>
' a% Y- V1 \1 c% z' h( w4 D7 R<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
7 u. P. G0 M3 @+ i: C. k! s: H<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);' N# j0 g# p& F" C: s
//取消:
7 m( f2 N7 ]+ L7 Y4 Y- YclearInterval(t)$ P! h: I" B& I  ]6 j
</code></pre>
6 H% k5 a' \5 a: [- o$ ?' h5 ?$ N- J3 ~5 O7 R" f/ s- ^# m" k
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-27 23:02 , Processed in 0.072547 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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