飞雪团队

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

前端之JavaScript

[复制链接]

8117

主题

8205

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26681
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
7 A( i1 [' C: D* M+ ]8 k$ b( f
<h1 id="前端之javascript">前端之JavaScript</h1>: b+ l1 ]9 z5 |5 y. @
<p></p><p></p>
$ J4 F) [& n7 G2 c& R3 e<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>& l; |! c  [" m& Q
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
( D! f2 j# q3 F, {( B' V) f它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
  i' m9 Y9 N7 H& m# T1 \7 ^它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>7 z! b$ v# J: ^* q
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
- _: W! ?- [6 O" \<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>6 |3 H* Q0 V- J" s0 }4 }1 F
<h3 id="21-注释">2.1 注释</h3>
2 H' y6 h6 c" |3 H<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>% v( S5 m+ s1 ~
<pre><code class="language-javascript">// 这是单行注释  L  O/ f1 Y- l

: ~; v. ]" Q; n5 u" J/ i; V) x5 }/*4 ^2 j# F: E3 K9 o6 {6 |
这是多行注释的第一行,5 @0 Y! j' w4 X
这是第二行。& a1 N! M9 ?4 |: z
*/8 M) s! s2 X2 d, ?5 S! c
</code></pre>( g; v- O' J, W2 i' J% l
<h3 id="22-变量和常量">2.2 变量和常量</h3># \7 o+ L, c, {
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
3 f6 f( M$ m7 n6 b<ul>
- f& d( C4 r6 c<li>变量必须以字母开头</li>8 o3 D2 h' A  W7 A  e
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
- X: g6 ^5 y! E  m<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>) R& v, |# a) |' G- X- W+ }
</ul>+ \! W1 z/ H1 Y5 w
<p><code>var</code>定义的都为全局变量</p>  Z. _% I. g' l4 _* P
<p><code>let</code>可以声明局部变量</p>
0 i* Q$ G. j) |( g9 `3 ]! j! w<p><strong>声明变量:</strong></p>& |8 Y5 z3 B, S4 N4 A6 d
<pre><code class="language-javascript">// 定义单个变量
. F% w8 m/ P+ @. L( _7 [) a, b&gt; var name7 i- L' X* p6 [# G! f7 t+ X
&gt; name = 'Hans'
4 b5 F, }' g% X2 b2 E. `//定义并赋值- V6 W/ U9 J+ K. T/ x( j7 ?1 O
&gt; var name = 'Hans'2 s4 b& d1 m! t( ]" N* @; w
&gt; name
3 P0 F" K% I& L( z" d# h'Hans'
3 R% ?- e6 U9 s) `' e3 I4 o* R9 q# k  S9 i
// 定义多个变量7 U) x9 }) u# m6 T1 p8 [5 Q  {" s
&gt; var name = "Hans", age = 18
. ^7 s3 X1 g7 e3 K( Q&gt; name
. a# ~% s! A2 n) p+ t$ s8 |; N+ u) q'Hans'
8 k: l$ @: P" r( A2 b&gt; age3 Z& ]' a2 W& ]! O7 q
18
2 B% s; E, N( M2 W) M
) d, J* X# z3 Q9 \) I. w" W  D) i//多行使用反引号`` 类型python中的三引号3 ^1 D/ a+ Y" u+ _
&gt; var text = `A young idler,
0 u" b* `4 p) t% qan old beggar`
! R- D: N. `' \& z8 w" l6 p0 g&gt; text
- W* y, _. s$ m+ l'A young idler,\nan old beggar'
9 j2 s% }3 A8 C' c</code></pre>+ v/ Y6 s# Z1 i& X% M
<p><strong>声明常量:</strong></p>
2 G  w  Q* W) h0 b2 C2 Q4 n6 c<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
; h3 c9 a. p+ c0 P4 ?1 Q: J<pre><code class="language-javascript">&gt; const pi = 3.14: W. n$ U2 Z" s: |( |3 y+ l) L9 a
&gt; pi* j2 j0 L  ^# n% w! t+ f
3.14. R2 T* v9 e6 p3 \9 m* E
&gt;  pi = 3.01
. Z, ?0 I& K7 `4 Y, ~) GUncaught TypeError: Assignment to constant variable.
' J8 g# K  S% f% D+ Q% p, w( V    at &lt;anonymous&gt;:1:4& w; }2 d! {% j, t# f0 A

