飞雪团队

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

前端之JavaScript

[复制链接]

7903

主题

7991

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

, V9 J9 e% U' ]( i2 D% o<h1 id="前端之javascript">前端之JavaScript</h1>% h) i7 P' P! U. p
<p></p><p></p>
6 A# f. q/ i! j! I- j<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>4 A& J4 T) R6 Z' |- a7 A$ A' q
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>$ Y) _' P( t+ M; n, \+ ^
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
$ c+ _+ I0 m- \1 e它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>; \& h* \. E6 l! N4 M
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>1 z. J% S4 d. O  S- r; G& |( [
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>% h2 F0 Q+ g, u3 E
<h3 id="21-注释">2.1 注释</h3>7 @) u, I: E( s& d+ I& r
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>: f6 t) P- a5 I8 P
<pre><code class="language-javascript">// 这是单行注释
; r( J& Z) g. ?' i
) Z) W" `& k8 l5 ?" ^, e! K/*
' f" V; {& {; u2 |+ F这是多行注释的第一行,$ g1 K+ c- M/ e
这是第二行。
: \! e9 \- o) \) i. ~. |*/& g0 H+ B: c; H  o6 \
</code></pre>
9 m/ ]) W  ^& b8 F<h3 id="22-变量和常量">2.2 变量和常量</h3>
( d) U6 P, x: c; V( ?9 r# [) \<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
$ [4 N4 y* M& ~+ R0 q% |4 U2 I<ul>. }2 z" {* Y# M6 }9 l8 V
<li>变量必须以字母开头</li>2 ^2 ?( c1 a" N
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
) ?% Y, Y$ f' I! E9 @% X9 G; h) C<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>2 T! r+ p: O  U% m. |
</ul>
1 i% k+ T5 x! y$ w<p><code>var</code>定义的都为全局变量</p>
) `* U8 i6 C9 B% F<p><code>let</code>可以声明局部变量</p>4 a% }) t3 c  M5 c9 Q
<p><strong>声明变量:</strong></p>
4 q2 B! s6 P+ q<pre><code class="language-javascript">// 定义单个变量
. y6 R* i" ]* U6 P&gt; var name0 @+ M: ?/ m( H& l- p- X
&gt; name = 'Hans'
7 r" `& C* b0 `% T. n  d//定义并赋值
6 e. B, j& {% e# b( f&gt; var name = 'Hans'& W5 H5 |' b' @8 M. }6 a
&gt; name8 B9 o9 J) c/ Z# T. P8 d% L
'Hans'" x1 b, T2 ~( e) H- {

& S; ]* v" ^6 O* F* a7 f/ o! K// 定义多个变量$ }9 N' n- s) I" o/ W1 ~" S
&gt; var name = "Hans", age = 18
7 w3 I2 s) P- M, E- I3 x& L4 {+ z&gt; name
: h$ b& b9 x" q! ^4 c9 z, @'Hans'( v1 R& i( x7 ~9 f% B
&gt; age5 r7 k" |7 r* v3 _) I! H. u- D
18
9 b2 M* B. D1 j! F' a- w
) d2 f, P# x& A% {8 g//多行使用反引号`` 类型python中的三引号2 N5 x5 y% p: m7 Q" r. C
&gt; var text = `A young idler,
) y2 z) A- g% S) F2 _' Oan old beggar`
( ^  }: W7 C( L&gt; text* i3 N& ?7 S7 d5 g/ `8 G
'A young idler,\nan old beggar'; `' @7 m" q4 R. {/ x0 X
</code></pre>
$ B: c* g# f' q( ?! l/ e( F) k! B<p><strong>声明常量:</strong></p>3 e1 G* i( z5 ^. p0 Y
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
2 |3 y0 e5 H& G" p/ g/ \! i<pre><code class="language-javascript">&gt; const pi = 3.14& N5 ]9 d' Q! R$ Q
&gt; pi
) l- A7 D* j* N3.14
; d; P# f8 N/ ]/ s8 O+ ]* e  `3 p&gt;  pi = 3.01! n; O' o2 T# A8 K6 f
Uncaught TypeError: Assignment to constant variable.0 y0 o- l& d; \
    at &lt;anonymous&gt;:1:4
3 Q& U( l& F) b# I8 i9 k6 P! I; t6 ?
</code></pre>
; t0 ^; C8 ?4 N7 ?3 G<h3 id="23-基本数据类型">2.3 基本数据类型</h3>: n* n) c( S. L8 L
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>% b% ~! k1 r2 T* |
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
: U- t1 V9 E. [$ {7 b$ |! ~, q<h4 id="231-number类型">2.3.1 Number类型</h4># w" ?6 ~/ y' l, ^
<pre><code class="language-javascript">&gt; var a = 5
% k, ~* q' Y4 F( I& N1 ]4 C, C8 v; }% z&gt; typeof a   //查看变量的类型  
) J; h# i3 q$ u9 h) m- H  [number
$ i: F; z& I/ v5 P( k- ?) T1 U' j: ^7 Y- ^3 D
&gt; var b = 1.3
  j1 k7 N% V  ]3 d&gt; typeof b
# l, |; Y! E1 a. D. bnumber
& _+ N  E. M% Q, P+ d; ]( h& \% }) w: m& U( O' w" v
// 不管整型还是浮点型打开出来的结果都是number类型* u! V0 X2 ^/ P6 O# v
/ B$ Z5 g0 A  L# y7 p
/*7 b2 S, I; H8 p1 H8 @( D
NaN:Not A Number
% ^! L. }) J* |+ KNaN属于数值类型 表示的意思是 不是一个数字
5 v6 i: i4 {7 x7 x% U) V+ W' R*/$ S1 [: t1 o6 n& j6 V
8 S% Y: n* Z; N, J
parseInt('2345')  // 转整型( j3 B2 {7 J9 I
2345- L0 b3 n2 Y8 g9 i, R  E. B0 c
parseInt('2345.5')- f7 Y) O) x7 q! J* N
2345
$ x- d/ ~. x8 _7 BparseFloat('2345.5') // 转浮点型
- d4 z* N* x; f% X  ?2 }4 l2345.51 _% k/ r2 F, A5 r6 Z& P
parseFloat('ABC')* e; |# T; Z% G' j! a
NaN
. K( F' C2 v! M( JparseInt('abc')3 C1 S/ n5 z" ]
NaN* l" N% c9 f  B+ y8 P' R/ \, c
</code></pre>$ a% K9 W' d4 ^0 a
<h4 id="232-string类型">2.3.2 String类型</h4>
3 R9 _1 d, F3 H- P! q8 k<pre><code class="language-javascript">&gt; var name = 'Hans'6 T) B) L: k' F$ o5 S# s: r
&gt; typeof name! d8 n1 k# Y& ~) T7 @
'string'9 d, E2 q3 L* N7 F3 x& _" a: j

