飞雪团队

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

前端之JavaScript

[复制链接]

7994

主题

8082

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

3 B6 n: s5 R5 y# m' n<h1 id="前端之javascript">前端之JavaScript</h1>8 g; S+ \2 u- K; f: i; `
<p></p><p></p>! E4 ~! V6 |& Z3 R9 T
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>6 X$ n) w% s. Z) K9 @4 S2 ?% T- V
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
5 V* _# }1 A$ }它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
% k  ^/ {9 g* R7 B9 ?2 K它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
3 i" k- V& p5 t5 E% ~它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>6 p+ u( v" ~% x3 n. O7 v- I
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>+ Y* s- \0 w! d, a* H6 _; S2 m
<h3 id="21-注释">2.1 注释</h3>
3 `. n$ ^5 y( _: h0 V<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
; A8 J: |+ Z7 F! M( I, _0 J* a<pre><code class="language-javascript">// 这是单行注释
! I4 n% f* q8 w, B3 c' C1 T& e# V
( \1 g0 u* e# M+ e6 W  R/*
, m& @6 f) X0 m+ ^这是多行注释的第一行,  @; s) f$ D) b% Y3 H
这是第二行。0 D0 z$ {: N. Q
*/" U6 c3 W. L5 y$ P& m
</code></pre>
" W- P4 j3 Y% x<h3 id="22-变量和常量">2.2 变量和常量</h3>
( [. g$ |4 v* Q% s% A( x6 l. ^<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>* q& M  u' _3 K: y" V& c
<ul># k6 \8 _& c# t8 S, e
<li>变量必须以字母开头</li>
; v3 O3 ~5 H1 s/ e4 T, Q0 [<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
5 \2 }8 S* v7 G7 F<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
% S! [3 M+ b; o</ul>
6 g- E, o3 t6 I5 V0 ]! @<p><code>var</code>定义的都为全局变量</p>
" I. q1 j/ L) E5 f<p><code>let</code>可以声明局部变量</p>
  `: h. @3 O# Z" K<p><strong>声明变量:</strong></p>
& A  o+ I6 T3 j- Y/ A9 A<pre><code class="language-javascript">// 定义单个变量+ x* h' v! _7 q% Y
&gt; var name- i+ H4 s$ Q- @
&gt; name = 'Hans'
8 ]1 D  q& s% ?1 ?9 M8 A( z) ]  X//定义并赋值0 {9 s- h' o% n+ G6 H
&gt; var name = 'Hans'
3 ]$ l! @2 B- ^* y&gt; name
- Z/ b' B' J+ K/ C$ \# D* U'Hans'  j$ N/ I) a+ \  |( }