4 L( {" w& F3 u3 V$ u) ~1 Q) s</code></pre>
7 H  H; E' e" ?* F2 m/ @<h3 id="23-基本数据类型">2.3 基本数据类型</h3>& E; {4 Q- x4 G# q8 t; u
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
! i3 L2 ?1 k; o# I<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
% K6 q$ }: f+ H) ?6 Q- R<h4 id="231-number类型">2.3.1 Number类型</h4>. Z; I+ N) A/ p! e1 U
<pre><code class="language-javascript">&gt; var a = 5
' f- I. S) N% ?! y0 Y3 _&gt; typeof a   //查看变量的类型  
( _9 K3 l9 I8 K& N; d# J; B/ Hnumber! G0 {( Q; N# M" Y
) R0 I* }$ l! }8 {6 W  f- U
&gt; var b = 1.32 {. L' m5 [9 x2 w# E
&gt; typeof b0 C, ?3 I& J2 k6 }& P
number
3 `3 H  W$ ~2 F% Y
0 o! p% J# v9 {$ G' h( e// 不管整型还是浮点型打开出来的结果都是number类型
6 d4 x! X5 f2 a" j  W5 \; i
- b2 D8 s% R$ E/*4 l. J! ^0 F' z# v
NaN:Not A Number1 R7 Z+ [% P% s
NaN属于数值类型 表示的意思是 不是一个数字, {, W' q' Z6 |" P# [& o
*/2 h  Q" ]& O* \
6 e3 h) U# z- C" K2 K4 m
parseInt('2345')  // 转整型( S7 Y# U; M8 m; F# p, e0 Z
2345/ s9 e( m0 [. W! w/ S
parseInt('2345.5'); `& X) B) N+ D7 T) _3 `
2345* B( r2 g. ^) y  h& c& i* ?
parseFloat('2345.5') // 转浮点型) P" ]% H8 J5 K9 `/ m) {
2345.5, i3 {3 F# P, k! Z3 S1 t" Z
parseFloat('ABC')' k( I6 ?6 T+ B$ \& _
NaN
' W: r& [: A$ N6 ]3 u: ZparseInt('abc')
; J/ u; d0 Q9 X' ONaN% D: c0 B5 t9 p
</code></pre>
; z4 Q4 i" b% p<h4 id="232-string类型">2.3.2 String类型</h4>( i  q: C9 N. [
<pre><code class="language-javascript">&gt; var name = 'Hans'8 g/ R/ y, C* c+ P$ l4 S' \
&gt; typeof name: e: i5 t4 I0 T: u
'string'
- q, i! a, [, ?5 w  Y4 q3 P
2 \6 d9 B0 n' L2 u- \//常用方法
( \4 C9 D6 I! W, S8 `  M3 B! m' A// 变量值长度% @9 W* m4 c% n
&gt; name.length, P/ y( D( n8 w: O3 `  P1 U3 O+ j+ T
4
! B; s1 f0 {9 |9 Q" h// trim() 移除空白! Q. w) w" w# W$ u( j
&gt; var a = '    ABC    '0 |5 m0 f% Z5 g; M; M7 ]
&gt; a
7 Z) F( @& n4 @" ]9 K! o'    ABC    '( t* q& D. o- O
&gt; a.trim(); x0 x$ j5 G/ y: H4 ?
'ABC'
5 i7 u2 |" K4 H' q5 d//移除左边的空白3 p8 E1 l4 u0 ]3 C2 ~1 ~
&gt; a.trimLeft()  E3 b) h6 X: v7 ~% q7 S4 N% p1 g
'ABC    '+ S- S4 s8 m; \9 T7 R
//移除右边的空白2 A) Z3 G) p+ Y, Q! i  |
&gt; a.trimRight()2 y# [/ G7 E( ]2 C' K
'    ABC'8 [. z5 J: o, B0 m
" z/ M$ i* G8 V8 L
//返回第n个字符,从0开始$ X( o" g& d1 ]% x& O; I0 B
&gt; name/ V1 P1 K$ y3 Q# b; H9 m! T( l
'Hans'
, P3 K! v( q+ E* ^9 w1 S&gt; name.charAt(3)
- ~& s. V; P. n: U# c7 ^$ T# |'s'
( B9 a# t9 C- ]&gt; name.charAt()4 `# F  Z' L# l& B- I
'H'
" }9 O1 Z. J* V&gt; name.charAt(1)
# D. |  J+ O* |! d' m  H'a'' x/ \) P. {5 N! N6 p; Z

1 I4 `# t( S) k// 在javascript中推荐使用加号(+)拼接4 f/ D; J% \9 t. L5 D6 Y
&gt; name+ d# C3 m* @' L4 a) V- A5 y
'Hans'+ F9 ?6 ]( p, P+ o2 C  t; N* r
&gt; a
5 [' [& K, M) {5 m4 O# E'    ABC    '
- f% E$ w+ I6 D6 h&gt; name + a$ J7 t7 ^" m7 b! u; N' ~
'Hans    ABC    '! M( V1 d: F3 `  ~/ h8 G
// 使用concat拼接
7 l6 @6 c# p& ^- ?/ W% W0 @&gt; name.concat(a)/ K, t" v' \- i) p- T9 _0 z
'Hans    ABC    '
+ r! r3 i) T" C, K+ x7 _0 F1 @0 R  r- b4 Z$ u2 f! [* {$ ^
//indexOf(substring, start)子序列位置
3 r8 [, E- {7 h9 {( ~5 y8 [5 |7 h$ u9 ^. R! x; \( Z* ?: Q" B
&gt; text; _* a* A( f" W) s- _& D9 [) H
'A young idler,\nan old beggar'
$ e; H; [( P1 D& f/ O&gt; text.indexOf('young',0)0 g; F/ u9 P7 L6 f+ _
2
5 C: c; c5 v! B8 N( Q# k. j/ r& H$ @& C. q
//.substring(from, to)        根据索引获取子序列, _8 o, c5 G% V' y9 u* S
&gt; text.substring(0,)+ x+ H% T9 T2 M% [/ ^8 J
'A young idler,\nan old beggar'
8 \% W8 ]6 B4 a0 a&gt; text.substring(0,10)" y6 I0 v& q  A- h, w
'A young id'% s2 ?$ U1 G" q9 {- J# `! j4 b
5 |3 z) I9 H1 I8 X* ^7 K' v
// .slice(start, end)        切片, 从0开始顾头不顾尾
1 @5 l+ J3 F' w  `) ]& |7 r* j&gt; name.slice(0,3)
6 V" P$ Z7 V0 b5 r- X2 v7 b8 X'Han'- ~+ U2 p8 o' P$ |4 Y$ h, E1 }6 ^
- {7 e) c% ~/ n  L2 T* p
// 转小写* A& l) J7 N2 \
&gt; name
7 a1 [) h8 W" L8 q. G' V9 K1 Z'Hans'% n: w8 J5 S2 E4 h- n
&gt; name.toLowerCase()  e" d- H3 n  G5 b5 f" ^( I
'hans'3 q7 K( z# i# t7 v/ I7 |! t
// 转大写) v) `, E  ~. T3 H. \. i' d& v
&gt; name.toUpperCase()
- E# \0 @; |# l3 S1 s* [  L2 J0 Y'HANS'3 C, I- Z4 m/ M1 Q5 f- e& J4 P0 Y. ~

5 C" @7 j( ]' Z: K9 K9 }$ t// 分隔8 S( v3 V3 {$ O/ Y
&gt; name
( D3 q7 w! m) t6 G# q'Hans'4 v+ |5 o. m1 t. [* @) s$ ?* Q6 P. ~
&gt; name.split('a')- x( [- O  o, o7 ~1 W+ ]
(2)&nbsp;['H', 'ns']1 L; X0 w' \4 p8 t* A9 _
</code></pre>
* c3 q7 g' i3 m  a  q<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>8 m* p( g+ M" \( p) D- s, q4 j
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
5 s  u% P4 K6 I! Z- [4 p<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
- i. W  O+ w8 n2 |* ^$ a<p><strong>null和undefined</strong></p>7 w5 M( b+ r0 t& ]1 I+ T, ]
<ul>
  Z% b! l! K4 M0 W<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
0 R! b) u- Y" c5 E, c3 H- S" o<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
( V$ |/ {- b' f9 G9 B</ul>
3 p" u2 T& [$ D, J<h4 id="234-array数组">2.3.4 Array数组</h4>
. t7 b+ S& I" ]<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>2 S  V: X7 U; u
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] , F5 ]$ Q! M( N8 \
&gt; array1" W, o0 M$ e2 c4 R8 `, t
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']! ]$ c) Z- Q% c+ e$ [" `1 ?
&gt; console.log(array1[2])  //console.log打印类似python中的print" r8 B1 C; l6 M  B+ L7 v
33 b9 W- z0 r3 w# l5 g5 h( o
// length元素个数' Z: G; N$ q( I3 U+ A  C6 N
&gt; array1.length
9 p6 y7 t% j9 M. b# z6
% [0 M9 h* h1 v$ i; F. j// 在尾部增加元素,类型append! @9 B- V. T6 M7 a
&gt; array1.push('D')0 q6 ~) C& P  r4 k! @% m7 j
7
, O) r) d5 g! Y9 M&gt; array1
3 j+ o/ M" D; Z2 G: |) |(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
5 N) o9 {3 I' Y! W( Z1 F// 在头部增加元素
  `8 B1 U2 D7 y& V5 G- H&gt; array1.unshift(0)' s5 k4 Z; p. J4 ^
8: A, F- r$ C1 [9 D
&gt; array1
/ ?. Y: b. O4 J" i(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']0 i& \7 h- t' x5 f2 c( t
3 d7 U3 g. d0 M+ ^! X
//取最后一个元素0 ^0 t% X3 d3 m7 v
&gt; array1.pop()' }+ W+ T9 s1 G7 O; ^# u
'D'/ K! ^% I) Q0 B6 p  f9 U& I
&gt; array1
" }" p6 n9 W- g0 c8 j8 i(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
, ^4 ^6 Z/ e$ W- _( e//取头部元素
& M) {; `1 @3 j! y3 u2 f&gt; array1.shift()# w* _8 z) v/ @- V
0( l" j  b* c. r4 L4 {5 c
&gt; array1
: ?- {: N8 {$ N5 @6 C" h- y: f4 p(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 |+ g) e2 j# M, }
; k' e, k) |8 X0 S. [! D/ r; \6 Y//切片, 从0开始顾头不顾尾
' c. B, Y" g) q% L3 H7 }&gt; array1.slice(3,6)+ p  R( F# b2 z) l0 B1 Z6 O4 D
(3)&nbsp;['a', 'b', 'c']+ C1 S& f/ d2 v0 u
// 反转
$ {4 J0 ~1 i* L5 A3 y: B1 s* x$ g+ N&gt; array1.reverse(); v7 a( L4 N. @" _2 t' r
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]1 z( q# n# K7 b% F' F% q" M
// 将数组元素连接成字符串
2 E; _/ [: K' i" C&gt; array1.join() // 什么不都写默认使用逗号分隔
4 R3 J* _3 `& O9 v$ ^6 @( R9 p'c,b,a,3,2,1'
9 U& W5 \! O% h+ e9 W7 V&gt; array1.join('')/ V& K7 t) k, R
'cba321'3 P8 K; w, I: m$ a. y2 K% N
&gt; array1.join('|')
; e7 w" M3 e* u  N1 Y- M, q'c|b|a|3|2|1'3 Z- y3 {* o9 Y) J$ I. u

" I1 @6 E2 U$ {4 E  a// 连接数组8 a: j" K0 F9 A9 e. x) E
&gt; var array2 = ['A','B','C']
# Y3 z3 D) F; F' k! y4 p&gt; array1.concat(array2)+ z5 j6 M0 {! {% {7 c5 E
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']. w6 S- C+ r4 r, Y! B& K
# C5 M' j/ [5 R+ v# l3 l
// 排序
$ ~" F3 q- c1 K* G&gt; array1.sort()
# A& ^' V8 N" O- i4 b* k(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( t& U! A) L2 W& v: g( }& D! D

2 G7 l  t: }% M, a( _8 E. e9 P// 删除元素,并可以向数据组中添加新元素(可选)5 n, V+ V" S/ C) }
&gt; array1.splice(3,3)  // 删除元素
, t- a, I! P1 B5 n% \(3)&nbsp;['a', 'b', 'c']7 z. z* m) ^+ p* e# H
&gt; array18 Y# z3 d+ ^* L8 Z2 ?
(3)&nbsp;[1, 2, 3]3 C' r, z/ G. C) o' a  \& e! Z( ^
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
, j3 K" e* _( }; H[]4 X+ [" i) P9 {3 d3 S
&gt; array17 _6 y& ~; k* l" g
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
8 r- J  c5 [: @. z5 T8 k) |  L. u0 {5 p$ X
/*
9 W* L, Q% o8 y" |$ w+ h' jsplice(index,howmany,item1,.....,itemX)
) w) U) C) O( c4 j# Lindex:必需,必须是数字。规定从何处添加/删除元素。' H8 [0 ~! E5 y# C, z
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。* V; V, `2 s& ?" {( D  O: O! W
item1, ..., itemX        可选。要添加到数组的新元素
: O/ U6 N* F$ e7 b4 J4 }# R*/
  f1 A  N! A5 F; b9 C
# C2 F) v9 v+ G4 f6 C// forEach()        将数组的每个元素传递给回调函数1 O) z. p9 X4 G7 Q( O- p  {) O
&gt; array1.forEach(function test(n){console.log(n)})3 {: I% [. u9 _- a) Q$ e, `' \
1
  l+ @! s- D, |  o, c 2
% z3 ^. r1 W& r9 @ 3
5 D# V/ v& e  Q: _  g! Z4 D  t A- n) @* K$ w0 `/ K4 y
B
0 C( m9 U9 `- j5 b2 c# V2 r C
, r- q. r  d( R& t3 z// 返回一个数组元素调用函数处理后的值的新数组! e: \- T  U5 e7 }- t5 u
&gt; array1.map(function(value){return value +1})0 q) d" @2 ]; H; z
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
) c! ~# Q  F% {6 ^0 }</code></pre>
& i6 \$ ?( M/ c1 O# K<h3 id="24-运算符">2.4 运算符</h3>* x5 X; T3 E) I2 n8 ]/ q( F0 q
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>  Q$ t" B1 w! j# m9 |; e9 i
<p><code>+ - * / % ++ --</code></p>* U( n6 o) V3 H' D3 {( E$ G3 |
<pre><code class="language-javascript">&gt; var a = 6
- r  l0 {% `5 V6 o  Q, W&gt; var b = 36 }! s4 p! y$ N
// 加
# C% r* I6 a7 x8 B&gt; a + b' u1 a/ v' N# `
97 I+ R6 @3 ]# J! ?# {2 R
// 减
! y( o6 z! f6 u( O6 }$ U% _& j6 V&gt; a - b
0 w) t' R) C0 ]$ o# `3 P3
3 ^7 P; w7 ~! d4 Q* j2 J% H& W// 乘* W8 _8 u7 p0 {" r
&gt; a * b) k3 i) Z+ w) g0 ~
18$ L5 u' P5 ?7 f5 J9 |
// 除9 \* b% S8 G  X8 K$ l0 _
&gt; a / b6 f$ |3 z7 G8 M4 k& d6 k! v7 U
2
0 v- s- X  Q7 q2 j3 |  Y// 取模(取余)1 j) A7 i7 L( |/ |8 j4 L. y
&gt; a % b4 g( f) H" s& u9 e* s$ M
0  D  {. [! n3 W  T4 m
// 自增1(先赋值再增1)
" Z* X: O( v: r, P: T&gt; a++
1 E. _  z0 r" v4 }+ \7 n6! J. l2 Q+ v" _- H
&gt; a
: @. U) ^, D% }7  }; H; e0 z, k- U  F+ E3 B
// 自减1(先赋值再减1)0 K+ O' o8 |1 j, f
&gt; a--+ g7 ~5 \" e$ `. H1 h! f
7
/ ^0 [4 p6 |) A&gt; a( x* H( j9 i6 x" t% Y( N
6
- B6 W; E) G- Z: _1 }! f// 自增1(先增1再赋值)1 v+ m! l3 M1 S0 I# f! k
&gt; ++a, d6 T, `' c% G
7
7 g" M' I/ w$ `" E2 B, x# J7 G3 W// 自减1(先减1再赋值)( u# e( b+ i" o  s+ N2 ]
&gt; --a
. _4 K5 N6 ?# R- _( ^6
8 d0 @$ a% X/ _! }6 c, X&gt; a
6 K% X8 N6 d/ C( i1 S: f! B6
, o) n  _( V9 Y. W
1 n+ D$ Y0 G& g0 `2 z//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理2 G% P9 _1 M, G, m' I7 l
</code></pre>
) g- ^4 c" {5 {( ~+ x7 d) n# G<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
/ c. Y/ y, }+ C4 l<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>& i* v; m# p1 ~3 d$ V4 H( M7 L
<pre><code class="language-javascript">// 大于" x, a* ?( ~' S' h0 X0 ^
&gt; a &gt; b' ~6 L; w4 Z% V% c& _
true
' a4 ^: [* E0 k// 大于等于
& ^$ P7 {$ e3 D! g1 a! J&gt; a &gt;= b
, [" V# \/ a1 @, t0 j+ \8 `2 w! rtrue/ }$ P1 \: s7 G" _: J; F
// 小于9 Z! {' N- e  H7 N: X
&gt; a &lt; b
7 t) t4 t8 x7 kfalse6 ~6 I. @: W) Q. J4 S
// 小于等于
; @5 {1 u& f7 i2 ]9 g" ^&gt; a &lt;= b2 f! i  W# b9 P) O8 h
false5 M4 h; A  S( O7 f/ e8 r: {! n
// 弱不等于
+ t1 B# x; ]9 ^, J8 F7 A: H  i&gt; a != b
# J2 K: M6 t2 \% J) w6 `true
5 B2 Y$ \6 [% q// 弱等于
% y- t- Z, _- Y" }* q&gt; 1 == '1'7 d4 i, @6 n  S( |/ X
true
3 d" d( J0 X& y  Y0 W! C// 强等于
% v: M& R/ w* ?1 o- R&gt; 1 === '1'
9 j4 c+ r: D. H+ ^3 q) qfalse7 G$ B7 C( k7 c
// 强不等于
3 c; q& t* B. x9 i&gt; 1 !== '1'
9 c9 A9 Y! k1 ]' O4 Atrue
0 l& g& l1 ]* y7 p4 E) f
1 p$ J; t8 U( p8 K. v) A8 \/*) r5 y/ h6 ~$ k6 d
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误  ~" [8 |* Q4 d7 G6 Y; o# J
*/
. i2 K3 ~$ T& f</code></pre>
2 o6 t: J; _9 f/ E/ y' Z1 P5 U<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>, {& \1 i1 t4 f( k. s
<p><code>&amp;&amp; || !</code></p># ?) U0 T# B$ V; a7 X) p
<pre><code class="language-javascript">&amp;&amp; 与; j7 o4 Y3 d8 b' z
|| or + B& E6 ~* v! F- t! k! L4 n* a
! 非* l7 X6 l7 g9 t' I
</code></pre>
  d, w4 J' u! Q/ a<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
4 o. p* G& O  v: o<p><code>= += -= *= /=</code></p>6 ]# r# M: C) i5 [* J" [# s3 K
<pre><code class="language-javascript">// 赋值3 v3 d, |) H" r, h. R
&gt; var x = 3, J0 f; [: }% |6 K; w3 [0 k
// 加等于9 r- r  z' w' ~* s* M1 v
&gt; x += 2& \  b; A3 U- U! o/ N, G
5" o: R' B$ q6 |3 H, O7 o5 e
// 减等于# ^# {. \5 ?4 V, u0 Y* {
&gt; x -= 1
! `6 V/ C$ M+ {47 o  f( Z5 r5 O, ^9 U
// 乘等于/ l4 V2 _9 I5 a& m4 d: i
&gt; x *= 2
# ]3 r8 C: g% m9 d  Q; d$ i8
$ o% X; e7 v9 {// 除等于- n2 R& A* C+ G! R5 ]! H0 h3 Z
&gt; x /= 2
1 U  j  i/ o2 s' j1 H4 {4
) _% e# t3 R/ A4 \/ |</code></pre>
7 k  s6 ^/ @4 a<h3 id="25-流程控制">2.5 流程控制</h3>
: U; s. }! o1 e6 @; G<h4 id="251-if">2.5.1 if</h4>. x9 v* C- D+ Z# ~
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}4 o! `2 ^& ?2 {. B- Y; I. C& t! ]

% `2 G  O0 ?8 \6 s! x4 p&gt; var x = 3
! [& p- L! k0 q- B; W9 p&gt; if (x &gt; 2){console.log("OK")}
- J3 r; Q# e1 H8 M- A OK, t- Q/ r2 c6 O: \8 c6 y! [! r
% M: O% H" U0 j9 U0 [
2, if(条件){条件成立执行代码} 9 K- \1 n7 {0 Y! j0 n
        else{条件不成立执行代码}0 E6 Q( c! _# H5 Z1 ?1 D

5 S7 w% y2 F9 M2 D" q% |- p&gt; if (x &gt; 4){console.log("OK")}else{"NO"}4 {2 O* Y# {7 ]8 s0 m
'NO'
/ d# Q: v6 X. F: d6 J6 Q
+ I( _7 {% g+ q( ~  w3, if(条件1){条件1成立执行代码} 9 E( N* d- \9 J8 R' X
        else if(条件2){条件2成立执行代码}
# X& q0 V. P# _+ J- [    else{上面条件都不成立执行代码}. F$ C. k! b5 g4 o: }

) U+ v8 c* Q+ ]2 c&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
! Z  z* U! e" N) _ Ha4 \1 W) Q4 p; X4 p$ i5 Y# ^
</code></pre>
, U7 x5 }% e+ J( P+ }3 J<h4 id="252-switch">2.5.2 switch</h4>
* E$ V) m: k0 g% X<pre><code class="language-javascript">var day = new Date().getDay();5 y" Y+ C! v: Y% I& I- a
switch (day) {! X% H. E7 N* F5 r0 R
  case 0:2 X) f( F. ~& o
  console.log("Sunday");3 b: B: z# M, G
  break;" c$ r8 R* ^! n0 l) a, T
  case 1:
- A6 E9 ]) F7 I, J& r0 ^& r5 s  console.log("Monday");+ h0 h2 k, E# q* C
  break;
* w6 W  W5 `$ x+ C& Ndefault:
# Y( C( b$ B# s2 E/ K) w6 m! m! L! ^  console.log("不在范围")
8 ^0 E8 }; @, I2 C8 Y) I+ r}
% e9 G6 Y3 D% l# r 不在范围
5 M+ Z, ^- v$ N* B</code></pre>. n3 o- B+ m0 m4 S, }( V; C& w
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>' m7 O# Y# n* R/ j
<h4 id="253-for">2.5.3 for</h4>" V! V- h8 X) z, F
<pre><code class="language-python">// for 循环  H) G$ \2 N9 O/ R4 m
        for(起始值;循环条件;每次循环后执行的操作){
) k8 O  e8 `, A        for循环体代码
# H# p7 A* w3 g- w    }
* |9 c5 I5 r) Z6 N' l* R+ B6 b% H, b4 }' Y
, B: ^% S# ?0 M' Yfor (var i = 0; i&lt;10; i++){
% a* f6 d; K! S& l0 Z# C$ ?    console.log(i)
) a0 f; i7 e/ ^4 ]# E. R$ t. S}( N3 ]/ q, M! N  `: p
        0, P$ p5 @- e% U% E  h3 |7 E
        1
, D* s8 T$ z' n9 b        24 ~5 J# U. j% V& e& ]/ m' b
        3
5 s: e1 a6 Q: H- S4 p! j        40 V: ?7 c) D9 K& B6 o6 L7 F
        5
- p% B/ {4 _! A# O. q* T        6; B6 ?; f: J: u, S+ K5 o
        7# X# T" ]5 L- u6 z4 o3 T! ?& ^6 X
        8% V% q# c+ c. l7 A
        9+ Q) e+ C1 m% G
</code></pre>
% D) Y+ _* N% j- W; M( G<h4 id="254-while">2.5.4 while</h4>  V& e  T4 n8 {! m, V8 y
<pre><code class="language-javascript">// while 循环
, s# E; x! L7 v2 q" U# Z( T- f# i0 ~        while(循环条件){( D* v* p* U! S0 J. B
        循环体代码
& }- V5 G  _9 |. f  Q    }( C0 \  `* C5 F$ ?6 ?  R: Y
* D6 V4 J, e; \. k5 x
&gt; var i = 07 o9 d7 A6 g# L2 a; v9 s" C/ K
&gt; while(i&lt;10){
+ C) _- U7 e( {9 I) ~    console.log(i)7 @' v  }% y) [) N$ m
    i++
" ^% F4 q" D+ V# s( N& G% z" L}" n! |4 x! M7 k! M3 ]. _
0
  j6 y9 N5 p2 o% `& G$ j 1
7 A" I4 ?. R6 ?2 b$ S 22 G2 @0 W% P( O* q
30 _, l) a7 D3 B: Y
45 \: Q! s1 a" M: L- _
5
, C' ]6 \/ |) K( T: v5 L6 J 6& j6 K4 ?+ F! q- v, ?6 ?, W& j4 S: `
7
& h4 K! G% L1 }. j& N 8; v, c& @8 A% ~! K: a+ m
9
# K. k1 I: F8 r  K</code></pre>8 h9 \4 }7 O  Y( `3 `/ A. s
<h4 id="255-break和continue">2.5.5 break和continue</h4>7 Q& ]8 u. J7 X' ~, ?2 p/ E" y
<pre><code class="language-javascript">// break
) b, b* w+ |# v6 J! x6 }/ Ofor (var i = 0; i&lt;10; i++){
& l: ?3 T8 |- h: T6 _& _0 v    if (i == 5){break}
7 J3 Z. i7 j! n2 t    console.log(i)0 ^) X9 M6 z( M3 s- n2 k% V% |
}- h" A( Z' k5 U4 u1 B$ k+ d: m
07 D; o) O9 j% V9 z8 A
1
( S7 t2 Y6 v4 [ 2
9 m0 q/ |% X: c- U 3& ^" E  |% g" H! ^* Z
4: r$ k4 y$ O5 K% B2 S. p. l0 P4 h# C/ L
// continue
) j! Q" D) b, W1 I$ {0 Qfor (var i = 0; i&lt;10; i++){
5 K0 \/ `7 ^# R# f: Q    if (i == 5){continue}
. P% u/ p) D) d" Z    console.log(i)
+ @. P" e& e5 K% ^# b}
% u8 s0 y& ~2 _7 g8 l1 I 0
$ ^) @4 ^! q& L2 `; H7 H0 V; f: o 1
, g1 e1 K" A- g) K9 D3 | 2
9 U/ D2 g* v- B 3
( @. q% g& S9 u3 o# t8 @ 4
8 I8 c7 ~7 @, I1 O6 a- n 6
9 a% u  b0 p2 q) ?' i% Q 7
7 o: z$ e% U0 `" C8 f/ v 8
" y9 u. V% _2 Q7 }4 x 9+ V1 ~( S* s4 {

, J9 H- \. v( I+ @4 ?5 T' V</code></pre>
: A0 J7 \6 V/ S1 t<h3 id="26-三元运算">2.6 三元运算</h3>
& z. w, }( r8 y* P<pre><code class="language-javascript">&gt; a
; C. D8 K5 b) j( Y5 g6! i2 m0 X! y2 w2 l) e8 R! P
&gt; b
- i' w- T$ L; y$ Z# U3
; ~0 a* ?: q' r" \) ~$ }) c
$ t! k1 E3 n: b3 f//条件成立c为a的值,不成立c为b的值. v5 e: w  K, A2 m
&gt; var c = a &gt; b ? a : b
7 l  W: ~' b# [; B&gt; c/ v5 x9 P0 j. `$ c# X. z
6
' X1 O1 {% f2 q
$ X& G$ N/ ?/ o1 |! \// 三元运算可以嵌套3 {6 K: k& G+ `
</code></pre>* ]' P; M7 U' K8 H: m: w2 V9 ~
<h3 id="27-函数">2.7 函数</h3>% g& B2 }! a0 {" d) Q1 l
<pre><code class="language-javascript">1. 普通函数- M, c7 D. Y7 w+ W
&gt; function foo1(){: }0 f+ I# N" \. j; t
    console.log("Hi")- z* f1 T+ Q: I8 g- @
}
* N( c5 n; D' ]
* x& V+ C" G- ?&gt; foo1()
) L% M1 J7 m& U6 s/ q. p: p3 ?        Hi
/ K- a3 x3 q* M6 M5 }( ~2. 带参数函数
% c* f( e+ @$ ^2 ?2 r8 g5 F6 D&gt; function foo1(name){$ b% e* @# M# D* y3 g# H) G
console.log("Hi",name)
5 `! t0 @* x' P+ |4 O7 l}
) ^- ^3 T+ u8 ~0 W# T2 L9 @+ Z$ F& z" s% D' q
&gt; foo1("Hans")
2 o" c/ w1 a, C5 W# U3 zHi Hans* y+ z; }1 F+ J7 I7 s8 W
( t# E2 l$ a* D! c# [
&gt; var name = "Hello"& ^/ }1 K5 Z! }) A
&gt; foo1(name)4 M! C# y7 k; c' b
Hi Hello+ v8 X+ @8 O+ S4 P& S1 F% @( R
* k# z/ ~9 i: A3 G  y& m" q
3. 带返回值函数
$ B! O$ D" {4 @. F( j2 t: a9 J&gt; function foo1(a,b){
  ?  w( n3 a! w; Z$ c4 V6 L2 m1 U        return a + b   
/ Z+ X- c3 P) y1 r3 n4 P' t, I}' b& V% P& D# @. W  W# z
&gt; foo1(1,2)" v; S/ I4 U6 m* L8 ?3 v
3
- T1 ~" C! d# v; S' B1 m+ t&gt; var a = foo1(10,20)  //接受函数返回值
& q' m9 @; b7 N/ `; F) t# E&gt; a
% |. W5 C) ~& ?( ?% @4 T30" @3 Q6 T0 ]$ s4 z7 J% M
7 {$ x6 s# W# g, ?& v) ]# p4 a
4. 匿名函数9 J4 w5 D( W( [0 N; p8 T
&gt; var sum = function(a, b){0 i+ ]# }) q" |3 Z: Z$ O7 t
  return a + b;
9 `6 l" q; U& k& |/ N- _}
$ ~. ~/ S  e* ^. y5 V&gt; sum(1,2)1 `! u5 i; C' D) z) A/ o6 h% }
3
: i4 k; z- U" ~5 r/ h- D; m% }7 b6 V
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
; N& G9 O- q1 A0 d7 S&gt; (function(a, b){
4 v# u1 v; U/ v7 E3 S# _  return a + b7 }9 }2 j, S; t( K  \( @
})(10, 20)
, {4 f' a4 q9 N2 S6 V, T3 ~) @+ ?3 L30
3 L+ J3 L9 k, I. u" D1 L) s: s" L7 |4 w3 D/ S, O
5. 闭包函数
5 h) U/ T% D4 O8 }' f// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
& E) }1 W9 N# gvar city = "BJ"
- ]7 V% H5 {& g/ Z% ?# mfunction f(){
$ f0 Y7 H4 }9 ^" i    var city = "SH"1 ~1 A4 \0 j$ v; h' _3 T; v2 v
    function inner(){; H/ B8 _' `/ R' g: ^/ r
        console.log(city)* o* A, X9 R9 \! K* J( l2 P1 H3 a
    }
8 a2 r; `5 W) L+ {    return inner
" n2 q4 L8 W1 S: z( z+ |) O7 O1 l4 G" F}
6 h  ?4 A4 j# e. v8 E2 K* Kvar ret = f()8 e" G* _2 L1 S2 O
ret()
4 `+ e3 N3 @1 w执行结果:
: _0 @3 A$ [( x$ o+ _8 KSH
. L$ j) H  l; g2 H7 v
! O/ y/ g6 r; A+ i: l</code></pre>
5 L9 \0 R1 J- O. m3 Z; |) R<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>3 v9 ~$ z9 r4 Q
<pre><code class="language-javascript">var f = v =&gt; v;. w& |8 L/ C6 Z
// 等同于
! N! _. F9 M2 R- t3 K7 bvar f = function(v){
' h6 s  A- i" D" ?3 [, k- t  c9 X  return v;
, o* B+ Z2 ~$ a9 m}2 N2 `% Y: r1 S  r( F' d! i
</code></pre>
& h) W2 `; u% s/ Y! U/ @8 K<p><code>arguments</code>参数 可以获取传入的所有数据</p>1 ]( v' E/ v3 i+ k
<pre><code class="language-javascript">function foo1(a,b){
  o# Q- @* b. g: t/ k5 i    console.log(arguments.length)  //参数的个数 " p+ R6 e( M- `* S) j( P4 D4 Q
    console.log(arguments[0]) // 第一个参数的值
: ^) m0 j8 z7 V        return a + b   ( A3 T/ ~- O( ^( a5 G" s; C) p
}
4 N7 |8 a9 ?  v. v/ Nfoo1(10,20)- j8 }; c# _% G( w9 W2 ^: A
结果:
0 P, W- \# E5 v/ f; q 2          //参数的个数
6 y8 E9 T& K! ]3 y; R+ T' G3 f7 S* Q0 \10        // 第一个参数的值
0 Q* [+ k% v, f5 ^" K0 s" |3 z30        // 返回相加的结果
. h: }4 X6 k) N</code></pre>0 g) n1 s, V+ m3 X7 E; P9 E
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
2 ^5 T( P9 L4 J+ z* ~: s  u( c<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
: ]& G- ~  B: Q# f6 Q* V<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>) D$ ~: J/ d7 y  f( Q8 [0 N
<h4 id="281-date对象">2.8.1 Date对象</h4>5 V# f# I; s0 _+ z7 n
<pre><code class="language-javascript">&gt; var data_test = new Date()3 ]6 p$ D2 v7 W3 q$ I
&gt; data_test
& y( q9 M5 ]# Z/ k; cFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)& l' l- }' e, c* s. L5 v
&gt; data_test.toLocaleString(). n9 \2 k3 o4 ?3 ?6 v
'2022/2/11 下午9:44:43'
( r1 F( W  l+ `/ D% Q) T
4 n9 W4 X3 l9 @$ Q: k&gt; data_test.toLocaleDateString()
* ~7 U  @" H! y0 R'2022/2/11'
" B4 q& N  l3 y3 Y5 `4 O+ t
* ?+ b) B0 R) {7 E4 B7 c! p&gt; var data_test2  = new Date("2022/2/11 9:44:43")
: U3 f. ?2 |9 ?5 M! ~: I2 s7 L5 G4 W&gt; data_test2.toLocaleString()
) e6 M2 X2 @. Z$ _' q'2022/2/11 上午9:44:43'
/ s" ?0 m4 G" {  ~6 v1 q8 I  r! I" u( p4 T$ I
// 获取当前几号
7 i/ v# |" V+ Z  A! G&gt; data_test.getDate()5 d) c( K( x5 m5 r
11
) L7 V7 S6 W7 m, Y0 g) y. D// 获取星期几,数字表示
9 `) j' U: h' a7 M0 ]&gt; data_test.getDay()  
( Y* }3 A$ t. }- ~4 C8 ~  l5
7 s3 x; D" z3 w# }4 U! x( J// 获取月份(0-11)' Q! g; h% c3 O3 j
&gt; data_test.getMonth(). f& ~, v" R# r/ x7 Y0 F
1/ V4 V3 s  _' C4 I+ W* }' f2 J
// 获取完整年份6 l7 v  [) t6 ?: S! e/ A2 @
&gt; data_test.getFullYear()" A; s8 v/ p% j: b+ Z1 \" r8 c
2022
3 O5 ~. y/ V0 \& j2 w// 获取时
4 H; u* ~' k# I6 K4 M/ C&gt; data_test.getHours()
" A/ Z% r( _% F. C21
$ t5 Q2 [: x* @( a5 |# {// 获取分
3 C) g1 Q" L, I) R/ `; Y! F&gt; data_test.getMinutes()/ n( T) j5 ]5 |
44
2 @3 W3 U: l5 {2 Y) ?/ G3 ?// 获取秒1 p! k/ ^4 }# f/ K* p
&gt; data_test.getSeconds()( X1 `0 G: b2 F* @! O  e2 {; a
43, H- }, [4 \, l" v
// 获取毫秒7 S2 L0 G5 v' Y; t, u/ A3 C1 d; c. B" i
&gt; data_test.getMilliseconds()
1 Y& F9 T  O) b* g290
, q6 [3 e% @  f. b% I) `: P// 获取时间戳- [5 b, @& a, m
&gt; data_test.getTime()0 g, j8 _: l. I- a
1644587083290+ X; [) H& [/ }
</code></pre>
9 E/ n' G: m" i( ^6 m% a! Z8 d) A+ l<h4 id="282-json对象">2.8.2 Json对象</h4>
2 c+ s$ |1 ?& ^) I( X<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串7 h* D1 f) q" h. t* V
JSON.parse()  // 反序列化,把JSON字符串转换成对象
* D# e) c; i7 J- F; e* Y9 n+ A3 G" ?
// 序列化1 r/ V/ @+ k7 r
&gt; var jstojson = JSON.stringify(person)
* n2 W2 b  F7 l% [. O0 `&gt; jstojson  
7 C' M# K. F4 w; \'{"Name":"Hans","Age":18}'9 ^5 q( _$ M4 Q6 n1 \  Z

, f& P0 F& {" M3 h// 反序列化
% `3 K' A6 ?5 X9 I&gt; var x = JSON.parse(jstojson)
, t2 W8 p3 v7 ~, S&gt; x& x  b  y4 L9 S, Y  N% I
{Name: 'Hans', Age: 18}4 N- k; T9 s( _9 F, w* y
&gt; x.Age/ u: o7 u4 K6 x
18
$ g6 ^/ j( D! L. s</code></pre>: @, x* S  I4 M5 e1 L4 k
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>2 Q2 m: l" \- ~7 D7 \
<p>正则</p>
5 ~& R% v* E5 [% v$ S2 G9 N<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
, x$ c4 U6 A. ]7 J( V7 }&gt; reg1- B& A4 \4 J: v- q! g
/^[a-zA-Z][a-zA-Z0-9]{4,7}/; Y7 T5 k4 D7 g3 k4 o' `
&gt; reg1.test("Hans666")
; M5 B; w3 o  l' `$ Ftrue0 f% H& ]; w8 k" ]5 d
3 i$ P& T5 j: S2 ~9 ]  p
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/! M+ c5 y$ s, u& o, z- H
&gt; reg2
6 d* K9 A+ U& T6 e% Y3 h) X/^[a-zA-Z][a-zA-Z0-9]{4,7}/' [. r; Y5 t: i4 G! k3 L
&gt; reg2.test('Hasdfa')
% ~7 ^" m0 W6 H' y2 Ktrue4 Q$ t# i: M+ W5 M: f! x
3 t8 k, ?! J6 i5 |) ]! d9 K8 }5 S+ h
全局匹配:
3 S4 R' K4 R3 f$ o&gt; name
7 d6 E7 N5 U8 }& a'Hello'
- O  N0 d8 a3 ?6 n! r% y5 p2 c0 X&gt; name.match(/l/)0 K" E4 T1 @5 P7 E  z0 {
['l', index: 2, input: 'Hello', groups: undefined]' v  h0 ]7 D$ o/ h- N- N
' G. M9 ^& b$ V2 A& Y& I
&gt; name.match(/l/g)' V! H; |- ^1 }5 A+ F+ B# }1 x
(2)&nbsp;['l', 'l']2 F* ^- e2 I; `! N! K4 m
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
% X4 n- f# x' R3 J; w- \3 g$ W4 k- U/ ~. N
全局匹配注意事项:
' f& X! ]) }0 R& k&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
3 V% S0 [( S" J% t&gt; reg2.test('Hasdfa')2 O! t. X  a; {7 w: `! k+ b
true
+ L* [0 I' N* b; o& K8 P  L&gt;reg2.lastIndex;  J* r8 e$ ~; J, `. z
68 x) Z7 s6 {' g* H$ D# S! ]/ \! h
&gt; reg2.test('Hasdfa')6 k$ @3 |& c( l) Y  ^! d+ o# P: u
false( P; M! L/ d- r* W* l) k
&gt; reg2.lastIndex;
# M: c4 w$ A) e/ f8 p0( [8 G' b2 ^- Z' U
&gt; reg2.test('Hasdfa')% ~: D: k5 o0 X# `3 l" w; o
true
8 G& L9 b% v3 ]; L7 t&gt; reg2.lastIndex;/ K  {1 v8 G* G  q0 B8 {0 d
6+ R4 G$ Y% R3 ]' m: e7 g! G
&gt; reg2.test('Hasdfa')
! i5 d8 B. a5 i/ v3 x# rfalse% }1 q2 c. D! y# l( b
&gt; reg2.lastIndex;. t" ]5 Q7 f4 U4 l) v
0
  }! @; w4 q' o. F// 全局匹配会有一个lastindex属性1 k: w, p, U  H! j, a
