飞雪团队

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

前端之JavaScript

[复制链接]

7994

主题

8082

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26312
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

7 ~1 S9 L0 t3 w6 A- k: D<h1 id="前端之javascript">前端之JavaScript</h1>
0 w( c5 \! [6 X3 Z+ V( b7 B: o<p></p><p></p>0 _7 e% M' {' {
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
' F' w" D( `7 ~/ C<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>/ C( b$ r, e" i( ^* F
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
2 v4 b' ^: q8 A7 F# Z) [+ ]1 B/ L它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>! r3 @- _) x4 r9 L1 t% b' @7 K
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>- V. p2 F7 O. C8 \9 z" `* Z, d
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
; L% C3 a  \/ H% x7 l<h3 id="21-注释">2.1 注释</h3>
0 F8 l. d# y% O! P4 ?" \7 G<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
% d2 n" Y+ w: U' N. c; D0 N; r1 q8 t. }9 @<pre><code class="language-javascript">// 这是单行注释" Y$ d4 q  m: I1 e

6 y5 A7 M6 }. o/ j3 ]* [  |: E% ^/*- I" J* l$ B6 ?4 i: b* Y, s
这是多行注释的第一行,, P( f' z; s* C
这是第二行。% B+ O# o7 q/ H. `# O% n2 d5 J
*/
! S! B; ~4 }3 R  d) n</code></pre>* p* y2 z1 W' i8 [+ \5 A
<h3 id="22-变量和常量">2.2 变量和常量</h3>
/ @( m4 r  l5 D* N<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>- ~+ n& D: A3 J2 a$ g
<ul>
" j2 _5 X( \! m; K* d- W- i<li>变量必须以字母开头</li>
$ ^5 v5 c% F. ^+ i( k( ~<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>* p5 ^# x, \, \" X5 i# _: |$ M! m0 t
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
2 W' p. ]8 y4 U+ j) b" }  c1 U. t</ul>
: e/ M8 B0 b8 u! G6 O<p><code>var</code>定义的都为全局变量</p>
  v0 N1 d& ~8 ]$ w! T<p><code>let</code>可以声明局部变量</p>
. O4 B; y3 G$ G( f<p><strong>声明变量:</strong></p>
, R3 |, C& k9 s<pre><code class="language-javascript">// 定义单个变量
* F( U4 c+ e8 h8 u& j&gt; var name* ?1 K: M1 x4 ]( s$ ]' I
&gt; name = 'Hans'
$ @1 h, J, H0 V; l% d//定义并赋值
; E1 h; u3 _& u. ^0 V5 G&gt; var name = 'Hans'
! I) I. o3 I, t8 P4 v$ |/ _1 b&gt; name  Q- H. V) d. ?3 u8 Q% v/ R
'Hans': S, O' W/ E8 h  f0 S* W* W5 e! L* _. {

; C( U  z3 B4 v0 o5 e// 定义多个变量
1 d6 ^' C8 G* v$ i&gt; var name = "Hans", age = 18+ j  r+ N( L& l
&gt; name8 \/ B6 n" |* }
'Hans'# n  y. B7 N4 m9 ]0 w* M
&gt; age# {( N. J- }: X( g/ n, E& v7 x
18
0 O& Z/ H$ C# S2 p' D; W/ E8 W; X6 |
//多行使用反引号`` 类型python中的三引号
! n, k' d$ Y3 e9 {8 d( n$ F&gt; var text = `A young idler,
" i) k7 E% B) M3 ~an old beggar`
+ z; c5 ~% B1 F5 `$ d% I&gt; text. }' i' j5 D# j7 y7 H" k$ j
'A young idler,\nan old beggar'6 y) L/ R3 W7 b  j5 p* A/ w, s# n
</code></pre>2 d' @1 z1 ]8 G
<p><strong>声明常量:</strong></p>/ ?  Q2 r* E  v0 C- T
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>) e( F3 c; {! `2 F
<pre><code class="language-javascript">&gt; const pi = 3.14/ \, E9 h# I& Z5 d0 z( _
&gt; pi$ D; R2 O4 m3 Q- v. F
3.14" |% ]2 y7 ]- |! R5 \! A2 b
&gt;  pi = 3.01  Z; f9 a% Q0 G; Z
Uncaught TypeError: Assignment to constant variable.( b1 d1 b- S/ G" Y3 z# v
    at &lt;anonymous&gt;:1:4
' x% {: }, [, ]# T5 t/ E! Q& W( X5 ?0 P! ]
</code></pre>1 ]7 [- j2 X% a9 U$ d, k
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>6 i3 R# d7 o$ z; L' T
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: |. D" t4 K: Z8 C' h<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
$ x8 [! y0 ~0 G4 I<h4 id="231-number类型">2.3.1 Number类型</h4>7 q5 Z1 t& L* F4 S! C3 E: S
<pre><code class="language-javascript">&gt; var a = 5& l  T% O* R. X5 N3 W* j8 o) n) X
&gt; typeof a   //查看变量的类型  
9 E8 i& Q* ^) vnumber, I8 f! I9 `4 @) I# p
4 w! h2 a* C" q/ R; j0 P; }
&gt; var b = 1.3
7 ^0 q* i# Z' X9 p&gt; typeof b/ I7 \  ~6 x. @( u
number
* Q% L" @  s. P. v: d! z/ D
3 M8 N5 Q# E8 j1 X+ V( u// 不管整型还是浮点型打开出来的结果都是number类型0 Y; V7 n+ x# S" y

9 ^* O% |3 B7 B! ~8 M/*! j; y! J( S$ [* Y* g) O- [/ p
NaN:Not A Number
% ]/ h" u( r! j& \: K8 FNaN属于数值类型 表示的意思是 不是一个数字1 w* f0 W- w6 b" c! O
*/8 O6 Q- Q9 f$ `0 a
! H3 q8 e. {1 G: z) m! K5 i: {
parseInt('2345')  // 转整型
' @1 i, i5 i& o/ B8 m. K$ b" U2345+ R; `% w% [' U9 z! d4 A' B1 m) L
parseInt('2345.5')1 \- V/ N' T! y6 h8 t" x9 N
23452 _( w" `0 U2 o* k8 v  Z
parseFloat('2345.5') // 转浮点型" R4 ]) q. w+ {/ m  i0 X
2345.50 d3 A, J( \# P- v# Q
parseFloat('ABC')
: m# F- q/ B* w/ A$ b+ `8 H4 RNaN0 p  T/ F% E/ o0 c& R$ m# F
parseInt('abc')
+ T, c1 X# x+ G: C8 g) \NaN
' f* m. H2 J3 R. R# O</code></pre>6 x) g1 p9 G2 V* M. x
<h4 id="232-string类型">2.3.2 String类型</h4>0 B9 J) O1 D, a4 J, N! J
<pre><code class="language-javascript">&gt; var name = 'Hans'( K# `/ D5 I1 [* y* L0 Z
&gt; typeof name
5 j3 Z8 x$ U3 N: z4 d'string'! b! ]" y8 W9 f1 z
8 Q6 d2 S# j. e. V# X) i3 S
//常用方法
* y1 ~& r6 u5 z1 u% g, |// 变量值长度+ J$ Q. I0 I0 ]$ |
&gt; name.length& l: w% u+ [$ C/ G
4
% n: I' t- ^( I6 w  ~( [// trim() 移除空白- [. y0 ^" z) G; Q) k, A
&gt; var a = '    ABC    '
  T. z& n$ @3 h3 N&gt; a6 a8 m" |3 L: [: v5 \# g
'    ABC    '
+ U7 l( x" e- n6 a# g&gt; a.trim()  D5 U8 x* s2 E8 C' Y5 z
'ABC'$ G. b$ X! N/ U1 U# f6 }1 V
//移除左边的空白
& h3 S1 Q+ H6 h; T$ j2 T&gt; a.trimLeft()
- s' ~% H1 @# }  R'ABC    '  B% d* g3 V8 P
//移除右边的空白
5 ^# a5 {1 }9 Y& h( R) Q9 A&gt; a.trimRight()
  V$ ]& E5 b. y1 \- b2 J3 V'    ABC'
- P" l( }9 F) C- [
' ~7 k( T9 A3 Q; i! X5 S& H//返回第n个字符,从0开始
5 o; Q$ D) g6 j, f&gt; name
( Z  |; C. F' ~'Hans'
* Q* V" q- Y% j& C&gt; name.charAt(3)9 q. ~2 x( h! e" J
's'
; L5 H3 k  f3 A, z$ `&gt; name.charAt()+ ]# K) Q% o6 t! v: b  y1 o: U
'H'
  l0 q. O4 _0 X&gt; name.charAt(1)3 i/ Q: I5 T* W1 F) }0 ^
'a'
7 F! }$ C& q# {' l1 @* M7 ?- G5 I8 ~, F! I# ]- z7 p! R0 b
// 在javascript中推荐使用加号(+)拼接
$ |% }: t2 ^+ a4 o+ k1 S&gt; name
  `7 b# m6 _. p' E'Hans'
4 w' U4 }1 h3 p" T: u6 D: \* `&gt; a/ J* V, Z. h' X* l  j8 `
'    ABC    '
) Y' p2 Z7 T4 e- a7 e( j- }&gt; name + a
7 R% \, {! V0 `'Hans    ABC    '% ]/ H; m* M, b* k2 }
// 使用concat拼接
( |& @: f( F# C/ @&gt; name.concat(a)
% ?3 `' t" o3 p. R% u'Hans    ABC    '
' U8 o1 o1 r$ W1 M# O/ Q  t
- K& B  A6 K  x" R//indexOf(substring, start)子序列位置  a: l  h5 @7 v: M

/ M. H1 Y0 H) R1 t  A* _7 ^( g& _&gt; text8 l& [6 C& d; g) \; r( P
'A young idler,\nan old beggar'9 E# q- q4 Q) \6 N0 \: Y, H
&gt; text.indexOf('young',0)8 T" ?. m2 X2 G8 |$ q( E7 A" O
2
1 {8 w4 ]1 B1 A" U0 S8 ~. [- {0 w  s. m: y5 L9 U
//.substring(from, to)        根据索引获取子序列. b$ F5 Q+ ?$ i$ H
&gt; text.substring(0,)# d8 w. T' D* ~7 ^" a+ s0 T
'A young idler,\nan old beggar'  ?6 L' h) q: i. r
&gt; text.substring(0,10)# g' i1 r' l4 g
'A young id'
/ U; s6 `# a- O2 e. g2 h8 _( y2 Z" q% Z* d! P
; W1 D  f* L7 h6 n) W( @! q// .slice(start, end)        切片, 从0开始顾头不顾尾
) e  q9 ^* e4 H: n( K: ^+ s3 U$ Q&gt; name.slice(0,3)
( y* p9 J# n7 R& o: j! C7 _8 \$ I; Q4 G'Han'
& G! Z9 j, D' J/ \  w
0 b' \5 h8 d) {8 a' o# W9 O// 转小写
- A0 M+ S/ `" P. K" e&gt; name* R2 e$ [& ^3 h
'Hans'! `+ t" D- M8 ?, E3 i0 d2 u2 n' I
&gt; name.toLowerCase()
0 R) T5 M' C$ [5 J  k5 o& w'hans'1 }: O, h7 g  ^2 A5 @2 s3 v
// 转大写) ^8 `, ], ^, k8 @, d+ |% [8 i: @
&gt; name.toUpperCase()+ ]/ T6 G/ a* D  p; A) |
'HANS'6 O/ A8 ?, z: K' y' X( s) U
; A+ A- O9 d+ \6 e' p2 Q0 {
// 分隔0 ]/ Z0 J/ R6 w5 Q$ _2 L5 g- |4 D
&gt; name
5 v$ n8 i- }. M. g! b8 c8 j: C, v) ~'Hans'
( ~! m2 r; f& ]; W3 V&gt; name.split('a')
3 i9 H3 E+ k4 G0 v2 G(2)&nbsp;['H', 'ns']
: Z; I5 n' t8 x( c</code></pre>
7 t* J0 ~7 B. q6 \! ~<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>4 S: U& b' }1 j0 H% O2 v
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
& k/ r& J" z+ n+ P<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>! f6 E# d$ v1 @  k0 C$ D8 w
<p><strong>null和undefined</strong></p>0 i& g! {$ |4 f$ u3 N4 Z% B& Z
<ul>
0 T0 Q& j, B) g. Y/ `. n% t<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
/ D5 d% p( n" K% o1 w: K<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
. w6 l' u& \! p</ul>4 Y" P6 B& G  g& x
<h4 id="234-array数组">2.3.4 Array数组</h4>
- u% w+ f* c5 z0 p2 D% E4 i<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>" k' a8 g4 Z, [9 l$ t: \
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
9 I  l( i  f% o, \# d  \  P. U&gt; array1
! T1 [# M7 j! h2 R, u4 s% L7 F(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; Q4 g8 y/ h9 E9 N&gt; console.log(array1[2])  //console.log打印类似python中的print/ ]; H# t% X/ b: F1 P# |
3
. j2 x8 ]) a7 {$ i/ A. m, e1 Q// length元素个数
: @( y  T& M6 m$ w&gt; array1.length
9 Q+ }/ q8 s: }+ I9 A& h0 T6
1 ?2 q* S( y  ^: g4 V# R2 b// 在尾部增加元素,类型append/ `! S. ^, h/ P
&gt; array1.push('D')2 F1 p5 t, y4 P9 e$ c$ ~
71 r9 {" J; Q" O2 A+ i  D6 T8 a! `, M$ c8 e
&gt; array1
5 f; t% p: j. D(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']  j; z+ b- f1 K
// 在头部增加元素! L4 x  O# i5 Z2 g' K$ M  y+ M& V
&gt; array1.unshift(0)5 ^9 l( v% y- F4 N! K3 {
8
/ Q  ^# q6 G- Z&gt; array1$ p$ l. W5 U( W/ m) G
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
! {9 u( ?) G( M/ f
2 F; l2 v4 X7 f$ Q//取最后一个元素
+ m) _; `5 R5 ]3 I: u&gt; array1.pop()7 t+ j. B2 [1 g0 S, U
'D'2 n* X) I! M0 ~0 c9 v& Y- o" [  i
&gt; array1
1 `: d" M/ M  |(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
# @4 a( d( @/ h* W//取头部元素
; _8 Y& B' G& K&gt; array1.shift()
2 [, k7 U! T- p" N2 y0
, w8 u0 C; F1 ]/ v&gt; array1" O, g' U; I- ?' R
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 w0 f' K5 S) l' _( s6 B) [% r; v. E* I
//切片, 从0开始顾头不顾尾4 M  {) K. b5 z& u
&gt; array1.slice(3,6), f2 w; s" `- [! f6 G6 T, m; _2 r
(3)&nbsp;['a', 'b', 'c']
6 ?, M2 ?. L- W8 r# u, l. |3 T// 反转
* E$ A7 k# f7 m1 ^* y&gt; array1.reverse()
4 w% p2 l- o8 z( a' {: O/ ?0 u(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
0 D/ z- i2 |; a// 将数组元素连接成字符串
# s  E( F! {0 b2 q, m) J&gt; array1.join() // 什么不都写默认使用逗号分隔% @& [9 L5 X# h7 d% [  b; `4 N
'c,b,a,3,2,1'
9 I3 r" |5 c( W+ p3 _9 H&gt; array1.join('')
3 q: Y# @) s, Y3 \'cba321'
1 v* x& I; o7 T1 Y&gt; array1.join('|')
* H" P/ V/ Q  I'c|b|a|3|2|1'% N4 N- |- K' W

- w: c4 [7 n7 V3 S3 e0 r6 }, K// 连接数组+ k$ Z! [, [8 ]; z% \
&gt; var array2 = ['A','B','C']5 `& D* S, T; T, ^$ F: \# ~1 Z
&gt; array1.concat(array2)
. |( m4 _/ k, x1 l( g(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']+ D4 _% U+ q+ X0 ?3 l# W" |

+ A- O7 v5 I) D) ~3 M# x// 排序
: F* W6 `5 f. S8 U  C&gt; array1.sort()8 V6 R5 Q5 {5 \
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 W3 R' U+ T$ n0 I: |

' U( Z0 r1 N& i6 z. Z; e# p1 Q- n// 删除元素,并可以向数据组中添加新元素(可选): \6 T6 ]4 T3 ^+ u3 T
&gt; array1.splice(3,3)  // 删除元素# S1 i& a- ~( R
(3)&nbsp;['a', 'b', 'c']; U' L, ]1 r1 z8 D3 x7 W8 h- c
&gt; array1
8 ~$ _+ b; X/ ?  @: {. j(3)&nbsp;[1, 2, 3]% a4 K8 p) g2 v" C  ?
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素& u) }5 }" w+ A! y; g" C' _! q
[]
- y: A! v8 `4 y7 J* k. _$ E&gt; array1; c! `, O  m& Q9 y
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']' p- |, _! Q+ ^- ?
0 [4 j1 ]# J1 Z0 \: \
/*
' ?, p8 i. L8 ?' t! D# s  J$ x" Jsplice(index,howmany,item1,.....,itemX)1 I  ~, ?7 K2 C6 _
index:必需,必须是数字。规定从何处添加/删除元素。
- ]: Y3 V8 E1 h; L5 e& [howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。: ?- `& e5 M* V$ E5 h
item1, ..., itemX        可选。要添加到数组的新元素  d( n& f* f/ y6 J! ~6 G
*/2 U; ?: o; s" w9 Z0 J( j6 T
4 w+ ^) p' @  S* V" W
// forEach()        将数组的每个元素传递给回调函数
; r* C2 C3 `/ w& v7 {&gt; array1.forEach(function test(n){console.log(n)})2 l. i$ }1 J6 O  j
1. s1 j4 K9 ~8 H( g' G/ @
2% R7 _+ [9 _* Z7 {
3
' h2 d+ ?6 V9 U  u4 X A
# ], e" S4 f  w. I$ P/ y& I5 x$ {$ A B
! j: J/ l$ g, t; r+ I# B C8 O6 s6 t5 h! y6 ^' Q% w- o+ w/ P8 M
// 返回一个数组元素调用函数处理后的值的新数组/ b# H# y& [3 v' {3 ?5 T; k: q
&gt; array1.map(function(value){return value +1})$ e" w5 W6 U6 h) c) P
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
$ A4 N4 L' Q5 D( O</code></pre>0 H8 e0 ]$ a( L0 A% C5 E
<h3 id="24-运算符">2.4 运算符</h3>* U5 Y2 ^2 A$ j) q
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
. C0 v+ v; o7 k<p><code>+ - * / % ++ --</code></p>
/ o" D2 q% Q8 ^5 l<pre><code class="language-javascript">&gt; var a = 6
( i' z* B1 Z: A/ l&gt; var b = 3
- u, K6 f' ?$ t4 I" ^// 加
, ]6 x8 Y# i6 w6 a&gt; a + b& ^: f! H" K+ x! M
9
% l: E* h! \' p2 C+ n" f% s// 减
$ i$ z# A4 Q; e9 c- \. ?# p9 V  O&gt; a - b8 M' K8 J0 l* L, w9 e6 P
3
# Q9 p5 Y( H6 W8 m& U2 ]) u// 乘
; ?- a8 m  h: _* k( w&gt; a * b
4 O; O" Y& w% n( Z18
, n+ k1 K4 a( a7 r$ H$ M& F: Q// 除
" ]; @- f4 s' q+ U1 w&gt; a / b
0 d- \- d+ _/ e- \  r# f2! w6 p5 I2 @! E2 Z$ x
// 取模(取余)
& [' ~& f  F- ^&gt; a % b2 V7 `& P: d: x1 s9 g! e1 w8 Q1 ?2 E
0
7 r2 N& ?. ?, X2 \8 A// 自增1(先赋值再增1)' e/ B9 I2 d0 o5 D- R  N
&gt; a++
$ \5 q8 e& s. ?  x6# W# r6 P3 ?) V$ V" ]
&gt; a
0 r( R0 M$ _) E' _7. \& M; R7 [" O: \/ l
// 自减1(先赋值再减1)
0 P' B' f* ~( x0 [; O&gt; a--
/ M. P+ C' |5 t/ F7+ P: S5 N. u0 O7 _
&gt; a5 S9 k$ s! p: o% k* ?5 O
6
% Z# `8 M9 o( A# K) i* Y// 自增1(先增1再赋值)$ _* R. w7 U) v" t* g) _" }
&gt; ++a
- i" I3 W/ q" K# b76 q, r' C) ]  H) x. C* S! _
// 自减1(先减1再赋值)
  P8 R! h: E& t- u2 Z&gt; --a
/ d, m, X9 G) Z6
- K. d& ?" j3 q  C&gt; a- c# ?3 _  E& ~" C* W; H% `
6
/ o8 n/ E7 Z- y* l/ Q4 A0 H1 M& ^8 ?# S/ y6 J) t
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
& x2 K0 ^, n# B8 j/ c</code></pre>2 A  A' y. D( B. d
<h4 id="242-比较运算符">2.4.2 比较运算符</h4># _  E0 s) f; T, ]
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>4 ^5 G  \" @, c! \, ^7 W5 ?5 C
<pre><code class="language-javascript">// 大于7 C. z( d, k& R8 M' _
&gt; a &gt; b, }" y# o$ k# ]' S$ T
true
5 t( I0 S# o( A+ a' @8 K7 A// 大于等于
" c9 X5 w- U4 F% |. [$ i- b* Z( a&gt; a &gt;= b4 [- ^$ U, T& `( O0 `! N
true
0 u+ W3 c( j1 B# Y; ]( H3 p8 \// 小于
8 }- v  C4 E; U. L3 j- N&gt; a &lt; b
4 M5 N) p( Q, o4 U& {false/ _! c0 ~4 h! V. L% ?) \
// 小于等于# u9 d& t& c( c+ e
&gt; a &lt;= b
: s- l( n3 n0 c1 Y, F8 m- yfalse
  O* K4 L* u/ c( A1 _8 r5 }// 弱不等于) M( ^, q7 h' c* M
&gt; a != b
. J. z5 U9 I8 Z" C( ntrue- i9 v2 \1 Z" I" \, f7 l# n; Y
// 弱等于
5 v- i! y' `* f$ m( p5 r6 H/ N&gt; 1 == '1'' d7 h7 n5 q) C6 e7 Y6 P
true
  m( E/ L$ r5 G* x7 I2 e6 \3 @* p. I// 强等于/ L5 ]+ k. B" u! h
&gt; 1 === '1'
& E6 z1 J; D) w) N" Sfalse0 k1 S; [4 o2 R1 t- e( O
// 强不等于8 S: e# y  u! U2 T& P6 F( Z5 v
&gt; 1 !== '1'
7 J8 C8 v; z+ z+ j7 U5 K+ ~true
0 |- R! l4 {- e- n
" z$ z8 _& z5 e* o8 w$ @  C/*% |7 c+ c2 a! r2 b4 c- C
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误% r. g  B/ u" }: I5 ?. X# X
*/- g/ `+ a. G) Z. A) P
</code></pre>
9 Z5 I% E) Q1 B& ]<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>% p: o$ ]/ ^+ A% B. C& u6 Y# D
<p><code>&amp;&amp; || !</code></p>, E+ B. f5 b+ Q5 x  F6 u
<pre><code class="language-javascript">&amp;&amp; 与
- M# V$ p% R$ W+ `|| or 8 i; l0 {% V2 c0 S9 d4 u- n: i
! 非
9 t* U( s& d, J0 e1 f8 h: }# J</code></pre>7 M4 Y: K7 ^$ s3 H" e: ?7 j
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>+ r3 k% X: |, C
<p><code>= += -= *= /=</code></p>
7 j  R% {/ P. u2 F& d) y1 W<pre><code class="language-javascript">// 赋值0 o2 K' K9 Q- g9 n
&gt; var x = 3
9 i& T& Q" h5 n4 y" }: [// 加等于
4 K$ c% L5 }) R&gt; x += 2; I8 k! [7 x- D, d" J/ m( j
5
. v" Y7 c  ~: ?( i- Q4 T( V) o// 减等于9 h* E; Y% [2 b) @" k4 Z
&gt; x -= 1
- v, H# \2 c* m( i4
4 V2 h1 k# H1 @// 乘等于
$ i9 e/ g. d; t/ {4 P, r&gt; x *= 2
7 q! [: _# v- y! {, Z8
% x* A4 Z! e. ]- ^. u. r; l// 除等于; y1 W, Q1 ^- J
&gt; x /= 2
9 G" B( s' f; Q  u7 q7 h9 z! m4# S7 [. }  J. m3 H" \( X0 D. o+ M; z
</code></pre>
+ C7 O" X/ h5 Z6 m7 ^<h3 id="25-流程控制">2.5 流程控制</h3>
/ P* U5 a1 H; G% z1 p0 b<h4 id="251-if">2.5.1 if</h4>$ Y5 d, c# c3 |
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
* u  Q/ i2 W7 s6 h# B6 U
2 |; l6 B7 u6 s* g: U, ~& a&gt; var x = 3+ N7 }! G, ~7 \/ G7 X4 s8 {) w
&gt; if (x &gt; 2){console.log("OK")}
7 W- k; c2 x* [3 f! B. L# w' s OK9 J1 D& i1 k8 _' Q

$ _7 J& f1 H- C" J# u& R2 K1 I! R2, if(条件){条件成立执行代码} / r6 m( G) |1 z5 Y7 a; B
        else{条件不成立执行代码}
3 y* r( Y7 l) _. n# O
7 k4 x" h1 _3 g4 ^&gt; if (x &gt; 4){console.log("OK")}else{"NO"}* A) `" A& b) u' P0 y/ |7 w
'NO'
: q( ]# e4 @6 `. I# v
+ L! H9 V& |; [8 H* [3, if(条件1){条件1成立执行代码} 5 L3 G; U: d" u. A/ H+ D% G4 h7 ?! [
        else if(条件2){条件2成立执行代码}
; {: q3 u! d/ L) S* M4 q! }9 p    else{上面条件都不成立执行代码}7 Y. d( F# u9 }$ e
, a5 U, {3 e3 l) ~/ Y3 P$ k5 t1 k
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
- c& j1 k: b6 a  {) W Ha7 q. z6 A$ |* g/ `
</code></pre>
2 S8 N7 i# A, t; V  H<h4 id="252-switch">2.5.2 switch</h4>
% v! ~. ]' S; s<pre><code class="language-javascript">var day = new Date().getDay();6 P2 F/ r$ [+ N% p
switch (day) {, u: h7 d1 M! p+ @9 @* F
  case 0:
' i- {& J2 V% V1 i- |* V, x  console.log("Sunday");
5 ]' u" m/ a# q2 ?  break;. I7 Y4 k7 X! u% G' y0 A' B
  case 1:
3 L* k/ c* G; V% C2 `: u4 F  console.log("Monday");1 ~8 Y; m0 k5 l. Q. G) \- D
  break;5 S) Z% Q7 `+ D7 J. _7 u
default:
% w2 M) H! i# M7 [2 M& c& B  console.log("不在范围")3 H6 m' y! @  n  E. w) n# _: @
}+ E" C6 ?/ j# [5 o
不在范围
2 f% n9 E; O7 C- ~& L7 ]1 i</code></pre>
! y0 c, m: n( @8 ]: j<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>( S9 a6 U1 L# {9 [4 [
<h4 id="253-for">2.5.3 for</h4>
7 v, i) A  F1 K2 w<pre><code class="language-python">// for 循环
$ |5 m9 N2 x2 b2 {9 M9 h% N        for(起始值;循环条件;每次循环后执行的操作){
8 k, ?. I: |+ E+ ?0 I+ s1 V* ^        for循环体代码+ r% t" \6 ]& @, J% O/ x! m
    }+ Z6 h# f0 K$ |, W

, `: d, t# {) l3 T: P. gfor (var i = 0; i&lt;10; i++){2 l- v% U7 o& y$ v' G
    console.log(i)
6 l4 e+ G3 Y/ @: t}
  s. E) }- A: d  q; }; C% G        0
  u* O5 e: n, p. ?' b        1: E7 L* _# ~0 a5 }2 J
        2
  z: Z# q/ U7 ^- U4 X+ V        39 J' o* g2 Y4 U- d
        4
" B4 g' `! P- U4 f4 i  Q0 d        5, L5 }$ w; C8 H6 }3 k, K4 f$ s
        6
8 Y+ T8 K  t9 G        7
, }! V5 M* e  ~( y# _        8% w# _) E# k7 `& f/ @
        99 G7 W$ D, K, ?
</code></pre>
+ M/ q& g# g  X9 O/ {1 {<h4 id="254-while">2.5.4 while</h4>& Z& D, J. L( ?1 x9 e4 [" I
<pre><code class="language-javascript">// while 循环. ?2 @3 P# G: @7 I; }
        while(循环条件){& q9 W8 Q: l) N$ d/ ]# i
        循环体代码; v0 m5 \2 V4 D
    }
