飞雪团队

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

前端之JavaScript

[复制链接]

6382

主题

6470

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21470
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

3 G( @* ^/ ~9 r" v  i9 R" a<h1 id="前端之javascript">前端之JavaScript</h1>, V, R+ D1 l& v/ F* ]' N+ [
<p></p><p></p>
1 A) v% `! t/ G- [5 H$ y: y* z<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
8 ]' [. \, P7 a( d8 U<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
! T4 ]/ e& n6 a$ |. d它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
6 c" z: Q- }7 e2 N* G它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>2 Q5 X# E8 P/ P. _7 `
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
; x& B! q$ F9 {- D1 X: v<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>7 {% E9 O4 U3 V
<h3 id="21-注释">2.1 注释</h3>
2 J# k# v- [8 l% |; _6 u: \<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
- |! u6 }( C3 h: U7 g# q9 h<pre><code class="language-javascript">// 这是单行注释) J6 g+ P" M4 R4 a/ r

1 I/ L! a4 Y) i0 x4 z/*
/ R" @- J7 u) ~' z5 n这是多行注释的第一行,
( H. C" O, ?- p; d5 [% I6 a这是第二行。
/ D& w7 R: g' I* m* M/ V*/4 U+ }  @' Q0 Q4 O8 g3 k; i+ a. M
</code></pre>
: {% `" g) A' d$ z$ V<h3 id="22-变量和常量">2.2 变量和常量</h3>% T; w) M; N: K! _% u& B: P9 Z# d
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>, A# o: A/ t5 ~; E1 W
<ul>
% I7 a9 q5 U& @- k% F' A" j<li>变量必须以字母开头</li>
) v9 Y9 ?. d, k% G<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>0 S0 T* w. j; ^! V
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
; A" `+ v4 Z6 A# Y3 f</ul>
$ ~% L9 n6 u# P<p><code>var</code>定义的都为全局变量</p>
4 K; W  ~1 Q* P3 I8 V% U<p><code>let</code>可以声明局部变量</p>9 Z4 P3 Z: ]4 o2 q
<p><strong>声明变量:</strong></p>6 w, U" o5 T$ h
<pre><code class="language-javascript">// 定义单个变量5 ^; Z- L  U- O  u- C
&gt; var name
+ Q6 [. D6 r2 [  i3 L  A. I&gt; name = 'Hans', E0 O. k1 d, J
//定义并赋值  M$ ~' [6 H' Y& v
&gt; var name = 'Hans'
6 O2 o( ?. Q. G; v2 u7 j; [&gt; name
7 U% \6 W0 r# H+ G4 [0 [% Z: {'Hans'- Z( G0 O7 v" [9 K, O$ ?

1 I% w5 o( P" h; X& C// 定义多个变量
' b0 @2 B  X0 l8 k% w$ F- j9 M&gt; var name = "Hans", age = 18
; u% @5 p' v; k, C2 @( Q1 n( B- }&gt; name( f8 a4 p/ W" f7 i7 U) X
'Hans'
5 y  e5 Y7 n5 ?$ j, E+ P2 l0 C&gt; age3 M4 v! O( {' p% L2 C
18
) t) `& f( q/ q! C3 M5 J; h: w# H9 |0 A7 l2 J( W' |, u
//多行使用反引号`` 类型python中的三引号
0 j% I7 l$ z% N8 ?&gt; var text = `A young idler,: f0 {; N4 i: v* R5 Y8 [9 Z
an old beggar`
" y1 H  C6 C, Z5 |&gt; text
, I! d. }( A, I'A young idler,\nan old beggar'
7 `+ u/ C6 q) \3 g# M</code></pre>. n+ @3 D  g* J% |5 I
<p><strong>声明常量:</strong></p>* [2 ^- n# `, P: W) K  i, i
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
5 t# g1 X* F8 v* x4 c3 v$ Q0 |<pre><code class="language-javascript">&gt; const pi = 3.144 y+ l3 D1 O, e1 V! h. L
&gt; pi! |  e* Q3 C5 S
3.14
6 L& s/ ?/ {3 b* x, z+ ]3 D) [&gt;  pi = 3.01
  `2 Q* ]# W3 n: sUncaught TypeError: Assignment to constant variable.: u8 Z9 h/ P: F
    at &lt;anonymous&gt;:1:4, u( u4 f, s9 Y2 _; Y5 C' }7 k

. L+ T+ B- s! o# Q' s7 X3 a</code></pre>6 G7 [+ `, }% H- |" r- j: _
<h3 id="23-基本数据类型">2.3 基本数据类型</h3># H; _/ G( O7 m0 s
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
3 S9 J% r! U+ p  L+ U<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
+ G& i+ v1 K2 N3 w" R# ?& a3 X<h4 id="231-number类型">2.3.1 Number类型</h4>
4 z3 J2 b) s  h% ~( D/ g5 y4 v7 [' P<pre><code class="language-javascript">&gt; var a = 5
6 A/ m4 y8 |  e5 U&gt; typeof a   //查看变量的类型  
+ z, M+ C  a/ Znumber' A: d! E( \) W, O

7 o" l) t* w/ S  f4 j- v&gt; var b = 1.3
3 w& |" u/ ~  U+ k0 j! U&gt; typeof b/ w/ H' h" }7 B: k/ s
number
4 ]2 m2 @% m3 o9 |2 K* K3 a, h/ b* k# `
// 不管整型还是浮点型打开出来的结果都是number类型- X  p" t4 w. _% q
9 Y6 `9 V# E$ K1 L& X5 \
/*
* x, P# o1 T4 O5 j: |- V- p8 cNaN:Not A Number
$ c0 C2 ]. t3 [$ y- ?0 [NaN属于数值类型 表示的意思是 不是一个数字
0 e+ k/ r. Y) I" \0 _3 l* r$ c*/
- `8 ^' H; U4 z/ @* `
' g2 T3 Z# a" c) Z) fparseInt('2345')  // 转整型
* U: U1 y" Y$ v2345! T  T1 b0 j+ _
parseInt('2345.5')
& l) i- R3 l4 |2345
- V  x, c0 b5 B8 p4 m- ~6 O3 hparseFloat('2345.5') // 转浮点型- }$ C# L- ], |
2345.5
3 s- h0 i, ~! x$ G' U3 ^4 A; y# BparseFloat('ABC')7 [" Y4 P1 _& x% w% W+ `! ], |
NaN( i* k2 F% W, s4 R
parseInt('abc')" d! `3 d. T% j( ^
NaN, \8 c: s7 @9 `
</code></pre>, w+ w8 n3 G$ E, m2 B2 y
<h4 id="232-string类型">2.3.2 String类型</h4>' D! x6 F/ W( K6 O
<pre><code class="language-javascript">&gt; var name = 'Hans'- \1 N( Z3 ]5 m2 u2 n- o1 R9 |: `' m
&gt; typeof name) \) G3 Z8 ^5 b* |$ M% |# C. _2 n3 F
'string'
5 Y) o* C% t" {# }& X4 q  |; r5 b2 m: V
//常用方法
) f) z8 `0 C5 V9 M// 变量值长度+ C4 s5 R9 G% X0 }5 T: b( U! O; d
&gt; name.length
$ M0 i0 d- T( K. q2 K4
" ?; {/ Z; X4 h1 F8 g// trim() 移除空白
# G4 g9 E( n/ _; T; D&gt; var a = '    ABC    '7 O' e7 j7 q$ P! A# ?6 B2 v
&gt; a
3 j& n( s! U; t" }- O, ['    ABC    '* v# I! ]$ Y9 n/ n" D
&gt; a.trim(), P+ ?% V9 X% C2 `# U- y
'ABC'
. ~+ d. i* e) Y' f( ?6 g//移除左边的空白
2 W8 j2 O( u7 F# }. X) _&gt; a.trimLeft()( L8 {# }6 [* U( @( t
'ABC    '9 A3 k: i" g0 f) O
//移除右边的空白; k0 V# Q. I& ?, ?
&gt; a.trimRight()
- e# l% y6 w8 }& p" ['    ABC'
) _. ?, ]# C: G  T+ z& ]' b# ?9 ]6 ?0 r  }% ?  W+ G
//返回第n个字符,从0开始
0 q5 y, B2 a/ Y& X1 q' j6 R&gt; name
  p$ |3 O4 P# h4 S. Y3 v'Hans'5 Q- ?( Y* p. r* `* Z. e- ~: J3 b& S4 A7 }
