飞雪团队

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

前端之JavaScript

[复制链接]

8049

主题

8137

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26477
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
0 o8 V0 i. e7 p9 H9 ^# g
<h1 id="前端之javascript">前端之JavaScript</h1>
9 \2 G# u: c- R/ j- f/ t<p></p><p></p>6 U, {8 B/ m3 l! b+ I
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>$ `2 V3 [6 r  B3 {, g$ P4 [# }* h
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
; S1 D! I9 e1 W' b7 W" S它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>1 `' ~1 D$ K% P/ I$ d; |( e- E/ u
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
2 ]" l3 C$ z( K5 k# ^. _+ N& |! V它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>; Y  v- {! P/ m: _8 h
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>) u) l+ {0 ]0 S6 x; i& [
<h3 id="21-注释">2.1 注释</h3>
3 g/ h3 Z9 H; Z' u$ j<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
9 E) Z  t6 P' T# A<pre><code class="language-javascript">// 这是单行注释
3 i4 b+ B/ V& {1 z8 S% R/ ~- o8 e( B0 {
/*# I9 c" T' t9 F( @6 S! p3 h
这是多行注释的第一行,8 O* }( i( I+ q8 ~5 I) l
这是第二行。
- [7 n+ `. _+ B7 R. c3 N+ x*/
3 o' q; b8 Z" R% R1 U3 g7 R/ H. j</code></pre>
3 c: r5 g6 s  X# E1 o<h3 id="22-变量和常量">2.2 变量和常量</h3>
7 j" {7 S( G& X: e# D<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
. p) `% a" h5 [8 F<ul>
6 \# x. Q" Q+ f7 a# ^- z3 c, B<li>变量必须以字母开头</li>
- g. b6 Y1 b; w* w( k$ H<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ ]/ H1 {' z2 @/ a' p6 w5 [
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 G; G, i& r  H/ I</ul>) C, P8 u1 N0 r8 s2 [" s) `
<p><code>var</code>定义的都为全局变量</p>* v) v5 g7 s1 y
<p><code>let</code>可以声明局部变量</p>8 q" p; u* M9 Q; j
<p><strong>声明变量:</strong></p>
. H( e* h1 R" a<pre><code class="language-javascript">// 定义单个变量  M0 w, d( o; R+ v3 b
&gt; var name1 l/ n' e( o- i% O; V& _) P4 Z9 ?: P
&gt; name = 'Hans'
$ \0 m( X& j6 V//定义并赋值
* W% }7 c+ `" P: r( P+ W5 c&gt; var name = 'Hans'
3 L4 o* h* O* o" ~&gt; name. m+ H) ~( ^$ V$ t
'Hans'" d, ?; T) R5 m
$ S& L: m) z0 F  z- O& F; O
// 定义多个变量4 L; Q( @* J+ ]& j. e$ m# m
&gt; var name = "Hans", age = 18% D# F' U2 x% X. `
&gt; name
& f8 J; y, _7 M& n0 v4 \0 C: V+ t9 ~'Hans', L; d% h% x) F( e4 j2 C
&gt; age; B" |, Y' K8 ?( o
18( t. y% ~) a1 m6 g' q

/ Z& O* W; {1 r# z. D5 i//多行使用反引号`` 类型python中的三引号2 |8 m2 j' W" x* Y
&gt; var text = `A young idler,8 P9 f( q0 X  E2 Z2 w9 f) X
an old beggar`
. N5 i9 J4 Y6 H* n. U- c&gt; text' d* Q' M0 ]6 s4 {  h
'A young idler,\nan old beggar'6 l/ v8 ^/ o% k( D. D# P: f) ~: G5 [
</code></pre>
/ c  u+ q# `' T! f2 `<p><strong>声明常量:</strong></p>! |4 o3 E) h1 ]/ M
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>! R# R6 P5 Y' ?* h! p
<pre><code class="language-javascript">&gt; const pi = 3.14$ U7 U6 G# h1 R, W3 K0 f6 t# o
&gt; pi0 F& t) \/ D) u6 B; U
3.148 h1 w& r0 W( {: v( t+ `& v& W9 C
&gt;  pi = 3.012 |; \6 [$ \' J9 r9 [7 t* W
Uncaught TypeError: Assignment to constant variable.
$ n8 C2 \; h- o" n( k    at &lt;anonymous&gt;:1:47 l7 z  E1 y8 P1 {+ f8 o
+ A$ ~3 U: P) @! l# u+ E
</code></pre>* y* e  j- ~6 _: x
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>& e8 r! Y  A5 K3 \4 G
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 b* o5 H6 U( J1 [' c; B: R5 H<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
; e. ?- T( j/ p8 m6 z<h4 id="231-number类型">2.3.1 Number类型</h4>
" ^" Y3 Y7 `( m9 x' ?& f8 V5 J<pre><code class="language-javascript">&gt; var a = 5* t1 S7 d4 l3 l9 E+ A
&gt; typeof a   //查看变量的类型  , |5 W* s. k+ P. N; T' Q6 x
number, H5 J; U% ~& L  L& f6 r: b9 S0 m
) M5 v6 F+ P7 h$ u9 H+ Q* I
&gt; var b = 1.3+ h0 I$ Z" j* \1 m: K; e0 R
&gt; typeof b. P4 U4 ~2 e6 X; d$ T
number; |- R& V" [1 _7 ~
/ Z; J% R9 v$ E$ D
// 不管整型还是浮点型打开出来的结果都是number类型) w5 W! q: m4 r. X# U8 K$ e, h
3 z5 Q- t( I: Y, V
/*
! A; G/ S3 G: X! ]3 INaN:Not A Number
& u: c9 J# ^. o) q2 bNaN属于数值类型 表示的意思是 不是一个数字' |$ w9 W' |3 J/ w1 O4 q
*/, D9 j+ ?% g$ I) W' W5 B8 [! Y
/ u7 ~9 W/ u# o  [# }4 K1 \. A4 G5 ]
parseInt('2345')  // 转整型
  ?7 J; {5 l& O/ v% a  L+ L2345! b  q8 s3 L" R9 K9 p
parseInt('2345.5')
: h3 k6 L) g! z/ Y2345
) u. @1 R; T6 M* P: hparseFloat('2345.5') // 转浮点型
* w+ F/ c1 Z  M  `4 |' E; Y2345.5) V4 L) |3 N) E% ?- G
parseFloat('ABC')6 C" z" w) E- O2 r) \
NaN9 E; D& @% s' ~3 m( y1 j. X
parseInt('abc')' p# G+ R% ~: h) C
NaN
) r+ k3 f5 @+ Y</code></pre>. ?+ `4 k% _. D8 ^
<h4 id="232-string类型">2.3.2 String类型</h4>
/ R: n# Z1 \( L0 D8 u7 N. I<pre><code class="language-javascript">&gt; var name = 'Hans'
1 B, B6 N1 ?/ a1 a: D+ m( ~1 @&gt; typeof name
7 W5 ^/ c# q) `7 L, p'string'
; h# ?/ R5 ?) N" w" m3 q' r1 x- _5 k6 l
//常用方法
6 I; }2 K9 a7 t$ ~7 I// 变量值长度6 W3 @1 U6 I* q
&gt; name.length; `+ e' Y# h# ~
4
# ~" p& c5 Q4 I9 B// trim() 移除空白
1 P' }7 f6 N5 n; S+ L$ X&gt; var a = '    ABC    '
* S( m& q( O0 I% Y&gt; a
7 y4 g9 P: b* \'    ABC    '' e1 u5 z( j. ?* E9 |
&gt; a.trim()4 Q9 V8 p8 ^1 U
'ABC'+ a- ]. l$ q1 i( @; n! h
//移除左边的空白4 ?4 A- M" Y) S. `! |
&gt; a.trimLeft()
: {' {+ Q+ j! a$ k1 o, Z' ['ABC    ', f$ P0 U! b8 }+ D0 K4 o
//移除右边的空白
8 }. @( c& i: q* O+ g# A# K7 |4 k( C&gt; a.trimRight()2 e( ]" k& N% _: F
'    ABC'
8 C7 p2 f, u2 @7 X; j. M2 T4 H" \
4 b" y, K- a8 f) Z//返回第n个字符,从0开始
/ u+ Y" {& r7 y&gt; name
$ R4 b5 _, k2 \5 C( l'Hans': T9 [+ B% Y$ j+ A: g/ K9 H
&gt; name.charAt(3)% O$ P' x" b( z% d. @; G  b* s
's'/ y1 f8 l0 }0 d" Y: l
&gt; name.charAt(); t2 h' R3 v: f' o2 f( W/ Y
'H'* J2 y# y' ~+ d! N8 ^7 t
&gt; name.charAt(1): _" s, \6 m( l& }) o7 B. ^, i5 j
'a'
- t3 ]4 [5 V. ]- ^' l
, O+ }3 y! [$ M& K# Q// 在javascript中推荐使用加号(+)拼接4 W. [, J% H: x4 c0 `, i! ?
&gt; name
( x5 N3 G  ?" C'Hans'
% Z- C0 g5 ?+ k( z+ W&gt; a
" Q" k0 G5 Z7 W: l' {'    ABC    '
8 W3 m# X* Q6 S' y; C&gt; name + a! M$ R% V9 _) J. n+ }
'Hans    ABC    '; w  A& X/ W' v1 `
// 使用concat拼接
! e" l+ Y& _: f$ c8 d&gt; name.concat(a)% ]" _1 M* e) B7 D8 G6 q
'Hans    ABC    '6 d3 N6 A6 K& |
' h) @) O8 J5 z1 X6 |: p  K
//indexOf(substring, start)子序列位置  D' g6 F* n( e) G% R7 t; Z5 n
% f! j% h+ r. T" T' o0 J6 c
&gt; text1 G: \- \. ^( ]. L' F
'A young idler,\nan old beggar'- n. i; D- C) f* c
&gt; text.indexOf('young',0)
" j8 d, V: z  I/ c0 Q2
# `. L: f  u; D$ R: T2 _  g
/ @0 g+ L8 s& K3 i6 w$ r//.substring(from, to)        根据索引获取子序列
8 _4 ]* l- f% W) b1 r# w# `3 M/ k&gt; text.substring(0,)
3 |: G: S& H0 d# M4 Q2 l$ u1 i'A young idler,\nan old beggar'6 I+ E+ L7 @# L
&gt; text.substring(0,10)
7 q( ~0 e& T5 D- @% B; K'A young id'0 b- C# i! `0 @8 P) M
& A' V* f7 U) B+ H  q
// .slice(start, end)        切片, 从0开始顾头不顾尾, ]" ^/ l4 Z7 V
&gt; name.slice(0,3)
# z; p  d) k0 ['Han'* S. ^& d! Y  P" c$ G; R

5 V" L$ p$ h$ G! Z, e4 X2 K// 转小写
+ v0 U2 ?& T! ~8 l8 I&gt; name1 g$ S9 C7 I, K% O" j
'Hans'
6 b" H/ ?& I% _& p& k/ B&gt; name.toLowerCase()
# n5 Z2 g- X6 K8 {'hans'
3 C* X, }$ m$ S9 N" O// 转大写. x8 C, F, n0 j9 y; P7 }7 W
&gt; name.toUpperCase()
. ?4 `1 I+ q. o9 Q; y. b/ X'HANS'
1 K. [. o, m* c) E  P" b8 j5 w& s, g( q! }
// 分隔
2 C- b* ]7 v& w2 ~&gt; name
9 D- d) B5 [  n3 H, J$ e3 p" t) Y3 z'Hans'
+ Y; t4 K2 E; N3 d2 q3 p' f% J&gt; name.split('a')
: @8 N4 m& ?* j" m" i/ }(2)&nbsp;['H', 'ns']
5 p2 \& X* |4 ]+ k4 ~; E</code></pre>, O: @* z5 M1 V  y
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
1 C* f* u- B  b6 Y6 ^" H" f+ d<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>4 ^! d2 L  G/ }# `; y
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>6 i  L+ F+ s% I# x, q
<p><strong>null和undefined</strong></p>, N1 L( e: k9 N# H
<ul>
8 x- ?; b& q4 R# m% l# q) ]6 N<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>7 X; q: |$ t/ d) t7 N1 I6 U
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
) q" D& }7 h+ k. y. `: m/ C3 }. }</ul>
( I/ c% {/ l3 z, Q: ~4 A2 m  V<h4 id="234-array数组">2.3.4 Array数组</h4>
0 }+ n9 c- ]2 X  ^<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>0 ~! U' r; j0 _9 [1 Q9 E
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 3 f6 c. I- Y9 J( m1 P
&gt; array1' v' n! Q; G6 i
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
. J6 `" l2 W7 G' Y&gt; console.log(array1[2])  //console.log打印类似python中的print
1 t# Y. [, d' G& W8 `$ c3 U' Z3- {; @: G2 |- ^0 T; x  T1 d7 d
// length元素个数8 j; _& @; f' b# o; Y* q9 D
&gt; array1.length
% y9 }$ i# |  s' p  B( H6
8 s6 Z0 V- m0 W# ~+ K* r3 E) d// 在尾部增加元素,类型append" Q7 C4 B2 ]# ^0 k! @" k
&gt; array1.push('D')9 _- S7 X$ X3 _9 Y. A7 L4 \( @( A0 D
7
5 t$ @4 |+ H3 S( y5 k0 h1 P&gt; array1
  Y# X4 W& ?+ K% d' m+ N, @(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']) U$ p+ {. C& y2 y+ f' n
// 在头部增加元素
( h/ F: @( w; g$ Y- r0 |4 r1 @&gt; array1.unshift(0)+ i. j# M6 X" o' H
8/ C; e4 ?: @; d1 D
&gt; array17 U4 ?2 {1 o  c& m  i
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
3 j; T" C$ j$ X' X4 E9 I: o" c! f, c! g" v2 d( |" \
//取最后一个元素& _. ^: }8 s8 i8 }% ~
&gt; array1.pop()
' L% ?% n# J) |0 J'D'
; m# d, V' @9 [' o&gt; array1% V: f. p' {5 U' k6 c
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ _7 N( D- T# t5 h
//取头部元素8 D! |9 q' G3 |# c, j# O4 [
&gt; array1.shift()
: I* U& ]8 H3 B) x9 N( L. l/ U% N' t- ~0
' T$ [$ z* h" p8 m- P&gt; array1/ K) Y# R5 `- {9 d5 D
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']" z$ s5 U0 c. x% @" R1 F. g" k, b

( O5 Q4 ?8 d! W//切片, 从0开始顾头不顾尾; R4 _/ `% Z9 D& H! }' s
&gt; array1.slice(3,6)5 T9 P6 T* X) F6 p
(3)&nbsp;['a', 'b', 'c']
4 r, f/ a+ @6 z/ @# b// 反转6 r" c+ d$ s9 Z0 \7 T) W( z4 ~
&gt; array1.reverse()
! u- x$ [# |& G" G2 D1 T1 v(6)&nbsp;['c', 'b', 'a', 3, 2, 1]6 b5 v) B6 O7 _
// 将数组元素连接成字符串
8 @& r7 _/ J1 r# M' D6 G% w2 B$ p# n&gt; array1.join() // 什么不都写默认使用逗号分隔
: F5 |0 ]) `& q4 {- j4 m'c,b,a,3,2,1'2 B" i* I7 D+ L, N, Y: [. x" r
&gt; array1.join(''); j2 u4 [2 l8 ?; O9 b. A
'cba321'
" r- `( d( [8 N( F- V7 j- q&gt; array1.join('|')
) x3 B8 g; u! y'c|b|a|3|2|1'1 j* {1 y9 ^1 l: E

0 U; _2 B8 K# n# ]// 连接数组9 l6 J: R( A% Z9 I2 S
&gt; var array2 = ['A','B','C']
% M4 ?- ^# E1 w: W&gt; array1.concat(array2)& K5 m8 C. a/ l* t4 V# k
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
% Z1 a* r& V# D2 B8 @2 N+ I8 v
9 O% U1 g. M" T9 R// 排序$ m5 C. i3 o  V* o- t9 T4 O, h
&gt; array1.sort()% o) f. x$ {" V$ f! I! C
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# I$ j5 {5 }2 P& l4 t
) j# }8 z( ~! N$ V) c, U: b4 a. n
// 删除元素,并可以向数据组中添加新元素(可选)
) @3 E8 f, s2 p  P8 m1 d&gt; array1.splice(3,3)  // 删除元素( S* `( G" w7 u& {( b
(3)&nbsp;['a', 'b', 'c']
5 E6 }9 h, I+ s0 @6 c0 |&gt; array1
3 o3 z2 H0 l" |' ~3 M(3)&nbsp;[1, 2, 3]9 Z4 Q. n0 G( n% B% C
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
5 R% N2 J& v7 y1 M4 p2 \[]3 p/ G+ m. y) n
&gt; array1
3 }6 K1 Q9 z  `: O4 f& g(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']! }  b$ y$ J$ z$ h) z! {
! {( o/ M! M7 t5 n, V% a* ~
/*& \/ H8 p* {/ E. r
splice(index,howmany,item1,.....,itemX)
$ k) o: M1 a/ T3 m2 @index:必需,必须是数字。规定从何处添加/删除元素。$ D/ ]" D7 u6 h( n9 c
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
9 R- n# e" y+ ?% G' Gitem1, ..., itemX        可选。要添加到数组的新元素) D( ~  G$ A2 v4 }2 C4 f! Z  y, L
*/
  b5 v! t6 u9 z, g% h' z9 p/ K8 |( E
// forEach()        将数组的每个元素传递给回调函数
9 _: y" Q+ l, g# O  s9 Q&gt; array1.forEach(function test(n){console.log(n)}). m1 q- `' _  F
18 D- Z+ K! e* b+ _
2
7 E3 F* D5 p  d9 J/ Q& n: h' f 3
# {4 h, P2 x' v- D A, C  O* e; B- O* F  p. n% C
B; `# {5 ^+ t8 }6 Z% i% e1 C
C
" A6 i( t; T  g$ `5 D; J+ y" `// 返回一个数组元素调用函数处理后的值的新数组3 u; n, |( h# @4 j  z, v$ l
&gt; array1.map(function(value){return value +1})) S5 [& F$ A7 K+ L
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']: O: S% d" k& J* D6 M
</code></pre>; z+ `2 t7 k" ~3 x/ n3 e3 n, p
<h3 id="24-运算符">2.4 运算符</h3>
- _3 I; X+ o2 c<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
! i, }/ t0 W/ X4 S8 L<p><code>+ - * / % ++ --</code></p>* `( W2 L  v0 k# q; X
<pre><code class="language-javascript">&gt; var a = 67 g  k; l+ {. {+ x+ b9 x; G
&gt; var b = 3& I$ w# I3 x* h$ [! c
// 加
: B+ `, G! r1 k$ E$ x  }, Y&gt; a + b5 i. n) P% N3 R; ^
9$ z0 F8 d1 W! v7 @) E% X
// 减. n  W  W1 K( x( G1 U. W
&gt; a - b( _0 j- O/ K: r/ c; K% ^1 {
3
" C6 @' t$ Z  F# X- o// 乘$ E5 k4 t% ?' S! ~$ L0 t
&gt; a * b
( I) }% n4 s. w" u# Q# w2 y18
0 j5 [( @$ x& C, @2 \# V// 除! p6 ]% S  X: V1 [; V5 b
&gt; a / b, s7 C( o* A+ ^. x: N: b; V
2" q7 k3 G9 G4 j5 s3 A: ]: Q( w5 s. ?
// 取模(取余)
. @  S  c9 W8 D- [1 N' P4 v&gt; a % b
# A& a8 d; f* K8 v0
! {; l1 \  u! [) f// 自增1(先赋值再增1)/ A0 _: f5 L+ }9 L3 A4 ]4 O3 A6 [
&gt; a++; v& J% h+ |' n; n" F5 l
6+ u8 L+ E4 ?( ?/ x5 [. `' k
&gt; a
2 D: |7 J' ], C3 e0 `; O$ G7
/ q) K1 G3 a6 [' }, G( E7 Z+ q// 自减1(先赋值再减1)
- x- }" e& w" `) g8 A* |7 U3 U&gt; a--$ F4 p& X9 S, h, U, s3 Q- U
7
- [5 Q/ \% v* X  x&gt; a; I8 n, f8 D6 p, z
64 s/ }0 T7 G/ J1 n$ l" |  q3 O
// 自增1(先增1再赋值)
- Q/ Q4 `' R6 k&gt; ++a, Z6 [4 R& r% R9 G9 a* d
7) g2 G. s; \. j+ M
// 自减1(先减1再赋值)
$ X4 D/ a' {6 I8 U) Q4 `9 U' c&gt; --a9 h$ Y3 o+ i( _0 R! k- _3 p  P4 ~
6
9 N9 ^3 x2 m- V7 `$ f&gt; a
- f1 |: s* B4 F) z6; e8 v+ I5 K9 e- v2 R
. Q7 A, r5 t% L1 v/ g
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理+ B. T- k/ Z% X2 ~4 k) z
</code></pre>
" W0 K- ?/ o9 [6 y5 m! _<h4 id="242-比较运算符">2.4.2 比较运算符</h4>* s3 q9 v! e: K; ^) X* L4 ^
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ D" J  _; K+ |. r) O) ]1 s' G/ N! E
<pre><code class="language-javascript">// 大于
% J7 z' ~5 a3 s&gt; a &gt; b; Z- Q1 \" {8 a7 V9 Z. C9 `, M
true, b( y( [: W2 V
// 大于等于
7 w* c) z8 b' t7 \2 Y. j  D&gt; a &gt;= b
, L9 |& u8 O, g6 utrue: f6 ~  x% K6 _: M
// 小于% T5 @! a% {4 T0 D4 u3 b. ~/ r% k
&gt; a &lt; b8 E$ _6 F) a* \& X/ l' Q
false9 D1 q& d5 I: O& @8 v  ?$ \" S; i
// 小于等于
& x9 L/ u* \- u+ p8 g&gt; a &lt;= b4 Q* Z' T; S. ]* Z, v" F
false, u4 p6 y  m# v* }# g. C
// 弱不等于
  ]" n9 [4 k( [% L! L; |* O&gt; a != b
9 a3 j) f0 I& _  F1 I4 P% E4 A, B" T2 Ztrue  Y& j/ G& N2 p. Z
// 弱等于
! X- U: _. J3 v! C' w&gt; 1 == '1'0 v2 c; b9 F7 ^3 y6 M; c4 U6 }
true
' i& \( o0 ~8 W1 O7 k4 R) ]// 强等于
* q) L$ P/ y4 j, Y0 Q2 F&gt; 1 === '1'3 K  x( F4 [3 u. e
false
& v$ H- n! @/ L// 强不等于
$ h3 b6 [$ X: m6 Z7 a&gt; 1 !== '1'# p, h, A$ ^1 X; x
true' q/ P% c) D( ~2 R% O% d+ }

0 @- j' ?- I" b( S) y3 `0 T& B: d" l4 K/*% m/ e4 I+ F) x% H0 @& ?
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
' Y6 s7 U/ s" I  c+ V; t9 u5 G3 L*/
2 p: J3 U! n/ z% j</code></pre>
" t, \3 n! F# _, \<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>$ K7 [% {4 r. q* g* [2 E
<p><code>&amp;&amp; || !</code></p>
) F$ ~3 H8 ]$ {1 i" {8 `<pre><code class="language-javascript">&amp;&amp; 与/ R0 a+ h" R. e6 B
|| or   `8 s1 h. V; G8 O
! 非
+ Q1 o! O  K- S! P" [</code></pre>
  ~4 J0 E0 K4 }" m0 _, s' d( M8 `<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>* D% M& X) `$ L% z! ^4 _) J
<p><code>= += -= *= /=</code></p>* n2 r) E% Y& K6 s7 m4 G
<pre><code class="language-javascript">// 赋值1 K2 C( J" N& V" L. _& l& w
&gt; var x = 3
2 c; s9 Q6 u- r' Y, j// 加等于& }  h4 L7 c! ]) b9 P# Q
&gt; x += 20 c' \5 F, h1 C: I
5
" E. ~2 K' \6 o9 }! l$ B// 减等于
( X7 j8 A0 k9 I&gt; x -= 1
& l7 a# j& U5 a4 F4 u# I( D/ G4
; F- F+ \, S* B// 乘等于
5 y" _( p+ T: p6 f8 s&gt; x *= 2
- n' f6 D) X# S87 p1 ]3 g7 Z4 T
// 除等于  [; y) G" Y" |+ X7 ?2 U( K3 J
&gt; x /= 2
. r% f2 X+ s' t0 O% _4
; [: c7 R' F1 D  u0 ?( Y</code></pre>
* n8 S5 n. n; W: A0 p0 X! ~<h3 id="25-流程控制">2.5 流程控制</h3>( ^. v! j8 q# [% a& ?
<h4 id="251-if">2.5.1 if</h4>
, `; Z2 d4 l: y- @! r% d<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
/ T% C# x7 `$ E( v
4 p) O( n- j2 l  i) n# q; M# e5 q0 c0 f&gt; var x = 3; n1 a4 `. ]4 y% a$ `
&gt; if (x &gt; 2){console.log("OK")}
5 l. O* u4 {) L; h2 @ OK
; H, V& b9 ~" Z' e* V# i7 C/ ^0 M; h6 V8 [; g7 F
2, if(条件){条件成立执行代码}
! P5 u0 w, H# }( |; o        else{条件不成立执行代码}- g. `6 [% e  N5 A$ @" X# p2 j

3 ^, `4 [! r+ W4 N4 b9 K7 _&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
- A' ~# W* b. ?'NO'
6 i4 n; c% E# I* o: u# E: {. C+ V7 q3 A, Q' r  U5 M9 A& p
3, if(条件1){条件1成立执行代码}
( w+ l* Y, n3 }. o0 J' K9 x        else if(条件2){条件2成立执行代码}% G  V" i2 ]3 D5 X  w/ H6 |$ v- p
    else{上面条件都不成立执行代码}
( z( t( n! p/ o0 F2 `1 S5 [/ F% t$ k2 ^3 x1 G- A" M/ K) P
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}0 D. l$ p- l9 N: v. y# b
Ha: u% @4 z' L' F6 c  M- q
</code></pre>
. E2 U& |# r. y1 b% E' H/ j1 x<h4 id="252-switch">2.5.2 switch</h4>
( o' u! ^9 N  x$ I) c<pre><code class="language-javascript">var day = new Date().getDay();
1 J! h) J1 a+ X* ?3 u+ \- gswitch (day) {$ U& i- ~: d: |" D' h
  case 0:! y3 U4 a% v2 o
  console.log("Sunday");
* y, A( [, d2 `' G' J& X  break;
  ~1 p7 y/ p" W7 Q9 z  case 1:
  R: F% X$ g( j6 c3 c  console.log("Monday");
1 I. k- l) [* ]& {2 ^  break;
! N, ]( t5 B; udefault:; L+ g' p) M$ H. j
  console.log("不在范围")8 R6 N, ~2 R, }, Q( B  ]
}8 r/ r% g7 y  Y
不在范围
8 b, s8 m+ r) k, a3 E</code></pre>3 }& d$ g! J: p7 {- K' h
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
# y' i6 W& x/ o6 `1 s% j<h4 id="253-for">2.5.3 for</h4>
- v2 f. K& T: {  e1 A- ?% O5 w! p<pre><code class="language-python">// for 循环
2 [3 T# {% q' Q. N3 Z        for(起始值;循环条件;每次循环后执行的操作){& J: u/ `* k6 n9 ~5 M
        for循环体代码; E/ a% ]6 X& o& B& ^4 _# e9 h- a
    }5 k6 B0 O" m+ U3 \

5 |. `# I, A% `for (var i = 0; i&lt;10; i++){
9 k1 T8 Y  w% d    console.log(i)4 h5 j5 r( \) x
}
8 a7 J" Y0 _% o        0& P5 s/ j  `8 W9 T! j/ T) ]
        1
) S5 e* K6 I+ D" U        2
/ t! s& Q0 ]. \1 g+ w* n        31 T( S# \7 Z- Y  r" w
        4
0 H0 c: x3 |4 T& t4 h        5
/ D- [3 C/ d; K8 J        60 N2 y/ v" h. y$ ]& E
        7
0 {, o5 v. ^+ G0 @/ z- ]. }/ w        8
) g2 l8 l1 Q. y0 j9 N        9
+ t! H, f' x( D) a# a: h</code></pre>
$ p. n, n* ^/ h9 z  y<h4 id="254-while">2.5.4 while</h4>! `; \. ^! G. X) C  V
<pre><code class="language-javascript">// while 循环. e3 y" T9 o+ g# m( w" c' b7 [: `4 n! L# e
        while(循环条件){; T8 S" R& W. H" T- Z* V
        循环体代码$ H: E. w' I! M* W
    }) O$ J8 d; g& ~7 o0 x
$ i/ q% f  q6 Y3 |
&gt; var i = 0
8 z, F5 k2 t  W# U  l&gt; while(i&lt;10){
2 L+ }# h7 p- S5 Y. S0 f    console.log(i). W2 _& C. O$ y% N
    i++
: P" m9 @* D0 n( C& Q0 E2 w}
' c0 |$ d+ c, j5 D* K: q$ U0 U# C# y4 ? 0
, g# y8 Q5 S3 Z) ~4 ?% S9 s 18 _0 B' j6 m8 c' q
2
; f  k9 U1 Y, l* ]1 b! Z 3
# U7 X6 @" V# x8 ]! g0 u8 K 4
8 ]2 Q+ W' {5 p) _4 H: j$ y 5
' H) p; `# I- K' S7 j! w+ j0 r 6: ^6 ~: m( y; {, q$ d; ]: o
74 X; ~0 R0 T4 r; C
8
, J  Q4 G/ c6 [ 9
; Z- S5 ^/ Q6 @' Y2 G</code></pre>/ v5 d, x) z+ @
<h4 id="255-break和continue">2.5.5 break和continue</h4>* W# g( j9 x" S" y, p% G
<pre><code class="language-javascript">// break
* n' [- j3 V/ u6 N; @: ]1 c8 L8 yfor (var i = 0; i&lt;10; i++){% v/ ^& O' y2 L5 q3 s8 }
    if (i == 5){break}! Z0 z8 R6 z% l3 Z' \2 N) A/ |
    console.log(i)
, y2 |$ c1 A- U% C6 ?}
# a* i8 o  s6 C: a; ?* v* Q, l' d 0
% ^! l* D* h) V6 v3 g* B  k2 x 1
6 K' R' J5 v& O/ _ 26 ~( A# J9 H9 R3 O+ l
3
3 e5 Y! o/ O+ V+ k8 R 4
+ J4 t. b; {: D& G2 h! p// continue. q/ K- I9 o+ O1 g5 U
for (var i = 0; i&lt;10; i++){# ]6 N6 o$ W& ]2 |' j" d9 D5 G
    if (i == 5){continue}: J0 y* P1 K) s7 ]6 j
    console.log(i)
9 V  a7 C3 s- }" P}- e" r4 Y6 c5 @$ P! d
0
: I1 p' G2 N1 Y. A3 {% z; L 1
) ^2 a# G& s+ T1 n 27 C# U( r" \' ?
3
+ f6 k& {. d9 [/ B$ s9 `; A 4- {. X1 `8 S: S& P8 x
62 Q8 ?) P( Q& w! c  i. o* M( \
7' B+ P; m/ m1 E% \$ B3 O- d
8
# [& \$ v9 I. _6 O) s4 X* ?- A$ _ 96 g& k: t' \# F- n+ I/ c6 \+ X
+ t6 j$ s0 ^  p/ Z' p0 P& G
</code></pre>+ m( L3 O6 R, W9 }* i
<h3 id="26-三元运算">2.6 三元运算</h3>4 R' M; f! s3 s) {& [
<pre><code class="language-javascript">&gt; a! L+ H# n/ a0 h- j# ~2 k) G+ A
6* j; H5 r7 M; Q0 X" o
&gt; b
% t* u' E: k$ h( ~4 @$ S# L! ?1 i5 e, k3: r5 q+ J# z6 @0 T8 H: n, Y

' K$ F0 K$ c3 C- Z. l  d//条件成立c为a的值,不成立c为b的值
+ e* v- X7 w+ I2 x6 Q) |$ t2 M&gt; var c = a &gt; b ? a : b1 \+ X! x" }! G
&gt; c) l- H) K' D/ }* [! X8 H
6
8 m; K) J* h  A1 m, w: x! e6 @6 M2 H4 A, c/ F; r$ j
// 三元运算可以嵌套' D; k" m  l5 D9 k2 _3 e
</code></pre>9 H5 J# u/ }" E+ t0 p( ?- ~
<h3 id="27-函数">2.7 函数</h3>
* {" ^0 K% Y# z+ w: U<pre><code class="language-javascript">1. 普通函数; h( W) f$ F- U$ q6 X2 ~. j3 @- `
&gt; function foo1(){
2 l) e+ g/ b" ], @: n    console.log("Hi")
' j7 T: U0 X2 s, f3 A}% I! U; i5 D7 E: N( p% A

; G. a; Z2 }' z&gt; foo1()
& u' O' M, Q& }+ t5 B) g; @        Hi+ l/ a  ]: T! D) ]6 q3 R& P* n. i
2. 带参数函数
5 N8 B1 F$ K0 ]# y+ e; u9 A0 Q& ]&gt; function foo1(name){
8 H  ~4 F0 P; C# H; b# ]console.log("Hi",name)& z5 G+ C8 z: r* `' C
}) V5 f: ~! X( ?, m; ~& T' ~7 M
  x; H. H8 B' \
&gt; foo1("Hans")8 ]; n/ {, m6 A# U4 D% G/ Y+ v
Hi Hans
# b, U* |' g" C4 m/ x: m3 d$ }6 H% C  X# A9 F  J# o
&gt; var name = "Hello"3 I, l* n6 @% o2 Q& P; U3 Y; ]
&gt; foo1(name)
, g+ F2 j( `0 ?1 \: z5 UHi Hello
* H3 U7 M! H; ^. ~+ z
  R7 G% `- f5 T, n3. 带返回值函数- m* e0 {2 I% Z+ P! l* d
&gt; function foo1(a,b){
: n5 B( e5 l5 ]: _  ?; K        return a + b   + Q0 G8 V# H8 `+ O4 G$ {6 P
}
- ^6 Q. ?- @1 }! j4 C7 }3 d: k) D$ a&gt; foo1(1,2)
3 G5 P8 ~' v1 g" r; N: h3
) X# q* D4 l7 U) _( i- @&gt; var a = foo1(10,20)  //接受函数返回值' t3 G" D6 v5 t* |% v' T+ B8 S+ `
&gt; a
; B4 p: {+ F% S* D301 k3 w; b1 D+ y) ?/ l- e2 f
. Q# P0 i: B1 q: V+ b& T* ^
4. 匿名函数
; \* p8 F/ G% O&gt; var sum = function(a, b){' x1 a9 J  O6 M& h4 F
  return a + b;7 L2 |& g0 N" Y# c4 r) |. T2 \
}1 ]8 O: h, \$ L( }
&gt; sum(1,2)
* f0 C6 S+ U9 n7 c9 c5 T7 [3
3 S# w' ]% Q' Z; M3 s+ V% o+ o5 q& x% N8 ~/ e" G
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
- _( M7 x' B: j! z% {&gt; (function(a, b){0 v, y: o- S5 u  c( c
  return a + b( K5 E* i! X3 _' V' z
})(10, 20)( h5 w$ d) i2 e
30; w" u/ O6 w+ T  X4 z( M/ V! b

/ m9 W8 q6 H" T6 o! H5 d; a5. 闭包函数
; X$ c& T/ g. E# H* H$ o5 A- I- w// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
+ h4 F" f' i% r9 S' z$ ?' Q( l9 _var city = "BJ"* {7 a9 T- o' ]3 P6 M9 @
function f(){
' B( p9 n6 x1 d) D& c5 n    var city = "SH"
/ ^' ]( C6 G( t5 e1 |    function inner(){* v  k2 h1 ?; }' b4 g; z, s
        console.log(city)
: c4 O1 T6 ~2 \/ c3 Q$ B6 x! |7 ~    }, T/ a0 G. q# w) {3 t0 u
    return inner' @8 H3 S7 m% j1 `' f$ `$ A; c
}
4 r* J) U: A5 ^; Svar ret = f(), V+ M8 c* @: c
ret()" B& A# z8 @* D' C9 ~6 ?
执行结果:
- v0 P* V; B' ^SH, q1 l7 r: x5 x2 x. Q) N! x
. ?: v) [9 d0 G
</code></pre>
" g5 u7 @8 N  `! s' G4 i- L4 x<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
: C- z( g2 Z& l% V7 n+ c<pre><code class="language-javascript">var f = v =&gt; v;
# a8 n, \7 r8 [5 I// 等同于
: P' Q- H' l3 p. C6 o+ C. Vvar f = function(v){
( t; J4 e- y6 `! j' E7 v$ a  return v;6 Z5 B5 W4 [, V+ C' V2 ]) t; J
}0 V1 h' j  H+ k
</code></pre>
) s/ g* w" q* ?0 q! B& p+ ?2 r3 T<p><code>arguments</code>参数 可以获取传入的所有数据</p>
& U4 S0 L+ ?4 @5 b3 ~8 l6 Z& C<pre><code class="language-javascript">function foo1(a,b){7 h& h" o; Z5 ]/ X, Y" `/ f2 X
    console.log(arguments.length)  //参数的个数
! T* T7 F2 |/ i+ F    console.log(arguments[0]) // 第一个参数的值9 P  f, D* z  Y- \% w# q
        return a + b   
. _, b" W, h; i1 i}
" p& H( e0 f$ e1 @4 o# e5 _foo1(10,20)# Z* I& V; [9 n1 Y; e
结果:
# {7 y" f7 W: L9 Y) \ 2          //参数的个数
3 k) F6 y/ n/ c- M' I# u10        // 第一个参数的值
8 a& d' i3 _4 k7 V/ r30        // 返回相加的结果: u2 W. y; X/ m$ I/ E6 M3 }
</code></pre>
* I3 M% S, h" ?) a* S<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>/ [9 t7 t0 x- h6 ~% S' F
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>/ ]( \7 J- y$ f
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
) ^) F! B8 k9 T3 S2 J<h4 id="281-date对象">2.8.1 Date对象</h4>* N6 }, T" b5 x, ?' V
<pre><code class="language-javascript">&gt; var data_test = new Date(); @$ L: c1 Y8 d
&gt; data_test
* v7 g8 ?+ j$ b* t! E7 Y' eFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
5 f7 G% s2 G6 y3 T8 P4 T+ l&gt; data_test.toLocaleString()" [* O; u' Z4 j+ K  j$ B
'2022/2/11 下午9:44:43'
6 m" p0 w1 |- Q4 S$ \, k: N9 `2 v( x/ ]. I5 n+ d2 u  A
&gt; data_test.toLocaleDateString()6 J2 |2 R  v# T4 Y+ [. e
'2022/2/11'' }) W9 y1 [7 G, n& t2 o

3 d2 d+ U6 X% N# ]8 [&gt; var data_test2  = new Date("2022/2/11 9:44:43")
, N7 W* k+ k/ h) D" H- a" h&gt; data_test2.toLocaleString()8 Y: {6 D: L$ `6 k+ E; y% r
'2022/2/11 上午9:44:43'
1 M$ F! d& Y& `: i
6 g- D* _; Q- s  j# t// 获取当前几号& y# ^% o( c: A7 }$ Y1 l
&gt; data_test.getDate(). F" \* x3 D; e( m& Y' ~2 u; z
11
3 l8 h3 K! U4 l// 获取星期几,数字表示
1 g1 o+ e$ N, W& O$ n' X# r&gt; data_test.getDay()  
3 ~$ s+ d9 Z3 c5* @3 B. I+ z/ y' [3 U1 D
// 获取月份(0-11)* w" H: [* J" C
&gt; data_test.getMonth()
. s2 x& e& ^3 e% d* }' G3 @# P1$ W" S/ Q0 y: o6 ~% M
// 获取完整年份1 G9 [: B$ S* ~5 M) w
&gt; data_test.getFullYear()
& G. }  ^% t  b. n/ P2022" U' _1 F. m* W- W
// 获取时% H; U$ P9 ~8 n4 U1 z1 V
&gt; data_test.getHours()( l# N% d3 Q9 k! ~
21
3 [6 K- k, u# W1 M- H5 D8 @// 获取分( p5 E0 T  D7 G: ?, R. E$ n
&gt; data_test.getMinutes()
! X* i2 V* E& V( _) p7 ?44
, @0 r+ S: b6 [, z/ Q5 N6 a) V/ t// 获取秒; b2 O! J5 E$ m- N
&gt; data_test.getSeconds(). d$ y8 o+ a* K- d; K2 }
43
+ }* ?& j: C$ G// 获取毫秒
  [3 J9 F- j! |( e. _&gt; data_test.getMilliseconds()
! i1 k- i$ _2 y2 y290
2 G' C# W. p2 ~2 p9 T// 获取时间戳3 N! r6 }- t3 c- E
&gt; data_test.getTime()  ]$ Q; _5 K0 t, f! R
1644587083290
$ n0 B9 [4 s& O' C$ i5 k! A0 C</code></pre>; z  f0 T  @2 f
<h4 id="282-json对象">2.8.2 Json对象</h4>
# i5 M% Z* A/ e5 i<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串- ^2 Y7 _  d: n. |# _. _
JSON.parse()  // 反序列化,把JSON字符串转换成对象& N2 z2 f( ^3 Z6 N

0 L. K! {% c8 z/ ^% {* {// 序列化3 a2 t/ G$ ]: @1 h
&gt; var jstojson = JSON.stringify(person)
1 ]" O8 J. `3 o% F&gt; jstojson  
/ @1 I) W8 e8 G# w. Q8 \$ h'{"Name":"Hans","Age":18}'3 A2 X, x+ A! z- C

. l# w9 M6 W/ m- h1 F0 H// 反序列化. s. D  o8 [  x  `* f9 a% p
&gt; var x = JSON.parse(jstojson)
0 k, _9 G6 {: G. d5 H&gt; x- f; n( w: }5 m7 N/ O! Q
{Name: 'Hans', Age: 18}
0 k- B+ i# e% ?2 B8 b&gt; x.Age  C- ?. w% J1 M- z2 |3 g6 X
18) }4 V& H9 S! ~/ {8 r* ]
</code></pre>
$ ^3 i: G! V0 d' t" e" c- B1 ~<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
, j5 f: }1 ?8 D/ C! B  ~' @<p>正则</p>
% D7 o/ v3 }: b6 h- @8 O; x) _<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
& |# I% Q7 V, \9 F0 n; `&gt; reg1) X5 ^5 k' N  d9 O  o
/^[a-zA-Z][a-zA-Z0-9]{4,7}/- X% _. ~8 U  G) u% W& _' H7 Q
&gt; reg1.test("Hans666")
2 h: M; O( l8 R* gtrue7 g& R) T7 F, X. f

