飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

8 H8 P+ ^% [/ T<h1 id="前端之javascript">前端之JavaScript</h1>) J% J7 r; l$ h+ F. F3 [0 O
<p></p><p></p>8 O" s" S5 g, C# Z$ i
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>2 Y2 {7 k0 j* |% O
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>6 x* ~; ?' n" x+ T. ~4 I( Z
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>7 I! Q6 [1 W& x% g
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>  ^) a; z' F% K6 C) a
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
' j/ M. P  w8 B2 p# g  W<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>1 w8 y! S! [7 T, Z0 w
<h3 id="21-注释">2.1 注释</h3>
# a5 u4 |: \2 w* [<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>) Z: C* u. R3 m4 H% ^
<pre><code class="language-javascript">// 这是单行注释- b7 j: O' J. M/ Q. K- q
4 r: ~) ^& K6 C1 Z3 N
/*
- {8 O3 z  a" v1 _: w, Y/ n这是多行注释的第一行,% D* d% @9 m0 z5 L
这是第二行。- |& m( W$ k8 [7 D4 t
*/8 Z, d2 w6 V/ D- c# q" _  z; Z; W
</code></pre>: h0 |6 [+ U4 P1 c
<h3 id="22-变量和常量">2.2 变量和常量</h3>
! p, B' b1 b. O6 ~3 f. n( p$ v<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
$ L; D+ U. q# e# `<ul>
& L) C; w+ L$ |# |+ Q3 \0 X<li>变量必须以字母开头</li>2 h4 F) `$ n; I% d
<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>1 l: _6 M0 U: S# a' J' U, k; o
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
6 v1 c1 M3 `. o' i+ N5 T7 p$ Z' W" y</ul>
/ r( M! a: Q: A<p><code>var</code>定义的都为全局变量</p>
# j) D; y) z. V- }/ I" o<p><code>let</code>可以声明局部变量</p>
4 a5 D. X! o. R# m9 d2 n% h<p><strong>声明变量:</strong></p>
, a# f$ c( w. d7 z<pre><code class="language-javascript">// 定义单个变量
4 X! L# u# H( y&gt; var name
3 h7 ~. M- I  D5 K' b# b&gt; name = 'Hans'
2 E0 e. z* s4 Q3 @8 ^4 }6 e//定义并赋值4 g) C; b6 R7 h1 Z
&gt; var name = 'Hans'
* @5 f) S& [; W5 J4 @# s&gt; name9 W0 l- p  G" g
'Hans'8 E# O2 r- e, ~2 Z! \3 {
* O# a. i* x, x- O! b/ z6 `
// 定义多个变量: o' W& Q, g% P6 a' m" f
&gt; var name = "Hans", age = 181 h1 \9 ]) d5 f4 ~- q, g
&gt; name
+ G6 p  t" _: B- t# |'Hans'
! x2 w: L5 {: @$ N, L& x&gt; age, a, u* I( ~: z
18
7 ~( b5 Y, i- K6 W( v2 c
; {9 l5 V( }5 a* x* X- P' t) r//多行使用反引号`` 类型python中的三引号
6 Q/ w9 H3 M$ N2 j1 {&gt; var text = `A young idler,
% ?: ^! V# |  Q& Wan old beggar`
0 o0 J9 T2 ?2 H&gt; text! K) {7 x: n" Q; N( g* d
'A young idler,\nan old beggar'+ r" I7 L+ d0 K% ?2 L8 _' E! U
</code></pre>/ E, ]  H9 ^2 m' v$ R) W" x4 q- Q0 t
<p><strong>声明常量:</strong></p>
4 k* }3 K: ^  I, j<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>. @) l/ i0 l8 g# n, e$ e/ b6 C
<pre><code class="language-javascript">&gt; const pi = 3.148 p) d4 E5 y" M+ N1 O
&gt; pi! w1 V+ S0 d: x8 c+ T
3.144 o3 G5 m) s# N
&gt;  pi = 3.01" A2 P4 i* U- W0 y
Uncaught TypeError: Assignment to constant variable.
& d  V2 [+ j' B    at &lt;anonymous&gt;:1:49 E) T) |; r: q5 ^6 `& u9 y
. \$ \3 t/ Y1 L9 s
</code></pre>
0 ^3 ]: d: g3 ~6 ^' |<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
% X0 _  x" k4 `, U( x& |<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>0 S  R' h0 A. D1 ]
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>/ I- V6 Q' J) I9 n, Q
<h4 id="231-number类型">2.3.1 Number类型</h4>
' Q) U. T6 E: Y$ O! d<pre><code class="language-javascript">&gt; var a = 5
+ `$ B  ]0 s3 [: y9 C&gt; typeof a   //查看变量的类型  
1 d8 J) X: H5 B# M& fnumber
4 \; R& ?; ~3 {
3 a+ c& A: Y( o" v&gt; var b = 1.3; b3 c% e9 U# s* ?
&gt; typeof b
- E  X$ X6 t* L4 _6 ]number
% P* ~! s, d& Z, e6 {3 k; Z2 \* n% g0 z; o! d
// 不管整型还是浮点型打开出来的结果都是number类型
4 R- C7 F3 H" R8 o* b2 |1 W% Y+ L  W& K3 N
/*3 `& J' I( m. x' F- b: s; H
NaN:Not A Number& G# |9 n7 E# t/ A7 y
NaN属于数值类型 表示的意思是 不是一个数字9 i4 q4 s. d& x+ ?5 m
*/; X) U7 a& K- X# ?5 q# p+ j" N