% L# U1 j& ^: [' e/ g! _( w+ M4 i) s9 T
&gt; var i = 0
( ~1 L" C) M' X! n# }$ ]1 Q&gt; while(i&lt;10){/ T; O# }5 ?/ v: x6 h7 l" k5 O
    console.log(i)
8 A; h. t2 m1 Y$ P    i++
, t$ v1 d, I* u: |  F: m}
! X) ^' D& u" y' x0 I6 y9 K 0; J9 @- ^, M7 O; r, ]) M
1
# M) F0 V2 U9 Y9 J  ? 2( N3 R# z& k# _! Q
3
! O. w1 Q& d* Z4 h, ~  W 4: C4 }. L: l8 V) @, X) Q9 _
5
: _! j+ e" @/ O) n 6. [3 a  c; q1 }
7! \" |! U4 H1 K. t( @* {; w
8* n* j0 ]6 A1 w, ^% M9 v
9
* j  t9 }5 C2 O6 X3 H$ j</code></pre>9 m& X$ F3 ~9 `7 Z. o# \( y0 _
<h4 id="255-break和continue">2.5.5 break和continue</h4>  [+ x" q- `9 K/ m
<pre><code class="language-javascript">// break( l* G' w  O# P) C( X7 A
for (var i = 0; i&lt;10; i++){
, ^* m- s' K* {8 p: U    if (i == 5){break}- ~# F: n: I7 ^3 g) D+ R
    console.log(i)
* s, u2 t5 O/ Y% u1 B}
; N/ {! `! e, ?9 k9 ?) V* e4 C# ^  W 0. Q9 E! [& |; v1 M
1* R% g" z" E1 ^- m
2% g1 A0 k4 q5 E( q! v" s) t! V6 f- p
3$ k6 w8 f4 k( f; z2 ?/ ~* U& R) H+ S
4% b# H, f( F% U! v- ]4 h
// continue
$ G1 G/ U, i; |) |for (var i = 0; i&lt;10; i++){2 f# j  J  v2 U& `5 z) T
    if (i == 5){continue}
) K, A) \2 F7 b    console.log(i)9 b2 F- V6 c4 P4 o" S0 p' r9 X. o
}
' B, ?  S1 O. v/ o" R7 h+ v! K6 Y 03 J' x  }( j+ O& a* U  i3 s# D
1
5 M: _. q9 R( }7 z 2
7 Z2 O. s% ^# x 3
1 q/ @: w/ X& T- |9 J; K 4+ Z& d' ~: \0 U. j3 n/ g% K
6
. b4 J2 H5 S2 O9 D$ N2 g) | 7$ P6 }+ O6 ?$ A& N/ |. }; J; C
8
" [0 `6 T& F( c9 g. [2 ? 9
6 l: m$ x8 B6 N: D5 I7 Z
4 L; ]" M8 ^# r( A* O8 M</code></pre>! T+ T( U. a* q% D: x2 M
<h3 id="26-三元运算">2.6 三元运算</h3>
* A- O% [3 Y# L( I  E<pre><code class="language-javascript">&gt; a
1 I6 X2 p) ^# z  |, Y& r6
9 V0 {- s$ S6 _3 {* u&gt; b
; W. ?* i' p4 E, d" R. ~; p3! D* v: m7 o' ^) @

$ Y7 N: q# N7 r- X* ?//条件成立c为a的值,不成立c为b的值# |) L$ n4 i, U  S0 y6 M
&gt; var c = a &gt; b ? a : b0 B8 g: c  G2 S9 x
&gt; c) M7 Z; p# k6 ^- z& [# ~
6
8 J  w5 K" ~8 D) I0 A$ M3 \  b# c4 W
; Q  L- d4 E  U3 b  E1 j' @// 三元运算可以嵌套. [0 f$ s+ g" _! r7 G- e
</code></pre>  |2 m& @2 }  x# q, \  ~" V) l
<h3 id="27-函数">2.7 函数</h3>
& H' X( v6 G- D  L" `1 b# O<pre><code class="language-javascript">1. 普通函数) w7 A0 K! p" Z7 T7 O
&gt; function foo1(){
# s% g& o' T6 g) z7 o' q    console.log("Hi")0 m* q" |8 C# U, l9 R
}# t* N/ ^8 O5 c$ \$ _! m+ ?