# h9 ~% o2 K# j, h5 }& B&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/- ?  G6 {# s7 Z  G! N8 D
&gt; reg2
" l+ K& c8 Z: B9 Z/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ Y5 p; o0 X) ^* v&gt; reg2.test('Hasdfa'): ~+ D- b2 _/ f1 U9 m& {
true
( m- v+ O& m) M, t/ ?$ `6 T; t. p4 {8 a/ h5 o
全局匹配:
. h% @  Z% `- r3 b* h! e6 E+ Y+ Z&gt; name3 {" j3 [9 ~. T  F2 Q8 d
'Hello'
7 Y4 N+ v. r4 U5 |$ f) y7 n' f5 b6 J&gt; name.match(/l/)
9 Z# C" W- s2 J['l', index: 2, input: 'Hello', groups: undefined]  O  Y& W# A- I6 \
4 d5 z9 c& d3 v& U% V4 q( t6 d
&gt; name.match(/l/g)5 V9 o/ U! R7 Q5 n
(2)&nbsp;['l', 'l']4 V/ k* I% T# f+ r
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配  g! C1 t. y! e1 a: ~3 z

" k; h" f7 f6 u. P2 W  E7 F全局匹配注意事项:
* E, l" O$ r- h& j& |$ \&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
; k) Y4 C4 D( e  `0 R' g+ L- l&gt; reg2.test('Hasdfa')
  r3 d8 _# o4 D7 _6 I0 Htrue
+ u4 u3 ~4 N& t/ x# E&gt;reg2.lastIndex;" \& K1 R) S2 F4 z/ @: g2 v: Q
6
( o% e( i# E! A: ~/ J: p$ M" D&gt; reg2.test('Hasdfa')  L- m! b6 c: t3 w
false
! G1 {" p/ A  R8 W; p% j* d) c. h&gt; reg2.lastIndex;1 o: m# J/ n3 q$ Z* y$ {
0
8 K) a# S  e9 `4 V3 F&gt; reg2.test('Hasdfa')* N; O# E% C7 z& \- e5 h
true
0 T8 R  v( y' A& l, K% z, w&gt; reg2.lastIndex;) P7 E/ W7 x# x, O. K% G
6+ l7 V$ w% s, K' e, h  H6 o
&gt; reg2.test('Hasdfa')5 H: E: m; A7 e, N2 ~; U: U
false
1 \; D: n& A3 S- X. c! ]- t&gt; reg2.lastIndex;
' Y5 A% U1 E$ \  _, ?00 M. b  Z7 c' K% R& B- H3 M
// 全局匹配会有一个lastindex属性. u) e" o' [  O5 e
&gt; reg2.test(). [. o1 t" [2 J) l
false. c, @2 J" @% G! d" B' t# g2 b
&gt; reg2.test()
% `% o: x' @9 i% Ntrue
5 H6 {  U# g; f$ B( P1 t// 校验时不传参数默认传的是undefined
5 K7 g9 z1 Z! y* Z3 t  [</code></pre>6 m9 ?  G1 W  |
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
8 l  E# O  c4 n5 ]( c<p>就相当于是<code>python</code>中的字典</p>
/ Q" B0 j# F# S<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}0 V! `* N6 n' V/ s; Z
&gt; person! `; T  d! W9 s6 t9 C; m6 j1 U9 ]
{Name: 'Hans', Age: 18}/ i' [4 ~* l/ \8 e0 w/ R- I
&gt; person.Name
$ s* ?4 e$ e) a' K'Hans'
  b/ a  O: k. W. x/ Z9 g, V&gt; person["Name"]8 C: s# ?) t/ r$ ^  `4 h
'Hans'; x  {2 A+ l: {0 a

' V2 f! g2 d+ k; [* ^- f// 也可以使用new Object创建
9 r8 ^+ x0 C1 [/ A! B: X&gt; var person2 = new Object()
! v: i) M/ o& V&gt; person2.name = "Hello"
% I( z& N7 a8 g/ ^3 m9 X'Hello'
: q! ~* p$ C) \, I' \: o' z' Z& s6 N+ S&gt; person2.age = 20
4 p0 s: k' X9 K- s8 d% ]& o20
: e0 w. P9 i: E9 T- x; I- i- x4 X" D</code></pre>, R) b% Z# C* d/ P" r$ \9 A4 K2 ^( a
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>8 k2 E: \" |* n1 n; r- K1 B
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
2 g% ^! _; u! J, a$ m9 \3 q<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
/ J# c& M$ N' I! R# U8 F$ W<h3 id="31-window-对象">3.1 window 对象</h3>
+ c: G* |7 h1 m( p6 G<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
! ?! l3 _! g2 R/ u; Q& E: M1 z0 i<pre><code class="language-python">//览器窗口的内部高度
: J5 ?4 x+ F3 f) N8 Ewindow.innerHeight
; U; A$ f" L4 S6 {& o; @6 P7 Y706
& H% r4 B/ {% y6 Y//浏览器窗口的内部宽度8 l. W% s0 V! T- d) `
window.innerWidth' D. _9 v" S) u( _# L* N" y& N
1522
7 F9 J+ s2 H) P7 w) q' W+ Z// 打开新窗口
& `& l$ m" {" S, A* Ewindow.open('https://www.baidu.com')# H9 E" h1 z2 L+ }
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
; I# t* ?) G/ s2 p// 关闭当前窗口2 Y0 W% @/ O% e  s/ x- ?
window.close()
! O  W# l6 J; K' G( x3 n//  后退一页
1 D5 S% X- ]( R& F$ y& B6 @window.history.back()
4 b0 Z/ b( D( n% T0 u& X// 前进一页9 N. ]" ?9 e6 ]2 ~) `
window.history.forward()
/ P" I  w0 X8 F/ T( d//Web浏览器全称
  E! `0 K/ N! a' n5 d" V! j" R4 dwindow.navigator.appName
( a. [, a4 O' P9 D: E0 r$ v1 S# ^5 b9 ~'Netscape': M" T" w& o: b) k
// Web浏览器厂商和版本的详细字符串7 v1 k: Q* c9 c! q
window.navigator.appVersion- ?' s& P6 ~: P
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ N' t% _; L) P* R
// 客户端绝大部分信息
$ C* \0 Q' \2 n3 Bwindow.navigator.userAgent" _" G- {1 b) E! B& A2 Q  a
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'% L( h2 S  L; W- g' j  d8 |" {% U. c6 ]
// 浏览器运行所在的操作系统
1 V' \3 M7 K) i; jwindow.navigator.platform0 T! }+ ~2 b) }" [6 y' r4 Z, x" l2 O
'Win32'8 v6 i7 }3 [: u/ w8 h( K; ~
: K1 w* r$ O( q' q1 H
//  获取URL
: g1 Y% J: k2 X/ {5 a( Awindow.location.href
; }6 q) f) A7 X// 跳转到指定页面* |+ p5 Q9 q( N9 Q. N! U
window.location.href='https://www.baidu.com'
6 I* a& X- [2 B* P3 w5 a6 w' X  ^// 重新加载页面
- X1 W6 \/ I- n  e4 X: `( Swindow.location.reload()
, O+ z0 R# V: R$ u& T1 U) ?</code></pre>, e# d  s, m% }" t0 q
<h3 id="32-弹出框">3.2 弹出框</h3>
2 M7 M2 G" Z3 z+ U4 {( y: b6 b# r<p>三种消息框:警告框、确认框、提示框。</p>
5 z  n& ]7 v6 V9 v( Y5 P7 f<h4 id="321-警告框">3.2.1 警告框</h4>
9 p. D/ F7 X& d& _<pre><code class="language-javascript">alert("Hello"); g+ d! E2 f+ y  r7 R/ a, ?" H
</code></pre>0 v- W- d/ {: i$ t" P  T2 t: |
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>3 I- ?! \; B7 G5 o
<h4 id="322-确认框">3.2.2 确认框</h4>
( s- W6 y; m; U" @6 W/ [2 n8 D* L<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
! w8 j/ z! ?1 M) j<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
" S: w+ ]2 `# A% otrue% `+ n" b' k8 ~" l" k  q0 L
&gt; confirm("你确定吗?")  // 点取消返回false2 |& ]9 ^4 ]" [& ^
false
7 u% K/ z6 e  U3 k: `* M4 e5 k3 f</code></pre>6 P3 V6 I  `! G  \8 ^2 v7 s
<h4 id="323-提示框">3.2.3 提示框</h4>
9 M, E4 e$ s  j0 X% g  [<p><code>prompt("请输入","提示")</code></p>
9 p% D; g! Y  e<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>9 \# p- ]! B, b! j
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>" f- f( K6 V0 F( P4 x1 a
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>% x+ F. D) C/ z9 v; h
<h3 id="33-计时相关">3.3 计时相关</h3>  l9 B5 F( B% P
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>& a. K1 r* L! ^7 u) f( o
<pre><code class="language-javascript">// 等于3秒钟弹窗
" ?: f$ ]$ u% psetTimeout(function(){alert("Hello")}, 3000); y2 U+ v+ J# Y6 G& T

( t9 @( q* Q' Q9 A# A1 j8 N2 Zvar t = setTimeout(function(){alert("Hello")}, 3000)+ o' V$ E( ^. w! z

- S1 o1 v; L. Z5 d& s// 取消setTimeout设置
" k) S: u; y  J; p9 WclearTimeout(t)" C. j. S. r( H  m% b
</code></pre>$ R  P' E' x% Y5 D# Y! D* o& V7 _
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
: I) I- x6 _& F( O5 d<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>. }8 W' l1 q1 y% X0 ~
<pre><code class="language-javascript">每三秒弹出 "hello" :6 d  O, b& R) P, ?% \" o
setInterval(function(){alert("Hello")},3000);
( i2 f; _; k% V2 _) s' x. h" j# w</code></pre># Z4 P' k7 M' \6 p; F- x5 I
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
- W. {$ n5 S: r# `; @5 g<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
) Z: c8 w( r. B2 C6 M! E7 P. b% L//取消:* s. x& i0 x# u- t9 R
clearInterval(t)
5 @; q" c" G% t  k, W# W3 T</code></pre>
4 |0 S1 k  p& T3 n" C. T% x" q  `
3 I' c$ Y7 _3 f0 d7 d
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-10 22:34 , Processed in 0.072331 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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