飞雪团队

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

前端之JavaScript

[复制链接]

7982

主题

8070

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26276
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
$ J+ g  @# C% h& T! T2 _! s
<h1 id="前端之javascript">前端之JavaScript</h1>
* |1 T& E0 ]( x6 j4 k( K- H8 Y<p></p><p></p>0 `  v6 ]9 k7 p% M
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>  W1 x5 v5 [9 S6 M1 Q
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>1 m) u: r" G+ x+ Y" d
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
3 Z# t- O9 _3 i0 c它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
" w8 i8 G% X0 J& |% ^3 h它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
# P- N, k) m! x) g) u$ G<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
- C: t) s) W. Y. i9 P7 f<h3 id="21-注释">2.1 注释</h3>
9 v3 z# X2 P+ E. t+ y<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>. f: z4 x" y2 ]/ ]
<pre><code class="language-javascript">// 这是单行注释' Y- n: h( x; w. L' m8 \- b

0 R4 ]- b: K  ]2 M1 d/*: B: d' C3 H( C5 X* b; V
这是多行注释的第一行,; L! P- [# q2 q7 U2 P) `
这是第二行。
0 z) w9 p; u" e5 @*/1 b5 a3 t2 N3 q0 B/ I& o( [( I
</code></pre>
  L& Z) P: @# z+ s% v  M<h3 id="22-变量和常量">2.2 变量和常量</h3>
7 Q: b% A& X8 ~: ]% n6 P4 N<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
3 H+ ]/ ]8 H2 A' e<ul>
  U8 i" k- ^6 |' v<li>变量必须以字母开头</li>
; ]- Q7 L5 K- U1 ^$ w0 ~<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
! H. l( T0 S! L; p<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
7 h  @" A2 P9 M8 I/ q</ul>4 ^# q: b5 B7 Q, n
<p><code>var</code>定义的都为全局变量</p>+ h/ E, P- O& s# j5 t: M
<p><code>let</code>可以声明局部变量</p>
" M. t- u8 s6 i# a<p><strong>声明变量:</strong></p>
4 N1 K8 I7 Z1 d/ ^. t" b<pre><code class="language-javascript">// 定义单个变量: d7 n3 a' k8 m3 T7 Q
&gt; var name
. G5 u- z' A9 f2 ?# {&gt; name = 'Hans'
/ Y( _# Q1 l  {& q" y: E//定义并赋值5 x* L% H" P8 {( d' @# a
&gt; var name = 'Hans'
4 Q6 Q$ r, Q/ A. z9 j0 I&gt; name
( b' L  F$ V8 f+ G* N* U'Hans'
" L% {5 J8 @" K, S$ J5 E7 P% y/ R: H1 }) |9 [1 W
// 定义多个变量
8 `, o1 w" {* Y  M0 c& u% j' @8 W&gt; var name = "Hans", age = 180 U* k3 m( Y: l3 W
&gt; name
( r1 T! A) I9 m0 _6 G'Hans'  G5 Q! N; k+ G' N
&gt; age
& a9 H4 y: v+ G9 j- s18- y; R; c( p: e; N/ D! E

, Q1 k# o  r; M//多行使用反引号`` 类型python中的三引号2 `$ A  ~2 u; k  {
&gt; var text = `A young idler,! j2 g: G; `2 d4 `6 M, V' G
an old beggar`1 |: i( S: B. m" X5 o7 ~
&gt; text7 R- Q) N5 Q! [& Q
'A young idler,\nan old beggar'
; S5 ]1 f! {: s+ O+ c7 Y$ o7 N</code></pre>$ {# w* q% Z: P( f* r3 c
<p><strong>声明常量:</strong></p>  }; w, ?. c7 _8 @4 P' V7 l1 J
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>7 \9 R5 C9 @+ \7 Q
<pre><code class="language-javascript">&gt; const pi = 3.14
) ^+ J& x! R1 K4 L( R8 |&gt; pi
6 s! u& }) P0 q. o5 U8 I3.14; V# X' B* Y1 A
&gt;  pi = 3.01
9 r6 J- ~. ^. }4 J  qUncaught TypeError: Assignment to constant variable.
) {4 D* ]8 u$ n$ a2 q7 ~    at &lt;anonymous&gt;:1:49 t% W1 B' w7 E- [- z
1 K  D8 `! @/ e$ u2 z$ h* C
</code></pre>/ U% @9 Q7 d# l( E- v8 u: m) P
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>/ \4 v" |' G  [( j  r- {6 b4 T, u
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>8 B9 ]; I) g1 I4 i
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>, [# q5 Z, j. T1 h
<h4 id="231-number类型">2.3.1 Number类型</h4>8 {, k7 O* N" b, J! I) _
<pre><code class="language-javascript">&gt; var a = 5
5 j  _! j! _% T&gt; typeof a   //查看变量的类型  ! i" l, ?( s0 ^2 i8 Y( k6 v
number+ P% J6 A3 m( u: l
# k+ z4 k3 R5 \% g8 v' Z* X* Z
&gt; var b = 1.39 J7 W4 m! A2 t- W8 x
&gt; typeof b
3 m/ j$ s) `% r, V) Enumber  W: H, w2 i$ u/ t+ p7 |* n1 p& Y7 D

