飞雪团队

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

前端之JavaScript

[复制链接]

8114

主题

8202

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

- {. n' |8 N$ ~2 A<h1 id="前端之javascript">前端之JavaScript</h1>
. l; {8 Q. w4 d4 G% }# E<p></p><p></p>
3 p0 m( s( E  E: k" }2 y# n( A<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>5 M+ i) l" m* i. K4 J" Y
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>4 _- N8 N" H# U7 B( S: [. _. k
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>! G% D& q6 g0 v! _* F' n( w: F
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
3 M1 a( h5 B% I+ H它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>" ], [1 L1 s1 l
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
2 z. g% Z4 l1 x<h3 id="21-注释">2.1 注释</h3>
5 ^3 d4 A' g& M5 m% H" d<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
4 |% V+ C' y) i- F<pre><code class="language-javascript">// 这是单行注释% O# D4 `9 U# g% \) a
- A  M9 `' {0 `3 _8 i
/** R' O' @# B6 e1 e% k( Q
这是多行注释的第一行,: b4 |0 k, I1 E. y* R
这是第二行。4 a5 V5 N( h7 k. O- f3 j3 K/ g
*/0 U! ~" j% w7 e% h0 S0 _
</code></pre>% w1 X( ?6 k' k3 `
<h3 id="22-变量和常量">2.2 变量和常量</h3>( T  J  E! _, h; s$ a
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
: i: L, l( U0 [7 E5 \6 r<ul>
! ]! e' [5 T2 Y. ?5 P<li>变量必须以字母开头</li>
! t+ \1 m( U$ P6 V$ _  J<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>* q& X) C& O1 Y, T2 m3 F. [
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
) R7 ?1 ]) k6 B1 m/ r0 x& v</ul>8 l( ~( I; a0 [! T+ E
<p><code>var</code>定义的都为全局变量</p>3 T0 I/ A" ?6 m" J% Q
<p><code>let</code>可以声明局部变量</p>8 }- J! j- c4 C& t! _
<p><strong>声明变量:</strong></p>
! E& U0 h. R* f' \<pre><code class="language-javascript">// 定义单个变量
7 d; }$ y' r; }( M) d# {4 }&gt; var name
( G/ Q2 t5 C! x; F# j- @&gt; name = 'Hans'
# Z+ x& E, }7 X: c//定义并赋值6 }7 J! F1 F  ^
&gt; var name = 'Hans'6 H; }+ I# s8 R' d& L9 x
&gt; name
* L/ P. h$ M5 ?, |, A. I* ]( n'Hans'- K" |4 w/ J1 ^  f6 U1 @
: P" R4 ^" o- `
// 定义多个变量- a9 Y! ?4 u0 [) Q
&gt; var name = "Hans", age = 18* i1 Y3 ]: ?" {, X  P( f
&gt; name7 u- c1 w9 P( u9 L* |: h9 ]8 J
'Hans'
: b) d3 a# U, M! I: D1 L; d/ ~&gt; age- v: l- ~) V2 D, |' l8 u6 L- K
18$ X' T# n. N* o% @! u& H0 s$ O

5 l2 a+ s# r" b* c) \& X. B! |//多行使用反引号`` 类型python中的三引号7 d  `1 r$ ]/ V* l2 w
&gt; var text = `A young idler,- ]8 B. r/ T% B( x( J
an old beggar`
$ l4 l/ f6 R# U3 ]7 x: s% i+ r&gt; text
4 K2 n# g2 f' ^! M'A young idler,\nan old beggar'% k/ r& Y1 N* ~& P/ I
</code></pre>$ x7 J! t" s" F0 S
<p><strong>声明常量:</strong></p>& j+ }+ O- E0 @& ?; V) J! w
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>" ]3 M% y- L3 \0 G& C/ k" {
<pre><code class="language-javascript">&gt; const pi = 3.14
  v" |# W, h; Z8 f# y&gt; pi
- c& r2 u4 U3 Y9 M+ e) I3.14/ h) {3 e" B1 Y' I9 C5 M, p
&gt;  pi = 3.01
) a$ @2 P/ g  h2 g' s0 S: r( o9 LUncaught TypeError: Assignment to constant variable.
9 B+ y0 h( X+ k3 r  g    at &lt;anonymous&gt;:1:4" h* D9 D( G# D0 m! K. ?
- S5 c5 ~8 @5 U, |" _% T1 S  V
</code></pre>
0 u1 M' t- @. t5 n1 ^+ Q6 e, X# [; o<h3 id="23-基本数据类型">2.3 基本数据类型</h3>1 G; S; q6 {# G( h+ k! I
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p># ]" F) m) J3 L) I8 z! s) ~" ?
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
& O) h7 b7 n* }7 L% R5 O/ `<h4 id="231-number类型">2.3.1 Number类型</h4>
, h  R& H  Z3 A$ M. y5 e<pre><code class="language-javascript">&gt; var a = 5
. q% M4 s2 n- f) U( K&gt; typeof a   //查看变量的类型  + Q: \/ j0 f8 x& R
number
4 [, A5 T! H9 G) x; o. M! |7 n5 a' Z  T& g
&gt; var b = 1.3
! Y- M+ Z. g/ K% ^& e0 r: k&gt; typeof b! Z6 M. j. U+ d
number
$ D4 B1 F3 O4 W$ l1 \% f. |* l: O
- u$ N& i) y4 d9 b// 不管整型还是浮点型打开出来的结果都是number类型
0 ?+ m4 ]+ Z4 W6 O) u
; Z& v- `+ J2 H) o) A, u6 O* s/*
$ w, l9 \, Z- YNaN:Not A Number
6 H5 c+ c' Z5 hNaN属于数值类型 表示的意思是 不是一个数字/ u" F3 p  N( f8 m+ |, j
*/, R" v% c8 n/ J! l
- N7 _- K0 Q! o/ |
parseInt('2345')  // 转整型: @: L* J6 ~+ D0 B5 g3 [
2345% E. M! e2 t5 G/ K% k
parseInt('2345.5')/ O$ o$ N3 \. |" f
2345
' h6 k4 M5 h4 t3 EparseFloat('2345.5') // 转浮点型) @9 a, j# ~: Z: m! B
2345.5
0 g4 b" Y, V; G9 iparseFloat('ABC')+ j# f8 l( t0 f5 }
NaN1 m0 i" Y3 `* }4 e. c- M" w' U% r1 z
parseInt('abc')
7 `0 y3 R, K* S. t& G( w. w  ANaN
1 L8 Z2 ^$ N, w$ ~7 R& S+ }</code></pre>
% g' G  I( C  n/ ?<h4 id="232-string类型">2.3.2 String类型</h4>, M- @$ w" r8 C% s' a% }  _% ~
<pre><code class="language-javascript">&gt; var name = 'Hans'
3 j! P3 a8 h8 V4 w&gt; typeof name; w0 [# p" |% c! W4 g
'string'
: p9 x+ ]! V2 N
, v3 I, A' L' Y  _9 }//常用方法
) P; I0 o5 o6 ^// 变量值长度* j4 |6 Y/ h! K0 q2 u
&gt; name.length
6 J( w* W* S; ]/ M7 ?' r! y47 z6 r( x( A. O+ X) _) q
// trim() 移除空白
5 l1 \; W. i* ]# _/ Y# q&gt; var a = '    ABC    '
- R9 k& A( t5 e+ m- j9 J! i) g. i&gt; a
/ A- v. E& a% V* u'    ABC    '+ I5 ?/ w+ O3 \! C& T
&gt; a.trim()
1 y  j' H6 `# o0 j/ q% [' ?'ABC'" h; }" R0 n5 ^* V, }# x3 E
//移除左边的空白
5 ?$ ~' H# P7 B5 f& J&gt; a.trimLeft()
0 d- }) [# A5 Y'ABC    '
9 _# N, ]8 Z( X' Y: l//移除右边的空白
: E& F8 b1 V1 `&gt; a.trimRight()
$ o+ a0 s* G: S+ O. K/ N9 E7 Y- w'    ABC', R* N9 s6 W$ V3 l
. S. s% r5 q0 k) \) n! S% h( r
//返回第n个字符,从0开始& V  R2 V; `' F5 d  U! f
&gt; name+ V, M  \7 f3 d3 b3 k
'Hans'
9 z* K$ B  V& Z" l&gt; name.charAt(3)
0 T7 F( y! H; Q7 s& j. x1 r's') X/ d- B/ z; Y/ D" n3 F  l& p4 \
&gt; name.charAt()3 f. A# y. E) K9 {7 z, Z
'H'$ [' M& K) g! M
&gt; name.charAt(1)
' Q# z8 ]! N4 s% L'a'6 y. E6 j/ _4 r3 v  E* ~
1 L* X$ X  i  P. D* R4 h2 z
// 在javascript中推荐使用加号(+)拼接
) z, b, n! V, |&gt; name/ n" B# ~, w" s
'Hans'! K# @+ ]6 h# S6 R, [# i
&gt; a
5 p) V% F3 d6 ^- @  t1 }9 Z% _7 F% {/ b'    ABC    '
# R# Z1 B3 @2 ~9 h&gt; name + a
4 }8 j# A' A: x8 g7 I'Hans    ABC    '
4 ^% x  z! w2 x( n3 P% c& G6 l// 使用concat拼接
" A# [2 l$ b( Q9 C9 t&gt; name.concat(a)2 s% k; ?. P, p$ R9 h
'Hans    ABC    '
( O" O) R; P7 H* [4 C1 Q6 A7 x8 w7 L' }  N1 q4 y3 y
//indexOf(substring, start)子序列位置
8 n/ ?% c; H6 U# a
, j0 |+ V0 K; j) Y) R+ o+ f&gt; text
2 M$ }, Y$ J3 V( S( |2 p* R" r'A young idler,\nan old beggar'
0 [" j0 o! G, R6 t& L&gt; text.indexOf('young',0)
0 X4 ?: |4 F8 Q; ~( r. v% g3 K  X2
* d( J/ N# S4 |& W1 F8 H% b$ ?' }$ _( k
# L% z% l7 D7 W" t//.substring(from, to)        根据索引获取子序列+ k$ E5 ?& d" p- U
&gt; text.substring(0,)% H( E3 w4 g; ^
'A young idler,\nan old beggar'2 P; t4 }) g8 c* R  c
&gt; text.substring(0,10)  V' B7 a7 U% D! V, u9 v. y7 v
'A young id'* s) z- n% a4 g, g. k8 v2 d( R7 k

: p, P* Q( x" l" M// .slice(start, end)        切片, 从0开始顾头不顾尾( t: }8 {! S7 d/ Q, O
&gt; name.slice(0,3)
  d# f" \4 z0 e: v'Han'
$ f) w" s; d+ l/ \
* Z9 e6 `* \' z- q6 X0 w- ?% d3 s// 转小写4 N2 T4 J" G9 G' ~
&gt; name& I* k" g' Y- p% r8 A
'Hans'3 c; c- a! w* }% m
&gt; name.toLowerCase()2 _' ^3 d( P$ b+ X8 Q0 z
'hans'6 j% Z' \  k9 w6 ~3 `5 e9 g$ W0 J
// 转大写
1 a( O/ E/ {. R0 h+ G5 {. Y&gt; name.toUpperCase()
6 F3 A" u0 ^1 j7 i'HANS'
" V! @! c2 |0 ?: T. v) l& P% A) q, B( Y- @/ Q; s
// 分隔, B2 a1 h& D; M4 b
&gt; name& Z" O& B8 w; v& P9 i
'Hans'2 A! G$ h/ v" p4 a% E. H5 w! s
&gt; name.split('a')0 P; x/ g4 E, F
(2)&nbsp;['H', 'ns']' v" w; ^8 o( a1 e
</code></pre>
' J8 R- R2 P  j9 Z4 N<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>% v. T4 B" b, f. @) y
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>9 ?$ t. ^, M: J) @+ w; t6 W4 Y
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
& Q; M& z9 t6 F& K' L' d<p><strong>null和undefined</strong></p>
1 a5 v0 ]3 [& @# P+ l<ul>$ f- M' }, S* e" u( ^
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
* U! J, \1 i7 z<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>: q4 C8 ^9 O2 D- y1 V3 J
</ul>
3 V; `& X. I( o; \' p. s<h4 id="234-array数组">2.3.4 Array数组</h4>
- C* b& L  ^  k9 P, Q<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
3 \& N1 r5 `- U) l<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
; E; ^9 q+ h& }5 r) L$ t: r&gt; array1
; k6 m, r9 H' E3 c(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ I/ s' B3 j8 c" ^
&gt; console.log(array1[2])  //console.log打印类似python中的print6 z9 T# c9 U2 h  @
39 D5 e* B& I0 ?/ I
// length元素个数  y; |7 |( F( ]8 V
&gt; array1.length
* Z- @2 v+ S: m4 ?0 ^69 }' A+ s2 f' r. b) d) y
// 在尾部增加元素,类型append9 h' ]* F  _1 o/ d% J
&gt; array1.push('D')# H* @' Y: {; b8 F9 P
7
( A/ F8 S8 @+ y/ Q% I* x8 W0 k&gt; array1
7 ~; n  F# \, E(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']  u9 E) a2 _6 ]& m2 F
// 在头部增加元素
% {- G+ \! J" S. d4 Y/ K. d( _3 O&gt; array1.unshift(0)
7 b% N# a: D5 O! D! |; \8* u3 z# [* e, G  c
&gt; array1
; E7 B  |: v; o* n1 ?(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
4 K: G1 o5 \! F* L. o2 h! Y- R' C
: @/ R3 d) i" R: |//取最后一个元素
7 X; V% f% r* Z; ~" I&gt; array1.pop()- q+ o! L3 }& o3 V  |4 w% i* e( o# l
'D'1 O$ Q+ Y, ?! R# Y2 F
&gt; array13 b" a2 T; d. Z
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
: j- _, S) j8 K  M: @//取头部元素* B/ \2 q2 n7 M8 |
&gt; array1.shift()
* c& R/ i$ M1 m2 m  T" U0
6 {6 H4 r! T9 v&gt; array1& o( X5 z( h' Q3 ]& ~0 v( i' M
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
5 V( |* g, A- F/ {1 t
% `  p8 Y; [; E- x+ W//切片, 从0开始顾头不顾尾. h* A. |  z- i0 I0 x
&gt; array1.slice(3,6)
4 o8 `7 V: n0 R5 ~(3)&nbsp;['a', 'b', 'c']& k, ^8 ~& y# G8 i* T
// 反转
( E0 i, @3 J5 i3 y. n, e$ {&gt; array1.reverse()  {! O8 ]% J! C
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
. P2 U$ q: C0 M6 @* X1 U// 将数组元素连接成字符串1 Q5 F4 h( ~7 {/ \
&gt; array1.join() // 什么不都写默认使用逗号分隔& W" T0 a1 d" \$ z# J0 m/ k( o6 }& O' s
'c,b,a,3,2,1') D- ^" |! C( M
&gt; array1.join('')
6 B0 Y2 d, Z! J* H( t2 b8 r( a'cba321'4 J/ W  C) f8 T
&gt; array1.join('|')* `% Q: s8 R% r
'c|b|a|3|2|1'4 s; u6 A+ ^3 Q7 }2 o6 \
: q' ]$ H$ ^- y( v( m$ m
// 连接数组
' Z' {) p5 K  C&gt; var array2 = ['A','B','C']+ k( S7 L- D  r3 C) A0 ]3 e& V
&gt; array1.concat(array2)
4 G. c$ {" F' a& s(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
# O6 B. u) f6 t( z! Z( c; B( m0 ?; t- @3 k
// 排序* V, u; d  X! k+ _! Y, o# g9 L1 ~/ o
&gt; array1.sort()3 h1 Z" }, [/ w
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
8 n: }# i3 S6 E4 X. t" V
& k' ?( C* q; D9 x// 删除元素,并可以向数据组中添加新元素(可选)
/ x" `  P' Y# Z. f0 j6 r+ Z&gt; array1.splice(3,3)  // 删除元素
  U: G  k7 p- B# o- Q(3)&nbsp;['a', 'b', 'c']; P0 N! j# ~3 W: ]5 [
&gt; array1
: ^: g( T* I% X# X) ~3 S* a(3)&nbsp;[1, 2, 3], C% h- _6 B- p: P/ i- |
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素+ z* t7 \" m; f3 ~5 \
[]! N! L2 G% R4 E  l, P' F
&gt; array1
3 \0 ], {% z0 J(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']5 f6 J( b* H; L, d9 V/ g
, r' h( s/ J! y6 O) @9 n
/*# h& P6 t" C  T
splice(index,howmany,item1,.....,itemX)
# S5 h4 r2 `. t; z* yindex:必需,必须是数字。规定从何处添加/删除元素。
: f  ]3 e# s2 b$ t% Ahowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。& k, K2 @9 K& H3 w  r
item1, ..., itemX        可选。要添加到数组的新元素# r) g" W6 a0 X5 N1 n; N9 n
*/
& ^/ F6 h; D! C3 x: v5 O3 K, u
) M3 B/ i/ \/ F) V6 j* ~' a// forEach()        将数组的每个元素传递给回调函数1 _3 L% |* h5 c' Y* a" n. ]
&gt; array1.forEach(function test(n){console.log(n)})
- p6 q2 i% f& l6 ^0 Q 1, G; }! [0 C6 W% o) O- p& y" e
2" \$ d' ?- Z6 D0 I. X
3( G# M* m- Y4 ^" S' F
A
  R! y  w1 B" m% Z( O3 o4 d B) l3 Q& m% k& s8 X4 j7 r0 R2 Q9 ?: G
C
3 e4 R- \+ S" L- w8 e0 l// 返回一个数组元素调用函数处理后的值的新数组% E0 D/ N. T; R# u
&gt; array1.map(function(value){return value +1})
$ Z7 ?% v9 h1 X: V7 i(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']9 k& Q  k. {. u7 z4 n
</code></pre>
. D( Q, W& Z5 u5 o' S2 Z1 _1 M0 I<h3 id="24-运算符">2.4 运算符</h3>
6 K3 V. v$ V/ D  u# O<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
' S/ x" z( i3 _0 q<p><code>+ - * / % ++ --</code></p>
6 m7 t0 D5 _( Z4 D<pre><code class="language-javascript">&gt; var a = 66 m2 m/ a2 t( }. k$ Z& B% a
&gt; var b = 3
0 j- B/ x; t2 [: [8 Q" j// 加9 `/ D/ J" M' J7 }0 ?. C
&gt; a + b
9 d0 ]; p; a! Q7 r6 S+ x9- P# M# p, \+ f7 D8 q, x8 M. d
// 减
/ g7 d" p6 c1 Q7 }' H. A6 g& m&gt; a - b
/ a* x3 z( G, I+ h: b3
% D, Q" S1 G+ W2 T5 ?// 乘4 S- @$ W5 k  T0 G8 ^. n3 ^) f
&gt; a * b5 T0 l: \. k( ]* q: O% p8 E
18% I- L& q) t- {% h5 B/ @
// 除5 S- h( a3 W# v5 X3 n1 p
&gt; a / b8 u% P& L& A! s+ ^/ A( B7 s
20 R/ h/ T: ?" I  ^% j$ \
// 取模(取余)
; \" z  g' s8 f" C7 v  \* j&gt; a % b- I* K" t+ n& t
0
- p9 w' f0 t7 A// 自增1(先赋值再增1)
6 _$ C5 j6 r! q2 x' L. ^% D&gt; a++
/ H  O; w& r- D! O67 z2 A4 @1 f. F0 H4 _, ]
&gt; a/ Y$ k* l3 F8 c9 g" G; n) R* ]
7; l4 Y1 t, y9 R; @% C
// 自减1(先赋值再减1)
" \6 t( f2 m0 q+ E8 \$ w- ^# I&gt; a--; E* X& g' m/ ]& t9 T8 F0 E# z
7/ p: {2 R$ i2 R  Q# u& c0 k
&gt; a
8 n- ?. p+ s9 x/ u% o2 M6
: K/ L5 @8 `" }( Z4 C& G// 自增1(先增1再赋值)3 z4 j9 |5 A8 k% r
&gt; ++a( ^4 u5 D, n6 W/ q3 {3 `6 z
7
7 w/ S  O) q, c) D% L3 L# H+ n' S// 自减1(先减1再赋值)
8 f7 u- W' r7 X: t&gt; --a6 x+ w& k- N# o2 A+ v4 M- x
6
0 k* f& M/ Q: H" Z/ B4 ?/ E, Q&gt; a
3 V; X9 B+ h: h! r4 _4 Q6
. A& I( d8 e/ G' O* z7 G& k
8 R- |7 O: l+ n5 I9 O//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
7 n5 I4 y0 H1 u' k1 Q, l1 ~</code></pre>) y5 V; e6 U& u% w, c
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
! ]& h# o: g& }& b7 k" X( f: R/ b7 u<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>$ h- o, ~/ N0 W4 |0 n' J+ Y
<pre><code class="language-javascript">// 大于# h* N2 m2 n6 c8 P" n2 s
&gt; a &gt; b
9 b- [9 C- {/ g5 f- \' L3 U0 L  ]true
/ ~6 C4 g- Y7 y. d, L( ]1 R8 Y) g// 大于等于0 k3 s' [; [' d
&gt; a &gt;= b( }0 ]1 ~1 Z% j( V$ l/ @' h0 a
true
) Y- f7 h7 L; {6 a2 D// 小于: b9 h7 _8 ~; J0 J
&gt; a &lt; b
6 H. Z" s- X- t3 J3 Q! h8 f; b8 |5 ofalse# f" I7 A9 {) |0 U; d9 c/ v& `
// 小于等于
" \; g; o" L! ?2 g3 R&gt; a &lt;= b
' X" G/ w( B: K" Qfalse
2 @7 B3 p% c% P* U" j, W// 弱不等于0 B" }6 z5 ?. g: f8 Z
&gt; a != b
/ y, x) x9 `% R2 mtrue- @& T$ }- d0 f% C' \
// 弱等于. v5 Z: ^5 ]; f! m4 U4 B
&gt; 1 == '1') g1 x' c) \0 E7 S0 b  L
true& D' V( v) N* B+ `
// 强等于
2 Z6 c( e8 S. }2 B5 T( Y&gt; 1 === '1'( |6 R, n/ r$ H2 r$ I2 \
false
3 l$ O5 c0 O1 U3 Z  ]8 [// 强不等于, o# X+ \: e7 U5 H
&gt; 1 !== '1'
( x* i9 G) O5 Y  N: H; c4 Y: }true. g: C! n2 h! \% b

! m: v8 c5 _( c/*7 u, E) q/ o; e. S
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
4 ~3 v8 _$ X1 C1 d4 f*/% p) \8 N2 F3 A! n
</code></pre>1 d1 V$ f, z  k' k. e: e' u3 r
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>0 r% [; E$ b; w
<p><code>&amp;&amp; || !</code></p>
0 V. F4 i2 u+ Z2 ?" f8 V2 b<pre><code class="language-javascript">&amp;&amp; 与- E9 ?3 T3 Q6 R( E
|| or
- s! l+ X+ Z3 O( Y$ q$ C! N* o$ l! 非
6 \' F, u- }$ Y) M2 O$ l' n3 c: f</code></pre>
8 }& O2 A5 }0 M- r- @9 A+ r<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>4 @5 p5 u7 J, f4 W* ^' _, E% o
<p><code>= += -= *= /=</code></p>
9 V' q" ^) r- p- ~/ H: @5 z<pre><code class="language-javascript">// 赋值4 v4 i5 o/ K& O8 A2 b2 M$ g
&gt; var x = 3/ {4 U; ~. t+ ]7 T  k" p- \
// 加等于
3 P7 p* m0 ]6 M: L  K&gt; x += 2- K% D, K$ w$ f7 a
5: n! W5 Q; N' q- O$ x, }
// 减等于
* {0 w& N) r3 g! Z* m&gt; x -= 1( j* K5 E+ Y: W& R: m
41 K+ ?" j0 Y$ X' `
// 乘等于2 z% \- H) G6 ~7 {7 u
&gt; x *= 2
& `1 Z$ I7 P7 `. D4 m( n, i. h" R- @8) a' i% y: ?; s: G3 I& U
// 除等于
; c' z9 r& v8 ^) H&gt; x /= 2
/ v+ h! d- U+ P. x9 d6 y4
2 l# @9 o1 l& {/ C2 Q& J</code></pre>
5 t/ i7 U, Y1 c9 @<h3 id="25-流程控制">2.5 流程控制</h3>
% n2 Q, K. m- t<h4 id="251-if">2.5.1 if</h4>
3 M0 \5 S6 l6 m# k4 G: @/ t# I' d4 a2 ~<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
8 o7 b0 y6 n. l
/ O0 y/ G  ?. l1 m1 ]8 k) ?&gt; var x = 3+ a4 @: z; @3 e: y7 l6 B
&gt; if (x &gt; 2){console.log("OK")}$ p; }8 U9 x% S9 ~4 f! R" t( G
OK7 q# z$ V, N6 Y) K0 C
2 E" F% D: Y0 d1 G; a' y
2, if(条件){条件成立执行代码}
# }- ]+ }& D+ Z; f( A8 Q: u' Q        else{条件不成立执行代码}  f4 V2 }. c. a6 Y' P9 W5 s
6 U- m. z1 L) a* u" \, N
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}- |/ y# ?- C7 q$ {& @* q/ [
'NO'
2 w$ e: E4 {. x7 _" u" `0 k/ F) v, g) ?! H# |1 b( I% g
3, if(条件1){条件1成立执行代码}
2 G1 w1 J3 C8 |3 H, v3 i        else if(条件2){条件2成立执行代码}6 n5 T. v  a, ^' S: l: O) @
    else{上面条件都不成立执行代码}
8 D/ B8 N- U' Y: U9 I: y
- x  v7 F% `9 C6 D) S( q) D! z&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}, b9 X* X* x! U3 o# e
Ha1 l# s) D) o6 U3 W4 M5 c
</code></pre>" ?# H1 Z: z7 V& P. d
<h4 id="252-switch">2.5.2 switch</h4>- J. D6 i. M* R' }8 \5 l: I
<pre><code class="language-javascript">var day = new Date().getDay();
# D- i( M  P) L2 @, O3 J+ Qswitch (day) {- k  P8 T4 I: ]: F" z
  case 0:% S. ~0 v3 G8 i4 j! {
  console.log("Sunday");
7 y) }) W0 K! A3 T5 D0 t  break;. h- }& ~: t* f# i4 C: A. d
  case 1:+ e4 {0 s2 v. \8 c: s3 n
  console.log("Monday");
5 |# a, z! w8 q* M0 \' U& S' Q: m  break;/ p9 v) u; @5 ^6 T/ S
default:  |& S9 C$ g& w& I6 p5 L9 P
  console.log("不在范围")  d( k) y+ t- ~0 A3 a
}. O' ~' d0 r  O% _7 Z0 ?
不在范围6 r1 z; k- f) |8 v. Q0 k% }
</code></pre>
$ \2 \+ a( k  B: m3 t<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
  b8 k+ J4 L1 f, S& B<h4 id="253-for">2.5.3 for</h4>
. V! C7 e% ?3 V! U; c, v' d<pre><code class="language-python">// for 循环
: y; L8 C% ?+ C1 L5 W3 r; ~" @        for(起始值;循环条件;每次循环后执行的操作){
! l6 z7 J1 h& t/ k* K8 t! h        for循环体代码& _3 s2 N3 Z) }% ~% ?, P
    }
