飞雪团队

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

前端之JavaScript

[复制链接]

9171

主题

9259

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

1 a# M8 z) Y, Z* X) ~* {<h1 id="前端之javascript">前端之JavaScript</h1>/ W7 U; z8 T) Y' {
<p></p><p></p>
! k4 |, o" K( D6 j<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
/ D& e7 x: l- n<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>$ z! y0 c+ s% q! M
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
9 _# R- }! y1 A$ |它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>0 a8 T# `/ h+ Y7 Y9 I2 o
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
/ O5 n- A4 j7 e<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>; p  ~6 _) Q' o3 `, M% q
<h3 id="21-注释">2.1 注释</h3>
  g2 ]8 w# M: T5 C' Y<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
; @3 k) s/ N/ t& @* [2 p<pre><code class="language-javascript">// 这是单行注释  v2 H2 D2 H2 A; ?0 Z- Q  q' k
7 K* X4 i; I7 p" t# I
/*
4 D% d3 w) D6 J这是多行注释的第一行,
9 t1 |9 T6 q4 w) n7 |这是第二行。, Q2 N8 J3 [% N, Z2 h  j7 S+ k3 s
*/
# `9 c/ v) v  O# M</code></pre>
* j3 e. [6 p  h' S7 e3 D<h3 id="22-变量和常量">2.2 变量和常量</h3>
6 _& m# f+ Q. o/ I8 V  O  A; R<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
* H. u  S2 V+ _( ?3 d4 P9 K. J<ul>
& p6 b$ x0 i1 |( k  _: A# b% h% t<li>变量必须以字母开头</li>; ]$ U# f4 G6 Z8 Z) B# P) h" M5 g
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
2 h, y. Q, R/ p<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
) w) S, j' @( E) O</ul>( B/ q5 A, f3 K) T0 K/ u
<p><code>var</code>定义的都为全局变量</p>$ a5 k4 i! |; M! f$ E+ i' ^8 e4 n
<p><code>let</code>可以声明局部变量</p>
+ |$ h' D; R  z0 m9 ~: f<p><strong>声明变量:</strong></p>
8 F! k  x4 }; T8 a<pre><code class="language-javascript">// 定义单个变量
+ p! `2 k$ d& D4 f3 Y  f, R&gt; var name
1 d5 K% ~! _* n2 ], A  o&gt; name = 'Hans'1 n3 ~, Z9 z/ p! k; c
//定义并赋值
, c) m7 N, \9 k8 X4 w. D; G&gt; var name = 'Hans'6 x  I1 C2 a  ~, [
&gt; name: Y+ \) ~0 B& E. L
'Hans'
, M7 f+ w9 z" d. K2 a) X( Y. u+ k8 X% S, F
// 定义多个变量
6 O! i! v# e! |* j) c- G&gt; var name = "Hans", age = 18
/ m3 w) G/ q' W2 s&gt; name
" S% _0 a: s4 ~+ s0 {'Hans'3 f& I+ G/ c, k
&gt; age* i& W8 N. a/ {3 V' y( }% E8 W
183 Q. l! S9 B$ O3 n
. ]- ^, W- ]6 {6 e" @' _  \7 L
//多行使用反引号`` 类型python中的三引号
' s' p2 n( ^. U* @&gt; var text = `A young idler,2 b" I$ r, Z5 T1 x7 \, o6 Q
an old beggar`
2 U9 D* R# E4 L+ L) Z&gt; text6 I7 S0 d- F4 p1 V" f" G
'A young idler,\nan old beggar', ~7 j0 q4 `' C) Q3 o
</code></pre>
& ~9 A1 r; s. ]- @<p><strong>声明常量:</strong></p>
8 `! J9 Y8 m/ O  t3 Q" i! G8 N9 F<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>0 X; H( I( B. Y! i9 n
<pre><code class="language-javascript">&gt; const pi = 3.14# @( S+ M, ^  Q+ _* U
&gt; pi- W5 t/ s4 a7 H9 i3 f2 C, W$ L% X& y
3.14  F4 u1 q9 P( C6 u. A/ f( x2 p% ]
&gt;  pi = 3.01) E( J* o1 a- A4 C% ]
Uncaught TypeError: Assignment to constant variable.
( D& b. {1 k- |3 v% ~5 O0 K% K  U    at &lt;anonymous&gt;:1:4
$ K; b8 t) M. O9 R& `  _, j! t' ]! J4 m3 y. o. V( L) [/ {+ x
</code></pre>
+ w# ], n3 x% G<h3 id="23-基本数据类型">2.3 基本数据类型</h3># l2 Q- y% J1 q) G8 ]. n
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>8 Y% g. C7 f5 {* P
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
% X0 Y$ ~) I6 p<h4 id="231-number类型">2.3.1 Number类型</h4>/ y, M' t: b% B" N
<pre><code class="language-javascript">&gt; var a = 55 X* L2 F6 ], f
&gt; typeof a   //查看变量的类型  & i2 x$ D$ j$ u2 ^' q- g! q
number
, B# E2 P# L" g  x+ \- y1 W% T, ~' G* k7 R9 ^7 W$ n8 o- k0 L- ?8 R
&gt; var b = 1.3
  t( C, ]4 Y2 c5 W7 B&gt; typeof b
7 F2 u' @. T$ g8 J* Nnumber2 Q& S* J9 Z8 f' Z

