飞雪团队

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

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26276
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

* H! \+ k1 V9 `- [' [+ \6 [<h1 id="前端之javascript">前端之JavaScript</h1>
& w4 D4 V, V- y" Q1 u<p></p><p></p>
# N0 l1 O+ X  F0 F<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>) D/ {; S. r$ h1 _! W, C6 j/ w& ~  t
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
8 {; @5 c) Z. a( a它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
% l( k" U4 d2 S) I, d它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
8 N6 _& L1 j6 Z3 n5 F4 u" |它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>. C' W9 x7 p: K
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>( b, H2 W" d+ L. `( m1 R0 S
<h3 id="21-注释">2.1 注释</h3>
7 R8 Q7 K/ P5 Z  ^4 W8 y% Z<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>. ^2 k: f+ A" k" i
<pre><code class="language-javascript">// 这是单行注释
1 t* A) F' a' u- Z# p% h' d. t
1 p7 p4 z5 c5 U: [) C; Z; s' N/*
* Z$ Q7 D& d( U( d% @& h1 c这是多行注释的第一行,) Q+ Y8 \* e! h& n
这是第二行。
0 f1 H& f1 j3 I$ ?3 _+ }. j  t*/6 q1 [7 ?1 p' D3 B
</code></pre>/ ~0 B2 P* a3 y2 @# X( \' M
<h3 id="22-变量和常量">2.2 变量和常量</h3>
" y: g- D* ~! Q! P0 B8 L<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>+ `% N0 D2 u9 F9 M6 k; Z
<ul>$ r) J3 C  H# }! e
<li>变量必须以字母开头</li>' r- S! @3 H# L) ^
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>9 M- Y7 {* l: x4 Y: {
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% N/ `. F7 ?9 g7 c6 X: ?
</ul>
; E7 x! O2 A: J" \+ t2 ~<p><code>var</code>定义的都为全局变量</p>
$ M' z/ C, O" ^<p><code>let</code>可以声明局部变量</p>+ V( C5 R7 [5 T6 n: s- d% s" ~
<p><strong>声明变量:</strong></p>* _. Z* R& g) O) w% q5 r' y
<pre><code class="language-javascript">// 定义单个变量
- e  h* y: d; v. @9 k$ ]&gt; var name5 p* n8 w2 x1 `+ g$ m$ S& h8 Y$ n3 w( o
&gt; name = 'Hans'
9 f; ^9 v6 Q) m: t//定义并赋值# o6 L# F5 @9 D' k" z  u
&gt; var name = 'Hans'
/ B5 c. d2 p8 b&gt; name' _2 x5 b) l( U7 ~, h
'Hans'
! g% P6 j6 K2 n! f3 D0 n" p# Z! g  |: `) o- {+ S7 N
// 定义多个变量
& s; z" ^- y5 v, W( g3 m&gt; var name = "Hans", age = 18
7 T7 S& o4 n- L+ P. Z. E&gt; name) u8 V. _+ m/ U' Z3 M" D
'Hans': |# l, Y. P) [/ M% N+ ]* w5 d
&gt; age
: c6 Z8 a* p3 j; O18
3 U' t0 V1 j" v+ v* ~0 x% C$ u8 K5 [* V6 D. k6 m
//多行使用反引号`` 类型python中的三引号+ u- Y- ^7 i( ?. z( I8 T' \
&gt; var text = `A young idler,
: R- W1 z/ q1 T. e9 M2 E. z3 Aan old beggar`
( V" h4 R5 p  h; Z6 |: K' b&gt; text
# v6 o6 ]6 v2 ~'A young idler,\nan old beggar'
% _8 p) c, t: a</code></pre>
6 K9 L1 d: Z, T% O! Q' j. J$ N9 `<p><strong>声明常量:</strong></p>
. @$ g% X- c& H. v  o<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>, A6 g& N* D3 Q9 d) T2 y
<pre><code class="language-javascript">&gt; const pi = 3.14; s5 ?, S- Z4 j% j
&gt; pi  l4 y/ O  L7 o, J+ p- |
3.14) j8 i8 I& z9 [0 Q% [9 G
&gt;  pi = 3.01
! l2 ^0 l8 f5 ]. H* l* k6 N0 DUncaught TypeError: Assignment to constant variable.
1 L: C9 n$ Q  `+ v6 n7 w6 Z! G    at &lt;anonymous&gt;:1:4
# B0 l6 B! d9 m4 f- X8 u9 v
* N8 t; m. r. H/ H</code></pre>
/ E* y8 I2 l+ v) e. C<h3 id="23-基本数据类型">2.3 基本数据类型</h3>0 ?) r5 o9 n2 v4 d2 T: t- V
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>; j" e; r9 p6 `; E( j
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>3 X+ W: S$ K1 z3 T, R8 W
<h4 id="231-number类型">2.3.1 Number类型</h4>- e! P9 {2 I' ~
<pre><code class="language-javascript">&gt; var a = 5
& u: P9 i7 E) I&gt; typeof a   //查看变量的类型  
- G# V. M  M9 t8 s+ @& Znumber
* u& Q2 C5 w7 e6 ]9 i2 _' s" ~8 v7 u8 O0 F) c/ n' Q* [
&gt; var b = 1.3
4 k' X& Z6 A7 k9 q5 q&gt; typeof b% U* V% J+ f& Q" U( Q- ]$ a% t: q- e+ ^
number" P1 j& ^; X0 P+ j& n8 I

3 E" ^! I+ o- n// 不管整型还是浮点型打开出来的结果都是number类型: U5 y3 |, Q* b6 P* ^$ _

9 Q/ J% X0 [& ^0 u% n/*
2 T  y! T: r9 V* Y6 kNaN:Not A Number
4 c( Y3 C2 X; v8 K1 F. h0 Z. eNaN属于数值类型 表示的意思是 不是一个数字
, u& [0 u, o" j' {  I*/
! X+ Y# X: j* s0 `1 \) g1 L% [! u% r+ k% }& G! M) a7 b" m
parseInt('2345')  // 转整型
. Q% J  }' c! C- ~6 h, o2345
+ y) B! c. R& O( M: l) w' V1 \parseInt('2345.5')7 Z) d1 x8 k: ~% _4 _; X% l
2345
  H0 T9 I6 W* J+ [3 T' T2 ?! gparseFloat('2345.5') // 转浮点型* S9 U/ ^5 F; v1 T; t: i6 v
2345.5
; k$ \" C! Y1 ~parseFloat('ABC')& [  L1 D8 f; [, @* |
NaN3 R% ?! G8 @8 I2 O+ s+ O! L
parseInt('abc')' S4 k& r0 Y. ]9 B3 h3 o, g
NaN
  q" Q, A* M6 y* G7 R</code></pre>
! ~* A* ?3 }2 Z1 s0 S<h4 id="232-string类型">2.3.2 String类型</h4>5 {" I% J; |" _8 t
<pre><code class="language-javascript">&gt; var name = 'Hans'% w& ^+ V' y) U+ L
&gt; typeof name2 g; `$ d. ?2 A1 b9 r! ^
'string'
- @: j5 O* a0 X9 I' g4 ?# A& ^( n( o, K, z
//常用方法9 }% n4 k2 k% h
// 变量值长度  r" C& m* B; ^$ E
&gt; name.length* b1 m3 a# B9 D* o; X2 \: S+ m
48 z: h" G4 c0 n' h! Y. |$ y
// trim() 移除空白$ I" J/ [' ?5 h3 ~
&gt; var a = '    ABC    '& R7 q- c. S8 `; g
&gt; a
7 w6 j6 S6 i& x# [1 l& {, ~( {'    ABC    '
2 k0 }( U. \+ q1 C&gt; a.trim()' F0 e4 i5 ?0 ^' L
'ABC'
; N7 Z$ y. b1 p7 h* X. H% {//移除左边的空白0 j3 G% l: M0 h/ e1 ]
&gt; a.trimLeft()
6 m; W! F9 B9 Z7 a0 `4 Q'ABC    '
5 H7 u3 B' V1 I& o% a1 r//移除右边的空白
6 X: X2 e' P+ M! A: k; ]&gt; a.trimRight(); n2 `. L3 p% L3 ~2 O
'    ABC'  f0 Y: x* r+ N5 V0 H$ Q" s

5 e; P4 Y% {; ~8 t! x1 b//返回第n个字符,从0开始' I& ?% M. h+ S7 @# Y+ G# a. g# O
&gt; name0 K0 T3 f; `4 \9 a8 S. S
'Hans'
9 J! v# k1 }1 ?2 _0 G4 m; @! Q&gt; name.charAt(3)
/ t# \7 b8 |/ [/ Q+ r's'$ @3 k5 H1 r; w7 \8 o+ S& r. V
&gt; name.charAt()
' R$ L( m4 P  v' g9 ['H'3 @* m# E% [! _: g
&gt; name.charAt(1)  @  o4 P& z$ Z% R
'a'
7 S, P' H9 }1 S$ h
+ M: j0 i+ h% ~' g" E% v// 在javascript中推荐使用加号(+)拼接: Z) n: ]- z7 Q; I
&gt; name
3 B  u0 I+ |0 T/ p'Hans'1 u% \" W% \) O+ y& c8 {$ H# |+ j
&gt; a
- }; w5 N9 I6 j3 s( k'    ABC    '( }! _& L# A9 R" S; B( \; g! `6 x
&gt; name + a2 S6 l# I8 o" ~
'Hans    ABC    '
6 Y7 s1 u' @( I7 a) L+ P6 I// 使用concat拼接
6 {6 m# A7 L! U  }&gt; name.concat(a)! Z& \% {" h3 d/ Y! ^+ @/ _8 G1 E
'Hans    ABC    '
+ p2 S( {' ]: Z3 V; L! K8 W' T$ _" b. e' t3 x: ]
//indexOf(substring, start)子序列位置
+ k  F; v3 w- ?; Y( }. a
4 q7 g; E) d- H( c$ L&gt; text
4 Q. }" `) |9 I6 z/ E4 ^3 K'A young idler,\nan old beggar'8 v0 C* C- _8 G' U  ~
&gt; text.indexOf('young',0); }, S( |+ o4 |
29 R* t% q7 }/ F$ x
0 Q5 g3 N- d$ t0 ^. m0 w  ], U' f
//.substring(from, to)        根据索引获取子序列2 g; x; ?! h4 t4 w: y: j' J
&gt; text.substring(0,)# ?: Z, V5 Y5 Y5 K9 K/ J
'A young idler,\nan old beggar'* ~& ?- s* v& O" x. D+ f
&gt; text.substring(0,10)
) v, r/ w6 ?+ @/ Q" O0 V) g'A young id'2 u  ]: O6 J, \

$ l) I) G: o+ E6 Q// .slice(start, end)        切片, 从0开始顾头不顾尾4 n% u% {$ J4 ]* m! T1 H
&gt; name.slice(0,3)
3 |6 r- w' i5 l9 @1 v'Han'4 y5 f! C! a) \! j0 q! p: P8 ?5 ~
# m$ ~- Y: u( P2 ^, b( E
// 转小写
5 @( L! a0 L5 g/ X5 t&gt; name' H) N/ I: N& |1 a
'Hans'2 C& M0 S# u+ w
&gt; name.toLowerCase()
0 @& D3 S  r" d9 J; e& Y'hans'6 s! J/ n4 G; q9 |
// 转大写) w# L- c; Q8 _0 A$ O- ^% }
&gt; name.toUpperCase()
! I+ z) z( ~7 D'HANS'
5 S% N# e3 o4 B# M. V7 A
% f: I& U, a- d1 l: S) ]. D// 分隔) C+ u! d3 j0 L3 X2 `) R" F- Y* \
&gt; name
' n4 z2 _7 j! @! R( V, X'Hans'+ D8 h- Z/ x1 k/ |, F
&gt; name.split('a')
- }' U' e" \8 p' V! O3 a1 r" D(2)&nbsp;['H', 'ns']- v1 y* `0 W: _# Y- X" C
</code></pre>
) ^4 S2 u# v7 a$ Y; G. G<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
1 K2 n2 O9 s; a* V( A& [<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
9 e1 ~7 S5 p/ W5 G, E; u# S<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p># m) E; [+ }+ w, b# c
<p><strong>null和undefined</strong></p>
5 I9 F- S! X0 J: w$ Z+ a1 a/ Y<ul>- H  T2 ?8 u. D8 L( P
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
0 O, q8 o/ J8 R$ U. \<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>2 W7 L/ r7 e* u3 h$ C, W% y. C
</ul>* E2 c' v( Z  `, j, g* H- p% q
<h4 id="234-array数组">2.3.4 Array数组</h4>( x# }% v% C. x. ]
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
2 v  R1 r+ X& x6 R9 j* s<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']   R8 F2 `2 J& s
&gt; array1  T. A5 [. }3 x$ D" J( w
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& Y/ a- \. t0 ]# |# R
&gt; console.log(array1[2])  //console.log打印类似python中的print; ^: c/ C7 K" Y
3
8 [/ x/ K: V, q1 ~0 O  v! [// length元素个数7 @5 U5 D! C0 B( i1 v' A
&gt; array1.length0 Z$ }1 y; |" T3 _( E4 B$ O
6" r, @: J7 ~+ b5 j  f' e9 ]
// 在尾部增加元素,类型append
& b+ P& a0 _3 e&gt; array1.push('D')3 N: h# m" I/ K- N: P) I
7
  q2 f1 d6 r) _) g% b&gt; array13 b+ n8 P2 E) _( V  `
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']0 T9 q9 ]! e( y! i2 `: f. _
// 在头部增加元素# R7 S; V! g3 @, r7 ]" G* R
&gt; array1.unshift(0)
. z3 T$ J1 M1 {/ S4 l0 Q8
3 W/ F; n# M( o0 T2 g&gt; array1% {  T* Q, Z: G, g8 t! s7 }! e
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']; f# I5 U1 J; U; V) k# @# Q

2 T+ ?4 s1 m. ]//取最后一个元素
. |+ V# ^( I8 H0 [7 h. f&gt; array1.pop()
, B" J: k' t4 I'D'
! j/ y# h( i  U8 N) }: ~&gt; array1. c+ w. K5 S3 p+ y0 z
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']; P6 Z' K* o8 B9 C+ u! P
//取头部元素
! n( a+ j* l1 ^5 i% n$ s  K! c1 G&gt; array1.shift(): w* w5 @. Z! q6 D
0# q; _0 M; d$ R4 `$ \
&gt; array1
% T) k) {( |% N5 ?; M(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. J8 [& {% ~1 v2 R/ k" q9 v, b: A9 Q7 x6 y8 N" N! ?
//切片, 从0开始顾头不顾尾5 u$ U+ I- q& W' ^: y. r1 w1 r7 d
&gt; array1.slice(3,6)' S1 h  A3 n3 C7 ~$ X
(3)&nbsp;['a', 'b', 'c']
0 d/ h: h1 N8 T# A: |// 反转% o8 X8 H4 _7 Q! s, k0 L
&gt; array1.reverse()3 s3 i* s6 B' U4 E" @
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]& c. T# y2 \. n8 l. U. g
// 将数组元素连接成字符串
" d. ?/ ]' I/ H2 s6 ^  f" @&gt; array1.join() // 什么不都写默认使用逗号分隔
$ X; Q& x% F2 N) e$ {'c,b,a,3,2,1'
/ S" y  r1 g0 d&gt; array1.join('')0 h" d; X4 N, A0 C+ Z# s# m
'cba321'
& t1 S5 a4 j/ y+ D+ [( j&gt; array1.join('|')1 x5 A. I% H" r' e! _! r
'c|b|a|3|2|1'+ t7 n2 S7 L: D5 j* C
2 D  a6 a$ l: u6 C# @  M1 J9 p
// 连接数组
* \, P; Q2 @3 ]( u&gt; var array2 = ['A','B','C']
3 a6 q  R* x' I, L&gt; array1.concat(array2)
. g2 @" A! h2 h7 t0 t4 k& K+ d(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
' b5 }" I, i: V5 v3 g% \! q
# i# \5 ~0 ?7 ^: d' _// 排序9 ~1 C3 `& P+ w1 I6 o% F" y( q
&gt; array1.sort()
$ |1 g2 p, N: G(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ m" [2 c, _/ [% l( T7 L& E  F
- X; D! u/ g; X; i! k- u
// 删除元素,并可以向数据组中添加新元素(可选)
7 d& L+ q  Q+ h&gt; array1.splice(3,3)  // 删除元素
/ ~# t' `6 k6 e3 u(3)&nbsp;['a', 'b', 'c']/ c2 y1 m! O" u- F& h
&gt; array1
* B* t- \" j: g  B. l(3)&nbsp;[1, 2, 3]; g% e" h1 _* B4 E* K8 Z
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
. ~  _5 {: u0 Z. o% W, L[]
& F0 j# [  F! S& J$ M" ^&gt; array1
/ T$ I: d  ^+ s5 p2 W$ I; P(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']' N9 `+ O( g6 @4 _" R9 j# t
0 \* j# G  ?5 R
/*% r2 Y* T; f  U+ P6 N
splice(index,howmany,item1,.....,itemX)/ S# R! \! V0 `9 g
index:必需,必须是数字。规定从何处添加/删除元素。
6 [+ G# Z  b8 }1 f2 n$ ^howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。. u( ^8 S7 l( w5 Z7 w
item1, ..., itemX        可选。要添加到数组的新元素9 g. I: t" c5 W/ A* w. C5 M- r
*/0 s+ ~6 V( [# N& C' c7 s

+ n4 A+ m0 G1 D3 u, e// forEach()        将数组的每个元素传递给回调函数2 V( k: G* [8 P: h+ L
&gt; array1.forEach(function test(n){console.log(n)})
2 L2 L5 J3 L) U 1& ]6 C+ }0 d' h3 J, ~: A8 K
2
- l9 j4 h/ G, Q1 s3 u 34 V* E8 n: G4 u
A6 K9 @" q7 s/ B+ F6 U. J
B
$ l0 h: _* S0 ~ C2 U8 F1 q/ s/ C6 \5 F8 w6 i
// 返回一个数组元素调用函数处理后的值的新数组
: t% u4 u+ p- g/ O$ A$ s  J&gt; array1.map(function(value){return value +1})
, ~- ^$ {. W+ {, @! [6 n; ?(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
6 Y1 N/ q+ Z( c, F/ A( o8 n</code></pre>9 k+ `3 R% H/ w; ?% Z
<h3 id="24-运算符">2.4 运算符</h3>
0 N% f9 S$ @; e! H2 w$ H<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
" v* h: T& m; o9 S+ ?<p><code>+ - * / % ++ --</code></p>) g* c: u& z4 Y
<pre><code class="language-javascript">&gt; var a = 6
; I/ e2 e) p9 E&gt; var b = 30 O7 k8 X0 B/ ^# A
// 加4 r. j  k5 X' o5 N1 g
&gt; a + b8 w1 H4 h" e8 }6 v
9
* ^. Y4 r$ l% A1 d" A. w9 }0 x// 减
  I/ a" [/ N% d! [: k0 G, L; q&gt; a - b- A! ?9 j, ~: J) T- G
31 K. S. M! U8 j7 _. a
// 乘
# y! D: B  }5 K" N) e4 b&gt; a * b* [0 |4 D) N& @5 P6 `
18+ D3 C/ i# M& ?, |9 ^- i( F
// 除* M9 d7 P& T( J; _/ J1 V8 {
&gt; a / b/ ?- ~1 p5 M/ e8 `4 ]. i
2
2 l2 i0 V3 q5 d( _! ]$ f5 V// 取模(取余)8 K% O' E: ?6 h
&gt; a % b
6 I$ u$ Y' {# h4 v08 H6 {- Z! A, V% F: ?4 n- |& E
// 自增1(先赋值再增1)
" e. k9 `* o3 x! X3 C+ @+ L( M&gt; a++, {; `; ]4 H, s/ V
60 ^! [7 R, B" Z+ V' M% Q/ S
&gt; a
) |& f* ~) w; w7
) V' d4 ?# ~* k4 d' t  S8 S// 自减1(先赋值再减1)
+ x5 O1 w/ \2 A, k: z0 O* w&gt; a--! z$ z1 o8 z' E! d$ q/ d- x% I
7
$ D7 _( X9 z2 [: s% R* Z&gt; a' r+ y  ^/ X+ T; M' |) H, E
6+ `6 I5 w( y! H- v
// 自增1(先增1再赋值)
- W  z$ y: @; w, D  {&gt; ++a
# t" a# J, I0 ?9 y, ]6 X7
  `% E( e; o( k( S" X! ?  p# D0 n// 自减1(先减1再赋值)) q, w) o' v4 m0 U7 @: }; }! u
&gt; --a- h  r1 v: L* |. ?. C% l
6. W( `( b+ [- G1 y' ]
&gt; a& [" o  Q% F, `0 N  A% x0 _
6
0 N; }9 u' J3 H5 K
# H* ]2 O" D, q+ l//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理8 Q5 c" O! b8 |5 k/ a) K9 q# ?
</code></pre>0 N8 x1 ~3 Q# w, s$ Z3 W# f
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>( Z% J0 F3 h8 z1 P) T
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>1 P& G8 E# X/ l0 F
<pre><code class="language-javascript">// 大于5 j1 c7 G1 u" ^, P2 i
&gt; a &gt; b- W* I8 \+ |" ]: h
true6 I) \' r+ `3 o  g. I0 p' v
// 大于等于
- ~; F; w# j/ L7 G8 i+ I&gt; a &gt;= b$ K* I. ^1 D: k% E: [
true
+ o$ T! _# @& i1 G9 i( s// 小于
- g$ v) N/ o2 m$ m" w, m2 n" h&gt; a &lt; b
6 _* @/ O5 H# K" F8 \' Z0 \6 ~+ \false# F) _( `" Q% z3 N* g, ?
// 小于等于5 ?' R( `% _- ?6 U7 Q$ V
&gt; a &lt;= b
7 e+ }$ r5 q( l  {1 B! }false9 H. w, o$ \& X  G
// 弱不等于
  w# \( M- _$ W  [7 y5 c' J3 ]: G&gt; a != b
  r2 r6 G; T0 t0 qtrue
5 ?& x' [6 e; l( x1 `) U7 V4 ^// 弱等于+ U8 L/ ?! c( G
&gt; 1 == '1'
$ W. H1 c. w8 t3 o, D; J: t% Otrue" L* [) F' S8 i
// 强等于
& X9 z0 R6 r0 ]$ w&gt; 1 === '1'
( Z% ]1 E3 _$ F4 b$ i# v$ k" Rfalse
& ~! e9 w0 G+ H// 强不等于! A' j8 D) C9 h7 t4 S) N& s
&gt; 1 !== '1'
+ N2 V5 O9 o% l* i& _" d: x1 ~true
9 \* {- ?9 U4 J8 p* I) L6 O& j
4 B1 K' M5 ^& ^, M" \1 A4 x) o/*, D  j8 J( O& p, z1 ^3 C
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误* p' m4 r5 S3 A7 _& `3 A1 N
*/
9 k" r8 {' q5 H; N2 D5 E0 H</code></pre>
. _, O! q$ q/ s5 v  m8 t<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>' n  E9 l* S$ h4 K# G, C
<p><code>&amp;&amp; || !</code></p>
1 U1 y2 z% Q4 A4 W4 B: J<pre><code class="language-javascript">&amp;&amp; 与
  b, H+ Z9 x/ a" i|| or + ?* O6 ~, q& Y$ p2 R( ]0 [
! 非
! B9 C9 c( @) J</code></pre>
- U9 \" h+ G$ r  E2 K" k- p% ?<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
8 {5 D2 i. \( ]/ f5 Y. c$ N4 `) C<p><code>= += -= *= /=</code></p>
( B' F! U, p/ x6 t<pre><code class="language-javascript">// 赋值
) w) F, m, y2 n; X4 h! w&gt; var x = 3
& \8 V/ X$ @' ]% K& M: G// 加等于+ v: A; p, r  c( K0 [6 J+ }
&gt; x += 2
( @$ }; }8 Q% d" c- H6 Q# v+ W  k5' e6 m# ?3 S! h  b
// 减等于$ o* F' q: u; Y9 Y6 W% K  a. U
&gt; x -= 1
3 L1 ^" u) }$ I4
$ B8 S& X  ~2 Z, ?+ h8 @// 乘等于9 J1 V2 ~! h. t# q4 {/ F( @' s3 o
&gt; x *= 2' @. A' T6 T  a- I
8! R7 y/ H7 X0 i0 b
// 除等于
* M* _3 ^2 e4 j6 W, M&gt; x /= 22 P0 g, z' ~0 Z
4
, J* s: ~" u$ T! m; z</code></pre>: O  H. k( \+ G, J; o5 e& {& F
<h3 id="25-流程控制">2.5 流程控制</h3>
* Y+ U$ N. F9 H<h4 id="251-if">2.5.1 if</h4>
" `# T5 }9 M8 D$ O7 J<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
) l+ b- ~% u+ y& ?( L6 k
! }# D" ?4 {  f8 y; [&gt; var x = 3
- s- @& N! V* Z# `: ?2 _&gt; if (x &gt; 2){console.log("OK")}! h. u, @+ M& x/ j3 ]$ c. X
OK
2 X8 T3 A+ z. k  m: T7 h) @" i& Z2 o) s/ K
2, if(条件){条件成立执行代码}
0 C' b& \8 V# ]. Q3 r  O/ M        else{条件不成立执行代码}9 l* z, z. ]  P$ G; U) F

) v! a, E+ J0 f8 U&gt; if (x &gt; 4){console.log("OK")}else{"NO"}* E& S( C5 I/ m
'NO'
; l% \+ b6 l& ?
1 _$ _. u- ~) {1 b+ S3, if(条件1){条件1成立执行代码} ' U3 b  c7 h" \
        else if(条件2){条件2成立执行代码}$ v  M4 O) e- ^9 k9 x" N# c
    else{上面条件都不成立执行代码}  k2 H$ X6 a9 _9 {6 l0 o+ |
8 N+ \; n! N8 b/ m9 x1 G
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}& j* z- X# V& r6 w" V+ C
Ha5 Y; h& M- q. C" }) l
</code></pre>1 X; i  v4 h6 k, E
<h4 id="252-switch">2.5.2 switch</h4>
$ P. B5 e# l/ A) X2 @<pre><code class="language-javascript">var day = new Date().getDay();
- D0 \7 ?6 O  G) r" l8 ?switch (day) {
; @) g8 u- @  a  case 0:) v, n$ C! p/ c
  console.log("Sunday");$ r8 X7 g& R& A9 B4 c
  break;
& o* u# t5 }) s( b% k  case 1:4 |& ], q' g' P9 p8 @
  console.log("Monday");' P; R9 i* ^& U& S2 f
  break;
- [# e. c+ {) G: v7 m) r+ i( Gdefault:
& y% J" ?, K: f7 z7 p  console.log("不在范围")% ?( |1 }3 b: n' y  t. d  S: w1 H9 a
}
% V+ f% P6 M% j7 W 不在范围
1 |& S+ b& M0 v* G4 z3 `# C</code></pre>1 ^& R9 _1 e/ X. }
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>3 R. e8 k% b* }5 r/ Y9 B5 Y' t
<h4 id="253-for">2.5.3 for</h4>  y9 m. _$ g) d+ B* p
<pre><code class="language-python">// for 循环. y0 Y- |$ x) F8 e$ }1 D: L
        for(起始值;循环条件;每次循环后执行的操作){! f, |* G5 j$ `- ]1 G8 i4 s- C
        for循环体代码3 Q( b) I: Q% G
    }0 g9 Y' L$ D) S% T2 l, j4 {+ j
; o' h8 M1 |8 @! q% C
for (var i = 0; i&lt;10; i++){0 Q  b5 D7 i7 z4 e
    console.log(i)* c1 ~$ O# w# R: o; w! o' D
}
$ k& |. e  h5 U! {) H! \: Y; R        0
* ?! V& E2 ~/ \( v1 g' [        1
) f" B- P, h- a' s# G& B* p3 V- h        2' ?$ f0 n. ^( k" ^3 Q3 D' @& |
        3
6 t; h1 Z& m2 i" L7 {3 D% n8 e        4
- g3 ^# B- d, V- I( f0 S        5& D2 {$ y* l7 |: k( x, q
        6
+ S/ x1 X' c4 F# U( X$ L- O        70 \1 @* S$ g4 N; D8 P8 m% |/ [
        8
/ \8 c/ O2 V4 M& N# o( A5 U        9! `5 ?/ V( Y' V+ A
</code></pre>. L# f) s. I- T
<h4 id="254-while">2.5.4 while</h4>1 N( X) w$ Z1 I" X  ~3 Z
<pre><code class="language-javascript">// while 循环& A9 s/ C- m' C3 _9 r4 x" N; x% Z
        while(循环条件){: Z2 x& H: p+ R
        循环体代码( A$ l( `/ t! M) A/ }
    }  m0 Q! F- |. @' a) d
7 T$ q2 J! `/ x
&gt; var i = 0
- |9 _+ y$ i) h. b) v8 g&gt; while(i&lt;10){
) `& S# P$ A0 o4 w/ Z    console.log(i)
) b# X& M2 F! l4 i3 x, x& b    i++- A1 O& T" A' z2 r1 l) ^7 d
}& D- x% m- f) @( _* q
0
# A! E2 o1 ?, u+ O% R8 M 1
; J) A! ]. V9 C* ?+ C+ W% s% U  \8 F7 Z" | 2
$ b& K" o- K* l3 q  F2 e( } 38 Z) i9 T0 b, ^& S
4+ m1 i( b& `4 j. Y5 f$ A( U' ~
5* f( D# E( g  O' n
6
4 f. r0 Y! `" a# k' J* f" V7 H 79 j4 D% n) B1 k1 `4 O: b) N
84 u( d' Z( n; e$ g, J+ H
9
: Y' S5 |3 C  W5 C' r</code></pre>1 r, j+ e$ s8 H; ?% t4 p+ `
<h4 id="255-break和continue">2.5.5 break和continue</h4>
& e; G9 k7 d4 F& P* V9 o% B<pre><code class="language-javascript">// break
/ B, U  B# M  |* Kfor (var i = 0; i&lt;10; i++){
$ o+ V" H9 J* |- `* u% ]    if (i == 5){break}- J+ D5 J3 w& C; D/ D3 K; L
    console.log(i)( u# n" Q8 @3 _, J: g5 X
}0 n% n# k# w7 @6 o# T- ^
0
# s8 n/ L2 [& X& Q, C 1" k2 g8 o5 s( d! `* I1 ]
2
& _0 {3 r  J1 L 35 l' }1 r1 R  K
4
# g" }1 \7 n6 p0 t// continue
" F" l5 z7 M2 {% M0 v# mfor (var i = 0; i&lt;10; i++){( P6 K4 ]1 G) A
    if (i == 5){continue}8 q: V/ T) T$ E8 `
    console.log(i)
7 x' c/ m, w2 x" K' ]4 J, T}3 k3 y; {  v5 `
02 u; a6 f$ F$ m4 _4 g% r/ |) T: d
12 P* D$ \+ c! k$ T  g! n
2, q5 H) \6 x9 F
3
" i; t! [3 U1 p 4
- b8 t* I) J" H' d; T  q 6
8 U; B1 \1 [/ R' U9 l. W8 u3 K 7
" X: J; R0 Y. h- O/ h 8) ?0 [* }+ A) m8 ^
94 Z+ Q* C8 d4 _1 u
' W  [% m+ }9 g5 ~, e# ^
</code></pre>, I9 b/ n) f- S, Z
<h3 id="26-三元运算">2.6 三元运算</h3>; y/ N" i6 a& k% s0 c
<pre><code class="language-javascript">&gt; a# t! s9 {! s9 A# p% G' @# a
6  u/ ~$ t0 t8 }9 k5 [) V
&gt; b3 s! v8 m. r$ E' F8 M1 R
3. m8 O' p! ]' E! I0 P( R! P1 f- F, b+ A

5 ?3 }& c/ L  f$ v" {//条件成立c为a的值,不成立c为b的值" a! f: J0 V# R" h
&gt; var c = a &gt; b ? a : b
( O' C/ p1 Q( n5 D&gt; c
% m. d4 O; p$ w' D. G$ @6
2 f. x+ e2 K, R3 B# E
# s, i7 ^* {0 A1 N1 L( f// 三元运算可以嵌套
# ]/ O6 ~1 r0 z; k9 r</code></pre>
/ \5 n5 a# A3 [; d. \, }6 t<h3 id="27-函数">2.7 函数</h3>
& K& B; _$ a& ~* F<pre><code class="language-javascript">1. 普通函数
. d, r$ k8 L* @, @) f: C&gt; function foo1(){
: b3 }4 [2 `1 e% y" u2 x8 u; x    console.log("Hi")
) [( `8 {7 z( A2 x/ R: s}
9 z: t: }4 `" H0 A% g- E. W1 p& d) \* k" T; S; M4 u( {1 Y9 j6 P
&gt; foo1()
8 Z% r* x2 O2 W: }: I        Hi
# _+ d& f  R& Z  G6 I1 w' Z6 c2. 带参数函数5 b! m( `9 \4 O+ B- b+ `
&gt; function foo1(name){
1 M) ]  S3 e/ o+ R" econsole.log("Hi",name)( P( Z% d/ {: Q, _( L8 R$ n: O
}! w- E0 Q) m0 w5 Q# R# ~, h9 C

. _7 _; }& ~# Q  K&gt; foo1("Hans")
" T% Z; ?2 b1 J9 IHi Hans$ R1 X+ f2 E2 H, {* ?

0 Z8 U- d9 s4 f, S&gt; var name = "Hello"
! T! `+ P8 j7 ^6 I+ Y( _( s% E7 z&gt; foo1(name)
. \5 Z, M2 b; l, t) RHi Hello( n( r+ a; o6 |3 J- F$ r

  {1 E' `, R2 ?$ k3. 带返回值函数" i) h0 u/ p7 \: }
&gt; function foo1(a,b){
4 W/ s; e0 U# m/ y3 Y& T+ A        return a + b     x7 p9 ~  u; M
}
  j, m) }& ]4 U. J& k! y&gt; foo1(1,2)6 W7 y/ o0 {7 A
30 S6 k" b) x  F% S9 G: w
&gt; var a = foo1(10,20)  //接受函数返回值
" y* B, o! H: X. a# C/ p( @5 s&gt; a
6 R, m: @- m; z+ c30
) M& h8 W# K0 ^
& g8 ~( X- v4 ?4. 匿名函数- i; i9 J/ R+ ?3 J
&gt; var sum = function(a, b){
/ J: t& \5 t" {0 ]/ R  return a + b;: _7 L  t8 ]& o5 J
}
! }4 H& B7 i8 d$ m$ _! W. }" j- l&gt; sum(1,2)& s4 Y: M/ w% ?; m
3- m; J0 p3 d* y( V

% K3 k: x9 u  p) v# q9 {" D1 E// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
7 k  z4 F3 J7 E. g. ?" E3 `) {&gt; (function(a, b){
0 f4 g8 M6 u; x0 q8 M& c' |: T- `  return a + b
9 c: W3 j4 R; W* E' r2 F})(10, 20)& L0 _2 w2 a4 i7 B9 X
30
# [3 y/ j" d% B8 N1 Z: ?7 E0 q" d0 ]
5. 闭包函数
" g; i& z! `- ~* X& h6 k// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数* ?8 T$ I& h' g5 d- m
var city = "BJ"  i) N2 r$ t, Q9 @  p
function f(){+ ?2 W$ h! C; T& K
    var city = "SH"! d# S6 W  r- j# t  Y: @
    function inner(){7 ]  {% Y, P+ b+ h0 H: D
        console.log(city)
3 u' ?9 _( n* _    }  B; b% v7 _. {& B1 W( s; `
    return inner
, w, d6 n, s/ i4 e; j! N& r% S/ J* j}
: Y* a8 f5 u$ J2 vvar ret = f()$ M1 s' g9 |  B2 _
ret()! G# x8 l( j# D# V2 o
执行结果:
4 ~, L- q" a6 z% w5 v) ASH
! n  F9 f3 s; F
+ \- I4 K! M5 U1 A* E; Z</code></pre>
/ v6 c% z# A3 d3 i+ W. R$ ^3 c<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
4 W1 p0 x7 S8 V+ r3 ]1 A<pre><code class="language-javascript">var f = v =&gt; v;$ y; [- L+ \2 [3 x
// 等同于
8 z1 b+ P7 g2 ]% E) x5 Wvar f = function(v){
* }3 ^  ^+ I9 V4 R3 L! Z  return v;
5 u* u6 u$ q# H$ J0 v- j+ d}% v+ \$ w4 S; i1 c/ L1 h7 t. [  u
</code></pre>0 r  K; f6 z. x* H0 p
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ }1 q- O- G2 E5 ?- z  t7 ~
<pre><code class="language-javascript">function foo1(a,b){$ O  \5 P, H, V4 i% l
    console.log(arguments.length)  //参数的个数
2 r; f4 K; p! Z    console.log(arguments[0]) // 第一个参数的值
% b5 x8 {3 N% |& A1 h! `0 `        return a + b   $ r" P1 r, J, A8 I& d
}
  c, J/ d) c$ K: w* \2 ], Efoo1(10,20)
; B, q2 q0 D+ i! ]1 B) T. L结果:( T4 {! J; u% H0 u. N- p
2          //参数的个数
" m, F) _8 E7 J/ ?5 {* W# `10        // 第一个参数的值/ ~5 @7 W8 l: Q; {& Q& n
30        // 返回相加的结果
& I3 M# v+ |3 G; m</code></pre>
" b% w5 Q  O# t% y0 i& _, b# t9 z<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>9 _5 V2 H4 U9 ~& [& L. L
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
7 X5 p; B& V8 U' I& f<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>( d; A) g0 O" S  v( I& D
<h4 id="281-date对象">2.8.1 Date对象</h4>! n4 {7 n. s3 n- ^2 w  p1 v
<pre><code class="language-javascript">&gt; var data_test = new Date()% ~; Z: u! J3 \9 q0 F
&gt; data_test
3 f! E) f9 y6 E' c$ dFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
: k8 w1 @0 N6 Z: c/ p* b&gt; data_test.toLocaleString()& j) Q: d! z) q9 g( u6 t
'2022/2/11 下午9:44:43'
* l. W, a$ w0 c# R' O
6 y  s& Z9 s. y% S&gt; data_test.toLocaleDateString()% m3 L! E+ {3 a2 a' c
'2022/2/11'
" D9 B9 r, D! f3 S6 h4 m! Z2 j; Q( M- e# z" H
&gt; var data_test2  = new Date("2022/2/11 9:44:43")- N$ D, u. s; g1 t  q
&gt; data_test2.toLocaleString()
; |, N  J4 ]6 U'2022/2/11 上午9:44:43'( i! f/ P5 L) ~2 O( h1 C
6 O# R0 j5 ~/ @6 I  L
// 获取当前几号
/ Q; Y* |6 }* d5 ]" f6 b&gt; data_test.getDate()( @8 r) A' }- F+ a7 N2 h) l
11
6 u3 p- l9 |1 v- N$ o// 获取星期几,数字表示4 }% x9 H" V+ y/ r) a4 x
&gt; data_test.getDay()  5 X9 t) F7 I3 G! Y* L' Z: Z, o& L
5. }# S8 j* G$ ?
// 获取月份(0-11)
  `2 e! C$ s3 R4 J&gt; data_test.getMonth()% ?6 p8 B1 q; ^$ b1 A( e
17 [& E5 |; }% C: |9 }' E
// 获取完整年份
. W  K: z( P) F+ I6 m&gt; data_test.getFullYear()' w" y$ i$ {  y- ?( ^- V
2022
# m$ Z  }& }* O// 获取时
) ^# ^2 P' ^! G4 R9 ]) l, v&gt; data_test.getHours()6 S2 H+ x9 G+ U0 ?
21% L5 Y8 y& \( W& L
// 获取分
1 t4 f1 v) L2 z7 [, d! O+ T9 n&gt; data_test.getMinutes()9 n6 ]# T9 c: a0 L! M
44  t0 J3 o! I% q/ m
// 获取秒) ~3 r; x0 ^& q0 Z8 z) z+ _, ]: ^
&gt; data_test.getSeconds()8 Q7 I& s6 D) ~8 b3 y1 D
43
. k% T3 s9 a: z' q- H8 c// 获取毫秒3 Z- b, S6 K1 V; ^( t
&gt; data_test.getMilliseconds()) l+ O9 c" i8 L9 S
290
% y0 c- j% O. m% ]# s8 Q1 K+ [// 获取时间戳5 H  }& H- D6 a- @, s5 k
&gt; data_test.getTime()
5 Q2 U4 ^/ u5 a% e* s16445870832900 z4 j& h0 Z5 e# p9 v( V6 x: G. ]6 ]
</code></pre>
7 q, c0 _) d7 N% k1 g7 q8 K<h4 id="282-json对象">2.8.2 Json对象</h4>
5 [% F& r: D/ d3 K  J<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串# U7 s; b, I% `$ Z
JSON.parse()  // 反序列化,把JSON字符串转换成对象
! S3 S( l9 R* \. k) i1 K' H& Y+ r5 W7 H; G5 B6 y3 i
// 序列化
3 C! q* Z9 c, @& }7 g7 s&gt; var jstojson = JSON.stringify(person) $ Y' S* K0 l6 A. ?- q+ U
&gt; jstojson  & Y& X! I& {" f- [: y
'{"Name":"Hans","Age":18}'" q' N% n( p, O7 C# M. k+ U: [; Z
0 K6 f5 @! t. V' C$ `
// 反序列化: U# ~0 v; T1 h, |
&gt; var x = JSON.parse(jstojson)
; \  u: q& K, q% H4 C0 R* E&gt; x; N' o0 ?9 D/ p: }& T
{Name: 'Hans', Age: 18}* k4 L8 q7 K) }! P" [
&gt; x.Age
9 [. S+ n) J7 b- s3 r& @! M. E189 e+ Y. f5 l* C8 D' Q
</code></pre>% m7 H! Y% Q% C& K7 F
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>: F% E1 {  o) ~" e! ?( A7 X* t
<p>正则</p>
" G: x( v! B" l) n7 O8 c1 O<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
8 U2 F/ f% G1 ~&gt; reg1
% U! P+ w* ~& o, j/^[a-zA-Z][a-zA-Z0-9]{4,7}/- W& P' ?+ ~0 R" }3 O2 D0 X
&gt; reg1.test("Hans666")( O, t/ [  V7 W# q, B* B1 ]& E# V6 f& p  `$ ]
true
2 a3 s4 E, n2 B6 C; [
! _. z% A5 P7 F: O. [& ^, y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
5 {0 \) Z* T/ ^. w, e! ]&gt; reg21 ~4 s0 i- x$ J0 D
/^[a-zA-Z][a-zA-Z0-9]{4,7}/  ^/ Q- J' [1 N4 ~6 {7 [- f
&gt; reg2.test('Hasdfa')
  D: v0 Z2 R+ @8 ~2 Etrue1 W" D6 B% v  v" ^; O0 R
! _* t  }6 \2 A
全局匹配:
9 ?3 \/ e2 `4 N# H" ^7 l3 `&gt; name
" v' A+ q, A! S, q* q'Hello'/ H2 u9 u2 Q" z! E# \
&gt; name.match(/l/)
$ y" D$ Z/ p3 g# w['l', index: 2, input: 'Hello', groups: undefined]- _8 q0 z1 |8 l3 k

2 V7 f" S* M! r. o6 {  d0 r&gt; name.match(/l/g)
0 X3 ~. F( |& ^( J( [/ ^1 A(2)&nbsp;['l', 'l']9 t7 K7 s- C7 m$ P6 U
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
4 U. a9 J+ U: U" D3 I
$ I* Q$ _) n$ [( N* v- c* m, G  N全局匹配注意事项:
* J0 e6 B1 \# G( j  ~4 l( O&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
6 O- Z; w; t9 M9 x& Q4 O) B% @- ~1 v% T&gt; reg2.test('Hasdfa')
. {! t* a8 t/ `( w* Otrue
* }& K! G! Z5 f3 _- a6 I&gt;reg2.lastIndex;- Z6 _  \$ `: Q3 B) v6 J
6
  X  ~) j+ R8 s; s/ c&gt; reg2.test('Hasdfa')* a4 O  ~% ?+ j; M
false
9 v. P  d' d' z6 N, C7 U6 Z&gt; reg2.lastIndex;% O7 }, J7 g" D8 y" o' M
0
. I8 K: u# E& [( D&gt; reg2.test('Hasdfa')6 s5 z" L3 u5 s* y) A
true
! ~2 R" t( `/ k0 Z5 u  c&gt; reg2.lastIndex;3 r- K, K" I6 e5 s5 Y2 \$ @
6: ]/ X- d7 t9 M1 Q6 ?6 B( |
&gt; reg2.test('Hasdfa')
$ J3 p2 O% R& U! r( Hfalse( D" N+ W* m: a# p! B* l
&gt; reg2.lastIndex;; D* h  A; P9 V
0
6 w5 Z, T4 @  [" d// 全局匹配会有一个lastindex属性
: c7 \% m7 k: w5 J8 L0 l: }&gt; reg2.test()+ L- M1 a6 {3 v7 L+ a8 x
false" s1 N; u0 w$ q, z" @
&gt; reg2.test()
& T9 i% }2 m! h$ ^! s) `true: e9 a  p0 Z5 s) s3 b( z
// 校验时不传参数默认传的是undefined
7 {* a  B8 P  q( S% ]& R" I; c</code></pre>
( v1 V  e. i$ Q$ o<h4 id="284-自定义对象">2.8.4 自定义对象</h4>2 A3 v4 ~5 Q% E, j; K/ z
<p>就相当于是<code>python</code>中的字典</p>
4 z! H# k8 K& Y" `  [/ S<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
/ i! e& ?% Q( G+ o6 x5 l# Q$ d. h" M&gt; person# H: c& K/ \) k# `4 e
{Name: 'Hans', Age: 18}2 U2 j7 e8 T- r3 s: ^" M- Z" c8 y
&gt; person.Name. r/ x* H- ^. J6 w
'Hans'0 L+ |) _/ n: E5 T! O. ~
&gt; person["Name"]
; \! @" P1 O' j'Hans'! a! i0 ~& f* Q; O- a4 S8 T

- c$ a% g+ h2 K' T. i; [4 i; y2 S// 也可以使用new Object创建
9 N( n( f" j' d8 r&gt; var person2 = new Object()
4 w/ d7 f6 |6 m& G&gt; person2.name = "Hello". k, r% _/ @" c8 Z$ E! i' |
'Hello'
6 m! _3 l, E7 Q' d1 q&gt; person2.age = 20
* W( H; y4 P7 [. A& Z20
, W$ K* d3 o2 o$ M</code></pre>
1 j' l5 z' {9 _" C0 M* C8 v( P<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>) t* v+ o$ `! V1 t# r
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>+ v5 j1 p: s5 \3 b+ _7 a" }9 W9 w
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
* }, q- V+ W( L. k+ P<h3 id="31-window-对象">3.1 window 对象</h3>
& ^# @  P7 Z0 M; r% v6 ?<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>2 K  E5 z* P8 f
<pre><code class="language-python">//览器窗口的内部高度
9 @6 r9 }" v# ~' [0 g1 z1 n; Qwindow.innerHeight
! U% C4 _' ]; B9 a706
. S- ]" |8 i$ ]- \/ F% y6 {//浏览器窗口的内部宽度8 g) q- P1 R* w: M
window.innerWidth- @8 D0 N/ ?0 c8 i9 x) i5 G
1522
7 ?2 o% E7 T" o4 F4 W: B, i// 打开新窗口  L- Z* a5 d4 F1 v% Z, f- o/ {
window.open('https://www.baidu.com')
. I, q0 L0 A7 A2 E7 VWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}. F# b- R7 E# h+ l0 v: P" w; _9 h
// 关闭当前窗口
/ A7 C: I( D" m1 J6 P# G* n# R' Swindow.close()
- i4 Q$ w0 g' r2 d! s" c* g//  后退一页
$ g7 k0 D( G( \4 Uwindow.history.back()
  N% c7 a! {, M& B2 ~// 前进一页7 ]  l* y( i8 l+ b& ~
window.history.forward()
9 e8 S) ^) g$ Y# s" M" Z  x//Web浏览器全称
* G. \% x/ ]; I9 jwindow.navigator.appName1 U) }/ }9 q) b- c; M
'Netscape'( L1 J3 A7 P) v) E/ {
// Web浏览器厂商和版本的详细字符串
5 o0 i; _, Y0 Q% Q8 c. d% nwindow.navigator.appVersion& Y; K- [$ r6 @5 y" H8 n9 d
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'9 `; |8 ^; y( ]1 o! e( f
// 客户端绝大部分信息
4 g# p4 }3 m: Owindow.navigator.userAgent+ A6 W( j: l4 o6 ?) y; K! _
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
! v/ I) c" K- n- }. D3 C# h2 q! j5 k// 浏览器运行所在的操作系统5 Y5 L! S" d) U: ~; p+ z! O. M
window.navigator.platform
) L, ?0 x& W1 W1 R% @'Win32'9 m' \$ g/ C9 V7 a

0 V* n! S3 D7 [$ H& h; c//  获取URL
# P! X, H7 M" nwindow.location.href
9 S" L0 s2 z: Q// 跳转到指定页面
" V3 p! i/ W9 Cwindow.location.href='https://www.baidu.com') c( f) [6 B) E
// 重新加载页面8 D7 o$ l9 T) Z+ ]( q: M/ z. ?  a0 k
window.location.reload()
  s2 W1 {* w4 k- X; ~+ P</code></pre>6 ]5 Q7 k2 E/ x9 I7 f5 A
<h3 id="32-弹出框">3.2 弹出框</h3>
0 E& f+ [) f: L; h$ T<p>三种消息框:警告框、确认框、提示框。</p>- Y, Z& R& `' H9 Z7 g
<h4 id="321-警告框">3.2.1 警告框</h4>
( D/ [4 B- }) W/ D<pre><code class="language-javascript">alert("Hello")% N$ p# U* ^/ s% p6 i
</code></pre>1 n; X& D0 K0 K
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>2 ?! l5 J: [% X# }2 q2 `
<h4 id="322-确认框">3.2.2 确认框</h4>% s) E! O# |" X1 T, c. z
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
) @. T; n4 T7 G& ?* `5 B& h<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
! d* v* K! n, }: g+ Z& Atrue, u4 H6 [: I7 b1 V  V2 A9 X
&gt; confirm("你确定吗?")  // 点取消返回false
* X$ A' K+ j8 @: tfalse
' a6 A, V3 N, ~! w* L7 p</code></pre>
' k+ e, v5 U) }<h4 id="323-提示框">3.2.3 提示框</h4>- L5 C2 U6 V4 {- O0 m1 H: m
<p><code>prompt("请输入","提示")</code></p>' v0 z. T  u/ c3 l
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>/ l* {8 Y* w' U# f
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 K* J- S: V1 J6 ]1 s, ~<p>如果直接点<code>取消</code>后端收到<code>null</code></p>0 g# h! q" \& _
<h3 id="33-计时相关">3.3 计时相关</h3>0 {5 Z: x, B& J( a1 u
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
) ]: C1 K. d4 |<pre><code class="language-javascript">// 等于3秒钟弹窗
9 J  _) {9 d- n9 Y& jsetTimeout(function(){alert("Hello")}, 3000)
2 v" R2 a4 z) \- [; \2 D
) h  z0 u" z& z9 g7 J, h/ Wvar t = setTimeout(function(){alert("Hello")}, 3000)( y: \' A( Y1 K/ u  k

0 U% [% \' Q5 ?5 G5 W1 r  F# b" b, s! ^! E// 取消setTimeout设置
: r* y1 X7 m3 q* \7 U: kclearTimeout(t). L5 z' j8 d( `
</code></pre>
6 [6 \5 V/ G' x. z/ g* Z<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
$ j( f' q" I  _<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
% n* u" X6 o5 T  S) a<pre><code class="language-javascript">每三秒弹出 "hello" :
4 M% m! ]$ F! ^/ tsetInterval(function(){alert("Hello")},3000);) t. G+ n& \( i2 }- P  `9 j( ~
</code></pre>  J7 N- ?  L7 R7 n1 {
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>; v' T/ w, l1 d& w
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);6 X+ k9 {% f/ K
//取消:2 U) w: t3 e0 h  G' C
clearInterval(t)8 {$ Z2 k3 Z% f, ^& @' z3 u
</code></pre>
: Y, l5 {9 N( A! o+ s5 X* B! O8 f
4 f4 z' D: b0 V3 m4 n& R
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-26 16:33 , Processed in 0.076680 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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