飞雪团队

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

前端之JavaScript

[复制链接]

8242

主题

8330

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

( ]. |+ u! [( k<h1 id="前端之javascript">前端之JavaScript</h1>8 G4 n& g1 @4 p0 n
<p></p><p></p>. n" v" c& g1 h9 L
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ s1 ]5 c% o, \+ r, u+ _
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>' p2 W/ k$ B4 a$ N- ]# p( N
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>6 S" P) f8 y' q
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
$ f, q' s! j  H, \它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>0 n! b" F) _: U( d. i3 l# Z: M, S+ [0 c& T- d
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
; Z+ E2 v: `$ K* U4 ]1 h<h3 id="21-注释">2.1 注释</h3>  Z2 |  T1 q0 G& {2 K
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
2 B" y) K8 e3 ]6 k<pre><code class="language-javascript">// 这是单行注释
4 H, O3 O& X6 p' o0 y/ x3 u( N9 ~* h* t2 L
/*" ^2 S# m2 T  |8 \
这是多行注释的第一行,
8 K" h/ ?6 A* y+ j( f/ ^这是第二行。( d6 W7 ~! T! C# D0 p" c3 H3 G
*/. Z9 b% f6 x6 }/ c
</code></pre>
8 u( V! v+ _+ {9 [# D<h3 id="22-变量和常量">2.2 变量和常量</h3>
4 B  N6 M. p5 f0 J2 H. a<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
4 R  p" |8 @1 \. I- T- K( d<ul>
* ^- h% p, ?( d" q" j9 T# _<li>变量必须以字母开头</li># f* X/ S4 _( q5 T2 o* X4 `
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>+ l; `  y1 J6 ]- C8 y& [
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
; l" l. k1 b  ~</ul>4 G3 Q; e+ }2 X2 q) g2 @" y
<p><code>var</code>定义的都为全局变量</p>
% D* X% _, }" F4 }: ^+ ^/ J<p><code>let</code>可以声明局部变量</p>* x$ @2 x1 p: z) K/ Z
<p><strong>声明变量:</strong></p>, [! F: A  A. D* a, C5 `- L# Q
<pre><code class="language-javascript">// 定义单个变量
6 P8 }' g, `4 U3 @&gt; var name
0 V/ x4 D% i/ Z8 U&gt; name = 'Hans'
5 i/ m  p# ~9 d' ]' Z: v//定义并赋值
* L4 C7 s1 j- @% |3 L&gt; var name = 'Hans'
  B2 F  ]' Z8 `: r; N9 m. k8 v&gt; name
, l2 E; Z+ P# c'Hans'
: h) ]9 E* L- h1 K7 J/ l2 B$ z% O7 O: W/ e4 b5 a
// 定义多个变量, H! _. L4 P3 p
&gt; var name = "Hans", age = 18
- x4 ]3 n# T$ X# b" w&gt; name
; i  h" l4 w+ d# w; {$ V'Hans'# Z7 F2 R; W5 Y) _1 I) I6 s
&gt; age
6 B  [- ?) l, Y1 F( y' d4 q18
5 G$ d6 r# j5 z8 s2 c; j7 w4 W: N) J
//多行使用反引号`` 类型python中的三引号# B0 b' o+ m9 s, |
&gt; var text = `A young idler,( ~4 ~/ l0 x6 Z, q8 a' E$ j
an old beggar`
" ~2 Y' P) r9 i* W% X' @&gt; text; n# ~, L. T  u0 C' e* R# `
'A young idler,\nan old beggar'# b/ ?6 k( h+ }- A- n; J$ @
</code></pre>! I, u8 t9 t& J9 M
<p><strong>声明常量:</strong></p>  p7 h. w3 g# }9 w  P  y
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>  `' x: ?  ]8 I4 V
<pre><code class="language-javascript">&gt; const pi = 3.14( d/ g5 @. i3 i! ?% H3 q4 S
&gt; pi
- S/ X+ M; P3 t+ X# X2 t$ X3.14# d2 N7 Y. X1 y4 j. ^
&gt;  pi = 3.01
4 l# V- Y- P5 Q) q  aUncaught TypeError: Assignment to constant variable.
# \- V+ j1 ]. U    at &lt;anonymous&gt;:1:4
- G7 h1 q5 j3 I( e  w/ y4 Q+ n0 o6 {  O
</code></pre>* t* J0 l1 i) @. G# I7 {/ G8 R
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>7 U! Z) S- @- h5 u* ~) K
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
4 D1 P4 g) S+ K2 g<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
0 ]& q$ K& \! ~0 ?- A* L8 q<h4 id="231-number类型">2.3.1 Number类型</h4>, {- Y4 h: h! Y% [- o4 q: }$ s
<pre><code class="language-javascript">&gt; var a = 5
$ [8 q% _9 t# k  |- u, X&gt; typeof a   //查看变量的类型  
% |# _0 N: u4 J/ \2 X( Znumber
* C+ ^% [/ ]9 Y" o" T! F1 T# K3 {9 n" G* _
&gt; var b = 1.3, h+ t" K9 @2 G
&gt; typeof b/ f. V" F) j8 \7 B9 D& }  S1 D) @
number: H* _& Y4 D: `9 A! y) E) l
+ ^" j; @! D" \
// 不管整型还是浮点型打开出来的结果都是number类型
' o/ `* ^# D/ H. c, ]8 g) w. E4 w( M, A
/*
' {% i/ c1 {( S$ g6 N) XNaN:Not A Number
, S/ b3 w1 S/ g8 U* G8 Y- v( uNaN属于数值类型 表示的意思是 不是一个数字
& k1 s% r/ o  D  m2 N1 G/ U*/
( x4 c1 b# {; C# T' [
; U3 b, L! [4 t: b. a" L4 kparseInt('2345')  // 转整型5 Q9 S0 z9 c9 C; S1 T5 k2 V0 K
2345
7 J! P# p: i$ z/ M' eparseInt('2345.5')
& s4 x  X3 p8 \# D1 p3 T' h2345* q7 K! e, c' G! }
parseFloat('2345.5') // 转浮点型' V0 ?8 O1 z8 I" p
2345.5
( n* ]$ h: m; K0 ?! X5 tparseFloat('ABC')
2 r& \+ d. ]* x) ^) oNaN
0 L8 b" G& s4 s* \. A( pparseInt('abc')5 g. v8 `8 V! a
NaN- c5 {7 G1 I/ W! V. A
</code></pre>% Y7 j# e8 g- e7 [! y
<h4 id="232-string类型">2.3.2 String类型</h4>
7 t9 a' i9 H' Q( _<pre><code class="language-javascript">&gt; var name = 'Hans'
0 `# c  g$ ~* H( Q  H- _8 R5 `&gt; typeof name
( z( w& I! K& e, |'string'" b, t: h  I8 r1 n. z/ ~% u; S
: i4 l% j* q) S
//常用方法
4 U4 J' v' Y2 y, P' L( y$ M// 变量值长度
/ c: j! B/ X- q, `, i&gt; name.length- Z' c3 ^$ M, [$ H. u8 J" a! @. K
4  Z+ M8 `0 M) L6 i
// trim() 移除空白
9 X' [, M  `0 S4 B, C" V1 Y&gt; var a = '    ABC    '7 V/ z0 |# S- v2 N
&gt; a
) @$ j- s8 X2 }* l% b'    ABC    '
6 n7 o  ]* ?' g/ a3 x- F8 `&gt; a.trim()! u( `% e) e" j' F1 v0 X
'ABC'' U. A7 S2 Z1 g) n& `2 t
//移除左边的空白* Y0 ^; W# w4 x
&gt; a.trimLeft()
9 u6 ~: j: f  w9 P'ABC    '  k6 N& Y! f/ D, W& r. ~$ {
//移除右边的空白
+ d' U( v4 c; ]( b! O& u&gt; a.trimRight()% Y: K$ R% t9 V6 `" u% v
'    ABC'
8 Z: V1 I0 {4 I6 {% A
1 @1 s) N/ h% X0 ]9 I//返回第n个字符,从0开始6 O6 g6 g8 e2 m1 @9 l2 ~1 G* t
&gt; name" G% W! ~! x, @. a+ H6 e
'Hans'! J( v$ g) @! @% Q; R, |% k
&gt; name.charAt(3)$ O: W3 d: H9 {5 d7 w* E) b& M
's'
% B4 |1 Q& X8 `. A8 X&gt; name.charAt(); O% H1 B# W4 [8 `9 C1 a
'H'
! @" r6 _) U2 A+ L&gt; name.charAt(1)# }7 `1 N5 [" h9 ?: x7 ]
'a'1 [2 d; }+ E4 U