+ p* x: K/ V7 W, [  KparseInt('2345')  // 转整型
1 }5 H5 Q8 R* W/ d* Y4 I! |7 n2345
% C3 k# b6 o$ I' J6 ?parseInt('2345.5')' W" X3 v9 s; }! ?  S4 F
2345& W& e$ t: O6 W1 S5 l
parseFloat('2345.5') // 转浮点型, ?( @/ @4 O1 t: b- n' {; [
2345.5& h; Z  V  c/ F4 R% Y$ J0 N/ y
parseFloat('ABC')6 W8 ?4 \3 C! K& p, E: p9 K" B% U
NaN( W3 t" Y) H# A; C& b) J" F
parseInt('abc')
$ V7 g! @) {2 ?, |5 O0 f/ J+ m8 UNaN
2 J! P' p; h" [1 ?- K</code></pre>& w; I) |& y' B& d& _
<h4 id="232-string类型">2.3.2 String类型</h4>' j! C7 \; b) y
<pre><code class="language-javascript">&gt; var name = 'Hans'
* n$ m. V% g. V) J2 @7 k' n& z% P% P+ `&gt; typeof name
4 o! Z$ L2 D& b7 j'string'
" Y5 z' {; q6 P1 R  i+ _) \
% k/ t5 H  b1 @8 N6 e) V//常用方法
9 |5 m7 a- z) u1 K$ {- H: r3 \% s1 b// 变量值长度: I! D! O7 ~/ ^+ M  b! |1 ^
&gt; name.length# b! l/ M4 Z) Y- G  i9 ]
4* l: S$ K5 ~+ d7 _% Q
// trim() 移除空白
- S6 B+ q) O3 a; g& u' L&gt; var a = '    ABC    '
' m9 C! A# }! `1 m% l&gt; a1 a$ u" e9 T, g, _" e
'    ABC    '( ^. X7 {5 W, f$ E! x- C5 T
&gt; a.trim()
* M" n# z" h) ~' C'ABC'
. n+ J1 q- u9 ]9 K. U( d% |/ G7 h0 C8 K//移除左边的空白' W& J  j+ i7 ?. |- }7 ~: \
&gt; a.trimLeft()* {# j5 x" X. [
'ABC    '- V6 ^/ o- E( e5 x. P
//移除右边的空白& j$ Y0 G3 X- i5 b: V0 l
&gt; a.trimRight()' F+ S: ]. |7 _" c# F
'    ABC'8 a% N+ {- g* \# ?' F0 @
2 [: Q, A1 Q  B
//返回第n个字符,从0开始! J( |% w3 h0 _, A8 l  g3 t4 Z
&gt; name
; J9 x+ w+ \  o; z'Hans') s/ c% ]& M2 J/ y6 [+ W0 z; Q  U
&gt; name.charAt(3)- O9 r; s% |  W9 a( z- ?5 x
's'8 k$ }1 U6 |( O; r% T1 @
&gt; name.charAt()1 h9 Q# _& A8 P+ s& n
'H'
0 Z2 o! K. B* u, U4 n$ H&gt; name.charAt(1)- |# R; x% ~9 B8 _& x
'a'7 s" \* m/ O* c
4 T* x; G: w4 B
// 在javascript中推荐使用加号(+)拼接
, M9 k8 S. q9 Q: F5 y&gt; name( h  f$ Q2 x" c" E, M. {4 E+ U
'Hans'! s) m1 z& m) ?5 h' ]. A5 d) L( ?
&gt; a) p$ [. P6 C; e- @+ H8 e
'    ABC    '0 R' G7 m2 r! c
&gt; name + a( ~0 I" K( Q9 c, n# G% B
'Hans    ABC    '
+ _& f" U2 e1 \, Q1 E9 n" g// 使用concat拼接
" e; ]5 w0 Q1 q# B1 t1 h&gt; name.concat(a)
$ E  t1 R4 m; u' ?* \, A2 k3 @1 V5 l'Hans    ABC    '0 P, ?* S4 M) \3 U

. B2 u; c( Y# B- X& F2 d/ {* Y6 k3 \" v//indexOf(substring, start)子序列位置
7 o* t! w" d$ g% `0 m- z0 R
2 g- y2 Y7 [8 X& U! H* d) c&gt; text2 s: \; ^! f0 v+ h0 p" O# J" S
'A young idler,\nan old beggar'6 v+ L( n5 w/ a* [, u
&gt; text.indexOf('young',0)
0 @' `# n; x" X22 v: W9 c$ E* H$ v4 S6 n2 X
6 k" k; ^2 d( Z& Q9 o! ~5 k
//.substring(from, to)        根据索引获取子序列
) ?$ E' N" z, Y  K3 W&gt; text.substring(0,)' J" V& Y8 Y) `7 z! W/ d: \
'A young idler,\nan old beggar'
, H% ^$ Z9 @- ]% c5 E; P2 m. L&gt; text.substring(0,10)0 W8 i) I: h2 z3 }
'A young id'
7 n" P! r2 o+ M5 Q8 s4 y* Z
7 T( ?; g+ g- D// .slice(start, end)        切片, 从0开始顾头不顾尾+ _! U% F! m3 N' y' s, E
&gt; name.slice(0,3)
) a  D+ ]4 S0 s# K& M, n4 x6 R'Han'
. N5 m$ W4 \# R: ]1 P+ ?. i0 x$ a7 {8 d( h8 [0 H7 ?
// 转小写4 T* p/ A4 b$ {4 o! L7 P/ W, m
&gt; name$ X( ~1 S' H% m2 B9 r' f/ {( X
'Hans'
  p: O. n: `! e: F, Q&gt; name.toLowerCase()
' L5 G, O4 R' i% |'hans'
; e; }  g+ f" Z5 T  Q8 {// 转大写8 W( y/ l2 S$ `. f
&gt; name.toUpperCase()
3 J/ X, u, Q- a# n/ x3 E, I'HANS'  U* [# ^6 w$ e1 g4 v$ g
% O3 X7 W. ~. R7 u3 h% X) }
// 分隔# e* r4 t0 V) A; [
&gt; name6 S; B9 v2 q1 |: U' ^
'Hans'  J- Z# o9 J/ h: u/ q
&gt; name.split('a')* S% N& t$ R; d* v+ {
(2)&nbsp;['H', 'ns']% q7 L: G# s$ R' L, T/ t# J# h+ B
</code></pre>7 `5 e! V9 I3 n( V; h# t2 v! |
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
: L  ?- @, [( X) G6 f' e: ?<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
, N% a7 {6 ]% D6 T6 M<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
. d0 P9 H$ U% j+ K: c<p><strong>null和undefined</strong></p>
3 p& f( U! K/ ?* Y0 u6 n/ D1 O" t5 m<ul>
  S0 M# M% y1 z<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>3 T% Z4 J  ?1 Y# T+ k0 q
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>  x( m1 B0 G- U# Q; b( p$ Q; S0 ~; D
</ul>
4 Z6 S  R; k4 E( |& s6 q<h4 id="234-array数组">2.3.4 Array数组</h4>8 A( V3 F+ p  S/ M" K6 c+ c
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>& C. e2 J( \. W; x
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
5 k# O" E: B$ ]' a7 E&gt; array1
* u9 L0 N0 {2 S2 E( ?9 ]- z(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( U% p4 m' G& s' T/ K1 u4 y
&gt; console.log(array1[2])  //console.log打印类似python中的print2 ^2 \# _: y$ p" T" A& Y5 h
3
& \: x8 g! E5 Q! N// length元素个数5 G8 g$ n2 V( N3 V, @6 o9 `
&gt; array1.length
& c: N9 G/ V: X! m0 R7 J8 Q  q6( e: u, e  s9 ~9 P4 W" I
// 在尾部增加元素,类型append  t3 z4 E" T- F1 d/ Q3 A; g
&gt; array1.push('D')
4 [# n* F: g8 C# @4 G7
+ h, E4 g5 {# p2 r&gt; array1: U. L& n- N" o& e/ M
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']# L* e* X9 `3 f# ^* S5 B3 q
// 在头部增加元素
- g: Q. c: G3 \6 z&gt; array1.unshift(0); ], q- L4 ~' b( u  r7 M5 S
8
! k# Y: q: {% P! \' y1 `6 I: u&gt; array1
. m# a2 ]: \6 P; O% Y6 H: ~(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']4 g- u% h0 o( M0 e
6 F# Q9 c3 s2 g. B: N. P
//取最后一个元素$ ~* t6 l4 p! T1 z5 x$ }+ F1 r
&gt; array1.pop()
# P5 X0 l1 [" i+ n8 W* e'D'
0 b. l* I2 g+ T&gt; array1
2 \4 \, m% G) s/ [' R7 Z1 N(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']& F( y  M0 V7 \7 |4 O
//取头部元素
* R! @, F0 Y9 m1 }% O  Q&gt; array1.shift()1 y0 O8 L2 \8 F. t
0% S3 z4 P" Y' V0 a0 h5 S  O
&gt; array1" N+ n1 Q: o1 M8 e5 \' n) v
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c'], z3 l, Z, T  n8 a) b9 j' M3 T) h

8 V% W+ B' P! n//切片, 从0开始顾头不顾尾  y$ `( G- r" {& V  z- [3 \4 ~
&gt; array1.slice(3,6)
! U6 f8 V9 V3 C4 E(3)&nbsp;['a', 'b', 'c']
% b) ^. d. v% b6 `5 D) Z8 u% ^/ |// 反转) H3 V0 W% z7 q+ B0 `3 F& [6 d
&gt; array1.reverse()
: }7 K& x" H* G7 w(6)&nbsp;['c', 'b', 'a', 3, 2, 1]  B- A) _: l0 M
// 将数组元素连接成字符串
) e( ~8 k% k9 h- c" g% a! U1 s% S&gt; array1.join() // 什么不都写默认使用逗号分隔
/ [3 o* z$ G) P'c,b,a,3,2,1'3 Q* T# `! v8 Y, S  [' L
&gt; array1.join(''); B: l1 A4 `# [# R7 F3 F* K
'cba321'
9 }0 V9 a. q9 Y9 ?1 h&gt; array1.join('|'); l4 {3 A( x+ e4 C5 n7 f6 p$ R
'c|b|a|3|2|1'
9 i( d8 g" l4 R
8 C0 z) ]3 V) l4 q2 `' f7 c// 连接数组
3 F$ q: w& J, \. h- n: r; u5 j: B/ p) z6 E&gt; var array2 = ['A','B','C']
9 C' a) [# W3 [" @3 F&gt; array1.concat(array2)& e6 O& o7 N- E- `
(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
3 p2 W; K$ Y' R% G3 j1 }7 d. q* J  D" k# Y
// 排序7 m* ^7 }3 I3 a9 c/ N8 G+ `
&gt; array1.sort()" C4 [) z/ l( F! o! o1 h0 U
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
0 R( C& m) J' Z3 j' q7 a
5 i. L9 b0 P: r& _% g// 删除元素,并可以向数据组中添加新元素(可选)8 q0 x) I4 M5 T! d
&gt; array1.splice(3,3)  // 删除元素
. E3 r% d, }5 c$ j3 x' }) `(3)&nbsp;['a', 'b', 'c']
( g( h# _* d& ^: {3 G&gt; array10 N9 }1 Q6 l2 y, m, v# {
(3)&nbsp;[1, 2, 3]
; Z* S) Y9 G9 R0 m  @  ~8 }% D0 k&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
: U! T$ z" ~9 E' T2 s' m8 a- ?2 s4 H[]! r- o. b3 z4 W3 y! r  z5 @
&gt; array1* x3 A4 i2 w# Z/ q9 D
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']* I9 P" Q; n: S* @- g3 {5 A4 Y
. {/ q$ p2 W6 s' ^
/*
4 O; T6 ?# o$ ]3 Esplice(index,howmany,item1,.....,itemX)9 G# J6 N$ y$ y; U& \3 B
index:必需,必须是数字。规定从何处添加/删除元素。$ C  C" }  }4 N' M
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。9 S; b" S# U9 n5 A2 X  M
item1, ..., itemX        可选。要添加到数组的新元素
& A" c7 d9 W* U, U6 C+ w& c6 d*/) b6 I; F" F( z( u

5 w4 o3 @0 h- T) ]* ?// forEach()        将数组的每个元素传递给回调函数  B, e; e4 H, H0 h+ ?0 w7 Y
&gt; array1.forEach(function test(n){console.log(n)})8 ~6 O7 H0 v: J+ c  X
1
" G/ B3 E+ k# `5 @. y 21 @  l& V1 H. m+ B  D  ^
37 P% f0 z+ E4 ?& D
A
/ Z3 q( n8 C; H% n1 X/ B/ W  K B
! W( ~1 R+ p' i( |% i C
& k5 C6 [: k) v7 b# U// 返回一个数组元素调用函数处理后的值的新数组7 c3 C2 ]( C0 K2 H. L7 ?
&gt; array1.map(function(value){return value +1})  G) z  P7 L% s6 V0 A
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
/ ?7 q; _* i; D& F</code></pre>
4 g  O: q; C) y: i& |+ C# C<h3 id="24-运算符">2.4 运算符</h3>" c& B6 D2 U. q; X: e
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>' n1 o' i3 y' \: C$ o4 H) o
<p><code>+ - * / % ++ --</code></p>
. i- K2 C" T4 b6 {- ^4 i<pre><code class="language-javascript">&gt; var a = 6
* E' G6 u. S/ _9 l: o&gt; var b = 3; L- y5 W0 H1 }( r
// 加
7 t& y+ A& ?* n1 I" W4 S: z' |" C&gt; a + b
7 P- h8 _( z+ [& P: D) I! g- i9
2 y& ~# I0 \7 y" b7 o2 [- K// 减1 f& T( |' F* b4 G
&gt; a - b, _: Z$ G) P6 r/ C( [0 j! m
32 K- S' j5 s, r! d, ]% C9 @* G7 F
// 乘' n4 {% f) k0 |0 _7 l% l% l
&gt; a * b2 P( ?7 V0 G0 g" o' S# X' g
18
2 A  S0 B# i# f5 n// 除
. x4 l$ N7 l  K& w&gt; a / b0 Z9 B+ F* G$ }
2
* g4 ?2 Z5 y7 @// 取模(取余)
9 T9 {& z: ]+ b  G, s4 v3 g&gt; a % b
. O0 j$ [  ~9 }0: ]: c) M1 a9 ~- e8 L8 F
// 自增1(先赋值再增1)  j' {5 h5 s6 x# d
&gt; a++  r' k5 E# r* W! Y5 a
64 c1 r- Y; e# k% d7 W
&gt; a! V$ I- i4 |: {& i8 N$ Q
7
  u% E7 r6 p2 Q7 R4 J- Y: o// 自减1(先赋值再减1)
2 @" `0 q0 a5 I. J! }' P8 m( h' O&gt; a--2 w/ {( O0 h8 A0 ?, w
7  T+ L* L! Z% s) C8 f, ~' i  [
&gt; a
# P  c2 G6 j+ H68 W1 e- _, O) s) m- \9 F2 `1 k
// 自增1(先增1再赋值)( E0 u" C! p8 h. R% [
&gt; ++a
0 I  e/ P% p; k7
! c4 O8 \% S; A* S' P// 自减1(先减1再赋值)
8 M' t9 `; r+ x( f  ?* k7 ~&gt; --a
' ~7 n9 w* A0 M+ \67 U  G1 N% N' ?  n% _% y1 T9 v
&gt; a6 h0 W" E, E  X7 ~
64 U5 G' }! W. u8 O  O- L

4 y) a& x3 D3 j2 D) @2 l0 M4 r/ |+ H//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
7 E. Y2 g6 h+ @! a1 E</code></pre>  |% e; z, V9 T% @- U
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>" D  P7 ?% C" h
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
+ i& z$ k9 v7 g: V/ j" N- _0 N<pre><code class="language-javascript">// 大于
! U. o) `& O; X/ i2 T& Z' P+ q# `' ~) q&gt; a &gt; b7 ^# f' k( y& E
true) R5 T0 O! G( s; k8 k
// 大于等于
! Q9 o( R( s% g&gt; a &gt;= b! ]9 ^5 R, G* C: \! @& g) c2 K7 H
true0 L0 H1 u$ y$ w* m. j5 M4 \. r
// 小于
; E1 F  j6 Q" u- z&gt; a &lt; b" ^3 S0 |# G6 _) d9 ~5 h& T
false
& t6 J2 b, f0 e8 [* \// 小于等于4 C+ C  ]. }, I$ x
&gt; a &lt;= b
4 h' ]# H$ g2 `3 rfalse- [7 N# C! n8 m! \2 x
// 弱不等于3 ]3 M2 _0 i7 ?/ D" o
&gt; a != b' Q; w1 T) W$ _
true
  A. N. m+ E2 ]6 W* s// 弱等于4 j/ v$ }5 `* E. x  b' q* L
&gt; 1 == '1'  ~) l/ W" j1 v4 ?
true
1 ^6 n# f2 s. e2 `// 强等于
: l2 p! ?. n# V* T# ^&gt; 1 === '1'% b' a& ^$ l+ v- H7 V. e$ X; p' c
false
6 o0 _+ p* Z% P2 x// 强不等于& b  Z" R- }) Y6 E7 d
&gt; 1 !== '1'# M, _3 P3 D& e6 X7 ]9 H+ A& r
true. Q( D" B7 x' p- c8 t. J4 @/ B

* F8 [6 {1 u  t- {1 m7 [/*) [+ a5 S% ]5 |8 b
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误' Y# ]# I+ H" M$ I* @" G4 V: k
*/  I7 p! o4 E: W  D/ P
</code></pre># F7 w. t. f& n4 h' V: N! Z+ r
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>! x, [# C  P8 r
<p><code>&amp;&amp; || !</code></p>4 g2 A( W/ o6 q! D: E% ]* C
<pre><code class="language-javascript">&amp;&amp; 与: i4 v2 K/ U) }. M
|| or 4 d8 l6 u+ Z6 P' [' h+ _5 X
! 非8 w( i* r! l& \3 p4 z! U, {
</code></pre>
% a& Z; `0 W0 S. D+ e<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
( t7 Z4 q( u! X<p><code>= += -= *= /=</code></p>
; V: n/ L/ i: A8 r5 s<pre><code class="language-javascript">// 赋值6 p5 X# o6 x% I* M6 b$ j6 N- e& Y
&gt; var x = 3
; u( g9 S5 D6 A0 |. u! R// 加等于5 K+ g4 V) }! i' a- w; ~
&gt; x += 2
* Z, A3 V! v7 C" b5
5 c" E! S/ G5 I% B// 减等于
0 s% K7 r; o7 q: ?&gt; x -= 1! \  S/ J3 [, m" W
4
1 R  m- T- s7 T2 c1 k7 n" y& z// 乘等于( b' b7 R! v) f9 F, ?
&gt; x *= 2
- G- |+ m- a3 Z7 [4 f% C8
# z# u. ?/ m. w8 m. @8 o. s// 除等于
0 z! L3 \7 R9 R  H+ R0 R! F&gt; x /= 25 s3 C0 b$ s& E) \: U) B) m
4
  f/ L4 H/ v0 f4 x</code></pre>; c6 m' z% A2 p
<h3 id="25-流程控制">2.5 流程控制</h3>5 J# C4 q8 R$ @2 f! w' }
<h4 id="251-if">2.5.1 if</h4>3 R/ G5 `9 o6 F3 h. b9 L- d
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}& V  _  M( x) B) M, S! O7 e5 j

0 V7 v! s* K0 H$ P# g( c&gt; var x = 3) o5 G3 x# x9 V4 N8 t/ z- n
&gt; if (x &gt; 2){console.log("OK")}$ d; t. }, n6 O% ~- h1 i0 }
OK; c6 X, A/ w6 Z' l

2 u. k3 Q( p2 z" r2 s# }' ]2, if(条件){条件成立执行代码} : M& J. j+ _4 V5 R
        else{条件不成立执行代码}
: m" I* j% B* e; D
# X  e3 u9 S: P  n1 R&gt; if (x &gt; 4){console.log("OK")}else{"NO"}$ P5 p5 H8 b5 q$ T0 p3 s% x5 r/ }
'NO'3 j! n. w9 O8 G  d5 \" h! e

5 I% ^/ q6 |! z3, if(条件1){条件1成立执行代码} 7 K7 x5 z5 N$ G: @6 F% I, i3 E
        else if(条件2){条件2成立执行代码}
8 Z, ]2 v7 l: @    else{上面条件都不成立执行代码}
, l1 @9 i9 F! v9 L; A; d
! z9 J  p/ U3 s+ E4 R2 x+ t&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
& m/ G" A0 U/ h/ v1 C; ?9 G Ha% R. n) D: B9 c4 v2 p; [
</code></pre>
4 m; C" `7 |0 \. G6 t/ H<h4 id="252-switch">2.5.2 switch</h4>9 H0 W# E( @. F, J
<pre><code class="language-javascript">var day = new Date().getDay();- k: D1 S4 c% W9 j+ M5 ?7 ^+ `
switch (day) {6 H8 L: w' H" s  j; p5 P% u6 G7 \; t
  case 0:
8 A, P1 }/ U3 y) x; E9 x  console.log("Sunday");/ E' F/ y1 ?8 \+ ]  p% N$ [
  break;8 f4 S& b1 U5 h/ R8 s. f6 i
  case 1:
# D6 ~; p7 l. H2 ~  console.log("Monday");
2 e- K4 G: e) T! q  break;* ^) O# s! j* A+ h9 n/ l; |
default:$ `7 y! Y9 D$ w0 j; l
  console.log("不在范围")) Z5 q+ x+ S$ o8 Z# H
}
6 r7 T# r* M3 i* [8 O6 S 不在范围, a' a# W7 e) x1 G
</code></pre>
3 K  b5 z$ \+ u) m1 N<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>! X' ~9 o" n! V9 i# o$ Y
<h4 id="253-for">2.5.3 for</h4>0 Z8 b; e' y0 l- m
<pre><code class="language-python">// for 循环
7 i( |4 x6 f6 O' A        for(起始值;循环条件;每次循环后执行的操作){
' M* O9 |) ~! A5 \        for循环体代码( s+ ~4 {# p/ Y7 s, D( P
    }# }* G8 N2 H+ A  ]2 p
