飞雪团队

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

前端之JavaScript

[复制链接]

8061

主题

8149

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26513
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
$ C9 J; e6 ^0 ]+ M8 l; t
<h1 id="前端之javascript">前端之JavaScript</h1>
. ~$ d4 `& |, s<p></p><p></p>
7 Q9 C, a- R! l; a4 I& ~<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
- `, P0 {! \6 N# _" J<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>3 c* L0 T: D7 f4 y0 l2 t
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
) U" @7 d" i' r/ f' I" r2 w$ T它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
) ]$ D" m& l# S' ^它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>1 o  a5 C9 N7 I8 n4 i' `
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
! s7 y- |. y2 S! r9 P- Z. g<h3 id="21-注释">2.1 注释</h3>
0 n4 t# R# S5 A# `! h" o/ ]/ l<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>: b2 n  X2 ^" ]0 K  M# q3 e' Z
<pre><code class="language-javascript">// 这是单行注释' k/ n8 p9 r* J4 I9 P$ S
4 m+ }) v, L* r" Q5 O6 O9 v
/*& T* J9 I% o9 Y# z
这是多行注释的第一行,
4 Y! v6 Z  y3 T5 q- b1 P这是第二行。
- {( N6 q% G2 ?) ^, v*/% _+ C# z8 b6 y& m6 I
</code></pre>7 }  |7 q- t) _4 {$ K* Z
<h3 id="22-变量和常量">2.2 变量和常量</h3>
% b; H3 e; u  Z' k# t5 P2 o, c<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
% K3 b9 y5 U$ f. S4 I, F<ul>
1 P' y( |; ]+ W9 k, P<li>变量必须以字母开头</li>6 D. i7 J; }4 u" S; F7 e: _) T
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>8 [5 q% [7 c' D* |  g" p( _
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
8 |  o/ B9 s( S4 b, h) _</ul>
/ g2 q# g( I+ t2 {<p><code>var</code>定义的都为全局变量</p>
; V# T) C( j4 K5 s' J( \! ^<p><code>let</code>可以声明局部变量</p>
$ U/ s/ F9 V' \3 z" r<p><strong>声明变量:</strong></p>2 m( s: c2 q/ Z' H% j: L) _' c; v
<pre><code class="language-javascript">// 定义单个变量
/ r. P' _- U& }1 Y&gt; var name
0 U1 U( u$ o. b) ]: ]' e$ [&gt; name = 'Hans'- f3 R/ H2 }6 Q$ S# l
//定义并赋值! t& Q% G+ l* |- Y
&gt; var name = 'Hans'
* ?5 `5 I2 @& J* z  t. Y1 J, E&gt; name; w% I+ O; C6 N- j
'Hans'
2 g" t4 j2 u% j+ {' r1 _; n0 t% c4 F  `4 f( @
// 定义多个变量
" X* W6 p# U  k&gt; var name = "Hans", age = 186 b5 F& ~' w) S- |6 ^
&gt; name
' w1 q) {7 w, [" i7 H. k'Hans'+ r) M0 K, ^7 W- v: [
&gt; age, B  d6 x; d, g0 V+ V( n
18
9 p5 v2 \- R: ?2 ]' U2 i( [2 Y# X% M. E0 K/ J& I7 }; R
//多行使用反引号`` 类型python中的三引号  \4 h# q; e: ]
&gt; var text = `A young idler,
2 D6 P, ]1 O4 N7 Z0 b$ V) P- |an old beggar`
/ Y9 [% |# c! N3 J&gt; text) ~. w* H- q9 x. G4 }1 H/ [
'A young idler,\nan old beggar'' G4 C& X$ e5 A, _8 N% k
</code></pre>7 p+ x. M7 [+ Q& {7 d# }3 S
<p><strong>声明常量:</strong></p>
0 }1 n! E2 }' d0 p<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>0 {% |6 a* ^8 c2 }9 o8 ?
<pre><code class="language-javascript">&gt; const pi = 3.14
# U5 h# d! y7 u, x4 S&gt; pi
: R! ]" ~2 I; O/ b3.14
5 M  D" G& o. {/ Z  t&gt;  pi = 3.01
4 q$ v7 H0 a* @+ Z5 d- R1 w  I5 T1 hUncaught TypeError: Assignment to constant variable., `, Z5 q% v) G
    at &lt;anonymous&gt;:1:4
% `2 M" H9 @! |9 M! `( ^9 Q
1 N3 n- h7 U3 T/ z0 f</code></pre>0 O' t& l- B& T% c# {. U, b9 ~; N+ ?
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
( p$ s" m. j3 m- ?0 b# _6 J<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>9 o4 ]4 D$ e* x
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>: |& h* n0 I! o7 N& ]+ N/ u
<h4 id="231-number类型">2.3.1 Number类型</h4>& i' n% V! ^( \2 J( o! ?" q9 \
<pre><code class="language-javascript">&gt; var a = 5
0 r$ U' g( [2 i' e&gt; typeof a   //查看变量的类型  : a2 N) Y: x3 X! P2 V# h7 t$ j
number5 e' S9 k% t7 G5 M* b1 C# A

' ?7 I6 {! ^+ B# T6 O4 x&gt; var b = 1.3
% |+ b6 q  J, _5 o&gt; typeof b7 h- A" x: W# v8 x  u$ ?; X+ D1 ]
number
% f' u! T) l6 ?# v+ Y. k& E, z( R) ^2 f+ y* i, u) P
// 不管整型还是浮点型打开出来的结果都是number类型* K: a$ M0 X0 P/ c4 `: q/ \& a8 g: |

  p6 H* e+ W3 c- n: j6 S4 S/*
8 G. V0 v+ x+ bNaN:Not A Number6 N4 f4 C$ `9 u( S1 k/ G* e
NaN属于数值类型 表示的意思是 不是一个数字
. g9 r' e/ z" W; _% k! N*/+ L0 O2 {' V& t
& j7 W7 L) E. w+ I1 h8 @
parseInt('2345')  // 转整型, ?/ h+ o% r4 m6 ~1 N3 }& J
23458 ~9 m3 x& Z1 t  S7 L
parseInt('2345.5'); I9 M4 g0 F& z7 i+ n+ N* W" t
23456 {% A! p4 l$ W$ P1 R, Z
parseFloat('2345.5') // 转浮点型
$ n0 Q7 `1 C' Z3 T2345.5
3 j7 M0 f- U) p) G' O) mparseFloat('ABC')
) |) ^: k2 P0 }4 E1 nNaN
* u8 H3 t- X5 Z$ _parseInt('abc')
* O6 J+ r6 X+ x& m6 }. g' qNaN
2 I5 C$ w& n- z</code></pre>0 h/ o, l/ W6 A3 _) [4 ]
<h4 id="232-string类型">2.3.2 String类型</h4>) i; C. Z$ f; O* x) N
<pre><code class="language-javascript">&gt; var name = 'Hans'
6 F4 K9 g+ c1 U7 S- R1 p# L&gt; typeof name
; x4 I# |' N4 g7 S/ a7 o" u'string'
0 _# ]( j# N, Q1 o' O( }6 k0 c  B; P, g- h
//常用方法, S) I" ?2 j9 @/ S2 }
// 变量值长度
4 T$ D  E' k0 F1 l/ e, h" O0 _&gt; name.length) y6 S8 X' t1 q% T- W- b
4& F- q0 Y5 Q5 M) y$ v3 I' C7 _
// trim() 移除空白
7 ^! g1 \. [. ~# ^8 ^" s&gt; var a = '    ABC    '
, u0 x3 v" e& L5 U0 d4 ?&gt; a. T3 g' i. ~2 D# P
'    ABC    '0 p' R6 s: t( g1 y1 d( e8 U
&gt; a.trim()0 F5 L" W7 |' K! C- s& O3 F
'ABC'9 I' ~+ T) O7 |$ B( a2 Y, Y$ V4 |
//移除左边的空白
; p- V) x8 D- d; }1 [&gt; a.trimLeft()5 p7 G" Q1 k2 y' A- B. m
'ABC    '
7 i6 ]/ P0 m3 o' a4 X" @% i6 E; O//移除右边的空白: q. F0 y) |+ D! ]
&gt; a.trimRight()
& d! ]4 w7 [& {$ }- P8 o'    ABC'
" D6 Q3 ]$ B; @1 D! H: N3 d# G- E* z. G) N$ a4 u* U; T0 G& P& g
//返回第n个字符,从0开始
( \% o' R' B1 q2 _&gt; name
5 s$ G* v; F7 z! l# a) q: ^* ?, a1 v'Hans'
" }: X* S7 C) i; ]3 y&gt; name.charAt(3)
. I4 l9 Z& d& G7 W' y# {'s'
# d; i+ ?& a/ E7 h* e6 O# w" ?&gt; name.charAt()
1 H5 Y* ~, Q+ v3 u5 l3 X'H'
% \9 R) a$ O: c4 C5 ~7 w5 T&gt; name.charAt(1)& A/ P% |- }" n) `& ^
'a'2 M' d) X4 q$ |! |' N1 I# F! Y2 O6 i
- \9 `8 L  y* E7 z' ]
// 在javascript中推荐使用加号(+)拼接0 q$ M4 `: |2 l6 j
&gt; name
: i- T+ E0 j7 f3 i4 f' y'Hans'
6 i* ^) C' B* x# G# a/ J7 T6 \&gt; a$ }( V  T/ Q- A
'    ABC    '
& G5 E. q' V) \% r" n1 k! Z7 ]% h&gt; name + a
; W: }! K9 M% C) ^8 k9 R" R'Hans    ABC    '
4 P) C1 f* f  E* Q3 c' i5 W4 F' Z// 使用concat拼接
7 m9 _& f1 N$ l8 Q8 C/ ?9 h' V&gt; name.concat(a). Z9 y9 Y2 J% b
'Hans    ABC    '' B2 Q4 G0 @6 y- k  ~3 o

