飞雪团队

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

前端之JavaScript

[复制链接]

7957

主题

8045

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26201
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
# K2 t; n1 _. a  p5 H
<h1 id="前端之javascript">前端之JavaScript</h1>
- f% p0 R, L  V<p></p><p></p>
0 F. r% }" y6 |3 `<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
2 u" n3 ?6 O/ l) ^<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
2 o0 ?3 b0 m9 H5 w; Z它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>1 j) Z7 z. v" |: v' D4 h" C* W
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>; U- I& @7 h6 [0 J. u: K( j" H( D
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
) T- b. D; R/ B; f) f<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>' X% I# V6 D. B6 m. c
<h3 id="21-注释">2.1 注释</h3>
9 B- A/ y! P( k; A( T, D5 F<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>( M6 x7 R8 a7 }1 s1 s# \/ e5 e
<pre><code class="language-javascript">// 这是单行注释
% i* }' e8 \9 b
! e% |1 c2 m8 C/*, T7 F: ?3 ?  j! ]/ P
这是多行注释的第一行,
' P6 E1 K( e5 S. E+ E7 e8 ]" u这是第二行。
5 O* p  a3 y* o1 Z. E*/
; _' {" E/ m, Y5 E9 u1 V( ^</code></pre>
: |4 j) r+ }; w- z+ L% E<h3 id="22-变量和常量">2.2 变量和常量</h3>8 ]' H7 L$ B$ C: L; x* u
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>( \: Z5 ], K4 r, r- B1 Y
<ul>* O# x0 ~  {2 B5 Y/ @/ {; X& q
<li>变量必须以字母开头</li>2 b/ i" M4 x8 d2 |8 M/ S3 [
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>6 n4 z4 t& a7 ~: V: F
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>' t. f# h' H( i. l, @
</ul>2 W9 e3 C+ u3 _2 j+ _
<p><code>var</code>定义的都为全局变量</p>" f& S9 a3 b7 O, J: B; \. E
<p><code>let</code>可以声明局部变量</p>  ~, i6 ]% g! A7 \# p) i- b
<p><strong>声明变量:</strong></p>; M, ]4 P  ?: x6 o2 Y2 X) A
<pre><code class="language-javascript">// 定义单个变量
; O( @5 K- @8 T: |&gt; var name3 v! A, ]. C7 C1 n) S. Q
&gt; name = 'Hans'# t; l# M& E! F& D7 ~
//定义并赋值
' [% V( G; u1 W" c&gt; var name = 'Hans'
! i  A$ [; ]* c5 i&gt; name9 [' Z6 }# L' ?* u
'Hans'9 h1 H8 z: U7 _% Q1 A! f  m
2 B, ]" t  h+ f4 I$ I# n& d. b
// 定义多个变量# |8 l0 G& x. a
&gt; var name = "Hans", age = 18
2 W. ]2 }+ g& X5 L( a" G; J&gt; name
3 ^9 R2 J# u: F# G4 J'Hans'5 p+ U4 |6 A5 _) M
&gt; age# f0 `+ ^) g  R+ M
18. X6 g+ V: S8 }

3 h2 k. g% B  U. h" a" o//多行使用反引号`` 类型python中的三引号
% s! g0 \2 X7 A  e&gt; var text = `A young idler,4 [2 O. N& j2 ]# N3 ~  r+ p6 p
an old beggar`
) s8 \; u: }* v5 W' A&gt; text
  e+ q- O# p( t7 _'A young idler,\nan old beggar'
- ?8 u' l0 a  D</code></pre>0 i  X5 L5 O+ ?4 ^' Z! t% W
<p><strong>声明常量:</strong></p>) Q: o3 Y; L) [' E
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
+ w% Z% c! k0 v4 `. _<pre><code class="language-javascript">&gt; const pi = 3.14( \3 v$ n, p+ s$ R$ w
&gt; pi
0 t) S) a2 T  T( `/ }+ J; I3.14
! B, j" u1 E$ J( H( Z&gt;  pi = 3.019 {9 [/ r0 C, J5 x( {; N0 w5 Q
Uncaught TypeError: Assignment to constant variable.
4 S' {0 \: o! Y6 g- C    at &lt;anonymous&gt;:1:4' Y6 x" s$ A) I& W