3 z; _$ F. Q( a# R1 q7 j/ z; K$ \  I! v% t&gt; foo1()* n2 I  O3 y8 c& v# a1 I. p$ c  t
        Hi
; U; b+ A) m; t/ S: C' A2. 带参数函数
' G( p2 I6 M4 [' l$ K" U  G8 G&gt; function foo1(name){; L1 ?6 Z, P; c' r
console.log("Hi",name)
4 e9 s) J- C. `# b' }( G}, X) @* j4 Q/ C/ u# e. b4 |- H

2 y5 J9 [6 C5 y+ Z0 U8 l&gt; foo1("Hans")
: B- V% J1 }; \! t7 y* L5 OHi Hans
4 w' P% P0 g7 f) L, _7 d7 i( l6 ^2 A
&gt; var name = "Hello"( q) [' v9 O, m% _
&gt; foo1(name)
* Z& g7 r- ~- x- h5 UHi Hello
& R% X8 P4 K2 G! `8 z1 R+ o2 x8 ]& m6 n+ _$ j# X% X. }
3. 带返回值函数9 c" O$ y: w3 _6 h% m& j
&gt; function foo1(a,b){! y0 \8 e* o0 D' c) y' ]3 v/ I
        return a + b   5 k+ C) C+ X4 `5 q
}1 X1 Q& s6 E/ R) J! j
&gt; foo1(1,2)
9 I' r# I. A' k$ P3( b2 x$ s5 ]5 e5 T% A, L
&gt; var a = foo1(10,20)  //接受函数返回值
/ f& ^5 u, c! {: l) f9 \&gt; a
% @" J/ y, x, R) i30
: _6 A0 o7 b2 v& q4 u8 P2 W4 t
% p; H$ G5 H+ b' p; R4. 匿名函数4 Q& A$ i" v2 d6 K
&gt; var sum = function(a, b){
4 ~3 }  X$ U; ?% L' G; {) B  return a + b;( y6 L$ e. U- X  r, N
}: I4 x) i) ?/ x
&gt; sum(1,2)
: {! q9 h. u3 F3 ]& ^4 f3
  Y7 Z/ A& h/ m2 z% D! t5 @3 [9 B1 O& Y0 [( g1 b- V
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱) L8 b, B1 [: a/ \: m' o
&gt; (function(a, b){
1 Y# I# [: M8 g5 S7 T# w  return a + b, L9 M  @! h  a2 a" s% b+ u$ R8 z
})(10, 20)
- G; R- ?- q2 o( J1 A+ ~, X1 j306 M8 B: v+ h5 x& u  Y9 N  _4 l

/ K6 e; _3 s0 k! w, C. B. M5. 闭包函数
4 r) D7 R- ~! v/ i( g// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
% G9 g: u3 G" l# @- ~* ]var city = "BJ": g9 P) v# I0 e. B- D
function f(){8 u8 G2 _$ O8 l4 p
    var city = "SH"5 B) A& \9 r2 V. N- [6 X# `$ _
    function inner(){
( z& z7 L2 z! ?. f& Y        console.log(city)- d9 f( A) B2 J+ q  f9 s
    }
" p+ E" `9 G! i, x4 O# n' V    return inner
3 o+ C$ h) o, y}% T! Q* x7 b7 S/ ?2 W3 C5 }/ Z
var ret = f()6 g0 G1 R" C0 s$ T2 }" @
ret()0 U& J) }/ a+ q7 A
执行结果:- P' T- X  Y# w: y7 j
SH+ q+ s1 A  n5 |' Q
( L* A* f# t5 A9 o4 ?; Z
</code></pre>+ O4 i; l$ o# i/ Q2 |1 |' {$ U
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
0 x6 f3 W0 f; W6 \% t2 B<pre><code class="language-javascript">var f = v =&gt; v;0 U7 p$ a7 I8 W
// 等同于
. X  i& K3 g$ h& G6 t! Avar f = function(v){
! i: S& [: b( s3 f2 G/ T; @  return v;
: L$ `5 P$ D" m! A: @4 t}
* k  G! S6 ?1 m* G- R</code></pre># k- g8 O, O, Y1 u9 y" J
<p><code>arguments</code>参数 可以获取传入的所有数据</p>, I4 O, J% w9 g0 L, z
<pre><code class="language-javascript">function foo1(a,b){
0 i: L% q. r* e4 Y    console.log(arguments.length)  //参数的个数 % \5 p- Z1 y0 m: d; n! z( v  h
    console.log(arguments[0]) // 第一个参数的值
& q. y0 Y* T; K! |! a        return a + b   ! i9 b1 S6 U0 r* _( m7 k, c# j
}5 D) @8 v' p4 m. r/ w# `  @6 I  t
foo1(10,20)8 }3 Z  a/ w8 ~4 Z$ X
结果:5 X& p3 P' v9 z8 b6 Z4 ~" {, E
2          //参数的个数 / k9 \$ M2 g7 s$ p, N% n$ {1 G" Y3 V
10        // 第一个参数的值( ?" N+ i  E5 z: o1 \- m. f
30        // 返回相加的结果
+ r6 C) G5 g! K. I9 k+ [</code></pre>
, V% O( q7 ~7 V- x; v3 X<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
+ h4 V! W  S/ r' _% k* R<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>* w% l( p( x& A
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>( i- Y) P; A; T+ F; k
<h4 id="281-date对象">2.8.1 Date对象</h4># h# ^8 W$ r# ?4 i- T1 t& K' t
<pre><code class="language-javascript">&gt; var data_test = new Date()
9 w: }0 d9 T1 W&gt; data_test  m! g/ ]1 V2 @3 t3 j# r
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
! W/ {' p# r. C1 B" Z9 _&gt; data_test.toLocaleString()8 v* [% Q) C. q. m4 t# C; v
'2022/2/11 下午9:44:43'4 f. Q# c* }3 ], U: {* n: M

! M0 C, N  q; Y  z1 l9 m&gt; data_test.toLocaleDateString()
2 S! \2 o( I7 M/ Q+ Q4 C'2022/2/11', S% Q, w7 b1 e4 N& P
. G, \& q- k/ I0 i3 }/ c
&gt; var data_test2  = new Date("2022/2/11 9:44:43")9 F& ^  p: R6 u; l* A9 }
&gt; data_test2.toLocaleString()
2 h# @. o8 @3 ], a+ N- N'2022/2/11 上午9:44:43'9 }. O: M2 R; o

  q9 v# Q' t, k) ~9 d// 获取当前几号+ \$ o+ e$ ?' _! ]5 ?# V) X. z* ]
