飞雪团队

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

前端之JavaScript

[复制链接]

7900

主题

7988

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26030
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
+ r0 a: {1 ~9 b9 B$ w
<h1 id="前端之javascript">前端之JavaScript</h1>3 b8 Z/ Z3 N4 O! f8 ~/ |$ B) Y
<p></p><p></p>
! B* F/ H! c- M3 J+ x3 ?3 s, c9 e7 R<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
0 q- k  [; l0 ~7 z2 A( k1 a9 q<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>  m& a  u& a" K7 [6 y+ O' R
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
9 |; E+ V. w5 @  R  B它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
( n: v- v; I0 S7 W/ e' J: A它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>7 p6 P4 z' F1 }6 i* W0 X
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>: }4 }4 p! m, A, o
<h3 id="21-注释">2.1 注释</h3>
7 L8 [% c; D& [( G. y<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>" u# g' Q7 o5 N$ U# D7 F" c! f
<pre><code class="language-javascript">// 这是单行注释
( `! h9 `8 t( J% }  Y4 U3 g' V4 \1 Y7 a( B/ r2 U* _
/*1 ]. m( v* D5 h9 o, t
这是多行注释的第一行,
' L# T( P9 a+ z, P5 q# N, q这是第二行。: l+ u" i+ E( y( Q
*/
0 J9 v) z+ J  w9 \  B) R</code></pre>
# n" Z& c9 z- {4 X/ d5 A<h3 id="22-变量和常量">2.2 变量和常量</h3>8 C( w) b, F+ I' G  e
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>4 ?, R* k& f, j! b% H7 W2 Z: ~2 ]6 j
<ul>* ^  w2 N# W6 h- u6 Y
<li>变量必须以字母开头</li>
$ @! ~8 }$ l: n* T$ c/ g  _<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>* `( w6 j. b4 \' Q9 ?* e
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
% K9 Q' H: ^" u5 s* f" \' T/ F</ul>
5 f- E" d/ j5 I) x3 y  Q<p><code>var</code>定义的都为全局变量</p>
# z  l; O. U, x, b9 Y, A. i<p><code>let</code>可以声明局部变量</p>
; [, o% J' m* H/ c, Z* y+ R" T<p><strong>声明变量:</strong></p># U0 V7 T+ p1 }( K6 m
<pre><code class="language-javascript">// 定义单个变量. t3 C  U9 u  l; ^2 l
&gt; var name5 a6 ~. Q* L! r  j- m4 K5 {5 S
&gt; name = 'Hans'
* w2 o# Z$ n) s8 p$ X( x) Z//定义并赋值; F7 |$ Z( Q; j) O' M* _5 u/ ^
&gt; var name = 'Hans'! P/ E. D' V5 I/ v, n6 M
&gt; name
3 e, X2 N3 v+ `4 ['Hans'
) V4 N# r1 ^8 U/ m& ?4 \1 w0 e. R) K: v! T
// 定义多个变量
% t% m+ P. o4 R9 ?4 C9 A&gt; var name = "Hans", age = 18
% {8 M0 |6 N! J; c3 _; o2 W: N&gt; name
' n2 ^7 J8 [% J/ x/ g'Hans'
6 f) v- ?  m# N; ]9 B2 C5 P&gt; age2 g6 i% {& @! r; O
18
) j) l; F" j0 l  F. |1 u8 a  f
) q! R7 e3 b* i# r: {3 n//多行使用反引号`` 类型python中的三引号
2 z8 W* O% S1 O5 {9 m&gt; var text = `A young idler,# |; C( u. [! L
an old beggar`
8 ]( x% O5 I! z3 K! p&gt; text
6 [  K7 A" W5 D3 A. m8 y'A young idler,\nan old beggar'
8 u) y! ~( d; O1 W( \# k</code></pre>
' c8 ]: L" k/ j2 |/ O! `<p><strong>声明常量:</strong></p>
! ^4 i5 F+ B* E$ R<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>9 B) C* S; b. F, F# a9 K% o% o
<pre><code class="language-javascript">&gt; const pi = 3.14
$ x5 Q* w) w6 ~1 C- _&gt; pi
! w" s4 \5 j6 Y; G5 g' L( L5 _' p3.14
& J! R7 D# k5 j5 D# B3 S5 L&gt;  pi = 3.01
) |2 T& j: s& J% ?- ?' b' z4 y6 IUncaught TypeError: Assignment to constant variable.
& f2 a9 e- H3 o9 }& ^    at &lt;anonymous&gt;:1:4
, ~. G' M& Q% ]0 [7 g# R" h; T. O# W8 v) \
</code></pre>
7 D- m- H( r5 B6 K2 X<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
- t3 a5 i" b5 c' w) w! O1 x<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>& t7 F( o6 K" j
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>6 x- w5 L5 I& O$ A! R
<h4 id="231-number类型">2.3.1 Number类型</h4>1 d) i/ n6 W. F! ~) k/ m2 R
<pre><code class="language-javascript">&gt; var a = 5
& v4 n: F  L1 e  g&gt; typeof a   //查看变量的类型  
9 o2 z$ ?' Q1 N* q( x3 }# Cnumber
1 g2 ?! u! j. U3 l0 ~# t& w; t1 m$ o
&gt; var b = 1.3
+ _  E0 u' w9 h5 a&gt; typeof b  V9 _" X& o" f8 e
number6 M7 G8 E8 g( i) Z
$ c  L6 t# a+ x9 |5 S: P
// 不管整型还是浮点型打开出来的结果都是number类型3 J% [2 `  F" \$ z

