飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26456
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
1 P* k8 `- [$ `0 d$ q6 j
<h1 id="前端之javascript">前端之JavaScript</h1>
' b/ g+ b4 c! c( U+ A  c<p></p><p></p>  F- g, g) H* M5 v3 O/ k0 B' ~
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>& l$ T' C) |$ k9 d1 @$ g: ?6 n% L$ ^3 ~
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>+ F3 ^/ W$ X4 O: {
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>; z( s$ ~8 |$ o0 j" D- X
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
" |# E- J  O" H8 b: O( D) t: z/ @% b) @它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
' ]# y% ]' I  i$ X# _<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>. ^' l. A( C& @. ^' l( |
<h3 id="21-注释">2.1 注释</h3>3 \5 W0 V' B1 h1 ^
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p># J; Y5 R8 P2 h7 O
<pre><code class="language-javascript">// 这是单行注释9 Z9 W7 S$ W# k$ ?2 m

, [" t! F6 p) c# g; h1 d: {$ t; @/*
. d3 G) S+ Q) p这是多行注释的第一行,5 c7 F2 m* z- `* z. Y2 O0 s5 o6 G
这是第二行。
  X0 i: T8 [6 F8 x0 y*/" _! n! x) w% F. V2 g
</code></pre>
/ Q7 I4 H+ d6 g8 L; P5 _! J<h3 id="22-变量和常量">2.2 变量和常量</h3>; Y, U9 B# x! M9 y6 _) [8 ?
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>2 {. p) O' T# g5 w/ J, E7 Y% k; d' o
<ul>
- Q& U" o, t) A4 x/ t<li>变量必须以字母开头</li>
; R* w. W+ L3 o0 G8 }<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>% d  K4 @% Q" @( y9 I  v) I8 V
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>; F, [3 l' y8 i4 r; L
</ul>
8 w, D" f# a4 [  k1 M+ o; X<p><code>var</code>定义的都为全局变量</p>; g* @' }+ Z0 q- Y& m- G
<p><code>let</code>可以声明局部变量</p>0 z( Q# Z; `# g
<p><strong>声明变量:</strong></p>
* f5 Z& W0 `; n& }7 `$ K' Q( n4 I<pre><code class="language-javascript">// 定义单个变量/ g# h4 w$ R6 [/ V/ U: M
&gt; var name
/ A7 X4 o9 Y# z2 f) y&gt; name = 'Hans'
; e" X1 ]( `+ D+ h//定义并赋值
) w  s& x& e, b! |9 v4 @1 m&gt; var name = 'Hans'
- Q, Y$ \7 [. R' A- D&gt; name
6 k! V, c5 h) ]3 C( S7 ^+ \5 j'Hans'0 N$ l# D, t5 b) E! Q

" Y5 d( P1 J% T( r; I// 定义多个变量8 B) T# q& T, H
&gt; var name = "Hans", age = 18
! r6 I3 B6 `) [4 G9 U5 n8 b3 G$ q&gt; name5 v  n5 m+ Z% V3 w
'Hans'8 _: m% C4 p5 s
&gt; age
% R2 r+ v, S+ v# T0 r" ?18
2 L& q% O- F2 V/ v- l: H' [. _5 P) q8 D2 J5 g
//多行使用反引号`` 类型python中的三引号  u/ e6 X( f* T# a( x
&gt; var text = `A young idler,2 V" j  W" J# M3 Y4 P: v6 b
an old beggar`
) }. K- e: W: d&gt; text
8 ~3 h# S1 B5 Q'A young idler,\nan old beggar'
$ A7 Y- X! N# D" H</code></pre>
3 K% P4 Y6 a' w<p><strong>声明常量:</strong></p>
9 Q+ D, N, v; N1 [# g7 v<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
" f0 Z6 |; e1 D1 I# t7 I% C2 L<pre><code class="language-javascript">&gt; const pi = 3.147 U# e2 X6 V" f1 ]
&gt; pi
! W! K; [1 Q+ b/ t( S3.14
# |- V6 t/ w' y  r0 K&gt;  pi = 3.01
2 Q; ?' l- I$ s. F7 @4 c! F# [: r! lUncaught TypeError: Assignment to constant variable.
# l" R6 `1 u6 o3 z2 V; `    at &lt;anonymous&gt;:1:4
: [5 d4 N" F% C) ]1 K/ N- s) t  `- r) Z% j1 f; o
</code></pre>
* J; f# U: v% u+ |<h3 id="23-基本数据类型">2.3 基本数据类型</h3>! h4 {  F* ?! ~0 _$ S
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>+ `. ^+ v* c4 I; i
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
: k4 U. n7 X& U- s, |- @<h4 id="231-number类型">2.3.1 Number类型</h4>
. N  e% f; [9 B- Q<pre><code class="language-javascript">&gt; var a = 5% ~" I5 [4 m( [1 T
&gt; typeof a   //查看变量的类型  1 @$ i/ F! F4 P( n
number, S2 u/ ^1 C2 ~- |2 U" I
& e: i4 b7 M: z( I
&gt; var b = 1.3
5 o6 s+ C, G3 `% E* h. G&gt; typeof b* [8 u- ^6 k+ d+ @9 A( _$ }$ e
number/ C: k) n8 S0 f" p/ J, }0 M& c: U

) W$ l# K2 p9 f5 M3 O' |3 ~// 不管整型还是浮点型打开出来的结果都是number类型
% j0 U4 k2 Z9 x! Y! A9 `
$ g& Q% h( l$ U/*- w5 ^/ q5 F1 u; r" H8 y' z
NaN:Not A Number5 X2 d* G$ D* M( \. e6 m8 ?5 h
NaN属于数值类型 表示的意思是 不是一个数字$ Y2 N/ ]0 t" e- p' e! r) N- d
*/
8 k7 O6 w  U9 a  X6 B5 X4 s$ |+ e) a6 Z$ R9 k0 o
parseInt('2345')  // 转整型
/ x" ~  h6 x* l  \2345
0 g* h2 X" Z# K0 ?$ B0 m8 |; vparseInt('2345.5')
- `' ~1 X/ \4 C2 E( |2345
9 n  I. G' X  N' J; TparseFloat('2345.5') // 转浮点型
9 _. W; D* [' ?# i" Y2345.58 d1 R' E3 A9 T8 `
parseFloat('ABC')6 ~9 w: A8 F! j8 ~* m2 ~- g
NaN& t! [7 {" ^$ e7 A% P$ m- D
parseInt('abc')
  l' n2 I% K/ H9 W$ ]NaN" o; Q* A8 B& M, E" w" F* h* ]
</code></pre>
0 m, x6 B0 ~! w<h4 id="232-string类型">2.3.2 String类型</h4>
7 t% ?5 \' o/ z2 D2 e$ N6 Y<pre><code class="language-javascript">&gt; var name = 'Hans'
4 |5 @; s0 T' m&gt; typeof name
3 g  w* ~% m1 h, C* W- n6 E'string'! b( k/ ?4 c9 C; v- p
/ R( E" T' A: v4 n( a! D0 n
//常用方法$ ~: X$ P, f- d: c, a& `) n
// 变量值长度
; U5 E7 a- @6 g3 s&gt; name.length
2 _" ^0 W, V9 ]1 D; ?* U4
  s) I1 {0 ]8 X# g7 J// trim() 移除空白