&gt; data_test.getDate()
" }4 G( V6 q* Q* }11
6 p, Y6 P$ X+ [9 Z// 获取星期几,数字表示; v& H# J) K2 U: x: \( c: b
&gt; data_test.getDay()  # ^' o: x! `0 h3 o
5: B; C$ A( O/ b, o( n2 X( o
// 获取月份(0-11)
  k* R4 Z3 z2 ]0 c. m7 D&gt; data_test.getMonth()7 N5 Q4 |# K2 s2 E
1
) p5 S) D1 _: x% y3 J( ~// 获取完整年份4 I' f. T0 E# l- }7 d+ z% o! T
&gt; data_test.getFullYear()* V: N! g( k; I) G, G9 |
2022. \% B& t- N7 t) [$ S  u# C
// 获取时& P+ }, m9 c9 M: C
&gt; data_test.getHours(); O" O6 L8 w$ e) F
21
1 i9 q+ J' z3 x1 s// 获取分$ W2 M+ F, u2 L7 h
&gt; data_test.getMinutes()  T5 [; F; i2 N9 u9 J" ]
444 p1 F& _, _" W; y& ^1 ?8 V
// 获取秒+ C+ ?# e" m/ A# k0 z
&gt; data_test.getSeconds()
2 ]% x$ n' ~2 D% ]0 c: K43" n2 s+ y9 S# v+ W4 ?, \6 F
// 获取毫秒0 h$ m4 v  d2 C9 P: [' h
&gt; data_test.getMilliseconds()& q( z8 e# O5 q# g" O: x0 o
2908 M7 b, E+ U$ a
// 获取时间戳8 L1 s0 C* I0 G/ n
&gt; data_test.getTime()
/ B, A* X# J! E. M1644587083290
7 U2 k& a* t2 @0 X$ `! r. i9 ]</code></pre>
& d4 g1 M" V1 C8 u<h4 id="282-json对象">2.8.2 Json对象</h4>
' I4 r$ d; U5 x, E8 T<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
/ l& _( G! O+ A, d2 ^8 Y/ hJSON.parse()  // 反序列化,把JSON字符串转换成对象, r( k8 i& F/ c" n5 K! f! M) C

3 _3 g8 E3 b  ~1 I9 B! ]// 序列化
1 P% l+ P! d# y6 r2 k: n&gt; var jstojson = JSON.stringify(person) . H+ S" F8 [3 |7 g$ [2 c$ l6 ?
&gt; jstojson  
3 _5 R( v$ L; S/ }" D2 L. i'{"Name":"Hans","Age":18}'
$ ~# ?8 R1 T7 p8 S5 x. V7 G  w# f# x, b% c, l* X  Z
// 反序列化
! v  X6 r3 j/ F& o7 y4 f) s&gt; var x = JSON.parse(jstojson)
0 O8 B7 O% k& t* M: P  S' R&gt; x
9 P9 i. F  t, j1 \{Name: 'Hans', Age: 18}6 a/ `! `0 @% o7 b, \( T
&gt; x.Age
! {$ z: {# f: Q( h, x18  v& N6 {$ p+ ^
</code></pre>8 ]. o$ q( P+ j
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
) a  h; `# L# V3 I; X<p>正则</p>- H  Q4 V5 o* C2 B: M
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
, H1 W$ p- v" e: Y$ N&gt; reg1( P* j; ~* V( Q6 E+ ?
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
; V3 S( C1 G: u' K4 z&gt; reg1.test("Hans666")% m4 b5 |, l. ^8 I1 K' b
true$ j, V6 e- n0 F: D* G* p1 K, O# K

* C8 M5 k- `1 C  L1 b8 {5 R  |&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/( N$ H) \. ]4 M8 f6 j) w- ]
&gt; reg2
! {; W3 r1 B& S' s" c" F) ]/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 F+ ]2 h. k/ ?) V# s
&gt; reg2.test('Hasdfa')7 n& l( W6 _7 r
true
* V0 _4 n' F- S  I8 {* n" Q
( h" ]3 M% p: G6 J6 [3 s4 p" d+ o全局匹配:9 s5 ~2 k) G) m. ?7 N
&gt; name" |9 @% E/ F+ m: [  u
'Hello'4 K' ^8 K  l( i
&gt; name.match(/l/)% O/ U) Y; p' g7 S
['l', index: 2, input: 'Hello', groups: undefined]5 @( |8 ]! r* J/ U8 r" w1 B
% |1 l1 [0 `! [! m/ U
&gt; name.match(/l/g)% d9 e+ M6 S, W  w9 q, y
(2)&nbsp;['l', 'l']# p* x8 J8 ~& ]9 E- @# U
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配# s  w3 @: m( K" u: p
8 |$ k! H8 L/ y9 _3 c2 B
全局匹配注意事项:' F- z+ C6 @7 H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
  Q- z, j  W9 s+ c9 P&gt; reg2.test('Hasdfa')
+ a$ s2 u/ a, R% c: D% P9 s9 t9 ?0 Mtrue
2 N4 R+ u5 {/ H$ {8 S" f3 }&gt;reg2.lastIndex;; {& q/ P2 p6 Y  }+ w) G
6# D, [7 Z; \( c2 T) F
&gt; reg2.test('Hasdfa')5 L, u0 E0 `: R
false
1 F% ~% W5 o( H: Q7 f5 K' p% C&gt; reg2.lastIndex;
5 I+ J& u- D- f" |3 ~09 ]. R  N9 p. G/ w9 t4 G3 e8 z/ [
&gt; reg2.test('Hasdfa')( f$ V( b* v+ E3 Y/ y: H/ O
true
& N1 G) r( i4 d- c1 o3 R&gt; reg2.lastIndex;' R) y/ v3 x) ^; G) k, }
6
. f, A+ h" r- t3 Q6 N8 e% r&gt; reg2.test('Hasdfa')
) F1 l$ l6 g3 t. F; ?7 W4 M3 Bfalse
" d' B& C! E/ y& d7 Y&gt; reg2.lastIndex;
! o2 ]2 O6 _8 O# |- {7 D" o0
4 l0 O2 P: ^6 I) [6 d$ I. l// 全局匹配会有一个lastindex属性! s3 L7 A9 Y6 W2 k& b+ l* b7 o* N
&gt; reg2.test()9 r  x9 @* |7 \* p! q
false' j+ O; n- N; f  J- a; K( ^/ ?3 k# D
&gt; reg2.test()
0 O2 U& }; u" r( R8 g5 x0 ztrue
+ M. ^7 [7 G3 N1 [* C// 校验时不传参数默认传的是undefined' T) j- t6 _, b' F, s- r; g/ j
</code></pre>
  l2 N9 u+ ]" z, K5 k: t! Y<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
) @8 T+ @/ ?) m) J5 `) c<p>就相当于是<code>python</code>中的字典</p>
8 g4 T5 z9 f( b: B, g7 }<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
/ k$ b" i0 d2 x) f" s&gt; person
  l/ e3 ]. R! v{Name: 'Hans', Age: 18}9 U7 x9 h+ m8 Q5 w
&gt; person.Name
% t4 B0 q8 A- G1 M, u'Hans'% s! ?2 N% L+ k
&gt; person["Name"]' |. w8 p! P4 o1 j& S
'Hans'3 J+ D3 V! J2 N# ~+ l

4 d5 g* Z0 Q, N// 也可以使用new Object创建
" g1 X. F1 e) E5 Q8 j. v6 a$ x&gt; var person2 = new Object()& h. C. D. F: L1 t1 T
&gt; person2.name = "Hello"
3 \/ N7 U, j- l4 t% {1 p  {: w# V'Hello'
6 {0 d; |# y7 }! Z+ F/ p" J&gt; person2.age = 20
$ R3 N& i; l+ {9 U6 x7 C/ x20
, T0 g- ]- r7 h/ S</code></pre>- p* H  p, e# L9 {$ `& B& ?- ?
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>9 R: M. r9 v# D+ X4 X* a
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>4 G8 e3 T% ~% M/ |3 \; X: X
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
1 V& q5 P7 }' e6 a+ D<h3 id="31-window-对象">3.1 window 对象</h3>
- A/ g/ W8 ^2 v<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
/ d: `4 {# L/ k5 ]) j6 Z. \! T* l<pre><code class="language-python">//览器窗口的内部高度2 `2 Y0 J4 s& [
window.innerHeight / V6 V6 U' Z4 a/ L2 f5 q7 \
706* |$ R* z, d+ `6 ~( _, [; d$ y" Y( s
//浏览器窗口的内部宽度) o; Z1 B( h6 }3 }) B
window.innerWidth2 q1 e: Y" l* D  ]" F. l' z
15222 S8 N. b) Z9 s  {9 ]' B2 s8 J. R, ]
// 打开新窗口4 V' G8 Q+ V6 a
window.open('https://www.baidu.com')7 m+ _8 u' m7 {# u4 i
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}0 Z& M$ w: `' @7 U8 G) m
// 关闭当前窗口& [6 z% W: z& _$ J* n
window.close()
5 t) v) z- q6 z( C) \$ Z5 f//  后退一页/ w- y3 }  J  U2 K! a8 O* ?
window.history.back()& k1 b- q) W' d( T
// 前进一页
& D/ X! R. H* U$ U" F( Jwindow.history.forward() $ j$ [* s. O: ]/ ?! Y; }8 ]
//Web浏览器全称
" f$ k& z+ R' G1 c5 Bwindow.navigator.appName, Y; r* H0 P' `
'Netscape'
2 Z5 m& U. }4 J% _% X// Web浏览器厂商和版本的详细字符串
( y9 Y  Z7 E/ x0 r+ u# c' y" ]6 Mwindow.navigator.appVersion
# D, q- P" A; P'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
$ z; Z( S& O( \1 y7 ~  N// 客户端绝大部分信息
6 B1 J7 S4 M& G. Fwindow.navigator.userAgent# e4 D5 J/ U% N/ ~' B# S( d
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'! E: X; B" i4 m
// 浏览器运行所在的操作系统
# f9 X5 _5 `4 d7 G2 Z2 `4 ywindow.navigator.platform0 ~+ ^4 z  h; E% z
'Win32'
6 O, A1 b3 O$ s. I
/ W" q8 [& f. U//  获取URL
# ?  z8 l8 H, h/ \) _window.location.href/ ^$ [# N7 ?- o7 H( r; e; f6 Q- k1 W
// 跳转到指定页面/ |% J* [0 r0 d; v- a9 n: _6 ^
window.location.href='https://www.baidu.com'
0 w/ Z8 R, p* D; X# D6 M$ }" }8 a// 重新加载页面0 h0 R! N% o( O" o9 e1 r
window.location.reload()
, q" k2 Q; K0 S3 Y1 N* d) m8 Z- H</code></pre>' h: f" p3 T3 S6 j; Y7 m
<h3 id="32-弹出框">3.2 弹出框</h3>! x; m/ w2 N9 M! j" q
<p>三种消息框:警告框、确认框、提示框。</p>
( n, O4 o* F* L& o0 ?+ ?% Q<h4 id="321-警告框">3.2.1 警告框</h4>- \  Z, U- `2 `# n2 o; S
<pre><code class="language-javascript">alert("Hello")
2 V' q! q4 P. J% I' }3 T</code></pre>) ~4 r7 M  K# G: E  r, @8 Q5 N7 ?
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>$ P" a8 K! ?+ d9 @# w
<h4 id="322-确认框">3.2.2 确认框</h4>
0 W: W( b6 `9 G0 b! p2 E; ^2 c<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
% i1 I) |3 b8 G+ V8 P( F4 o: W<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
# d$ H/ v+ \( {; [8 {true: `2 y5 h9 W5 d% u, _3 [
&gt; confirm("你确定吗?")  // 点取消返回false
* f# J- i1 }4 c2 U7 ^false
4 j- f$ a  O+ F) @4 w! z</code></pre>
$ V! I) i; }# F- e, c<h4 id="323-提示框">3.2.3 提示框</h4>
; j$ e7 L6 W7 B. G8 Z0 P<p><code>prompt("请输入","提示")</code></p>
$ `% I& A+ F# k7 g: ~! G<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
$ @5 {% c+ L  |: T% o2 b<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>! C! A2 k' Z: p' ~  [2 q; v
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>& j" x3 e) l% T4 P: v
<h3 id="33-计时相关">3.3 计时相关</h3>
1 P3 o7 s' U+ E+ K) w( W7 e: q' z<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
4 {, q. s8 _/ H5 @* }<pre><code class="language-javascript">// 等于3秒钟弹窗% i5 O1 [3 N7 I6 _3 t, u
setTimeout(function(){alert("Hello")}, 3000)3 v, f9 m9 H) w! l' b
; ]* Y6 i, F) w. z0 m; G' _8 l+ D
var t = setTimeout(function(){alert("Hello")}, 3000)
! f2 M  q) h/ Z) k1 D* g1 Z, L) W7 Q& b
// 取消setTimeout设置
! X/ E# z, B) @, k5 uclearTimeout(t)
( y4 I. k$ h  G8 N9 o</code></pre>
, ?1 @# }# x1 K8 g: i2 _7 m3 s<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>0 Q& \3 U9 J' p7 }
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4># [; c: E: g1 K+ d
<pre><code class="language-javascript">每三秒弹出 "hello" :
0 k' [6 t2 x! z1 ]. g7 R- j" osetInterval(function(){alert("Hello")},3000);
" ^0 u) s' h. Z9 A  a  D+ J6 `2 u8 i</code></pre>
  V* y3 |1 @4 a5 U% |) {$ u<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>+ L8 Y" X' `) K% c- c6 N" o2 y: S
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
0 ~0 C5 G0 N4 s//取消:
, b  \+ T* K0 b5 u( XclearInterval(t)! i& o* z- u7 a) H7 y/ I" @8 a
</code></pre>  A. J: {  b. H6 N
! G% d3 u' H5 U
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-29 17:33 , Processed in 0.076642 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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