飞雪团队

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

前端之JavaScript

[复制链接]

7796

主题

7884

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

- x; O0 m7 b0 ^. ?+ E; p<h1 id="前端之javascript">前端之JavaScript</h1>$ f! O4 |2 l1 x) p0 n9 E' y& Q
<p></p><p></p>
/ K0 g) X' N$ @& t/ ^& G, W7 g2 t<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>/ Z* D" C. H. I2 G" E" C
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>* z/ v9 |$ Q% n- V* z8 P
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
: h: l& E! N: ~7 q2 @' E# ^它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 v! v4 N! W* z  v" s( w7 J; ~它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
1 P, \, L, ]+ P# H% |<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>! ~' D( x! r6 \- G5 |( J
<h3 id="21-注释">2.1 注释</h3>
* R! c$ U5 H# ]# o& ~<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
8 x8 ~0 Z& l3 _$ f- i& ^- [! s9 w<pre><code class="language-javascript">// 这是单行注释
$ ~7 B' u: T% m/ Y
: _0 j9 r8 g, L+ \3 F/*1 T' ?) i3 D, @, w
这是多行注释的第一行,
6 k2 K6 T& I- {  h# E这是第二行。7 M: [  z+ ]8 l5 T% Y
*/& J* M) G1 b3 f3 {! q
</code></pre>" I, Q8 O. W( F7 ^
<h3 id="22-变量和常量">2.2 变量和常量</h3>
7 e- }/ E4 m- K% w+ L' ]<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
4 r7 c' c3 A% M1 l! n9 y<ul>
9 h' o. |; P* h8 l/ b% U<li>变量必须以字母开头</li>
. G5 F' N1 c6 G  K$ L- i<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
/ D0 Q0 y2 J: \, ~- S<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li># s: T) ^/ r7 J+ L: C
</ul>9 C* K" v* r% K
<p><code>var</code>定义的都为全局变量</p>0 r: T+ B" a/ b( R6 c, }
<p><code>let</code>可以声明局部变量</p>2 `5 T5 V' M$ c- ?1 m) Y  M0 S
<p><strong>声明变量:</strong></p>' A2 `; E. V; N  K  |
<pre><code class="language-javascript">// 定义单个变量/ u2 [' |5 P5 v' S& u$ J* M( @) e
&gt; var name1 l1 U" T% f8 L! C  p
&gt; name = 'Hans'- p4 d9 U  t" ?3 K& N6 j
//定义并赋值
$ Z5 [! H  x9 \2 a4 t9 l&gt; var name = 'Hans'
6 {" L7 f3 f) U1 U&gt; name! @7 ]3 O4 b/ F/ }5 |
'Hans', N5 {2 n: G! a7 E( l* }

2 j# t( f  s; J0 ~$ W9 X// 定义多个变量
; n! H5 j4 H  O6 ?( U&gt; var name = "Hans", age = 18
7 P8 r  Y/ n. a7 K& S$ B2 [0 |&gt; name. u: w& L1 _; S  T' M# U
'Hans'
0 K* z2 _8 [4 `1 W+ y&gt; age
! F/ W6 V% o! P' K" k18
% q6 P6 X; \6 y, X2 w
- U) V& W0 ~. P( t  }5 F7 B" A//多行使用反引号`` 类型python中的三引号
6 Q/ n# Q5 f! j8 W6 |- Z7 Z; `&gt; var text = `A young idler,
% r- A4 K1 ^; L' A7 o' Jan old beggar`% L, G) Z  w; H/ \7 Q& t. u
&gt; text  x. I# K* w! _% ?6 s: A
'A young idler,\nan old beggar'
' O; I6 T8 V6 Z9 ~' W1 N</code></pre>
; {! `# l! t& t) \( r: j& I<p><strong>声明常量:</strong></p>
, V' T. x) W. u4 A, t4 ^7 o! `) S<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
6 c4 H1 d& |+ s3 D' a<pre><code class="language-javascript">&gt; const pi = 3.14( y( Q; n9 b1 o4 n2 K4 @& M
&gt; pi! W* w, X/ e, d7 Y
3.14
7 Y# A. f" f; j3 f/ y/ z&gt;  pi = 3.01, M3 R2 C6 W" r4 h. U
Uncaught TypeError: Assignment to constant variable.
9 W& ~1 \& N* v' Y! t    at &lt;anonymous&gt;:1:4
- v6 a6 Q* N8 x7 g8 v% o4 h2 q
, v$ P! I$ C1 b: ^0 P4 T/ g</code></pre>6 i' ^. H& Z2 H+ Z
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>/ J4 T- [; G. m9 n
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
; D1 T* k+ a8 h/ P<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>" |: Q2 R/ d& t% B; @
<h4 id="231-number类型">2.3.1 Number类型</h4>  t( v* E. }% \' H' \/ J6 I) j& G
<pre><code class="language-javascript">&gt; var a = 5# m9 E5 |- z  u
&gt; typeof a   //查看变量的类型  
  \. B! l* f* T0 xnumber
4 F6 G: w5 u. ?" S2 i& O5 {$ c9 d% Y
&gt; var b = 1.3
) ?9 [" H& o  M, a$ C- a&gt; typeof b$ S! n# X# ^# c
number9 T% q8 R. c) ?' e- h! F- U& i

) w3 d/ |$ v  _* [2 Y// 不管整型还是浮点型打开出来的结果都是number类型
+ V! m0 ]/ R( @
3 f( D  G8 o7 w, C  \/*
3 g8 z" B% h3 S* t) j% _NaN:Not A Number
5 F' ~: }! g% j( NNaN属于数值类型 表示的意思是 不是一个数字
- i0 W. j# t+ B4 X" b*/& B" U# ?$ E4 j1 E. F- ?
6 F9 Z8 }! z6 |
parseInt('2345')  // 转整型
0 m! q! z/ ~7 d( S, M/ q2345
: M7 [: I" f( }parseInt('2345.5')
7 i* Y8 d6 T; g4 f2345
; d' }( [* w0 ]8 E4 VparseFloat('2345.5') // 转浮点型/ K% N& n6 n* G4 f
2345.5
) D# j0 S9 c. b8 hparseFloat('ABC')% y& |5 [. H+ ?) [
NaN
2 I" O2 l. q, U! ZparseInt('abc')
: T3 r5 p3 q/ G9 |2 b1 k' v7 h7 X9 dNaN% S3 l: M) N6 R# h- W
</code></pre>' a" F% O" ~, L" Q* ~5 g0 W0 N
<h4 id="232-string类型">2.3.2 String类型</h4>' g& B. [7 i! Y5 z9 O
<pre><code class="language-javascript">&gt; var name = 'Hans'
# [# T. i" k* b7 N& x&gt; typeof name9 u7 L3 A) W2 g& W9 ^* K! @
'string'- G% X$ j& f, Y, l) }$ ]8 _
8 m+ r3 Q% t5 l; _4 B% [
//常用方法0 w: C/ Y+ F8 L7 v- M/ z$ N' l
// 变量值长度+ Y" ]8 V8 q/ u
&gt; name.length( {! I5 f3 Z; k6 h3 a% p0 H( O1 ^
4
4 [7 P3 D1 [2 a8 t+ S& H4 k* `9 M// trim() 移除空白
+ O; \. G0 n+ T' F; `8 B+ Z- ?&gt; var a = '    ABC    '
9 F! @* q) `- I, o; j5 b) h&gt; a8 u) t- O* N* O# S
'    ABC    '- k7 c! {! A' e6 k. r: C
&gt; a.trim()
  }7 Y: B! L+ D) G'ABC'8 [& R& v; @5 i6 ]! C
//移除左边的空白3 X) X' k, m. R2 u' S0 ~  H
&gt; a.trimLeft()
, v; c$ c9 Y: C9 m# R( a( D: Y! r'ABC    '
6 Z0 w. W) N  C; O  [6 _//移除右边的空白! P( V3 ]" f+ I* C
&gt; a.trimRight()
' L! p9 Y# N: A* J% H+ v- ]'    ABC'
4 c- I$ g: p# Z8 C
! I: g6 A7 d* z% E+ }* K2 L//返回第n个字符,从0开始" k# X1 U- Z1 x+ W, @9 Y! B7 ^- y
&gt; name1 G7 [+ e1 L4 m2 ]
'Hans'
; e' A8 e5 ?. F. @0 K  t2 z&gt; name.charAt(3)0 X0 V  A3 v  V6 L. }: ^  I: K- \
's'
) e' R- y  }1 }1 V&gt; name.charAt()
' W% @* K5 v6 R9 q$ Y'H'; r7 r# s' M1 r. k6 X2 L4 [# M
&gt; name.charAt(1)7 O$ \1 n: c9 y- v0 L. m6 M6 S: N
'a'6 }6 w' h& p' E

* C! p0 n' Y- g, m. c: v: w// 在javascript中推荐使用加号(+)拼接
, N) F% z! h6 G&gt; name
' H8 X0 V1 z; ]: o3 O'Hans'
; j+ t) {+ F, b2 p$ l; o6 q! y&gt; a4 o" c, u( h- i; [: y! S) _; k% s
'    ABC    '$ l6 L% j" z9 A( m+ q* s4 h
&gt; name + a# W$ S  L$ B/ p
'Hans    ABC    '
9 e6 O  p. s2 W6 H; V// 使用concat拼接
# u' W, F- a4 Z; k, \&gt; name.concat(a)# b1 h4 [7 U* V# v+ D
'Hans    ABC    '
1 f% Q+ z6 _* g- p
. S# l( L  H7 H6 a2 b6 s//indexOf(substring, start)子序列位置
1 v5 f4 z8 z$ c
) k$ L% w) q- m) n' G) b. ]&gt; text
' f6 T4 w  `( N'A young idler,\nan old beggar'
+ Y& g  @5 u& x/ Q! i&gt; text.indexOf('young',0)# A( c2 ]$ V! P" j7 |
2
6 f- }4 h0 s( z) L$ y
/ K, Y' c2 A8 y7 h' O4 `/ l6 a//.substring(from, to)        根据索引获取子序列
9 t" u, ?% [3 H/ u1 c&gt; text.substring(0,)
( I& r0 t! g4 k7 Z/ y1 J- c5 \'A young idler,\nan old beggar'( G3 K6 ]; G7 ^2 Z
&gt; text.substring(0,10)) j7 E# r9 ?% v# S# L. `
'A young id'
/ z1 C- n$ K/ w. h! N/ R, P. `: J/ r
) ]! v3 g8 |" G) {// .slice(start, end)        切片, 从0开始顾头不顾尾5 X& V1 r5 x$ i3 X
&gt; name.slice(0,3)' C) f5 X( ~9 D- z8 A5 I* l
'Han'
1 ~0 T4 E0 V& R- C4 ^' w. G
; z) [" {! ]/ t* ]// 转小写1 }9 N9 t; w- p. x' \- [# \( T
&gt; name  B1 ^& ?/ I% ^7 Q
'Hans': i. n! V7 f7 x. |5 f$ O8 y
&gt; name.toLowerCase(); w5 X# i+ n& H
'hans'0 ]& m* y9 X1 L, q6 I
// 转大写, q& a% u9 J; G7 N
&gt; name.toUpperCase()
6 O5 n/ x- ?* M0 i% x'HANS'
# @( z* ~, s+ e4 M$ G/ H( s3 d. Q) _, m5 I7 V- i# i6 y
// 分隔
+ e( n. l$ A' A" g&gt; name
, j$ o. E. o% x* e4 r- x* Q4 }& Q'Hans'
( d' ~' [& ]  E* Q  j&gt; name.split('a')
% N  W& H4 Y$ Y' @: E3 J(2)&nbsp;['H', 'ns']4 i% e: X5 J4 n1 v
</code></pre>
9 P; E5 d2 d4 w$ B6 d/ v+ J& z- D<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
  p3 {+ U3 d! N/ B1 p% U8 F4 D& C<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>. F+ S( x, Y3 O) z3 f& r+ q
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
$ M, E# ?* l  l6 g( p* v- h<p><strong>null和undefined</strong></p>
6 H. W. ?$ U; a' y1 y1 d$ V) ?<ul>9 J+ s: J; @/ A# R0 p7 Z# ]$ A
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>. @( h2 g# k$ X  m) I, P
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) A2 F$ K8 F$ \</ul>! t# v9 I, F6 D/ D) r/ y6 g  r0 ^
<h4 id="234-array数组">2.3.4 Array数组</h4>7 `' C4 C% y) N  {- |
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
/ r: b! i  l1 r1 O. z<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
) M4 v) a( ?; ?/ {5 v5 o&gt; array1
9 B0 N8 X: u$ t(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, k8 g. ]  D. [&gt; console.log(array1[2])  //console.log打印类似python中的print
( e- S6 T7 j7 K/ a3; [' K: M2 |9 z0 b
// length元素个数, j9 L( ?. e( C  z8 _
&gt; array1.length
7 e3 G# N  k' O1 i! }% _- M/ M( t6: k. O7 j% [0 N0 l
// 在尾部增加元素,类型append1 @8 {) D5 f& g4 h
&gt; array1.push('D')! K# O; l0 p% i# W" Z9 }
7
) r/ z' e2 T; L  P3 s$ V% P, Q& V1 j&gt; array1
7 g, n7 i1 g0 i5 u(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
4 W4 G5 m9 n1 l9 a, r// 在头部增加元素8 R! h3 h- {3 y5 j
&gt; array1.unshift(0)6 u, }+ @/ X5 d2 H
87 t2 L. s7 x0 F- L0 ^/ V5 c! |
&gt; array1
% {: H+ h( L/ x) c* D/ V(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']& z' ]* D3 z1 B: K$ A# w9 i- n
& m. h1 w5 G% u
//取最后一个元素& t6 j/ [" F/ W( ^( x9 L2 w
&gt; array1.pop()3 ~5 |, e9 L9 g  |5 k) ]" R
'D'
( @& |. |3 x' _% ]& I&gt; array19 W, f" }1 p) b+ B. g
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']/ z( ]0 L' s- o( H) T" R
//取头部元素
) t/ ^0 e- y5 A+ p8 }( i' F&gt; array1.shift()
: m5 D# V! ~' D3 [0. @: N! N1 R5 U  ~
&gt; array1
$ `; n: c1 o! i6 ]4 Y% p+ g. H; w, x# p8 O- E(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ z/ s% f; i& v3 O+ n% H. `+ G  X$ S
//切片, 从0开始顾头不顾尾
+ u" d5 O6 H" _5 ~  V3 I$ \! y&gt; array1.slice(3,6)* k2 [; ]' R" M" h
(3)&nbsp;['a', 'b', 'c']
3 ?6 S( m% R- Q// 反转1 }* Q+ M0 Q; F
&gt; array1.reverse()0 k: u4 ?: N7 ?' Y+ ?4 i2 l! z3 A
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
1 U5 \7 I) u4 I; A8 C- T// 将数组元素连接成字符串5 Y# a) ?3 o$ X5 F* ?8 J
&gt; array1.join() // 什么不都写默认使用逗号分隔
! `8 o7 h; m# M% n'c,b,a,3,2,1'! `1 O  [: N- o0 T# D# Y5 m; D
&gt; array1.join('')4 L# r9 x$ a9 @! D2 ]" V( o! \
'cba321': j2 c+ v7 m3 a/ z$ s) |+ E
&gt; array1.join('|')  _! a5 t( J: a" e+ W
'c|b|a|3|2|1'
; @5 s0 S: g2 H7 p
3 c/ D% j& @) \! N/ f// 连接数组
$ ]6 I3 B, V9 a4 V( z3 ~7 x. \&gt; var array2 = ['A','B','C']( V1 \" J$ y; F$ k% X, o9 d
&gt; array1.concat(array2)
3 H7 X, n! `* p7 M(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
+ r/ v- o# _+ M3 u; q- g( i! ~1 ~) \" A& j8 t# a  \  g
// 排序# x9 }9 J0 a: \2 V
&gt; array1.sort()
2 _+ n( q1 R; {7 ~, b7 m(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
! s$ K! ]% J9 f4 e% b: M" v5 E1 I1 J( S3 }6 I# ^
// 删除元素,并可以向数据组中添加新元素(可选)
  O; Y. m+ v# i, ^' ?( f  [&gt; array1.splice(3,3)  // 删除元素
2 [1 B' l! g& G; ~(3)&nbsp;['a', 'b', 'c']  N, O& {+ W" \9 d* |. A
&gt; array1
+ a$ A! C0 O+ n(3)&nbsp;[1, 2, 3]2 ~& m% {/ X6 E& Y% [( l
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素2 o5 ^  X4 E6 S6 @8 R3 n& K
[]
# q* w( E' h8 p&gt; array12 W' F) b% T8 w; G$ K
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
- h! w' a9 o5 T. q1 Q
$ t: b  _" j* _+ J+ J/*+ L1 J, X  G8 s1 H
splice(index,howmany,item1,.....,itemX)
4 ]5 a  t; Z. J" f1 @" }5 v' p7 [index:必需,必须是数字。规定从何处添加/删除元素。
1 d) |7 {4 H$ t7 Q& f2 S4 uhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。6 x# @" a! m2 f. i! A* S/ @: N" t$ F; A
item1, ..., itemX        可选。要添加到数组的新元素( ~3 t4 H, F& Y0 L
*/
6 a* g1 a$ h. ^( Q& V4 r
- y# N' g- M- z7 v0 m0 p// forEach()        将数组的每个元素传递给回调函数2 w( W9 o3 A2 Y# q' r) ?, U4 o
&gt; array1.forEach(function test(n){console.log(n)})$ k% h! p; E( r9 p2 a/ v
1' C! f4 ^, x# N, ~
2* {6 d! `9 C7 j) ~; [
3# |$ ~1 u( O% c# M4 s
A3 O# f) ?- F1 }7 U6 ~0 l: j% y
B
4 \! z, B4 A8 r7 K C7 Y9 a. S, @. e8 d) m
// 返回一个数组元素调用函数处理后的值的新数组
  ^/ P/ [4 w9 Z( q* N# ?4 u3 J&gt; array1.map(function(value){return value +1})2 j5 L* D& y; B7 O. A, b* D7 f
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']% c6 y, d" R" G! k
</code></pre>
1 k1 E) q- a+ b# c<h3 id="24-运算符">2.4 运算符</h3>& B+ I. y* A" B  x  q8 N" q
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
) x  P& K1 X0 d. A; u! ~! z4 m8 w<p><code>+ - * / % ++ --</code></p>
( B9 W# M) g8 k& b% S8 z0 [2 u<pre><code class="language-javascript">&gt; var a = 6" e7 Z1 \" }; ^, |/ g. Q2 [$ i
&gt; var b = 3
# g6 [& M0 M  J2 j! j2 g  n// 加4 |1 L) i- b+ c# U/ c* i
&gt; a + b: C+ c, ]& U6 r# {7 ~! J5 y9 ]4 c
95 Y2 A" }4 v, o/ j
// 减
/ R' L4 |; H, Q4 e5 f' M. R6 {: Q&gt; a - b: n6 V- |2 \( C$ \9 u, y) y+ E& P
3
- V9 i" l7 o2 N3 q2 \8 V) n8 j// 乘
1 T1 _! o4 m1 ^$ d&gt; a * b) a9 S5 M* M0 \  [  l
18
  ^$ I. u4 l; V: F  R// 除
. V: x* i+ s% B. k1 s3 S&gt; a / b
; H' Z4 ^3 L; a  U$ z2
3 o& T" Q# e. Q9 O2 v// 取模(取余)
9 Z$ f, S" {) _4 t; p& w2 e' O&gt; a % b+ {2 w' j6 H# |1 S9 M9 l9 a6 I+ @! C
0
8 A9 C) e2 l0 u, F% r// 自增1(先赋值再增1)
9 @8 N0 x1 X8 O&gt; a++4 ]; D6 y4 @! O' O* b
6$ ?) n3 v' W( p# l! Q" u
&gt; a. r8 J: q* j, {
7
" }6 [. s9 V7 u& K' F" V2 P  Y! M9 F// 自减1(先赋值再减1)
+ ~5 I' |' a0 G5 g4 [% `" s&gt; a--
8 b& N. `2 c( ?0 \# }& U, d7' Q! B, }7 H$ e& e
&gt; a
1 w# R2 B: V" ]& V7 _6( v; T$ L  x& ^! g
// 自增1(先增1再赋值)6 W# P  S4 @, k# o' w
&gt; ++a' n2 N( f4 f2 R' ^+ |" w
79 Q9 e. P0 K. `- n! q, Q
// 自减1(先减1再赋值)# m) n' l8 u$ A! O4 J
&gt; --a0 W0 @. X: q1 }
6, A6 g+ v3 Y/ L1 _+ k
&gt; a8 O, \2 ~' e/ Q2 G
6
7 f2 {: v. a/ Z3 u
1 M1 F: h& }2 ]# R8 X$ l/ g//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
1 E, ^7 ^. f3 Z7 \6 z  S" V</code></pre>
) \- Z* f9 V* N6 o. i+ r<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
& Z% N, G" K) U) @  U<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p># M. y% K9 e% Y
<pre><code class="language-javascript">// 大于: |0 F5 u. ^) \
&gt; a &gt; b
1 s1 G! K6 `( K6 C8 z" Atrue
4 h- J5 v+ \- a5 q3 z9 M# v. r// 大于等于
% t- V7 n) k; V: b$ Y; d&gt; a &gt;= b
. z- p0 W3 V9 @; u, z* }3 t8 dtrue0 r! z& q3 d! r4 Y$ B
// 小于
; Z, D0 X- o- i4 N9 P4 \! ^&gt; a &lt; b, J, z3 `9 A/ I4 ?3 Z* `' l$ g
false1 ?0 j5 X, g" ^# M; E
// 小于等于! ~% z+ W* [' @6 {/ Z. w5 e7 k3 z
&gt; a &lt;= b
+ v$ [: O# V. }false# n6 ?- u0 P4 g; y! f, p5 n/ H
// 弱不等于
2 y0 H% _& V6 b* u# u/ ~& l! _( [&gt; a != b
- f, p) F  e* S+ f" w# ~4 H4 S: @true1 w, Y  B7 F0 ?( D
// 弱等于$ i: A  _6 ~; g* j3 M! B
&gt; 1 == '1'* D1 [8 u9 N' ^% h
true( X. _; W6 j, j0 t& ~& E" r! G
// 强等于
  C$ V& X, Y+ Y8 b3 Z&gt; 1 === '1'
  q2 x# P* v  w- u0 S2 T8 C9 \2 e- Gfalse' Z+ H. A, c9 U
// 强不等于
- i% e! w  i5 P% @- N! u) J8 C&gt; 1 !== '1'
! j/ i/ m; |1 \& A. t6 ytrue1 d# c! y5 E% W% |: f2 e0 c
& s3 H; `1 N. k8 s) \+ n  Z
/*
- V! S$ Z& H  Q2 v# MJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
/ A! c& b( y5 t4 i( a7 k*/
- O$ Y# z* z5 N' @</code></pre>% p, n. ?3 j. J) c' F5 D
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
5 Z& {7 m) x, e2 e( n) k5 E5 X<p><code>&amp;&amp; || !</code></p>
* l6 U: f) E$ H1 A( T<pre><code class="language-javascript">&amp;&amp; 与. O8 d. u; n$ u( n
|| or % _0 ^# d! M" h) g2 c  Z7 `+ Z' |: o
! 非
1 R) v/ f3 ]! J3 \. W: I6 c</code></pre>
! w( U# V; `) l* u9 ~& ?" x<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
+ u( D& m! x5 r, S. @<p><code>= += -= *= /=</code></p>& E  V& Q2 `5 s/ ~/ w/ s) Y
<pre><code class="language-javascript">// 赋值
9 a5 {# d+ R' K7 X' x&gt; var x = 3
, p# s" J% m, p1 \& }% j// 加等于
. G1 X6 p) ~3 B0 U% w+ H! X$ l&gt; x += 2
) m( m, N! r/ U9 {7 P" N# r4 w' l& L5
- p7 O) A* d/ O. c4 a// 减等于5 A1 e" |/ Z% I
&gt; x -= 1# g. {6 l6 x  v3 q. {
4
4 Q2 M1 V9 O4 F& }% ~0 Y' T// 乘等于
  }. N3 D& A, w# J&gt; x *= 20 i+ j& Y7 e5 [! X6 @0 A" o
8: v5 a7 @9 j: h
// 除等于
! |& a7 H. [( W) G&gt; x /= 2, t" ?% T  s. q9 ], a, [1 t
4
. G$ B) Q2 G/ ^  @6 v) y</code></pre>
$ Y8 w& X9 O; L4 |8 S9 m+ [' r<h3 id="25-流程控制">2.5 流程控制</h3>+ x0 Y, s5 X9 n0 k% J5 D1 t& |
<h4 id="251-if">2.5.1 if</h4>) ]/ C1 m  @7 u
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}1 e' h9 n5 v* s% M0 ^& S

. H+ A1 S2 t# P/ V. U  ?& G0 u&gt; var x = 3
8 T$ y. V; t. K; D" C&gt; if (x &gt; 2){console.log("OK")}
1 ~0 M& Q2 x0 x1 I  n OK
$ d/ e: L. V2 s) F, u' o. V0 z& D1 m, v4 i# t  R
2, if(条件){条件成立执行代码} , w4 P$ n. _' {
        else{条件不成立执行代码}! @$ _- H1 i9 {8 @3 Y7 j
, s3 b! Y/ P% y. \
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}( x2 o0 f, L" ~/ J) E& e, J
'NO'
5 L, J2 h* i! Z& q
, r+ h) Z+ f$ e+ }" t3, if(条件1){条件1成立执行代码} . f  X+ [8 A; K+ |& d! d
        else if(条件2){条件2成立执行代码}- O' a' v! M4 i9 H
    else{上面条件都不成立执行代码}
7 _) ?1 y# W* u; q) y8 H4 w! w! o" ^8 O5 l' |
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
; D( {  Q, Z3 D4 K. ~8 f0 V Ha# @8 D0 F( z7 }3 @
</code></pre>
& l( N* s  a3 R+ a$ K! p+ u<h4 id="252-switch">2.5.2 switch</h4>
; T9 @  [$ Z1 Y<pre><code class="language-javascript">var day = new Date().getDay();- X$ i, c/ }6 M+ {( z
switch (day) {7 [& T" \2 I# G7 c2 p* `
  case 0:
4 O: K+ O% t4 P  console.log("Sunday");
. p- }; [  f2 s, ]& ^- R9 k  break;( o) e0 `- ]' H9 h% P8 |' o
  case 1:+ F% q; y6 q( `+ z% }/ ?, a; n
  console.log("Monday");3 r( O2 e1 \! n: g2 q8 X) z  a! Y
  break;
# L* K$ i; E/ e, h- K1 \default:3 r' j% S( \" L7 s6 Q4 `1 ^
  console.log("不在范围")
7 L+ |. E8 ^+ n+ l( b' {}
2 H) b! t9 p8 | 不在范围  T5 t8 W( H# q. g  V( G
</code></pre>
/ \- C7 ?4 g+ N- E2 E) C5 J8 A<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>2 ~! r/ U0 A' ?1 t
<h4 id="253-for">2.5.3 for</h4># b4 y: `/ i; z" `" {8 \2 U
<pre><code class="language-python">// for 循环  f: P" A! e9 H( q/ T9 r
        for(起始值;循环条件;每次循环后执行的操作){1 m1 s7 _8 @- W$ ?0 N3 F0 ?, k$ T
        for循环体代码
' p5 P2 d% W8 F2 U( t0 e    }
1 q  D' h# v- ]8 }6 ^% `! }( n& t9 g# ^
for (var i = 0; i&lt;10; i++){) o$ H) B. t6 w, N
    console.log(i)' @. Z9 C# m4 U, l" J
}
1 h* I" m. b# j1 h. x' @" q        0' C) C- c5 U. b9 Y" E- C/ D
        1' a5 J! f) d4 C# ~. e/ ]
        2
' y. g# f. K8 T, V) }: z0 ~, A; b        39 r7 ^2 m+ F+ ^8 X7 v- [- `
        4
5 Q1 m5 a0 T9 m8 v0 e        5
- d7 w! G9 `0 |3 H; U7 u        6
( t' L+ ^/ q/ @; Y3 p        7! n5 ^! Z/ W: }& H& [: \
        8+ i- o0 V* z0 e4 K  Y
        9
# Q# d8 J% g/ R. G( v( {+ T" N</code></pre>; t, l8 q# i8 \$ ]* V* n; X
<h4 id="254-while">2.5.4 while</h4>
9 m$ C0 C  g: c7 W<pre><code class="language-javascript">// while 循环
" P! ]! b7 \' S  Y; M& [        while(循环条件){; s' B0 X! A9 w" n: g0 K; c
        循环体代码
" ]! n, |. h, L; ], x1 m    }
1 g/ `% `0 Q9 L* q" ?" r& i3 O+ Y; K. y8 i
&gt; var i = 09 P" \7 y4 m0 n/ n* F8 k: |
&gt; while(i&lt;10){5 Q+ ^! ^* i# i- X  U# X8 l
    console.log(i)& h7 U. I$ b# v9 i; k/ J# t& p
    i++7 W  ]+ A6 i: e' `
}6 v+ o& t; J; o9 p
0
% T/ h; n9 J8 v1 ? 1
; n- I# ?$ T) t; T  z6 C- K 2
. s! i! D( X2 J 36 w' z; c6 [" _. X
4
: j. f3 Y7 K1 E% g0 L, x% q: Y( o 5
6 Q3 i+ p2 M' H$ e/ {# v 6
3 x" ]: F* f: r' U' u 7
; N. x1 V! K6 t* a+ ~ 8: K! T) k: Q6 a
9/ N4 E1 I, E# i  l6 r5 B: Y
</code></pre>0 T9 s2 W( V. n2 O1 Z7 i) C' g
<h4 id="255-break和continue">2.5.5 break和continue</h4>
- y0 V  T, H. O. Q" m' p; p0 z<pre><code class="language-javascript">// break1 [7 L' [: r9 K
for (var i = 0; i&lt;10; i++){0 _7 W6 A" H: C4 m' \; {
    if (i == 5){break}
9 V1 o$ f3 M) T( f: @! \/ a& v    console.log(i). K  q. j) i& Z2 Y- x6 d$ W
}
& s; b' S& j, n0 P# l 0+ ]# ?! e- Z7 \/ j
1/ @0 w! U4 }# |. o
2& N( Y# J& U8 P' a
3+ \! n/ c" O( p' c' P
44 ]4 l! p9 F% N( e: i% j! i9 \
// continue
* e! E% [& l; t' V; wfor (var i = 0; i&lt;10; i++){
! Z4 P! a- Y) s* T2 @: |& L    if (i == 5){continue}
6 z+ L" b0 ^  x: Z    console.log(i)" z. H& E: O" [' k. j" w
}* y9 ^" N. _/ H7 J& q
0
/ w9 s2 C4 s3 n6 p! R" b0 {* G 1
1 ], r% c' J5 F 24 B6 q1 `/ F0 x4 g" @1 f  X" e2 O
37 g, a/ H. T* H( H! y1 L" K' C
41 Z0 ^, Q  ^$ i% @7 K
6
2 B. y6 Z$ u& d1 ^" T 7! Y/ f. R5 L  |# o6 ?& @
8* A' ?4 b) H/ q/ t  ?  s
96 f- O( {( \- [( A/ G& g4 t
! Q  p- d" O3 Q' V4 V& E: ~( ^1 f3 {
</code></pre>: k( t. x* l7 i. _6 v5 ?
<h3 id="26-三元运算">2.6 三元运算</h3>! f% @: c3 l; x7 w2 i( H5 D
<pre><code class="language-javascript">&gt; a
4 M" q+ Q" R8 N5 z6
5 f8 R- p- X4 ~4 ~& {2 W* U! Y9 r&gt; b
8 O& [4 B6 G% t. o) z32 [) M1 G/ K' P6 N: a4 l! J7 G

% t4 u6 k: H7 i/ x: W" ]9 t//条件成立c为a的值,不成立c为b的值
! i8 S. `, Z. V% ]+ e&gt; var c = a &gt; b ? a : b, R& w6 T7 d# j: u
&gt; c8 F% c: G1 u. R, O* F
6
5 z( @+ j6 ?( |
) Z% i: g, E( b8 ^: h// 三元运算可以嵌套% L# D1 t2 n" ^- D$ a( d
</code></pre>2 K# b. H( {1 v5 S5 d
<h3 id="27-函数">2.7 函数</h3>
7 J% M. a+ t! T" a* y<pre><code class="language-javascript">1. 普通函数  d" }2 d6 W7 l
&gt; function foo1(){
1 ~4 }$ ?5 c0 Z    console.log("Hi")0 Q  F' ~  Z5 d# i0 a$ X9 z
}
9 J, W$ q. ]6 n" n+ e
! E! I+ z# `7 N4 Q2 ?- k&gt; foo1()
0 F8 \  L6 M. l& n( ^/ [8 V) C! d4 j        Hi
8 i. w5 h, V- @4 G2. 带参数函数
, F# u9 W" y9 V7 R&gt; function foo1(name){
8 r: x' R) C4 R) H% N1 V1 s( y' n" [7 [console.log("Hi",name)
" S, @0 u. i0 x' m  o; _' a: q. F: K}+ I5 h: Q+ P. n& n. l! L! ~  f& Z

  x) o  H) K6 S" i&gt; foo1("Hans")
% \; r1 B- p* sHi Hans
1 T# x# i7 I1 P3 z: m: `( I" _
/ u3 e4 g: M) a- |/ X  X0 }&gt; var name = "Hello"" Z0 t1 \- V- H6 E& G% |9 v# T
&gt; foo1(name); A8 m- p1 s8 |1 D+ M* r
Hi Hello
8 e9 q1 ?" Z+ a. |
) B* \- [; F6 K+ [- m  s% ?3. 带返回值函数; g% s/ Q0 M; ?6 E6 ?) H
&gt; function foo1(a,b){
6 u5 q" b  e; _; _; Y        return a + b   7 S1 r4 _7 X1 z1 P2 F" n
}$ s3 W1 F# k% n
&gt; foo1(1,2)' P9 U+ {1 O; v6 H) S
35 T6 q' G2 Z* ^) i+ p- P
&gt; var a = foo1(10,20)  //接受函数返回值( Z4 W" s* v/ e  M0 N
&gt; a
0 l* a1 W: R" h3 @& ]# m30; e* G5 |2 c5 c9 R3 K

  E# c3 r" j& {7 j  Z4. 匿名函数) t" k' I8 ^3 {8 i! k
&gt; var sum = function(a, b){+ z# Y# I. P1 K+ ]
  return a + b;
) S* F2 @5 e& p+ {, C) d% [}
  ]- S5 [+ n( o: }&gt; sum(1,2)+ p4 F; h9 v9 G9 Y6 |9 z
3. u$ ^* \' q) [7 H2 U& G$ J
" [/ }6 K/ {0 K' U9 L9 O
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱4 Q. p- H2 `3 p+ G2 V( R; i
&gt; (function(a, b){
7 B( s: D% d0 ^( j5 E. g7 f  return a + b
! v& m+ Q0 n, J& A  V5 ]# [; l})(10, 20)  h! }; g( D+ u- k$ K1 G
30
. r; ]" @, J" [/ ^# ^5 G5 [8 r' a* ^5 U5 d4 c. t
5. 闭包函数
- K. `8 _  h$ p$ R) J! a// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
9 x4 O% V2 S" J4 qvar city = "BJ"6 D$ N% r$ W- r
function f(){
1 p/ [  x8 V' f7 v* \    var city = "SH"/ i$ ~" x0 |; M: @+ F( `
    function inner(){
1 S5 X8 N) u) c& K2 ~4 O5 r        console.log(city)
( F7 v3 O0 T' P2 Y3 h2 A    }
9 U1 Q$ X. u6 \& f! D; `, H% c    return inner( w. r; H0 a8 l+ {2 [+ v0 e9 i
}
& S9 I' q9 l; V3 bvar ret = f()
/ s' r4 G' o' E  G/ {& m7 D8 Rret()! Q& Q! F5 w. i
执行结果:
7 [2 O: s3 Z+ a0 Y# DSH' `- \3 F3 D2 [9 F* C6 b. d
0 F: T9 y" m, m8 O) j
</code></pre>' B6 u: o1 ^, q& G
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
% ~6 W& p; \% |) g7 D<pre><code class="language-javascript">var f = v =&gt; v;* K+ t" o) }8 c" r5 e; ^- h: q+ i6 F
// 等同于
$ ~$ B* \& W1 O0 ]1 E( Z6 R$ Wvar f = function(v){" Q+ N3 v' `. j4 W
  return v;0 \2 ~: g  w4 ]4 |$ Z
}
- g4 l: o; }' S/ V* e/ P% C</code></pre>
: F! _) Q4 i% H" r4 n<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ D2 e! X1 E' z3 p6 }3 ?9 F
<pre><code class="language-javascript">function foo1(a,b){
6 _! W- U0 w3 g5 T4 v. W    console.log(arguments.length)  //参数的个数
1 A* M( G9 \2 n) g! I0 ^2 h    console.log(arguments[0]) // 第一个参数的值
9 b. G6 j+ S& q. E        return a + b   
9 s# {8 v5 H7 ]9 k3 y+ K& e}( E; w! |5 A& T
foo1(10,20)3 X1 L- x) @, P( V- b
结果:; s" b4 [* P- X. n- h
2          //参数的个数
2 v& }4 C* o0 a: a. A' t: n10        // 第一个参数的值
# d4 i) {5 I& v* D; n+ n30        // 返回相加的结果2 |+ W. D4 s( w9 A* m  _6 O2 l0 o
</code></pre>. l) D2 W$ }6 V2 p" A  E
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
9 U; x  p/ z/ f& d* ]( ~<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>' u3 J9 Q3 M# ?; a' T; ~9 a
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>8 @. A$ h3 g* ~& v; S; X; |
<h4 id="281-date对象">2.8.1 Date对象</h4>
/ b) d* j4 l) N& L# e0 f4 W<pre><code class="language-javascript">&gt; var data_test = new Date()7 ?5 a2 H' \, q. e" K& p2 o
&gt; data_test
  f9 d  O) c1 d; O$ M" kFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)+ m8 Z) B+ Y* t! c" q
&gt; data_test.toLocaleString()
9 N7 c4 h! }9 `! s/ ^'2022/2/11 下午9:44:43'
9 @( ]; z8 I4 n* i% E1 q
$ P- p0 |" C  ~, O&gt; data_test.toLocaleDateString()
- Z; C0 h0 s% y% v6 q8 u! _( x'2022/2/11'9 e9 Q4 Q: ?+ [* t* n
6 t9 v+ l) P1 p! }( N
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  G1 v5 H0 ~# q3 v&gt; data_test2.toLocaleString()
4 c/ k  b/ E0 t' b/ T: ]'2022/2/11 上午9:44:43'* @1 h8 P& N% U8 c
; h8 R( m# }5 e
// 获取当前几号. ?. w" x) l0 u5 v& g
&gt; data_test.getDate()
: A: v" y9 n+ i7 q: t; X# u) d7 x; V11
/ z$ S% R1 s- S- t% w// 获取星期几,数字表示" p& u: R8 X  s
&gt; data_test.getDay()  
. K6 l* ?' I: z5 H& A3 }5
% L: U6 L4 M- o& ^( l( k' d// 获取月份(0-11)4 Q# {0 y# i7 a  r4 U$ _& t
&gt; data_test.getMonth()
1 K( [2 ?  e' E- _) p+ L. H9 X1
# q9 r3 q: T- e/ r+ H" Q- K( H; j// 获取完整年份6 a$ S8 G8 M& i) ]
&gt; data_test.getFullYear()- ?, o+ h* N1 n8 @% W
2022
8 H; g% d4 K4 ]0 s( `8 {# ?// 获取时
# c- \5 Y- P$ h2 H$ ?4 A; Q&gt; data_test.getHours()# ~$ N9 V$ i' |1 }% N
21  i6 e/ Y9 U$ O5 p/ {
// 获取分5 q4 r! s8 m; J; x2 Q/ T
&gt; data_test.getMinutes()
0 ]7 C/ }  c# c2 l44
' i* \* e% U4 T* l4 y// 获取秒; g( B: f% N" r8 }. r9 g0 J4 d
&gt; data_test.getSeconds()
2 C& H. l3 F* I2 G8 X43
% p0 c- V3 f- U9 ?, M. L) ^6 x// 获取毫秒) B2 N" o  o8 z- G. I9 @- u. q
&gt; data_test.getMilliseconds()
3 _4 U9 ?) L9 e0 T290  }0 I# B5 @8 o0 O6 [' c
// 获取时间戳; i  R# K" I- U
&gt; data_test.getTime()# E" j9 W0 h5 Z4 U* D7 `
1644587083290
1 K* R- _- C$ o5 W0 w3 I</code></pre>7 H2 b/ H0 v7 {7 `8 p: ^
<h4 id="282-json对象">2.8.2 Json对象</h4>
5 d4 J: P' Z$ _* r5 |<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
# N% l: e; w+ `6 W7 U4 O/ \! GJSON.parse()  // 反序列化,把JSON字符串转换成对象
! v& S" B  h+ P( n& O$ u1 f1 m8 }7 k- N: @
// 序列化* M% x. S! h- U, q; w% U: X
&gt; var jstojson = JSON.stringify(person)
( P" M' ?; L6 v2 \3 T&gt; jstojson  9 K8 I* Y+ }: H5 T$ j& v/ a( E) r6 K
'{"Name":"Hans","Age":18}'
, H+ O, i$ k, b; w9 G
$ V) f! q3 g3 S# E" B// 反序列化
) l$ ?: }& K, R& e% Q9 |&gt; var x = JSON.parse(jstojson). h8 {2 m- n# G; A- p$ K
&gt; x' B! j; e' I, F2 F. j4 Z9 ^, j5 W
{Name: 'Hans', Age: 18}/ N/ T/ v$ s& L) T
&gt; x.Age
+ L0 w% d; I( C5 ?18
  _# ]: ]' K* K. F. H" Y  E</code></pre>
: K2 M% X/ R2 j" A& B5 P* E<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>9 A$ u7 H2 n. W
<p>正则</p>* B  c2 Q/ G2 M) O! u
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");* i5 h: }$ Y! O  Z- W" m: @  m
&gt; reg1
+ R9 Q9 ?! M0 ], d  U/ Y. i/^[a-zA-Z][a-zA-Z0-9]{4,7}/" P$ o/ Y$ H4 O7 x+ {
&gt; reg1.test("Hans666")+ [: I* g- Q: X* Z) v9 m
true
' `1 p6 ]1 M; j
+ [( A, n2 {6 C" p&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
' k: `+ v  U5 R&gt; reg2) {6 W% O! H3 }. i6 [
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* ~+ z; i4 k9 h' [, }; q* ~
&gt; reg2.test('Hasdfa')( r+ f7 t5 S1 ^6 B* _8 u( X
true
8 q. E. a6 J' P4 b5 P2 n) }. ^+ m1 k" n
全局匹配:' w: e: e4 C9 P" Z( O4 @* j' a
&gt; name
) P5 w$ G! Z2 @8 i: o( X% `'Hello'
8 J) ]: H6 f/ \. m7 {1 e/ S&gt; name.match(/l/)
/ _0 Q/ \& X& i0 V1 f6 c['l', index: 2, input: 'Hello', groups: undefined]
1 R' ]  W; Z! z/ p  y+ P! i" g% {) j. I
&gt; name.match(/l/g)
' N. I3 v- \. l( ?( Q& I/ P(2)&nbsp;['l', 'l']* T& L  v7 g7 L2 p/ Y
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配6 w; Z/ Q  C! `8 a/ V; J8 {* Y
4 C$ V+ m, c+ \) y' K! ]
全局匹配注意事项:# y. s- }, f, i0 {0 s! ?- s4 ?' h
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
& D  ~! ]: b: N9 U2 o) `% p3 z- r&gt; reg2.test('Hasdfa')
; P, [! t; p0 h" @) [true3 G0 @1 v; M- E5 l3 C6 x: R3 k# u
&gt;reg2.lastIndex;
& b, D" R0 A7 A5 _" s( ^6
7 T5 m. Z8 H0 k' i* F&gt; reg2.test('Hasdfa')- `6 T4 Z/ w1 F- P- P
false
/ p) d) `0 M+ S# T; Y&gt; reg2.lastIndex;" ?; l4 \2 t8 s0 [+ |" o
0
: O1 h8 L8 o) W- q&gt; reg2.test('Hasdfa')5 K7 \: Q3 ~8 L  E3 f) Z
true
6 B7 X8 i; A1 X0 O: U$ ]5 L&gt; reg2.lastIndex;
/ ~4 c: E; `" r9 Q" Y6) y2 N9 ~* T+ N' O
&gt; reg2.test('Hasdfa')3 @1 G1 b/ M4 \; [9 w- @
false
& q: k6 s, P2 @* K- c&gt; reg2.lastIndex;
: ^; Q. o3 u" S& W, g3 w; a0
( P6 p" X/ X! M% m) V// 全局匹配会有一个lastindex属性  a" b, x* f& v1 ~9 n
&gt; reg2.test(); o! ?) t" v/ D
false
3 w6 k) g# d2 g&gt; reg2.test()0 ?1 L4 _2 @" l& `$ _8 v  F  z/ T
true
' A; ~% y7 P& R$ V0 n* e# @// 校验时不传参数默认传的是undefined
9 r, v; a/ m3 I- n4 B</code></pre>. y; w" [* H' y8 d' V7 M7 u( Y
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
7 ?% i% X( Q: {& D  w<p>就相当于是<code>python</code>中的字典</p>9 u* K; o+ y: b! g& L& a% q& x# Q' N
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
5 l6 i$ R1 T  k$ w3 K4 x, X&gt; person- g% O. G. }' g" h+ @
{Name: 'Hans', Age: 18}9 d! t* f$ R* b
&gt; person.Name
5 A8 v6 V, x: d/ E. E9 Z'Hans'2 s! y$ O" k5 D! ]* G# j/ T) N
&gt; person["Name"]
5 A6 [1 `7 h1 m* I( i7 R7 O& D' b4 T'Hans'
$ T1 V% D; M7 b; \. J' e0 `; P! [" D8 p) U7 D5 L
// 也可以使用new Object创建
3 }: L( n$ r0 B% q- P2 M&gt; var person2 = new Object()
& X& ?. W, W' y1 H/ y&gt; person2.name = "Hello"; h; U0 u% E6 t6 ~$ p% C
'Hello'- M/ R' C4 S5 ]" M% u
&gt; person2.age = 20
& Y) V- V( x7 P20& |, Q% k0 O" g8 i- {' }
</code></pre>
: |9 Q! p" N' T- X4 z" f. J4 t<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>5 V( |$ |6 ?; {# C7 m# g6 |
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>) P4 Z; Q, A2 v0 |: c# q, i1 [) o0 a
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
- e8 r; w5 g! W& R! }* v" ~! t8 Z8 V<h3 id="31-window-对象">3.1 window 对象</h3>: o* L1 I" o/ [' X
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>  O2 E) k0 a% ?
<pre><code class="language-python">//览器窗口的内部高度
- ~. ]/ s2 f1 S9 V" O, R, ]- [6 zwindow.innerHeight 5 s2 j) X3 Q" R2 y4 y1 g
706
0 `" B) ]8 p# K# P8 P//浏览器窗口的内部宽度% I8 z. e4 V1 g" Y" Y( T; M
window.innerWidth7 g# W3 N2 G+ a8 w4 P
1522
2 q+ O9 o9 A' I// 打开新窗口
; a+ L: H' e1 awindow.open('https://www.baidu.com')
0 T: L( g- [  `4 R5 VWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}' c4 O6 a# I0 Y" ?5 `: I6 _* ~
// 关闭当前窗口
. F) y8 n  K2 qwindow.close() . q8 e# x+ V  g
//  后退一页
& S7 q- h' T1 K. ]: }. Fwindow.history.back(); W- c. z. d- ]. ~+ k
// 前进一页, T- X3 K' i, q- z0 {
window.history.forward() . V+ N/ r. k4 p. o* |  ?- {# a7 V
//Web浏览器全称
! K' O7 a: a0 m- j4 \# kwindow.navigator.appName
$ q! X* |- y9 [* l'Netscape', f1 S0 R8 j' O4 ]2 \) k: J) v
// Web浏览器厂商和版本的详细字符串, V4 g" K1 |' y, ]3 x7 O' m6 B9 t
window.navigator.appVersion
8 n& {) I$ [$ e& P'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'4 p  r/ J2 o7 ?( ]  Q7 @
// 客户端绝大部分信息
! I9 R8 p$ F, t$ B& Zwindow.navigator.userAgent
. L5 k7 p3 t+ F- W5 G# j  G'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'2 {% ?" S9 \5 \9 n, v& R
// 浏览器运行所在的操作系统
, f( W5 l- s8 y3 iwindow.navigator.platform8 s3 \1 h, t7 U0 v6 i- Z1 o
'Win32'4 C* X7 A! Y7 }& O- i

* J$ ]# Q- }4 F4 |2 R//  获取URL$ s/ v' ?$ a% s9 y5 x
window.location.href7 I  T. {! N' ?  M7 X% x
// 跳转到指定页面
2 G; ]' D- I3 L9 N  `; kwindow.location.href='https://www.baidu.com'4 c" k, W/ G' `2 z1 W+ Q- p$ |
// 重新加载页面
* X/ @4 @8 z# `0 Jwindow.location.reload() % L9 v$ c* ], Z% E
</code></pre>
% }7 R, W+ F& c4 a/ {  [7 V( }& n<h3 id="32-弹出框">3.2 弹出框</h3>
6 a4 @/ w! p' m5 }9 y% ]* j<p>三种消息框:警告框、确认框、提示框。</p>: u  ^$ [* v8 |2 v. f
<h4 id="321-警告框">3.2.1 警告框</h4>: ]1 J: U# J/ K0 U# C
<pre><code class="language-javascript">alert("Hello")0 ]% m/ j+ L% i0 f
</code></pre># z% K* v1 q1 `( R% m$ @
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
7 N+ y; ~3 l9 @+ M, L3 g! W' G<h4 id="322-确认框">3.2.2 确认框</h4>
! ~8 e9 F( j7 C: t$ V3 [<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
; B" r) V7 a/ T<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
1 _6 ^. e7 `: |& P0 B2 Ntrue1 ^- t5 s# L" D% \# {1 p5 G
&gt; confirm("你确定吗?")  // 点取消返回false
  W5 w" y- l& k+ Sfalse
- m0 `: X2 q7 q7 y; U) V</code></pre>
; m# A8 q' e6 |3 R. X<h4 id="323-提示框">3.2.3 提示框</h4>
' W4 l$ l2 Q- a) _4 `6 M* `- x% ~<p><code>prompt("请输入","提示")</code></p>
" D0 L7 n& \. D9 F/ H<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>% ?; B7 i: F2 i$ G9 V- N3 @
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
, q  ]0 J/ t7 q# E<p>如果直接点<code>取消</code>后端收到<code>null</code></p>" ~1 L( U& v) l6 _0 l
<h3 id="33-计时相关">3.3 计时相关</h3>4 I5 F% i" [$ o3 ^! c% n# r& z+ p
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>: e& ?) Q$ h  S+ e' @
<pre><code class="language-javascript">// 等于3秒钟弹窗5 @0 I. p$ w; Y4 E% _
setTimeout(function(){alert("Hello")}, 3000)
; k- y- d( \, @" P' O* x
3 N' c' X' [. V% q- n. ~9 |var t = setTimeout(function(){alert("Hello")}, 3000)
' }3 U1 q) U. A3 P
" n5 i; _% F% Q// 取消setTimeout设置
/ u6 D5 t8 j5 L1 \9 BclearTimeout(t)+ k' T7 Y5 J+ z+ k: C
</code></pre>& O0 E, j& o" @" T
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>/ V: s4 M( V1 s. `* e
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
4 c- s$ o2 {$ c+ g1 k<pre><code class="language-javascript">每三秒弹出 "hello" :
9 S6 E& b6 S/ `2 U7 jsetInterval(function(){alert("Hello")},3000);& M7 C. d* ?3 p$ X* o6 q
</code></pre>: e" E( e$ G8 e; o+ I3 f& l% T
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
: `' a; V, D* \% H<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);/ l# W9 e6 ~, o
//取消:
) u" a" c: S  S$ q' y# ?2 uclearInterval(t)# ~5 \: k# j5 Q7 ~9 {
</code></pre>8 c% T& D4 |# S- H8 X

" G7 Z* n! r; e: h: t; X; A
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-10 08:25 , Processed in 0.080246 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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