飞雪团队

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

前端之JavaScript

[复制链接]

7995

主题

8083

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

; ]* b, Q2 k9 k<h1 id="前端之javascript">前端之JavaScript</h1># j( `3 {0 H' s
<p></p><p></p>
& G+ n) l- W: H4 s& J: @<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( x* S4 c% Q9 N& H, Q/ r<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>' ?, x( R" U' t6 c. K% f
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
" d' a5 k9 E, [0 w" p它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
' p7 e. R) @3 g) K" C它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>; W1 Y2 D* o& \% L6 O
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>8 J/ k+ ?7 o0 B. ]2 @; N
<h3 id="21-注释">2.1 注释</h3>: w+ m! S4 X* I. F% v
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>. M) ^' [2 d- e+ P9 e( n$ U8 Q
<pre><code class="language-javascript">// 这是单行注释
( d5 b' [9 ?6 `) m
" f. `8 z/ G( J/*
; _) l* u1 i! m" D1 t0 O& G这是多行注释的第一行,
8 Q3 k# [1 @8 b- D; a7 e8 q+ A' K这是第二行。
* C# U+ e4 s0 o3 K( X* l. s9 o  x*/! T. M5 H7 m& H/ B1 G1 E: P$ Y
</code></pre>
2 A  q) |( }* G) ~& }" U$ n<h3 id="22-变量和常量">2.2 变量和常量</h3>
" |2 }* E% v0 q+ ?( S<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
" o% a7 t* W1 Q<ul>
6 V* w, d" j! [" O<li>变量必须以字母开头</li>
9 I" U9 R/ @4 E& ?' j) O<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
$ j) l8 `9 V! {8 Y# w* X7 a4 T<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>, x7 C' E/ ~6 o; R$ ^
</ul>6 N* L% y9 B$ b6 X8 S  l9 c
<p><code>var</code>定义的都为全局变量</p>
: t7 B* L- S; K" _7 y- g<p><code>let</code>可以声明局部变量</p>
! E& r( `* K& a<p><strong>声明变量:</strong></p>3 e5 I' [; t, {: o* L% o
<pre><code class="language-javascript">// 定义单个变量1 q+ M( o7 G& c' n$ r4 m
&gt; var name
( t3 p0 W0 C! W6 W&gt; name = 'Hans'
' _4 M$ P. @8 U* R6 g! p% Y3 Y//定义并赋值
! i. P7 w$ ^- o- K1 }&gt; var name = 'Hans'; r. I' f7 {$ A: n* e. N4 f. C8 i
&gt; name& m) p/ W$ p% l; M8 o
'Hans'
, e* V% a3 ~  a- v" ?( c  O. u( ]( {* J1 b5 W; ^4 X0 R
// 定义多个变量* v# y4 Z) R9 t3 p; I2 Q
&gt; var name = "Hans", age = 18
  g" m* p/ N; Y5 L) d% [2 M1 v$ P&gt; name5 h( _4 T4 s0 `
'Hans'
( p. a5 x. t" p' Z) H&gt; age
4 W  K7 y% O) L5 E* a4 {! M* d18+ I( i$ n! R1 b/ y5 a6 v+ [! E

8 s& h6 _" L5 N# ?! D, k+ J//多行使用反引号`` 类型python中的三引号
$ }  D6 C+ r, k  X; [&gt; var text = `A young idler,
0 C4 O: h9 L) F  y8 B! p6 Aan old beggar`
4 Z% m5 h3 E1 e( e' K1 e&gt; text
: n" C$ K6 i& a* r# A2 r4 \'A young idler,\nan old beggar'
/ d% w; s7 ]- z& J</code></pre>
" N- K; ]- e8 y/ y- \8 `<p><strong>声明常量:</strong></p>3 k: W* G! t' z7 ^8 W0 U& m
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>2 s. N* w$ ~' I7 c1 ?- {
<pre><code class="language-javascript">&gt; const pi = 3.144 v# l. z" ?' w: ~! T8 K
&gt; pi- \; |1 L! B$ k6 C6 f5 n
3.14
& u% e( o6 e) x! q7 ]9 T&gt;  pi = 3.01' j$ k* f! ^7 A- I+ R
Uncaught TypeError: Assignment to constant variable.
- f- N2 Q+ v' D( j' P' [    at &lt;anonymous&gt;:1:4
4 R) i: E$ Y' _. y! q: g, m( J/ N* m1 H: ~% B5 ]# g0 X7 u9 [
</code></pre>
: @( a& i' K" J, s  M<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
$ Z2 G& ]0 s0 n<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
# r/ |: s* B% o* ]<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>1 R4 g$ Y1 m( G9 }, e! \- Y9 \% U' _" ^
<h4 id="231-number类型">2.3.1 Number类型</h4>% @7 _$ B' k6 }4 B8 U$ e1 i
<pre><code class="language-javascript">&gt; var a = 56 d9 W! \: F6 X
&gt; typeof a   //查看变量的类型  , P0 p, Y0 e1 C
number/ C, G1 I8 q, `/ ~8 O9 u1 A

$ e3 f- f# p' O* R" N4 ~' `&gt; var b = 1.3
0 l* B' z$ y" `$ C/ Y3 g5 K&gt; typeof b
) A" X0 O1 `* |number1 i! c5 Z4 w5 h: G' `

