飞雪团队

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

前端之JavaScript

[复制链接]

8483

主题

8571

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

3 j2 ^* M  g" T; q5 @. `# O0 v<h1 id="前端之javascript">前端之JavaScript</h1>8 p8 e' e9 _/ J4 L) s& L5 f
<p></p><p></p>
$ \; L) j" k, t2 R! r; X5 l# U7 u<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
, L% C1 Q' ?% u( c# ^<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
; v/ H7 n% f' X* w6 u7 f. `它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>0 X! {0 j8 }# `$ H4 c# j
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>  W" Q9 v5 T! q9 G
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
7 B& q0 S/ L( ]' ?<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
, a9 `" h& Q; R1 b<h3 id="21-注释">2.1 注释</h3>8 s( h1 \$ T. i; n1 R1 b" U
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
0 I" j3 T, j" J/ |<pre><code class="language-javascript">// 这是单行注释
4 H2 Y) u6 u5 c2 X+ N( V# l2 z0 z0 j; T' I' w
/*/ h, @" a; M. Y. K* z
这是多行注释的第一行,% O2 F5 L, |$ u! Y. v+ B3 S! O+ k
这是第二行。
. K' l2 I9 ~4 X2 `. d/ @0 |" h*// t0 W+ M  z$ Q3 F* l: e
</code></pre>8 u* |0 [4 N" J
<h3 id="22-变量和常量">2.2 变量和常量</h3>/ m& E: A. m  Q: s$ F
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
/ f* p4 S- f: e' g: e$ I5 V' i$ M<ul>: m% n' S, |  c& a
<li>变量必须以字母开头</li>
$ C  [; ~9 G5 \9 V6 f% \  J; h<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>" i# z. ?% Y& m$ I' c. V: r
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>% z* W* ?$ ]7 S  R: T3 Q
</ul>
5 A8 `9 P# S: e$ d5 ]# O<p><code>var</code>定义的都为全局变量</p>  c2 a2 v5 _& M' _: u$ q
<p><code>let</code>可以声明局部变量</p>3 O; Z' D) z/ {; Z
<p><strong>声明变量:</strong></p>
  Q4 H. @7 i1 ?; T<pre><code class="language-javascript">// 定义单个变量
( z! b+ y' O: R1 {/ q6 c&gt; var name
7 E/ c. ~. M1 n* }( ^&gt; name = 'Hans'/ K5 c8 M  Q! O: _( M* n
//定义并赋值
& Y2 w! n" R5 h* c&gt; var name = 'Hans'
* P7 ?" J4 }6 c  Z" K&gt; name
' e# |% Y/ P$ R. P'Hans'# z5 q  {. c& t, U& ^
/ l4 I  s9 E; ~3 A
// 定义多个变量
* x7 @, q4 f5 N* d$ b&gt; var name = "Hans", age = 18
# r8 z0 i4 f0 _$ e5 a  F- e&gt; name# t2 z; `1 q$ G' j. C# w
'Hans'
) b8 M$ P8 x8 y; o! a4 s! k&gt; age
3 G, L! d5 ]) d187 B! D! M* w) U' D