/ H; _/ s7 a, O# D/ `& ?, P* x* |/*5 Q5 Q9 K, P- Y  t9 S  Y9 X' P  o
NaN:Not A Number
0 X" s2 F4 s, wNaN属于数值类型 表示的意思是 不是一个数字
( r; f! `) P  r, B3 l" y*/
' J! U7 j; f4 Y' e3 s/ c
* ?# U0 G) q( j8 N$ M/ ~: z9 {& ZparseInt('2345')  // 转整型
4 E. M# |2 i2 I0 g9 x1 |  ~2345
) \, t( R5 M  vparseInt('2345.5')
3 c- c+ T0 h9 e23456 D- E9 r( F/ ~1 |8 L
parseFloat('2345.5') // 转浮点型
0 V% r1 y/ a2 a7 }3 m5 P2345.5  ]) ~# s- Y- |8 n' i! s* u4 I
parseFloat('ABC')7 p: s6 A( K; ?: ^& d& D
NaN- m8 f2 y0 l$ A5 ^% ~8 ~7 R8 j0 r
parseInt('abc')
$ G- m' K; k9 q; CNaN$ M% E7 @6 _" W* o, ~+ C
</code></pre>3 [* a$ W8 d7 i6 }! B+ }& h: c
<h4 id="232-string类型">2.3.2 String类型</h4>
+ {7 _, I% x$ y1 L$ K8 E$ z<pre><code class="language-javascript">&gt; var name = 'Hans'" |; D. _- L4 {; P* X
&gt; typeof name
+ g- V! w" ?# u3 O8 u& j'string'' k9 D0 n' d  i9 l" }
# _9 {$ Z* h/ W
//常用方法( a$ U1 z: A2 {9 z, ~" T
// 变量值长度
/ i/ d7 R; O3 t8 M. r&gt; name.length! F% l4 V9 V1 c  I( a
4" g8 Y8 R8 V+ G# U. V
// trim() 移除空白# h' X2 `' H+ B2 R. w: c- @) u8 x8 w
&gt; var a = '    ABC    '
7 T- r/ P' ^  c! P+ Y&gt; a
7 J& I& i. L3 \5 `  o'    ABC    '
' I3 Y8 e9 ^. H$ E2 l3 v&gt; a.trim()
2 a# \! e9 y& h  U5 I& e6 i7 c# O/ }'ABC'
, Y8 g9 w# t; L3 ?- [5 r. ]//移除左边的空白
& H1 I# a: u, A3 J6 s7 y8 f&gt; a.trimLeft()- {1 [5 E5 `; l: a7 P& g
'ABC    '
  v6 p& x2 \$ _+ q6 W//移除右边的空白3 G  g4 v) X- B- K6 k( p% M
&gt; a.trimRight()+ v* N* E9 h# g5 F
'    ABC': S# u: M' v* w6 f7 O

9 a% O$ k# O( H8 J//返回第n个字符,从0开始
, D* I& e1 j8 ]4 p; _! [$ k&gt; name
' k# K1 o' W8 ]: ~'Hans'
8 p4 `5 M4 d6 T, F. S& x8 ]&gt; name.charAt(3)
+ M" {7 }& b9 K$ ]'s'
6 b2 w9 ?2 P; I7 Y  E" ^9 t# X&gt; name.charAt()3 k2 N/ R; U0 {; h' u- T0 Y
'H'; u2 T; m4 l4 t7 {9 I
&gt; name.charAt(1)8 K) z8 v" _# `+ C, G
'a', m$ z- f% h0 U2 G
( t( U) a0 P8 ~. T
// 在javascript中推荐使用加号(+)拼接
5 b6 C, ?/ J3 |4 i&gt; name% X' U2 s. {( C+ Q2 [% `7 @8 Z" A* t
'Hans': U2 Y& ^4 u" I! D) G$ @
&gt; a
  V. A7 O9 `. c'    ABC    '
: M+ j4 ~+ _6 y8 k&gt; name + a
+ h3 w" y+ i* x& T; z0 m'Hans    ABC    '
8 N$ X1 D, l- E8 i7 @( Z! x: s// 使用concat拼接- I! s& Y; e1 x& F) T( z) t, y
&gt; name.concat(a)3 w+ g6 _& r9 b0 L% o, N
'Hans    ABC    '
3 x2 O  t9 F9 y9 \
: P& z, n) R5 t5 `//indexOf(substring, start)子序列位置
6 \( E+ P' R( [" ]
9 T6 m" d1 M+ T0 w&gt; text) L) |; L5 T1 W; f+ H# O# N
'A young idler,\nan old beggar'; ]8 P0 d& @- m( x
&gt; text.indexOf('young',0)
& q0 {. P/ p2 N* v+ K. S2% ~# p3 w; Q1 {

* F1 G- r( A  {) C1 j: A8 m//.substring(from, to)        根据索引获取子序列
5 E! ^# ~( I; k% |$ }  y&gt; text.substring(0,)
  U# S9 @+ v# x* S% t0 G'A young idler,\nan old beggar'
; Q! d# s( |$ P&gt; text.substring(0,10)" m: _4 f. C4 O4 \/ O  Q5 V
'A young id': d0 @6 ]# w6 L; e, @
+ T; O: n* ~, f5 W
// .slice(start, end)        切片, 从0开始顾头不顾尾
" D4 h2 @! Z7 v/ x1 |, W2 W&gt; name.slice(0,3)/ p  Z4 l% r7 v- q
'Han'
' L) j( |8 {  E) J3 v* k4 u" c4 P4 W3 C8 p
// 转小写* P4 m4 [) U% F& ]9 h; }& ]. R
&gt; name
* \, [9 v- ]. F$ @6 T4 L'Hans'
7 p  B# i2 i& C, N0 |&gt; name.toLowerCase()
2 Y5 h& x# X, {! Q'hans'
" S2 A" _( Z2 Q# Q// 转大写9 ]" x/ I: w7 a5 ~: f; M3 n% _
&gt; name.toUpperCase()% Z! W/ c) L! i0 `! p: o
'HANS'
) c' c; h4 U! V7 l& H( H- @# E( _4 K. b; O* y
// 分隔2 h7 H% z4 A) j# R
&gt; name1 K, n8 K2 m' d7 W. H
'Hans'3 U; k# b2 V% W' X& X
&gt; name.split('a')/ R% t! H5 l& z! U
(2)&nbsp;['H', 'ns']
5 O: f3 ^1 R' N</code></pre>  C3 ?( @* l# S8 g0 L7 Z0 c
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
" @$ N6 U) X# ~) C0 _& P/ T<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>, ]: @. ~' u- O6 J0 x, m0 c
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
/ J* z5 c6 i  B( v, \  D<p><strong>null和undefined</strong></p>
8 ~9 j6 t6 l. p& G& v2 K, k2 Z$ T<ul>* ]- ?/ B' C) F' f* C2 @
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
1 Q: n  W5 c8 L! U  P6 j3 n<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
" C8 f8 H4 o( j  C) l& D, V</ul>0 f4 @" d' X1 s/ h5 o. ?
<h4 id="234-array数组">2.3.4 Array数组</h4>
- ]+ {! y9 B4 x% I, J8 H& p<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
: y  O+ \0 [1 ?0 Q, S<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
8 y- u$ Q6 D" m* I) `* s&gt; array1
8 a0 s) L$ X7 w+ b) r  O& j9 M(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# |4 G1 q! C( o/ w' ?# b&gt; console.log(array1[2])  //console.log打印类似python中的print% u) ^' D1 t7 i  _. r0 l
3, |& t5 {/ _/ |4 j% g. {9 p) L
// length元素个数2 i! }, j. l/ R
&gt; array1.length
! W1 @8 d" g+ U9 z$ Q6
# y3 C3 i4 K8 ]- [// 在尾部增加元素,类型append
# J+ U& [/ w  @4 U&gt; array1.push('D')/ }/ ]: D$ i% }: A' }
7
; B. a' _3 L, D&gt; array1; |% B2 Y5 e3 k. H% \
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']( m) u0 J% c1 [- ]1 E. }8 Z% S
// 在头部增加元素5 d5 u0 S. y9 p6 |1 l$ `# ]4 e
&gt; array1.unshift(0)' J  R1 s/ S: L' n  ~3 V
8
0 I6 {! r( `0 N! B9 p0 L. C5 l&gt; array11 r) j% D* d" i. X6 V
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
$ S* B1 i6 J5 T- `2 V8 l$ k; y( @8 J! i, T# ^! k3 P8 l4 n
//取最后一个元素! U: y+ t9 k" E5 b' a7 L& `& G! b
&gt; array1.pop()
4 p% B& M, B$ a5 y( F'D'- Y% ^2 K* Y3 S( N
&gt; array1
; R1 D4 A8 H" h9 u- S( d$ H% D- J0 j(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ \7 U# c5 Y. t
//取头部元素% ^: B* w2 A0 M8 ?3 O- A
&gt; array1.shift()  ?* U9 G  K: A  d
05 {1 T, W3 {  N" x( F4 k
&gt; array1
) x) h8 y7 j! _( k5 l7 X5 \(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
+ R; D- o3 b: ?. ^- Q7 ?) U' `
* {6 H  y$ X/ y% n# k2 b//切片, 从0开始顾头不顾尾
# z  T3 L* j5 r0 A&gt; array1.slice(3,6)
' E, O; H" K* Y% i% }(3)&nbsp;['a', 'b', 'c']1 [: U* x/ m: O. i+ |; w! ]
// 反转- n0 G: u  @+ R8 Z5 p
&gt; array1.reverse()
$ A0 @$ s% Q1 H7 j4 I(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
; i0 C5 y2 X: x9 F' \* x% J& K// 将数组元素连接成字符串( e0 I5 D7 k$ i% A
&gt; array1.join() // 什么不都写默认使用逗号分隔
# r8 x% U/ v' \% U$ }1 _: k'c,b,a,3,2,1'
8 h2 d- u  j/ H. Z7 y1 H&gt; array1.join('')
' I( J4 ~% h3 F3 `'cba321'& `3 s# v9 F, s4 _# m4 N2 h$ h
&gt; array1.join('|')3 Y* y' ^  f( }: C% r" L
'c|b|a|3|2|1': i5 I+ r1 s1 {# o, ~2 R% m
7 v0 |$ U0 L$ }; @2 S
// 连接数组
3 x$ S% Z2 _# H# v&gt; var array2 = ['A','B','C']* \7 s/ a- t* a. W
&gt; array1.concat(array2)
0 @6 l4 [+ v! g: c) ?" e0 H(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
$ H1 Q( x; x8 Z) x# ]* |
5 O4 N8 w1 y1 A" w' A// 排序* s' d" }4 j: x' J; A; z% ^
&gt; array1.sort()
. S0 t9 a5 Y2 L. e: e(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 I1 |9 t: B8 o/ D; o+ _5 d" A2 ?
: G! i" J6 I  {  [+ R
// 删除元素,并可以向数据组中添加新元素(可选)
; R7 i4 M  G0 g$ V&gt; array1.splice(3,3)  // 删除元素7 I/ }% ?. e# f* C
(3)&nbsp;['a', 'b', 'c']2 P9 Q/ `* f- q" z/ g) J
&gt; array12 _5 O$ n& y  @3 n( ^( O. j; L
(3)&nbsp;[1, 2, 3]: j+ a# N: f" l+ X0 e) B
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
' `8 q" Z) w1 o) r; c[]+ m! e, R2 j3 ?( H& c  a0 Z" P: C7 z
&gt; array1
( N  F4 _: r; B( r6 L% L(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']$ \0 ~7 t+ B7 v" b' N9 n

9 R+ C, V$ g( ?+ N1 `% V/*
9 P+ F6 ~" ]0 ]! B) }" T1 U9 _4 qsplice(index,howmany,item1,.....,itemX)
6 s1 U0 _: ~) ^. `# E$ c$ {6 Oindex:必需,必须是数字。规定从何处添加/删除元素。
$ j! L" N( B' Hhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
: v+ Z8 f; \# r4 Xitem1, ..., itemX        可选。要添加到数组的新元素7 t$ Q2 G2 M5 x4 u
*/4 p5 T+ X1 m0 K8 M8 d- K, s- X% {* y

+ w8 F( |" ^2 c4 M4 y4 b7 D. y// forEach()        将数组的每个元素传递给回调函数
1 D; _% Z( z. F# `5 D&gt; array1.forEach(function test(n){console.log(n)})
# z" E# u. A* J( v, c8 X 1
0 `3 H1 {; B( t6 Z- P; a+ D 2; E! H% u5 h! K0 Q* B4 F
31 R! _6 Z6 d) v4 Z+ S4 b  F
A
! [' Q3 _" t+ ~6 i B
- q/ ~8 w1 C5 U0 T7 K C
8 g9 r4 M) V  {/ f7 o0 P. T// 返回一个数组元素调用函数处理后的值的新数组  W1 U6 a4 }" y" N8 h- @& R3 W
&gt; array1.map(function(value){return value +1})& u0 ^7 }( R  j: Z
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
8 a, e+ y  S3 I+ d</code></pre>
$ B$ [2 ^  Z8 x% X<h3 id="24-运算符">2.4 运算符</h3># z8 I1 E# [  ~
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>2 [1 a0 @7 E1 P: e" C3 b
<p><code>+ - * / % ++ --</code></p>6 ?0 [9 g, o& x0 W9 I9 v' H* l
<pre><code class="language-javascript">&gt; var a = 6
9 s  u6 m3 W5 G1 c&gt; var b = 3! k: x2 y/ U) [% ^) `& F
// 加
( T6 E4 _! a/ u7 g( }&gt; a + b
) |/ R/ G: T- ]% q3 e9, m9 ~+ R0 e) J; D- u' U+ L# }: C* P
// 减$ P  K+ ?) f1 a& q
&gt; a - b2 j/ z' k2 J. @" D7 K$ ^
3% I$ s: H1 s' g
// 乘
0 F2 L6 r% K1 C) P. n9 p; ?&gt; a * b  c9 i3 ~, C% t( [/ K6 k( t1 B
180 m/ i$ Y, H& w2 p9 E2 {; G
// 除
! t/ S; L. s# B* S& u' |2 ~&gt; a / b" I  o( g9 a6 q
2: I3 M; Z' t) k/ v  d8 |
// 取模(取余)! s3 n8 L- I/ N1 _
&gt; a % b* [9 k, a* E. h& R8 k6 M6 H
0) x8 y- t: g9 ]( C
// 自增1(先赋值再增1)
6 B+ B- n" s% {&gt; a++7 ^* w8 Y$ j2 V1 w/ B3 M
69 ?, E2 N  {# H3 X
&gt; a  }: t, h% _& D6 ^& @* B% H
7) F  ?! R" c3 W/ p: K8 |
// 自减1(先赋值再减1)
2 ]9 M% v4 {- @  n. |&gt; a--* D  Y" R2 W( H9 w! h% m
7
" N! z( r  A% J  s, A# `- N6 N&gt; a
/ M6 H/ d7 d( }" H67 {' g1 h9 \) s& R/ p
// 自增1(先增1再赋值)
" C5 V- B* w5 D" B: y&gt; ++a- L. D6 z, S( b& |, U. ?- V% w
7
' U  Y; u6 b# T6 ^8 }9 b6 F// 自减1(先减1再赋值)- u7 {: h2 G5 h
&gt; --a7 }6 L. d! j2 U
6
5 r- ^. F! r: `  Y$ |&gt; a& j7 |  s) K4 ^  r8 w
6, A1 X: \5 g# Q8 p/ X/ p& |4 G& h
; c# C9 K2 L+ u. v, H# S! U! l' q9 x  r; V
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
- I9 Y7 L- H& @# u  n6 N( R* Q. |</code></pre>1 W$ d8 t% G  \3 u% N
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
0 B# N4 |4 ]" B. K0 m& R5 ~4 ^, Z<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ g. i- J) D4 j3 i! |- i. R* O
<pre><code class="language-javascript">// 大于
  h7 M# `) ?; O0 V&gt; a &gt; b+ o" U% p8 w% U" F0 \1 F, W
true) |! E3 J# t% P: w5 z5 ~
// 大于等于  W: x8 G( s! y6 ^
&gt; a &gt;= b
0 M5 l8 V& Q8 \7 \# w. Xtrue' {+ ^- q' K4 V" F" O' ^+ Q
// 小于% [) \2 n) o! ~' m& A1 E
&gt; a &lt; b% T& P- v2 _* B# r# U
false9 d6 J6 N- T7 W( E* y+ ^7 _7 X
// 小于等于
, \6 Z& d; n" |! t: k% c2 b! Y&gt; a &lt;= b
# p. t  f# V6 q3 g/ z& o8 cfalse
2 b) q$ c" d7 ]. z/ }5 x% v// 弱不等于/ ]3 ]: v5 l$ g2 ~
&gt; a != b+ \# t! s1 l" S: L
true
- ~8 Q- h; B+ x, k// 弱等于0 ?# E( z: j7 D$ Z: S7 S2 ?
&gt; 1 == '1'
7 ~* D, a  @/ S0 ftrue
! P( c2 @. g, L& g9 ]// 强等于
5 X1 E  {& `# i: e' F9 F&gt; 1 === '1'+ l: w! D5 n6 @2 U
false8 ~, p* I% w& y" i5 F5 m
// 强不等于
( s4 F  w3 ]' f$ _% z&gt; 1 !== '1'* K- B( N; I9 J- V' M6 f+ F
true
, ~3 m! b8 p( U+ J
$ U; V2 M3 f8 K% P8 f5 j, s/*. b% Q  V; K* b
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误4 A0 e: {' y. _; D; {9 X, }) D" r
*/9 D( f8 F! T  ~; v; H& n
</code></pre>. T2 d; m# J+ N- _# Q
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>1 E# |- y: {( i* w* l. N
<p><code>&amp;&amp; || !</code></p>8 c4 K+ J  F) Y
<pre><code class="language-javascript">&amp;&amp; 与: K" D5 T1 m5 Q9 [
|| or 2 H! P) p" |3 }  T. G
! 非
  E$ ^, G/ H! k2 k. |* w, d! Y2 Q</code></pre>
! x) \( E( U9 Y( L; A<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 V$ I  I% k- o" h8 \+ Z
<p><code>= += -= *= /=</code></p>( {( b* E8 I; g
<pre><code class="language-javascript">// 赋值$ ^1 h! K. ]$ x  t0 V
&gt; var x = 3
. b8 c3 E2 a2 H9 }5 N// 加等于0 c6 G5 }* c' g- Z9 W$ `
&gt; x += 2  w2 [/ V6 |. \# b, H% e$ z- r
5: t" m$ g/ H3 [6 {  u- o$ |
// 减等于  [. K0 b1 N3 Q  T
&gt; x -= 1
2 l  M% y$ ^. V2 Z: Q45 J& x1 B& T6 N, m9 ?
// 乘等于  X3 C! f6 ]4 C2 s1 F9 G
&gt; x *= 2
! Q5 l) q/ s# [5 ]+ {# h  D1 g8
) T9 J4 T- k% O/ j// 除等于
' N  M. d4 b! F, p&gt; x /= 2, N. K$ @* _( C
43 o6 z" ]& w+ }: X4 e
</code></pre>
1 [4 v% R# u( z. w3 u# x$ f<h3 id="25-流程控制">2.5 流程控制</h3>& G& Z* w, k  \6 e* b6 K8 o/ o; M
<h4 id="251-if">2.5.1 if</h4>6 o; a3 T+ [# s
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}' Z( l7 ^+ `$ v2 p& i
" q) z8 t4 |8 D% y
&gt; var x = 3
" w$ |% p) G+ o. [' e/ U3 y6 R+ ]&gt; if (x &gt; 2){console.log("OK")}/ Q; S0 B- y, `4 h
OK
  m8 J0 b1 y/ r; l+ x4 Y- X. T7 L) @2 O* a) C) j2 y
2, if(条件){条件成立执行代码}
& ?' S" T2 _1 _  _        else{条件不成立执行代码}; o! ~: T  L) N( q0 t) |/ k

- w, ]" o' s6 u* Q4 E9 r+ [, V&gt; if (x &gt; 4){console.log("OK")}else{"NO"}6 \0 ]9 j! P% M1 G- ?# q
'NO'9 H3 O1 t4 r! ], V' |. d
, v) r( j, ~1 H" k
3, if(条件1){条件1成立执行代码} " V. W4 C2 v2 X& u. `  E8 \
        else if(条件2){条件2成立执行代码}/ x) T$ K0 Y* v2 k
    else{上面条件都不成立执行代码}" ^" u0 |- Q! E* Y- N) d, d5 b4 @! m
7 {5 t1 Y( E7 N3 g! o; m# M
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
& ]% O- N5 e5 Q$ d: c: x- { Ha% C. K+ G! B  ?8 F' F
</code></pre>
* u- d2 k' @  I* L7 |5 }. q8 n/ ~<h4 id="252-switch">2.5.2 switch</h4>/ Y/ m' ~& G. v8 n; R
<pre><code class="language-javascript">var day = new Date().getDay();9 g% O7 G3 G% Q4 v2 ]- y
switch (day) {+ `, x8 r1 j; D: E5 ?4 [
  case 0:
0 _0 V% @" p$ Y9 t$ y  console.log("Sunday");( y( |) ^" e5 @2 M
  break;- T% r5 A# n: }
  case 1:
& \1 v' l( k2 N$ Y) u( _  console.log("Monday");: X3 X- Q7 h7 T0 q' N
  break;
* Q; o( P9 ~' ~. Cdefault:
9 A1 s' ~; H* o* \  console.log("不在范围")2 Y$ G' d8 L6 C! }, `' V9 @
}  ?4 _& e" z0 T& T9 p* Y4 j
不在范围1 W% b6 K- E: q: U5 I
</code></pre>$ q+ |- S  L, A* |( J4 z! Q
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>0 f% T8 ]# l: t# ]2 ?
<h4 id="253-for">2.5.3 for</h4>
, s! ~- V6 k) T0 T& |" L<pre><code class="language-python">// for 循环
+ q' _, v6 o! j  Y7 Q        for(起始值;循环条件;每次循环后执行的操作){
# w! n' c* o: [& J, T        for循环体代码" ?- k, [( z$ i8 m
    }' @" a, O- R+ ~) n/ c  \- }
3 ]- }- I. X* G5 Y& X
for (var i = 0; i&lt;10; i++){
$ x9 h) b# J- v4 f# a    console.log(i)
3 j6 \5 [6 N$ c4 O% `8 q}
" u, d3 ?) y7 J, d# [( e4 z        0
% u( u, }/ P% K3 U: F        1$ w/ r% \% s7 G2 h2 V8 `. `/ I; p2 L
        2; B* }! E4 m& n* S
        35 w$ }6 s; }* ~+ F
        4
/ y5 i2 c- Y$ x6 K. `* t+ W        5" j4 C& _) S6 W5 j' m3 m; }
        6
* ]& F# Y4 ~, b# M# s$ f8 n" U! u        7
6 J& Q8 l* D# D8 R        8
& C$ ^3 C( Y2 P  W. K: m. v        9
. Z/ f7 N( w; H! P! l; ^9 o</code></pre>
; B4 G) q3 d6 s8 }" E<h4 id="254-while">2.5.4 while</h4>
( F# e. L) P& H<pre><code class="language-javascript">// while 循环" ^4 r1 k+ H: i- Z3 x2 t
        while(循环条件){
* }4 ?- V- }3 X0 l7 z! e+ n        循环体代码9 G  ~9 B( h, F( y) J* t
    }4 L2 T% u. @& a; f) G/ P9 @0 h9 \9 b
& X, L: R6 v, K/ Q/ g& L5 K
&gt; var i = 0
/ v% ]  a) u1 y! w* l. u  {( ^7 D&gt; while(i&lt;10){
7 j, O+ E+ k7 v) z0 b0 p    console.log(i)' R2 \4 D3 U/ `, B0 K3 N
    i++% d. I" u/ o1 j6 S
}
3 F( f# d: L6 m 00 t  k4 l1 f7 O) ?* b# C9 |
1. q" k2 {! a5 x
2' d- m/ S: b/ \' z
33 N! }& _. |7 p. t
4, B: w# o: f1 ~: s3 J: S/ g) I& D
5
) l+ }4 h: v7 k4 i2 q 6
) X- T4 y$ ^! E2 ]4 n3 J' b! Z 7
+ o- v" \( m8 _, I" U+ E 8
5 \4 m* d" O: n; G+ H 9
0 u" F; r5 ~, M$ p" [2 ~</code></pre>! a$ w; c8 [1 _: y
<h4 id="255-break和continue">2.5.5 break和continue</h4>
1 ~* T" x6 b: ?7 q<pre><code class="language-javascript">// break
& ]5 Q; @  Y8 U6 o" p0 C9 qfor (var i = 0; i&lt;10; i++){
' V0 ^) D4 }4 T* _, u( p) _7 s    if (i == 5){break}+ L3 V" u, O2 k
    console.log(i)
/ T" {7 u- P# A$ x}
& r' B9 o4 V2 G) _, B  T2 Z+ \ 0. l: F6 P$ ~) I: @- r, R
1/ n& n/ s& Z8 p3 L6 |; O
21 E; P% l" H7 v; G! Y
3
* b: d* d' P% w! b- h* `1 q+ |# ` 4/ }( o# i! `9 S  r5 ?
// continue
! F$ T& J7 u$ v5 G# {for (var i = 0; i&lt;10; i++){! R6 ?' y( ?) Q( E
    if (i == 5){continue}* {9 }" ?7 G( ?
    console.log(i)
" t1 n8 _' _  \0 M" A4 k}
+ y. x, h6 M. b& A1 y 0' G& [3 C& J, H# g6 E6 U- M9 a5 H
18 L1 {, k/ U1 c& y
2
! q" f3 S: J7 i/ Q8 d 3$ |6 M  ?2 C; D/ E# F9 z
4
+ K* {. Y! b7 S/ j 6
+ _/ y! p% k9 U# ?) Z( J 7
) x% |* x# T! E& f2 F' G 8' \  p$ {" ?$ a4 e& D7 e" v
9, {. S7 {) R+ a  o

4 ]) x, `! T& a1 R</code></pre>8 F: a5 `% {8 O- e2 a' Q; z
<h3 id="26-三元运算">2.6 三元运算</h3>4 X" e0 h* ^6 F: t0 k& C& x
<pre><code class="language-javascript">&gt; a
/ |+ D& x3 z9 y( V& H8 y" F6
/ H0 B/ W. U' n' D0 n5 z: H&gt; b
: ~* T- x" x; s; v1 d3
2 d4 q( U, \* L% }1 z0 B# M9 v5 G; |" Y: [$ J* x4 r
//条件成立c为a的值,不成立c为b的值
4 z& ~- i# {( s0 H7 ?&gt; var c = a &gt; b ? a : b
4 i' T) a- i7 L. [7 [# A&gt; c$ B: _7 x$ U9 _/ }% p: _
6
" E' _. a, o. Q' P
" H' C! }4 N2 N, C5 o// 三元运算可以嵌套
# g+ |: U- U( e! ^</code></pre>4 K% g' X! V2 E4 l* Y9 K
<h3 id="27-函数">2.7 函数</h3>  h3 l9 [# p+ ?% [7 V6 h
<pre><code class="language-javascript">1. 普通函数
& |" n/ p$ u; D' K&gt; function foo1(){4 k0 R" b) q8 t
    console.log("Hi")' ]: w( a1 }$ p8 r( S
}) {2 X& ^0 u* y) C/ F3 C# }