" S, C, Q% N1 V2 i// 不管整型还是浮点型打开出来的结果都是number类型
# A: E! m* \# m# }$ n- W* T3 V
3 N! F1 D+ d. D' i' h/*) D7 O, \$ I6 S5 Z) d, L
NaN:Not A Number+ i- w  h; o, r# y' s7 t; G
NaN属于数值类型 表示的意思是 不是一个数字- y8 v5 a+ X5 }( x. D
*/" f8 e- I2 n# ~5 b, x
0 v8 X1 B8 b( `- O1 J
parseInt('2345')  // 转整型
; I5 [' u- v: h' g2345
4 S+ ?. F2 @! G! z2 r3 mparseInt('2345.5')
) i3 @8 W) Y7 Z2345* c2 y3 t* u1 X+ P! K& j% l1 Q
parseFloat('2345.5') // 转浮点型
5 c3 F' W: m4 n7 K0 R5 R2345.5
9 V9 I5 z6 W# MparseFloat('ABC')8 r; N/ v0 a, o% `9 L( j- A
NaN; K& V" W: w! e2 J+ w; ^8 R
parseInt('abc')
9 t2 T5 I* n' N/ S! L8 Q# eNaN% F9 d8 c3 u+ d2 S$ [" r
</code></pre>! o: Y9 E. z, p9 K. Y+ o2 L
<h4 id="232-string类型">2.3.2 String类型</h4>
9 A5 I3 O3 m, a1 G" c* g<pre><code class="language-javascript">&gt; var name = 'Hans'0 b8 g8 E7 _+ I! h: W+ S# k$ P/ E- J
&gt; typeof name
( G* ~0 r- h! A' x'string'
+ e5 l- B* b9 e- w, p& M
1 E# N% j. Q$ y1 K7 q' m& |( V//常用方法
' i8 }6 O+ q1 i& \( W// 变量值长度& A: Y2 t. f9 |- l) j3 h9 s
&gt; name.length8 q: S( R$ S1 S% Q* E" R
4: Y! X- e3 W; v" @+ k2 e: H( ?
// trim() 移除空白
% O& _9 }* U+ B. P% q&gt; var a = '    ABC    '
/ d2 `$ a1 S/ f) Q7 }) m: _&gt; a# a- b7 W, G; S" `- z% O" \0 }! x) y
'    ABC    '
. N  P( j4 z+ Z& Q& n8 s: h1 Y4 E&gt; a.trim()
% k+ Y2 T/ `7 l'ABC'* g; m6 r( k+ [4 o; W8 h+ k4 b/ K# Z% X
//移除左边的空白* a& ?7 L( U% z  z) T5 K. k
&gt; a.trimLeft()
1 Q( _, s' m- X/ f: F* Q: ~& a'ABC    '
; V6 R! h0 r2 c: r# d+ C# I; r//移除右边的空白9 B' ^, K8 F9 ~2 a
&gt; a.trimRight()
; X5 M8 d! A$ o& v; u'    ABC'  ^. N% A8 E* c/ U6 q! g! R
- O6 s0 ]! |" g3 P9 _6 |; |6 n0 B
//返回第n个字符,从0开始
: d, n/ ^. P: G  \0 Z&gt; name
6 }; X) n1 a! J: m8 b4 u2 y6 c$ d$ a'Hans'
" U9 C. Z5 G% N! c: W9 e- h&gt; name.charAt(3)
$ \$ Q+ ~' _0 y7 ~" o) Z( d+ ~+ h's', h! y5 _% h: ?
&gt; name.charAt()" W; p" e2 M! @  n2 \( u2 i
'H'0 z0 m1 N1 r6 F/ n  _* S  V
&gt; name.charAt(1): N& P, f/ Q- [! f& L
'a'( s1 N7 \/ c/ \3 H! a2 X

; V! M' @; B8 H3 y// 在javascript中推荐使用加号(+)拼接7 v! H7 i: a2 o# C* N3 p
&gt; name( q3 |6 v  i' \+ q9 R# p0 L
'Hans'
) H- [3 ?0 b9 @5 O7 s/ b&gt; a9 D0 m8 V& S$ {
'    ABC    '
% K4 \6 w8 R8 T1 p( U* Y&gt; name + a: p( Z; m& [0 h6 z( n9 H
'Hans    ABC    '% z/ X0 _8 B8 n; U
// 使用concat拼接
4 w4 a3 r4 R/ s) ~8 O&gt; name.concat(a)! Q( g  V% E& _* `& ?
'Hans    ABC    '" b9 g* q& l$ r( J

7 k6 \6 ?* C  T3 {7 L//indexOf(substring, start)子序列位置3 r' Z1 p$ ]% o7 |6 X
8 P3 }$ Q, V- s
&gt; text
( ^7 |9 u/ c2 s; d) N: m- _'A young idler,\nan old beggar'
) w- L( |) q! K+ T4 n9 N$ N&gt; text.indexOf('young',0)
7 i6 \; G" p; H& Y  W! ?2# E; Z) T& a$ e! H3 Z
  ~/ j% r1 ?, \
//.substring(from, to)        根据索引获取子序列' ]- J. T- w$ }' d" l
&gt; text.substring(0,)
0 _% }# H3 f& m* Y- a0 I9 f7 |'A young idler,\nan old beggar'% u6 ~1 v" N. S) b
&gt; text.substring(0,10)' A! q. U# z+ J2 ^
'A young id'
$ c8 u6 |5 R: Y  w9 J  J1 _' P& g2 {4 Z# S7 N
// .slice(start, end)        切片, 从0开始顾头不顾尾
/ _5 F1 i$ ^8 I* y&gt; name.slice(0,3)
% n8 t" I6 V" d* b1 A'Han'! R( u5 @/ [2 w) R

5 z0 A* X# r: d' q// 转小写$ x& |0 J3 X6 n5 r5 @4 l
&gt; name
# i+ v9 O& V9 y& w: A'Hans'9 i% I8 l1 |/ ?$ O& ^1 I+ s
&gt; name.toLowerCase()) R" ]7 B4 b0 O5 Z
'hans'' Q/ |1 a8 v$ m3 c- ?, r
// 转大写
/ M7 y. K- g( H2 t$ c: Q&gt; name.toUpperCase()
, |4 o8 R) x# S% ~) M'HANS') O& \: u9 ~! {

; r. k, R+ E! k// 分隔
" d4 V8 H& s" j* z: M4 S$ @&gt; name+ y8 W# K: ?) h4 K# L6 x( e7 n
'Hans'9 v1 A! P  W- f1 ?, }; W2 O9 K
&gt; name.split('a')
( l0 I& ^. x  ]' ~# ~7 T(2)&nbsp;['H', 'ns']
( y! S6 h# W7 u</code></pre># E4 O) E; e' w1 V
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
1 {# N+ m, Q8 y& I/ ~5 \<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
3 B+ I0 m7 _, E  p. `" L$ U! u. I; |<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
% L# u5 p; p! y2 Y  b. s, g<p><strong>null和undefined</strong></p>
, c& A; x: J3 C0 N" ?" E6 S<ul>7 K# ]. t* W8 a0 m" ?# w7 I6 G5 ?/ z
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>/ N. g: G  j2 E1 k: ?5 P9 w
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>& z0 k4 L: k7 t7 X! i( N/ z- W
</ul>
' |$ \9 t6 T( I4 d% o+ B8 Q2 H2 F<h4 id="234-array数组">2.3.4 Array数组</h4>9 k2 `3 X+ Q- e) o% J
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
6 v/ ]: Z" t2 K. @" P* x<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
' ?5 O; B4 V# F% Q! s, R+ C&gt; array1
6 n  l1 x9 X# F( ?' w% i4 |, X+ g& S(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ z  H; z8 D$ }1 A6 U! [
&gt; console.log(array1[2])  //console.log打印类似python中的print! N. \9 P, y6 n' ^3 ]% n8 ~: K* t
3& l9 ?6 M, C+ s, K
// length元素个数5 l* R9 @& y1 M/ j  R
&gt; array1.length
- X7 i% n9 M6 ?: {6
) d( `- {$ W; {// 在尾部增加元素,类型append
, {. ?; ~( m$ x$ ?/ @5 ~&gt; array1.push('D')1 i2 k5 B0 T) X/ E. S/ Y
7) q! M5 o1 _6 D' W, }. ~2 j# D
&gt; array1
4 b, L, ~; t8 v& v" T' Q  c(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']- }9 B* Q% C  ]$ v; I0 K! k
// 在头部增加元素" R* R- Q5 ^9 K* C2 ~& {. \
&gt; array1.unshift(0)8 A/ u; {5 ^  M; I+ B8 }
8
' _# \" E$ A9 ?7 p. f! ^&gt; array1
2 s* b" V7 M$ x- b, d6 b9 f(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
) A6 k. p" n% l8 z" F
! z/ j5 ]# O) W' U$ ~2 x//取最后一个元素
$ N0 ?0 A' z3 H&gt; array1.pop()2 Z! U* w* S3 t4 D" Q# z' {
'D'1 b) Z2 w% t6 \
&gt; array15 N# n; M. `# }9 l
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']& z6 C, j+ s' M+ A  F1 p1 d7 U0 k) o
//取头部元素1 l- B, }: T7 n* h
&gt; array1.shift()
! ?: A% R) m# S0 U* F0
+ F0 q2 i" U0 }6 g# y5 w) h&gt; array1
; V# _% T* ^2 W- Q# r. {6 T0 u(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
3 z4 P7 i/ h* x  _1 ]+ v8 z0 E
. a7 S1 C' k2 c5 x. s//切片, 从0开始顾头不顾尾/ |- n9 [4 B) y
&gt; array1.slice(3,6)2 ^) l" Q6 Q- n5 j) f
(3)&nbsp;['a', 'b', 'c']! h2 T$ ?9 I  T+ ?- i
// 反转
4 A3 v* P3 a8 ]2 a, \: U' n&gt; array1.reverse()6 ]) w  a  T) ]: G- b( T
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]$ d6 N* A3 J9 k
// 将数组元素连接成字符串/ p  l* \4 b6 R' s# N! p" s
&gt; array1.join() // 什么不都写默认使用逗号分隔% N1 i8 ?. L* m- |4 u$ u
'c,b,a,3,2,1'
5 A+ d9 G$ Y0 C0 i( C  i8 C9 v&gt; array1.join('')
, K! |0 T" @% }1 ^'cba321'5 j& V' \9 X( t$ [$ s
&gt; array1.join('|')) Y5 I4 [( u% W# h; U9 ^
'c|b|a|3|2|1'
4 Q* _9 U1 ?3 Z9 b, u' r/ g
9 g- o9 \) M7 K1 t3 b# V5 |// 连接数组+ M" W2 B3 Q0 z8 e
&gt; var array2 = ['A','B','C']
2 R. F) p4 J# S8 O0 z3 l2 @+ t+ E&gt; array1.concat(array2)/ t0 x8 x; a. ^
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
3 v5 U1 V1 h) e; X8 [; P9 f
) d" u1 T3 p* C& u* L9 u8 ]// 排序) y. s+ ^7 h! j. {. S4 C+ e' f
&gt; array1.sort()
8 r" g8 _% `+ X: o(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; r5 @+ u/ v8 a+ R  Q' b/ `  \5 o8 F$ n1 d* {% V9 c, H7 J5 {
// 删除元素,并可以向数据组中添加新元素(可选)
0 J# s. e% X1 u&gt; array1.splice(3,3)  // 删除元素; \% H5 O# r# A8 o0 B' f2 M7 W8 I( _
(3)&nbsp;['a', 'b', 'c']5 p6 _4 m- r. Q+ @' e; u( h
&gt; array1
- @* E8 q# C3 W6 g' L% {(3)&nbsp;[1, 2, 3]7 Q; m2 I9 U8 h
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素/ Z9 U+ O) I5 d: R. b
[]6 o2 K) f1 Q8 o& E/ f: y/ t
&gt; array1
* r. Z$ D1 n4 q  L2 B3 W(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']' {5 a% M" r& X

- r1 U9 w4 K4 x/*
" A% o9 X) O7 F2 A9 |, Fsplice(index,howmany,item1,.....,itemX)
5 @  L7 t- c( R6 [$ T8 F6 T! m. Tindex:必需,必须是数字。规定从何处添加/删除元素。2 S# s7 x+ V1 |& D; {
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
- B! A, U/ Z9 N0 j- nitem1, ..., itemX        可选。要添加到数组的新元素
8 v- Q/ R1 C$ g*/3 |: R" e) ^3 g6 X4 s* z2 R, ?
% k% Z/ W' S! A+ L5 h
// forEach()        将数组的每个元素传递给回调函数
8 A- @3 j) r" t+ i# `- j, k&gt; array1.forEach(function test(n){console.log(n)})" S5 T7 B: ?- U& }
1: r/ |  ?$ `; p: A
25 s2 O4 D  w  a  z/ V
3
0 f" N( t0 `; w0 C A
3 C5 v$ b: X) i" }$ H$ { B
& R  h  l' Y7 `8 W" u) S C
1 T3 u4 H4 L( d// 返回一个数组元素调用函数处理后的值的新数组
; H8 H: B+ U! _6 L5 }4 S! A5 D. b&gt; array1.map(function(value){return value +1})- b8 [* {- t1 n  C* X" A
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']1 u2 X$ F% i; X9 y1 M  S" z
</code></pre>
0 I+ Y! T8 m8 u, r+ H<h3 id="24-运算符">2.4 运算符</h3>$ i  F1 z& k7 E* v2 r
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>- G5 f0 G8 }# c, y7 T( ]
<p><code>+ - * / % ++ --</code></p>! Z7 z8 _+ E) P. S/ \! o; |
<pre><code class="language-javascript">&gt; var a = 6
1 q1 K4 X% _1 C5 D2 H&gt; var b = 3
, r% S# d- i( k1 ]+ z9 K// 加1 s8 G: w" i8 i" L% D
&gt; a + b9 F  o( m4 m; E* W
96 _3 i) _' m5 M) q1 U
// 减! T% Y) o$ R8 M: I) {$ @2 A
&gt; a - b- |# a  }2 x( V# b; B
3
+ d$ V# C0 T; v! S! E0 b& n// 乘
+ q5 J# j* m$ U! \3 v&gt; a * b+ ~3 Y0 J* Y8 u2 J1 P
18
9 l/ _' G+ P: x' O// 除
$ ~8 M0 H8 J+ H3 T* ?  K  g&gt; a / b0 |2 b" q9 w: G% a2 T( P, h- y" L
2, n1 V6 U/ |$ p0 @4 x
// 取模(取余)
9 k- F; ^( @, e1 Q) X&gt; a % b0 D  K# W5 H  e) T" y/ M3 d
0% F& Z& _1 o' S/ ]1 p& e) ?' t7 y5 i$ _
// 自增1(先赋值再增1)/ x- G0 i9 a7 m. v: Z: F7 R
&gt; a++7 c8 m: x8 d" B& y
6! z/ B- @- F; p! |) K, S# w: f
&gt; a
. u# O1 y, ]" y) b7& V  i8 E$ ?2 N* Y$ t1 F  \
// 自减1(先赋值再减1). M. P. K( R* ^: H' g
&gt; a--
6 U0 G  A$ [% g( H+ i7
8 e  n/ Y; ^' _+ b" c, z9 v* x&gt; a
! W! H7 ^2 o: _% H1 g60 \- w7 l7 m8 s% y
// 自增1(先增1再赋值)
# l9 X6 G. v* v& V9 x&gt; ++a  p: P5 Z  e2 G. X
7, h1 q: r. V/ j
// 自减1(先减1再赋值): S) C1 L8 r& Y0 y/ [0 T  y+ C
&gt; --a
9 O; U( e+ v  `+ B+ Z; k6
. ]- ^6 T3 v$ ~) X&gt; a
6 `& l* T8 J# Y! a0 `2 R3 \. ~64 Y$ W& v, x6 X# w/ v6 e/ ~8 [) _
! E  v  C, [& u- r9 q' N
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理! _  T2 V. w2 n& X
</code></pre>: U7 ~; O% C# v% a8 G
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
3 c1 z# g/ U( X5 A" C2 i<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>8 k7 h/ }2 w# P( n
<pre><code class="language-javascript">// 大于
! X4 O& u5 m8 K% d0 ?&gt; a &gt; b
8 h; y/ u6 V* W; b/ h' ]4 Htrue
+ G% n! H8 L9 n6 X7 ^; a// 大于等于
8 B4 t. E) t; y, O( L3 }* H&gt; a &gt;= b
% k, L/ @5 J8 strue2 l- C( J! a$ Z- g3 Y! v
// 小于
+ \+ [0 \& U$ }: D  x5 X&gt; a &lt; b' p7 Z1 Y2 Z/ U# K( Z
false4 |6 `! K6 G5 t. g# `
// 小于等于
( K* @. @  r3 L' U: I&gt; a &lt;= b
+ W: @) d  f0 m( ]  |7 `false
3 J1 L1 o6 F& k8 ^$ k. c( i5 N// 弱不等于
( _/ @5 q/ ~# k0 q. S&gt; a != b
" A7 k3 ]% O- ?' Z4 J* ^) }7 E! }true
+ F) i5 O- U, s" v8 L; R+ D& H" l// 弱等于' _* S& F1 E& p: D( q$ L  ~
&gt; 1 == '1'+ V; t- V3 V- g# q. `, V: X; U
true
  n$ n# f7 `) \* x. t// 强等于+ b9 c0 ^) D& {4 U) g# ~! E
&gt; 1 === '1'
* ?9 d2 t- Q* L. s% g. rfalse
! S: h6 s6 N3 f. Y4 h  m( ~2 E- p' Y// 强不等于/ N$ ]& h$ b: I2 C/ i. L: P
&gt; 1 !== '1'$ [: _5 t; e: p( k: d& s+ L+ z
true
# L4 g7 h! W2 x8 g
/ R1 X# l' l. \% Z- j/*
% S, f2 r8 n) ^" p2 aJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误& A) D& p" J5 K9 e5 E; N3 n0 l
*/
% n$ k' c' a& M% O# a: g</code></pre>
. e7 Z8 Y. M! H7 G8 F<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>3 i8 j) D: Z7 L
<p><code>&amp;&amp; || !</code></p>
0 c8 O0 D. i3 }- q/ m* d<pre><code class="language-javascript">&amp;&amp; 与
) ~9 E# V3 I1 `: u5 w7 Q|| or
, C% s3 ~! ]7 i' q& z! 非2 D+ \9 h2 m) C, |) F) j
</code></pre>5 b6 j  l7 ?- {% n3 J/ E% p- J
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
; A/ n  q0 D+ J# ?<p><code>= += -= *= /=</code></p>* C8 |3 q- h0 \- L7 s
<pre><code class="language-javascript">// 赋值" k& K( E9 e/ L* e7 r0 d
&gt; var x = 3
* C! p+ x, R' {- a' N// 加等于' c" e5 ~; r; Q
&gt; x += 2
& l3 B$ w6 s: N+ G" A5
* n7 a# x6 ]% Q. [  g8 A$ _, w5 N// 减等于
4 x/ ^8 c( ~3 R  m6 i2 e, e&gt; x -= 1. S1 l! H+ E3 w4 g; j# i
4/ \  p6 P6 q2 U
// 乘等于+ r; e, ]- ^6 F) u. a
&gt; x *= 2. T) S  Q+ A7 {0 p# v  i
8+ S& P+ H1 C; I2 s1 [* I" b- ^  X
// 除等于
" r2 R( q2 \9 W0 w&gt; x /= 28 B; z- J6 g7 }
4
* I2 |" G9 }1 {</code></pre>1 A- x2 L! N9 _9 N# u1 p' Y  l
<h3 id="25-流程控制">2.5 流程控制</h3>
0 S: e9 }4 W6 @1 r* c<h4 id="251-if">2.5.1 if</h4>
' R; @& e: W) O0 ?4 U<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
8 R8 m. c2 O9 i. A0 P
- u$ U% o2 Q" i; [/ `8 p, u1 \&gt; var x = 3
( l7 _7 Z/ \- q1 E- T' x& v9 J&gt; if (x &gt; 2){console.log("OK")}
5 q# q! X; A; ^9 S( s OK
! l8 r/ P+ r. [) S* y
" f4 }/ Y$ Q+ ]1 g8 _% x2, if(条件){条件成立执行代码} ! q' Z/ ^0 g$ C  _2 P$ f8 f
        else{条件不成立执行代码}
% T. {6 m% C" T: K8 [0 V8 T
- _9 N6 F. t: L&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
( A% ]0 L' p+ r) ?6 J9 K'NO'
; g& d5 l& t7 o" _# ]3 k6 Z& j. D! K# n8 H3 m' F
3, if(条件1){条件1成立执行代码} 3 n/ \- b& _/ T8 Z
        else if(条件2){条件2成立执行代码}6 {2 L/ O: B% h' m* w) S% h
    else{上面条件都不成立执行代码}
$ k" b+ l; p- \: X) T3 V% a* K* F/ H. K* `2 i
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
0 d5 e6 k1 g6 G  s* c* f, P Ha# z1 Z) {9 ^$ Z' f: L5 X& L
</code></pre>% t  m$ `* l: o; e+ d% P! h
<h4 id="252-switch">2.5.2 switch</h4>. S& S" u$ m' g
<pre><code class="language-javascript">var day = new Date().getDay();
7 a0 h. A) ~. l0 {7 b; lswitch (day) {
, L9 ?- Y3 b  U- s, l/ k  case 0:
8 Z) c% v  t% c# ~( D( M  console.log("Sunday");2 Y7 u& o8 U" l& u6 B' v
  break;
& b. M: L3 V/ R' w  case 1:
1 E9 J/ |$ d: M& E# [% Z$ t2 d2 g  console.log("Monday");
" D2 D& i+ ~! @# K- w$ E3 A8 b5 z$ T! k  break;
: _" ^% l5 B2 V5 X' ddefault:
9 n' Z- G! m9 C1 I  console.log("不在范围")
( n, d' a/ o  p0 t2 x}7 E0 z6 _- c9 W9 {5 _0 G" U7 J8 r. r4 [8 K
不在范围9 |' N- \5 a( [
</code></pre>" a* d7 I0 N) z0 H# ]5 i/ V
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>2 v8 ]# M4 I5 {  F# e8 F
<h4 id="253-for">2.5.3 for</h4>  w# c* @* q, t. z! T
<pre><code class="language-python">// for 循环
" T- H. D2 \" v; U/ o% T# _- I        for(起始值;循环条件;每次循环后执行的操作){. g  `7 ]- o! k8 @- b9 Y
        for循环体代码2 C# f" K: a8 `( |2 z; H) a- w
    }) K8 ~* ^; z; A3 X! ]

& _. I6 ?& D: \+ ]6 ofor (var i = 0; i&lt;10; i++){. m( B. s" ^" F) y8 b& G2 F
    console.log(i)
. Q- O* g% H! g! [( G/ }- e! d; e2 M}
: h1 O7 d7 i' O. v$ Z' n. }5 F+ @, \        0
. \* z" U$ g* S5 f' \" p, P" T        1* A, d8 F- {( [) m& X* N
        2; ]* G, h+ t* [$ q& q
        34 ]- D& L  B+ R6 F. N. o+ t& m' x
        4+ m3 C, }/ j# s0 q( a
        5. k; |- P) `9 W+ G
        6( s+ `2 q! w7 r/ k
        7
& W# e. T9 A- J( p        8
9 i+ e- W# N1 L: y3 s' r        9- T4 V9 P5 D* o9 K8 ^: ~: O4 t* Z
</code></pre>+ d9 B; ]2 x( M( p7 X* E
<h4 id="254-while">2.5.4 while</h4>
+ L0 _+ Z7 n* D1 \2 h<pre><code class="language-javascript">// while 循环
5 @7 Z4 |8 G/ p4 p- l        while(循环条件){
) P) X: W2 X' q2 z, a7 P3 g        循环体代码4 _" Y% N1 f- R+ S0 }- B' b2 H0 q, {
    }
3 q8 {( b$ M9 W  m- L5 k3 a
$ C, w7 F5 E, f( ?  }&gt; var i = 0
5 \* G6 o- O1 o7 c&gt; while(i&lt;10){
. m6 e3 s  b# \: K* q    console.log(i)! f" \  f# x/ ?9 y- J0 P- ?
    i++
: S7 s3 Q3 y7 K; l}( s( L) }% D0 P8 x; a! d
0
; r- z5 H, v6 b0 a5 m) C0 ] 1
5 \/ i* K$ ]" x/ ~ 2
/ @. ~2 {7 x+ R* n# d5 q 3( C/ x: ^0 P! J  Y* k4 K/ D( \
4: ?7 Y# `: R4 t0 |+ \# W  U
5
" @) Q4 ?$ a( V% f 6) ?4 y" p- m: o7 d- U
71 \  T8 I# I* Z6 E5 \
8
9 g) t3 E0 m  ~+ @ 9  A/ A% v5 b8 }' M
</code></pre>; t) Y) S' g, ]3 T9 |
<h4 id="255-break和continue">2.5.5 break和continue</h4>7 f% `) _7 E# v
<pre><code class="language-javascript">// break9 @& A+ H  s% t( k! |. h2 Z( I
for (var i = 0; i&lt;10; i++){
: ?0 I7 {6 d- W' |; N    if (i == 5){break}1 n+ s3 A4 ?" Z' L- q
    console.log(i)
- I2 Y7 K4 x2 I* \}. `# b6 n1 G5 m, Y: C
0
/ B2 g7 }6 |% }4 p% h; |; X 1: q% ^, n2 W9 m' S9 {
2
0 z! Z. h) i  a# j 3
, G1 ~" t- h. s/ t2 r 4
0 ~7 f' P( c' G// continue8 i/ q( h( o7 v. H5 R/ x
for (var i = 0; i&lt;10; i++){8 r0 H1 N& ?8 o7 x
    if (i == 5){continue}1 j5 I2 E3 i$ F: A* i
    console.log(i)
, N! o0 @3 U2 q! z! W) O}. K* l# ?6 M' ^2 z7 _
05 s# m$ Y1 }# S4 j8 O7 i
1: w) \! B6 i/ I3 G4 @% F
23 `* }) A# R  V8 m/ x  R$ n
3- s$ h, ^6 I. n7 T. U- D( m4 t8 }
4
7 h- \& P* A, `& P( g  _7 x* c 6
( Y1 a$ q+ G& R 7
' _* C; c8 W- t# m8 w 8
! X, S' F# g% j* f 98 M5 R' W* u" E2 L* H$ p

0 J. l0 x" l3 B/ A! ~, U# w% L; N</code></pre>
) N2 t& ]- k# \# `& T: o<h3 id="26-三元运算">2.6 三元运算</h3>' q$ }/ y# t  J. w
<pre><code class="language-javascript">&gt; a
3 w4 V% w9 e6 w) K/ g/ n3 c6
  V1 ~% d# o3 H&gt; b