1 b8 j5 @  |5 z1 Y
for (var i = 0; i&lt;10; i++){
8 Q4 B) s- B2 R& [    console.log(i)
! v3 M/ F& O2 M}. f3 w; |) f9 J6 K4 E" F
        0+ C2 }% [/ ?9 @2 w
        1
' h. T% k7 P: L$ M2 v; }        2
* M% O" u! U  d" ^" Z+ e        3
& j2 E! w8 D' h& A7 b" T7 c) i        4
$ e: _6 a2 d( Y        5* d6 Q1 O$ l/ j8 A
        6( Y4 ^# W# P) Q. l8 ^# m& f) n
        74 d! e: H3 |! e7 k
        8
1 p* b0 c( w7 B& P% P        9
; d0 }4 X' W5 j. l! d8 l5 v$ o, [</code></pre>& c5 _9 y" C2 ?3 m
<h4 id="254-while">2.5.4 while</h4>1 f0 Y9 i% L- n5 F9 p
<pre><code class="language-javascript">// while 循环
' `3 F8 z0 m  ^& X% Q; I        while(循环条件){$ C! @7 e+ P. n# U
        循环体代码7 T9 b) n  B) k; z( m" O
    }3 [* r/ O0 P3 d: t0 w
8 o. y/ w' ~+ z' z
&gt; var i = 06 x8 ~* ^9 @+ ]# K0 l) r+ t
&gt; while(i&lt;10){( d* [4 e. Z: M4 i* ]
    console.log(i)# p- \9 S+ ~# P+ ~9 w
    i++
) u/ t# [$ i9 G# v0 W0 B* U}
3 w# m! e& H7 ~  N 0
" v' o5 h# k* j* F: |# q 1
8 }) o6 D% d1 O  A: @" E 2. E3 v' f( v. B+ K
3+ u7 C9 v& ?- U. v7 W- i0 ~  e
4
  g. t# P5 j9 R% i+ R 5