1 q  g: U8 f, ~0 G# T7 J& m. O' _&gt; foo1()
: Y' d8 |# i$ T        Hi4 F  G0 s8 ]9 _5 \6 P8 G
2. 带参数函数  A0 Z" e& |' b3 ?- O. y) O1 E' W
&gt; function foo1(name){& ~# i2 s5 K  \, m
console.log("Hi",name)( C" Y  F8 p' m* O
}
6 f+ _1 O1 M: Q+ J& ^% H+ w. z/ ?! u" Y* m( v/ s
&gt; foo1("Hans")% \0 J$ h# n6 y
Hi Hans
7 w  b# k# l' C* c& z- s- k% O/ C$ d4 s- i
&gt; var name = "Hello"
5 i. c9 G# e% U5 X* G&gt; foo1(name)8 h; ?2 T% t4 c, c( l( t
Hi Hello
6 h* b% T: w( Z5 N0 t4 z! Z9 Q# O8 c% G1 S
3. 带返回值函数
# P+ ~2 a: t& P' S&gt; function foo1(a,b){* Z2 F* H# p, W8 A, ^9 l7 z
        return a + b   . `* `# f; Z  _8 N; L1 H& _6 ^  J5 ]
}
$ c% z% `& Q/ u. _4 J3 c&gt; foo1(1,2)3 r- @3 m8 o5 m2 w
3
+ \% Y; r8 _- u6 R+ w0 u" j&gt; var a = foo1(10,20)  //接受函数返回值6 I8 V0 J% r% \  [+ h. o* @3 ^* m
&gt; a, J: j$ ~- H; D
30( S$ g# J& c" C' S3 {! x

% h" Q" X! N# r, x7 i' O/ U4. 匿名函数4 x* y. f; p! B
&gt; var sum = function(a, b){. P9 N' O3 q$ g. o6 a, e$ r
  return a + b;& M7 ]9 J( N6 u2 [& q! f
}7 x; I* P( X- ?! U, F
&gt; sum(1,2)
( `/ K: ^% H1 M2 N3 W! D; T% ?! G3
- [; T1 I; C& ^0 [/ F6 {; S5 y4 N" j
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
" p" K4 T0 h  p  D2 s! Y( R+ u&gt; (function(a, b){
5 h  |7 R2 L9 v+ [8 Z& }  return a + b' T, A" Y0 J& C3 E' S
})(10, 20)
& C( Y) i  X+ v+ G+ H  Z' `& w30' y2 d, A0 L# @3 `# J6 g+ f

* a6 k+ h, X/ ]+ _1 i- d5. 闭包函数" t7 ^5 K) P; n7 s- |0 @
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: s- {9 ]. f0 M9 ^% n8 Z
var city = "BJ". B* k9 ]* M  O" b  O" K/ G4 q" q
function f(){$ K' i7 B4 O- O# X; V
    var city = "SH"
9 e* G# z7 F+ m5 C0 b% ^    function inner(){' Q! Z; f; \4 Q- \; H
        console.log(city)
9 }1 {7 n7 m' q    }
( X$ e, L+ Q, V    return inner
1 D% ]) Z! m$ L1 N+ r, H; {3 R  V}- m& E( L, p+ Z' F. M6 D
var ret = f()
! d; U/ W9 |& T+ g) sret()
6 u4 k% l# z* `) z执行结果:$ w2 `. ?+ y. I
SH
9 Z+ U" p& n' |( Q: u0 V" N: f- a# x; ~* n8 [: g2 U7 N8 _2 H; a
</code></pre>
8 @- m; \  T: K0 l<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
* H% I, W2 w2 s, P<pre><code class="language-javascript">var f = v =&gt; v;
% y3 R9 }- B) _' Q) @7 _// 等同于& @3 X0 t. e6 y( I3 C& u
var f = function(v){- N( r3 p3 @9 g) K- y& r& x: g( u
  return v;
% h7 Q2 s; ?8 p. A$ J% w. Q) k% q}: \3 ~$ I1 G4 R# Q
</code></pre>+ r# R' b) H) ^
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
7 r; i( b/ W% k* R# S: k, R( s<pre><code class="language-javascript">function foo1(a,b){
& @9 b& M" f; x( o, f    console.log(arguments.length)  //参数的个数 1 H" R; L$ p0 a- A* s2 O
    console.log(arguments[0]) // 第一个参数的值% N8 C1 D1 R7 n' C4 e
        return a + b   
" t% e, l( F) S4 I: E}$ `' q2 R7 @2 m& F8 Y4 c6 f1 S6 |6 {
foo1(10,20)- X" T( p9 e, B" ~0 V: V% M, a3 }
结果:
/ w; H7 `/ `3 T# ] 2          //参数的个数
6 x1 L8 S' c1 V: j2 G( k2 c' Y: ]10        // 第一个参数的值
1 Z* A' r: M+ u30        // 返回相加的结果4 ]( S  z3 Y' [% y* o
</code></pre>' {: e& H0 F" v: M- m; i$ i! B9 Y
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
9 h" f. }8 I7 R<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>5 v6 [3 I9 e+ D
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
3 ?3 Q7 O! h& @( I/ N2 f/ E<h4 id="281-date对象">2.8.1 Date对象</h4>$ Z9 E# C: H# \4 b3 `" K  s" G$ n( W
<pre><code class="language-javascript">&gt; var data_test = new Date()+ O- z. S+ J: c* J
&gt; data_test, f  \) `4 [# t
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)4 u* {) Z( W7 A0 N8 j! @, d7 s
&gt; data_test.toLocaleString()0 R8 Z# @2 U4 {0 [- |8 P' R7 s" \
'2022/2/11 下午9:44:43'
, u7 j7 z. s% V) o# t$ y: d9 Q* F+ D: I- Z& P+ E
&gt; data_test.toLocaleDateString()
$ v- W# P. {% q4 `# t'2022/2/11'4 ]) T; m% ?: y2 \) o

! t5 C4 f! F& ?( G&gt; var data_test2  = new Date("2022/2/11 9:44:43")
% f8 I% A4 F9 k- q0 L2 e4 b&gt; data_test2.toLocaleString()
% a* ^$ u4 R+ N. d  T% d'2022/2/11 上午9:44:43'
) _! h3 q$ N" H; H4 ~% T+ e$ y; s
! b+ n( x6 v% v9 N// 获取当前几号
& q; Y: F: r0 ?4 D&gt; data_test.getDate()
* w& c% l6 H7 G1 p6 a2 R11
& g2 C) ?) P0 H8 S: Z4 o// 获取星期几,数字表示. P9 O% {- Q) N2 [1 I
&gt; data_test.getDay()  
: E7 k  @: D) H# |9 l0 K8 n5
6 [; M' Z; o2 s6 [// 获取月份(0-11)- c" U! ]9 E4 Z
&gt; data_test.getMonth()
0 d& T8 c& v* P( ]7 X1) @' v7 G# E) l7 v$ {, b3 ~
// 获取完整年份
8 U; W2 e# j3 C4 x$ V$ M* y- G&gt; data_test.getFullYear()
3 R6 ^" n! ?5 v$ I9 `6 q+ [2022
7 C6 c$ B. H9 B9 t// 获取时% b8 O$ F: U( K% p0 z8 B! C
&gt; data_test.getHours()
* Z5 h+ w% F) V% n6 q; T21
9 x0 a* ]0 o, a8 p3 r// 获取分& K0 P4 ^4 I  p5 E& n0 d) M! s
&gt; data_test.getMinutes()
) ^! O4 w5 v0 p44: z& Y- u, k5 d9 x. t, t
// 获取秒
- u; g: c/ |  c' Y, W3 _&gt; data_test.getSeconds()
( E; P' s0 M3 N$ s' w: X6 _2 E43) B8 [: G. `- M$ B' q# j! h" S( ?  y
// 获取毫秒- l! w* Q# q7 J( _, k7 V4 H
&gt; data_test.getMilliseconds()# \$ W0 W  K; A- s% L8 C  y5 V' T
290
3 s5 h1 m0 K, \% N* v+ T// 获取时间戳# Z5 g; X: i+ ~1 @
&gt; data_test.getTime()& l/ C& T, t* c
1644587083290# }7 H* `9 s4 ~3 \3 ?
</code></pre>1 @! j3 c! w+ O* `9 }9 F% W
<h4 id="282-json对象">2.8.2 Json对象</h4>! H. ~; ]3 l" T; b( W' d! i
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
  N0 j0 g6 I+ ~1 F& _8 e# jJSON.parse()  // 反序列化,把JSON字符串转换成对象
3 J) I6 I' A1 o  u; _6 N. M6 ^- m" C& j! y) u2 K0 G- o. N/ ~9 j2 v7 W  B
// 序列化& y3 L& B5 f3 k! B
&gt; var jstojson = JSON.stringify(person)
' o+ }$ Z* @% Y) y&gt; jstojson  3 I0 c. g* E/ B6 c
'{"Name":"Hans","Age":18}'# |% p; W2 l! b0 g- u/ H/ O, c
+ o& H3 y) d% l% ]
// 反序列化
9 r2 ]' }& P  K& ~2 j/ X# ~&gt; var x = JSON.parse(jstojson)
! x: C; k2 ~" V- s' l&gt; x; K7 m$ E1 A) X3 y
{Name: 'Hans', Age: 18}
8 [6 G( [! j- C&gt; x.Age8 \7 q5 T+ a: I9 Z8 R
18
0 o( N; z6 j) J) g+ z. `8 `5 C</code></pre>7 r6 f; @. u. d! o% Y3 x7 o
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>% \7 J+ g# s) b% @
<p>正则</p>
9 S( M  n& T+ L<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
: R9 Q+ k1 X2 P8 r7 g, a: V7 I&gt; reg1
, j' T4 C  s4 z7 I/^[a-zA-Z][a-zA-Z0-9]{4,7}/
- {3 M( U: z' U3 x; N' ], o&gt; reg1.test("Hans666"): H/ e, Y, U1 U4 e: L5 M, N
true( I% g7 [, S2 ^9 z9 ~- S

. t0 q" ]! d7 C! ~2 ?/ d" J/ R&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
6 c2 E- b  L  m# R$ g: A) F&gt; reg2& g7 R: M& B9 m1 s! d/ _( m7 r
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
7 ]: ]5 v$ E) @. c% g- V0 W&gt; reg2.test('Hasdfa'). O' y9 k  F' q; R) n3 O
true
; c" A) a9 S; j. B
; Q5 y5 ~% I; u3 c# T全局匹配:
6 |- k) a! @( K& `&gt; name
% f: u+ W- X# w. A'Hello'+ g' M; p: y+ p: B, g( W
&gt; name.match(/l/). E2 a8 O; P# f% H2 K
['l', index: 2, input: 'Hello', groups: undefined]# x: A& c6 U1 V; p
. K$ r1 i8 y1 z  c: `  R2 x7 N
&gt; name.match(/l/g)
9 \: w& U# h- b. g& Z4 ?/ R- Q  P(2)&nbsp;['l', 'l']
% m* D+ X* x) L# z8 T// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配- M# g) G2 m) W: G# Z
$ W: F, F+ B/ L3 ]3 I% w5 ~) v. H
全局匹配注意事项:; o8 B) I% B' c- u! o
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g. ?3 Y' d* n& v+ x9 v+ v
&gt; reg2.test('Hasdfa')" `# ]: }' N. F! V
true" X3 ^) q/ i* p) {
&gt;reg2.lastIndex;
. q6 Z  r9 }5 u3 n3 r4 r* M* m% f60 t7 ]9 {5 i9 y: j
&gt; reg2.test('Hasdfa')
5 i+ h/ B' Z& T& A0 tfalse8 S4 t) K* b! ~9 B8 `
&gt; reg2.lastIndex;0 p3 i. p" K. F
0
" _* w9 p! {' \! d4 m: B0 P) c! ^&gt; reg2.test('Hasdfa')
# l4 s2 V" U) o( Dtrue
- S. `% e4 G+ N1 d, k&gt; reg2.lastIndex;: @- B- i; Q. q
6% |* m- A% t1 @
&gt; reg2.test('Hasdfa')
! X7 Z0 m4 U* Q* W" ~# ~" ifalse, ^$ D- }& y  H; F& d+ @& b  W% L
&gt; reg2.lastIndex;
, M- b) q9 l% B: e7 g1 P# b0
9 i) l+ T: r  b) b4 G// 全局匹配会有一个lastindex属性  A/ m/ l( d4 h2 a& K4 M4 }
&gt; reg2.test()& y0 U% t* |( v/ w% B
false0 @; S4 r" y& Y8 X( l, L0 N
&gt; reg2.test()
9 B1 r3 L$ y  C. X" B$ ztrue, n5 N6 m- s/ w# n6 Q5 [& p9 G
// 校验时不传参数默认传的是undefined( ]- B2 g3 r6 ]! |- w# F
</code></pre>
( O4 M, T( i1 S; ~9 N4 q, ^, S<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
% I* a# g/ \* \# X% e<p>就相当于是<code>python</code>中的字典</p>% Z7 W5 _& n" S5 g
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
/ w  _  t; h2 N. K: Z&gt; person
- O5 |1 n/ v4 `/ n1 t{Name: 'Hans', Age: 18}
0 e2 B2 p8 B8 o% \  I9 J&gt; person.Name3 c! ?, u* V7 L. b) I8 I% `* H
'Hans'
( `9 ~9 t& y6 ~2 _) ^&gt; person["Name"]/ E$ @. ]. Q8 [$ N+ l/ G
'Hans'- Q* n3 C$ j4 r

% U- F( O) u7 o" `8 l2 g// 也可以使用new Object创建
. J- B% R6 V% U/ \1 [* ^3 p&gt; var person2 = new Object()
9 z% \( G* p+ q7 v& i&gt; person2.name = "Hello"5 B% o, `. N, O: O
'Hello'+ O% i3 [0 a) u: F- t7 Q
&gt; person2.age = 20
( }! x, `" [. a( u8 v8 W20( Y$ c' R- Z/ V3 s' T  k
</code></pre>. C% A/ K# N$ `5 T8 H4 p
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>" p/ }! d/ y' s
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>0 q1 @( N6 g2 e' O3 l) r3 Y
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
: @) F0 [' k6 S( M3 R0 p<h3 id="31-window-对象">3.1 window 对象</h3>4 m; E) N  [9 q1 N& C% t
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
* t% s  r6 A+ N/ T<pre><code class="language-python">//览器窗口的内部高度, ~/ S; @9 |" y2 g/ B' h& `
window.innerHeight , B1 Q' G- E  ~# k
706' v" q3 M$ |4 h
//浏览器窗口的内部宽度
7 X( J" M( D- `, H7 qwindow.innerWidth$ q# G- M! Q4 N5 O0 R9 ~6 i
15226 T2 Z1 ?( b1 {! `
// 打开新窗口
7 H" V) E8 {% {% p9 T+ Uwindow.open('https://www.baidu.com')+ }% Y; b7 x% ]4 K- D6 g* r
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}) a: \- O. G% g! n
// 关闭当前窗口
4 g; C& E* p6 c9 Swindow.close() ) B, F5 D0 |1 u7 W) Y/ Y
//  后退一页
  ^7 s; W; [: V, \window.history.back()
% \6 ~- {! L# l// 前进一页  N! d) j" m# I) A) ?; _
window.history.forward()
, R6 v2 x0 W, C, h//Web浏览器全称. h! x! j  U2 {$ h/ l* H& k6 h- m! X4 g
window.navigator.appName
2 @! \0 M' N9 W0 d# Q, k. c+ }'Netscape'
6 Y. `7 r% ]. k4 H/ w" \// Web浏览器厂商和版本的详细字符串) [/ w( y3 J* o' q2 h
window.navigator.appVersion
+ f! ^$ F5 b  g/ X" z/ M'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
( F; }* l% Q! E# X+ |% D// 客户端绝大部分信息
9 y3 N0 C# h! j/ j- g: Zwindow.navigator.userAgent
+ F1 B# }2 ], o. A) k. }% g'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' k* ]; N, ^2 @+ ~// 浏览器运行所在的操作系统6 z" o  w" \6 J- R8 S* Y- G
window.navigator.platform
6 T; b# C7 d  M1 R7 {: T7 e'Win32'
& J8 m! p1 M) b" o+ o0 J" T1 ~7 S+ y
7 C# [' Y& O, Q0 K3 _//  获取URL+ m) H* L* G: `2 G" x( R
window.location.href
7 U; Q- k, ?% g* q0 g// 跳转到指定页面
* L! f2 T( j4 k: U  w0 l, B- @window.location.href='https://www.baidu.com'$ R& z$ T( t" c' [9 K7 S
// 重新加载页面+ J$ F7 p* }: j0 j7 Y% F( Z
window.location.reload()
5 O* m0 O9 e, B3 w- R1 m( t8 [</code></pre>
0 Z1 c$ j0 e+ n% J3 Q<h3 id="32-弹出框">3.2 弹出框</h3>
# ^+ g2 O& y/ |0 {/ _3 ~<p>三种消息框:警告框、确认框、提示框。</p>/ O( m/ d% v) |6 Z0 Y( V5 I; v
<h4 id="321-警告框">3.2.1 警告框</h4>3 ^) F- ~" z' }/ }' D4 ^
<pre><code class="language-javascript">alert("Hello")
1 f0 P' k. w0 v8 F# p" h$ D</code></pre>! y/ Y3 r3 G  B4 E+ ?, m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
9 L- p5 V0 j3 Z# r( [, [' z4 i<h4 id="322-确认框">3.2.2 确认框</h4>. E  r  g, {- _! Y7 _
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>) G! n3 o$ r% z( `4 R) S" _2 Z
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
' _5 R% B  M3 ~! [* e- n7 L9 a6 ytrue
  B. `6 C) t, A! q&gt; confirm("你确定吗?")  // 点取消返回false9 U0 b/ _) N; v# G5 n! G- `2 _
false
- P: K" P! u) {2 o, F% n</code></pre>
; e9 ~, V, l4 M' o: G4 Z<h4 id="323-提示框">3.2.3 提示框</h4>5 a' O6 S6 [$ m; s
<p><code>prompt("请输入","提示")</code></p>
; u3 A6 m0 d6 j0 q% k; g$ G<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
7 _  _4 v/ Y- C8 x" B" _4 v<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>" d/ S( E% w. b; O0 j& Q. G. V! e
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>5 k1 _7 m6 Q, ~: W% e' V1 e: f8 |
<h3 id="33-计时相关">3.3 计时相关</h3>7 W6 J. ?* q. k1 U
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
7 ?' I% `7 I8 ]& j, M<pre><code class="language-javascript">// 等于3秒钟弹窗
: T2 p2 H6 {# g  jsetTimeout(function(){alert("Hello")}, 3000)! J4 H" ]5 x3 t" T0 C: U
9 N; m- I4 S# e; v% Y3 m- K
var t = setTimeout(function(){alert("Hello")}, 3000)
+ A2 J& q* M4 C5 S. w9 k( h0 E  b' k! J" U/ J
// 取消setTimeout设置
  o2 t  a. K, x- E: p- lclearTimeout(t)3 E/ o4 x" P! u; ]0 c  v
</code></pre>
; J! j! v' l: Q. b- K7 R& w7 C<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>) Z* @/ X7 o; ]* x8 ~( R7 L
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
+ T! w% b4 F4 \, h( B  P5 L6 D<pre><code class="language-javascript">每三秒弹出 "hello" :
6 J" p3 D+ w! E- i1 ^5 G: p, O2 KsetInterval(function(){alert("Hello")},3000);, m! A- |2 ^2 s* s! z
</code></pre>9 f% ^9 k! x0 j9 b( d' i, q5 e# S( @
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>/ y5 J2 G/ j  m: F5 C
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
) m$ B4 e$ H. t+ r7 O+ B. \//取消:+ ^+ R8 r4 Z9 d- l
clearInterval(t)3 h1 U* ?/ g0 g
</code></pre>5 Y4 [4 Y9 s- ]  Z' d5 G  n! a

8 _( I, C, Q- a: Z6 p
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-20 12:40 , Processed in 0.077932 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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