/ ?9 \  `0 q5 o( D! r8 b: m// 在javascript中推荐使用加号(+)拼接
0 R" X. M8 b& |) ~" J  S& [* ~) M# s&gt; name
: o0 q/ Y) L' D. D'Hans'
% W0 B: l' g- m5 y4 m2 Y&gt; a/ z: ]8 t' C6 h! Y; [# s
'    ABC    '
; ?  t  w7 K1 p- W! h&gt; name + a3 H6 Z6 m+ h' ~/ Q
'Hans    ABC    '
- `( ]: f* H% k- B" B3 h$ f// 使用concat拼接
2 k8 L/ V6 U! f9 s  A9 I8 j4 M&gt; name.concat(a)
! A' N" j& Y+ I6 m'Hans    ABC    '
* }3 c+ ?6 D& w) w! I( Y- T+ c2 Y) v8 R6 }* N3 Y& @6 y
//indexOf(substring, start)子序列位置
- _: |8 B! J; @0 F: [* }* C
0 F, V& |' x9 U5 G; Z6 F8 g! T&gt; text: F$ H+ l9 u. d4 b) f
'A young idler,\nan old beggar'% }! Y8 r! r4 z  m
&gt; text.indexOf('young',0)- f4 p% w3 D6 U3 R" d& G
2# p3 {0 |$ N5 D* I3 B

