飞雪团队

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

前端之JavaScript

[复制链接]

8131

主题

8219

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26723
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
0 Q: d( i; z# R$ T! A
<h1 id="前端之javascript">前端之JavaScript</h1>9 {9 D! W9 w8 P5 S
<p></p><p></p>! X# j5 w' x5 ]  o/ a" l. i
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
! U) p8 J" A0 v5 @; L! i<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
7 I5 V+ A3 m- X  {$ p4 W它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
# k- r1 d+ e' C5 F! f它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
5 p5 l3 J( P4 \* }它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 u0 X- [3 `# p4 @$ l2 k
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>$ v* S' |4 a9 E& B( l
<h3 id="21-注释">2.1 注释</h3>
9 p% K" x" A, d! d, l& q  f<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>! Y$ L+ h* k) I
<pre><code class="language-javascript">// 这是单行注释
( M( H" i0 A" ], w; w  ~8 d5 j9 A  v, x2 U4 E  e; t
/*
6 k0 Y, D1 v- K# b; P- ^5 A这是多行注释的第一行,. P! e. m6 L& T7 y; u
这是第二行。4 c% a4 ]1 _% C
*/
$ r- k* G% ~% y2 a8 t2 \, H</code></pre>8 \/ o6 y0 ]' h
<h3 id="22-变量和常量">2.2 变量和常量</h3>( D% ~, w) b- J3 Y3 F
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p># F4 S' ?- V4 H) V9 C. L
<ul>
  k: p* _' N, J: B3 f1 {7 v+ p8 F( r<li>变量必须以字母开头</li>7 i8 W! ^& _# i1 n  p! a# g" \" [
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>6 q$ b1 a: g# ^
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
: _8 L3 |4 R8 O, v) \" ~# u</ul>
, T4 v  _* `! K( k6 C<p><code>var</code>定义的都为全局变量</p>1 E1 ^% C/ Y; k7 V# c, Q  W# B
<p><code>let</code>可以声明局部变量</p>* ?7 D1 p+ P4 f4 i
<p><strong>声明变量:</strong></p>
9 }9 g' c; h8 m$ l: ]4 q1 D<pre><code class="language-javascript">// 定义单个变量! }0 p) q. c& v4 `) m3 W: b$ V
&gt; var name
1 j& M# M% R4 K) M&gt; name = 'Hans'( i6 v$ x- o. j
//定义并赋值9 T& S' t3 ~7 W/ b4 n
&gt; var name = 'Hans'  R  s) m; M# e
&gt; name. i3 b* B2 J6 U9 u( W
'Hans'2 b: u7 _% M- p2 Q$ B# g: ~
  s; g- a" s$ l0 J% _! `% n8 V
// 定义多个变量
. F6 D8 k# H" ^( c&gt; var name = "Hans", age = 18
2 _' M! g3 _  T& }1 S' r&gt; name
/ W& O9 [6 D' n. a$ X9 V( A'Hans'
/ N$ K2 D# E  ~) E$ h2 C&gt; age
. I6 ^; u* E4 k9 f( ]' u- v181 x8 K. H& @, N9 O5 M8 C- a9 Z# U

# C. i7 }. |; e9 L* G! h//多行使用反引号`` 类型python中的三引号
6 t; k" C0 e- z&gt; var text = `A young idler,
: l. ^+ z; r& p0 M9 r/ Qan old beggar`
% c. X7 q4 u' `' i2 Y2 Q&gt; text
; G" ^' T+ l$ L  f- F'A young idler,\nan old beggar'/ g/ t3 o$ e2 p, h' [/ z
</code></pre>
, j( q$ v+ {- Y0 q" @4 {<p><strong>声明常量:</strong></p>
3 T7 w, n1 B! x# ]! C! V<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p># M; t( X) d; ]$ j! \8 U
<pre><code class="language-javascript">&gt; const pi = 3.141 L. g7 I9 p1 x. m: n
&gt; pi$ R1 Z& r& E9 {0 g' q0 ?
3.143 c- B5 ]! [# u# P* c
&gt;  pi = 3.01
9 c# O4 r. e$ w* W8 r' Q1 CUncaught TypeError: Assignment to constant variable." n# _- v, J: _4 v8 s6 z6 }
    at &lt;anonymous&gt;:1:4- \- k1 g6 I  Q' |6 G& H8 Q' l
5 M9 l& H8 g! K( v1 R% I+ t; {
</code></pre>+ b- f7 `: A/ E, i. q! c$ U1 ~
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>/ M- f2 e6 Y2 k
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>. y! \) J* g9 ^  ]# o6 q
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
7 L% P( D0 c6 M# j" |<h4 id="231-number类型">2.3.1 Number类型</h4>
! F2 |# z9 Z. f5 f1 B( ~<pre><code class="language-javascript">&gt; var a = 5, e- X3 ]/ t/ ?! `9 d% E% M
&gt; typeof a   //查看变量的类型    E0 v7 i" o: c1 x$ Z* B
number, d2 z8 u2 U3 z
' V  a% A. v4 v$ J3 I1 P9 V/ F) Y
&gt; var b = 1.3
  r) l/ i- @1 ~9 U( C$ m: K8 g&gt; typeof b
. |6 _9 U0 X& ?3 unumber
0 B! ]) O1 c. t& }! |3 u: G3 S
$ K6 t" Y0 o4 R; P7 ?// 不管整型还是浮点型打开出来的结果都是number类型: L4 Q- u: g: U) s2 B  x
7 {: Z8 F! \0 R0 ?* I
/*3 D! y. ~7 L- j4 _
NaN:Not A Number
1 C! `5 u$ D* F6 ^$ qNaN属于数值类型 表示的意思是 不是一个数字
. U4 J! E1 `5 b4 ]9 f6 W*/1 e  [9 j& R: T: R9 ^( C
3 ]- E. x5 M- c% D
parseInt('2345')  // 转整型" x+ x  A" ]& D1 ?
23459 O& `+ ]9 C2 F2 i/ b+ o$ z1 Z+ b
parseInt('2345.5')
9 Q; v7 ?  L7 c3 c. b2345
* y8 V; W8 |7 l- WparseFloat('2345.5') // 转浮点型
7 y4 H9 m, B) p* g6 r4 ^2345.5% t3 G# l* ~2 A3 Q- m( P
parseFloat('ABC')
9 n. ~% A* A# r" c- t9 @; }NaN+ s/ R( D' W! P/ ~. N; o
parseInt('abc')( N- E) p9 N0 Z1 ^$ J) r0 z
NaN
) Z5 Y, O* M6 g' N, R2 U( M</code></pre>
) {: z4 E- f$ \<h4 id="232-string类型">2.3.2 String类型</h4>& [6 h$ H' t, n+ d2 A* H
<pre><code class="language-javascript">&gt; var name = 'Hans'3 [  X8 Q9 i1 Q8 e. o1 g
&gt; typeof name( e! C6 [% D$ L* G6 ?; l, l
'string'
/ m1 j. c) J6 s1 A  C1 G1 b3 N5 E
//常用方法- b9 F' H: |) q4 P+ n
// 变量值长度
* Z8 B9 T% o) m  m* Y9 B0 D9 c&gt; name.length' n5 S; D' D% }6 D3 p$ C1 C5 {( e
4! r/ q* C3 H( j- o# {
// trim() 移除空白- |5 I& ~+ \6 g; N' L
&gt; var a = '    ABC    '
& f/ o( f8 i% |) q&gt; a% V! @0 \7 o/ I! N0 J' z: f
'    ABC    '
3 p/ b7 x- d7 C: K&gt; a.trim()3 W: w# k# u  r% [9 N* j
'ABC', j' H; X# P6 n4 U
//移除左边的空白
% a! Q( \% B) p4 S8 v&gt; a.trimLeft()
' P0 I- T- n% |5 N'ABC    '
) a! D, B# Q$ O9 ?//移除右边的空白
! P4 D$ A6 B4 q! H( u# U&gt; a.trimRight()
( T- H( l# {% Y' K. {" s/ V'    ABC'
0 N: x& V1 V# B* _+ S$ p; _8 q5 u" Z! {
//返回第n个字符,从0开始
" R: N4 P. i! n9 U: S0 S&gt; name
* v/ {/ k0 H+ ^8 q% r* X'Hans'
7 T. S& E: A6 V$ ~. e&gt; name.charAt(3)
3 ^- }& r! j" D) u& H  o  c5 E's'  y0 b5 \4 ?* Z! K$ C
&gt; name.charAt()
! I/ C5 Q- z# W- G: A1 v'H'
9 c! \2 C, U  d% G' ~' ~/ p&gt; name.charAt(1)
) L9 u# J1 j: Q'a'- \/ f) V* I: ^

# }. H& E5 \5 j. C# j// 在javascript中推荐使用加号(+)拼接( R$ }5 I( c, `2 ?
&gt; name
: W" Q8 f/ \2 W3 u* i* j'Hans': N8 v, A' x' Q) p1 H( u
&gt; a& I. }* c2 s6 X( j% p
'    ABC    '
: q6 h0 K/ i8 R3 @&gt; name + a
, I* G9 N0 u; n4 z$ T4 {'Hans    ABC    '* a& D' d: W, m5 x" q: U
// 使用concat拼接3 e" S9 n" `$ [
&gt; name.concat(a)
' Y% E) o6 O  G* n# w& X'Hans    ABC    '
. F) {$ q7 o. Q& M. p5 |; i5 o0 P+ f: Q0 b: t! Y
//indexOf(substring, start)子序列位置
2 i4 @7 P1 R4 A. i! p! l4 T* O  Q% x! r/ [+ G
&gt; text
9 p2 b  `  V% G  T'A young idler,\nan old beggar'* |: M6 }+ J& n) Q% \
&gt; text.indexOf('young',0)
& |! }/ z# P! L/ g7 T+ c. w9 Z6 [2
( z& u; T3 i2 ^. `; x3 o9 b9 g( t" L1 L; D# j* j0 z
//.substring(from, to)        根据索引获取子序列
9 D: b, E8 \+ Q) Z+ B  q& z$ F&gt; text.substring(0,)
9 A( l( H1 _6 S# y9 A5 F'A young idler,\nan old beggar'. Q% J, Y: @/ c3 m4 {1 R
&gt; text.substring(0,10)
  |- N, M8 B# s, r1 W( g- @2 @'A young id'9 T/ o! L* m" ?

1 |2 S. K4 f8 D& L$ |// .slice(start, end)        切片, 从0开始顾头不顾尾
0 ]2 \8 i6 C7 X: K  n&gt; name.slice(0,3)2 W# m; E: B. j
'Han'& p3 H9 T+ b! \& R! a) H

' y6 F8 N& T2 n0 d2 D: T8 s/ g// 转小写1 e: b8 S' G. }3 h7 n- V
&gt; name
; `' R" ^; H% r) V/ ^) b! S& i'Hans'1 t! Y1 O8 n% o7 W. W  x
&gt; name.toLowerCase()3 L! h$ t  [" T$ P$ B0 [5 a* \# \5 {/ K
'hans'
) G: E& C+ v: ^) Y9 z// 转大写
; V. L5 v2 f8 C' Y&gt; name.toUpperCase()
2 u2 a8 |# j' F+ Q" T3 a3 d'HANS'5 u9 S/ f7 ~. M) j2 A

  Z) d8 m5 g( C1 o+ V! }3 ^// 分隔
# g* {8 l/ E4 n, M7 I4 T: \&gt; name; q; U  l& Y- }3 H$ d- `- [& G
'Hans'0 a& e' ]) Q. B. b
&gt; name.split('a')
5 M( J$ L* b- ^(2)&nbsp;['H', 'ns']. `6 K+ R  c; f- l
</code></pre>3 k* l8 Q# r) N- f' q
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>! \+ [; d/ m) P
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>- T0 Q2 ]+ T" C5 m6 g% m
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>4 @  p. z9 g# U: X9 s: v
<p><strong>null和undefined</strong></p>
- o) P: k$ {9 L/ P( ?<ul>4 V6 z* ^+ P; w! h+ U
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
6 Z. F% R4 \# H<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>  G4 ~1 a. @' [. Q/ j$ H
</ul># S7 F4 h) h" m2 x
<h4 id="234-array数组">2.3.4 Array数组</h4>( t6 w8 j, B) v0 \, t* j+ v
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
; ?4 x) z# i( l6 i' W! d9 ]  \# y<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
3 l( T- T) v  s. t& q' g&gt; array1
3 l' [! d" Z2 S, Y(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' u' j3 y$ ^2 U9 o. C4 X( t8 T
&gt; console.log(array1[2])  //console.log打印类似python中的print/ E  J7 M! l4 w
3
6 T; i& ~* ]$ f$ I4 r( F6 r// length元素个数
9 G( h8 k3 L) }$ q  ]3 D&gt; array1.length
* `* |$ m/ u1 p  w; A6
* Y( x' e2 d! W4 g! p( J/ t// 在尾部增加元素,类型append
9 a" |; ~- q1 z% I  \&gt; array1.push('D')
0 K# q% t0 X5 j7 U7
% x" G- o  {+ |( [3 ?&gt; array14 m6 Z( \# m0 i( w  ]: M/ v) l3 D# @
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']& h1 q' N& a7 F! F
// 在头部增加元素
6 Q3 n: d! l" }- B. i# K8 x: ^&gt; array1.unshift(0)
$ `1 Q+ t& |! g& l# v8
  G7 k# K; H& `&gt; array1
7 L" T+ t; P$ }(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']8 Z5 o3 m+ b  H" |; c. X0 u9 E7 m5 ~" n

  k: P4 A/ ?3 C/ Q: r1 Q//取最后一个元素  b) f2 O) \% h
&gt; array1.pop()2 a1 m4 ?% n7 \, o4 \* \2 q
'D'
; s( c. U5 L3 p" c+ ~- x3 `&gt; array1) k: N1 Q! g. w7 f- u" j
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! I: H3 {1 o2 B: l  @) r//取头部元素
: t& G& L9 V5 \1 F&gt; array1.shift()
/ `5 i% E$ H5 q/ B% [0
) P) b7 u; C, b/ W&gt; array15 x4 b# e8 @6 s, K# g, w
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 ?$ G2 m0 W. a7 J- I' u1 [: V* I3 ~+ f: h" z: z
//切片, 从0开始顾头不顾尾: ~# z4 Z$ u+ c* \
&gt; array1.slice(3,6); [& Q! @3 y$ {; F# {
(3)&nbsp;['a', 'b', 'c']  ^' L0 F" ?; {+ J( F
// 反转5 @2 v& u8 n3 U% ^
&gt; array1.reverse()
/ L& T5 o# e1 \6 B8 ?& `(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
- `. W1 P; z8 l9 W// 将数组元素连接成字符串
" T. h+ }3 W9 \) \&gt; array1.join() // 什么不都写默认使用逗号分隔; ]3 h9 W' Q7 A( e, h
'c,b,a,3,2,1'0 P5 m! u! {+ e
&gt; array1.join('')
' Z* k; Y  L" H, ?  H5 j7 W'cba321'
, H: ^  O/ O2 s1 @&gt; array1.join('|'). n" G" f! `7 d# g% _2 {
'c|b|a|3|2|1'
# `9 t2 c6 p% H% `; L; I3 H5 q
# F' [2 G% `5 s0 Z// 连接数组! J0 L, a% e6 L, s2 c# d
&gt; var array2 = ['A','B','C']
; l/ ?' m& |7 t) ~) p0 u- _# F/ b&gt; array1.concat(array2)
) T5 I. s2 Y; _; P9 Y(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
' }$ @6 G# E2 S% V2 F( K( n' w8 x3 o' O' l- b
// 排序; y0 r3 g7 q. S
&gt; array1.sort()8 a8 ?& i9 U2 b
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']: t7 E8 {" d0 r& q) P

9 N9 c" l3 K/ [* L// 删除元素,并可以向数据组中添加新元素(可选)
( o0 Q9 z1 O* g, W' m4 z  M7 B6 k&gt; array1.splice(3,3)  // 删除元素
" n0 e4 e6 j$ g) O  Y/ k% [7 C(3)&nbsp;['a', 'b', 'c']
9 \1 h4 H) S7 M9 t" |0 \4 t5 b: i&gt; array14 H, a+ X( Q) S( O& E
(3)&nbsp;[1, 2, 3], m: o5 r' i5 T  r7 T! i# |1 R
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
3 M3 l/ m1 w4 v' Z[]7 S( N6 e5 x6 p
&gt; array14 X$ ^' i" k# q) ^' W( K' h
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* ~- a0 t' F1 x- a+ A
) U5 q, w; x9 W2 w; @
/*$ h; }  `7 Q- K
splice(index,howmany,item1,.....,itemX)% j1 o# q# `4 Q' T: |4 G  ]+ T% J" b
index:必需,必须是数字。规定从何处添加/删除元素。  v  x2 _7 _; X) r
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。- p# |! ~/ |8 @: \$ n! \
item1, ..., itemX        可选。要添加到数组的新元素7 q; B" h, [# R' r8 g8 y% o
*/
. H  n/ p4 ~7 _3 i& z4 l8 ?& b4 a* @4 ?( f8 m$ F# ?2 s# z' ^+ ^5 h/ L+ T
// forEach()        将数组的每个元素传递给回调函数7 `, ]6 B: S0 z
&gt; array1.forEach(function test(n){console.log(n)})# j( Z, T% ~& ^* l) Z; [
1+ u0 @* Z- U* k. s3 g8 ]* z0 r
2
2 `: X$ a6 j/ k' a0 |1 A/ I8 b6 t 3, Y- U/ q. ]* @0 [5 X/ B
A, H" D, i/ J; n- ~% E( N- z
B/ c% k8 Y& ?8 v' K( d6 ]# o
C2 U7 B5 h: ^' s: s7 ^
// 返回一个数组元素调用函数处理后的值的新数组5 Z& A# f0 a1 P; z- f
&gt; array1.map(function(value){return value +1})4 y/ \9 x2 H$ F
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']& ?/ v$ r' S: V' C" q% W  @
</code></pre>0 y8 h/ B% H0 l/ x, p! E' ~
<h3 id="24-运算符">2.4 运算符</h3>- v$ \* y. w1 |2 e6 I! k2 O
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>8 X. M& f& u4 ^$ K4 e+ [
<p><code>+ - * / % ++ --</code></p>. \; o; s, P& F' |2 \7 V% F
<pre><code class="language-javascript">&gt; var a = 6# o3 a7 ]3 p; I; y9 R& _/ ]3 P
&gt; var b = 3
; i/ i2 g7 Q3 N4 N5 m: E* M// 加8 F. J6 Q6 P4 H0 C
&gt; a + b% J# }0 v) @5 k9 Z, a8 Y$ ]
9* F6 N! m( o; t  Q9 M  @
// 减
; l8 w$ i+ S9 y, i  Z1 Q1 M' \&gt; a - b
" G1 B' f4 m9 P  o3
" ?2 k/ E( L. H7 I// 乘
8 ?6 c: f' C' O& g9 N- R&gt; a * b
7 e; Y5 j9 s/ [1 e18
1 S$ Y/ S! A: E- R9 M$ o) w// 除
" V. x% O* r! q! P4 r3 S9 H% _0 T( n: U: l&gt; a / b
7 t/ h. T3 f, `, p. [3 y# [2
4 y7 J: j& F$ D" {( g7 K// 取模(取余)6 w8 V8 L" h5 p" u9 Z2 l& H2 Q
&gt; a % b
: j& g+ ^9 v9 {& o" `1 ~0
: y. s4 L$ V# s4 U  T2 U// 自增1(先赋值再增1)5 v2 v: Z/ O! g0 ?0 y& ?% H2 {
&gt; a++0 [" ]8 I+ D  ~% [! b
6+ Q# r* B8 {  E. D$ t; V+ D. H
&gt; a7 r0 u4 A* m0 Q/ M; |
7
3 @1 Z6 H: t# j: V5 z4 H// 自减1(先赋值再减1)
; J1 r6 s8 e4 s8 C; X, [&gt; a--6 N  |- f/ c5 u: e/ d
7
4 V% q; w, g2 w7 k&gt; a3 S3 q: E' j5 q, m) \
6/ h6 {/ }; v9 y# b# }% O
// 自增1(先增1再赋值)2 Q; K1 {7 R3 c9 c8 K! l0 ~: g
&gt; ++a5 P! ?* N' p. y! }6 w
7) K, ^5 ^1 Y2 a, Q3 N# B# ~( V% \
// 自减1(先减1再赋值). l$ v5 u& u: f* W4 i1 r
&gt; --a# u7 f  `. O# j9 |* f
67 H6 p% H( [' p. C1 B" @0 W$ F6 f
&gt; a! P* E) z" W% M; r% ^
6* [- s- j7 y- |  J  R3 q- y) K

, p) A6 w8 _: S- Q0 K//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理' d! w9 F/ O8 J0 \+ w$ _3 T/ Z4 e, k5 `
</code></pre>
- J3 u: [1 F; Q6 Y4 I<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
+ V5 U# \5 D# {' \6 Y4 O5 u<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
) h# j; q2 W1 M* A9 O<pre><code class="language-javascript">// 大于! d0 `6 X4 o: o% m1 F1 ~. k
&gt; a &gt; b% N8 N: r' l: S" q
true
8 g$ C. X* _' h0 \! c3 y8 A// 大于等于! l- M1 y" z0 w7 @3 X$ M
&gt; a &gt;= b# Q% o4 o% b9 l' R4 s
true
& Z% E) I; ^5 a6 O8 |8 b8 j  U! r// 小于) C0 D5 H- b4 z5 m4 n% I" ?
&gt; a &lt; b& q( @% s) t# w7 t5 A6 I) I+ e& J
false! |( O. ~1 ^6 u4 N8 g* p, z1 ]0 l( \
// 小于等于
  F# R, l; q1 }& v6 S( A2 j&gt; a &lt;= b3 L, y: V* ?2 Q3 G+ b3 L: R
false( A: o) p0 m# S* E/ ]9 S8 Z
// 弱不等于
: B) N- A4 Y( z6 T&gt; a != b5 D% L  ~% F8 g  G3 X1 G
true
5 m* j2 L0 m$ x% X9 k// 弱等于
0 X2 I% a" W( Y&gt; 1 == '1'
" b! U1 b) p! e  f( strue
' N7 w2 m, }* k9 o// 强等于. {* B, y; t2 X2 P
&gt; 1 === '1'
* N) h2 a* B+ W) p9 Z) Mfalse
8 j  W2 m( N  |( N8 M$ J// 强不等于' s" F: _4 \3 Q; c+ o
&gt; 1 !== '1'
* S* r4 F& Z9 W: Q6 `7 ]true
" w8 ?$ d3 s5 A9 z2 W0 I
& v! ^, b6 j6 M) y1 p/*
6 |  z$ v0 N7 F) S8 ZJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
0 x  H3 g8 [& q*/4 P' @" l4 y* o2 N* j% P3 ~3 w
</code></pre>
7 J- _) `6 n- w1 g2 O1 h4 V<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
9 O% r+ }  j. \! p/ @2 Z9 c<p><code>&amp;&amp; || !</code></p>; Z2 [3 }7 l' f1 z1 L
<pre><code class="language-javascript">&amp;&amp; 与
( J* S" b/ K( N; i8 f/ N|| or
* h4 L  d, l9 h" s! 非
! U" J3 a& G! v: d& n</code></pre>
9 @( Z6 m2 L4 g# R, u4 k9 {5 f6 t9 J<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
: J# L* R# w7 [5 f: x- a1 e. `: M<p><code>= += -= *= /=</code></p>& j3 ~+ c# C) w4 o+ d
<pre><code class="language-javascript">// 赋值
  J; m7 w9 W7 D& K& ]: b& n&gt; var x = 3
: S+ a2 _" Y/ f/ x// 加等于( Z- K! B! c& J1 L7 S
&gt; x += 2, m; C9 M  H" F" r
5) F6 a# a1 I+ ~. }) t1 F# X
// 减等于( W7 `2 ]3 r2 n" H2 B2 A
&gt; x -= 1, r5 o: c( T7 ?+ x1 x8 F
4  K. d5 g8 _" g/ T' D' C/ S
// 乘等于
. f2 z4 M. W2 ]: Y. B& X&gt; x *= 23 @+ [; M/ o) q. Z
8
8 U$ U8 `0 a/ ]/ y& L) K* u5 ^// 除等于
3 |0 t9 {9 V6 A( e1 ~5 j& V+ q&gt; x /= 2
; u/ e) W9 f) A$ P" F4
: u0 I5 l/ d2 n</code></pre>
2 V2 R9 t; {9 |$ U9 O: J* U<h3 id="25-流程控制">2.5 流程控制</h3>+ X: ?6 F2 B! p$ |
<h4 id="251-if">2.5.1 if</h4>
; s5 p( j5 e. C9 o4 F<pre><code class="language-javascript">1, if(条件){条件成立执行代码}2 @1 j) e. Z4 R9 L% c2 b

' j7 h, T& ?. X&gt; var x = 3
& L/ q: s) N- t0 q" y- J&gt; if (x &gt; 2){console.log("OK")}% i8 e0 ~% h7 v! T! D4 z
OK' i# k3 ]6 C! r/ w( b/ S
4 c  k! p  ~' @
2, if(条件){条件成立执行代码}
' [) z; Z, ?" u; T        else{条件不成立执行代码}
7 r, f* i5 V% [8 w  ]0 {5 S
$ Y7 F1 H) A3 w% ?& Q9 D&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
; h0 d( M4 o* [# f8 L1 x$ ^'NO'
' s. V8 G# F  M6 n( J  P+ j/ `5 `! [2 L
3, if(条件1){条件1成立执行代码}
9 c! z3 d; A" m% d# W7 A3 R        else if(条件2){条件2成立执行代码}
! a2 c' v) g8 K( Y    else{上面条件都不成立执行代码}
+ ~$ j2 @$ c" r* N9 q2 T, P/ |2 S+ v$ B$ u3 H' p, S0 X
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}  v1 @1 c' }1 |) e  Y* l
Ha7 t- i. x* l- i( J5 R
</code></pre>: I; |( r3 u$ Q0 A# f
<h4 id="252-switch">2.5.2 switch</h4>+ `0 M% R# Y$ c
<pre><code class="language-javascript">var day = new Date().getDay();: b, C. _  V, z8 `% `
switch (day) {0 W1 ^$ W" f! @! g
  case 0:. \) x' R5 l3 x6 |9 b0 i# f
  console.log("Sunday");( A( ?' N( W% w/ w6 H; Y+ K4 v
  break;
0 z  ~) ^( d7 ]$ j" g* M  case 1:/ h6 N6 z" [. L! p/ h5 ~3 Q
  console.log("Monday");
- t5 G+ P5 b& r5 o  break;
8 |0 @5 E0 q1 U' L; C2 {default:5 K+ G- Q" r" N
  console.log("不在范围")
; h7 O% f: }2 x}" @# V" [# X- j5 O# a, B4 E
不在范围
" E! R" h0 R' ^</code></pre>
! q# `' l+ j" K: y<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p># X; c* N+ s- v7 L# X8 {% z4 P+ b
<h4 id="253-for">2.5.3 for</h4>
. T+ k1 K5 l& v2 N- J<pre><code class="language-python">// for 循环
% _$ U/ ?6 ]; g& Y- A) ?; _0 j! P        for(起始值;循环条件;每次循环后执行的操作){! g+ t2 P3 ?( N
        for循环体代码. x: A; C) J; q2 V; ?
    }7 ^" E. _  v- J; q
0 D7 d, j2 Q2 B2 U! z( T; {  r3 s
for (var i = 0; i&lt;10; i++){/ o, O; s# D7 {: ?8 [0 }7 u
    console.log(i); |8 h5 I( t! S, m* z5 @* h) C4 h
}
5 O$ f3 c4 s+ |& e        0
7 Z' K( `' D& ]: Q/ Q- G$ L" J0 H        1( ]* N6 E# z9 w
        2$ e! n2 k+ ^/ a. R0 O
        33 F) h/ w. [+ }, V
        4
" Q; b1 F/ m& n3 `3 [- x+ l5 }  Q        53 w, a, r9 Q  Y3 Z: {
        6
( c, K& J0 f7 x4 m- ~: X        7
2 R4 |  P; r8 V; V        89 q( ]2 x: F) P7 V5 ?1 D
        9
+ J; T! Z- f- O/ d( H, q) N</code></pre>/ I8 i- A8 `. \6 f) `& O
<h4 id="254-while">2.5.4 while</h4>
: q( x1 O0 p- z& k  k7 r( ^<pre><code class="language-javascript">// while 循环2 E( L% P% _# g& x; S. g* A# `5 j5 q$ \
        while(循环条件){4 K& @# M( S7 |# H. p; N
        循环体代码7 \! Y0 b* M+ a  F  I
    }
6 H; n+ v+ [5 y# d  `
5 c2 o2 Y3 |, _, b1 Y. @! a&gt; var i = 0
) i& P+ r( ^# m) ]0 [6 F6 L& d& g&gt; while(i&lt;10){
; V) f$ S5 L; }: F3 M4 l    console.log(i)
" s, Y; S2 t1 x+ G5 F. d    i++
2 e( M+ h1 j$ E' n, m}
! t3 D4 I/ D% B* M1 j( R/ X) d% ] 0
0 Z0 @( G$ e! R 1/ Z' \# Q6 n+ K! }  L+ ]2 ~, t' W
2$ ?/ h( s' \/ \/ v# z2 ?: }
3
+ z+ ~: e  n% }2 v& L  c9 t 4
6 f% U  y# J  E% ]5 ~3 |5 P7 t 5
- O# N' t4 A, H 6
! A7 ^6 E, l! R: P/ }: f 7
' Z3 I' ~/ C- G' Q) |* U* J, | 8
3 q: W# b' q3 R: e* J. p0 I 9
# p! `. o7 @" e* u6 X</code></pre>5 @) U: x7 \0 p% t3 Q* c
<h4 id="255-break和continue">2.5.5 break和continue</h4>
, i2 {) @8 D( {: u; J3 y<pre><code class="language-javascript">// break1 }, N/ }5 W, F* C9 D" f+ e/ ~
for (var i = 0; i&lt;10; i++){" `; l% C- X5 ]3 ^9 n/ H* K0 B
    if (i == 5){break}
5 [% z& M8 z" ^9 H+ h: j* f    console.log(i)  S4 O/ }8 G4 L$ ^
}6 c& I/ l8 f2 n$ u7 l8 O2 Q
01 C; I7 V9 @' G: V/ w; i0 j
17 t8 y5 g( p5 `9 X5 m
2
+ G; d! b7 @+ r2 }# ]. U 38 Z7 V- U, q. x7 K0 Q/ A; L
4
$ b7 d* Y" e) }& [" p// continue
$ p4 c! Q$ ?8 N" S% n6 l: ~for (var i = 0; i&lt;10; i++){
+ }8 `3 l9 I0 L8 E+ O3 j* m) ~- T    if (i == 5){continue}2 [$ f  F4 V- U% ]& G* o9 f
    console.log(i)
# _0 w! u9 J$ v5 f3 v}
( i9 @( F" m% m3 r, N2 @" M4 c 0; ]+ ^/ F7 b# }" c# t
1
" f2 \! f" a% B7 |+ p- E4 e 2
+ d" m! P5 U  q# w0 e 3
, f% b2 P" l$ E- s, i2 w9 u% ~# ?/ ^ 4
/ ]9 K+ \7 e' m" i 6" y6 u; `  G, R" Y0 a
7
7 d& u  D0 o- ^' O' d 87 V! o  m" D7 I" w# k
93 h% a% k6 N2 }# K- i" Q4 {0 \
$ r& y7 K4 w6 ~7 [
</code></pre>4 m1 o, ~( e$ Y3 n) _+ o' J
<h3 id="26-三元运算">2.6 三元运算</h3>% ]& H$ p* c. Q' e
<pre><code class="language-javascript">&gt; a( N! @. E2 h0 F! h" d: @* V
6: |) P5 k) ?0 n. w1 ]
&gt; b. D$ i! X. |, q2 \1 ~# b/ a$ b
35 Q1 F- G3 U  P$ S$ K; _

4 J- |  [/ L1 p" `# I8 @9 t8 F//条件成立c为a的值,不成立c为b的值9 J! r" m" U# ~5 Y
&gt; var c = a &gt; b ? a : b& X2 b- s1 Q& ?3 V1 @1 l6 r/ V' b
&gt; c
& Z. R+ R: Y% ?4 S0 ?6* b4 D+ q0 W  z2 m0 Q1 H

% Q$ x! Z% w# ]3 a/ x8 w2 ~// 三元运算可以嵌套
# \4 k( B' \/ A" w8 p8 t</code></pre>
; w; M5 ^7 V; g6 G; U7 [<h3 id="27-函数">2.7 函数</h3>1 d# k# Z6 ]4 j; s+ I1 ^
<pre><code class="language-javascript">1. 普通函数2 k( m5 A5 \, o
&gt; function foo1(){4 y* \" R$ g. _# E
    console.log("Hi")$ K! D1 @2 {* w( ^
}" a$ O7 B6 ?, L% \# `3 N: g- t

& Q; p  y9 w/ d, x+ I5 V9 V&gt; foo1()
( v$ g8 `/ K4 c; s( S        Hi
. w7 A+ p3 D& I2 g% p- K- z2 J2. 带参数函数" p6 i  ^  }& |9 T! j) b( @1 E
&gt; function foo1(name){) a6 f' Q# u( I/ s" @1 `7 Z
console.log("Hi",name)5 z  u# k! f7 d/ u6 Z1 ^
}1 d: @8 j. E+ d. l2 P1 i  H
' d! [  f0 b* Q9 j* G; A/ c
&gt; foo1("Hans")
9 ^' v3 a3 E) [Hi Hans
! D( t* d2 o' D0 T, P
' Y5 ]2 [4 h+ Y7 _& I&gt; var name = "Hello"+ k( r$ o' R/ q6 _5 R
&gt; foo1(name)) @( E# R' z0 l- c; a3 D/ p
Hi Hello: b8 t  u# ]3 j6 @

% G' N- c  ]1 i4 e/ O3. 带返回值函数" T5 f# W) N7 |( N
&gt; function foo1(a,b){. i4 y- V! @8 I  x/ g
        return a + b   
' @! {! l' g! y# R. J8 V! F- J}
( U6 L7 e0 L9 G5 T  a! g' D( h&gt; foo1(1,2)+ h1 r. `4 P% }, S( u
30 o) @) k$ Y' G$ z' E) C
&gt; var a = foo1(10,20)  //接受函数返回值0 L, c' J* B2 y- w$ b1 T
&gt; a# v: m% r$ k1 r" h% g$ o( b- f' N
30
4 g1 y- E# k* ]2 F4 \2 O. ?; I; n
0 J& Q6 w4 L4 a6 _7 K4. 匿名函数" w2 N3 n; i7 S3 M
&gt; var sum = function(a, b){" v" }! v- t7 {) J. Z
  return a + b;' I2 v7 c$ d# z( L( }
}% K0 l2 q5 x3 v( a& @
&gt; sum(1,2)4 L3 j5 e" r/ H0 g
3' h$ ]2 W) d/ r) I

3 k0 m( N) \2 w- q: R6 o// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱% \+ {1 a+ {' A
&gt; (function(a, b){
' \0 B5 Y. j% M8 E& S  return a + b5 R$ w5 X4 M8 o. A
})(10, 20)7 s8 D1 D% a% E* x! C
305 p$ h& n8 W& S9 Z0 E( E- x
. P/ b7 d, N  x' }5 h
5. 闭包函数
$ K3 i1 |- Z7 S- w6 m. i& g% z, h7 d// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数, U2 G* ?) _/ l. l5 c
var city = "BJ"
% q4 V* P# f% _" w" [8 ]2 H' Ufunction f(){# L  T) O; g; Y
    var city = "SH"
7 a* p' E+ e+ b, L, g    function inner(){
/ F; p, F* {9 u0 {; l* N. }  [        console.log(city)
6 w. c+ ?6 e  y* M$ ]& `) q    }
- e! q/ s2 [$ X1 a, g$ E3 X6 f    return inner4 F4 F. M+ p& \# Z, k2 c9 B
}
5 X. g3 G, A$ Cvar ret = f()0 R6 [( I5 I3 r0 v
ret()6 N) x8 I! [* [  |  H; A
执行结果:6 \- ?2 }) V7 X5 J& S
SH
# A; Z7 @  s5 L
6 p: }9 `+ ^0 o) k) P/ i4 E</code></pre>
' S% _) D- [0 i! _0 o, R& q: k<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>1 L0 H0 s+ J2 i, |# c( I
<pre><code class="language-javascript">var f = v =&gt; v;0 Y/ u" ?8 A, S5 d
// 等同于
2 T, d* b" Q; v+ A9 Y* svar f = function(v){
. ~$ ^  l* u6 }8 D8 H  return v;
+ P5 s+ A" o, R* x3 {: z: k}* W! }* ^2 [2 ]4 D
</code></pre>0 w: x+ {9 m# \& Z9 h0 q
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ t* A0 X( C) ~+ z" L* E; J! j
<pre><code class="language-javascript">function foo1(a,b){0 a( X- ~: p) D. K  G/ x% M! f
    console.log(arguments.length)  //参数的个数
+ ?$ k* I9 a' \9 {    console.log(arguments[0]) // 第一个参数的值! B9 a, F, h& ?- U
        return a + b   3 h; D# C& V* O$ A# I
}
, B6 _# I8 W" h3 Z5 u6 T) d& hfoo1(10,20). |' p0 ^8 x& b# I7 [1 {
结果:) u; u: o  C) S, L6 Y, L5 O
2          //参数的个数
* m' @1 Q3 J( _  X# k7 t10        // 第一个参数的值" j: f4 {' o9 M6 \! p; ]
30        // 返回相加的结果
1 B! O8 X* {/ h; _4 K6 O0 K* I</code></pre>
, s- a1 U+ R1 D. x6 \<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>( p1 Y8 [% s& Y2 |6 o! n4 L1 f8 F( S
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
( F5 [1 [/ v( h) [<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
; p" Z* D5 k2 P/ {<h4 id="281-date对象">2.8.1 Date对象</h4>
+ G5 B8 j: r3 M6 a  A% j<pre><code class="language-javascript">&gt; var data_test = new Date()1 Q* R4 k) o7 C$ u8 V0 O; y
&gt; data_test
0 z( N; x; O' J, X  c( GFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
5 \. z8 |* U$ z9 W+ F! e&gt; data_test.toLocaleString()
' S; E" m. d& ]- _3 y* w& @: P1 V'2022/2/11 下午9:44:43'5 h$ z( Y% E" Q3 a5 s( P

8 F+ S  G/ T* i" y5 k7 S" L+ t&gt; data_test.toLocaleDateString()
% N) h$ {& `' g7 ^8 i2 r. E'2022/2/11': t' {3 B- H0 M1 Y

9 ?) L" B1 \1 C4 O1 \; D&gt; var data_test2  = new Date("2022/2/11 9:44:43")3 L0 F" |" E- N3 z+ u0 s- T. J
&gt; data_test2.toLocaleString()! L+ Q  j8 k4 w1 ]7 X5 [
'2022/2/11 上午9:44:43'% l  q& Q2 J' ?. n, U. Q

8 N# r& J( f! X2 o// 获取当前几号
( d  T: s: X4 ~3 p. L8 X5 L/ x1 E( O&gt; data_test.getDate()7 R8 V% e) g- m9 V3 w  H
11
' [% A3 f; k9 o+ c. c8 q9 X  T+ g// 获取星期几,数字表示
* c+ N# N; j- n# _9 S& X& w2 X&gt; data_test.getDay()  : F! H4 K4 ?- P7 [+ D2 Z* e
57 ]/ I7 `: e# H* ~% q. X$ T
// 获取月份(0-11)( g0 A% Q! S7 |  ?
&gt; data_test.getMonth()6 L7 g1 m: G# t# Q3 t' n
1
5 U: R# T6 E9 i! a// 获取完整年份
! |% ^8 a1 Z& b2 V% v&gt; data_test.getFullYear()
* L9 N" R- ^" S/ @% ]2 t/ @! X: W2022
1 H- N, `3 Q% u- l: a// 获取时
; h, J6 R( }3 _8 b) C( d4 K&gt; data_test.getHours()
! ~$ L: W9 L! k; m' Q* c% a21* T( U* Y' K& N$ Q1 m
// 获取分
& }. d0 [- @5 D. F4 M&gt; data_test.getMinutes()  k. x5 g# t6 V) ]: V9 C
44
! s3 W0 L. ^" `; N) ?' y// 获取秒+ ~* v, v/ L8 t0 e1 F  s
&gt; data_test.getSeconds()
7 P0 Q$ S& v7 s% r& ?" ]9 X8 [43* s1 s  L% l; U+ @: R- T
// 获取毫秒
- [0 b5 S; D1 p+ D&gt; data_test.getMilliseconds(); k1 y7 z  V, P
290
5 d0 {% \* B3 v9 i5 Z  k) t// 获取时间戳
5 ?& |* ]4 B5 y$ ]. J0 ]&gt; data_test.getTime()
( E" z# \( A1 @% k% S1644587083290
) d* r- N' e! y+ b1 f/ ?: V( ^$ ?</code></pre>! @* m' p9 O8 u
<h4 id="282-json对象">2.8.2 Json对象</h4>
- ?0 u+ H) G' G) p' P<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
9 J2 Y' E, ]5 p3 E* b0 r6 rJSON.parse()  // 反序列化,把JSON字符串转换成对象. I$ m' z! t9 J( {- _# Q3 a
2 g0 d" R' a5 S  S' X3 c/ o. Z
// 序列化
2 u3 _( }  B8 Q# d% i&gt; var jstojson = JSON.stringify(person) 4 g( R% q/ D! a1 m( ^* N
&gt; jstojson  3 Q. V2 D7 R6 _4 t8 f7 [
'{"Name":"Hans","Age":18}'
$ A+ C0 _! k, }0 v2 `7 D9 N% A9 x3 Z; t& Q& |
// 反序列化6 @! Y3 W: k4 G" s+ n" I/ s
&gt; var x = JSON.parse(jstojson)( @" ?0 e5 |  C0 _/ W
&gt; x
( a) ]. m7 H2 q" n) Q0 Z{Name: 'Hans', Age: 18}
; N' ]. X4 i* y9 R9 _. H&gt; x.Age
- I' y6 Y5 A8 ~4 i18' U/ A1 w" v* t. y7 {
</code></pre>
3 U, R4 `6 x  U3 G( Z& H0 `<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
& Q2 {/ G3 v; n  C. P! ~6 F* \<p>正则</p>4 s6 v5 {  M6 i- C
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
2 f- v. x+ O5 S, D; v&gt; reg1( L5 y9 q* t, \' I2 X
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
( ^. A2 Y6 y" U: R&gt; reg1.test("Hans666")
% j  d% ?. I2 [/ ltrue6 W( P" k  M0 t5 h8 B% P

* q3 D0 K. K+ w# o1 O3 q) A&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
) W1 l% M" Z: t' H# N&gt; reg23 l- Z; J% @, A+ p; c9 j+ }
/^[a-zA-Z][a-zA-Z0-9]{4,7}/9 ^* R, w# b* O' s# O
&gt; reg2.test('Hasdfa'). X: N4 E* _0 T( S6 b: J
true
7 @+ C3 D2 n, l4 n5 i0 _; ]$ Q' d7 C0 v2 }) Q5 m; g+ O
全局匹配:
9 v, Q$ c% p( k1 }6 ]5 l&gt; name: W; J& m8 P* A  |
'Hello'
$ z: _8 U/ z/ S4 q. {&gt; name.match(/l/)
9 T; N$ O' D. o! y: v! r['l', index: 2, input: 'Hello', groups: undefined]" C' N4 ^% ?7 l
6 B4 h! B' d- e4 m5 |" G/ d3 `. q& ^
&gt; name.match(/l/g)
* K) L: C2 K& X' g(2)&nbsp;['l', 'l']
% S$ ]! }3 G5 u// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配' D  Q8 l1 U" |$ }8 X
! h! z9 V( _7 `) y: ]4 t- |
全局匹配注意事项:
6 X& G0 e: U# m/ w( p6 Y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
! d6 ^& M: Y  V+ r&gt; reg2.test('Hasdfa'), G3 Q3 z5 ]4 c
true
7 T4 [; I) y$ r% [) x&gt;reg2.lastIndex;
) d% h7 u' Y4 e  T- q/ B9 A2 Y6
: t0 |4 g5 k) a! c&gt; reg2.test('Hasdfa')) z$ \' q- Y1 H! M4 n- Z( V- \
false
% A$ A. |1 G  |! H# D5 r% O4 G' a&gt; reg2.lastIndex;
9 ]8 N8 Y' c/ t. Q  j, ], i7 o! I03 |* s# Y7 ^+ e- J* p
&gt; reg2.test('Hasdfa')
* }- V& y. U$ l) ^9 Atrue
$ g$ b  {3 }( y4 C7 r# z6 H2 M2 h&gt; reg2.lastIndex;
0 U" y0 g- [' H; m1 O0 m- {6
, I7 }, J: t; z; m! W&gt; reg2.test('Hasdfa')
3 `! t' A! C, vfalse
0 p% v9 G0 V7 R. X! p4 L# d&gt; reg2.lastIndex;8 ^8 m' {) t, |0 C$ j; I5 h
0
& v9 v) T  [! z5 A1 z; i+ C; l// 全局匹配会有一个lastindex属性( f; N# _/ r  z" n  ?
&gt; reg2.test(), g0 d/ |: E( |, m  S: L
false* R8 M+ y) I* t& L& [" \+ R0 \8 v
&gt; reg2.test()
3 b, [) F! _$ Ttrue
3 D: H/ D" ^' W+ u& K- w// 校验时不传参数默认传的是undefined+ d' W$ K9 ~8 o1 g# q$ ]1 E
</code></pre>$ e9 p* b: j. s) m( M) f
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
7 B! e3 d* i+ L( i<p>就相当于是<code>python</code>中的字典</p>
) i& e$ t& o+ r! ^0 `# v/ \$ J<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}' G9 O8 [0 P8 u* G) Z" z( j
&gt; person; B. l; q5 l1 K8 M/ F- s, X
{Name: 'Hans', Age: 18}
* m; O- w5 T# o7 g2 q, u% z' }8 q+ R. E&gt; person.Name: ~6 @& e* H5 t6 {6 \/ X
'Hans'8 C( W7 I) U4 h7 c
&gt; person["Name"]- ^# ~6 @3 l& H3 V% A& ?/ K, m
'Hans'5 @* Q: V/ g$ p/ Q7 s

# c( W' E, u8 S3 s! B// 也可以使用new Object创建) b) `) ?$ |- u
&gt; var person2 = new Object()
# S7 ^+ I9 B' S( g7 x&gt; person2.name = "Hello"$ r# Q8 J- n0 S- }5 Y" E
'Hello'
$ G4 O& y4 S2 c/ P+ P0 d( v&gt; person2.age = 20* ?% y; s0 K+ M8 j+ S; c7 e
20! H% _( T8 _# G1 Z: h
</code></pre>
; w; p0 e7 [3 v* r) Q8 k3 w<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
; k& O4 \* G5 f- x  B" i' z: N<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
1 _+ A7 A2 p8 P; V" A<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>! b: x5 k! ^; m. @/ A
<h3 id="31-window-对象">3.1 window 对象</h3>' H- ], R5 L- N8 W& R
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
9 @# X1 \4 q' ?<pre><code class="language-python">//览器窗口的内部高度
: |$ ^/ U" ^) a; n6 `window.innerHeight , w* C! r% J4 J6 D0 `0 V
7060 c4 D1 N; ^& U8 x5 A' ]. o$ V5 T
//浏览器窗口的内部宽度
7 r2 p! T" I  g8 |3 K$ f- dwindow.innerWidth
' [0 M. i6 f$ ]0 w1522% H) L% C8 k& G7 Z% f
// 打开新窗口
( E' L/ [5 a/ G" ~3 |) b4 Ywindow.open('https://www.baidu.com')8 x& C" i+ d: r8 }; p' u7 I
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}2 ~$ E7 q  L4 D
// 关闭当前窗口: O* J; J3 D) {  @4 b2 e
window.close() ! s2 k: B) _5 Z' A
//  后退一页6 w* x1 x" n, V& c2 C8 h# B4 \( j, w
window.history.back()
! I% P7 G$ Q/ q/ j// 前进一页" R# p; X/ n* i  k
window.history.forward() 0 D) j, [! X7 P% v" n7 A; m6 @
//Web浏览器全称
! Q: C6 }% y& i8 n7 {% t# d+ nwindow.navigator.appName9 V: {4 W; I1 ^: a: h# Y
'Netscape'6 ]- P( L) K6 G) u4 q5 j' l2 {& Y
// Web浏览器厂商和版本的详细字符串
) A4 X+ K* S2 rwindow.navigator.appVersion$ l# z6 q/ Q( A4 T
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- m/ N# B( ]2 B5 ~0 Y
// 客户端绝大部分信息
4 S  F- k. g' C0 S. {' }+ Ewindow.navigator.userAgent0 Y4 O& q6 s- U: u8 m4 |" r
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) ]; D; H3 n4 E: Z// 浏览器运行所在的操作系统+ t. ]2 E' {7 a
window.navigator.platform
# Q$ W9 B( ?( n. o& j% ['Win32'
4 {6 M3 z  @8 L: v1 k- t4 o+ @! L" n+ h
//  获取URL
6 n2 ~: m" p& ]- W2 r9 _' nwindow.location.href
8 |$ y  o  R: F5 l// 跳转到指定页面
) W  C. J9 T4 k. B+ d; _& [  k+ `window.location.href='https://www.baidu.com'
0 V/ Q6 [- }8 l; {4 Q2 L5 p// 重新加载页面
6 J2 c# u  y- e" `window.location.reload() + h5 M/ K+ ~# t/ G4 k$ l
</code></pre>
, _4 r  j* X6 [" D) e. t<h3 id="32-弹出框">3.2 弹出框</h3>7 i! u2 B, g/ W/ V
<p>三种消息框:警告框、确认框、提示框。</p>
+ d# ^$ a" K. H2 [$ |0 R# d<h4 id="321-警告框">3.2.1 警告框</h4>: V. g# u7 c+ e5 {
<pre><code class="language-javascript">alert("Hello")
2 E: p1 M" B4 [3 b9 j$ E# ~8 U</code></pre>
/ v5 ]* ]! J2 F+ z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>. Y0 ~2 c1 b0 f' K
<h4 id="322-确认框">3.2.2 确认框</h4>+ K0 P+ Y& o5 ~+ @# g& X: ]% H
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>% X- ~' O  O/ b$ E$ g) B
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true! E* W& W* C4 N6 w& Z7 d4 [% H
true0 f. ~; Q) Q  u# U9 w
&gt; confirm("你确定吗?")  // 点取消返回false- X8 i. X* x# v' m8 O. O
false, K0 R' z5 _$ }* P' \, R
</code></pre>3 K5 C  z. |8 X2 U- C
<h4 id="323-提示框">3.2.3 提示框</h4>
" v4 e! E2 K' V+ Z& v2 R) K<p><code>prompt("请输入","提示")</code></p>$ u8 t3 l: o$ I  {( \; \
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
& t4 V' P2 C8 K# `<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
  g: s$ p* U4 ~3 }7 ?* o<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
  @# d3 j* p# t, Y* G% t6 P<h3 id="33-计时相关">3.3 计时相关</h3>
" O) A* y( G: {4 i4 o6 T( G1 }6 C<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>5 o# ~- T$ `' ~
<pre><code class="language-javascript">// 等于3秒钟弹窗# \8 u3 l6 r- f- _% l
setTimeout(function(){alert("Hello")}, 3000)) N! U) i1 I6 Z' _/ Y- P/ h% w+ Y& [

. H$ a2 V7 d. r: T  nvar t = setTimeout(function(){alert("Hello")}, 3000)
* l& P, A& \% u- U. U# o
; s) w. g/ E, a5 Y7 w) K  n// 取消setTimeout设置8 W1 e7 Y  n7 n. [4 _: f
clearTimeout(t)! N! h) r+ r+ g% C  w
</code></pre>0 P4 O0 H/ Y4 q4 u6 Y" h2 o+ C, x; r
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
, {1 |: E5 j: I5 U7 {<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>  t; @* C6 W/ S# d$ M& Z; s, T
<pre><code class="language-javascript">每三秒弹出 "hello" :
0 s5 S$ H' m: L* F) r3 i' N& BsetInterval(function(){alert("Hello")},3000);9 k8 [- v/ R1 K
</code></pre>, D2 |8 B6 Z& ]
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
- z: k$ O% n# l<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);$ M$ P# T5 b9 R* R1 F
//取消:
" B! }; d# r# Y, IclearInterval(t)6 d) ~; u4 Y  {
</code></pre>3 h' w4 Q+ c1 D! F# m. d

' H! l) e1 h' x* G. H
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-26 21:01 , Processed in 0.077654 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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