" E" F3 D6 H8 a+ [" J  v0 Q// 定义多个变量
8 b& k8 P% U: w; [5 f$ a&gt; var name = "Hans", age = 18
# K: t+ }8 e) g0 Z) ^1 P&gt; name7 V( D& \. E) I! J; ~
'Hans'
: T2 q% E( F( U. ?+ S7 @&gt; age# q& M" _% ?: Q' u3 i$ t* n* _
18+ M$ i6 Q: z  g

9 `. J+ m" _0 O% g6 y- {//多行使用反引号`` 类型python中的三引号
  ~3 ]/ W- e0 V3 h  f' i! y&gt; var text = `A young idler,. Q' y4 O" P5 K& t
an old beggar`: y* _2 J( T% O/ }- I9 R( J
&gt; text- D- ~- ?/ [7 f7 a6 N& R
'A young idler,\nan old beggar'
% v  ]8 I3 n+ h</code></pre>
' q4 A/ D' |4 Z/ Y: x: d$ s- {$ Y<p><strong>声明常量:</strong></p>
; h, ?" R6 @2 X( g<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>  @# m+ O- T2 b  x* Q& |8 t( _8 j
<pre><code class="language-javascript">&gt; const pi = 3.14
, W) Z9 _- _7 j& i0 ?+ J&gt; pi3 i: C7 I* e: R. S" f
3.14' I2 w& _+ @; D& M! @( f& _! g
&gt;  pi = 3.016 m' l( O' u( F
Uncaught TypeError: Assignment to constant variable.
; X  R3 J$ x; d    at &lt;anonymous&gt;:1:4
: X& a* \! u9 W+ g- _6 S  I: s9 h+ g$ I6 r. i+ Z- Q
</code></pre>
7 y4 B" \4 _/ W<h3 id="23-基本数据类型">2.3 基本数据类型</h3>( X8 ^1 T3 N3 k
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
1 f! t+ z, w1 ?1 d<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
" H3 v9 R! O2 S* c* S9 i  W5 p/ a<h4 id="231-number类型">2.3.1 Number类型</h4>
0 |- b  v7 [9 _8 y3 E6 O<pre><code class="language-javascript">&gt; var a = 56 L! s! q: a" J0 I1 c3 d
&gt; typeof a   //查看变量的类型  4 @* ^/ D4 J5 Q6 `- P, }+ |
number
- u1 e1 s2 Y4 m9 R$ S8 y+ ~& g: F) e$ V5 V3 o/ n* W
&gt; var b = 1.3' k+ t% M* u% m: \
&gt; typeof b" M/ ]5 d; k8 i1 ^4 A9 y
number
5 F( M4 J- M% Y" M* X& H8 G+ `& s# A# }$ B! r7 h6 j
// 不管整型还是浮点型打开出来的结果都是number类型/ e4 X% i+ W9 `0 o9 T  ~( j9 \! D, `& i
+ ]( h* E( S, s
/*
! ~- W" i7 m8 j& c) U$ {NaN:Not A Number0 E4 q/ b4 d  L8 h" T/ h% Z
NaN属于数值类型 表示的意思是 不是一个数字
  \, R# U" S! j*/
! U! L: m/ C: m! y8 i
% d3 A$ o9 I, i1 ~1 h1 ]: DparseInt('2345')  // 转整型3 b0 R4 ^3 v6 j5 j1 C
2345: E; ?/ A% d+ {; j1 Q: S( }+ e
parseInt('2345.5')6 q) P$ V% T3 C& j
23450 k1 s! E& A- k7 H
parseFloat('2345.5') // 转浮点型# C4 w. [3 M* n
2345.5( B4 u- j* v8 f2 Q
parseFloat('ABC'). T" h# z- I$ Z2 a% h/ |4 M* j" T
NaN
- j! d6 o4 C. DparseInt('abc')
% u( O; ?& p: P3 N- Y, U. fNaN
& J) [8 R: N8 f3 g9 f. W</code></pre>
- u1 v0 ~0 ^* @' Y1 q8 m* W<h4 id="232-string类型">2.3.2 String类型</h4>
6 @: s. P. y& R: e9 }( I8 f2 O5 U5 i% P<pre><code class="language-javascript">&gt; var name = 'Hans') c8 M. \& X+ P: j/ j2 |
&gt; typeof name
* o8 [+ t" ]3 M  {0 l'string'
* k3 v! K5 X0 d& `4 ~9 p" j' }2 z: m* y0 `
//常用方法* I1 A: L& w9 m
// 变量值长度' U  \0 S/ S. B8 I
&gt; name.length
, F# w) N  S. y: _; ^' x& }4) I$ `& M9 K7 q1 ]0 A
// trim() 移除空白
# z3 @- C8 ~; F. _' s$ l' w* H&gt; var a = '    ABC    '
1 i  g+ U! q2 j. t* G; O$ B&gt; a1 F4 V6 U. e1 H  P% w4 ~, K
'    ABC    '" r- T3 f; T% X! ~
&gt; a.trim()
; s" Z' P6 O/ D5 o'ABC'" C( O6 o  p" F' K
//移除左边的空白9 i; V$ p0 h0 m6 D
&gt; a.trimLeft()" h: D, D( p6 R7 ]" v7 N) s
'ABC    '
: S8 s# w* [  A: \. ?; ^: E//移除右边的空白
0 l. |3 w5 T! T' [% P&gt; a.trimRight(); }6 h2 n3 R' S. [# w/ o. h
'    ABC'
9 s. m- m8 M5 q, e4 v( p% M/ M; _  y& c6 u' M. ?
//返回第n个字符,从0开始1 S' }( U- J6 I( y8 _7 g% N
&gt; name
9 N5 A0 N' g( }" o'Hans'" p& J( n8 j' ?% J3 R2 Q) u: `
&gt; name.charAt(3)
7 Y& L* ]0 p& s4 P4 X's'4 N& V, O% B& a) x( N( L$ V+ G
&gt; name.charAt()3 R/ r5 N! G  R
'H'
# Q. c# C: f& F& X4 ]&gt; name.charAt(1)
( [/ b- s9 W/ R* w; ~; n* d'a'* \5 f8 |+ X1 R, W

: Z" }9 l8 a% L* d8 a// 在javascript中推荐使用加号(+)拼接" y5 v9 K5 r( p
&gt; name; {' V( y0 t  P4 D  L7 J% e; ]
'Hans'
$ M2 G$ @" d( I2 t& X3 K# J" u&gt; a! K) S9 h2 g9 y) g# u6 k/ J# S
'    ABC    '
: l  b, l, p8 K# s&gt; name + a
0 m- j+ {! v# p7 F% Y4 l1 T'Hans    ABC    '  G8 N" q( L% q$ K! y7 m$ J1 L4 G: r2 a
// 使用concat拼接. v1 B& ~( x! e# F/ W9 Q3 C- l
&gt; name.concat(a)! I( P% j+ o/ n& P) m# }9 d% W
'Hans    ABC    '2 |9 g% A  q: l! Y! S

$ c( T* R& b7 Q/ {: t* i# S7 v//indexOf(substring, start)子序列位置
1 c8 B8 j" P8 K
3 Z4 ?* R0 D% M, Y8 i0 T&gt; text
0 W# a% l$ V+ b: p'A young idler,\nan old beggar'
7 x5 ^# w( g3 {. U6 h4 `9 |2 v&gt; text.indexOf('young',0)
$ Y1 I5 m) i" W  x* ?6 x; B+ n23 Y, m& _  U7 O6 }2 l
6 Z1 ^  F/ E2 I2 K
//.substring(from, to)        根据索引获取子序列
5 k+ P; P. P' ~/ J' f&gt; text.substring(0,)& Z/ q6 o2 M4 D5 l! w
'A young idler,\nan old beggar'3 V# ?  G% C! z- B! U# a  v6 n* @
&gt; text.substring(0,10)0 Y- W& U+ _  r* }& R
'A young id'
/ T7 ^' U! p0 V0 S- N  f5 J  ~! b) _* v
// .slice(start, end)        切片, 从0开始顾头不顾尾. z# `* Q3 F, V% x) X0 _6 R4 Z
&gt; name.slice(0,3)
. f5 ~8 l5 C8 X3 L'Han'
8 n- a: a& W* C4 q" |* X# \$ D2 G
// 转小写
; p% b% I1 x0 B. L  t&gt; name
! ?) j$ z* O8 Q$ h. z+ u( q$ g'Hans'
/ `5 U. B+ ]5 [- Y) H" Z- y) K&gt; name.toLowerCase()
3 K3 J9 z; @6 a; u! G. }4 E: A'hans'! m( k1 `8 J2 ]! H
// 转大写
4 y& i: K% w, p) I* d&gt; name.toUpperCase()
8 z! T- U5 u. d  v6 p'HANS'
  F; A; [+ Y0 p) n5 K( w) W
& v" Q9 D' R9 D9 s$ w+ x// 分隔1 r3 a3 G+ i% Z6 C0 i8 {
&gt; name# o7 }) g! |+ C4 O, Y. G$ S
'Hans'3 `* K. Q/ E/ @/ w9 m' q" i5 \
&gt; name.split('a')
; g  F7 \+ H: P7 V# v8 v! G(2)&nbsp;['H', 'ns']& j4 b  ^! j  l
</code></pre>: S+ ]% m5 s! B- E* j
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>% g0 U. i( a& F, R
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
- A4 t$ o7 C$ A% L; ~/ c<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
: }0 V$ ^" m$ x, n<p><strong>null和undefined</strong></p>7 g0 I# f2 c) o7 @% F
<ul>
6 ?( z  y3 @( g: N8 e9 K+ s' _. E<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
$ V# d2 B) w" k# E$ }<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) n! M! ]1 f0 i6 U# O8 i</ul>
8 S3 s4 ^4 I8 n3 @: Y0 D<h4 id="234-array数组">2.3.4 Array数组</h4>+ K$ D+ o' W1 w, d) M  ^3 B! |
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>! e$ g' s- W! ?
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] * B. F0 _5 r7 n3 O3 V1 R3 u! y
&gt; array16 I! h5 V  ]* j. P
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  F/ {  v8 t0 X; Z) i( J: u* W/ ]
&gt; console.log(array1[2])  //console.log打印类似python中的print
: ]2 @6 K0 m  i9 h# V/ B% {  v$ C3' P8 S& j1 ], N
// length元素个数! u: a8 q& R0 P. O, w" |8 `
&gt; array1.length0 a, O/ p% X$ t2 }6 O4 c
6
" X: I4 N- S* c" |// 在尾部增加元素,类型append
" M* O3 U5 e5 D% X&gt; array1.push('D'), R) ?- E, Z) m( E; X5 E2 J% L
7
8 P& n. m$ h0 V& `6 S+ r* Y: c6 h&gt; array1
& h, J7 C5 I0 N" L(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']* u$ s0 t+ h( D8 ~
// 在头部增加元素
) d# L6 ?/ Z4 }- S4 f- ~( _3 ~&gt; array1.unshift(0)1 R& F4 u! C& |; R
8
. A  W4 i' ]4 r9 G&gt; array1
, F# u9 v, ^  h) @9 j- S3 f(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
" Z: l7 n  A% [1 p0 j! U' [, O
* o4 Q# v0 e" u//取最后一个元素
+ {: l$ g9 T- G: j' G0 e" h0 p&gt; array1.pop()% ~$ O4 k% L' s( d
'D': j; ^( ?; a  T. n: m: d4 z
&gt; array16 \! _/ j7 {( K+ W4 G; q
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
  T; m/ b. q6 `$ W3 A# O/ ^: ^//取头部元素
0 n: z7 Q4 b: t+ B+ F& O&gt; array1.shift()5 n1 [+ |8 @4 n/ a, i4 O: q5 }6 u
0+ n1 t& Q  s2 b( M, t
&gt; array18 |4 j' d0 P+ p3 N. i
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], M# q# U3 P% M; u& f. @
) G9 f  l( [) a/ U$ U# P
//切片, 从0开始顾头不顾尾3 j8 \6 P0 `" h9 u" w9 h, a
&gt; array1.slice(3,6)
3 T5 h/ M, z; Z2 C! G% X(3)&nbsp;['a', 'b', 'c']& W' C, e+ V+ k' \" O
// 反转
+ N9 ]  r; q. Y5 G&gt; array1.reverse()
1 _7 \3 q+ c! u# y! C& _(6)&nbsp;['c', 'b', 'a', 3, 2, 1]7 X, j5 l% A% l2 G0 A7 r
// 将数组元素连接成字符串
2 I. E: |  H2 v5 l&gt; array1.join() // 什么不都写默认使用逗号分隔
$ Q" k- ?6 ?1 O'c,b,a,3,2,1'' ]% \* P) c( N8 m. e8 X
&gt; array1.join('')4 n8 y" W" f% ?/ G
'cba321'  d  E% r# V  O6 b( ]3 g
&gt; array1.join('|')
4 a( V) O$ P1 {  r- R'c|b|a|3|2|1'  i( J4 |+ h/ `/ s. ^4 m! {' o! p+ ^

4 n1 {  V+ i/ r# P// 连接数组) O% E+ `2 u1 ^! y- K+ L6 w
&gt; var array2 = ['A','B','C']* q7 r. L, ^  U: S, t* M, N
&gt; array1.concat(array2)3 f0 X* K9 O5 l+ \7 R* {
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
9 F: B* c  W' l/ G6 W: k+ J  T7 f8 }8 a- K
// 排序
. B6 Q: D9 M' s6 h; c* d8 u  e+ w&gt; array1.sort(): M5 x0 s  H# Y( \6 c/ W2 A
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# P3 E+ S( |! v6 y4 J- p; C8 Y; e
% f  i, x" I$ i9 U% ^
// 删除元素,并可以向数据组中添加新元素(可选)
# `5 @; V" I( q. p/ z&gt; array1.splice(3,3)  // 删除元素
( G: k% S* n  o4 z8 }(3)&nbsp;['a', 'b', 'c']
+ g$ Z. [1 i# R& A  ^4 y&gt; array1
$ T" z3 \, f7 q" D, u7 ^& g(3)&nbsp;[1, 2, 3]
# _* p9 }; }2 E% w4 |' i$ o6 t8 s&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
. l: }6 W5 |$ L[]
7 S3 C; l5 y) N! w, e3 ]- D/ L&gt; array1
# m* T8 ~# Y% G7 I; r+ c! ]+ P(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']1 S$ U2 l- C! G; {/ l

5 u; \/ ~  I" e% M- t: A/*
# y; K8 R# q- [5 csplice(index,howmany,item1,.....,itemX)
/ y9 W$ x' q% z& Z4 |2 Dindex:必需,必须是数字。规定从何处添加/删除元素。, h9 X" o2 Q: ?+ U
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 h1 N3 o, ]- S9 e* r# d; Jitem1, ..., itemX        可选。要添加到数组的新元素
5 X0 {6 ^3 ^* l; b- L' D*/" }4 f  j. |; N( g2 v
7 Y) V% U0 Z6 L  r. l3 e  _7 S" [
// forEach()        将数组的每个元素传递给回调函数6 c) o* I( a% C0 R1 H
&gt; array1.forEach(function test(n){console.log(n)}); _4 z3 B" O0 Q
1+ h  o- G% k* C, ]( v' ?2 z
2
! |, v& ]: }2 H4 |$ Z2 n 3: {9 K. _& @) d% ]4 j; }4 V
A
5 a; J) N$ U. D9 B! J! [% Z. E B' H. b8 s* u! m+ a' r2 i
C
. S$ U+ G* v' \. n5 r1 ?& ^/ ]// 返回一个数组元素调用函数处理后的值的新数组! K" R- v; ?* [9 }9 X( k. `+ F4 f
&gt; array1.map(function(value){return value +1})
. D' i: s, |! I3 D& C(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']; D# E1 W9 m$ X! _
</code></pre>
% [5 v$ G3 _/ h/ B! Q* r<h3 id="24-运算符">2.4 运算符</h3>
$ e! s: `' k$ U! K0 }4 I' Q0 [# }5 R5 ]<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 s  Q6 i; T* @: @<p><code>+ - * / % ++ --</code></p>
% o6 s2 r% g) I5 G" J<pre><code class="language-javascript">&gt; var a = 6
( u% h( ?4 Q; _&gt; var b = 3" ~! `. q5 b( q. J8 g
// 加
, D0 I% ?& s- W&gt; a + b4 N- i; q: B, V# X
9( P" q% L4 f" H+ B2 h- Q/ d* w; p
// 减& p% G) X% e* x1 y# g  l$ Y# N
&gt; a - b$ X+ Z3 o  m3 b$ N
3
0 T) L: y+ R' h' H# H, s4 H// 乘
  y$ Z! {* k# ^2 @' X+ b&gt; a * b: M  B7 M2 N$ s5 v( k: s
18
4 d: ~$ n. @# H# A9 t* p0 I: f4 C8 Y( }// 除5 I- T2 z4 G2 q0 u
&gt; a / b6 x: t# s* r( w8 a
2. A1 v0 g$ S& S8 p
// 取模(取余)
6 a. i( l& ?+ `$ x9 E& Y, d- y&gt; a % b
# g" m6 K' }7 u7 x5 I4 c7 c6 m0
; ]  |9 f9 }2 x0 H// 自增1(先赋值再增1)
, T1 D: l5 S8 v# h# n: {1 q&gt; a++
) u8 }% u8 a, m: o1 J6  ?9 h1 [# n$ W/ Q
&gt; a5 V9 Y' ?1 S- _' N  k
7. ^8 J+ p$ D7 B; u" j( H8 a
// 自减1(先赋值再减1)
/ g6 g5 ]3 P( i/ W# ]5 Y&gt; a--
) k' {& @+ P/ S. w3 K* p7: p* w3 d# H3 Y9 a% z
&gt; a
% O% r/ b! P% |6, ^% Q) B6 i# f* p5 {4 {9 o* f
// 自增1(先增1再赋值)$ J0 A+ U* V5 `7 ?! @
&gt; ++a$ O; e9 Y7 Z% D* w% j
7, z* A7 Y3 O, }* a) T1 g9 K
// 自减1(先减1再赋值)( a  m& v5 z+ s+ E& o: _
&gt; --a$ Q8 h7 V9 M; j
6
: u* z( A5 t% L+ |. q&gt; a
/ u0 r2 ?: D4 L2 X6
2 m  J1 n+ U$ \5 P- T
/ P( X/ g' T* s/ d# L8 D9 k//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理6 y3 p( G6 C3 K) _
</code></pre>' S# w8 v9 p% b2 u- }/ E
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
6 Y  C2 n: t7 }5 s! f2 }9 i<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
# ]% C! {: ^$ u% Q" G! d9 J0 p<pre><code class="language-javascript">// 大于
, B- X" y3 g7 B2 x" S6 h&gt; a &gt; b
1 w% K& Q/ K# t5 _. s, r( Btrue
5 O* Q; R8 ?* P4 O2 w+ s* ]" i9 e4 h% V// 大于等于
- W3 \6 K* ?" J6 R&gt; a &gt;= b4 Y7 [# X8 t- o) L7 ?) n6 s+ [
true
0 g) C$ x- r: _8 c# `// 小于
9 A2 V9 v! ^/ I3 X2 y; U" X&gt; a &lt; b
1 ~' r3 F+ z7 P6 m5 S: Gfalse
6 O3 w, r1 x% F' e6 q- B* L// 小于等于5 v# D" ~& {& y/ i/ g
&gt; a &lt;= b
/ l3 z9 y  u3 e; x+ ]8 p: E/ Z5 Qfalse
) Q, }* p( L# R/ [// 弱不等于
) B, b- W7 s2 S8 ]7 k0 B  i&gt; a != b
7 H* z+ `. ?" j6 @/ |0 r2 S7 V% X9 htrue' ]: X. Y9 |5 E1 u+ U0 q% s* o- V0 n3 ~  x
// 弱等于
/ i1 t4 ^' @# S. B3 D. v&gt; 1 == '1'/ T! H3 E) B3 b: m2 y5 y
true; X: I  C3 G5 Y0 m7 L
// 强等于
( m) o* J; T5 ~. e$ {&gt; 1 === '1'
* v( Y  k! `+ ]+ ]* Q7 Y3 n2 rfalse
1 J, F8 l2 d, B2 R# C' g/ W// 强不等于9 ]* E( m, o+ K8 a1 E- J
&gt; 1 !== '1'
; Z$ X8 a: y3 ~! {) O, Gtrue
5 ?0 d9 S! p8 B! Y: G# D8 W  F
# G& w( [% `6 i! y/*
* {9 Y. l+ `& a1 p+ \2 ~JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误/ Z" n* ?- _' m! G
*/
2 X5 K0 z7 E4 w" L$ W6 m: y</code></pre>
% ~1 {5 z+ @5 t- J: ^<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>2 G9 v0 O! w8 Y9 E
<p><code>&amp;&amp; || !</code></p>
& }# C; p; X# h' Z0 U" r<pre><code class="language-javascript">&amp;&amp; 与9 d( }7 w3 c$ E1 F1 y( L$ l) g
|| or
4 F8 n# p9 r% _+ r/ y! 非  B' `3 M: ~8 T4 p
</code></pre>2 {4 i+ N; U4 P/ e$ V9 U9 k# [$ D/ r
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>0 f5 }" X& {  O8 {$ ]; A
<p><code>= += -= *= /=</code></p>
" Z8 d, V2 q. v+ _<pre><code class="language-javascript">// 赋值, O& i/ M, \+ @! ~+ y
&gt; var x = 3+ d3 B6 c7 s: z, @, K& D
// 加等于
3 I7 q* z; [* \0 ~+ F&gt; x += 2
0 _( A8 |  s# R+ g# {9 B/ U5
* @0 |; j$ _# ^  e' O( X# W// 减等于
! X- i) Y5 {9 j' w. \9 E&gt; x -= 14 ?2 V* v7 z# K9 V% Z, J
4
. v1 ^0 M5 R1 `8 Q( |5 q8 g, k. s. [// 乘等于
. A+ ]" K, f$ a6 ~% W" K&gt; x *= 2( }: W& Z& s' l1 L
8
& w0 {1 u/ l4 L6 [0 \& }0 ?// 除等于
/ u& Y# N# \5 x8 x&gt; x /= 2& f! [; {2 U9 Q9 d) R' m" |  W
49 O6 ~, e6 L- U7 I" n0 d( r
</code></pre>
' w3 i; B; q$ Z+ t<h3 id="25-流程控制">2.5 流程控制</h3>
3 W7 o6 u7 a! t2 M% `<h4 id="251-if">2.5.1 if</h4>
* G9 A& \  U/ F7 y' l- r<pre><code class="language-javascript">1, if(条件){条件成立执行代码}7 B8 o. `$ y( Z0 a1 k  Y0 [4 y

" }4 X$ d3 w* i  `& Z; ^&gt; var x = 32 o4 Q: c4 I: p
&gt; if (x &gt; 2){console.log("OK")}
6 U6 }. R5 |( x  H) H; y9 @6 d# N OK" U" b6 V) p6 ?6 }5 Z

( d6 f. \% d. F- @* g9 l% a/ j2, if(条件){条件成立执行代码}
3 h( n$ h; O: ^3 B( P& D; l        else{条件不成立执行代码}
/ r2 i9 p# |9 V2 x: }# U
$ j; d( c8 T7 I8 }&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
. j, H" F! S' o: \'NO'
6 F9 L8 n9 [/ @' S+ ^* T8 ~3 z- C
$ T$ s; F. `. W- d! ~3, if(条件1){条件1成立执行代码}
+ B( |/ U& Z1 W3 @        else if(条件2){条件2成立执行代码}9 L1 ~7 s7 E7 R6 P3 E
    else{上面条件都不成立执行代码}) {, V' R4 w* c: `; ?0 O2 N" h* b
; |7 ~: Y. N4 c2 I$ E8 T- }
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
$ G3 j% o9 z+ P. o3 v Ha2 n$ _9 x& f7 k+ n+ l
</code></pre>
1 ^2 H/ l) E6 g6 D9 D<h4 id="252-switch">2.5.2 switch</h4>* i' H7 _5 o# q( Q/ j
<pre><code class="language-javascript">var day = new Date().getDay();* u# D6 |9 j2 p( N) {0 }% M& V
switch (day) {
# |9 M# V: n3 \# `( h8 k, B. P1 {  case 0:
/ J& d# |$ {8 J6 B5 @% H  console.log("Sunday");
- t  I! j  W; b1 |+ B  p  break;
, P8 F; V- k, O. X6 X/ c  case 1:
: I. x# j; b' w0 F, S  console.log("Monday");8 G( q. G& u# `; l" P# N( |, M; F
  break;5 \$ d4 a6 d# f" H8 ~  D
default:8 O8 u. j5 u, n7 M4 A
  console.log("不在范围")# l  ~/ q( X0 k
}
) p9 W) A; m- w  U0 f 不在范围
- F; X4 ?! P- s; @</code></pre>
1 `% l0 d# }1 J0 {( @<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>8 \  L# n; W! r, U
<h4 id="253-for">2.5.3 for</h4>; }, T" Z' S3 W
<pre><code class="language-python">// for 循环
( ?! b$ q3 s$ \& u( R5 X        for(起始值;循环条件;每次循环后执行的操作){
, b. `$ b$ [' i) b7 ^$ x$ Y! |        for循环体代码  ^3 v! F8 f' w& N5 C& X
    }
8 S4 k1 d' A) Z: m9 S( h8 o' |) x4 N. E. u) y. ?
for (var i = 0; i&lt;10; i++){
) N  }# Z9 z6 f# A, v0 w  U    console.log(i)2 e- ~, q) G; c  H8 _  f6 q
}
1 S! p2 c& I4 D1 j# }        06 K5 a0 Z; Q* k- x
        1- s; L' d. a1 {7 x2 _& L3 d7 W  C; k
        21 i  d; C  h3 Q" l; G9 Y) f4 W
        3, ~% w. e3 |7 ^' ?" M
        4+ C& [0 `; U$ _4 H
        5
. V- N3 F5 X1 K0 F7 Q6 u" i        6
- q( i8 L6 R& W5 W* b" z        7$ J8 g4 q3 A3 \# i  h) Y
        8" u' g! w6 o9 d9 I: p" E
        9
- L0 e4 |) T$ T, R0 ?3 X6 p1 Z9 a2 R3 B</code></pre>. x: m' X( h: o9 Y" O4 u2 g
<h4 id="254-while">2.5.4 while</h4>
4 ?* I" R- |3 v& m; N3 ?<pre><code class="language-javascript">// while 循环9 k. z( Z* r7 A4 k9 W5 K
        while(循环条件){5 F  p. h. Y4 A
        循环体代码
, ~3 F% G7 H8 }/ D0 a8 U    }  R! A& t8 F2 m3 ^! x$ B

5 _2 U1 {3 X1 E0 r" }/ \* x9 x&gt; var i = 0
2 g: P. j; H- @& B5 Z& n4 K5 l&gt; while(i&lt;10){! ?6 B6 H& C* H3 E
    console.log(i)
; ~- {9 W0 `2 p+ m; C0 f- G2 I! A    i++8 Z1 k1 I" b1 W
}
/ V: H9 [! f; ~) W- H3 D# i% ` 0( T- o2 d9 H/ e9 D
1$ _" d# h. `; y% p  o  p1 F$ n
2' H- E+ L* C7 Z8 |  \- b. P
3
. Z2 p& B+ O" N9 o 4  B9 F- m) A( I( L8 m% V$ }
5
$ J2 D  w4 q1 s$ m3 f5 w: F3 [ 6% a1 r. \1 r2 R- \1 N
7( r$ ~3 Z( W4 K4 K
8
3 u; M2 ^1 Y. m" c+ L! x 9( Z+ m& H5 q( n/ C! h- [5 a
</code></pre>; c; o& p+ g, a) [0 t
<h4 id="255-break和continue">2.5.5 break和continue</h4>: H" f/ h% e) y: M* |6 O- T  t* |
<pre><code class="language-javascript">// break
+ t2 N4 e1 R# G6 i0 d; Kfor (var i = 0; i&lt;10; i++){% Y* M, n% b9 s
    if (i == 5){break}- Y* Z4 e7 @/ r+ _" [3 o& I
    console.log(i)5 i) ^# W" v5 _* w7 x3 x" h
}
( h) |) e+ b* l# c4 @ 02 Q' i9 g0 W3 a
1
0 ^% O3 ^4 j! `4 s# k* M. ~ 2, s* X  Y+ T8 k$ o) e/ g
3
7 q5 h+ l' n0 s$ a, j) E 4
* s$ e& D5 o9 x* \% p& M// continue* h5 V3 k, L3 ?
for (var i = 0; i&lt;10; i++){! B% m9 i7 K% s- ^2 \4 Y0 u6 J( W' s
    if (i == 5){continue}! F' h) c9 f8 P# L1 D' P
    console.log(i)
, v$ }, C' N5 {+ ?}6 N6 D4 P% ]* M/ j  X$ j- S+ `
0  r8 y  z- e$ q' W( Q
1
9 f$ X$ U' G- `' D- l' r5 Z# n2 V 2; W' M7 l2 D1 i# B9 ^! R; Y' y
3
8 b9 W6 }0 L; P 4
2 J, `4 C, ~* O* n6 O 6, c$ |( i* m$ S0 o" b
7
- n: `- D) z0 n) L% j2 ~( r 8" D2 o  A# k. z$ `+ Y; q
9' r& _) b# b$ `  m3 H

+ ^0 }- d) A1 G/ d6 h0 N+ z  @</code></pre>
3 p7 N+ o4 F5 P<h3 id="26-三元运算">2.6 三元运算</h3>, A. ~/ j# k8 E/ s
<pre><code class="language-javascript">&gt; a
8 H% c+ f: l6 ]  W6
  \/ d( C4 m$ Y3 O8 U6 o/ V$ ~&gt; b* f2 h' q# S" \& t- |3 ^# S! F
3
! S6 V" y. Y4 A2 ?7 B/ w7 p* F5 m* o  O& S- j
//条件成立c为a的值,不成立c为b的值; j5 _. G9 l; q' F5 O  m3 S6 p  p
&gt; var c = a &gt; b ? a : b
3 c- ]' l1 R& @&gt; c
+ z" |4 u2 O7 p& i2 N) B4 t4 ~" e6
1 a4 x. s# U# C
, u1 I4 w+ z* P5 I4 M, N0 z// 三元运算可以嵌套+ c( a" V$ X2 p  Y2 N# ]7 w
</code></pre>
# [2 K4 C7 C/ ?<h3 id="27-函数">2.7 函数</h3>
& E) U2 \" B1 o/ h( L9 R% L<pre><code class="language-javascript">1. 普通函数
( M' L  u0 n4 x3 q! K5 L: S9 j&gt; function foo1(){1 ~" g# G+ M+ x# d6 w# a
    console.log("Hi")
; w4 [2 u4 U7 m/ p5 ^% Q}2 T" h$ ^) k& |" L
% n+ K& }) f9 c
&gt; foo1()
9 O* l' @, F8 n; f7 j- b  j        Hi* t7 l6 t* g- Q' f
2. 带参数函数0 m' b: _- y1 r- ?
&gt; function foo1(name){9 s8 U+ t- s' a* S8 a
console.log("Hi",name)) f3 X& t2 v6 B6 x' a
}7 Y6 A% C/ ]5 ~  g( k% }
. W7 L7 T- `  ]1 d, |( X1 y; H
&gt; foo1("Hans")) S7 a1 l# m# J$ s' A$ Z
Hi Hans
# X* `2 x7 z2 L, s8 o2 z* O+ N4 s6 c9 u# D* ]0 ]: Z1 ~
&gt; var name = "Hello"
' M3 G+ @0 K+ F0 D4 S! S3 W&gt; foo1(name)
4 J9 L" P/ x: X+ o& q: _$ sHi Hello
9 g& q* a5 ~. E5 }! D( y* Q, ?4 ?5 O! O2 x, \% n1 M' i# R1 U  B
3. 带返回值函数9 K% }$ N7 r! V  ~1 Q
&gt; function foo1(a,b){
0 ~# g6 F4 W! U* g3 @' ~7 ^7 P: D        return a + b   & b& }& `0 M: s% o" v# Z0 i* _
}4 g- h. |  Z; B) }: N4 U
&gt; foo1(1,2), r1 A# F2 ?: [, n- U: ^  S$ Y
3* P+ I- V% k8 ~% H, V% E% {/ a
&gt; var a = foo1(10,20)  //接受函数返回值' P9 t! x! w% A5 U8 }" @! @0 |
&gt; a3 Y  ^' D) ^; d) L& {
308 ?, D- x# U# @- i0 W4 P
+ k4 X( f, ~! U6 h" n1 W5 O5 a9 C
4. 匿名函数
/ c; s8 s+ K- ]5 `/ w: Y! c/ h&gt; var sum = function(a, b){* ^0 h* M3 y4 k1 O' B
  return a + b;( ~' l5 P( d3 R" m* M
}* c9 j( d$ I0 z: E) _+ z
&gt; sum(1,2)
1 [- y! t7 [" C0 i3+ a* A! R2 }& g/ n/ I8 r4 D
  T% \8 F# T4 x7 L7 L
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
( O3 `6 W/ V, I4 Q1 k& `2 c  a' M8 L&gt; (function(a, b){: z% H  u0 P$ l3 |( u1 @
  return a + b+ z% T* ]" `" {8 e. d
})(10, 20)
6 X! G4 Y! Q1 I304 C9 N( [# \4 X: M. j1 g, q

5 X: |7 X, J. K! u% J& S5. 闭包函数
7 N$ q2 t2 }, O% w" j// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
" d8 r  j' r0 K( X/ avar city = "BJ"
* H$ `: I9 q% k; [+ e( Ofunction f(){
: K5 U' r5 j# p  z* A: }    var city = "SH"
' d* V$ S. O# X3 Y3 s& `. h) E* F    function inner(){2 k: B6 \7 w/ b* l0 w
        console.log(city)
* f" o4 c1 X3 X3 H) T    }1 F: U8 |5 T* ]- H1 c* C
    return inner
# T, U" I( V& B8 C0 o}' C) @% S& m( K8 V
var ret = f()
$ j  ^7 T; ~) R. r  o3 {& ~ret()9 v, j" U# I7 H% m3 J* P+ ]/ B+ }0 N
执行结果:+ m6 }( e: G) }1 C
SH
- j' I2 ?3 z1 ^' _: F. k( k: K& w  B
</code></pre>' q2 _9 f) f& [0 W1 m+ @5 W: X
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% R+ `$ x' s  k1 Q" m<pre><code class="language-javascript">var f = v =&gt; v;
: _) |: O* K- G+ K6 C// 等同于+ j9 s) }2 c. {0 I( D
var f = function(v){
0 n" a. x0 d* z, R' Z6 R8 H" P  return v;1 R; `) @5 h0 d* k
}7 Q, ^2 r) V1 _; d9 _
</code></pre>; N5 F* s: `# h4 K/ K
<p><code>arguments</code>参数 可以获取传入的所有数据</p>- K; R  c( A3 a( p& _# P
<pre><code class="language-javascript">function foo1(a,b){
; {# e' ^4 U: W8 ?! S    console.log(arguments.length)  //参数的个数
# M6 f  [" m* H/ t9 |6 W2 |    console.log(arguments[0]) // 第一个参数的值. l! ?' J0 l% R) ~% n: `
        return a + b   