! k- d; @& `. q+ o. J( y# g2 H//多行使用反引号`` 类型python中的三引号
- \$ i, b* A6 N8 m0 {, R8 D&gt; var text = `A young idler,
. ~9 e; a9 V! yan old beggar`; ^, o/ [, g  U; C- x# [
&gt; text
& D! `4 X) h5 s2 \  U4 B1 ~4 B# U'A young idler,\nan old beggar'; V) {; |% t$ j) w( k" m
</code></pre>
7 T) T" A, v+ {. Z' O<p><strong>声明常量:</strong></p>
$ N2 V% @& G0 V  n7 v<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
) r, W* P' `" U  s<pre><code class="language-javascript">&gt; const pi = 3.142 J5 v) w0 \; D' ~% z/ ^
&gt; pi
2 m8 X7 Q- N8 w4 j- V3.14
: z- E) O( k5 u# a) h: e7 f8 n&gt;  pi = 3.01
; H0 o# J8 P/ B' |/ C+ |; J+ kUncaught TypeError: Assignment to constant variable.
/ L9 O# E% p4 |1 Y& C+ y    at &lt;anonymous&gt;:1:4  r4 {7 ]7 r0 T3 k- v

" A  l0 m2 I; S+ T8 T2 `2 h" F5 F</code></pre>8 s( K5 V" @9 M8 b! P+ m
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>! ?; C% w# ]+ J( c' o
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>- f4 Q. Y; z! [7 U& M3 m- m! j
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p># {# r$ S3 T1 u. G: Y
<h4 id="231-number类型">2.3.1 Number类型</h4>
( {; ]7 f: A! ?<pre><code class="language-javascript">&gt; var a = 5( F8 P9 |4 q6 S5 w9 z
&gt; typeof a   //查看变量的类型  
- Z/ \# f* N; H# ?number
. J& p& V7 C5 C6 }+ |% {9 r5 }0 G; y1 f1 y0 K/ t
&gt; var b = 1.34 _; X4 _7 X: o, O1 B; z
&gt; typeof b
7 v8 R/ L& I2 G2 m) K, I0 cnumber
& N$ r- i: j# v2 h, j$ Y, Y
( l* V/ G; N, C4 B// 不管整型还是浮点型打开出来的结果都是number类型
# U4 j. f" ]3 E1 p( ^  r  q+ ]
+ ]+ |5 N0 [, Q$ E3 a- I7 C. H/*
& O7 V7 ]/ L! w1 tNaN:Not A Number8 W5 R% d4 r9 p/ Z; }) _
NaN属于数值类型 表示的意思是 不是一个数字; M% A, ]% L; D# _! m
*/% {( I& Y  n6 |6 G1 }1 ^
. t+ w3 R" b+ m# V9 g- W" k
parseInt('2345')  // 转整型: v$ \; P$ S9 n( l! T
23456 n; g- m. |6 }* s+ K0 m
parseInt('2345.5')
- \& h; v4 Z6 q; W2345
) }3 ~; [, o5 hparseFloat('2345.5') // 转浮点型
7 Q9 ~, P- s6 U- |# _2345.5! L" u) P0 i1 Q% V/ i1 Q" k
parseFloat('ABC')
) F4 t1 @  Z, C8 i) gNaN
% `$ L- m5 d8 B6 LparseInt('abc')
  q) t+ U9 N0 ~7 i, xNaN
1 R. j. N$ s, f/ x+ k. l, @( k! S</code></pre>3 O- k+ t) b; h  l& B; A4 |9 t) {
<h4 id="232-string类型">2.3.2 String类型</h4>2 e, Q7 R  g7 `+ a- n2 t/ x
<pre><code class="language-javascript">&gt; var name = 'Hans'+ W$ c" G, ?+ Z( D
&gt; typeof name
/ {$ D% {) X5 I'string'
' L* e1 y! K9 [8 {- o- ]
: D# D3 p1 _7 v2 ^$ o8 ]//常用方法
6 |, M8 t; d9 o' B// 变量值长度) L7 p1 w) Z$ B$ O& B" M
&gt; name.length
8 x2 O* {* I% l6 s# `- v6 h6 b, X% c44 U2 T& c. C# i: R* }5 l- ^" _
// trim() 移除空白
# t/ Y* f+ z9 J/ c; R1 D; n" Z; H&gt; var a = '    ABC    '5 R- u% g' H6 p! ?$ J
&gt; a" m2 I8 ~3 d4 G3 [) A; c9 X
'    ABC    '
, \( c: j0 ?8 U5 V0 _- F&gt; a.trim()  M* m* K. r  V) E0 d3 ~8 u% Q
'ABC'
  u, f( z! K8 Z" B" q; k; k//移除左边的空白
* r9 h5 @2 g, D: u7 K0 |9 _&gt; a.trimLeft()9 p6 L5 M9 C9 k7 w
'ABC    '. {  P" n: F4 y* m) n
//移除右边的空白
. n0 t  |! g1 `. ^&gt; a.trimRight()/ J& _+ h. r3 m" B
'    ABC'9 i1 S$ a2 U" [6 _5 s+ O

" Q0 p5 ^. k1 C//返回第n个字符,从0开始) i4 I% ]' N; A/ g3 R
&gt; name! B+ t4 l% w: T. V; f
'Hans'
6 C  W5 m+ t9 H/ H5 u2 |8 A&gt; name.charAt(3)0 ?2 u0 m4 I6 _/ ]
's'
! P+ J# }) C* Z) p&gt; name.charAt()
; |1 O. ^* E( q, j+ T/ @  f# ^; x& C'H'7 n$ ~5 ^; P% c( p
&gt; name.charAt(1)
$ b: C9 _% U6 }: G'a'
. t( _3 H6 k+ ]( [' H7 r  I( @) @/ g: E  E
// 在javascript中推荐使用加号(+)拼接
! I- Q5 t; B2 a/ r&gt; name
' y* T! A+ y+ ^! h'Hans'
/ t+ M/ y" b6 Z9 B: f( s( h&gt; a
! @% |. N: X. i+ a& T' w2 O'    ABC    '$ o7 N8 o8 G: S) N4 g3 }4 @
&gt; name + a+ B. ]1 l, ]# ~4 X" m( b# j* F
'Hans    ABC    '
' q  v  f% Z5 R8 a5 {; C# W// 使用concat拼接' j' Z" F+ Y( w) R- J: y1 p
&gt; name.concat(a)
- M7 b- r; ^2 z9 j'Hans    ABC    '
, }8 Q. g+ |3 n- v; ]& V  T6 \/ O: s, \* j5 U" b
//indexOf(substring, start)子序列位置/ P$ @7 C4 q0 b% g' s( U
7 T) v! I  e1 l1 _; m/ M/ k! n
&gt; text
! C' ^: R& z3 `'A young idler,\nan old beggar'/ n( B$ Z$ U9 x9 b+ \( }; L
&gt; text.indexOf('young',0). Q6 o$ d8 [& j
2* l. y- a) z8 @* u2 H5 K& F- f
  f. ?. t8 {2 L1 B9 X
//.substring(from, to)        根据索引获取子序列$ a6 I- ]4 h* n* V9 F: ~
&gt; text.substring(0,)
: W# C: I$ H0 C  ]/ L! ^' p'A young idler,\nan old beggar'
0 Q, S4 D/ m2 w2 {&gt; text.substring(0,10)
3 |0 I9 P* _# d7 a$ L4 o: S'A young id'" p* V& I, M& m* d

, w$ @) H$ W' i6 |// .slice(start, end)        切片, 从0开始顾头不顾尾3 r  p  k2 J* ^9 E3 A
&gt; name.slice(0,3)
5 C: Q+ m. L- V' o'Han'
/ b% G8 x' N2 ?; v# U
. O, W3 A* w' m/ O) r// 转小写" o: S) P* \5 T1 E) o1 ~9 W  ?
&gt; name
5 U) ^8 M' O! g4 C'Hans'8 R6 ^, x4 ~3 m7 T2 P
&gt; name.toLowerCase()9 b. M$ M2 s7 B$ A
'hans'
% P" y4 f4 J! {// 转大写. r! e8 v# j5 A7 w7 Z
&gt; name.toUpperCase()5 ?' C$ t7 l5 d! G5 Y5 p, T/ a
'HANS'
8 W9 M4 |0 P3 e- b$ W0 z7 t& u0 S) d  H- P* Y
// 分隔% D" g- F4 \5 w! B/ T
&gt; name0 I! I+ U5 }6 A
'Hans'
0 C, d: V" G0 O& m&gt; name.split('a')0 p7 n3 b! C  w( o1 _
(2)&nbsp;['H', 'ns']
) W  }6 Y$ O/ ?) n% W; {1 u</code></pre>
$ O# w8 V. R# E<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
- M$ ?# A4 h; k1 |3 |& \5 ?<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
9 z' c8 @- V3 F3 F1 k1 A0 j! ^" @0 c* I<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>3 M5 C, u; f* P5 i7 |
<p><strong>null和undefined</strong></p>
6 O; w. m7 P6 R5 @9 D<ul>2 k! O3 r5 s0 \$ p- _
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>; U5 D' g+ V" M6 g
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
$ W4 ~9 V4 [5 j# J' b3 d8 B</ul>
4 ~' }  X: ?6 e1 q0 B. s! `9 S<h4 id="234-array数组">2.3.4 Array数组</h4>
2 `8 [3 b5 {: J0 A; u9 w<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>4 {. o5 q3 z5 I
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
8 K1 ^) n+ I7 }/ m& B9 b# t&gt; array1
& ]5 V6 ?# V; d/ \(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']7 I; q. H6 X8 L4 x
&gt; console.log(array1[2])  //console.log打印类似python中的print
9 V* a2 Z$ z) X0 p& R! v. x3
0 v6 ]& e4 V, _( P, N# I( b. ~& ~// length元素个数
* r/ v: ?2 L$ A" E&gt; array1.length" I: A' J$ r  R8 F6 t& Z
6: `6 V  [+ s/ S* g4 v" @+ ]
// 在尾部增加元素,类型append3 O1 g) }. P( ^8 l- g% ]/ E
&gt; array1.push('D')
: J9 [0 f7 ~( I# V2 H  G! v7
$ e& M2 w& n8 V&gt; array1) [/ D* Z, y/ i# g/ y6 ~
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
7 t, j4 D5 G' P% W/ ?// 在头部增加元素' q; g& y) E2 W2 D
&gt; array1.unshift(0)- ^+ e5 o' F7 K) J& n3 ^6 x
8: o5 h5 g3 }' x2 E/ f
&gt; array1
6 b* e2 H$ h4 j(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']2 m7 w# j& q& D1 D
0 w$ p7 w# |: N* g1 r# x5 [
//取最后一个元素% L7 K$ S* f! T4 M- m+ H
&gt; array1.pop()8 |4 Q% v* T" N: K
'D'
0 V' R1 c1 q" }5 @1 O&gt; array1. O- V) q* e1 r2 g7 t+ H) G) f0 G
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
9 j% M3 F2 |7 J2 r/ l+ w//取头部元素7 u5 O- t2 L9 ~$ W! u; J7 Z, e. j& `" b
&gt; array1.shift()
8 O$ V+ f  A( a2 U, @7 p0: Z1 R9 B$ u) T$ e5 U6 @
&gt; array1
: N' s, r# ?8 J# \& g  s0 o(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
9 v* }$ P2 e& h1 S# m+ U
0 h2 ]! R3 H, R, U//切片, 从0开始顾头不顾尾
- S+ K0 d! ?- X! X9 g&gt; array1.slice(3,6)
, G4 i7 s, L  J( v7 L: ]8 J( b& C(3)&nbsp;['a', 'b', 'c']
/ R6 T# q- F3 r6 [// 反转) l/ k7 C  T0 O1 `1 b
&gt; array1.reverse()
3 {0 ]) `/ j) m( S7 x9 u& w(6)&nbsp;['c', 'b', 'a', 3, 2, 1], a' {; E7 c' @8 R- _% N; D
// 将数组元素连接成字符串
" ~5 H% \' f# `  J' K% _. v&gt; array1.join() // 什么不都写默认使用逗号分隔- `: Y+ M3 Q1 f/ q3 @0 l
'c,b,a,3,2,1'
; d- s" c$ `' B/ `&gt; array1.join('')
, g( L* q9 u% w4 t) ^+ k: n  V. ~'cba321'
! n  w# o3 g- ?. {&gt; array1.join('|')
% y0 O* ]2 l, w4 K: n'c|b|a|3|2|1'. a$ R* X4 e; a/ t9 f; f& r

7 J% T, ~% e" o/ X// 连接数组, v& a3 E5 L( p5 z5 R
&gt; var array2 = ['A','B','C']
2 u, \$ }5 y7 Z&gt; array1.concat(array2)
4 W/ X: z" ]  e' X7 V5 k( E(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']; r$ F) \4 m4 {, c! i9 D$ O
8 H! j; h- ?" n* j0 k
// 排序
8 S8 Q, e' {9 I5 x&gt; array1.sort()
1 r2 A& s1 W0 Q/ H(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# @  G% Z2 Q0 o3 h: n4 X0 O% N5 t2 {
// 删除元素,并可以向数据组中添加新元素(可选)+ e2 C) f, v8 {+ O0 S" h9 f7 C
&gt; array1.splice(3,3)  // 删除元素, x& J5 k. R: @) {2 L9 P0 ~' L
(3)&nbsp;['a', 'b', 'c']" N" P# R/ v0 w/ g! Q7 y! d: |
&gt; array1
9 |$ Y! t6 ^( q9 G* H2 a(3)&nbsp;[1, 2, 3]
% m  V6 n" [( O  z1 Y3 p3 g&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
( q: I( c% ]) \# @* ]. B' A[]
) B( c2 x' a% `  F& M&gt; array12 e" X; A8 ]& q
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']; A' Y- y" T' J, L3 n2 Y/ A( K
: |* g; E8 C+ `1 r" p' i
/*
% x- ]$ l% D% c4 p" ?7 j" wsplice(index,howmany,item1,.....,itemX). |9 C3 s- e4 w0 v* n$ Q% i
index:必需,必须是数字。规定从何处添加/删除元素。
, U( S% r( q! Fhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。7 p5 A6 i' `, |5 j6 |
item1, ..., itemX        可选。要添加到数组的新元素& W. ]' h6 f2 Q4 e2 f; Q' l
*/& U; P" f% Q2 r' G% a- ]7 f5 }

3 J. ]) }" y* }. E! D( ^// forEach()        将数组的每个元素传递给回调函数
* Q" a9 t1 b7 `) u' S&gt; array1.forEach(function test(n){console.log(n)})2 C) G8 Z" ~3 I$ P* j/ y7 u
1
4 U1 f( R8 m$ {; h+ E 29 Z8 A1 ~) O( g# H
3: C5 z9 Q( n# ^4 ]  f. z" v
A
: K1 R3 ?4 M7 r$ i* p8 d4 q B* W2 D% _  t5 v" f* L) G
C8 }5 w( L) K6 t! o; B9 R
// 返回一个数组元素调用函数处理后的值的新数组
% Q  ?. F' u! v' _$ h1 h&gt; array1.map(function(value){return value +1})
0 g  `4 g  l( i9 U- }4 m$ O(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
  k0 e' \9 [  |' X* P2 ]</code></pre>, ~, w, d" }. V6 Y1 o  J
<h3 id="24-运算符">2.4 运算符</h3>
. a1 v0 j6 ]. t& ~" A4 L<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
0 X$ q: J/ y7 ~- }, K7 R<p><code>+ - * / % ++ --</code></p>* \. S. c# E# R6 d
<pre><code class="language-javascript">&gt; var a = 6: Z, e+ }/ Z" G$ F
&gt; var b = 3+ d# j8 U( M( f7 n0 M% h9 C, l
// 加; l1 P; a' m' f2 `0 t2 S( k
&gt; a + b1 o! a" `3 g5 z3 Z& c! P
9" s( g# H5 ]% q; }+ f4 i1 G
// 减
' w7 \2 ]4 e$ P& f' z2 g* ~&gt; a - b$ ?! n2 l- z2 Y! i
34 Y: V; q, G7 Y+ t. f
// 乘7 }) f: g& L( R* I' ^6 G
&gt; a * b0 T! W7 K. s! @& e
18
2 T! a( f7 x8 j0 U# }( E// 除! L1 _' I4 a+ S% ]: h* o
&gt; a / b
3 _) V/ J. v1 |% @4 H' `2
& a0 a, E) x: e9 X$ J// 取模(取余)
$ K% {' {* |( I& F* K&gt; a % b
( z/ v3 z) q1 j/ m! B0 m00 ]' [. t% d  h$ {5 A9 s+ [! F! ]' Y) z
// 自增1(先赋值再增1)
# R& L* k/ ?* D4 @&gt; a++
) [# ]* l- P4 L5 v2 I6
7 M8 O( Y/ n5 k( `- K* {  P&gt; a6 h5 v4 D$ l; V
77 \! m9 N& P" S9 g. u! N* M3 `4 Y6 ~
// 自减1(先赋值再减1)
8 s& z" m* R" O3 h% x2 B9 \&gt; a--
6 y& o0 w* l9 S! I' j7) p$ I: O+ i! \* h0 z
&gt; a
, l! f+ }1 M. S  ~1 x6( b- I; k0 r0 ]9 u( x
// 自增1(先增1再赋值)/ o. d) }9 b$ x' c+ w+ ^# N
&gt; ++a- H4 ~" P: O3 n8 o4 u; M& L" l/ S1 ]
7
: j+ P6 ^$ o1 d- B$ I// 自减1(先减1再赋值)
: }$ j" P% U. M4 p7 S0 i&gt; --a
: U7 s9 r  H0 O. [! Y" Y" @6
  v7 S! j% x: ]# `" W5 u. w5 K&gt; a: I& q) X1 T, N* c. _: L
6' x$ i, B% O& H" X8 p5 K: p8 J
9 Q% _) W4 K" d! a8 h
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
9 j, K7 K# V; q# ^</code></pre>' H+ Y/ D* l- w
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>( k4 t' V% r" `
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
6 l7 K( y- Q; L6 N' B4 m<pre><code class="language-javascript">// 大于
. m$ s0 x  N8 x. }4 q( _&gt; a &gt; b
6 `5 K2 b5 H$ h# k4 ctrue
, C6 P3 h# I% |2 f! W0 E// 大于等于8 g; }, t- W* W0 y& N& b. u
&gt; a &gt;= b9 ]- @/ g: R+ c! D2 u
true
3 Z) F1 i, Q$ d: g: I// 小于
7 [# w" S( f! S- l. [* s) x1 q&gt; a &lt; b  a, m. W1 l: v5 ?( q
false
9 h& s# s# a: Q2 b9 n; Q// 小于等于/ Y4 C  ~. a( \/ v1 H5 E+ S- \
&gt; a &lt;= b$ o. C% F% ^2 |! m( Y- v
false
- {; e* i. G8 M" q+ O8 n* q// 弱不等于
4 J* C' f( \# `# ]&gt; a != b  h2 k; a$ D! c6 `# E
true# N# n0 x0 G' Y3 u
// 弱等于
# ^! c3 Y  O  e; ^0 u: p&gt; 1 == '1'
) j( O3 h$ `6 c# U! |true. X+ m- i+ w4 R( q! z1 L& c" l% ^
// 强等于
9 I: ^  a4 p+ v; X& s* }; r&gt; 1 === '1'
( \; ?' o7 \3 {- Rfalse* l6 m/ O" U7 I8 x8 _
// 强不等于. n8 }) ?; k3 Y+ W' q% h2 C
&gt; 1 !== '1'$ S/ j7 k6 N: B0 S2 l8 J: I+ |
true
7 q8 r3 E1 e1 L2 f3 L" Y: m' F, t/ J5 ^' n
/*% _  ]1 ?" D" h) G; |# l; p3 c( L
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
5 m0 g+ u# E; A, n4 t( A*/
* V2 a- o& a3 D& v" L</code></pre>
2 u5 ]& O' w) ~<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
+ ]7 a/ Y3 Q, O% m- g* \1 @<p><code>&amp;&amp; || !</code></p>
6 k: m0 b4 C% ^# ~( N/ _4 A: ?<pre><code class="language-javascript">&amp;&amp; 与. g- ~0 O1 e! D( B+ F  q* ?' I- e
|| or 0 h# e( ?' R5 ~3 D9 [: M; @4 z+ \- ^
! 非
' ^' I% W- ~6 p( c5 j* Y( v</code></pre>
& z; n2 `! E  P# }<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
# B" W5 Z1 k. o* d& P0 p2 _  A<p><code>= += -= *= /=</code></p>: |8 d; h$ x" [+ h; t& w, {; E
<pre><code class="language-javascript">// 赋值
5 a; K9 H& O" H&gt; var x = 3% _2 D3 N: x8 ~0 O4 O) k: ^
// 加等于- n& b. ]* ^: {5 ?6 C
&gt; x += 2
0 U' A/ c, u- \5 H1 w5
* ~$ t9 Q% R! H" Q8 h9 J+ \// 减等于
; x: y8 e% n+ g: c% `! _&gt; x -= 1
7 K$ j! G% x$ I. k4
& c) S! L" R4 @! e2 i4 s// 乘等于6 u5 E, [; Y7 t! E8 T
&gt; x *= 2
! J7 }! ~. s7 h* H) G80 H6 q" Q% j- Q
// 除等于
- A# m2 Z& n2 F. i$ M. W&gt; x /= 2
" \- q2 N) ]/ P$ |6 `1 N( L! L" t3 K4
6 }  ?5 {3 ?- Z! j6 J* I7 J( g, E</code></pre>1 {- h, q% i) A! O1 K2 _
<h3 id="25-流程控制">2.5 流程控制</h3>
9 n7 U6 W$ N( W$ V<h4 id="251-if">2.5.1 if</h4>3 ^$ v7 N( D  L) [
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
1 w. O" [* m- d: R$ e6 F9 J8 u: }7 u4 M6 m1 X# ]; C- ^
&gt; var x = 35 t" A/ k- j3 ^7 B+ N2 j
&gt; if (x &gt; 2){console.log("OK")}
' `  t9 n9 a" J. D% `/ i  K OK1 e- `  M$ M4 o( V* W. F

5 R5 Z! u8 |9 b% L/ Z$ y2, if(条件){条件成立执行代码}
7 \  R( e# S0 K) H        else{条件不成立执行代码}
' V0 _9 a" f& r* r6 C
2 A2 Q2 a6 Y2 ]/ q5 a! w9 y&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
, Q2 w+ i+ {+ v% t3 ]'NO'
  J7 p/ |/ x& [$ p5 m, ]5 D# \9 Y4 Y, z, f' g7 M
3, if(条件1){条件1成立执行代码}
/ j+ z1 E7 d4 L/ U8 ]- \" H        else if(条件2){条件2成立执行代码}
) N4 E: y8 c! N* z3 _    else{上面条件都不成立执行代码}# @: _3 M1 L* Z+ l) r
, s* E1 x( ~, w% _5 G+ _/ }1 h. c
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}& a, P2 y$ E  r4 e
Ha* ]5 }, K; Y: {' ^% n0 U
</code></pre>; h% ^  ?/ A5 \8 y  @, y6 g1 o
<h4 id="252-switch">2.5.2 switch</h4>1 B1 s( p$ _8 t1 i- p$ F/ _  U
<pre><code class="language-javascript">var day = new Date().getDay();
+ O1 x) X9 N' g( r1 {switch (day) {
( Z: \: M/ F1 ]) U# s4 n+ p  case 0:1 W8 o' Z3 W' ]/ n# Y1 u5 p
  console.log("Sunday");
3 c! ^9 K. x- A* ?6 B; z  break;$ z8 d5 [) E8 R) x
  case 1:6 f5 M% [/ {1 X9 P. l1 D6 O
  console.log("Monday");2 D) o; k- N/ G6 a. U
  break;9 A( d9 v2 A6 ^/ l; \1 P# `. H
default:7 i+ r* L- C1 s' o- m, x
  console.log("不在范围")  [. f) V$ }( V9 m+ S: u
}% g5 l! Y' Q4 [2 W' {) s8 Q: u
不在范围
, S& A/ q; j& t8 I</code></pre>
3 F. j) @- \, ]- Z% D( q<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>% P* z4 g3 [' {
<h4 id="253-for">2.5.3 for</h4>
5 D8 t$ ?# X2 z7 v1 C/ ]* F+ V$ p<pre><code class="language-python">// for 循环$ N' z( m' Z# y/ w
        for(起始值;循环条件;每次循环后执行的操作){4 F4 O7 N) j  ?# K0 X% k
        for循环体代码  R6 B$ v) p3 H5 e2 {$ s
    }
8 r  q5 V9 p$ ], K6 _3 r% m4 K  G- h* ]( _
for (var i = 0; i&lt;10; i++){: d3 I8 D$ ]& V7 f; [9 T. b) T
    console.log(i)% C' G. w% y( x" t+ U/ m$ [
}
6 E' q2 Q; ?) J$ l! s+ l# z        0) ^8 W. u, X3 E! i) w$ E
        16 z, J4 ]: V/ u0 P# l% @0 J
        2- B$ f2 T1 H! Q
        3" S) y' X9 B4 L+ f) e& U  k' F0 P
        4