% N8 s/ q2 F& w$ ^ 6
" c; F* n1 K  o5 m# W 72 w# p! A5 z0 l% z2 `( s4 O& f
85 w; d" I9 o: }  [) V
9
# y% y; x$ e0 \7 U2 b& [7 f8 u8 ?</code></pre>
% P0 R. x) ~" u<h4 id="255-break和continue">2.5.5 break和continue</h4>- d- G# F" D: O3 i5 W- f# {
<pre><code class="language-javascript">// break- B; Q, V$ }: r% \& L3 C* P$ {
for (var i = 0; i&lt;10; i++){
1 h) v8 @. \7 e8 o7 @0 J    if (i == 5){break}$ C7 }4 v4 z- C6 s
    console.log(i)" @5 F/ x" {% {- X' \& H* w4 I
}4 B1 P* M7 h2 M* G2 e. E
0
+ b+ A0 m0 K- l- B! t9 Q1 L/ X# j 1# z6 k/ l7 i, ?$ }  j/ p- k
2
. T1 S; }. ~( c0 z5 ~: p4 g1 c 3
5 j+ H: @! g% M# c0 L$ V# p 4
7 p7 N$ J! i, M3 e0 E( }// continue5 `7 o) b- W0 g+ @+ B
for (var i = 0; i&lt;10; i++){4 q4 v3 c/ f: W' ?1 j( r
    if (i == 5){continue}$ ?$ I+ V% {. d' Q
    console.log(i)
/ }) m6 \4 ?: ~5 B# F0 s/ \}6 J' Y5 z: S6 j; W5 o
0
1 Y# }" m: Y: r" Q 19 Y0 x, f. }7 Q) \
2
% X4 c# w8 F: J. Z! I: k 33 |2 V, |1 H& x+ H$ {
4* O* O, H) t/ m# {* W
6
8 v. o1 U. a! B0 z6 d: r& ` 74 i* t" s/ ~$ z  N" y; P
8
' t0 T: }: U9 i1 w2 B# M; w 94 I& M0 M/ N$ C  A/ f( q
; F6 c4 E: ?* ^, J- N3 u
</code></pre>
9 _5 F: ^$ m5 X  L: Y<h3 id="26-三元运算">2.6 三元运算</h3>
  s# K& X) t( G<pre><code class="language-javascript">&gt; a
2 |' J$ W% d0 W: S$ v6
6 Y1 N/ n- h; j& j&gt; b2 P" j  Y& _: V" M+ y/ j/ N3 L
3
( K9 H* ?7 N8 p5 v) @  u1 L; j! l/ x1 I: m( V
//条件成立c为a的值,不成立c为b的值; h3 D1 o( r4 p# I6 u. k3 c
&gt; var c = a &gt; b ? a : b+ U& D- {) C3 B. ^; x  G
&gt; c9 w) _5 S" G* ^  P, ~
60 Z4 o; ^( v% B

+ N% g6 r' r7 T* E3 h2 l! ~% k// 三元运算可以嵌套) ~4 _$ D6 h: K: H, P2 ^% e- P6 g
</code></pre>- d3 ^# t" Z# J5 u
<h3 id="27-函数">2.7 函数</h3>$ q) @. N# S" {- _
<pre><code class="language-javascript">1. 普通函数! s* K6 M2 ?) C8 z
&gt; function foo1(){
% d5 |5 F7 j) ~    console.log("Hi")
: Z& Y& C* |7 {+ m1 r% J}
. b( k* T6 j! G/ `" j8 ?9 c. ]% A4 {
&gt; foo1()
' q' A( V' N$ c* Q/ e" G' Y8 i6 `: r+ R        Hi
8 r1 E# P# N* {* s( f2. 带参数函数* y" H' J6 u- e4 y1 G
&gt; function foo1(name){) S" x. u; {6 f4 v& J  Y8 w
console.log("Hi",name); g- c$ b( v; I5 o
}9 l2 M4 [4 {; c( s
2 F5 y4 R/ S9 k3 }7 f9 H* K8 z6 H4 ^) s
&gt; foo1("Hans")
- Y* n% \" j8 }# b" i( hHi Hans
# l( d2 y( w) e2 t2 u0 v9 g# \2 M6 I% o8 Q8 r+ J( Y
&gt; var name = "Hello"# e8 }( ^6 f8 L* _/ p$ Y+ v
&gt; foo1(name)5 K2 {6 j/ W5 r" V: b
Hi Hello
' l" f. J- L+ A+ Q
, s2 i2 i% {! \. H( s- p3. 带返回值函数$ D- ^$ l0 Q9 G4 p6 {4 ?' |
&gt; function foo1(a,b){
1 }/ S" ?8 R+ Q, ~        return a + b   7 i; I' f. L  m3 A1 |( y; I
}
6 B% ]1 s, h- a* t* f&gt; foo1(1,2)- U) I4 x1 P0 o/ ?
34 h0 N: u. g6 U) o5 [+ i
&gt; var a = foo1(10,20)  //接受函数返回值
" _& z& Q  m: v, Z. r" {; p5 a&gt; a( }. ]+ H2 ^. A# M
308 X9 ^( M# X8 X  X5 {; X7 _  \
8 a4 T# D0 o% m2 e- ~
4. 匿名函数
& ?) ^. _  q  S: `' h&gt; var sum = function(a, b){
3 x0 F  X1 Y4 J6 \* @  return a + b;$ V1 W5 z& {+ E5 R: W" o) \
}
6 P+ o9 D4 k$ {' i&gt; sum(1,2)
. B( @* @- s7 D- g- k, u2 c36 S0 J% u; x+ M3 h: @# I  K* [2 D% K

, i8 B$ d3 s1 X+ d' B// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱/ t( f. d: C: I  C2 w! h0 b! o4 e
&gt; (function(a, b){
5 ^& M# B* `8 k$ _( H* C: w! o  return a + b
5 x( G0 m. ~- q- |7 s# I6 B})(10, 20)
/ r' S9 I0 k; ~9 d2 W30$ u5 P" z: z- q3 V- L' J
3 f& r: K# p* n4 N, F2 x
5. 闭包函数9 B# b9 ]  b: v  s# b
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
( |) `& L* }# R( vvar city = "BJ"# D% C" ?5 e1 L) N3 {1 q* j
function f(){
/ \4 A7 B- @! U2 b    var city = "SH"6 c6 z( V* u7 l& ]
    function inner(){2 u: l# k6 {: P; ^: b
        console.log(city); Y, o. u2 N, a, n
    }* u* @, D3 [2 O! h* J- P1 c
    return inner6 _" I0 k; C' t) ]6 u
}
) I+ B8 ~% u# U2 H7 W" A, t! u. M; Wvar ret = f()/ O# Z/ l3 s% x4 u6 q- f: L
ret()
# s  M9 G8 O& y执行结果:
* e* Z4 x  S+ iSH, w9 F6 I2 T' E3 G$ e8 y

' M/ }0 a3 J, b6 H4 d</code></pre>
! ^1 k8 O2 A6 n$ t! t<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>" ]' I. [- G" w+ O3 n) u
<pre><code class="language-javascript">var f = v =&gt; v;
1 {8 h6 u  b1 W; `: m3 e0 i// 等同于
' u# G) B  D" w8 Mvar f = function(v){
; H0 Y4 \  K: \' I  j+ D0 b) y  Q' Z  return v;
: H2 e' B( d- L}
. w1 ]7 ]8 ?: p( ~3 S4 |</code></pre>) ~0 k, V+ g( y/ a$ D3 N
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
$ v5 X# x7 d! f4 y4 n0 k0 A  h9 l<pre><code class="language-javascript">function foo1(a,b){; Q$ u/ L4 j( s" N3 L
    console.log(arguments.length)  //参数的个数
/ h4 ]% o; B% P    console.log(arguments[0]) // 第一个参数的值
: u' }+ A5 i, s' n4 c/ A0 j  ^        return a + b   9 g5 r6 \; f4 p. G
}
- T* \0 u$ }' F) P- wfoo1(10,20). ~2 r# |4 v( e( d. V: E2 l
结果:! J: ~5 B- J  b' N3 g1 B
2          //参数的个数 & J- E9 Y% \4 l8 [1 q. s0 e$ {
10        // 第一个参数的值
+ p- T9 ?* ]& J# N$ A$ k* `. h# G3 D30        // 返回相加的结果
7 K+ l: t+ @2 z& R7 }</code></pre>
2 K1 ^/ _& S& G' u<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>- g6 T4 O# A! c4 K: n+ S  G0 D0 A
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>2 y  G/ N3 k: [! f
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
+ }! e. o9 X. @! O$ t/ E* Z; ^) Z) s/ p<h4 id="281-date对象">2.8.1 Date对象</h4>! r" y+ U0 u+ N+ g# V4 N* H
<pre><code class="language-javascript">&gt; var data_test = new Date()
3 G8 E! N! g2 L) Z  g9 m&gt; data_test- n" B9 ]& J4 v6 p0 P0 J  V
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
( T) g# p5 r( K; I* y; S0 v&gt; data_test.toLocaleString()
; h% h7 f5 h" n' r. V' H'2022/2/11 下午9:44:43': Z3 j5 i8 o+ M- G" k4 g' F
. i6 E: T( B! o
&gt; data_test.toLocaleDateString()+ N$ i6 V/ h- W6 H8 o1 Y
'2022/2/11'7 N: s+ {7 h+ t& F$ \0 C

! `) T( k0 p& _0 t+ i&gt; var data_test2  = new Date("2022/2/11 9:44:43")
3 f2 I) Z- {- g2 `9 b% j3 W8 f8 w&gt; data_test2.toLocaleString()+ j$ ]. A8 q6 }: D& w- x9 `* B
'2022/2/11 上午9:44:43'2 W& p2 l0 N) t# z$ `

