飞雪团队

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

前端之JavaScript

[复制链接]

8061

主题

8149

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

. t9 L3 B9 [3 V" |* B<h1 id="前端之javascript">前端之JavaScript</h1>
6 G2 J, K7 e8 ?* e<p></p><p></p>7 E" K: i8 F; u- u) m' p
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
" K2 q1 H# n2 \  V! S4 I<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
! K$ u  O. N3 U, T1 Z; e它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>! ^, S/ E( L- N/ S
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
- L1 E& {: v  W9 g# c2 l# O它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>& Z& G& g+ \1 E2 Y
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
8 z' B  t4 V- ]' Y: @<h3 id="21-注释">2.1 注释</h3>4 [. w8 N/ Q2 X* ]" o
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
, w- T8 ^+ F0 l; J<pre><code class="language-javascript">// 这是单行注释
+ o0 \: v# B, D9 ^1 ?- d+ {; z
/*
* {5 ~+ z) J- D. L6 d这是多行注释的第一行,0 t: o' J+ U# f8 t9 e" W) p
这是第二行。
4 l$ \$ e) a: Q' o*/# T; ~5 O; W% g9 S" F
</code></pre>
; @' Y0 r* {# [/ H8 x/ a5 [1 s. L<h3 id="22-变量和常量">2.2 变量和常量</h3>
/ T9 E; @% ~$ G! \; @' r- w! l<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
/ y+ b+ M/ a5 V  L6 }/ O* X<ul>
8 e1 Q( T9 O' j( i- ]9 K8 U<li>变量必须以字母开头</li>
5 ~2 a# d  z. U! N- I<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>- G. [* j; A  c2 A& C+ {, [
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 @0 I6 O; j, j) R& D' j. z- m7 r</ul>
/ G  K0 w" d' H. K" ]: `<p><code>var</code>定义的都为全局变量</p>
: j3 j/ K! Z2 L4 A% u6 |<p><code>let</code>可以声明局部变量</p>, I: o  g2 C5 k+ I0 Y
<p><strong>声明变量:</strong></p>: }  D2 H5 r% I
<pre><code class="language-javascript">// 定义单个变量
7 ~1 f* r" A* A- {&gt; var name
; T7 ^* w7 p- _2 u" d&gt; name = 'Hans'. [  H! f0 T* M6 J' I& s
//定义并赋值
# l$ B9 @. X& \3 z7 |4 L: ^& L4 Y&gt; var name = 'Hans': b( h! H7 j. ^1 M
&gt; name
+ j) d3 ]/ l4 ^7 N1 w0 {'Hans'
! I. j0 l8 Q* q! B& B/ D7 I) v: K
// 定义多个变量$ I) }- G+ u- F( X
&gt; var name = "Hans", age = 18
1 t* k  ^1 E7 T( L8 A&gt; name
1 y4 y0 g, U7 F6 H5 z& h: P'Hans'
7 S9 O# I5 U$ J3 k  ~/ ~&gt; age5 r, L( H/ C/ e, k* x; J
18
! U- P5 @! P: r2 `: D0 {
! j* P& [& M9 i5 y2 ?! @//多行使用反引号`` 类型python中的三引号# A. @" D5 D" _8 Y
&gt; var text = `A young idler,
; ]- a9 j+ ~3 pan old beggar`
" \6 ^% `5 \4 o  g* Z8 A/ x, r&gt; text) M1 K! F9 r4 m& C* ~, E1 P$ h
'A young idler,\nan old beggar'
9 \. D" K* G* S</code></pre>
2 w. @6 s: X; [5 d<p><strong>声明常量:</strong></p>$ C! X  Z1 ~7 o' Y1 F% Y
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>' B" N$ D. j- h* ]
<pre><code class="language-javascript">&gt; const pi = 3.14
* J  i/ _. C  @" k1 s' f4 x/ D# w&gt; pi
4 U2 d3 a9 [) G! j' N% g/ J7 g3.146 ^8 a% T- e% ~! l# p4 m
&gt;  pi = 3.01
; f0 T! V% L# {5 y1 SUncaught TypeError: Assignment to constant variable.; }/ N& i( k! V  [0 K
    at &lt;anonymous&gt;:1:4
, e& l+ g) c. }  n; n+ V5 G/ s, D7 ~2 x0 ]
</code></pre>
! ^6 J- C7 m8 r3 S: T- Y; ?<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
+ h; F0 R0 N- ~7 y( g( W( N<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: ?9 |; G! n8 d! {; H0 H7 k4 U<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>  e, y8 K6 \! |( ^; h
<h4 id="231-number类型">2.3.1 Number类型</h4>
3 c* V; t( U0 O- @' x" O- Q<pre><code class="language-javascript">&gt; var a = 5/ y# B# J$ i. Z+ A
&gt; typeof a   //查看变量的类型  $ X; q2 [/ A. }" i
number
6 d3 U" a8 X4 {) Q7 `  x! m
7 G/ `: @1 G& \&gt; var b = 1.36 J; v4 R+ u: m* u' o$ `
&gt; typeof b
- `* c# i' P, y) ]5 vnumber
7 q" x) Y3 K+ f  V: \, z: p& {. r7 V& s3 k
0 Z9 o- l0 c  i5 q. F, K! J; m// 不管整型还是浮点型打开出来的结果都是number类型% e& }, P8 O5 [& s, s
2 J  \+ X( N" H# ^) x$ x2 K7 j
/*- |, ~: J. ^4 I
NaN:Not A Number3 h# h7 w8 V5 ~4 L! n7 Z+ N) z
NaN属于数值类型 表示的意思是 不是一个数字
" S$ I4 P* w& F/ E3 T9 {2 X*/6 M3 m" k- r$ X, O5 r$ D9 G
& c- o6 }9 ~( l' Y4 V
parseInt('2345')  // 转整型
, U" O; L/ u) y9 i4 S& x2345/ k: a- R7 m8 o4 L" J- d. M1 }8 G
parseInt('2345.5')  V5 c0 _( j) e& w* k
2345
5 p! T2 O" {* _# }parseFloat('2345.5') // 转浮点型! \/ _* t. l$ \, w0 `4 R; Q3 p
2345.5
, Q9 Z# R: ?6 R3 T+ [) b) wparseFloat('ABC')
% Z  d% T. x6 `# a7 z9 q) B; ]NaN
- Q2 L5 q0 H% C5 d8 W' x: l# DparseInt('abc')
# v9 I1 ?: E" t& B  e$ s+ QNaN
6 u( U% K8 B5 o/ A</code></pre>: @9 H) V/ A0 y( S
<h4 id="232-string类型">2.3.2 String类型</h4>2 ?9 _5 {" g0 q. r
<pre><code class="language-javascript">&gt; var name = 'Hans'
1 I9 |1 `/ [% ^, t. A&gt; typeof name
. ]: i% F6 s  ^  N2 E- M: v/ D'string'! u1 D  @$ V) f% E$ ]/ w

; p* {9 U( e% Y6 O//常用方法( G$ `. _. W1 R9 ]0 U2 y
// 变量值长度
; m; T# z3 l8 W9 z% q' ^& |  ~" B&gt; name.length
% e( a. c+ i2 n. b! X+ {46 Q3 F* D  x' q. H& U
// trim() 移除空白
7 g+ v. R. W1 S/ W: a9 P&gt; var a = '    ABC    '4 d- Y. F( M& |8 T+ r2 n6 {1 ]5 w2 T$ {
&gt; a
& G7 d" L0 J# x1 _'    ABC    '7 \+ I: y' D( |/ w9 a* s  E
&gt; a.trim(). ~7 L# r5 \( e
'ABC'
3 N+ D/ L# P/ _5 t: B& f- w3 B//移除左边的空白! n- h: J# ?1 ]3 q; L; n4 m9 E# K# m) s
&gt; a.trimLeft()
: T8 B6 N# \% N# J3 h: G8 m+ f'ABC    '! S6 T5 f' c" u" i0 `! c: ?+ }6 J
//移除右边的空白
% g% s" \8 F7 f0 U! d- W&gt; a.trimRight()& H# V6 T6 ?5 m1 Q- N' p
'    ABC'1 x3 E' s8 x0 E; @: J/ n

3 i* c. [/ J6 A& [' o8 ]; g7 A//返回第n个字符,从0开始
! \5 n" u, K/ V: Q2 {- p& Z&gt; name
$ y1 n/ M( ^2 z" G$ M'Hans'
+ Q2 |5 v- ?9 p* G( C: `&gt; name.charAt(3)+ t/ q+ w  s& y9 N
's'
3 X' Z) E7 o. q/ _8 x&gt; name.charAt()
% b- Z: A3 ~2 Z0 |'H'* v5 k- Z' }) u
&gt; name.charAt(1): Q# w- e9 H9 R! b9 ?# ]# E
'a'* ]$ }  X- ~: H1 J1 b( m

& f* N' F5 E& n: s// 在javascript中推荐使用加号(+)拼接
6 \9 W% J: m: q&gt; name
9 H) q& t: c5 j: |! ^'Hans'
0 ]# [0 s" B) [0 W&gt; a6 o5 ^( M  |7 E3 x
'    ABC    '" t4 E1 t- s2 @, h
&gt; name + a
3 ?+ P. g4 Y* H8 E/ o- r'Hans    ABC    '# `7 P0 r1 r* g8 H
// 使用concat拼接
4 n( `9 d2 d8 @&gt; name.concat(a)+ r6 A% ]4 D/ Z( c, z, a6 Q. p  Y
'Hans    ABC    '
: _' ?" f( x, J" y$ C/ X9 x2 U% i( X( w0 o" k  H
//indexOf(substring, start)子序列位置& w2 Y; V# C  @5 e1 `! A+ P
1 d  |5 u3 k- ^* G0 M
&gt; text5 K2 h- A/ }9 H# N7 X7 ^
'A young idler,\nan old beggar'+ q! R; ?2 v7 F9 k) H
&gt; text.indexOf('young',0)
' h3 D- }( b: g6 G1 x28 l1 z. k; |8 |7 t  I4 J
" h  `3 U( y5 w0 K& H
//.substring(from, to)        根据索引获取子序列
" Y% X% Y" M* n7 l&gt; text.substring(0,)
; \* s9 I( ]! X" @5 C9 S'A young idler,\nan old beggar'
5 B1 R1 k& y/ L9 c0 D&gt; text.substring(0,10)
* D' f# O2 C) Z3 ]: K3 h'A young id': }: b) h; Z' T0 K

" b& e( V& l& F  d& {// .slice(start, end)        切片, 从0开始顾头不顾尾
1 d1 z7 S+ N4 z, F, Z4 h  q& E0 T&gt; name.slice(0,3): L. ~) E! ~  o$ H
'Han'
- a. G' L: i4 {
. S$ m7 }2 B0 K6 t7 \) u// 转小写1 V* ]6 K7 w5 y' X6 n
&gt; name
; ~* X* `% s9 o& R, _% ?; |'Hans'/ p5 }4 Z* K1 @. \; Y
&gt; name.toLowerCase()
. B( p+ I, b- K'hans'
! i+ E9 s4 P) ]// 转大写
7 c8 }' m; g6 G- C& L) U&gt; name.toUpperCase()
  d. D4 W" s3 Z; v! w* h% H'HANS'/ G' W1 ]7 P$ j9 M9 W' h2 g

, g4 ~8 I. O0 [( F( i4 Y// 分隔
/ {8 l$ o$ J  c6 Q7 q&gt; name
; m5 ~6 r, ?1 [% j/ t2 r'Hans'
. C1 o9 X8 r% v  P: Z2 T$ l&gt; name.split('a')
( p3 r* K! B! i+ @* ^6 S) ^! B(2)&nbsp;['H', 'ns']( ^6 f* J3 |: q$ O6 D
</code></pre>
: B5 X6 P; b6 O6 ]6 [  h3 k<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
+ Y2 r+ Y& `; x9 t$ O* R# V<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>% q$ R4 A9 {) t" ?
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
1 P' x  g- h# U( T0 V, v<p><strong>null和undefined</strong></p>
+ q7 f5 B/ p1 z0 C: T  O; I<ul>3 `! V4 }# a& z2 }2 K6 O
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>. ]# g6 d% `5 K: t9 w+ t: r
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
7 a) I5 g1 \& J; f; K& n</ul>; }( P( A5 I5 P& Z% G" c! s- L1 C
<h4 id="234-array数组">2.3.4 Array数组</h4>
6 V4 i3 s$ A( l2 Y<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>7 K1 n( B8 b0 c$ A
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
+ f* W% o3 ^5 _/ T- C' v&gt; array10 [# p: ~/ I* K% G; a
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']- _# R7 p5 V0 K7 D3 l
&gt; console.log(array1[2])  //console.log打印类似python中的print) m; z& u" W# M' b
3# P* X4 A/ A/ B; B! W# W
// length元素个数; L' ~% |! E5 O' z* E0 W% \
&gt; array1.length
  @0 g( t+ j3 e! X/ }6 Y; D6
$ [) d+ k8 \$ y/ m  R- z// 在尾部增加元素,类型append* P" ~2 Y/ B. K! ^8 y* O
&gt; array1.push('D')
, f& I7 ^! u/ N7! i* c5 D5 U4 n
&gt; array1: c& g; U; j8 e% F
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']% h  _! u  ~- F% C
// 在头部增加元素
( @5 ~3 ~( p0 M6 d1 k6 _5 J&gt; array1.unshift(0)
4 R1 I+ k- |6 z( E5 Z6 X87 \/ I0 k8 J2 Y& S- q' A, f
&gt; array1/ V0 G- |9 K, J- Z% z. @/ u
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
! T# i- w0 X" _; [$ b
- V4 ^7 u! G5 e; ?//取最后一个元素
7 w, ]1 o* j; x" X( E! D" A, K5 K&gt; array1.pop()
' h0 v5 C5 s, n, H9 R& @) g5 W0 e8 W'D'. O0 v+ j- I1 L; f: z
&gt; array1; l) ~; G7 `  }6 u. ?
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']' l8 [' w8 a/ c. L
//取头部元素8 T1 ^" Z' Z  A# g$ z) U6 W
&gt; array1.shift()
& Y2 f) q) R) ^6 z- X09 d& h. j- j' V+ ]
&gt; array1
9 Q" L( c5 }( Z, u(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']& O3 M  |; t2 s" r
6 t3 {) B0 F5 T: \0 D% R2 v' ]+ a
//切片, 从0开始顾头不顾尾3 A5 p5 ?! o0 y1 ]' p
&gt; array1.slice(3,6)# A; ?, M: h2 ]+ {7 I( Q8 k8 m- r
(3)&nbsp;['a', 'b', 'c']- ?; F' U* I2 c0 `0 ~# l
// 反转6 G% n! A4 n. F$ p0 }' P
&gt; array1.reverse()
: r; `# N' W. `8 S& o+ a" P3 ](6)&nbsp;['c', 'b', 'a', 3, 2, 1]
- v- s; _5 z7 s6 ~, W. X" }// 将数组元素连接成字符串
& l! U) X0 T" T( S' A# h&gt; array1.join() // 什么不都写默认使用逗号分隔# M* o% x. n5 e$ P8 f; P  c6 Y7 q
'c,b,a,3,2,1'
6 }. x" o6 R! d- x. t& N&gt; array1.join('')% }0 d4 g) L6 m7 ?9 d" q% T
'cba321'* }/ r/ k5 ~; }8 k) o
&gt; array1.join('|')
0 p. L9 J9 L5 z'c|b|a|3|2|1'
: }! _/ U2 n& n( V: F& @+ s) e& ?; S2 r) o5 C4 |
// 连接数组$ P" g% c1 }8 t/ L! j6 ?
&gt; var array2 = ['A','B','C']: Q5 l6 `+ ^& f
&gt; array1.concat(array2)
, g2 Z! i9 b' w4 M1 O(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']6 s( O+ J+ V4 q: n

  R; m7 a/ N3 K+ S4 ^// 排序
0 F( Q( A* [1 K! l, S7 s&gt; array1.sort()+ v( P! u5 t1 \/ C
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' R3 N5 {% W$ N2 k& w& T' ~; z! n8 t# s5 C% E# I8 H+ b
// 删除元素,并可以向数据组中添加新元素(可选)- o+ ^4 ?1 o. O4 a- s
&gt; array1.splice(3,3)  // 删除元素
' X; h, h$ C- D- y  h; B* x; K2 S(3)&nbsp;['a', 'b', 'c']
; t* g9 L: H+ T# E" U&gt; array1
2 M: ~* ]3 o) l) B9 Z6 t& z" q6 K(3)&nbsp;[1, 2, 3]
# m+ C+ U& A& B, j& ~  Y&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
$ T( {/ f8 L/ F. V+ a% _0 G# {[]  M8 e5 |6 ]9 e7 K$ N- V+ P( Y
&gt; array1
  }; o5 @- }8 {% R* k(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
: {# H" n$ P0 ~9 I" z. v
1 }5 s, R3 f6 M* k/ e/ U# _1 h  C8 W' f/*
$ E( B" N+ c8 j5 P  J, \  L9 Usplice(index,howmany,item1,.....,itemX)0 c7 K$ G4 B$ a' q" L
index:必需,必须是数字。规定从何处添加/删除元素。
" |: d) s; o  T9 P" `: lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
1 H9 W6 }; M) L  ]2 K9 n5 t) aitem1, ..., itemX        可选。要添加到数组的新元素
7 r9 n& v0 j+ Y6 ~. S) B*/
! E( u: m2 i2 [5 N
( g0 G- u6 b9 U: e1 J// forEach()        将数组的每个元素传递给回调函数) @/ X0 O  O& G5 [( m. S, f2 b3 E
&gt; array1.forEach(function test(n){console.log(n)}). x& V1 A9 o2 B
10 }- C! s  N5 v
2
  u' z( Q) |, L; o; y 3" P5 v1 c8 S; O. ^) A
A8 h; [: L5 f5 d9 n2 P; I# N+ }
B$ c( G3 a/ Q8 N9 B
C7 @" N/ h% \" H
// 返回一个数组元素调用函数处理后的值的新数组' o% ~4 @0 W  C
&gt; array1.map(function(value){return value +1})0 E) W7 \% I& E- c; i& p  m
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']; \; ?4 V2 f& F
</code></pre># C- Z+ ]/ b4 L
<h3 id="24-运算符">2.4 运算符</h3>
1 P8 r( d, U$ A% v5 L<h4 id="241-数学运算符">2.4.1 数学运算符</h4>% B# A9 n- t* q, T1 e0 M7 Z$ F& h
<p><code>+ - * / % ++ --</code></p>
) [5 u, |" r/ @( Q8 q% s; x<pre><code class="language-javascript">&gt; var a = 6
6 n1 V0 |& F% J% n! ~1 ?8 v&gt; var b = 3+ S' c; q, }3 V0 J8 i
// 加0 ?% V& x' S! |' Z/ B0 r% l
&gt; a + b" }' G# o9 c) I9 L+ T3 l# d
9- i2 ]5 R7 ~: Y( S" ^; K/ w
// 减, j# _% @- L& j- q+ b$ j, j4 x
&gt; a - b
' K& r1 u2 d3 Q; n3
: k4 `5 c3 F; r) [// 乘  v/ ^1 i  I& x6 {6 r0 ]
&gt; a * b
" ~6 p" \* [. \( d18" M- R4 W' z) Q& ^% E
// 除; s2 H1 V1 ^' ~/ ^; D8 t
&gt; a / b
  ]8 @/ A3 [, A3 a2
+ |$ w  n3 R' M// 取模(取余)0 b5 x: e6 G$ r( f
&gt; a % b6 Y# F/ D. f6 o7 b4 x5 o- n
0
: U/ V' Q+ g' f8 x5 G+ t1 A, d// 自增1(先赋值再增1)" }/ `% D1 N$ ]
&gt; a++
$ C8 W6 i* {, E) Z; {' D6) Y" f! J7 F& Y! X7 [
&gt; a
$ q" l- s- r  w/ v* m73 c( I9 H) H# T: }
// 自减1(先赋值再减1)
$ c6 M3 g' v! f' Z; X* h&gt; a--
4 W. q/ K* z( X  f$ D2 b7
6 P5 _1 `. ]$ X8 i& C  i&gt; a- c6 F6 y3 y* ^9 h3 I! Q
6
1 v/ i  b  @2 d$ \* g// 自增1(先增1再赋值)" z, S- |0 ~9 y
&gt; ++a
7 @' }$ y5 `8 J( h1 I5 s7
  _  }. i+ c( _2 U5 L" n// 自减1(先减1再赋值)
  V( S$ _; d! ^+ ^4 B& ?# q&gt; --a
/ ~! q$ S& m. M! X9 Q65 D7 J8 K5 X/ F8 j
&gt; a/ r0 `" ^+ r6 I3 |( N" U
6
+ }! v0 `7 E+ D" _. R
9 Z; G& Y* D. x! o//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理, x5 n( o; i/ v4 s$ M4 a
</code></pre>% W; _4 U) B$ n
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>0 M+ \" o6 I$ Q% r& l# `9 B4 B
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" R4 Q5 o9 @# e4 o
<pre><code class="language-javascript">// 大于" b( l5 G2 V1 {% q4 o" h  ~
&gt; a &gt; b/ k7 k  \$ g2 W  @3 O; p$ ^
true
$ F; }) R8 z, F6 M6 E// 大于等于
6 c* K# L0 y, G&gt; a &gt;= b
7 s& v3 Q% `4 ?+ a  T, C0 itrue
# C0 O( m9 L" K// 小于
6 Z& C$ _1 F" t, v&gt; a &lt; b
. j" g$ v+ g: ofalse7 L. _9 n/ L; X2 t: i
// 小于等于1 ?7 I4 b3 d/ A& x
&gt; a &lt;= b: u! }+ @  A4 ?% Q
false
' m5 z; G: f8 z. W4 W( }/ B4 v// 弱不等于
, y& n# l. S) Y&gt; a != b
/ K7 T2 }( G, |9 a2 utrue) U, {) q" ?8 K: B# A% W; v
// 弱等于- E+ B3 ^; a' A) e
&gt; 1 == '1'
  a6 D7 N/ H" z" utrue
! Y/ [* M; c' [3 i5 ?  U& Y$ u* u// 强等于
3 Y) a2 n6 X4 u0 f&gt; 1 === '1'
; _) ~' B) @0 j" ~false
3 n" a$ ]# g+ A2 b8 Z6 a// 强不等于
/ K( l* h7 [! O' |&gt; 1 !== '1'
  X/ |0 W. P, U  \. G" ~true; b* Y% n+ }8 a; s+ K

+ G) ^8 M$ ?$ V/ c  V/*1 [5 J4 S0 ^- n
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
/ J: ]1 Q# v, H2 ?& m  x1 F*/- D: k! O* ^& j" r6 [9 {* I
</code></pre>4 ]/ U0 Q; ?8 o) _) N& }
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>! ^$ X5 \% k  F( q& ?& m% l/ b) j3 J
<p><code>&amp;&amp; || !</code></p>+ U& D: G& E* T9 l
<pre><code class="language-javascript">&amp;&amp; 与0 U$ H9 v  I) d' }+ e* L/ c
|| or - _( \, U- |2 E* t+ O# U
! 非
" g( h# Y2 B" X* Y3 C! D) x</code></pre>
2 H  I- Q' m6 u/ ?2 r7 J& |<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
0 P- X4 L/ }8 Y% T9 s0 r9 Y<p><code>= += -= *= /=</code></p>/ F  h& C2 s4 c. k
<pre><code class="language-javascript">// 赋值
/ V) a' A! a) \9 n+ n2 a# k  |* G/ p0 I&gt; var x = 3
5 S* S+ U- m9 L7 R// 加等于% G6 P, I. H7 X! p7 h1 u! ~$ O1 r
&gt; x += 20 Z% B$ X0 A7 A/ c9 x: A& a
5
* S  J' J% a6 M3 {; Z// 减等于0 _6 O" V. \4 i: S& `6 m) a7 G9 W
&gt; x -= 1, O! j7 z- X! X; R; v) m6 p
4. U+ e8 p; H$ i
// 乘等于1 j3 N( |+ K' ^7 T& c+ N& \
&gt; x *= 21 R2 w: i+ n% L+ H, h
8% ~, o) s  u2 J( T, e
// 除等于
3 \0 E$ j4 x/ x- [# u% [&gt; x /= 2
: Y3 ~& |# [; {4( V. Z/ R& G0 k- y, [- q  C1 ?! t6 }5 l
</code></pre>
0 b2 V/ G' m+ H<h3 id="25-流程控制">2.5 流程控制</h3>- U/ d$ U. F: ?9 I7 N- ]( T
<h4 id="251-if">2.5.1 if</h4>
7 i, U+ }/ S7 E<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
6 l8 E( ^1 N1 w
5 [2 x) v# q, t5 N&gt; var x = 3& n; |( [) ~! D  j4 u) k9 z: a
&gt; if (x &gt; 2){console.log("OK")}: ~9 \+ U7 \/ |3 Y3 r
OK3 ^( j( q) n- c% u; [7 L, V- q

3 o* [4 R0 @# S0 ]0 N. x4 L2, if(条件){条件成立执行代码} : h1 q4 T8 H; D, E' w+ J# E: n, O
        else{条件不成立执行代码}" i% l% T1 V) d" H: h" H% _; J

1 d  q- p7 O" b! o4 j&gt; if (x &gt; 4){console.log("OK")}else{"NO"}; Z8 W! r) `9 ^' F1 v# z
'NO'
9 w! e4 b; _. b4 o/ k1 P) ~9 Q; j" g* d2 O) [4 }9 e
3, if(条件1){条件1成立执行代码}
$ {- X# h* ?# I" P0 v' I. C        else if(条件2){条件2成立执行代码}
7 e: S1 f. f* l" ?  u% Z# J    else{上面条件都不成立执行代码}  |; f0 \' {- D* s; L/ c! a+ c% \

, k4 n0 j! P, u# w/ b5 L$ D&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
; Q; a( j! ^7 q, L3 W+ x. t+ ? Ha
1 a3 m. L- w7 j1 E</code></pre># {' U1 u% {" D+ G, K
<h4 id="252-switch">2.5.2 switch</h4>
( g7 d! }+ t( S- [<pre><code class="language-javascript">var day = new Date().getDay();
& Q: I( b/ R4 t' ^' j! Z% c' \* Aswitch (day) {
9 v' W4 D$ r& \% x  case 0:+ y' C+ m- H" Y2 A- _% h7 R
  console.log("Sunday");
- C' L- j0 c5 T2 D  break;
( P  p% z& d1 U" W  case 1:
! R1 C/ z3 A8 W+ t0 N9 h  console.log("Monday");
  w- q: F% o: F  break;8 Q- }, B: X/ Z9 H  ~. I9 ?& G
default:
7 C- j' f* N7 Q' n  e$ d  console.log("不在范围")
* q' Q/ s  w1 \3 @$ Q}$ F. t3 _* p) S+ j* _/ I2 ^
不在范围
; F4 {! O5 a0 L( O* A5 |2 k3 H3 L</code></pre>2 \! _2 e. k% W4 m0 n6 z1 x
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
7 [  b( k2 E% [9 p<h4 id="253-for">2.5.3 for</h4>; u# H0 A) n4 Y& g& g2 i
<pre><code class="language-python">// for 循环
( z. j/ U5 D- {: W0 N2 R+ Q        for(起始值;循环条件;每次循环后执行的操作){
1 b2 t) F8 {8 w, H' O7 Q1 Y        for循环体代码
% y& r: |+ h; e6 g    }
3 x4 A0 m. y. v3 R" ^0 l1 s
- U, y8 K6 Z& N4 Yfor (var i = 0; i&lt;10; i++){
5 g6 q& ]+ v1 V6 C# v& {    console.log(i); ?& ~( V! _7 i8 i. y
}
+ _, ], l9 k& K5 p2 R        0
0 x7 Y: {' ^. M# C        1
6 d& }9 _* M- D" d  L0 G1 I9 t/ `        2& k4 [! d: a( U* s! n, T/ Y
        3* h8 q! I, H( F& h' J0 G# z
        4
) q) Q. j5 p7 x& |/ |0 ]' ?        5$ y. ?, I* m& X, D' j% M
        6
  L- b' m4 C1 T; ?. p# ~6 o1 P        7
- D" z/ e  ^3 ~, A2 V4 w        83 A$ A/ b5 c( C  o0 X) s5 W
        97 _* S, @" m) [: [$ w* s  i
</code></pre>
4 W1 y- X* G- w7 E) r<h4 id="254-while">2.5.4 while</h4>
4 Y8 P. F6 b' R" F<pre><code class="language-javascript">// while 循环, e: c: p5 k* M+ Y6 g  w8 u
        while(循环条件){
1 }' }  |9 I9 y. o% N, ?        循环体代码
2 Z" J9 ^9 \# K6 M& w% [6 M, c% o    }
, i' L5 E6 A; `4 C% ~3 O$ [4 w4 Y
, e  Q* X; y" V' Z&gt; var i = 06 ?; p+ P$ W: ~$ h: V' ?% G
&gt; while(i&lt;10){
; d0 ~( s3 }2 y6 J4 T! E    console.log(i)) n: C1 N* `6 [1 K; Y" w
    i++
; ]- r2 s# |' h}
. a$ ~+ r- u1 X/ h0 t7 ~4 @6 q! S 07 E$ t% {7 }$ S! s/ E( T
1' ~8 J+ }! e- @, b
2  u$ r& ^, G# K& J, {3 _$ z
3# O& {: f4 q. g, \' {
4
$ }0 Z" |: Q2 w2 j: c 5/ G) M( k4 @# l1 x1 i$ B
6. {1 j4 u% N. q
74 l# A4 K1 N2 B) Q0 q/ m% E
83 v. U2 r3 i+ b( ?
92 @8 c3 d( f2 R: f" K/ t3 z
</code></pre>9 `3 C& x7 {% J& r) o5 y
<h4 id="255-break和continue">2.5.5 break和continue</h4>' i2 `8 O9 B( Y0 X) @0 P4 o
<pre><code class="language-javascript">// break
+ w" Q$ v  `/ Y2 Hfor (var i = 0; i&lt;10; i++){3 ]* n% V& \3 `
    if (i == 5){break}
& i& ]- b6 n* t    console.log(i)
+ a/ f2 I& E# e: {4 ?# |* E}
4 U+ e) l7 m0 J9 e( G& l% } 0, M0 k8 v) h( C. }
1
! [; P/ P; l7 Y) X* H 2
+ [. N5 N" A: {# ^% l 3
  s8 H. X# e9 J 4
. [& R9 h6 Z5 J% v. L7 b. G// continue
. H5 `. Z4 _3 T7 V  ~) x% }for (var i = 0; i&lt;10; i++){4 t+ ?* w& B$ M
    if (i == 5){continue}/ n+ M1 G3 p8 S$ x+ P! R- D
    console.log(i)+ P1 S, Y; P. W+ m) _! g4 y
}
# [! R) S( w* I+ ?2 _! w 07 X; Q. |# M1 z( c* C% p7 m! ~
10 c. [* o' x* O9 r+ H8 J0 `" }
2
  H" I' j: y: J0 f 3% M+ k! F4 _: E+ c3 E+ F
4! c% B$ }2 V% n7 g7 _8 ]4 w" P
6
% w3 J* W% Y' Q$ B5 o* K 7$ Q& H5 J$ p4 G3 L/ n' `
85 C. h# U+ M- _% o' s
9
; j+ W: D" D6 ~' h
- t+ \/ }. ?$ X</code></pre>
  t* b/ q) i3 }% k) E$ z8 p<h3 id="26-三元运算">2.6 三元运算</h3>
6 }! q# }* Q* t; x- ^: E- q<pre><code class="language-javascript">&gt; a6 J  b& f! A6 c( }2 e/ ]
6
% V* s/ i: Q" A  g3 W; h. Z&gt; b2 n" y( K" ~0 h3 O
3. t4 ~& M5 M' N2 h" C# I  v! ^* |
+ s5 D9 C; y! I" ^/ Z4 E1 N
//条件成立c为a的值,不成立c为b的值
; S3 P! \& A$ ^3 n6 k! N& X&gt; var c = a &gt; b ? a : b+ ]* I# B  w. z2 a; a0 \
&gt; c
: |6 _$ h% T: Y7 N' m6
7 P# N3 f: p/ s( l7 a/ `6 w, t- J- c: e% @
// 三元运算可以嵌套4 c3 `9 b9 ^$ A2 z+ v
</code></pre>  v2 E: M1 n, l# o9 U
<h3 id="27-函数">2.7 函数</h3>: [+ j+ j2 {- l$ c' ^0 Y  j# N
<pre><code class="language-javascript">1. 普通函数/ `' O9 A' S- c0 \
&gt; function foo1(){
, v/ N& j8 s+ g% S2 R0 M    console.log("Hi")
9 Y, U% G4 V, A8 m% T: D}
+ P6 F6 w4 q7 g; T/ F  c4 ?6 ?. \* v8 o0 D# `! q
&gt; foo1()
9 Y8 m, w# l7 p" X# k. S4 C        Hi
( n# S1 g4 h. J; U- K- u2. 带参数函数
4 o0 [3 U4 W. o&gt; function foo1(name){' B( _4 ?2 e; {4 c5 k- w
console.log("Hi",name)$ l: @% x% O/ j8 E7 _5 w, s, W; h
}
  y. f4 T% \( E
8 u9 [+ ]4 X: Z, D, K# b8 J* {& {2 I&gt; foo1("Hans"), a9 U, ]2 m1 ]$ b( l
Hi Hans
0 n4 z' A# L6 P  P& @4 a
5 E/ S7 G0 v2 [& b6 _  c&gt; var name = "Hello"# h! }$ ~; M7 z; K& m
&gt; foo1(name)
% }6 y! m' Q/ f; BHi Hello
$ y3 ~0 q. ~0 @+ ?8 ~, C3 I, Z2 e0 c! S
3. 带返回值函数! p3 S  B- W0 z9 v7 h8 V% Z, j
&gt; function foo1(a,b){
% H! o7 _7 c* X& @  s, G- B& n        return a + b   . Q3 v$ F  x+ O) L+ t$ ?
}3 w6 ^  H; w0 H- C6 @( z( M: R
&gt; foo1(1,2)
% L# Y! q9 u9 X4 B$ J6 \: y3
4 y4 m2 |# }, y4 @  x& @: o&gt; var a = foo1(10,20)  //接受函数返回值
" e, K8 }8 i+ G! y) y&gt; a' A, N1 [$ V! d9 U
30" N( P" P2 L$ T
/ N7 w3 n9 X1 C8 [1 P
4. 匿名函数" J9 O; J6 |; t! K/ t' u
&gt; var sum = function(a, b){
! b2 H  ^. D- o! Z& e0 R4 B7 K  return a + b;0 {, ]; T. B9 @2 u/ G9 z" C* ]
}1 A% ]4 @0 X) C0 y( \* ^
&gt; sum(1,2)
7 Z1 ]( D6 q% A) \3  X* ^8 E! t2 o# f; c
" |6 Q$ ]; X, N$ o
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
* W" ~$ m  S5 f&gt; (function(a, b){& m$ X- D, Q3 ^; D5 A. O" z
  return a + b
8 A' u( @4 w4 {! U; A1 s+ {, U})(10, 20)3 l, Z& u% L: q
30
/ f% V  D% z* I' b" K
" f9 s9 E& J$ M5. 闭包函数
, X5 _! \- s/ T* ^// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
; X  j8 S7 N1 G( p) N8 Y0 v1 nvar city = "BJ"
/ R  i1 P, F( Mfunction f(){2 b( O- l' b% ~$ S* X* v
    var city = "SH"
! O1 F1 {9 s5 G$ l    function inner(){: J# z" e- {* |$ e" |) B
        console.log(city)& \" d* b% V! \1 m
    }2 @3 o  C& f: `3 t. V1 f
    return inner
: j* c4 X+ x7 C* A$ }3 |, f  L8 }}
# b( o* M* ~4 K) u' l( a0 Dvar ret = f()7 L# T! G) {9 a$ N
ret()- D1 ?7 j# b6 y6 A2 R; J
执行结果:6 s( h: {1 }, b
SH
# Y4 \/ Q8 T5 d  \. F  ?9 d4 s) C6 J) ^: F4 }2 y
</code></pre>
$ J) [8 k6 R; J0 R<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>9 `+ p0 v) x# W4 N. W$ j6 n
<pre><code class="language-javascript">var f = v =&gt; v;
" \+ a  B1 c8 L( ]// 等同于( @5 \, v2 l8 `9 o3 E4 C' \- T
var f = function(v){
" w4 i3 |$ u. ?, t# v  return v;; e* K$ M: x& z6 y
}
& J* b# L3 d( ?& e</code></pre>
0 ~3 O$ J' v: g  |7 u* j<p><code>arguments</code>参数 可以获取传入的所有数据</p>
1 a3 W& H- W" v5 _<pre><code class="language-javascript">function foo1(a,b){: N4 x9 ], i8 t$ r* J/ g" M9 v3 F
    console.log(arguments.length)  //参数的个数 ! i- D& u9 M% R, l8 @: F$ N
    console.log(arguments[0]) // 第一个参数的值" T$ T4 j" d' l8 X/ `6 Y. V0 i
        return a + b   ! q6 M: _) e8 J, y( e8 u% @# |4 F. o
}5 V! u1 G6 y4 h7 o
foo1(10,20)
) f9 G! |, T3 S. p结果:* p( z" W7 Q6 i3 u' i
2          //参数的个数 , e: q! P. Y1 _6 W
10        // 第一个参数的值( C" l) r% u+ M' R
30        // 返回相加的结果5 F$ ~) S: G% N& ]2 x! U
</code></pre>
4 Y/ F1 q5 T% J7 `+ @' X1 v% [<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
5 X8 r% S: [+ Q/ U<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>( Y. C" E6 i. m. j  c, d! w
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
5 I& L' Q1 n0 U4 F* o" |<h4 id="281-date对象">2.8.1 Date对象</h4>
; M' E3 ~) w* x% T<pre><code class="language-javascript">&gt; var data_test = new Date()
$ L& O4 T, S0 z/ o  N&gt; data_test
+ `) t0 _" P# Z/ n, bFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
$ S' z0 v6 Q9 I$ ^1 `8 y4 ~& L. M&gt; data_test.toLocaleString()
, m& j% D  r$ d7 m'2022/2/11 下午9:44:43'
# L9 f% Z: Q5 Y! y% m3 {- G; h$ P; K. K8 r
&gt; data_test.toLocaleDateString()
! z! o4 b  g5 z/ u0 x'2022/2/11'
; Y) i; Z  b2 c
* c: Y7 u. L, g, D2 U3 o( \&gt; var data_test2  = new Date("2022/2/11 9:44:43"); w/ [: |9 ~' V% L7 h" n
&gt; data_test2.toLocaleString()! J/ t1 w- T: [; p* G: y2 w9 M
'2022/2/11 上午9:44:43'
, i" k* F0 s! ^! c& J8 z) Y
; B% \# a" e& g) m# Y; b// 获取当前几号! ?4 C$ l, F, c- n, Q4 R: G3 [
&gt; data_test.getDate()& {4 M! i, U9 C: b5 K; P
11! x  s5 f. f* U5 A7 k1 o
// 获取星期几,数字表示
7 o9 F$ X7 O( c7 Z&gt; data_test.getDay()  ) Q% d2 G  v( |! T6 Y9 U- ?
59 F6 a& e" c7 R% Z
// 获取月份(0-11)
2 j6 r+ C1 V; t. r. [&gt; data_test.getMonth()
8 F; K- f( {3 v4 R1
1 z0 `; ]4 E! V" L4 G$ u// 获取完整年份- c/ z* ]4 o9 ~: u7 b- J
&gt; data_test.getFullYear()3 z$ ~/ t( l* V4 W; f
2022
. ~- E. f5 [( I' N6 _# n+ W* M. I// 获取时
' ]% i! a0 |  j% l- d9 I&gt; data_test.getHours(): r; |* x$ K, Y& r3 y$ R8 }8 B
21! o+ X. [% F" K) u
// 获取分
* W' X' X4 f0 z9 M( @; |&gt; data_test.getMinutes()" {$ w& I3 V; |9 E( s
444 T! _7 y  P& G% h4 V. @% u
// 获取秒
) e- p* m0 j+ l&gt; data_test.getSeconds()
- H# x6 ~& o7 J# s8 q% @% A436 t  A7 e3 L# I! V1 V8 I
// 获取毫秒. I2 r5 P# q' G& z! v
&gt; data_test.getMilliseconds()
8 d; q' W7 P7 J5 H) Y9 b290
( u4 R1 Q" O, {* Q// 获取时间戳1 Y+ a1 e4 F& ~; z! z
&gt; data_test.getTime()
5 I& f1 T8 l+ {+ W1644587083290
: `- L7 J0 n+ @% m  ^</code></pre># V( ?0 _" n8 d  X
<h4 id="282-json对象">2.8.2 Json对象</h4>
! L7 {7 U1 E5 c. c1 B! r<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串+ p( ]% S  q4 H/ S+ F2 X
JSON.parse()  // 反序列化,把JSON字符串转换成对象
6 q- b5 s" Q' F4 A+ ]* I( r% F5 g4 Y, G4 ]* C, H2 @1 c) f' b  [
// 序列化1 n0 j4 q! F) d2 m* E( o
&gt; var jstojson = JSON.stringify(person) 2 Z' }% v, R. M, i) R
&gt; jstojson  
* V/ N1 M; Y/ r* z'{"Name":"Hans","Age":18}'
& t% a+ e* |# G( Q6 `( j1 V$ {( e1 O
  t' i) Z9 n  R& u' _/ C// 反序列化0 \; x0 ?1 Q- p( p) ~
&gt; var x = JSON.parse(jstojson)1 w7 t& G/ n" \! }
&gt; x7 z/ F) Q$ m% J! @# W
{Name: 'Hans', Age: 18}; Y% ^& s: y- }; {% ^; G
&gt; x.Age. u7 h1 z0 X; T; f+ F
189 s& K9 L9 _9 ?, Y' |6 h
</code></pre>8 @0 i% Y7 n7 v) Z" e- w
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
  _4 M( ?* z9 r0 M& ?<p>正则</p>& k: o0 @: n: r0 `4 B7 s
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
' \" c; `5 o# Q3 H&gt; reg1
" p2 [3 a! i' Y! Y& ^9 |2 b* U/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& V! Z) f9 ^8 X2 S&gt; reg1.test("Hans666")4 n* N& q  F: M# g' a  ~* v7 n
true
& h9 @9 l1 m5 q5 O1 q( o9 r" `& j6 K% i
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
2 ^1 ?5 a& h9 w) k&gt; reg29 [3 D0 T) V1 m' D& ?* [. p% z, ]
/^[a-zA-Z][a-zA-Z0-9]{4,7}/  c7 V3 x0 [( ^* r4 x% a
&gt; reg2.test('Hasdfa')
: j! C) N2 N5 S) T: Ntrue
- l  _0 v- |1 i( D% \' h% e  I* i' `3 L* ]4 B
全局匹配:% o* w7 O4 m7 D5 h4 {4 a: {
&gt; name
+ k5 D! I# t' `' Q8 M+ k+ l. Z'Hello'8 _9 _: L/ ^" @' k
&gt; name.match(/l/)2 W2 Q: r2 x. _1 T; D# Y
['l', index: 2, input: 'Hello', groups: undefined]
/ z+ c' K# V0 t4 ?- g& d
' L1 v4 k4 c* ?" P" o0 c8 o$ f! n# t&gt; name.match(/l/g)
) i, ?2 v8 P! d" a; F$ u! w(2)&nbsp;['l', 'l']
5 _! R; H+ I8 ^2 k- n// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配- S* C5 b" `. U9 J0 d

. c: l. k: }+ {4 O" e& B全局匹配注意事项:* X/ q4 c. _# W2 g; z
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
# \, @# G8 g8 e- H8 Q&gt; reg2.test('Hasdfa')
8 q7 t3 B/ b0 z4 T2 A9 Q' p1 ltrue
0 |  {' E* Y% ^8 P1 d2 h5 @- F&gt;reg2.lastIndex;- C6 ]2 [' p" W5 P8 ?" s5 u
6: P% s/ T8 @; _
&gt; reg2.test('Hasdfa')# N0 m9 m' p9 b% g9 v; I
false. k5 }! l0 C5 o6 B9 f0 w
&gt; reg2.lastIndex;' I2 D' M6 @+ U) E# J9 t
0
3 T: o3 B/ _! U# y&gt; reg2.test('Hasdfa')) ~! z- w( {8 ]% ?" x! M6 t8 N
true( a% U' I( m0 h: _) Y
&gt; reg2.lastIndex;, d6 Y1 Y2 C/ p
6
1 ^3 s" q! m2 v! W) S5 R* I$ G&gt; reg2.test('Hasdfa')$ T5 I( P, k' g
false0 `' P0 U8 Y' t: ?6 H* O
&gt; reg2.lastIndex;
! s& P% V, [% [# @0, g/ w, [  l. N8 }
// 全局匹配会有一个lastindex属性/ p6 W/ B* W; N
&gt; reg2.test()8 B4 K$ m3 r' n  N9 F9 A3 H2 n- h$ V
false
/ ^- s: V$ a: a( E3 r9 T' K9 f&gt; reg2.test(): F$ b- u% U" F9 L/ i
true) u- O5 l+ F4 Y; m# b
// 校验时不传参数默认传的是undefined# U& t) d, }3 W, F( ?+ D
</code></pre>1 I. }( F4 g! E5 e# W
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
+ u. n; f+ J/ C# v& q3 I<p>就相当于是<code>python</code>中的字典</p>! `4 a5 D6 u" M6 T- f  v2 ]5 B/ w
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
2 q+ n: m4 s* x8 n&gt; person4 r* [" l1 o' m7 v
{Name: 'Hans', Age: 18}
1 X$ ]3 Q) A7 {2 V&gt; person.Name
" v4 m0 E/ q# t# X5 @8 |'Hans'
0 c) L# s* z7 z. S9 Q&gt; person["Name"]
. H0 |; r- B) g: w- U7 O'Hans'
: @0 {' h5 G7 o( C! t6 P: X' ?) ^2 F: p0 S9 p
// 也可以使用new Object创建4 j4 @3 c$ y0 ?" [
&gt; var person2 = new Object()! M( V  ?; V4 N% N
&gt; person2.name = "Hello"
3 _. n3 l# c+ q$ R1 k'Hello'; w7 }+ X5 |7 s$ ]  _
&gt; person2.age = 20
5 F% p7 Q3 B4 z2 V5 m6 j3 n% @20
! ]: A' a" E8 X6 B" b) w</code></pre>/ ~4 _- h8 {* m2 y5 F% {2 Z
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
) o( R. d8 t3 D# L<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>8 X! N; e5 W8 C/ B
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>9 f5 h  \4 G( n% j8 }2 e
<h3 id="31-window-对象">3.1 window 对象</h3>
/ f, v6 A. W' w) ~<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
5 N4 k6 ~! X0 y' \<pre><code class="language-python">//览器窗口的内部高度$ Q0 y1 W- B4 a  ~+ E* G
window.innerHeight
: ^/ l" Z4 [0 T  E  b* a( `0 _4 Z706
! h6 ]. R0 L/ D; B' w4 a% j//浏览器窗口的内部宽度. B' |/ h6 i1 m8 Q: G3 O0 X) [  j' t
window.innerWidth( y9 @" k; @0 w7 ]1 A0 S! x
1522
  E' H) e0 u5 I: q$ j// 打开新窗口: [8 ^3 ]% N# ?" O/ g
window.open('https://www.baidu.com')/ `  P& i& d9 \% k
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
3 b2 |9 |  x  L, D/ g- h// 关闭当前窗口2 j7 |6 g- V7 S: D- r/ g
window.close()   Y! H  c- ~0 t) L
//  后退一页
3 W% j  y9 o. G! {2 Pwindow.history.back()* S- P2 V* ~/ }8 C
// 前进一页* F) r. ]' J$ A3 a
window.history.forward() + Y2 Z' F! N8 W5 x6 B/ l, ~
//Web浏览器全称7 [+ P* `' Q' t: X+ ^% P: v
window.navigator.appName
; M+ q" H; u1 ~  J, o# x'Netscape'
% D+ E7 p- {* Z- r/ E5 }7 R// Web浏览器厂商和版本的详细字符串
' y4 D8 c% d% E7 Vwindow.navigator.appVersion. a. }# a' b$ g' _4 l
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( @( t7 E( H6 }# t  X
// 客户端绝大部分信息" _8 L$ {1 c6 \) e, l
window.navigator.userAgent
. ~  O& {, q6 q3 h! U4 C0 D'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
. I' {: M( p' p: u. `* @9 V0 o// 浏览器运行所在的操作系统! ^) I) M8 F9 `( \* s" }4 ]
window.navigator.platform" W: Q; X0 B0 R0 |
'Win32'+ n8 ]- R3 x& ?% b- A- n8 e( {6 I& L
' U4 b" c9 V" j7 b0 J  Y" `4 z
//  获取URL
* K3 {! B' ?7 L6 \* h8 Pwindow.location.href3 `/ X$ j- {) c" U
// 跳转到指定页面: G2 X$ V3 o$ }* |7 B0 q
window.location.href='https://www.baidu.com'
. `' f# `8 ]# n5 m: Y- N// 重新加载页面
& _1 w) h/ T# B8 A3 twindow.location.reload()
! b5 c& f) U5 U+ R</code></pre>, z0 e, O2 }$ D& |
<h3 id="32-弹出框">3.2 弹出框</h3>
% S! f9 m  H: @) P& L<p>三种消息框:警告框、确认框、提示框。</p>  v) v( w7 l4 g. Q% f
<h4 id="321-警告框">3.2.1 警告框</h4>
  y5 Y+ X* q; {<pre><code class="language-javascript">alert("Hello")
* A" f0 x) `% G5 H! F# l3 }, V</code></pre>/ v* }9 m( I! @! `
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
) S& p0 O& j. W. D<h4 id="322-确认框">3.2.2 确认框</h4>/ d! [- J- {# s+ F
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
* ~8 ^; H9 S) j<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
1 ^2 g0 Z3 d% Utrue
& t$ o  b/ `/ p2 G' n& o&gt; confirm("你确定吗?")  // 点取消返回false
) @8 w$ v2 s; b. |: G# f0 Sfalse
$ x; S: f& P0 J% H) C</code></pre>( D+ j: i; y$ V3 l
<h4 id="323-提示框">3.2.3 提示框</h4>
" M. P* ]: U, Q& |* M<p><code>prompt("请输入","提示")</code></p>
& n; z. K5 y! r6 w# X" Z" }<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
3 e; U5 r  R7 W% ]6 ^8 N- Z+ z$ u8 J<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
  N# q& Y8 z$ ]2 b. R, e$ U<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
& g0 @* I# e- H% ]<h3 id="33-计时相关">3.3 计时相关</h3>% w6 q) e( D* Y9 }
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>& q6 ^( D5 j, ^: L& Q* M5 W
<pre><code class="language-javascript">// 等于3秒钟弹窗
9 `* b1 A  B, S" n0 NsetTimeout(function(){alert("Hello")}, 3000)
6 J, d/ a! t5 l6 T. ~" ^, b1 g2 {4 [: \# u5 h- c: R% Q0 z
var t = setTimeout(function(){alert("Hello")}, 3000). ^9 l2 e5 j  @, o' s2 T8 m  ]
9 i+ {; D3 G6 v4 J
// 取消setTimeout设置! ^8 B( }. l& G9 `) V
clearTimeout(t)# v+ I; F/ F; D9 x; H! C
</code></pre>
! y0 B. ~" ~$ Z& I<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
6 A; h5 P; y  e7 H  K- A4 _<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
; X; b( o& V: |8 W; |<pre><code class="language-javascript">每三秒弹出 "hello" :6 j6 n  g; d* k; ?+ `; H% g: p
setInterval(function(){alert("Hello")},3000);
7 \+ G  `$ D8 C</code></pre>, r0 G6 ~7 ]& h, R1 W, ]
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>. R/ B, o% P; V( l& O3 e; X, g- F
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);3 }7 D. W8 k1 E3 C. V' q$ z0 E
//取消:& o; V* F3 k' n% c
clearInterval(t)2 l9 ?+ h# b1 S; L& D/ g0 p
</code></pre>3 y$ k$ O) T9 j2 V% u

6 e& ]# v) L7 o
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-15 14:19 , Processed in 0.069445 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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