1 }" l6 p, `* S' m% o# O//indexOf(substring, start)子序列位置
; ]" s; D( L+ a% N" ?) d% n3 R# p! t3 d+ [1 z9 i1 p7 Z
&gt; text1 y0 O" C: d/ f* P" B
'A young idler,\nan old beggar'
! ^! l- q3 h9 Z6 r& K&gt; text.indexOf('young',0)4 h7 G. q9 {" |4 k; S% x
2
2 g3 o/ g: H% t. P5 _" `8 q, ^3 o% W; }# A+ v# D4 u
//.substring(from, to)        根据索引获取子序列
1 Z, f5 ?6 p, Z. ]' E# k: |3 B" J8 P&gt; text.substring(0,)
0 g& J6 `1 g* K& j'A young idler,\nan old beggar'
2 v; x7 T; S5 F9 C4 F2 N5 o) r&gt; text.substring(0,10)
& P7 ]; [! C7 }) {2 k'A young id'  Z& b8 r  O$ C4 m; J6 j+ H4 P
7 j5 [* Z  B& I; U  j/ Q% f
// .slice(start, end)        切片, 从0开始顾头不顾尾, M# p) s! C, l4 m
&gt; name.slice(0,3)
* x) Z- Z# g2 T$ I'Han'3 O4 ]- \' x, |* r
; d) D2 ]/ n0 p/ E4 C
// 转小写! Y0 S) x  ~' q( k$ T
&gt; name
, v0 _3 G  q8 @$ u'Hans'
9 _3 p! K4 A7 c  g" z. s&gt; name.toLowerCase()7 I% Y, v: G/ [, X/ @( M
'hans'9 Q) E& W% {4 ^
// 转大写( i* ^+ _# d+ f' g% O
&gt; name.toUpperCase()! t% }4 u& k8 J  ?" R
'HANS'
: G$ b% w$ ~* B' W- L) ~; _0 C* G4 S* b; c% |7 N5 r4 c
// 分隔  r8 l/ k5 ?, c9 Q. ~
&gt; name8 j! ?6 [# X7 o/ r/ j2 g4 c
'Hans'
* n* @4 T! b' N4 r. C0 D+ j( Y5 {&gt; name.split('a')
* y4 V  f- K" D(2)&nbsp;['H', 'ns']1 g4 A+ t: o* l) l3 Y  F  C
</code></pre>
) X* }7 k1 N4 O& g<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>% w9 @$ Y' P! c0 z
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
1 ~4 [; L2 E9 p* k! t" M9 Q<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>. |- r8 g6 M( Y8 u
<p><strong>null和undefined</strong></p>. n1 d/ ~( H- O- p' @6 v& J
<ul>
: @/ ?4 m# s4 b<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
; ^$ j+ R) Y. M* `, J<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
# [" a$ c. z7 y# X; a5 l' E</ul>
( b( K6 E4 |/ V2 r  H2 f$ k<h4 id="234-array数组">2.3.4 Array数组</h4>
, N7 D% a! x! }" U) ?) A<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>2 n6 Z5 E# l; C
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] , |$ `2 o9 v' g/ c) I7 R+ A
&gt; array1  F0 B& j0 z% Y' ?6 j( o7 Z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']' b, v0 }$ y3 c0 u. O- A9 l* v6 |0 V- t
&gt; console.log(array1[2])  //console.log打印类似python中的print1 O! T- l% r  t+ H1 k; B9 v, A
32 G# l, d! I3 z# l/ r' i
// length元素个数; c/ {8 q3 w1 e/ Y; U# f% X
&gt; array1.length, F2 a5 {% @+ F/ p5 v" z" W
6
8 |: B: f/ u: z4 d// 在尾部增加元素,类型append
/ ^  L& N7 {- e# y&gt; array1.push('D')
& Y2 I+ }8 {9 b0 O7
; w5 i6 K! T% ~. A: j&gt; array1
+ J( p2 J7 a' E) V6 z/ h1 V(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']/ }* ]: X. B9 a9 e
// 在头部增加元素; s3 n+ P& {2 O# y& T' ?& M
&gt; array1.unshift(0)2 J/ D0 f  B0 ?+ A5 ^. O: T
8
2 D' `. h& F1 g0 o9 {& h/ q&gt; array1: v/ c3 J5 v4 `
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']! B' `1 K* A, M; H

5 K2 Q% f1 A4 T3 D//取最后一个元素0 p" @. T. E6 a" K
&gt; array1.pop()! i& S6 x* q- D! y( y5 v* h
'D'4 n0 X) Q$ y% ?9 [- X# Y1 n' o
&gt; array18 N# r) v1 e8 C. e% _
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
' m3 H: R4 L7 K3 F; d, C8 \% C//取头部元素$ Q9 Q( Z0 e6 v7 g
&gt; array1.shift()7 f' O9 X* ]2 Q/ N& R
03 P  L) _5 @% P! a1 p! |9 \
&gt; array1
2 A1 W1 ?' Z( w) O/ o, n(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 e' b! p/ I. s4 k7 J! q8 ^; n: G( V- C- z/ n& K* u
//切片, 从0开始顾头不顾尾; c! T" o: d& o* O0 J
&gt; array1.slice(3,6)
% G; _# ]; _2 x; n0 ~/ f(3)&nbsp;['a', 'b', 'c']7 R$ Q' m, m0 q" c* a5 q
// 反转: J# Z- C  {- l; q6 ?
&gt; array1.reverse()
. R& x) L: \3 A/ r& I) R  k3 w; U% z(6)&nbsp;['c', 'b', 'a', 3, 2, 1]' b0 x" |( ]; W5 c
// 将数组元素连接成字符串" A5 p2 Q+ q9 p( g" B
&gt; array1.join() // 什么不都写默认使用逗号分隔& c9 `# a9 a6 N2 t: ~$ K. |6 G# p
'c,b,a,3,2,1'
8 S3 c/ E* l6 {7 R& ~; u+ T, j0 p&gt; array1.join('')% B  I6 |/ c2 b
'cba321'/ L* y! p5 e( n
&gt; array1.join('|')' O# @  t* M5 |4 ]# m$ h% E
'c|b|a|3|2|1'3 `, \! V9 o7 v% O

1 `1 @! c3 v" ?- N1 l: `0 h' M// 连接数组& M/ V, l; \5 m  Y$ {
&gt; var array2 = ['A','B','C']
) S4 F, J9 ?" |" v$ M&gt; array1.concat(array2)
/ w( |" ~1 ?, d(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
2 y/ `5 e7 K4 x: A$ D/ Y, W+ G
2 T: e" {- w/ `/ D/ j// 排序
/ T* K' ^: C9 o( d3 q&gt; array1.sort()
" P( \! i* J2 Q# }# P+ K% M3 |4 t(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- @! d. T  _! j- K3 |
( |4 m4 q: t' z) o) E, V4 B6 i3 s// 删除元素,并可以向数据组中添加新元素(可选)
6 h; h: \( I0 f7 C  R&gt; array1.splice(3,3)  // 删除元素! W3 ]. G/ ~) B  `' `/ B
(3)&nbsp;['a', 'b', 'c']
6 u( ~7 Y" b7 @6 Y- Z# R% r( i&gt; array1$ Q9 r" x# G  k% k# E, K: C
(3)&nbsp;[1, 2, 3]
3 j  A% d! G' O0 a; u&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
% w* }; Z% ?( O[]; d/ j! n! h5 i" u
&gt; array1: d2 [3 B+ Q( S+ \# S, ^
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']- ^8 J/ c2 D# X& H# h

. f6 {: V/ ]+ Z' z/*6 j+ A- Z. a: ]$ A( h' V4 l
splice(index,howmany,item1,.....,itemX)
7 e4 B- |5 F- ]index:必需,必须是数字。规定从何处添加/删除元素。
/ V" o, ?! k2 N9 ]0 N7 x* Ihowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
& P1 |5 b% g) A5 @1 Qitem1, ..., itemX        可选。要添加到数组的新元素
; A, B3 X: ~) o+ ~*/7 {! W  v; _0 t; p  l
( b8 G' w2 ]  @0 @$ C
// forEach()        将数组的每个元素传递给回调函数
  e3 c, E5 e6 v&gt; array1.forEach(function test(n){console.log(n)})& X, m( V1 u' F/ O
1
/ P; R8 d& c7 H0 [9 k+ w" h 2
; f0 I, Y( U0 l0 a2 R5 T, ^7 z) j& Z 3
+ |, M0 h& m0 t: t0 G: a0 @ A$ f( h! w' U7 ]  o: y$ X
B) E0 L8 ^, H* u8 t- M5 L4 r
C4 M0 W% [  ~; i- q1 |
// 返回一个数组元素调用函数处理后的值的新数组
  w; @3 N& q1 S1 |) o4 _&gt; array1.map(function(value){return value +1})
5 D0 p! F/ U. s! m6 v' y: F6 ~8 Q(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
& _0 l; m2 m* O9 a</code></pre>0 M) h) N  |3 g. m! o+ p* {) ]9 j
<h3 id="24-运算符">2.4 运算符</h3>
- _$ ~) p/ K' ?' E; W<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( B! f5 h) r6 }1 ?
<p><code>+ - * / % ++ --</code></p>( B/ H# n1 t" s5 H
<pre><code class="language-javascript">&gt; var a = 6
6 F! b% u3 S1 t&gt; var b = 3
) ?5 n- E  M  q( p4 f, F6 t// 加' |  ?9 T- k; W" M; `$ f( F
&gt; a + b
- J# O, c7 n9 p: l9
  o. N1 w3 G# i// 减4 ?! ~$ D" d5 H" R0 c( O6 ^
&gt; a - b  M/ Z" S+ s% z
3
2 U3 e7 r+ T9 E// 乘' k/ {2 Q) s" k  _! B+ R1 i7 {' u4 X3 W
&gt; a * b
# _1 o& u5 w0 }" Z: O+ D18
" K& V3 N# f; ]# @: M// 除- O; A( K2 K, ?& f9 Y+ H5 g
&gt; a / b" h+ v3 u1 c( z- `% |
2( M' V% x8 ]2 X
// 取模(取余)' t8 `1 d' a* W
&gt; a % b
( p3 y" K& [7 Z( q9 N$ E) l$ N0
2 L9 G1 u: w. A  v8 }// 自增1(先赋值再增1)# g# E- K/ X& v0 O( t* O3 E
&gt; a++( d- G' b7 D! o; W0 d- v3 n, ?( Q8 m& I+ g
6
( n9 a" ~, V& J/ e&gt; a" Q9 J" ]: }; ?( m
7
9 E# |. L. n% }// 自减1(先赋值再减1)* V" n, w. Q( \6 c8 |5 O" W' y4 A6 g/ o
&gt; a--. q2 U9 e  I3 K* V4 }: _
7
9 M3 M; A1 x/ u&gt; a
: T4 h0 p9 i2 Z6$ }( S, @, \' o9 ]
// 自增1(先增1再赋值)
# L0 Z$ q- z" N6 l$ P&gt; ++a
% f4 T$ @' K: p; [4 W  e7. g$ o1 N# B: i+ @
// 自减1(先减1再赋值)
" r% A; W9 D; g! A&gt; --a" ~9 K' l1 o' r! S
6
5 U9 V9 _% P2 b% w&gt; a
: z; {9 l1 Y- q7 M0 H6 C7 `6
; ?9 N& c3 j$ Q# ^: _
; L( w# ^- f2 M8 V* O. w- c//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
" Q! h$ @: F( i# e% ~/ q9 t8 y</code></pre>4 G/ J3 G: K9 G; @! n' p# ]1 s3 r
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
% n4 P# g  I4 v. z, O<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>3 x2 u) G) _3 ~0 M" k
<pre><code class="language-javascript">// 大于. X4 Y9 Q2 d' f% h& E5 t
&gt; a &gt; b8 _& I. D3 m5 }2 i9 Z
true; c" |) @$ K% O3 b6 u3 R; Q0 W
// 大于等于
  l& H& o3 j7 ?1 G&gt; a &gt;= b
; ]; W3 ^/ i8 Q+ `$ Ytrue
. Z6 a3 l, \. E# P4 r( z// 小于2 t- k9 n* W& A; H
&gt; a &lt; b
  Z4 e! ^! D) wfalse
7 D, U0 k! r. a" W/ g) Q4 j) Y// 小于等于6 h7 p+ V( J6 }
&gt; a &lt;= b
  R9 b0 `3 y8 j$ o' r. M; _; u# yfalse
, J& ]$ l$ l4 Z& B! H% P$ A// 弱不等于' P; S- T7 y$ F7 v4 @
&gt; a != b% C# E  b8 g- b( ^2 Q# \
true3 ?' L2 V( D6 V5 z
// 弱等于9 R  F$ z6 I2 n: E8 Y0 a; H
&gt; 1 == '1'9 F* I7 @. R5 J0 h2 l5 e
true
, H& ~: F8 f! K2 ?. X5 K! v. m, R% N// 强等于
: O. {! F; V/ j' H&gt; 1 === '1'
$ G0 w9 w2 F& |( }: Z% Gfalse
5 X( q( _+ O- a: F( t// 强不等于; u; Q% y8 a! U
&gt; 1 !== '1'
& a$ B' M) M  p4 g* @4 B, M! ?true
7 N0 {7 E6 J# T. Y9 X  d8 g) j, y0 N4 m$ n$ G+ R$ `
/*
  [4 n( C! f6 t$ m; X- UJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 {: d- k' O8 G# {
*// n4 m/ C% T8 s# G, h& f/ c1 P
</code></pre>
& [" L, m- }' q<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>* o5 P9 \5 W) i5 J0 w2 ]
<p><code>&amp;&amp; || !</code></p>* B: ?! y6 x) |7 s; R
<pre><code class="language-javascript">&amp;&amp; 与
/ \4 E$ U& E1 ?% Z- l5 t# o|| or 5 _! N: c9 `6 C2 I
! 非8 @5 I9 d0 m8 B3 N
</code></pre>
0 m" A! J' P+ d4 B# U<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>. b7 F' z# H0 ~4 |$ p7 R. c! l
<p><code>= += -= *= /=</code></p>2 w* _2 i% I( u, i' C1 @6 K
<pre><code class="language-javascript">// 赋值. b# y4 C# N8 k8 v& T! J
&gt; var x = 3
9 Z2 l  d/ _8 l0 B6 Y& W// 加等于6 o: M2 E3 U7 V* O# m! }/ j
&gt; x += 27 @/ ]) l0 B9 {5 Q  J& J" L+ c
57 n5 F4 k( Q8 P9 x( {  {- T
// 减等于, e. B: P+ \" l- Q7 D" x
&gt; x -= 1
/ Y/ x' _- [* @4* I( ]% o" u  E" i8 j, F4 X+ c
// 乘等于
0 [* z; V2 Q" d9 |&gt; x *= 2
6 C7 {% T) G4 `8
2 @: ]. @4 v/ o// 除等于
2 j# Q7 y/ p1 p2 `6 i$ x&gt; x /= 2
  ]( G7 [" |' s' i* B4+ ^5 V+ ^) M- N( K+ z0 `, v& H) v
</code></pre>
/ z$ t# @4 I1 x6 U7 ^<h3 id="25-流程控制">2.5 流程控制</h3>+ a& [# f% \# V9 Q8 o  p+ V9 }( C
<h4 id="251-if">2.5.1 if</h4>! f# R2 Z) i6 n$ M& C' d9 X6 @+ b
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
1 \% d' Z  W  c4 [; S5 N( M6 x  A. U
&gt; var x = 3- j6 _) L# ^: ^( y. Q, K- n
&gt; if (x &gt; 2){console.log("OK")}
6 x( I6 X( p- O. e OK7 f$ Z" ?( ]9 F4 p/ O: c
0 s' O. K9 P4 E* O1 h7 c
2, if(条件){条件成立执行代码}
# j& x" ?5 A2 l  s6 U        else{条件不成立执行代码}
6 n: o9 [' m2 m# h9 f! e
2 a$ z0 K6 W0 }6 R* q: s&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
  {8 U$ r- \. I9 z; A+ t0 |( b'NO'/ ~/ \5 E# k3 w' I$ l
8 N1 |/ r0 v/ W; g6 S1 k5 k0 [
3, if(条件1){条件1成立执行代码}
7 p- q6 l7 A' D6 a        else if(条件2){条件2成立执行代码}/ `& o. a: e9 H' b  }' G, K# Q) V, D
    else{上面条件都不成立执行代码}) p' E' u; T! M0 ?; |

$ w' F# k7 }4 _9 v2 Q2 G&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
2 u9 w1 n  f6 j8 _$ X' H Ha" f2 `' N4 q/ `( b$ S$ }
</code></pre>$ m7 P. b/ c# [( k+ A
<h4 id="252-switch">2.5.2 switch</h4>
, c( ^5 x2 L6 u6 J  V: z. |. m<pre><code class="language-javascript">var day = new Date().getDay();0 l* c  d# @2 T( b- t
switch (day) {* r- C  n) |2 S3 a2 D, X
  case 0:
( ~% D" `0 ]& ^" N2 P" ?, X0 W  console.log("Sunday");' x; K2 G% h% I3 t
  break;# s6 ~1 t, W' X7 i3 P
  case 1:) o+ H% n& O- ^2 d0 N. W
  console.log("Monday");
5 T' `- H" V9 O3 D  break;
2 ?+ k1 m2 n. ^default:, M, k0 |* Y( Q& ]" H
  console.log("不在范围")6 q( f( t: J' F2 i) C7 S2 O: U
}! M% h2 |+ @2 L
不在范围
8 Q2 O; M% K  ]</code></pre>
2 G) X: U+ {( v5 E0 D+ _<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>9 v3 M! A/ K4 }$ f( e2 B( o- f) E7 x
<h4 id="253-for">2.5.3 for</h4>
  a* b3 E- t6 A# P( G! ?7 C<pre><code class="language-python">// for 循环
4 w; ^# `; m: v2 I        for(起始值;循环条件;每次循环后执行的操作){0 _! q( R- \; H$ N& U
        for循环体代码
4 M; R" \7 v3 q# O0 _2 ]    }
1 k6 Y2 }3 O; P) K6 C4 T: x6 a  C" _3 p
for (var i = 0; i&lt;10; i++){
$ J# z! `4 K: S    console.log(i)8 j; c! z" q" `& o: \6 N
}5 k& V' }7 h5 t) U7 Y
        0
/ D+ I  x) P* ]. }1 n        1- @2 M( O+ u* c3 L
        25 s5 c3 g5 S8 X7 k( ]& W" M
        3
% y) E% B! [) T' G3 n+ M        44 w/ {& O, f$ H# d" Y% z
        5. n% e) _5 H" T$ @* @9 ]1 N
        6! V& h# b) b7 _4 q" f! b0 w! u
        7
: d- V/ b9 Q" l$ }; a& z        8
- {7 |7 C3 G) p5 Q9 d7 N        9
/ [7 k& Z( c6 x" g</code></pre>$ }. v9 r; A2 [
<h4 id="254-while">2.5.4 while</h4>
& |3 C& K; U/ U. a2 @3 S  _<pre><code class="language-javascript">// while 循环
2 M  X# U# o5 U8 v        while(循环条件){% r( C, d& i8 I1 T
        循环体代码: @! a% b/ I! {5 K3 x, _( g
    }
. h; U) R$ q$ p7 H% B, Y+ |! y0 ^2 v  g5 S4 n4 N6 ]& Q$ A
&gt; var i = 0
8 ]# P1 H3 V- C  U1 _2 g&gt; while(i&lt;10){, \$ M) s, [' s# }
    console.log(i)
+ G7 f) D- o# J    i++9 u0 M6 v8 ^! v3 t8 V. |
}& ]  r8 g6 b: `% C. Q
06 l9 z; `; w' @5 E6 s6 |6 E! y
1& w( T9 U* y4 Y; |* v# ?
2. Q" H: ~: e3 I6 `
3
7 n7 \) c9 z1 {: Y% O3 m 4/ z- n5 C( {: D( X2 [9 r' b
5
, }) A3 L& @  U# h8 M, q* j 6: O( `# w# h! B. e1 b' ?
7
7 E5 `2 C/ j' T8 i0 h/ x' m  I 8+ f3 h2 @7 y( P2 S) ~6 |
90 T& Z3 J6 s4 C5 v" T3 A4 z
</code></pre>
, J/ P% [' [' j6 x<h4 id="255-break和continue">2.5.5 break和continue</h4>
0 S& S+ e3 t+ e1 z<pre><code class="language-javascript">// break
" k" P! c( L9 j! a, B9 C( y; g% ifor (var i = 0; i&lt;10; i++){
3 ]  h, T; ?& h" J- \    if (i == 5){break}
% P7 w+ [, C9 f: O# d8 C( E    console.log(i)2 |' o5 M% u( l, f( u1 k$ L
}
& {2 `. x- G! Z% o 0
7 P8 q. J5 {: d8 ]& ?$ R8 h+ r/ x 1+ [$ o. v' Q6 a( G; F: p; z
2
4 C6 I1 {' q  r 3
" Q$ g, I& S4 q 41 |& ?! A7 D5 ?8 Z! j
// continue9 I8 u6 g2 L* [% e5 O
for (var i = 0; i&lt;10; i++){
$ n' q# c" {8 D! z2 d3 K    if (i == 5){continue}
# ~* _8 M  W  Y0 M9 V0 B    console.log(i)
6 h4 |% k6 @! `9 ^8 f9 |* O, A}
. U! D! ~, n+ T0 | 0
3 A8 J* S, P1 J* T 1
+ n  b/ W4 B3 w! j 2
. S1 L) d6 Q  N. {' n" [, i 3
0 F! o9 }( S  y7 b+ l 49 n9 P( W$ L& l6 M5 ?& w
6
- a/ d) ]% d* y' a2 ~ 7
1 D; P5 Q- X/ R- L, r4 ~ 8
9 J. P! K! x1 n9 |. o/ r 9
0 G3 L* P" I, v' E, X7 _
0 k# W. g: b% t8 b1 |</code></pre>+ J3 Z( E; F  t$ \, W
<h3 id="26-三元运算">2.6 三元运算</h3>
) \/ E. ?: N/ Z6 K# d<pre><code class="language-javascript">&gt; a& W; P$ k" h7 b" p
6- z. ?1 o! Q9 G5 G' e4 C
&gt; b
' p) a! |# D% l- a0 _3
  Q' A8 u5 a6 R# S
% o+ V+ R, g8 B* l$ F" P3 n//条件成立c为a的值,不成立c为b的值) y( L0 {2 Q/ k+ i' @. G+ p
&gt; var c = a &gt; b ? a : b
  _' Y/ O/ L- n$ B4 [& H&gt; c( ^6 Z$ d2 \" x7 o
6  ?8 z5 O  Z- b/ G- r/ I% W
! B; G; C1 k- f4 f$ ^, p8 K- {
// 三元运算可以嵌套; j% o) l3 e) v( e
</code></pre>! {/ A. w: E. p- K
<h3 id="27-函数">2.7 函数</h3>
* g8 [1 w4 l! W+ B5 N* h/ ^<pre><code class="language-javascript">1. 普通函数
. C: I0 f) s- c4 s0 N) V, \; v" f&gt; function foo1(){
2 v' _# W; |3 z; N* ~6 U8 z  ]9 L    console.log("Hi")
. B' ?4 y: z' \  f}
: o8 X: Q7 h8 s
5 T1 }4 u" Y0 n' H' i&gt; foo1()
! {& W7 c6 W8 }/ Z, [        Hi
5 `$ P5 l5 c6 {  H' L2. 带参数函数
' W+ \6 b' z4 @" Q4 E&gt; function foo1(name){1 [3 F$ R- P3 d* D! o' M* p
console.log("Hi",name)
- ~! g7 B5 k, @+ a" T$ L! h# }$ d7 A}
2 {% j8 M; ?$ K! k! y
* _- ^& y' i" }0 O, a9 X&gt; foo1("Hans")
4 n: c% P8 j% W5 j; ZHi Hans
' S& z2 I2 M* Z% E1 Z, y* Y! z
, Y0 l, \% i: v3 u. {&gt; var name = "Hello"
; g4 E: D5 I- P0 K/ W* z&gt; foo1(name): ]0 Z# |2 b6 Y! G+ T! ~9 H
Hi Hello6 T9 b; w' H7 S9 e* ~: S

* g& r; F: e  n1 q2 O3. 带返回值函数% j4 G  N& t# H
&gt; function foo1(a,b){
5 K: I9 l. P7 b0 M0 u9 d        return a + b   
) l( E. Z8 e: t$ R; o, L# E}6 R* C& G" y, K  a. V
&gt; foo1(1,2)0 o- _' l. [; O& g9 Z, ^) w' h
3, g/ L' V$ u" o, }4 `
&gt; var a = foo1(10,20)  //接受函数返回值7 O% x# L! q8 y4 Q
&gt; a* ?" d$ I. P3 e. U3 d+ }
30
9 r, L4 J: z6 x+ M$ t& C
7 O# q$ w; g9 R: j4. 匿名函数
. ?' v: I5 w/ b7 a- i&gt; var sum = function(a, b){
3 {9 {' E. V. ~9 d! I  M) e4 ?  return a + b;( N) |! L7 u9 D4 b
}
5 c1 B: L* U; B1 M) G+ X+ k2 h&gt; sum(1,2)
2 y2 E" m2 e: B; h( j1 q* r5 }& I% |3
4 j( t$ ^- E& N2 Q2 E2 p) ?% R3 F8 s1 S6 j2 @. k- i, @9 w
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱9 R; u9 c' _. M# J' b: _
&gt; (function(a, b){
! C/ `7 {+ h" c2 n  return a + b
( A3 k, y: o$ x})(10, 20)/ f% {/ U* x5 M& @  ~4 s
30
2 g2 U2 d# h8 r! ~. x0 u' L2 b+ Z- ?  }( `
5. 闭包函数6 w8 a( m6 P4 M' I: N
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
5 u" L/ X7 u" L$ S+ t+ l  `var city = "BJ"$ m4 e# G7 z% M" |; m3 U
function f(){
$ W$ I2 F( v9 G# V4 ]/ Q    var city = "SH"
. L7 w) }9 @" q1 J    function inner(){4 H5 q) d( Y4 I. ^+ h, ]( N, o
        console.log(city)# V( T% T. h2 c3 N" b: G
    }5 `- }5 r* C" D6 n1 q8 w
    return inner
+ m( [& |$ `$ n2 J& d0 ^' e  }0 e, ?}
2 B: |; t  e$ a0 p- svar ret = f()
' {' W$ ^: N/ ]$ g: @9 M+ s& Wret()* K) o4 i0 N6 B5 T; R4 \. j
执行结果:
4 X+ h4 Z" ^2 o2 P+ i- _* ]SH% l0 ?$ g0 Z* e
3 X# v0 Q3 S* Y  j3 T
</code></pre>
( p2 V5 h4 w! |1 V7 J<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>3 V; M! V9 A9 @6 A; G( t. d2 |
<pre><code class="language-javascript">var f = v =&gt; v;
4 z0 I( g1 B2 z8 E  F7 E// 等同于
9 V5 v! \) Y  E8 P. G- x. gvar f = function(v){; r& k- F: V: l8 P& Z
  return v;- D# Y* }0 n' J" \
}
: Q6 F7 u) D. C0 J</code></pre>
% Y1 t+ W. o. ?0 H<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, I: K8 Y" l* k- @<pre><code class="language-javascript">function foo1(a,b){
  `; N/ g5 n* q3 K) [, ~; ?9 ^    console.log(arguments.length)  //参数的个数
1 G) C6 Y  u3 m. W+ v( F5 u    console.log(arguments[0]) // 第一个参数的值
  b; a& ^0 c1 D7 z' b) e/ ]        return a + b   
/ n0 m2 S5 I' o" A; X+ z0 B. w}
5 v: Q; @$ q. l! t! C) `foo1(10,20)$ h( I9 ?( S3 w5 A3 Z; U. ]
结果:4 K2 `  h: w0 z% n$ [- O; ~& B
2          //参数的个数
( R+ ]5 `" }5 j: U10        // 第一个参数的值
- m; s4 D* [2 n% }4 Z30        // 返回相加的结果& [* o% z, z4 Q+ y
</code></pre>! N* `: R1 S. A. g3 Y
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
2 |5 @7 v- ^3 x8 Y3 j<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
0 u1 v0 x4 Z, N( g' B<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
, w) ]7 [8 a! K6 h2 x. G5 M& u" v<h4 id="281-date对象">2.8.1 Date对象</h4>9 L" U6 s$ k, ]  v! O! [, T& z
<pre><code class="language-javascript">&gt; var data_test = new Date()
9 |  S3 B1 v, f: }5 n&gt; data_test- r( l6 f$ P( M2 ]2 d! Z) Y2 q1 ~
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)# y) x* L: o( F4 h6 O9 a
&gt; data_test.toLocaleString()
: ^$ A1 m, X9 ~9 j'2022/2/11 下午9:44:43'! }7 c* _  ?  L7 m0 p" h' i2 D6 @( u2 }
5 A: i/ x' k7 P) H
&gt; data_test.toLocaleDateString()8 Z% s7 @3 \% ]4 h- m; D/ e$ P5 u) u
'2022/2/11'
: A# L- c# X7 _: }  W" A9 ]5 z
. ]0 [7 I/ J8 E& H/ |4 k&gt; var data_test2  = new Date("2022/2/11 9:44:43")
4 C7 T7 |+ K6 [7 X, ?& N&gt; data_test2.toLocaleString(): Y+ M8 e& q$ t" e4 n& |, L
'2022/2/11 上午9:44:43'4 c* S! W  _5 P8 C% X
5 X. m; g5 y8 w) n' o  W# p& S; i+ A  b
// 获取当前几号5 S3 |$ X! u8 Z$ _6 s3 g( L3 b" V
&gt; data_test.getDate()
3 q( ^# U0 h9 ~* G- ?8 M6 c11
" G# `2 J6 a8 e' s, f' l// 获取星期几,数字表示& {2 H7 D. a: N9 S% o; A" m
&gt; data_test.getDay()  
- C) ~) G! j8 u) u# P+ r54 o* I+ \- U0 A6 a0 O/ t
// 获取月份(0-11)
) l9 ~5 Z7 q9 y! z4 O3 N&gt; data_test.getMonth()" y8 M! \$ f2 G
1
8 V8 l' J; m  \* c5 l  Q7 H2 [// 获取完整年份* z5 D( A4 C" N  Y4 ^9 [2 ^
&gt; data_test.getFullYear()
8 t5 l; B- E- F8 O2022, l5 e  w3 y$ R3 p
// 获取时4 p! n4 D3 U7 |0 l) D; _
&gt; data_test.getHours()" ]" N! i% w1 I" ^0 b+ F
21. a% K& K- r2 n( \- P
// 获取分
* n- l7 t) t5 V" ^&gt; data_test.getMinutes()
7 B, s- W1 m) V/ y/ @44
! c5 m0 o0 N: W; K* |% L// 获取秒( N, Y5 J1 U- ?( g
&gt; data_test.getSeconds()
! K* I8 `: o6 E& \43
: g& `" _% ~% d// 获取毫秒
8 H8 z( G; Z# x* p9 w&gt; data_test.getMilliseconds()( h5 w, `2 k0 O0 a0 E" q
290
. c5 h2 y! e8 [! f// 获取时间戳
. R( p  i- K2 U' w1 `8 X&gt; data_test.getTime()4 U6 \; n& }2 g* R. b4 b; l
1644587083290
) E, s% l. ~) t</code></pre>, U0 w# Z7 o6 k+ |. Q
<h4 id="282-json对象">2.8.2 Json对象</h4>9 F- \  V$ A# z2 w/ J4 @
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
- q0 d/ ~, F9 j) A. WJSON.parse()  // 反序列化,把JSON字符串转换成对象
/ d! A* K; c0 k) k" i( S9 J9 ]: @. D: p& R6 p$ ~+ D2 Z3 n
// 序列化9 V* L/ _! M' x& m
&gt; var jstojson = JSON.stringify(person)
; k2 [! I" \1 n&gt; jstojson  
1 i$ f2 P: L# m/ U3 H6 |9 L( C) m'{"Name":"Hans","Age":18}'- y; [- P$ B3 g$ F  j

$ T  J$ p7 |/ J9 S1 g0 I% u1 X: E// 反序列化$ J3 C! {" l  z
&gt; var x = JSON.parse(jstojson)
( D* j$ b0 X8 p. r& M&gt; x  \' m: v4 U( [' W- }, G* o
{Name: 'Hans', Age: 18}$ i) O2 G8 ~1 u1 F
&gt; x.Age
9 V5 C; g) Q3 V18
7 G2 c" F/ A# z: g8 K4 J! a</code></pre>
0 @, D! J. U& I. o- [* Z' u<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>' c/ D' s+ F9 y- d& _
<p>正则</p>& h+ H' g: I- j
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
) [* v7 s9 f) z3 o, b" B$ O+ R&gt; reg1/ H2 y4 m. t6 Z8 F) K3 @
/^[a-zA-Z][a-zA-Z0-9]{4,7}/5 E* C& [0 q. s. M( u
&gt; reg1.test("Hans666")+ L5 b- B) {1 N- T: J3 I: V; y+ i
true1 I! R* m* c; X

$ y# K# [% n1 \1 k" E& h&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/* _  O* J0 G6 f  Y) z; b6 _
&gt; reg2
  D5 Z2 {6 t7 [% l+ |/^[a-zA-Z][a-zA-Z0-9]{4,7}/) O9 `, q( G* u3 ?: @$ n
&gt; reg2.test('Hasdfa')
' {: j9 J: s( }9 u1 V9 ?true4 e) i2 p& X8 q' y# W  ]

/ K& |6 _1 p+ V* G, q3 y" l+ j全局匹配:
2 a2 d. p0 i' }9 k; d&gt; name2 H6 W4 M8 t+ d8 B) b0 ]$ S
'Hello'/ |- d/ T* {% U. L  G( G
&gt; name.match(/l/), q! t) t, Q8 T; k3 [2 }, s& O
['l', index: 2, input: 'Hello', groups: undefined]0 }% A+ L6 G9 o6 {" N- V' J
" U* @* N  b+ o0 d$ i) ^
&gt; name.match(/l/g)
8 |, L' I$ s% G, C8 C(2)&nbsp;['l', 'l']
3 C: }5 B7 [) D+ j// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
& M% P: H9 ]2 p% U4 ?; C
: W1 [+ Y; n4 i6 N6 Q$ v9 H8 h全局匹配注意事项:
, q* H; H( C& |&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g. f! D0 a: |7 K" u9 W
&gt; reg2.test('Hasdfa')
) Q$ Y/ i  s, N9 ]9 \4 |( T! K" f& otrue. z0 D2 Q, n% I$ G
&gt;reg2.lastIndex;( [; ]6 a8 M, W! ]. i( f+ h4 l
6
/ P* [0 @! R7 n6 P# e! |9 V&gt; reg2.test('Hasdfa')8 w% S& y& k0 t5 B7 K- ~: \" D
false# S, S) j1 z, C1 v4 P' h/ l
&gt; reg2.lastIndex;
# ~8 G' W# Y: b8 [. m. Q' X8 R0
! J* [( @1 D/ S+ e( h! x  y&gt; reg2.test('Hasdfa')  T6 L, g  d* [! A* y
true# \5 W& A0 d3 C( V' b+ y" D
&gt; reg2.lastIndex;
5 b+ w, L5 j2 g6
0 G5 q% B/ S+ h/ X4 A% p&gt; reg2.test('Hasdfa')  \$ T, T2 \8 a) h; E+ B+ r! R0 s
false
  T# m( S7 y1 L&gt; reg2.lastIndex;
6 D7 d: v4 F% H( j6 j5 r/ }6 h0
- ^' w; y' V  y, u- |// 全局匹配会有一个lastindex属性
. \, T. w+ C3 e9 B. o&gt; reg2.test()9 F- H* c$ j, z+ T- ^( _- M
false; U, n4 x8 |2 D1 A3 k
&gt; reg2.test()
6 r2 _* r! f6 Atrue* z& Z7 Y4 @) C; B* F5 L
// 校验时不传参数默认传的是undefined
, N4 S- x6 `6 u</code></pre>
/ r7 j/ X6 V% n# o) S<h4 id="284-自定义对象">2.8.4 自定义对象</h4>$ _" y1 u8 L6 B, f+ F1 Q- Q
<p>就相当于是<code>python</code>中的字典</p>2 M' Z) U  y7 C2 W
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
9 Y3 s% P1 l" P1 ]' X- Z- t&gt; person
; f, s3 z3 w" u4 @{Name: 'Hans', Age: 18}
+ M8 K$ Q' J6 V: P. `. B&gt; person.Name
* D" ~! L9 }* F  s/ b8 t2 }'Hans'
0 [( g1 P5 X; @&gt; person["Name"]- g. A8 ~% n, N. \
'Hans'+ R, g3 q: E6 k" [

; n& a+ ]2 k6 y// 也可以使用new Object创建
+ k- g3 X1 |* H. C&gt; var person2 = new Object()
& C1 {0 A% t6 N7 y* E" \- z8 L&gt; person2.name = "Hello"
; z& C7 p* D/ Y'Hello'
2 @' X3 O3 _  g( K( G6 g6 _&gt; person2.age = 20
: Z( B% E( g, W20% |; ~6 f2 C5 N( v: @  v- {
</code></pre>  z6 Q  Y" F. t: ?2 U! S$ x
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
! x6 m7 q; T) w- V1 Z$ O<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>1 k2 t. j$ N0 [2 f3 ]9 Y
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>: C- j7 O; ~6 q% X; c% f
<h3 id="31-window-对象">3.1 window 对象</h3>
2 U9 Y6 B4 I0 x5 |<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
5 W( t1 k) F( J+ }3 R/ ~  i<pre><code class="language-python">//览器窗口的内部高度, I4 V3 h8 i2 _( s; m
window.innerHeight . R1 Q0 J; H1 h5 V4 H
706% S9 f& l" {0 _/ f
//浏览器窗口的内部宽度
' ~! K# V' Z) D: d7 `* f/ B- Z0 Y! t1 Pwindow.innerWidth
# l% t8 S# E/ F( \2 |% b( m9 i3 N1522+ H7 g1 B; c- y' c
// 打开新窗口% R/ w% P6 Q4 I) @+ s9 h3 q
window.open('https://www.baidu.com')8 {+ A: S' V( d4 P- L2 Q2 v$ i
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}! I& w3 _) o7 z6 U2 a
// 关闭当前窗口
$ m% H2 o: q+ H8 Y3 B( q4 p0 Awindow.close() - s1 H$ [' l. L& e" E2 k! b
//  后退一页+ b7 h: c2 k1 W* }7 d$ ~, h
window.history.back()
# n  a" Q. x# r  i. M// 前进一页1 H$ i. P( L, S2 y1 q3 a9 E
window.history.forward() $ R. V' m' E6 ~0 F  l) X
//Web浏览器全称
  R0 R8 J& A1 Q0 G+ H2 R) a6 H& |window.navigator.appName
1 s2 {- c2 G" W0 k1 W5 Z+ a'Netscape'
* e& I% K; X; a0 ^7 k// Web浏览器厂商和版本的详细字符串1 u+ U6 E! j0 A* U
window.navigator.appVersion
* F/ v- a, g2 y* n- U'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% b; }1 s5 S8 m$ Z- J* E; V
// 客户端绝大部分信息" E" D* l3 ?( A, d; x9 R6 p( K
window.navigator.userAgent
$ I5 i3 _0 [0 l- X( w% P'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) [6 ?0 X" o& _# M// 浏览器运行所在的操作系统
( n" w2 J8 b& R8 @window.navigator.platform
. D% b3 q; A- ?5 P7 M5 R' C'Win32'
: k4 \% k3 o5 o2 q2 U0 _- ~; `
2 t# }9 t4 Z9 D) k7 g, G* s//  获取URL3 K0 V" k( k; d5 k+ \3 O
window.location.href" _9 d3 v, r9 M; R( y
// 跳转到指定页面
; d& B1 W4 ]9 V2 p, nwindow.location.href='https://www.baidu.com'# e' x3 m$ ^! a6 ^9 n9 x9 B
// 重新加载页面* l# v; V- T, \) f
window.location.reload() & n6 T. {8 D3 Z1 q0 n  G: l" E. w
</code></pre>  w3 ?* O1 [, d
<h3 id="32-弹出框">3.2 弹出框</h3>
! P3 w. o; {& w0 k3 [5 u& z( t8 O<p>三种消息框:警告框、确认框、提示框。</p>
. Y; }* x+ Y+ o9 ~0 j# L<h4 id="321-警告框">3.2.1 警告框</h4>; `4 o: g" o- }7 }; l: R+ M( b8 ?" K
<pre><code class="language-javascript">alert("Hello")
" x1 i2 n1 e/ F</code></pre>1 }2 l2 N9 Z2 u. [4 Y. @
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
6 N% h- T. P' c/ v; {+ {<h4 id="322-确认框">3.2.2 确认框</h4>. t* b; Z1 h% a! T7 p: H+ O, C- T
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>+ S. r. n2 A, m3 ?# `( j
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true  @& n8 M1 H9 ?, w( S8 v  Y
true7 }* k5 J% z, w4 B4 C6 `
&gt; confirm("你确定吗?")  // 点取消返回false/ l- o7 o( |  f, Q& x
false+ n& i' [# f* \# a/ k$ T
</code></pre>( g0 q4 l# p9 V
<h4 id="323-提示框">3.2.3 提示框</h4>9 d% }! h( J3 T9 {, ]" F
<p><code>prompt("请输入","提示")</code></p>$ M. W$ a" _  V5 j
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>% {& y1 k1 Y% Q
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>! v- {; Z- t! p
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
$ V- Y" P: j8 w# @<h3 id="33-计时相关">3.3 计时相关</h3>" u9 P% C& o  S# r8 J) |! j
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>% R- Q5 }- K4 }6 W; e; p) j
<pre><code class="language-javascript">// 等于3秒钟弹窗
/ r4 [. T# J/ ?0 p$ P! b1 p% hsetTimeout(function(){alert("Hello")}, 3000)
1 U" S! I' [/ |  L" l; b4 S" `6 p3 L4 C( I% ?( R
var t = setTimeout(function(){alert("Hello")}, 3000)
8 O5 B8 D% E! F, j1 e9 j" W. E- j" s4 r
// 取消setTimeout设置
( A8 _! B$ R8 ]clearTimeout(t): b; F. \$ ]# H8 F8 G' |% i4 W
</code></pre>
4 G  {9 w1 s1 ]<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
1 `  ?" C( s6 O5 r5 J  W<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
2 j4 T4 H5 j8 b<pre><code class="language-javascript">每三秒弹出 "hello" :
; {( R, c, w4 |: j# Q( isetInterval(function(){alert("Hello")},3000);
, `9 u) v0 w# I# J. o</code></pre>' [" z8 T+ {8 M2 ?. q
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>, k7 O/ e2 j1 O6 i: `, w
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);' R0 L( q8 b* n1 ~5 h: K
//取消:6 J9 b+ V0 C" m4 p, C, T
clearInterval(t)3 ~, F- E4 f( M- _
</code></pre>
4 O. {2 s! m: w* ^% Q6 T0 P! f) d# [
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-15 22:21 , Processed in 0.073998 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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