2 z" H) f+ U: V) r</code></pre>
! ^- C- Q1 s( h  T/ |* M% g; r% Z<h3 id="23-基本数据类型">2.3 基本数据类型</h3>* }  m% o, u0 ?& G% P! ~
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>" t, ]0 V0 b# b. N% j
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
' y; H# [8 M2 o2 r/ g8 ?0 [+ Q/ e<h4 id="231-number类型">2.3.1 Number类型</h4>/ K3 O2 v4 |7 M- ^: R  G
<pre><code class="language-javascript">&gt; var a = 5
8 {" G# K7 D/ q3 z- @9 @&gt; typeof a   //查看变量的类型  
2 c! r. O/ P: g( Bnumber
- x3 d  `( s* v8 s: P. M: W' j
2 G3 b3 k1 `+ N( _* [* b0 u&gt; var b = 1.3  @3 c; S) I' \4 N5 d+ t
&gt; typeof b1 H9 L. T5 }4 o0 A; i  E5 Y+ j
number
& v- t$ J, h4 V+ {5 A/ \+ _% o; j! _
// 不管整型还是浮点型打开出来的结果都是number类型2 I* q- c" O$ D" {
. b0 p9 U/ }' ]' m! o& g7 h* l
/*7 b( ]+ o; t, J5 ?; X
NaN:Not A Number2 \- {7 G* H8 [& e
NaN属于数值类型 表示的意思是 不是一个数字
8 m8 n+ ^- i1 X*/- i, [6 R" N+ M" V+ y% r6 L* o

8 T* Z" q6 Q5 V; I' u3 XparseInt('2345')  // 转整型
4 G7 n$ A( r2 ?+ L1 n4 T$ b8 x2345
* f1 ~2 Z9 c$ Z) G+ rparseInt('2345.5')  n' ?4 O% u8 f/ ^
2345
( f% n1 y! P' B+ ^  O( Y: _parseFloat('2345.5') // 转浮点型  ?) \. j7 \( J9 E* n: {# \
2345.5' f' x3 S; m' I4 V4 f
parseFloat('ABC')+ B" V" K2 i- N+ g( d
NaN. \' `3 o  d. G4 a0 l7 M! T
parseInt('abc')
% |( s  b, F+ ]2 [& j, ^1 J/ `NaN
+ J' j- Q( a* l" ]6 G; s2 J</code></pre>
3 a4 O! K- t( |. L/ m$ l<h4 id="232-string类型">2.3.2 String类型</h4>& V5 c/ A% Y9 U. g" z! ?
<pre><code class="language-javascript">&gt; var name = 'Hans'4 u/ D8 r2 F$ b* y! ?7 X
&gt; typeof name, T% c  c) f* t: C2 T8 ?
'string'. W( c% V5 F" ^/ [0 W  A

: [6 }, r1 \. z. j, c1 [* ?' U% e//常用方法( ~3 D5 t" v% b& ~: h9 m" V
// 变量值长度$ V2 ?7 X8 k" b7 Q* W# ?8 h
&gt; name.length
' b6 T, z/ l- D4( U- v& ^2 G* q& X, A7 e5 d
// trim() 移除空白0 ?8 }7 U$ I2 g" l$ r. L
&gt; var a = '    ABC    '( C" U3 ?" w! L. r3 x+ ~
&gt; a6 C( A' @, b  C$ z; H7 o3 d
'    ABC    '
; a# X& E) k  F: b$ i! ~3 v&gt; a.trim()
! k4 l8 G  Y0 p7 Z. i' Y'ABC'
+ p: F( z- u8 r& i( F% p/ U//移除左边的空白) g! q- |0 z$ O1 I% x& \
&gt; a.trimLeft()- A$ C, A$ Z, E- V' N0 j
'ABC    '
8 O: [8 q% K' r8 @0 F//移除右边的空白
, s7 r& X4 F9 O9 m4 Z3 e- o$ {&gt; a.trimRight()
! X' [" L$ l. o; W'    ABC'+ Z* y* R3 E2 j

, F+ N* A( `3 D. U5 b8 s/ ~2 S//返回第n个字符,从0开始
" l7 e: l* N2 ~7 Q; a&gt; name
$ e; F* w1 y' X$ ^'Hans', _3 _# H/ P2 O1 x+ g
&gt; name.charAt(3)
9 v7 g0 f$ `' i1 k! o1 Z's'
# M3 O3 c3 S7 s$ T2 k&gt; name.charAt()3 I& D9 ]. o0 \! r
'H'! [( T* p; n/ ~# W9 E, X8 j- ]
&gt; name.charAt(1)
: O, `8 a9 A6 R8 Z+ E9 ^4 o'a'
. |1 O9 }- p- J) ?5 O- n) l" n1 B) \) G  P- U
// 在javascript中推荐使用加号(+)拼接" G( j1 c; [5 n' B
&gt; name
* h# J6 H1 |, q6 O'Hans'* _; k1 u% t( ~  }( W6 Q5 H4 ~* a, P
&gt; a  N( _! Q* G; Q- f
'    ABC    ': P" M' f, A" E( J3 ?+ R; S( G
&gt; name + a7 X+ e0 f; S8 {
'Hans    ABC    '/ T; ~% B4 [: \7 p+ R7 |
// 使用concat拼接$ L3 K8 L. n" I8 ]- R5 t
&gt; name.concat(a)
' e' [" P& K: D'Hans    ABC    '
/ I7 X* S3 ?" t; t. ^  ~. P. U6 [! [2 V& F4 f
//indexOf(substring, start)子序列位置
9 m' Q/ v; A4 [8 u  _- ]; l
) f9 ^$ q9 {% z9 ~. s: M/ p&gt; text
5 X! ^# l  b! P4 ]/ h'A young idler,\nan old beggar'
) d2 e, {7 L0 c3 u- [7 u&gt; text.indexOf('young',0)
1 L9 z8 w( R) [* f4 x# C2
3 p; v6 m4 ]# ]( b- D7 `, p. d5 E6 H, ]  X: f- O) X7 y
//.substring(from, to)        根据索引获取子序列
- l1 \* V( m  ~, J" J# M' I$ S&gt; text.substring(0,); f4 G" N" F: I0 B3 |4 [
'A young idler,\nan old beggar'. z! f' l& O# i$ ?3 Z" h
&gt; text.substring(0,10)
* u6 K  B, J  T& J7 }/ E: w'A young id'. r( Z4 w/ B, B% D) L. Y

6 Z' q. S% x+ v; Q// .slice(start, end)        切片, 从0开始顾头不顾尾
3 g6 A; h7 P8 J7 g7 D  z&gt; name.slice(0,3)
7 T2 r1 E; n7 r# V& Y. N1 D'Han'
7 e6 w# W$ c. L! Y! P. y% V- A5 s
7 n2 N" J$ s' K// 转小写
: ?  q8 [4 i; Z&gt; name
% y6 ~9 d" Z- A  Z7 {'Hans'
* w+ E/ C, f7 s* N&gt; name.toLowerCase()
0 d" V; z4 u5 ^- I7 Q& \'hans'2 F' A$ ~& @, u
// 转大写, X! a2 p  U! \/ r% H/ d
&gt; name.toUpperCase()$ Y4 ^7 X( G+ ?
'HANS'+ `9 }1 ^5 @0 q! h" n7 o
6 X- ~; _1 Y# j" B
// 分隔
$ T) v. d& }/ @2 C&gt; name; K$ H* m, k1 c2 T% c- k+ @
'Hans'
" s* z7 h9 H: A* E2 N2 ?/ @&gt; name.split('a')
5 b+ x. t7 I. @" ]+ H9 ]' }* N(2)&nbsp;['H', 'ns']
! c% W; ^2 d6 V1 _% r4 T</code></pre>
7 S5 n; X, N+ _3 r  `- z  I9 ~( V2 q3 N<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>2 @! Q1 O: h. o' @  Z
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
2 K" v2 a. `6 v0 M7 u<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
! @$ E4 B& h. @<p><strong>null和undefined</strong></p>* `/ b' N  _7 H+ I
<ul>
& W) a8 ^9 h" s6 R2 a- N+ V<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>/ q$ t0 Z: M. C% c
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
0 K% q' l" d2 @( S</ul>
8 h7 r* h/ M$ f7 a<h4 id="234-array数组">2.3.4 Array数组</h4>5 W  ~0 w1 o  W# H3 R8 Z9 f
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
& k" c' l) ?4 L& X* C<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
9 F! v/ y  g% v( a" y/ j# r&gt; array1) Z* ~, j/ H* A" Z
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; W; `& ^% T) z0 [  c
&gt; console.log(array1[2])  //console.log打印类似python中的print, z  @1 t. K  {# @1 C
3
  [* e1 H7 e) C  a// length元素个数
% }+ V, {+ d) u: W&gt; array1.length) k( O: y. m  _/ j; V; }
6) X) T" f: M8 F' Q5 W* c
// 在尾部增加元素,类型append
2 {4 [( p' C# ?. n&gt; array1.push('D')
" w  B; h. V! Q2 B" ~% u7
) b. U+ w9 t* l&gt; array1. W; \7 C( A7 s  C# ]1 M
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']0 G0 Y/ A4 w5 M. Q1 P: |1 O+ M4 W3 N
// 在头部增加元素+ p- G: Y; b1 G" c+ D1 A  L( o) ?
&gt; array1.unshift(0)2 A9 H  l* D% d6 V
8' ?& J  r. |/ _; J
&gt; array16 W) e% {9 l% w) D
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
9 V( x, {4 z. J; P0 z7 v0 H( C: X+ T& n" d! f8 x3 P
//取最后一个元素
: N7 W& g/ M- |' e&gt; array1.pop()
0 }- i0 y' I8 M# W9 C7 D. s'D'" l& v( H6 W. F/ {0 h
&gt; array1
; g2 z- j: h, q(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
. B$ t# g6 j+ F. [& r5 y0 h//取头部元素
% |0 [! S! O5 s  z0 `&gt; array1.shift()
9 c* Z7 T4 ^; h( k% B' |+ E0
- P" {: J: C' h7 N$ U0 z&gt; array1
( F6 p* U& J: p(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']0 v$ }& l* p* m
. H6 J# O$ a9 U# g& {: y
//切片, 从0开始顾头不顾尾0 @5 n! B# l, ?$ r
&gt; array1.slice(3,6)
3 H: G4 L: i% F+ v(3)&nbsp;['a', 'b', 'c']
5 w$ R. x1 |* U2 z! Q  n& i// 反转5 ^* M9 m3 y; S. P
&gt; array1.reverse()6 C$ Z1 L! o% j$ ^' U/ R; w
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]. P8 O: Q3 z4 {7 Q0 n
// 将数组元素连接成字符串
, L" A; P7 `+ n9 i7 q* ~$ V&gt; array1.join() // 什么不都写默认使用逗号分隔
2 N. z) x( T- t3 t% L/ a$ G( l'c,b,a,3,2,1'7 ?$ m. y; F, G; R
&gt; array1.join('')
9 V5 g4 C8 d2 m1 p' y0 ?'cba321'' p9 o( P- S  i. K8 K4 \
&gt; array1.join('|')% U# P1 V5 ]" Q* D/ n
'c|b|a|3|2|1'
( p' r' @5 O4 e9 A2 u
$ v- V; X/ w( D8 g4 i7 u( P/ v+ ~// 连接数组
4 O/ {0 \7 S% n4 `, i4 R&gt; var array2 = ['A','B','C']* p( t7 F. h$ q1 r
&gt; array1.concat(array2)
0 L$ K$ g( h$ }6 G5 p- F(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']; c+ {2 ?9 e# ]
0 w0 k; C; N+ c( z
// 排序
7 s, v5 x* f! T9 R3 i4 I&gt; array1.sort()
) U- g3 x1 W* S# t& a. t, i(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 s8 y) U8 F6 o$ w2 N' o8 X

7 G# O) k7 ]2 O0 D7 c// 删除元素,并可以向数据组中添加新元素(可选)' h3 k9 }: b; R' a9 R
&gt; array1.splice(3,3)  // 删除元素0 `1 P2 {# D- ^9 x, o: i
(3)&nbsp;['a', 'b', 'c']
# |8 R( B8 ]! {5 ]: f&gt; array1
+ q! N" u* S5 U(3)&nbsp;[1, 2, 3]
+ P8 A1 P# w6 @, s, d- V0 ]&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素: e/ ~, }2 L, i, h# B6 D# i; ^
[]% P- Z7 M; |* f' F
&gt; array19 E  Q! O6 I0 n3 C( [$ Z2 `
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
$ U1 F2 T7 Q! y# a
( {" ^$ b; H" j1 a4 B% g3 X/*' i' H5 m2 J# `7 Z, f
splice(index,howmany,item1,.....,itemX)6 |9 _0 q7 K1 j7 A
index:必需,必须是数字。规定从何处添加/删除元素。  e  j1 P2 P: R. Y3 t/ f. e' p
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
( p% z2 m2 w& K; y/ Q' O  `item1, ..., itemX        可选。要添加到数组的新元素" x- i7 y8 C8 X' {' c8 t6 _2 M
*/
! d: ?% P$ X$ R8 S3 T$ \- y
4 t5 F) D% K0 P* ~9 D$ O. K0 A. V// forEach()        将数组的每个元素传递给回调函数+ K+ W% m! V& Z
&gt; array1.forEach(function test(n){console.log(n)})
! A/ M0 M) X" J; ?7 M$ V 1
) l8 Q8 |" z) ~, }9 m9 ` 2
! X4 h$ H$ T" C) @" f: }6 R 3
2 t8 b. [" I& ~8 [1 v A
3 Q! m0 v4 L# O6 ~# O, u3 [# k B4 c/ C  k2 p$ ~( _
C
7 G7 K* P3 s6 a) ^4 Y// 返回一个数组元素调用函数处理后的值的新数组2 }  V/ _  ~2 l0 _, Z" E% E3 Y8 i
&gt; array1.map(function(value){return value +1}). T  o2 x2 x, @6 U$ u9 [
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
8 E3 Z7 u8 A% b$ V0 t4 |4 N</code></pre>+ g& g, @0 a) n4 y3 p3 J* P
<h3 id="24-运算符">2.4 运算符</h3>
/ n/ x, f. M4 B9 s6 t6 q0 z& W$ E<h4 id="241-数学运算符">2.4.1 数学运算符</h4>( n" d. ?  L9 t/ S* m9 U! j3 T
<p><code>+ - * / % ++ --</code></p>$ a' I+ X2 t+ W4 E1 J
<pre><code class="language-javascript">&gt; var a = 62 R9 J8 `0 |  [" H
&gt; var b = 3! S: ?9 ]1 u# j) x' z- y
// 加* @8 T- `& |5 Z/ O% F
&gt; a + b
  K, ?4 m. y+ L' I5 B( b90 o& W+ y' J* s  o" \, }% _
// 减+ Y& X& j6 y" A  N: E" J6 Y& l
&gt; a - b) z7 X# h" y" o2 t) Q
3
3 M0 @  g( c" g7 k// 乘
9 Y; R+ t% L8 Z9 |&gt; a * b# ~+ T9 Z1 K* ~2 w- G8 G
18
/ `( y7 w5 a( L, [" m0 l5 z// 除( L: _1 I# c) ]* x
&gt; a / b# Z+ e  A0 x' P$ B; Z
2
& L1 }, H1 ]- ~8 |6 j// 取模(取余)
+ c$ w+ B6 M$ b( @. t&gt; a % b( {; i# y0 [1 T
0
( w: M5 A$ j) p5 b: y- A- S; S* g// 自增1(先赋值再增1)
: w; Y: b' d8 J+ `: E, \9 d) ]  \&gt; a++
0 x, z. W% O7 s( e- ?" w& q6
/ x$ P1 ^- R2 l& h  B: p, n! B&gt; a0 i6 n. S+ w: K* m' A1 P% M/ k" k
7
( v' B! B# f2 X& e6 u// 自减1(先赋值再减1)
: d! Z% s7 d! |$ `/ A0 q6 n( e" l&gt; a--. F) K* `3 G& ^$ j% {; B
7
! z( ^7 `8 p% X&gt; a" k; P: c( b& @+ M! |' B4 G
6
! [" I- ]. S. J, I: y- @+ z) Z0 R// 自增1(先增1再赋值)
6 T' L4 b: ^, U7 M&gt; ++a0 w$ f2 ~4 O3 f9 k2 H. A0 `
7( J$ j# {: i: j" U+ A* c
// 自减1(先减1再赋值)
; i3 K0 o( L8 z&gt; --a
/ X4 l8 ]0 u3 \8 R6  R) h5 }% d9 F) F8 P- f/ M
&gt; a) U3 N( V; j" E
6
8 I* M. B$ r& [4 A+ N9 S% q$ _. o
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理% k2 W9 S1 V9 ]
</code></pre>8 V3 H+ Z2 t# N5 c0 e% g' q
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>) N# T( {( X5 `4 f
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" `0 J; t" A( b! Z
<pre><code class="language-javascript">// 大于
. f% g; |6 d$ s: v4 A&gt; a &gt; b3 z3 G; ?+ y6 A. F" d! E7 t
true& v  G( L# E0 G/ ?
// 大于等于! Y# z, G% C  p4 R8 B
&gt; a &gt;= b# ]: G( E( }, ]5 h5 ?: H5 L
true
* X4 W- A/ M1 ]: i( \6 b// 小于
: b8 w$ Y  N$ [) r9 C&gt; a &lt; b. r+ P+ {* |2 [0 {9 p5 T- H: ~
false
9 n$ g( A5 i" M// 小于等于
) X% k- V: M! ?" j) Q- P&gt; a &lt;= b. W  P- |) @6 O, k8 H: @) i
false
; F, W' R9 w# j8 b! b// 弱不等于% T$ p& O' c2 A9 q  [: f
&gt; a != b4 Y3 i& Z6 i1 T! w5 P
true
( ?, {6 \% ?4 Q" f1 d3 O/ p// 弱等于) Y1 n  _; \! M5 X0 R
&gt; 1 == '1'* ~) C5 n$ |) q& X
true7 l. g8 \, G6 |/ |
// 强等于! j2 F) {- N6 N/ ^$ h; [
&gt; 1 === '1'- ?& I. f+ W1 W' g+ N
false
! W+ I9 ?7 s  O% K// 强不等于
0 R0 n: |; G6 y, T/ W1 d&gt; 1 !== '1'
. P8 l$ ^: G7 H- I7 R; G& Ftrue
1 M4 ~' [8 R! V( D0 B2 {' a- r3 J1 u! S6 i- `4 t
/*
  w* b: g0 E  ]; CJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误( @* L+ U/ A' w1 A7 a, D
*/7 s' G: ~5 h' D9 `6 W
</code></pre>7 Y2 H1 r  B. x: d$ j# F$ R$ B
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
- q  u5 I4 X+ e; c! n& A<p><code>&amp;&amp; || !</code></p>/ e2 i) @9 s4 S3 `# d$ h# F+ A- Y
<pre><code class="language-javascript">&amp;&amp; 与8 R" g* t- X3 U$ Z
|| or 9 i1 O' ^3 d( Y" D9 I
! 非
1 u7 y* y# {  K9 F</code></pre>
: ?6 p% T5 `6 {7 a* ^<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
# j& `5 b/ {+ \  k<p><code>= += -= *= /=</code></p>, H, y1 s* j0 O! Q/ P
<pre><code class="language-javascript">// 赋值5 H% t2 Y6 V/ q' O- e5 T" L0 O
&gt; var x = 3; g* J/ d3 ~# p- d4 [
// 加等于
/ r7 P# b) R& b8 _0 i&gt; x += 25 Y" |$ }8 c' W; I' b4 E/ z+ E
5
/ z; |9 T7 Z, o0 Y// 减等于+ I5 i- y' i$ v) R% N& W' u
&gt; x -= 1! G0 r8 N$ _0 x- G2 }: }, g$ \
4
  e. |! M! r; x$ _% t// 乘等于
) y7 \0 V6 D: `  k% e&gt; x *= 20 U& Q& @' F2 E' X& N& e
8
$ K, E- ]' a/ ~2 O5 }// 除等于
# i. ~' e$ O* h. h2 {" w&gt; x /= 2
( B! I0 i4 o( m4) \1 j, z- r2 m8 ?" O( W
</code></pre>; S$ ?2 [. I5 d( _
<h3 id="25-流程控制">2.5 流程控制</h3>/ Y. s2 N5 S6 x* r
<h4 id="251-if">2.5.1 if</h4>  |$ s3 B9 A. g4 P9 k6 \
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}7 G, w  v. a% I+ [8 p( q
7 |$ G6 P0 K& v5 ^, n8 }: W$ X* R. a
&gt; var x = 3
( G) u0 `) |3 z! _+ k) s4 `&gt; if (x &gt; 2){console.log("OK")}! K" i3 J' }( z1 G+ H8 M( N
OK
' @& g6 f5 J, O0 r2 D9 j( S& e" U1 n/ `6 ~' o+ G5 G+ _
2, if(条件){条件成立执行代码} ) g) t" J+ X) D+ A2 i) ^% A1 c
        else{条件不成立执行代码}8 O' A2 O; H/ b$ m1 U

, g# p. a& [; Y4 ?2 X&gt; if (x &gt; 4){console.log("OK")}else{"NO"}" Y) E* J( G( m1 b: m
'NO'
7 u/ r0 x1 u0 }/ T) ~, S- u% {8 G* l3 g
3, if(条件1){条件1成立执行代码} # t7 W/ K/ ~! s6 V" q5 T2 ~1 S
        else if(条件2){条件2成立执行代码}
/ {: V# {6 y  k+ E+ _2 I4 j- x    else{上面条件都不成立执行代码}( D7 z% g% W. [8 h, x% j. V  C

+ |: ^% g4 d0 j7 l+ `- r&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}; f" H+ J# ]- p) ^7 d, c, |: U
Ha1 M# ?9 y3 Y0 p
</code></pre>
( N( ^( |5 o( C, {9 u& g<h4 id="252-switch">2.5.2 switch</h4>4 p! _# [- t$ ^/ _$ k3 C: i- n  t
<pre><code class="language-javascript">var day = new Date().getDay();( _* ]0 P3 ]2 v; H, u
switch (day) {4 S, ?9 e5 O5 x* \) T2 z+ M
  case 0:
! w+ }7 n( y) R" e/ g/ s3 }2 H  console.log("Sunday");
: Y3 i! i3 ^* q, v  break;& X* S, K& b/ M' v
  case 1:
0 F) r$ w, ?- e" I, `3 ?! H6 V' T  console.log("Monday");
8 G9 @9 Y( Y$ i* y* {7 t  break;: K  X8 S8 ?8 x; Y
default:
' f1 H0 b. M, j  console.log("不在范围")
+ B: S- |% X$ W8 t8 D6 b5 F1 p}
" r  c- M/ m" y( r0 ?1 P3 @ 不在范围
$ Y: m3 m: x- z2 D</code></pre>5 ^6 a/ Z+ C. |8 z  {# V6 ^2 R. E/ b
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>& G* |1 Y# @' V  p5 y2 e
<h4 id="253-for">2.5.3 for</h4>
2 ?4 [- o  P0 F7 S- |<pre><code class="language-python">// for 循环. @  ^5 Z& Y! x* H5 k2 @' i/ m
        for(起始值;循环条件;每次循环后执行的操作){, L# b# d( F  V  W" N
        for循环体代码
) f3 y% l5 S- [/ H3 \    }
# Y" @4 U& R* u, ?. r; e: g: `0 |, I* u+ Q; e# G7 E+ Z7 ^
for (var i = 0; i&lt;10; i++){8 q. H; b9 v5 ]* C  ^. t2 X0 Z
    console.log(i)
2 w; L' \: n' L- N" m8 g/ o' ?9 u}* l' r0 c$ S+ @
        06 ]: ^) v! X  z0 W
        1
# P! u+ y6 V& z9 E        2
& E" @: s: R5 c1 P: w% r  T7 w7 n3 N        30 `7 @% K6 B2 _7 E' T" _
        4
( G/ w1 X7 l+ C        5
9 C1 k* B7 \) ]% B, @1 _# Y        64 i, b/ |  ]7 {. g' |6 P9 \
        7
: ~& `- f% ]4 K; j( q$ T, y        84 M/ l0 d% V1 R  m) l+ Y& O
        99 ^  R  s" b) a' ^& G) _
</code></pre>5 z& M$ T. x: `$ b- C" b3 i; t* [
<h4 id="254-while">2.5.4 while</h4>
% P4 K) v6 l1 k. y" k1 Y2 `<pre><code class="language-javascript">// while 循环
' c+ q+ s5 g5 t; j        while(循环条件){
/ O2 ]6 u) c& ?2 s0 \, `: F        循环体代码& r6 ]; b, T+ D0 W( [% O) o
    }
- T$ j, J2 ]$ _( w. g0 Z. p0 g. [" b' e2 b4 T
&gt; var i = 0* l. s% y% Y% A% p
&gt; while(i&lt;10){
/ Z1 D& }5 S, q' q+ Y( n7 l3 O+ w    console.log(i)1 {9 ~6 u! C. \# ~/ H0 D/ |; i, b
    i+++ _5 g% m( V, o' k0 \$ _
}
8 \" @, u6 W( _ 0
& X9 z) p+ {2 H3 b1 F4 [. `/ _ 1
3 z7 L6 H- }1 v5 ^% z1 M" D 2" T! @7 \- r8 X5 _* h) p( A
3- |7 ]7 p2 K- U! @# D
4! h  i7 `. X6 R: C; H/ u
5) a5 H2 J6 x1 K8 B* p5 g( b6 z
6& o. f0 S7 T( P0 z
79 E  I# e# D( K; j
87 b. Y; T. m+ X2 m" J% V
91 b/ N; p. Q; @' |: \+ R# {
</code></pre>/ y% N. d% O  x
<h4 id="255-break和continue">2.5.5 break和continue</h4>& @; {7 Q6 r2 ?4 C& |: u5 F1 W- a
<pre><code class="language-javascript">// break
) t3 s. }  k5 Z3 qfor (var i = 0; i&lt;10; i++){
' s0 n" Z0 ~  j  m% N4 J    if (i == 5){break}2 L! ]  u- s: L  |" Q  G. \
    console.log(i)
, k  V3 J5 N. h+ Y}, {$ K9 h9 M7 V) T$ J. I% B
0
  n+ E8 I! b5 ?: N! J/ a3 N" C0 m$ q 1$ c9 b2 f% x( ^, }
2
/ n# u! l" ]3 E) n8 a3 [8 s" Q 3
3 v3 Q* e, c- t 40 ^# K# q# v- ~; H4 A+ Q0 Y, L
// continue
- {# _( d4 h3 xfor (var i = 0; i&lt;10; i++){7 v0 p& X3 q2 i8 \
    if (i == 5){continue}: h, S0 ~/ y: O# V# T
    console.log(i)
$ K, H; A5 `8 S" A% z}5 R+ Y. G; J/ D1 Z: `/ r( _0 A
0
2 b9 Y/ R$ _0 V+ Y 11 E# L" n7 K% T0 g  [
2  n( G+ t& p" C) }7 ~- G7 I( {
3
& L4 {8 Q# A( V1 V3 Q0 `( o 4
6 ?  E% a! B5 @+ `" `6 _" V+ X 6
8 Y, s; {7 Y) [# f, Q, ?  ] 7
/ C3 U3 P3 G- x& g/ R* e  J& @ 8
, \, R. F2 I; C 91 X5 r" r, i  P7 G) o' h

1 P; Q1 k& m2 w! v# m</code></pre>5 Z0 H1 B5 |% c2 W% f/ m
<h3 id="26-三元运算">2.6 三元运算</h3>
1 t; d  n+ n: k. \; E$ E, ?3 S! C8 q+ q<pre><code class="language-javascript">&gt; a
. L) J5 Y* D  r6- v  m) Y4 g" k1 U
&gt; b9 P( z$ y+ h* z2 ^, _; x
33 w3 C) ?, ]0 J- S

0 y2 R: g: q3 n# x- c3 e$ D1 ^//条件成立c为a的值,不成立c为b的值
4 \1 V8 l2 R/ Y: }4 w&gt; var c = a &gt; b ? a : b. y. c0 t( u- m% a8 q0 u. ^
&gt; c
( g3 L- B( I8 h- z( O% H6
1 x  y4 j7 `$ w" v# N  i, x- n3 j8 J% s, Q* X( ~0 q- z
// 三元运算可以嵌套: h: g  F( B- t/ Y) r5 O
</code></pre>+ v; R5 i- @' [9 b0 m3 E: \) U6 q
<h3 id="27-函数">2.7 函数</h3>
2 Q1 c7 g2 Z& x5 V& P<pre><code class="language-javascript">1. 普通函数: q' D% w: `7 v5 \# M$ k+ h5 G
&gt; function foo1(){
" z5 Z) N; u1 R; z    console.log("Hi")
* R' d) r% K! `* r( z}
* C: p7 K1 ^9 e0 x1 H" [
) b2 ~! S) `/ o7 p; G+ ~&gt; foo1(): V: [& G2 Y: D2 V
        Hi
& q. N0 B2 ?/ x& Z' u! A3 k2. 带参数函数( a' `3 }% X% i  s( h* L0 Q# I+ W
&gt; function foo1(name){
% c- |* `) e% B/ P/ o. ?console.log("Hi",name)' ]  T$ `* e/ m# o! [
}& W, t$ q, Z( ?) j6 ]2 t# c

  @3 r3 I. i& \1 G4 C&gt; foo1("Hans")
+ H- V# G0 P' I$ e" f) i0 g0 eHi Hans
. E) e$ v# p1 M* j$ [/ J# I. j# c& q" C5 N3 l
&gt; var name = "Hello"0 Y" n8 |; r: V1 Z
&gt; foo1(name)
( R" P# Q" {+ Z7 e  ~) lHi Hello
3 m# c/ V* g3 \+ s  T) V& f
6 f, [7 a! P' X: f4 H4 U3. 带返回值函数
) F' b6 C& b5 r2 w" H&gt; function foo1(a,b){
3 d+ K7 ^. C- b  i0 E2 |        return a + b   ) q6 J) D9 k4 a; O* m
}* ^( w8 }0 ]: }4 i) {( M* E
&gt; foo1(1,2)$ ]5 k4 ?) A6 q( q$ D5 _  y; E$ H8 i
38 }* W/ w4 D1 X7 i, O
&gt; var a = foo1(10,20)  //接受函数返回值
# x% b1 e% y; [9 W5 {% u# R&gt; a
$ @$ R6 m5 i5 E( J: W30
' @! c. `: w5 Z  h) K
  U# K8 u- @9 f, A4. 匿名函数
% \; d2 `+ N0 i. d- e&gt; var sum = function(a, b){
! |( T3 m4 p2 x: T  return a + b;& [" h* z& ~0 |* [" e, O5 Z
}& F, t, V0 t/ X0 Q# X! \% Z
&gt; sum(1,2)5 q# Z/ e" d; j
3
1 Y; Y5 J  m. A; Y5 n* ]( b; {4 g8 H) M8 k9 V8 k
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
) k6 W% y9 o. t* D: g9 k8 R1 P&gt; (function(a, b){" Q5 L( _+ C/ J1 ]0 ?2 M) U
  return a + b3 L  v" f$ k  M( S3 i) a
})(10, 20)6 o* W& v! t. R
306 ^, W# F' I7 Y. I& L0 ~+ W! |: }

) y* l, u! u" L5. 闭包函数4 F/ s, F* O- |4 W; E
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
8 W$ k1 e$ ]  ]  [0 e% B0 \var city = "BJ"/ a6 l9 T& _+ \+ \4 l
function f(){- H/ F$ V( E' ?/ Q% k1 A3 Y
    var city = "SH"* s. h/ E4 l2 J9 ~$ x4 u
    function inner(){1 {) \4 s& d7 v+ s$ c3 z. U  j
        console.log(city)5 m6 G7 z; d2 ?' \5 @
    }: J2 p) L0 v* b/ J
    return inner
; j, U7 {3 Y7 w0 k+ e}0 l  \* Z( C. T; ]( m8 r
var ret = f()* s/ @7 B2 Y; a& x$ W% N, Q; C' c
ret()$ L4 ^. i' Q. U2 ~4 Q5 X% y
执行结果:# ]0 L6 w8 `) t7 w
SH
) y% B9 _! G- d& D" G  X& |) L8 H, P) _6 |% g. W
</code></pre>
2 w; c  T/ j3 _% k<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
" Z# ]5 P0 a" I<pre><code class="language-javascript">var f = v =&gt; v;
( R/ w3 Y3 Q8 d/ t// 等同于
4 G# K& O# d) ]1 wvar f = function(v){
2 b# N, V. {6 V  return v;4 o) L4 d0 K4 T3 e1 q
}) h; f  [/ E5 d" g
</code></pre>
' E8 i, ~' ~7 T4 {& e+ O: b. }<p><code>arguments</code>参数 可以获取传入的所有数据</p>
* L: ^* Z3 ]' m3 R; _2 h$ h* g<pre><code class="language-javascript">function foo1(a,b){, s2 P9 }3 t; [
    console.log(arguments.length)  //参数的个数
) o+ v: P6 X/ R' w: }; f4 g    console.log(arguments[0]) // 第一个参数的值) _+ W& V4 z& k8 F7 z2 b
        return a + b   ( J7 T" U. D0 P- l, \8 T4 k0 v$ c. `, R
}4 F9 K& Q: D* m" p
foo1(10,20)
% L, B0 i/ l( L1 v' K结果:
, i/ ^  R- b! _ 2          //参数的个数
3 ]* r9 k7 n6 H6 ~3 {* F10        // 第一个参数的值5 x" \& @) }: \8 ?/ v7 \" o8 O
30        // 返回相加的结果# K. e* F# R+ ]9 b9 ]$ u
</code></pre>
! V) i4 J- q5 j! C, t' f& I<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>+ [/ a0 {; ?! S8 I
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
3 b% Y* Y* k: W7 I* s<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>! {% y6 ]( j( K+ Q7 r
<h4 id="281-date对象">2.8.1 Date对象</h4>
  f! Y% r8 y4 q! `! p8 e<pre><code class="language-javascript">&gt; var data_test = new Date()% g5 t6 |: u& R2 l) J1 }6 M* C: e
&gt; data_test
! ^" U8 J" e9 h  d! t* VFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)7 `( [" \# F0 }) I3 Z
&gt; data_test.toLocaleString()4 F7 G. h8 Q$ K8 _- \) O% e
'2022/2/11 下午9:44:43'
1 e; i& Y. I- o! X( q+ h" \
% X) o% _/ [) U1 i&gt; data_test.toLocaleDateString(): a2 E2 \! S% c2 j- n" z
'2022/2/11'
  w3 j  L) m* P+ }3 T" _
2 U# X2 @; \, P/ y&gt; var data_test2  = new Date("2022/2/11 9:44:43")0 m! ~& P& L, \+ H7 I
&gt; data_test2.toLocaleString()% O* }! b& I) v$ G) t! A
'2022/2/11 上午9:44:43'4 B' m4 x$ p6 U" Y8 e* F2 Y8 Q$ n
# S$ F$ |8 n  O. Y
// 获取当前几号
1 }% M# U5 Q* H+ V7 R# O4 [&gt; data_test.getDate()
: @* e0 U* F$ i$ m1 @11' X. H  p5 g; @- c, O; G" ?
// 获取星期几,数字表示
& D# B( b8 k/ Z7 v& B9 }& O&gt; data_test.getDay()  
, R! @# k' d/ J2 m0 _# G' l* D" ]5
) a- A; _; @; ]9 H// 获取月份(0-11)4 b# b9 S1 {1 z" t* t6 O
&gt; data_test.getMonth()3 \. K2 d& a% j7 `# ?: H; d
1: W' s# i9 X/ |4 J" V6 \. f
// 获取完整年份2 N) A, y( r$ t( m5 X- q
&gt; data_test.getFullYear()* U2 i2 o. B  d2 J9 V, F3 U4 o/ \5 N
2022
4 W6 k' s9 |2 H. r9 v7 O. Q// 获取时
1 K# R' a; X: {0 j&gt; data_test.getHours()9 W* q( w3 f0 w( H; w2 {4 i) P
21' f6 F4 C/ T2 \8 d' f/ [( w
// 获取分3 r) b9 [; g3 ^; P  `5 X+ V6 ^: \" |
&gt; data_test.getMinutes()
8 I8 |5 K/ O) v% v44
( c3 J# w+ a8 O* Z' U// 获取秒
% ]$ D9 {' E* ?&gt; data_test.getSeconds()
6 E7 ~/ V5 R( P0 _, l43
$ x& Y: q6 [3 K// 获取毫秒, i2 {# [- e3 r& B! y5 V! m
&gt; data_test.getMilliseconds()
% u6 r$ y  p: i7 U+ z0 |* a290
& ^/ v/ N$ N) Y1 }1 `+ s7 x// 获取时间戳
  P: i; T6 w4 W6 G6 ^&gt; data_test.getTime()7 v/ k( F* P7 Y3 ]' b" J
1644587083290( h8 Q" P5 B0 i
</code></pre>
( }2 U0 ?8 p  ^" z<h4 id="282-json对象">2.8.2 Json对象</h4>" [; ]+ @. r: a1 @1 R
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
6 J* X' `$ [4 YJSON.parse()  // 反序列化,把JSON字符串转换成对象
/ B) C% u9 c6 q( \0 V1 Q* \
$ q# j- C, \% F// 序列化
. v* x, \2 Y5 ^3 i&gt; var jstojson = JSON.stringify(person) 3 ~5 x7 l3 Y. s
&gt; jstojson    G6 ]0 b  X6 Y6 v4 D0 E
'{"Name":"Hans","Age":18}'
, w! O5 X  i9 g5 U* w! Q  m6 k; _) Z% o) N! D
// 反序列化" Y" q/ S" v0 T
&gt; var x = JSON.parse(jstojson)
+ ?: K* q; r7 V7 V- b1 n&gt; x
/ w4 \6 b+ ~# o" h, k/ g( [{Name: 'Hans', Age: 18}
8 Z& _5 b1 N/ u( T1 Q&gt; x.Age
. N% [- d8 ~2 k; _18; L; ~5 N2 R, D$ B; W9 V
</code></pre>' Y) P* Q/ d6 c, p' W; V' Z
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>% w) R' |+ ~& S( j$ L6 E& A
<p>正则</p># z* h1 T9 M5 N) L9 E: O3 X
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
' x0 i. h- @- E1 E: d, n! e! R. l&gt; reg1
# K, _8 z% _) p/^[a-zA-Z][a-zA-Z0-9]{4,7}/
* @% }' {6 y5 e$ B2 P$ m& \&gt; reg1.test("Hans666")
! A8 D& _) a& Z2 O0 Y* V; strue
6 v2 R; c  H; S2 _& K" q& i1 V- O! ~, r2 K, e
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
; |6 L# j$ c+ R: z" q5 g&gt; reg2; W* E9 p6 {( Z5 P, p0 ]
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
% {( q# ~0 V2 ~, i% o/ k, l&gt; reg2.test('Hasdfa')
3 R8 m4 }8 r' T/ Dtrue+ R3 |3 D3 u0 N8 ]/ H7 m$ t
0 ^7 V  S! p. t. m
全局匹配:' z' i5 I% h: E% W8 q' {
&gt; name
4 `. r3 C' G9 ?4 J) z+ n  G'Hello', y5 O4 P5 ?6 P" i& C8 }6 |0 N
&gt; name.match(/l/). f- k- j' |' Q9 M
['l', index: 2, input: 'Hello', groups: undefined]$ M* ^' C3 n" r" y
: y7 h6 k/ D: E! L/ A" m7 s
&gt; name.match(/l/g)- P+ S" v4 v# x0 S; c2 }
(2)&nbsp;['l', 'l']/ {. \: S. A1 I- P, b7 p' T- [
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配: f3 M4 \# j, _2 k
4 b" _) A* _! v
全局匹配注意事项:
: X' y; X) A* F! o3 N7 h/ Y" L&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
/ i- `7 Q/ F" Q&gt; reg2.test('Hasdfa')
5 e, J; u7 L4 `& A9 [: S2 Atrue
5 F- N7 J6 I: O- ~5 s&gt;reg2.lastIndex;2 ~; E3 h3 }! a
6
5 e+ n) G; F* F& X: b&gt; reg2.test('Hasdfa')
; o. m9 Y2 W% A  Sfalse  ?; x2 c' J. W( L# f  Y( q
&gt; reg2.lastIndex;
/ l9 J8 A' V3 {8 Z4 s06 G9 _  o7 a& d) a, n- P, w
&gt; reg2.test('Hasdfa')/ M4 g/ ]  v$ |9 g5 Q
true3 d& u( F- ~1 L- P, g
&gt; reg2.lastIndex;
  _2 M! L5 y: \# y. R* s" A6
2 \( Y0 t! B: p) {1 h! s&gt; reg2.test('Hasdfa')
- v; R8 C. ~4 Z  A' U3 Hfalse
' q* ~/ p( u; h+ }3 z&gt; reg2.lastIndex;& W1 e& E+ }/ {! t& i- v3 q
0
3 {1 Z) [: v2 {) v& q0 I! H// 全局匹配会有一个lastindex属性6 i2 N$ v8 N% f, E. m) i: Z4 F1 w
&gt; reg2.test()$ k! \' z; a8 ^/ v& f2 ?: R8 s
false
/ v/ t. l& G) a- s/ I3 P3 S' S6 T&gt; reg2.test()8 C; u# R; `3 D3 X  m( F
true' [! K7 \3 V( k. ^
// 校验时不传参数默认传的是undefined
6 T. m$ y$ j, S3 q9 o</code></pre>
. M" R  d+ ^; g; m" y$ A<h4 id="284-自定义对象">2.8.4 自定义对象</h4>' G/ J; i2 g( l+ t% _
<p>就相当于是<code>python</code>中的字典</p>
7 n, ^$ X) A% [" f; m( Z# d<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
  M, z' c! h! Q$ v( h7 q/ M&gt; person" h' D- b# Q$ h$ t" e
{Name: 'Hans', Age: 18}% l9 H% y3 ^7 x
&gt; person.Name
0 e5 N/ `- p  @3 Y* K5 r2 f'Hans'
' Z: f5 J# L7 i6 j5 B  M* V&gt; person["Name"]
2 b1 S, }0 U; Q% \7 S+ B'Hans'0 B3 ^3 O" R3 ^# g
) M6 s6 ^: j$ l) h
// 也可以使用new Object创建
: _' c% H2 B3 e- W&gt; var person2 = new Object()
& ^) e! x( R$ s; x&gt; person2.name = "Hello"
) J; ]9 g4 g" V) P* j  g1 x  v8 ['Hello'! |$ E! R$ p: Y% L% o; V
&gt; person2.age = 20
& {. g9 C" h9 R: l20
2 m7 N) c/ g( O2 Z8 P" s</code></pre>
! H& O7 ^9 E# A) v# r<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
) c1 {0 |6 L( [5 E* R<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
' k( T& X; H; Z) ]<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
* a2 C# `; w. y3 [+ k& x0 |0 C; U2 h<h3 id="31-window-对象">3.1 window 对象</h3>
* S8 z( x2 B. v2 v<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p># W0 H4 r1 t# q  d4 N" F; r
<pre><code class="language-python">//览器窗口的内部高度
0 @' J& `  C, V+ a/ n* J( vwindow.innerHeight . t7 Z3 o0 ?6 @' B" m
706
$ b" {: K0 R$ G- j# U//浏览器窗口的内部宽度
4 a- F0 m+ Y; u% Z4 wwindow.innerWidth3 ~. W! W0 n: ^% Q) m/ B
1522- U  z% C5 m- k( T4 }: U( q
// 打开新窗口
5 _- K1 J) @) k; w6 Ewindow.open('https://www.baidu.com')" }1 l. S+ b0 Q+ K# I4 e) u7 O. b
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}7 p' [' K' H( u% Y
// 关闭当前窗口/ x; [1 A# d" Y; [* F
window.close() 5 t7 P7 c5 y6 f( ~$ ?5 \, d
//  后退一页4 q1 Z# S" {" |7 N
window.history.back()
- a% q) b2 o* B# \// 前进一页/ U% z  w3 _0 q
window.history.forward() 4 n1 K4 ~, |2 u; ~9 E
//Web浏览器全称0 B1 Y2 K5 b9 }2 _, W8 t. K
window.navigator.appName
4 ~$ R( r4 P5 O/ p'Netscape'
& q) V  {/ z% _" p* c6 E// Web浏览器厂商和版本的详细字符串
+ R% B, u" ]9 n% {window.navigator.appVersion
. v3 C9 S8 q. s  F, r* ^'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36': Z" D' z0 f1 f; [0 q& ]! L
// 客户端绝大部分信息
( _- ~: ?, O2 \window.navigator.userAgent5 A  A  v: @- n; X: ^
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
5 X$ g- {  L% e/ V/ ]1 w// 浏览器运行所在的操作系统
) F" d$ g/ P3 T, |  ^window.navigator.platform
" B- N/ m8 g; G4 ^: c6 Z4 @: O'Win32'
) Q! H+ d0 i, d3 y/ x. j; i$ q& J; q7 U7 [/ ~' F6 H
//  获取URL$ \& X+ d1 ?* l/ @2 y% |! P
window.location.href
- R# Z$ P- G6 @9 l// 跳转到指定页面7 m7 k' G0 R1 x8 d) j9 G1 ~
window.location.href='https://www.baidu.com'* v2 ?! E+ s! e, V) O4 D( w
// 重新加载页面
. G/ D& q6 W# l3 }, o. X- iwindow.location.reload()
/ s- I- O# R+ L  v) n2 t8 p</code></pre>
' S6 d$ C! {+ S5 E, j8 a0 Y) c<h3 id="32-弹出框">3.2 弹出框</h3>
5 K, [9 f2 p  h! B- u; P( F; m) E<p>三种消息框:警告框、确认框、提示框。</p>, b: q+ p+ c5 B# g
<h4 id="321-警告框">3.2.1 警告框</h4>5 |9 U, y; Z3 g4 ~
<pre><code class="language-javascript">alert("Hello")0 w/ H6 x: f$ K( r
</code></pre>
7 M- `/ |! o: @! o- }. A<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>  R+ h: `+ y' F6 o
<h4 id="322-确认框">3.2.2 确认框</h4>! J) h0 F& {" i
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>& H1 t+ p0 x8 y  H2 K
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
  R7 {/ j, L  m9 l/ Qtrue! m* t. P& a, l8 Z4 Y' J" _8 w) ^9 c
&gt; confirm("你确定吗?")  // 点取消返回false
9 u( l3 Y2 X2 c  q- h# vfalse
6 m3 J1 G( E+ u0 j. I& N  A7 ^</code></pre>
: x; C8 Y' ~9 @0 d8 A' U<h4 id="323-提示框">3.2.3 提示框</h4>
$ @  r2 a6 t2 a2 _9 [8 V3 l, _<p><code>prompt("请输入","提示")</code></p>
2 j% b+ D% H# r# d<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
; b# v9 M. b  i4 I( ?<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>! l* L6 j. [4 c- _$ ]  j! L5 N
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>( f1 _& n. _* W& Y% W+ z9 m. z' f  }
<h3 id="33-计时相关">3.3 计时相关</h3>
' t9 c4 p* k* y$ s% e<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
1 O4 O0 p8 A4 n$ J6 G) ^$ L<pre><code class="language-javascript">// 等于3秒钟弹窗+ a6 u& t) v% {. `
setTimeout(function(){alert("Hello")}, 3000)
; C3 h; y) d$ q( M5 R+ _* C8 D
% e' e# H, M# ]; I1 w6 uvar t = setTimeout(function(){alert("Hello")}, 3000)) W% n( T. k2 K1 O

: e  e0 _6 A( H4 T* O- O2 N6 T' O  ?; R// 取消setTimeout设置
- L7 {; ^2 |! @2 D7 gclearTimeout(t)6 x/ [8 u6 m) u$ R- U# X& ]* U
</code></pre>
! I0 @+ H* d. K, M; U4 i<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>5 ?# L# f/ j( C6 A: G
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>$ O$ h2 E; M! k: Y! y
<pre><code class="language-javascript">每三秒弹出 "hello" :- G3 N1 H# w9 N* O
setInterval(function(){alert("Hello")},3000);
  o* r( x* w& J' s+ k4 F- |" @  s</code></pre>
, h3 q: ^- @) j2 M8 A8 c6 M8 [<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>9 S; X" J* [# f  E. s3 M/ a/ ^
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);0 }: Y3 @' B, o# F( z; E
//取消:! D& c! T# F. k3 t
clearInterval(t)
3 v. H- }) e3 e2 F. m8 ]</code></pre>8 D. P0 {/ I3 u/ [

! m+ o, @8 j- C0 A
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-25 23:10 , Processed in 0.109864 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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