飞雪团队

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

前端之JavaScript

[复制链接]

8192

主题

8280

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

. K# N3 R, v6 c<h1 id="前端之javascript">前端之JavaScript</h1>
& \% p0 L/ x5 @* e* U- M# i: ?<p></p><p></p>
4 a  |: Q  B/ I& u- j! f  K- o. J<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
. S9 T. m7 O' J<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>/ `; J& S' l+ d
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
4 R- K; }+ `; n它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
9 W' V: S! ^7 O' m* D' g2 M它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>" f( N( s5 R% y: s8 |0 U
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>; l& C9 n0 s# s" Z9 z; @
<h3 id="21-注释">2.1 注释</h3>
  `) {7 `6 G6 @2 B<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>4 f) U- x5 {( _$ K
<pre><code class="language-javascript">// 这是单行注释
0 T% f5 G5 q4 p, |4 _5 C# v: ?) u7 U( U, j$ v6 Z' B( V! j' x* o
/*
+ c- b8 n  T8 c9 o$ M4 k这是多行注释的第一行," K: B7 d0 d0 o0 @5 T5 N
这是第二行。- [$ j* ]: N; \4 G* _
*/
2 I" @) \1 f' i0 w</code></pre>% z5 T, {" [' Q& C& k6 W
<h3 id="22-变量和常量">2.2 变量和常量</h3>
5 {2 j! p. a6 k! ?; ^- Z* c<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
" A  q( B" K( Q% A<ul>
" z& u$ K; Q9 ]<li>变量必须以字母开头</li>
5 y, @4 [, ^1 c5 X<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
3 i' ?, f* g! A) E; ^0 r% B! {% P<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
& {; f& T) R9 Y5 G' l- K" a. q</ul>+ N' S1 r& {# v  W% }3 ]; l, v2 f5 [
<p><code>var</code>定义的都为全局变量</p>
7 f, x; }* T1 A( ^. u: Z<p><code>let</code>可以声明局部变量</p>
9 w3 e+ D# _0 Y; m0 b2 v! F  u8 _<p><strong>声明变量:</strong></p>
; x5 r8 m" X- l: O; g<pre><code class="language-javascript">// 定义单个变量
1 B/ b# ~! @+ W; K; ?- n&gt; var name$ l- `' e$ E% M4 b4 M
&gt; name = 'Hans'  ?" z# i2 H5 l
//定义并赋值
# U8 c6 T: p7 I0 h. l&gt; var name = 'Hans'
# a+ u8 u" {  P&gt; name
; h3 Q. a( z& }7 X$ Z. v# s% w8 ~  O0 l' C'Hans'
8 m" }8 {) o% U0 e3 e
& l- a/ Z. _# b: ^, J7 E/ f% f// 定义多个变量' p1 I& w+ b4 I; M/ ^% p
&gt; var name = "Hans", age = 182 k( b6 n/ s  j5 Y
&gt; name
& l7 z% u2 I$ {7 N/ m' _& o- X'Hans'3 E0 B/ n* m: p8 s/ o" G3 |
&gt; age: K: H' j8 n9 k; j& ?  }6 {
18! S( P8 o* I- ?; U" [$ V& H

# c4 u8 b" @# ]; x//多行使用反引号`` 类型python中的三引号9 X( y2 L! Q- s: R% _2 H, \
&gt; var text = `A young idler,
0 Q$ J! d! n7 c1 u4 {) V/ z2 @an old beggar`
3 X8 X; Q, N8 h$ ^; u&gt; text5 F+ M6 @# i! N% d# ]1 m5 x
'A young idler,\nan old beggar'
( P% k7 `8 G+ O1 A4 z* P</code></pre>
' Y) G+ s& k6 k. i" e$ _/ o<p><strong>声明常量:</strong></p>: ?* N$ N+ U% @2 t
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
1 X. p- Q# {' o7 R( v<pre><code class="language-javascript">&gt; const pi = 3.140 }. C0 O# F* g* _$ @
&gt; pi7 x/ `8 `( r. W8 ?' p
3.14
8 U! h- q" J! n. M' c&gt;  pi = 3.01! I. d3 {2 G9 m) M5 C
Uncaught TypeError: Assignment to constant variable.+ k7 S7 `, v: D) t$ ]
    at &lt;anonymous&gt;:1:4) t2 c4 N+ d5 a; F

5 ~3 i2 `3 B- D" t5 J</code></pre>9 Z( x$ t$ ~2 \! ~& v5 v
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
; N& S/ X" ?7 g8 z& V- o  X<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: h4 M" ?0 _6 a4 k& s* q: r( C<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>* t$ W9 u4 A# l$ {
<h4 id="231-number类型">2.3.1 Number类型</h4># R9 ?; P5 S3 `; b6 K1 x) L
<pre><code class="language-javascript">&gt; var a = 5: m# g# y5 H" `+ i1 G! H
&gt; typeof a   //查看变量的类型  ! r; T2 P9 z6 g0 a! X8 `( T. q
number) a+ n2 B- T+ Y, P# t$ P5 T% O
  N2 R) L# _6 J& A* D1 a
&gt; var b = 1.3
. j! |' e$ V+ P; x8 m2 |9 l/ U&gt; typeof b
) Z& s0 x+ I. F# S) V. snumber2 A4 O2 d5 W$ e# G% F/ o

  _$ T2 D. F) f4 Q: R4 r5 n5 O// 不管整型还是浮点型打开出来的结果都是number类型+ T$ P6 r2 D$ K- Y