* i4 @  |# X' _& j0 ^  m2 b1 p//.substring(from, to)        根据索引获取子序列
" q5 o& g. D: P! W) C. A& }. H" y! C&gt; text.substring(0,). J) ~$ C: }! J7 a
'A young idler,\nan old beggar'
8 w7 J( Y, m" V5 {3 t( ^( m&gt; text.substring(0,10)
: M7 E& \# ]- b! Q2 X- Q" r'A young id'
5 M0 k$ A  s# E2 l3 @$ p4 l2 K" Y6 b( V/ \2 y' r  z1 J
// .slice(start, end)        切片, 从0开始顾头不顾尾
* _% H! I" z; J8 ^# S5 R; s&gt; name.slice(0,3)
6 a' r- c# q7 ?5 u2 Z'Han'  _9 D2 J) L# ]  y6 y
- J7 D- i3 |4 Z
// 转小写: D. C: X) r, R& Q% l5 n/ C! _  d, C
&gt; name- Z6 v! R4 y  m' s
'Hans'' S3 y+ P, s" t) R6 j# o$ H
&gt; name.toLowerCase()" X$ N3 J0 J8 c7 [( p
'hans'
0 s+ w. @' _/ X/ |1 ~: O" ~// 转大写
5 l4 ]! g( j5 Y" `! L2 i( g" t3 X&gt; name.toUpperCase()
5 {8 l; [  {9 o'HANS'- |# t# W, q& k' N" h  W2 i

' E2 r  v" F; J" v* L; V  C// 分隔
3 w! ?# v. K* i7 G&gt; name! |% W" b+ @6 R4 G6 G
'Hans') ?8 A6 ?- b9 \+ e
&gt; name.split('a'), Z' t% y3 Q% ?/ i9 \( E
(2)&nbsp;['H', 'ns']
4 w9 o; |6 r0 I</code></pre>
# P9 F" _$ D3 ~<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>( M+ q' h1 y8 n0 D. v6 x
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>" Q% b2 F/ p7 k. a" I
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
, O2 Z2 n6 s5 C. x1 S( D<p><strong>null和undefined</strong></p>$ _& k7 |0 [7 q1 c) c* G% j8 R) Y: {, Z
<ul>
8 d8 b$ [5 W$ `, V5 |<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
; _- m7 d$ K$ c- a& a: {<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
! j0 d, V/ t. z/ i</ul>  N* W2 O) ^/ z( ^( G8 L/ d
<h4 id="234-array数组">2.3.4 Array数组</h4>
* ?3 C4 q9 E; y" F' S<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
. k+ `1 G' _# p# i$ T<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
" G. B! q# F. n5 g) _* y+ W&gt; array1- D& X# M. U$ w$ P# Y' y
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
4 a5 A3 w/ r+ X: P1 M1 J& J, |&gt; console.log(array1[2])  //console.log打印类似python中的print
( z2 c+ f  }1 F& D: `: K3
+ o$ C) k5 N6 a; E3 A# j9 W5 E// length元素个数
- S) K2 `. |- R. E: Z  @&gt; array1.length! d, Z+ T$ G* L  P
6# y  N' G6 {- ~, ?4 b2 A
// 在尾部增加元素,类型append
0 c+ J) @) N) D: E" [&gt; array1.push('D')
  Q3 u# S( }9 ?0 s" W- w/ P  \7
0 Z. e- z  L' J3 Q&gt; array1  Z  S( ~* `  N3 \' \
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']) h# q$ b1 W# M9 ?
// 在头部增加元素
5 f3 b7 S% D7 ^2 l&gt; array1.unshift(0)7 N! `& ]3 r3 F# \7 ]# c% R
89 E+ |0 ~4 S$ B$ O7 |" G0 p7 N2 {
&gt; array1) o0 s; ?- `! u! ~- n  K
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
8 ]5 ^6 g. y3 |; ~/ {5 x1 I4 B& {- C9 M2 j+ g( S5 Q
//取最后一个元素
$ J; O3 o% H2 H&gt; array1.pop()
  z9 L6 q$ p* i- Q'D'5 Y. d& y- j4 N7 U
&gt; array1
- g4 {1 q& M- `5 I' [: D(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
: W' b; I( m6 g//取头部元素
( L$ W; M5 A3 U# |&gt; array1.shift(). ^! }5 ^  _* z) w* M
00 h- F: ~& _; c& B- @$ D
&gt; array10 Q) d  y! p! Q) ?: {1 |
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 b- `" x1 [. J& J! `/ x' Q5 M: h

3 s& Z8 }' r& x* C5 a1 q; d0 ?2 q//切片, 从0开始顾头不顾尾4 C. S% [' e6 E
&gt; array1.slice(3,6)
  y9 t$ ^. ^2 b9 e(3)&nbsp;['a', 'b', 'c']
" F3 j( S+ i) h// 反转. E* S6 C: b7 n5 T9 c
&gt; array1.reverse()6 a2 _* Z# @# q; M/ v" H$ X
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
: ?# O+ t0 t8 D% n. l// 将数组元素连接成字符串
) U9 f2 c' @4 S&gt; array1.join() // 什么不都写默认使用逗号分隔
, Y  b9 @$ @1 y3 l'c,b,a,3,2,1'% J6 P) F. P' J  w. D
&gt; array1.join('')
& o/ p3 B; r3 [; S'cba321'
8 _: \" T2 L: f, _' `&gt; array1.join('|')) j3 P- g. |6 M) }' z0 n7 A( L
'c|b|a|3|2|1'
7 O1 p% _+ m' H7 T$ t
. G: ]7 ~- h6 ~3 B4 C- {// 连接数组, B/ S* \2 n, T2 ?  Q
&gt; var array2 = ['A','B','C']. Z( U, i. G5 a! S
&gt; array1.concat(array2)4 [& E3 Q3 J4 ?1 }' c4 B8 I
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
  j& @- {2 r5 P
9 M7 Q! c( o& X' e9 G+ V// 排序5 @% p# d3 m: J
&gt; array1.sort()
( `# P$ c  y6 f(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 P* L. t4 N7 j: ~: \3 A+ S# Q4 X5 ^0 w
// 删除元素,并可以向数据组中添加新元素(可选)
- j" m' L3 V! M4 V$ |, p, A&gt; array1.splice(3,3)  // 删除元素
: Q: }/ P/ G5 X* T/ D# v$ d% i(3)&nbsp;['a', 'b', 'c']
0 S& n2 X$ f6 a% ~- V& ^&gt; array1
. f+ ^* i/ B7 {5 D(3)&nbsp;[1, 2, 3]
2 A% t9 z* z. I& J- S&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
  T) ~& p4 L; @/ J# C0 l$ f: K[]
6 `4 n* e. B' a- l! B6 f&gt; array1# m: m7 i, Q. J/ Q' X5 K9 d7 J$ z; O
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* h5 o, m2 i& n* w$ q# X! D
5 \! x) o! m& z3 e* k+ q
/*
% Q1 [  S0 Y) j: z: c4 Xsplice(index,howmany,item1,.....,itemX)
+ x5 }  r7 P9 H# Z& @) T/ ~index:必需,必须是数字。规定从何处添加/删除元素。
1 K& d$ ~8 I1 f; Ehowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
6 M# W' ~( v5 r) E# r, U0 Qitem1, ..., itemX        可选。要添加到数组的新元素0 Q# J0 L3 `: F/ t& M# K
*/
& o2 {4 A  L) ]& S( E! w  c0 Y
: G2 S2 q% w: f  }3 S// forEach()        将数组的每个元素传递给回调函数: |6 N- s% t5 z8 [3 }# W+ W7 T
&gt; array1.forEach(function test(n){console.log(n)})
2 D5 v/ B! s5 J( i! f4 h6 o 1* D/ Z  w5 _/ F% h( S
2
  `" G5 e  K3 t 3! I0 E, y. t( e9 L- h, ]
A  ]+ W, Y; s* f, R! O
B, r0 E% ^5 H5 Q/ B
C
9 j2 [3 {& g! j! E* K4 c' c// 返回一个数组元素调用函数处理后的值的新数组  a; ^8 G# x5 p' D
&gt; array1.map(function(value){return value +1})
+ v- f6 H2 _# h8 \; I, I) Y(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']' ]" p+ `: X& {0 h$ E' q
</code></pre>
  S( F, z* i1 e! A- F<h3 id="24-运算符">2.4 运算符</h3>4 F/ s1 \% Q5 F7 k: z" a
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>! J. N" R2 h, R
<p><code>+ - * / % ++ --</code></p>
- C1 k* N; W; R, J. u6 E. f2 f7 ^<pre><code class="language-javascript">&gt; var a = 6
5 M& A6 D9 |5 i; d. B1 a/ J&gt; var b = 3
( u/ E6 P" c. q  k; T// 加
- X/ e, f5 I  C1 M" n# u, u# t&gt; a + b: t7 S- @5 s. H& J- x) b& K
98 P! T" F& v2 y# T* m; x
// 减. T1 p- v5 k3 ~" n/ n
&gt; a - b! x% p0 a: B0 u" a9 G$ W
3
9 ]+ ~" O9 d6 f) F- l// 乘
2 N. Q! U! i- \+ _6 G) f&gt; a * b2 ^6 e1 `* M2 g1 v/ b
18
. o9 ]+ C& T' l4 F5 u// 除
5 n5 ]& r  _* D; }! g6 D&gt; a / b2 d* R7 X& I1 T! i& k9 p6 O! X6 M: t
2
$ L- O0 G9 G/ X// 取模(取余)8 }% I: h# k( x0 A' K% e, i  d9 @( d) Z
&gt; a % b, o) ], h% V# B* Q% \% c7 `* W
0
- h1 L8 W. j( z. I+ S// 自增1(先赋值再增1)
/ E0 ~$ M: ^: Z2 H  s: i3 U) w&gt; a++
! Y+ _, u* N. j) b& y2 ]6
- i8 o5 ^+ m: n, L/ C, X. `&gt; a
. L$ t- r5 J9 s) R1 [) C7, o1 c: y$ h/ ?1 s
// 自减1(先赋值再减1)0 y( F. [4 V# i. @
&gt; a--' D0 i9 |2 T% w  C. C( v
73 N& y4 m0 [, p
&gt; a
4 C( [. N2 Q; F  a, q67 o/ {: E" W# D8 e8 a% \5 ^
// 自增1(先增1再赋值)
. m, X9 l. ^  @0 C&gt; ++a
4 ~# w" x2 M3 `7" c; k7 Y0 s& n! Z* ?
// 自减1(先减1再赋值)
6 L1 x: a1 A% y&gt; --a
& N9 d$ j4 s9 |/ x# z63 x0 v$ _: d, ~
&gt; a
/ L5 v" t' l8 m( {' i7 A61 x. R4 r$ j+ z, }
6 ]/ [+ Q. a- A7 p' w6 I' Q0 f
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理, Y- E0 R* a2 q# v4 ^4 T7 w
</code></pre>6 B' V7 ?7 Z# U# L2 u
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
- W2 g+ d( F4 I% X, C9 G7 t<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>0 H, H! O1 D4 }  \; P  T, Z4 b9 v
<pre><code class="language-javascript">// 大于2 s# o8 a& F5 c8 {. U
&gt; a &gt; b
7 Z  R( j4 v9 W* ]$ p2 N8 @+ w% Atrue" D; t! K2 ^( I$ Q) q
// 大于等于/ U+ g3 W3 }' Z. x
&gt; a &gt;= b
1 R" e( G! ]6 x) W- vtrue+ M" y! m* b; F  o+ k: O
// 小于  S2 v% E4 {8 s
&gt; a &lt; b1 S8 y) l+ X- G4 L1 h  {, c! _
false/ Y6 A+ i0 U/ n* A6 P
// 小于等于
: t5 U8 t3 f9 s# n2 l# P9 Y&gt; a &lt;= b' I2 _8 e+ x0 g( X
false, E9 N! P8 {  E" r4 A: u0 D
// 弱不等于
; L7 }7 K6 {( ]4 }, i&gt; a != b/ }0 R$ o! ]: `: U
true6 X* i( P/ ^" N0 i$ [. l# h0 a! \6 i
// 弱等于
: P9 }  f; @$ {&gt; 1 == '1'3 z+ S; r( \5 {% g$ M& V% P! i2 j
true9 b" P$ v- A& m" }8 o
// 强等于
8 A$ F) j- ?9 ?2 `8 f7 e&gt; 1 === '1'
. c$ d5 i3 @- i2 t' mfalse
' q+ I. }5 C: G+ O" N$ k  z, Q// 强不等于
, U9 ^2 Z+ m6 B% {  ]2 k& S4 }&gt; 1 !== '1'
  K3 E" F5 A8 n& v" Ztrue
5 m  G( o9 K6 \( K! a% t6 p8 g' P  ~( Y: B+ G* N
/*  N( {4 [. a" Z3 b' D0 u
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误. |% l4 x: \9 \% \3 o
*/
/ i6 }& }6 U* }, E! Y6 K8 R; c+ T</code></pre>, ]2 i! a9 ]) X8 o" N/ H6 q" ]. M
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
) u+ {6 T3 X, u% p<p><code>&amp;&amp; || !</code></p>
. S* I  @  |: r- N<pre><code class="language-javascript">&amp;&amp; 与
3 x: ~2 F/ d. T4 W|| or
6 {  P  l( L# M& _3 E! G! e! 非
2 A# i+ q( ^+ a( r* k</code></pre>
; I4 c, \. V& n/ X2 i' o2 m<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>$ H8 s8 w0 K* ]9 E3 _  o9 {
<p><code>= += -= *= /=</code></p>
$ ?3 L+ p) z( w$ _8 ^# J1 n<pre><code class="language-javascript">// 赋值% Y6 v- J/ v  v3 K
&gt; var x = 3
7 E% d/ I2 L9 |) Y" i// 加等于, i$ ^4 h: M8 P: C$ g5 t
&gt; x += 23 e  X$ U' o5 c! n6 o8 Y
5
- Y0 n+ K- l1 ^+ K7 b: [// 减等于
5 x! _/ w+ S7 }5 b; K3 q&gt; x -= 1. d; t/ @# _4 l6 Y2 s2 D
4
4 _- p$ v) c; y0 b8 A' s// 乘等于
! t& C3 {9 o# B% N6 C&gt; x *= 2
, D5 h0 K/ {4 o/ Q; M80 L7 Z& ]" y4 X  G3 I
// 除等于1 E4 {- C) B7 k. h
&gt; x /= 2$ l! {" \3 V$ A. H- v. P1 l
42 X4 T: W, g) h4 V. W0 B
</code></pre>
7 Y: r+ Z$ v* `<h3 id="25-流程控制">2.5 流程控制</h3>; p, m5 |+ P  e2 ?: `  f' [3 R. p: O' n
<h4 id="251-if">2.5.1 if</h4>5 _* u3 q: G$ e0 |
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}; I, K# ?0 B- i/ o1 U% A6 U& G9 ?

( p6 W* o1 r; i8 I, E- |7 V" X&gt; var x = 3' V- @/ k) H$ g) L0 a' D, J
&gt; if (x &gt; 2){console.log("OK")}* u9 ]5 z5 [" N3 O5 t8 U
OK" J& P+ L! |5 _% @7 ~# {7 N
/ p; z! o, W+ l4 i+ h" ~
2, if(条件){条件成立执行代码}   W3 X' A+ o# h! \. U0 a
        else{条件不成立执行代码}
  H3 z" W: [& R% x; g
5 Z! s7 U) W+ d/ U3 a&gt; if (x &gt; 4){console.log("OK")}else{"NO"}! L) [, p- n: ?; b& z4 C
'NO'
9 @0 a9 z5 l4 A6 A1 T9 @* V+ q7 E* \9 a$ P& @/ V" I6 ]& K
3, if(条件1){条件1成立执行代码} 7 x7 f4 ?) c& I+ J" f
        else if(条件2){条件2成立执行代码}