* r, P2 {7 F: U; `" \//常用方法5 M; ?+ R! W1 E
// 变量值长度
% U: i# K$ e3 P/ i&gt; name.length& U* y0 x' h3 `& d
4
% o% I9 A) J0 |7 L" [5 ~// trim() 移除空白+ H+ {, ?7 l* Y& x2 P9 l7 i7 ]
&gt; var a = '    ABC    '
/ L8 x7 t/ X4 d0 F+ U, a&gt; a
0 O& y6 `9 O3 N' \: q# i6 f'    ABC    ': ?# L2 S$ N; j) x  G/ Q( U
&gt; a.trim()
. `. a% Y/ X$ T) J* d'ABC'
* ]3 _: K" V* ~9 `2 S. l//移除左边的空白
2 f4 q' T) s0 J& h# P+ H" C&gt; a.trimLeft()
; a7 U4 V- }" K'ABC    '
1 e  B& w  B% c//移除右边的空白# A, f- r7 Y+ B$ ]
&gt; a.trimRight()1 a) I7 u: J" o+ Z/ G: ]$ W/ q9 D
'    ABC'
/ S- [4 i& `4 n  s) u) M
7 U1 n% |% Z0 I. F5 X0 b6 {& m//返回第n个字符,从0开始
* Z7 H, p- Z. [3 I  [6 v" |/ }&gt; name
$ |: ]% W# |2 a  s'Hans'* E1 O/ I8 Z/ v! o+ r! q. B( q4 |
&gt; name.charAt(3)! f6 M- p3 L! F! f# A- R
's'
- R: u9 [6 U$ y2 q3 A9 f$ }- G8 x- X&gt; name.charAt()
7 M6 V: J4 o( w'H'
5 i5 \# J# r/ I5 I&gt; name.charAt(1)
0 ~1 l4 {( N9 F4 N# b% N  S'a'6 a9 A) J( j3 }

0 G  n! M. V+ t. k/ n// 在javascript中推荐使用加号(+)拼接+ R) n2 I  K9 C5 ]& d0 Y
&gt; name
0 F2 f  ?1 }4 Y  E'Hans'5 Y: f# U* Q+ K5 ^
&gt; a
5 i3 d* h) ~8 y) u- d+ Z7 Z6 e5 ?9 F'    ABC    ': J$ F* d, D7 R9 |# O+ W8 k7 X8 K
&gt; name + a0 _8 x% B! p; D+ A4 l8 m
'Hans    ABC    '. K! @5 M: m' a! a3 Z: {$ F
// 使用concat拼接1 I' w* ~9 }, g
&gt; name.concat(a)
+ C5 m, X- Z& N6 C% I'Hans    ABC    '0 i6 y% M" G. X! t8 j7 p

6 {; J4 w8 |3 \, g% D//indexOf(substring, start)子序列位置
0 y  b, R! p" P3 W% |& j
9 q$ F" E5 c, ^, e* M" d5 b&gt; text
. H6 P. q7 g8 J9 O'A young idler,\nan old beggar', F9 O; X6 ]9 }9 ]3 B+ G
&gt; text.indexOf('young',0)4 w( _# @7 H; R9 Q; Y
2
( A& S4 Y. Y* Q8 S1 v! ~9 I& V; [- L* @+ N- _! b
//.substring(from, to)        根据索引获取子序列
2 N& n6 c; }7 s. n# a3 O: Y' G4 p&gt; text.substring(0,); ?5 X$ _! `, f6 s2 I: n2 _- d, m
'A young idler,\nan old beggar'% }5 _+ d# C0 R# W4 j
&gt; text.substring(0,10)+ ]; v6 t, n0 _0 j  O  E( I
'A young id'0 q/ V1 C; c% l0 {4 M
) k/ S$ C2 ~5 }7 q! w$ U
// .slice(start, end)        切片, 从0开始顾头不顾尾1 C9 X  Q5 F! F* H
&gt; name.slice(0,3)/ u! D# |, J3 Q% w
'Han'+ T0 \+ U# v% w( L
; s3 y0 g( g, z" r% }
// 转小写
. @; c& G0 p, T% S+ `5 g6 M' m&gt; name
9 O, L1 @" W  b3 d'Hans'4 c9 w( X( ?& u- `
&gt; name.toLowerCase()
" F; P( |  I5 h( F: y' y; ~) Y'hans'  X7 p& f9 `5 J# P! s$ p" H
// 转大写+ l; l: ]- e/ I
&gt; name.toUpperCase()
, F+ q6 _% L5 c6 O+ X'HANS'
' k' c: F7 [- J- h" Y  n0 w+ G8 Q$ K4 ?1 y
// 分隔7 e' m& N- V1 Z# Z3 W2 J
&gt; name
* U2 b, B4 q9 C5 q3 _$ d'Hans') [! [+ Q4 ?. g$ L
&gt; name.split('a'): P* `4 K6 |* Y  b
(2)&nbsp;['H', 'ns']
5 G1 D: r- R! B# n- N& t</code></pre>6 h6 T# ^: ^( w( A0 L  I7 Z! B
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
( q8 k' s; C# W6 e2 j/ H* o+ L<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
0 `! f, J. B3 N  ]4 @, ?+ K, A<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
/ [; U1 U8 o' T- k7 O<p><strong>null和undefined</strong></p>
6 v* B  s6 `' k6 o$ c: [/ |& Q( ^<ul>+ F/ o5 Q  Y6 y! O: U4 [
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
# L3 D6 S+ @! p, A: |<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>9 b/ J+ j( T" a/ x) d7 o
</ul>
! N- V' f! {$ h<h4 id="234-array数组">2.3.4 Array数组</h4>
  Z: q2 d" `3 m4 \/ P! q( m  Q<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
8 a5 p4 ^0 S$ }<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 4 w& F( N: A3 [
&gt; array1# D; p3 U( @- P6 y4 P/ U9 M
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
1 d- r7 t3 _: a0 |5 y& h&gt; console.log(array1[2])  //console.log打印类似python中的print$ ?/ K, Y: i8 U0 |, z4 Z
3
8 h2 e, h% R2 g5 b$ B// length元素个数4 |3 d& U  t2 L/ D6 Z
&gt; array1.length
# c7 d: x- c5 E* C  b8 |. q65 x& {3 C2 m/ ~9 _
// 在尾部增加元素,类型append2 ]. C, ~" q  r2 z) B8 e+ `
&gt; array1.push('D')" w9 T0 D! V: J  H% t
7
/ e4 F* Z) V# Y7 y1 l! r&gt; array1
" u4 H) y2 T, ^( c(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']7 `* T; P$ I! L8 M  g: X
// 在头部增加元素3 ?& O: R% Z4 r$ o: V. d" N* \
&gt; array1.unshift(0)9 `# c1 A9 H" F1 h8 ~
8- }" q) \' X+ U! Y
&gt; array17 G# q7 }% k$ f4 V* R
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']( J. K1 P1 ^; i8 s/ M) v

/ `" P7 @. v6 E1 |+ r9 F! n+ C& U: E//取最后一个元素
( H& M  r$ B; X% H4 j4 P&gt; array1.pop()
+ d8 r4 R  B  {  x1 ~" }5 W'D'
! p6 O( f$ s7 g&gt; array14 w" W1 v3 \0 ?
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
3 e$ }: e6 m  E/ X+ C; T//取头部元素
* [5 E9 \0 b# X9 [7 F&gt; array1.shift()
8 U" p$ n6 g$ ?05 \7 g# _( C+ A/ A% s6 W
&gt; array1: ~: o6 C7 _3 K+ q, O
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 _+ @( V% }6 a# I" R5 p* O% G% V- g; O6 x7 j% o
//切片, 从0开始顾头不顾尾
: p" [; R9 y" Q" v&gt; array1.slice(3,6)
5 d1 c6 f6 W7 S* W, R$ ~1 q2 A(3)&nbsp;['a', 'b', 'c']% O  X/ k/ Q7 x
// 反转
1 G, w8 V0 _$ I0 L&gt; array1.reverse()
! Q% \3 B9 J. U# Z: s7 o; n(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
6 E- _0 u# A# S, e// 将数组元素连接成字符串
8 i. T6 l4 F4 F& @&gt; array1.join() // 什么不都写默认使用逗号分隔
- w6 X+ I8 g: Z% q: ?1 O'c,b,a,3,2,1', P+ k$ O- x" @+ C
&gt; array1.join('')/ f6 R$ d3 D. z; ]% k' ~5 g7 ^; m9 S. L2 o
'cba321'
7 `; f, @. [7 @&gt; array1.join('|')7 V/ r& N6 E. Y2 S
'c|b|a|3|2|1'( k: n1 E7 X* g3 Y/ D+ a
# G$ H0 V% J! G1 U( x8 Y; p  C( @
// 连接数组
9 b% T2 {( y% V* }  r8 }; |5 \. A&gt; var array2 = ['A','B','C']# r& C9 I" Q( V! N  C0 Q# Z" d0 G( V
&gt; array1.concat(array2)1 H0 _" i5 |7 |. w2 n
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
- J5 ^) Z, M" w' ]) l5 x) }/ X& i" z
// 排序6 c2 F  v6 Y6 I- t
&gt; array1.sort()
' H5 V. Q' h9 N. n8 P9 e(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']: d3 G4 u& y; l- z3 Z  I
; i& N  l8 p3 a9 e% \! f
// 删除元素,并可以向数据组中添加新元素(可选)2 D$ y/ L# h+ }$ P
&gt; array1.splice(3,3)  // 删除元素
8 K; ?4 l+ J, V& F, p# G$ s(3)&nbsp;['a', 'b', 'c']9 m# h$ y/ B; u+ o, L$ N! H0 k7 t
&gt; array1
  Q3 L; [5 |* W0 e, ^& r(3)&nbsp;[1, 2, 3]
) D# g7 `+ u. ]6 g&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素+ p' B9 A2 e0 H$ J" ?0 G" ^. t5 S
[]
# s) q; K! Z2 A, O& r&gt; array1
, a: o$ n# O1 H  y( W" ]: U' h(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
  w1 X8 R& g. O4 u
$ l9 x0 S! x0 _2 F1 u, K/*
' k  }0 w) O" s( @splice(index,howmany,item1,.....,itemX)4 G" h+ `' k8 {
index:必需,必须是数字。规定从何处添加/删除元素。* f, @: _( X  v2 d
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
5 R5 o7 @1 i1 E+ [0 Z" Uitem1, ..., itemX        可选。要添加到数组的新元素3 a1 W3 b4 r4 C( h7 J, H# ^9 N& T
*/
0 ]5 s0 N/ Q0 q( ~7 z( z0 X; [4 W. p5 z5 C% U( B: |
// forEach()        将数组的每个元素传递给回调函数' o% k; m! s# y0 c
&gt; array1.forEach(function test(n){console.log(n)})0 E8 \( g* U+ W0 i, s  i  L
18 w& |  V  b/ {' Z0 o
2% @( e0 E4 a, l- r  D
3  b5 U& Z0 e, I* V! N
A
7 w/ p, ~) ?1 E, J4 x: C" z) M B* t/ F. q* p) T: p
C
, ?- C2 k& m8 s9 H// 返回一个数组元素调用函数处理后的值的新数组
% ?, B5 B. l( t& w! E6 b8 D9 S&gt; array1.map(function(value){return value +1})
* a5 H5 x2 R. t4 D(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']- s# O3 H! N: X5 b; P
</code></pre>
& O& J7 P; G: |<h3 id="24-运算符">2.4 运算符</h3>
5 o! j7 Z0 o; n0 P<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( G& y, k: m' u& y
<p><code>+ - * / % ++ --</code></p>
/ {3 V, {" k) I, ]. O<pre><code class="language-javascript">&gt; var a = 6# C8 A( L1 M' j/ _: S; Q
&gt; var b = 3. I# n# D8 t5 r7 ^4 m, z2 q
// 加) @# u6 X6 k7 ?
&gt; a + b  v( h9 V/ {9 ]. K
9- V1 E1 z( ~4 Z, U) z3 Q! \
// 减( f+ u+ x- v5 ^# k" L$ P5 g) n
&gt; a - b* l4 b% ]% H5 S( p- r! Y
3
. M" P  X7 A2 W0 P& @// 乘
/ d$ J5 P- _3 `/ C$ s&gt; a * b5 s, o4 l1 ^: b* a" c
18
7 s) e" ^% X! f! \  Q8 ]// 除1 g# L3 W8 |3 Z& k* {9 I$ Q
&gt; a / b* {4 ~+ b+ s- v" r" o* ]2 t! n, ~) l
2. K  l0 i# I6 Y) T1 Z$ Q; P7 u
// 取模(取余)
9 q! f% U2 Z% b7 y( O8 X&gt; a % b3 B+ x& c( E1 ^& k
0# m: s8 m. A3 ~3 G7 W$ M
// 自增1(先赋值再增1)0 x/ x/ n  A% f" b9 l) @6 @
&gt; a++( l4 y+ r+ ^( R" \6 p
6; ]1 `  ]6 ^+ t1 Z
&gt; a0 x* _& ~: c% d4 d0 g  {
7* n- C% Z3 w+ L- U' l. E
// 自减1(先赋值再减1)" G0 Z. S, m) }5 P" r4 z
&gt; a--1 W# P, |4 G# ^- T+ z
7" f/ Q/ i+ A; G$ @2 {
&gt; a% `5 C* K$ m0 [. N  r; [
6
5 F, J. N5 H6 t) T8 o& w4 N// 自增1(先增1再赋值)& O" ~8 k1 z4 e- i9 @
&gt; ++a
8 U8 V6 I+ b4 l" |. Z7 V! @7
- ]  _! k. j3 W( a& h// 自减1(先减1再赋值); ~: ^5 T5 l( r
&gt; --a& [! ~4 n3 V( H# l3 o+ F6 g  G
6
" ?. F/ u0 W+ r0 d! F&gt; a
  n" d( h* T& L6
$ H, L& c6 t( `1 G3 j% B$ P- i# |( r0 |9 a3 a1 S% T
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理! J7 _- E$ m# y6 E8 d0 q
</code></pre>( B6 W3 b' E' ]7 L5 I1 _) w
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
& ]4 t) i' y+ a<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
/ ~+ F6 s. g" Z<pre><code class="language-javascript">// 大于
$ d8 \& P  o2 s# Q&gt; a &gt; b3 N) g. |" x- x! T
true$ P2 x% x& C. r3 a
// 大于等于
* }' r& b3 V# ?# d1 y- }) y&gt; a &gt;= b& p7 C; N7 I. k4 |- W; }7 n
true
3 e' r  {5 `: V9 `8 {5 w// 小于
, e: t( A: f& g&gt; a &lt; b  U0 t4 T0 |  T
false
1 r8 ?5 E  c2 ]4 E// 小于等于
8 g. O' X+ o3 i; C' m/ h+ O" {&gt; a &lt;= b
8 D: J1 ]$ l) a) J8 V% @false  v! Z! j0 \, C9 P: T5 S" W
// 弱不等于
# k3 h. n) }+ g2 ]: \% J+ N&gt; a != b
" p+ ]9 ?- @  J! l  r' I7 X( Ltrue4 O- m' _6 s' X& D4 ^, x, i) R) Z
// 弱等于( W% y+ `9 c/ f
&gt; 1 == '1'( K4 B  d* i, L" p& _2 i- g
true% n. j: n! k8 g% r" H
// 强等于
+ F9 D( s- p- N5 l8 R: [0 e$ E9 u&gt; 1 === '1', O: L8 u1 y0 O% [/ _
false
" Q- y& f$ v9 {) v3 S& b// 强不等于
3 _2 ~* R* v. x0 n) Y; ]1 F&gt; 1 !== '1'
  R) p" q$ J( C3 F1 Otrue
- x0 x3 n3 I5 O7 c' }
- R0 W! I! ]- ]7 s/ D3 P/*" V7 f% G# d+ C9 y( a  l  M* H
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
. Y8 c( K1 I. J" `*/
. v( E2 H: ~* r- d( I4 h* Z</code></pre>2 V" A' F) n) H$ T6 z6 n
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
  I8 c9 s7 s8 g9 R6 g9 }<p><code>&amp;&amp; || !</code></p>+ C  ^* O+ }" Y1 ]9 w! s3 Q; [
<pre><code class="language-javascript">&amp;&amp; 与
8 Y! m- V6 b( K" p2 x# p& X2 A, ?# A|| or
7 o. `- F2 ^$ L4 r! 非
! j% R3 I* `' e& g1 t</code></pre>' D4 \5 g* o$ c- Z) ]
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
3 q, J/ \! g2 x7 Z. }  C: p5 ~<p><code>= += -= *= /=</code></p>
4 f$ s0 V0 R; X4 E<pre><code class="language-javascript">// 赋值
9 Z& P5 ?4 ?  n/ x, @&gt; var x = 3
& \/ C& f$ p5 T5 I. P/ C4 x// 加等于
( h2 F# {+ ?0 |# e5 v&gt; x += 2
5 r6 U  Q& R/ ?( m5 I$ W7 f; z6 u5
9 C! ]' p# j, F// 减等于! a, Z  o  x! P; ]
&gt; x -= 1! h3 w9 U& _9 `2 k8 `
4
" ^% q: A" c. g4 v* `// 乘等于# p# B/ w% ^% }- c. O
&gt; x *= 2
) u$ x3 q  d, v9 }) I0 R/ M  }8. P3 F& E4 s2 Y* [3 u. }( L) u
// 除等于
! j8 W; Z: S1 z" q6 }&gt; x /= 22 z  h( a- r* w9 K
41 g5 u% ^9 p5 Z4 J5 H% l
</code></pre>
) ~6 ]6 X' l+ G$ z9 O) b. V6 A8 N<h3 id="25-流程控制">2.5 流程控制</h3>
' t4 M7 H0 G+ p% ^! d/ }<h4 id="251-if">2.5.1 if</h4>$ N3 ?8 R  j! {! D2 ~  X
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
& L, T  g6 H1 ?& f# f
3 M$ |$ c, b2 J9 B' R- m8 B&gt; var x = 3
! D( ]7 I* g5 L. _. X&gt; if (x &gt; 2){console.log("OK")}
* B' U( ]1 s. H3 k* P0 X2 h; Z& _ OK
/ N9 |/ Q/ l6 F' `$ J- }* w+ y
2 N2 g8 d$ p" I2, if(条件){条件成立执行代码}
& O9 s6 G# X/ N        else{条件不成立执行代码}
- }! n, m- f0 ~' d( f
$ n" c& o" b/ v&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
6 a4 h" m" B+ |; u( Y'NO'8 G+ T: Q7 C2 X0 \9 X

: n2 i. i4 e) m0 e$ `3, if(条件1){条件1成立执行代码}
$ L1 Q8 K& O6 x9 v        else if(条件2){条件2成立执行代码}( ?9 n' ?& m* t. k8 t$ d* K
    else{上面条件都不成立执行代码}9 P3 T. y4 ~) F- {

* f( S2 f8 G- B) w' I# T) ^/ i, }8 f&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
3 N. r% w8 I; p: N% N* f( F Ha
0 O: Q- {0 D* a# R+ @</code></pre>
& H) n8 _& B8 t. K<h4 id="252-switch">2.5.2 switch</h4>" r: H5 I2 U" z" }
<pre><code class="language-javascript">var day = new Date().getDay();' S. i6 X% A1 w6 W9 g
switch (day) {! S; C8 B' [8 W- Q  m7 k( i/ }
  case 0:; x1 r& k3 W% f  Z9 J
  console.log("Sunday");& B  N* P2 R& N; \% X
  break;
* D1 j3 Y. H. c7 M/ f$ e  case 1:
5 m) r/ |% _# h8 j! {0 a, }2 ~  console.log("Monday");1 y0 a/ p; w) Q' }; l/ h. j9 ^
  break;
" [8 E8 C. ~' o9 e5 }0 qdefault:
% F1 @) j( u  V4 \* q1 d$ V1 y  console.log("不在范围")
7 R4 ~$ t9 A' p. ~}5 c  M! w3 Y# Q. C6 I+ z+ I, s
不在范围! M. Y5 j: F" L6 N' g; K
</code></pre>( C! B6 T  f  x% J
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
3 g0 Q5 e' ?, D<h4 id="253-for">2.5.3 for</h4>
* `6 |1 Z% g* F" v2 d, |<pre><code class="language-python">// for 循环: ^, B7 R. z7 X( C0 J0 d
        for(起始值;循环条件;每次循环后执行的操作){
5 y* x) i; ~* l% N        for循环体代码
/ M5 e# J. E5 ~, k1 b+ n    }7 n, x; \! }( u  ~- h6 M% z' d* F
: j! o# \8 B8 J& p) v- y
for (var i = 0; i&lt;10; i++){
0 @. }- o( V# }6 B! @0 f    console.log(i)
0 l4 D. o- Y8 O! |3 N9 R& u) j5 t}
# O5 T$ H" T/ n2 @9 p) w        07 I! P: i& r  v% K
        1+ `4 V( H  O" x9 Z) v# c4 f
        2
/ N" F/ R3 H% K8 J. M        3
6 t2 _2 m. a5 Q( y; h        4+ b/ c: z, [8 o" p8 b2 M- R
        5
+ }: b. H) _' s; A        6
5 c4 r4 C% Z6 b+ c" D: ]! u        7
4 y2 Z& U' L4 o9 \        89 j. D9 N; a  |: t8 ?5 G  W
        9$ C! N, d0 C7 H% j2 P1 i/ r9 l! V
</code></pre>4 i7 `4 m$ g) ^: h0 Y) W8 o
<h4 id="254-while">2.5.4 while</h4>8 g+ j+ z( s/ F" z2 z
<pre><code class="language-javascript">// while 循环) I" [% `, j0 V8 O: n: H
        while(循环条件){
" {7 F6 @& h' I* U' b7 B; a        循环体代码
1 e  j  Y; p2 h/ M6 b    }  l8 X" ^- `* L+ H  K2 P7 t2 }4 S
7 u6 e! v' G# J& t1 n( f" C: O5 ]
&gt; var i = 0: R6 `+ X6 C; h6 V; ]1 M
&gt; while(i&lt;10){& w8 s$ O, o6 Q* I+ M" V' }9 n' T
    console.log(i)
# V) S' B- {! d, u) b+ E/ i    i++$ @8 _; p4 a: i
}8 S1 ]2 i3 p2 z- V& Q9 |
0
6 r0 s4 I* g; O  z 1
) T8 J2 `$ @4 m1 i' o/ ]) v 25 Q$ @/ k8 Z/ }* N3 ]8 j. T
34 `' r, ]$ Z. v' m- }' l4 B
4
) r  i8 o! v) A6 k 52 m7 S. D$ f9 I% y# p( j7 a
6
/ g+ R( j2 v3 a; b- t0 V" Z0 D0 U 7
: P( U+ X2 L9 j5 i3 l* w& a' q 8+ r" B# Q/ J' }6 Q+ j4 {
9. H! }& d: P/ y4 F* \  _+ w4 W5 f
</code></pre>
( B6 b# y: T' D; V: ~9 U<h4 id="255-break和continue">2.5.5 break和continue</h4>
. T9 K2 n! j  n$ K1 U( H<pre><code class="language-javascript">// break& X% @) F2 N6 T# e/ {
for (var i = 0; i&lt;10; i++){9 G7 r5 u8 b0 l* V! ^* L* c
    if (i == 5){break}
( g+ i' L8 T6 j' Y9 m" a* L" d    console.log(i)) c0 H1 l" A( T) d, j
}$ t0 Q" i6 ^% {# M. F. _) K$ ?3 q, q
0
3 T' u9 z! w2 ?$ c, n7 w6 Y% G. G 1
) W) c. k2 c  P5 D3 E 2
" H; p5 S6 I# _" N- r 3
3 d* i1 P# c4 `- f" L 4
0 [! {3 b# c: P3 I* G' z// continue/ j& L6 o" k% [7 v6 U
for (var i = 0; i&lt;10; i++){5 q/ c! L- v; }# w. K: N6 d; W
    if (i == 5){continue}
9 t) f) \6 ^! W7 t    console.log(i)( x% C0 P# p! n3 G. Q/ P& h: {
}& p; i+ K5 F8 D* d9 T- B- V
0, {# H  r; r- Q- T, ]
1- \1 a8 S' o7 ]' Y1 M
2
  {1 I) z: A" T' h5 d1 j1 \- ]$ g$ A" } 3! \7 G4 k6 ]' T: u
4
9 Q7 q( H4 r( \" j 6$ l6 H4 `# A# g3 ]# a
7. Z; i6 K. S1 P" Z  Q4 g* ?& x# X
8
$ X4 e& Z8 f0 \ 9+ d: N; M  ~' ~: V# A
% l. [3 R" I* X5 Z+ g) d
</code></pre>" u; _: Z# q, p9 W2 u
<h3 id="26-三元运算">2.6 三元运算</h3>
  Z+ G$ X; R! M+ f, ^<pre><code class="language-javascript">&gt; a% v% z7 r/ Y- b. o
6
3 S0 ?* k; O' b&gt; b8 C8 h$ F( ^6 M$ P! q+ h0 A3 }, f
34 W9 u* _9 y6 @7 U: O' Z4 A" a$ |7 j

5 y( C3 H' {* {% H$ _//条件成立c为a的值,不成立c为b的值3 e) p! s. ~  t" M/ {
&gt; var c = a &gt; b ? a : b
3 D& X2 j, `$ E# U&gt; c
7 U5 o' V( I9 P+ a" {) U6
: K( q- @3 S" K+ j' S) V4 Z* h2 R& y; V9 j1 l) \
// 三元运算可以嵌套  l, L/ @( a1 W0 H# g
</code></pre>
. ~. ~$ U9 K, _, }8 t<h3 id="27-函数">2.7 函数</h3>- T9 X2 y4 U3 Y% w+ G
<pre><code class="language-javascript">1. 普通函数
' N9 \5 \6 d% t3 _5 ^! \/ I&gt; function foo1(){
# @$ W7 ~! Y# H    console.log("Hi")
, [) e6 L+ U6 Y8 w}4 y2 H' x2 ], l6 |+ W7 t, W

; x6 _, m0 p) \1 g( C* e4 `&gt; foo1()
4 [7 E" f0 x& \3 x        Hi) R) G1 [; X+ E- x) w
2. 带参数函数3 T0 H" h2 `4 u( b$ A7 r% H
&gt; function foo1(name){
! t6 W( Q7 m9 bconsole.log("Hi",name)7 i8 g  J% }& G' j- r, S0 e9 }
}
9 A) s( r: t- `. b* R9 Q
, G" {% {& G% H7 c8 T+ {&gt; foo1("Hans")3 E! {0 U1 P, p4 g% E
Hi Hans
6 P) h) C: E* K1 ]1 D
+ K+ ]8 z  A$ h# G6 M5 U8 Q&gt; var name = "Hello": y5 x2 H# O7 w3 [3 `
&gt; foo1(name)- ^. R! b: s4 o, J4 U
Hi Hello
) \4 t% L. y( M& t; q# g$ o8 f7 G4 Q4 F' n; G- o5 g1 u- t
3. 带返回值函数
- ?9 K5 ^+ q6 x( `' W&gt; function foo1(a,b){
1 n4 N+ w) h% v3 V. q4 U' P  j        return a + b   ! Q2 V" w* O3 ]$ @! `; \
}9 I% ~" q3 t2 L" J
&gt; foo1(1,2)' ?* o% p: [6 P' L
3
2 M3 S) x! A! T9 s! v&gt; var a = foo1(10,20)  //接受函数返回值" L! S. l# [; X
&gt; a' g0 L% j/ g+ |% g
30  P9 g. f+ g6 H
2 h8 q- P7 |. O0 q4 _
4. 匿名函数$ z" ~! r* y( n- G% y
&gt; var sum = function(a, b){& i+ }% Z" }$ ~  O3 |
  return a + b;: s9 J7 s! d( _8 G% |) W
}
; C6 M- n3 i' z4 A&gt; sum(1,2)2 `$ M) Q* M* d5 e( S( @& Y
3% n9 F& j& L7 n/ u- x- T

, s5 p3 G4 k1 X5 x' S0 Q, v3 [# }8 [// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
8 e# ?, N+ J; T+ q&gt; (function(a, b){: |& I0 y! n  }/ k
  return a + b, b: d7 G' `1 r5 [7 P, ]
})(10, 20)
. Z+ r! a8 w- T- }306 _# ~+ f* }% O# x7 S

7 `9 D8 k  c! b9 |# W5. 闭包函数
- {+ l5 z/ V) m4 d// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数3 a! g  ]: n' X
var city = "BJ"! x: Y! d0 r9 K4 A- e
function f(){, L; ^9 ]* r1 ]8 R9 V
    var city = "SH"7 g+ |4 ^/ t2 `
    function inner(){
* r) m7 }$ }$ |% m5 V$ r        console.log(city)
$ [9 s. ^5 P! z( M. u! r    }
. L( D3 {3 J" e6 W, {9 z0 l. N: a    return inner
8 L3 F- ~; A" m+ m9 X' E( S: [}
2 u8 {; P4 T  n* r+ [, p+ _# Fvar ret = f()& K6 b% b3 z6 q  z7 J/ e
ret()7 V0 U; H3 M- [/ ?
执行结果:3 V; M1 S, a- r" l  P" I
SH
" m- S/ b; k( Z' Z( g
9 n+ A5 L# w7 P6 u$ O& t! s# b</code></pre>; Q  {, k! p9 X$ ]; R6 }& t
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>* `# V, D- b6 W% o+ p: {; y: F6 l
<pre><code class="language-javascript">var f = v =&gt; v;
5 q+ S$ R- w# P// 等同于* a4 d; d' R' S) |8 I/ P) k
var f = function(v){2 o3 s$ R0 C& x8 p, i
  return v;
0 L' n' Z) E/ Z5 S# B}, U: w+ }% v9 A, q8 X( S, f6 Z
</code></pre>6 L! {; {+ v0 `3 O4 }
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
+ d; z% x+ U  a* [$ F  }9 k! s<pre><code class="language-javascript">function foo1(a,b){
" \, o; N# |5 G5 M  j9 ?$ ^    console.log(arguments.length)  //参数的个数
# D& z  @' w0 s+ T6 v    console.log(arguments[0]) // 第一个参数的值2 b, ]7 D7 n  m4 E
        return a + b   
. b" R" p/ j8 I( Y( @! l  u& I}! i& M, R$ f( V
foo1(10,20)
  {( y& ~4 [7 O; ^' ?! t; K结果:
' K, \# h( A" F0 W5 B. ^; ^0 d 2          //参数的个数 9 R! ~" J7 l. n2 V% A
10        // 第一个参数的值
9 o) Q/ Z' }) J5 e& G  I30        // 返回相加的结果; g4 [# H8 b  F' t/ U" k
</code></pre>! c- [  p$ ~  }
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
  F; [+ g: x1 {1 ]: a0 l! @$ H. E" O<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>  M7 `4 {  v; T2 S$ W
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
6 @& C3 i+ {  B3 M9 Q/ {<h4 id="281-date对象">2.8.1 Date对象</h4>
; M+ `& B& q4 f8 m# f* x  L; R<pre><code class="language-javascript">&gt; var data_test = new Date()
" p8 s7 L1 p7 `: b" \" }3 r8 l&gt; data_test. F; N' v2 m6 ~5 Z9 o; {
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)" x, S2 |, _' _# B, b: a
&gt; data_test.toLocaleString()! Z: t, D5 U+ o, A
'2022/2/11 下午9:44:43'
- m$ n) u3 m* _9 T) L% W& S
9 z' T% ~- K6 W" ~6 _; l8 ~* P; Y&gt; data_test.toLocaleDateString()( u, f, C/ H9 j* Z
'2022/2/11'4 E  I" n' k# ?: C8 J

  R/ X9 M$ T8 {+ y2 z2 g&gt; var data_test2  = new Date("2022/2/11 9:44:43")
0 c' j( N' X; P% |2 B$ H1 c' f&gt; data_test2.toLocaleString()
+ W- u0 N; v8 k5 T: g'2022/2/11 上午9:44:43'
  Z& C0 w# W# _( ^2 G4 \( r; j* S" G7 p
// 获取当前几号  u  s; [8 h! s  t3 t* \# K
&gt; data_test.getDate()
4 e' b2 b1 n1 i/ W* Y1 ?11
: W; o- ?/ g' \6 m2 T, W/ A: i// 获取星期几,数字表示3 K9 |' w0 y# Q/ z/ N
&gt; data_test.getDay()  9 f* w0 F& r# p
5
: [7 D& ?8 J6 e% `. {  m: r// 获取月份(0-11)
1 z0 f! {  A) O, `9 w4 X&gt; data_test.getMonth(): F* r* H! x) u8 e4 D. \/ p( {5 D: G
1
: r' @# A/ \, y// 获取完整年份
# r( i; l3 c4 J- c&gt; data_test.getFullYear()1 q: [5 [* b- _# P0 F: m' F4 p3 N
2022
7 Q9 ^9 a3 r5 l) u// 获取时
" U* K1 x6 |$ X" a8 P1 @- }+ [' I" ~&gt; data_test.getHours()( `3 |( E% T$ L
21
# V0 k+ X5 e: Q, r// 获取分
4 N3 r9 M" M. j& }&gt; data_test.getMinutes()
5 a& U$ ]6 M4 V! f- ~6 X1 j44$ Q* O- p: t+ J+ j# M2 d: s5 P
// 获取秒, r/ e$ Q- J, z8 j: I4 _
&gt; data_test.getSeconds()
: _! ?: m4 W( n2 f9 U& {1 C432 h8 C6 k! m3 U% b/ {, l
// 获取毫秒
" B1 q4 e0 r" |7 j&gt; data_test.getMilliseconds()' k! J* h. `, f; n; C! D
290
0 ~! ~: i- W9 b  T1 o' L// 获取时间戳& B4 }* ^. m" m. ]" I! q
&gt; data_test.getTime()9 U( p8 S: I4 q4 W  @4 Z2 S' @
1644587083290. @2 j  s" ^; ^; u
</code></pre>( L3 [* @/ j" [1 V; D9 q5 U
<h4 id="282-json对象">2.8.2 Json对象</h4>
! P% ^9 f7 Z; [' b9 T6 H& q& n<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串& P6 ?0 K- d, P0 u( v& Y
JSON.parse()  // 反序列化,把JSON字符串转换成对象
! m0 @+ T3 t) p8 M
$ L. I9 c& w% x2 A4 Y! F// 序列化
: N: C! I! o5 S( |&gt; var jstojson = JSON.stringify(person) . D; z& V$ B' \& n, T( q2 s
&gt; jstojson  - h" \4 l/ Y- x- G
'{"Name":"Hans","Age":18}'
5 `! C! p, {/ Z) J, P9 x2 Z$ x; h
) s* _5 V4 M8 _8 ~* b// 反序列化
- p1 B& z: ?5 u* H&gt; var x = JSON.parse(jstojson)
8 g' ~+ a* Q# e" s&gt; x3 e  C4 Z3 C* X$ B* P
{Name: 'Hans', Age: 18}0 Z: ~) j/ ~3 L8 l  j" U
&gt; x.Age
: t8 M, X( d+ `( W4 H18
( U7 Y9 b, U, L4 _" i</code></pre>
9 u% K5 n+ R! [# x2 D: E; n* f, l* i<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
# R$ u, O8 Q% y0 }  z. _8 Z7 \<p>正则</p>
& a4 @: k: W9 q) S& E( c<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");( n4 n! W9 H" H) F
&gt; reg1$ D8 O# D8 P0 K0 Y
/^[a-zA-Z][a-zA-Z0-9]{4,7}/1 t/ n, w# C5 Y; c9 \# a: {6 O
&gt; reg1.test("Hans666"). r2 L6 o7 E  }( g3 C6 k
true% h* u6 s* T2 t/ q5 U/ U' ~, p

6 d/ f' o6 x; h* F$ ?: A% k&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
7 k2 r( f; A. t( ^2 }&gt; reg2
5 f( }7 K  z' L7 m- e3 ~/^[a-zA-Z][a-zA-Z0-9]{4,7}/
! @& w2 o  `; {, P% d/ \9 @&gt; reg2.test('Hasdfa')
# ]! L2 g2 y- strue, x! b8 M. m/ T1 U) \1 D

6 z/ k+ D2 {! p/ u7 L8 G全局匹配:8 h& Y7 _( q( P, i
&gt; name  E2 e& p& W' z: s9 N! B
'Hello'
  n% l$ L- k9 m0 V&gt; name.match(/l/)$ _# P% o. H1 v& v6 C
['l', index: 2, input: 'Hello', groups: undefined]+ y3 w9 O; B) k5 Z  S1 J5 m7 P
2 V( B6 q$ f! M  {" \0 Z
&gt; name.match(/l/g)
# A5 S+ [' ]5 L% m( O) x0 M) _: O  q(2)&nbsp;['l', 'l']# ?5 c6 I! S! p' @
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
$ z( V2 R$ y: b4 h3 }3 x* e* d3 k; c5 ^! a! ?* A% V+ s  `$ j
全局匹配注意事项:
7 i" G! V- P, i2 a( w% H5 H3 R0 ^&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g) ?( S( h  c$ j. ]2 ~5 l/ X6 [1 ~/ H+ H" {
&gt; reg2.test('Hasdfa')9 }7 T! n( T1 t6 u/ _
true
# `5 F/ J! b! M% X# r&gt;reg2.lastIndex;
8 Z- Z3 L# Z1 I. H/ n; P$ q* b; f6
& b3 I# U* }3 h8 Z+ S' o; o&gt; reg2.test('Hasdfa')$ W" n. O, A3 ]
false% g3 @; G) y, Q  O, l
&gt; reg2.lastIndex;
5 }' p5 {& o( y. I2 Z  P' h+ C0! x* g3 n! M# Q0 s" K, |6 y
&gt; reg2.test('Hasdfa'); \3 [( R" ]7 }# b- L; c
true4 D, S' q" ~2 w/ \$ P( n
&gt; reg2.lastIndex;5 U+ {& F8 |6 w5 x  {
6
: a# M! @0 X, {, f% L5 H  D&gt; reg2.test('Hasdfa')7 L2 G& a* v! O
false
. d5 Z5 x8 Y; v&gt; reg2.lastIndex;
# ?' [" X) i( Q2 u+ l. K0 V0
: h4 d2 |# q5 ]3 T// 全局匹配会有一个lastindex属性
/ u; P' a  `, R& D. a' _/ P5 g&gt; reg2.test()* \. K. R# R" S; b/ q1 I
false9 Z" O" ^& ]! z& e6 U5 J
&gt; reg2.test()) y$ R( s5 j$ x/ W6 c
true# n8 U4 e# l' h1 b  z3 D
// 校验时不传参数默认传的是undefined% p6 f7 I+ \3 v
</code></pre>$ X$ g8 b! H% C
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
& n$ q: U% E# f5 z3 `7 t2 _<p>就相当于是<code>python</code>中的字典</p>
  S- b8 `5 H" u& F% f<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
2 _. a' Z+ z( o! _* ]: d, }&gt; person
: e0 s3 ]2 l& ]# p' _  A9 h; e{Name: 'Hans', Age: 18}
+ Y( C7 Y8 n9 X5 C1 l6 V1 J! S2 R9 Z&gt; person.Name3 m  h* }. X! h
'Hans'
* O% `1 o/ t3 o/ e& g0 N&gt; person["Name"]
: A5 A  z% e6 }' S, n9 }'Hans'
9 C& n0 N; k5 m& y# F2 Z- Z
2 a, [/ R! H1 W! T, E  G0 Y' p/ t// 也可以使用new Object创建6 s# o) x' |" V7 i' H+ m% l* H
&gt; var person2 = new Object()" F5 o' G) S# r& O
&gt; person2.name = "Hello": [3 @; \& q9 E7 Z
'Hello'/ k8 o! `3 j2 i2 M1 N8 a: Z
&gt; person2.age = 20
* T% x, o+ l& c$ D20) q: M! E  U6 f. U8 d6 P* p: g; T9 u
</code></pre>
6 z; t, `" K2 T# @! p. f; y' K: a<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>+ p1 I7 h2 W+ Y) s6 y6 C
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>4 @; L- i0 o4 D* y( S  ]
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
" I. s9 \3 k6 ~<h3 id="31-window-对象">3.1 window 对象</h3>) ~5 e1 Z2 e* X% h9 m6 _
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>3 q2 n# s- [6 \1 Z7 V$ J2 z" ~! `
<pre><code class="language-python">//览器窗口的内部高度) n; l6 C$ t, ]+ n: y
window.innerHeight 9 Y9 A/ Z( F  C8 J& w& f( y, W
706! U# Z; ]. D+ y1 N
//浏览器窗口的内部宽度7 C* [! i7 a2 g3 m( ]
window.innerWidth2 K! E- n5 M* ?* |" M( E
1522
! P. e/ Q8 @/ C, W# `// 打开新窗口
/ k6 L/ P8 J" v8 \" {window.open('https://www.baidu.com')
, X& P* s/ j# tWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
1 H0 Q7 K1 }) s1 B; {// 关闭当前窗口
! g2 q8 q4 |2 i7 l" @/ d! O6 x4 mwindow.close()
' W1 c+ W9 l* }: V! j//  后退一页* e1 ?7 u: e/ n1 f5 I- x
window.history.back()
; ]% F: V; z% R( b8 Y0 i  ]// 前进一页
+ e# V9 p& d' `& }window.history.forward() 0 Y' ]/ X; K: b) F  n! W+ Q; i7 ]
//Web浏览器全称3 M4 \2 R/ p, @9 e7 f) Z  ^; ?
window.navigator.appName, v! O+ p- w' R, x7 y9 g( Q
'Netscape'
+ c7 _2 |: n) ]* _+ f+ _+ F// Web浏览器厂商和版本的详细字符串  L4 `; R' Y$ u; }
window.navigator.appVersion
8 Z1 _* ~( Y' t" K'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ y3 b0 O6 X0 l6 U9 p
// 客户端绝大部分信息: ?' c- I' j, I" r- u* i
window.navigator.userAgent2 T8 P  K* O; c7 J" m+ X* }
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
7 f1 n# g8 W  P: p9 ?$ W0 D2 M// 浏览器运行所在的操作系统
  X: w0 {. l! Bwindow.navigator.platform
, A4 N0 x0 A- ~( F9 ['Win32'
. M, B& ?6 t% i/ O. w8 D/ N, |" n  E  f5 J/ }, r% Z
//  获取URL
) j$ V& y; S" S' Nwindow.location.href
9 A; c# {, d8 B" v/ G// 跳转到指定页面: `( \4 U& l/ K% a' g
window.location.href='https://www.baidu.com'
. `8 Y$ T4 B, f# \  ?$ R  e// 重新加载页面9 h# Y% U4 Q5 w( b
window.location.reload()
' u3 g% p" Y% h! p9 V</code></pre>
! W7 a4 k1 j+ ~8 ^) I2 S7 m( f6 H<h3 id="32-弹出框">3.2 弹出框</h3>6 K2 [5 c; g1 ^3 l' A3 ~
<p>三种消息框:警告框、确认框、提示框。</p># c0 ?- k6 o8 Y, Y: F
<h4 id="321-警告框">3.2.1 警告框</h4>
( ~' A1 V  D2 m& Z5 U3 M7 B<pre><code class="language-javascript">alert("Hello")
0 O3 I: M( v2 a  O4 R</code></pre>
0 b0 U& R$ b: ^2 l# ]8 S<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>; z! L$ O4 E; A, K0 m
<h4 id="322-确认框">3.2.2 确认框</h4>- n1 A! k2 V* m" t5 v6 L
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>! X. u8 f/ Z- H% ]/ c3 {
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true/ H- a9 x3 R  e& J0 Y
true
) Q* H9 q9 E4 T! s8 V&gt; confirm("你确定吗?")  // 点取消返回false
7 M# o+ h9 K9 v& D0 M" G6 g- ?& {false
  z5 N4 J5 ?5 }% h</code></pre>, P6 |, x- z* Y" \
<h4 id="323-提示框">3.2.3 提示框</h4>
8 P* d% `( O0 P# M, E8 ^5 w<p><code>prompt("请输入","提示")</code></p>3 @+ z9 X! q8 n- Z! v& N+ P
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
; m3 y/ q4 b% t7 m& \) q9 c( V* F<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>, U; J: i1 z3 d
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>) T9 U1 |" c0 |  a1 M8 s4 J
<h3 id="33-计时相关">3.3 计时相关</h3>* I) D$ T# g1 f
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>0 v* N- |/ n1 s4 J0 t
<pre><code class="language-javascript">// 等于3秒钟弹窗
# u9 o0 O% }! |- V4 asetTimeout(function(){alert("Hello")}, 3000)
- a: A- f! n. |4 k
6 {( Z8 T* h+ X0 {var t = setTimeout(function(){alert("Hello")}, 3000)
" @: K; A# a6 d, a5 r# x
2 D# t$ y) Z2 G  P3 E// 取消setTimeout设置$ n' Y9 {' T, j) h7 ]2 Q
clearTimeout(t)* P2 l' W2 y3 Z% U5 t4 b
</code></pre>
% d6 Z( O) X8 `4 {7 r' M<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
% `% e. t* d8 N. o* Q) k<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>; }  T6 ^/ e" z8 S- u5 l
<pre><code class="language-javascript">每三秒弹出 "hello" :3 W% Z) r6 J6 F* {
setInterval(function(){alert("Hello")},3000);
, t9 ?" k- E" w0 K! S2 ]0 h$ i</code></pre>
0 f4 g/ W3 e7 e* U2 T<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>5 q& N: N. ~+ A: C8 o4 M
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);9 h' M; R; p5 n) L
//取消:
2 \5 ?" G) H0 F" YclearInterval(t)
# P$ n$ B- i! i</code></pre>
! F6 b# v. P; P0 ?% v* s# L1 W7 j) `& E4 v4 [1 d- G2 I- D
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-21 17:08 , Processed in 0.071517 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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