* ]1 V3 b7 l% ?1 @) }( J
/*) A& a% d, x  n" l
NaN:Not A Number
4 q5 b! b& A' b; u- n* hNaN属于数值类型 表示的意思是 不是一个数字
2 k, |5 w' h/ P, k1 y1 H*/5 }1 D3 a. H( M# y+ u8 b' U

( s+ r7 r7 h1 s% pparseInt('2345')  // 转整型
% L* B0 ~+ _7 y. I" D$ J2345
7 u8 U4 X) |4 o1 O1 L- H4 HparseInt('2345.5')' S3 Y: ~5 t: a( P5 B' E  Z
2345- K1 O0 j4 w" K4 \7 f, E5 V* a/ J7 a
parseFloat('2345.5') // 转浮点型: {; O$ `/ t/ U, Y! q
2345.5
  |. S3 G  v$ X& {" B, P& WparseFloat('ABC')# K$ M# \: {1 X+ w2 v7 T/ `0 Q% h2 }6 j
NaN
3 i/ C5 X9 r/ G; d$ o- _8 |parseInt('abc')  N( d- L" X: X; ~" K% T9 M& J
NaN- h- Y: R( J2 I: [& S
</code></pre>
. p' z9 y( k, q# T9 i<h4 id="232-string类型">2.3.2 String类型</h4>% Y$ T$ o* q/ t: L
<pre><code class="language-javascript">&gt; var name = 'Hans'# b% x+ u3 T4 B' T; F
&gt; typeof name
" W7 B; a8 B- q; Z* a2 {: i2 ~8 u'string'
! s6 z& X& s! g
9 e8 e7 Z0 f: E1 L1 I' c//常用方法" J1 i6 m/ ^' I! G
// 变量值长度
8 u6 n  H" L# G7 f2 k&gt; name.length- G) j" _" _: Z$ p" k' G. r
4! y. g6 {- l! j3 W
// trim() 移除空白% ~1 b# `6 O8 X$ F! F' p
&gt; var a = '    ABC    '
) Z, F, X  \# y9 m& r, h5 N&gt; a
, J1 ?9 L; w4 E% V% _/ z1 s- I'    ABC    '5 ]" e3 u, z: ~$ [
&gt; a.trim()9 t' l  s4 K7 ]9 }7 J. y
'ABC'
4 T8 a: `: ^9 `; s) r//移除左边的空白; O  t' G, v+ c  A8 D
&gt; a.trimLeft()
: T9 S4 t7 e+ ^6 j2 e, X3 ?'ABC    '8 ~7 Y& g  b/ }' Z
//移除右边的空白+ O) }3 `+ f$ W' q7 e
&gt; a.trimRight()
0 ~& R8 H$ i/ a8 J'    ABC'
. k0 V8 j% Z: \; E+ M
  h# r, z7 G5 C( E//返回第n个字符,从0开始
: u6 i7 ?% N& I/ \# v* p- G&gt; name1 K3 y+ j' w! L( c
'Hans'
) S( B6 c  H& b! O+ P&gt; name.charAt(3)
  n9 U8 Z% [0 [# }; ?'s'
. c  R: G) B7 c' k9 M+ u+ P9 [&gt; name.charAt()
) |) u% E3 R' k7 t'H'' f& R8 z/ A& E2 Q3 |+ g& k
&gt; name.charAt(1)" p/ I) a9 ^" d: k
'a'  }6 i7 H: x; m
% @. a+ A8 C- p' q2 M0 i/ U: g& }
// 在javascript中推荐使用加号(+)拼接
' B( d3 \' l; o! B' ~' Z! ^&gt; name
7 j) M( ^( m7 [' \1 b'Hans'
6 Z; o0 a% e) g" _5 j; S&gt; a
7 M3 [4 M: c+ M'    ABC    '/ o3 n  U0 c% S
&gt; name + a
3 y( B/ h0 b8 |$ ]'Hans    ABC    '
) l8 _' S( `; {8 V; S// 使用concat拼接
4 `  X' t5 z& J  ~& _! G; Z5 m' P&gt; name.concat(a)+ }; k# ~6 a) Y
'Hans    ABC    '3 l( ^. c5 b( R8 K

# b6 N8 h9 D' _2 A9 d# c//indexOf(substring, start)子序列位置5 i' U! o. l: z; B- L1 s4 S& `
* I* F1 d; e* }5 r2 ~3 S1 o7 R
&gt; text. U/ c+ _9 n7 J4 q! ]# S4 T8 z
'A young idler,\nan old beggar'+ v- ?# s; ~; Y; ?% N
&gt; text.indexOf('young',0)) j7 I- y' r' |" [6 d: u. q9 L
25 P; q3 `  U8 b6 N

- C: X3 Q0 F; j2 S3 n//.substring(from, to)        根据索引获取子序列
1 y5 N7 \7 W; j* N2 ^) I/ D&gt; text.substring(0,)
2 a# ^/ Z2 G+ _'A young idler,\nan old beggar'
/ D% f, \! a: o- h, Y&gt; text.substring(0,10)3 s, n) F4 W* k3 ^7 U1 h3 w
'A young id'+ [  b  A, `2 t5 K- z* E
9 J! G  I1 d* _1 P2 h
// .slice(start, end)        切片, 从0开始顾头不顾尾. @5 Q; ~, H" G/ g* E5 }7 O
&gt; name.slice(0,3)
, q8 u- W0 n% s5 Y( J'Han'+ S( Q9 G% s$ ~' D, }

# f8 k3 `/ _1 J' ?" i// 转小写
6 [: N  r3 t2 Z" `8 V  ]&gt; name2 x2 _, V, h4 o% V' R, l! L
'Hans'7 P0 N' o/ Y  E  D1 O/ O2 K
&gt; name.toLowerCase()2 b( D% e4 g( g, [* M
'hans'6 [$ P6 U9 w* O% w
// 转大写
( _7 Y7 ?: l( G$ b&gt; name.toUpperCase()
6 N1 G5 q1 A# _0 _; C'HANS'
- P' d5 \9 f% S- z5 u, Q! P1 M! E4 q. e$ a4 V9 G
// 分隔
4 C% X2 ?7 ]1 t&gt; name
; Y, c' X& f  J9 ^4 Y+ x'Hans'
. @/ _( H7 a8 {" r2 W&gt; name.split('a')
) N& T9 N$ I& P9 K$ D8 {(2)&nbsp;['H', 'ns']0 F- e3 ^! K) Q! y
</code></pre>/ x1 [" W5 L  a0 X4 Z- d
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>- n9 q, |1 \5 _' g" `
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
$ s8 c: W2 O2 {' f/ d2 P6 h<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>, G9 m4 r/ x2 x, y) ^
<p><strong>null和undefined</strong></p>
, D  i4 ^6 W" d: P<ul>
) J+ o5 A; y# b  B: O4 F% \<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
+ F& X2 d9 N3 |<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
9 [" {% G6 R  z5 q</ul>
4 I; ?9 A5 ?# G4 n  |5 Y<h4 id="234-array数组">2.3.4 Array数组</h4>. e/ ]+ G+ J, F# V9 `+ q# F1 J
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
( {+ g1 l+ E8 {+ |! O6 W0 A7 u<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
* G9 c/ M! R6 g# C4 C&gt; array1
4 V$ D5 X& d! W4 g  D(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']$ T/ t3 n' @1 j. Z; j$ U8 u& }
&gt; console.log(array1[2])  //console.log打印类似python中的print
- I/ H, r2 n; I# u2 j* F9 i1 B+ L3
  E$ T$ ~; b, ~( I/ j, k& t// length元素个数0 e: K( a2 ?! r
&gt; array1.length  i* H% }2 e5 L: f: @5 b
69 X8 W4 U/ R* _# a3 X4 r
// 在尾部增加元素,类型append5 @0 U- W, s( o0 \7 H
&gt; array1.push('D')# z4 B3 a0 s' u  X( g- n
7
: g8 k& j# X. N8 ~. p' k&gt; array11 @7 m" v9 I; F+ Z
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']9 L9 @' x' p! V. Q5 B3 u9 z; ~
// 在头部增加元素% ]. ~2 I" l  z; Y. Z
&gt; array1.unshift(0)" E4 U; p( O# K1 M8 U8 }$ n/ [
8) r" W7 _. Z3 c8 s0 i2 e
&gt; array1/ @+ y5 r+ Z& o: I* d8 z
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D'], h1 A6 G2 A5 f. G( X
, y- O4 }1 Y7 x0 k
//取最后一个元素; D# F8 |2 K2 x# [4 j
&gt; array1.pop()
/ @. z9 v6 f1 E'D'5 C: k2 {1 g% P1 I# l' [' t+ P' _
&gt; array1- P1 j; i5 W  ]' W0 @0 |, u
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']6 Z0 x+ n; j3 N5 R7 o
//取头部元素9 W+ q  w4 H& I0 ]& C5 ?. T
&gt; array1.shift()
2 H: n# C  I, }4 ~9 U7 B0" ~' ~1 r; n- V0 q4 v3 P! c. \
&gt; array1
% R( `1 ~1 l0 t+ a: a(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
% a5 o5 H; g" L6 M$ G1 Q3 Z/ a# m' H" ~# v1 l2 _( O( [1 `
//切片, 从0开始顾头不顾尾: P2 Q0 Z. G' {, D! C* J
&gt; array1.slice(3,6)
; H) l8 o7 ]+ C( N  Z" }( {* {(3)&nbsp;['a', 'b', 'c']8 f  E3 o: h- o) `! e0 \+ Q3 \/ \: r
// 反转" S/ h0 k/ X6 z' C
&gt; array1.reverse()
* f/ I0 X1 P  G1 {6 l(6)&nbsp;['c', 'b', 'a', 3, 2, 1]; @6 L. ~6 O! i8 C0 ]/ V
// 将数组元素连接成字符串' N0 L1 Y% R6 e
&gt; array1.join() // 什么不都写默认使用逗号分隔
4 C5 `) y3 X) H'c,b,a,3,2,1'
+ R+ P1 G2 }% f6 V8 Y( ~. V&gt; array1.join('')
# r# {/ d/ q& r. |) G) c'cba321'
$ k7 v) F+ f6 c) [&gt; array1.join('|')2 I) J( F6 }4 g) d# ?% v% V  w) U, d
'c|b|a|3|2|1'8 X4 Y7 V/ m  Z+ w

8 m4 q6 Q  x0 c( M7 p4 \// 连接数组$ n' p# i5 E/ \( X) R
&gt; var array2 = ['A','B','C']
+ N7 I( M- L. G$ ]7 f&gt; array1.concat(array2)
0 |9 r. c9 V  k3 B' t2 v(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
6 T" \/ D8 j" e7 g" |$ Z+ N
* f7 D7 H% a; S0 X1 e/ O3 }// 排序  H& y$ \* l! U$ P( I
&gt; array1.sort()
& O) _1 U% P' T5 c8 N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']. g: _# |% q& b+ R: _$ a
( @& M6 n9 a2 U" ?: i
// 删除元素,并可以向数据组中添加新元素(可选): f) f6 r* l! J* Q
&gt; array1.splice(3,3)  // 删除元素
' Z7 P9 k) K& z" \1 S9 g(3)&nbsp;['a', 'b', 'c']1 y7 \: Y/ J2 w! V
&gt; array1
! s5 a2 X# m' X! x5 f. P0 {(3)&nbsp;[1, 2, 3]
- u, V- |% v- T: |) J) G&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
& b. |+ @2 Q' c. n- h; L[]
0 R  W9 ~! o# o( S+ e/ f+ G&gt; array1! O; b2 C* t% M
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
3 Z3 W" I* ?+ u% T# \2 n- T( M2 O
% h- A* I4 L8 ?5 A/*
, t; M( F/ G2 L  ~) `) Nsplice(index,howmany,item1,.....,itemX)
3 x: k+ g0 E* f' @. A1 o1 q) Xindex:必需,必须是数字。规定从何处添加/删除元素。6 Y; D5 t/ K8 i
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。1 z- n, L$ ?5 w1 y, k0 c
item1, ..., itemX        可选。要添加到数组的新元素
1 |8 {# v5 ^% ]2 h*/0 D% [! G5 F8 @1 ~8 h

% Q6 R8 `- o5 M7 ]// forEach()        将数组的每个元素传递给回调函数3 [6 m9 l; |+ c/ e  m0 Z9 I$ `
&gt; array1.forEach(function test(n){console.log(n)})* G' s' |% ^) ~6 \
1
9 C: q2 \- Z# \* D* p; I, V 2
8 q) }( @& G; R5 S! r2 h1 ] 3+ c* S/ v% l0 @9 D3 B, Q7 ^8 ^
A  X9 T4 x6 Z- x; q% e/ o4 ?
B( @+ X' |; h/ J' w' V6 H8 [; Z  F5 [
C: \2 r* J, W9 ~! S( |6 N9 j$ Z
// 返回一个数组元素调用函数处理后的值的新数组. b' Y7 {6 B( y9 [% t1 Q2 u
&gt; array1.map(function(value){return value +1})  ]: N( C5 c0 J* v9 g
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
  H  _) B1 |3 m</code></pre>) H* C8 @" _# _5 ?9 b6 s1 Q
<h3 id="24-运算符">2.4 运算符</h3>* T' `& w9 J8 A" L5 b
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
, U9 H1 Y- J% T<p><code>+ - * / % ++ --</code></p>
  H9 E, m7 A" B, u<pre><code class="language-javascript">&gt; var a = 6
. P5 ~, E" I. E( y; T" I' q' y% R&gt; var b = 36 {2 \! P" d! j- G( V% @1 C3 j" O
// 加! S( |3 w* i2 o# K9 z8 `+ t
&gt; a + b
( Z4 i" w( i8 G/ K7 J% [. a' G9" a! F4 U+ \+ D2 V
// 减
' F5 I1 g4 z  ?. Q1 G" z, c&gt; a - b$ k6 f# a& Y6 X- B; H
3
5 E/ X' I; h3 M0 T- K/ ?// 乘
& M9 n) P% J0 k&gt; a * b  v( A: A( f# U  v  Y) ?
18
! K# _9 z- f. @0 Y" |4 H" N// 除
4 w7 K% Z7 c, G9 A( G" i2 B; I&gt; a / b
+ D/ ^" ]$ R6 J: f$ o, r' w2
1 H" A( N4 Y. ^' q// 取模(取余)
4 l2 \2 z0 e7 i9 Q&gt; a % b
" f8 L2 H( x. |3 O1 n# ^0
' n. z; e1 ~, P, ^/ T8 x// 自增1(先赋值再增1)- ]$ q4 @$ v0 }) W# h
&gt; a++
, O) I: O" S; V1 R: @# c" ^6
) l3 n9 s. u: _  {( l1 k&gt; a
1 K3 O+ L# a7 s5 W( B3 C72 I9 _+ |1 T" b
// 自减1(先赋值再减1)
$ i6 j9 S. y, E0 i7 J* M&gt; a--
  v. a+ A7 |; i. D: D7
9 i# s* h$ ~+ L&gt; a
* N7 u7 f0 }0 S0 U+ x6 p6$ m5 `  \9 l: F4 z7 l# N
// 自增1(先增1再赋值)# j: t. T+ L9 U; T1 s
&gt; ++a. }  ^7 ?' |* P1 z8 _( z9 I  _9 S
7
3 M8 f. h& I0 C( e. `! a" [2 T8 h// 自减1(先减1再赋值): F5 M7 v: W0 q. E% _, b
&gt; --a
5 o7 U( t3 n0 H# }4 G9 N6
0 G9 _/ V+ b/ {! p' i&gt; a
9 W4 _; `  q# h/ T6
& T# Z" f9 X# ^+ g# e
+ v4 B$ x4 `2 Z& N3 ^//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
' n- B/ S& x) a: }9 M% Z</code></pre>
0 L% x* O( P& [# Y<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
* d  x0 J3 w! r- U<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p># x7 `& \3 |% p. X9 y
<pre><code class="language-javascript">// 大于
5 |3 R% ?! c2 L4 Z3 g&gt; a &gt; b; G# w& d/ h: N2 j% @: ]
true
" G, W, J5 _% {/ x/ t$ g5 I3 |4 o% P// 大于等于
$ [# ~; l* R7 {9 k! t0 C&gt; a &gt;= b
7 Z, W. E0 |( `. z/ l! t! Qtrue$ \0 q9 ^' Q% t0 Q0 W6 Q$ _$ ]
// 小于. ^* n$ L; F/ F) |
&gt; a &lt; b2 T$ S! _" e! B. {& j
false0 Q5 `( n6 f0 h  ]
// 小于等于! ]* K0 f' k6 ]$ |/ l$ d6 N
&gt; a &lt;= b* ]* [; R$ T+ m: U/ R8 l
false
, V6 B8 S  S2 x9 b4 e  i$ X1 W* d// 弱不等于
( K2 M2 B: ^% c, J&gt; a != b( [* D" V: {9 l
true$ o$ |5 G9 d% }! C; w) r
// 弱等于
8 x# [+ D+ v. ^&gt; 1 == '1'
+ _$ d* s9 t% [9 D& H, w. n1 B* {& xtrue
* b( c% ~2 \* L* A' q, Q' d- M// 强等于) \( ^9 Z. n" T$ U) B
&gt; 1 === '1'
: ~3 l1 z3 K1 `; d2 y- e  Q& ?2 kfalse5 D3 o9 I/ v& j# J: e* |. `. d
// 强不等于
5 \2 {; e) K9 {: f0 c&gt; 1 !== '1'
, S  T& P5 [$ ntrue
  P8 N& y( r/ `8 |- n# M$ b
3 \2 O7 }# R# h4 ?/*
4 I& [$ A7 Y- A% ~, q) KJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误' f# ?$ b; p3 L/ a: w
*/
% C0 C0 a$ r' Y. M</code></pre>% O: J5 M6 a- f* P. f
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>) [# F) R3 O  y& S
<p><code>&amp;&amp; || !</code></p>/ p4 k, ^. v* r6 I; ]9 y' \
<pre><code class="language-javascript">&amp;&amp; 与
- _  [" v5 o: l|| or # i6 x: k+ m5 g
! 非* y) l. ^  G; [. p% b4 L; Z  l
</code></pre>: E, X5 Z# K) n" X- ~) O
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
8 A! `7 F5 k$ F. u$ H- ?<p><code>= += -= *= /=</code></p># \% x( _, ]" c8 T3 n
<pre><code class="language-javascript">// 赋值
2 a7 X8 `, \; N* [2 Z0 S&gt; var x = 33 n5 L$ h4 f* s7 V
// 加等于
7 y% q( D1 H! c4 A, Q9 n7 T' |&gt; x += 2/ ^; M) e$ l- S9 e$ v# }' z6 r
5
* {' C% o2 {4 w1 n# c. O$ |// 减等于, P( @+ N) Y3 t
&gt; x -= 1  [) ^6 }( [; Z3 B
4
2 Z' k( n; ]8 D3 d% R# |& t1 W// 乘等于
  G5 ~# V. S( @2 h0 g9 e&gt; x *= 27 M4 X  `, D/ V# R0 k7 @5 p
8
2 N& L4 V# B- O3 o// 除等于0 i  m2 }! t4 i
&gt; x /= 2
' G$ f1 Y. F$ i, m8 x6 l4; w  ^( ]4 d' }, ~: u
</code></pre>
% R8 O( d+ c0 e<h3 id="25-流程控制">2.5 流程控制</h3>
4 {! v* w6 r5 }<h4 id="251-if">2.5.1 if</h4>
( t' O5 }8 e7 @1 i1 H8 d" j<pre><code class="language-javascript">1, if(条件){条件成立执行代码}+ i8 t+ \  ?4 E& V$ g
: s" F+ n9 w* S( v8 B8 Y6 R
&gt; var x = 3
2 b" ]( [- R+ u! l8 P7 Y6 n+ V& _! |7 w&gt; if (x &gt; 2){console.log("OK")}$ t3 {4 D$ O  a( Z/ m' `, h6 t) {
OK
' C" k% {# u; q- P  ^% K2 Y. V4 _8 S0 O3 h) u$ c" Y
2, if(条件){条件成立执行代码}
9 O& o; z1 e: O  b5 B( @        else{条件不成立执行代码}4 X6 H& p5 F! K1 H
8 |: v0 y5 Z$ {$ Y. Y; A' q8 n
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}7 p' E2 T1 j2 T$ O1 Q$ n+ D6 B
'NO'+ h1 H4 t3 F. r! l; s! f; u
7 W% ]: ^1 u, H+ _
3, if(条件1){条件1成立执行代码}
3 p  X- O; R, ~, B        else if(条件2){条件2成立执行代码}
: o# {. }: r( \$ ~3 n, G  ~7 P* X    else{上面条件都不成立执行代码}0 v3 w1 a1 ?5 R5 q+ N, `1 a

. y  R, \9 E. z&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}+ b1 r+ K- q( c' I1 B
Ha
0 w/ s  ]0 W/ F4 F0 c) l4 Y' P8 c</code></pre>
% u6 Y0 C7 r4 S4 |6 o<h4 id="252-switch">2.5.2 switch</h4>  j: I1 l0 ^7 U/ `$ Y- {$ F
<pre><code class="language-javascript">var day = new Date().getDay();
( D3 ~8 X7 o  K% uswitch (day) {& B, X) G3 b, v$ L9 U
  case 0:4 |2 _2 M1 N% O9 P: n8 O' L1 r! \
  console.log("Sunday");" D" o" {$ m* K6 i8 L0 J1 b( W
  break;
3 x3 l: J- {, D  o5 i" i  case 1:: o$ |) `: [/ V4 u. a
  console.log("Monday");; v7 Y: r, J* V- i
  break;
) j  M% u: D$ a' i* H9 u- v' s; P4 adefault:
7 V0 ]8 w- }. f4 o, S, f  console.log("不在范围"), q- E# g2 z$ \! S- i. |  O, a9 C2 H
}$ |  `( y. ]# x8 ~9 z1 u3 a; @
不在范围
& _4 @# ?# z8 N! E5 z</code></pre>
& V; [0 j8 j: s6 X1 K# n<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
5 r% K8 B! O& r7 N. G1 t+ `<h4 id="253-for">2.5.3 for</h4>
1 D0 R  d4 V2 B4 U# O<pre><code class="language-python">// for 循环
* {# @, L1 h- ^        for(起始值;循环条件;每次循环后执行的操作){
9 r5 x, P: _; C3 Y4 q+ Z* T        for循环体代码
1 C% C$ ]. [. C/ S: h4 s    }
4 g; V/ o6 `9 k# o$ \" j0 L7 z2 O
1 H! }$ R1 o5 Tfor (var i = 0; i&lt;10; i++){$ s8 [$ U$ \# K2 j" f
    console.log(i)4 ]# ~9 k) R1 Z) Q8 l8 F3 F
}
: y% [; F7 {! N/ f: B        0
- }2 `! O: l/ E5 N% H        11 v3 [& z) y9 V( J  H% _/ }
        2' V  m0 z9 ~9 V" a" n# T
        3
" {% n" M; b% U        4  ^0 l$ H: I& d  w7 D
        55 @- T! J2 W' L9 E
        6
! L2 U- _) A2 b        7
6 s) ]5 V. _& c. H) N) s  y' O* p; C. ^        8
. i* k. X* X9 w2 ^& C  k2 Q. \        9" _1 v7 F; t9 o! E5 }( T
</code></pre>
  q% G% t) ~: i, m3 d/ C<h4 id="254-while">2.5.4 while</h4>
1 ?, F' q# F# M/ W" x9 w3 L<pre><code class="language-javascript">// while 循环
% R+ C" r3 s% w        while(循环条件){
( y8 j4 [( l# H) A        循环体代码6 y4 E: p$ o" m5 t- y
    }/ P4 W/ M$ m7 ^& I0 C- ]

9 M) g; O4 W4 K&gt; var i = 0
, @8 B5 B8 r! t( p, H, s1 ]4 o; k&gt; while(i&lt;10){
0 l" V( k# x5 [  a    console.log(i)" n/ G" ~( k& C+ |
    i++0 f3 s) M$ k8 w  H! R. u
}
( v8 j8 a  k6 X3 _+ c* c6 c, ` 0
5 {1 y% I/ u' M: w4 v9 x 1: w5 @' K9 ]  w, P0 ?
2' S- c# f8 H; a8 R- y' @
39 O4 {3 n  y3 _  t  h3 k0 M
4
' ?' w$ Q; s/ `& i% h 5
' D$ B3 q3 x8 U  N 6
6 O- A' Z; ^4 z$ | 7# T/ I3 ^4 {2 i
84 S* _. G: c9 }' a& ?5 B
9
" Y5 h9 b- N1 X$ F</code></pre># V( O; J( C( }0 W& P
<h4 id="255-break和continue">2.5.5 break和continue</h4>
$ g/ Z' A' B6 D6 b6 W<pre><code class="language-javascript">// break8 g( [7 g( k; V! j' }+ D$ K9 J
for (var i = 0; i&lt;10; i++){7 t8 a: D- [* H/ a" g8 A
    if (i == 5){break}7 M3 z! W3 m# ~2 k0 s4 I
    console.log(i)
/ t& l6 \6 W+ q& X& e7 h}
; ], ~- f. ~' m9 g: p6 G# C 02 R' S! U- E5 k: Z9 e! [; C
19 v3 U5 d) p( Q2 S  r$ C
2
( o% \$ Q# t5 h7 M' l8 g- r 3
% z- A; @" Q8 |" } 4. I7 B; X$ W- D8 m) s; i
// continue; U" O  R' f5 ]- q
for (var i = 0; i&lt;10; i++){$ x3 ]" [7 r! q8 ]" b
    if (i == 5){continue}0 W& M2 o2 j: }0 O- B% e, n
    console.log(i)7 L  {( W0 {4 l# I6 g
}
3 k" W2 T% Z. y4 J! v4 Q 0
& g, _; ~1 e; m" k 1
% J# s% m8 h  C9 [9 l2 }$ { 2
! _+ i% W& C7 A( y- ` 3
% o  [3 e" f' P6 l# F$ z: O) m4 R9 \ 4
( l* T0 ?4 G- R 68 `" L$ _% ]6 d- ~% l
75 ^9 s1 `) H  j5 M
8" _$ @+ R+ E3 [" b! s/ I& X
9
5 A" @2 p$ A8 m% M6 @9 Q
7 B5 X: t4 x/ Y</code></pre>9 V7 ?* i) A: E6 h4 g" Q' ?
<h3 id="26-三元运算">2.6 三元运算</h3>
, `9 w: h# j* Z8 |9 i<pre><code class="language-javascript">&gt; a
6 P% U/ q& k, Y  P) e! s6: i' V/ M9 q0 t' f- @! d! s( h, M/ O
&gt; b
; F; Y9 U' A1 P3 `$ o3
) d  u8 o7 {/ F& _2 x3 Z( |  a. ?: q$ m# p+ A( R6 V% f" E
//条件成立c为a的值,不成立c为b的值" B7 a3 l" e& w
&gt; var c = a &gt; b ? a : b- ~0 f; y3 a$ H
&gt; c6 [: ?) S, ~" f6 A# T, ?
6
  p( v  T  Y+ W
% W) P( G: E3 Y, f0 J% C# B// 三元运算可以嵌套
: ?; E1 z2 p- D8 S* t: K</code></pre>5 i/ _3 v4 n8 |/ c! u* b
<h3 id="27-函数">2.7 函数</h3>
1 g) J0 l9 O  J; f$ |* ]<pre><code class="language-javascript">1. 普通函数4 U0 E" z: V3 P8 ~3 y$ E! O
&gt; function foo1(){
+ m* V0 W+ Z0 _" F' \! P8 x    console.log("Hi")
( U' A8 |0 q; F$ U  B' M3 E}
$ z* Y( \3 V+ x; G% t' Y; L  x4 F2 R% o3 n! X1 W
&gt; foo1()
! ~3 B0 {1 l, a; H3 [% ~) i        Hi
: K! q) R- M/ Y# j- k2. 带参数函数8 T8 m* X! e: W. A6 P$ h
&gt; function foo1(name){" w, s' M$ ?4 E0 q1 a2 S7 @
console.log("Hi",name)
, R: g# c% B9 [  c% f}
4 R, j: s& |: Q% x
/ n" u. h/ W$ `&gt; foo1("Hans")
/ g( y+ V# a4 SHi Hans
+ {# N' b/ V/ l1 t. D" t1 k9 A0 \. r8 D2 _$ I  s) o/ w4 e7 n
&gt; var name = "Hello"
# _& f2 e! {0 L$ Z&gt; foo1(name)* Q) C0 q) T  F
Hi Hello% [' I  i  ?9 @
/ \+ X: ?/ J" F! ^/ [8 C
3. 带返回值函数
( R! [" D2 N  n5 l4 R" ?' y8 _! Y&gt; function foo1(a,b){
! s: H. f- e- z$ |2 c: }        return a + b   0 K' I7 H. f# M" V+ F
}
9 w* o8 z1 P# f% w0 {&gt; foo1(1,2)# D& U  x5 @6 i& E1 L* g, B: L
3
; J* p  o. |; g( }# D&gt; var a = foo1(10,20)  //接受函数返回值8 ^" C" P( R: K7 i1 D# L
&gt; a7 ?# r6 b$ }# K3 X/ c
30
+ |+ N8 K6 B2 Y$ ]% |, H2 W
3 e8 B. C% h5 |6 n) ?; c4. 匿名函数4 B9 G' c+ i+ V3 h
&gt; var sum = function(a, b){5 j5 `3 g, c3 @, ?
  return a + b;# P9 ~+ X  j* E, J- I% N
}
9 B% @7 C) ?+ K" l7 H&gt; sum(1,2)1 Z% P" J. @: ^- M( t
3
' V5 ^" x8 v* B( q  J. ?2 @, D  I; l4 a- ^
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱) t1 @+ R4 V  |, c$ q, x; g
&gt; (function(a, b){0 |+ d" |$ y- u, x4 F! U
  return a + b
$ K! ?% M$ X5 g6 {7 [/ ^7 B})(10, 20)
, E: A0 }1 Y7 L5 a. v! t30
! U0 T4 x- S( @. b5 P7 R$ _% y  o: v- U. m' E! N$ U
5. 闭包函数
  l3 u9 d) L: l// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
( H; V. W' Y& _5 }' Cvar city = "BJ"
# F& Z' d7 ^, O% F7 d2 _8 mfunction f(){  e7 B  J7 q0 N0 D* o9 `
    var city = "SH"
& C( M. i, D2 p$ \, u    function inner(){/ C7 Y' E9 _: c* K
        console.log(city)4 `1 X' C+ t* D% M, H. ~, }: }
    }/ u$ `8 u% W8 X- e2 L7 q5 n
    return inner$ S9 C4 C  L' `
}7 F- ~! j' _5 D  ~$ R1 N$ j
var ret = f()
( N2 x$ A( [6 C- x) G* {' Wret(), a7 H3 L8 [9 I: U" z/ s/ h
执行结果:4 ^5 x& R( w0 c" _& H
SH- e6 U) `; E9 w0 A+ p: i% R! `

; D. S! E1 W. I$ z" W% V</code></pre>3 L5 z* O  z5 S8 d
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>0 l. }- g* H$ _" J- ]& e5 H$ \
<pre><code class="language-javascript">var f = v =&gt; v;
0 |4 H. x3 q- Q" h7 d- H// 等同于  [1 K- p' E5 S. V2 ~" n) q$ Y
var f = function(v){) h; Q: Q1 W. d4 b
  return v;
. J; @9 w, l( _" C8 ]}  Y2 h5 f- K1 c% ^0 K% ~/ ?6 ]" F+ M
</code></pre>
. i. i/ v/ L, t- C( e9 _* Y& x<p><code>arguments</code>参数 可以获取传入的所有数据</p>& F/ ]$ N# ~; N2 ^
<pre><code class="language-javascript">function foo1(a,b){
" S' I9 B0 \3 e" g7 [; K6 O    console.log(arguments.length)  //参数的个数
+ L& |) J. E$ X2 a: q6 v& _1 }    console.log(arguments[0]) // 第一个参数的值
7 ^  [! b! S5 ~1 P( P# u" x        return a + b   * {* i* R; T/ ~( U2 r
}3 V% G2 J* @, [6 ]' O$ U
foo1(10,20)& }6 L+ K6 _5 a5 j3 e
结果:
1 \  R" z- T* J$ t 2          //参数的个数
  Z# x- `9 E! l( X3 o10        // 第一个参数的值
% U  ]4 @/ X( `7 a3 x4 V: n8 g30        // 返回相加的结果) y' D- o0 Q& F1 ?3 t- R8 L6 u! p
</code></pre>& o8 a0 g2 h5 w- |
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>% L/ J% h5 i* j) W) ?+ m0 J+ U* O! L
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>! d4 ~& h* y8 L7 h8 P7 |5 j
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
  y9 y' ^  T$ r8 q<h4 id="281-date对象">2.8.1 Date对象</h4>
: v% h& Y0 p6 \; B& l  g5 _- l$ A<pre><code class="language-javascript">&gt; var data_test = new Date()
9 j% Z& _0 l! E) L+ x&gt; data_test
. r! O6 x! ?" E( {Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)0 O6 V. |, \! c2 S7 ]* O
&gt; data_test.toLocaleString()
) A8 S. J: W+ }$ ^3 F. {" O'2022/2/11 下午9:44:43': _" ^/ X0 I7 x2 e' H* [7 ?  N

7 @- |! v! d# |, }2 _& X! y&gt; data_test.toLocaleDateString()& i' F5 k' g3 J5 Y2 L
'2022/2/11'  z7 M: f) s2 O% Z+ j9 |
+ H( N/ c: L& L& s# I
&gt; var data_test2  = new Date("2022/2/11 9:44:43")( ?7 r( W& l, y5 z$ `4 }0 M  {
&gt; data_test2.toLocaleString()
( f* T+ H  ]1 O: ?1 e'2022/2/11 上午9:44:43'
* |4 [4 s: e2 n0 Q4 E8 l7 @5 f4 l7 a( V" z$ A0 ~) [
// 获取当前几号: ^. k9 j  h4 E
&gt; data_test.getDate()/ q7 V- W+ y1 |7 U
11
5 w# z0 h5 ^+ G) L, l. ^// 获取星期几,数字表示) b: e1 W, x# F# W5 ^
&gt; data_test.getDay()  + [; t; \8 E3 n% D3 |8 p2 p0 m7 h
59 V1 ?. A" G$ v: N1 O
// 获取月份(0-11)7 p+ L- |4 R( R) E% B% p, U3 {6 W1 z
&gt; data_test.getMonth()
5 R# O! P2 }' Z1 H1 y15 ?3 U. t5 U& z
// 获取完整年份+ Z- K+ z" o) s9 B) ]
&gt; data_test.getFullYear()" y' }( w$ C/ l+ ]) \0 \
2022
. e5 g, `8 i9 Q' o7 o4 u// 获取时
5 ?# H+ b+ M# `. y  q2 T&gt; data_test.getHours()2 z+ D  _0 Y+ R) P, f/ N
21
. c  ^4 u' f# O7 N% A// 获取分; n( F5 L! `' @3 X1 _1 C5 I
&gt; data_test.getMinutes()
5 n) o: g8 Q) Q' N442 W8 X5 Y" ~  u% g7 {
// 获取秒& L2 {$ `: A  H; J( w8 `
&gt; data_test.getSeconds()4 N% L4 C, t2 S1 V, `8 k
43- j' w& q7 \' q8 F: I
// 获取毫秒
3 A" o6 G) p; n& Q. ?&gt; data_test.getMilliseconds()
) e! y# O* l0 h9 b6 D! |290
, x* k; U7 \: Q: t3 D7 R// 获取时间戳
5 }" O6 O$ B) {6 A&gt; data_test.getTime()( E( X2 m# |- K4 G
1644587083290& L! F$ @2 k6 _1 ~
</code></pre>
% j: M9 L3 J) A5 J/ a<h4 id="282-json对象">2.8.2 Json对象</h4>
4 X' }4 T0 m  J4 w. ~+ T/ M<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
/ Q4 l; r! G7 YJSON.parse()  // 反序列化,把JSON字符串转换成对象
  \: o; _1 g8 B: x1 j6 }" ~9 E  ^$ N$ H. t# z5 h+ e# ^2 w
// 序列化
% q4 `' d  a, l. x$ F&gt; var jstojson = JSON.stringify(person) 5 c& M4 |% r  l/ F5 [2 x/ Q$ Y
&gt; jstojson  
6 e1 ^4 i, }& m/ }0 ]9 L'{"Name":"Hans","Age":18}'
6 K2 g6 x; K, v
* ]( Q4 m: N( b" ?6 ?// 反序列化
$ J4 C- F0 x. Y% j" O&gt; var x = JSON.parse(jstojson)1 ?3 o# U+ N: a
&gt; x, G; l  B: q5 W, T# k* Z
{Name: 'Hans', Age: 18}1 o" v; r' K  I+ t8 b$ Z) C. u: ]
&gt; x.Age% z, A- K/ F5 Q9 ~3 i7 u
18  @; V) c4 g  }8 {) E
</code></pre>
- x9 [- @8 G/ c+ }% X! x<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
$ e' [. k& Q% O5 m7 W) t<p>正则</p>
% C5 P7 U3 Y/ v8 V+ p2 l6 W<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");* K2 p' c" i7 t
&gt; reg1# w: F5 ^8 Y3 Y, R6 A9 t3 G. {8 m
/^[a-zA-Z][a-zA-Z0-9]{4,7}/, S4 s6 }, C* x# N
&gt; reg1.test("Hans666")0 I4 ^$ o- O- t. I+ S6 I5 i) {
true
+ ]* B% N) U: @9 r" p" V( V/ d' b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/4 Z7 m4 U1 `; H* \$ m0 G7 L
&gt; reg2
: M3 l4 j. y$ S; m4 d0 m/^[a-zA-Z][a-zA-Z0-9]{4,7}/
% K, e1 x1 g+ I' F) }" S&gt; reg2.test('Hasdfa')
# J( Y  r0 d0 t' ptrue% |- i! I. t( N% E
1 p) S+ P: L  |! o4 e
全局匹配:1 C0 j, ^8 z7 ?; Z: W% t
&gt; name' t+ N0 y2 y9 B  u" D2 f) z. B
'Hello'/ _" F, _! o/ g: D1 U- ^3 k+ c9 ], U
&gt; name.match(/l/)
2 E. n1 @$ z1 H# A- |['l', index: 2, input: 'Hello', groups: undefined]2 f  J5 a7 J; C! M( _
/ n) z5 H  l4 x; _) R" e! T8 D& V
&gt; name.match(/l/g)! x6 z/ @+ z$ y  Q0 g) J. ^
(2)&nbsp;['l', 'l']
2 u' ^3 h, H- u" ~// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
! S% }0 x. \0 P, A8 U2 U7 u. T
* m2 P$ u+ f" _! c全局匹配注意事项:
3 z: @- r$ M1 O$ A4 C&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g4 j$ z1 P! F3 H/ u( V; _) k5 b
&gt; reg2.test('Hasdfa')/ ~$ p6 G5 U  @
true. \! ^) ]& M5 a5 u; B
&gt;reg2.lastIndex;- a% L* v+ @) a# {
6
: \$ Z+ M* h1 H3 e, D" r* L&gt; reg2.test('Hasdfa')
& u4 z1 V: k& R2 I7 |) xfalse9 C) f0 @2 M/ H4 S$ ?
&gt; reg2.lastIndex;. F# u) ]3 W9 w' d
0
) ]$ _- U, d# w&gt; reg2.test('Hasdfa')7 r6 e( U. O$ m4 q
true
2 U  z+ a  I3 j9 t5 f' P9 \&gt; reg2.lastIndex;( ?6 ?# _: {8 n9 |5 X' r
6
) [  b, y# D: S9 U/ r) o$ l&gt; reg2.test('Hasdfa')4 }$ g8 D% `2 `- X; O% @
false8 }+ F4 ^0 ]. h! ~5 P3 z
&gt; reg2.lastIndex;+ w% g' t/ p" v6 M5 f- a
0
& D6 B3 n' ~5 n$ [: U6 a* U// 全局匹配会有一个lastindex属性
- ]/ z) s) j) k&gt; reg2.test()1 q7 I5 ^8 M+ _) }, }
false0 A8 Y9 ~; \7 g& e1 @4 {
&gt; reg2.test()
. A( @+ ]! r6 ^) q/ r3 s/ y) ctrue
& K$ h# U7 D+ O9 Z7 V4 e( [) G// 校验时不传参数默认传的是undefined
( p; w+ u& a, O! a, S6 o# y* z& ^/ O</code></pre>
) k4 Q5 ?4 g# q; R( M8 V- T; l<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
0 O) \8 Y+ \- r7 s% j3 x" P9 ?<p>就相当于是<code>python</code>中的字典</p># W% W" n7 p7 v; D9 q+ O1 [
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
/ C; ^- J* g% \0 Y: w$ I; d6 Y&gt; person
# ^3 Z$ l5 F0 o4 A{Name: 'Hans', Age: 18}5 e% }8 D" O& z  R
&gt; person.Name' Z7 E) p* S% l% N$ o
'Hans'
( G8 a% u  D9 q, A$ E" q&gt; person["Name"]3 G& M/ P1 A5 A$ o: m
'Hans'
3 g/ r) M: i% C0 m" N% E; @. ]- z- @% a
// 也可以使用new Object创建
* p' i' }2 P4 ^) C&gt; var person2 = new Object()5 t' W8 n  E; ]; G7 F
&gt; person2.name = "Hello"
, h: E, U1 U5 {: L* V% w'Hello'% O; D7 I8 i: L* U
&gt; person2.age = 20) s! e/ Q; ~6 i* j% \
20
0 y" z0 E( x! R. z</code></pre>
: v" E3 f: s& Z* R+ }% G<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
3 H: O2 D$ v3 z/ A, ]/ o( g<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
: T( e5 T2 a/ m$ V( I<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>3 \3 [9 D+ S  j
<h3 id="31-window-对象">3.1 window 对象</h3>
) B5 O% f$ J  a8 n6 y<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
$ L; B( n8 b* z- }<pre><code class="language-python">//览器窗口的内部高度
3 x7 P4 K+ p4 [, \6 @% l$ C1 Lwindow.innerHeight
* l* q; c$ c0 J& j, j7063 O) U& S5 h$ s4 S
//浏览器窗口的内部宽度) m1 r4 M5 t. R$ h! {
window.innerWidth3 R5 a# y1 v! \1 V: a) ?
15228 c* f+ e4 j+ M
// 打开新窗口
0 |! }  H5 a' `/ |5 B. Rwindow.open('https://www.baidu.com')
" z. H  g8 i' |' T! u7 N! ~Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}# c( X) U$ K) A0 R
// 关闭当前窗口, F' {6 Z) R2 d8 @
window.close()
2 l; z' o+ x& k' e& \//  后退一页
( U, c8 ?- D4 l- A5 Uwindow.history.back()
2 m0 M1 P8 D9 q6 t// 前进一页
! ~2 m- H+ C& Zwindow.history.forward()
3 K; P2 J/ q* u/ @//Web浏览器全称& g2 x4 d7 |5 W! Y. K: y: B
window.navigator.appName: o7 I4 }+ y4 f( S) [
'Netscape'
( J' a, j- G+ L& _1 q+ q: l// Web浏览器厂商和版本的详细字符串; ~- H0 n6 H# O
window.navigator.appVersion' G, G- @. h  F4 B! G, W
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'2 r9 E8 G9 f9 Y' {6 @1 M
// 客户端绝大部分信息+ D/ D+ B1 G- J" R$ L
window.navigator.userAgent7 f2 Y: o1 v. \  g+ f
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
# e( f. m3 {6 d; M// 浏览器运行所在的操作系统
! ]8 ~8 T5 p1 H9 v: A: awindow.navigator.platform
# P% n6 D! y0 M- U1 @'Win32'
% K* y  @, c: {- U3 K) _% d8 N- K( {: t
//  获取URL
4 m" l! p) k6 e2 k( ~. Cwindow.location.href
  }9 |" D0 v8 @' y0 L' x8 z+ D// 跳转到指定页面
: }3 u" _- L2 L- x! K% |window.location.href='https://www.baidu.com'
* S& C! P  j0 ]* ~// 重新加载页面
4 \) l6 s; x7 {& }7 Owindow.location.reload()
# ^7 c4 \* x9 Q$ O9 c+ o  F1 W7 F6 F2 T</code></pre># |3 t  G, T, n+ U8 H# i
<h3 id="32-弹出框">3.2 弹出框</h3>6 _! c. L3 `9 r, i2 z
<p>三种消息框:警告框、确认框、提示框。</p>
9 D" Q! U$ e. }( W+ y& a3 T<h4 id="321-警告框">3.2.1 警告框</h4>* [, H& B9 E8 A3 F( P
<pre><code class="language-javascript">alert("Hello")1 H5 U5 O7 S6 l1 H
</code></pre>
" G6 l$ V' }6 L* v- d4 T' [* [<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
" o1 c; X) `' ^7 F5 F5 w4 \, A<h4 id="322-确认框">3.2.2 确认框</h4>: P! t/ y# k8 T, Z/ Z( C
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
0 _- B% t1 N" W/ d1 s2 ]' K<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
7 o- z! P: h! h0 y4 ]$ |true
) {* e* l+ q' K$ D&gt; confirm("你确定吗?")  // 点取消返回false
9 P$ m0 g0 q+ `7 Y% Xfalse( z8 [9 a9 K: E; t
</code></pre>6 X" f4 F! L) x% \
<h4 id="323-提示框">3.2.3 提示框</h4>! ]+ w* N  G2 R9 @# A/ }
<p><code>prompt("请输入","提示")</code></p># x3 {& S1 k/ c# }. l% t( s) r9 s
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>9 r; ]/ @: O. r1 d; R
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
. J! m/ P( G# I- ^& l+ s3 a<p>如果直接点<code>取消</code>后端收到<code>null</code></p>, Z0 z/ q# g4 z" f
<h3 id="33-计时相关">3.3 计时相关</h3>" z1 E/ q% s+ b4 t( k( z
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>( ~$ ~1 P' c8 E# l6 z9 H
<pre><code class="language-javascript">// 等于3秒钟弹窗6 V1 n( q6 _1 n) p
setTimeout(function(){alert("Hello")}, 3000)5 `$ x: L2 N4 ?9 d: ~
; O2 P) B! J) v3 L- [) c! i( t6 c
var t = setTimeout(function(){alert("Hello")}, 3000)! S# f; O7 U' B3 j

% ]. Q* N' L' S' }" O2 {// 取消setTimeout设置, }) k# S8 {) h' ~7 {) s/ V
clearTimeout(t)
$ e; ?4 K0 {- D1 x* P5 p. }5 W5 b</code></pre>* R) |" L4 c& S( `3 d: ^) H0 t4 K2 i/ W
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>2 Z% Y( x5 M7 k6 [7 ?
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>6 @5 M: F. k, b
<pre><code class="language-javascript">每三秒弹出 "hello" :6 s4 P9 G4 \) k0 Z
setInterval(function(){alert("Hello")},3000);7 E& D- h4 c( Y$ y
</code></pre>
0 Q8 ?/ ^2 }" K: U4 I6 |) d. @5 |<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
' T/ T) j9 _) @# E8 N0 O; u5 P2 ]<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);# Y7 p; R% c3 R0 v
//取消:& E; `' @! @1 T( {* ]9 B. b1 M
clearInterval(t)( {, m6 `: H+ A
</code></pre>
; ^8 o+ |* Z& y# z/ k& T. B* q  g, `0 e% ]! s
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-1-7 22:09 , Processed in 0.073572 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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