; e; [8 v6 N- c: H+ A8 J    else{上面条件都不成立执行代码}9 b! O3 }: w$ a) ~% ^, \+ y6 x

8 X+ w- h% Q4 J2 q: @+ g! g&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}$ `. V5 P7 \2 |3 M5 F
Ha/ N& [+ T7 Y; A# _( ?
</code></pre>
% o8 d* b& O7 Q: o1 r<h4 id="252-switch">2.5.2 switch</h4>
. ]" {) |8 ?, [5 X. v<pre><code class="language-javascript">var day = new Date().getDay();- [/ ?, f3 v3 h9 L  W: B
switch (day) {
4 C# r+ H; y7 O1 v  case 0:
6 ]0 i! Y, ~$ h" s. ^  console.log("Sunday");) i9 b3 Z" I+ t5 b" c- d
  break;
% @. J1 x( O$ A6 \1 L$ \  case 1:
- A/ H- I) J# B" G8 I  console.log("Monday");
7 ]0 x3 |' c- S$ m- R4 A  break;0 Y" S4 m% w; h0 N. v
default:
: C. F6 `5 |& F  console.log("不在范围")
8 f: e6 f: T5 J* m' i}( B- w8 T  m6 G- {( I; R: W2 |
不在范围0 Z4 v4 O# V* N
</code></pre>) P4 E. t2 T, F( }. z
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
: \8 B% k9 q0 L<h4 id="253-for">2.5.3 for</h4>/ ^, G6 V9 m# |7 C
<pre><code class="language-python">// for 循环
* w; W  h" B3 o' h% B        for(起始值;循环条件;每次循环后执行的操作){
8 w1 u) l9 x) O( A4 U        for循环体代码1 h, l; R8 r# t, r3 c' P& y% f- e
    }8 V9 D8 [+ R6 g1 m7 h6 S6 j0 `4 y
. J& [2 `3 F3 r1 l0 ]8 s$ _
for (var i = 0; i&lt;10; i++){  q+ T( M8 L/ ?+ M9 y- e
    console.log(i)- Z2 X' q3 |8 X2 p) Z
}
5 k! \7 V7 S' u# W        0
+ Q( `5 W* j! }7 V- I: i9 d* n        1# a, ~& n, ~! C5 _% W' H
        2( O" c+ Y3 H2 E/ J+ j5 S9 |
        3  x/ x3 m" A- ]8 b
        4
* K0 z0 j7 V3 b3 ^- U        5' ?; i  _) e' @- p% q6 L& b
        6
' W; @" R8 P1 W. T: L; m9 s/ d, o+ L        7
3 y3 j0 ^6 Z6 Y9 B        81 x8 h( l* j2 s9 t' h; l
        9
5 T4 b9 L! T6 b) S8 w0 r# l6 r</code></pre>
; p6 u: b& w' ^: G* E' m1 B<h4 id="254-while">2.5.4 while</h4>! |1 G6 d% l! X( R2 V3 @& v
<pre><code class="language-javascript">// while 循环
( s& \$ V, `# e9 a- j6 s        while(循环条件){. w, h0 }0 M9 F  C
        循环体代码2 }2 G& T+ z: s, N- G4 ^+ a% `8 H
    }
1 J1 d$ E0 X/ u  |& I3 K/ N& g9 s7 h3 m) O7 f
&gt; var i = 0; P8 C  r5 j- S" n/ ^
&gt; while(i&lt;10){
+ s% W' x, r& A  u- [' @    console.log(i); w$ D. h  i. t4 E
    i++
1 U" D$ D# e$ G! p& U$ J* k, T- [}/ D2 I5 p4 Q& J8 C
0
0 ]. P1 h4 B7 m; P+ e' K: V 1) A6 H$ p  f# c' u3 a( ~
2
( p+ F. e# R& V' X* Z9 y: L1 \ 3
3 t" B/ J& h& d! n( Z 4
+ A5 G8 N2 X* M 5
" D( o: g0 W  F5 d' G8 Q2 G6 n 63 o/ u( b3 _: J5 g9 V3 D- L1 @
7& n" D5 \$ {- g. ^
8# D4 z% b- |3 v% [( k: Q
97 G/ P% G$ f, O& ^& }
</code></pre>, U% w3 c6 s7 A$ N1 @! i5 T
<h4 id="255-break和continue">2.5.5 break和continue</h4>6 T8 Y2 x8 m$ f& w7 d$ w
<pre><code class="language-javascript">// break
5 ^/ Y3 S8 [# E: Lfor (var i = 0; i&lt;10; i++){
. P' d; v" Q8 p& w  |8 ^) \% U$ s    if (i == 5){break}
& V6 ?: \+ P7 F; T% n8 l    console.log(i)& e( P2 U0 T8 {# R% b0 x. A
}
3 ^, X7 ]; k. l$ s) q% Q 0
  p) H4 T# n+ z# Y  z 1
% d7 f3 ]. H- P) R3 V 2# Z% q% u7 K9 f/ h2 w6 H  x0 t/ y
3
- I5 y8 h" G% q2 o2 Y  G6 C! ? 4
# ?8 t* U0 L3 R2 w: q// continue
0 _, l3 T# p( Y, w( _7 [  }for (var i = 0; i&lt;10; i++){
/ Q# F2 r% m" i/ N. i; v2 {0 w    if (i == 5){continue}
6 U! n/ v: d6 d( p9 {. M$ w; Y( a    console.log(i)& ~6 k" h7 q. i# @' q
}2 ^' t" Z  K) T
0
  J  c, U1 Q: L 1
0 h, D6 \. T* Z/ D 2
$ |4 i& {- B5 @$ z- ] 3
, n6 y( q  B* X3 _3 p' P& w 4" w# J, c- w! }# z
6
3 z5 y  `% ~: H( B# {8 G 7- k2 Z- S+ b( O! j
8& o, h* |6 R$ Q" P, e) L
97 @( U7 X: v) E" _) ^
4 G4 @! a5 r+ n  D- }# u4 @
</code></pre>' \) {& T9 E' q* S; k
<h3 id="26-三元运算">2.6 三元运算</h3>8 q+ U6 J% g' h3 I* Q
<pre><code class="language-javascript">&gt; a* S# C8 g9 y' l6 _+ H) r$ }
6
- U% Z4 G8 F2 Q2 }8 Z* T&gt; b  G3 q. @9 }' ~: E
3
9 h' J" D$ [& n- ~9 ~4 D! H* c6 t( V5 _  l% Y( l; a) o
//条件成立c为a的值,不成立c为b的值& d4 N* U2 U7 S" M" D5 M5 A
&gt; var c = a &gt; b ? a : b5 d3 a- D5 ~3 M" `' Q
&gt; c! R5 u9 k; T/ B5 l
6# x6 j1 G+ l; b* W& y. G; t6 q% X* y
- W6 }3 j% ?7 q2 t9 i: Z
// 三元运算可以嵌套
0 p& P) Q( L8 ]' v+ h4 A2 B. Y7 x/ f</code></pre>9 e5 X  x8 s" x% s+ X
<h3 id="27-函数">2.7 函数</h3>0 K" \8 k% m. d3 y+ Z" L: x1 Z; w7 i
<pre><code class="language-javascript">1. 普通函数+ z- Y) F" X: I7 P
&gt; function foo1(){4 s+ r) m# [7 Z3 [6 v1 e
    console.log("Hi")
