飞雪团队

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

前端之JavaScript

[复制链接]

8134

主题

8222

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

) w* I) s' u+ l<h1 id="前端之javascript">前端之JavaScript</h1>3 j. P% Y! |- @7 x* u( b9 w  d! X
<p></p><p></p>0 D" o' H5 g: c- B9 u$ b$ k
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ P' |' n/ `8 N2 u
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>* o( M8 `  U* y' I* T
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>9 N, h7 v& D& q3 ?) b
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
) B% G4 f, A. L它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>/ m/ A- C4 [8 o) c
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
+ R+ k$ i8 Z3 J. R<h3 id="21-注释">2.1 注释</h3>
3 R2 x" \/ E$ g0 W: y) H<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>! e( D2 z6 N+ w+ U
<pre><code class="language-javascript">// 这是单行注释; ~( G" t- k7 _5 h6 Z" Z+ }5 s

( Q" Y' q* L) _9 T8 F" v% q' M/*6 e- ?4 c+ F5 g2 R  L! M% H# x
这是多行注释的第一行,  o+ J$ S( g7 W- F/ Q# O
这是第二行。
1 W# i. u( [! j7 @! w$ l# K*/
8 s& H3 Q& c3 v5 F+ S- N" n</code></pre>( i/ p) N3 ?" e& ?9 d  O' R
<h3 id="22-变量和常量">2.2 变量和常量</h3>
' ~* e1 Y* r/ x2 X0 p<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>* e' L- t7 e8 _8 ^$ S& ^
<ul>
/ F6 \) t. K2 b  O<li>变量必须以字母开头</li>& [6 v, A$ l- ~. m; X- [
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
$ i' I# @- |4 U* ~) o/ j<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
' {8 l. ^) A1 i+ ]* V) n</ul>- y+ F( r# E- c, ?
<p><code>var</code>定义的都为全局变量</p>, A; P0 ~' d$ o, l& b4 `- o
<p><code>let</code>可以声明局部变量</p>
: u! ~: N+ M, z9 R. C, S, R% j<p><strong>声明变量:</strong></p>
* W- ^: N$ a/ N7 Q<pre><code class="language-javascript">// 定义单个变量8 y7 g# K$ c+ C+ L# N
&gt; var name
  n& l- O; M- V# t. y&gt; name = 'Hans'( k6 t5 `: G7 b5 a# [; q
//定义并赋值: h- ?. ]2 y& p0 ]% `) M+ O
&gt; var name = 'Hans'1 t( [( Q2 p+ R* M$ {9 r! Y
&gt; name
# z2 w3 c+ |7 r5 b( Q5 G* \'Hans': _3 a2 b3 V4 H% O5 \7 O
5 G0 E, ]- L3 s) f3 i8 X3 P6 V" h# B  b
// 定义多个变量& |9 d' x' W9 Z# ~# r  k
&gt; var name = "Hans", age = 181 r" U8 x5 R1 W9 ~
&gt; name7 k7 i2 O$ b1 {6 A' I' x
'Hans'! B' E: d  O* l! c
&gt; age. r8 {; i0 x- C. h
18% f- k4 ^. f, m) [

3 l7 m+ w1 P* J5 o//多行使用反引号`` 类型python中的三引号
7 G; K' [- N8 x0 J&gt; var text = `A young idler,* Q/ S6 K4 |/ `. ~
an old beggar`! _& {7 C  N' R; r
&gt; text" \: c+ h: j8 }/ S4 a  R) `9 }
'A young idler,\nan old beggar'
2 [1 [! O/ ?5 ?- h/ E</code></pre>0 i9 x( @8 G0 K6 S8 b
<p><strong>声明常量:</strong></p>$ l9 x" J: @0 w5 i, x5 e# v
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>& M" `8 {4 m- p1 M3 g
<pre><code class="language-javascript">&gt; const pi = 3.14
! Z* {& C% W* c) Z6 w&gt; pi
( L- Z' k5 M- p) c) L3.14$ Y: D" ^' ]8 \7 r
&gt;  pi = 3.01
6 H( A2 j" J8 `9 Z2 T) ]0 eUncaught TypeError: Assignment to constant variable.3 Z6 k2 S. D( ]. W' w) F
    at &lt;anonymous&gt;:1:4
0 Y: n5 b9 \7 b% j& q! y
" Z( j( S' y$ M6 \. }/ L</code></pre>! z2 y$ M3 p' N! f' @# j! o
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>- g9 Z7 O- P3 M4 ^& M
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>. s5 ^4 ~0 Z. Q7 _- w
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
0 z. h% J& I% G( W$ n+ c  O  _/ J<h4 id="231-number类型">2.3.1 Number类型</h4>
5 [3 a- b* j; A0 @1 q4 `, P! _<pre><code class="language-javascript">&gt; var a = 57 q' c7 E; o' M
&gt; typeof a   //查看变量的类型  : k! B5 y& f( ^$ `% `/ m
number. X7 Q1 n8 h, I0 F/ W$ }4 ]" _# _

% V' T2 P# n4 p; H, y&gt; var b = 1.3/ D* Z) @2 n8 {: c3 S" e, @
&gt; typeof b# A2 z/ b3 X8 y4 z/ H& \5 \1 D: N
number
. ^5 N& D( N1 H4 P1 [3 t4 O6 K! q; @) \
// 不管整型还是浮点型打开出来的结果都是number类型0 f" p1 Z$ B0 U- M, h7 y

& U/ [9 `5 z/ F5 s; c5 \* d; {3 [5 c/*. ]! f: q3 A1 A* V
NaN:Not A Number5 r' r; n% x, n( Q* E, P
NaN属于数值类型 表示的意思是 不是一个数字
' v3 c5 @! Z' o' f# b' o*/
" }! v3 A$ V5 ^/ W+ P$ j: f* \1 U' m6 Y- X$ K; H
parseInt('2345')  // 转整型  r4 R) P/ m( ]' h  G. G0 {1 V. ]
2345( C0 x" Z( N: @/ r0 u
parseInt('2345.5')0 v0 Q7 _' M/ w3 f
2345" G: L% D' J6 c
parseFloat('2345.5') // 转浮点型
/ Y) A6 R4 `9 m7 K( {2345.5
& N) `6 I# B6 b! i( U7 nparseFloat('ABC')
' l0 d& Y+ n& A& d3 eNaN7 @$ t9 C% W& o" N
parseInt('abc'). U$ G$ d0 K  ^& }# H$ d
NaN( b" B* P, u3 I
</code></pre>
3 n- K. R+ ^8 X- g<h4 id="232-string类型">2.3.2 String类型</h4>/ n2 L$ |1 z2 p, N3 l$ U3 l
<pre><code class="language-javascript">&gt; var name = 'Hans'
4 x4 g* v% ~/ W" f9 m! Y&gt; typeof name
; A1 q0 h1 V' G1 M! p! Z) E7 Y'string'
7 _) o7 g3 c: D+ [) U& {7 n! w! S2 v" D( b
//常用方法2 z+ D! K3 q6 ~- n" P$ ?
// 变量值长度0 |/ `- b9 w4 l: k# B/ l, O
&gt; name.length
4 b: }! a7 O( m4
7 z) T( U4 y. [; D  J7 E3 w// trim() 移除空白2 T% R2 Y- T) n3 e6 f/ F( I
&gt; var a = '    ABC    '
; H, E! n: S- T&gt; a
- G; _! [( F7 E+ \'    ABC    '
' s; a7 `  B7 B&gt; a.trim()
& c8 r4 i6 a8 K9 p'ABC'
2 ]8 Z- l( l0 D//移除左边的空白
8 x' o# ]& ~/ d/ m  \, q3 r& k+ c&gt; a.trimLeft(), b; ^4 D- w! s
'ABC    '4 L$ ^1 G4 c' N/ X
//移除右边的空白, m$ ~& `4 K5 b0 ~! Z( E8 d
&gt; a.trimRight()
4 ?6 u: X5 B" a# m'    ABC'+ A4 E% t9 `3 i' p  i

7 r+ {, d: \( T: O//返回第n个字符,从0开始
: I7 N$ M, t$ H/ q/ c& U& s&gt; name
: R9 O4 _8 B( R. T5 R; u+ c8 v: {'Hans'* I! c1 p# a; {; u
&gt; name.charAt(3)
' m9 J5 w$ _) ?1 J9 H* ^'s'% M* S- n- X7 F! B6 S; c& `* ?
&gt; name.charAt(), a' P, d4 N. [
'H'
  x: h4 f2 L9 R9 R9 s% W& Z1 ^&gt; name.charAt(1)
; S% J5 E6 W$ i4 s, k7 U'a'
: |% R( c( }# n, w% z7 Z
+ h) d4 c: \$ S" ], x! q9 n// 在javascript中推荐使用加号(+)拼接' B1 u8 H/ Y9 ^3 O# H! M  b, W
&gt; name9 I+ h/ F! [0 J, f9 E+ s% T% U
'Hans'" u% E2 H+ V. F( V
&gt; a
( l3 H8 O2 ]& d. X8 u4 t  K& C'    ABC    '
" w2 b: u* n# I6 g. p&gt; name + a# m6 |# h. N7 i$ F
'Hans    ABC    ') n4 R% Q  F5 N2 s  k# `" K
// 使用concat拼接0 |1 ~1 o2 j2 G# O
&gt; name.concat(a)
/ Z9 N" v8 f' Q' _* c3 B4 R4 @! c'Hans    ABC    ', C  \4 k, o9 R$ S% T0 u  X. N; n+ G
+ X1 \% P4 R2 Z% c
//indexOf(substring, start)子序列位置  \/ C: e  V- Q: E) i1 t; j
5 k) X: b5 f6 P
&gt; text
! C% s/ v+ [4 j! d$ B'A young idler,\nan old beggar') I- O# ]# a; j% w
&gt; text.indexOf('young',0)
8 g2 H# `" [  Y$ S, ^# q3 f$ l2; f4 b9 w2 u  U+ |5 C4 u
3 X1 _3 @7 J' n# Z! g. b$ {" j
//.substring(from, to)        根据索引获取子序列7 }" z( }" y' ?* T% D- r& K, c  `% q! T+ ]
&gt; text.substring(0,)! l0 K, ~( d1 e& N* \
'A young idler,\nan old beggar'
) |5 r4 o  V/ I7 z; I& f&gt; text.substring(0,10). y1 [6 G- U( W/ b3 x9 U
'A young id'
8 s9 N% q. I  V) b
; w. J" ], E, Q7 R2 Z$ v) V// .slice(start, end)        切片, 从0开始顾头不顾尾
) M; G/ c, i& e' ~9 m+ B$ ]&gt; name.slice(0,3)
, h# s8 f: v% v6 j7 f$ \, R5 A  Q'Han'
: d: W% x" D5 p  F7 v; n! @+ e& g
// 转小写
5 [: v, c% r0 T3 Q) B% ?&gt; name( _& l3 X) B7 H) w
'Hans'; V: s4 q  g/ M- k; g" c
&gt; name.toLowerCase()5 Y% ?0 f9 z6 P* a) \
'hans'& L+ `2 h8 P' \, i* R6 }6 }1 a( z
// 转大写( R# b/ e# ]+ j/ V4 M7 V9 r" H
&gt; name.toUpperCase()9 A6 b* P, L6 C5 F  N! T1 f
'HANS'9 l8 U8 R/ k: f- c0 l

/ x/ X/ c0 V- A5 E9 D. a// 分隔0 U- K7 u/ T2 p* k
&gt; name6 U+ E9 N. v4 h8 D% U3 h. r: E# E
'Hans'  s5 k) n( g) g: H
&gt; name.split('a')
" f- b$ ^9 `9 R$ u(2)&nbsp;['H', 'ns']" d) i: Q' S8 y: p% ~
</code></pre>
6 t4 o+ w0 o! H  e<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>: M! p; d( k, o- _7 s5 G
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
8 ]6 ^! n# I) E, T2 j; `0 p5 f/ t+ X<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>% n. g% A7 q6 Z4 ]# r( I
<p><strong>null和undefined</strong></p>3 D/ k2 K! o' ^! @* i
<ul>5 z0 r' U& m( u( S3 k9 R
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
# D3 _& O2 t  ]+ Y( }& d) S2 H) p<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
. K; Y4 X( M, w, N$ w) u</ul>  |: {9 v3 c, B4 A' O$ z, ]" V+ A, _
<h4 id="234-array数组">2.3.4 Array数组</h4>$ w7 z# T+ Q. h
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
- k" V# r) A2 S& _0 u<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] % I% U. i$ Y8 N: {% Z
&gt; array10 c& I4 _& C2 M) K
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. @+ Z/ R( ^9 s8 h8 k1 J7 c
&gt; console.log(array1[2])  //console.log打印类似python中的print8 u9 w( B0 s7 }% g
3
6 w. M2 t. j9 L0 f// length元素个数' T* ]4 A( x: D
&gt; array1.length
+ X: {$ K7 k/ E7 x+ |$ o8 p6. L! ~! y+ S9 T/ t1 r
// 在尾部增加元素,类型append
, t0 B) U3 H5 u. T&gt; array1.push('D')
  A2 w) H: k1 ?% s+ c7
: H( \* @* i& P, D&gt; array1% @& D# O9 C5 E% q/ G
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
1 e& d8 p4 f8 ^% s6 g' _+ x// 在头部增加元素
/ u; H& X) w, }3 `&gt; array1.unshift(0)
% F/ n( T' u9 i) `8
- M, v" M& _% D: G5 R  q( K1 l" `* H&gt; array1
3 R& K2 m$ a) J8 s# o+ K! \/ v(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( A2 Z) B/ i; `1 `. o9 t4 I

% \. I4 P, C  u3 l//取最后一个元素
  A& M+ r/ Z) p7 I# L: N&gt; array1.pop()
  j( n3 d/ }, d) y/ |0 @'D'
& k( Y  ~, @' @, m5 j&gt; array1
& |* P! F; _& ^6 y( T(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']5 W* q  j4 p% R
//取头部元素, n0 E  a- o1 W- R, |
&gt; array1.shift()
$ V3 ~& S/ m0 _& s6 l1 c0
# p* s% e. C! q) }&gt; array14 S2 ^3 U& X: q3 d  M' D; C" B
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ ?8 |% a  S4 b2 Z: X" z0 y& }

3 {; K& X/ s( ]//切片, 从0开始顾头不顾尾
9 C# u" J: e9 c. N# g5 S&gt; array1.slice(3,6)
/ {) [; ?- {3 x& u) C- `4 J(3)&nbsp;['a', 'b', 'c']. B5 M4 D& r# H0 I, p& i5 @
// 反转- O  Z$ u4 J  O% }: Z# H
&gt; array1.reverse()
, _1 |: E8 \+ q! M. i, U8 P(6)&nbsp;['c', 'b', 'a', 3, 2, 1]) T% [5 L% R+ F5 j# W+ g) _) g5 @0 o
// 将数组元素连接成字符串$ Y; @' M. l' @! \: s; g
&gt; array1.join() // 什么不都写默认使用逗号分隔: ^7 @+ t( r$ x+ x6 u
'c,b,a,3,2,1'
: R) X# k7 N9 s% U/ _2 P. C&gt; array1.join('')
, K# o6 Q! Y, T5 H! J5 y- t! q5 n' P'cba321'
% W9 D( ~; `! a! m+ S, g: E&gt; array1.join('|')
4 V, D" }$ ]+ }'c|b|a|3|2|1'& d* D; G* e# H- g; ^8 q: A
7 B2 {; S) G7 T1 s2 b9 X
// 连接数组
: |2 l+ Q2 R1 n) A$ v5 v&gt; var array2 = ['A','B','C']
5 R0 a  H3 ]$ j&gt; array1.concat(array2)
) s0 h% s+ L1 q! s1 j* t(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
" ~; P0 u7 D7 z  k0 N3 ^5 J0 d/ I% e! w5 z; Y
// 排序
3 V7 }/ r: y6 B0 @3 P/ i& H&gt; array1.sort()5 O+ [, O6 N* l, k( W$ I( X& z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
3 q* x" K" w2 e9 `
7 X* _$ t+ k! f" H& a// 删除元素,并可以向数据组中添加新元素(可选)7 u' s! `6 \# |- J' X+ u; a1 |
&gt; array1.splice(3,3)  // 删除元素: i1 o9 F0 C! m- ^) `9 r
(3)&nbsp;['a', 'b', 'c']/ R" n5 Y: M# I4 _% `$ E) `9 L
&gt; array1
' j3 c; o; l7 Y6 J, _9 j" M(3)&nbsp;[1, 2, 3]: M5 b: f8 p( T$ Q8 M- h( q
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
- F- h" m0 [( D: R! U5 F) @4 ?[]" R% P/ y6 s' k7 W
&gt; array1
$ h, {9 X$ }0 f  R& |% O(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']+ ^+ ]$ H/ R6 Y9 i

, d) d- O/ v; i1 V/** `" }- A$ T: k: P0 O
splice(index,howmany,item1,.....,itemX)( `* i8 q# Q( A$ k+ e+ Y: x; c
index:必需,必须是数字。规定从何处添加/删除元素。* q+ X- g! K% \2 n1 X8 L/ @
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
3 }+ o+ a1 f; ^& t8 Zitem1, ..., itemX        可选。要添加到数组的新元素
8 X% K. G+ r) l* r*/0 Y" \) u! N$ g  v  p, u% z. R4 a# D
9 C. e+ V. z' U3 {. F* {
// forEach()        将数组的每个元素传递给回调函数
" Z0 ?! L; e' l4 `0 T&gt; array1.forEach(function test(n){console.log(n)})
0 ~* M2 m9 T$ T9 { 1
, e% E: x+ ~$ M7 q( N$ p3 c" d1 N( X: U 2* F* u9 ~, q3 Q# L7 W: {: J
3
2 s" T* }: O5 S9 I! n A
( J* ?4 X, U+ F' G+ f$ K B
8 \  e3 P3 Q3 ]' V C$ @% q4 ~! v) T( ?4 ?7 F0 C0 X0 T
// 返回一个数组元素调用函数处理后的值的新数组
8 I. ^2 z- [8 B* W0 k- t&gt; array1.map(function(value){return value +1})0 e0 F5 b% j7 M1 ~) W( r: Q- k! ]
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
+ i  K% r0 B5 b. q- U9 z: ?</code></pre># r) G% q' x# e" \2 T- t$ k
<h3 id="24-运算符">2.4 运算符</h3>
1 i" u  ]. g) Q3 a<h4 id="241-数学运算符">2.4.1 数学运算符</h4>4 }) U+ J. F3 Q6 B) I
<p><code>+ - * / % ++ --</code></p>
, d1 w2 o3 [/ |+ z1 l4 x<pre><code class="language-javascript">&gt; var a = 66 C) K6 i; {% H( i, r9 W+ F
&gt; var b = 3
9 ]: w: V  @0 g+ o* u$ }// 加! d( L( Q9 f/ V8 f
&gt; a + b
5 i! [5 o3 i/ \/ C9; P, i: l: X  V0 y  `8 P
// 减
, {+ g8 ~9 C! Z  Z- ^( v( f&gt; a - b
: R7 g6 e* u% d( ]3+ n; l- `9 Y7 D$ |
// 乘$ h4 @( R# }6 D6 v, M7 s" }2 _% L
&gt; a * b* R( `) `! N! U4 j! F! a
18, H1 I" C5 k1 f' E2 H& J& Y) R8 q9 ?
// 除
. v$ @6 K" N# ?: e2 Y0 z; X' n&gt; a / b
3 i; o* g+ u5 B( g! T& Y) s$ `23 k+ S5 i1 ]; f. o" d
// 取模(取余)* {% p. x4 n+ h5 g! y5 e1 B5 ]; C
&gt; a % b
4 _; A) K* w$ t# f: v8 L5 r  ^( V09 J) ^. P3 s/ a; o$ ^
// 自增1(先赋值再增1)- X& O0 E' G& C% t, r- B, Q2 `
&gt; a++
9 J4 x. D2 {) g# K6
, N3 v# U6 _% _- B&gt; a
; e* J; u* `  J) i% q. U7
  q, p8 H& G* }5 z7 ^// 自减1(先赋值再减1)" W# Y% h' \5 E8 N0 j
&gt; a--
) d$ ]( w7 _1 a8 h$ E7
4 }" }1 v7 c& q  u9 m&gt; a) ?* A! a. _3 |. e
6
9 ~& g! M2 f3 U2 u: i" Q& W// 自增1(先增1再赋值)) ?  Q* P6 {3 V8 j/ p
&gt; ++a9 h4 j0 d4 ^. f* C% M5 q$ |1 y
74 z2 i# l, v' w$ b2 \& L
// 自减1(先减1再赋值)
% b+ o& w% O  n/ N! P# u&gt; --a4 b. U! N1 n( q4 a
6* s- H! [1 z( X# H& v
&gt; a
0 l6 p$ y- _6 ?) B, L( A63 p4 ^# [2 _$ @- B* I, E  m

5 N0 l( M# |4 q" b9 X3 P//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
& @* u& ^8 a0 T# I</code></pre>
5 l! g4 r% ^; r0 o% q- k0 n( k3 x<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
  y8 l6 X$ G4 t2 O, ^$ l<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>4 x1 |4 U0 M3 ~9 Z  ?- c
<pre><code class="language-javascript">// 大于
! H- q  D' ]( v8 p&gt; a &gt; b5 [) @, J2 b2 q9 i6 m
true
& `: \1 V! s+ R; i7 @+ \: \// 大于等于. R) ~2 T3 i9 |5 [) `
&gt; a &gt;= b
1 V6 j: @; z6 ztrue/ o( B. M( T- B+ _, q" e
// 小于3 \+ r. P* @4 E6 a* O' ~! E( [( v
&gt; a &lt; b
6 B3 }' V/ E5 _1 a% {6 ?0 Hfalse
2 E) {4 C2 z" G& R$ {// 小于等于
: B) E- o& G. r3 s- \&gt; a &lt;= b
; g9 G/ ?3 b$ h, E$ `false
2 r+ ~+ q. D' U6 U5 B& h& I5 n// 弱不等于& Q1 H3 |4 i+ L: [+ Q1 l
&gt; a != b
4 n1 g5 f7 P1 i: F, M1 o* xtrue$ Q! L- `- F. Z
// 弱等于4 ]8 ^1 S: Z, X& _, y
&gt; 1 == '1'
) R  i1 d' K9 Q, ]3 vtrue) w4 N- Z* f0 H# ^; h% s1 L
// 强等于; [4 O. W+ L. M+ e0 e$ A) K
&gt; 1 === '1'& E. ~, J' u* M9 G/ E  h9 Y
false% O0 L' t; b( d7 v7 b+ b
// 强不等于
, m, h* B* [$ B, o  O&gt; 1 !== '1'
& u7 B- @$ ?+ q6 G9 xtrue
+ W1 _* V! X9 G4 E+ u+ b9 S6 @) K7 B$ R1 Z$ K  J6 |9 Z6 U
/** m- I6 Q! Q' Y+ c& V$ x! z2 t/ I3 t
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误0 B3 _9 w3 W  y% A0 i8 p
*/
0 |% L. M5 l" f& k$ F, z</code></pre>
2 \2 U0 l4 u9 C7 H' \<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>" I# }/ u6 h* _7 |0 U2 \
<p><code>&amp;&amp; || !</code></p>
# h' b& K' k. n<pre><code class="language-javascript">&amp;&amp; 与
; D% F6 S- R7 v' H2 i* T% q|| or * q# M. t" ]3 w3 K
! 非' p4 ?2 ]* ~. \; A2 D0 Y# B! M
</code></pre>0 i4 H$ K. D, e/ _7 d. @& N
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
4 n1 \$ ?9 y( K, ]1 j1 m3 B<p><code>= += -= *= /=</code></p>  y1 B/ q; o1 T
<pre><code class="language-javascript">// 赋值
/ Z* ^: F; Y' U7 Y& T&gt; var x = 3
( f2 R6 q: w# S" H// 加等于0 V; T  K7 `7 {0 g; ]2 L( M
&gt; x += 20 q3 o, [7 I3 D' O
5, Z- n4 Y% h, L" S
// 减等于  Q) n# ^0 I3 b/ A  ^! Y; m2 A
&gt; x -= 1
4 A/ R. v& M9 n% f/ N, z& A9 A4
: S/ C$ l& F! s7 U( V// 乘等于
1 o' \8 F3 o- C* a: z0 u&gt; x *= 2
6 |2 Z/ O3 {/ O: _86 I- J6 s! r$ E" v, ]
// 除等于
0 Z- G& M3 N: p+ Q&gt; x /= 2' X3 {9 ^) V- B- b; i
4( q+ ^9 {) E4 H
</code></pre>
! g& h) e" r# \7 E' c5 h<h3 id="25-流程控制">2.5 流程控制</h3>
1 ^' Q# c4 @9 d- j9 [1 z<h4 id="251-if">2.5.1 if</h4>, |1 t7 O. J* \7 W- L9 S7 j4 v
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}  \* q; J/ ~7 E" q
/ I& T6 S% O: B' w% h) y
&gt; var x = 3. a+ L- d3 i9 l  a% J
&gt; if (x &gt; 2){console.log("OK")}
+ A  e; Z* {1 n$ ~. } OK  M. L# e2 F+ F
$ i0 q1 w& x9 B
2, if(条件){条件成立执行代码} & t+ n/ @# f8 G/ K. ]* n3 e
        else{条件不成立执行代码}4 H9 W  L1 q- L
; }5 G  Y' M$ N% p$ c4 y
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
# W, m: P' l# j0 Q  C9 f'NO'
  O! P& Y# D' M# I$ I9 \
& D$ J4 i5 S7 v7 _* W) n1 V. @; i: m3, if(条件1){条件1成立执行代码}
3 e8 G+ F' q  B; @3 a( d( S        else if(条件2){条件2成立执行代码}
! y8 g9 _5 [8 S) i    else{上面条件都不成立执行代码}
& q) V+ _# P# Z7 E4 p: v. S: e. ~" d# Z: y; x
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
( S- [+ c. J( @+ y/ c2 u Ha
: v; E$ q$ _/ j. E</code></pre>/ y! S1 @4 a1 }9 a% c
<h4 id="252-switch">2.5.2 switch</h4>
1 u, `( O8 Z6 [9 \<pre><code class="language-javascript">var day = new Date().getDay();
$ t$ ]' B4 S) N4 D5 a( E) o# K6 E- a3 iswitch (day) {+ A6 g- v" U+ ?2 a  k/ u; m# O
  case 0:
3 Y$ d8 p; a: t  console.log("Sunday");6 C6 J9 B/ Z1 U7 B) d% t5 _
  break;  ]" s+ m) H9 Y9 |4 v! ]
  case 1:8 l* G7 C6 K; A  ~
  console.log("Monday");
* J. V1 `. @1 A; p: g5 v* S9 Q  break;
5 @$ m  m9 [: Y7 bdefault:' B0 g/ m# t/ r+ H0 _1 n; C
  console.log("不在范围")1 x5 [7 P7 R( R) C
}  Q  e% v2 i$ i, I. A
不在范围7 e# q, {8 F& G4 `5 b
</code></pre>
& G0 U" w: F/ D/ p: H& h! c<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>9 u( R- `! T) y: d% A: r& y
<h4 id="253-for">2.5.3 for</h4>
' X# Q  U: X$ [9 _5 t<pre><code class="language-python">// for 循环
8 K, G- N/ a0 x/ a! h8 }1 L8 j& {        for(起始值;循环条件;每次循环后执行的操作){8 B6 U/ Z$ H* E' o5 |7 t
        for循环体代码
: f$ ]+ R: s( [7 n2 g% x, m1 w) B1 E    }
% v; D; B% M9 g2 p5 a( [9 h( M# n; q5 w1 I6 A
for (var i = 0; i&lt;10; i++){
, c# H0 k2 S9 b1 g, z. O    console.log(i)& ]8 }3 Y$ c/ ~2 m! m( J+ V
}
2 K/ T( q- I% F( c# d  k8 J+ C        0
; \& H& q2 r' q* b! P        1
9 y. s+ f7 X3 ]        2; f2 C7 f$ V' l9 a- R- V# x
        3( {7 f4 c9 a2 G+ ]& o1 j+ S; k9 ~
        4
' \5 i6 X3 a$ t$ b/ ]        5
0 A+ H+ U4 F; H        6
7 x  _2 C( j8 ^' }        7
( C+ e) N8 n6 y$ g& X' D  M        8
6 R0 d" s5 [! b+ n- e2 G+ g        99 U; d9 O- E1 Y. T
</code></pre>
+ w& Y+ b2 Q4 t/ P& e0 ?<h4 id="254-while">2.5.4 while</h4>
1 E2 V+ E/ a; O<pre><code class="language-javascript">// while 循环
' V$ U- r+ L; k4 |% T% y5 Z9 B        while(循环条件){2 x$ p! Z5 a$ z$ k! Y
        循环体代码
, X/ s' w- M( G- O/ P* U6 c$ n    }
2 A& M& F8 W+ e: ]% I$ w/ b! g
&gt; var i = 00 f7 c$ K  u2 k3 q( Y( q
&gt; while(i&lt;10){
7 P5 ^# h0 k; z# z$ \    console.log(i)# K. \+ ~+ T1 ~" }# m# I8 w. t
    i++
6 l( z! a) `& Z9 N; D}. _$ d  \5 h& A' ?* Q: r
01 f1 w) d0 Y: l) c0 l
1
0 Q0 ^6 Q1 P7 D) {! Z 2
& O6 Z: b! K2 `# T; Q! s# R. x 3
' N5 P. x5 t+ k" p 4
' Q& S) @* [) Z& F4 l/ y 59 x# F) X& h5 q) K$ y
6' Y6 w1 ~) {$ q& g
7
/ d; I+ v1 I7 C7 Q! {9 o 8/ R2 x% s; [( R# K+ X8 F# {
9
6 l9 a+ ^9 K2 }</code></pre>
$ |5 U  X7 v- H! s4 Z<h4 id="255-break和continue">2.5.5 break和continue</h4>4 i6 X3 z2 r, J9 N
<pre><code class="language-javascript">// break
. S7 E7 i* P$ |1 b' Rfor (var i = 0; i&lt;10; i++){  @) j5 W6 S3 l9 q- v
    if (i == 5){break}0 {) ^8 h$ X: ?3 A% A: a9 W- P1 \
    console.log(i)
4 A  @  |; l6 G8 x. P2 }: \6 ?}
1 k# F6 A! o) }; A) I1 g9 b 0
+ y# w8 y1 {$ J" |3 K8 u* W. g 1
, h7 V. C. L! i( o! j5 Q5 T 2
" D  h, I7 q6 H: i3 Q% I  t: A# L2 B 39 V& |' L& z' @8 I3 @; W
43 E! k/ ^4 Q$ G: J0 ^) X
// continue0 o9 U# Z, j7 B
for (var i = 0; i&lt;10; i++){  D& _7 J5 K# i# g
    if (i == 5){continue}
2 v) T* ?& P# s7 D* i    console.log(i)' Y! W6 T$ O5 D" Y# w
}
- _9 M% x/ w/ e3 M 0
2 Z3 V6 q  J9 R' q2 N! q( I) I4 ~8 j 1
; M0 T0 @, E$ Y9 w0 l 23 \1 l  k! o4 `5 x& B. u7 I
3
! X) {# Y9 j2 S* `* x% k! W 4
: f+ n1 y1 P  a. ?/ l 6! n- D2 E3 K3 H' ^
7: }% _6 @$ O) D1 j9 V6 j
8
6 z% R6 {: @! ~$ X# j6 y 9
0 P0 x2 f; V" ~+ T$ v0 X  S% G, [( O/ A  x- s4 c0 A
</code></pre>
% z! H, _$ c. u- c$ t/ H* \<h3 id="26-三元运算">2.6 三元运算</h3>
# [/ O9 A9 }( I<pre><code class="language-javascript">&gt; a
; _! D! q% U4 S! i. h, o6/ Q! x+ x7 h! u3 H6 ^& o. B* Z
&gt; b+ M. v& I3 x, Y8 u; Q# P
34 f, [' a0 ?1 N" F* E
0 f& T% }; c0 F, X9 n
//条件成立c为a的值,不成立c为b的值
' S+ C$ O& v; ^" J/ E2 r5 s&gt; var c = a &gt; b ? a : b
- b" L& M, g1 e) }( H& l1 V&gt; c
7 m8 f2 a* n2 v& P: `% x8 r4 w6
# i3 f1 `" S% s9 s! ^2 r( ]3 I0 A. G9 K2 E
// 三元运算可以嵌套
, U2 ?0 ?4 W$ V. H  |* w( D& t0 t1 _</code></pre>
& c$ M3 `$ k, s<h3 id="27-函数">2.7 函数</h3>
8 I- p, V2 y' }1 S2 P0 v, _/ ~<pre><code class="language-javascript">1. 普通函数
+ T( V+ W- W- m- x! c&gt; function foo1(){% K5 C& L, Q# ?, l* t- w! h  e
    console.log("Hi")
* A$ c& E! j- o) e0 m+ U- n/ v! ^# \}2 e' S) W3 y7 c/ a
5 k0 {  a4 R% @: _5 f
&gt; foo1()7 d3 X! E+ v, b/ v2 ~7 I
        Hi, [- a  U2 ^. x& J3 c6 l1 H2 m
2. 带参数函数
2 }. ]9 i! }4 L- u&gt; function foo1(name){
  g( ?% D* n) {8 b( _console.log("Hi",name); q$ m  u( `( o" R
}, e1 l5 W4 h8 E
8 t" W# K2 a2 t9 h
&gt; foo1("Hans")
, ^) r6 a, s9 z3 A5 i* D; SHi Hans8 t% C; }; x5 y8 p! |* Z

+ _8 G1 _& v$ i0 {5 z) H&gt; var name = "Hello"
) J( f/ z) v1 R9 v3 i% g- U/ Y( c, I&gt; foo1(name)
* ]3 u7 ]7 G! g0 m  v( q5 HHi Hello5 {- h% i1 ]$ n( L  O- s
) O# n3 {# X$ f& ~
3. 带返回值函数
2 `! |& Q$ Y) l5 U: Z& [! m&gt; function foo1(a,b){5 U' O- g2 `' z/ }4 w8 ~
        return a + b   - L) M/ \/ |9 S1 z7 U- _
}5 q# [6 s% I! J$ V1 ^. B
&gt; foo1(1,2)2 W2 A8 f. L+ h& P' m. N
3. H8 G' K' c# Z/ ~4 u7 o1 D
&gt; var a = foo1(10,20)  //接受函数返回值
0 T5 R5 r6 s) N8 N, H! z3 G&gt; a7 C7 ~4 y: S1 E. C! w3 j  Y! f$ {
305 j. `  S8 C3 ~  `
) a2 \$ K# w0 G7 G2 P, @
4. 匿名函数2 f4 S1 d( L3 A
&gt; var sum = function(a, b){
1 |7 O# d- _5 S$ c  a  return a + b;' w2 S$ L) K% O8 g
}
; I+ I; v1 B( B8 B&gt; sum(1,2)
  M2 N1 q0 K+ v3
& |+ `1 s5 u4 V  _( T0 ^4 W$ O/ p2 e/ b4 H
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱' C  q* S3 Z% N/ K; h) ?& p
&gt; (function(a, b){- T! M) _1 A) a% w2 T+ X6 M
  return a + b+ Q% W* H- t9 S
})(10, 20)
1 w4 y9 G9 S) C30
0 w6 w+ ^, G* p" G: y, e' ]  o
, z* g# S0 A& ~" k+ b; p7 ~5. 闭包函数
& Y$ w$ b$ p' e! `9 o6 N// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数  R( A% {! F: @% J# E0 P$ Y
var city = "BJ") R/ k4 c7 @$ X" G' H$ ]' c9 z) V
function f(){5 O5 Z9 r# R0 C2 y
    var city = "SH"9 B/ k  A. w: O
    function inner(){
' J2 \7 O7 `+ Q) `        console.log(city); Y7 y5 u2 T% j& w# W+ [
    }
, f/ s/ j- V# v' \: A    return inner
5 ^! x' g  [$ ^' V- N}5 I8 M( M$ ~( I) N* i2 u- _! {- Z
var ret = f()7 @  m3 k6 ^5 L; d% W
ret(); E% C7 L3 f6 P  V
执行结果:/ f4 z6 C3 y6 k' Y
SH
" U3 N0 |3 t+ L# e3 _- f/ _
9 B7 V! @! U. w5 X9 r% b</code></pre>
7 j/ C9 }/ o  D) S4 f' n+ f<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
9 P, N6 d' L" ?- N9 {5 q, k! ~! C<pre><code class="language-javascript">var f = v =&gt; v;4 v+ r7 L; A9 h' ]# q3 G  H
// 等同于
6 c7 U) L! w, O% A, t  C& zvar f = function(v){
5 U, G. [( L. j8 u5 |$ F& M  return v;) n: K* g4 y1 m
}
: h6 h% v3 l2 b/ _</code></pre>
& m/ o) g! K! q- e' q<p><code>arguments</code>参数 可以获取传入的所有数据</p>8 [* u9 V5 k$ F9 C! e. U
<pre><code class="language-javascript">function foo1(a,b){. {( T% m9 P7 x
    console.log(arguments.length)  //参数的个数 " v. _' }0 p' n4 q8 [0 o2 v6 U  Y2 N
    console.log(arguments[0]) // 第一个参数的值
3 e+ H" T- e) |& R7 _        return a + b   1 G' }* v/ E4 n; h7 m8 R
}
& I' }5 f9 l( V# |foo1(10,20)$ m. S6 B% ]5 i/ A
结果:; p8 p2 H" d5 [9 \! y8 k2 j
2          //参数的个数 * [: k5 d! Z7 K
10        // 第一个参数的值
- n% w5 T: k4 C30        // 返回相加的结果* G- [+ Q/ \+ d$ m
</code></pre>7 ]! Q9 L, a. e1 ?  V
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
4 K7 w5 ?+ u6 r8 j4 m$ \- ?9 x. w<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
! N5 B/ E% x1 {1 c1 o$ C<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>. `1 \/ q6 H- B4 h, [
<h4 id="281-date对象">2.8.1 Date对象</h4>
5 ~- R& Q; c; S<pre><code class="language-javascript">&gt; var data_test = new Date()  f' y9 R( A$ ]* _  z! i
&gt; data_test  z7 J( L- o' F* f3 Q; e4 O2 G
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)1 B1 `: {# N1 k5 @$ D
&gt; data_test.toLocaleString()9 f. {, ~2 _( p
'2022/2/11 下午9:44:43'
: _- q9 Q# H0 t, f6 w0 |# K! N
0 u7 I- \  k0 K3 H6 P/ k' v4 _&gt; data_test.toLocaleDateString()! q; l! @4 G4 _, h+ O# [5 p
'2022/2/11': D; I% @1 V7 x  {! _$ G

- ~' {; C2 N4 X+ d& S- q/ ^7 n&gt; var data_test2  = new Date("2022/2/11 9:44:43")8 Y& v; l7 B9 Q2 d* l2 U* D
&gt; data_test2.toLocaleString()
: w. g# A4 e1 p) q2 e2 R( s2 {'2022/2/11 上午9:44:43'8 x2 g5 V% p1 `4 w# K" ~# }; d) T
& k2 I" P3 p5 {
// 获取当前几号9 l$ n' d" P  T2 ?3 A
&gt; data_test.getDate()
" q+ p) S& S. }115 Q, P) f# Y/ w/ B4 j
// 获取星期几,数字表示
: ~5 N8 ?& w' }' S; R&gt; data_test.getDay()  
, |2 ~" |* y6 r# C- u$ ?( h5
/ w) m. ~1 S' I6 f3 [9 j& V// 获取月份(0-11)
; g& F; ~3 b: ^0 S2 L2 J&gt; data_test.getMonth()3 ?9 \5 s9 ]& Y/ ?
1; s- W& T! d8 r. c$ ]
// 获取完整年份
! j8 X; ]( h' f8 v! Q) k. T, G6 E&gt; data_test.getFullYear()
# i# W- y7 Z' S9 o2022
$ b, p& A) f. K// 获取时4 m9 f6 O- N9 u1 I- x2 g! \
&gt; data_test.getHours()5 n( Z6 L. J' U% V
219 `# S+ Z) a5 {
// 获取分
) |3 e3 p: u4 R&gt; data_test.getMinutes()4 ?$ ^" n$ m+ ^1 d. L
44
  j6 v, h8 s& K8 G* x, d, y// 获取秒
) Q+ y: X: @6 ]# n4 P&gt; data_test.getSeconds()& S0 L* U, N. L  j# T0 r
43
# q' G  f, O0 ^// 获取毫秒3 M% V9 `0 s% O+ C
&gt; data_test.getMilliseconds()
% F* S: Y5 N( R" E7 [% _2901 _: `: f, C& ]/ S* d. _0 h0 G
// 获取时间戳
' _8 J; H  B$ }7 \4 E; q&gt; data_test.getTime()% l. j  T) c1 a" {
1644587083290- N( c0 |2 h5 U2 g- u  B
</code></pre>
3 @$ a6 x- l7 G) _: m- e<h4 id="282-json对象">2.8.2 Json对象</h4>7 K1 N5 O( R$ X( R4 ~
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串0 P+ d9 ?# e1 J+ k
JSON.parse()  // 反序列化,把JSON字符串转换成对象3 o) y9 T2 r3 ^2 }2 P9 ]
: `2 t5 r+ |4 a- h) m: g! i
// 序列化: b3 y, ~! u, b$ g" i
&gt; var jstojson = JSON.stringify(person)
  c- ]1 j, i; @% p&gt; jstojson  
* Y$ h4 T# ^; O! T+ @! g/ p'{"Name":"Hans","Age":18}'
* |6 h, d/ i0 p+ x4 {
0 v- a* r  [8 h$ k* X// 反序列化* \$ R8 D2 ?2 V, {+ b# b
&gt; var x = JSON.parse(jstojson)
0 v' g; m' b6 f9 ^& G$ d&gt; x* A7 f1 y  a  p8 D6 t# t
{Name: 'Hans', Age: 18}+ h$ n4 t0 N' ?- f
&gt; x.Age
. }/ U' s4 G! i5 j; d3 K18
: Z- ^& C" W8 U9 |' j  e4 Q</code></pre>
+ n% \4 T! r, }0 C2 c; m# v1 i% b<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>1 \+ R: p8 M% v6 g% s" k' i
<p>正则</p>$ x( o' @, ?# X* d7 E6 z
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");, C4 h% ^& E& A
&gt; reg1
2 R& I! z& C9 Y/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ z: w. J, v/ h( [8 m&gt; reg1.test("Hans666")+ E: F; F9 V, H& p7 z
true
% N! B7 \" b% d  E
  ]- ~( Q0 E0 J/ p&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
5 X, S5 ]- m8 W+ A+ M&gt; reg2, o, ]: B5 ^, Y. {6 i& O
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
! g& ~. `3 [  @) B8 [/ ]8 Y&gt; reg2.test('Hasdfa')1 ^) C, r3 l' u. P4 r- C/ d
true6 U0 `* |7 L9 P5 x5 G) h

0 k* j8 ?: v) |全局匹配:3 u3 ?: Q/ O3 u8 s7 E$ g
&gt; name
$ J, o" U/ g9 h5 n/ a+ b* V6 n'Hello'
' |) h2 C. q- @% B' Q6 Z&gt; name.match(/l/)
5 m5 N- k- h5 X" I$ [+ _2 N['l', index: 2, input: 'Hello', groups: undefined]
/ U6 m' K! A$ d
+ ^6 r6 ~  K( z0 w6 i3 h; o4 l&gt; name.match(/l/g). J' l: C% U7 E% u( i8 C1 n
(2)&nbsp;['l', 'l']  |/ [3 E! X. p6 ]1 q/ R! x8 F
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配5 u5 \6 z+ A7 N* o' L6 [

. m6 i: w! w. \9 f. h# |全局匹配注意事项:9 \; _4 G: S% \) C$ \
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
  T) J% u& K# R1 h! q# Q0 J9 I2 a&gt; reg2.test('Hasdfa')5 W2 k. V( z; d7 @, a
true
+ u% F$ r; ]9 F, G&gt;reg2.lastIndex;" a, y! S8 I: P( e" k* k% Y; l
6
6 q" y2 g: t- f. n7 }&gt; reg2.test('Hasdfa')6 o! \, c: H$ W( X3 Z
false! t. i, p0 i9 H  C( u
&gt; reg2.lastIndex;
+ V8 k% O7 L- ^) e0; U. R" W1 b% T: @9 v8 f. A
&gt; reg2.test('Hasdfa')/ o5 r- D  a/ K9 T& a" b! m( b
true1 o, {0 K8 y2 ^. ?8 S
&gt; reg2.lastIndex;, O* ~5 u; ?, d8 S6 a+ N: {1 v. X
62 B, v8 W2 K5 v) t6 G  M
&gt; reg2.test('Hasdfa')
( G; F5 S6 c2 L. C: j/ \false% b; ^5 X- `6 W' `
&gt; reg2.lastIndex;% [; q& a/ {- Y: Z( e7 y
0
. a8 f% E+ [  }1 z! R// 全局匹配会有一个lastindex属性
# N; O! D/ }: g% m&gt; reg2.test()* K& Q2 }1 B4 c1 Y8 d
false
0 F  e: \7 G3 P1 o) M) |4 o# d&gt; reg2.test()
) ?. X9 s1 [3 [1 }  Gtrue
& F  |7 {' u1 L: I// 校验时不传参数默认传的是undefined" `' s5 C$ @. O2 I9 g
</code></pre>  r( N( Q1 F) w. H& z
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' ~; l1 p3 m3 W/ U- n: L9 w4 q5 Y( N
<p>就相当于是<code>python</code>中的字典</p>
" G) W% w# ]! P5 r; p! H/ h! L<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}' b8 Z0 ?  H; h4 p4 a  W
&gt; person! \9 V+ ^. Z7 r5 \
{Name: 'Hans', Age: 18}
  n8 Z9 q+ E; B&gt; person.Name) h# k" ~% i* r. l( G
'Hans'5 T  a& f& R& R5 Q& M( y" g) d
&gt; person["Name"]6 n9 H, A& s8 {$ s
'Hans'
" l: h+ v% ~9 Y$ I) q( y1 Y0 u: L2 }4 d; n
// 也可以使用new Object创建
* }8 ]- q4 Y7 _, A* K7 l&gt; var person2 = new Object()! ]8 \+ T5 E/ g* h9 A: Y, y
&gt; person2.name = "Hello"( G( K8 L4 ?# ^6 R; x% a+ u- x
'Hello'
4 _; L$ a: i5 @+ X  w&gt; person2.age = 20
. |; E2 b4 p; ~20
2 v  O8 j" A' b9 T" X</code></pre>& @7 q) S# H1 D8 Y5 ]8 k) w# n4 b$ A
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
1 Z8 q3 u; f* S  I<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
" W5 q! t8 D% b  [<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
  W  G* G8 H2 X- A<h3 id="31-window-对象">3.1 window 对象</h3>& u" P/ D+ |+ Y- O, W' l
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
- w; x- ]$ @# x1 D: E& U<pre><code class="language-python">//览器窗口的内部高度
: ^  I2 `4 @, d( h* J6 s! k6 pwindow.innerHeight
) A5 M( Y5 |. j1 r; N6 U/ n7066 N6 w# h" J/ U0 I- ?" [6 U
//浏览器窗口的内部宽度
# ]; c# ?! [0 y' n. U' i6 F5 Twindow.innerWidth
6 o+ ^) H6 _$ H0 p  x& Y4 [4 |- {1522  S( _" p( M/ v( V# d
// 打开新窗口
4 ]+ t! s: S4 F- }4 M4 S2 ywindow.open('https://www.baidu.com')1 z6 x+ W) E0 v: [9 m" b
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}1 Z& l* c1 e, |. F
// 关闭当前窗口0 v( U9 F" ?& [2 T: \
window.close() , V0 w$ @3 w% ^1 l* J6 e( P
//  后退一页
1 l- G, n) y# d4 ^6 N2 kwindow.history.back()+ T1 ^- D  E  z/ j
// 前进一页# p8 ]2 `; l  B: b2 }
window.history.forward() , K; f( _& _1 U4 v/ Y
//Web浏览器全称6 {9 o2 R3 Y- `/ q2 @0 j9 M
window.navigator.appName( e6 `3 z* _/ Y" |! j0 \& c5 j. _
'Netscape'$ S) w( `' X" C
// Web浏览器厂商和版本的详细字符串2 [" q6 i0 H5 M: X( N
window.navigator.appVersion% A. v* v4 _* t/ t/ o" H
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. L( X( f8 S" \; z// 客户端绝大部分信息
, s4 B0 j& [4 A! j  `, _# iwindow.navigator.userAgent
8 V! n: k' E& p" z* u& ^'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'6 s6 V# t" e8 ^% ^; C6 m
// 浏览器运行所在的操作系统' U3 `; |# f0 v! w. u( [
window.navigator.platform9 Z" ^6 Z) y) W  z/ N  d
'Win32'
; E3 T% a3 n: i) J$ ^* ]5 U. ^8 |+ J3 i
//  获取URL/ A+ u) S$ E/ s  ~5 Q
window.location.href; k2 z% ?  }* W: c. U/ h) z$ C1 [
// 跳转到指定页面, m7 _, Q* x  b4 H8 U
window.location.href='https://www.baidu.com': X8 ^/ w: K" P/ _0 u6 p3 ], A# @
// 重新加载页面( {* D- X  [( a: ?7 l7 N8 F
window.location.reload() 4 D  u- @5 V; R( o3 d$ F
</code></pre>
( d% F7 y5 a0 }! M; P: K1 k. f# z2 y<h3 id="32-弹出框">3.2 弹出框</h3>
. C( Z; Z% j' q5 N<p>三种消息框:警告框、确认框、提示框。</p>
& C0 I0 w$ b' C7 e<h4 id="321-警告框">3.2.1 警告框</h4>
- E3 p( J0 p3 p6 q<pre><code class="language-javascript">alert("Hello")
( W4 \6 Q  g- F" ~</code></pre>. p  H8 r6 R" M7 r' F5 g$ [+ ~
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>: w& K) q0 m- V& w$ e) b9 d
<h4 id="322-确认框">3.2.2 确认框</h4>
9 G! h; ^! B+ P5 y<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>$ `. C/ J( R% k1 B- y& f
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
& a/ N* T. D) |: `5 itrue
% b9 @7 _; H* L" C" m&gt; confirm("你确定吗?")  // 点取消返回false$ y! O& p( N* D, R# Y
false: s3 [( o2 G/ q7 Y' m% F4 L2 t5 D6 h
</code></pre>
4 c$ L$ ^  S# d/ f3 ]<h4 id="323-提示框">3.2.3 提示框</h4>
* a1 a- b9 {  ]; R<p><code>prompt("请输入","提示")</code></p>
8 n. k6 n& \& d<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
4 J* \  r/ A  x- y8 A  z<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
7 F4 J% F2 i# e2 j% f' b2 Y<p>如果直接点<code>取消</code>后端收到<code>null</code></p>3 e$ I/ W' t6 ?& X) o1 K  r
<h3 id="33-计时相关">3.3 计时相关</h3>
: e  h. R& c" U" P/ w: S6 q/ k<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>4 N; T7 f! z4 h
<pre><code class="language-javascript">// 等于3秒钟弹窗+ X  c9 x" t( R) I% G
setTimeout(function(){alert("Hello")}, 3000)
2 t2 `. R% _# I2 g' T- Y. j6 O+ Y. X: i
var t = setTimeout(function(){alert("Hello")}, 3000)
( i' M3 n0 e4 k( V; h0 C! y% i1 A7 A  }- F
// 取消setTimeout设置
/ o8 h4 u1 i* W% f1 E1 g- rclearTimeout(t)
% C, h' d" \; j# @, {</code></pre>
+ C  G% y" r* I, u2 ]0 c<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
' T5 L6 A/ v6 q<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>; X4 e& |( t8 B- E( ~
<pre><code class="language-javascript">每三秒弹出 "hello" :
4 A7 T# O6 J* ~setInterval(function(){alert("Hello")},3000);  M5 q" r& W$ B  E
</code></pre>
8 J$ X1 b+ r2 {/ t# L<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
% [8 ?2 j$ z0 e3 [<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
/ n' y7 E! c& v$ S  Y7 ~$ e7 l//取消:
8 w, U: E6 J3 P9 {" EclearInterval(t); u# y5 o8 a9 z- s, V
</code></pre>' `+ Z# O. \8 J* n, w9 L! p

! _7 h; q6 R, V7 g& P' k3 B
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-27 13:08 , Processed in 0.072084 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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