3 F8 ~6 S# u* |0 M}
( Q. k4 z" y! mfoo1(10,20)& w& A6 L' N5 Q
结果:
7 i) x6 }4 z8 l- P0 _" g1 l 2          //参数的个数 % I, Z2 x6 ?1 y6 W3 f- J
10        // 第一个参数的值
9 f6 T. R9 I0 X+ B30        // 返回相加的结果
0 ^4 T. j, x4 b3 h0 N5 ~* Q</code></pre>9 Q3 F( u' }+ h  [1 N5 d7 f
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>( v- R" l, w7 {
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>1 h4 h- ]: m; ~! v* {# P3 R
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
0 f5 f* P9 e. Q* V: m; S/ g<h4 id="281-date对象">2.8.1 Date对象</h4>
1 \) U' v3 U/ _5 @4 y, |<pre><code class="language-javascript">&gt; var data_test = new Date()
1 J. J( U6 Y; g1 p  w& E4 F&gt; data_test
1 a1 {, P, `: ], l8 z; c4 KFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)5 Z% [# D6 W. h% Q
&gt; data_test.toLocaleString()
7 N% R) W0 p; l. A'2022/2/11 下午9:44:43'
9 O9 I. j4 P. G" m
2 L" }8 U3 d" g$ \) G&gt; data_test.toLocaleDateString()5 |2 W2 P9 w* J" V. q+ t
'2022/2/11'0 e8 E4 Q, B4 _7 S
0 r/ r* G, v- t2 f( T
&gt; var data_test2  = new Date("2022/2/11 9:44:43")5 j5 _7 @( d" F5 x) ]6 g
&gt; data_test2.toLocaleString()
6 c7 {; _, c" H$ i* A5 y'2022/2/11 上午9:44:43'. T% `: `6 B$ s  n: H/ @; {

5 {( H. h5 j+ B, }9 A// 获取当前几号1 U; l! G0 Y( k5 Y
&gt; data_test.getDate(), P! N1 V# S7 u- R
11. I4 `' ^" J! T( s: [; O1 `$ x+ N9 ^
// 获取星期几,数字表示" e. r) X- _$ ]% f" r- \: F. ?
&gt; data_test.getDay()  $ Y* Z& r* a) y) {  A5 B; Z0 [; R
5. ]. I6 g6 w1 f5 n1 a+ T
// 获取月份(0-11)! ~+ d/ V+ q* P  u
&gt; data_test.getMonth()) `% G% w* f) H9 u) V
1& C, ^! a  h* H7 w0 B( ?5 n( D
// 获取完整年份) K8 E" t7 J: J! i
&gt; data_test.getFullYear()
5 I& \0 J% a: u5 R% P4 z& Y2022" Q6 m! u& P, P2 |+ u; T: s
// 获取时
; v2 x# Y7 D9 X- ?  f: z&gt; data_test.getHours()
" }" h5 W2 E" M' Y! D/ z21+ ?% e2 @- D3 A# v; L; Q
// 获取分. w' O" z9 d7 d3 X* i) @' v% G
&gt; data_test.getMinutes()
; I3 T+ t) }0 Q/ y( j7 e0 J44, K6 ]6 {. m6 h1 A
// 获取秒$ q/ p& M' ?1 A2 ~4 J3 D
&gt; data_test.getSeconds()/ v+ s8 Y9 g' a8 c' T" L* K
43
8 ?( F/ R2 t9 \- f, J' `' I// 获取毫秒
( M. W, [1 L6 Q4 _* }! ?&gt; data_test.getMilliseconds()
. T+ O4 ^8 K1 G& c; ^' k290
$ U! T3 s/ |' s) I8 m// 获取时间戳/ S- U- q+ M4 Q5 m& L
&gt; data_test.getTime(): p. g: U& v3 R: n% r1 G+ F  U
16445870832900 K; u; y/ {9 g" B5 U4 t; a
</code></pre>5 J" f4 u' ~, u( c* m& I
<h4 id="282-json对象">2.8.2 Json对象</h4>3 l1 V+ t) a9 M3 B/ ?$ t7 r: w
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
& S+ c# p$ l9 P. G  AJSON.parse()  // 反序列化,把JSON字符串转换成对象7 b8 g) Q% i! I
  }- Z) [, t& j0 [9 K% y2 k
// 序列化
) F% p$ `$ P, v# Y9 I9 s$ j&gt; var jstojson = JSON.stringify(person) 5 E7 X$ F# m7 h$ C; \
&gt; jstojson  
0 ?0 s2 ]1 Y$ S. A/ P$ w+ w'{"Name":"Hans","Age":18}', p& j: ~, F' M  n
  u  M8 b8 O/ R) j; t- t" k
// 反序列化6 @6 B" a) A( L; }" h# T
&gt; var x = JSON.parse(jstojson)
) b1 h( o/ i6 W: e6 t6 K7 p+ k&gt; x
$ X/ ?) P1 x  q2 k5 ]{Name: 'Hans', Age: 18}
$ z+ }( X0 N* S0 e1 H: d&gt; x.Age5 Z& h7 W' H9 _
18- k( O7 V) B1 }! R3 Y% s7 Z4 k& O
</code></pre>
- ~; ~. W7 s; U  i' g1 i<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
. [( f6 C" P! w: c4 |* m<p>正则</p>
0 l& M, A4 d, L: z+ k5 }+ c<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");+ R4 Q: S4 U/ `! `2 v% i+ P
&gt; reg1
9 e. w: V4 r8 X6 f5 g/^[a-zA-Z][a-zA-Z0-9]{4,7}/  ~3 ?4 ?1 e: {5 z  E. Q$ ~" `( h
&gt; reg1.test("Hans666"). Y, u0 B5 a8 J: Q" f3 [1 {
true
! R# c  t; P4 y0 q" L1 v4 r4 C$ k) I; Y! Q! [+ E
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
5 m; m$ e+ Q2 n# h&gt; reg2
% |1 x  v- l2 V; r/ O/^[a-zA-Z][a-zA-Z0-9]{4,7}/1 L6 Q+ c' Z% l& ]" ^
&gt; reg2.test('Hasdfa')
# u% f3 u' b7 R  z8 b& `6 U, otrue  @" f. c) m% `5 H
% I/ {# h& R2 b7 d/ h) b( V
全局匹配:0 v/ ~( z; ]3 S. f% Z
&gt; name7 c- R* q: |5 o. r) C  O, T; J
'Hello'
4 L1 z1 s- ?: p, c1 A0 _&gt; name.match(/l/)
, |, w% O( n# k  F* a['l', index: 2, input: 'Hello', groups: undefined]
) ?% n$ G# A% M
! G0 D! S' Z3 N. R/ g&gt; name.match(/l/g)
  N) Q/ e. L1 `4 t. e0 U1 Z& g(2)&nbsp;['l', 'l']
8 l. H. `5 s; B% {. A& N* J// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配! W. J. ?) l1 s( f
6 e1 X$ y; X  t1 p- ^! Y  A0 [1 [9 b
全局匹配注意事项:% D6 q4 @5 m7 t. [
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g0 C; b7 z! R$ W, ?/ _$ W' L- m$ r
&gt; reg2.test('Hasdfa')0 C, X+ }9 M! P# [  y
true+ m3 K; E5 I, q1 O
&gt;reg2.lastIndex;, }, X) C# W8 e! h$ N
60 Q6 G1 I0 q0 y- e" I
&gt; reg2.test('Hasdfa')
* I0 k6 Q, r. w& R$ efalse
. Z0 V8 R5 I5 I3 N' Z1 P&gt; reg2.lastIndex;+ y& s. u1 D8 W$ m4 v) e! x8 {
0
3 M0 _1 o0 C: {& y&gt; reg2.test('Hasdfa')% U! i1 v6 x' y+ W
true" M' E* G' g( L+ R! Z
&gt; reg2.lastIndex;2 k+ X7 d  y7 ~- Z' T5 E1 C' Y
6- [8 h7 n4 _  R: j. X+ z3 |( [3 c
&gt; reg2.test('Hasdfa')
# ?$ {7 U8 o/ f- N; z6 f& vfalse% O" A3 o. D# @  y8 _0 L5 U# o+ w
&gt; reg2.lastIndex;
* r$ S8 i# l& S2 G2 `( K0 Q6 }4 @0
9 L) ]& p0 Q  w: z: v// 全局匹配会有一个lastindex属性5 c( v6 K# t2 }) ?# }3 {0 e3 a2 u
&gt; reg2.test()% N2 z. H4 ~+ {3 a1 U% U6 \
false6 E6 i9 |) Y; U9 o  s# [) j
&gt; reg2.test()0 [, U. I3 ]1 q- o
true. E2 Y) n% a! g- ^6 `
// 校验时不传参数默认传的是undefined7 F: V) ?9 ~0 N! X
</code></pre>
. j1 M7 L: r) l. e( I<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
+ h) ?- b5 X2 [; r/ Y  n<p>就相当于是<code>python</code>中的字典</p>* E! e2 C* p6 H! S# g; t
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
; j' }  X' k7 J& N( G&gt; person
% ]* |/ w9 W7 v1 G) a{Name: 'Hans', Age: 18}
! q4 \- X( N6 ?8 O& K# z&gt; person.Name
) W" @5 e1 X; P8 t'Hans'6 x" r" l/ H5 L2 |0 u- t, G* U
&gt; person["Name"]
# r  O6 w' S, V6 a8 g, [" q* `'Hans'
* v/ a6 x: Q" J0 @# E4 Z1 h  o4 G
// 也可以使用new Object创建
. ^4 g, K9 m% E% p# _! n&gt; var person2 = new Object()
; d% u- E' S5 r8 w4 c# w( J&gt; person2.name = "Hello"# |: }/ d5 Y: R9 L
'Hello'+ V2 e. U1 k! E) ~
&gt; person2.age = 20
- c- h# l0 o4 P; M# a8 Y( J  \: e. S20
) h3 D# R' n- {( B</code></pre>/ ?* K6 @* I7 H( y" O1 t( }
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
* F  k9 }: N" y6 W<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
2 F0 Q; _0 c9 Z: f9 u( S8 @<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>3 [. z4 e4 e( ?, j& E5 Z
<h3 id="31-window-对象">3.1 window 对象</h3>
$ E) y5 k4 h9 ?# U  s; {<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>7 {7 z  m- b( G/ @) L
<pre><code class="language-python">//览器窗口的内部高度. q( `+ ^6 `- s, Y4 d
window.innerHeight + [# E8 d0 b1 V1 {0 [( `" b1 l
706# l3 G5 t- e. K6 b5 k8 q
//浏览器窗口的内部宽度
- E; t  i- ]% x% Twindow.innerWidth$ z$ H7 r2 P- B9 K; R, f+ i
1522* Q. ?1 \! a: u: n  |
// 打开新窗口& c0 o& r  T. z2 l$ {& M2 {3 X
window.open('https://www.baidu.com')
% M2 V4 @0 p( kWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}! f% H& |  A7 ^5 S% V
// 关闭当前窗口
) B2 @0 t, t8 F* O* Qwindow.close() 8 J# l: n9 [: m- \1 ^
//  后退一页( R6 ^! \  ?( e4 ?( [) z
window.history.back()
8 A9 Y0 C6 W) p) u9 q. Y* ~7 ~// 前进一页
1 E& _+ r, P! f$ Iwindow.history.forward()
0 \+ e6 L0 `" x2 R//Web浏览器全称
$ [; t: k5 q: o9 d7 |window.navigator.appName+ U) N4 \3 k. Z& l7 o1 B+ A7 I, v
'Netscape', [1 A8 T* R. L7 P, j2 l( w- a( Z
// Web浏览器厂商和版本的详细字符串
, @4 i1 q, h* E& D9 e# Ywindow.navigator.appVersion
: Q7 v- ?! E# i3 V! G) `& `'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 [& C, L, F# [( I6 B+ l4 l
// 客户端绝大部分信息
: {5 x+ D  n1 N! Bwindow.navigator.userAgent$ r. W+ @" ?- [2 N& i( [5 ~( f
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
1 z" {  |* j3 A  S1 }, d// 浏览器运行所在的操作系统
) t5 l9 L2 l: jwindow.navigator.platform
  [9 J: ~; [8 n* [( U. x  s'Win32'& Y- P. U8 J) l3 N  n

* R& ^8 O+ I+ S9 K( Z) v7 T4 y//  获取URL+ G' l* S7 x1 W  D' A9 g
window.location.href
/ Z. Q+ o+ Q' o5 c. a// 跳转到指定页面- t! x; I+ X+ O% o+ E* n
window.location.href='https://www.baidu.com'8 N1 M; e& m) q) u% b! z
// 重新加载页面& o/ R7 {" Z( m1 i( S7 a4 B, |& H
window.location.reload() ( q1 B) d' H3 p# H8 {
</code></pre>
: T; L. C5 p" |$ \7 P<h3 id="32-弹出框">3.2 弹出框</h3>+ a% m) ^) ^$ W7 S  J
<p>三种消息框:警告框、确认框、提示框。</p>
6 A% J" G' v5 K8 ~8 ^8 R% q<h4 id="321-警告框">3.2.1 警告框</h4>9 e$ P! J0 [$ c/ f) z
<pre><code class="language-javascript">alert("Hello")- o$ L; @3 _0 p! E- P
</code></pre>0 n" ?- g& o( F( [
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
8 I, E& @9 R5 w* T0 B9 C- _<h4 id="322-确认框">3.2.2 确认框</h4>" A0 d; s; F$ a: E" k1 n" D
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>" M( s+ C  g! c% y
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
' `! |, t' q9 k+ T; Dtrue& U, E) C. q4 _; I# v% `
&gt; confirm("你确定吗?")  // 点取消返回false
0 H$ u8 I5 W  Afalse( P7 a, d: l  l! m& _
</code></pre>6 S! U2 n7 F3 `* G  c
<h4 id="323-提示框">3.2.3 提示框</h4>
9 D# a# \0 d" P7 L2 h<p><code>prompt("请输入","提示")</code></p>
# B( h( L( x; O" \<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
, I" f6 \8 U$ ~6 k- [3 P+ l<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
5 K4 V" W7 n: F8 P' D$ u' g<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
6 l- f: a& T# a, H4 C" m<h3 id="33-计时相关">3.3 计时相关</h3>
; j8 A* {7 B1 \" c+ y<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>) Q9 A) X3 Z/ @! w- i
<pre><code class="language-javascript">// 等于3秒钟弹窗( e' ]( D+ \: P6 s, h4 U; I
setTimeout(function(){alert("Hello")}, 3000)
' o# w- Z$ ?3 }8 ?3 q7 S! D! T" x. q
var t = setTimeout(function(){alert("Hello")}, 3000)
0 L9 S1 I0 e6 W; J) y4 ?
% U8 c4 ^5 Q/ r8 H// 取消setTimeout设置
# [6 f  Z' F: ]1 L- z/ E5 T5 V! BclearTimeout(t)" K4 n" C4 w) r
</code></pre>/ [- S& h' G6 S' l# n
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>' _7 _# p0 _- I; b2 d: k
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
/ c8 g  `( I0 B- Q2 D<pre><code class="language-javascript">每三秒弹出 "hello" :1 x( G+ X- R  T- l
setInterval(function(){alert("Hello")},3000);( c; {6 s9 C3 P+ J( S1 s' S: D& r
</code></pre>
7 H. I. u- R% ?<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
& a. [" j; c& r$ W<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
- U" n4 X: g+ ^* }//取消:
& k6 w; Y+ A! g1 ]& M- }clearInterval(t)
" ]6 T& l% {- K" t</code></pre>
, u4 [; N( T( }. k2 j
" N$ _: W1 x8 a. \1 \
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-29 18:48 , Processed in 0.077649 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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