. {5 S& y& [& H5 i* c. z/ F// 不管整型还是浮点型打开出来的结果都是number类型
0 H, r1 q5 y; ?" z4 l3 Y  K" r  m- ?0 Q( e5 x" I+ N) }% a% j5 i, V" E
/*
; G' X( I6 k( U% a( b; |( u* C' x. p1 LNaN:Not A Number
$ \0 `2 R# w' ?0 Z0 y' jNaN属于数值类型 表示的意思是 不是一个数字8 Z0 F7 [& t: K1 _" b% G4 x
*/" u" i5 Y6 G9 O+ w/ a% K! d

4 L& t5 P" W4 m) IparseInt('2345')  // 转整型
$ f/ g) [, {, s/ I2345
3 i! m# a7 a# N8 m) Q  qparseInt('2345.5')7 {3 {; y+ S- f2 o2 l7 |# x
2345
0 x+ z% V  M0 N( i1 lparseFloat('2345.5') // 转浮点型9 ?! g$ E5 e* g* y4 y! y4 ~
2345.5
9 @3 p5 p, M. A6 Z3 `2 s' rparseFloat('ABC')
! }, |4 n: T; G7 u3 Q4 R7 qNaN+ H4 _, Q; W/ ^, `6 m
parseInt('abc')' C( }/ U& T& b3 `$ Y, [0 Q% Y
NaN. q' \+ h* s. M  T9 X( p! @1 l
</code></pre>* u* J$ D! ^( F3 G6 ?' \
<h4 id="232-string类型">2.3.2 String类型</h4>. s, l2 u% g5 e
<pre><code class="language-javascript">&gt; var name = 'Hans'
; V$ E- [! \% [  b( D# N&gt; typeof name* p: B* _' v6 Z  s9 h7 k$ u
'string'7 a  u, _3 U3 Q% x& Q, Y, b/ R2 s
+ a" o( Z: n* L, F
//常用方法
  |' s5 v5 V1 P6 t# s  U// 变量值长度$ ^4 H) U$ v. N( x4 m
&gt; name.length
  L5 c: n) C! v  _4 P# ^& ~4  U$ k- r9 j6 W2 O2 a2 G' E3 R
// trim() 移除空白
( z! }2 C1 i, @' k% q: v&gt; var a = '    ABC    '
, ]& O5 q: J: N! y&gt; a
% J5 Z! Q- p0 Y! i( y'    ABC    '
" `+ w2 K% g' B; k# Q&gt; a.trim()3 G$ A& x7 Y  O- Z
'ABC'1 R% M1 w& t0 W1 Y& l+ M& u
//移除左边的空白' e* J0 K) u7 y& n: r
&gt; a.trimLeft()
9 u" i- _8 ]  M7 D' k9 o'ABC    '
5 C* J4 h; a/ `/ O% e//移除右边的空白# S9 W. b) D4 E1 i5 ^2 r! {
&gt; a.trimRight()
7 O  h- T$ H) k' P1 L5 R  X'    ABC'
& n& ~- P- o# c4 {5 Z
1 [! a: ]! M  C6 x; O2 }//返回第n个字符,从0开始2 g) C0 n$ T* V" f" @% Z4 p
&gt; name
4 V/ U* a5 L% g'Hans'# `4 \& m3 |' Y. c8 q2 T/ ?
&gt; name.charAt(3)
7 P' [5 j0 S& s$ s5 \  w's'
6 e% y+ |* B. C5 ~4 b* x. _&gt; name.charAt()2 k; H+ T  m% {$ b9 Q
'H'
( e6 W) V' K; G+ L" T6 F% b8 {&gt; name.charAt(1)
- E1 d$ j# x* x2 l  a. c'a', t1 C6 k- O3 D' [9 u. H+ `
7 n- x: e/ w' O7 Q
// 在javascript中推荐使用加号(+)拼接
3 [2 _, b* g' D' I4 i2 _&gt; name
4 L& F. \3 ]5 `4 F'Hans'
5 {! Q+ S1 A; m  y! t- K3 Q&gt; a* W0 w& r1 m8 Z6 T! g! R
'    ABC    '
$ D3 \9 ?9 O6 I$ y5 _. S. w&gt; name + a, s/ _: b  w) e
'Hans    ABC    '" X9 R/ q! Y! V
// 使用concat拼接
& L+ E; D* W) f$ z) I# L+ v2 R5 S% y8 V&gt; name.concat(a)
5 P2 y7 U/ e, V+ E& _( D' }6 _'Hans    ABC    '
( k( `  e. E% P; G' @( t) C6 a! x3 _% g8 Y
//indexOf(substring, start)子序列位置& I5 H+ x# G& y# p6 o1 i- |
7 ^1 j& Y$ ^) R" P( m. \- j4 Z
&gt; text
' F; B5 A2 J: ]3 m$ x'A young idler,\nan old beggar'7 F# z5 p9 v- h
&gt; text.indexOf('young',0)/ ^: N3 X4 k. P4 B
21 a0 r% h2 L7 O  W9 k( C

  U6 f( e( d( G8 c# x) B# B//.substring(from, to)        根据索引获取子序列2 t* P* \# n. U1 M
&gt; text.substring(0,)( Q. m% [- D0 c* R* ]
'A young idler,\nan old beggar'
& S* b  W7 [, A. L&gt; text.substring(0,10)/ f& d: y2 W. X% A$ y! H
'A young id'
( `" q1 d- }3 {  g/ I; q" p$ P' ?% B/ k7 K6 x. e% Z; t
// .slice(start, end)        切片, 从0开始顾头不顾尾$ i8 m3 k" g$ s$ W  Q" b, e8 D9 W6 r
&gt; name.slice(0,3)& `6 c: a; r% s
'Han'
, o, Q$ j9 |$ N6 y& M. s$ Z# o' i( h' L2 d
// 转小写5 Y  [' f4 V1 T6 \' ?9 a
&gt; name" B2 m  u, L; ?& u$ z+ n
'Hans'  j. s3 W- l5 ~4 o3 o# \
&gt; name.toLowerCase()3 `& ]& `- D" D3 m! z( v+ I, w
'hans'9 l9 r' }) ~% [
// 转大写7 g, E6 E6 [' ~' k, b" K$ A4 _
&gt; name.toUpperCase()
7 x0 U, T+ p; e" m4 q'HANS'1 e$ M* j; J0 z4 e: s
6 b% s+ I3 n! B' s
// 分隔. z# O7 N" m% O0 L
&gt; name0 p( C% q2 W7 e. i5 Q0 j9 b- D
'Hans'
6 m, ]/ j( |% F3 J% V&gt; name.split('a')
5 E9 y$ f% @4 t% W9 ](2)&nbsp;['H', 'ns']
( L! |9 l$ `5 b- v2 R1 h  j</code></pre>
1 z/ m. j, Z6 x2 ^" d$ o<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>7 \) B3 N9 t" v- X; X
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>3 g0 \" Z7 L" H5 S
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
" T/ r9 e# _1 t6 E- z; r2 `0 Q. T3 h<p><strong>null和undefined</strong></p>
6 }$ e9 `: A  g<ul>9 y" t% W7 V! z- x
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
6 X0 R0 H3 Z7 s+ K, l<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
' _( r7 O! w$ v$ f</ul>  x+ r0 d1 R# j3 _
<h4 id="234-array数组">2.3.4 Array数组</h4>, S) |8 Q" _  K
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>& x, q. A" Q  A, [: E9 L/ Q! I" u3 H
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
' q2 S$ F/ {. o+ h4 r7 j2 T$ ?&gt; array1' J, ~  [$ E9 c% H$ M4 P
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ l: j: g/ V6 V6 a# n&gt; console.log(array1[2])  //console.log打印类似python中的print& b0 r$ Q. j+ O* ]
3
! A3 E/ F9 L+ F! Z2 o6 i// length元素个数
0 C" y% z2 V! {3 K5 f+ C&gt; array1.length
  R. d( w4 W% K. X  Q9 K6" ^0 {! U- V7 k. g7 M0 A6 r
// 在尾部增加元素,类型append& ^/ X0 N3 m' {2 D
&gt; array1.push('D')
9 _9 h- n" C# A7
. K. I2 ^  \  j1 d$ b3 Z&gt; array1: {5 V5 w/ c6 s: H: w; u) P
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']* W0 U& c4 T1 X, c0 ]
// 在头部增加元素1 r, p2 N) B1 R# S
&gt; array1.unshift(0)+ _) n8 F, c5 f4 N# _! y4 ~2 R: l
8, p5 e3 ^; [- E$ T" d* f
&gt; array1
; k! k3 W8 `& Z, f+ Y  f(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']9 z$ z- {3 s# j; y( h
  G4 r2 a6 w) Q7 J* q  {3 ]$ ?4 |
//取最后一个元素
0 I; q2 D6 ]0 M4 ]: a&gt; array1.pop()
. J2 w* v% e; ~% _0 V'D'1 Q5 |4 y8 ^+ R. W0 r" }1 A
&gt; array1
; j/ k) _" ]8 t( ~! q6 k, ~(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']( M% P$ Z$ P! Q  D, e7 m+ G! e
//取头部元素
$ G4 w! g8 P- o" g7 E% c; x. ]&gt; array1.shift()
5 l9 p1 ^, ^5 u0" N- _% b# U6 g  M( \
&gt; array1
( w9 w; p! R, X7 M: O! W(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 n% e% |: l$ \1 a4 i( \* q( H- ]# y2 }; G7 m1 @' Z9 C
//切片, 从0开始顾头不顾尾
0 |1 K4 J/ t1 l+ X&gt; array1.slice(3,6)
  [$ K/ S# L2 o( ], e(3)&nbsp;['a', 'b', 'c']
: N4 A4 e. I" E. R3 ~( C// 反转' F# \) Z4 d. y/ E% N
&gt; array1.reverse()4 e! d5 m4 U8 N1 J* c! f
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
5 }8 r* j5 p8 |// 将数组元素连接成字符串
/ ^" H5 R5 S/ y# z3 ~* H/ |5 w$ j&gt; array1.join() // 什么不都写默认使用逗号分隔- I( b2 ?2 p7 S
'c,b,a,3,2,1'
3 M& Z9 t; F/ C&gt; array1.join('')
; n6 {2 o* S/ x; E9 d8 J'cba321'. \  o, i4 }( m0 T% C3 |# d
&gt; array1.join('|')
" Q3 V8 ?$ T' T* M) `1 h; A2 P; j'c|b|a|3|2|1'
) |, @9 y9 y8 s5 ^: N3 r* K6 B  d9 i7 U. S4 w& H
// 连接数组2 X: k, j2 p. w) `2 ~4 k7 H( o
&gt; var array2 = ['A','B','C']
" p  m) z* k, X5 `&gt; array1.concat(array2)- Y* N8 m5 u0 @. L# Y+ j8 D
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
  S: z- ~8 F, j- ]( f% B+ t/ Y+ N/ {/ U6 B! s
// 排序
  }1 c" f* Y/ v+ @/ H0 m/ |4 B- C&gt; array1.sort()) ^4 G+ R3 y! m. s: E
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 G5 n1 v% }1 ]0 i# F  X# |9 o, f5 n( h  V0 M! g  o/ d# S! A
// 删除元素,并可以向数据组中添加新元素(可选)4 Y# i0 L& v# g3 w7 _
&gt; array1.splice(3,3)  // 删除元素4 _' `8 i/ I' K6 [  z: o
(3)&nbsp;['a', 'b', 'c']9 B; R/ C: }9 n  Z: U6 n" o% y( d
&gt; array1# B1 y2 A6 P& V! |' W
(3)&nbsp;[1, 2, 3]$ T6 J" Q4 @/ }7 w( ~  u0 e
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素7 V  i! f/ ]+ h! @
[]
: a$ s0 D' T. o, a! o) a) i  H&gt; array1
: M) R2 V5 ]$ e4 \. i/ p- ~5 m3 |(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']: T, z' V9 r1 T8 w+ e9 d# n5 E2 A
5 w2 F! V. A. [! Y
/*9 H$ j6 M" N1 X- s- c
splice(index,howmany,item1,.....,itemX)
& B, J2 u+ ~8 pindex:必需,必须是数字。规定从何处添加/删除元素。; l' ^& [) m8 p& ?$ G' u2 p
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。$ i8 `/ G1 E/ W) [
item1, ..., itemX        可选。要添加到数组的新元素
. e0 {2 g" R" E) B0 ?*/: `( U3 v; R: n! e& \5 `/ i+ j

7 e- p/ P% l4 @7 M7 H3 }// forEach()        将数组的每个元素传递给回调函数
/ N* h# a! \; e: P4 Y&gt; array1.forEach(function test(n){console.log(n)})& U2 y! L9 \) J: A1 U/ T6 k& |
1
( e: j0 w, B( A; m7 c 23 K# @3 B# c! [# @# l
3# o2 t0 t9 Z/ t0 r
A; ]8 T3 x4 ]1 j, K+ R) g
B- R6 r. i2 B2 s. i9 c
C# u4 Q5 U5 j9 w1 s
// 返回一个数组元素调用函数处理后的值的新数组/ D9 m# K9 Z" q/ I4 i. _% A/ h
&gt; array1.map(function(value){return value +1})2 L' i* f  `; n& r6 e+ K  p, `
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']/ v; [* {/ n" V2 ?2 w2 h
</code></pre>7 a1 {" Q+ b, C! Y$ r% V% H& Z
<h3 id="24-运算符">2.4 运算符</h3>
1 w2 _" L1 E2 x- O<h4 id="241-数学运算符">2.4.1 数学运算符</h4>) ]  @) z. C0 [6 P, t+ J
<p><code>+ - * / % ++ --</code></p>
* R, H3 L6 e% B<pre><code class="language-javascript">&gt; var a = 6
" d2 a/ `$ @) y+ q. U2 u&gt; var b = 3$ U; ?1 n! M1 v; ^  A) n
// 加& U3 O4 {& d" x+ q7 O$ I
&gt; a + b7 `: u: @5 g- q3 P: n, i; o
9
) D7 K5 I# l; j3 e9 }  E8 |// 减1 O# i0 `. {: N3 c! {. X7 ]- t7 ^4 ^
&gt; a - b' j% ^% \. a$ U7 ^
35 n( T3 F7 `: f0 k; m
// 乘
  k, m$ m5 _$ l; C! r4 \# ^&gt; a * b9 j, P4 T+ Q$ q- M* O/ C  m
189 l* h: g  D% W4 f: i9 h0 @" M
// 除
: ~/ M% D- u/ n: E&gt; a / b
( T- O/ H% q8 w, E. N2. I) e1 ?; E- |/ r$ H
// 取模(取余)+ d7 ]+ Q. F# [- Y
&gt; a % b6 j1 h6 S% v% T# Z* r2 W0 h
0
/ \( N. m; l, p9 U& |* v// 自增1(先赋值再增1)
2 `. \) D! ^! f4 J# |& n&gt; a++! g1 D% L2 T6 s' ~' B# E+ |+ o
65 k; |# p" w$ ~; K4 v
&gt; a0 d, G. G7 n0 Y3 h+ n% x
7
" m# U% y9 }/ o- ~! \) T& u6 Q// 自减1(先赋值再减1)
4 ~2 b8 C6 p' o" ~# C& b2 H&gt; a--1 c: g3 x' L( V/ E" o& i0 I) Y
71 [5 p6 \& v1 T: W  {3 [
&gt; a
$ `4 ]) p3 {9 D- v" Y, y6. a; G& Y- Z  [+ U' b
// 自增1(先增1再赋值)
( \( U+ ?( p. `+ E&gt; ++a. R' C8 ]5 o% p' `$ R+ I3 o$ T
7
: d* q7 v6 L& r5 O& Q5 j/ j7 R/ ]// 自减1(先减1再赋值)
7 b# E3 a$ }; _8 w: e2 l( \&gt; --a
1 U. U/ w# s. U0 o6( `# \) q( B$ _' x; s' _
&gt; a
! Z  s3 J* N2 d* c- \63 R( F0 `5 z& v" N  W% ]1 Z

* \3 m7 b$ @$ P2 Q5 g//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理. P7 @7 E/ Z: I* @  ^' U, x( d
</code></pre>
* k& q. d2 Q  C$ E1 t<h4 id="242-比较运算符">2.4.2 比较运算符</h4>6 R% F' C0 j3 C" h
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>3 q/ Y1 c- {0 S
<pre><code class="language-javascript">// 大于
& C# ^2 B8 Z+ |' n5 s5 Z7 H) Q&gt; a &gt; b9 ^) J% A4 j$ c8 {/ q% g  i
true
# D. M& S$ h" D! Q// 大于等于
( f' z, K/ j) j&gt; a &gt;= b! w5 J7 @8 v" r/ K! W- G, n
true
3 N' u! G' P/ g1 Q! Y) A// 小于% `2 a% M4 m( u9 r  U9 |' ]% B
&gt; a &lt; b  H/ E6 i- S5 z  P/ G3 Z
false# T5 y/ ~. k. e
// 小于等于
7 y, R* j& f4 I' |% t&gt; a &lt;= b
% g' _$ F% o" nfalse# X' o4 k& z4 f
// 弱不等于
! A. L/ T5 ]6 j&gt; a != b! M5 D* y. v* Q+ H5 M2 A+ [
true
  n6 e2 T, Z) m9 [" [$ \& e' c( }// 弱等于, X& V  B4 {8 d5 x( i9 w* S
&gt; 1 == '1'& ~; z8 L/ X. e
true
3 r3 F) l2 T" x0 K4 W* e// 强等于
8 ?; P  a* F9 U/ r. I; p&gt; 1 === '1'
( e, Z" E' R: m, F1 {( lfalse
5 j  Y1 @  A7 {// 强不等于1 M$ N  r! m, P/ k5 M% g
&gt; 1 !== '1'
6 K  ^; _9 r/ ^; r$ ptrue
- k$ t) N8 z6 S2 b
! |$ X  L2 I1 k: U/*
7 F: Y/ j4 B. L9 h: c7 _( VJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
0 Q! U" F) i, G, O/ p# I*/
; H  M) s/ V! h</code></pre>$ F) \5 f! j: y& T; j; y
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- J! }/ X& ]' X& `, ~( o4 l<p><code>&amp;&amp; || !</code></p>8 J# N( q2 ^5 o* V8 G( [
<pre><code class="language-javascript">&amp;&amp; 与: I2 h& ?5 `, s! [/ ^
|| or
# @8 y( i4 {/ v* _% O3 {! 非% D& u% M! d8 s" J8 V
</code></pre>
* P4 w/ V$ I1 M# O$ b7 @<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>5 V, |5 A4 n8 h+ e3 H
<p><code>= += -= *= /=</code></p>6 N3 O% q0 Z, i4 W1 f% u1 F, E
<pre><code class="language-javascript">// 赋值
% E9 B& B9 l: |# o: S; y&gt; var x = 3; p# Z3 O" T  Z5 z, Z/ ~
// 加等于0 L% }& G5 f! n+ f# R- `
&gt; x += 2( N# W5 ^1 S9 }8 b  R
55 p: h+ o& h2 q8 N  A* D; D+ N
// 减等于" W0 K' O+ H" D
&gt; x -= 1! S: f3 n. d" ]  o. ^- [
4
* ]: I2 \8 T5 b0 u: i/ J( g// 乘等于
  Y1 W% u& l3 k  M1 u&gt; x *= 2* a' ?! d4 v" k2 u! j& s0 c, u/ _. e' @
89 B3 `/ o8 ~* z
// 除等于. U# b; d7 S5 k$ o/ L
&gt; x /= 2% v4 B* |- F8 r5 P2 z
42 S% k- T% D: ]# X- u# _( X
</code></pre>
/ h; r9 b1 I" J7 K; D9 R% e<h3 id="25-流程控制">2.5 流程控制</h3>
6 b: S) X0 }. k+ y<h4 id="251-if">2.5.1 if</h4>' [$ d7 u( `2 Y# h4 |
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}4 A9 ^: g6 c9 o, \' C) V7 q9 q+ W3 u

/ g4 m# O9 Q5 \9 X* M8 L0 s&gt; var x = 3
: Y5 Y9 r9 x1 \1 E8 @4 J% A* Z/ x# F&gt; if (x &gt; 2){console.log("OK")}
9 x9 r+ W# U  Z  j. G0 e2 g0 i* ^  { OK
: A6 C) o6 k, z5 M' J6 F3 P" y# V
2 G, N  ?8 ~" O1 t* ~  e. H3 j2, if(条件){条件成立执行代码}
1 |% V9 k" U: w# [4 ~  J        else{条件不成立执行代码}
+ v% J. D7 G4 h+ [0 n! M: w6 h6 `) R
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
2 v( P0 Q8 U# {. `( I2 T7 r& ?  s! G+ g'NO'
5 T% V0 @( c+ z/ \
( P% d0 r" Q! [1 A3 U3, if(条件1){条件1成立执行代码}
1 G/ L; _1 m2 v; c# K4 G5 q        else if(条件2){条件2成立执行代码}
; `+ ], y7 Y% x) n& Z; [7 m$ T: [    else{上面条件都不成立执行代码}
: N+ p. W7 T9 [5 {9 z
; [6 \; d; U6 A&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
8 s* Q0 u) e! {5 g! D$ Y Ha
  G0 [. n4 u+ G1 B- k7 N</code></pre>0 Q! }" r7 V9 o  M) I$ u$ V
<h4 id="252-switch">2.5.2 switch</h4>
6 v4 _0 R3 M8 W. A; Q<pre><code class="language-javascript">var day = new Date().getDay();
  {: |" F, [, l. x) G2 f' Fswitch (day) {$ g5 x4 v3 A* y
  case 0:
. N  S+ \* {. w- h2 k  console.log("Sunday");% M' h  j% G+ E; q
  break;
  z4 D7 q& f4 Z% t+ l  case 1:
% j4 `# |; ?9 d  console.log("Monday");3 l7 p5 i$ ~' ]8 N
  break;/ p' d! J/ [1 {
default:
" H6 F1 r7 V2 `3 C) g% C5 f# D  console.log("不在范围"). c" {1 a; F6 O$ S
}
- S- H, S8 H" h 不在范围+ s4 @8 [$ P9 B1 Z& J1 C' F
</code></pre>
! t4 T" U5 l" J$ J% g<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>: s% {! {" [: [, r0 P% g
<h4 id="253-for">2.5.3 for</h4>
: Z% K$ E- q: f, D  L3 N: V<pre><code class="language-python">// for 循环
+ b5 x; `  L8 c3 M2 ~        for(起始值;循环条件;每次循环后执行的操作){
$ S" p# L* c. o" L        for循环体代码+ A7 |1 V6 k: |! D7 U
    }
* [  L% m, \6 G+ Y. b1 ?/ w5 B& z0 f* [; ^: S& B) m* ]" V% s
for (var i = 0; i&lt;10; i++){
6 r# O1 P% Q' t+ Z8 }/ H    console.log(i)' B" @5 \7 u/ ]" v& [4 O5 Y
}$ {4 e3 T/ G  v4 C) [. m
        0
( a: ~8 }% Z5 z& P8 o        1
( i, ?! S& Y! B        2
7 j4 ?2 q; V1 P7 ^+ E        3! R( `, T6 B! u( L" o
        4
, i+ f+ @# q! @6 E  i( \9 U2 v% E        5
+ d% t; p+ w) k. w) `        6' r+ V* V& i7 C7 \
        7  N: E$ c1 h6 q1 `8 _  w
        80 k, ~5 E: }8 I$ f! t
        9% A  ]  v  R; l1 \+ ~9 o  O( v
</code></pre>, ]8 L9 U) s( r( U; {: c1 u  R
<h4 id="254-while">2.5.4 while</h4>
% g8 N; F& b4 H9 z# B<pre><code class="language-javascript">// while 循环
, c2 F& {) i( U: h6 T( N; b" w        while(循环条件){
* N/ |$ d* I- Y7 u/ v7 P1 k        循环体代码
7 J! w: B6 J, N0 j    }8 E- V, f& g# K2 W* T3 \8 z
, ?* O- W& q) g
&gt; var i = 00 f3 d/ g% `& I/ R
&gt; while(i&lt;10){
, p/ K9 h, N) m3 j    console.log(i)
) D9 }/ m. E/ y( e9 T    i++
" d8 P' p" x& R2 @7 z, S- T}
8 x( |* g8 J( G3 e* U 0
8 s9 X1 W. ?1 f7 N 1
2 a! n# @% ~9 d% w 2$ g0 c, Y; n: W4 J2 f
3
1 y, Y; s+ [( |2 x- r 43 i+ l( V' t' D, R
5
( L! o# _% k! t( T4 n& {1 w- @ 6
$ i7 \- O; b+ X% A" f. j$ s 7
( N7 D7 _6 ]9 o) K+ H! v, u- m9 \ 8
5 K$ I+ t+ B" M/ p. C0 u 9, L. j! g# w5 e6 e5 u. ]
</code></pre>' E1 }0 I8 e( q( n, Z$ @% p; }
<h4 id="255-break和continue">2.5.5 break和continue</h4>' h$ E4 B* v+ C( _$ s0 }! H4 ^( Q
<pre><code class="language-javascript">// break
  A$ p  k/ t9 ?7 K7 P' Bfor (var i = 0; i&lt;10; i++){
( `& X+ p4 R! w& q5 x+ C' P# F$ U    if (i == 5){break}
! q$ s% }& _& z/ M% }( U; N    console.log(i)
3 H/ N8 @% l2 B* ~  H}- P) ^' y% p4 T2 R8 Y! v* D
0/ M, _6 E' c: `! H: C& `
1
) `7 q* H4 o) I: x- J 2
) Q* C) I8 J% `0 G$ I% D; @: c' W 37 S3 N1 g' |1 g9 R" [9 T" |' [
4
/ z( \" ]8 q, }' s// continue
( ?- e$ F3 ~+ yfor (var i = 0; i&lt;10; i++){
/ e2 c+ ]- c- j" W/ W5 e    if (i == 5){continue}) Y+ \! a* x: @
    console.log(i)% }- I0 r, a5 z4 l0 S) N
}
5 ~: G# @; `5 Y& L 05 Y. D3 D4 p) X8 r
1% N7 m% X& w. P1 j5 E9 }+ r& @
2
1 A. A1 ^* Z- l/ r. n 3% V. g% F6 D: U$ `6 O
47 F5 `3 C# |$ \3 }
6
$ t: h7 i; \+ j' N 7
# A! P2 o* q% A; A+ w, l; F 8
  p4 b+ J) X  S$ ^: |2 ~9 t2 U' y% I 9
: M( A: I7 d0 ~7 W% A* G/ S" h* ~1 g5 B9 O! f% J' k- P
</code></pre>
: O$ k4 P1 n+ f1 {+ {) I% p<h3 id="26-三元运算">2.6 三元运算</h3># M. M. R0 P2 _
<pre><code class="language-javascript">&gt; a
5 S- s! |# I& G6* {% a: v  x, D) O3 D* J
&gt; b
5 @' p* t8 I4 D7 C9 s( ^3
/ s: z9 Z4 H4 E3 B5 l* _8 h, C, [( _" h; H. Y* e% n8 a; l
//条件成立c为a的值,不成立c为b的值
' Z( S6 H! ?) _* [2 S&gt; var c = a &gt; b ? a : b
3 u, z4 S+ ~! {0 X) f7 W&gt; c
  M6 G3 o& z4 k( d+ S. F2 `60 v; Y. P2 B3 c' j9 d/ V+ L

6 a. L2 Q1 m& W6 m  B// 三元运算可以嵌套9 u9 w2 e/ {/ F8 V; n9 s3 {0 m$ m
</code></pre>
: X; M, D4 |2 o, g! w0 K* R5 z, ^<h3 id="27-函数">2.7 函数</h3>
0 p0 J7 m2 n$ X) F<pre><code class="language-javascript">1. 普通函数
5 D( |) f4 x% A&gt; function foo1(){$ r, f4 q- g! k2 y; F8 I6 u) T
    console.log("Hi")0 O$ N9 a7 N+ S: b4 d
}) g% M) E. }9 A  Q, D: [3 M( L2 g

4 ~' O# }9 _5 c+ m* G$ z&gt; foo1()
7 a1 {8 p* Z/ R        Hi
1 u2 L& p1 g; @: i( d" n7 U2. 带参数函数
* X5 v1 A$ ~6 J( d&gt; function foo1(name){. F8 Y4 U$ ?! `- ?
console.log("Hi",name)1 k5 }# b5 S8 L; c( `
}4 E7 \( |8 J4 p: y  ]
5 G. x0 H9 }- _% X; G+ ]5 `, w, f+ A# `
&gt; foo1("Hans")$ T& x5 }5 [5 g, S
Hi Hans# S$ h. F4 B0 y, \- f
- L( q7 n$ [) P- g% F3 e8 [) H
&gt; var name = "Hello"
" Z! l: A9 v1 J  U& `&gt; foo1(name)" J( w: [2 p9 e% o5 P0 o
Hi Hello
: ?2 k$ d' V# Y* \, j$ P
$ q1 f6 W, R9 p2 }- D( t3. 带返回值函数0 @& O5 P) I, j0 C9 d
&gt; function foo1(a,b){
6 B( ~8 _4 G0 ~        return a + b   
7 j5 O6 f. Q  ~' ^: {}
6 c' |' U2 k4 t, x, J&gt; foo1(1,2)
& y) q& @+ h' \9 x3
1 B) Z( `- |# A7 Z&gt; var a = foo1(10,20)  //接受函数返回值
& c" b' t! D( {2 {5 b&gt; a
; w% i0 a" @$ ^. @305 l2 ^$ g$ B9 n# Z
6 U9 I/ M, S% }. Z
4. 匿名函数0 F4 |* B0 R; `
&gt; var sum = function(a, b){( F7 H& H+ L. Q9 ]8 e. G2 C
  return a + b;& `' D: u8 p. o2 P5 v) R1 n7 S
}- z: {  ?* E% z6 W5 c
&gt; sum(1,2)$ o% v1 f2 [' `9 E) q! z' b
3, N- X1 m* ~' \
6 q& V# k  Z3 j: A' b: B: j
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
+ D* A3 q  J( N% C&gt; (function(a, b){
: y; k2 i7 Q# ?5 p8 Y4 V8 m  return a + b
* ]4 p. O% j2 |1 U})(10, 20)
1 I& t6 h, s$ z2 W) X. Q30
+ |; G: T! _( G' x0 z! k" X3 u: h, L- g& W
5. 闭包函数0 t% @7 E1 H' @( v+ c8 Z3 _
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数# d: @1 Q+ M' Q
var city = "BJ"
3 L+ z5 I. V8 n/ `function f(){
: M# b  ?( i/ p! ^) Y4 q$ K    var city = "SH"
+ ~! ], j" Y8 w: U) N# V; l    function inner(){
! k( I& m( Z: P8 ^        console.log(city)! o# e8 [& h; V. ~' [7 p/ j! P; ^1 F
    }; B9 N: k9 X. O3 V) W
    return inner6 n6 t7 k6 F7 A3 S; }
}
1 e1 B8 f! U) e) z; Gvar ret = f()9 a- Z  }- m4 [! N+ y
ret(); c8 V- E$ I' x) B) z# V
执行结果:, U; I! E2 _( A1 j, b0 E: P# O
SH
* Y; R" G2 J6 r$ g: D0 w6 \( f. }5 M' p" G
</code></pre>
/ ]4 R" l5 K5 Z; B; Q- X, _<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
8 V  e1 H6 \* b4 V9 \9 E<pre><code class="language-javascript">var f = v =&gt; v;6 _: O6 R( [8 t5 w
// 等同于- z& [; {; c8 u1 U0 V$ E
var f = function(v){( S. H" d2 b% ~) A* x; E& w4 m
  return v;
. N' ]8 }2 f/ W7 l! O. B}9 P$ _) Q1 F7 f5 Z3 `
</code></pre>
) i& W6 `3 u4 b/ t' d6 d2 @- e<p><code>arguments</code>参数 可以获取传入的所有数据</p>0 U. K; s3 T/ _1 y
<pre><code class="language-javascript">function foo1(a,b){$ Q& q9 J; U5 @9 t# Y
    console.log(arguments.length)  //参数的个数
! r+ \/ Y  H% m( o# Y    console.log(arguments[0]) // 第一个参数的值
  u$ S& i) k+ N# e/ x/ ?        return a + b   8 M4 l8 |5 z. k/ C
}$ Y7 _. ~) ]/ B5 k1 S2 K
foo1(10,20)4 e2 F8 [0 c8 G; q7 R
结果:
8 C0 ^$ y& R- l& K7 u- i 2          //参数的个数
. g$ B+ z: b" s, F. g* K10        // 第一个参数的值% F0 o" i* j5 G0 V) V" i
30        // 返回相加的结果7 h" r1 N# X: u" V3 W6 B
</code></pre>+ g1 E' g& K- n# q4 D) h
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>  F2 G. y$ J. t# }3 ]9 c8 A" V% X
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
) B8 C2 \: M. P: S<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>6 A0 l# z) s' V8 t) O7 g
<h4 id="281-date对象">2.8.1 Date对象</h4>& L! C9 B* A: s8 \2 G6 f) N* v7 R
<pre><code class="language-javascript">&gt; var data_test = new Date()
1 K7 b6 R" R- d2 n) }* C' o0 }# n&gt; data_test
8 U) Y  K* @# O  H3 m" EFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
. e9 S' a7 v) l+ c( r* u6 X, F&gt; data_test.toLocaleString()3 o1 f9 \! D  O- G6 [3 P7 C
'2022/2/11 下午9:44:43'
5 p  `' e: _+ K( Q) k6 }/ ^9 h2 f$ l* C# w  h( r7 F" z
&gt; data_test.toLocaleDateString()) o* }& Y3 G+ d; f( @
'2022/2/11'
9 N, y+ e, q5 _; c2 f/ Y4 j7 r' R8 N9 |4 ~! x
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
4 E# [0 {8 N. ^. l, e&gt; data_test2.toLocaleString()
8 J- @' S9 Z3 s( w  h( D! n3 ^. M' v8 M'2022/2/11 上午9:44:43'  {8 m5 @6 X$ B' q- b5 }1 r

4 Z; q+ k+ d- ?8 l' R// 获取当前几号
- }6 P) b" j0 p6 o9 _&gt; data_test.getDate()6 @" d; c( p6 s. |
11) G3 [0 t( r' W0 s  H& x
// 获取星期几,数字表示& A2 ^/ L, p. A) P( t. }
&gt; data_test.getDay()  
) i3 Q/ B! h9 {( X" A) ^5
' P( }" `( T( @9 L/ c& m+ Y// 获取月份(0-11)8 O* D! ?( A- T4 q6 D2 H
&gt; data_test.getMonth()' b$ s, y/ k6 a5 f4 {, a! V
16 [: m5 W' x3 r9 z% o3 [
// 获取完整年份/ |" f1 h# j  ?/ U- j! T# d8 {/ y
&gt; data_test.getFullYear()
% I! J5 t5 p* X) \1 A2022+ K2 D! T- S0 u/ h  w- [
// 获取时
: V' I" _8 z* \% ^&gt; data_test.getHours()
8 T% L8 g" M8 a0 F# e0 T" e) M$ P) e218 x; c% l9 Z, ?; z5 H7 U
// 获取分
4 ]5 N/ N& o( T: x&gt; data_test.getMinutes()( x) h" E! F) ~$ \2 S
44* U1 q5 b5 ]" [* j2 v
// 获取秒
& \! E( L- y' i7 h8 @&gt; data_test.getSeconds()
+ i1 M9 x( S4 d43
! x- H1 t3 K( t5 o# F* z# c: g// 获取毫秒
$ A% K7 Y, j5 c: z- Y9 J. i&gt; data_test.getMilliseconds()/ w/ G% G+ b" r3 W+ R
290
/ X5 b! `# i8 u2 X// 获取时间戳3 Z+ L- z  C  I8 N- S* X% q
&gt; data_test.getTime()3 n1 m* t! P$ |, v, s" `$ Q8 u
1644587083290
. z) g* z% v5 A; U! N: a</code></pre>
) J! U- i8 r  |; z, H8 M6 t<h4 id="282-json对象">2.8.2 Json对象</h4>
$ g) I1 E, j, p  j# O<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串1 R$ s5 ?+ C' _, _1 J* j. z
JSON.parse()  // 反序列化,把JSON字符串转换成对象
6 O6 {* V% h% z5 k  Q* h& N3 R6 `/ c+ y! w/ P* F3 {
// 序列化
& A+ b+ c5 M' B&gt; var jstojson = JSON.stringify(person)
1 g8 e  C9 m& E  o+ l&gt; jstojson  
; g+ S( `; I: k8 _0 i& p: W9 i$ d4 J'{"Name":"Hans","Age":18}') I2 f4 `2 L; D2 v& M8 q9 ]8 V
& ?/ z* X& g) k, h; ^& |+ J
// 反序列化
! S9 a2 B/ D! o' B9 q, N&gt; var x = JSON.parse(jstojson)6 }9 O9 P5 ]5 D0 p# F
&gt; x6 h5 \( ~& X% U. K
{Name: 'Hans', Age: 18}
" l1 _, C6 y7 G1 v, ]9 x&gt; x.Age. p) ~$ w" k. o9 X' W3 ]( l
18  h0 C. o  \  F" o* O
</code></pre>
0 [! `! K( i6 Y& C' A) `<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>; b0 p5 f3 j# A" u. u; H2 G) f
<p>正则</p>
7 \6 }! z, X% d( ^1 j% S$ L<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
2 E3 Y! T; {' i: ~0 |5 Z; t&gt; reg1
! b4 E4 L( Y+ K/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 x9 D/ o! U' p' v5 C7 b8 y) g&gt; reg1.test("Hans666"), h, u  `! u# |/ G
true8 i3 D2 S# ]7 }! C9 _9 m0 |. u

* d! Z# u4 m$ u&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/% r3 d7 ~# A+ c! H- f) w
&gt; reg2
0 g* l) Z6 @: }3 P8 I8 d/^[a-zA-Z][a-zA-Z0-9]{4,7}/
8 U( ~+ N3 j, v5 W0 z! w&gt; reg2.test('Hasdfa')
! S9 V  W6 K% Q# y1 e* X6 E0 {true' x$ i3 w( H6 I; v" O# ]
- @7 `5 s0 z. s
全局匹配:4 N0 S' p- ~$ x& d& }. {, J# v( |
&gt; name  u2 B; n* E/ A# l- F# z
'Hello'
; w% ^$ g* X4 |, @&gt; name.match(/l/)
+ d8 |9 F  t( u['l', index: 2, input: 'Hello', groups: undefined]& X9 b2 d: ^* M5 K+ U
5 L% j& b( J+ h" C# a9 ~' L  |) ^
&gt; name.match(/l/g)
( Z  b, t; A5 N9 L% r(2)&nbsp;['l', 'l']
+ i7 y$ ?0 D- P" V1 k5 K// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配8 S5 R" u3 t; Y$ _7 m2 ~
/ Y7 Z2 ~8 S3 G* U3 v' T
全局匹配注意事项:
  g- E8 S) z$ ]% l&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
4 E: _5 {6 E; A" O6 F+ _& y&gt; reg2.test('Hasdfa')
( V! G* }0 b. |true
- \7 [4 R$ Q' U- d* R' N+ `&gt;reg2.lastIndex;
5 r0 r# N" K. p; s% E6
% b# Q7 T4 O6 R$ C2 D&gt; reg2.test('Hasdfa')
1 L* a1 @4 x6 q7 n, Pfalse6 L" L/ F( J+ t. Z" w& @" H& H% D0 |
&gt; reg2.lastIndex;; W7 ?2 \/ U4 B, L: f" ]
0: F( }! n: G9 o7 m: `3 [
&gt; reg2.test('Hasdfa'); e% W% b+ M) U  r
true
6 ~7 a& F! |; b& s+ L: o3 z# T&gt; reg2.lastIndex;: |6 [: c9 `' L/ r4 B. B
60 J" u. x6 W. I% e" G! w
&gt; reg2.test('Hasdfa')
9 H+ l! F. c* hfalse
3 l. H: V/ g& x2 v! o&gt; reg2.lastIndex;
8 S0 k% e" P  P1 H7 m) p0
2 G$ s6 T: _/ `  Y- }// 全局匹配会有一个lastindex属性
9 M  S; ?- E% Y  j& X  h4 I&gt; reg2.test()4 [& ?1 X" j! q6 _' A
false
8 H. V3 b* y7 v/ B5 A( U&gt; reg2.test()
: |: W: Z5 O( e6 V5 {! _true, l+ ]1 C- G8 X
// 校验时不传参数默认传的是undefined
+ r" t3 D8 i: v, l</code></pre># t+ ~% W  l4 O( p6 p
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
7 d, a) s! Q9 z/ q9 p<p>就相当于是<code>python</code>中的字典</p>
) H+ }8 H" A0 B$ F& E<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: n3 {( N/ E. g2 w; V&gt; person
$ L* R# }0 F7 _' T) l4 N{Name: 'Hans', Age: 18}
- \* e$ u* l+ g&gt; person.Name- V, r' w, h' l/ Y" P2 ^$ {7 u
'Hans'- E! \4 l& p/ M3 y5 _8 u
&gt; person["Name"]
5 p/ f1 t! [* E  \  ~'Hans'+ [2 H# h& D4 ^; w- a2 \- p
* ^8 Z9 y" ^, X. B1 O" P( B
// 也可以使用new Object创建
/ U4 K; u" O) q( @; ?&gt; var person2 = new Object()
9 F5 T) Y- ]) q7 Z. o4 f&gt; person2.name = "Hello"+ V$ L* w5 B; q" B; ?
'Hello'
( T/ r7 F1 S7 h; i&gt; person2.age = 20
: x( B; ^) x9 j& L* E9 G20- H  r$ p1 @2 ~6 b
</code></pre>* K0 p  }/ e% o+ t9 a' G7 S
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>& C8 U6 V+ ?% a; B2 e
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>3 i  Z4 S2 J4 t3 x$ j/ g% l
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
/ D0 k% m9 f' j1 Q. H+ f( O<h3 id="31-window-对象">3.1 window 对象</h3>
- G! g! j; h) J  y, I<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>' t( L# t6 B5 z5 W* Q- [
<pre><code class="language-python">//览器窗口的内部高度, B' W+ H/ ^: D4 j) r6 o# D( }& J4 d7 r
window.innerHeight : t6 X1 y5 N4 l+ Y
706) Q9 ]) @, W6 p2 |8 ^) r
//浏览器窗口的内部宽度0 {) h' g) |  n) h2 l4 g
window.innerWidth
* q/ B  j  {7 V! w0 j; H! O1522! [0 Z+ U# D0 P
// 打开新窗口! {. J& a  [7 |% ?+ R
window.open('https://www.baidu.com')
; r  `/ a' T$ @& l4 JWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
. `7 c# T: N  }0 R0 {5 ]// 关闭当前窗口: w7 e4 a6 d0 j7 i
window.close()
& p/ G5 L; x% a//  后退一页+ N+ t9 G' h; P
window.history.back()9 `7 p3 ^' X- _2 z- r; `% U
// 前进一页7 a0 Z; F4 M& N( N  u) ~
window.history.forward()
& B& o- A( m- N8 u* v! G//Web浏览器全称2 V- P' }# U  a" i2 G5 F
window.navigator.appName
) x2 r' J( I  Z2 S2 P6 M. {/ L! Q'Netscape'9 U; n8 K2 N& y% {8 D9 y
// Web浏览器厂商和版本的详细字符串' F6 v# I) c* V2 Z
window.navigator.appVersion
6 W: B  o0 U9 e0 y4 h' n'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'* [* ^& Z- V; h* B3 H+ m2 f# @
// 客户端绝大部分信息3 D% S8 b6 l8 {/ `4 [. Q7 i3 a
window.navigator.userAgent! @: p# ?9 }4 Y, X  C
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
/ T0 l% m, `0 V6 ^- T// 浏览器运行所在的操作系统
0 O( I3 D7 C8 Y/ V: d: t  y7 v1 _window.navigator.platform: \/ t5 _7 B7 G% ~
'Win32'" }& P% k1 \0 I' m" h) I

. K2 l* P3 [) B  o//  获取URL
. C9 o6 p* Y7 o( f* i5 Z4 hwindow.location.href
2 l& ~4 w$ y2 y  ]3 [0 A$ `$ r/ f. T// 跳转到指定页面
' H  ?9 w3 P+ Q$ g" H- l$ J8 Nwindow.location.href='https://www.baidu.com'# ~- M8 M( I+ z8 I: _: R. A1 s; [
// 重新加载页面
& r* f* n0 p: c& o0 Qwindow.location.reload()
+ d3 A) k) z: {2 q+ {3 j9 r</code></pre>
" q: g6 Q; f' @4 P7 h<h3 id="32-弹出框">3.2 弹出框</h3>/ s+ E5 O! k% N& Q/ I
<p>三种消息框:警告框、确认框、提示框。</p>
: {; X; |- E* U- S, e) ]! h<h4 id="321-警告框">3.2.1 警告框</h4>
( n9 X0 o; |2 f<pre><code class="language-javascript">alert("Hello")0 i6 H0 j0 g7 I( G  r8 G3 [
</code></pre>
) J$ A; L. Y0 m/ Q$ x4 A<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
7 H8 b5 H7 v0 H1 `1 M<h4 id="322-确认框">3.2.2 确认框</h4>
& O" L4 ]/ p* y$ \  w/ Z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>! G% R0 k8 R0 A8 W9 x5 _
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
4 n, j; J5 @5 f9 n, ktrue( c  W8 G4 z6 e4 U+ a: L0 u
&gt; confirm("你确定吗?")  // 点取消返回false
' H0 i1 @* Y: i% ^% wfalse
" M  V" N: }. K) ~</code></pre>! _2 H, g& @2 C' z+ R* M9 C
<h4 id="323-提示框">3.2.3 提示框</h4>
- n+ m( [* f& L% X' m+ D<p><code>prompt("请输入","提示")</code></p>
" _0 t5 m- Z  i7 S0 }" b" Z+ S<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
0 w+ W& L5 W  I% A: N<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
' \$ p2 v( [  X: ]<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
% S- ?9 W- O7 k1 j: d& l$ N# y<h3 id="33-计时相关">3.3 计时相关</h3>
# _* Y/ ]3 m8 k3 y/ Q6 y# u6 p+ n<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
& Q* z: W  |# C* P" M. u<pre><code class="language-javascript">// 等于3秒钟弹窗
% W% D) o1 f8 M7 hsetTimeout(function(){alert("Hello")}, 3000)
& J: U' r7 A/ _2 c- _: A: L2 V% y! @8 {% n( G
var t = setTimeout(function(){alert("Hello")}, 3000)9 y0 T) T9 \  V, e* x
8 p3 {3 ?( K1 D# O' Z; I( c
// 取消setTimeout设置
/ d  H3 V& `0 ~7 TclearTimeout(t)" c  v; Y3 B/ N2 V0 V0 v$ D
</code></pre>
- M6 n$ r$ ?, d. x+ A$ U<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
  {9 m2 u. q4 G<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>* G/ k/ V( I4 K1 ?0 A
<pre><code class="language-javascript">每三秒弹出 "hello" :' F) h6 h1 G1 W
setInterval(function(){alert("Hello")},3000);9 R. ?/ I- R: W- C1 i
</code></pre>3 \/ s$ S8 ~8 I4 O4 C; ?) N
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>2 u+ H' Y1 D$ t8 K; l2 G0 ~
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
6 u# H7 T( B3 n% n) M//取消:: D2 P5 g) d- p/ L
clearInterval(t)
/ j7 N) s& T# x$ k% T7 M, v& q</code></pre>
9 R# V9 L( L( Y# N
4 x7 C+ T" l8 H) Q' i
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-9-2 23:52 , Processed in 0.383001 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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