&gt; name.charAt(3)+ ^9 K: C9 r1 r4 s: Y* V2 p5 l4 w5 U
's'3 }# z& c# x8 j! v: L9 H
&gt; name.charAt()
3 l  a6 T. X# a: m7 B3 Y  D8 |2 \* y'H'' a7 w0 F& X% w
&gt; name.charAt(1)  ]1 X+ r4 N7 ^$ J) a
'a'$ L5 u- z; q' n; u8 X6 O
9 [# v5 F: ~; V
// 在javascript中推荐使用加号(+)拼接
8 w7 ^7 I' Z% Z9 j3 M+ b: T9 i&gt; name
4 K0 H, f( a  @! n'Hans'
6 }$ l! y* `& f, ^! f&gt; a8 D- C. |, A& A4 K0 K! J! R1 x
'    ABC    '
2 C  y' s: ?# t&gt; name + a
" v8 E5 N  ?* n7 |/ W5 ~0 d6 i'Hans    ABC    '7 i: a  v- L& }4 m2 O- g
// 使用concat拼接; t% ^" y8 q! j1 u) {
&gt; name.concat(a)( ]" t- U4 E- H# Y, p- V
'Hans    ABC    '( B6 L# i! b+ ^! F- e7 p. c

3 E: ~1 u) B+ s) j! i8 B! _% d//indexOf(substring, start)子序列位置
' V, e7 D$ @2 t- k$ M* P4 Q2 i% t& j9 k( p! [5 L
&gt; text
: ]! j/ |  d4 p; ^'A young idler,\nan old beggar'# X5 x0 ^  Y+ S% B2 z
&gt; text.indexOf('young',0)( ^: ?  R  V( g; u' ~) a$ c
2! D2 X" m! V: A

7 {. t; C, O1 y% ]( L6 b: y//.substring(from, to)        根据索引获取子序列& e2 B4 d' R) R. _# R1 o
&gt; text.substring(0,)- F5 h7 R; N7 b( w) B
'A young idler,\nan old beggar'4 L2 z3 ~. ~  `, z2 ~& k
&gt; text.substring(0,10)
4 c# Q7 M2 g; E! f'A young id'. w+ G. t$ j% u; r. f
* H; O2 ^6 o' U* y- Y
// .slice(start, end)        切片, 从0开始顾头不顾尾
; F0 h2 M) @5 a6 }7 P" C& y  u&gt; name.slice(0,3)0 J  `7 g' v- ]( N, C/ X/ T! P  P
'Han'
" \' c% t3 [1 T, A* {1 g# ]- p- A1 o6 `+ v5 ?& z" ?
// 转小写
7 q8 T; c5 }0 Y: G$ N&gt; name
3 ^0 l' ]8 a8 J% E  Y7 J'Hans'
( d4 u( W4 @, D# _6 U' S% ~2 J% v&gt; name.toLowerCase()7 ]5 R, k- W! k! |2 a+ S' M" r2 m
'hans'
7 L6 Y: o; E9 b7 U5 c// 转大写( P4 E0 I6 N+ q  G7 \
&gt; name.toUpperCase()
( t) \# H$ p3 p'HANS'# E5 l4 o- G# w  ~7 Q( u

7 r7 |9 W7 |8 K1 d// 分隔
* F" a/ O* a" V/ S&gt; name+ [: ]* R4 @) u7 x/ J% y
'Hans'
4 m, d2 E2 J4 b" u&gt; name.split('a')
: E8 C' V, C+ I4 ?(2)&nbsp;['H', 'ns']7 F% p# N. u1 r% _7 S7 y
</code></pre>1 \# r9 ^1 a  m" {
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>& _$ \* R/ @- x; t% F: a; [
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>0 k' Z  b# l  t" }5 M
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>" H5 W' w2 K0 ?7 _1 @( A
<p><strong>null和undefined</strong></p>5 m; S+ ^7 V% d( t% e# s) T7 Y& B# B
<ul>3 j- [4 v" p& g# [5 H
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
  @2 H' `8 v$ C8 t0 N<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
0 A$ a" x8 y; X( b6 @: P$ {6 \</ul>
( I2 ^" @. K' E0 H( W<h4 id="234-array数组">2.3.4 Array数组</h4>
% @3 U" K; e" I& w3 j4 M, e<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>( Q1 T& t2 k/ e/ Z7 h& F
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 8 n1 I0 _* e# E4 f- w
&gt; array19 p; X) y+ l' z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( z+ ~+ ]& Z% e8 ^6 s5 R6 [( J
&gt; console.log(array1[2])  //console.log打印类似python中的print9 z2 }5 B2 J9 O9 Q4 ]  p
3
1 \" Z# T$ j- }* ]1 w. c9 u// length元素个数$ t) k  h' s+ @
&gt; array1.length# x. c$ D6 U' F  Z, R
6
  j4 T1 q2 I1 K% j% {6 ~// 在尾部增加元素,类型append' S' r/ s! F6 \6 W3 ^4 {3 y4 X, S
&gt; array1.push('D')
1 q' G& d/ X9 M* ?* ?5 I2 E75 Y# {5 p6 S2 r7 ~8 s* m0 |7 t
&gt; array1
9 C' a( v6 A! O1 l% f; ?+ z(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']( w( y0 u# p  V5 i  b- @
// 在头部增加元素
% [7 ?' d& H) ?&gt; array1.unshift(0)9 Q' b: T! H: O4 K; L0 N) R3 t1 G
8
: a& I  N! j$ K&gt; array1* G8 K7 Q& N$ r
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']4 r' D9 W& }3 a- b9 H

0 G& V' e" M! f% j  S+ @: a//取最后一个元素( t6 C- h  {  ^1 e
&gt; array1.pop()+ [( C' C3 S( s  X
'D'3 N& l  J- p  r) M6 ?$ t
&gt; array1
; V  X0 j$ s$ }$ h3 g(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
4 B: ~* G* k7 x( K' \/ S1 L//取头部元素
& e6 G% x5 w" a1 s% I4 z# s&gt; array1.shift()
+ L$ Y' A+ c6 e# Y- A0
5 i/ J+ E- ^2 H&gt; array1
$ a3 t6 @! Q5 _, E- L5 j) G& T( Q(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']* i9 U& Y: X6 ?/ O

& n# E) f7 @3 X) H//切片, 从0开始顾头不顾尾
0 {5 o. n5 t# `/ N+ p3 [9 Z&gt; array1.slice(3,6)6 O9 v  F( N6 a
(3)&nbsp;['a', 'b', 'c']# S1 H9 I9 B/ ?% d6 }
// 反转
" r2 p6 l" U7 }) O, @3 l&gt; array1.reverse()) K$ M2 C% p# v+ M9 }4 V, {3 d+ @
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
/ E" E2 }0 p; R1 A' T9 v// 将数组元素连接成字符串
) m0 q1 g. ^2 o8 \&gt; array1.join() // 什么不都写默认使用逗号分隔
7 u# a9 n/ ^; U9 w8 D% U'c,b,a,3,2,1'
6 b: R9 N& ~4 i7 o! U0 C&gt; array1.join('')+ |4 t* ]: r* S3 v
'cba321'
  U7 b9 S4 V4 `4 K2 p" f, |) ~&gt; array1.join('|')' {+ C& g3 n$ N( C0 D$ r; ]( I
'c|b|a|3|2|1'
9 A5 T8 \' U9 h/ e1 _
' e3 h5 a" u3 f* q# d// 连接数组
. ]# N" }& t+ D: C" |4 c% A, [&gt; var array2 = ['A','B','C']/ G% V' v5 v  X1 h
&gt; array1.concat(array2)5 S. E4 l. H* N: b/ e
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']% L4 d! ^+ Z, ?
, Z, ?8 L/ z( q/ J# ~5 R
// 排序
: n/ U! o1 \' L( u  i&gt; array1.sort()
2 D: W) f; [2 Q6 L0 [(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
' _1 ~& c! y: y/ a' u- @/ R% w" F% R
// 删除元素,并可以向数据组中添加新元素(可选)
1 s9 f$ @) p. q( A* o, `&gt; array1.splice(3,3)  // 删除元素
! M- }- ?% e  Q7 w8 ]" K, \(3)&nbsp;['a', 'b', 'c']
. T+ \2 U7 w: H; U  }3 o9 n&gt; array1
% l1 f1 Q# ~$ F' Q$ c* s% }% ?(3)&nbsp;[1, 2, 3]
$ V3 E/ M1 d5 M; U7 C3 }8 @, T&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
, R6 U/ s0 p# H; M3 b[]  y9 {6 b$ y& ~4 Z$ t8 O
&gt; array1
! p, V2 Y, B' B$ f8 |  n(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
( D% Q5 M" m5 e  j/ ?4 P0 a
  R6 D3 r1 t, \. Q- |( r/*
6 O2 c( I& }: Dsplice(index,howmany,item1,.....,itemX)5 g5 s# q# g9 h, _
index:必需,必须是数字。规定从何处添加/删除元素。- X/ A1 B+ S* u6 P2 ]4 S
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
# P& U: l/ M* k0 @. U8 Q5 uitem1, ..., itemX        可选。要添加到数组的新元素. V' X) m& d9 i  j& o0 X
*/' Z: B% d$ [3 [

7 _* H; F, o2 N0 T. L; P// forEach()        将数组的每个元素传递给回调函数
) t3 V3 j% M  E; U" M( Q. Q9 R( f+ O&gt; array1.forEach(function test(n){console.log(n)}); H* R  v0 m0 u
1
# ?; |, n- a  l& D$ B5 L 2
" L8 g! d* A; V, R) N 3
6 t9 ]- f5 ~6 o: u) S# n7 O A
' j# u' m/ h, T% T B2 K5 q% M+ [& o% a
C8 i9 c2 N; V# Z
// 返回一个数组元素调用函数处理后的值的新数组
& `; P& A. p" q% W) |+ F8 P- m# o&gt; array1.map(function(value){return value +1})# x+ \4 z7 s1 d$ ~2 t5 a% l
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']( n2 ^% f; u4 x
</code></pre>& y! L+ ~, s1 d: q
<h3 id="24-运算符">2.4 运算符</h3>6 j6 y( m0 ~2 Z/ o8 n  N9 B8 a7 }
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>1 G+ |: ?7 r; x" I6 O; d
<p><code>+ - * / % ++ --</code></p>
( N+ w9 U$ }/ L<pre><code class="language-javascript">&gt; var a = 61 E; o1 e$ b4 J7 q) x
&gt; var b = 3
- {( k# e: f+ k5 j* C// 加
  z$ Y! c: ^& A' ?1 E&gt; a + b
7 Y; q1 k( V% p/ T' K$ d5 L& ?9 V9
! J; _+ n  c4 l. n- k// 减
. \$ u) @* Y# y&gt; a - b
5 w7 \- s% R8 ?% W3
4 w4 W' w  ~4 J2 h// 乘; _! a4 Z4 n% Y: {0 B( z
&gt; a * b
; J6 t/ l/ N, H18  f2 }2 S& ~7 `8 F* x2 k8 L8 b
// 除& Z- ?1 g- c9 K% @
&gt; a / b3 R0 o) V4 ?$ S0 ~
20 G' h$ m% D; k5 f& F
// 取模(取余)
; `! `4 F( {% H7 o4 S; v7 d&gt; a % b
2 b" x+ x9 \; Y7 `$ ]9 w0
0 T" d( _7 K$ G' ^: r# \+ B" D// 自增1(先赋值再增1)
2 G$ [5 A5 y) [' h  d! i&gt; a++; i! m* `" e& B# z
6% L7 N! u+ [8 z$ f$ t$ w
&gt; a
6 w! F2 P9 F& `% E" i0 |, }73 u0 j/ a# r  P  H6 G8 }
// 自减1(先赋值再减1)8 B$ z1 H' H3 m/ Y; m
&gt; a--
  h% |. T3 J# {& w0 C6 R& s, Z7
1 M* H: P( |5 L' F1 V&gt; a: f  L" [; `* U# z/ y( A/ `  Z
6# A$ {2 M' b1 @! R# y' F) o
// 自增1(先增1再赋值)) v5 B% }% T: B( O
&gt; ++a$ o1 D& x5 x# F" T4 {, r! N, u3 `% D
7, w1 O9 g" T; r3 i
// 自减1(先减1再赋值); _* V4 i) L/ S) T9 l9 P1 e- f, T
&gt; --a
8 k; k1 i: U( o! }2 x1 N67 s6 B& Y7 S2 @: r; Z
&gt; a
6 t; t5 V- f& ?- b5 A- l6
# R& t8 [$ d; D% b: e7 d* q8 j- A( `0 y" |7 ?9 r5 S9 M8 q- x
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理. e) i7 Q3 A1 U) C; w( l7 o7 o. z
</code></pre>
0 |5 P7 i- t7 W. E( X+ m<h4 id="242-比较运算符">2.4.2 比较运算符</h4>( \$ R; J  s: d8 M
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
3 f7 Z: h& r7 Y4 M" K  u- z<pre><code class="language-javascript">// 大于% d$ ^# ]: j7 ^
&gt; a &gt; b
3 |) Q. w! ]7 |2 U. y' Z5 q  _5 Ztrue
% B( \3 \0 l6 o# }/ ?2 F// 大于等于, T4 k0 X4 p; i3 J  g
&gt; a &gt;= b
5 z# H  D: F! H6 Q" O& W. ltrue# \% U) ?% c) F0 R) e
// 小于
2 X! c2 u  G: ^& B* |5 A* e&gt; a &lt; b
6 J( R+ e  E5 B' I7 _false* T: p4 ~/ f$ O/ F
// 小于等于3 w4 J% S7 r9 {9 H1 `5 c" c
&gt; a &lt;= b& [. W( X5 R+ b8 l8 J3 b
false! a* x! \: \3 |7 X, z
// 弱不等于
' f% B# A; D3 O5 `5 l/ d&gt; a != b) T' K  w/ s1 e* [  z
true
8 V% `1 c5 |/ I. r/ X) v( G// 弱等于7 a2 }% e* v7 P& l
&gt; 1 == '1'
1 C# F, `6 @6 ]4 ^4 Atrue
; x/ v2 o' I( T# h6 o// 强等于
/ L+ W8 ?6 |' d! U4 A) b&gt; 1 === '1'
+ u4 y; l4 C  J9 G7 P" Gfalse
/ V% P( |: y/ V// 强不等于0 r- o) e6 Q8 v! q+ u0 V$ K
&gt; 1 !== '1'
" s3 z) J5 R; mtrue
6 }0 Y2 r' O9 l; t7 x5 g0 q9 _: ], l7 @% E3 ^
/*
4 U* s' X: f8 Y1 u, y9 T$ lJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误4 A1 q. J: u$ k6 b0 H
*/3 O: d; w# D! F5 E4 V9 T3 U
</code></pre>6 X0 w& y5 D4 ?
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>% w5 ~- k2 h: M5 O4 e  g! `$ ?* ]
<p><code>&amp;&amp; || !</code></p>
. X/ M& K/ t( d( N: c% y<pre><code class="language-javascript">&amp;&amp; 与4 V! x4 z6 c  T/ Z  G" K( ^
|| or
+ k- u1 R: b0 R! 非( N" j) L3 u: M& }% }( T/ g
</code></pre>
4 ~4 g; d% c- J' m9 g<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>, d! P7 F3 K& J# d% q# T( N
<p><code>= += -= *= /=</code></p>2 u( |" e2 a: u' m; y6 {
<pre><code class="language-javascript">// 赋值3 k4 S) N) H3 i0 P  B/ k
&gt; var x = 3" X: y: Z6 V. r& H+ J9 q- _
// 加等于3 F: y2 C4 W  l2 v( S
&gt; x += 2
2 s3 D1 y% w" }+ T* z0 g) N2 u" O5& n1 t, s8 c# X6 A- @& U& ?$ m
// 减等于
* I- u) t4 t# U9 O&gt; x -= 1
. i9 ]. w& D- E- F" Q- s4" ?' A% }, v# E7 m7 z4 M5 W; l
// 乘等于% U/ Z" Y( f3 }
&gt; x *= 2  l1 Y4 L5 J* J
8
: J: l5 b2 C3 E9 R$ m9 j; e// 除等于" i7 h$ y) r6 s. b. c8 j& [' I
&gt; x /= 2
9 d4 P" S4 e, }) q6 f7 E# x+ o42 S' I  a/ C( E- ?* }
</code></pre>
0 R  H. a$ C" `<h3 id="25-流程控制">2.5 流程控制</h3>; J% T. ]4 L& t$ F) o$ s& n! c
<h4 id="251-if">2.5.1 if</h4>
, |8 b4 F9 P/ e0 I( L- b<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
) u- ?& r* i0 f7 H
6 ]) K. S9 D9 n# B3 a$ P&gt; var x = 36 U7 {9 W% Y8 {; h- }+ h0 f% Y
&gt; if (x &gt; 2){console.log("OK")}
; q* }* C, z& Y: v# |; S OK* f$ s0 x+ `7 i4 }* f' [; g
& |! ?; }) E/ f9 W
2, if(条件){条件成立执行代码}
$ Y6 [: E% T! G1 H* s* L) ^        else{条件不成立执行代码}) a3 u! v1 k$ x) [, j+ f0 s5 v
/ R2 c! S6 S% }! P+ P! R" T
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
$ {0 _2 b) _/ {) t'NO'3 k8 F. o- h6 Q: d% U' Z+ r