&gt; reg2.test(), o  y* c& X; h0 v  m
false
/ N$ f6 S; k/ T4 ^/ R( c8 K&gt; reg2.test()! o$ Z- O3 m% y0 H" N+ t
true
8 i/ {; L5 Q' E! j: _3 _" u// 校验时不传参数默认传的是undefined$ g& N* _% V! ^
</code></pre>
( y9 @! f% F; _8 m- O! w<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
  `& D, ^2 n5 R9 r4 y3 _) |<p>就相当于是<code>python</code>中的字典</p>
9 h. \5 o- ~' V. r% j<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
8 X3 I7 h, V$ g9 s6 Y&gt; person
3 u1 [3 k( ?/ _{Name: 'Hans', Age: 18}
" e+ Q/ E# n( x/ o&gt; person.Name& D6 b+ Y/ P' o* y/ ^
'Hans'7 B1 B, B1 @# E3 v' q5 O! Q
&gt; person["Name"]
% k( u; `, ~2 K$ M+ G) y- k; {( l'Hans'
; a* G5 T; i5 h* y; z  s/ u0 b8 V. P
// 也可以使用new Object创建
/ q% e% W3 C6 U9 H& F&gt; var person2 = new Object()3 d! O" k- A+ r9 ^8 I6 @
&gt; person2.name = "Hello"
5 H  S  h1 _0 a+ I, C'Hello'6 J- {+ z, i; v0 Y
&gt; person2.age = 20
5 S1 M  _* j0 V- G20- E' i; U1 X4 t$ M
</code></pre>  Z1 d4 G% O+ Q' ]3 |. T# m4 a
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
* g* ]( k/ C; [<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
1 U+ w) {  N$ b<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
) a! x) l$ m' X  M% I1 M<h3 id="31-window-对象">3.1 window 对象</h3>
0 I* J- `4 I- [7 O% {<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
4 A$ p2 U- k) w/ E3 k4 J<pre><code class="language-python">//览器窗口的内部高度
8 E& d: R* y6 i# @* Z) _, |4 d. Kwindow.innerHeight & C6 S) L% F9 ]5 ^' U5 H" M
706
. N% }' G$ v. d9 w; U$ Z4 @6 j//浏览器窗口的内部宽度& P" H( C  n' B5 I8 J0 [* i, j% \
window.innerWidth% }" c! }8 G1 i  n8 }" e& `2 T' Y4 n
1522" e. o4 h; @2 \1 k: v' D0 ~# w
// 打开新窗口& c8 k, S* {: P  s
window.open('https://www.baidu.com')
7 {& U3 f& g! `" ^. ?Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
! q& w7 H7 k7 S( ?. o  I; |// 关闭当前窗口3 n) |$ |9 @5 S0 q; G* h
window.close()
1 i- {1 t; I; }7 d6 X; c+ A0 k% W//  后退一页2 x2 X/ A" x2 ^- t1 n
window.history.back()2 a' I- V! H0 W) R5 J. T
// 前进一页0 {% c. l. C' H
window.history.forward()
" v$ P- x7 l2 X) J//Web浏览器全称# Z2 y) P% Y9 I6 C4 V: Y% u
window.navigator.appName6 _) G! A& G' w3 g
'Netscape'9 p0 X( r5 n  H; W* T5 q
// Web浏览器厂商和版本的详细字符串& W8 B( {" ^. k; M2 s
window.navigator.appVersion
9 o# O! ~8 o% }7 ~'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'. j$ n6 a- z6 s7 o1 J: J( A9 |' t
// 客户端绝大部分信息
1 P+ o5 Z4 w6 |; E3 U& Ewindow.navigator.userAgent
/ U# l* j% ~# g* b'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
% {; H8 b% s4 n8 I// 浏览器运行所在的操作系统& D+ ~4 f7 M/ J1 i( d: y! F9 A
window.navigator.platform
1 {7 D3 O1 o! G9 x# c'Win32') y3 Z. _9 l* l

: K6 F/ v& U4 o* [- b//  获取URL# {9 Z. |9 Q7 O1 k# s* L
window.location.href
9 J  L' F. j2 o, @+ A// 跳转到指定页面
' z: S- m7 v9 L! o7 rwindow.location.href='https://www.baidu.com'' _: h* j+ x2 G7 v$ z
// 重新加载页面
5 w6 a# ?' X1 [% @window.location.reload() / r3 ^8 E! H2 s  I, ^/ E9 ~
</code></pre>
- Z1 ]5 |% c( n# b) j$ f! z3 C<h3 id="32-弹出框">3.2 弹出框</h3>, m" z) n. N# H  f3 D
<p>三种消息框:警告框、确认框、提示框。</p>
  Q2 g5 ?0 Y& A+ A# q<h4 id="321-警告框">3.2.1 警告框</h4>
; b$ V# J: a" y3 M3 e' s$ R7 d$ p<pre><code class="language-javascript">alert("Hello")2 j( V7 R  }% y
</code></pre>
8 i# q+ |& F9 e$ f+ E  D<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>! d' v5 o. u0 m7 @0 _
<h4 id="322-确认框">3.2.2 确认框</h4>
6 e& K1 Z9 `% h7 i: o' S4 G<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p># R7 I. p$ q+ D. P9 y6 e
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
7 i, Y7 I& n, ctrue. h! Z7 l+ P: d0 g9 ^) W
&gt; confirm("你确定吗?")  // 点取消返回false
3 [: W  w# Q/ b$ i- C) A+ Cfalse' O; S9 q( P% V! ?  M- l6 O
</code></pre>& c- R3 s0 J+ W6 T# H# ~8 u. {
<h4 id="323-提示框">3.2.3 提示框</h4>  ?8 ~% l0 Z9 P* s, R- R
<p><code>prompt("请输入","提示")</code></p>. R, a7 ]! e/ S5 G& K; P8 N' ]* _1 V3 h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
- O' O7 n6 d& m) h1 J1 m<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
4 O8 S0 A, y9 H+ V* A' G$ e2 T. }<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
9 ]2 x# K5 h  M2 Z2 {8 u<h3 id="33-计时相关">3.3 计时相关</h3>
6 l" B9 b1 v% y1 v<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>2 J  Z+ y% j6 L$ p
<pre><code class="language-javascript">// 等于3秒钟弹窗3 v& C/ b; b, w- t
setTimeout(function(){alert("Hello")}, 3000)
" T0 `3 o$ c+ P7 F0 F' v
0 T1 |. d1 f) i, s$ Q  x' G- Ovar t = setTimeout(function(){alert("Hello")}, 3000)
5 i- N  F6 @8 H1 ~# F( E7 G8 [; R/ U, v: K! G/ \, b0 [
// 取消setTimeout设置
# D9 m# p+ O2 e+ ~4 R5 u. g) s/ U3 H$ }clearTimeout(t)
/ m5 w- [9 _6 ]</code></pre>" k5 i/ Z) u; \# I! E, |
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>* _) J9 Z0 t+ L; i9 `/ |% z
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>4 {/ d$ H. D: ], g% k
<pre><code class="language-javascript">每三秒弹出 "hello" :$ |  M+ N( |3 L" }
setInterval(function(){alert("Hello")},3000);+ |3 W/ r, Q7 d; \" l2 n8 @2 [4 J, _4 z
</code></pre>
2 ]- V& _: u1 I. j5 p9 P- t  c<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>) C, ?$ q. \7 w" C7 q0 s8 g
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
  Z9 o) l8 E9 |//取消:/ ~' W! n7 h! K& ?
clearInterval(t)
% z8 P6 l& k9 I' S% z* `: E, i</code></pre>) ^: E, U( z7 m1 r. Z- }! Z, [5 P

4 m0 S: D9 v( N) `- U6 c
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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