' m$ b6 Z( Y6 E. x}7 B. M: ]4 \. L
$ [3 s$ y+ G" y" s0 f
&gt; foo1()
8 m) k6 Z- D0 P3 B: w' `" m        Hi
4 q! ?  m( A/ |' e9 [2. 带参数函数( T. Y$ ?! U3 c' D/ X$ w
&gt; function foo1(name){
+ S# b8 w2 X6 e, u. Q6 Hconsole.log("Hi",name)
- b9 r$ R5 E- v! ^( S}
& r, P0 ^8 u: G, s/ v7 `5 S( J) I) S  g3 g) t, R* A% k
&gt; foo1("Hans")
) Z: l2 @# z+ K" zHi Hans
$ Z2 w# J+ C+ v; P4 t
* v$ v2 f" R- |3 t' E&gt; var name = "Hello": Q2 }4 Q6 g  v
&gt; foo1(name)/ `: @2 n% a8 h2 h& W
Hi Hello
4 i  A3 k- H3 f9 T! q7 W. k5 s1 a! n1 `9 m
3. 带返回值函数
( y9 }; n/ m5 N&gt; function foo1(a,b){9 q+ s, D1 p2 f$ ^* W
        return a + b   
7 a: h5 g" c( O}
" y+ @) F$ X8 F% T&gt; foo1(1,2). m, V7 E/ X( a% ~
3
+ h$ ~9 _" B" f3 [2 i% n3 K&gt; var a = foo1(10,20)  //接受函数返回值
7 \' l, A) a; i, i& r, P* h$ Z* v4 U&gt; a4 l8 W( o( P5 B
30
+ D- p8 D0 J# m/ K4 [
" V, Y- l9 D' B0 f4. 匿名函数* S- |1 n. [3 K5 r
&gt; var sum = function(a, b){
; x  n  v6 O% |3 p9 f$ E  return a + b;. k7 Z1 y) G, x% a1 T
}
  ?% H+ F$ U# l& ~0 a& R1 b( J+ ~&gt; sum(1,2)
7 W7 c( q1 \" c3 [, S6 y. O3& J2 c* F2 K% R, N
- X" X- U# h0 h( L
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱# D0 Y8 s+ F9 Z
&gt; (function(a, b){
& q) l; ^1 N4 k) W$ q5 U  return a + b
7 i. s  l! L. e})(10, 20): f1 w" k  N" e' j3 L# |6 c
30: F# L$ ~! V. o$ v

* Y1 S$ |! K$ V' ]; e* C5. 闭包函数
$ N$ z* }. q: t- k// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数7 R  ^2 b" ?. b1 v" a/ ]
var city = "BJ". J) f+ q! C- b! R% c. j' Z
function f(){/ z- D. n! M; a) J6 z: v, }
    var city = "SH"
: [# x- k/ ~1 M( C; W    function inner(){+ I# V& U1 F5 H' E( l
        console.log(city)
& S' C, Y/ g0 ~" Q8 b7 n    }
2 a! Z9 h3 P( Z( b" p/ a/ l    return inner0 Q3 ^; s, H' o! R9 \* f2 L
}
) ~& v8 b$ |1 b  Jvar ret = f(), Q  E" Z' q9 j  n! H5 g
ret()
( D; Z9 N$ D6 C. C2 o  d执行结果:* f3 }2 ^0 _. \  J' X
SH5 A5 F* R/ r5 \6 b
( a: e" K$ i' S9 h7 t2 V3 p5 t
</code></pre>
" ~5 A2 i1 _' ]1 W' d2 t<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>; Q& A  L1 Z4 _3 j8 |2 v
<pre><code class="language-javascript">var f = v =&gt; v;
/ Z1 d% `3 ]$ |4 X) s// 等同于) m% c. W4 k+ ~
var f = function(v){
. ?' M7 h/ I% \3 j% Q+ f  return v;
4 v% h  O$ ?, N2 o}2 D, @2 ?+ a" Q$ o4 B/ E! j
</code></pre>5 {3 Y9 @$ k! |" Q
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
( ~! ~5 {  w+ S5 p0 a/ e! e<pre><code class="language-javascript">function foo1(a,b){
1 s$ {! x- \/ w! S# l" `    console.log(arguments.length)  //参数的个数
1 ?1 m# Q* a% O" i, @) a    console.log(arguments[0]) // 第一个参数的值
2 k5 L" ?0 X4 t        return a + b   9 R7 T, {3 a" J: k3 g1 T
}0 [5 g8 A: ]+ R) ~3 R/ R
foo1(10,20)
; c4 T# n, P, E结果:5 H) e) r% Z- _0 W) u6 V2 y
2          //参数的个数
7 ?+ o9 l  s1 w$ Z10        // 第一个参数的值+ p& \* ]6 F1 O/ k& S( \' J- f
30        // 返回相加的结果. r/ l, S- }$ \4 t; s& o* Q
</code></pre># X3 M& {& b& B) |' U* d' V0 ^+ F
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
7 X& S, Z4 |" t2 w' `: G<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>) J) t. f  F* L
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>% K; L7 I6 T- R8 H9 M
<h4 id="281-date对象">2.8.1 Date对象</h4>& h( o- V( ]* O6 q
<pre><code class="language-javascript">&gt; var data_test = new Date()
. B; P4 k- ?! l) E, B7 D0 f( ]&gt; data_test  P, j9 T: ~, ?7 [2 ^( V, G9 y# L
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
) G: q& A) F0 _. R+ _&gt; data_test.toLocaleString()$ c8 {1 ~7 W6 U0 B
'2022/2/11 下午9:44:43'! H7 m- C  [2 S1 V

0 D2 Q9 e& K+ H( t, k% J' i&gt; data_test.toLocaleDateString()
- p, l0 ?  J! X- j5 a$ s/ Q'2022/2/11'
! {7 G5 f3 o( a# ]2 o* |2 s
5 v1 P$ a  T# j1 L4 u+ x6 \&gt; var data_test2  = new Date("2022/2/11 9:44:43")5 T' l% A% k, N- l7 N% V! V5 L9 |
&gt; data_test2.toLocaleString()
" Q- `* |$ M+ v6 l6 V/ T'2022/2/11 上午9:44:43'
( B" m3 U5 M8 Q, D0 u) `4 L9 k2 w& G
: R; ^  \5 ^+ Q// 获取当前几号
% ?. S" B# @( T" i&gt; data_test.getDate()6 ]1 P4 t* t1 \! Q! ]' `9 N
11
$ d1 S# j) q5 _// 获取星期几,数字表示3 ?; Y5 F8 Q; F3 \. h3 G( h
&gt; data_test.getDay()  
! t3 @: ~* D  h% A5
6 w% i" {" r. O" f1 s/ C, h// 获取月份(0-11)
- |' t6 L% [+ @  t' r, \  d&gt; data_test.getMonth()
. {. N+ l7 W: Y- \& P+ G1 P14 r! C5 m5 d' O5 D3 Z4 p
// 获取完整年份2 c: z1 I  b$ n  g# y0 ]$ J
&gt; data_test.getFullYear()7 b; o) \6 e& |* x5 h
2022
* I0 \# r* x9 [// 获取时% x5 ?! Z9 Y& K; x. T
&gt; data_test.getHours()
& r1 G) n) w3 l4 g- {21% R: x6 L1 H1 f+ m1 k7 _- F4 l
// 获取分
8 H6 P+ I  m  Z, s# h; o/ P&gt; data_test.getMinutes()
6 C' O& c6 m8 t- f0 R44
9 `* z1 r9 m0 x' \// 获取秒
1 a+ i" p1 V9 j$ {+ ~4 J: n  @2 o&gt; data_test.getSeconds()
2 f3 V' m5 e# M* V2 X( _$ W: ?43% V. ~8 D9 c. n! I
// 获取毫秒- |1 w! c0 o4 e: C& G2 g7 S% g6 x) V
&gt; data_test.getMilliseconds()
  q) J' ?0 X; s9 d2907 x' _* D6 J  s
// 获取时间戳8 F, k4 t) r  f& Y* q' N
&gt; data_test.getTime()5 N1 P/ c, h' N
1644587083290
5 a. l4 ?3 v9 B6 }& p5 `' [5 |</code></pre>4 ~4 `: g, O6 q9 h- Y9 ]7 l
<h4 id="282-json对象">2.8.2 Json对象</h4>) W, j. R1 B8 G$ i# o- X- J
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
2 h/ [0 g; w* i: z+ k0 IJSON.parse()  // 反序列化,把JSON字符串转换成对象, \& Q3 c, x: y
% T8 Q5 _( j; ]% B; E; z
// 序列化5 W4 M/ a8 y7 E7 q( g6 v% }+ J
&gt; var jstojson = JSON.stringify(person) % k9 `& v% v/ l3 }/ W4 l! y
&gt; jstojson  - F+ `( z+ q7 Q5 D% K7 Q! O
'{"Name":"Hans","Age":18}'1 Y1 D4 ]4 [+ q. k6 L  v
. b2 \5 Z. v7 a( `0 m7 N. h% @
// 反序列化
& X7 i) Y% q" z* @  J4 M' _&gt; var x = JSON.parse(jstojson)0 n" t4 Z) h4 Q
&gt; x: t3 P# z, z* M: K% ^# c
{Name: 'Hans', Age: 18}  R* Q8 N9 h  q
&gt; x.Age
2 Y# [8 }" c' s) \. ?18
& C  @6 I) V8 h</code></pre>! q) S7 P: X6 N1 c9 f3 B. m7 q4 x
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>9 d3 ~* _% u8 |" ]! F% \$ Y5 k0 K
<p>正则</p>
2 r$ ]6 L2 ~7 O8 A<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
! p2 x1 y/ G& y&gt; reg1/ }$ E8 u  f4 n& l" \7 U4 z1 j; R
/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 m3 A) l( X& W* \8 w
&gt; reg1.test("Hans666")) Z1 M+ M' n1 T9 s$ p
true: k8 B1 r! a( U) [9 i# A+ r/ B+ p
. [% E) O' h# u" S. F( h
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/" X9 i7 ?0 ?+ _+ F% w$ L$ t
&gt; reg2  S+ ~. p: E, \  e& Z
/^[a-zA-Z][a-zA-Z0-9]{4,7}/  E* e7 u# _9 X2 Z( R
&gt; reg2.test('Hasdfa')
( p% N! z# A) {6 M4 h2 x& p, z1 strue  ]6 T; `: h/ z9 t3 u

  P" z9 q# O1 g9 o8 |8 @: a全局匹配:
6 e- r- |  A: L" ]/ g&gt; name% I$ H6 O% B; O# W' M" M
'Hello'
! `  b! n8 z/ R0 X9 R) G- r&gt; name.match(/l/): w9 Q! q) O- g$ V
['l', index: 2, input: 'Hello', groups: undefined]: I" w+ h3 O+ l0 D4 P
) U7 L: ^9 n6 \  I
&gt; name.match(/l/g)
5 C0 o* d8 f  ~& P: H0 _+ s9 h(2)&nbsp;['l', 'l']
% P+ N) K8 b" z5 |/ C5 ^+ L, k% V$ v; T// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配- Z. q/ c, p- S6 n6 Q' b( r* h( q! U

! |* r% N7 u; h0 J7 f全局匹配注意事项:
& U0 e- e. U0 }# e* T&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
7 I0 v" [( ^7 p" e1 z&gt; reg2.test('Hasdfa')
$ f7 L% r, ^' `+ K8 Q- f% Z8 v8 Ftrue9 l2 O) [  i" r6 V
&gt;reg2.lastIndex;) U$ p4 f2 j. T- f+ J' l, W. P% D
6
# O! u+ c$ D# `. x: x&gt; reg2.test('Hasdfa')/ m1 U1 T$ o/ j$ W" X5 J, c* `+ P1 a
false2 n2 I6 K- t. U  ^8 P( U' E; M. S2 ?2 }
&gt; reg2.lastIndex;; g) {' J$ k0 L. r1 ?- g; j& [
0
5 h6 I+ @& O& k7 c5 T8 O( T&gt; reg2.test('Hasdfa')
6 `8 w8 m0 G9 U/ W4 K0 z5 z$ itrue' F; \# c& K1 j: \+ o8 J/ b. ?" X3 F7 W
&gt; reg2.lastIndex;
5 a4 C6 _7 w. g' ?8 t60 f# T. U0 u, K8 X9 A) m, |
&gt; reg2.test('Hasdfa')
) [0 \7 a$ g8 @: \false
  y6 B/ a) w, j/ e&gt; reg2.lastIndex;
& @$ p: q( F" k0
( V' u6 x5 n% `! O( Y& x. e// 全局匹配会有一个lastindex属性4 I+ S5 B5 o2 t& o) o2 |
&gt; reg2.test()% W  }6 [4 [$ F
false: y. l( K" t1 D* _2 p
&gt; reg2.test()! Y5 i$ i" C7 y; e
true
. f; a) K! ]8 ]% P// 校验时不传参数默认传的是undefined" l+ n: P& X, Z  [3 B
</code></pre>; t: i% F8 O8 S/ u4 X
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
$ J5 H" v  K( a0 l9 L3 i<p>就相当于是<code>python</code>中的字典</p>
+ K  a7 c7 \) N7 a% d" O<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
( }; p! a4 O0 _5 Y&gt; person1 T: A# R$ a# k2 y# i8 F
{Name: 'Hans', Age: 18}" u. N9 F# q& M5 D' k
&gt; person.Name
3 p6 b) b% A8 W$ j- q0 o* \'Hans'7 G7 b) h0 O/ d* O4 x
&gt; person["Name"]
& v) i3 N1 }/ Z3 I'Hans'
3 @+ W2 w4 W; g  u/ ?% ^) t8 Z0 c! n" M& x( q
// 也可以使用new Object创建
0 B3 ^$ C# X7 w&gt; var person2 = new Object()# }+ G4 J% F" r$ t
&gt; person2.name = "Hello"% |- U, a; c7 A0 `0 Z% Y* S, C
'Hello'
# j) v( J  g: X! f( p% c&gt; person2.age = 20
. `; p  w7 \) k" Y2 w3 g7 |20& _" i! J) v0 u) X, e9 l& t
</code></pre>
& a: c7 w7 \( f<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2># Y) `+ I1 s4 e( A: ?
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>! c! t9 S9 ?; R5 U
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>. ~5 c6 B) |; j, R: u1 B1 m' e; o
<h3 id="31-window-对象">3.1 window 对象</h3>' F0 A* ~: L) O/ @5 |' G9 B7 [2 F. i
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
( V$ c9 |2 T1 l+ Z4 }* G+ r3 }<pre><code class="language-python">//览器窗口的内部高度
7 k3 a" P# j) Ewindow.innerHeight
6 S# y; y1 F  o706  F7 L$ D8 G5 O* j3 i
//浏览器窗口的内部宽度
; v" M. z5 T" e& E1 cwindow.innerWidth4 ?2 D& E  \% N: X
1522
/ q8 l7 N. E* r) H+ Y8 w// 打开新窗口
* Y3 K* G$ _8 @- p' a6 Z( [4 ywindow.open('https://www.baidu.com')& I% F. h/ B  _$ Z  u9 a& o
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}; N3 E8 Y) S2 \7 F: `
// 关闭当前窗口
: T( p' |5 `9 w. S  B0 ywindow.close() 1 `+ x/ I1 o0 y/ r% |4 G
//  后退一页9 |6 \8 Q8 x0 Y" g! C( Z- y
window.history.back()0 t4 S9 O6 Z3 n
// 前进一页
& s+ w# [% T5 @9 U4 y1 rwindow.history.forward()
/ Y) e8 W/ e9 |4 N( \//Web浏览器全称! k9 R" @4 |8 a
window.navigator.appName
! U2 S; D8 c9 X+ ~$ p'Netscape'
( X  j$ X5 B  e8 N// Web浏览器厂商和版本的详细字符串
3 s! Q, g- n7 ?% H; owindow.navigator.appVersion
, A$ s0 m& Y6 T# n& z% U3 z'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
+ k, {4 p4 L7 {! ^5 f// 客户端绝大部分信息  B- v; ]+ O0 H7 y$ j5 b; ?
window.navigator.userAgent
3 g. X6 b9 J3 I1 V, |. e9 I& J'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
7 Z$ n' w' K2 l/ A5 j1 b; s  g// 浏览器运行所在的操作系统
# o. m$ Y, z2 k& twindow.navigator.platform; p9 K' ?! U/ Q+ }9 ^+ u: _
'Win32'4 s# W( Q7 R& Y6 u
4 V- H$ h8 m4 F5 D
//  获取URL
! t8 P$ w9 m* V* s7 n9 pwindow.location.href
8 s% U5 _6 E6 y// 跳转到指定页面
7 c+ o: e( N6 ^7 t5 E# K: Cwindow.location.href='https://www.baidu.com'
+ @$ Q- g+ J9 o" y4 X9 x// 重新加载页面
$ S5 w* V. _6 `3 Z% Fwindow.location.reload() 3 P1 f3 ~+ U6 h+ S- F
</code></pre>
, M% ~3 m5 X  T# Q& k<h3 id="32-弹出框">3.2 弹出框</h3>  `$ q2 f% B0 r2 u4 y- v$ h5 G
<p>三种消息框:警告框、确认框、提示框。</p>$ u9 t' E$ Q7 k- c: W2 T
<h4 id="321-警告框">3.2.1 警告框</h4>4 D* H" z7 J$ J3 d. _: u
<pre><code class="language-javascript">alert("Hello")7 b- H: k: B. {" u9 F9 y
</code></pre>
; R. o! m+ x5 W. W% _2 v<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p># [( k2 g! v7 J( F- ^; X+ x$ G* K
<h4 id="322-确认框">3.2.2 确认框</h4>+ u+ P3 D" B7 x+ r; q4 Q& {- r" I
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>) b2 H8 M; @2 j1 f0 l1 e8 y  N
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
, R7 U, Q8 l, T9 Q, ^% wtrue
* e  T: Q# w4 t  k2 q; O& y&gt; confirm("你确定吗?")  // 点取消返回false
$ \( |2 c$ m  o7 k6 H9 _( @) }' Efalse
& G& j( Y% E3 R+ n8 Z</code></pre>) o" E" g$ T! M9 r* _3 u
<h4 id="323-提示框">3.2.3 提示框</h4>7 @  b: i/ q; t7 _. l
<p><code>prompt("请输入","提示")</code></p>
+ r) a+ G: b7 `6 s) E<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
& G: M" f- n; O0 [8 g- ~5 b/ ?# A* Y/ J<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
' G  G- l3 |0 B3 b<p>如果直接点<code>取消</code>后端收到<code>null</code></p>6 s# X0 R$ c' ^5 `& ~
<h3 id="33-计时相关">3.3 计时相关</h3>2 ?- t% R/ i: i5 ~2 F0 i
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
! E7 B( W- ^& p<pre><code class="language-javascript">// 等于3秒钟弹窗; d" B5 ^( H5 L5 |3 t. G5 l
setTimeout(function(){alert("Hello")}, 3000)4 z6 A/ C" K  G( ^8 C! A

  }4 c0 ^4 s& O6 k8 Q, t$ hvar t = setTimeout(function(){alert("Hello")}, 3000)3 {" l# C8 T& z# R

3 E4 s+ i4 C7 K  `- n% F0 N2 D// 取消setTimeout设置
" O0 ^4 O5 i: @/ g# D: VclearTimeout(t)
; \" U& S$ a" C- Z% c% E8 y+ z</code></pre>
. p$ ]+ q. g9 p! Q+ @<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>9 U! S6 c8 {% I- L
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>" N0 R. j4 Q. Z' |" d# [. N) \4 d
<pre><code class="language-javascript">每三秒弹出 "hello" :
# e3 a  {2 b' r" Y- T# {setInterval(function(){alert("Hello")},3000);" R8 s# A/ O' G" O- D. u9 n( Y* Q
</code></pre>+ l, {+ `6 H. G" E* C
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>/ K6 {, T. U- z0 T) {3 b
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);& m- d! M! E# J2 f2 u
//取消:
1 y" J: i5 B1 S. E5 Q! wclearInterval(t)
6 q7 i5 s+ Z$ `; D6 ~</code></pre>
' D$ s. n8 A9 |7 m9 U" l  |
, j8 L$ I- @& ^4 D* `$ O
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-1-13 18:28 , Processed in 0.097624 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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