8 K2 G( @6 f/ N- r9 x4 X: F! d' ^7 c7 ?) q  b) M" u
for (var i = 0; i&lt;10; i++){
+ l, u& l: X' @    console.log(i)% o# B# v8 o. J2 t' q$ t
}
' |5 {  `+ q% a; Q0 s  A( M        0
/ u# D" _6 g. @6 Y        1
7 y/ Q0 m  g$ u/ K) A* D" m+ W        26 o9 ^8 s: w* Y
        3
; K9 T. y7 y7 }9 ~+ B        4+ |1 w3 B* Z' s5 B. S6 E: D! g
        5
! s" [+ r. a# [* E- A6 E7 L/ J        66 P+ M2 v5 I7 ]2 c; @! v3 M! @
        7# _5 E* J* C' W  H
        8
9 {- M$ G) a, C, `        9
$ X3 ]5 n: [& S. K( }- E( I</code></pre>4 S/ Q6 }$ F6 q  L
<h4 id="254-while">2.5.4 while</h4>, v# c  b, W& y
<pre><code class="language-javascript">// while 循环
5 v; m' Y: a5 T; a' v3 h6 F        while(循环条件){: @/ U# D/ _. R( o$ z' w. Z
        循环体代码
6 F1 M. R% g! Y- N    }
! b6 ^" E0 F. G! [/ Q3 v
( F8 N7 [. {/ q# b$ n9 n% R&gt; var i = 0+ U% y8 \+ Q+ k' |9 \/ w# H
&gt; while(i&lt;10){0 M* u% Z  q9 g8 q. H8 C1 `9 V0 l
    console.log(i)
