飞雪团队

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

前端之JavaScript

[复制链接]

7583

主题

7671

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25079
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式

) E% A' Z6 V( G7 g9 D9 o9 u* N<h1 id="前端之javascript">前端之JavaScript</h1>
# Z8 c: o  x% _, q<p></p><p></p>" y1 ?4 M6 A7 [0 j& z- _% F/ B) }
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>+ W8 R* W) q9 H/ L, y% W. q
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>/ P' O8 s  X) y+ P4 k  L
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
0 N* `/ ^4 ~' e2 T- j$ K- A6 f# |它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>* j, Z8 b  ~5 q" |8 r% |( D
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>% D  q, p1 W6 c. H% n: U
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>8 d' J/ O1 `0 u& C5 i
<h3 id="21-注释">2.1 注释</h3>8 `. q, x  \, W# H" }5 j
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
7 V, S$ y" h% x<pre><code class="language-javascript">// 这是单行注释' N: D! Y4 ^, k4 }: T; X
* C# ?0 U7 N+ c4 Y8 V, ]/ ]) y
/*! i7 O9 ]0 i/ x9 _% K$ c
这是多行注释的第一行,; o6 ~! s+ U( a
这是第二行。! _4 M; K% r4 L0 d- O. C4 R* _9 Q
*/
1 t& G9 [# r$ i9 N7 E6 k</code></pre>
8 L+ i2 s! _8 J$ b4 s$ i' ]<h3 id="22-变量和常量">2.2 变量和常量</h3>
, ~! \( M4 y- K<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
& F! n, i) u" z. i<ul>
. G( Z2 A3 {. z9 s<li>变量必须以字母开头</li>
. C$ U" f6 \% f1 w0 {4 r* y8 ?<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
3 j1 ^& x, [$ A! S+ h<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>  B3 @$ j! ]* _5 |: a! J# C
</ul>5 U9 b' U7 U$ o$ n2 m) h
<p><code>var</code>定义的都为全局变量</p>
: }( _5 b5 J: G. G4 ?3 f<p><code>let</code>可以声明局部变量</p>4 B* }& `; D! l
<p><strong>声明变量:</strong></p>" |: @* V' t) ?& P  D
<pre><code class="language-javascript">// 定义单个变量1 n1 ^- f2 W  y) n# m- M. x$ Q
&gt; var name  n9 v$ R* K& X) M
&gt; name = 'Hans'
4 B7 |' ^! i% H: @" l//定义并赋值
) d8 i" Z# y/ W&gt; var name = 'Hans'
& c% P/ p! |; p, a  T0 z' q&gt; name4 H3 Q  G4 v2 O
'Hans'
0 L) g2 f% d/ N# j9 p% J) A/ T* S" b+ T7 B2 |" Y
// 定义多个变量8 F: _6 b* n% l" X* n
&gt; var name = "Hans", age = 18- C: L9 r7 r5 L. T3 Z: \: |
&gt; name
. v8 G0 f2 a; G- S3 z4 V'Hans'
2 z' r* h# W# I' q&gt; age: ?. B/ h! ~0 h6 K: v9 b
18% L$ a5 M- D5 z2 f& b' Q. A