9 R, s/ Z, M3 V) j&gt; var a = '    ABC    '0 f3 }* R9 s" U$ Y# T7 Q5 X
&gt; a
: H* O- P" R8 F) N6 ?'    ABC    '
& b$ w. t) z' F# k1 t1 h! z. Z&gt; a.trim()' h% ]- x5 \" s) Y$ a1 x  O
'ABC'
9 S* Q- _, F5 O7 h, Z//移除左边的空白. v3 [' U* n2 q! b) t5 P* e$ L  i
&gt; a.trimLeft()
+ R+ ~/ e  |: l- F# ?: N7 g  x! k'ABC    '
! c# k, @- f7 S- u//移除右边的空白
+ x: x) E# }% D7 Z&gt; a.trimRight()
% _6 ?' ]2 u: _7 G6 g* }'    ABC'9 l$ `+ ~# @& d8 @3 j. v- ?- u
3 t+ Q, I3 z+ C; m- Q
//返回第n个字符,从0开始
6 P* s9 S9 m/ b&gt; name
! z5 |. p4 s' J'Hans'
/ l7 V$ T. J; g4 P3 @&gt; name.charAt(3); U% r& A# h& C8 r( b; V; X
's'
5 ^% E2 k' ?) S&gt; name.charAt()
/ C" W5 }1 h, V' I'H'
5 q) `1 @9 j. F3 p$ Y9 M! f8 ^&gt; name.charAt(1)9 h9 j9 _# V9 g  ?: G
'a'
! Q8 Y* _2 W; l+ `9 B
: \6 w$ J. E4 B& m* [3 h// 在javascript中推荐使用加号(+)拼接+ s/ x( R3 C- @2 H" `0 K
&gt; name
8 c; Z7 Z! \+ I: e1 L: |5 i1 J'Hans'
9 ?' G' S8 h/ Q, S, K0 t5 e0 |7 ^&gt; a
) T& V2 Q$ [! r! Z) e'    ABC    '
1 \; u2 k2 j. r% Q3 z&gt; name + a% M6 m1 x" v% T% c, L4 T4 W
'Hans    ABC    '7 D! i& Z! ?3 P
// 使用concat拼接2 h# J$ E3 {. S4 y
&gt; name.concat(a)( V0 e6 Z5 z! J/ O# v5 W8 f
'Hans    ABC    '( |9 \2 @4 D0 `  R* g
+ I- K1 U( X0 ]0 d( b8 z# \
//indexOf(substring, start)子序列位置- r, p( g3 ?3 C9 h" t

: v$ y, N1 ]( B3 Y&gt; text
( ~& w  y2 s# N! b'A young idler,\nan old beggar'
- b0 J' A+ ^$ A4 O  M' L' W&gt; text.indexOf('young',0)' O3 [2 P! C0 F6 k
2
+ k. e* M" ~' r  a3 ]) `8 e7 v* M" _6 f" \9 Y
//.substring(from, to)        根据索引获取子序列0 L( }# V( Q/ C
&gt; text.substring(0,)! H& P$ t9 Z' L+ Y+ n8 |8 l
'A young idler,\nan old beggar'4 b. q0 q( e9 n0 U
&gt; text.substring(0,10)* s/ H& D8 s! v4 n" s5 N* [* [
'A young id'8 F4 m' _; B+ M. w

- n7 y5 ?& e$ F4 l// .slice(start, end)        切片, 从0开始顾头不顾尾2 X! p% y8 ~! J7 c) `# r
&gt; name.slice(0,3)
! x4 k, q. X+ Q/ ~- [' N'Han'
! Y! e/ D+ A5 s% N/ x
4 Y& r/ n4 {% N1 k// 转小写1 \! m- ^  ^8 J: f
&gt; name
, r+ W1 w  e9 {6 F8 j'Hans'
4 |) J4 ?. r3 R&gt; name.toLowerCase()5 Z, ^% ^# Q2 U4 U
'hans'. d. h8 ~  V4 Z) \9 T0 z
// 转大写
; I7 r- T, d5 r! H% _5 b+ I&gt; name.toUpperCase()
) {5 F) m: y0 P; r% e'HANS'/ f: B* p2 o& `) h: r  H

9 [( f, U6 n, ]0 \0 e// 分隔6 Y; H9 U. R5 a
&gt; name
+ X6 Y; D2 o/ a8 L" H$ Z0 e$ G'Hans'7 ~" k4 \) e8 {: b
&gt; name.split('a')8 W4 W; C2 ?8 ?% ]- N) r1 S  h
(2)&nbsp;['H', 'ns']
% `/ \5 \6 i$ J0 w# x- |</code></pre>
& D$ r2 A4 x( N& \0 ]# J. \+ E<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
( m2 z/ O& M) {+ x8 s9 j- n! {1 W<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
; A, d+ \! {7 m0 q' X<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, m  T4 ~: B" W( D$ R' o
<p><strong>null和undefined</strong></p>- g- z3 U7 X4 N' x! r+ n& f( g
<ul>
; B/ B4 `) y; [: O<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
: F. ^: R9 |9 ^. q5 t<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>! E( R* V5 r# y: k0 W8 Y
</ul>& Z# b& m- L  q2 ~6 H
<h4 id="234-array数组">2.3.4 Array数组</h4>! W( V; w' d+ r; o# ~
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
( D0 w! w, s+ q0 H<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
- z+ h+ D$ J1 R+ g; q* ~# @7 x' Y1 E&gt; array1
. W( |2 l; o3 N2 m; ]+ \' ](6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# {. v0 \. J7 X7 P/ q% p&gt; console.log(array1[2])  //console.log打印类似python中的print7 w% M: E0 y) \7 h0 s0 |$ h
31 Q  M& K6 o0 d. W5 w) R( G
// length元素个数, H0 M0 {8 K! }* Z
&gt; array1.length9 r4 p. i" M& `2 r
6
7 N7 o  W' A/ f: h// 在尾部增加元素,类型append5 I9 s$ W3 I, K$ a
&gt; array1.push('D')
0 t4 Z$ ]7 F2 a$ l0 R& L" r7
+ ~5 a" n' J" B3 W&gt; array1
) p$ I; ~0 K( U6 }' s(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
& y, z/ i* f! L/ _+ s3 g// 在头部增加元素
! x. j* A0 M$ O$ n7 }&gt; array1.unshift(0)
/ Y5 I) y% n( U8 f+ k+ T84 a# U4 o; Z0 g/ X
&gt; array1
6 E# m0 c; u" I+ E, z, l" D(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
' K7 w" p; g5 m3 X9 _$ e7 E! W  j# S8 V9 R% O  c
//取最后一个元素' g6 n( q/ \& U$ \0 p7 C
&gt; array1.pop()
% E( {  p* T9 s0 F4 `( ]) x'D'
; `  [/ A6 k: E: W1 F3 j&gt; array1
% A+ \# H% |, `8 d3 n; s! N# X(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
! @/ ~2 J: u# u//取头部元素
' b0 x- Q6 @/ i, Y+ ]/ h&gt; array1.shift()
. g" l; F7 I4 R6 n$ E- F; G0 s0/ S; T" H& ~1 |# q) z0 ?
&gt; array13 i+ ?* d+ W3 g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' z9 h. {6 v+ h
/ K$ B2 L4 Z2 P//切片, 从0开始顾头不顾尾4 t1 F% t1 s3 J" @8 P/ p. ]
&gt; array1.slice(3,6)
( n7 ^$ E! g; J  u' |(3)&nbsp;['a', 'b', 'c']' g4 P, p- W4 d, K
// 反转1 K+ w$ L+ Z  M5 ?) D
&gt; array1.reverse(); h1 K5 Y) C# j: \0 ^, e1 J
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
% Q) b$ z( k# u# V6 g/ m1 U# s// 将数组元素连接成字符串
1 h3 {: i4 n3 o( ^7 a( b. T' D&gt; array1.join() // 什么不都写默认使用逗号分隔
% [! ]4 B# E/ D  j( o& X'c,b,a,3,2,1'# }) }: E9 N5 W, n" L
&gt; array1.join(''); j( Q" F1 |" F; `+ r$ d  {9 c
'cba321'+ V# |, E* t7 t' a
&gt; array1.join('|')
5 K+ I/ g; S( }% |'c|b|a|3|2|1'
+ X+ B3 r, q5 i# V! M
9 D, R6 O% Z" L  U// 连接数组
. Y3 n0 v) z( n5 ?1 v% s&gt; var array2 = ['A','B','C']) B7 @' o6 X2 x$ n* F& L
&gt; array1.concat(array2)
0 o  d# j5 M" \" h# ?(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
  B: j5 ?- M; ~% c+ J( c) t, e6 q  n0 d- n& |, S' K" |& B
// 排序
- }/ E) Q4 z9 u. v. n&gt; array1.sort()
+ L  X  K, @; [6 N# X(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ t$ w- F1 A9 o7 k- p: t& }/ \
' W' E, ]5 W. e: }2 U( P
// 删除元素,并可以向数据组中添加新元素(可选)
! \2 o- P& g3 Q: B1 `# C+ n1 q&gt; array1.splice(3,3)  // 删除元素8 d4 S- @" h7 v+ q7 ~2 q
(3)&nbsp;['a', 'b', 'c']3 D3 F8 Y' |% y  {
&gt; array1
8 t/ k' I" K" N5 ]: Q* d(3)&nbsp;[1, 2, 3]
! z1 G9 Z' f( A8 e" H+ s&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素6 i/ L+ I- t+ r
[]9 P$ s5 d; c% ~4 B
&gt; array1
# `9 S) Q4 ^% `0 B8 V" j' [$ u(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']% H* v; M6 m5 G+ x
) v/ ?* D9 g7 f; L; b
/*
* l$ m2 z6 l3 U6 [splice(index,howmany,item1,.....,itemX), _: E" ~: y' b7 U
index:必需,必须是数字。规定从何处添加/删除元素。7 t5 H* T6 A8 j; \6 U0 H& W
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。; G; e1 e, T0 P0 K
item1, ..., itemX        可选。要添加到数组的新元素2 g% l2 D% L' f! z7 y
*/
( _) h7 k0 F$ q* l% n% r
1 g4 `+ i* w3 j# Q  @// forEach()        将数组的每个元素传递给回调函数
5 m& {( V2 x& X5 |, W&gt; array1.forEach(function test(n){console.log(n)})4 b4 P/ c- x; S2 p
1
  c# |  j  n& T& k! u9 ?* i2 q' n 2# C5 l, h9 ?, f3 _/ O4 c9 \
3
$ U/ t4 Z: U% q A
, J* x% _3 Y! }( I! q, ]" c B
7 y- i1 C( y* x* V; x& @ C% u0 x" Y/ U; P& T# ^
// 返回一个数组元素调用函数处理后的值的新数组, S, u4 C# H% n9 g+ N% U
&gt; array1.map(function(value){return value +1})1 m) J+ g0 g# D& r7 G4 q* {$ R
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
% u0 K9 ~; S* {: d4 w/ }</code></pre>
) }2 C7 T' z3 h7 E0 T+ s: H<h3 id="24-运算符">2.4 运算符</h3>
* J& U8 e! R/ f, |4 e: G7 }' C<h4 id="241-数学运算符">2.4.1 数学运算符</h4>/ b, J* ]& z, y
<p><code>+ - * / % ++ --</code></p>
5 P* V4 B2 B: F<pre><code class="language-javascript">&gt; var a = 6& b& X$ i. A# g: G
&gt; var b = 3  y. o& C# H& L4 T8 j/ O" _8 b
// 加1 N. x( l6 e% [4 o
&gt; a + b1 u) |+ v7 s3 p% x
9
+ F) ~% n9 L% t// 减
, X" l2 z9 d& h& q. \$ l+ X. I&gt; a - b
1 v, g* ^/ l7 s( [$ c& [; j% K( O2 B3
# A3 A+ E, ?  \/ {// 乘
1 o% m# ]" w. P7 m0 k&gt; a * b; b7 T. P$ `3 M( O1 J  `$ R# t
18
# W$ S( S% S& _; B; m+ i4 H9 l; |// 除2 B& f5 F7 U% i, z! @, ^8 f8 |' x" {) v
&gt; a / b
/ S( t2 h" `% M7 D23 F7 J% q5 z# X6 P6 |- p5 a& B) S
// 取模(取余)0 R6 u0 o9 \$ ~; g8 ?
&gt; a % b5 G0 G, I: C, y; a) z: N9 B9 ^
0% p$ Z- T6 W+ O( z! A$ T& z& `1 |
// 自增1(先赋值再增1)
: J! {- x4 x9 Q! D; X&gt; a++
+ N2 a& [5 U- j/ ~8 B; p6* ~" b9 U. V# a: T
&gt; a1 t! n9 ]2 _3 b2 ?/ v" F
7
- I. y2 c+ V1 t& x// 自减1(先赋值再减1)& o' S) I, L# f3 Q) `  Q
&gt; a--8 c: i( b& a0 h. q7 T8 C3 R
7, }( y- i: I# ]/ M3 H- T% B
&gt; a: M2 B7 X- q8 i9 F
6
. O7 V- |+ k; A" [" z3 d// 自增1(先增1再赋值)
, J5 w# `, m/ x3 x4 O5 a&gt; ++a' c# U3 K7 \2 J6 }4 H% ?4 y( G
7
5 ~, g' a& R1 I  T7 U( [4 R2 ~// 自减1(先减1再赋值)
" a7 J4 z3 [( ?0 S&gt; --a) w8 X! E4 l0 e9 r5 p
6$ W2 Y* [+ M9 b! V2 R4 s
&gt; a
, V! X! H5 R+ L9 i% G6  Q5 z! `8 u  G8 U' l
0 n8 U+ }0 u' @5 X
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
/ Y# y, m4 S7 x9 R' r, D</code></pre>: _) p; g% i6 Q! s! B. o
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>5 A6 @( b$ x  M$ d4 w
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>6 l# a+ U" C/ {0 i1 A7 D+ [
<pre><code class="language-javascript">// 大于
, B% b/ k/ \' E& \/ ]1 I4 C&gt; a &gt; b
! o# K& T* V+ ^- q( g  u% V  Jtrue- n" H) f. P  g1 |  [+ t) q
// 大于等于' u2 {* H* o" d6 ~6 I% V
&gt; a &gt;= b0 }* Y9 U9 G2 ]% _
true0 F/ X) k% U6 h1 J7 S
// 小于
- l$ S* O; a, h' E+ H&gt; a &lt; b3 H" q# ]; S1 `( v7 }
false5 \) i* d# \5 g
// 小于等于
- t5 Y: F) P5 p  }, B) n; F% x&gt; a &lt;= b
3 ^" m0 Z( p1 L  s) V7 N; jfalse
9 ^! y6 L+ c- D3 H6 y* j3 s// 弱不等于
' ^' Y, N6 V; T' `&gt; a != b. k% B) B) h* c
true
7 F: y& ]; K; o7 {. e5 A' X7 R// 弱等于2 q4 c$ _( ]# J# P/ y- g
&gt; 1 == '1'
1 u' h! H4 [3 P: dtrue
3 m$ c, i) Q" a* I( a// 强等于
3 f0 u$ h8 e5 ^+ y&gt; 1 === '1'
: a4 ?6 z) L5 H  t3 Xfalse  k% u5 [/ T! r. `7 i& c6 ~
// 强不等于
( J. L9 q% b" j1 ^* j8 Y+ k" u&gt; 1 !== '1'+ C- _  z7 w. |- y; k: V( K
true
% S3 M# m' }6 B+ b+ a# t; u- ~; v0 G( X: I* o
/*
9 h8 W. X, g+ D4 ZJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
" P3 e# ^9 F; @5 R2 }  J*/6 d3 m/ p  |5 `: b6 Q
</code></pre>; F  N# h- r7 y: w4 b/ [; _
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>3 P7 W$ [8 l" n9 W. O, L, l
<p><code>&amp;&amp; || !</code></p>7 V; P2 i' E2 c) Z" o
<pre><code class="language-javascript">&amp;&amp; 与
7 c; T: x) E, t# Y3 t" U; e" O|| or 2 C) J' H7 ], B' K: V  s; j& p; g. {8 Y
! 非
8 h; [. P5 M7 T% z5 M: {7 q& v) O) Q</code></pre>
8 n0 ~% W% s# G% ^<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>: K6 p- J. k: o* Y( R
<p><code>= += -= *= /=</code></p>+ p; ^% e! K& Q, k% j
<pre><code class="language-javascript">// 赋值
  `& J& d" j- q; s# v- B! D! \8 a&gt; var x = 3
; ]9 V) J/ c# E- J! b& Z/ T// 加等于5 M$ J2 E- X0 v6 R
&gt; x += 2
+ W# f1 u. u" A+ D1 x5& G2 s, ^. G* R  O
// 减等于
6 ~$ t* Z, A: u9 n+ ~&gt; x -= 1
) r) Z4 G. w% T0 Z4
6 n# p3 a+ @2 Q  d0 q+ ?// 乘等于7 _( Q# x" u/ v
&gt; x *= 2
8 C) P! i: q  ~3 k2 H% {8' l6 P9 }0 B, T+ Q; @
// 除等于  h' w( j1 ]) n) T7 k2 g- j  [
&gt; x /= 2
# G" ]7 X: W. Q& E/ x2 ~4
1 p' B% m! n: P</code></pre>* `1 J/ L6 K3 ]/ E
<h3 id="25-流程控制">2.5 流程控制</h3>5 Z/ a9 a# L7 K5 M; z/ Z* w4 Z) I
<h4 id="251-if">2.5.1 if</h4>7 @* T9 e% m' _' u
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}: |, e# {5 l/ J! I. J0 t' o- `
; Y5 u8 P5 ?9 e/ N/ ^8 N
&gt; var x = 3
3 i$ y8 k* r* u&gt; if (x &gt; 2){console.log("OK")}
% H/ o* @0 ?/ f$ G9 _2 W+ a5 C OK
8 _/ X  D% {- e; l
% ~' ]" s5 s& O) C0 V& b2, if(条件){条件成立执行代码}
0 |$ }0 O7 {, Z* }, a) g        else{条件不成立执行代码}
: k. c7 d0 Y( E) ?. A
4 V3 C+ y; \* r, q: O; z' U& i4 j&gt; if (x &gt; 4){console.log("OK")}else{"NO"}" Z) [. I3 ^* V0 F! L( W) {8 z' I
'NO'( s- k& i9 [7 j* z0 J" m9 _

  M2 w; v4 K2 X( N. I- h5 i3, if(条件1){条件1成立执行代码}
$ u, `% e1 U; Q2 p2 y& u+ ]        else if(条件2){条件2成立执行代码}) W6 @2 S6 N2 ?- _+ O, w
    else{上面条件都不成立执行代码}
/ c3 _0 p% j' C  f* ]- h- t
: B' ?9 y" R8 R5 a: F&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}7 S) `; c- y& K; M+ m/ B. k
Ha* y& s2 E# V3 i1 f+ S
</code></pre>+ V1 b; v) B8 _0 G
<h4 id="252-switch">2.5.2 switch</h4>
* L$ n  W* i* f+ ?& T4 y  z6 R<pre><code class="language-javascript">var day = new Date().getDay();! h- r; |2 h8 g0 G
switch (day) {
; x* G4 _1 \) T. ?# O  case 0:
2 a5 o7 {+ H1 B4 E& h  console.log("Sunday");
9 [: ^# E3 ^4 r" v  break;
& a& H6 r; q# F. F7 ?  case 1:0 w/ t3 E9 s( M) f# Q8 G* Y. Q  _
  console.log("Monday");, I2 E2 a% Z1 p% \( o
  break;2 U6 y* B6 b4 ^, E+ n1 C! s/ M" [
default:
, ?8 y3 Z2 Y. x8 a% b  console.log("不在范围")
* Q  N3 [+ G2 z4 I; K* X" a7 z}
6 C. t2 O" A" D, F% F& K 不在范围
5 L" G6 Y- N% O! ?9 o* ^. f; c</code></pre>) M' l* V. |& t" {( `# e
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
, r  v2 K4 T; z* Y<h4 id="253-for">2.5.3 for</h4>  }; }- M2 E: q/ g( s- l: P
<pre><code class="language-python">// for 循环
4 x. a+ C  ^  N9 x* y8 h& `        for(起始值;循环条件;每次循环后执行的操作){8 N  w5 I6 q, u  L' N9 s
        for循环体代码
8 K2 }( W1 Y. Z+ f' @% Q; g# k    }2 u1 c# `* F& `2 ~* \
+ x& g+ o3 v8 O  _0 N
for (var i = 0; i&lt;10; i++){
6 p$ C8 i7 p0 M7 s( a5 C+ M' s    console.log(i)
! z8 v% V: H: j7 }) V}) n4 N, O' r$ V4 Z
        0
3 q# i, H1 B: g- F        1
' ~, o6 R# V3 ]        23 U6 Z6 g5 ], s
        38 U$ W7 e+ o8 j& c% z6 g8 x" r4 D
        4, n7 q" E" I8 k6 S) c4 O) Y% l1 j. e
        51 V% b6 W: g9 K. H1 l, W! D
        6
3 f0 ^, W7 G4 z9 \9 g% L% C        7. i/ D3 Y; A: \1 R) v- R  t: m1 x
        8
8 f. ?' e3 o9 S% A+ j        9$ q0 b9 h3 M5 j
</code></pre>
) f, u' |. T1 L' r% R<h4 id="254-while">2.5.4 while</h4>
0 W# k9 i' D. [0 s& I. v* O<pre><code class="language-javascript">// while 循环% x$ q5 c$ C1 j. W0 A0 Z; \7 e
        while(循环条件){
2 M, D6 f1 R9 B5 `0 M. v: E        循环体代码, I& N$ q) ], |' f4 d' K, m
    }
9 _: F4 d( }9 A5 K5 r7 I+ I
/ m6 f3 f# I( o; f' |&gt; var i = 0
$ }9 Y" n# M1 Z! o, _* O2 ~( S3 F&gt; while(i&lt;10){7 c( ^. r8 i8 V5 ?; N. d: e
    console.log(i)& d, t9 P5 f# x2 O: G: L# I; w
    i++
2 k# G' r4 }6 @5 Z& R}% w; X7 F) `8 L9 A
0- O( a3 U) B: K
1) B3 H! Q6 i9 J2 `
2! `+ U; O( R0 k
3
5 N/ B) v1 N# P 47 f  n9 c+ z5 z: u
5
% E1 j% `8 [9 T 6
* ?% c- f2 _9 M- E 79 S0 O% u' q$ }
80 T/ T5 a) Z* L( K! d- z
9
3 J+ m$ [$ l6 R; z! v1 T</code></pre>* c( k7 X6 P+ Z4 N! s, E
<h4 id="255-break和continue">2.5.5 break和continue</h4>7 o' m3 x" Q# c
<pre><code class="language-javascript">// break8 h; O" {" o6 i& z% N
for (var i = 0; i&lt;10; i++){1 U, D/ N' q: F; A7 Q  U, m0 j
    if (i == 5){break}
6 P" l1 \8 S" Y, \$ a' Y    console.log(i)
$ ~+ M) Q) f" o( }- e! _9 g' n}
; l3 z" i  z8 M$ Q! F9 ?/ q 0( ?/ N9 P% }" p9 n$ t- U' Q
11 h- U, P$ e" A* }0 T: n
2& J! C+ i7 B: n, x+ O& h( z
3+ f! n8 [4 n, s& D! N0 t
48 k6 m. _4 A1 l7 U) \; x
// continue6 P  f$ J. n4 j" _
for (var i = 0; i&lt;10; i++){" X7 u4 ~( M, A. o: I
    if (i == 5){continue}
8 ~. c$ I. u2 w0 G; @+ d; q    console.log(i)
$ [  _0 v7 i9 |) u. o4 P2 S! @8 q}- f* b* W7 w* T
06 A( n$ x. ^- |4 N- G2 M- t; p
1, P$ S1 d) E5 v9 n# p5 @/ Y, Z
2
! w4 D4 l  C; `/ p0 L 3& B8 U9 }/ p: H0 z
4
  y) w' I- R  o( D# C 6
# S  z/ N1 l( U% q: m$ d3 t 7* F4 U8 X/ Z" J
80 U8 s7 ?0 p" H- H1 I
9
/ \, r9 m9 Y, q3 X/ c  V, m! M5 h- a9 y- l; K, H5 b
</code></pre>
/ o6 v: n! }( m8 {& e<h3 id="26-三元运算">2.6 三元运算</h3>
' I: B# j' j! k3 ~+ }2 B* e<pre><code class="language-javascript">&gt; a4 i8 _4 }) d. V
6
4 ^! G  m1 j8 M3 e+ n3 @&gt; b: g! N3 y6 [  [8 x% k' g% m
3$ A8 b( N6 K3 ?3 c+ j- Y5 O
" n* p8 z, {) A6 f
//条件成立c为a的值,不成立c为b的值! F! y% h7 Z& p; |" _0 k% M
&gt; var c = a &gt; b ? a : b
5 ?3 S8 h& d, N8 @  x( @&gt; c5 I- K+ w7 k$ h
6
0 f: F& `& P0 N) @/ \; I" o7 u3 g$ \' O' F5 C) F/ U# D
// 三元运算可以嵌套
- G" O) W, [" z; p</code></pre>/ a: t# H& o, o! h2 f& N( A0 o
<h3 id="27-函数">2.7 函数</h3>
/ e. d0 e7 W6 P% H7 z, G+ g<pre><code class="language-javascript">1. 普通函数& _! s- `1 a" L0 g
&gt; function foo1(){
9 i* F1 ?- t6 O# J" E. V# n# L* a    console.log("Hi")9 O: _% d% N0 j+ c3 t; N9 v
}
- n2 }6 _* _+ D- o, c) l& c! A( I# E! P) t# ~, G
&gt; foo1()
9 d0 S! H% D& c, m; ^        Hi/ i9 E: t6 j3 j1 y
2. 带参数函数
* s% P" o3 p: [% `! |* _  L! S&gt; function foo1(name){
$ n! ], Q( T; \+ p$ C: gconsole.log("Hi",name)
% L  k9 \1 B$ f% r' b, V}
: m5 @, W. A7 v/ _" x) M$ i4 J# h0 |2 b$ L; W0 F
&gt; foo1("Hans")0 @* p  H' V2 A" k
Hi Hans+ J+ _( L1 ^. d/ b

9 d8 `- S6 U* Q. g  U8 G) p/ ~) _&gt; var name = "Hello"
. C! I  X" t  |7 D# T0 r7 M% K&gt; foo1(name)3 }: L/ E9 ^& a  {- O
Hi Hello
! a; y5 W- B9 b& T& @& M% h2 @+ d- d4 ?6 w$ u: C# g4 e
3. 带返回值函数; x6 t+ r6 D6 H2 g, g9 B1 P  I
&gt; function foo1(a,b){
/ |- s# H. _6 S' [, a4 n        return a + b   " v3 i6 t8 M. k! X; r7 h
}. k  q8 h9 I8 N% X- r
&gt; foo1(1,2)
. j- R, K% X3 g! }+ q+ @39 Q- d5 x$ z  S( ]- [
&gt; var a = foo1(10,20)  //接受函数返回值
* A  M; e) b0 B- \: j+ e&gt; a
# n. P$ d- @) I. g- p: F30
4 X( F; N- P, i6 `6 I" o) Y; I! C
1 A8 ?- l8 G4 `1 ]- W) ]( p4. 匿名函数
/ a5 `9 l6 t7 m. U# {9 T, d6 P* I&gt; var sum = function(a, b){
  R5 o6 I: |9 d" N# O1 \  return a + b;6 J4 b, K6 c+ n* x/ [7 e
}
" x0 A" _4 d" n; k6 ~) c&gt; sum(1,2)
( A/ C% N6 E; E32 {0 n) v  V' E. l' Z; o! N# l3 R5 w
& w) ~& h( R3 [, L
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱: V& X3 h* m8 T: N5 ^" W: a* w
&gt; (function(a, b){- s% }+ W& C7 L9 Y( g2 ~2 b, K. J
  return a + b4 Q! L9 g- b6 V! x0 i+ D- k% ^0 L* g
})(10, 20)
/ c2 b5 ?8 p5 v& R6 d1 h' a30
" k- a( V# W' \
1 L1 f, L5 ?3 {1 [$ A( P' y* I5. 闭包函数
/ b" P: ]% l$ ^3 w& t7 ]! ^& K// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
* B# r( T3 B7 a' `, vvar city = "BJ"  c; p& y4 ^9 ~
function f(){
5 ^! n7 N, p1 S    var city = "SH"
( p! ^4 @: s; v: l* c% L4 w    function inner(){' z. k; y) G7 f2 i! P5 {
        console.log(city)
0 a2 C; l; T' [8 R" y    }
, [  L0 Z- U& b# \/ j: j    return inner# p8 ]. R; L' ]7 K9 V+ I
}
: H7 B7 ?* b. m6 p/ Nvar ret = f()7 s( m1 B* Q7 _+ ~
ret()
1 e1 B/ ~5 h' d! p3 N) @5 N' B执行结果:0 f) L+ \) S1 m' n2 \/ w6 z7 v  V
SH
" t* F8 v) e. H, R, B( t! k- l6 H/ N+ z( r. c4 U( s, Y
</code></pre>" |- I! @( h5 e: r2 L
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
- n6 x. m4 l+ m! u4 f" g1 y" K<pre><code class="language-javascript">var f = v =&gt; v;/ k7 P  t9 ^6 `% n/ @" Q
// 等同于
& [( c! w' e  d; A) r4 n- e8 d9 A8 pvar f = function(v){, c  T3 N7 g* x" i. `
  return v;% t+ w# m% v( e- l0 z% K4 b
}# p+ E7 n3 k; M6 Q( b
</code></pre>/ a  j) H0 {. x' s+ Y
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
0 [. w% |  E+ \0 Q<pre><code class="language-javascript">function foo1(a,b){' J4 m- {. x& L5 o( b0 C4 W
    console.log(arguments.length)  //参数的个数 3 V) s7 k4 }% ]+ q! S
    console.log(arguments[0]) // 第一个参数的值1 W* H" C9 j+ O  A3 }
        return a + b   
! K- |! y/ b# a; a; \" X/ m( h7 K}: j$ l( @& e* e% T6 c, t8 |
foo1(10,20)
' Y- p2 n0 c0 K6 i( v% z' o% e( Q  `结果:5 x  r1 o% B* N
2          //参数的个数
9 |$ t: r# `# n$ f% k10        // 第一个参数的值# M$ i/ K+ x8 w; M# `
30        // 返回相加的结果
: g6 `% Z4 d9 m</code></pre>
+ u! _$ a! u" b3 P3 U6 p! S<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
/ r$ J( L3 E* ?6 }4 |6 D: j<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
0 p0 l# X9 p) i# t( u1 `4 Z<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>+ q: Q4 H1 y, S+ z, k
<h4 id="281-date对象">2.8.1 Date对象</h4>7 S5 V9 `8 O1 }
<pre><code class="language-javascript">&gt; var data_test = new Date()9 x4 U, {6 V) d* R6 p/ `; n$ [1 ]
&gt; data_test, C+ c! d% _9 Q" C# H( T
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
  u7 F5 x& x# N$ `* Z' x&gt; data_test.toLocaleString()
: b% P! P2 Q, M  E0 D'2022/2/11 下午9:44:43'
$ R( I  f- l8 I! c" J4 K) I; T2 H. [+ U% B) v. }& Z) m
&gt; data_test.toLocaleDateString()
3 I3 L& |! E" R- l& y+ R- b4 r'2022/2/11'3 W  i1 ^2 i5 V4 @7 y1 l  n' M) _
2 i9 F& H" g8 z) Q( {0 C
&gt; var data_test2  = new Date("2022/2/11 9:44:43"); B. ?1 U4 \7 k6 ?, K% G
&gt; data_test2.toLocaleString()
) p. E$ Z4 B1 ^$ T6 f! H* t$ q6 N'2022/2/11 上午9:44:43'
( l% F. Q% r/ n/ i* L* M
+ Q) p- H4 P1 F) Z) U& L6 S// 获取当前几号
2 f1 ]+ D' l3 s0 M# E7 m&gt; data_test.getDate()
/ \- `6 o9 s  ?11
: P5 \6 `3 ~$ V( y1 s* q// 获取星期几,数字表示
$ ~! x8 h7 A5 t% ]) Q&gt; data_test.getDay()  
1 q' E& q' e! u: n52 l; g" }" C, e) Y9 B; Q
// 获取月份(0-11)
; ]% D. Z/ |" n) V$ J  Q&gt; data_test.getMonth()6 V- {5 x. G0 E4 e7 I! L
1
9 @  @2 V. b& O// 获取完整年份
) t# p6 K7 P6 |" P) n# L& R&gt; data_test.getFullYear()4 N  l2 u6 ?) F9 S2 ~8 }4 u/ y
2022
$ |: A5 D7 C. m4 h. J// 获取时& j3 Z: b( n; {+ a. n
&gt; data_test.getHours()
$ r) |4 U+ H1 K. V  _0 v0 O- d215 Z' w7 Y7 q8 D9 i5 ~+ {/ Y& e
// 获取分% U4 w, C4 y' O% [- Q3 t7 q- ^
&gt; data_test.getMinutes()" W0 P3 q3 ~/ |8 h. e( s
44
% ]1 ?% v( f% q3 \7 ?% j// 获取秒
% o" s/ z- I2 x# O+ r1 c% j&gt; data_test.getSeconds()& d( i2 P. G5 x6 k( q
43
+ w; T3 @+ l1 d6 }" e( h7 ]6 l% ]& X// 获取毫秒% q3 ]4 L& ^6 w4 c' x7 H
&gt; data_test.getMilliseconds()  A, b" N: J- n, e! }2 I+ J( J
290- x. H  s: d% Q  T
// 获取时间戳& N2 V" T" \. U0 z* Q. v
&gt; data_test.getTime()4 j- o: [7 O4 e/ d4 V
1644587083290
' |7 B+ b* `9 t) G6 y</code></pre>, t% v% A' D/ W7 R$ Q7 R
<h4 id="282-json对象">2.8.2 Json对象</h4>+ r0 f; m# x: H3 Z" u4 I4 i$ D
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串9 G5 k" v0 z( K5 S' T
JSON.parse()  // 反序列化,把JSON字符串转换成对象0 O* g, i+ N6 |9 W% {  S
$ J" e. w! s; S) ~* u$ f/ J4 C
// 序列化$ j2 l# A  i* X: C1 T4 j/ J. y
&gt; var jstojson = JSON.stringify(person) 7 ^# @- W; G: s! u& Q. w
&gt; jstojson  
. [+ U% p9 m4 V9 l'{"Name":"Hans","Age":18}'
# V7 l1 K) n" m7 X/ A% \: R. [3 E: a2 k) V$ {6 C7 M
// 反序列化
/ x/ ?, Z, K' V( f; [# @3 q&gt; var x = JSON.parse(jstojson)7 G. E  Q- y* P& _& ?" ]/ v- _% ]3 b
&gt; x
/ @; A/ T6 X2 z8 L/ L# q: r, K3 B{Name: 'Hans', Age: 18}
7 N& k! x, ^/ f' n&gt; x.Age% J8 E8 q  \# L3 ~) \
18
+ o# X0 H* a( H- A</code></pre>
  V+ V$ Q0 m9 R9 l<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
! I; P; K" q; u/ W4 s/ C, p<p>正则</p>$ h: p" {5 p8 `: r; J! p+ n
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
8 n' j4 S: Z6 v2 C0 @&gt; reg14 R$ m# F! Q( b
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 _4 s/ @$ i% q) O5 E0 J&gt; reg1.test("Hans666")  R. M3 h4 B# e, g! h' @, b0 f
true
+ k8 i" o# B* e  s) X4 ~# V! \7 \/ N' p; Y
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/" ]+ D& F; h. v- u
&gt; reg26 l3 n% [/ h. e5 @4 f7 D, ]
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
7 w. y8 B  ~) x&gt; reg2.test('Hasdfa')
0 A* `# c6 n4 btrue  ^6 V) W1 J, G
5 v. i) h# W5 t5 W, [# }
全局匹配:% P$ l9 {! d0 w/ e0 D
&gt; name4 J9 n6 h7 f+ n0 `$ \2 y: S* N
'Hello'
7 N6 ~1 w% J; B, j- h8 ~&gt; name.match(/l/), E( S% E  Q, ?9 h; q4 v, D  m" Z
['l', index: 2, input: 'Hello', groups: undefined]
3 x! h8 s, g+ Y2 I; ^# y% i: s: v- C& n& \. t: M
&gt; name.match(/l/g)1 X$ A2 S; k  \% m' f8 n  O
(2)&nbsp;['l', 'l']
- a: `1 G4 m( Y6 h  c" P( _// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
* A  D- W/ f4 y' F, C/ x, o7 u9 J' I: n$ O! I) p
全局匹配注意事项:7 H2 `# V6 r. h1 P* S
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
! p, o9 ]/ ~5 T) L&gt; reg2.test('Hasdfa')6 D# c8 P4 x. a
true
) m2 I9 a; O+ A/ i% |" M&gt;reg2.lastIndex;1 B! w$ E( o9 Q) E/ S
6
" L" h1 q' A3 w&gt; reg2.test('Hasdfa')
1 ?- G5 O3 v" f. _" {false7 K  ?: H/ ?6 f7 T
&gt; reg2.lastIndex;$ o: T& A- ]% L
0
: w  q! [2 W, R0 ?7 h&gt; reg2.test('Hasdfa')
  K3 Z( o8 @% L5 A0 z1 ]5 mtrue2 K6 n1 Z* O) o+ t
&gt; reg2.lastIndex;$ O. T, X* c0 F3 p$ x8 L$ }
6
5 L  K9 ~- p7 n7 V&gt; reg2.test('Hasdfa')
4 r# u6 T) h: r+ h5 U7 Dfalse
. q/ @* }: ]  |4 j; ^$ C! I( Y! x&gt; reg2.lastIndex;# g3 @# W5 f6 p# ]. d
0
/ J& X. C2 r* r' w" ]$ z// 全局匹配会有一个lastindex属性1 k. o' U  f. I! b
&gt; reg2.test()( d5 \6 }; r' g: |
false* e3 S# C5 c! v, Y! I* E+ U( E
&gt; reg2.test()
  |' A% w6 @( vtrue
- X* {( S/ L0 O, |6 z8 F1 V/ Q// 校验时不传参数默认传的是undefined% \8 ^6 \5 m8 m$ ~
</code></pre>9 P: a9 }% R7 v
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>8 H& H, T0 j% G- L6 ^( A: F
<p>就相当于是<code>python</code>中的字典</p>
; G$ f9 y- ?/ o$ {0 g3 D8 Q<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}0 g+ _% |- e3 J: e4 d/ t# J
&gt; person
% p; L/ _& E% |4 S  D: T{Name: 'Hans', Age: 18}% d  w  {# K: A4 e4 ^& D
&gt; person.Name$ F; v! G# V0 C* ]( g+ L/ J( C
'Hans'& P7 {3 n8 E# ^" Y* x  I
&gt; person["Name"]
. Z7 z5 Z. [' u3 e2 Q'Hans'
9 @' Q& u5 P3 ?' Y5 q3 ]2 p+ u8 {; w+ F9 p
// 也可以使用new Object创建
; j3 M* n, s$ k- w&gt; var person2 = new Object()  Y  i. p$ p+ }; G5 R, B- l. s
&gt; person2.name = "Hello"% x5 i9 |4 U* b
'Hello'
  Z% y, d+ t) h/ A9 z- A" P6 y&gt; person2.age = 20
) Y' c3 x$ z9 p$ ]+ F20% `4 O! ?3 ^/ P6 s) e6 {* d( G0 r& b
</code></pre>
: }' v. a3 T/ r5 y4 u. j& h<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
! w2 A- Q+ C( [. Y- O, j<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>- y; p+ q0 [$ ^; c- a: c& \7 L2 ~
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>8 X3 u" U# q# f) T7 e: S* g: B3 w+ h
<h3 id="31-window-对象">3.1 window 对象</h3>; R; @; r5 i6 G/ ^% Z) T. |7 ^, W* C
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
+ n& g2 s4 y3 D* m0 o) P<pre><code class="language-python">//览器窗口的内部高度
, n: R% U- b/ O3 Xwindow.innerHeight # |6 O& v( t& ?. N1 {! r+ i- n% T
706
/ l% Q( \6 s3 G/ U% j//浏览器窗口的内部宽度; v9 @4 F& O3 F' \2 A6 a) d% F  n
window.innerWidth1 l% Q' Y- \# i. O% c
15226 s. i4 W6 d/ C+ a8 l( V/ b
// 打开新窗口+ H4 H4 A: l( `- i4 _% W1 T" @
window.open('https://www.baidu.com')% i1 o% R6 g' p* ^6 H$ {; R
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 X; Y0 f* l2 `: I) D8 C/ T// 关闭当前窗口
0 ^4 `$ L# u- H: k# h1 i* n6 pwindow.close()
. S. C$ V: A% x0 @//  后退一页4 R1 Z, Q' E1 V" O: T) o8 |
window.history.back()) I$ T% i9 S3 t5 }& Q$ p
// 前进一页
/ c6 i8 B, O: M1 H; fwindow.history.forward() 2 V; G$ g1 P$ a2 c: W
//Web浏览器全称
/ I) @, ?. }, r! f, L; O9 Ewindow.navigator.appName1 q' t3 s, K7 |* g( Q
'Netscape'2 J/ m) B/ h0 |7 {6 Z& o
// Web浏览器厂商和版本的详细字符串- j6 p9 H6 J1 p+ {$ ^2 i0 x: L
window.navigator.appVersion$ \3 R5 G* W; _( ?: o4 p! Y1 `, j
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'# W  Y, P/ g& D& D
// 客户端绝大部分信息8 p. t4 |1 }6 Z) Z
window.navigator.userAgent. M, M4 G; Z% U! p4 w9 n
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36', \# I9 h, P& \( Y& M6 E0 J
// 浏览器运行所在的操作系统
- u" G$ J- j$ h3 K% ewindow.navigator.platform% ~7 w7 h' t9 r( A6 u
'Win32') l2 T; v- w% U  G. k
2 v# I) d1 q0 O
//  获取URL
# ~% M9 {5 W) s3 Kwindow.location.href3 T6 E( W& M" ]0 p6 J/ f2 t5 w
// 跳转到指定页面
, ^4 k& H' b. _* n- |: Uwindow.location.href='https://www.baidu.com'
+ P: n/ c' W1 o// 重新加载页面
) s4 T3 B5 U; u& ?" ^6 iwindow.location.reload()
$ D: z. r+ d2 C/ I</code></pre>
7 o) J- M2 _4 e: N- Q<h3 id="32-弹出框">3.2 弹出框</h3>! d; @( u; B( Z% z
<p>三种消息框:警告框、确认框、提示框。</p>9 G7 [1 c1 ^- D6 I
<h4 id="321-警告框">3.2.1 警告框</h4>" }) ?2 j- [8 D" Y, p0 h! c
<pre><code class="language-javascript">alert("Hello")
# y$ Y$ \7 `0 k3 T; q3 K</code></pre>
" ^2 l( N& r/ O<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p># S" E8 N! f8 W6 L) y
<h4 id="322-确认框">3.2.2 确认框</h4>
8 D4 m  ?5 [$ f# ^( z: E4 i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
4 A1 f: w8 U6 D+ V<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, ^. ]- l9 U+ l2 Ltrue0 \" V% D( }4 h# T
&gt; confirm("你确定吗?")  // 点取消返回false  x9 u2 }! ?7 ~' l! f; C5 g
false, M5 k$ H+ H$ e2 ?
</code></pre>
( V; Q# L* b9 M1 o, s; q$ r9 \<h4 id="323-提示框">3.2.3 提示框</h4>+ z5 v+ Y) O3 W* D4 t  e7 j. f
<p><code>prompt("请输入","提示")</code></p>
6 u% s+ d0 k4 n9 l' B8 n0 B* ]' z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
2 K& h' c8 h' a4 g% q<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
+ q; Y+ r/ h" h8 Z" Q- v0 L+ y( N<p>如果直接点<code>取消</code>后端收到<code>null</code></p># D) n( k9 W( b  ^: W2 a# P4 k
<h3 id="33-计时相关">3.3 计时相关</h3>
9 ]& H3 y! X& n<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
+ ]8 O* S1 C+ o2 c, t9 q<pre><code class="language-javascript">// 等于3秒钟弹窗
* S9 ?' Z7 K( _/ |, N. ?setTimeout(function(){alert("Hello")}, 3000)8 Z/ A4 }( K2 s

1 s% j9 e& W5 B& `$ {; ivar t = setTimeout(function(){alert("Hello")}, 3000)
% r" e. Z- _4 Q1 c. I2 h
4 A8 ~2 @+ c. f1 {& E// 取消setTimeout设置
" c; d! j/ j' o4 W2 V, i, h9 K  w* NclearTimeout(t)
: x$ }% f& ~: S</code></pre>5 F: i5 x' y9 y2 I: H0 K7 q" t
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>+ N! U8 |" H0 `+ N
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
7 N# {3 R8 p- j; c<pre><code class="language-javascript">每三秒弹出 "hello" :4 y7 z5 W4 V# H4 e
setInterval(function(){alert("Hello")},3000);$ _% X/ T# e: P! s5 t6 |) h
</code></pre>" z3 t, V2 W5 Q# u: ?
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 h' U( b( E2 b& O4 G<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
5 I. e7 m# `9 H5 c& U" L//取消:3 R( r( F; k+ T
clearInterval(t)6 d% m: L7 `1 u, J% h1 R/ u1 E
</code></pre>( B2 G6 u' U. B& \: ?9 q0 ^
% }3 o% A7 R) H: M$ d4 V
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-7 13:42 , Processed in 0.071656 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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