* H2 ?% J- A# c8 p) S8 J// 不管整型还是浮点型打开出来的结果都是number类型
% k/ z' ~' h0 k6 K- O. e0 M4 i3 Q' @* P8 |" `" E3 E
/*
- |4 O- u4 k! ]; L# v& \( SNaN:Not A Number0 k% w. Q3 h+ q2 _" p
NaN属于数值类型 表示的意思是 不是一个数字
% `6 v5 J7 C3 N3 v' g1 I# r*/: v0 U, s0 h4 z( Q  I0 F
; ~, J1 a: c# h
parseInt('2345')  // 转整型
4 @$ X& {. O" [  L5 R* X4 N23456 U% h  o4 W5 T# H" l8 x
parseInt('2345.5')
7 R, g% z( q2 n. }6 R2345
5 D5 ?. [9 ]6 V2 Z2 NparseFloat('2345.5') // 转浮点型
( e5 f& Y' h: {# }% F2345.5" d; L  j# I7 S7 {6 _3 s1 D
parseFloat('ABC')! l( i4 F; j+ E; v; c  \
NaN
) {  \( F) k& H( CparseInt('abc')( a# S, D; l1 o. L, S
NaN
& T7 L6 H$ u& r- q* ?' R4 o</code></pre>0 o# a7 y3 c$ C0 F
<h4 id="232-string类型">2.3.2 String类型</h4>* {8 G0 X, W( [9 J; B
<pre><code class="language-javascript">&gt; var name = 'Hans'0 }5 N3 F8 ~- U4 R* w3 k* k8 |4 Y
&gt; typeof name
, B0 p- W( {7 X& J$ U'string'" m9 R1 a/ V+ D2 \9 x7 L. |4 ?' ?
+ W% s' w3 j2 f4 ]- f8 h% `& B
//常用方法
1 M8 _, l" W1 e% j0 F" h9 ]( d// 变量值长度( v  o( S8 ?" @( t1 S; s
&gt; name.length4 g" _+ U8 S  [
4  U1 G2 N4 t* @7 @# d' a
// trim() 移除空白' z  p2 ~* n/ L
&gt; var a = '    ABC    '
: N3 m9 b, A* w# ^&gt; a
% l9 U3 {/ U! ]) K$ R'    ABC    '
  l' I" l! e1 \9 [1 P! M&gt; a.trim()
3 t6 I1 J. s  h'ABC'
0 d& R1 G( I9 Q( o& r9 G! R3 n2 l3 W//移除左边的空白
) Z1 g8 R% j9 C5 |* C( F, r&gt; a.trimLeft()
/ m) L, w( {1 r$ D" v8 W'ABC    '
2 L2 V9 X" b8 i//移除右边的空白( }" Q, J( a4 a6 U4 {
&gt; a.trimRight()' N! q2 F  J! w) R- R# }
'    ABC') z% i, y& V0 s7 q+ }0 n; L
) j, {0 G3 A* V( Y9 L3 f
//返回第n个字符,从0开始' c' F. ?) _. B: m
&gt; name
2 W! F! f3 }5 g! q'Hans'
) {8 q8 i' q& x1 M5 k; {+ @. h( \&gt; name.charAt(3)) R9 x) b% O0 W
's'
/ j% @0 P2 A0 d4 n9 C&gt; name.charAt()
, @' A! ]4 p6 H6 z9 o'H'& `. c6 u0 o7 ^# T  i" A8 [
&gt; name.charAt(1)
9 p; g) u/ C( t% ?; n& z'a'7 \+ g' }, j, ?( K3 K
* q% w6 y7 r4 r
// 在javascript中推荐使用加号(+)拼接3 g9 I: \2 B# \2 X$ Y
&gt; name
7 j2 s( V: R% _" o# r% V! l( U'Hans') p8 y- }, I2 t: ]+ A6 _8 J
&gt; a4 v% l! E& f/ @
'    ABC    '$ \1 b' v9 x* A" |* [: }' I
&gt; name + a
6 s$ a) n, [8 L'Hans    ABC    '  U- B! f% c+ J) _( n$ {
// 使用concat拼接0 i' U/ O, ^! _% V# m
&gt; name.concat(a)( [" S0 M$ J! W
'Hans    ABC    '
5 B& N6 R) `+ Y" x- U# H' _$ Y
) {3 x! k( g6 T. q6 Q' l$ }! r//indexOf(substring, start)子序列位置
& y- P% r& G2 W% I- K/ }) W; k# m; N" f. D# A+ W
&gt; text' J; x) ?" l, P) y1 @" ]) ^% |
'A young idler,\nan old beggar'
  [" ?: b, [# w0 {&gt; text.indexOf('young',0)+ j; p$ c) N* G& R( |6 [" `
2
/ V1 k/ I4 a& a: n( e' o1 a% j: j0 \2 u3 z
//.substring(from, to)        根据索引获取子序列
) Y) j; A/ R6 S1 B* k: b&gt; text.substring(0,)
; |+ u. d% O. S9 N2 ^+ m" `'A young idler,\nan old beggar'. b; v! K7 j  _# `) S8 B
&gt; text.substring(0,10)9 ^: S3 w5 u) h* S& E2 Q# q: Y
'A young id'/ K4 K* I4 `  c5 v+ T
" C+ T4 v$ ~, j, w& o( X5 g
// .slice(start, end)        切片, 从0开始顾头不顾尾
7 I, ^9 G$ w/ f% E&gt; name.slice(0,3)
4 @  [0 |7 |0 L% k. E6 @, ?$ D# L'Han'
7 T. X( J& D6 j% g% S
3 Q7 e, y% H! I// 转小写3 Y1 n) y( Z9 p( K$ X
&gt; name
& S! Q. d+ _; K: H9 Y! H8 \'Hans'( b3 |. c- o0 {, n- T  ]9 j
&gt; name.toLowerCase()
  }0 V4 W. I% @! U'hans'
+ |  I( ^2 T( B/ r& N, _- R// 转大写
3 U, o' A" ]0 _7 p8 P" V&gt; name.toUpperCase()
9 J9 P, k+ Y( w0 h  ], g* a+ A# L'HANS'
% C3 h$ I* i# G8 r% d( a
. X) [& q% z1 H" c! n) h% v// 分隔
# I0 @8 X+ t! i$ X& L&gt; name
+ _& V. |9 u! `. O'Hans'
4 c; Z# \. o7 p. H5 c; W&gt; name.split('a')
% [3 j# X8 J4 X2 Y(2)&nbsp;['H', 'ns']
& P/ L+ u( p& X5 x2 V$ u, Y* _</code></pre>7 |) S; X9 h$ |
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>. ?) o& v; R$ g  M" K* B: d
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>8 k5 `( x8 W6 W, k" E0 _
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>% B* _+ v% ?8 k. B
<p><strong>null和undefined</strong></p>/ R% [8 {# U3 d: W( {& Y. R1 J
<ul>& D- @$ n7 f7 c1 _, G* M$ b" ~
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
4 b9 h1 @: ^9 [<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>5 a" w- ^$ m2 `: \" U( J. @5 I
</ul>
2 H  p: q9 b( J  {/ F<h4 id="234-array数组">2.3.4 Array数组</h4>
! [5 _6 i& p" u6 S' L) V6 y! h<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>; t- G# @$ }0 a, A* c3 s* C
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
* \9 }3 [& Y6 F9 u6 S6 R2 N&gt; array1
) I- W( V; E7 ?  ]5 D2 B, E2 f(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# o, k" [8 C  g" T( V1 J: V
&gt; console.log(array1[2])  //console.log打印类似python中的print. ^3 u5 h9 U) r+ }/ W/ I
3
( M  d+ M1 ]" r// length元素个数6 m9 z8 q- p( X/ i8 C) |
&gt; array1.length
4 S# U6 z$ e4 Y; K  H: f6' i  ~1 c" m. U9 [: j
// 在尾部增加元素,类型append
. A# y+ d7 n7 O0 a  {&gt; array1.push('D')
$ V( p1 `' B+ r' c7
6 a* s' |/ x& q&gt; array1
! k9 X% F* y% Y$ a: G& w! j(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
6 Y* n& z0 h4 N( L6 e5 ^& b// 在头部增加元素
' Q. T) L  ^3 W&gt; array1.unshift(0)! Q! T& N9 f6 |2 y6 R
8
/ D, w* ]& J+ l9 ~9 s' q&gt; array1/ H% m5 v% V; D3 F0 `, f
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']6 V+ W1 H% O" d
, R5 @  C) z3 N- P# J
//取最后一个元素4 j, a7 H$ S' \2 R( d  I  v: e4 {
&gt; array1.pop()
" b0 m8 I% H* s8 I% \$ O4 w'D'
1 U2 q, A% @4 a* G&gt; array1
& @0 K1 ~0 x) b0 C- L1 W7 S9 E' W* h(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
0 X/ [; ?/ }* L; ?9 L: g. n//取头部元素
% k/ M$ ~/ h# x7 `8 L3 O, C&gt; array1.shift()
# e/ E! T9 B. ^2 R1 \0
. q' s7 w) R; {/ S' ~9 e1 c&gt; array1
% f4 g8 L( `& c(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
- b( ]2 `: Q: T/ {+ z5 I6 Q& b( F9 S
//切片, 从0开始顾头不顾尾
2 w& |1 {- k5 O# }- Z9 z" @8 J6 O) V' o&gt; array1.slice(3,6)1 n7 s# K) M; N+ x; o+ S
(3)&nbsp;['a', 'b', 'c']  [& p" H. q- d' t1 k; f9 T2 d
// 反转& \6 ?1 a8 g7 |( K, f, P
&gt; array1.reverse()" X8 f( l/ h- s
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
) t9 H" M8 {3 Q% O0 J// 将数组元素连接成字符串
1 d' ]% [; W% y3 R( G&gt; array1.join() // 什么不都写默认使用逗号分隔% y# F* u: @* ~2 H8 z
'c,b,a,3,2,1'
+ x# H2 l& K+ D% ~7 o3 K9 R5 t! s&gt; array1.join('')! j  D( C, E2 L$ X  d( W" y1 F: `
'cba321'% x2 ~) ~1 b. f/ O, b
&gt; array1.join('|')& P  N' @' L) j( u8 c1 ]/ n, W+ d
'c|b|a|3|2|1'
( @4 b7 S) T. Z7 d; ~; m/ [- M
. a7 m; t% D7 }// 连接数组) m" K4 k# `. {4 |4 i! j7 r
&gt; var array2 = ['A','B','C']
7 b2 z! v+ B2 y. ^& `+ U- o6 r' n&gt; array1.concat(array2)
9 L+ {/ n- t# G5 f% @(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']* F+ f+ ?" K5 E, l( q2 D4 e
, c; I0 H: b/ R: a2 p
// 排序
0 Q- F+ L' O/ J/ q9 L1 P&gt; array1.sort()
! |7 m& z7 |% ?  M5 }3 o& g(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 _$ y- w9 N/ R. |2 Y/ x

8 R2 c& D6 S' q* B// 删除元素,并可以向数据组中添加新元素(可选)+ s2 Z, ~6 k( O2 T/ _7 D3 g
&gt; array1.splice(3,3)  // 删除元素/ I  e( S9 ~# H: T% U6 p
(3)&nbsp;['a', 'b', 'c']
$ |9 l6 s1 m9 `- R& ~&gt; array1
  p' i# I7 F  N9 I1 |  t; w( b(3)&nbsp;[1, 2, 3]9 x2 n5 B$ h( x$ g1 j) V
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素; ]0 ?# C; g% Z" U; }
[]
! j  c- t( G! M6 b! v6 i&gt; array1
8 j0 o+ ]; U* ]5 T(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
, w, p5 _( @" v) D3 z  D9 i3 K- H$ m# Q
/*& @0 H4 E- |2 s8 P8 D
splice(index,howmany,item1,.....,itemX)( J& i/ W, ]. y, Z% P  g
index:必需,必须是数字。规定从何处添加/删除元素。
& c, n# W7 I3 Qhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
& l& {$ I6 m  l" T  n' e" Pitem1, ..., itemX        可选。要添加到数组的新元素
- Q3 C1 s- P7 m3 w; q& a& n9 p* e*/4 y! G4 K$ o3 ?9 A

  y4 C! Y; J, Q/ i1 Z' j- b0 e// forEach()        将数组的每个元素传递给回调函数
% a! r! @8 T' I& W( O&gt; array1.forEach(function test(n){console.log(n)})  ]  z& A4 e( Y( U) b+ q
1
  b- ]3 h) v; A' e2 l% F 2$ F3 ^) ]* t; l
3. V) h& l( t. F+ E- \8 t
A6 A. p* N9 \7 |4 W0 G
B
$ u4 D$ j0 ]3 L) s/ w3 q- g C# t" D4 a% }% k/ n) \
// 返回一个数组元素调用函数处理后的值的新数组
" A0 o4 P( u3 ~4 Z% T- v8 m&gt; array1.map(function(value){return value +1}), R- @* u! V# \2 L
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
, z. J8 r" i' t% ]</code></pre>2 I& Z+ Q& M9 ~* p: y6 }9 P9 U' a" V
<h3 id="24-运算符">2.4 运算符</h3>' L# ?  d8 u8 k( Z
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>) C/ o! [1 h+ M) M: c& B) T
<p><code>+ - * / % ++ --</code></p>
6 \' z, b4 A) {. C<pre><code class="language-javascript">&gt; var a = 67 E7 Y* J6 u$ q8 l( I$ o
&gt; var b = 3
" s1 L: z; d! T  m( ~2 n( ?) [1 j8 @// 加
  \! {6 b  C' H3 j" j9 o$ y&gt; a + b. m- b' [/ t# J
9- h4 G. _2 Z6 k7 g, A
// 减2 i  h7 j9 J$ d
&gt; a - b
1 S: @9 d, [, X1 N. }+ i3
9 R% r! t. Y- Q) m% f( \& d- f# h// 乘( @( p( v: G: w$ v/ {( b
&gt; a * b1 M" m: x# P2 |7 r8 b4 c- R; T
18! ^: E! `/ }$ j2 P0 w  Z
// 除
; s: C: h. f( J( u3 K&gt; a / b
# R( _3 I: C3 i% z2
, {/ n' h( U8 t0 R% e// 取模(取余)4 @, O' Q7 f4 r
&gt; a % b
% r. g4 Q7 B, d1 l0
1 X( \+ c# _- L9 B9 ]7 A) p" W8 ~// 自增1(先赋值再增1)
$ l) `5 F/ N5 F4 w  @+ [( g0 I&gt; a++! P5 t, E9 d; n  z2 J  c9 a
6( U+ b; S$ L5 \
&gt; a- H. q0 b% L% v3 R$ H, t1 j
7+ ?4 ^; V0 ^) |& L# W7 V) `
// 自减1(先赋值再减1)2 N' [9 J0 A1 @8 s( _; B
&gt; a--' l. W6 e9 G* c  ?8 u5 M" s2 f
7
; d  _5 M: F% y1 y1 k&gt; a8 i9 ~4 y2 C  y5 @
6
. J/ K' r7 v, h) S// 自增1(先增1再赋值)
0 i, J) \5 R  H  [" }&gt; ++a
& E5 }) _- g' l* V# z3 u( ^* g7
: e; z( ~; v( ]: x// 自减1(先减1再赋值)5 {" C" S, O8 e3 ]5 `( B& P
&gt; --a
/ h& M* j- g; v9 z" t5 N  |6
' S: d/ c' s3 H6 d8 t&gt; a
! l. r% [" h: k5 B9 h; T6
: z% V5 u- @0 ?8 Y& a- J7 v
: @% Y4 k- h& y. F% n# e! i% F//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
" i4 y/ Z% Y4 @# G+ L; @</code></pre>2 c/ x( S1 L# D8 e# a, j
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
, K7 q; l' U$ e<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
" R9 l, Z" {. \3 h2 f. ^+ r<pre><code class="language-javascript">// 大于. W3 J" Y" ?4 C+ V4 O/ }7 M
&gt; a &gt; b+ z3 P9 V1 h$ j- w/ Z: S
true
, p2 o  m) ?9 [! }// 大于等于/ S3 Z* V5 B, F! H
&gt; a &gt;= b
9 f9 h/ @( L& B4 N( qtrue
7 A9 k, Z  [  ?: Y6 I// 小于
: Z: d, l0 ^9 p0 g2 j&gt; a &lt; b% g5 P* A- r3 Y! @' P
false2 d2 s" [# Z. X! L. _9 `8 E
// 小于等于1 r+ I' c1 w2 w' I+ ]7 Q2 o
&gt; a &lt;= b( \5 k3 @: @$ g- d- `' _
false
; ?6 C9 f# D) K% [// 弱不等于3 B! |# M# u" u( n& i. k
&gt; a != b- [* @% G" j4 y# c; U1 [* a$ Z
true
- K# T( Y6 L; o* F2 l& O6 e// 弱等于
- [7 \3 s- Z9 x( j/ U* S&gt; 1 == '1'; J% ?0 y7 @; |0 r+ z" L
true% E" A; r  i2 b4 t+ ]1 i2 V9 S
// 强等于0 h, U  A9 B3 `7 ?5 |8 h5 W- `; {  ?
&gt; 1 === '1'
/ ~) W2 R0 H1 n- ~0 K7 [false% C: V' n# ?0 N; T" X0 Z6 j) s
// 强不等于9 o9 y0 q, \! T8 g+ M# o
&gt; 1 !== '1'
( k# G) `3 T- t+ T  [8 ktrue1 T  l5 o4 b5 a4 K) O
  s: w; h; l4 I3 k  `
/*
" O  W' c+ F. X% e, t: a( ^JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
& W' z, V* |8 l5 n- y3 k& O0 z*/
' z1 `; ?' v# M+ X. K; F4 ]</code></pre>
% A* x3 ]6 Z6 F<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
6 @0 n% Q* n; i4 |<p><code>&amp;&amp; || !</code></p>0 Z/ i" @$ e- n; `3 w) g+ x
<pre><code class="language-javascript">&amp;&amp; 与8 x' Y: H  u4 @+ u. _& e& I4 T
|| or
* A' h8 w  h* i0 O! 非
8 X3 c. ^2 w- m: f$ [" d$ _</code></pre>' b  ^; V5 K  V1 s; J8 n
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
5 ^9 M+ T/ M4 |<p><code>= += -= *= /=</code></p>" W; J3 L  g  p/ C) m
<pre><code class="language-javascript">// 赋值
1 q5 a' ~# u, I9 l' q9 c&gt; var x = 3
! h1 x8 \' W/ c// 加等于
1 ^% K. e) [* d! p* i4 b2 m0 @&gt; x += 2* f9 E6 n. ?; Y
5& n: ^  X4 x! H3 ~- W
// 减等于
; A- m! Y, m# O" R, u6 J3 n) K0 q&gt; x -= 1) @* m( ?0 {! ~0 K# t  F
4
+ y* K4 B/ q* _$ p4 `0 c8 }0 d// 乘等于
* a+ b& F- A6 H: q9 q2 t2 C&gt; x *= 2
7 _7 a4 M$ T- y% j. ]8
& @) m$ o: ?& B// 除等于2 g/ ^4 v6 W+ V, z" U* j
&gt; x /= 26 G' ^% a# p& X1 x2 Q, H
4
, F3 i. j; x* _. ^, ]% s</code></pre>
( {" P1 x( O& E4 ^. R( d, Z<h3 id="25-流程控制">2.5 流程控制</h3>6 M) D  ?! k8 d- W3 [
<h4 id="251-if">2.5.1 if</h4>, \3 F  s& o: r6 {
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
1 P$ \& e, I$ y) [5 H( T
9 d) U* t0 I% K! R: w* X&gt; var x = 3! |0 {1 U" Y9 f8 r
&gt; if (x &gt; 2){console.log("OK")}6 b" R3 [& X9 J
OK; p) z& O1 Y2 [! v* C" ~

# ^- S7 c9 l6 \6 S7 P- B: ]2, if(条件){条件成立执行代码} 6 O1 R2 w+ n( ~2 y
        else{条件不成立执行代码}& a; e* |/ G, C4 v# _: g
' q, B7 l1 X0 A) p+ ~% w8 Y+ d
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
: b+ g. C- N& K3 z$ U5 E) }'NO'$ Y+ P3 s  Z/ U+ R6 X

  b, {0 f, Q' c1 |! j3, if(条件1){条件1成立执行代码}
/ E: k0 D5 H+ F: h; P$ r0 u6 _1 D        else if(条件2){条件2成立执行代码}6 Z! W- e) c2 s5 z9 Y6 l+ i& ]
    else{上面条件都不成立执行代码}
4 o: ]% d) {7 ^5 I9 v; x, @" m3 \1 H* K5 g' ?- N0 C
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}$ s, @! j; W4 O$ @0 Z
Ha
  B2 O- K1 D, |: q7 S</code></pre>$ M" D& [2 J0 h' H. T4 y' X/ I7 v
<h4 id="252-switch">2.5.2 switch</h4>
( S5 g" i+ q2 G/ z6 g, m<pre><code class="language-javascript">var day = new Date().getDay();( o0 |! w. Q; A# O  L
switch (day) {
+ u  m- q& P8 t5 e! b  l* V5 x( ^  case 0:2 _3 k" {) ^% @3 m- G
  console.log("Sunday");
0 F% V4 x/ G5 D2 U! V  break;( r* }  e4 ]! o5 N# X. x3 F
  case 1:
$ s( e+ n2 p; R. j3 H  console.log("Monday");! W9 d( C" a- P3 ^1 z% q, a
  break;8 g: U- g9 w* F9 ?3 u- q
default:
3 g1 Q+ k6 n$ S, B! k0 Q. s9 G) V  console.log("不在范围"); S/ `- M  [: e% `* A
}
' r) ~% k7 a+ r, q% J% F9 h4 ~6 X 不在范围& E) X5 j# n: w7 r" Q% r
</code></pre>& p0 J4 e/ k0 A) B) s1 E
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
9 e5 h) M6 v7 ^2 |$ E9 X<h4 id="253-for">2.5.3 for</h4>
: q+ @7 E% r+ l3 ?% a; b4 e/ Q! r<pre><code class="language-python">// for 循环
" Q8 J$ D' b$ g9 j/ @        for(起始值;循环条件;每次循环后执行的操作){
/ Z$ t5 A5 {" _& A$ h        for循环体代码/ B. m0 N& T- q' E" q0 ~
    }6 ~9 N5 E5 N  @0 V* v+ B: B# T
" s- V9 J5 d0 C# p5 n, _# O$ U& ~
for (var i = 0; i&lt;10; i++){
0 `, {. w" V  i" ?' y0 {2 L    console.log(i)
1 M' ?$ ]; V, S6 }/ c, j# u}
) A' V8 u; v; \6 z        0
+ h) z+ ]( y$ w2 n/ ?        1
9 i  u7 ]; Z3 V6 j0 F4 Y6 @1 S        2$ Z' i, {5 X# {, W% U6 l; y/ |3 Z# X
        3
5 q0 I' ?, q) w$ D: A        4+ v( [" q" n2 q0 x# k$ `
        5
5 e1 L" V  c+ y& Y" P        6
! b# R9 P/ ^( d9 @; b& M( Y        7- p7 D5 G  S  y& B# S, F0 [; e
        8
$ v% x( \; \$ d        9$ I% J; `, z5 \( W1 X0 }( k
</code></pre>: S3 A/ J/ L) r# m
<h4 id="254-while">2.5.4 while</h4>
7 o# E; D7 }/ I8 N<pre><code class="language-javascript">// while 循环
2 q. b+ x1 B9 j  U  O4 \        while(循环条件){
/ y; K3 U' g0 Y, G2 G; t6 B        循环体代码* [- e- ^% K( l1 A  r6 d5 F! R1 k: q
    }
- e6 {& j* S1 u( E+ f& H( I- i" f, p. o7 p  _. F
&gt; var i = 06 v' u% A+ I7 b; s+ a3 z  T
&gt; while(i&lt;10){0 n9 H6 D7 Z* R0 z
    console.log(i)
. l4 P0 w) t( v6 x    i++7 r9 y9 K2 m3 ]' K) L0 h# M
}
( R' G7 T; b2 h. {* ~ 0& q! t/ a/ j) G7 B% v6 {. L8 |
1
$ U% _$ m5 X: P) |, x; u- {& w 2: x* |9 b7 X: g- ?; ]
3# U* K4 L( P* y! ^6 Z$ N2 t
4
3 q5 m" s5 `5 B$ N1 I 5& P( h' I1 N* l1 y+ R
6
3 }1 U6 u* w% Y 7
& M3 G+ t+ H. E0 S 8+ W! {: n( ?' \  R" N' N6 p* P  E6 {
90 N$ F# W. t6 Z  w' z* ?- z% l9 g
</code></pre>
1 F9 M+ i# K5 c# R8 S<h4 id="255-break和continue">2.5.5 break和continue</h4>
% c/ w5 W; a7 l9 ~3 F<pre><code class="language-javascript">// break
. W- V0 f8 d* H2 qfor (var i = 0; i&lt;10; i++){
  r  E( x1 f( h! T' g; G3 R5 u6 P2 @    if (i == 5){break}
- `, N' |+ |# z9 [' a# p    console.log(i)
8 ^% W* ]- o! X0 L9 |}$ c# s; N- o/ L
0& g% \# T5 E; n( @3 n0 C2 M
13 Z0 s5 e" x4 R/ g, X& q
2
0 u0 p: Y8 r; F* W2 L 3% ?! U, F7 R& U5 G* N& f& ?9 l2 }$ r4 N% G
4: ^# O1 n$ J% [" t# F- G
// continue/ m( [' w0 O3 ^! N3 S7 n6 k
for (var i = 0; i&lt;10; i++){
6 P1 \5 ^/ P. Q: [, o8 G( N. ]    if (i == 5){continue}& `  ^- `- [8 h) c: |+ t
    console.log(i)% B! Z0 a6 g* P: t( g0 w* {
}( i% }/ [- @% p4 Q4 U
0
! ?, H  P* u) @4 f3 x- F  c  G 1+ C) w0 a1 {! n$ k0 N
2
5 E* l" M2 h) |$ \4 b# K 3
2 {" A1 _5 O2 c* x/ P% j& Q 43 x# x+ l- o  b
6
: L, i: j, a1 Z7 \' s 7" H& u9 q" g3 X, i
8
, X* f' S' b1 v3 `2 ? 93 l; D8 `. H0 c2 M0 d2 o1 N3 j

5 h: z/ G6 z$ x- G% G% |! l% G</code></pre>
2 q6 u. d/ Y/ Y, A' e<h3 id="26-三元运算">2.6 三元运算</h3>; _8 [0 R& O; f1 Y# g' K* s
<pre><code class="language-javascript">&gt; a' T1 g9 ~) z( w
6/ I: ?$ V4 R. H+ D3 {/ S4 F7 R
&gt; b6 M2 k% f: `' w% R1 ~( Z1 O
37 X2 H7 z; O1 [( G

" e, a* B1 l1 V( m9 H4 f" j0 L//条件成立c为a的值,不成立c为b的值! H/ L& v; j8 k
&gt; var c = a &gt; b ? a : b8 x+ W! h, w; U/ E. @6 O5 f
&gt; c
* }. V/ l7 s; G% I. j# k+ D" F6) d5 K* C# m$ t& a1 s2 Q
1 O3 Z2 g$ T9 L$ C- V  T7 l1 E
// 三元运算可以嵌套7 o3 W5 U$ E  u/ F9 C5 }$ S
</code></pre>
- @. w% ]' |1 C  D; I/ h8 P<h3 id="27-函数">2.7 函数</h3>
9 ]* [+ _# m) R$ a# o- T- }6 `<pre><code class="language-javascript">1. 普通函数
+ P7 ~& w8 z2 D$ |9 e. V&gt; function foo1(){+ B5 B0 m5 E7 @+ K! @" L8 S
    console.log("Hi")
+ k0 S; |+ j" r0 A}! {7 F- _; o6 e7 ~  f% J& h
8 p7 a; n0 ?  V1 N" A; G* c& F
&gt; foo1()/ l0 r& H" `3 @  @  |  ?
        Hi
+ H* u. ~' N% Y2. 带参数函数
; E4 K: a0 n* n: N&gt; function foo1(name){
' w4 @% T1 l. Bconsole.log("Hi",name)/ p7 V3 x/ S$ P- \( }
}- v$ U* Y; j& s8 S6 m2 S
, y* {' h! D4 f, ~3 V4 B& U
&gt; foo1("Hans")
( C- I5 i/ M$ T4 L+ zHi Hans
: m  j5 o: Y9 s& L; j: U& o' a1 v; t
&gt; var name = "Hello"0 [5 @# H2 r# p$ x5 D1 H
&gt; foo1(name)
$ A: c% R2 m5 P8 Y$ I0 a3 I1 u5 eHi Hello
# c* |1 ]( r4 I% O8 z- Y- M, |) C; t9 A' f* I
3. 带返回值函数& B, M5 P/ F( M2 M/ `% ~7 V# d7 m3 m
&gt; function foo1(a,b){+ Q# ~6 P1 Q' q4 z0 i1 M
        return a + b   
* x8 a6 H; h$ P8 l}
2 b2 R9 G, z/ |9 |) D&gt; foo1(1,2)$ j, m: l/ z) |4 P1 b% m1 T
3( \1 y7 a4 Y9 x/ Q) l% t: y
&gt; var a = foo1(10,20)  //接受函数返回值$ [3 m0 ~1 u* m+ L
&gt; a
: P9 ^/ ?% t( S/ N! [# t& `30& s, X' @) r  f/ ]& U
5 i/ l" e; z+ I( e$ D# [
4. 匿名函数/ M: Z5 k' A/ i8 T4 I( B  `6 Y
&gt; var sum = function(a, b){
; M8 s8 V; M$ z  return a + b;
8 M. @8 p$ D; S! N2 W8 w}7 o& B0 B5 s- b6 R
&gt; sum(1,2)
4 J  s4 I8 w, R" j" h3) Z; w' l, M" D8 r

$ S) H: m: d  x! b; R! J1 ~  c// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
& y4 N  ~# z* `& V2 ]  u7 O- L&gt; (function(a, b){
# A1 y  {7 y. y/ B  return a + b5 i- f, c# O) S7 J( x
})(10, 20)
2 k& y; M0 w. Y, a30( N  w, a8 T, @- Q( U
& S1 e4 k+ t4 w  B) }
5. 闭包函数
6 k  J# n* p1 P& @5 a: b. y0 I// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数: X9 ]- w2 u4 I# c, E
var city = "BJ"
( d5 d$ y& V5 @$ K" ?9 Efunction f(){( ^+ h' K& q% O& c  T, k9 K2 L
    var city = "SH") a! |( d4 n+ e( f( h; m8 f( q
    function inner(){
' \$ Q! }+ ~0 H8 N6 h        console.log(city)9 H" j% _! W; A7 J# b: S
    }
9 y- g+ M4 C- ~5 N. V! e6 |    return inner
- e& ]; v/ `% C+ |}
6 q0 w" w% D% R" W6 P+ Pvar ret = f()5 y% J  F4 `$ h6 S
ret()2 }, R9 N6 Y$ \  w3 P2 M0 d
执行结果:
& |2 u% ?+ \/ Y5 G  ISH
9 }! E/ C8 @5 f. i# H" V% Z
' _3 o& L6 s- w3 V</code></pre>
3 w4 z6 b3 @+ N/ a1 N- N% |8 u: X<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>5 S% h  k! K" H8 X( I' c( Q
<pre><code class="language-javascript">var f = v =&gt; v;/ Q2 z5 h( u. q$ l+ s
// 等同于
* i9 H1 C( E  o0 h1 Vvar f = function(v){% h. J# g5 J& s* h3 J! V! T. v
  return v;
4 T4 c, b6 y- N, M+ t) [}# f) x  l: D, K+ q7 @' A
</code></pre>
( c0 c8 D' r  ^: Z<p><code>arguments</code>参数 可以获取传入的所有数据</p>: L) G3 s1 O. [9 E" j
<pre><code class="language-javascript">function foo1(a,b){" H( v* e7 V: u, s! ^  ]
    console.log(arguments.length)  //参数的个数
& h! R" \+ W( q) @    console.log(arguments[0]) // 第一个参数的值
+ |3 z/ i# L+ S        return a + b   3 A% [1 r8 t$ b+ a9 f" b% X
}
! i  F9 S7 H9 t- ~; }3 ~0 G# nfoo1(10,20)
/ a; {% }% _4 s, P% U2 s, E结果:
$ J7 [9 u( R. w( H; @/ L5 W 2          //参数的个数 ! ?/ c, I5 i  c# v: p
10        // 第一个参数的值9 L( o& _! K& u/ {- q
30        // 返回相加的结果
- j# D7 S! C5 q</code></pre>7 V+ T, y: I6 P& {# a3 T
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>6 y- U' o: e  v* o5 {
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>% `- v' N" p3 l
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
  ^3 w; v5 t1 v& i! W4 q2 B! a<h4 id="281-date对象">2.8.1 Date对象</h4>7 M" Z; ?) w; p- p" ^" [- N
<pre><code class="language-javascript">&gt; var data_test = new Date()
9 }3 O4 u" D1 w: w7 ~&gt; data_test
  \6 w0 I8 @* p! Q$ [# JFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)! B8 Y( |2 Q* o* H
&gt; data_test.toLocaleString(), {1 |2 X. I! l+ j5 L! E: n
'2022/2/11 下午9:44:43'! M) _) |$ U$ O7 s( |; b4 T

  t0 K. c; e. {: c& d) T4 }/ q&gt; data_test.toLocaleDateString()" Z. G' L& v' ]3 \
'2022/2/11'
- |! z( q7 v: l; i
: `4 e* Z. N; D1 a6 j1 s# N, |&gt; var data_test2  = new Date("2022/2/11 9:44:43")
  ]* l) A' s- B' O1 a&gt; data_test2.toLocaleString()
. V1 R4 N+ x" k+ v. |3 u& m7 }" w'2022/2/11 上午9:44:43': q' z/ A" u6 I3 \/ D7 I; F

) E/ K. A& y* u  K8 f9 V// 获取当前几号# h. p2 G+ [1 E* Z( Z1 ~
&gt; data_test.getDate()
$ Q6 D/ x/ A! w$ W# t+ \7 X11+ ], }# E) x5 @8 Z
// 获取星期几,数字表示. G$ K8 C1 K) b, B0 {" V% P  A
&gt; data_test.getDay()  3 h2 |+ \2 L5 c1 p  t
5, t: C' D# M; n6 x- a- E9 o6 `2 _
// 获取月份(0-11)1 {2 `4 o$ ?' V
&gt; data_test.getMonth()7 j% H( \; Y+ z% {/ i6 M
13 R* ?# m, B$ k
// 获取完整年份/ C2 L/ ~7 K+ X" `. d
&gt; data_test.getFullYear(). E( R# ]( F3 G% J* S
2022
! x+ p2 F$ T" I& d// 获取时7 Y* P* \4 n( V; P3 m2 S8 Q8 L2 ^
&gt; data_test.getHours()5 L1 [' Y3 f; S2 i
21$ l4 s2 d8 k- l( p
// 获取分
- `, b( b+ n) F- [&gt; data_test.getMinutes()
9 d* Y7 W$ }# K$ o9 i- O: F44' g- j( u! W1 a* _( g  Z- @
// 获取秒
- u* Y; h- N& V" W&gt; data_test.getSeconds()6 n- j+ G. i" Z& |, t( O
43
2 P2 H1 X+ o0 o' Z// 获取毫秒
. H" u5 X+ A, _+ z, @. O. r( i&gt; data_test.getMilliseconds()
7 _% }7 B$ W# t290
$ D" `) K: Q! b, {; l: l' N1 z// 获取时间戳
1 d6 a  g1 T$ v2 v0 I&gt; data_test.getTime()
" D( j: ?+ O" w3 E1644587083290
2 `1 l4 o* d* z* T% V7 P</code></pre>. t7 K  L' V- M1 |
<h4 id="282-json对象">2.8.2 Json对象</h4>
3 x* m% v- j: R* `) h! T<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串+ \, y4 s/ R8 {+ \  c$ E
JSON.parse()  // 反序列化,把JSON字符串转换成对象
2 X; x. G1 M# |: \' q! G$ S4 s: X& d* ~2 g. U+ k1 e- N
// 序列化2 {8 b! f2 S8 Z8 {% T6 ~+ I
&gt; var jstojson = JSON.stringify(person) 6 j, \( D4 v$ {; I% _) d
&gt; jstojson  
1 ^* H( [# T8 A! k$ K8 S'{"Name":"Hans","Age":18}'
3 L2 j) V8 C6 V% `9 s4 Z& b4 J
  t3 O# c, b0 e/ }// 反序列化
; k" F& j; O5 J) \* z&gt; var x = JSON.parse(jstojson)7 ^$ {* M; g' p
&gt; x5 B- g/ S2 B# ^
{Name: 'Hans', Age: 18}" m" ~' K! d  I/ n8 D1 c" G+ F, I
&gt; x.Age6 m2 B+ t  M, I0 X; h8 B1 v. p1 M" L
18; U0 c) k+ [' i( u5 i1 h! O
</code></pre>
5 H) Q/ i" p! C2 O' j) ]+ o<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
$ Y2 B( P) d4 ~% V: r( @<p>正则</p>
. E# J) z  c; X<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");/ x) j$ Y$ B" N
&gt; reg1
+ _  P, L# s9 [, n! X0 Q$ Q4 c) t5 T1 `/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" x! ?! j& H4 \" h" B&gt; reg1.test("Hans666"): O$ R, n/ C4 {8 H5 A) x" h2 n
true
% P/ h7 e* C! z0 ?! k7 N) c0 H' P  s& \7 D* t2 Q
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
% P1 q: K8 @* Q&gt; reg2& b# V: ]+ D! o/ Z$ L! b) ?* G, u
/^[a-zA-Z][a-zA-Z0-9]{4,7}/$ \0 a4 G& S- w' y9 p. q8 i8 H
&gt; reg2.test('Hasdfa')
( ~8 v2 [5 N6 qtrue; t, W/ X9 ^! c/ T
% c% I0 \, _1 r3 N
全局匹配:
1 s$ C: Z2 `# T6 Q! G&gt; name4 k/ E# a  j% h) d- I- T
'Hello'# n3 v8 P% `1 `0 F& S3 z7 l3 s5 p
&gt; name.match(/l/)
$ v/ w) ^, s! v" a$ N" D6 Z['l', index: 2, input: 'Hello', groups: undefined]
6 L$ K" ^7 Y# K; s1 H& t9 f2 P& G$ ~! N( L% [& @
&gt; name.match(/l/g)0 b. [4 O) T- n* O
(2)&nbsp;['l', 'l']
- y) |; ?  [& P$ e6 t: I' @// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配+ ?! M% A# m6 |2 n$ J0 O
3 k6 [! L1 Z* H* F( A
全局匹配注意事项:1 i/ t6 _  y6 \; _( t) b/ ~
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g2 M' N4 `6 f; g, \. O
&gt; reg2.test('Hasdfa')) V/ J' @) t3 R$ }$ [/ _/ l
true; ?8 B8 U0 {* }4 v, f5 g$ [' B- s
&gt;reg2.lastIndex;5 P1 q- D( u4 R, k  H2 L
69 r7 U( T( I* g4 ?* o) ^
&gt; reg2.test('Hasdfa')- W* ]" \$ t: A7 ?5 q
false
6 s* y$ S0 W# r2 X& ^: s&gt; reg2.lastIndex;3 r; {- r: {( q( ]& o
0
9 `% R2 ?! V; v$ Q# t9 H&gt; reg2.test('Hasdfa')
( i. s. s& a* r/ D$ l$ o- Y% E7 \true
! j& A( c1 x+ ~$ E& h&gt; reg2.lastIndex;8 B) J7 u3 H" Y" V, Z3 C( G
6
( K# Y) i8 k" J  @4 W; H&gt; reg2.test('Hasdfa')4 l  t; a' d' G4 R: b7 n
false
! s7 M9 u- ?% \$ g&gt; reg2.lastIndex;
4 ^$ h' B% ^. F+ c* j0
( y; Y3 E: G) `/ z) ^// 全局匹配会有一个lastindex属性
0 T: I. C' T2 O$ H0 R&gt; reg2.test()
9 r/ v3 M6 n5 o. U' p% A- S1 ?false
% u/ m6 U- i8 s0 P2 m&gt; reg2.test()
. v# ?8 ?4 S+ h& \* Gtrue
- b/ Z" t/ E! }: U8 K" l3 Y& W// 校验时不传参数默认传的是undefined
' u: f, O/ `0 L- @# ?</code></pre>
8 ^# C6 o2 K7 f* ^/ @<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
4 a. C; h- ]+ V- \! r' A& G<p>就相当于是<code>python</code>中的字典</p>
; x) I0 S, j# j3 i  F7 K3 ~/ C<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
" c6 t- S; R9 U% F4 I  p&gt; person6 ]- F1 l% B* h; A
{Name: 'Hans', Age: 18}$ W9 I" q" {3 U/ C
&gt; person.Name9 o1 \% C* J) O; U* {
'Hans'* j5 b: S* O* I; D9 }1 k' v
&gt; person["Name"]
& f) ^# m  N, Y' O# O% k) b'Hans'# U0 l5 _5 m5 z0 e: f3 x0 c) H
% ^9 ?, Z# V2 o1 a5 l* Z& z
// 也可以使用new Object创建1 G4 u! ?+ @0 j) M( T3 E, i
&gt; var person2 = new Object()  T1 c5 P: M5 \4 m2 D( j
&gt; person2.name = "Hello"* {/ b/ F* g! p6 l8 {8 x
'Hello'3 D. V! e! N$ C+ X: }' X) t2 x
&gt; person2.age = 207 v' b' d5 v! x6 l0 p: i
20
% A) _% n/ {! A  K- ]! H% p1 U</code></pre>
( Q* q( k; m" m) k. m0 d<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
; a* y! x5 V1 u7 r& X1 f8 r  u<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
3 B, u7 }4 w9 q8 c<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
+ X, Z, |$ y' O2 [2 e& l3 o3 L<h3 id="31-window-对象">3.1 window 对象</h3>
& W/ L* |' t8 }: m! h8 E<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>* c/ S+ \% o4 M; S- X
<pre><code class="language-python">//览器窗口的内部高度7 D3 c) H/ z! @) ^
window.innerHeight
$ D# D$ P% o: h8 N, u2 N8 D; n# _3 \706
4 K- ?5 z1 e3 m//浏览器窗口的内部宽度
/ m# K6 Y* |6 W2 ]9 u+ ]% d$ Cwindow.innerWidth2 l% |! _6 f' N+ @
1522$ m+ ]1 F( K3 [9 ?! L( Z8 g. c! h
// 打开新窗口8 l' d9 @& j# Z  V
window.open('https://www.baidu.com')& C7 m! h4 n: d/ d/ B
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}  |1 U" F1 P  X/ ^. c/ U
// 关闭当前窗口* E! ^1 ]4 o7 Z5 [; `
window.close()
! l" C/ ]- d: I. h; z//  后退一页2 M6 B! E* F. i: s0 W: J4 r
window.history.back()
7 ^+ Y$ Z* X9 @" P// 前进一页4 C) x! ?6 d, y7 p
window.history.forward() 7 h7 ~. N% C. u+ m/ O5 ^9 U" M  O
//Web浏览器全称
& z$ N  A* V, ~3 Twindow.navigator.appName$ {5 k! h  G6 {0 F$ P: z' Y: c( \
'Netscape'
/ L1 S% E; Z4 v5 ?) i) }, t# \6 a// Web浏览器厂商和版本的详细字符串3 g( y" N# v* p. \1 \7 X
window.navigator.appVersion5 C& ?; E2 d* l0 c& u* T
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'- P! ^" r0 T& `
// 客户端绝大部分信息) x0 J2 h# `- K( c- V
window.navigator.userAgent- ~) {9 ]: T/ B) |: u3 @
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' q0 J+ b5 C$ d  _// 浏览器运行所在的操作系统9 q2 L4 Y# a5 f1 @& W
window.navigator.platform
% e4 O1 k" U1 Z4 R'Win32'
- h" g; V& o6 P( Y" x) c
4 q) I) T6 k' G  ^//  获取URL
5 u) H4 L, F3 T/ Z3 v' c1 iwindow.location.href
+ _6 `6 [4 K/ N9 i// 跳转到指定页面
" U% I7 }$ z8 s& Y/ g0 c" V# ]5 owindow.location.href='https://www.baidu.com'
6 I& }2 f9 a6 z* Q// 重新加载页面
. G  B4 l+ z9 \' l, kwindow.location.reload() ' ~0 C2 C" k* q# Z9 m8 O7 Z
</code></pre>
* |& c4 Z( z' K! c3 h<h3 id="32-弹出框">3.2 弹出框</h3>
. l0 z8 _7 `0 @; A<p>三种消息框:警告框、确认框、提示框。</p>4 \2 H  g) i( t" t4 W0 p2 c
<h4 id="321-警告框">3.2.1 警告框</h4>
, ?/ I4 G! j" U9 A<pre><code class="language-javascript">alert("Hello")
/ k3 N+ E5 }) t  q</code></pre>3 F' c& K2 K6 j6 B$ @3 m
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
( _5 [8 _! f$ r7 l9 S<h4 id="322-确认框">3.2.2 确认框</h4>- V& O% g) o& O$ G; _$ t; t
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>/ m5 P1 X9 U: q! [3 _) o
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true' `8 O  N% w1 I! Q. p+ |4 O' G: j
true8 i- L8 f" [) ~* ?) f. s
&gt; confirm("你确定吗?")  // 点取消返回false3 N4 S' ^9 ~& l8 X  Y. s
false4 f+ f3 z) A, S$ s4 B
</code></pre>
2 F7 R; [; r" F( n" A<h4 id="323-提示框">3.2.3 提示框</h4>( ~$ ]# \: M/ y- f* D. S
<p><code>prompt("请输入","提示")</code></p>6 i" I2 j0 Y8 a5 N
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>1 S) z7 l& B" P& j- |8 E) w2 ~2 c4 W2 A
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>5 ~, s' N+ E1 \+ D) e& J
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
* G( g. |2 v& V8 `$ b7 F" N<h3 id="33-计时相关">3.3 计时相关</h3>+ B2 I) z* j7 u# A1 s& g9 a( _
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>3 L8 a0 f% r8 L
<pre><code class="language-javascript">// 等于3秒钟弹窗
+ n1 Q, s% L+ h4 b& GsetTimeout(function(){alert("Hello")}, 3000)
& Q5 `. h! C' m# F; \/ Z/ B7 c% x. \1 _0 D2 c1 e: I( Z
var t = setTimeout(function(){alert("Hello")}, 3000)
1 C* _% f( n3 S
  u$ X, ~5 J2 v1 {// 取消setTimeout设置
# h  m9 n2 J) H0 ZclearTimeout(t)7 k) r* ^* W# g3 t9 z' e( w
</code></pre>' M# p2 I9 ~- s' r$ \7 }$ \
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>, A, N1 P/ o$ c% x0 Z. X4 q: I+ f
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
4 h' B" c$ {) W0 T+ c<pre><code class="language-javascript">每三秒弹出 "hello" :0 X# M' L, k7 G7 q& O0 n% W( @4 v; R7 [2 M
setInterval(function(){alert("Hello")},3000);
) x" p9 g" T* z" t: U+ z</code></pre>
& {. O5 F3 H" r$ g: q<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 g5 `! M' _( E6 x<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);3 v3 G1 j6 T  w) E% g& e! {  w) A6 |
//取消:
6 ?$ p+ H3 e7 S) F5 wclearInterval(t)
1 _% @. B' D# @- I6 _/ D  L  N</code></pre>
' m3 Q1 _' W4 x# i5 Q
" j  g$ J+ l+ N- l! {. B
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-26 17:35 , Processed in 0.072634 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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