$ k# Q' H/ c- E7 e, G3, if(条件1){条件1成立执行代码} 6 ]' i9 |: t: t: D/ d# A
        else if(条件2){条件2成立执行代码}
6 C( M# V7 V( z. s  X    else{上面条件都不成立执行代码}% Q' `( @. N, L$ `8 l* d/ ^3 u  o8 d

7 ^( U* g. h* Y2 [&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}6 z9 h; ?* K; @5 E: s: _
Ha- n" X' ^' U9 `
</code></pre>
$ U" ^8 i) s& ]4 q9 H<h4 id="252-switch">2.5.2 switch</h4>
; E4 h$ W9 @4 N1 r+ B<pre><code class="language-javascript">var day = new Date().getDay();
- O( @* |1 {5 H; ?switch (day) {3 i9 T: [4 K4 T1 [4 @, Z
  case 0:
1 }0 y0 o9 ~) F5 Q8 l  console.log("Sunday");
/ @; R; z. C+ _, Z6 Y4 Q  break;
+ {* h) }( N' j7 v: {2 ?( |- v  case 1:
' M% `, H. g+ S/ E  console.log("Monday");0 [* p2 G$ P. D, u3 |( o* p
  break;
, m0 z- B2 P# n" G; e( x/ f- cdefault:2 U, S/ `9 M4 e, t/ w
  console.log("不在范围")
  K, E; ]+ B6 |}2 ^; }* O' X: J* R8 K' W0 h
不在范围
' E& |5 F& Z) T- \+ ^( `</code></pre>$ D' \3 A7 v- \: P4 e; t* ?
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
6 k, D6 a1 b: `+ x8 H) E) H<h4 id="253-for">2.5.3 for</h4>
2 I3 u7 B, J; f; f0 p% N+ b* `<pre><code class="language-python">// for 循环
! h" C1 S1 \, r4 W        for(起始值;循环条件;每次循环后执行的操作){
3 e+ J" D' J& f! j7 h        for循环体代码" M- q! P# H) r, L. v2 k4 n: {
    }
" `+ e( a5 |% f+ Z- f7 h3 [
7 t. E' H6 ?( p( z, M) {- ufor (var i = 0; i&lt;10; i++){
( t7 A6 N* x* E& c% F% R# R    console.log(i)
, q6 }% L& z# c6 S, d1 T2 B; y}2 q& S( i. r/ @  h6 n' @
        0
1 f7 n8 E8 w* c$ F1 J/ W5 E- X        1. k! J2 W" z! r" \2 s8 ]+ Y" \! m
        2
