飞雪团队

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

前端之JavaScript

[复制链接]

8049

主题

8137

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( c2 d1 {" a- D<h1 id="前端之javascript">前端之JavaScript</h1>
0 o6 B. e0 Y! p% L8 I<p></p><p></p>
+ P1 N9 g5 A5 m" i8 Q! v& j5 @% B5 a<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>9 z3 y1 O4 @0 O" a5 \! {" x0 I
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>7 ?3 I7 o* f1 M+ s( M
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
  I* W8 p1 N- g4 D& w+ t  S它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>6 z1 f5 o( d/ E3 y
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
8 n2 W8 \; M1 _0 R7 m<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
& ]* V7 e: q# Y( C4 l<h3 id="21-注释">2.1 注释</h3>' E0 v# {. b" V4 O8 I& W7 C' ^- N
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>& J  w( L" J# x& Z+ B0 `
<pre><code class="language-javascript">// 这是单行注释
/ V( M" H: _& _6 E; [- q  Q2 n; n4 _7 \! a$ x% e* d' w
/*
, o0 x9 n& L- _3 ]9 ~# V这是多行注释的第一行,1 `( r! C/ L" ]9 F& V% K; ^
这是第二行。3 g0 _' P% S' p, k+ y: a$ l; i
*/
1 g) s- M! Q0 y$ u6 v  T5 X7 r( P</code></pre>
3 [# B" y; q& u2 n6 @4 m9 [<h3 id="22-变量和常量">2.2 变量和常量</h3>
& o  y: `. v2 g<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
- P0 J# g0 T  }# X9 I. I1 {<ul>& Z1 C) a+ T" X0 u' W
<li>变量必须以字母开头</li>6 o' Q: N7 F$ E. ~# G- S; x0 `
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>0 o9 g; i% m5 M8 T% @
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
! E, D9 m/ G0 n</ul>3 O  m3 h. I* O% ]& f( Q* s  C
<p><code>var</code>定义的都为全局变量</p>5 x! y" }2 `( ?9 J3 o0 L) n+ q5 N
<p><code>let</code>可以声明局部变量</p>
9 j; }7 p+ M2 D. F( F<p><strong>声明变量:</strong></p>
1 s# h- z6 w9 W/ }: r5 O* [<pre><code class="language-javascript">// 定义单个变量2 _8 w. ]2 i9 ^' {
&gt; var name
4 ~0 g# J* L- U1 @" }" b5 T" E&gt; name = 'Hans'
( b2 D) y+ D9 P* [7 i7 E//定义并赋值( T: g1 S; {7 @+ J
&gt; var name = 'Hans'1 i8 [, E9 v% k: N6 C/ i6 r' T/ I3 A
&gt; name
& s& C9 K- u# `  G" g'Hans') v( P5 n5 `) I/ q% S

* [  ]. t( Y) m$ Z: y# d9 |+ ]// 定义多个变量
* @* f  C  O" c&gt; var name = "Hans", age = 18
4 {4 h  ]. P  m5 h3 ?/ v&gt; name
* h' @+ L' x# N) ~# X% P# `'Hans'* @0 a9 A% N9 z( q4 Q  B% ?% @  {
&gt; age
% Y) L- O% ~6 }5 d18
! f( I; ]: M9 l* m/ o" D# R0 j9 v, {8 f) ?9 H: `
//多行使用反引号`` 类型python中的三引号6 o7 ~& _5 o! s7 ^4 Q
&gt; var text = `A young idler,+ s& U+ F8 |( e& a0 T
an old beggar`
0 S( `( S% v2 Z) a/ _; ]&gt; text
# l7 e1 W# H- ~'A young idler,\nan old beggar'2 O2 J3 X9 a3 s( i1 }
</code></pre>! @6 r& b; N* I/ z3 c# K
<p><strong>声明常量:</strong></p>
6 B1 x1 Z# _) U<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
4 n* F  M2 a; k! Q4 X  V4 X<pre><code class="language-javascript">&gt; const pi = 3.14" u8 j* G5 Q3 ^$ U7 N
&gt; pi
9 ]0 B( X, u5 ]# Q! {( j3.14
/ b+ K2 ~/ L+ |( r7 k&gt;  pi = 3.01
2 s5 Y/ c5 S0 K, U0 [5 o  I" m/ }/ iUncaught TypeError: Assignment to constant variable.# E4 P3 T8 j4 Q8 ]( p
    at &lt;anonymous&gt;:1:4
+ W; @1 \$ O" `: W$ {
( b# n( ^! h- P' f4 I& N</code></pre>/ ~" x3 `. M" d$ k4 q6 X
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>  k* t  q/ V+ ~% D3 c
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>+ X( @% d9 b7 K+ V  L  H: |* e
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>" o( }- `5 R! x9 S4 S* v5 C* I9 ?$ G
<h4 id="231-number类型">2.3.1 Number类型</h4>! \( H) C; X0 y( w6 N
<pre><code class="language-javascript">&gt; var a = 56 I+ p2 X4 i; g% B8 n
&gt; typeof a   //查看变量的类型  
/ l# h, X8 e$ T. Mnumber
+ \, N  L% [$ ?- c' r" K' p' A1 q, M- B* ^& c0 d& F
&gt; var b = 1.32 \3 i4 t2 u: Y( X
&gt; typeof b' [- Q. U9 w: M; d* G4 w! J
number- K: r5 T( m) g) G8 f3 O# H

8 e1 L4 ^2 R5 t7 j// 不管整型还是浮点型打开出来的结果都是number类型  y* Q) Z4 f, D

) V& j7 p5 G+ p# N! H+ g/*  I0 W# G& Z% V  R0 [
NaN:Not A Number: i5 w- H% b3 m' A% z/ A& T; b7 k
NaN属于数值类型 表示的意思是 不是一个数字
$ o7 w4 R7 D1 w5 B*/
0 q. M: g9 N/ L: y6 B0 }1 W0 K2 k0 B7 k5 l' p
parseInt('2345')  // 转整型) t! u% B% q% e0 {1 k& c9 H
2345
6 _3 }) _* x% K% kparseInt('2345.5')
' r  w: G' a+ o0 J9 K  m23456 N% R2 t  e; f/ M$ j
parseFloat('2345.5') // 转浮点型! g: C: j: q& m, O# q6 d- X( J0 }
2345.54 C( d/ h* e0 v4 j1 n
parseFloat('ABC')
( k* F8 V5 W+ [2 u4 z$ z8 lNaN1 `( f0 o, p: o1 G9 {
parseInt('abc')
- y1 k9 W9 q( v9 F' m, PNaN
2 N3 o) v3 u' ]& n" b</code></pre>% w! o" h9 U/ a9 R/ ^# y
<h4 id="232-string类型">2.3.2 String类型</h4>
" X0 @7 K, n) c+ z0 r5 }' D: T<pre><code class="language-javascript">&gt; var name = 'Hans'3 i5 |' @; y5 E6 u) U
&gt; typeof name
- W: x* K1 y: Y$ t'string'2 s! A& h2 R) ]& O
2 Z! s( N4 |5 |3 N5 N  s/ `
//常用方法
* |" Q; J3 ]- p6 \// 变量值长度
$ _: K' W/ C+ @: l, Z# M&gt; name.length/ E, K7 n  d+ f# z. q6 N1 V
4) Y. k: h6 B; w) y: @
// trim() 移除空白* Q' O1 v8 i7 ~( F  b
&gt; var a = '    ABC    '1 l2 h1 E3 r- ~3 a* ]# Q7 _: {
&gt; a
" o: f: o" w+ l. }'    ABC    '% E$ r' |, Q1 M; U
&gt; a.trim()
2 }- Z* {1 o( T2 K9 x; ['ABC'! u7 L4 P4 m9 y+ D
//移除左边的空白# U7 L/ B  V4 p0 u& i( D
&gt; a.trimLeft()
2 U- z9 G4 p4 Z+ y/ D/ z'ABC    '
; x& T/ C8 C1 ?6 t- x. r$ x9 S: V//移除右边的空白( |) L7 s6 J1 O8 _! o" R0 a
&gt; a.trimRight()& I5 Q+ T, N* d7 F: M5 b
'    ABC'3 g/ P$ \6 H) n3 [
9 K( e: v/ ~% Z; p. w  ^
//返回第n个字符,从0开始
- k$ a4 {$ s; ]  S; o  W&gt; name# \1 @. i4 t$ b
'Hans'
1 A" O' |! g+ r& ~1 P/ u- ?( `&gt; name.charAt(3)
3 R, H8 I- A7 ~& a; m4 F" I9 `'s'
" O1 R' w, J, w! e&gt; name.charAt()9 k5 Y  d& s6 T0 _2 q
'H'6 `7 U8 [" h/ ]7 a- l4 W- o2 f
&gt; name.charAt(1)/ d; q/ Y1 B, M( C1 e" A8 X" T
'a'
' \# t- u4 l/ y$ D; u  z+ }$ p% ]4 a& P' t( q/ h; H" T7 v
// 在javascript中推荐使用加号(+)拼接! Q2 U* \  D- d( c( o& k
&gt; name$ X3 `9 J6 ]- m) X6 L, h. j' m
'Hans'$ G" w/ e% _1 A$ H
&gt; a
2 b+ l& G: w! {+ I  ['    ABC    '0 E) D3 g! Z3 k- }+ A
&gt; name + a/ y2 y5 j/ K+ x9 k% k
'Hans    ABC    '
: y1 x5 q' C1 o1 f2 B8 D5 G// 使用concat拼接* `1 b' ~4 T. n8 ]' q
&gt; name.concat(a): L& Q0 V& k* P' n, T; _: ]
'Hans    ABC    '
" _0 s1 ?- h7 I' x0 Q9 M, g" t. S) `/ D  O! p
//indexOf(substring, start)子序列位置
* `$ {' U0 }- k! r8 n) Z7 ^" U5 ?1 F9 f4 M9 H% U, i
&gt; text- s7 G) ]3 k) l3 b1 v
'A young idler,\nan old beggar'
: c/ z- E1 n  q1 p&gt; text.indexOf('young',0)! ^4 {) _0 V3 o! C
2& `2 R# m( G0 v( A* Z
8 m4 a( G6 u2 x& F: P' t$ M  g
//.substring(from, to)        根据索引获取子序列5 _5 s, b4 p2 o+ |1 _/ y
&gt; text.substring(0,)( u" r2 V; _; q. P: U
'A young idler,\nan old beggar'
( Y. f' x# K% H) H, y&gt; text.substring(0,10)6 ^( @; h7 ^; x  V7 U
'A young id'' S% R, K/ k( H0 m6 E" H) w

4 g; E( L4 o: ]+ p1 T( K// .slice(start, end)        切片, 从0开始顾头不顾尾
: B1 r: p. q2 |* A. [&gt; name.slice(0,3); y4 z# q$ H" E2 n' y
'Han'1 T0 q- P, O# A$ e
" J& D" u+ T! M8 V, d, H
// 转小写% w" V3 r2 E( _
&gt; name" F5 J$ I1 F! ]8 `0 Z# C" E2 O
'Hans'* S5 _' X$ M- Q+ E! J( i2 x
&gt; name.toLowerCase()9 o& N# p2 z4 O/ y7 k, A0 W
'hans') p  D5 Y0 w  p
// 转大写$ t1 e7 |2 O1 k9 ^$ h
&gt; name.toUpperCase()
" r. u# J6 y8 `. W, N5 v'HANS'
) _, _; Y) n% J$ q" |
2 g7 K3 v8 E/ n; U" H% j5 j// 分隔
3 y( y# R' I- Q$ R3 @" @&gt; name* g+ D* k! [8 \& C% @; i
'Hans'' q1 o. f9 M; m. a4 A: X' {
&gt; name.split('a')
( Z& {& o4 S) O(2)&nbsp;['H', 'ns']
4 Y1 M6 A8 b0 o5 W/ }( J</code></pre>5 h7 q, O; w* \1 X) R
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>& w* E6 n+ P9 o4 g4 q
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
, [' {7 D9 E2 E& f7 w<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>8 w2 @+ I( l& P0 U
<p><strong>null和undefined</strong></p>
, I, q. X+ D4 V$ Z7 i1 m2 n. S<ul>/ h. _9 |. V  e3 Y4 d
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
! W9 E" z+ I! w. e  ]<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>2 d1 B1 W& [" U( G% `% ?7 [" u2 `
</ul>6 e! K, e/ e) E) ]* U, e
<h4 id="234-array数组">2.3.4 Array数组</h4>
: A) w# j3 b6 q  L. b<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>2 X1 \" F/ g; @& @
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
' N) Q1 {( t5 L" w/ _; K&gt; array12 ~+ g- U) I! N* m5 ~0 |( y0 T& Z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 p. H4 O$ N3 G0 e( E+ w. ^
&gt; console.log(array1[2])  //console.log打印类似python中的print, G* a: y7 h1 A& X4 x
3; v, m1 `! V1 l4 v) \6 H( ?2 q
// length元素个数! O1 o4 p" @3 @
&gt; array1.length/ u. e4 t$ o. b: P
6
5 }9 r: x  q5 ]9 w% G/ c// 在尾部增加元素,类型append
' n1 u7 e6 ?# I' y2 S. \& D&gt; array1.push('D')
3 K7 A3 P- z/ v. X9 N3 i7, l4 R) m3 o& s# A, C8 g
&gt; array1
% r( M; Z) ?0 V' z5 Z: g% P(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']+ `! M" d! ?: N7 I8 _" I
// 在头部增加元素% I% F% W! F) K' b3 g
&gt; array1.unshift(0): d; ?2 B9 u# M& |4 s
8
, e; x5 _$ Y1 L- `" m' _&gt; array1
" p" @3 ~$ d; _% Q(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
8 [8 s2 W* P2 [1 T- F/ I& B+ C, P, K, x
//取最后一个元素
! h! {* `4 f3 x5 ]2 X3 I  [&gt; array1.pop()" |! b  s$ q3 b+ s" B& f
'D'
: N- l( L4 e$ P; V! C" K&gt; array1
2 o) c5 O; ~/ U9 q(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
( D9 e! {" p* q0 [//取头部元素6 p+ j" r. n" I* o$ ~1 B9 X
&gt; array1.shift()3 y) H4 z9 I) n% R1 }' u3 K1 I
0
2 a( u" Q% D. K) }+ p&gt; array1# ~0 t) Z5 j3 }% F, m
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ g7 R: _" F$ U6 C

# _- o) M: C( U* _3 N; |( C//切片, 从0开始顾头不顾尾
2 W. h1 Q6 G5 n0 y&gt; array1.slice(3,6)* B- A; ~3 n3 A! d
(3)&nbsp;['a', 'b', 'c']
+ r( G' ^  L5 |+ K' x( _, Z: C. o// 反转2 B: F& E6 L+ r& C
&gt; array1.reverse()
. r+ y' c' F3 r/ ?(6)&nbsp;['c', 'b', 'a', 3, 2, 1]0 r7 Y% v) L) @
// 将数组元素连接成字符串4 S, o& Y/ l2 T4 Y) B
&gt; array1.join() // 什么不都写默认使用逗号分隔
1 {9 k; E' l( [. p2 X'c,b,a,3,2,1': `; Q3 i9 t& m. {' U
&gt; array1.join('')
9 l* ]2 s" ?6 i4 W/ A/ y5 t! }+ [! m'cba321'$ J  e9 I8 _& C6 c
&gt; array1.join('|')
8 q2 Q) @1 r8 A- w'c|b|a|3|2|1'% W2 \, c) z6 Q, Y) ?- ~- _: w; k
4 C+ t( @  f" w6 c
// 连接数组. e5 a/ p) F4 C! ^) o1 F
&gt; var array2 = ['A','B','C']
( Z; o- K6 J! g4 U&gt; array1.concat(array2)
1 {/ P# f& o# k1 F7 J(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']' E, V+ r- f4 G8 w& W0 }& s
3 C, B+ P! ^# e) O. p
// 排序8 v4 K$ w& [; b
&gt; array1.sort()3 W+ a% {0 Y, X: y# M; j& \
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 {/ l# ~4 O! |! o9 q( U/ z1 h0 g. c8 k( x8 x; A# a" J
// 删除元素,并可以向数据组中添加新元素(可选)  ]$ s' L! l2 j1 C
&gt; array1.splice(3,3)  // 删除元素/ R# q- Z  g7 V5 O( \% m( n
(3)&nbsp;['a', 'b', 'c']4 K6 b3 q2 A! }
&gt; array1
+ r+ z" n; e7 O3 g1 ]: L" u+ y( ~(3)&nbsp;[1, 2, 3]4 e. i  T/ _$ O' ^4 o. Y# R! x
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
* F- Q9 b+ _6 m; w[]; ]" D5 g, U( t8 B/ d" S
&gt; array18 }1 x) O* \: A6 ~9 e, m" ~7 C
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
. a& p5 _# V; j2 t
# k, j$ _2 V' }* ~/*
0 p. [( Y* o% L1 @7 h: R3 \' Rsplice(index,howmany,item1,.....,itemX)+ N  u: {5 I' c8 B; ^: ~2 R& n
index:必需,必须是数字。规定从何处添加/删除元素。
0 Y8 R* h2 _0 X/ Hhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 h4 c0 H6 s7 t) d- K; Nitem1, ..., itemX        可选。要添加到数组的新元素
9 P# o& _1 k8 Q, \( @. n4 L0 z+ S2 U*/
8 X. B  ~) F4 x  I, L( H7 i$ Q. K
// forEach()        将数组的每个元素传递给回调函数
% K" E3 W- w- h. m1 m&gt; array1.forEach(function test(n){console.log(n)})+ D% A6 E- K* q  c! ]
15 B( O/ I5 |2 c  N' ?  K1 \
2
9 l/ q' p: l7 @3 ], E- O 3
1 z3 z! |! f  Z A) w' |5 g2 A! M% K% i3 |
B
; H4 Q3 k0 T( v0 k C/ v: Q# O$ h0 A0 N* M% R' O+ l
// 返回一个数组元素调用函数处理后的值的新数组3 G- i& ~# P4 M- k
&gt; array1.map(function(value){return value +1})+ ^/ V* g) B3 w3 n- E1 p4 \" X0 ?
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']6 W! d6 F. D4 M& v$ U2 ]/ ^+ r* a, k
</code></pre>1 {. B, S1 E1 Y  Z; [: j3 W
<h3 id="24-运算符">2.4 运算符</h3>1 [' Z5 f, G5 L1 U& K% ^
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
3 r2 k; p: l! k$ Q<p><code>+ - * / % ++ --</code></p>4 c  `1 I; f7 s. c2 A9 O& x0 [
<pre><code class="language-javascript">&gt; var a = 6% Y8 J; }% F* T. M1 k6 ?8 ?
&gt; var b = 3
3 S' ~2 V8 ^- o' H" _) F3 v// 加
7 ^2 Y6 [% ]' X! }* F3 X&gt; a + b
& u: J3 Q) C* Z4 P9$ s! A+ t1 r& a8 g* L1 F
// 减6 V3 z/ ]- t3 I/ U4 l) g: Z! W
&gt; a - b5 S) z0 i6 a0 T; U4 |
30 \" ]) f* g5 `
// 乘# n7 R( Y0 P) F( C% F
&gt; a * b0 d" Y/ p2 L1 K' U1 `% Q
18
( \- r% L3 ~: @2 ^2 W1 z* e7 w// 除6 O- R! Q6 I) O& r2 ]
&gt; a / b
) u( `9 v) g, d! @2% G. M( [, X; m* [  ]
// 取模(取余)
9 {( T9 ^* J9 w/ V- j&gt; a % b5 i! B! k5 Q+ d0 s
0
; [7 M( [/ d, t4 p6 r: h// 自增1(先赋值再增1)
. A6 u& z. Q0 j& ?0 X- L&gt; a++$ V# }8 |" z9 a. b8 n
6$ x% T' y! Q  M' ?7 h: q0 R, \
&gt; a
: S  J1 h. k1 t% @3 t0 G7
* c7 I% c3 V( b9 n3 y8 n& _! }// 自减1(先赋值再减1)
% b' [9 e* g6 D% u; P8 D&gt; a--1 d; d  L7 r1 s: |7 e: C5 u
7& S$ j# y  X+ P' g
&gt; a1 D. R3 ~9 C, B! Y/ H) T
6. O/ P9 S, e. g4 S- L4 }* B& Z: s
// 自增1(先增1再赋值)
0 `' p" S& u4 w( S&gt; ++a
: H/ Y/ c: |- O: {" I2 U72 z) S$ `/ Z+ G+ D) W: i) i
// 自减1(先减1再赋值)2 u' t( T1 j+ Z9 ?9 p
&gt; --a# g. Q) [$ G0 q: b* q
6/ ?6 g9 U% y2 F
&gt; a
2 z! i4 |7 k' S# C" q) A6# T: j5 J- ?8 [

7 U2 a3 D! \5 }9 X6 o$ ^7 o//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理* _/ Y' F3 n/ j, l6 y+ z
</code></pre>. Y6 ~2 e/ y+ u" B7 y6 e0 q/ U
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
: d  {# E+ [: I& z<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
; G! K& D3 Z, J<pre><code class="language-javascript">// 大于
8 a8 N6 `3 j5 ^+ h3 _3 k  A7 D&gt; a &gt; b* {5 T- L9 b8 b' W% O
true
9 N8 u  K) v8 p; B/ Z// 大于等于+ i$ Q6 m; S9 |' n. [
&gt; a &gt;= b/ g* \* z9 C4 |" e( H1 Y2 B
true) s/ r( X: F. o
// 小于5 m4 W, Q8 c  {: Y
&gt; a &lt; b+ R) ~8 r: S5 R/ N* e
false" J5 O' w  y; M$ f; v5 P1 o8 \+ o
// 小于等于9 R$ }& `1 v# H9 t8 s# K
&gt; a &lt;= b
# @; f4 D- v$ ?' z$ _. Q, Yfalse
4 g  d3 ]5 V3 W4 f7 S, O// 弱不等于! i' L: ~( N; k9 T: O4 l* J" L
&gt; a != b' R/ a0 c3 U. z+ }0 L
true4 S' i: f3 ?- P+ R- g0 I
// 弱等于
$ [0 Y) t9 [) j' x+ }: k& D&gt; 1 == '1'
+ ]' T: g  `) t3 j0 N3 Ctrue5 u4 B( D* k$ _' m1 w5 n2 \
// 强等于
6 c! y7 s' v- ^- t. r&gt; 1 === '1'6 w6 ?2 Q; g/ h! C  A2 p) S1 v) X
false
% T, a! ^- p" E// 强不等于1 y0 o/ ], e6 ~" z  h
&gt; 1 !== '1'4 D! B, A/ [+ P7 W+ Q1 p# A
true
/ [* f! l( y7 {& T% l2 l) q* p6 B
  q8 |% r2 e) @+ n; z, |/*# ?( r/ D9 u' s2 Q5 J( _: ^; E
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误/ O# Y3 ~# o$ Y2 |
*/
3 V. V- v( y3 b2 M</code></pre>
4 K' r4 C( x7 q- R3 N<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
& ~) g5 y+ O" m; R' @+ O! Z) a' B<p><code>&amp;&amp; || !</code></p>7 I7 N0 G% g+ \* x
<pre><code class="language-javascript">&amp;&amp; 与% u# y# u9 f, J( j7 r$ ]
|| or
: s2 @- `3 r/ K5 }+ V! 非1 y( \. M- R3 H1 P
</code></pre>' X0 M1 k- Q" n% t  T
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>% w& M/ O* q- N" s% u
<p><code>= += -= *= /=</code></p>2 d& |& ^8 G2 T
<pre><code class="language-javascript">// 赋值* H6 O; r0 j+ m- u. s/ s, M9 b; S- r
&gt; var x = 3/ b# z2 \& s  N
// 加等于
0 z/ ?; Y' w& E9 T* k+ U* ?2 N2 a&gt; x += 2
7 W  u" c# H1 k, s, A7 }, n53 q- @* K# e6 h
// 减等于
/ H1 w' ?3 M: a) N6 z: b; y0 C&gt; x -= 1
8 u0 h* Y8 a% E) p" ~$ l46 ]: d- [0 K" E3 T6 c7 M0 g% k
// 乘等于
: ?; V* a* J" G9 |$ }) a6 E; U* \&gt; x *= 2
4 _& P/ y, O$ `7 K% I  ]$ _8$ g5 C$ V" h' \0 a
// 除等于
* K) G' Z; S1 ~0 r&gt; x /= 2
+ r5 }' k4 g7 d) ^6 g9 @) S# B) Y' ?4
& t; \/ P/ Y* ?; C$ W</code></pre>( _, c2 M& i/ J& `2 t! N3 W
<h3 id="25-流程控制">2.5 流程控制</h3>4 L+ v0 W' f% _6 _" f  a
<h4 id="251-if">2.5.1 if</h4>/ J( a/ L$ k& [3 M' A9 o
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
2 r) {1 u8 y# s6 t  j- I. e1 ~. s. |* H& L. L! f* N
&gt; var x = 3$ m0 H% s; @4 O7 |( \6 [
&gt; if (x &gt; 2){console.log("OK")}. h0 Y# e/ L% i% a
OK7 P2 d  v: m2 n

: c' t4 w  `* _- N2, if(条件){条件成立执行代码} * z! n( w0 L: r" @$ }0 Y- P% D+ g; a
        else{条件不成立执行代码}0 M( j& S$ O  Y" p& K
0 r6 o2 n; C! ?! f# j! N# i& D# T6 S
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
- |5 x9 N3 B' Q: p0 a$ |2 S* Y( g: ]'NO'
3 @) b6 {  C; h$ S3 s: h$ Y- b0 d/ m$ d' |8 h
3, if(条件1){条件1成立执行代码}
: [6 ^: w6 B8 b) C: M6 j) O        else if(条件2){条件2成立执行代码}
! O1 a: }* [$ o& X4 X: F    else{上面条件都不成立执行代码}: ^1 H& x+ }' m7 i7 K

6 O9 O8 i4 R" d6 ^1 Z&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
. k' u$ `, x1 ]& N" e4 d/ g% a Ha) d6 C  q" y$ g% p
</code></pre>9 y( z9 N% `- |# [" \& k4 z
<h4 id="252-switch">2.5.2 switch</h4>
- V0 y& e$ Y; |" n7 F: y<pre><code class="language-javascript">var day = new Date().getDay();2 H4 ^. A0 A, C
switch (day) {$ J8 j, X- e4 l5 o( F
  case 0:3 p1 o0 n0 p! W3 w2 e
  console.log("Sunday");
( @) N% I! t; A$ }5 a' x) }2 ^  break;
: P+ Q$ J5 @5 @" j% s  s2 a" p  case 1:: T+ d7 }' w  C/ |" n( Z
  console.log("Monday");
: Q$ z( [% D* E/ N, _) x  break;
' e. ~2 ]/ E+ S8 T- J8 i: m% kdefault:
  k3 O# |6 u) N; p$ r+ A  console.log("不在范围")' C% Q: D! a/ y; O
}
2 D: W  |5 K0 I$ j/ ~ 不在范围3 ^7 D, e$ p6 I# l* ]
</code></pre># \5 k3 i% d2 B. A( a9 f. x- X3 L
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
8 K# d; @! N8 i( C( Z# }9 z. i<h4 id="253-for">2.5.3 for</h4>
$ H+ a. i/ n0 s# G) S6 x/ ^<pre><code class="language-python">// for 循环
! A; ~. n/ I8 c3 l- L! c        for(起始值;循环条件;每次循环后执行的操作){' M& z$ \+ h( o* x: d
        for循环体代码
' d8 }  w9 c$ L" b    }
2 g4 t0 \6 ^: G, p, l% N1 c
. t/ L) L5 U  d$ j$ |for (var i = 0; i&lt;10; i++){
( ~$ V* j+ ]3 @! T) X; s    console.log(i)1 o% r; o/ p1 r7 f# ]* ~
}
( _+ P8 k1 @" r5 }/ c) a        0
& T# j# m/ r" C3 R% u+ @1 x        1' l8 ]: p/ U2 {' }+ _7 K( `
        2& s3 m5 x! q6 R: A# G! O
        3
. g! C4 @$ \2 H" r; p+ c        4( o4 K3 s* l) b! S! b
        5
4 V$ k5 D3 J( |7 U6 D3 Y8 g        6+ e$ g& B& P- l/ |# u( M, q4 r- T
        72 \" f  r0 b+ Q+ `8 X
        8
/ e8 n  D% [! z. e) J        97 G( i: u; E6 L3 K
</code></pre>, u' }, t- n% s8 K
<h4 id="254-while">2.5.4 while</h4>
8 P( @+ ~& |0 {/ f' \2 \0 U9 L3 z<pre><code class="language-javascript">// while 循环+ o# {  s1 B' T- Q% p6 K
        while(循环条件){! V) f6 m: s$ w8 @- l0 @
        循环体代码) R* l0 q' J. ?# A' [+ v& `, G
    }0 b' O1 M  T# B: s( ~8 w

8 B3 |0 x* E/ G! [&gt; var i = 0
9 i' ~, a' Z2 i8 _) W8 P&gt; while(i&lt;10){( V9 y, N) L1 v
    console.log(i)+ F0 m# \. A; s9 J2 @& @5 B
    i++
! z& g9 g0 ?0 l7 J0 `1 z  `}
5 e' C# X3 u  s8 p, w9 u 0/ }- b1 ^2 o/ W0 I3 V) b
1
0 k2 @4 Z, ]( a* H1 }, t 27 A7 L0 j, d" y# b/ V
38 d) n  s5 S' g5 K6 G# j. R; J+ U, b, C
42 i0 l: O' K8 ?- f
5$ \! ]8 y5 s2 d! y! S
6
6 n, m4 T) n9 |0 g 7: [4 T5 Z1 J# }# E  j0 X
8. e4 \# q: Q/ h$ b
9' Y  b* }" E6 R$ @5 T/ a- D
</code></pre>
5 h" ~. M* V7 V3 R7 Q; c% r5 O<h4 id="255-break和continue">2.5.5 break和continue</h4>
9 g+ \* z7 F1 V0 L5 o<pre><code class="language-javascript">// break
- U: W& {2 m4 y& C* q. cfor (var i = 0; i&lt;10; i++){
3 a% x( P/ h- q' p' A    if (i == 5){break}1 C- C! ?  b( c7 {, Q
    console.log(i)
. Z9 h' p% C! M+ N5 i! X% K}, B# m2 M  F3 g% R8 f
0! X4 M) z1 i+ f" I, v
1
) Z7 I  U2 ^* _ 2
) r+ C. g; t- ^2 a6 e1 } 35 l$ L3 g' b4 I# y- |
4
4 ]- e1 t  r% C* q& Q$ c$ D// continue
2 L6 I( I: b8 M- K* Hfor (var i = 0; i&lt;10; i++){
0 o! _' q" y# `0 J    if (i == 5){continue}
) t( t0 K) S0 s/ H# A$ L    console.log(i). U3 r# j. k: I* h3 T
}3 D, S! D4 ^1 J6 @
0& ~6 D, F7 g, K5 ~4 o
1
" A, ]3 {* p- d1 h1 {  |  } 2
5 D7 I* k4 y, f( Q; p! F. e3 U: g 3( \9 |4 m9 @, @) u+ h
4
* p. C5 h9 E) e* G7 l4 c1 {) h4 | 6
3 n1 K. `/ a% l. b 7
- U) W& _' m4 x3 U* Q 80 p" A. \" B# K( P8 f9 c- H! a: |2 o
9- j3 f2 {( |( W$ Q

3 J% X; O1 j6 c4 K& V. I</code></pre>1 B) g, t) T* t7 N
<h3 id="26-三元运算">2.6 三元运算</h3>& C. @4 i  P' c
<pre><code class="language-javascript">&gt; a
; p8 |% \8 T: d+ V5 \9 f& i: a6
# b" W, t/ }1 A- w% W0 E4 ~&gt; b
$ |* o& m# a) j# j+ i# s9 [- |( t3
8 T- I4 {1 _3 r+ A8 @
7 V# `* C8 `" l! o! @8 B5 U0 N2 x6 R//条件成立c为a的值,不成立c为b的值
" s* S* x) K. E2 r. d7 `7 l7 [&gt; var c = a &gt; b ? a : b
4 j9 _2 ~# n/ ]2 \. K/ W. L&gt; c$ _! o: E6 \) J# g: Q' Z
6
) t1 J* i$ s$ m* s- d6 n' I4 e8 q! k; w
// 三元运算可以嵌套; R5 q$ D  M3 M6 U
</code></pre>
7 `2 G: y) U2 p8 c" N/ a<h3 id="27-函数">2.7 函数</h3>0 ~# E$ p: u) ~+ o+ n* Z# m
<pre><code class="language-javascript">1. 普通函数. k9 M, Q9 t! f$ ^
&gt; function foo1(){
- s5 o% w- W( \* f% q    console.log("Hi")
# u% M9 w. U6 b7 l/ C& a9 s}
( G  H2 s, l5 A& O$ @' |- ^( E! K0 ~' h
&gt; foo1()
+ j* z- X1 Y4 C$ T        Hi
, I: F0 P, k+ N# ?% }2 w8 c: u2. 带参数函数( y4 G! y8 [$ g# ?$ b$ x. y, t& u
&gt; function foo1(name){
; e' x! |8 o  c! x0 xconsole.log("Hi",name)1 k3 m$ U5 g, Z; l$ ^
}
8 b; i- }/ c1 G+ ~6 q
9 X  c  z* H+ ?6 r; i& `$ k, l# Q&gt; foo1("Hans")% g' z1 |3 d: J" y' ^, a/ O3 A
Hi Hans) [: M- G/ e3 U
5 Z' o- m4 B( s" A1 v0 f2 O7 n
&gt; var name = "Hello"# ?2 ^: D" w' R/ P! y: t) l
&gt; foo1(name)
, y6 O) g8 r' i- D0 DHi Hello2 |* ^( Q! v$ @6 k2 d, A) ]
% k% M' G# X3 d3 O  o
3. 带返回值函数9 O2 ?& J0 y8 J+ C; {; V4 x! E
&gt; function foo1(a,b){
+ H9 @! M! Z" W4 X. N3 C        return a + b   0 a& r6 a" x* _! N. _- t6 m) r
}
5 `2 N! S! [3 J* P9 q; P&gt; foo1(1,2)% O7 [" L  f! O" `
3
& h2 l" q6 E* c) H/ P" b' e: o&gt; var a = foo1(10,20)  //接受函数返回值  \1 a* v* D1 m
&gt; a
& |, s6 k+ g% l30
! V. P8 x! y  ~& \+ d
8 w% ^% M% Z) j8 g2 V4. 匿名函数
; t# B& X4 V" y1 M. [* v&gt; var sum = function(a, b){" R5 O% t9 c' A. I: G0 f
  return a + b;. n, _2 G4 `9 o! T1 t
}# b4 e( F$ X" B7 |- H4 V$ \
&gt; sum(1,2)
) B& x" z. y+ }2 `" b1 k; ^6 E3
  J3 K0 {3 \) j. u9 o  C- U% @- r# K- L/ M' |# E
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱' x$ ]: [, f/ e  s1 I! Q9 f; i- m
&gt; (function(a, b){
" D. W5 K& l9 O" Q  n  return a + b3 e7 k. `/ m% a, s
})(10, 20)
$ K8 R" e1 k  `# @( H6 l30: a5 ~3 o1 ^# f2 t; a3 S- L

: u# L( m# V4 ~, z" U  y: U; [3 t! \5. 闭包函数' O. q' Q  z- W3 T4 }' I
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数3 g- c2 X% {+ r4 y4 D( b, I' r
var city = "BJ"
! {- z2 \9 N  ~; _6 p5 P. ~function f(){
  W. e; m1 ]; ^    var city = "SH") Q9 p$ l  ~7 D+ C& o6 f; G
    function inner(){, A3 w+ d7 A3 y
        console.log(city)! g" x; G6 v# O1 j2 M
    }
( y! |; ?& O# q+ \. k# ?7 Y9 W0 i7 N2 t6 D    return inner
! E& z6 p* J/ m" z! t* x}" o) k4 p) [8 ]
var ret = f(); |2 a7 z' d& Q
ret()4 Q- a1 X/ O  `; |( S
执行结果:: q4 e9 H- Z# n9 f2 E
SH
% I5 C) o# }0 Y- \
1 t" W/ ~% j4 S# h$ M8 I7 n</code></pre>9 K' Y$ O, {  x5 x3 |1 ]
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>1 W" R" S% l$ t/ \2 I. m1 Q% ^) G* `2 D
<pre><code class="language-javascript">var f = v =&gt; v;
: t& q7 A' B* D7 ~# v' d5 l/ y! y// 等同于
9 t0 T' e1 l$ t  o/ H& Lvar f = function(v){; S$ `- _3 w9 l
  return v;
% Z( a  a! G5 ~! `. ?. K7 r# v# [1 @}+ z; S2 k- F) A* Y$ }
</code></pre>
4 R- D" V. L" n* z: H- |" U<p><code>arguments</code>参数 可以获取传入的所有数据</p>0 D) R( }4 l; w8 H4 p' X
<pre><code class="language-javascript">function foo1(a,b){
! Y$ C8 p$ L8 \8 \0 @% R    console.log(arguments.length)  //参数的个数 + o: V3 B! N% ^. F- q' D1 }
    console.log(arguments[0]) // 第一个参数的值
, O* R8 F4 ]0 t9 N        return a + b   8 R4 A4 }, N$ T- J9 g  O- a  C
}& i$ _2 ~$ O/ Q! w! l5 i
foo1(10,20)
1 k- [' P/ t% }+ U3 R4 t- g! l结果:
% ^& T' z' A* Y! y# R( A 2          //参数的个数 ) x3 J1 I2 }5 H* n; s3 `" t
10        // 第一个参数的值4 Y# B; e2 m* |+ b+ G, I2 p( ?2 @
30        // 返回相加的结果% c1 p+ z' L9 q" n! N7 z5 t
</code></pre>; Y  B- s4 A6 X. x+ z. I
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p># H% b- @, x* R2 C
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
/ N0 @9 ^, p( x8 Z<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
: o( D& a6 L7 K! H! h8 r0 `3 T& g<h4 id="281-date对象">2.8.1 Date对象</h4>, ^; S& n0 y2 Q5 h+ _
<pre><code class="language-javascript">&gt; var data_test = new Date()
$ r* [, W% o$ x% |' d. w&gt; data_test" y6 z1 m! O# }: `: m1 X
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
! f/ C  b6 P3 J# T) M- \&gt; data_test.toLocaleString(); o3 M5 A" ^5 S) S) @! Y) d
'2022/2/11 下午9:44:43'
' u6 [& q/ x! n2 N
2 N+ u! O$ U; C' Z&gt; data_test.toLocaleDateString()
& U: c$ E$ v, ~) r8 I% ?'2022/2/11'
/ [. D1 l1 g$ a4 N) h0 w# [% f5 G1 `8 g3 _
&gt; var data_test2  = new Date("2022/2/11 9:44:43")  \" J5 [. S$ N  d  V3 Y7 X; p& @
&gt; data_test2.toLocaleString(). L! P) Z5 K7 u) O1 r+ {3 `
'2022/2/11 上午9:44:43'
2 x" W7 s. @% ]: `% Z/ [
1 p; s# c! Q1 M+ Y5 V' n# L  H// 获取当前几号# B9 ^# |$ s6 z
&gt; data_test.getDate()
& K  R, z2 V. p8 P4 l1 U' E( E3 z11
8 J$ \6 U* N3 x  p2 v4 N( f+ h// 获取星期几,数字表示
, y: k. j0 i. T7 S7 E9 ~&gt; data_test.getDay()  2 Z3 z' z/ {. y5 u
5
5 L& H8 q  ?9 g// 获取月份(0-11)  B$ i0 `" f8 B3 p: \9 F: U
&gt; data_test.getMonth()
9 {; Z: Q8 V8 P; P; Y# E2 t1
2 r( ?2 P9 k1 a! }4 e0 k// 获取完整年份+ l4 L2 m, K# e; K7 r5 J
&gt; data_test.getFullYear()
$ m( t' t$ Z6 C0 T0 |: v4 `7 j2022& L$ y- _. T) ?1 S4 s2 p
// 获取时" d$ G5 J5 M3 i
&gt; data_test.getHours(), u. ^. _% P3 b% @; Z8 o
21
  ~* w! x2 c; I. O5 q; o/ V// 获取分
% i8 D2 _1 Q) H0 a3 b! G0 B0 b&gt; data_test.getMinutes()
+ y+ N  s1 y0 e' p' G. u( _" u445 J9 g9 H9 c$ \. E' v' R
// 获取秒. d  W7 F/ F. W
&gt; data_test.getSeconds()$ U, I- k7 `9 U
43
# x# b* O# }4 x/ w; s// 获取毫秒
: m# h8 M! D# C$ Q* [* v&gt; data_test.getMilliseconds()
) ^, ^8 a: u' a( k7 F, f- C* V290, @2 A  H8 c; p1 ?- I* U$ {1 F
// 获取时间戳
- P6 M# o5 i( U$ Z, g+ r$ a&gt; data_test.getTime()
) |) [. i$ E  q9 `& _7 Q6 Y% I$ x$ l1644587083290
7 n. }4 G: I$ ~# Z( V0 c% Z</code></pre>
% C! i" `1 }+ @<h4 id="282-json对象">2.8.2 Json对象</h4>
' M' g/ L) ]- I: }, ~<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串9 L' N5 L; O4 R
JSON.parse()  // 反序列化,把JSON字符串转换成对象
8 \9 H( I( Q$ F6 H! `  \6 G! Q
5 N0 X( q6 Z6 ^# h* w) z// 序列化; @, I0 `( K' j0 a+ d; B
&gt; var jstojson = JSON.stringify(person)
5 I2 F/ y: Z5 U' `&gt; jstojson  
$ q# l; T  b# N4 j9 c' U'{"Name":"Hans","Age":18}'
8 D3 @4 N: G3 S( v( p
. ]- y2 }# V3 u9 F; y// 反序列化# V3 h+ h3 u: ~" c$ N. J
&gt; var x = JSON.parse(jstojson)
$ M3 l' P( A, p&gt; x7 R8 W; P. g) {2 r' m
{Name: 'Hans', Age: 18}
1 s- ]  m7 Y# {&gt; x.Age. u. V/ H& [7 _
18
, S. \2 _- _% e5 V: C' _$ J</code></pre>; i2 T1 O, i% _. z! d" t
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>3 o2 U$ L# B$ n3 y" q$ e3 Y
<p>正则</p>
: N7 K1 O# u. ]; y$ [3 K* t<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");! j. m: R5 g$ b6 @) `
&gt; reg1! d( W' L1 D8 a
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
) }$ |9 Q9 X8 [1 O" L5 f&gt; reg1.test("Hans666")
3 m& U3 M; Y$ `% s+ I8 ]true  s1 Y6 ~& w9 b# M$ Z9 X$ F9 A

: p! W% @- S1 K1 b" w* _' `& K&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
, T+ Y5 \+ s7 Z$ U& Y; f( l&gt; reg2, |2 J8 L( R5 L  g* m. o4 A. T
/^[a-zA-Z][a-zA-Z0-9]{4,7}/. V9 K& G& J1 R; S2 f9 o
&gt; reg2.test('Hasdfa')! j- Y) Y1 [) @' i% Y: |
true
# \- y4 K# v' H; l6 `* |* K) v$ c0 y% ~3 R& N
全局匹配:6 `' R- F8 x! I
&gt; name
2 n1 v* r2 `+ Z- J4 V8 \'Hello'
8 D$ d; j) R  d) E8 N# R% V8 @&gt; name.match(/l/)
" l$ w8 P2 F% f6 @  H['l', index: 2, input: 'Hello', groups: undefined]
  ]$ W/ T  o( F, R$ G" o1 q: `& t( q  P3 P! B. W3 p5 b$ D
&gt; name.match(/l/g)% z6 ]; t4 a$ w5 X9 ?
(2)&nbsp;['l', 'l']
1 {) @0 B/ g4 M) g// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配& n" \1 H& X0 z- {: U

% w6 p- n2 M5 O4 }9 v全局匹配注意事项:" E8 L5 v3 S, H( h( z( S: z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
/ g$ f/ V( z5 ~$ n9 @&gt; reg2.test('Hasdfa'): q4 e' a7 s0 b$ d- {
true' ^2 q  R5 Y) N6 R9 _6 Z" b
&gt;reg2.lastIndex;# Y9 o2 S& p7 Z) ^7 Z( H
6$ i$ x$ @% m, ]1 Z
&gt; reg2.test('Hasdfa')
" i' H3 |, v& ]1 u9 x2 x7 qfalse6 E/ D; }* z1 ]: d$ G7 V
&gt; reg2.lastIndex;
- ?7 s; f% ^" Z8 h$ L2 G' \2 O02 K$ I0 o$ n2 G9 f, u
&gt; reg2.test('Hasdfa')/ [) L6 p/ e$ c( Q' s
true
' S4 p$ {! h$ U; b; V- [% z7 C" T&gt; reg2.lastIndex;
' i. u4 J5 u4 l1 E% L/ q6
2 x1 Z% ^% C2 \&gt; reg2.test('Hasdfa')
  L# E: h1 w" _  sfalse' M) z  o* e. A$ P6 h( \
&gt; reg2.lastIndex;
0 T% V; X4 z. ~# B0
9 [2 F" @4 o2 u! l/ f7 T/ `1 a// 全局匹配会有一个lastindex属性( F3 q( B' l0 U
&gt; reg2.test()4 `" K5 \. j3 x: M
false; g# F+ x, F2 ^% A6 }
&gt; reg2.test()
7 A# z/ k+ [/ [0 C" {! Wtrue' [+ D+ q) L* E) ^
// 校验时不传参数默认传的是undefined2 {+ c; s, V: U) h
</code></pre>
7 c3 m# s3 o* G' ^& j# d<h4 id="284-自定义对象">2.8.4 自定义对象</h4>3 O% k, u  W* B: b9 {- l8 y8 V
<p>就相当于是<code>python</code>中的字典</p>5 x2 H% \" W( ?; c9 R
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
) M* q- n6 @. X, a&gt; person
0 w$ O+ X- n- A{Name: 'Hans', Age: 18}
. {0 Y3 ]0 R8 M+ M&gt; person.Name
% E5 b7 \% x6 w% {'Hans'
9 y3 B3 u7 E+ J2 i" l# E+ L4 F&gt; person["Name"]& V9 ?8 j; n, Q' l- ]% L. a7 F
'Hans'8 x! @0 M7 g! z$ d
- @: o# U2 C9 B" ^
// 也可以使用new Object创建
7 K" F/ y- Q# p&gt; var person2 = new Object()1 {. e, w: y5 m
&gt; person2.name = "Hello", W; j2 s( B# j+ c
'Hello'
/ Y) v8 L+ F* C* _: R" ^) D&gt; person2.age = 20% X- _$ S# c  Z; `
20, k+ ?. u* C5 ~' R  W
</code></pre>" M$ Z- Q& T7 ^- u- K& }; {# S
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
7 z- |! p% y; A# f$ P, w<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>3 ?5 {9 C( |! Y! H" b6 I
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
2 i1 z$ p, d2 ~1 a<h3 id="31-window-对象">3.1 window 对象</h3>) T; D) G, J2 j) f. @
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>; S) w+ e1 s' S$ n! l, |4 ~
<pre><code class="language-python">//览器窗口的内部高度6 w- S! @5 _) }* I! c
window.innerHeight
; [# d, O) `+ X0 x" y1 K8 G706
  T; h, J$ n8 ]% b//浏览器窗口的内部宽度
/ W* l" l8 `/ l/ {* A& v6 K/ Mwindow.innerWidth! A2 l1 r, X& C- W$ a0 X  T( B
15227 j/ }) A: |9 m8 q
// 打开新窗口5 \3 p6 C8 V" C) c1 w& W- K6 c
window.open('https://www.baidu.com')
% L: K  H, e( Y4 [6 o. l: @Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}, R4 T. D. c7 P
// 关闭当前窗口/ k- A3 b& C' i& ]7 s
window.close()
" a% b: g7 Y( B1 x4 r6 i  V+ I% K" D8 Z//  后退一页* G; Y* X9 `; g8 `" `; d
window.history.back()
; k& |+ o# q  w2 d9 ~$ t$ }// 前进一页" q. P; `4 p; x; }+ S
window.history.forward()
* N" B& D, P* d9 \, J+ Z3 }" `& E$ v//Web浏览器全称
: n  E, M; |4 C9 z: y/ {window.navigator.appName6 O, T. [' Q! c4 M$ {/ F# W
'Netscape'8 X1 F8 a0 s( J) m& M' L/ _
// Web浏览器厂商和版本的详细字符串' R9 A4 N( u/ K
window.navigator.appVersion
% o$ x) ~, S/ R' f' z1 ]' G'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
) s$ \* g  e6 ^( e9 e8 C// 客户端绝大部分信息. A3 B* C, V3 Z; {5 W) d2 E7 q
window.navigator.userAgent
5 j, S5 ]9 I0 W9 ]  d'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* }0 v: D1 c# K8 E, a$ s
// 浏览器运行所在的操作系统
( s2 ?# ]' `) M9 ^8 K6 x- rwindow.navigator.platform- v$ c' v5 i" J1 c+ K
'Win32'" Z9 e: C7 r0 D2 D5 b3 [6 V

& e0 ^. b2 V  l* v* \//  获取URL& h7 N% o" y5 j
window.location.href9 h2 u" n  l2 C0 o: n* |1 o0 d
// 跳转到指定页面, j, e" P3 T) \5 F% o& B
window.location.href='https://www.baidu.com'9 g1 ?. T9 m: n
// 重新加载页面
' _3 m5 p5 O( T, Y5 owindow.location.reload() . j- [" ^; \3 ?6 w  I, G: y
</code></pre>
+ X+ s6 g2 d! Q, z9 A<h3 id="32-弹出框">3.2 弹出框</h3>3 G) g3 v( E  s1 I
<p>三种消息框:警告框、确认框、提示框。</p>
# l5 o3 w0 U; E2 H7 v<h4 id="321-警告框">3.2.1 警告框</h4>
3 V1 ?6 V$ T) F. _8 M' R6 C<pre><code class="language-javascript">alert("Hello")& _/ z/ k! [7 w1 g) U0 `5 w
</code></pre>
- _1 N) ^' ]. p: n: ?* |  r/ e<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>4 y4 r- O# n8 o% X5 E% p5 R1 M& @! I8 [
<h4 id="322-确认框">3.2.2 确认框</h4># ?2 C4 U* x8 I0 y4 G: n6 m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>7 D" Y% _! \  g7 d8 s. s
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true: K" b& \/ i, M& B9 X6 e
true
9 b( b& N2 v+ _; v&gt; confirm("你确定吗?")  // 点取消返回false
8 s  V8 y# r3 U; Zfalse
3 R' W( {" @2 _" k</code></pre>
5 v1 p2 @2 a* t" }) l/ O<h4 id="323-提示框">3.2.3 提示框</h4>2 y' v4 |) ^. ?5 e4 v1 a+ M
<p><code>prompt("请输入","提示")</code></p>8 R/ o$ Y# u: X9 Q& C
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
$ u# m* S0 |$ `, _2 A0 E' W" y9 w, F<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
1 ?# g* I9 u% }- _$ n) l2 k& m<p>如果直接点<code>取消</code>后端收到<code>null</code></p>0 t- d% T  u% O8 l1 B; U- X
<h3 id="33-计时相关">3.3 计时相关</h3>" R3 S3 M# `/ S2 U
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>/ a: p' C2 G) `$ l) P
<pre><code class="language-javascript">// 等于3秒钟弹窗& W8 d- f4 [6 O4 [3 w- P
setTimeout(function(){alert("Hello")}, 3000)
2 s* E# R: H! m: n9 w: J9 U4 h0 C( R" x: b$ n- Z7 m/ y
var t = setTimeout(function(){alert("Hello")}, 3000)
7 a8 w& H, u) v7 H8 X5 s+ ^
+ ~' H6 h, v8 S, ~& a* L4 n// 取消setTimeout设置
+ g7 f9 X' n9 I3 d5 q$ _clearTimeout(t)
; D. p# y6 s( ^* C$ w</code></pre>
" }7 j( A0 X( Q# T7 c0 c6 y<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
& \( g' n/ ~& b; e0 {, _+ j6 [" @<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>. u" E3 w' e, z2 O4 n( o1 V
<pre><code class="language-javascript">每三秒弹出 "hello" :
8 g3 r8 b8 z9 z' I( S5 H+ JsetInterval(function(){alert("Hello")},3000);
6 {0 }! T8 d8 F4 _% m</code></pre>
! B; D% R, S+ Z* P: b* e<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>1 ^3 l. ~* H: S+ N( x2 g& {5 Y2 a  f
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 M! G" h9 I; P& Y' O" I//取消:; g& }- J$ @. T1 j9 u+ F
clearInterval(t)5 I$ h4 Y: M! R9 Z
</code></pre>
  v1 M2 X" l$ j+ L& _
  s6 B2 F0 \% F- G$ e, B
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-10 18:03 , Processed in 0.069385 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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