8 f4 q2 w' H8 D% m        5' }2 f/ z" I4 s( r# e5 a; Q" W
        6
" N& E! V. U# I        7
: N. ]8 w; `& p% ^        88 X; L: u+ N) [( S
        9
1 o: ^" H) K' d% ]</code></pre>
. R' t* b# v, C& l, l' l/ m<h4 id="254-while">2.5.4 while</h4>
, ^: L; T* p1 [, U& b& Z<pre><code class="language-javascript">// while 循环8 U% f5 j( h+ D( A  H! b
        while(循环条件){
; ?5 S0 G  S& \        循环体代码; X: d. C1 h# F1 v
    }
) P2 t" ?6 n( w
0 A5 |. \% w- n  L7 t&gt; var i = 0
- R+ C! {6 G! z# d( _&gt; while(i&lt;10){
% {0 Q8 ]( X- |- |; ~    console.log(i)9 S$ ?% P6 n( z  n% z& V
    i++
5 E  g0 W0 v( C( d2 f6 {; i}
- i* l3 E2 x, N" d 0  e# ]. [( {5 t$ q6 O! A* z
1
8 v. r7 K# i. M9 {, {4 E# } 23 b4 L7 z# @5 `; \
31 b  e: L* ]) e/ F: x$ D+ }; R
4. H- ~8 i- _# Q/ x& `" n
5/ e% u: V4 l" n' j4 O- s
67 A! c/ o9 z4 b4 i
7% a" D) }9 f5 E; i
8
7 u$ h% {; g: W; M6 U" m# N 9$ W. E( D$ o+ {2 Q, K) l
</code></pre>
: }1 X0 e: K& ^1 d<h4 id="255-break和continue">2.5.5 break和continue</h4>
2 \" K+ ], h% s8 A- O: J<pre><code class="language-javascript">// break& q+ f. S* L" Y8 H$ s9 H) R+ G
for (var i = 0; i&lt;10; i++){
% x+ ?" b2 I% Q5 y, y    if (i == 5){break}
" G$ P0 F0 o& I) a% x    console.log(i)
) ]1 f* ^' J0 i4 `1 d, y! `}
$ y- n& V# J* }/ B) J7 C 0
- k- m/ c6 ~  v5 ^1 W, I+ q 1" C- k2 L0 b: k  {
21 H& T/ Q) y  y
3  o1 Y+ G6 C' ~  H1 r+ y; j
4
6 S1 k7 ]3 K4 [' a3 u9 D) V# B% O// continue+ q7 w' r. f( q9 W4 G: c
for (var i = 0; i&lt;10; i++){4 w) O" P; D" t
    if (i == 5){continue}
# ?2 [( [3 o& Q+ Q% |( J' Q9 m    console.log(i)
( k/ T3 M. f7 W}( \5 K9 O( y. B  y: P
0
8 ^2 z( Q* G$ s- }) l+ O" i 1
3 d' v2 D* H+ V& k 2
1 M: V2 E9 ]- N& h, s- f3 H 3& U4 z8 ]: b  J5 G% [4 {
4# o+ u; ?) Q6 H
6* G* `* g. @* E) [, s1 i
7& N/ Z, g- c( t8 ]6 K
8
- j% {! f2 U, ?$ [  c' R1 z' M 92 s2 X) Y+ C- x; p
8 I3 X6 d% C: h
</code></pre>8 R2 K  y' Q; u0 X6 V# ?& T
<h3 id="26-三元运算">2.6 三元运算</h3>( a) z- X9 h. C+ [$ j$ T# `* e$ k9 h
<pre><code class="language-javascript">&gt; a
8 p: S9 p  A% t! C- a2 l& C" }  V6
' F: X$ t. r% z# X: n3 R&gt; b
9 [; E; n  U; \9 c3
2 {: X" P1 {. }8 T; V
) ]- P* Q% {  Z: P. s" f//条件成立c为a的值,不成立c为b的值
) W8 E6 V5 g; f( e4 ^+ [9 k! L% B&gt; var c = a &gt; b ? a : b* R# q& H9 u$ f9 @  V, S0 \! f1 I% _
&gt; c2 w8 [; a% K4 i% ~+ Y- y9 O
6
# \7 x; i% a3 T3 {, i0 h! H. L. H; h! l) |
// 三元运算可以嵌套
$ ?# s5 n- D/ G! J. o! C) z% L8 ~- ?</code></pre>9 k$ B+ Q  ?! {) v+ ~
<h3 id="27-函数">2.7 函数</h3>4 e3 B# _# k# k8 V1 K
<pre><code class="language-javascript">1. 普通函数: V- ]2 W6 d- i2 b+ T$ s" S
&gt; function foo1(){
4 ^0 r; U) s8 N+ t    console.log("Hi")
- U. f2 `) A& H$ L2 a6 x}
. M* }4 ~  ~8 C" ^( z1 J$ X& `2 i( J
3 K1 x0 J" [, g* m/ B+ Z1 S% R&gt; foo1()5 o0 c# p; W" b
        Hi* I, O9 W4 |* ~) s
2. 带参数函数& O  J  `& H: r. D$ f
&gt; function foo1(name){
. u$ W: ]* S1 k1 M  S, _5 Cconsole.log("Hi",name). ~" C7 c4 H) H+ q0 J0 p: u0 M. n
}: S+ V. N# \7 q. u

$ i/ i' Z. I( N, r9 ?% m  |&gt; foo1("Hans")3 Q$ y  g  [( A
Hi Hans
0 C; I* l! @& R* ?4 w' Q- D7 V
/ `/ ^  E) J+ O8 W2 M6 x. E7 i6 q" w&gt; var name = "Hello"
( X5 z4 _9 R4 M6 D! i3 o&gt; foo1(name)+ {( ]( }2 w( \9 d& `4 s
Hi Hello
( v" w1 d8 U# h% m& u" D# [1 ?9 q: q  `$ B! N3 q9 I) m
3. 带返回值函数. N: s% |. x" G- M2 K! e
&gt; function foo1(a,b){/ O% N: X4 w/ Q/ i
        return a + b   , w5 I0 o/ X  g* W
}0 j6 y3 n  _' d5 `6 U9 r
&gt; foo1(1,2)
/ j5 l; c$ ~( j; l4 Y* i9 ?' E39 u) ~' \. D* [+ Q9 P8 k
&gt; var a = foo1(10,20)  //接受函数返回值$ v2 [" j- l  a; T
&gt; a
# T1 I2 g' u; X3 C30
* H# Y, r# u3 O: s
4 |8 ]5 k+ V" Y; H4. 匿名函数
' d2 [& e5 ]( a  D9 p% N: @&gt; var sum = function(a, b){
; `- v# w7 _% U+ {; }  return a + b;5 i; m. i: b! a; S0 N% C
}. R: S" n/ v; T' X; \
&gt; sum(1,2)' z0 k7 q6 W) C3 C
3
+ H  B0 e( y% @9 b, I! U& K- u* Y4 h! m% }: n( d; U  H
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
! M6 [; T/ S9 t% G! j&gt; (function(a, b){% t5 c- y5 x% i: K* z& a% T7 @/ Z
  return a + b% O7 R" p, m/ @/ v8 p# |) E, {3 `# t
})(10, 20)  C* B% Q: S$ i" O3 i. h0 s; [
30
: R" b# n$ O" m+ U7 a: v; S9 q% u2 r
5. 闭包函数$ R; K# u  c5 g5 D
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数3 _0 F- B2 t& Y( x8 h7 X7 j
var city = "BJ"
: ]% v& y) w: c4 m# Hfunction f(){
2 [7 r6 q$ D- v% d" |0 z    var city = "SH"1 C) _9 t) B- ?0 \1 X
    function inner(){% w' ?% l. K* N6 Z" u8 a6 P
        console.log(city)' M4 P, ]! e3 f# j
    }
( \& L# H" z  N9 t9 ^    return inner0 q/ G- Y) b8 m5 E+ |
}
& n. Q: g8 E6 D& C+ j7 Y! ovar ret = f()
6 w" F* l3 Z0 E3 X  pret()
9 [. a4 a0 Y& j+ _3 ~2 D执行结果:
& Z' @% [& _& L" mSH
6 x( k  V: A7 h! U$ Z1 w: C: ]# M- V; A
</code></pre>; N3 D' Y$ u. S- ]2 i$ \# F
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>. B( O$ W: B8 L1 F* x
<pre><code class="language-javascript">var f = v =&gt; v;& O* X! W2 h. c: w; e6 S: N
// 等同于- u  Y1 t2 O8 D
var f = function(v){
' l% [5 z0 e( d  return v;
: M4 L; p; N) w9 p5 Z3 N}
7 B, k3 Z/ d! x& z</code></pre>" h  D2 n5 _& Z6 L# K
<p><code>arguments</code>参数 可以获取传入的所有数据</p>
% g! H$ \& e( r<pre><code class="language-javascript">function foo1(a,b){
) {& Y4 V8 ?4 K8 v4 J; S    console.log(arguments.length)  //参数的个数 % f! B6 [( Y. H  P+ L7 ^2 ]
    console.log(arguments[0]) // 第一个参数的值
* Q1 h6 h3 ^9 u" u* Z  D4 a; T" H1 C        return a + b   ! b5 {3 @, i! h6 q' d) L
}  A. g1 ~# C' J' X
foo1(10,20)5 p  H+ w, M- x2 j
结果:* P( v+ P& u+ x) S* s8 M' i
2          //参数的个数 2 t2 I) j/ v& Z  E6 O
10        // 第一个参数的值- j% S- S) t7 |
30        // 返回相加的结果; C/ i) |* Z, X2 y1 s
</code></pre>" B6 v' a. a* O" G; W$ _& @) ^
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p># p6 `3 L9 `6 K2 l0 h
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>7 }# v4 O. \0 @: P* j
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>$ Q8 M. j1 Q* F
<h4 id="281-date对象">2.8.1 Date对象</h4>; ^3 c' J+ C0 Z8 D' c3 A. G
<pre><code class="language-javascript">&gt; var data_test = new Date()
8 s4 M/ |" K; [- ?/ |" e&gt; data_test& ?' O7 l) A) _0 t# H" }
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)" |5 ]9 {' q7 U3 s# G
&gt; data_test.toLocaleString()
7 e0 G; Y+ l' N! s( t6 K) \'2022/2/11 下午9:44:43'
  a" K( o7 P, g) R; N/ D2 Q
; G! g% s1 r$ ]5 m7 g+ }$ `: \9 }&gt; data_test.toLocaleDateString()0 {4 h) z! F2 h% C
'2022/2/11'
" A& b7 p0 ?, ?+ V% v) X! a+ i0 [/ g( p8 U" d
&gt; var data_test2  = new Date("2022/2/11 9:44:43")- l# ]8 V% a4 }9 h
&gt; data_test2.toLocaleString()% l2 y, R8 e! K
'2022/2/11 上午9:44:43'
4 T+ W+ b3 K2 z+ b/ o, ~" n5 p- v! T/ q$ ]0 [- E1 h: m& r  E
// 获取当前几号
9 f6 C' U6 m# Q6 z" M  F( T9 j0 I&gt; data_test.getDate()
. R, B. z! H! U; W& M8 E11
6 |# Q9 Q7 {: W; _// 获取星期几,数字表示
- Q8 J  X0 |8 f  L5 A  a&gt; data_test.getDay()  
  ]! n: {$ T0 C# M5
: }& @: L  o- s+ i; ^// 获取月份(0-11)
8 s7 C( ]2 r5 S/ P&gt; data_test.getMonth()& a, v9 C# V! t+ h
12 [3 G+ G( \4 |) i6 F/ j- }/ N4 n2 p
// 获取完整年份6 V0 f% d3 J. N% y6 ?; W
&gt; data_test.getFullYear()
- V. B" W  I% @; ?  g+ O: _6 \2022
9 n  h. Z5 c: p// 获取时
' ~4 o. J: Y' j3 o&gt; data_test.getHours()
; s$ K1 ^# v0 s& n) e21" F: x% U: {* d8 [, ^
// 获取分
, o, |" G2 D% R&gt; data_test.getMinutes()
3 |; O4 A; W( ^; {44
  K2 T7 `' H, `' W9 i// 获取秒
$ X6 }: R% u3 G5 P4 U2 n/ C&gt; data_test.getSeconds()
) F1 P# v- e0 u/ Z43# S3 H5 ^5 t- }9 z) ^
// 获取毫秒
! I2 P" }, s. _# ?- Z) |# Q&gt; data_test.getMilliseconds()
% K4 c! r, G- s- u2 l' S- ?290
& A8 P1 K* G. _" g- k/ K- M// 获取时间戳
+ n( b& F5 q( }' J&gt; data_test.getTime()
! u$ D/ u2 w2 ^1644587083290
! m) ]! M  E/ m! w0 H' X</code></pre>
; j3 X# X* R( [+ D; f8 u( o, M<h4 id="282-json对象">2.8.2 Json对象</h4>; p* z' g0 J4 K" S9 z: C$ M6 b
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
4 d- t: r1 x; q0 O8 \! ~JSON.parse()  // 反序列化,把JSON字符串转换成对象
0 C. X: v5 ?( f+ _$ _' I
3 n9 c, a  l# ^8 [; f) Q* X2 e// 序列化& t3 |6 P0 v, a7 @7 S
&gt; var jstojson = JSON.stringify(person)
9 C7 g3 y+ O! T, C) P( g8 L&gt; jstojson  
# O& z; Q# s' m'{"Name":"Hans","Age":18}'! m# ^* K( t- \" L

/ x3 S: z  t+ x; D6 r. W  K// 反序列化
, t# j! N0 W- A&gt; var x = JSON.parse(jstojson)
1 V( c! c3 m0 m&gt; x
0 n4 [. p; i' D" E/ z% W{Name: 'Hans', Age: 18}) i1 C3 L  o$ e6 q9 j( f
&gt; x.Age
+ K. T! z* b; z) L, c18
+ O3 n' Z* c$ y8 j8 G' ?</code></pre>% u0 H0 i7 a0 Q" ?- o4 O( s
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>7 L- f: L: J7 b; f4 P( u0 f
<p>正则</p>. b- [' D: F5 z
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");0 q8 Q& ?- L: B* o$ ^
&gt; reg1
) Z. I* V, `* P3 v5 u/^[a-zA-Z][a-zA-Z0-9]{4,7}/
9 ]" {% F4 p# M" v' D&gt; reg1.test("Hans666")
- @# G/ _0 x  c5 ptrue
% U) D8 t% p8 Q" \# q! P5 }  o% m* Q  A! f6 Q, g0 e5 C
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/; p, |( X6 a" ^5 A$ i# J
&gt; reg2
' b1 _! a# `1 b5 w* L/^[a-zA-Z][a-zA-Z0-9]{4,7}/
# X4 C8 P" m' d- o! F&gt; reg2.test('Hasdfa')6 |6 {5 O% s0 \2 R1 ], k( X1 q- u
true& x, o; u7 R1 x# l$ A; \: v
* Z- S( m  l4 c1 k
全局匹配:' I4 J9 W5 `5 x0 }
&gt; name
! x" e" {8 I7 S' t7 g' E% H'Hello'7 o/ S1 s. x9 e: ]5 z
&gt; name.match(/l/)- w: Z7 s: l# w& v2 R8 E& m7 K
['l', index: 2, input: 'Hello', groups: undefined]" v# K3 ~% h8 y3 x2 p

4 p8 Z0 k# @- s, t! V+ {( x&gt; name.match(/l/g)
% w6 d+ Q  R" W9 L# Y/ B. i(2)&nbsp;['l', 'l']" o8 s9 s$ F* r$ j" P/ B
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
8 T1 j" S7 T; O
& e, k( F  h2 K0 P全局匹配注意事项:
; v+ k- r) [3 n. K" A  Y' ~1 }&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g. _% a2 X# A0 r0 n, G, ?/ N7 Q$ E3 i
&gt; reg2.test('Hasdfa')
) S+ m: T  q, S1 ?6 T) @true
  m* o3 W7 \1 g7 Z- G% T&gt;reg2.lastIndex;
& m4 k1 f9 Y  V0 A' s2 }6
/ e9 |& R: V8 u# Y8 Z" e- q&gt; reg2.test('Hasdfa')) k. L! w4 ~" J3 X6 y; M
false
% g, X3 [, N4 v6 \5 x) J2 S&gt; reg2.lastIndex;- h8 V. T% }+ A4 K/ z
0
' g+ Q1 F* d' @3 u3 Y&gt; reg2.test('Hasdfa')
4 S! f4 N7 Z; ^true
2 t) _6 `, m5 \5 B, A" D& Y&gt; reg2.lastIndex;7 a& X  m3 ~- s" H1 ^
6" I3 C. O! z8 i$ f' v
&gt; reg2.test('Hasdfa')
, t- g" ?: x8 @: F* A3 }8 B5 [" G( Efalse; S/ W: o3 K8 k8 a6 ~- H
&gt; reg2.lastIndex;
5 a0 O3 J$ i4 E4 ~4 i5 M- U5 ?. z0
4 X1 m6 i6 a$ ~+ _8 Z// 全局匹配会有一个lastindex属性* y* c% {+ N$ a8 j+ u2 D, g$ ^8 j' |
&gt; reg2.test()
3 m: R) ]4 O( t) |& r$ W+ sfalse
" h1 D( [! Q3 i# y&gt; reg2.test()
) V+ w6 `# w' q5 P" Ntrue  C& I. x$ f: L6 N2 q
// 校验时不传参数默认传的是undefined
& V6 ?" Z7 E/ Q1 @2 A</code></pre>
0 h1 o" Q5 {# z<h4 id="284-自定义对象">2.8.4 自定义对象</h4>8 c% t) r2 Q! F6 j& w
<p>就相当于是<code>python</code>中的字典</p>5 o3 v. B& b! S: ?6 \% F' k
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}/ j9 }9 }2 B- {
&gt; person* l$ `) C/ P2 u. n! G6 g2 F3 \6 Y
{Name: 'Hans', Age: 18}" r1 @# y6 a7 T! ?4 O8 c# {" w) W% r
&gt; person.Name' ^( |% ^! U4 h7 O( _+ e5 q
'Hans'* x- k8 Q6 n5 _5 o2 ^# Y* q
&gt; person["Name"]' X& o! z; z! W7 w, V. P
'Hans'
( w# j; i0 Y, _: ?, n0 P( z7 a  h/ i' F; h5 f
// 也可以使用new Object创建' v  M+ Q, E5 t( K' Z
&gt; var person2 = new Object()
7 e4 x: ^6 K4 I+ @5 j! \&gt; person2.name = "Hello"# f8 E4 t& M3 Q- {! Z  R& R% y6 ^
'Hello'
. g; m2 i4 S) @3 S( @; V&gt; person2.age = 20( d; n9 e1 _9 n( l+ j8 D
20. G5 o$ G7 G; y9 R8 w5 _4 x
</code></pre>. \& V+ W% [" u: @# G
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>) o/ N* ~/ I" _8 G7 Y$ ?
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>" E5 |9 b) s& E; T5 f3 t
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
& [6 G! [. w2 W4 @<h3 id="31-window-对象">3.1 window 对象</h3>
# T4 F6 O/ ^( _% x9 ]* \<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>  b% P) O2 x& \0 q
<pre><code class="language-python">//览器窗口的内部高度
& y! f7 U5 {% H6 R  ]. nwindow.innerHeight $ t$ Q" I8 l2 r9 N  D
706( y% Q" H. T2 V
//浏览器窗口的内部宽度% {+ L0 B! O" Q( |( T
window.innerWidth
; k6 _) [2 l' R0 d* u% n1522
6 t/ ?8 }( O" D7 t3 t// 打开新窗口- _5 x+ G8 k* h2 m1 V+ ^8 X
window.open('https://www.baidu.com')
3 z$ G% p5 _, s) `* A; XWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
" |7 x4 h8 ^9 G% H/ @4 ^+ {  s// 关闭当前窗口
; L6 i7 {1 J9 jwindow.close()
  K  q0 h! Y7 B" ^//  后退一页9 n/ u! y( k) S+ l" O+ J0 j
window.history.back()  x1 l" V8 t' _( q' ?) |
// 前进一页
/ A" L; o* c' e8 |window.history.forward() . w' D/ G/ u6 b+ B0 ]
//Web浏览器全称
2 F! K7 J7 s* d) W4 N4 dwindow.navigator.appName
5 E0 _) Y+ O0 r+ A, H'Netscape'
8 [2 q7 L4 o7 A' C# G) ]// Web浏览器厂商和版本的详细字符串
7 t8 C! E* I/ V# dwindow.navigator.appVersion
  l. {: E! K9 i, ~: S/ ^' u" a'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
  M- l+ T6 o1 Z- Y4 h5 g! o$ m+ v// 客户端绝大部分信息* n% {0 x: _" g5 W! f3 c
window.navigator.userAgent
6 D- R5 N) ^4 {5 J' d'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
& L: `/ P/ K. \// 浏览器运行所在的操作系统
2 V  p# X0 D/ K; t& I( {, c( t9 C6 ywindow.navigator.platform  g5 L: f$ R, J* ^& ]5 f$ k
'Win32'; B4 ^1 E9 |: i& m' p6 }: _

6 P4 B8 e+ ^% p( Z" Q//  获取URL% @( i! _; o, i2 s0 c/ n- S
window.location.href* a, g5 C4 n% s/ e7 L& a6 W- b$ n
// 跳转到指定页面
4 q% }  }  ~& L8 b% l! F+ ^' ~- o) wwindow.location.href='https://www.baidu.com'6 O/ [0 U9 ]1 `+ i
// 重新加载页面- f/ s' t2 s# D* G  B, r
window.location.reload()
! r7 ?3 F/ e; X4 Z3 g, E5 k</code></pre>
+ R2 y/ u2 h8 a8 Q5 O7 [<h3 id="32-弹出框">3.2 弹出框</h3>- G' c( T3 T, w5 ?# A
<p>三种消息框:警告框、确认框、提示框。</p>1 D) l+ ~0 x, j' q5 o
<h4 id="321-警告框">3.2.1 警告框</h4>
: y. |" `0 X' Z: C* J<pre><code class="language-javascript">alert("Hello")3 n9 k; [5 W4 }9 [/ |
</code></pre>
2 l# ?! g% P/ J) H7 \0 V<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>2 r/ _, W2 ~/ }
<h4 id="322-确认框">3.2.2 确认框</h4>4 t: U! o1 B$ Q0 m- p+ O* I7 o
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>: _3 Z. ?1 x5 x" D8 l+ v$ G2 h3 k
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true
3 b) w, u4 J& ]true' a, l# ~5 u# H
&gt; confirm("你确定吗?")  // 点取消返回false
( x8 t' P! ?/ A# ~9 O7 D% G# |! A7 F! Sfalse% Y, [7 e& u& ~, N; _" @9 ~
</code></pre>4 g4 n. k2 B/ E" Z5 S5 \2 p
<h4 id="323-提示框">3.2.3 提示框</h4>
. K$ T7 y4 _3 q' n; N* N3 k<p><code>prompt("请输入","提示")</code></p>( F( s. N2 L  R3 B  S4 }' s
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>6 _# Q' i/ o2 y) q9 m# X3 B2 V/ |; D
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
( V' F5 a$ S$ P+ N5 j  i2 [<p>如果直接点<code>取消</code>后端收到<code>null</code></p>/ C2 \* ~$ f# Z4 s3 s' q' ~! L, H. K
<h3 id="33-计时相关">3.3 计时相关</h3>. v, D+ Z7 z3 D3 M3 w& M9 u3 j+ }
<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
/ R- o! Y4 r/ Y<pre><code class="language-javascript">// 等于3秒钟弹窗. S, g8 [# p! z/ S: d
setTimeout(function(){alert("Hello")}, 3000)
; E& g" h' c" x9 Y' e( j9 X+ @
! j! b3 ~* {0 Q+ Cvar t = setTimeout(function(){alert("Hello")}, 3000)
+ W7 I& i: c/ j! p2 M
/ Y% ?6 e' A  M7 U// 取消setTimeout设置
! Y- r; u- {; {* \8 C& rclearTimeout(t)
9 R3 \! G5 j- {$ |</code></pre>
  M' y- w0 g2 @" O+ f" z: C<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>+ f  J: a( O, j7 ~4 b8 M. N
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>6 L2 o% U. ], J& ?3 P
<pre><code class="language-javascript">每三秒弹出 "hello" :
, Z" K9 `) J8 ?* o# |, N1 }0 KsetInterval(function(){alert("Hello")},3000);2 k( [+ B8 {" Y, H
</code></pre>0 ~8 ]$ X8 x% @0 j4 T, D
<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
1 I0 I; f" x$ _; X, E<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
8 J0 b0 @  ~# ~1 U5 k- }//取消:. D' @1 k( E! C
clearInterval(t)
9 G6 p  P+ x: F8 T& `</code></pre>$ g+ x' A% W5 `- v

' G/ F3 ~" B: M! k$ Q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2026-3-31 15:29 , Processed in 0.069611 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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