8 ~: {7 v) g; L4 ~1 l4 t) t$ u' P        3* e$ ~+ d) ]9 E  K
        4
4 G9 b3 S6 }  _) O6 z        5
3 P: O8 a* q6 t7 t0 n6 o6 c- e4 u        6- i  l) D5 _, _; ^; v
        7
; l0 i2 @3 y+ C: ^( C        8
: y9 D. P- m) s' L8 {/ P  P        9
9 W5 h. @% y5 T2 a</code></pre>; d/ X; x& P! s, U0 G' k8 S! w) W7 c
<h4 id="254-while">2.5.4 while</h4>
1 g" F5 a, w9 j: |" m3 N8 B<pre><code class="language-javascript">// while 循环  ]9 ^1 F5 X6 d7 p4 ~9 [) h1 U0 e
        while(循环条件){) l2 K7 ~: K9 A& K# ]; e0 O
        循环体代码
; g" v# G% @% \) K4 J/ p    }. H: z/ w' v+ g( G% @6 j

9 m: ^% K& G' ?& Z4 M/ ?& A) \&gt; var i = 0
: V8 _1 r0 E, a' k  I&gt; while(i&lt;10){) T8 |9 p( f- N& o
    console.log(i)
0 f  C) d* \" i: C, O. O7 ^    i++% O( w9 C$ E) ?* B) k1 e8 `3 q* X
}
4 \9 N8 }/ w" I/ r3 E/ n. h 0
% n: Z0 N: X( W8 A1 n- b7 n 1/ q# i1 s" W) h: l& w
2
  b6 a( S8 n  Q. H& H 31 E! I# X) O# i- M! v4 y
4
: h5 }" w; v0 D- `; D 50 Z3 n1 d: i" n3 D
6
7 S1 p3 i8 h! [ 7
5 m: B7 U9 Q2 x, D 8
! X; s, v/ L6 P; ]7 \" R 9
4 O% Y! j6 x$ Y5 \</code></pre>* n7 P. i6 g: E: ], ?' e
<h4 id="255-break和continue">2.5.5 break和continue</h4>- u% D; p+ t! B/ D' \- U: ?
<pre><code class="language-javascript">// break
. g3 c3 G5 @- dfor (var i = 0; i&lt;10; i++){: ^, D& j3 D: T; D8 Q
    if (i == 5){break}+ _! @7 ^* e  R
    console.log(i)2 a, K& K! K. e  A" R: W
}% w) o( X% M, r% ]9 C5 ^6 c
0" s* L; L3 l: h% S( F' b
1! c3 |: c! s6 [9 i4 d9 T0 v
2
9 O' o/ X2 S; g$ p 3/ }' t' Z5 G$ r1 D- Q( v
4
4 D+ B! _+ e$ m7 Q% g5 _6 U// continue
( w0 y2 t8 @4 h/ Ffor (var i = 0; i&lt;10; i++){  v8 S+ `( N' _7 R
    if (i == 5){continue}
6 H, a' e/ |- [    console.log(i)0 m9 K5 C. Z$ Q' I- f
}3 n* G: H2 e  c- i
06 b9 |5 p+ Q$ i1 [0 b
1. }5 r$ D3 k( y4 \( V
2
% v, j0 _6 m% f 31 h9 q5 C( C5 K$ X; O: q. ?
40 z* L" z! [) I% b0 w2 h4 q7 S
67 u3 m; i7 _# ]! L
7
0 K" w& v: c' A* h1 x( F) D! C 86 o5 l2 m' F% P2 o
9  ^1 c% O4 o6 h( r4 ^! u7 |& z# t

7 Y* k) k6 F% G</code></pre>/ O, E: e: z* J3 R+ n
<h3 id="26-三元运算">2.6 三元运算</h3>
# G6 C6 p6 A  p/ y<pre><code class="language-javascript">&gt; a
4 I4 H4 L4 J9 v+ o% U' U66 v  a0 k% }5 H6 g+ A' ?& Z  N
&gt; b8 p. N* G$ i- F1 @2 ?% V4 o
3- G/ l8 h; r" [& E0 r/ y: T3 E! I

* _$ a+ @/ S' @( E8 c//条件成立c为a的值,不成立c为b的值" a  M2 r5 b( q, b3 V
&gt; var c = a &gt; b ? a : b
# o; T% o: e+ a! T6 ^&gt; c5 y9 S0 f/ Z$ O" ~8 E, X* M; J
6: `/ `$ |# {" O, n. s& }2 z
9 e: [# d3 m' v6 @# N7 n+ }
// 三元运算可以嵌套7 ?$ x" R$ K5 d6 J- a; U
</code></pre>" b& I- B+ S3 Q" Z6 ]6 e
<h3 id="27-函数">2.7 函数</h3>
& {, n! i* V3 B1 p6 Y# p6 s<pre><code class="language-javascript">1. 普通函数
8 O7 ^5 r* ]4 ~5 \+ o( z&gt; function foo1(){3 }- t$ w7 A9 t0 f, n* Q
    console.log("Hi")8 ]# I3 j3 Y% f% f  [9 {) V+ S0 `
}; G: m3 R" g# Z$ d0 t* D! [

) u/ P* w: `; y" p&gt; foo1()/ Z# A" l+ s4 _
        Hi
. ^: K" k# R! U2. 带参数函数
7 j& {; I& ~! ^' |: Z' p! H. W&gt; function foo1(name){
( J/ e5 W$ H9 w3 cconsole.log("Hi",name)  H5 \4 e8 t, ]' s  x# a
}" \( R  J5 h9 U" n* N( w
' Y8 T  f' M" i
&gt; foo1("Hans")4 \6 C$ a0 U0 k& U# `8 N
Hi Hans! ]! @7 |/ y( r: L. B4 e  C. n3 U
! M9 k1 R3 x& v% P2 z2 a8 _
&gt; var name = "Hello"
7 C8 ?* P, f/ e&gt; foo1(name)
. j, h/ M) T/ ]4 n1 U  THi Hello) f+ {" C9 z9 n: n# A0 ]
( d0 R; D' B- d$ F! M
3. 带返回值函数
$ P; G8 L$ @9 n" U9 s3 V; A$ t&gt; function foo1(a,b){
' R# _4 W+ z  j# f2 M        return a + b   $ ]9 `& ~# ^) T8 ~
}
1 q& S2 c! H" H1 g9 D/ J&gt; foo1(1,2)
! u! [7 ]  ]; r- R- `# [3' t2 @0 ^4 {7 l
&gt; var a = foo1(10,20)  //接受函数返回值
: h; K  M& X: a8 N+ s&gt; a
" c* z& u% r( P7 F  U  k6 u0 L30# Z: @( |6 q9 i9 f
% C3 K3 v3 G7 U. N% F9 l
4. 匿名函数
% b) g) _' }8 \4 M% A. ~&gt; var sum = function(a, b){
; k, W4 ^. K# h3 S' y4 \3 `; i0 @  return a + b;
, C. K* K: f! c; D}! v8 K( w& p( @9 r0 W, f1 f
&gt; sum(1,2)- N1 m: }  b- R2 a; t% v/ t
3
: {5 u/ y, C/ x) J6 A5 N) ^$ t, u5 G! _
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
0 X: T9 R6 ]0 ]- t& ~! Y& l&gt; (function(a, b){  s* j. ?/ x+ ^/ R
  return a + b9 q5 u1 N( S! K  a/ l
})(10, 20)
7 A7 F) A: K7 Z+ ]; a" i2 m30
/ v( b- E, q6 v* C" q8 C
/ W# I  e  d' r& y' {5 \) v- `( O5. 闭包函数, H# \) ?3 v! U$ O+ @
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数5 E, \: a5 F, H/ `3 k' T4 U
var city = "BJ"
4 j, M0 e# E  W  o5 a; B7 J: a5 Z1 f) jfunction f(){% k. \$ \8 c: |5 U, I: R$ B4 |
    var city = "SH"- Z: V+ ]+ e, x- ]6 J/ Y$ _
    function inner(){
: l! ?# ]* C$ D        console.log(city)! o+ f. b  @& ~7 B% v
    }
1 T0 \( e. y0 r' y    return inner4 o9 Q  Y8 G4 _7 ^5 R; W  N  m: x
}
9 Y: C# d3 Y0 D: }) Kvar ret = f()
" L  M9 K; D. _* wret()
8 r& j+ ^! `# P" w* i& |" S执行结果:
( Z! U  Q/ i5 [3 j* VSH  M! d. X5 X7 a, F. y

$ h- y1 Y+ Z8 `6 N. ?' q% D</code></pre>
( _8 A6 _+ P/ c! W<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
9 t& N) z  B% h% Q<pre><code class="language-javascript">var f = v =&gt; v;& }/ D9 ]8 z* b* E! j
// 等同于
5 w5 n: h0 u3 V! S  N9 Hvar f = function(v){7 M  f1 C: a9 k$ d: E
  return v;
0 j6 W1 _9 I" s8 n5 {}
# ^0 A1 j8 U2 z/ Y</code></pre>
* ~$ P& \2 @) q<p><code>arguments</code>参数 可以获取传入的所有数据</p>
( j4 k5 q- N2 t7 h<pre><code class="language-javascript">function foo1(a,b){# ]. |8 c) z% m7 E+ B
    console.log(arguments.length)  //参数的个数 * |  Y4 Q/ g& y8 K4 B
    console.log(arguments[0]) // 第一个参数的值
6 }" [7 a% u$ c. s+ f        return a + b   
: N! h8 H2 x  K" c/ d}: n1 Y2 i1 h" j2 l" Q. |2 z+ X
foo1(10,20). _) S# n; F* o& e! ?
结果:
+ I+ p& C+ a% p 2          //参数的个数
0 Z2 U+ m% F5 b$ d% Q# j* F; G6 s. x10        // 第一个参数的值
. g7 |7 D- ^0 i/ ?+ F30        // 返回相加的结果
! B( l' [$ Q- T% J/ g</code></pre>
$ ^9 \9 d6 [$ z1 B. F) d1 x8 w0 ]<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>! W  a# H- y( r8 p  ~) e; k
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>; }' J+ V5 X8 L7 g$ m) X3 H8 E
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
; B6 E$ _6 `" ]' E, |6 I<h4 id="281-date对象">2.8.1 Date对象</h4>
# G/ c3 _0 [8 N9 W<pre><code class="language-javascript">&gt; var data_test = new Date()
+ t$ V; G: r& L$ d, ^2 A# L& W&gt; data_test- n0 o1 W5 H7 T
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
; ?) M& X6 f' X! j' F&gt; data_test.toLocaleString()8 [+ J6 X7 |5 _0 A
'2022/2/11 下午9:44:43'- F4 J$ w. S' t+ w
7 s4 i1 q, y! O2 `: r
&gt; data_test.toLocaleDateString()' a& l9 N9 s1 W3 a
'2022/2/11'& z! \5 }$ G2 R. M2 H

# @3 k. B4 {/ {&gt; var data_test2  = new Date("2022/2/11 9:44:43"): W% B# ?  X" W5 v
&gt; data_test2.toLocaleString()
. N: ~5 n; A( o% s: g. e9 w'2022/2/11 上午9:44:43'6 h1 B% R2 [9 l; s
0 h; e7 g) k( A! m
// 获取当前几号  D8 N5 Z4 r6 E! B9 X8 L& Y5 v  k
&gt; data_test.getDate()0 h1 B, A& M( ?/ Y% P6 R6 R6 e
11: v$ S9 `* \3 O; B& f
// 获取星期几,数字表示
5 B; @& V8 }) x7 \/ a3 `, b&gt; data_test.getDay()  
: e# D8 c7 y" J+ C0 H  Z& l5
+ S' R$ w6 N6 r3 ~4 }  N0 p: [) P// 获取月份(0-11)
5 u: b+ ~$ Y- Z&gt; data_test.getMonth()3 n9 Y: |. b1 @8 W
1% c& i5 i1 W& C, x; @
// 获取完整年份1 f+ `: `& c) T( m% ~( s# @+ V! d
&gt; data_test.getFullYear()
* F1 q# o+ o- p* o- }4 \$ B2 x2022% h6 n, j1 A2 H* \
// 获取时
: [, J% p2 @: t; B3 }: P, }&gt; data_test.getHours(); T: u. i" O6 b9 ?5 e
21
8 J  T3 o* F  S. w+ C1 `) _0 }( `// 获取分4 i' O. a& c  t& u* R
&gt; data_test.getMinutes()
  b5 O7 ?1 `$ k% y44
- d# e$ u6 V. j6 M. K4 c# I2 v// 获取秒, r4 `! A' F5 M) e% }4 _
&gt; data_test.getSeconds()
: W, w) _: l5 l& l8 u43
' `; c5 K2 C- _# k5 T2 K- ?% X// 获取毫秒
+ X, F5 d$ ~6 B&gt; data_test.getMilliseconds()
6 O) A" D5 l% t4 ^. ^290% j# J& I& p" x: f
// 获取时间戳
+ [& E' c+ ?6 P0 c! \) @&gt; data_test.getTime()6 k4 `8 K. W4 z7 y
1644587083290
5 p5 k. b/ W- ?9 ~' _</code></pre>
5 n  H1 o2 T7 A2 J. {- c- g' K<h4 id="282-json对象">2.8.2 Json对象</h4>- R6 M% r) N) T/ ]2 K+ s* Z
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
  a$ Q2 o: x+ ]# [: hJSON.parse()  // 反序列化,把JSON字符串转换成对象8 |" {5 C2 Z; h  V' W5 T

6 ^% y3 `5 W  s// 序列化
- B$ T( }1 j+ i( ^&gt; var jstojson = JSON.stringify(person) ; F8 H, f5 r' T4 t/ |, l' }
&gt; jstojson  & E' [0 C& \. U6 l
'{"Name":"Hans","Age":18}'
7 p3 z, w2 Z3 \& X  `7 ^& @
, i1 w" q. U- q: h// 反序列化
# s7 h& S9 P: X+ g' q&gt; var x = JSON.parse(jstojson)  J0 [: y) I% }+ U% u7 W2 L
&gt; x. q  H% z% Z% e# {1 \& s" M: t- Q
{Name: 'Hans', Age: 18}) R! q) v. j# W- W5 w
&gt; x.Age2 X' |0 g+ u2 S- u" J. g4 N% @
18: `. O. u0 W# V
</code></pre>" t" Z# Q4 L! n$ p5 o% s
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
) V- q+ |# j' V<p>正则</p>, W; J  I! R0 ]6 F0 T: E. K
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");: A$ N7 A1 ?- A/ w) U5 w# \$ ~
&gt; reg1- G8 P6 n% k3 l& V0 m
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
$ K. C+ j4 r* Q! h! a7 Y. _&gt; reg1.test("Hans666")
0 Z9 i0 v3 t6 e" ]true$ f, p4 R8 a* [& g9 b" Z
) F/ [/ ^1 f" ?7 e5 o8 n* y
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/0 L5 G6 W4 g. Q0 C
&gt; reg2
# q  l  X( j  k/ |. w/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" U7 G! o1 |  {5 R1 O5 q&gt; reg2.test('Hasdfa')/ \- h9 d: I4 b# F' ^! G9 F& [- n5 A% I, ]
true
$ Q9 A* y! \* L( N5 e9 l
0 w4 ^3 r0 P6 T# N7 `: }全局匹配:
* z8 B, f" \9 }$ l) W* r&gt; name
0 s0 D7 {9 p2 H& G3 W% l+ L" w0 {'Hello'
9 o( v! E- b5 J$ v3 X&gt; name.match(/l/)
  U+ J/ W. m( X" U* g['l', index: 2, input: 'Hello', groups: undefined]0 M8 q& A/ k. j. H& N7 @* o3 Q
# ^$ l4 Y8 i! L
&gt; name.match(/l/g)
5 C; S: Q4 Q0 X' v* ~. E7 [! D(2)&nbsp;['l', 'l']
* \/ d2 Q% O4 ?3 K; o// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配2 U1 T/ ~. c6 b) k. `% o8 d& t

+ E* L% n; S$ Z' B8 C全局匹配注意事项:7 i( [! R1 f& Y0 B* z% E3 R( X3 K
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
0 Y8 `/ W" U. h* O0 Q" \5 C&gt; reg2.test('Hasdfa')
! ?% x0 l' ~/ M7 A* G' L% t" L5 Y2 Qtrue( n' f* H8 ]5 ~( o) q' H
&gt;reg2.lastIndex;
" m0 }" M8 W1 f  H8 z6
/ u- f. L# V; |4 W* ?# V&gt; reg2.test('Hasdfa')' D+ G1 u: B1 M
false
7 ^- y7 e5 V) t9 L&gt; reg2.lastIndex;. v2 m. e3 ~! N& |* {; F' X& S
09 L. j- T( a/ R2 N) B) t  n8 A" N, H
&gt; reg2.test('Hasdfa')
( |5 h9 k5 G- h+ O9 htrue
8 `& n* H: a7 i4 E& [&gt; reg2.lastIndex;
5 Z- N" m( g3 k6
, a! Y% x6 X- w1 F6 V/ n5 s9 w2 Y/ i&gt; reg2.test('Hasdfa')6 w1 z( V5 {, X3 p! B: |5 ?
false6 V0 g6 }6 F2 C. K' k* A' j! N
&gt; reg2.lastIndex;
: d8 `( G" P- s, r$ T0
. S( i' u/ p2 t$ a// 全局匹配会有一个lastindex属性
# b9 P- y# D- S+ D# Q&gt; reg2.test()' T. v- p6 i* t5 s
false, x/ ]+ X/ z+ d, f2 ~( ?: O
&gt; reg2.test()
' R: M. x9 z7 [+ K  qtrue2 }* n* M0 t0 }2 t- v8 T+ z/ g
// 校验时不传参数默认传的是undefined
1 X1 V, @( j' x* l' Q</code></pre>
7 @$ G: \- B9 [- `1 f' [<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' D- C8 P& |# ?1 j; n
<p>就相当于是<code>python</code>中的字典</p>
) B0 B( s1 v0 z% m" Z<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}* Q/ {- j& l0 |1 _/ t) K
&gt; person5 ^& b; X- ^; `9 c# N" f
{Name: 'Hans', Age: 18}# ^$ ]8 R+ c' h* v5 G0 k
&gt; person.Name/ B5 e4 F! U' b, u
'Hans'
9 X8 u7 G- W8 I! J7 `: m- b&gt; person["Name"]1 S$ z* }( m: w, O& e2 M
'Hans'' [" D6 H1 ?6 d# R
. S4 Q1 P" }7 t, P/ D; i3 K- a  V
// 也可以使用new Object创建2 h# l& a! S0 ]+ J# F' H
&gt; var person2 = new Object()
$ g% O8 n$ s9 C/ {4 r&gt; person2.name = "Hello"4 M7 ]; R/ Y. Q
'Hello'
/ F: p" S5 C& x+ o3 j5 o&gt; person2.age = 20; V: z. r1 e) G: s* w* i: H
207 p5 S5 L: Z6 ^/ q5 t$ q# t
</code></pre>
  S6 Y9 X* v7 L" L* M3 T<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
+ A  W7 ^3 Y3 X<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>; P7 a1 T& _& \: u: G: }: U
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>, W: s" K. v* t$ Z9 `* ]# i5 W: N
<h3 id="31-window-对象">3.1 window 对象</h3>
4 y* F: z* @! B+ Y9 }<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
' b$ f$ t( N3 Y! M& l1 }3 H<pre><code class="language-python">//览器窗口的内部高度
: T) U5 S' P! B! r/ wwindow.innerHeight
; p- G, ?) L+ x8 i3 Q706
6 T2 J0 r: [* P1 m3 a$ _8 Z//浏览器窗口的内部宽度5 G7 |. C3 ]: ?9 M4 N
window.innerWidth
5 f. V& j8 l- g8 p; n1522
- p% X* m2 n' k6 C( }6 [// 打开新窗口
- L* k* j0 G" @: k/ hwindow.open('https://www.baidu.com')5 T! W" ?! i* T
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
. {- n' p% J+ J. `* H  `# C3 T5 }// 关闭当前窗口0 v- }6 o, Q! C7 f& ^9 c( G8 [
window.close()
- O4 V$ U( s5 L( y  i2 S//  后退一页
2 m- G7 ]/ R7 b9 J( H  M4 Owindow.history.back()
' t1 y2 _5 B1 S  v5 F7 ]1 i// 前进一页7 e4 z  o5 J, q% L
window.history.forward()
! J( b, j+ v& K3 F3 b) C) l//Web浏览器全称
. n4 K2 w' N1 S9 w( t$ D8 gwindow.navigator.appName9 Q5 E7 I7 l9 v" G& [9 O
'Netscape'1 U; b( M$ _4 {/ x! x! E2 ?$ w
// Web浏览器厂商和版本的详细字符串( e, k7 S6 y3 C* f8 L9 d) Z+ B; n0 I; F
window.navigator.appVersion
6 b$ ]4 Z6 x3 p'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
' v9 I* i# F/ ~// 客户端绝大部分信息. C8 \& X2 ]4 h; \3 G4 g2 D/ _
window.navigator.userAgent
! ^2 Q" V. E6 |3 d5 ^+ ~+ _5 J% @) J'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
; ^) H, I& _% H6 f  H// 浏览器运行所在的操作系统
0 y$ c; W: j- o) I9 M, a0 w1 Y; @window.navigator.platform
( _  ^+ Y0 S) w/ y6 x'Win32'
4 i) d/ P' {. E* v) p3 }0 |
& N# O" M7 ^6 E: R* U//  获取URL
3 l6 k( t/ y3 t: _9 m0 |window.location.href7 w& L4 M. |7 r' M" J& [) D
// 跳转到指定页面
' d6 j; R% t% x* N( G6 \window.location.href='https://www.baidu.com'
" w% U8 e; f, C- q( q" ~// 重新加载页面4 l+ |0 G/ u4 {7 a+ A0 |
window.location.reload()
6 S; H! k; k" q7 q</code></pre>2 |. q9 E8 Z$ M
<h3 id="32-弹出框">3.2 弹出框</h3>6 z1 M  G% K% Q3 U% F' d& k
<p>三种消息框:警告框、确认框、提示框。</p>: m( s% ]$ [7 I+ _6 ~/ ^# O
<h4 id="321-警告框">3.2.1 警告框</h4>
$ g, |  b$ V& z  j& J3 P6 `( F1 t<pre><code class="language-javascript">alert("Hello"). Y/ f$ U7 H, n) g
</code></pre>& v8 k- w& Z8 ~$ F5 v7 N. t4 u5 E/ i
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>/ r  a3 \' @- H, U! M" M  \
<h4 id="322-确认框">3.2.2 确认框</h4>
# }) p4 _+ C9 n6 J% M7 G<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
% r* y, I6 k# T, a) p: v<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true7 L( H" ~; d/ S) ^2 G, ]5 b
true
: D. j* T. s% V' H" a* T5 d& j&gt; confirm("你确定吗?")  // 点取消返回false
0 P5 y) O; \, I; gfalse* o  i5 K% S' e+ b3 C# b4 x
</code></pre>
$ o- {: a6 \2 L/ a<h4 id="323-提示框">3.2.3 提示框</h4>5 B) r) Z! x) |
<p><code>prompt("请输入","提示")</code></p>
- I; Z9 e" _9 H  ~5 g% w0 w+ N<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>, N1 B& v9 u& y4 w& P
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
. g6 }; @3 s. b4 u3 Z  g+ j2 U<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
7 t+ V7 H! L( o<h3 id="33-计时相关">3.3 计时相关</h3>" k7 x# T7 {3 s) Z0 `4 {6 `* w
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>6 V+ [; `2 N1 y8 b* e7 H
<pre><code class="language-javascript">// 等于3秒钟弹窗
. Y/ `( ]# m0 B; h) E% XsetTimeout(function(){alert("Hello")}, 3000)& {- Q& k1 n, u4 ?
- O) q8 e; ]9 K* [/ Z
var t = setTimeout(function(){alert("Hello")}, 3000)
! @; o1 N+ T* p: h4 ?( o0 M5 y. F$ ?5 S: c8 Z
// 取消setTimeout设置& Z3 B8 h7 E1 ?) @+ a
clearTimeout(t)+ J9 v6 d* `9 ^8 i6 H$ Y) R
</code></pre>% y! z5 g% X- U
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
) C5 \7 R5 Z& ]( x+ v5 z<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
* ?2 Q1 R+ J  @: r<pre><code class="language-javascript">每三秒弹出 "hello" :
8 Y, k9 G$ c" C$ ^3 ?setInterval(function(){alert("Hello")},3000);5 e. t  Y& W) Q: v- t7 v# w$ [  l
</code></pre>
' }0 s+ ]: M' a<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
5 b* x3 {* g3 L% o8 P<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
9 `4 k7 D& w2 W1 s//取消:+ U4 c- e- O, V/ f; p  S
clearInterval(t)
' _, k1 `& S5 k3 D" z</code></pre>
7 q3 D2 ^+ P& l1 I6 T; S# G; L8 o/ m$ g
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-4-19 10:41 , Processed in 0.070061 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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