飞雪团队

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

前端之JavaScript

[复制链接]

8038

主题

8126

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26444
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
3 @9 }. H8 R8 F6 X) R! k3 B
<h1 id="前端之javascript">前端之JavaScript</h1>7 |, g! ^9 F: h9 ]2 I' ?5 q
<p></p><p></p>% a6 p5 Y! m9 x
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
$ p, P+ r( R' F3 V2 `<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
5 t7 S, w- B. ]. K! K; X2 @( D% ?它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
% K5 L8 o4 _3 q( H) Q$ y: `它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>- k# }! F& ^5 d% c. z& O2 a
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
& C6 }# }$ u  x/ O1 u3 d<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
9 ?3 X; S' A% j- X4 K<h3 id="21-注释">2.1 注释</h3>$ ~; C2 l. i# t3 R0 _& o/ V( D
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>& w+ t7 i% Y0 K, M1 s0 o$ ]2 `
<pre><code class="language-javascript">// 这是单行注释
4 U9 y6 M9 j0 U# E* N7 i' `2 s; ~# W+ ?; g5 C) c/ U2 F
/*
2 X( K. \5 F, R% M) I* o. v这是多行注释的第一行,5 c; J% m! h1 y* \0 ?. b
这是第二行。
4 @( n) c. r: l$ \2 z3 F*/
; B+ f( R( K; ~</code></pre>
0 K- i: I/ M; ~, ?<h3 id="22-变量和常量">2.2 变量和常量</h3>
! \% `& j1 Z% r3 D<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>+ _+ B$ e! T7 `0 g2 a; I7 T
<ul>& [, j& q5 ~( ~2 N6 j* B
<li>变量必须以字母开头</li>% x. `4 Z7 z  }: f
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ t) I4 i( Q) k' q* q% N8 \, a! D
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>! T0 V2 Y6 d# m, M9 B7 m+ w
</ul>3 _/ i6 f6 a/ S- C
<p><code>var</code>定义的都为全局变量</p>
( e8 N6 e8 I" Z$ c5 t<p><code>let</code>可以声明局部变量</p>
3 s5 J. \6 ^& V; s* d3 I<p><strong>声明变量:</strong></p>
. M7 C9 M. i7 w. V, {<pre><code class="language-javascript">// 定义单个变量. ?2 h; y- S0 ~% x
&gt; var name/ T5 D/ C/ F# h6 F
&gt; name = 'Hans'3 R7 z4 U! }' s' ^
//定义并赋值
1 I; b8 \. F0 _5 ]  k: j6 K$ e3 Y1 l&gt; var name = 'Hans'! _7 m! H" k' P
&gt; name; I# y2 p- k/ A; [
'Hans'
, Z6 q4 g9 B5 V% c1 f4 X8 W
6 m* C- ^( q- G// 定义多个变量: {1 N* o4 |' O5 D5 p! d! B
&gt; var name = "Hans", age = 18
# H9 [' K$ g" g$ _' `, R&gt; name2 T* V- G& j' J( k
'Hans'
& Y! \/ W- i6 c% K1 `8 }* N* I&gt; age# x* _7 [1 V$ @( A0 W% v7 F
180 J( f, d8 Y: e$ m2 N" b6 @

0 t- k! d6 G" D- [0 f+ j  K* g//多行使用反引号`` 类型python中的三引号; q) d( r! n9 ~- J$ C" W  x1 m
&gt; var text = `A young idler,
* J% X# F! m5 {an old beggar`! M8 ~3 U6 s& N8 O6 p/ D, l- m
&gt; text
( l6 s* N, M, Z# o2 W, E'A young idler,\nan old beggar'
9 I3 _8 c5 M& j( D; Q</code></pre>
+ P. ~4 W; c7 w0 h* Y" y<p><strong>声明常量:</strong></p>3 Z1 ?- b# C0 _; K4 g6 A4 X
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p># }0 k5 E$ f) T1 P: Q
<pre><code class="language-javascript">&gt; const pi = 3.14# e7 R3 t9 ~# B: t% h! t
&gt; pi
2 c( X& [0 e3 e: D# j3.141 k. {8 [* h+ q3 a& k# t0 z# {7 R
&gt;  pi = 3.014 B4 ~& p; m/ w# ^2 |% }
Uncaught TypeError: Assignment to constant variable.
. U) T# @& U% ]5 D" d# |" g    at &lt;anonymous&gt;:1:4
8 A0 P2 ?; A: U& J6 V+ y
1 u$ `3 k* Z" G; U</code></pre>" z. S# |+ ]" j) A& _7 x. O- @& }
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
3 C- @; k; C+ B/ V4 W<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>$ D: D7 p! p- c! M/ Q; \1 R+ E# L
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>  c& R) M5 G  ^# l
<h4 id="231-number类型">2.3.1 Number类型</h4>
; K& J& C) ]4 c& j$ u# Y<pre><code class="language-javascript">&gt; var a = 5' V  B& [, z9 Z* \- Q% d$ D+ c5 |& o
&gt; typeof a   //查看变量的类型  
8 z* `$ K3 @3 v( Nnumber
) d. h( Q& w& k3 m" [  y$ L2 f$ o2 I4 \5 J/ b7 U
&gt; var b = 1.3
2 i1 P% T& Y0 K/ I&gt; typeof b; ]0 K" ]6 E' b. x
number
" I: o. o6 ~: _0 O, z# k$ F5 `: c: [9 e; O
// 不管整型还是浮点型打开出来的结果都是number类型
/ x+ v( b" J( ^" q/ s  B  O3 {3 F5 s# Z/ d( w# P& y  _
/*
1 D# V7 H) M4 B8 t& H8 ANaN:Not A Number2 s, ?1 t( v/ E5 d+ J: }( }1 |
NaN属于数值类型 表示的意思是 不是一个数字; |3 w4 b* u# [: m: t1 Y
*/) G2 g: [5 h: o& m) [& ?

' P2 {: P% U2 l4 j% nparseInt('2345')  // 转整型0 U( D# U6 T$ b2 _) A/ U
23456 V; f2 h" _% [
parseInt('2345.5')
/ v: G3 x& H8 ^! Y3 g& B2345# p" L) Q$ l1 H& l3 ]; B; E8 r
parseFloat('2345.5') // 转浮点型; Y' r# M9 J. F  q& B
2345.51 }" X1 O5 P; I8 N
parseFloat('ABC')
* }7 a! s1 s! NNaN
" z/ w  t! G$ s0 a- AparseInt('abc')
6 a: e( m5 J+ k; X5 h/ d! {2 R' H; MNaN
% w- \+ q7 t+ m% s6 y</code></pre>& D4 P# ]6 G$ o0 `8 D! d  @
<h4 id="232-string类型">2.3.2 String类型</h4>
2 f! a! x9 @; h5 {<pre><code class="language-javascript">&gt; var name = 'Hans'
5 |5 L2 a# {0 D&gt; typeof name2 Q* f. g( f1 m' ]8 z, z
'string'
! `/ X6 t$ ^, F+ |# r5 F( [
' e0 k; C. O$ d9 D1 `//常用方法. m/ L" i5 _* z" u* M
// 变量值长度/ O9 f7 y% m& r6 M5 ]' P9 k
&gt; name.length
( A  i  G5 j6 r% q9 T# Y% |. R4
8 h1 ]2 a! K( g1 z8 W// trim() 移除空白
& }" `4 b8 X- q% P  Q' f4 j2 W&gt; var a = '    ABC    '/ r3 B/ R2 f& [* _1 i5 d' w8 \
&gt; a
8 ^( X; D7 }- a$ e6 x9 L/ }7 }'    ABC    '
6 j, v/ e' J& ]3 O&gt; a.trim()* Q) w4 c5 N; _  T1 U1 Q
'ABC'
0 c. F# N* c: W  _; v% ~0 e//移除左边的空白" x# L% p2 V9 Z3 N* ~
&gt; a.trimLeft()
5 j0 ^- P( z7 ~9 E& r  t4 P'ABC    '
. S1 V2 q% N; V7 _# S: N//移除右边的空白9 p4 z" M/ Q5 M
&gt; a.trimRight()2 m7 q9 i/ d. ?
'    ABC'
( I# n# `4 U9 i+ f! }9 }
( J0 J+ f+ u: j$ _* g//返回第n个字符,从0开始7 |1 x) @6 H/ y! M+ y
&gt; name+ X, L+ v8 a* M$ `; Q! \
'Hans'
% T2 y3 p) ]. r' ~+ L&gt; name.charAt(3)
# I0 e6 j5 C+ u's'
. @, }9 W9 Q+ e! d4 r  a& E% c&gt; name.charAt()$ `/ a5 i7 ?% h, Y; W
'H'* O, y8 q4 {% o; B% ]) L6 \
&gt; name.charAt(1)2 a/ L' }$ ?3 C7 s
'a'
0 T3 y7 f$ g" v2 ?( ?0 S  e* w6 B, X: P* b3 g9 U
// 在javascript中推荐使用加号(+)拼接2 r/ F: }/ r% E& N1 q. E. B9 c
&gt; name5 E$ `' Q2 n3 q2 L
'Hans'
4 h* ~: |; j  P1 a&gt; a/ g$ |% Q  o7 L; _( z  R
'    ABC    '2 G+ A; c2 P8 n+ ~6 a; i0 I
&gt; name + a
1 Y7 `2 r% E! J'Hans    ABC    '
- |/ u/ g. q6 C& l( j// 使用concat拼接
* ?2 B& m/ C6 v7 T&gt; name.concat(a)5 N3 S* D  ~( t" `2 Q' ~. w7 p) {6 y
'Hans    ABC    '
) X8 v1 r* V9 r: v/ l% \& ^* `$ N' g. U! e
//indexOf(substring, start)子序列位置, i, V  g- m3 |+ ~$ b/ c7 ?! A

" O$ t& _2 F4 Z  G&gt; text
7 R5 [% a' w: X2 W: p'A young idler,\nan old beggar'
! z" H5 Z( {7 u/ L) r" \&gt; text.indexOf('young',0)5 @2 W: g7 u  R
2' J" Z/ C; |( b/ l
; _& ?: p2 d  d4 p3 w0 s
//.substring(from, to)        根据索引获取子序列$ k* e. A4 h( E
&gt; text.substring(0,)
; Q3 `% p8 r. u( i5 ?/ n' ?'A young idler,\nan old beggar'6 K1 L4 x1 c! Z* c+ y( D
&gt; text.substring(0,10)1 A9 K4 W( {' w' ~* a
'A young id'
4 a  z6 |' k/ ^  e
+ C" v7 _6 _' @: [% _. c, L// .slice(start, end)        切片, 从0开始顾头不顾尾$ W8 q2 f; _9 }& X7 L9 d! W6 V
&gt; name.slice(0,3)2 \9 j- s1 x$ A5 e5 B/ u
'Han'
$ r/ c) M; ^# [; n6 j
- X0 f; C+ ^( [# g// 转小写
  L" C2 q3 K; ]( y& I' C7 o&gt; name
1 _! Y, A+ X+ c4 T0 C'Hans'
2 M. S0 P: W- j8 q  v0 x) ?&gt; name.toLowerCase()6 s# b+ a- D  R, [1 K
'hans'
5 T: o6 d* \# R) j  k% S// 转大写
7 e* ^0 P$ d. q- p1 Z&gt; name.toUpperCase()
# [. ^2 p4 z- D1 s'HANS'
1 I7 ~) e' ~, B. G  b* R9 t5 l) w! z) m
// 分隔# W8 c' O& w; B8 G5 v* [4 Q
&gt; name  `( T2 C7 A& ]. O" E, \- J
'Hans', w$ I! y) ~5 ~* I; s  O* ]
&gt; name.split('a')- v" e- W' [' G; s( Y
(2)&nbsp;['H', 'ns']
) j0 h. h+ B' e& E7 G</code></pre>3 d3 H1 B: q- ~4 b2 W: p
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
- q7 ?) d- z: J7 C, e7 g* |<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>+ w' P2 k) d% D2 i9 e
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>! @6 C. E$ X* v  q; T, o4 e
<p><strong>null和undefined</strong></p>6 p) ^0 P9 P( l0 G# h
<ul>! t2 o6 h6 \, \4 q% z! g
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
3 C. F1 N3 g& e' p  |<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>1 `7 B! f: s  D2 G" C4 _& V
</ul>
- D8 J/ W# S! n' J1 M<h4 id="234-array数组">2.3.4 Array数组</h4>
0 s7 ?+ K- q' l) K9 @4 \- r<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>' A- D* m5 f, A1 @' u" ~
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
0 r8 y' z  C9 B9 b&gt; array1( |' x8 D0 s8 P3 l, b
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; o9 A5 `8 p( @. m4 Z4 U&gt; console.log(array1[2])  //console.log打印类似python中的print
/ s& V2 f& r4 _4 p9 ~7 P$ ^/ E3
# G/ M' @# `$ x; a) y// length元素个数
- b  i* @9 n5 m, a&gt; array1.length
8 z" j% w6 c( X2 `8 y- X2 q66 d3 G5 P$ d: n# f) B
// 在尾部增加元素,类型append! T! b9 c6 R) t
&gt; array1.push('D')
  F- [/ A8 [, u; l5 c' c7! J1 j8 A9 U% [
&gt; array1$ r1 d/ y0 v4 Q% P, g: }$ G9 P
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']+ }; N; x% Z5 P- Z* D0 k- n
// 在头部增加元素$ B8 G6 ^9 v/ @# V# W
&gt; array1.unshift(0)! ?1 L4 F8 v( V' u# ]: K, \( t
89 ~) D5 H% s, R
&gt; array10 t- l7 r: y( }( i6 [6 h. \6 O% J
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
! h  R( g) y" B' k$ k
6 N% a2 z+ {. L" }# S, @//取最后一个元素" {, L0 t0 R% |
&gt; array1.pop()
! A- j7 i' b2 o) T" z' B+ S'D'
- n9 _# S8 O- X3 W3 h, L4 P5 f&gt; array1
% u3 V7 G8 K& ~(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']; o4 L. c$ ]" _8 z/ r
//取头部元素7 I; f7 B0 t% F: u4 h
&gt; array1.shift()7 ~) _5 O6 d  k0 V; X
0$ W1 J  J: q% i( ?* W" D6 w. _
&gt; array12 L7 ~+ [% H3 g
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
( a, n5 y8 |0 P& K: h  b8 A6 Y$ E. a% _7 z5 V/ _
//切片, 从0开始顾头不顾尾% E6 O) U0 x( J( W. T
&gt; array1.slice(3,6)$ l0 u* T) s- ?. \1 ^6 S7 @
(3)&nbsp;['a', 'b', 'c']
# d5 P) j. i6 ~' Q' @8 O& r// 反转
- T4 X" M% V! \2 n- \7 R. m% Y&gt; array1.reverse()& x% s1 P% P! v9 Q0 @) |/ _
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
6 g6 u" w$ N# _* B// 将数组元素连接成字符串
; \) a5 }. J+ R/ }$ k# E- I* i&gt; array1.join() // 什么不都写默认使用逗号分隔- k+ E$ k' x3 N
'c,b,a,3,2,1'
. @* b) z( x3 J) b& H7 t6 H' c&gt; array1.join('')! t. z. f* Z& N# u  x2 L2 l
'cba321'
# c2 x. X& Z4 F" i# h6 u, o( g&gt; array1.join('|'). _- ?, D+ s0 l% a9 b) n( H
'c|b|a|3|2|1'
, Z( b3 @1 E- k# U/ X8 X. j1 {0 o
// 连接数组
4 @: D  a6 Q8 `8 T9 k) A0 q&gt; var array2 = ['A','B','C']
4 c( n3 @2 p' G5 a&gt; array1.concat(array2)
( g% G# r  a- e) T7 t" b) p(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
. C  b4 R/ S7 ~" L' M6 P4 K
3 N0 U7 q; s! k7 ~1 s& u! L// 排序
. N; {; e6 J2 R5 R  s! Z&gt; array1.sort()' U  \- Z4 R, s; q! P; u3 ~
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% E$ Q, ]. R) w; U! q8 P' o4 s- t: A* q, A8 f
// 删除元素,并可以向数据组中添加新元素(可选)
7 `: i& k4 P% I- l% v&gt; array1.splice(3,3)  // 删除元素
7 O, M8 Z7 s" a9 b% k  P/ i(3)&nbsp;['a', 'b', 'c']
  `2 v6 R2 j9 \) N&gt; array1, R/ w6 O& Y1 N2 O; h
(3)&nbsp;[1, 2, 3]
$ _( y0 |5 M( U1 L2 g" Z&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
5 ?; v: z3 }& [[]
$ E8 ?% K9 y7 F&gt; array1
0 f6 L  M1 n6 R4 H0 }* V9 E& ^( k(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']$ A  [9 J& O0 Q. H4 I8 h

( b* I2 W$ i2 f! u7 W/*
' o+ P  C5 b6 `- {4 B; W, b9 dsplice(index,howmany,item1,.....,itemX)6 s- R  {6 _  P& N8 R" A
index:必需,必须是数字。规定从何处添加/删除元素。9 f5 b# I" ?! t2 [2 }$ V; c+ A
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。% ]$ X, f* \0 a9 r
item1, ..., itemX        可选。要添加到数组的新元素& _% h; }; n; L+ n9 Y8 Y- R
*/
) x( ?& x2 x1 d) K# z9 U" @+ T8 a: z
. l9 Y% k8 }& N- D! O* L// forEach()        将数组的每个元素传递给回调函数# g* Y0 X3 i9 B2 J- c
&gt; array1.forEach(function test(n){console.log(n)})
. c: ~% g4 F) p- d1 x. [( `/ e 13 P2 Y$ e+ f. L6 T8 T, K$ s4 w
2% {: L  @$ R: p  t2 b5 }
3' M( @7 i4 C. v$ N: w2 p( j
A
1 q6 j& F7 x! E' ]; `% g- L  b* M B
1 P5 R: F- G5 t8 |/ `. V8 R# L C- ^# ]( y- t$ y. a
// 返回一个数组元素调用函数处理后的值的新数组7 o5 I# J" c$ D' v" g
&gt; array1.map(function(value){return value +1})2 E# ^, Y) E, O, }# G( z; C
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
- D! k9 d) s6 a  `* P</code></pre>
! A( Q6 {, t1 T* a  |3 v% @<h3 id="24-运算符">2.4 运算符</h3>8 U6 X& H- R) K' z' R4 @9 I( {
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
+ _9 `3 j) C, M' j* k6 ^<p><code>+ - * / % ++ --</code></p>  Q' [/ z! o4 r
<pre><code class="language-javascript">&gt; var a = 6
# E5 u1 a1 C5 o, F&gt; var b = 3, P6 z: }/ }3 U( ]3 w' Z/ ?/ d
// 加
0 Q' i/ H5 d* `! t% M! V+ l/ r&gt; a + b
) p0 F& S/ u7 Q9
1 p2 z# X: U' g: _// 减
: t9 R1 y" l, T. d&gt; a - b
2 P: w. K$ |' [4 T0 j: K37 F; t4 I* O% a! |. e, f
// 乘
& X, E+ ~- H( p$ Z8 s8 e&gt; a * b( F5 V$ w. Y& U6 n8 O! \' `
18! z* Y+ w: M& l: v  |9 b/ q# v  N$ ^
// 除
6 W( j$ O) X" n&gt; a / b3 \. }4 w  G5 e
2- o# M  f" j4 i- e! n+ P
// 取模(取余), L8 V0 |+ R- p3 Z  _# ?
&gt; a % b
8 F  U3 n# R: n6 D, y4 b! l0
0 Z1 W4 V9 H8 ^* I// 自增1(先赋值再增1)
: I' J* F* Y* b0 _&gt; a++5 P& b1 o; |& Q# h5 G
62 U9 A' @4 g' O' z* T
&gt; a. q& T. h; P2 m
7
$ {+ {$ @! i* _1 C% s/ u// 自减1(先赋值再减1)
, `9 C6 s9 D' l9 ~5 y* V  U. Y  A&gt; a--$ E: q, r( Y8 d: F
7- W5 g4 m* h" Z. h
&gt; a
  Y* @9 z" J+ C: }% X, N6
2 Y( L. |/ }9 u  Y0 _// 自增1(先增1再赋值)/ V- g' E$ s9 f' E' B
&gt; ++a
$ X" U  N  `& S4 J7
8 h& N7 \  o* }. d: ?  d/ q) T5 b// 自减1(先减1再赋值)
8 U" Q, n% C" O9 r5 `  |&gt; --a) U, s8 Q- x' v0 a! N" F4 y
6& W3 V. j3 C# T& T8 ?8 B) U( N
&gt; a# v( Y$ o% `4 q; r- S) C
6
7 s0 y9 S2 F) t. O$ R3 D; o9 f/ t! A+ Z
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理$ w/ i+ k. g* E6 ~7 H- M1 L
</code></pre>
" R2 u0 }, J7 V2 r5 H3 c# q! s" t' q<h4 id="242-比较运算符">2.4.2 比较运算符</h4>8 ^- m5 ~  m  t8 o7 y9 i& q6 T
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>% ~4 @( ?4 B* Z% Q1 \( E4 [  }
<pre><code class="language-javascript">// 大于/ z/ V  k& J& H1 L3 @& E" Z6 `
&gt; a &gt; b7 E" K, p" |9 I. W  m: ]
true% |5 y1 e! h% Z+ D
// 大于等于
' K+ C9 H3 r* F/ g: ~. F&gt; a &gt;= b* E# d" ~8 X( {& N1 s0 H) C' t$ W
true0 Q' o" b  M$ H( |
// 小于
3 F& l# @5 h! e/ T% o; q&gt; a &lt; b
( F; f! y( K! |6 q$ e' ~9 Ufalse
; Q$ _: `5 ?' C// 小于等于$ p# c! G% q4 Y+ ~% t7 u" l) V
&gt; a &lt;= b
( ?5 U, P9 j) D  u/ ~& gfalse
- z+ l& i& }" A% V9 S// 弱不等于
" \. V9 ]' |$ m0 _9 z&gt; a != b
' \3 n7 b: ^$ s. a; @4 Q/ Ktrue' H" U, f8 N* w. C% V  Y
// 弱等于% `. U. ?# s2 f/ n* a; Y
&gt; 1 == '1'
3 [2 h. p8 a8 \3 E0 }true& N' ]7 P/ z0 g4 i* ?3 ?! V
// 强等于1 D+ A, K; m. E8 N% e
&gt; 1 === '1'8 C0 [/ \% E3 Q2 _2 A, H
false
- x' b4 E' B- q% S% X, J// 强不等于5 A4 }3 e: a" W+ D  _
&gt; 1 !== '1'
5 s8 h- c$ t  p% q3 Itrue
% r* |3 k8 D  V: ], L7 T% _0 X0 w) A: j; d, ]' Z
/*
! \5 o7 S8 a9 T/ D1 j$ o& vJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
' A' c( k3 L  B- c! M1 g*/
& B# M& T$ K- J2 a0 `</code></pre>
5 g& |! E5 r( @4 i- W<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>3 r1 j% W- G1 y- G6 ]* Z, p% u$ r- i
<p><code>&amp;&amp; || !</code></p>! ^# X0 l* `! q
<pre><code class="language-javascript">&amp;&amp; 与
1 X* P  }) y2 T  E) l% W' }|| or
. M% K! V/ S+ x/ @! 非) R) t- m7 q; A6 Q: G) c' t8 m  b9 ~
</code></pre>
* g* l( k. j. B: }  s% n<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
$ _, V' u, y/ S8 F- z2 H<p><code>= += -= *= /=</code></p>
& _, @1 g& U# v* T2 _<pre><code class="language-javascript">// 赋值
. T% ^& Q! U5 n5 o&gt; var x = 3- i6 L% i$ F8 H6 A% ?
// 加等于' o7 d& E. |  x# w" ~
&gt; x += 2* R* P- S6 {& {8 V# n; x$ B
5! n" R( y. ]; n  m: y9 k
// 减等于8 ^6 J0 ]/ k  u- J& M
&gt; x -= 1
4 i% @3 c$ G6 ?4
, A3 N$ g3 H- u* c* ]// 乘等于% a; x- M* O8 L. |3 t
&gt; x *= 2$ @$ k2 Y6 l  i" @: g5 @$ f! k9 V
83 [6 a6 i4 N9 }7 K8 J* u3 L) `
// 除等于
" I/ W1 ]+ Z% _& v$ q; L) D&gt; x /= 2
) ^% o8 F( d* P) p+ i6 }3 Q4; b: x7 n4 d4 V: x: i( h8 y
</code></pre>
  M/ O7 t: X2 i  n<h3 id="25-流程控制">2.5 流程控制</h3>
) H  }: k5 q2 c. S8 W<h4 id="251-if">2.5.1 if</h4>3 s4 [0 C' d" M) q/ Z8 q$ T
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}. W5 |1 S# c5 B1 U" e( g+ u
% C/ W; j. N: o) G: K# ]
&gt; var x = 3% U3 t! a5 e  M9 V3 A$ v2 x0 {5 R  @# _
&gt; if (x &gt; 2){console.log("OK")}
4 p; G% \  |1 I& p" A, n OK
# u. V3 y( ~3 |' O& U+ ~0 E
4 P% d# y; S2 L+ E7 X5 Z2, if(条件){条件成立执行代码} $ C( L' ~3 y' E' f& T* W
        else{条件不成立执行代码}& W3 A5 |( w, `/ p9 K/ z
: J: d8 L9 _" w1 B4 l$ Y
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}6 \2 e: I! z; v9 f7 d% {
'NO'* R2 ?5 s6 ~% B6 h/ e

2 ?6 K  R+ P4 t& q: e3, if(条件1){条件1成立执行代码} ; s+ c1 v- u, ~2 ~" k0 q5 R3 H
        else if(条件2){条件2成立执行代码}
# Z: S; b& }: u$ s' T    else{上面条件都不成立执行代码}
* Q9 T! D# A, O, |: i8 K' B
# s1 d) q' g/ f! `8 J&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}+ v7 H# B! w6 l9 v5 z( v
Ha  P9 \$ s+ W* @5 p
</code></pre>( N: B. x; H+ |
<h4 id="252-switch">2.5.2 switch</h4>% O4 u% ^) E  s7 q9 X3 A5 }
<pre><code class="language-javascript">var day = new Date().getDay();( J/ @& X% a* w5 i6 s' C
switch (day) {. C$ `/ M3 l& q: @' g# ?
  case 0:! A9 T/ X  [! M/ S+ R* }9 i
  console.log("Sunday");& _1 E5 \7 S- }3 i7 h" k1 S
  break;! l& s6 s' `7 r; w* [9 X4 }& b
  case 1:* [! k/ @5 k$ c6 l& \" ~! {
  console.log("Monday");
9 E- J$ G8 [0 O/ l  break;
: E- G2 x# H' H8 _$ b+ ^$ @/ bdefault:: I  y* W- c% k2 H$ J# x8 E) Z9 t
  console.log("不在范围")/ D1 L7 V& ^+ B0 a
}
3 o' R( \2 _, _# G  w 不在范围$ M; H1 x, g  A# o* U5 I
</code></pre>1 ~+ \, r3 S; S( s9 Y) O3 D/ ^
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
$ ~  @, ^0 s# b<h4 id="253-for">2.5.3 for</h4>3 x4 _1 U$ ], u  h
<pre><code class="language-python">// for 循环8 f8 S; R+ x% n- p" k2 I
        for(起始值;循环条件;每次循环后执行的操作){; ^, K) K) l' u9 J2 X
        for循环体代码" W' H; d7 w. s+ f9 ^
    }  u9 E7 ]/ u& G1 H5 y5 ~

7 O& q/ j. z( B' [for (var i = 0; i&lt;10; i++){
6 B5 p! w; Q& t    console.log(i)  Q* i0 X9 J6 t% s" c' W
}
+ f" W8 F  c1 C        04 O' K( F, H& A8 h
        1
( ~4 Q. T6 h/ Z0 q        2
: F9 ~8 t1 @+ d4 C  p        3
, s8 e; g7 Y8 y4 ~8 p8 H3 v3 l        43 t4 @. w+ v. G/ }
        50 b" m  ?. o- [+ k- d! M- a! H; Q
        6
  Z# i8 I6 O* D        7
3 y. v1 N& |; c# r        84 P# L2 G* y1 z  j( e* T
        9
' _1 g4 Y9 }8 v</code></pre>6 @) \8 @7 N. d) o- M6 u% [
<h4 id="254-while">2.5.4 while</h4>7 v" _; B& y4 _
<pre><code class="language-javascript">// while 循环: s6 a( Y8 x- l9 ?2 O
        while(循环条件){/ ?% A; q2 m0 {+ K
        循环体代码3 A6 g' |# C2 T7 ?7 G" ^
    }& ?$ ?$ `4 w' Q  I$ L

4 P& b  t( A5 M&gt; var i = 0: ~; u( @6 }/ M* P& W2 D' x' O
&gt; while(i&lt;10){
/ r$ X' o  `; \3 n7 L, L( o    console.log(i)
3 Z' A6 E, h( V3 N2 o    i++
+ w) j2 A, L+ u8 |( }}8 j* F. J0 T1 }2 D
0/ ^2 |! k3 \4 ?
1* |% t4 z7 \3 k! J/ q4 z6 V
2
+ o' q' m2 w' G, w+ I: Y/ x 32 f* @1 Y; C% {  z: i2 n
4
* T  ?  Z7 Q' a4 v" n! Y" \$ f, H 5
3 A! M( ~% @6 w+ X9 [+ o* Y# v6 c 63 M$ G$ y/ g0 {3 U; M5 I
7
" O+ W- X* ~: v) S  \+ A: j 8
: {+ E4 b3 F, S 9# j  {( b5 h9 L: K
</code></pre>9 ]+ s# T% H( R- Z5 k
<h4 id="255-break和continue">2.5.5 break和continue</h4>2 ~- H/ L& y0 x/ i8 E6 D
<pre><code class="language-javascript">// break. x2 j2 F8 T1 X; b6 D0 a
for (var i = 0; i&lt;10; i++){
6 V( |5 ?3 P/ q/ S7 A" u    if (i == 5){break}" q! n5 {' `; r: G- D
    console.log(i)2 B8 E* b4 L4 b" a4 Y; ^' u- d; P6 D
}; E% N* l( R' V9 w: U! ?( c
01 x/ `6 L! y0 x+ i2 K  k" Q
1. C  i  ]9 b" G( F! l' {) }8 u
2
- \  k) o9 X4 |: L, x! T 3
: U' f' o0 [4 w1 w, o3 o. } 4- r/ w" @9 T9 A
// continue
( {1 j3 f3 ^# s8 l1 `for (var i = 0; i&lt;10; i++){: N, J+ |9 S! u; o5 `
    if (i == 5){continue}
9 r; W! F+ ]0 Z8 O; y% {    console.log(i)
# Z/ ]. |, p; B0 t) B3 w}
/ t8 H/ Y4 @/ v' Y9 s 0
5 _* C  L) |  ~3 L% A 1' p! k+ V, W* }; m) C7 B% S
29 `; e! g: r- v! h( c
3' q1 M* R3 X. _, `% \( ]! Y5 O- w
4
7 y0 e4 I# ^% I2 [1 d# v 6
0 }* b4 K1 A/ _; C8 P& H( \2 Y1 x 72 T) }0 u: n, x; Z) l. A% m
81 o0 m8 M4 X" |- b8 O
9% V/ k# A5 d  n

+ M* R6 f( W7 o1 N</code></pre>/ M# R+ G: `+ D! i2 i% t0 r
<h3 id="26-三元运算">2.6 三元运算</h3>
. V+ {2 W+ r2 h3 E( |" H4 J: ?+ D<pre><code class="language-javascript">&gt; a
" B+ @4 E4 K! K9 E* d2 d% M1 ^6; o8 O& T9 e" K/ ^# `* x/ ~
&gt; b' ?( L1 m4 u3 f) J0 r
3& ]8 `. z, M+ q( g- n, i5 ?' \5 F
  I3 O3 S8 w& S0 |& d
//条件成立c为a的值,不成立c为b的值: d; F& F/ |3 n2 n! ~
&gt; var c = a &gt; b ? a : b
+ v9 A: e; F3 E&gt; c
; E3 e) _& B  |& t! |2 E  K6
; R- F2 E2 W: w, {9 e+ S" H! j% C
0 q; p7 q7 \6 n- b! J' N$ r8 T, _# I// 三元运算可以嵌套
* E( J1 O. G% g! k% d+ S</code></pre>
! d  d! g0 l% Q1 L2 G4 l) C<h3 id="27-函数">2.7 函数</h3>
# o4 y% X0 w, z# j. d! [) N<pre><code class="language-javascript">1. 普通函数/ S1 Y5 F) W1 t  l) d
&gt; function foo1(){
: E1 X# B/ S0 _) w3 i5 G0 R    console.log("Hi")
* R7 W; @* U6 c7 k% S+ k}5 r8 [+ ~7 J( D# f+ J# l2 {
2 n/ Q+ N% d0 m
&gt; foo1()
. ?& j+ ]4 i+ z2 r7 ~        Hi
8 t/ o, y5 ?5 I: V7 v: l2. 带参数函数% W6 ?. z" K1 h( p  ]7 W
&gt; function foo1(name){
% m  R) e, S. T  ?$ [3 v' b. j/ h3 uconsole.log("Hi",name)
3 d' J' B4 z4 I+ i% s' U' p}% _" g5 M  u0 j8 v

+ s+ l! r* p5 m  Q) ^4 z1 O: X&gt; foo1("Hans")
* @8 J6 M- Q& aHi Hans
! b# H0 M! ~; k7 z1 a, R) i. M
0 H4 o$ C4 Y7 f4 s/ V&gt; var name = "Hello"
' c* ^- _9 I* E&gt; foo1(name)
2 `& l( Q8 q6 d5 K# C* oHi Hello3 m- ~% f5 ^; m7 f% T7 g. W& o8 u

) n$ h$ H" t# _1 T! r7 u) P3. 带返回值函数
6 O1 P- M6 v3 ]$ O& r" \/ `&gt; function foo1(a,b){( f& u. F+ R3 U1 S, |
        return a + b   
: @$ C1 i) W( r8 _, ^' O+ C$ g}
. d& E; j. |$ C5 U: Y# s&gt; foo1(1,2)+ g7 C# G8 a/ m6 K" c9 L7 E' k
3
$ B, o& T0 v+ F&gt; var a = foo1(10,20)  //接受函数返回值- n7 X0 P- Q% C+ b: P  g! P9 Y
&gt; a
$ @. j' z, a: R" \* a: B30' i1 G; v5 p7 A0 g
  Z3 j: v! u+ F( ~
4. 匿名函数
$ }. W, t) A0 b; g. N&gt; var sum = function(a, b){
7 b& K% Y7 v6 G2 f, ?, c  return a + b;
. K0 X! n% ]8 \8 Y( f) O; D! ]6 V: V}
) l! u+ h' A1 R: L) M: f- f&gt; sum(1,2)1 M9 X' o3 B' {. s2 K
3
* \8 `5 {7 |7 M/ ^' |0 a$ B5 ~$ ]8 \$ l! R- O
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
. a7 r# t( j+ L- Z& Y&gt; (function(a, b){
' C' O8 J  l1 x% R4 ]3 ~  return a + b/ K8 W/ Z  X0 `  L
})(10, 20)& _6 L9 d0 H# C4 u# g6 j; r, [* K
30
  ^0 k  B9 V2 t9 `
8 L: B$ u5 h; y1 U5. 闭包函数: ?7 h, Y7 x5 h+ A
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数2 A; ]. m  g5 U; u
var city = "BJ"
; W; C( u; ?8 g% }: n# r1 vfunction f(){; t# g/ a- f' k$ Q* m
    var city = "SH"
  V$ k; J1 B2 O0 l  v    function inner(){
% F3 l/ y) f# G9 I        console.log(city)
* D3 V- W6 |( s' F, X* `0 W    }
6 N+ D( E6 a( y% f. _$ h    return inner0 z& ^/ ?* \7 ~, k, n/ w
}
9 K5 [! u5 Y9 [& A% j2 {8 V6 \var ret = f()
# x3 M/ _: m4 v. V% [ret()
8 _3 T, x* l% K, ?执行结果:% t, h  g! K+ U5 x
SH6 j; I$ U+ N& A4 d2 H
1 r/ Y2 Y3 h1 M: g
</code></pre>  s( G- L. V: v, T2 V5 \% ?( _/ _
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
2 _0 p) b- ^- i5 v2 w/ q<pre><code class="language-javascript">var f = v =&gt; v;
2 C& c3 u5 P  l; H! ?// 等同于  D- d& T5 s, K4 ~
var f = function(v){  @6 y3 Y3 Z8 y9 `3 z: f
  return v;5 N% [- Z6 ?9 }; I0 T
}; ~! R( x0 U7 e$ A9 `) Z1 [
</code></pre>
, C5 l) |/ B# g8 }3 T<p><code>arguments</code>参数 可以获取传入的所有数据</p>6 r1 w8 [' h) Y& d0 U
<pre><code class="language-javascript">function foo1(a,b){; [- ~- N9 @2 V- s
    console.log(arguments.length)  //参数的个数
: C  v! a; z2 J& {6 r    console.log(arguments[0]) // 第一个参数的值
: w- b  K! h' R8 Z) u- A        return a + b   
5 D1 q+ j8 d! M" v! B}
  |$ v3 E8 v" q1 _foo1(10,20)
9 `) x8 B# H- F6 o结果:
/ H! m) P& W9 _" M' N 2          //参数的个数
& f: z0 g" R- g3 C0 f& c10        // 第一个参数的值
* y- B( z/ G0 b; w* P7 v& @30        // 返回相加的结果0 o* c2 F/ c9 G+ L
</code></pre>9 V. B% W% ]2 V9 w1 ]
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
' v# ]9 p! r% s<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
* L7 Z1 X6 _% w) ~3 t! B+ u$ {<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
6 X0 Z6 B+ _& t2 k# s% q* ~<h4 id="281-date对象">2.8.1 Date对象</h4># K6 W" B1 Z' M& K8 C
<pre><code class="language-javascript">&gt; var data_test = new Date(). w4 k7 [. X2 m9 @% I/ W& z) f5 b
&gt; data_test
  W. \5 P" t4 a* ?( R- qFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
6 z, T# ]  E" x6 A- w) k0 I&gt; data_test.toLocaleString()
7 A* K/ N. K/ D9 n3 u: `* ?! N+ Y" H4 q, l'2022/2/11 下午9:44:43'& S0 ]( v7 R7 R! S( u+ D" v! F
& P/ T. n- H( P: J
&gt; data_test.toLocaleDateString()8 t' Q  L% O& Q, p3 M0 J
'2022/2/11'
6 W$ f" n5 H  @* I' p7 S- \' E- ?" h% e
&gt; var data_test2  = new Date("2022/2/11 9:44:43")% N: J$ ^% \! g8 i1 y/ c& E
&gt; data_test2.toLocaleString()
! D! A' V4 K" l9 P3 S( D'2022/2/11 上午9:44:43'/ n+ z8 ~5 h" [- G. g

% [0 D$ y7 w. t* p( {0 ~: C  _// 获取当前几号
; M  w9 J0 ]* {. b& v% w, v; j&gt; data_test.getDate()' k+ K; C$ U6 b% P  N4 O8 w
117 v; I& S6 G* s& y5 m
// 获取星期几,数字表示1 V- f% P+ c' q0 i* ?9 |
&gt; data_test.getDay()  . I, o* f, t. w0 O$ a# J
5$ e1 F& g, `0 k! S4 W
// 获取月份(0-11)
) o' p3 V8 ~; T1 z. X+ ~. L+ ?# Y&gt; data_test.getMonth()
' j7 x% M2 c( J& ~  J' D, S1
* A* ~: q5 w2 l+ e4 O// 获取完整年份
+ \0 g* F6 }- |; C. U+ I3 V& Q7 |) Z% `&gt; data_test.getFullYear(); p  `; w* e! ~
2022. }3 I$ Y6 [6 D2 }$ O. b, b/ P" E
// 获取时9 I3 H, t9 B# [
&gt; data_test.getHours()" _. S) y6 G/ k5 G8 j( b# ~3 P3 V9 n
211 l' d$ `/ J: p9 P  f6 I  B
// 获取分' ?7 n' Q% B9 P3 I" \
&gt; data_test.getMinutes()4 V9 Y) l& }  V  [* N
44, {7 J; |2 S4 j* U
// 获取秒
; S6 J9 X8 ^. T0 D. I&gt; data_test.getSeconds()
% H9 C# C  J7 }1 R9 y4 }4 |9 `( o43
* d/ ]7 D. V( ^' |// 获取毫秒
" P9 X3 C6 ?8 h* L! k&gt; data_test.getMilliseconds(). p: R- X" `" p7 Q- n
290& ^$ x8 ~4 w" r
// 获取时间戳
3 G% F6 v+ ^& y  I7 @  l&gt; data_test.getTime()
0 Z" t" p% B/ e5 N8 k1644587083290
5 D- {& \. g: r1 j4 a2 t0 m</code></pre>
7 e, t& i$ R; F<h4 id="282-json对象">2.8.2 Json对象</h4>$ u9 H/ b+ Q" h$ f$ k" t6 Y3 ^
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
) q" N9 B/ r4 e1 T& g  a8 EJSON.parse()  // 反序列化,把JSON字符串转换成对象8 n" l3 M- ]# F# m) Y

! Z3 g  F3 B# q2 d// 序列化1 B$ L* O5 z4 v6 Q+ y/ @* w4 X( f
&gt; var jstojson = JSON.stringify(person) : x# {1 \9 E5 G2 Q* _
&gt; jstojson  
4 ]' [9 |. r. O2 q) V4 ^9 h3 e' |9 }'{"Name":"Hans","Age":18}', A( Q0 _( Y4 {& O

; ?2 B+ V; F% T* h// 反序列化( v$ c# S( v7 c' z' @! G
&gt; var x = JSON.parse(jstojson)
$ Z+ N7 x# W# ~, R+ o" c% z) i&gt; x5 H$ z* w3 q' ^  c
{Name: 'Hans', Age: 18}
( ~; f, }5 ~  Y9 x: N3 i&gt; x.Age% o2 t8 h! U6 X$ A& b" F9 U' V
18% }- G1 r" k& ]
</code></pre>& `; R. Y+ a8 Z3 T
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>. x' [5 _1 Q' X' ]% F
<p>正则</p>
$ a* a8 d: y; U& y# i* U* @<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
/ L" r8 o/ [; E6 w4 r5 S&gt; reg1% [$ A& Q( e  N" v" x
/^[a-zA-Z][a-zA-Z0-9]{4,7}/* E; i) @4 |- P6 o, ~/ a" a
&gt; reg1.test("Hans666")
) F$ a. ?- Q1 W/ q) z# S  ytrue
+ S( U) d  @# _
" R( }. g; C' s+ U8 ~( U&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
: B# h. ^$ S2 d8 J- s$ R/ K&gt; reg2
; [0 m( R' c% Q/^[a-zA-Z][a-zA-Z0-9]{4,7}/
  V7 _, ]. [& r: ^" h/ ^' N; L&gt; reg2.test('Hasdfa')
! X; P6 |2 g+ a6 N: c  ytrue1 S3 S( z* t3 S. r' V& u8 O" u
. K* N2 h+ C" o% |
全局匹配:  G1 j' L! T- D) Z, x
&gt; name, ^" I6 S9 f0 _9 r9 h
'Hello'1 J" z% @' _9 z! u7 J0 L
&gt; name.match(/l/)
1 R" _# n! T& S6 f; b+ i" V( v['l', index: 2, input: 'Hello', groups: undefined]
8 \. [* u2 ?8 u" d: X) W0 x( U
&gt; name.match(/l/g)
& ?# J" o8 N8 J(2)&nbsp;['l', 'l']
; ^' k. X9 V* s( S+ D, L// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配( h: H) S. e; D1 u: o

+ f; Z. }* V9 W$ \9 Z- ]全局匹配注意事项:+ b7 |4 }2 `! u0 y" R
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
1 q4 Q9 y% \/ `# s+ B! \2 i) T&gt; reg2.test('Hasdfa')8 K: w8 H- J9 U2 R
true& p' k2 I6 n$ i8 ~
&gt;reg2.lastIndex;7 J8 Q: }! `5 Y, d
6
% I% U: ~" Q; ~# w" r3 T. P&gt; reg2.test('Hasdfa')
" Y3 E8 Z% h) ifalse
: h' e7 n3 Q* r9 I6 F4 _. G3 c&gt; reg2.lastIndex;4 E# p( J" H2 C/ ]
0
/ J) M# m7 R* J&gt; reg2.test('Hasdfa')
$ K) z# u4 d% H. u1 ytrue# A- c8 k9 Z+ b) J. b. A
&gt; reg2.lastIndex;% m3 x) Z+ }6 n* L
6* G$ I# c7 Y# R3 b. T
&gt; reg2.test('Hasdfa')3 X. \" K. M4 V8 m
false
; }: C, _& R. o3 B' v9 k7 c  V( |&gt; reg2.lastIndex;0 J* d, m6 P- G0 T
0
9 T5 O1 g; E  e1 }/ F& a5 }( Q// 全局匹配会有一个lastindex属性' c% d: G& H3 `3 s9 q
&gt; reg2.test()" x; ^$ h$ \6 Q( R7 Q- w
false: G: x8 w- u" w9 f! |
&gt; reg2.test()
  ~6 U! T* d, e' r9 Z' V9 n: Itrue0 [6 n. _* J& Z$ W/ s: y
// 校验时不传参数默认传的是undefined7 |( v/ N5 I2 f& E% t
</code></pre>
" u1 I; v' Y6 m3 r3 G2 C+ `<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
  O8 W" g( H* Z' ~0 @( K<p>就相当于是<code>python</code>中的字典</p>
5 M! L- D$ c6 @1 \<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
/ x& l  b: P+ s0 c# a$ Z# t&gt; person
) O7 H* Z* N) {{Name: 'Hans', Age: 18}
" Z4 y2 j+ T8 u- z$ E6 m9 k- r&gt; person.Name
9 }6 O* p% M# B% H+ S1 l, z1 ['Hans'
) z) f' @4 t1 p&gt; person["Name"]+ R5 ?. b0 Q5 F9 e7 R  y
'Hans'
& Q% Y2 S1 ~' k! [! D, c5 u* ]6 F( p; i# y3 _$ L
// 也可以使用new Object创建
8 ~  F! f! B1 z, n* r&gt; var person2 = new Object()! c6 u$ O5 f; J; O7 L; ^
&gt; person2.name = "Hello"% l) P$ ^( e( R' t" `. c, S
'Hello'
8 ?4 V' [8 a  M8 n' i& Z9 f% i&gt; person2.age = 20+ t. E* [- I+ |- e3 M- u; }6 l
20
8 n/ M! E5 P  ^  J! H$ @( {; a</code></pre>
6 P5 U' ]) f/ ~# B  P& }; S3 `<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ b$ s! r7 g. y2 X" f- U% D<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
7 t( N1 C0 N' p6 z<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>( H  @( S& B# t' |7 O. ]
<h3 id="31-window-对象">3.1 window 对象</h3>
0 j1 P. z, p8 D- w<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>$ k% G' K# {% y$ y3 b$ f$ A9 l
<pre><code class="language-python">//览器窗口的内部高度1 v. l0 ]( W$ Y
window.innerHeight ; w6 \4 w5 F* Q1 ]2 l
706, E( p! K' R; |( e5 ^
//浏览器窗口的内部宽度
% d; M6 Z( M; zwindow.innerWidth( n6 L9 U9 l, w- v* [9 G
1522# H, @$ G: q% Z4 M* _
// 打开新窗口
6 O. ^/ j8 j. r, X9 v& wwindow.open('https://www.baidu.com')
0 \$ a' Q( J* ~Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
7 \8 q- `# f$ E// 关闭当前窗口" W8 ^5 b) N" e# R5 S1 ~2 {
window.close()
' I' _# z& \9 v$ Z0 G1 h//  后退一页
( }* l4 U& X6 K. _1 Bwindow.history.back()
  J3 T, E. n& ]) T, n4 ^9 l  k// 前进一页) t7 g; x3 U( n/ h% u( x
window.history.forward()
# ?- N* |+ h3 S; z# z//Web浏览器全称
2 e6 n0 q9 j$ i6 W3 H; Nwindow.navigator.appName
6 m" v! j! V' f* \'Netscape'
: }+ j$ T' N& w8 K9 r// Web浏览器厂商和版本的详细字符串7 ~  A2 s( i3 R
window.navigator.appVersion0 z( l: k0 z/ [& P9 z3 L5 ^
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
2 z1 N; T% e3 P' E; U// 客户端绝大部分信息# y3 D  w5 j4 V5 x9 A
window.navigator.userAgent
5 d- N7 U4 f. k/ z'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% |  n. F7 R2 h% W/ u: v& K
// 浏览器运行所在的操作系统
: d# q- f! w( S3 z8 N; e, Twindow.navigator.platform& s* C( J* m2 N
'Win32'
/ \9 q8 n; g# y! R" }3 I5 p( N! E( z. K) r# R7 P# ^. i$ p( b
//  获取URL" K" U  W( y9 P) }/ h6 Q0 ]
window.location.href( M1 E* T) F! ^7 u& U0 l2 k5 c% K
// 跳转到指定页面
0 x. b' x4 Z& `6 X2 b) T# Qwindow.location.href='https://www.baidu.com'
: F. ]9 J9 b2 N// 重新加载页面
0 D) O8 g5 A4 f- wwindow.location.reload()
2 P7 ^7 g2 o. Y8 e) l# z. E</code></pre>
2 E2 p' I5 h3 v5 [2 e; ?4 Y<h3 id="32-弹出框">3.2 弹出框</h3>
+ i1 @0 @% J. g$ M<p>三种消息框:警告框、确认框、提示框。</p>- E% a0 r% d' T& t6 ?
<h4 id="321-警告框">3.2.1 警告框</h4>
. y1 O/ o. g* ?' l- F  _1 X' Q<pre><code class="language-javascript">alert("Hello"): T, S5 W8 S" ]* ?
</code></pre>4 Z- ?# e. J6 {; x+ p9 o
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
- N/ ?; d$ J+ d' y, {<h4 id="322-确认框">3.2.2 确认框</h4>. q- ?0 r$ a0 w% y0 e
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>- ^. Q+ D# P. O
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
' v; e% F7 \* |$ S1 o" atrue
: r% p7 m4 r: X- V&gt; confirm("你确定吗?")  // 点取消返回false4 W  U7 L. S  W! P$ S
false$ s# R1 u: H5 b
</code></pre>. u9 D& l6 h0 z9 A
<h4 id="323-提示框">3.2.3 提示框</h4>: [* W. d3 k7 K# \; t9 k
<p><code>prompt("请输入","提示")</code></p>
! P" R2 E( v& h" {4 R<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>1 X! M& [0 v) `- w9 i
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>" d" a& }( X; O/ I! D
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>; l2 {1 h8 k6 S& ]7 K2 q: ?
<h3 id="33-计时相关">3.3 计时相关</h3>  n' G  l5 v* |5 h
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>& K, ?7 W, w5 o$ u
<pre><code class="language-javascript">// 等于3秒钟弹窗% ~2 y# W8 t0 |0 n8 g# t6 V
setTimeout(function(){alert("Hello")}, 3000)
0 ^. L/ m: ~, r! k4 K+ |$ Q, Y% f3 V2 a/ D* @+ t& ?) ]6 v
var t = setTimeout(function(){alert("Hello")}, 3000)4 l7 \' B( G4 j5 M- |

! u$ J7 p+ e3 V/ ?; i& u, o: X// 取消setTimeout设置1 j) u8 W* ~1 y3 |9 g
clearTimeout(t)! r, n# ^3 D( {+ y
</code></pre>  _* L+ z0 o- L/ `" r% `4 h" ^
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
) o- i& |- _  k) o+ I  F<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
" W# _+ Y/ }, r0 Y$ _4 Q<pre><code class="language-javascript">每三秒弹出 "hello" :
% i$ [8 i$ x& p+ ?  k. ksetInterval(function(){alert("Hello")},3000);, W7 T. O) l) S& B
</code></pre>. L- }/ X6 d6 h% x$ v8 E; s
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>6 l  O( b( G  L
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);+ r! k, h& p/ [( }  n% y4 I
//取消:! d  Y6 L, z# w
clearInterval(t)
4 I% S; i! C; u3 q5 m/ d</code></pre>3 [$ V- ]/ ]" q* b$ U

# `' _! F; f+ h# e5 N) M! l, c
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-5 18:37 , Processed in 0.076365 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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