" ]9 p7 L4 ~4 z0 X& X; }1 @- {- B3# C  J/ D7 U, e" N$ E. y: j

) D0 y( V2 L! q5 O) R//条件成立c为a的值,不成立c为b的值
' w) {8 i; ?2 _; ]&gt; var c = a &gt; b ? a : b
: S# B6 G. p5 p" H&gt; c
* w! v+ {2 c8 I8 A; g4 Z6, _4 {* @( W* N; B1 [

( `( t, x0 P/ u; F" j* v// 三元运算可以嵌套3 T. S8 }8 c: \1 D" ~$ p: R
</code></pre>) d8 g: D6 g- Z4 H
<h3 id="27-函数">2.7 函数</h3>; x( Y; v3 Z. n5 m) |4 d& r
<pre><code class="language-javascript">1. 普通函数/ T/ h) c/ j3 H( c! F! k
&gt; function foo1(){
6 ]: Z9 L; Q& e- R9 M5 E    console.log("Hi")0 h6 a- a3 S4 L. `" E9 O/ ~
}
5 X" k! @3 X# }
! a7 [+ o$ ^0 R&gt; foo1()
/ l4 n& S' Z# G# M+ O% u2 Q        Hi
  x! m  E+ R- c$ n& D; j2. 带参数函数
2 ^2 z! v$ {# q- k5 Z0 j. a) ]& M0 O&gt; function foo1(name){" ^  I) f7 o8 u# V0 F; G  l
console.log("Hi",name)' S% L) f$ l; F' g% l6 y. F  B/ K
}$ N' X+ `6 s- ?* C1 t" F

( H- |3 X& a5 `# T+ ?8 X+ K&gt; foo1("Hans")
- E; o' z* e* l, OHi Hans1 |1 g$ n  ~2 V+ n0 c: o: X7 j

! n7 M+ t9 j) R8 ?# G&gt; var name = "Hello"
' H8 ~. v+ i: X&gt; foo1(name)
4 |( R# F$ J; Q6 vHi Hello
9 h3 ~+ _9 O, E; ?2 J
/ e% q; w6 ^1 ]6 L2 y9 i3. 带返回值函数6 |7 b6 V9 M2 B- ]7 A5 h. X; M, g3 j4 R
&gt; function foo1(a,b){9 M* L) v3 p0 [. T4 d
        return a + b   
2 B1 A6 A' @/ T8 C. d0 `: Z# }}
& K$ B4 d. M3 y" ]&gt; foo1(1,2)5 B( K- `* F3 n  Z( l, j9 R
3  d2 ^/ v4 q$ O! a) a- f, N* }+ k
&gt; var a = foo1(10,20)  //接受函数返回值
- P, Y. @4 p  h0 c&gt; a% L9 R+ A3 ^# L5 x
30
% w3 Y$ A/ w) h
: K0 C! q( d; m" p) h4. 匿名函数0 T5 m6 K$ `  ~$ t6 e
&gt; var sum = function(a, b){' M8 T) N/ m2 |, F4 P) J$ S3 L
  return a + b;
+ i$ {" ~4 Z! P; d}- p* L# ]% F/ L, {
&gt; sum(1,2)
  P6 c/ Y" z5 R5 @8 F6 ^. i3
' E' O- b3 o+ T; T3 Z
7 K& A' a4 i6 a3 u: {" B// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
9 ^2 c& J) \# N1 ^0 ]9 ]&gt; (function(a, b){
* d# m7 o3 V' b9 a7 Y  return a + b* t, w9 A* j8 ^( S# z
})(10, 20)
0 V; N1 R' m- B30
, m. \; X- [# V8 ], Q2 @# M( X$ N# [: Z
5. 闭包函数
/ D, D# [4 A  \( f! k' O7 ?4 \$ V// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数8 \  M; M- H. J  A7 _
var city = "BJ"( @1 s5 a9 g$ Q7 E5 R  N
function f(){
7 ^' d% t0 |. K  ?7 E    var city = "SH"5 q% a% A8 |2 c; G% J" H
    function inner(){( H( l; |. x1 i
        console.log(city)
4 y2 g! g( D3 H+ U) M7 A3 H    }/ ?+ D% j5 s4 j
    return inner
! z8 t- i7 F" L" x. u; N9 [}0 Y- f1 a' ?$ P  V6 A% p6 B) o6 K: [
var ret = f()
$ e% M! c. Z, ~9 a4 Q9 C% lret()
- B2 x- D5 H- F7 Q0 }  p执行结果:
/ Z$ o/ P1 m" w- w6 ^4 _  c( h' \7 SSH  p. D5 P. v6 [- P8 b2 Y

" M$ A' @  S+ m" L' I6 c% C* d</code></pre>6 ^$ x9 m( U) _# T# k$ P9 t
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>3 Q9 Z  T3 h$ _% r* |0 z
<pre><code class="language-javascript">var f = v =&gt; v;5 K. Q. s0 Q4 T  P" Q
// 等同于/ X# d8 F; k( q) P
var f = function(v){
6 H) J0 ~' l% S% [  return v;
: ?4 H: ^0 \0 Y, x$ [4 g8 y! k}4 }! f9 l5 B- R1 z
</code></pre>
6 N: O# ~8 R! @/ N, |<p><code>arguments</code>参数 可以获取传入的所有数据</p>
, M7 K9 t, l' t" ~4 R<pre><code class="language-javascript">function foo1(a,b){
5 O- k) q) d0 w! R4 d% @. `    console.log(arguments.length)  //参数的个数
& P( b$ l  ^+ P' N5 V    console.log(arguments[0]) // 第一个参数的值: w& ~4 p( w! p% t4 }) z8 J' ^
        return a + b   
, }/ b, A. p6 P- ^5 r1 ]}& J7 p( v' A' s7 A4 F% G
foo1(10,20)0 j% S, ?* F7 T5 y
结果:
' T2 b: o8 c1 K! N" ` 2          //参数的个数
$ I' `' o- |& ?; S' c10        // 第一个参数的值
5 B& L% R% q" W$ C30        // 返回相加的结果
! E# H( M, H7 S. o</code></pre># E6 R7 R5 b$ E+ F. _" w
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
6 |9 X3 J) ?3 r( I1 [" k$ U<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>! V' H* d0 ^  F( w- H! B
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>" [4 A6 j8 b; Q0 J2 A5 _/ L
<h4 id="281-date对象">2.8.1 Date对象</h4>1 q2 K( g, }% H: v: r+ C' b
<pre><code class="language-javascript">&gt; var data_test = new Date()  }1 \! r  l$ k5 k
&gt; data_test# W  _2 U! I$ ~0 Q8 s7 r
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间); \/ ]5 D. }' a* t9 G4 k
&gt; data_test.toLocaleString()
! C% J1 G7 z2 I' s% q" Y# X! T* q/ G'2022/2/11 下午9:44:43'/ [! B5 \% V2 x' J; ^2 T+ j! O: j( |2 i# j
. A* `  k1 k( ]) u2 |" y- d
&gt; data_test.toLocaleDateString()
& o! N; b9 v/ N' k6 R( O/ ]'2022/2/11'
- ^, S4 {, ]) g/ o- V6 p( c0 N' o2 u. D/ F$ H
&gt; var data_test2  = new Date("2022/2/11 9:44:43")# b0 g, Q+ G# D- f  [% G
&gt; data_test2.toLocaleString()
( o' x; _* t: f; i'2022/2/11 上午9:44:43'9 z( {! Q+ v3 z! m: ?

8 ^& R3 F$ Q3 f0 z7 i// 获取当前几号' l3 L7 Q) N# `3 R$ w3 v; i/ Y
&gt; data_test.getDate()
% w* H. b& j5 r8 {7 F119 ]# ^) m9 X: T. V# P; I7 c4 a
// 获取星期几,数字表示
* B' r6 N( K) \3 [0 _# Q&gt; data_test.getDay()  
/ N  {2 {/ S4 g4 X. U% [5' p0 d7 h% M0 O' ?& d7 k
// 获取月份(0-11)
7 D- k: g/ S1 W* \&gt; data_test.getMonth()
/ Z. f1 F0 d0 \) H" ^4 T7 i+ k1& ~* ?+ o& f7 n' X% F* O
// 获取完整年份
% W8 M6 S! O4 O( e1 S( L, B4 c2 _$ b&gt; data_test.getFullYear()  q/ T1 Q8 Z' M
2022
5 N8 R, c0 ]; p1 I, r1 O4 x! J// 获取时. D8 @+ K% q; i* o% ?- d- U' j
&gt; data_test.getHours(). n6 k- K; y, K7 Z9 ?& A9 ?
211 o! W( B# m  X& t& D" z* ~3 f2 ?
// 获取分  r& @+ z2 T& L- I$ F0 Z+ A9 }  c
&gt; data_test.getMinutes()
& Z. L, j! a) m  `0 O9 L1 Y; i44
9 O8 k0 {1 e8 l+ j9 z// 获取秒2 m9 B, X7 @0 [2 y9 h( B
&gt; data_test.getSeconds()9 H9 T0 X; ]+ E$ a  v  x  f/ M
43
" C/ f4 a$ i, f6 {# ]// 获取毫秒- P9 T0 M+ n/ P2 r3 B6 R7 f
&gt; data_test.getMilliseconds()" a3 F3 w3 ~1 T7 f$ S
290
6 [' s. G3 j- K4 C// 获取时间戳2 N  w! W( D( i+ \2 O+ ]( }/ D" K
&gt; data_test.getTime()2 F6 p  D6 U) {- [+ a8 `
1644587083290) f/ V! e" v! R, i/ ^
</code></pre>
7 X6 u) x6 ~1 w1 v: e2 Z<h4 id="282-json对象">2.8.2 Json对象</h4>
0 v- g1 n6 r  W: K- w<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串2 _" `1 W% [9 q( ^& p
JSON.parse()  // 反序列化,把JSON字符串转换成对象
8 ~( h% `& X8 ]5 n$ p6 c
/ K6 x" q: a; Y// 序列化- i9 Y) @' `0 ~* n/ y4 N
&gt; var jstojson = JSON.stringify(person)
$ f2 X. f9 \  q  d( F* r3 G# r&gt; jstojson  - z0 u' I" B" \1 _/ N5 O
'{"Name":"Hans","Age":18}', r0 R/ o) b; l  {; }
6 _% z6 i, T# G& B
// 反序列化
% d3 E9 L8 M$ H+ Y3 H&gt; var x = JSON.parse(jstojson)
$ `+ i5 X0 X% q&gt; x
% g* Q- x# m: ]! D& @# Z{Name: 'Hans', Age: 18}7 I" |8 t3 l( g% C1 b
&gt; x.Age/ X+ Y  H' |6 g
181 O, c1 ?1 U" d/ T7 r2 f
</code></pre>
  H. V$ }' {( i/ k& `( ^8 e<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>! q1 }4 t6 [$ L. U# D7 e5 t5 ^
<p>正则</p>
% F6 J' a, @0 P8 p/ C4 Y<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");9 F# G2 k9 B" R5 \, p7 W, T8 V
&gt; reg1
+ G+ B( z$ z/ K" n3 a2 T5 L/^[a-zA-Z][a-zA-Z0-9]{4,7}/8 B2 X' @+ R9 b* S
&gt; reg1.test("Hans666")
, \" L: `5 T- l' Etrue
- f2 L4 w+ O2 w7 B0 _& D
  `( R, K0 A8 s&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/+ T  ]& M. A( R2 [' t9 z
&gt; reg2$ G& Z( U* E& p' b8 w# ?
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
( g! V, U& |3 z, x8 r% m/ u% y, j5 w&gt; reg2.test('Hasdfa')
9 U8 h; }* Z2 C% Ptrue& }( F& S$ k) ~, d
% x. B, E, F, ?+ O
全局匹配:1 h. ^4 X1 o& b9 s0 ~, j: _4 |
&gt; name
3 t- T( S, x% L0 F* q3 Z'Hello'
! g7 k* u! A; [! H8 U5 Q5 `0 ?- Y3 j- K/ A&gt; name.match(/l/)( t0 m5 C. P! b: @% r8 @
['l', index: 2, input: 'Hello', groups: undefined]( K3 E5 i# u3 p0 |- a) A

7 c6 j9 U* E; o6 D" t&gt; name.match(/l/g)1 P# A# E: V8 _7 r
(2)&nbsp;['l', 'l']
/ R& L! _; l0 h' n% W  S// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配5 Z( |) d% G% r5 V& ]
0 ], N) z, }, k% K8 ?$ H& q
全局匹配注意事项:
# T9 N- R5 }# D5 A&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
7 ^3 s6 j' `0 c3 @, }3 Z&gt; reg2.test('Hasdfa')" l. P) Q1 `; E& h; i) R. g
true# U3 O- x! e) [" s
&gt;reg2.lastIndex;1 g  f- W2 m' G! H
6
) S" B# Y- m4 h* W&gt; reg2.test('Hasdfa')9 F) d3 U* m: }+ e
false
. X: t  U1 _$ o&gt; reg2.lastIndex;
$ N9 _4 [" g( l# b# D' I# L06 t1 `+ c2 g" W  ^* v2 C3 N
&gt; reg2.test('Hasdfa')$ R& A" e/ v- q) ?! a) h2 s
true
! m4 f% n) N% K+ w' e&gt; reg2.lastIndex;
! w4 s- a% f) O" |6+ m( W( o8 r! O# N5 {9 `( ^
&gt; reg2.test('Hasdfa')0 t* {& \. p4 n1 v+ Z% e0 c
false' m. @6 y1 q" e7 D  P+ y# L  b1 ]
&gt; reg2.lastIndex;( k  ^+ B" C& h( x; C) T
0
$ _, P4 m: b  b1 F// 全局匹配会有一个lastindex属性" ^  w1 ~8 F6 v/ }
&gt; reg2.test()
3 \, y; ?. k, Z0 U' a- o- d/ jfalse& d$ Y' v0 D/ n0 ?( E0 Y
&gt; reg2.test()
4 o% J9 M4 i5 U& f/ \2 u3 ftrue4 O8 e; O1 @3 o6 i2 S  K
// 校验时不传参数默认传的是undefined
6 v0 D; |) w7 k4 y6 O</code></pre>
6 n% ~5 n/ Z; g1 c- K<h4 id="284-自定义对象">2.8.4 自定义对象</h4># ]; t. h( @& q0 }. z. p
<p>就相当于是<code>python</code>中的字典</p>5 j& f+ z$ K% Y3 {. h- a  F
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
1 H" o. k3 A# w* b&gt; person7 ~/ |/ i( f1 v4 o) O) y' U) x
{Name: 'Hans', Age: 18}
# N) x* c( }, ?; U9 G/ B0 @: f&gt; person.Name  e+ c. F6 W) P
'Hans'
  H& Z( k8 G6 Z6 X5 K% F&gt; person["Name"]
5 O) T+ K3 D5 u9 n" @'Hans'
. z, |' s+ a# k, L7 h0 \( p5 w) j( N* W+ t
// 也可以使用new Object创建: I8 y( w7 h8 e( C
&gt; var person2 = new Object()& m1 u! `- p9 |2 O
&gt; person2.name = "Hello"6 u( j9 V" q! H& c! x% V, Q
'Hello'
% j7 k* h$ }2 I9 L8 ?&gt; person2.age = 203 W( m0 N- v  i
20- h2 ]: i% E4 {9 O- }3 e# x+ K3 J
</code></pre>8 G/ c' D# K# p5 [0 y) u* y" P
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>, }7 D# \0 N6 c) r: |: C  T
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
6 K/ t) ]+ D  ~$ R0 F<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>7 |; f) `' r0 U/ z5 g
<h3 id="31-window-对象">3.1 window 对象</h3>8 f, t) c3 s3 g$ }
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>8 c* V1 A0 w- n: T" _1 q- @  U
<pre><code class="language-python">//览器窗口的内部高度
( E  d: {0 t- r0 W2 Bwindow.innerHeight . e+ }0 s9 V# R9 t% T
706' F6 N- T- D1 F, _# a
//浏览器窗口的内部宽度' z0 g2 j. z( X0 E
window.innerWidth5 |. x6 n6 t2 m8 k
1522
8 q2 h" L( k& c; \. f// 打开新窗口
, w5 E, A( Q# c# A0 V) owindow.open('https://www.baidu.com')
' j, G; w0 ^# h- u! RWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
! v6 a: O. S5 V6 X// 关闭当前窗口& `. B9 G& {! C% x, ]
window.close() 5 A# _. L0 {$ x
//  后退一页! H3 d" A2 P& e. y# @0 s6 r, D
window.history.back(). x9 I; E' k" F, Z/ o9 }
// 前进一页
* _2 q* x& r  {+ F) k  x  G( kwindow.history.forward()
) M! Y* ^. R9 `, i6 V7 [8 D( C, @4 S//Web浏览器全称) k8 i$ L  J" \4 D1 L0 b. t
window.navigator.appName( K  k* p8 ^6 _; H& Z0 X& O
'Netscape'
! {% k) w& b! j: j5 {  d( \  ]// Web浏览器厂商和版本的详细字符串+ Z8 x( @. Q1 z! |0 }; z/ I
window.navigator.appVersion! E0 v1 j" n8 H' x
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ x2 W! w3 T' l3 H( A  |
// 客户端绝大部分信息: K$ P( n  ?0 @  I7 k9 k
window.navigator.userAgent+ D' @/ M( S7 K
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
! n6 ^4 }9 I% Z0 w# ]; f  U4 d9 f6 V// 浏览器运行所在的操作系统; S* c% i7 x% c. K0 Y1 K/ ~+ I$ F
window.navigator.platform8 V& i) A- u1 \$ `) Y; p3 C$ Q, @
'Win32'+ {9 C" k; h% v

6 k/ a& A6 y* h3 ~' u//  获取URL
0 d" s5 f; z1 g$ N' xwindow.location.href8 D8 {2 S+ G  A1 t. P  Y0 a# w
// 跳转到指定页面
' f. |8 E) \5 X, h# I6 wwindow.location.href='https://www.baidu.com'
0 [+ k, ]& ^& m% ]9 V7 O2 |// 重新加载页面
. G1 g! g' o/ i9 S- E- W& L7 C0 Twindow.location.reload()
# |9 g- Q+ X/ s  q</code></pre>, t  _  G+ T5 D
<h3 id="32-弹出框">3.2 弹出框</h3>; \0 c( Y* J  E. }% a5 R6 b; L
<p>三种消息框:警告框、确认框、提示框。</p>
1 B& b3 ?8 J: {. b<h4 id="321-警告框">3.2.1 警告框</h4>! E  F' D1 C3 A8 M
<pre><code class="language-javascript">alert("Hello")
, H8 Y4 M, c( M</code></pre>
4 R1 c* t7 Q" h7 V<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
& `- J2 O* D3 _9 Q6 b<h4 id="322-确认框">3.2.2 确认框</h4>
. @" v3 }! i1 N, @/ C<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>  [# ~/ P5 [- |/ L  `* \) n5 V
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
2 s! j" D. @  u8 b1 htrue9 P" N5 g% l( a  N" [: L7 H7 f
&gt; confirm("你确定吗?")  // 点取消返回false
5 R2 T% K/ k6 y5 S& N4 y3 x6 Cfalse
( w( s& A9 {: S" Z) r# T</code></pre>
" U$ Q2 c. k0 K8 P1 i4 ]3 X<h4 id="323-提示框">3.2.3 提示框</h4>
2 ~! @6 K. o" o' x/ f5 Q<p><code>prompt("请输入","提示")</code></p>- d- O8 K& C: `0 ], t! Y
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>" P  N! [9 E* U. _  v9 t9 c# P
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>+ p% i+ L. b, \
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
4 y; [1 N$ n5 V0 N9 J& P<h3 id="33-计时相关">3.3 计时相关</h3>
  K4 @0 Z1 z! H# r0 y; J. F9 x<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>+ h" B. ^  u! b, S' p1 t) M
<pre><code class="language-javascript">// 等于3秒钟弹窗# o) O8 a  G5 j, ]! @
setTimeout(function(){alert("Hello")}, 3000)
6 K* C% Y9 b. L$ h0 e+ w' N7 `' [/ j; H
var t = setTimeout(function(){alert("Hello")}, 3000)
8 e1 x3 G% U: |& L5 ^. f( e9 I6 U9 W! E
// 取消setTimeout设置" B! m5 J1 g) Q1 \1 ^
clearTimeout(t)
  i. @) l- J9 |! E</code></pre>: B) e( M1 [% c/ D$ V
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>- S& J7 Q. e, w$ g$ n
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
5 z+ J6 j8 _5 g5 T<pre><code class="language-javascript">每三秒弹出 "hello" :
' T6 ~9 r, D4 q( \6 d5 DsetInterval(function(){alert("Hello")},3000);
- u) x( S, [* G1 Y2 X</code></pre>% J+ K+ g# Z' B$ o  T) X
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
# k2 w0 q1 _" x; b( \0 I% d<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);$ ]4 m' b4 l: P3 w& k
//取消:
9 J  {) t. C3 [( q" LclearInterval(t)8 o8 c: E: j3 |/ E) X
</code></pre>
$ A4 L' S+ a1 L) a1 O: H3 @$ r7 Y  B% e- h2 y& L( D
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-30 15:42 , Processed in 0.086209 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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