& c4 n7 V6 q& Z) R* X# c) e8 J5 M5 q//多行使用反引号`` 类型python中的三引号
. M( U9 P5 v2 L; D&gt; var text = `A young idler," W# x) U/ @0 {4 u# v* U/ V
an old beggar`) w- O; O- j+ N8 t) U
&gt; text
" R! Q- }9 O  O; J0 `, `  }7 ?! S'A young idler,\nan old beggar'
" _7 a0 [0 g' g! I</code></pre>
- Z( E$ S* j- S" T# Z5 c2 v<p><strong>声明常量:</strong></p>
! |$ y: M8 J: I, }! N! H" B9 v; W<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>9 D8 U) M0 x$ u1 ^# M) F
<pre><code class="language-javascript">&gt; const pi = 3.14
0 q7 Y3 c9 V: H8 c&gt; pi& V2 Q2 l0 Y/ [1 A6 S
3.14, J9 ]$ `0 t% S9 Z5 T) i- N9 |
&gt;  pi = 3.01# U" [# h& D6 x+ q6 u
Uncaught TypeError: Assignment to constant variable.
) B( z1 l) H4 }8 T& Y; Q3 w    at &lt;anonymous&gt;:1:4
6 Z3 j7 ^4 k/ q% f6 N
7 b0 C0 O7 h$ |  s6 b) X6 o2 a</code></pre>- A! Z% I& |9 h0 p( {; [+ ?7 @  Q
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>5 F) h  C% N: [3 V, Z
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
% r6 {! e' a& g! @<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>  |' S3 P1 @# |5 g2 |  h$ X* G! Y
<h4 id="231-number类型">2.3.1 Number类型</h4>
3 G( ~0 u' |$ ~1 w! d! N<pre><code class="language-javascript">&gt; var a = 5
0 o8 }6 ]4 N# J" q: Z&gt; typeof a   //查看变量的类型  
& h$ P8 A- J1 d0 Hnumber
& w4 T& y# ?3 P  n- g8 s# R$ q: s! L4 j1 {  A9 _/ R& b
&gt; var b = 1.3
: h; ]+ C' e& t9 @&gt; typeof b
) B, X# }  K# nnumber6 O9 e7 i4 k+ f  `9 B! H
* I0 _8 V- E8 R1 K* j( [
// 不管整型还是浮点型打开出来的结果都是number类型( J6 i- _: u3 D4 D0 w

' T7 e3 m0 S' e/*
$ o( y) T5 F( \3 QNaN:Not A Number
$ \) m; W, [; ~$ G, I3 @7 y0 ANaN属于数值类型 表示的意思是 不是一个数字. o3 ?/ z- A: _
*/
2 J& k& P* s& d0 A& u0 W: |
+ T7 x% b, G- s  r4 ^& p* RparseInt('2345')  // 转整型. {' W' y4 M; _
2345# @& y5 k7 d0 U) g4 S) _
parseInt('2345.5')
% s: A. U: a  k# ^6 W/ t23458 G5 ?: U" Q" I
parseFloat('2345.5') // 转浮点型2 E! q7 Y+ F. Q& H" J2 q
2345.5
9 c% a0 N2 a$ M/ a; u8 GparseFloat('ABC')7 {5 y3 f, [( o# j$ J. y
NaN+ L& b' n0 k% X, W
parseInt('abc')8 ^, y+ g- i5 d6 T% r' R
NaN
8 u" C2 k/ N3 h' ]  S" R) c</code></pre>
2 r* m6 @* X9 J# m% f. b1 j( E; v, `<h4 id="232-string类型">2.3.2 String类型</h4>) h4 ^  O! ?2 s! I1 g/ O# p
<pre><code class="language-javascript">&gt; var name = 'Hans'; R) N4 c0 [! O* r
&gt; typeof name9 Q+ U3 D' w1 E- P; C
'string'6 W3 F' r. z0 P& g  x$ N0 ^, Z
: x4 f5 ?2 }- k, M
//常用方法
0 ^. C; |! R  G! p+ G// 变量值长度
; ?/ s1 c( f+ e0 Y: b: p- M' [7 h&gt; name.length. n) S( y2 z! ^4 _
47 Z0 Z3 T) [. a: O! |# q9 j( Z
// trim() 移除空白
! c. Z& B# \2 E) e& c% l&gt; var a = '    ABC    '+ l- ~+ A5 U7 M- K+ D5 B$ |
&gt; a
" ?* J' T3 S9 @4 D$ S'    ABC    '6 O5 U- ?$ z6 w8 S
&gt; a.trim()
, `( }6 J5 ?; G* d$ U# g- v'ABC'
& R$ Z; g; s) {$ j* f//移除左边的空白
2 _5 ]) ~- |+ b/ N) w&gt; a.trimLeft()
( Q9 x$ N" ^$ s'ABC    '
1 A, T: x" V3 y4 |* b' F//移除右边的空白
4 f  h* |' I6 o, J) U6 ~&gt; a.trimRight()
% t- y6 O0 d5 I; q/ M; b/ d'    ABC'
7 d/ P* ~2 m; @, m  l" C7 y- ]7 r7 Z% n
//返回第n个字符,从0开始
9 Y5 b- h% l0 p! G+ [& a" d2 ]&gt; name
& z; R+ v0 f0 g7 e'Hans'& Q, [; k8 w+ \) ^4 b9 D
&gt; name.charAt(3)
/ s0 o0 S0 C' _8 N/ i8 @'s'
# W  _' q) [' }9 K0 q&gt; name.charAt()
9 O& a! M$ F. _! L9 O'H'
3 {5 O3 J) Q& j2 z( c, _# w&gt; name.charAt(1): R6 K! i- G+ s% X( j# j4 G
'a'3 [" X2 V1 F5 O5 }; n; @

, d$ q8 U: e, y: _4 T// 在javascript中推荐使用加号(+)拼接
1 K2 Q  w, D" }, \2 j  {&gt; name
2 K8 }. C1 Y; Q'Hans'7 a1 ]. o1 c& E  V( d" o% U4 H, [
&gt; a+ O: K8 `9 Q1 |: b* g6 i
'    ABC    '. I% s( v9 [0 u
&gt; name + a
3 y) |" \! ^5 o2 U5 m- G; ~'Hans    ABC    '6 ~8 @: P' |; b" s5 `9 u! d) _. `
// 使用concat拼接% }- I: w( i& e6 q  z- a
&gt; name.concat(a)
- G$ ], W+ S" _# x9 g3 a'Hans    ABC    '4 Q; T- g2 |1 P. d' ^) b# K" j
# N, p' x0 J% G9 _
//indexOf(substring, start)子序列位置) {) u1 W6 G5 E1 G0 a# l/ i
  |) X4 L7 j# z. j; u# |0 c
&gt; text
" |; r3 c0 |, A# {5 P$ M'A young idler,\nan old beggar') x2 o% ^6 w' \8 y  E4 m3 v
&gt; text.indexOf('young',0)$ t* j1 h0 p  P, T! |4 X- ~' M
28 ~! }' z+ i; A* V  h
% l" ?2 O; @. W. i% a
//.substring(from, to)        根据索引获取子序列( Z) m& B# r8 ~* a- v) p
&gt; text.substring(0,)! G) g; ~/ c. \7 G5 h- R
'A young idler,\nan old beggar'
8 [$ v! Q, n% \" k+ F/ d&gt; text.substring(0,10)1 t+ U' R: W; |3 g1 Q! i& h1 ?
'A young id'
# @7 k# y$ X; i1 e, \* i- q% D+ I- J9 A
// .slice(start, end)        切片, 从0开始顾头不顾尾- i, y( y- O  E& R/ `  G0 w
&gt; name.slice(0,3)
2 T% A# ~4 h9 e) Q" q& P. c'Han'9 f1 A* ~  G8 F5 ^  q! A0 t

% k# C! D+ M& l8 }// 转小写
+ ]  T" ]( y8 S: Q&gt; name+ Q2 V; z/ t8 y% M8 L& |4 l
'Hans', }; A& a5 Z9 N+ d+ Z
&gt; name.toLowerCase()& \4 H1 N/ ^. ^3 R4 s2 \9 Z5 u( p) v
'hans', m# N' n* l! r4 P7 i
// 转大写
3 y1 m& o2 u0 `; J9 o: v&gt; name.toUpperCase()0 ~4 x! x( P" z$ A% B2 B  n
'HANS'
% a- l1 E8 e/ V1 S( e
* D# h+ p: y0 n/ o// 分隔
" t. [8 y  B/ `&gt; name% u6 ]0 A( v* ~- t" @
'Hans'
% ]) B, ]0 U2 A( |0 c8 D, t&gt; name.split('a')
. h, o# M! S# F/ b5 b6 ~8 s3 C(2)&nbsp;['H', 'ns']
( i) W% }, |! h  U" v</code></pre>7 C% o3 S, N3 w% O# N3 F
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* z9 r- b. j. ?: D<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
4 Z" _8 S. m4 R0 D3 p/ i% R<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>0 r/ x: n  _4 o/ Q( z
<p><strong>null和undefined</strong></p>" X6 x2 O" r. c" o) d
<ul>
/ s* ?4 N, V! {<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>+ I, X* w  n  a/ v9 R8 J
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>8 F7 p1 f' M7 B
</ul>
2 j- }! O6 G0 {8 w! t5 F<h4 id="234-array数组">2.3.4 Array数组</h4>
( u+ W$ u" @7 j6 r0 ^- n<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
7 w7 }  ]0 [/ C; T* }' t! p- O; e<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 8 W! V' U( r8 G4 w2 {
&gt; array1
0 \" f8 N5 P. Z0 `(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
& K% @4 ~0 v- u/ |2 f&gt; console.log(array1[2])  //console.log打印类似python中的print
/ G! j5 a7 t1 @# v" f% `# V3
. z2 A0 X6 e; t* T; E// length元素个数
# S" u6 C7 P: C! K: Z/ ~&gt; array1.length
5 n2 J( d3 h! h  C* l2 x68 t& C3 L" {) ]$ `: p
// 在尾部增加元素,类型append
) i' M1 A2 H2 A- t0 L7 x&gt; array1.push('D'), K6 ^' }+ }  W2 m+ U7 F6 j$ q
7
6 S8 M. v) L3 u: @  J) n&gt; array1
) J: W( I: i1 V/ Z1 d( B(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
/ t/ J# O" i0 y) `% \( z6 S/ \// 在头部增加元素2 V! C: S) \! k; ^* f8 @
&gt; array1.unshift(0)
$ T) S6 t) i  {3 \1 V4 }8
* S! [+ d. L* p! ]9 ^1 \/ q3 A/ C&gt; array1
7 U  m. _9 F& m9 a: Y5 \(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% \6 k% ^' L" p7 r( J0 K6 M3 ~7 x- r6 ?
- P4 I2 o$ X$ H0 U, z% ~: I! x
//取最后一个元素
* c2 k6 ?0 K5 V4 m& r. Q' g&gt; array1.pop()$ m4 E  n/ J2 Q( k; ], w* d) D' I
'D'
) n. L2 w5 `( \5 A9 H% k&gt; array16 J) W: V6 O& F! U/ b3 m1 o
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
8 B9 ?! U7 b. A( G8 r( O) z% s//取头部元素
6 {  H4 x8 z4 z  [4 F&gt; array1.shift()! p5 t; Y5 T* _' ?
0: f! H! |1 z  n! d1 R  v6 F1 g' ]6 @
&gt; array18 f5 {& v1 R$ \$ A. u
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
2 h2 Z* Z& L3 A2 o. m; g
- E( J- A* a8 }' `//切片, 从0开始顾头不顾尾# b( N# T! O( H* q, R
&gt; array1.slice(3,6)
# s5 o! _. r4 @* ^0 P5 G(3)&nbsp;['a', 'b', 'c']
8 O. {0 ]# K( }" v// 反转
# k& ?/ D1 _7 v# p/ v&gt; array1.reverse()
2 S% @3 |4 C2 |, y/ h: [(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
7 H1 d& W* u# U: `2 @// 将数组元素连接成字符串4 G# q+ t' h8 n
&gt; array1.join() // 什么不都写默认使用逗号分隔" C# \* K2 h7 B
'c,b,a,3,2,1'
6 ~- z& z! w8 a3 z0 ]&gt; array1.join('')
$ `" u6 n. `8 ?. O  P! \'cba321'
) T% D, u; ~5 q  u&gt; array1.join('|')
; X( x) z6 z) a8 d'c|b|a|3|2|1'
! p, O, u, K) x* ~# T# c0 w! `" |  C8 b2 c9 U! ^
// 连接数组9 C, F# [! j2 l
&gt; var array2 = ['A','B','C']
; K2 R- A. A" a3 x* P$ [+ s+ q3 U&gt; array1.concat(array2)  ~; M' G; r* s) d
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
" ~) V* T% x& ~( t& S. v! }# }" @- n! Z' s7 O
// 排序' z) q0 b9 w& v$ z9 f
&gt; array1.sort(). W* Q! d8 f% D" f
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']9 ]: e9 X% O; }3 }" d# |" m
* |8 l, c8 d- \3 b+ U9 K& j
// 删除元素,并可以向数据组中添加新元素(可选)
; A+ }* X# e4 ?&gt; array1.splice(3,3)  // 删除元素9 ?  r  W) V# Z* ?
(3)&nbsp;['a', 'b', 'c']4 j% n" N/ w1 u
&gt; array1* n1 O% k# E7 I$ x  Y; v
(3)&nbsp;[1, 2, 3]
- y; X- u/ g* ?( H; \&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
; X* Q6 R4 N7 c+ k( g[]
( U1 F# S6 G' m# s&gt; array1
8 @# c+ K2 h& Q; O1 v3 ](6)&nbsp;[1, 2, 3, 'A', 'B', 'C']7 T! [& d, A: Z) K
) y- L. [0 _: X7 n
/*4 ]. n6 q% l( k
splice(index,howmany,item1,.....,itemX)
8 v3 {4 w6 I  K$ K1 b4 _! \index:必需,必须是数字。规定从何处添加/删除元素。# t& W+ H) I5 x- h
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
, S9 i! s' p! a& ritem1, ..., itemX        可选。要添加到数组的新元素
" H4 G; ?9 y9 l- X*/; Q3 _1 O, l' B4 _& S( h

2 `% c2 l+ i' T1 r// forEach()        将数组的每个元素传递给回调函数
+ n$ X* H4 p" x& B&gt; array1.forEach(function test(n){console.log(n)})  H$ f5 n, P6 o1 G% r2 k: @
14 S8 O* P9 b3 B! A4 e% G
2
! \0 k. A) u4 b0 ^4 V% o 30 ]9 V5 m; }9 X8 ~3 l
A
. t7 F9 h( K# O5 w- l  g  a B( j6 I4 I8 [* M5 u4 O3 y# i
C
- i# `1 Y; p4 n1 N9 V// 返回一个数组元素调用函数处理后的值的新数组
% v9 o" [3 h# T&gt; array1.map(function(value){return value +1})% N" y4 ~9 v/ z, k$ E8 V
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1'], r5 j+ R; G0 l9 U0 i
</code></pre>
) v2 l3 F* b% h7 n7 u- c2 S<h3 id="24-运算符">2.4 运算符</h3>+ {) x' |+ T6 I$ ?  D# u- U
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>% O' o, T" X4 Q* O9 l" B
<p><code>+ - * / % ++ --</code></p>2 \+ G( [- E) J% Y1 O3 o  C* |" u5 \* L
<pre><code class="language-javascript">&gt; var a = 6
! r8 ]5 _9 w# r, X&gt; var b = 3" }; V& b! ]5 r# n  F0 @
// 加
! X1 z, }+ s& C&gt; a + b
, W) t, V% ?# `. A96 q+ P. P+ C! N9 O
// 减1 S: x4 }3 v. J& H
&gt; a - b
( W4 _" ^9 u; k* _  E7 F32 d# [- M( ]+ M$ r
// 乘) S. F& b1 O! s# Z
&gt; a * b
9 W0 P0 D% G+ S4 ^% y* z7 |186 }1 E& `- R9 s% I
// 除. [) ?2 y3 |! D  w  V5 n
&gt; a / b
! @$ E' f! c! j  a$ [3 ?3 F2
+ c- |  \4 c9 z+ V  ]; `* q3 h, l// 取模(取余)4 @6 q7 O: b. D) d: B- y
&gt; a % b3 o. Z, v7 E% Y. w* d6 A: e% \
0
6 i4 J9 W2 ]$ o/ g; a// 自增1(先赋值再增1)% k3 e. f6 Z% T
&gt; a++
8 Y; Z5 j% |- R* H6- _& n* t1 g' V6 v7 ?' b
&gt; a* L7 }' ]0 f+ m9 \' r3 g
79 @$ ]9 z6 Q7 y) J. {8 Q
// 自减1(先赋值再减1)$ G0 j+ }6 w1 E4 Q* o
&gt; a--
! |8 v& w3 _4 [7. ~" E0 C) ]0 \3 S" u
&gt; a) L" o/ T  _' T9 E' F" C
6
  [! C8 t$ D1 i7 L// 自增1(先增1再赋值)
/ u$ ]+ X+ ]! z4 s% c&gt; ++a9 N# P; H7 R( g6 d
7( o& Z0 H  q5 |4 |; M! G( [
// 自减1(先减1再赋值)
# x% g  Y0 U2 h! K' J. \2 S% I&gt; --a/ J$ K! j# q, J1 O) r7 k- r0 v* T% y
6  e; p- H) w2 w7 e
&gt; a
/ c! {: Y# q) J0 k6  h4 X7 k% f$ P' \: \0 }

9 Y8 H" u  n) M. l+ F) p0 A//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理2 U' A" T0 ?( J. j3 ~; j( y
</code></pre>: i+ }+ V+ o+ n2 `2 P
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>' }+ V6 [5 }  Q6 y
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>& R) D! Q( j; X& K9 Y! ]) V* O8 c
<pre><code class="language-javascript">// 大于
) v! a" x8 \. V- p6 q&gt; a &gt; b
) j6 @7 t/ O+ ntrue1 S- {' s$ G2 l* o
// 大于等于
6 e6 Y2 O' ^6 e: I9 E/ X7 r  L8 X- J&gt; a &gt;= b+ S* q9 i% ?  @7 Q4 n
true
, X. E/ |4 i! |' M+ g// 小于9 u2 v1 ]: b9 s9 B: g! q
&gt; a &lt; b
0 J4 a9 J: R! j3 M3 Nfalse
! q& R" a* `$ U0 Q& L// 小于等于; \8 t$ A" G( ~, ?4 G8 U$ c8 d
&gt; a &lt;= b, o: Y. A* A& V; F+ Y
false
4 [! m! K1 r& ?1 K, F// 弱不等于* X  k6 c3 T/ J, B
&gt; a != b5 V9 T7 }& c* O6 Q- e8 {' N4 t
true
, x( u2 w# o/ m+ y7 I5 @// 弱等于: {5 a: ]0 E9 D2 q- f3 S0 {
&gt; 1 == '1'
5 A3 M; c. z! M. J6 l2 xtrue, ^! D* {- c1 Y( Y3 e, W% T+ N1 ?
// 强等于
% R% }! r* c: B&gt; 1 === '1'! v8 D8 {( ]; t3 J! w* J- b
false7 N( D% W8 n2 l& u
// 强不等于; w: l" W( R* V* C4 o
&gt; 1 !== '1'& L. t$ q) w8 n. _8 P  G: c
true
5 y3 ~( c5 [( z* ^, Y- L3 W) |" G$ @( ]1 k, Y
/*% {0 s7 ^+ C( h  r9 i+ a. e
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
/ }; _$ j4 ?8 E  I2 B0 B6 {6 y*/0 k, Q3 o' v! H- x0 R3 K* F
</code></pre>, J% d2 r0 G: i. F/ h2 F
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>" p9 {0 F( z# ]+ J5 q
<p><code>&amp;&amp; || !</code></p>: Q5 D% [% b1 i0 g% v
<pre><code class="language-javascript">&amp;&amp; 与, K5 T. {% B( b: _" ]8 s+ \& `5 S
|| or
, T. ]6 G+ {/ Q! 非# R+ e+ T7 W5 c* s( V
</code></pre>
& U9 O& E# ~% G0 F+ S<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
7 q$ `. R4 W4 K, E% I<p><code>= += -= *= /=</code></p>
; p/ O4 m! s4 c+ E9 q<pre><code class="language-javascript">// 赋值( v' n$ R+ y+ t! y  V0 o5 S! m% ~
&gt; var x = 3
' k+ f2 \1 q. c9 d! Y  ?$ D8 W8 [// 加等于& @/ C+ t! z1 ?1 }7 a2 o% x
&gt; x += 24 v2 p/ U# ~4 c, Y  M' I! @
5
6 o7 T3 \9 t0 S2 G- O% u4 @- E7 V3 a// 减等于3 x5 s; B, ^) _, h8 a/ o
&gt; x -= 1: [1 H. }' ~. E$ f8 R1 J1 J! }
4
8 o6 H& W9 h  B7 i' I% e4 p// 乘等于
4 k* }8 q4 D/ x4 X% h! q&gt; x *= 2
* Y' [: X: ~! p) ~  Y( k$ U85 Q& Z" Q! E+ N* c, s( f
// 除等于
5 C/ I8 u' b* z" f" h&gt; x /= 2; g  d4 J, u# t& v/ \8 m) I, W
4
  `( Z+ {( m6 }; x/ i/ |8 d% r& _</code></pre>
. s+ n* }1 {- j5 ?6 @% K<h3 id="25-流程控制">2.5 流程控制</h3>4 V8 b9 o: z! P( r: {8 i6 j. r# S5 M
<h4 id="251-if">2.5.1 if</h4>
& I/ Y; a$ H) M9 M<pre><code class="language-javascript">1, if(条件){条件成立执行代码}/ R% i9 j# d# O; h) Q* o: c

$ e3 e  @/ I2 [/ H. f5 ]2 H( }&gt; var x = 3
: U* P- y2 I" p" N5 ^! k! e&gt; if (x &gt; 2){console.log("OK")}  e% X( a: O; h* d6 {4 O' K
OK
$ |; W1 j7 j" I$ y; Q6 o4 ?2 D! d: Y; {! E
2, if(条件){条件成立执行代码}
, u3 j/ I% g: v5 e: b        else{条件不成立执行代码}
/ t* H! R& F" d4 K3 h# w/ i/ R
0 F, h/ D% ?, `& h0 q&gt; if (x &gt; 4){console.log("OK")}else{"NO"}8 D  I6 g6 z( E, e) h
'NO'
% B; o* I! D1 ~, q! F0 L' x" p
% R4 R7 Y' g+ Z! y3, if(条件1){条件1成立执行代码} 5 _$ v/ n( U* j; g& N8 k: G. I
        else if(条件2){条件2成立执行代码}
. o- G: D2 t& n0 a: W2 p* `    else{上面条件都不成立执行代码}
, f" _9 [3 g2 W, `( K
9 m6 D% G1 G$ v1 S' B2 Q&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
! n; r; F* D7 y& G  o$ D Ha
5 i# E* s# I/ y9 \3 X4 }. ?) ^</code></pre>
$ W4 B- I; [& l( s<h4 id="252-switch">2.5.2 switch</h4>
2 \/ V4 |( U, j; ^4 s<pre><code class="language-javascript">var day = new Date().getDay();
( z5 N8 B7 ^9 z9 e; d* tswitch (day) {
+ y- d5 [4 l# n- f3 g0 \$ Q/ F  case 0:
" O" o, u/ X% Q6 Z  ^7 e. L4 j2 p  console.log("Sunday");  F2 [! Z5 s( k) f
  break;/ D- `8 d) Q) z$ G0 V
  case 1:( V; C5 Q' f) v" V
  console.log("Monday");/ n! P" T; K0 d! @! J
  break;/ L% ~3 y& v9 }$ ^/ k5 m: u5 m
default:+ A- N: I, t3 U+ A' ^
  console.log("不在范围")
3 B+ o! C! s, D- W8 C4 f2 e! S1 a}3 Z; N) G, C7 I4 S0 j8 A
不在范围
; O8 p6 _! q2 d- q9 O' d</code></pre>9 z6 w1 G; _7 E! j3 q
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
0 k9 v  r' t! b8 ^9 ^<h4 id="253-for">2.5.3 for</h4>
8 A, a6 V% P4 @4 _<pre><code class="language-python">// for 循环
# i' ^) p: ]( |5 e4 i& A# A2 Q" m6 e        for(起始值;循环条件;每次循环后执行的操作){' X: X9 O" A" @* n7 g& q* b3 `( e
        for循环体代码
! z- }% v& p( M) @& c9 p    }/ D5 G6 c" l$ f5 W) \

( T& I, \' }; T; d; e5 O- mfor (var i = 0; i&lt;10; i++){9 r3 k/ A# X* A8 L" T  X
    console.log(i)" i' I& }+ S6 u5 f8 c
}% H5 n4 I& X( ]7 v$ J5 X" A
        0; j. i5 M+ D+ z" u
        1
: j( `# @3 u6 A. \% ~$ t' V* T        2+ b# E8 t+ J8 |
        3, l* Q8 w* M5 O  J
        4
9 m/ Z* y+ l7 R# ?9 v% T7 s' y8 G9 i        5
% r- S! V  Z, j- R        6
5 `) s) A5 Z9 L9 {& h8 d        7* w' _3 n. |" |# B4 d# g1 c
        8
; t2 x. ]8 u7 L5 u9 ^9 e5 m3 x        9/ w& {/ Q2 H7 M$ |  K: z9 X5 ]% M" P
</code></pre>4 v9 n! M- Z% j9 c4 c  A0 m) k5 M
<h4 id="254-while">2.5.4 while</h4>
$ Y. ?9 F' l/ \! |. j- h9 j<pre><code class="language-javascript">// while 循环& V- Y, d# a0 U+ `) M6 X
        while(循环条件){
- ^/ S: g* |/ m0 e( S        循环体代码: h5 D* Q$ m. Q4 P
    }
% ], p- V( H. D9 u: ?5 D; J/ z; B: \! l, F& C) q8 {. d: L: ^2 L
&gt; var i = 0
/ R8 ]) |; X0 |5 e+ v8 V: u&gt; while(i&lt;10){; v6 E+ p' I; `: l. q
    console.log(i)$ ?( x' g0 o; x! X0 q3 |, ]% K
    i++6 E: [: I, f6 y' P
}
/ e+ b" C9 ?  b* l& @1 C( r, G' L. d 0
/ d& A1 h) C- t8 @8 d 1
+ G) L) K& l& j" x) p# p' X 2
6 p; t- {$ N" d. l 3
4 p$ e  p3 c/ A$ J, h* g/ X 40 o" U: J) |! r0 S) y
5) v* @% m+ k8 p4 ]0 E8 X/ H8 b
66 z1 W) F, b) H" ~
7
/ p6 `4 e0 k: x7 I' R! [7 P3 d 8
# t+ P7 j. @" o. A5 w9 O' t. q 9( a% ~5 v& Z  W
</code></pre>
9 V4 O. N  i) H! |6 y5 w<h4 id="255-break和continue">2.5.5 break和continue</h4>8 Z7 X& R; G( t. [8 g
<pre><code class="language-javascript">// break
9 c# a( [; L2 ^/ r( gfor (var i = 0; i&lt;10; i++){
; H' U7 w; ?' g, N" @% T    if (i == 5){break}
$ g0 Z( o$ o' t, s2 K- j5 o* ?    console.log(i)
5 y; @5 E, ^2 j8 I4 k8 |0 {6 M}: q% X0 l# U, U8 [
0
3 Z6 n$ h1 Z% _% M5 ]+ P 1
: l( B( d9 c7 Z# Z! i 2& h7 F. T2 u& L
3
' Q( \+ w. f% m. h2 y 4
- B5 V6 V& J3 R// continue3 q+ T2 \  O5 @+ S& v
for (var i = 0; i&lt;10; i++){: x" g4 ?, q% L
    if (i == 5){continue}
, i2 Z. d, w; W' Z0 X% L3 h    console.log(i)
1 ?5 i" L! ?6 o* l/ ^, J}
. O- y* X, g  K* y9 D' K 0
9 u3 |6 @) `1 N& A, T5 M 1
: Z! F9 v- I7 @- p 29 y3 Y2 M7 I. E" N$ O' g1 j
3
, g5 T) K5 {& p8 O 4  @3 v1 E! o( c" {/ A1 O8 i
65 m! R6 }* j. {0 A
7
# }: m2 D. s0 F. _0 E 8& ?6 q3 x' K/ `! g, ?! }
9: s2 h; M9 V" D6 M
, Y# c, z' l8 N" r3 t
</code></pre>
; j* {1 b6 u3 i. J2 L+ Y" S4 r; X<h3 id="26-三元运算">2.6 三元运算</h3>
; R6 Z, S; Y! B+ C0 ~; V1 m& c<pre><code class="language-javascript">&gt; a5 ~( u, x$ _8 r/ A, n  v2 X
6- k7 z3 t, U9 @* _
&gt; b+ B( l/ J7 s# _4 ^
3% {. K* I( a0 M

& |$ {! N' j* i( D2 Y& N0 H9 r! ^//条件成立c为a的值,不成立c为b的值) X% E2 z2 D# L; ]& `: ~+ ~/ J6 k
&gt; var c = a &gt; b ? a : b
( o! P6 I" C7 b# p- z, z&gt; c
2 b$ I! U9 x" r6 `; s5 K. T6, ^  M7 c! o5 K: A% H
. S3 g# q& L; p
// 三元运算可以嵌套
6 ?7 a1 P' d7 d5 d# a  N</code></pre>" J4 q/ B1 P+ N% |& j# i$ O, q9 L+ k
<h3 id="27-函数">2.7 函数</h3>( G0 q, g0 d/ Q" V+ A
<pre><code class="language-javascript">1. 普通函数
9 T4 G3 \# X9 D. E& t2 h2 W  h&gt; function foo1(){
* V0 l& K: d1 G8 ^1 D4 n- c* n    console.log("Hi")
( w# v  c# U0 F5 _! k( v}
' f/ n8 O6 e! V& ^: @6 H
' p! K5 r0 G7 c6 f1 E7 l&gt; foo1()
& M% D$ k: `) A& T) ?) @        Hi
+ H( p) D4 Q% [, `3 X2. 带参数函数
% \0 x* U; a  Q7 V6 i  g0 N&gt; function foo1(name){( ~) J: O4 z+ q6 \- n  `, F
console.log("Hi",name)
7 P8 U& y. C+ n% O1 x, U}5 O& z0 b: |1 k0 {+ o

: P8 l/ ^# |# C& U9 q: \- [. c&gt; foo1("Hans"). u4 Y, e$ f$ F/ ~3 b& S% N
Hi Hans- G/ B7 ]+ [; Q7 w* ~5 w& o3 Q

/ ?" p0 d' L1 i& a, ]% {&gt; var name = "Hello"  f/ L0 K- _/ j! q
&gt; foo1(name)8 g, M6 u/ }8 `" q2 I& F
Hi Hello. y1 U# U4 _3 ]' @& q7 v: F4 l
8 J) W( Y) {/ w/ b+ @* h( a& U
3. 带返回值函数
' ?5 f- G5 |8 m&gt; function foo1(a,b){
% p, M: z) H) ^! L6 g/ T# i        return a + b     I- p$ w1 d- _) `4 R3 e; k: |+ V$ k
}+ @* q6 Y8 z/ \8 m/ Z
&gt; foo1(1,2)
# i; M; Y) {3 a1 t) v# B  l& ^38 ^9 }6 s. N. @1 _. C- \
&gt; var a = foo1(10,20)  //接受函数返回值. B, I5 j1 u. N* Z( Q( \
&gt; a
5 D9 r( \& G5 `, o4 a30
5 W! B. [& w# m- q: q, o
) [  b# x* y9 w/ e6 {% z( g# f4. 匿名函数0 F: ]2 g: C0 ?2 P; ]- v
&gt; var sum = function(a, b){
. J+ V8 l! w! }. I/ c  return a + b;
( g' O1 i. i$ h6 u: O}
) D  n& r  @2 G% Z&gt; sum(1,2)$ M4 w' B7 F$ G" m6 P- U
3
9 V# p  I; ]  R) E! b2 @' Y, b) i* i3 k
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱/ `: `; _' |, y- h* a3 g* O
&gt; (function(a, b){
) g/ A! w+ h8 m& H8 S8 [  m  return a + b
1 @+ J/ B2 g# h5 g& K})(10, 20)
$ `6 h" H) L+ y0 g6 B30' P. m, a) Z8 F3 l. m& ^/ \! m
) U4 ^7 `- S% Y6 o- Q2 m
5. 闭包函数3 p3 B- x! |  W# L7 a8 z
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
. _. M& d/ W! i3 l8 i/ d) H. Jvar city = "BJ"
* Y/ K9 t! M& ]/ ~/ M: f' cfunction f(){
6 _7 z! e. Y8 ?4 @    var city = "SH"$ [% f1 w" y0 j2 l4 i4 x# Q- m" w. g
    function inner(){
& v0 @# {- Y1 u8 I3 Y9 Y        console.log(city)* I6 b+ i& \0 J" }4 x( q4 n7 J" ]
    }3 w& N# l8 C" p. E9 ]$ F% t
    return inner6 N0 U) S% ~7 A5 g2 d
}
: _1 ]5 o0 P- Evar ret = f()
& H& ]- _7 ?; N. Y! K# Dret()
' d# @! E# t  J% {( ?* T8 [* |执行结果:& \7 V, `: K  R1 R2 l8 K
SH
7 h) X4 X( J2 U* {6 ?9 _9 ^* P9 ?, Z  t* k; T7 [
</code></pre>
% V7 {* W9 F* D8 h3 ~) R<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. c* r$ V. n7 I6 {7 ]; c
<pre><code class="language-javascript">var f = v =&gt; v;
! Z5 v: R1 n9 x' U// 等同于% E" X( M6 B( I6 w9 n6 z
var f = function(v){
% E& @, Q! @2 g% c& B5 h  return v;. ~; x2 d/ z- M: y0 d( o* L
}
6 ~+ H* i8 p' O9 m</code></pre>
  ?+ _; W. E1 J1 ?<p><code>arguments</code>参数 可以获取传入的所有数据</p>
) ]7 e! v- A' s% A* \<pre><code class="language-javascript">function foo1(a,b){3 Z  I7 ]' v" X- E5 E
    console.log(arguments.length)  //参数的个数
5 Y5 O$ _5 M* `) R& Z3 T) f    console.log(arguments[0]) // 第一个参数的值  {) X9 v& b; _4 l5 z6 ~7 B9 e
        return a + b   / T. g! B- c/ h* t7 c
}
* ?! N! L, \4 b1 n' wfoo1(10,20)
. k+ Y, p  w0 H结果:# e0 N4 D3 a" o; C' K4 H4 o
2          //参数的个数
( P# F. Y2 \) f# r* G1 [" d. u10        // 第一个参数的值* L! ?8 D) a  W6 Q
30        // 返回相加的结果
" B* F- t( m- [</code></pre>8 I3 h8 }4 a- A+ b1 i3 ~; W
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
2 e, e2 {6 e2 K<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>9 `, @% w# p2 C) K, M9 y
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
3 e7 @% b4 ^; j<h4 id="281-date对象">2.8.1 Date对象</h4>* E# H! a' O5 {% l4 L
<pre><code class="language-javascript">&gt; var data_test = new Date()
; A4 `; q$ u5 [( K. V: s&gt; data_test
# S7 @) E$ l/ Y! p2 FFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
# g# v# y! @' _&gt; data_test.toLocaleString()
2 Q$ z3 T# b% j# s, I" ~: V) l# T'2022/2/11 下午9:44:43'
% \9 w  c- @2 p% O; G8 y# A$ u, Y! A6 Z* |' r( I: O
&gt; data_test.toLocaleDateString()0 f% N* u* n8 p  R  U6 z& p
'2022/2/11'
) @, Q( N6 e% @& E2 Z* n
- q, B4 F* T0 ?! L8 B&gt; var data_test2  = new Date("2022/2/11 9:44:43")
6 Z+ e( |, m& \&gt; data_test2.toLocaleString()
! [. G# p, ]3 L& _( \'2022/2/11 上午9:44:43'
, M1 P+ ^. }* H/ t, @5 w" r) T% ~( S  d  v  p+ Y
// 获取当前几号1 L! }  P. O6 n8 G/ o# q1 L
&gt; data_test.getDate()
9 B0 p# q# r, p, |+ q. b11
9 p2 t7 k/ x2 ~2 U# D, r4 u// 获取星期几,数字表示; [; r1 G7 S* q, C/ V( `7 ^
&gt; data_test.getDay()  * W6 Z' X5 F; p7 O( Q) v6 @4 y
5
" F9 f: l9 g$ W/ D# z" D// 获取月份(0-11)
8 z8 g7 V0 x2 R. D( F&gt; data_test.getMonth()
/ Q8 k5 f9 F8 I; M$ f1. e5 F" k2 y* Q# ?# P" S5 N
// 获取完整年份: H5 E- U' Z/ f# X1 ^
&gt; data_test.getFullYear()# N' U/ ?/ t# w. Y
2022! p0 @$ v6 u" H. }
// 获取时9 ~) c2 I# Y4 K( d& ]+ z1 @6 B- t
&gt; data_test.getHours()) k$ S# j" i+ R) w* u
210 _& g7 N3 Z/ D  X
// 获取分
/ s- Y8 [5 B' a$ F, v&gt; data_test.getMinutes()+ D2 p% @5 ^8 t
44  G, ~' v% I" @0 x: C
// 获取秒
5 K3 c$ c- i* |7 d* I&gt; data_test.getSeconds()
: t) }3 q. l4 U434 G) u8 p5 H( F. u2 _
// 获取毫秒% f& h- y- b9 P( o' [7 z
&gt; data_test.getMilliseconds(). j1 o% p- p6 f6 N! u  [* [$ |
290( {. E' \; S3 D7 M
// 获取时间戳5 e' ]; q1 r# Y1 V# N1 E
&gt; data_test.getTime()( h' {2 K9 X# x/ u
1644587083290. J# @$ n0 X* ?% u0 T
</code></pre>
: }1 }6 w( N! \$ S<h4 id="282-json对象">2.8.2 Json对象</h4>& @' Z1 d1 O+ N0 c2 x  B
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
4 P+ W- \$ n( G) _- j9 |JSON.parse()  // 反序列化,把JSON字符串转换成对象
. Q( a7 e5 a* I, U% N$ k5 v$ V( X8 r; R" ^) L1 r$ n
// 序列化
4 X9 C2 V- j- E- O, u4 y&gt; var jstojson = JSON.stringify(person) ) Q4 u0 }" D  E% e+ p+ F* k' F- u
&gt; jstojson  : w; I0 S, _+ P1 U7 Q/ [! M
'{"Name":"Hans","Age":18}'
8 q! m$ r5 r5 _7 j  ~% @2 m- G
+ H7 F$ z- ^" n; z5 N7 r// 反序列化
' p1 `. r) i/ ^/ r  w/ t/ e&gt; var x = JSON.parse(jstojson)* J# F7 o' s, s
&gt; x
5 J  w4 v/ D: e{Name: 'Hans', Age: 18}7 c9 Y( e8 U/ G# X$ i: K! l7 _, m
&gt; x.Age
% `4 L! K: k4 n/ S1 o& v18
- d5 n6 i4 W. n; [</code></pre>
, p  {" S2 u$ W' L! R; m<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
5 |9 Y- P) r( G3 C<p>正则</p>
' d  `9 ?2 p/ c) J<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");- R- b' |, p# q; I. l' q
&gt; reg19 g& X% u6 r4 e8 D
/^[a-zA-Z][a-zA-Z0-9]{4,7}/  a1 G* Y# g: X! n3 d
&gt; reg1.test("Hans666"). ?7 g( w6 M7 O% I4 G7 d
true
9 j( \0 B% G" X; i
$ v3 O! {5 A4 y5 P# U% Z&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/1 m" B4 d8 V, Q! _9 N( ~
&gt; reg2
. U+ Q& d6 u/ ], c1 g7 `/^[a-zA-Z][a-zA-Z0-9]{4,7}/
+ H1 [6 E0 u1 E0 a$ q1 c* t&gt; reg2.test('Hasdfa')( K) H3 e" H- [
true; R, G+ \, f/ Z

0 `; W! k. d  H3 ]( F4 z全局匹配:: g$ J1 Q7 {) B& ?! }- o* M- X$ A0 t
&gt; name& h1 u" D/ [* R  Z
'Hello'6 o) y' `4 S) x+ G3 E
&gt; name.match(/l/)
- B# ?. A2 a( \2 f0 C/ v5 r['l', index: 2, input: 'Hello', groups: undefined]# X& c' {2 v7 g! ?0 P

  ~7 v7 m' S. M% X* @0 k6 x&gt; name.match(/l/g)
# X) [. t3 |8 Z* e(2)&nbsp;['l', 'l']
0 U8 Y& O, t' J3 [7 t// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配: H' l% n( X* T3 Q" J, v
5 [! i4 Z2 M: Y3 `) o. [( X
全局匹配注意事项:
7 c# W, i1 I3 P3 L# x&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g- |7 _9 ?, U. R% v
&gt; reg2.test('Hasdfa')
' R* |' ^* G( y: dtrue
8 b/ ~- d2 q7 E&gt;reg2.lastIndex;  Z3 v8 @) O* i# ~+ p9 N$ w
6
  @0 v' ^+ |8 o1 C& b5 o&gt; reg2.test('Hasdfa')
/ @- M3 Z& @+ [! k' Sfalse
1 J9 x" M8 R' s- p&gt; reg2.lastIndex;9 `0 Q3 i5 w& k) A$ O: k
0
$ U( o% B" q0 P1 r&gt; reg2.test('Hasdfa')* C' d0 n2 E$ H. z: Y( E; j1 `8 V' g
true! p6 y& j# G) k' A! m9 y
&gt; reg2.lastIndex;  |" z  _7 r, t. q6 i8 z
6
# H  g' B" t  Z6 a/ L$ s6 J0 N' y# P&gt; reg2.test('Hasdfa')
% ]- ]0 u. ?& N" y( Cfalse
( Z6 _2 h8 t7 T&gt; reg2.lastIndex;
& E4 k' J1 Z+ J  J0
5 M! d3 r& C1 y2 f$ U+ }// 全局匹配会有一个lastindex属性3 W, [& d$ O) e9 S! r9 s, G7 _
&gt; reg2.test()8 S$ g+ W* W( H( I, s
false
" d2 |" r: s) R9 W& {6 N. l&gt; reg2.test()9 V* W, d6 b  @' G" q
true
/ q: m8 m8 u( n) l* h9 k// 校验时不传参数默认传的是undefined
- |' ]  {9 h' J5 n7 E) F</code></pre>
! A; e5 Q, Q" A3 r2 v, c- ^<h4 id="284-自定义对象">2.8.4 自定义对象</h4>0 W( d  T) {' E, z6 [4 g0 v. Q
<p>就相当于是<code>python</code>中的字典</p>3 I/ {# O$ D. B, [6 A. D0 m
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}- I( y+ Q5 O: Q1 W" Q/ p- c* ?
&gt; person
' j# H3 P% Z/ I+ d- v& C8 r{Name: 'Hans', Age: 18}
8 J9 J, Q- k# S: t) C&gt; person.Name
' n( \& |5 b( [' u'Hans') k) Z4 B% b+ g- d# d5 ?
&gt; person["Name"]
- o/ S2 F1 q- }" A" n- @$ a'Hans', ^8 \5 w$ ?, r* S$ ]
4 [! E* D' ~$ I' b6 g+ C
// 也可以使用new Object创建4 V5 S( f) S. h5 f
&gt; var person2 = new Object()
8 E6 R& e5 z: b: `) q0 e$ J&gt; person2.name = "Hello"4 i/ \$ ]1 E! {4 M+ b
'Hello'
7 H& K0 ^  [* ~&gt; person2.age = 20
+ S* b. D' P% M% u/ A0 [1 A20
$ w* }5 a2 {- T2 z2 H</code></pre>
  s. q2 b0 t' ^9 c<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
' H3 f: q$ K# R* c! h<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>& `' R6 Q! _0 r( X% S1 U
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
3 m8 ?5 t0 \7 `<h3 id="31-window-对象">3.1 window 对象</h3>: E; l/ T: S1 w9 A2 `2 {8 u' `' c! n
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
3 D5 P# d: B4 W4 ?% r# B<pre><code class="language-python">//览器窗口的内部高度4 |/ o6 ?9 p" i. b9 M
window.innerHeight
3 U# d% n2 A$ ]1 s$ D706
' t2 K6 e- E- t3 k2 \$ ]//浏览器窗口的内部宽度
- F! O1 c- V: V/ P, |) g' Wwindow.innerWidth3 f- C- d- ]9 o5 h* |" [& [, B; k9 b
1522$ x& z; u! l  q& }
// 打开新窗口7 G1 m% t  n1 Y4 S; Z$ k
window.open('https://www.baidu.com')
1 |+ G: U' n; }9 L4 lWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
+ G' R( o) p7 n- u& s// 关闭当前窗口
$ C; o4 V, `/ ~" nwindow.close() , o0 A  s1 j* v3 _5 x
//  后退一页
% l. o: _$ I) ewindow.history.back()' A! E2 N1 k+ `8 T/ @( N; `
// 前进一页' q  [& u3 }) @
window.history.forward()
8 e. b! @7 c' z' M% E//Web浏览器全称
* K( Q' z' C# ^9 [& j1 T8 @, Rwindow.navigator.appName
* Z1 |+ p! v9 F" S1 Y, e'Netscape'
; i# T+ m+ r) N- o9 H  j' z// Web浏览器厂商和版本的详细字符串) i# a* [- Y2 T4 |) g
window.navigator.appVersion/ H4 Z2 [5 m( w& a$ @
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
, z. p3 D: U  O7 d' r& I5 V2 i9 h// 客户端绝大部分信息+ y% |! W9 r3 V$ f  _
window.navigator.userAgent
7 M9 N1 c' J# h+ M( r& \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'+ B. d" H2 o: x/ @$ z4 c) E" l
// 浏览器运行所在的操作系统0 N7 w  M0 U" U9 W
window.navigator.platform
% i: f! Z$ [/ n; k8 B2 a'Win32'; [( a* E, R- x

  _$ _  I6 r' Y7 }7 Y- |; F( K8 X; Z//  获取URL0 U8 M! y2 G7 ]5 A% c7 O
window.location.href6 ~. R, d8 Y3 d# S; b9 M- Z
// 跳转到指定页面
0 W6 q2 I3 z& g, {window.location.href='https://www.baidu.com'
0 e2 o# @% c% [+ C# G$ Q+ |// 重新加载页面* s3 T# M, w, `8 s' D. u/ H
window.location.reload() . ~0 B4 z5 |6 Y9 `* S
</code></pre>1 z; q0 `* x6 D( N+ x# b# g
<h3 id="32-弹出框">3.2 弹出框</h3>  q) B# G! Y3 s! F% r6 y; S# {
<p>三种消息框:警告框、确认框、提示框。</p>
3 u# W2 O9 A! u! }<h4 id="321-警告框">3.2.1 警告框</h4>2 X6 d9 T- \% I- |% S
<pre><code class="language-javascript">alert("Hello")! K. E) w% R, V% t) W
</code></pre>2 U  I  h9 S, U3 R6 N4 ]
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
) a* x% O! @* ~! {<h4 id="322-确认框">3.2.2 确认框</h4>' y3 Q6 t2 `% u: A; o- [9 \; j7 e9 Z
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
( C; N% ?+ f& p4 {. t8 B5 I<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true" L: D# w% U" X
true5 g3 ~8 j' F! J6 Z% _3 l! r+ o( L7 w
&gt; confirm("你确定吗?")  // 点取消返回false
& g) h- E/ n7 g4 b  ffalse
/ u3 v: _; q3 @</code></pre>
, P  e" V$ h9 d0 ~9 S0 s; C% X' S<h4 id="323-提示框">3.2.3 提示框</h4>9 r, a( x6 Y1 f1 P
<p><code>prompt("请输入","提示")</code></p>
5 w9 d$ f$ J# M; ?+ {1 Q1 ]<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
. @& R( y0 Q1 q, S: I% a) h" R<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>( j3 X( R; b) J% X
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ K. Z/ p1 p2 V
<h3 id="33-计时相关">3.3 计时相关</h3>
8 f( S. k" r" j2 Q6 r<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
6 p8 m" A% H- e7 {8 n5 C* J<pre><code class="language-javascript">// 等于3秒钟弹窗/ }9 ]2 N2 p/ M% x/ l* ?
setTimeout(function(){alert("Hello")}, 3000)
! K, N0 F( @) O' k' _) P; Y/ ^( Z0 }' d7 x8 a1 y4 [+ }
var t = setTimeout(function(){alert("Hello")}, 3000): h. E* O1 P0 m; ~5 J+ I9 t

+ d4 m  Y; p( `8 {// 取消setTimeout设置
+ f  n9 H4 d! u. n4 f1 mclearTimeout(t)6 ~- v' G0 r" m
</code></pre>% g% x7 K0 }) ^$ c( h, E) s
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>8 v! K+ g& K0 o* [
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
) l2 U( U; W9 a4 I- y<pre><code class="language-javascript">每三秒弹出 "hello" :' t! i( i! o7 M
setInterval(function(){alert("Hello")},3000);) ], G8 Y% G7 j
</code></pre>
7 @) d# _, s. Z$ @- Y3 @8 g<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>" M6 G# R7 f, `! U% e$ v% R
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);2 X: K" o6 a4 f' Y
//取消:
2 H, R( B6 i8 i/ g! c3 t- GclearInterval(t)
6 A; n* ]( D: ]9 r8 f. Z7 l" F</code></pre>0 `, m8 @8 y6 u  _% z
, g) D, N2 \6 s$ x8 q. u& _$ g
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-9-18 04:30 , Processed in 0.067308 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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