飞雪团队

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

前端之JavaScript

[复制链接]

8590

主题

8678

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

5 x, p  m  I& [+ v0 _* u( `<h1 id="前端之javascript">前端之JavaScript</h1>+ R. ]6 i; t# R
<p></p><p></p>2 d3 R; h) i5 V8 q6 }9 d- r  M
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>" S  y0 \  A( I% Z: \
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
8 ?; ]3 I( k9 B0 l7 S% f  f# u它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>5 O  N' X5 \# H. v, s) T6 t7 M' W  {
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>1 D0 z/ V. ^0 s7 ]& K3 f& E1 ]) z
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>8 z, ^" F  c3 W$ B4 G$ G. C" d1 u% h
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>- ^" f$ O& t! F! i0 _* z. H
<h3 id="21-注释">2.1 注释</h3>
8 V: n, J6 i2 w7 E# \<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
% m' o& l$ a; Z<pre><code class="language-javascript">// 这是单行注释
" u" p% A& s8 t& Z$ s. i- ?# x. D4 q1 d3 U. O8 i
/*
. p$ _  Y( k9 D这是多行注释的第一行,
2 K' q) {9 K2 L- S/ Q5 z/ k这是第二行。
5 s" l* n; Y, R$ U. r9 O*/
2 `7 U. R- l9 O4 Y; q6 V$ @</code></pre>9 f# M' U' p, {! b
<h3 id="22-变量和常量">2.2 变量和常量</h3>
8 y% M9 X8 e3 T; u  V- u( E9 v, \. x<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>* z+ L  u6 T) ]" I8 u/ R
<ul>' O8 X9 u0 W7 p
<li>变量必须以字母开头</li>
3 a# [1 D# p3 T<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>/ p+ v, ?3 j2 O* m* E
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
" T3 g( f# M" n2 i# i$ W* m7 O</ul>
0 z" B1 s2 }; N5 t<p><code>var</code>定义的都为全局变量</p>
9 b, A% ?8 q" S- e# [<p><code>let</code>可以声明局部变量</p>$ U# \& Z9 W/ [7 n
<p><strong>声明变量:</strong></p>9 \( s$ W/ z  y
<pre><code class="language-javascript">// 定义单个变量
& n( }1 z# ]) p% S/ V7 L( f( E* [&gt; var name
( K0 d$ {, v8 ~- n0 S' e; J3 I&gt; name = 'Hans'
& E* K  J! w$ D4 O7 L* p; I4 k//定义并赋值
% ]' z6 M7 ?# r( n&gt; var name = 'Hans'
3 A5 K/ W, C: F- z6 `$ L&gt; name
9 {1 c* V; n' R'Hans'/ E* O, L- L0 U8 J0 |

; {% }0 P8 ?* R  J// 定义多个变量
5 b' ^' ^9 x  L9 `& X# D&gt; var name = "Hans", age = 18: o$ b9 g2 N( Q; N3 V
&gt; name
5 W8 `) p; N7 v) B5 L" x'Hans'
  F6 g9 X/ W7 `# W&gt; age
* R; ?/ O& ?; `6 B# v. t18
- f9 D) @# n) R( y. _3 G
% D9 ^8 M9 U! m//多行使用反引号`` 类型python中的三引号9 z% g9 c, L1 Z
&gt; var text = `A young idler," r, F" e3 b8 U) P$ Q9 p
an old beggar`1 y, W- J1 x1 G& W3 h! u. B& _
&gt; text' Z' b% K" W4 j# y' J! h
'A young idler,\nan old beggar'! Y1 p! ^3 T! |: x
</code></pre>
/ x$ W1 K7 \) L" R<p><strong>声明常量:</strong></p>
3 ^' j/ M3 s) F' V<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>4 H- w( |5 ^0 g* X2 g" W  x5 q5 x
<pre><code class="language-javascript">&gt; const pi = 3.145 X' z) C$ @! g" i! d* k
&gt; pi
2 m! |1 }4 H, T! w# D/ F. U! }* ~  J3.14' R7 S  A' c/ U! {! |) u: @7 T
&gt;  pi = 3.01& I5 p% u& r9 S. U  Q2 b& o
Uncaught TypeError: Assignment to constant variable.& M2 P9 p" A& h7 U4 u) Z% N
    at &lt;anonymous&gt;:1:4
* @" B2 ]- W1 y4 z( n7 f+ \, J' K5 e" c+ R
</code></pre>7 C7 e5 h% i. P  X' K! D/ h
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>0 T0 ?' C7 `' K/ B
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>, i$ j1 e7 I- L) I- s/ K
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>$ r9 g* g' F8 f- t  L4 ?8 ~
<h4 id="231-number类型">2.3.1 Number类型</h4>' {4 n7 ?$ p. c1 e/ |: o" _
<pre><code class="language-javascript">&gt; var a = 5
: l% d! i$ Q$ {4 n. Y0 x& J. ]&gt; typeof a   //查看变量的类型  
2 L2 o" w4 Q" Knumber
" `6 W- k7 x0 f. e* l) _6 l) V6 h  D0 v
&gt; var b = 1.3: k$ {/ W9 ?1 r# h' H0 n
&gt; typeof b
5 k1 @8 ~6 h7 _. Ynumber  u; B3 s' Q' b! V

+ d, d) k; X; p# v: y// 不管整型还是浮点型打开出来的结果都是number类型
" T% t2 @: X8 K) s3 `" C+ ]) j6 x" V6 k, g; Z2 S) J% G# i% E) e
/*% Q2 n; ~& H2 y
NaN:Not A Number
5 i9 J  e7 A5 R$ `7 uNaN属于数值类型 表示的意思是 不是一个数字
- L2 R. [8 v8 R2 [  }*/' z3 W6 q: b. j' n# z6 j% x: a
, q1 t% ]6 S3 `! P1 s' i
parseInt('2345')  // 转整型
/ K7 B/ K$ G) X2345
/ R9 @: p3 P9 l; e  x7 JparseInt('2345.5')
. F* Z" U2 _/ Y' c1 E23459 N+ ]( C8 s) O. v5 {  ~" w
parseFloat('2345.5') // 转浮点型
. G3 [2 S; n$ Z- K% B  X: j2345.5
1 ]: U& Y% g( F& o( q& KparseFloat('ABC')
6 w0 [! b" b$ ?. b2 s2 vNaN
$ V1 K4 z' i+ j9 l# U: ]1 tparseInt('abc')
% H& U" j* S3 I. yNaN
0 v! x# \  L9 b7 z; k# A) z, h</code></pre>
& v1 E% G8 Z8 b1 D; H, h* w$ ]1 w<h4 id="232-string类型">2.3.2 String类型</h4>6 j; Y) U) m5 |; `7 J3 E
<pre><code class="language-javascript">&gt; var name = 'Hans'8 P5 a2 p6 c1 w- w
&gt; typeof name: Y  _# q. C% U9 ?
'string'; p( y# g8 |+ q1 u6 i$ O

! T8 R5 ~! y  A. p" b//常用方法% H7 `# o8 [! f; J$ C
// 变量值长度
  G! l# f4 g) e1 Z&gt; name.length! W! O& S& x) m' h% v. ?" p
4
: |( m, S4 ]2 C$ R9 c& R% B// trim() 移除空白
& @( u1 q# k) Q/ D&gt; var a = '    ABC    '
5 D8 J" x5 s% P&gt; a7 L4 T1 x1 A. U% J; a  G
'    ABC    '
+ H- S; t9 P! M' L7 t9 J5 ^&gt; a.trim()$ m7 s; N# S# H6 @2 u3 M
'ABC'/ |6 P( v$ a# e2 N8 W
//移除左边的空白
* j6 k* [, `2 m, G" F, u&gt; a.trimLeft()$ W! f% L8 b( i* ?: L
'ABC    '
5 _% P' \8 K9 c/ f4 |9 r7 G" c  P( s' H//移除右边的空白
( @" D( p6 h9 h&gt; a.trimRight()
- |* N# X8 ~+ ~# P+ C0 S9 D- w9 {. ?'    ABC'
6 D% v: Z5 n0 {0 a# N4 q! |# O- H; {) [% O7 ~: g& Z2 L# ?
//返回第n个字符,从0开始
. u; R# [: f# K0 l$ |! L&gt; name6 X$ r$ t( H! Y$ \+ E7 y( H
'Hans'7 P8 R" P! T% @% B% z, T
&gt; name.charAt(3)
8 H' t" y" H1 L* Y  x* |2 B's'+ y6 R. P( G% t9 Q7 i, M5 O
&gt; name.charAt()
4 ?8 I6 U7 s7 |& M4 m5 _% d'H'
( W  T$ [2 T  [" x&gt; name.charAt(1)
; b2 j+ R, x# M% ^" W! n'a'
5 |  J$ N. ^0 A' z7 x5 M
; A- @# R- q- S, g3 t// 在javascript中推荐使用加号(+)拼接+ S  V; s- s: h7 }5 X& V
&gt; name3 |* `) n' [! j- l" {, i/ e# l
'Hans'
/ |' h# q: m# L4 @$ X&gt; a8 ~: {" x8 |5 V2 S3 g5 N- s
'    ABC    '
  [, x( \; B; R7 s, O&gt; name + a5 {- f$ g* h" R: {# n$ j0 x9 D1 u
'Hans    ABC    '
0 j2 e% p+ {2 f, H" t" c// 使用concat拼接+ G- H# P: a- U/ Q- j; o
&gt; name.concat(a)
" Q$ N3 Y9 M& N'Hans    ABC    '! N* g& v* `8 w

% p" \9 N+ @/ k, W2 J//indexOf(substring, start)子序列位置' {" A, y# o  m; t' T8 i

' \; |7 H9 B2 D9 A4 x2 n  ~&gt; text
' Q" K3 F4 N; y6 I$ s% z4 _+ Z'A young idler,\nan old beggar'
7 ]8 m% t) k1 J&gt; text.indexOf('young',0)
5 @* J% ~. c9 v: ^  P% s2
( d, m( ^0 p* X# Z
$ z0 o; |1 L2 L//.substring(from, to)        根据索引获取子序列
: }0 S' [) A/ t- f9 M! E* X2 C' o&gt; text.substring(0,)
% c' Q8 d1 L2 l2 I9 s# p7 n" S'A young idler,\nan old beggar'! b1 a8 w% v2 r5 t1 L
&gt; text.substring(0,10)
% [$ ^' s3 m3 ~8 N! g# R'A young id'
* M7 O7 N4 S( H0 _9 z# l3 k) {( Y1 J* n
// .slice(start, end)        切片, 从0开始顾头不顾尾
0 z; N: {# u. A/ Y' x&gt; name.slice(0,3)
4 k; X3 o& ^; o- Z0 h: t& l3 b1 w'Han', X9 Z) F& ], t: K6 k, L( M
$ l, e+ k; j. l: Y7 K* g
// 转小写4 A0 }( @8 N; Z1 X
&gt; name% Y& [  P+ f' T. o) p
'Hans'  `. y/ d; P% m- t$ G8 W8 f& c7 `
&gt; name.toLowerCase()
) @3 B& R3 h' _'hans'
# K7 ?( P1 n, N// 转大写
0 v0 W8 D/ P- X) X  |: `&gt; name.toUpperCase()
& {* \7 v6 s; ^* S3 P4 }'HANS'
6 [) t! ^, N: _- N& Z
  i7 Y8 |+ Q8 B9 O: H! F3 {- z// 分隔- y* T, T- C4 u
&gt; name
+ ^2 y5 o& n1 ^; n'Hans', v2 E, m  @5 x
&gt; name.split('a')
  y( q* {& e& \3 g/ M$ ~: A! V9 ?(2)&nbsp;['H', 'ns']9 d; h: D4 V7 a0 g6 ^1 `; W( R3 C
</code></pre>' Y5 O1 {, }- Y* X
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
* Y2 {) s4 h! p- z. N<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>: ]( W' y4 s' q6 I7 {# q1 f
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>; h9 d$ f$ X2 t! z3 A/ \' V& V
<p><strong>null和undefined</strong></p>
9 I, X# f; E" I! @2 c<ul>2 h" {8 Q3 H, X% f( x+ t
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>$ O+ U* {) U" }2 o& x$ n- p
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
+ V3 `3 J! |9 \</ul>
# q  F1 s% A" f1 g<h4 id="234-array数组">2.3.4 Array数组</h4>5 K$ Z. t% V* t+ M2 n1 z  |% P, |
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>+ x/ n' E9 k) [! Z
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 0 d* C3 J1 A1 R& @$ e- M+ ~
&gt; array1+ s. Z0 d( ]! S2 U0 |7 _
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 p! R: H" A, ]& k4 B& e
&gt; console.log(array1[2])  //console.log打印类似python中的print1 S, O/ W) z- i/ U3 D) O* ~; A
3
& p( L7 y9 v, b// length元素个数# h1 d; i" [- ~
&gt; array1.length
' `1 U" Q# C& S5 ^6
) w  A7 ~- l+ D) E" ~  j// 在尾部增加元素,类型append
, S/ b0 b9 }: ~  M&gt; array1.push('D')
: K0 T& `. Q4 v3 y73 \2 a; H7 u$ D- D8 L# \( e7 ]9 e
&gt; array1
9 \" V2 L. P9 C- \! H(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']$ l- F; Z- L& s5 i2 N
// 在头部增加元素
0 Z/ w; c: o6 Q4 ?' s* r&gt; array1.unshift(0)  \& X# S# G: b2 V+ R& s
82 f! v" F3 J! r2 z/ ~4 u
&gt; array1
0 g4 y3 y8 y; U+ w+ Y(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']/ v- Q2 j* W- \, Y4 k) t1 x( c
4 |$ [0 |7 E0 @) e$ K7 j
//取最后一个元素
. r) u6 A7 _" j. `) f&gt; array1.pop()+ E$ g7 ^; ^2 A* v2 `. T2 O
'D'
5 A& q, E8 b) M&gt; array1! B# v/ ?: a' A6 [
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']+ g" d0 M7 d( V! D- U. U
//取头部元素0 |( a7 g$ T3 P! O
&gt; array1.shift()
6 y/ b+ h; `0 K0 [& ]7 ?+ a0
: U. [- r' D. [2 `% D: B, o6 t&gt; array1; X. C/ x$ N' N6 j! a2 Q. `
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
, D) K$ ^7 R7 O' b$ s- J  s2 d6 l- d* _# t4 Y: Y( b, R& l
//切片, 从0开始顾头不顾尾
2 {) S. H: U7 ~1 d7 C7 _. O&gt; array1.slice(3,6)
0 c. y$ ?' p" ?3 v( S(3)&nbsp;['a', 'b', 'c']. d4 Q( ]3 D" n0 I0 l$ x7 [
// 反转
/ t- V! F3 z& Q5 |6 H- N&gt; array1.reverse(). t+ w4 c. w0 r0 ]  Z0 ~; _' ^
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]* l9 ]9 P  v, H2 O' n5 e0 y# u
// 将数组元素连接成字符串, `1 f: }1 h6 }: ?, B: W' M
&gt; array1.join() // 什么不都写默认使用逗号分隔( L& t5 Z  f# @: d* \
'c,b,a,3,2,1': O, c& ]5 E. x* s: g2 o
&gt; array1.join('')# h3 T6 T' z6 L% f  F
'cba321'
5 b+ }4 d0 i: n) W5 t' p$ `! L&gt; array1.join('|')
+ W. k+ d& W( \( h" |'c|b|a|3|2|1'
4 B/ n9 F+ b: R! @; {! S# u2 d5 l8 c& _. |! x
// 连接数组
, U& _- g4 t7 _2 y+ T) C7 \# ~9 h&gt; var array2 = ['A','B','C']: n, ^2 N% Z  G& N% a4 j; I9 B
&gt; array1.concat(array2)
; o7 @* C9 h7 ^2 E/ o; y6 r(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
8 I3 @& F6 M1 L  D' P) z' C! N9 }: v, E9 w* g% ?
// 排序* u' `' q1 @! d0 B8 \; L5 A
&gt; array1.sort()
, t, @# |4 Z! p* J8 e" V(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']+ l( d# A0 e! p/ I4 B/ o! M$ @

5 A. e; `: N" X7 r1 Y  r+ T/ _// 删除元素,并可以向数据组中添加新元素(可选)/ ?2 l; J" D6 q- W1 O: O
&gt; array1.splice(3,3)  // 删除元素
% x2 \2 K0 w' ](3)&nbsp;['a', 'b', 'c']' d; S& _$ c4 L
&gt; array1
( l, c$ C1 b8 ~6 l9 U5 d# v6 n8 d! _(3)&nbsp;[1, 2, 3]# D0 ^' f# H, Y' W, |; [
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素; K, @, l0 r- K3 R
[]
7 j" v7 i! k" m7 a* h9 x&gt; array1
# h8 e( T2 k& m6 {) l4 a/ V(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
6 F0 A0 }  c2 w) N1 Y9 F" m) J. o( {( X3 `, c2 K. |
/*5 R2 Y" o, R  D& L6 [/ `% r
splice(index,howmany,item1,.....,itemX)9 t- k% U  h* @7 ?7 ], S
index:必需,必须是数字。规定从何处添加/删除元素。
" B! T( p$ j' ^, U7 ^  V% Lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。3 k! W, \; e# b% b
item1, ..., itemX        可选。要添加到数组的新元素( H/ E! ?$ G* p6 p
*/4 _- i8 L- A* m3 `" A$ Z5 d- a5 c: f2 q

- o) i( a# X; F$ X$ a- ~' I$ p// forEach()        将数组的每个元素传递给回调函数
* x2 q9 _) C: S&gt; array1.forEach(function test(n){console.log(n)})
% c& e9 _7 Z' V; G, _# M. v 1" ~' ]8 i" B( r. Q* Z  q/ X
27 x8 y, r! A' C7 F4 X; d
3* x- L) l' I' v7 q& m
A5 {( ?) i& f0 V9 G& v" B$ N
B: ~  X5 u- l4 _: r& t
C
/ g1 D9 x+ ~/ [" A" P/ f// 返回一个数组元素调用函数处理后的值的新数组
# p( w. K) L9 n! U/ R7 l&gt; array1.map(function(value){return value +1})
1 t2 w5 A2 r% m% @1 y3 Q(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
- H" {& a# }& Q) R- S</code></pre>
% T' _8 g& W% k6 }<h3 id="24-运算符">2.4 运算符</h3>/ t. \) _3 B( n$ a* |. a7 X9 T
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>) {6 f4 o) g& x' h; N$ l' Z8 b
<p><code>+ - * / % ++ --</code></p>. F* Q2 P7 i% ?3 I2 ]3 T2 g
<pre><code class="language-javascript">&gt; var a = 6
( T- _, z. S7 I4 X- J5 h1 Z&gt; var b = 3
: U& m' j. s6 h" S0 \) P: l' O// 加
2 i* G5 u" T/ O&gt; a + b7 l' F$ A+ }. `) x" c. L
9; Y4 U* A+ U4 ^% a) ~
// 减; p9 k. K3 `, ^  M, h
&gt; a - b
9 l+ B  I. l# m  [$ f7 {3 z% b32 x+ {. p: J( \3 O; C8 @" O
// 乘! T9 k+ `1 \$ g/ ?# |$ L
&gt; a * b
# D  @- ~' f3 I- B8 T18" }5 t, @' D. h" A0 b& {
// 除% W( U6 z- E5 k& C1 G! l
&gt; a / b
) a, E& \! Q9 _- e2 j! I: B  L2 @' o28 V. |" y! m, D) S4 G  M
// 取模(取余)
; N* w, y" q3 Y&gt; a % b
" q) ^: ], u% M/ t: c04 R" c, N5 Z* |4 n. f7 |
// 自增1(先赋值再增1)
7 `) ^- N3 d* K; i&gt; a++
! u2 p; O' o5 b, ]& {& k6
% Y8 ]' R7 W. y1 i' h3 Q, e" C$ k* `8 C&gt; a' \) s. U3 b5 S# `: X( z
7
! X! ~1 F6 i$ F6 M- L+ ~$ P$ T// 自减1(先赋值再减1)
0 n. x* i% ], M( X9 e&gt; a--4 j: ^; [  \5 I
73 q& x; c5 E+ H: w' |
&gt; a
+ N; q3 S# r$ |( M$ `# v/ N2 }- M6
; y  E- g1 N6 {( K# P// 自增1(先增1再赋值)
$ o4 O  L/ S* @" j, W/ F; o&gt; ++a
  [, P8 u5 C7 F- ^- M9 b7
' B( \' r. _1 I* |) Y// 自减1(先减1再赋值)
. E" W5 N, j6 _, u/ k) F&gt; --a
  q: t# h1 M0 c/ n63 ^% v& X0 I$ d8 ]6 |7 D% r6 U
&gt; a- |7 {( e" Z3 s) k; d+ a( b
6
9 k- l8 J, r6 H9 C
, n4 v9 I  q/ ~3 ^! m  ]6 _//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
: T% }# f2 |+ ^, O5 U" R</code></pre>, T0 ~( W0 ^0 P( \- O+ }
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>' c5 {  d5 T( ~" W
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
5 u! ?6 e. z7 y<pre><code class="language-javascript">// 大于
1 G0 A: Y8 @: Z" y" U0 {( v&gt; a &gt; b
; c& m  R/ E; ctrue7 g( G" P5 B# Q
// 大于等于
/ c. s0 P5 b' Y7 T- k1 e( M&gt; a &gt;= b  D  x. ~+ l; s: ]8 t& J
true" T  P! R5 H1 |/ U2 U. Q& @
// 小于
: H. w! h6 P: L0 j5 H: K: Z&gt; a &lt; b( L: i9 R" }( B
false
. V7 n6 l$ k, ?: {// 小于等于
1 M" `) n* I8 @! D/ A% O4 w5 ~&gt; a &lt;= b
" d) ~- e! x% h: g& o) T7 [: nfalse+ d; O( j3 z" @
// 弱不等于* G6 m- W0 Z1 K1 g  F3 Z' p
&gt; a != b
3 X6 ]' ~$ s' {$ w% Y) Otrue6 }0 b& Q" T9 {# F5 E& {4 {
// 弱等于
: V# N& R( E/ s6 W8 B$ u&gt; 1 == '1'
7 r1 g* ]. k7 a* [; U- Itrue. s0 P6 p: P) F1 v( B! Z, |
// 强等于
: y0 h! c. u; F$ d; `&gt; 1 === '1'
; I# }9 b% _/ W1 [4 \" Ofalse
4 m4 \: k3 |0 K( |2 j: x# S. z// 强不等于
" f7 _+ S/ B" B6 y&gt; 1 !== '1'7 `. S) G/ ^# g6 c
true
' `# H+ ~" x, {  V" q6 I
2 C; C! F. s# ]& m- m3 [% _4 n/*% w* [3 y9 P/ M
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
( Z- X0 V8 [# J" ^*/  K1 O  E1 W7 q  a
</code></pre>
- k8 K; q- `' K3 V8 m" c# ?" W* o# _<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>% `% N: i; o$ j4 p" [* p- j
<p><code>&amp;&amp; || !</code></p>6 Z4 m6 a. A7 t% E- e: P
<pre><code class="language-javascript">&amp;&amp; 与
2 g7 ~- m1 n+ M, D; d|| or   b3 O! B% y( O! J
! 非
: t! X3 @! e2 n+ T7 B3 U8 R</code></pre>% g& n& y6 |& O8 j1 V, m
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>7 Z& h, v& ]% L) ^6 s) O$ y+ ?$ W
<p><code>= += -= *= /=</code></p>" z' y9 i( t# D0 ~
<pre><code class="language-javascript">// 赋值/ [  m: j! a; Z! v) E6 Z
&gt; var x = 3
3 w- m( h5 G- Q, V$ |# _// 加等于8 M8 s% N' o  ~( Z: ?0 b
&gt; x += 2
- B) Q) I2 `$ A8 h; J5
0 K: k* O# i* |4 x2 t// 减等于
% Q6 ?) Y: A  ?&gt; x -= 12 T; _2 V8 s4 J% Y
4+ U: {$ t) T* ~; _; I9 ~; @
// 乘等于" o( q4 e7 Z: Z+ Z" X, f7 ^: |" r
&gt; x *= 2% C5 i$ F- \( K* D! i
8
5 f# z& ~( j' @/ N+ D+ N0 m// 除等于! K1 u- n) J/ q0 k" r% j
&gt; x /= 2! P! c% z6 k- T+ p
4/ i8 ~; P" Y5 e4 q. W0 `
</code></pre>* x6 S1 X4 V1 G0 q$ K9 E
<h3 id="25-流程控制">2.5 流程控制</h3>
) e- [' b1 @* r, g$ O2 o0 r<h4 id="251-if">2.5.1 if</h4>8 P) |; K, I, H; ~
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
4 c% S! Q8 H% U( |1 r" l
) T" E% Q' V' A; y&gt; var x = 3
7 d: J( x4 U7 \4 D, O&gt; if (x &gt; 2){console.log("OK")}# c5 h  m9 o& s8 ]% e' Z
OK1 ~' J# ~) c& w( A' h$ I% q5 X
9 v* f( E5 j% C4 `1 r
2, if(条件){条件成立执行代码}
- D8 |: \# q( m& n: O        else{条件不成立执行代码}
0 b3 ~' R6 F7 Y, v& P6 b2 F; T/ T. ~& ~
9 I( @" y8 q8 O, |, N+ N&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
* ?( n7 o, |! J! K'NO'" t$ y" j8 @% S1 ]3 p( H

8 z; \7 |3 T8 r# ^2 R& f; x& @3, if(条件1){条件1成立执行代码}
0 q( x6 U1 e# N4 Y4 w# t; c        else if(条件2){条件2成立执行代码}2 N0 D/ w; F1 k) U
    else{上面条件都不成立执行代码}
1 s/ B' K$ @% L6 G' `) K0 \! g6 Y' L7 P0 O. v1 W4 u, x* f1 U8 j
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
& M; T; G: a+ }* w" l Ha
; \0 L/ o$ J/ h  ]* w2 f) O</code></pre>
  y* m" z+ z# G5 f4 h9 b0 D, R<h4 id="252-switch">2.5.2 switch</h4>" O5 w: w% e# a9 e3 x+ i
<pre><code class="language-javascript">var day = new Date().getDay();6 M' L6 }$ K( g( ^4 H% y: |+ O
switch (day) {; I, s9 d4 }( d2 M
  case 0:
- X8 ~! l2 F" h7 f$ d  console.log("Sunday");  j* l2 ^, b, w% y3 |4 P( k4 J
  break;
% B& W( }  a+ v& e) A6 D  case 1:2 o. L  ?+ T4 i9 m
  console.log("Monday");
6 b( g' F5 E( }% l8 H  A# h  break;& a( G* b) ?! F2 v7 }- s
default:
0 @6 |8 ^$ K  d0 h; B  console.log("不在范围")
) u7 q$ o0 E4 o4 @6 p7 @: p' `}- D* W. [+ u6 l% X
不在范围1 N  L, k0 v8 s- c" N* f
</code></pre>& p% v* H, u+ \0 T
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>, d! e4 n8 Z$ X+ w
<h4 id="253-for">2.5.3 for</h4>
6 J* Z7 S/ B6 q1 _<pre><code class="language-python">// for 循环8 N3 S) ]( q7 s2 _) m) m
        for(起始值;循环条件;每次循环后执行的操作){; A" H& x  C! A& n) U5 i% M- S( A  H
        for循环体代码6 p" a8 L4 n; q& T1 t+ r! X3 T8 C
    }
) o7 Q& W3 l& z( S2 M# }8 n+ n! g
# L7 ]& K: S. `- Ifor (var i = 0; i&lt;10; i++){
2 S* ~' F9 M8 ]5 P# f3 r    console.log(i)
# X7 R4 Y/ K8 e( A( D  E( G}
# s9 x+ p( i6 P/ {! F, q2 E        0" ^+ @: ~$ ?! M. ^$ H9 }
        1
: t. n7 \' v5 K" ^+ o        2& @/ ~1 a0 y: z) f3 f! b1 A
        3
8 Z) Q- k8 P' F7 o/ q# A. f$ ]        4& ]. A3 I/ u: S# T( E
        58 W; W7 l  m5 s. B
        6$ ?% q, m  K# o& [; N
        7
% N* X# |& |& _6 H! D; f7 d        8
; q: m  D' F9 k4 h- l% A        9
  N1 X# c( K2 j1 h' C1 s</code></pre>
. w4 X$ ?( r5 U+ \8 Z) E' y) z<h4 id="254-while">2.5.4 while</h4>
6 l: K; ]6 ^" K, [<pre><code class="language-javascript">// while 循环
* @- d% a! O( O% Z8 x( Q1 Z        while(循环条件){
+ u$ H' s: D4 O2 @' _' q        循环体代码
- A6 l, g$ G9 P2 m# R" [    }
3 V5 D9 L$ j6 L1 R$ e, E: q8 s# X* m# J8 K/ @" G; i3 B: n
&gt; var i = 0
& U* n% z9 U# X: S7 W&gt; while(i&lt;10){
" z; D3 K2 V; s$ ?7 p! ?    console.log(i)
( r2 t, w7 {* t/ y3 \" b    i++
0 h' J0 _6 p6 V2 P  p* w4 H}
7 n/ ^$ c8 c, u$ \( f# E* a 0
, J" w5 I1 l' U  M" R- Y- m! ~ 1
" ]) c" _/ v1 b- z 2" X4 w1 i/ n! R! q/ ]6 Y3 q2 E8 T
3' R) P* S$ W/ U9 U, Z# @
4+ I; F6 U- L5 s$ Z' O, x* f+ l
5
+ ~; s8 x( P, H" K: ^ 6
+ D1 T6 b4 O& S# t( F, \2 [ 7
1 u- ?/ c0 D, x 8
% Y1 X* r5 o  Q+ u 9
3 x1 E( N: [3 E$ V</code></pre>
1 \' o0 z5 t* \# ?& u4 c2 o<h4 id="255-break和continue">2.5.5 break和continue</h4>/ m$ W' g. |0 P7 [' Y! c4 k9 b! i4 p
<pre><code class="language-javascript">// break
) H  y$ Y' r  G& X, ?8 ^for (var i = 0; i&lt;10; i++){* {$ f9 e3 E1 A. k
    if (i == 5){break}
+ v9 F" B4 T: u& d    console.log(i)
: K- L+ e* S# V  p}! B4 J/ x# M' ~2 f8 c
0
  R/ j3 _7 R. I; a$ A$ ]: R 1
8 i: [4 {' |: H 2
4 ^( Y  r: l& k/ L! ?! i, ~2 B0 ~ 38 D  I3 O$ ?; X  i& z8 Q
41 w& I4 ~, k' i$ E6 g
// continue
9 j8 F1 I3 b% S/ cfor (var i = 0; i&lt;10; i++){' e& V. n& k$ g) x4 w& E0 j
    if (i == 5){continue}9 U7 p) V4 J( D9 X
    console.log(i)
* d4 H0 B8 i8 K( |+ `}; f4 l. u* V) Y8 p  l% @
0# ?1 r" A# O; J. {& U3 f
19 r$ P8 v- d( s! u: g3 U
2; X6 F' ?; Z: z% R- t
31 {' M  _7 D! J0 @! O1 N
4
6 O: [; K. C- w6 B; _7 r6 w" G 6
4 M: \6 Q  B% i" A/ L4 Z 7
4 {8 P2 W) Q6 C# G$ I% ~/ E 8
4 j/ D3 \+ {& Q6 q4 E 9& p& b- R% Q4 {% @- J

# @& a$ G; A) a  @" q- U</code></pre>
3 }2 O6 E4 Y& k2 [, G* j1 X- p<h3 id="26-三元运算">2.6 三元运算</h3>
: J8 L" p% w" D: [: {8 d7 B<pre><code class="language-javascript">&gt; a
# u. P, ?' j1 T# ]& X6
% Y) z+ Q7 K1 R3 A+ z" I&gt; b$ J( b$ Q4 b' h  L5 ^
3. G/ ?0 v% @1 n: r$ K5 W1 J7 p' d
; g. @9 F/ }5 Y" u5 b% D
//条件成立c为a的值,不成立c为b的值
4 |3 P- a1 X$ N+ }&gt; var c = a &gt; b ? a : b; V* u7 @. q( X. F
&gt; c
7 l1 y% ^+ T  C% n- Y/ t" t6+ R! x1 {' X, d1 S' ]% r$ z7 J

$ o) [+ ~6 k' R# n; b// 三元运算可以嵌套
- a5 j  }9 k, e1 H! G* q! D4 z  y</code></pre>
4 \# w# s' q8 X2 z( [$ j0 \, j<h3 id="27-函数">2.7 函数</h3>+ G/ p, j2 Q  `. g
<pre><code class="language-javascript">1. 普通函数
# d) Y. s+ r: \3 l8 }&gt; function foo1(){
1 l7 k: ~1 \* w# u1 |3 ?    console.log("Hi"). w+ c! J0 d( i4 k4 U+ j
}4 r7 m3 \/ ^( l
8 k5 U9 r0 k/ U7 T1 t
&gt; foo1()
2 Y% G! V; a0 ~: W% c* D        Hi
+ R3 n6 E3 Z2 C. P5 M2 l2. 带参数函数
% L2 _+ B) ?2 |! b" h1 ]&gt; function foo1(name){% ^3 \/ s/ D  Y
console.log("Hi",name)$ i) S' W6 |, z5 A% J% v0 P' q
}
+ A/ x# y7 S8 C
2 G! {+ n* q# z. S: [4 x* Y+ u&gt; foo1("Hans")6 e! r- j/ e+ K) w  }
Hi Hans4 N3 n+ q5 V/ @# M6 p8 B6 n

1 c# b' k8 Q/ ?( Z6 D. Z  W8 V# z( {&gt; var name = "Hello"
, R' a5 x& D6 t&gt; foo1(name)
7 k2 `( ~: X9 ~. a8 ~; q+ CHi Hello
+ f: W/ O0 t$ C8 P- {/ M: r
$ l6 w5 R1 x* E$ [) p! l. S- H1 Z% Y4 g' q3. 带返回值函数" i7 b' Y5 K  E- k
&gt; function foo1(a,b){) u/ Q  X1 v) h$ a1 y' X$ u
        return a + b   8 q( A7 K2 [4 V1 s
}# i8 }; G5 G, g! M
&gt; foo1(1,2)3 T7 I9 {& n9 f0 v- G7 I# S
3* w) {3 K9 K; ?+ @( A3 x
&gt; var a = foo1(10,20)  //接受函数返回值7 j9 C9 H' Z7 k# I1 d2 s
&gt; a
6 ~9 p1 |! Z$ Q" K6 g6 [7 S30
$ F! v: s5 G* L1 f1 b3 i; Y/ G/ d- r
8 v' ?, h1 i4 \$ `7 _  d! t( D9 H4. 匿名函数
. N1 W% g6 `9 t2 r! S" F2 D: u&gt; var sum = function(a, b){0 o. S" W% h& S
  return a + b;
. x" @. W. N# n}
  o: z6 `; N" T' w) {8 F9 ^1 ]4 ^  g6 W' q&gt; sum(1,2)% Y# x6 Q7 }- U0 u3 J. A) v7 E
3
4 P5 B$ d2 x0 n; y5 ^7 t) |5 ]" N4 H9 s. R$ q6 H
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱6 `7 G; F! R2 j1 V( W) {" t* v
&gt; (function(a, b){
, ^- ^+ K# T' e: @3 P* \  return a + b
- T8 E- Y% s% O7 B: u3 Q})(10, 20)
: L0 c4 W2 w, ~1 u3 D$ l30( G7 D( i# e& v+ f1 o  O4 P

& Z% P$ d9 F: j$ k. M, k5. 闭包函数' W2 i. F* J; |! B$ H2 e
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
. U( y  P& {$ L* y$ x9 T  {var city = "BJ"
1 {# Q! [! }8 Q% O6 _' t/ ^function f(){
2 @) f- A. X% A' `, ?0 L, g) u    var city = "SH"
% m7 q+ K" B5 r3 o9 M    function inner(){
# e7 K1 _" k5 {7 }2 F6 `2 Y        console.log(city)% t& u) |6 V5 S+ p0 U4 P
    }
; h2 P( y) F' s    return inner+ M) n: O) p" A- i
}
9 ]& ^4 j8 ?$ k5 M) y9 Pvar ret = f()) M0 _3 y! F7 F: O- r7 Y( ?; U- p. i
ret()3 O' q9 B( S, V$ b- l
执行结果:( ~" s* _1 O! X# [; }
SH3 h; H, z1 `7 a9 @  M' [' E
% B/ o' z6 |( s" e* D
</code></pre>$ c; V# A* F" {5 m6 Y
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>+ C( ~; g- ~2 U( k3 f' z
<pre><code class="language-javascript">var f = v =&gt; v;
& Q0 f9 V1 v  e& n* P# b+ u// 等同于
. h3 y  v& \. e8 v6 g& Lvar f = function(v){7 r- f6 g' ~" n0 Z, M  x3 j
  return v;3 N# _' ]' _: n- N0 ~, q6 N0 h1 ?
}
# L  H/ g3 k+ b& j, p</code></pre>
$ L: V& m& e2 \- B9 p, e<p><code>arguments</code>参数 可以获取传入的所有数据</p>
! k7 r2 |, y+ b<pre><code class="language-javascript">function foo1(a,b){
0 U! Z( o2 S2 F/ z    console.log(arguments.length)  //参数的个数 4 t- J! e% v+ |+ x4 S+ J9 X
    console.log(arguments[0]) // 第一个参数的值  |7 X, P- p6 T5 m4 ^2 S1 U
        return a + b   * }1 H* U. j9 u# n
}
' q& M0 l* m  Q4 z# Cfoo1(10,20)6 z) {3 m0 N. G8 d) T1 q
结果:8 f$ c0 N! P* s6 T  _$ _: |0 n
2          //参数的个数 1 ?: n2 a) Y; I- G4 W+ z0 H& Z
10        // 第一个参数的值
4 [0 w5 L- T4 c# Y- m30        // 返回相加的结果+ _. k4 p0 o! o. m" V8 p" U7 R
</code></pre>
, {; D! @( u7 B+ K<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
, l1 f! S2 x) K9 E1 W" T( T7 S<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>2 `- Z+ F+ r. U( d  M6 B
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
& n( }1 q6 }% j( J2 e<h4 id="281-date对象">2.8.1 Date对象</h4>8 t! z. m$ x3 Y* I7 E$ g) T
<pre><code class="language-javascript">&gt; var data_test = new Date()" b, w3 n/ O( x7 q  J$ t
&gt; data_test
/ {& E" t. t; n6 C2 ^* C% I3 W5 ^Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)5 V3 g- ~" A  Z1 u2 `3 {$ Y
&gt; data_test.toLocaleString()
# Z4 {" U3 L/ ^6 a5 ^'2022/2/11 下午9:44:43'
4 D) x5 w* g5 y' a- }5 R, J, a- ]  X
&gt; data_test.toLocaleDateString()1 j+ E9 c! l3 q) m
'2022/2/11'
& S; b& E% l0 x0 k$ m; m/ j( L
8 f; X9 l/ n6 h7 j7 @' a8 h. ~&gt; var data_test2  = new Date("2022/2/11 9:44:43")
/ ]% F6 }$ h4 F3 u, B' |$ A&gt; data_test2.toLocaleString()
% a, m$ N+ i4 r'2022/2/11 上午9:44:43') }" a( `) F7 `% J8 W

# c2 [2 a2 z3 S$ D+ r; c7 h: ~// 获取当前几号0 X7 o5 w  r' z# `1 ], S# `- I( c/ O
&gt; data_test.getDate()& H! M4 O; B+ v% Z- h0 [
112 E2 i$ k* T" A/ q/ T$ U
// 获取星期几,数字表示4 \& y$ r5 n% N1 L' a
&gt; data_test.getDay()  9 F3 s. K+ P- j1 U
5
4 }7 d" M5 y0 |) h// 获取月份(0-11)9 B" f  V4 C" E' `
&gt; data_test.getMonth()% u6 ^; K9 c/ a: U
1
- y3 a4 r8 E9 D  J& ?$ X// 获取完整年份
7 r% S8 {3 A- O* k+ U3 V&gt; data_test.getFullYear()! i( W: M5 P( u0 f/ {' C5 f; \
2022
4 i! Y" F9 f5 o# M+ d$ @' X5 x// 获取时3 G5 g7 U2 D- t% X8 {6 Q
&gt; data_test.getHours()
8 ?, y* e' W  l- Q7 c4 ]21
8 [9 {, x3 A4 @9 t- G# V( p// 获取分
+ i, O; ~" T2 ^; }) V&gt; data_test.getMinutes()% [" e2 W7 e  ]+ t! d2 q4 p
442 V- v8 Y4 N: l# A! O# O* Q
// 获取秒
8 D$ ~+ B4 @$ t&gt; data_test.getSeconds()* t" @1 g! f& P( A: L
433 B1 A  r5 L+ k
// 获取毫秒
. m/ k4 ]  |( B) s&gt; data_test.getMilliseconds()+ E! ^2 |1 i9 v. W
290/ l4 Y8 V2 V6 Q  j/ E$ L
// 获取时间戳
0 m' W, g+ E0 k/ [% {8 r&gt; data_test.getTime()9 c# q- H( m7 E/ R6 X
1644587083290
$ V( n0 u+ J" f* P1 t$ v- g/ n' s</code></pre>! g+ b: u9 i7 k1 w" \# X
<h4 id="282-json对象">2.8.2 Json对象</h4>& h7 @3 K; E% R! F8 S
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串8 u5 X6 t0 k0 ^5 u% Y5 a7 N5 D
JSON.parse()  // 反序列化,把JSON字符串转换成对象
6 d9 e& }8 M) L9 Y, m& M5 F. H
! S/ k! c( H5 ~8 @' `: e// 序列化
5 z/ Z/ C" n: d6 ?&gt; var jstojson = JSON.stringify(person)
& {' \, M* O; V- U2 J9 _* I/ o" ?&gt; jstojson  2 f9 X3 T6 T6 `8 M
'{"Name":"Hans","Age":18}'
  m8 ~6 {1 {2 O. G2 Q. W( x; P
& Y: v3 S( ~: C6 a( e// 反序列化8 A  \+ J0 _( a& M9 H. d
&gt; var x = JSON.parse(jstojson)
* a! w& \# _3 ]% q8 A&gt; x
# W5 A2 R) g7 k; H: z' f{Name: 'Hans', Age: 18}/ [' t* B  r; `# w3 ^* g0 T
&gt; x.Age
: X* z+ E+ N% g0 X, U3 V$ W184 n9 x/ k. ?8 z7 B
</code></pre>
; ]$ S9 Q0 Q, r<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>. }  D1 K4 d7 i" M& L# n+ U. p
<p>正则</p>
& A: `1 E6 a/ H$ ]  I, `. j<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
9 m4 g. p) `' Z, s# j&gt; reg1( Z7 G& n) a# y: M
/^[a-zA-Z][a-zA-Z0-9]{4,7}/) M2 e  }, W7 }  c; N  X" v+ J
&gt; reg1.test("Hans666")' S6 N! L. v5 [. U$ @0 O5 n
true& x9 n6 j% [% F6 ^: G% e* t

* W1 e/ `- k- _; d: b&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
: C& C# I2 L8 \/ [/ \( K) u7 l$ c* Y&gt; reg25 J8 }& O' B: V; [; @! e
/^[a-zA-Z][a-zA-Z0-9]{4,7}/& k: z4 i% u2 E
&gt; reg2.test('Hasdfa'); {) \2 A8 b) w. v6 Z2 j+ }
true1 v- P) Q( Z" }3 Y2 E0 Z' M
& v2 h( f- l. n2 A* c" t
全局匹配:$ W& s6 u" i5 m; c. X
&gt; name
9 Q- p# u' u1 ^7 m: o2 R1 y: h! ~'Hello'
9 q/ o! y8 ^8 N&gt; name.match(/l/)
6 k7 E& S3 Y, @$ Y' @2 P7 {& s['l', index: 2, input: 'Hello', groups: undefined]
0 U& {- i9 u7 b! ^4 }5 S
$ q5 O9 ]# v5 D% B7 e4 m* I7 S& q&gt; name.match(/l/g)
$ D% Y7 g# G$ D4 v2 ], |(2)&nbsp;['l', 'l']* q5 A8 z0 @3 o% F! _
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
9 n9 L/ |8 p& _; ?6 B7 }% u
1 I9 i% d5 T: T; e+ C全局匹配注意事项:
/ P2 {: I3 E& b$ y6 f&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g, `0 H" G# N; X
&gt; reg2.test('Hasdfa')
  j+ o; h: T" ~& Ftrue
" \9 }9 R6 H9 z# _: M' \# F&gt;reg2.lastIndex;
5 H& H, Q! V# d# S, ?& R6
; B! Q/ Z& P4 x# v& `: ^2 G( c# i&gt; reg2.test('Hasdfa')4 o4 ~" m0 }8 d) A' J. B
false
- _8 [6 \, [2 }& Y&gt; reg2.lastIndex;
& N0 V. T% o7 s- G5 u& O8 D0
- b0 Z' J/ y; I/ l! N  ^. q; r+ @&gt; reg2.test('Hasdfa')
' ~5 Y0 g% ?6 ^( }+ Strue
, v/ N3 S+ l. t. H. h&gt; reg2.lastIndex;  d/ K, M& ], X% V
6$ V9 J* G# Y' s- G
&gt; reg2.test('Hasdfa'). E; N, v6 ?- J8 r
false
4 b, r% x8 u: _8 [&gt; reg2.lastIndex;7 \" B! {* Q( z* g/ o# T
05 s+ F& ^" q6 v0 @2 i
// 全局匹配会有一个lastindex属性2 }* t& O! H8 c+ O- r1 v
&gt; reg2.test()4 Y/ Q; I6 Z$ y- C: r
false
" O2 J: m& I6 o4 ]- ~5 ]6 L&gt; reg2.test()
/ S$ A: s  I; K4 Xtrue: Q; s  s2 f. M6 o8 k
// 校验时不传参数默认传的是undefined
, h7 \' [) P7 e& w</code></pre>" [; Z! |, v2 J6 Q. G+ O
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
) m' O& F$ Q6 \3 e6 U( F* D2 |  W' B<p>就相当于是<code>python</code>中的字典</p>/ n- H7 d3 z" \8 X- |7 X
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}) L7 y7 ]  x; R$ h! N' @3 t
&gt; person+ W+ {, x2 S8 B4 p& u7 r" Z1 {+ n
{Name: 'Hans', Age: 18}
" a3 [, p- U* e) _&gt; person.Name" K2 t2 ?$ F3 G  T
'Hans'5 c2 G0 p8 r( G2 ]! r
&gt; person["Name"]
" D) e/ L: H& M8 t, R- d'Hans'" x. I9 `% f% m/ q9 F6 X1 K1 m

0 ^3 a( |& p3 Z- I9 r// 也可以使用new Object创建0 M& i( i4 V0 S: W8 S; x( k; k
&gt; var person2 = new Object()# n8 y0 J$ B. ]
&gt; person2.name = "Hello"- \: v7 P5 g/ N
'Hello'
( R/ j) M6 y8 Z6 R: n3 O&gt; person2.age = 200 c# E0 s: V  C. C8 t* Z' o  G
20
9 a% b1 B/ Q" [( t</code></pre>  |7 D) A8 N3 s3 M, X
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>" w) k, X0 p& M
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>4 ~+ f( A0 \7 V' g2 Y2 ^
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>, R" M. X7 [% K) D2 t; K. u) k# k
<h3 id="31-window-对象">3.1 window 对象</h3>/ V. Y. C8 R' U% j9 Q. h* Y4 r) B+ f
<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
7 ]; l0 S& F, p8 h: L! G<pre><code class="language-python">//览器窗口的内部高度: S5 A1 J- p, b0 v  f
window.innerHeight / x# A, V4 N0 a/ h
706
3 f- B6 ~" ?. d/ J% J//浏览器窗口的内部宽度
) h1 J- F3 d  z$ Jwindow.innerWidth% w/ y+ e/ G; Z& }0 R
15220 Z, w* n* G+ A: U5 Y5 I
// 打开新窗口
1 l! P6 Z/ e5 k7 }& Qwindow.open('https://www.baidu.com')
6 A! s, y* |  U3 @3 pWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
" L, v) Q4 V6 L2 \6 L# ?// 关闭当前窗口
; V4 }( n1 q5 v" b7 y9 G9 D/ r: p0 ]window.close() # h+ k: }' x) e8 U) L
//  后退一页1 G: F& v& I( o9 w
window.history.back(); L4 R* w  l5 G* [
// 前进一页
4 L# [& i% [5 w. [( d  `, ?7 Wwindow.history.forward()
9 b# B) i- |- D( T+ q$ o//Web浏览器全称4 \0 e; o) b0 c5 T  _* o6 `
window.navigator.appName1 ~; }2 h9 }% a9 C) A4 |8 W+ r1 a  e. h
'Netscape'. q( Y' `9 h* y- y2 O$ x
// Web浏览器厂商和版本的详细字符串
5 H5 Q- }' C* a7 L" c4 i, Ewindow.navigator.appVersion$ D+ Q  O& a* [) A3 I
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36') T# M4 f9 p3 E
// 客户端绝大部分信息
' R1 N4 B+ O: V! }window.navigator.userAgent# o' D0 X+ x, i1 d4 H. E
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'5 }! ^1 c* [+ W, U8 k
// 浏览器运行所在的操作系统
9 p2 n4 k, I- p& n. ]3 h3 ]window.navigator.platform: E  V0 _1 H# f$ b1 ^8 [
'Win32'$ O9 I  R9 _5 v' ]6 T2 w
  {" c! n9 G$ s; G0 K3 n: x5 E4 }
//  获取URL
/ L( x% x+ g/ `  o' L  w* y, dwindow.location.href
' f/ Q7 W& r$ h' _% D// 跳转到指定页面
% \  S+ N$ v3 d1 j" x5 ?window.location.href='https://www.baidu.com'1 c4 b6 T% d! n. i5 K) Q
// 重新加载页面
! }1 Z2 D* G& k/ ~& _5 awindow.location.reload()
$ `' j7 `& k- e- @% r* C# n. {</code></pre>
; m& z, R. g: c. V, u; C<h3 id="32-弹出框">3.2 弹出框</h3>
) X5 ?: ]4 U; Q! h+ @$ h/ k$ }3 N<p>三种消息框:警告框、确认框、提示框。</p>
! g3 [9 m! i" {6 s<h4 id="321-警告框">3.2.1 警告框</h4>
7 ~: h8 q) j/ B( W# Q4 D<pre><code class="language-javascript">alert("Hello")
  z. m* u- a: s5 s2 Q" @; e- D9 C</code></pre># m2 y  [6 J1 u0 K& R7 t1 M& h
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
0 S4 ?. h6 U) L9 M<h4 id="322-确认框">3.2.2 确认框</h4># Q' O; H7 m- G. n
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>8 {3 J3 ]& h2 v$ L! j
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true0 D: T/ t  x! w
true
+ n0 g3 g8 E" B- q$ e, p&gt; confirm("你确定吗?")  // 点取消返回false6 n- j4 C8 r2 J6 ?# a; I  z7 |
false
0 _5 ]' @: x2 |- o. T! ^* `</code></pre>  O! e: V* z( |" L! Z
<h4 id="323-提示框">3.2.3 提示框</h4>
2 V" J: \& X0 g<p><code>prompt("请输入","提示")</code></p>6 |* T. r+ F' x% c. }4 O+ \
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
1 f9 R1 t7 R$ {8 X<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
2 q  a3 e  V/ H  t1 [8 O* [3 V$ s<p>如果直接点<code>取消</code>后端收到<code>null</code></p>6 M# U9 r9 e6 }2 J
<h3 id="33-计时相关">3.3 计时相关</h3>
- G7 q! _1 ^/ t; u) Y2 G3 @<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
( z0 A4 f6 e: L<pre><code class="language-javascript">// 等于3秒钟弹窗
6 a. V! u7 ~, q' k4 \" GsetTimeout(function(){alert("Hello")}, 3000)9 r9 J  z  `4 U# Z
2 }5 t' x/ `% g
var t = setTimeout(function(){alert("Hello")}, 3000)" V1 T* A9 W" J5 W! f# E9 J- ~
! D+ |) `, {+ o7 R* a, u8 N
// 取消setTimeout设置) \1 A" d% z+ n2 e8 v8 X  k$ s
clearTimeout(t)
! b, Y2 ]( U+ ?' T- J8 J</code></pre>2 e7 i; a7 `6 h& l1 T  A& v
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>6 X/ \5 b/ J' _% p3 x
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>: O  p8 t$ Q1 x2 s) K
<pre><code class="language-javascript">每三秒弹出 "hello" :& m; ~' S5 {) F6 V/ ]. V
setInterval(function(){alert("Hello")},3000);  Y6 p; Q, L) J
</code></pre>  b2 ~2 A) U! g% ~) _, G' S
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>1 I5 d3 u+ K7 P$ f
<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
$ m) I" p  k* W# [, a8 f7 n//取消:
( P, b( c0 u  D8 X/ M0 y0 ^+ }. GclearInterval(t)
- ?% t9 V/ I% u  t</code></pre>
3 {4 P  ?8 I3 I+ s' ?+ y
, b- m5 l3 D( x) H2 Q$ @% ]
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-4-30 09:42 , Processed in 0.143629 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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