* I# @, _' P# j8 p: J% V    i++  f) O% K/ p& X# u( q) i- I
}
8 x6 @% d* Y" t& Z 0
$ G1 Q: S/ {( D) T8 M 1
6 h% H$ V* z# h) E 2, f' u2 Q  z# A2 b4 \6 @
3
% }7 @! D1 ^$ T. A9 _7 |1 O 4/ K0 w* n  }- z2 N3 k# a
5
2 ~/ |- ~' q/ p, E 6
! v5 |" \/ G1 M) D$ a. |9 V: a 76 k. p7 d: c* D- S- O$ l
8
7 g8 w) {9 R0 ]. v; D5 J5 `2 ? 9! B& c- g( Q3 v5 ?0 i: c
</code></pre>% j2 n8 J- G* \1 ?- }: [& Z# g
<h4 id="255-break和continue">2.5.5 break和continue</h4>8 n8 l; d' A1 A' c
<pre><code class="language-javascript">// break& N; n# E3 e/ c8 ]
for (var i = 0; i&lt;10; i++){
4 {! o8 ]( e( r, S% J$ ~- b" [    if (i == 5){break}/ B  m' w1 X7 H  c( m
    console.log(i)& {5 i- L! H: ^0 o
}
3 u  A% M  m1 Q2 D 0( ^0 s1 v* A8 \2 G
1
& L4 ]. d/ b+ [( w/ Q$ i) Z8 o 2' C- m) Z- V  o1 ~$ L. T
3
/ U" A, T% e5 N5 a 43 K: i- J3 s# |
// continue' u# i" J& N  q
for (var i = 0; i&lt;10; i++){- H) S! [5 o& T2 S; C
    if (i == 5){continue}% m9 J# Y8 B! j( i8 |' r4 v2 h* w
    console.log(i)3 @/ }4 ~( k5 B
}
( {  \' @% c& p8 f0 u& h 0$ y# S2 X& z0 c1 B* ]5 C
1" W& @) g& }: ]# ^( K
21 H8 y- @' m4 F
3
' P- D, ?2 T& @& k 4& N- n- ?) s) s
6
* A/ w) u7 P( r) w% I* e" Q% k6 C 7
9 H  a8 a9 ~$ s4 Z& N0 m 8
/ H' O3 `# K7 R; ^0 Y1 c 9
7 N( y2 }' B4 }
& f0 W+ z6 [% ~</code></pre>
. @0 \6 a- U; }1 C" K& M<h3 id="26-三元运算">2.6 三元运算</h3>
6 @7 ^2 F4 u* z# F+ Q4 J<pre><code class="language-javascript">&gt; a6 `# ]! T7 d: P! ?# G; e; g
6
8 M$ X9 `! `% r% _& ]&gt; b
( X1 N' ~! A6 m, ]3
1 T6 S) I4 D4 ~# u' g
: {* `% O0 Y  k9 `% f//条件成立c为a的值,不成立c为b的值" T& Y- O9 I6 A* D7 L5 w
&gt; var c = a &gt; b ? a : b
( t1 y' V- E: m; U&gt; c6 Q7 Y4 p' k4 t+ |. C; P8 D
6
) _( H  W: h3 [6 e
5 N& g7 C9 ^, N1 P// 三元运算可以嵌套
6 ]: ?% d. z4 `' g' N* O</code></pre>1 i1 l/ a# o3 a' s  a3 b, O
<h3 id="27-函数">2.7 函数</h3>
" b! o1 b0 [6 }3 \" I<pre><code class="language-javascript">1. 普通函数
: o. f& [% l) W3 o&gt; function foo1(){) r$ n" ]7 |6 |: o$ e+ C9 f: o5 b
    console.log("Hi")
. ~" r# b1 }1 M* t+ x9 x}  H8 W; ?4 Z  C/ X! e8 H

5 R0 e, n9 ^) U: c&gt; foo1()
6 }6 N! b' U$ }. E7 C, T        Hi$ I: ?4 {7 Q; F0 ]7 _
2. 带参数函数5 j9 Y/ N% v0 c1 L, K7 y
&gt; function foo1(name){+ E0 u" }) {* H4 f
console.log("Hi",name): c' J1 I: x% i) L# i# q
}- J3 l7 \. X; [1 j, |; L
. P& }. d8 C$ W' T  `$ U
&gt; foo1("Hans")1 q: o# e: a7 _* M( @
Hi Hans
6 k1 ]& t$ t7 O6 Z- E3 C! i! H- s9 E1 e. `! i; k
&gt; var name = "Hello"# m9 ]. o' {( e% ]% p! q4 f3 @
&gt; foo1(name)( E: @3 Z4 t& d4 N6 K
Hi Hello2 j" E% U0 [) }4 Z/ W) i) v

0 K6 \+ c0 d  o/ U3. 带返回值函数
7 I  v% D+ U1 ^: @( U) t& v&gt; function foo1(a,b){1 S2 U2 J( n" @- E% T5 |
        return a + b   
* F7 Y* l7 x7 x: j}% b3 s, K% `* m& C! O& Q
&gt; foo1(1,2)
' x6 W& [3 V; }; }39 M1 m( i& A1 i/ E6 b
&gt; var a = foo1(10,20)  //接受函数返回值4 b$ u8 B. A  ^8 u# M
&gt; a% S! O) s3 N" _6 p8 t" Z0 g8 R
30
" Y9 ~0 a1 J* E6 O; t4 I8 T* M, o# K8 {6 Y+ s
4. 匿名函数. y  ~  @9 C9 }8 E
&gt; var sum = function(a, b){
/ v6 x1 y! W2 O9 `7 l  I  return a + b;
6 [& m8 s2 w$ n" r: ?, O" Y}
, b9 H6 O. B6 W7 }  r&gt; sum(1,2)
0 }6 t& e2 l8 E# S2 H3/ N5 z0 e, K% l6 q1 y3 _% b4 w! L

4 z7 V. F6 n, l: t8 [: m; ^' U// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱8 R# S& U) `& Z$ ]& F+ `5 y! l! g
&gt; (function(a, b){. y1 V" ?, g# N* W$ R! r- s; k
  return a + b- U+ U8 R9 O4 ?9 c$ ^
})(10, 20)
) Y5 g3 e  f9 k+ T0 K7 p+ q  p/ N30
/ h; m; w2 A, e3 s. n3 e
1 t+ _. s8 }; a- ~5. 闭包函数4 I( ?: i3 u- |- ~# `! q* K
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
5 V# I% q' D' H% T5 Z/ g5 Nvar city = "BJ"& V, l% L4 @( ^6 S, o3 J, m
function f(){
( u5 Y4 U0 ]$ Y5 A& r' l" I7 R    var city = "SH"
6 X8 N/ D  Y% d* H    function inner(){
; u7 O( o8 Z+ o! k: u        console.log(city)
( ]0 R# B3 r. R/ g+ o9 |2 z, e    }- p! G8 B9 F6 p' Q1 x
    return inner4 y6 }' c/ n2 ^, h/ _1 ^1 n  C
}
! e) w$ ^" b( w* {var ret = f()
" J, A. t7 n3 {5 l% o" W+ eret()
3 a8 V4 e) Y. U" p) K# x5 ~执行结果:' b" b. x) o/ V# D
SH
5 B9 Z1 b' w& [& ]! _7 J: U+ c! P3 D. F- M$ N. b* R
</code></pre>' S2 H3 n! z( u  d7 K+ Q3 e7 m
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
* W. ~1 N" v4 E2 O, y<pre><code class="language-javascript">var f = v =&gt; v;
" M3 V% V  y, ]) d2 ?// 等同于) g. f1 O' s, p% N/ c: d' F1 Y, O
var f = function(v){: ]( C1 C( o! v  u6 T
  return v;  ]" T1 \6 A& J. l. J
}
+ c' L6 I5 J. k5 H$ E; {  y9 V</code></pre>
" S1 t/ t- {3 a8 \7 M<p><code>arguments</code>参数 可以获取传入的所有数据</p>
; Y) `& u. e  S& n3 }<pre><code class="language-javascript">function foo1(a,b){3 Z. z4 i7 A1 r
    console.log(arguments.length)  //参数的个数
+ m8 v  Q7 u) S+ W0 I    console.log(arguments[0]) // 第一个参数的值
; r' u0 l( ?8 M9 O' H* V        return a + b   3 h/ o$ q5 _8 }* J7 ^' R& j- M5 b
}
  K) K3 Z# |( \foo1(10,20)8 k7 [: E. W: K
结果:
- S& `! G7 T% F0 G 2          //参数的个数 0 X) i# z: ^6 K
10        // 第一个参数的值! R- L3 v3 R9 N' ^4 H, E2 r' d
30        // 返回相加的结果
7 J& ~& ]6 ?' j; K5 ]4 R</code></pre>9 Y8 V. y& |; x# y: S6 w
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>  i! L3 v4 X+ N/ s& V
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>( @" a9 k. F0 ^% e
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
+ x. x+ C; S8 ^1 e& w5 `<h4 id="281-date对象">2.8.1 Date对象</h4>
1 y7 o. U  P4 ]! d8 X<pre><code class="language-javascript">&gt; var data_test = new Date()+ d! ]# w& J2 z2 X2 y
&gt; data_test) d: O/ D* Z2 [; d# J- O
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)6 y3 p2 T( c6 i. f$ `( u6 ~
&gt; data_test.toLocaleString()9 N2 l  I, y  A, {8 n' ]! I
'2022/2/11 下午9:44:43'
+ m; |9 O# s. }+ ?3 ]: G  [! _, p2 L' K/ a% ]
&gt; data_test.toLocaleDateString()
, D" ]' R) _, T3 H9 C'2022/2/11'; E0 }+ l& S# P# i4 P! [2 C
  B5 ^( e! ]: B4 m' M) Q3 A( G
&gt; var data_test2  = new Date("2022/2/11 9:44:43")& w  G: X/ F% T: L" K* v; O
&gt; data_test2.toLocaleString()
3 p6 k1 ~! ^+ ?* @, a3 v) ~9 I'2022/2/11 上午9:44:43', Z8 \( r8 k! Q, I

' G: b5 ]  i( n' e1 Z6 C* _( i// 获取当前几号1 F" ?! T6 ~- z
&gt; data_test.getDate()  e' T+ _0 w& R8 n
11! y, L9 t5 f9 P& E
// 获取星期几,数字表示
; L4 N) z7 a/ }# _- B8 C4 Z& j&gt; data_test.getDay()  2 A  l" D( r' y  O9 v  s
54 ^0 ^2 _( b4 \8 d
// 获取月份(0-11)9 f8 W6 q4 o5 J. U, R# |. P, ?# V; c0 E
&gt; data_test.getMonth()
* Q9 `3 w# S5 `10 W4 f+ |4 k0 r" v. i
// 获取完整年份0 V3 Y! g% p( ]
&gt; data_test.getFullYear()
9 L1 ^3 @$ U6 e7 B3 B1 |7 A2022
3 J, X, s/ l& e2 \9 X// 获取时/ O* {& @1 b7 m/ X
&gt; data_test.getHours()
& ]1 V4 w  [9 d- C  N" [21
( S3 ]9 l. h1 c// 获取分
* F1 w* I5 Z1 E&gt; data_test.getMinutes()
, b, ^0 @8 k: n3 R3 G% B( s447 r" z1 L1 o/ d; {4 D
// 获取秒4 `) ~6 h$ }" s1 k6 M
&gt; data_test.getSeconds()3 k: ~2 m" o3 R, K- [  r% p
43
2 }! [% X! {3 l  T) O// 获取毫秒
8 i3 D/ o8 U# v/ R+ v( j4 R! ~3 U% R&gt; data_test.getMilliseconds()
+ T. X) l  _2 n2 X- g; `/ S290% U9 d/ u  o: C* _- ?
// 获取时间戳
% g7 A5 _- h$ \) u7 j* r: N. ]  a&gt; data_test.getTime()& z6 I1 c& h3 X1 V
1644587083290
2 @( o; b4 H8 }/ o; W</code></pre>0 M! b5 {, Y$ x  }" x
<h4 id="282-json对象">2.8.2 Json对象</h4>) w& ]2 `. G" `0 u# S3 Z1 l) D4 X" u
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
6 D' z; l3 M3 r. K, uJSON.parse()  // 反序列化,把JSON字符串转换成对象
6 C; l, q+ s4 |1 ]
  z) N6 B% N5 y// 序列化
) k+ n3 O9 H6 i; W. a( i: Z&gt; var jstojson = JSON.stringify(person) 7 J* b0 g) G3 A# a
&gt; jstojson  9 [$ L/ m6 f/ |" i/ q
'{"Name":"Hans","Age":18}'
/ ~5 {5 q5 j# `# E' i/ d6 J% [3 \* A3 g" Y: x9 e
// 反序列化  i" ]8 p! ^$ V, j# }
&gt; var x = JSON.parse(jstojson)
( Q" _# T. A, t&gt; x
# H1 x4 ]2 s2 o, ?{Name: 'Hans', Age: 18}
3 V+ r- n# O3 b3 u&gt; x.Age) C6 T2 Z2 B2 k$ [3 m( i* x1 n
186 `& l) C$ l" b; Y
</code></pre>
' U- j$ \; ^8 P( z) a% I- H# y<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
5 V  m( s4 j' A9 f<p>正则</p>. t& r* g( L1 A& n. P1 b7 H+ Y3 A
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");$ b7 _2 `& F+ O3 W) O, a0 G
&gt; reg1* S; h$ J: G4 t) L9 ^
/^[a-zA-Z][a-zA-Z0-9]{4,7}/( W- K9 X. ?6 W$ B% f; C0 _* E
&gt; reg1.test("Hans666")1 ]8 g8 F7 f) U5 h  `7 f: O
true) G4 F4 E' l4 z# e# l- {; f
* V0 i8 e- ^2 f  m7 H9 v
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
) l# U1 q5 H6 q1 T( F  E5 Z&gt; reg2
- I/ I' d9 m! |& i  H. |/^[a-zA-Z][a-zA-Z0-9]{4,7}/
+ U# e8 h( J  x&gt; reg2.test('Hasdfa')
' W, o) ^9 d, u& v2 utrue
$ k6 \9 K! K$ ]6 L
3 p5 K( V2 W' E" H全局匹配:5 ]% X1 f  q6 z! D
&gt; name; s  ~6 b  q4 A
'Hello'3 Y5 q, T- f9 u8 ~) S
&gt; name.match(/l/)& W( T& m" }& e4 B9 }
['l', index: 2, input: 'Hello', groups: undefined]
+ @0 M  h: |! O! N  H$ z
1 L5 A$ v% q0 ~4 H2 q- i7 P! r&gt; name.match(/l/g)
6 A* j6 e' ~% K8 r1 g$ L(2)&nbsp;['l', 'l']
4 m* L/ _0 g. ?" y0 j2 Y/ e3 j// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
" W9 a8 F1 f7 X  K
* P) S$ h. j3 {( k, n5 d' u全局匹配注意事项:
- v' m6 @2 G6 D6 K1 u; w&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
# u; S7 e% x, [! X  X  d; x&gt; reg2.test('Hasdfa')
& Q1 g( M% O# X  p  dtrue4 a, @8 J" b$ b* H
&gt;reg2.lastIndex;
1 a- p( ?3 V$ b' t6
! }  l) g+ s/ x, V+ j. e/ t) D6 P&gt; reg2.test('Hasdfa')
2 U5 u5 j+ l- j+ t. y" zfalse+ g) `5 _% L% J
&gt; reg2.lastIndex;
& V+ T; j7 K) `3 p0% f$ D  f( h# R2 A; Z
&gt; reg2.test('Hasdfa')
6 [+ S: Q& F8 k' l0 f' Gtrue
! a" b3 L8 i' M; [- C3 N6 e&gt; reg2.lastIndex;" w3 Q7 G1 m4 f' q# r) c
6
. {* F5 @: N$ V" i2 o% ^&gt; reg2.test('Hasdfa')3 P( n+ h6 o: _7 N9 `
false
1 U$ W7 ^0 j( K4 S  g$ z3 W* [&gt; reg2.lastIndex;
) I/ k  e" M8 P; T# I0 O0- u0 Q& D0 ~) G$ C4 Y9 @
// 全局匹配会有一个lastindex属性/ l! ]$ q6 S9 z8 E9 d
&gt; reg2.test(): U9 t; @" Z* J+ b$ C
false
5 j4 a2 t( {" \1 E' |3 z+ o&gt; reg2.test()
0 s/ W5 s% R8 U2 jtrue
! S+ j0 {! Z( H+ C7 ]// 校验时不传参数默认传的是undefined
* G8 V4 G/ B4 E8 C1 d+ }- O</code></pre>
9 D1 ^% D2 J! W- X5 n<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
8 f: u6 X5 O( @3 h2 L- C3 _<p>就相当于是<code>python</code>中的字典</p>& ~/ G( x4 m8 [" h' ?+ a$ R& `
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
7 q' j# X- n9 V% B2 f# t8 {7 F&gt; person$ J% |% f& r$ t
{Name: 'Hans', Age: 18}2 P& i/ q5 K$ X
&gt; person.Name* \1 Q" k5 D2 `1 |4 I' t& a
'Hans'
; i$ u: q( ^, t3 O- a& t&gt; person["Name"]. Q' H* x! ?2 u  c: [. L$ {% K! \
'Hans'! J( I1 i2 M! X& E

8 f4 A3 s( c, b- |( Y// 也可以使用new Object创建
, a3 T7 X* W5 m) D% x* C8 e% Z&gt; var person2 = new Object()
2 t. v2 e" U* \3 @2 @&gt; person2.name = "Hello"
7 F0 z; {+ A) ]! c! j# j/ ['Hello'
6 ]3 G. K. i. m: z&gt; person2.age = 20$ O! s$ k/ z( {" [" h
205 B3 c! Q# V$ @  ], m9 ~
</code></pre>8 j8 h# i* x2 m3 t7 C
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
/ G' h+ T  x( J1 o6 b5 E( G; A<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>5 l/ _9 o! |& @+ |; y5 A
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
0 C8 J4 @+ }/ z1 g<h3 id="31-window-对象">3.1 window 对象</h3>
* j* D; u! X# K9 r<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>3 B1 \0 x$ {, r! w
<pre><code class="language-python">//览器窗口的内部高度; F2 Z) Q3 @8 S% M6 h* I' u8 q9 e# e
window.innerHeight , x, {4 P5 o5 Q8 T* o
706! B& k0 ~/ b# R6 D' e# ~  U
//浏览器窗口的内部宽度" M  b1 U: b0 E5 N0 r
window.innerWidth
- M! f, R8 |, q- i6 s3 T2 C15223 \  b% f. _* m
// 打开新窗口
! m/ l7 C2 Q: [9 ^  iwindow.open('https://www.baidu.com')& R! [: p/ s/ g! _- \
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}2 G; T% U* d9 {8 ?$ s* c
// 关闭当前窗口, m# u+ ?' Z2 h% U/ v" U$ ^8 [
window.close() 7 t" p2 u2 K; [+ d; W
//  后退一页
0 C( r- ~5 Z/ n5 q! F" Pwindow.history.back()4 q) I6 C4 P3 J  T; E
// 前进一页( x) J0 A6 t- N
window.history.forward() / b/ ]. c" l; ^" T! Z& b
//Web浏览器全称
3 C5 j# D+ ^. x" hwindow.navigator.appName3 ]- K3 l7 s" f1 D% Q# C$ z
'Netscape'
& @& R5 _9 w. r9 D; R3 m2 L// Web浏览器厂商和版本的详细字符串
3 B4 n: {0 h" T3 zwindow.navigator.appVersion
$ G% K  k$ c2 a. X) j: S'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'7 R9 W/ [5 G. X$ O4 l8 J
// 客户端绝大部分信息
0 Z7 x- @6 [! a. |/ E# r# l+ Bwindow.navigator.userAgent1 A' u- o* n8 t" n) G$ L
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
1 o. Q+ H/ F( A4 j) {' F8 G9 X8 m// 浏览器运行所在的操作系统2 W& u. e- c. S
window.navigator.platform1 F! ^( x  v8 a1 z  H
'Win32'
! x* ^$ }5 f* L! O1 m
1 P% j& l2 M" c  W, G//  获取URL
! h& |8 y5 j. kwindow.location.href
1 R" ~) k+ r, f4 q* W& }// 跳转到指定页面) B% Q/ c8 E& U0 j7 p5 ~' }. O
window.location.href='https://www.baidu.com'; u- e5 a3 n! C3 X9 ?* G2 P
// 重新加载页面
) u! b/ g5 q. u% Owindow.location.reload() # D8 B) u2 c; t3 h' f1 ?
</code></pre>
# X* T- G1 c  p7 w/ U4 L, }1 Y<h3 id="32-弹出框">3.2 弹出框</h3>9 i# \1 M3 G( p. S
<p>三种消息框:警告框、确认框、提示框。</p>+ ]+ R6 R. ^" V  k
<h4 id="321-警告框">3.2.1 警告框</h4>7 t1 E& b2 Z& B
<pre><code class="language-javascript">alert("Hello")
9 X3 s$ R# L! Q5 T/ A0 L" H/ @</code></pre>7 ]- d3 `& X( [  u; B7 k* y
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
0 P( K$ F3 Y. j$ ]<h4 id="322-确认框">3.2.2 确认框</h4>
% X$ W# ~3 G3 t2 A) g" a<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>; T/ b7 A+ e, ~1 Q
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true( _/ T" u7 {6 m& T2 X9 i
true
: }& h- N0 M5 v2 D: v0 a& S&gt; confirm("你确定吗?")  // 点取消返回false
- q) N8 E/ a$ r9 ~$ w  L1 t- Ufalse
2 I& k" @8 b' t! o. ~</code></pre>" z$ S8 h' T% |) W
<h4 id="323-提示框">3.2.3 提示框</h4>
/ \5 b4 e$ |. V# l1 t2 v7 l4 E<p><code>prompt("请输入","提示")</code></p>
; `( j: j" i5 J1 w( j% }2 e<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>1 ?# J) L2 _& f1 ~
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
* k! P7 N4 O! F' X# v8 i<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
6 \  }% P% [0 `! K; ], I<h3 id="33-计时相关">3.3 计时相关</h3>
+ {8 r9 X  P: Y<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
- q% M# \& p  ~<pre><code class="language-javascript">// 等于3秒钟弹窗( A" H# K, }& P; w, n' w6 Z
setTimeout(function(){alert("Hello")}, 3000)
+ i/ @& t) l8 f! d' }$ d# B' k) ~: S! x
var t = setTimeout(function(){alert("Hello")}, 3000)
8 m' m& J7 P# D. ^' S' x: p0 h. X0 n5 i2 a- s* Q
// 取消setTimeout设置
$ }6 F9 K7 U7 \* e  zclearTimeout(t)
# G# _% ]' s+ A  o) K, T, X</code></pre>( Y3 O+ k. {- V  ]. l8 G8 L
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
+ T) ?0 E5 J  B, M& {) i! m  ^( r) \<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>% k2 K' C9 r" W* `" A" W
<pre><code class="language-javascript">每三秒弹出 "hello" :
. _: c: y' h: {/ d2 Z4 nsetInterval(function(){alert("Hello")},3000);- p0 V# d7 w9 U: @2 H
</code></pre>
' _* r& b; Q- c! a& k, C# H9 H- Z<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
" e) F# H$ k" H9 ~<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
, \- b# [9 x" {9 J& G4 \//取消:' g& z) v& x; {$ o% f& ?( ?
clearInterval(t)- d7 B% d- X; l1 k$ ~2 @* k
</code></pre>
* t% d/ k9 X% r) ~, K
9 i  |, q3 D8 B% X" P3 @1 |
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-19 14:47 , Processed in 0.074073 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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