/ s+ G5 p2 O! n" [" T// 获取当前几号3 L. I& O$ }# ^0 u& s4 B
&gt; data_test.getDate()
3 q0 D4 Y+ f3 D" x117 ^4 S3 n2 ~2 t1 z: k
// 获取星期几,数字表示
0 y0 v, {4 @& v8 T; U' \&gt; data_test.getDay()  ( J6 b) c' u4 r: O& D4 I. N
5
5 g- Q9 m. M# [# ?  [, }// 获取月份(0-11)
7 N' f1 V+ B3 X4 Q% M& R&gt; data_test.getMonth()% w7 w! m0 L& v1 F8 ?, j
18 Y, C" E% X/ E4 c
// 获取完整年份9 x6 s  b) k. u. m8 ~0 z
&gt; data_test.getFullYear()
" D% K( F% Y. F' z: Z2022
- M, R2 _% j; {$ I6 o( g. f, D  `// 获取时8 l% E1 k, R6 g) g( F; ~( `# P; ]
&gt; data_test.getHours()
  \; @- c9 {" f, J* T1 w$ p21) ^% ^5 R# B% Z0 n* E9 O: R
// 获取分% V1 K* w! f) ^) i  k7 J
&gt; data_test.getMinutes()$ X- U7 ~" @; k- Z( c9 Z0 N
44
" B/ ^; C9 L/ P* {6 V// 获取秒
* A4 c1 n; H6 P( J6 u8 T9 A$ h&gt; data_test.getSeconds()1 g/ `4 r$ a! N- D" d) @$ A  e% L1 D
43
( `/ h: q+ D- ?" c9 u// 获取毫秒4 j# B5 E- a! D4 W' Y6 A+ j9 d- y
&gt; data_test.getMilliseconds()- t3 q6 k: C  w" {
290
) M2 Y$ j9 H6 K6 o, D6 Z// 获取时间戳/ b$ B0 h. w* a: z, q
&gt; data_test.getTime(); M, ^2 H0 \( m: H
1644587083290- S4 T3 K9 K  i+ b/ t1 x2 a! o% V
</code></pre>
  b$ A' n" o2 Y<h4 id="282-json对象">2.8.2 Json对象</h4>3 Q2 {* X9 p8 E4 k0 p7 `
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
- ~1 s% u2 B* E' z; mJSON.parse()  // 反序列化,把JSON字符串转换成对象
6 }1 r; n  c/ N3 }7 H& |) G& a; j0 a
! K4 e, W  U  |4 ]7 T// 序列化
& p: v) L8 {; x- `3 f&gt; var jstojson = JSON.stringify(person) , f; f6 p( b% Q, C3 |. d+ ]- j
&gt; jstojson  
+ Q* {3 p% d% A& o: X'{"Name":"Hans","Age":18}'
* b, g1 t8 n- f" Y: j  a
# n% n. P6 \1 U# A6 E// 反序列化
% H0 ]! N0 {. w2 P&gt; var x = JSON.parse(jstojson): E/ s& {+ {7 ~  a$ X0 H* H, J
&gt; x  `5 Z; l  }+ Z0 h5 H/ L9 p
{Name: 'Hans', Age: 18}
7 j7 X1 o9 l. i. ?&gt; x.Age
9 U( p9 s, E3 V+ k3 `( G" t6 |185 Z/ t0 S  U, f  z7 J' _0 {; G. w8 _
</code></pre>
( L/ D5 U8 i$ w8 Q8 \<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>  A( O$ e2 ~& V* _+ P( f
<p>正则</p>
; J6 U6 h1 C1 n" F' ?* ]<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");( K. g) V  [' |4 v" v4 p* ]9 p8 U
&gt; reg1/ [4 p; S6 u' [1 `5 A1 s4 @* h
/^[a-zA-Z][a-zA-Z0-9]{4,7}/1 ^3 j3 ^; o" \& _$ Z
&gt; reg1.test("Hans666"); `: n' \5 s7 I8 G+ M
true, U) Y0 H: a4 @% Z
; e" \" u- A! o, `
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
, a/ |5 U1 K' q# r) X! w  f! f&gt; reg2  P; c2 R/ K# k0 ]7 j- V/ n
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
7 F+ r. e  Z, \+ i1 F& y) i. ~&gt; reg2.test('Hasdfa')& X4 t/ r" {+ s0 y
true
7 \7 J& A0 \$ Q; a3 l
* U9 T% P, c0 h% f全局匹配:& P3 W8 h7 a4 H% ^9 _' y
&gt; name
: n! r& r* Z/ w" E'Hello'
7 v0 x; [1 ^0 Y0 ?1 m# ~&gt; name.match(/l/)9 R# k# H9 L" g) Q, j! Q& i$ {
['l', index: 2, input: 'Hello', groups: undefined]
: y. Q9 }$ E; O# e8 n* g( v0 d( h0 [- H9 R  ?5 ?, {
&gt; name.match(/l/g)$ @! ~% E7 T# g4 z- M; m
(2)&nbsp;['l', 'l']3 L5 y0 P* k5 T/ P- Y  J  s( b6 ^! S
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配1 e' y9 x. i2 o$ `8 D% Z6 g( U

4 M; I1 n: [& Y6 ?" N全局匹配注意事项:
; H: }9 O$ s7 O&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
9 g3 d. t- {) [+ s3 }; l- p&gt; reg2.test('Hasdfa')
# Q/ O; c: Z) f1 g0 wtrue$ e: [) i# M/ t8 _
&gt;reg2.lastIndex;3 J3 t# t& g. }+ o  y! E4 _. n
6
7 [% O/ J& M5 g: `&gt; reg2.test('Hasdfa')# Z# X, X+ e6 M0 w$ n
false
$ Z1 x( N0 I' A7 m5 ?&gt; reg2.lastIndex;
6 B( e( Q0 V* X" n8 [: M0
# q! y( v* d, e&gt; reg2.test('Hasdfa')+ f  k3 L& A* g& v$ ^' q
true1 t6 A% X8 {. K0 C; ~. m
&gt; reg2.lastIndex;5 ]/ m+ ~8 L8 q0 [1 v  _* d
6
: T7 M0 ^3 J- D$ G0 i/ V&gt; reg2.test('Hasdfa')
# i( V% N, h+ wfalse
6 T  A: ?# Y/ G6 S1 N0 l, y: _&gt; reg2.lastIndex;
' q% D4 r7 x! V! X' i; j08 G, f; B4 G4 v; N! C
// 全局匹配会有一个lastindex属性
  j! {- T) g0 c&gt; reg2.test()$ T' H+ T% s& \' }" h( |
false$ r$ P: f/ }& n( f! _( a
&gt; reg2.test()
7 X" w* P7 h5 Etrue. Y9 T7 g9 s/ Y5 D3 I
// 校验时不传参数默认传的是undefined
2 n6 f* h8 M# V/ ]" Q5 _. k5 \</code></pre>
% R& ]  R' K6 n: m<h4 id="284-自定义对象">2.8.4 自定义对象</h4>: T. q8 E& M( k1 Y( s2 ]( A; f! Q
<p>就相当于是<code>python</code>中的字典</p>$ i4 [% S  G/ \7 T! }
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}. C7 e. Y6 }3 E- s
&gt; person
  M6 @; _7 U- h5 P( p{Name: 'Hans', Age: 18}# w  p# \0 Z" N: v, }
&gt; person.Name
2 L5 i) ]# m, v$ \. L'Hans'
3 R) h! E/ ^3 p/ }5 D! q&gt; person["Name"]" K! D- t; v1 L$ }6 g1 p
'Hans'7 i% r  |' `7 t+ Z7 ]# j4 t0 `) {! `
# a% t2 A/ W2 b( g+ Z7 \& a
// 也可以使用new Object创建0 {0 A" ?/ s9 Z/ B! [
&gt; var person2 = new Object()
5 ]5 \$ i. A4 N+ e&gt; person2.name = "Hello"1 S2 a9 v3 O( l% a
'Hello'
: g. s  Z- E( u6 D&gt; person2.age = 20
% N9 z' M0 U+ [% i% I* P20
/ ^! K7 R5 Z! ]! y. ?2 D" n1 S</code></pre>
$ G* [: n+ W( c0 N<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>7 _4 G! M* L/ r8 _  `
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>( [6 y" p+ E. f* }/ }) s. a
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
7 ?# R& Y: J* Q4 ]: c6 F<h3 id="31-window-对象">3.1 window 对象</h3>
. g8 L. h' g; r<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
  R: U% D- W- k* b7 `3 {) k<pre><code class="language-python">//览器窗口的内部高度4 K3 A) b) d8 ^! ?
window.innerHeight 6 O. X/ D9 J7 }, J6 O
706
! Q1 a2 g2 G) W# ?0 L//浏览器窗口的内部宽度
' E4 w) @" p4 I; pwindow.innerWidth! H# p& H# M0 s: O3 o0 R. H
1522* x& C9 E; }0 r0 {9 ^. d7 Z
// 打开新窗口( C) s3 f/ {7 f. l; N
window.open('https://www.baidu.com')* a: b1 w# l, H3 C
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
0 s7 O/ I9 m+ C% @6 T8 J2 j// 关闭当前窗口
6 B9 C; o, m  D  m" Dwindow.close()
* }/ O! ?! \* s) P: A//  后退一页$ U9 n# e, w6 X0 `2 w0 k
window.history.back()0 G9 O3 ?$ d9 I3 W# O
// 前进一页5 `  L" Z. K8 v5 g) }
window.history.forward() % I( n, r" L4 s+ u+ f. {/ p+ j
//Web浏览器全称) {/ ~+ L& e1 P! ]7 p
window.navigator.appName% l$ f3 }7 X: [9 [7 L7 _
'Netscape'
, }6 g* L+ e+ n9 M& k) T+ u/ V- e// Web浏览器厂商和版本的详细字符串7 n+ w- s( f/ m9 n2 \  L& @
window.navigator.appVersion
& a' J$ g  A4 d( t'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( T' Z; |; f$ z! ?: K
// 客户端绝大部分信息+ Y9 c( ]4 @9 d6 Q* G. N
window.navigator.userAgent% o& t+ D9 f0 m1 N3 d- _
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'# E* ~# N( S% v0 C! R, R3 v4 B' ~
// 浏览器运行所在的操作系统/ Q# D0 ?; x8 w2 S8 ~
window.navigator.platform! T% Y: f  N- ~% `  F
'Win32'
- X+ N# U" I9 H# J$ a; r% @. D' p* q  J/ L5 T) S! Z
//  获取URL
6 t" J- L% n4 N  N- K% `; L1 B/ Mwindow.location.href
4 P$ o6 ~" H# T1 c// 跳转到指定页面
7 U# L$ y9 n$ l1 ^3 twindow.location.href='https://www.baidu.com'
5 A) `# Y/ b# `% X) C) K// 重新加载页面
/ V. h9 m% }4 S! ewindow.location.reload()
9 _. a. o* [2 J: Z' \</code></pre>  S3 g* S* m, c! W3 ?( ?! y0 J
<h3 id="32-弹出框">3.2 弹出框</h3>9 u# I  z- r! r0 q4 @
<p>三种消息框:警告框、确认框、提示框。</p>
8 q, y- E) C! `" e' `+ F<h4 id="321-警告框">3.2.1 警告框</h4>
% y0 `" \6 c$ z% ~0 X<pre><code class="language-javascript">alert("Hello")
- Q- p  k- {2 p</code></pre>
' V# j8 R/ u7 ^3 M<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>( b0 r6 d- u3 \- _1 X' e5 S
<h4 id="322-确认框">3.2.2 确认框</h4>' b4 B) `7 \  ^
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>9 m! b7 q" G0 Q, P2 U
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
# t1 ^2 H/ [: u+ K; k! M! v5 N" etrue
9 o; A9 n" O% v4 g8 |&gt; confirm("你确定吗?")  // 点取消返回false# y$ V, h1 w0 e0 }
false" Z4 z8 O# u3 m& M3 k; Q, l
</code></pre>( X7 v, y2 i) b. ^
<h4 id="323-提示框">3.2.3 提示框</h4>. A5 Q  z7 ~9 I6 k1 s
<p><code>prompt("请输入","提示")</code></p>
$ }! y7 I" r  R! Q; ~6 h' f3 ]<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>( S1 R7 U: ?# @, f
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>2 y  f  i0 w7 t9 S5 S
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>7 W( A2 {" {7 [7 X- r
<h3 id="33-计时相关">3.3 计时相关</h3>% @7 N& i2 V" N& i
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
5 t3 W. P* \, x<pre><code class="language-javascript">// 等于3秒钟弹窗
$ |  I) L" Z  Z# _9 l# e# R$ r0 RsetTimeout(function(){alert("Hello")}, 3000)
6 Y% A) _  j. W% U, s' u; g3 F; X0 t* b* n
var t = setTimeout(function(){alert("Hello")}, 3000)
: k" @. @, O5 F- o9 Y, y) y0 i$ [/ A
// 取消setTimeout设置
, y  q& G/ B% k5 j! FclearTimeout(t)8 S  N8 Y+ |6 C! n  D3 t
</code></pre>
7 Q+ G& ~/ K* e1 @9 W7 }* Q<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
; N! h* y2 U) f2 r/ Z6 y<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>" S. M6 n3 T4 y; C/ c9 \8 z
<pre><code class="language-javascript">每三秒弹出 "hello" :
! r! s: c, H( Y2 ?8 I, E6 d/ KsetInterval(function(){alert("Hello")},3000);
0 r" r( i( ^6 I) E. x0 P5 A</code></pre>) T2 j3 m* Z' ]8 G
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>: T: ^* L% w8 _. j! D4 c
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
7 @; d& ^9 T; v  {//取消:
, y9 L0 D" c8 s" o7 I( X! m! WclearInterval(t)9 |& z2 m3 C$ W* H1 f/ z& ~' y
</code></pre>  E4 T+ a( _9 t- a
/ V8 q/ e3 u! k% H' x. ]
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 09:47 , Processed in 0.069923 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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