飞雪团队

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

前端之JavaScript

[复制链接]

7928

主题

8016

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26114
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式

: \! j! B! ?7 E" q2 @0 N7 @<h1 id="前端之javascript">前端之JavaScript</h1>
* ~- u9 ^, S- }2 x4 w7 V6 T3 T<p></p><p></p>( X; P& e9 z  ~5 ^
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
( |. v  g! j, K<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>! f! c! G, ]$ Q: E# ^. Q! t8 j/ a
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>5 _. l: E& v: A$ Q( M7 C9 R
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
" t; K  G5 a+ r6 r2 ?它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>0 H" c5 S$ B' C8 C) J$ }
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
% F+ a& Q7 s* C- ^3 E<h3 id="21-注释">2.1 注释</h3>
) ?. r5 ~+ q! c! b* y* }2 G<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
- M- n8 Z; @8 c4 _* M* Q$ n<pre><code class="language-javascript">// 这是单行注释) g4 J  `0 F5 A. f$ }
* |6 P6 d. \( F6 ~$ o
/*
# ^/ M3 G* V3 C0 x6 F1 G这是多行注释的第一行,0 @% [) K  [  B5 h- m; ?9 m
这是第二行。
: E3 k2 m6 p+ k! l3 M" ?*/
9 d8 L" q, W9 T4 Q. a# Z# L0 R4 v</code></pre>/ t- M1 j4 N" ^
<h3 id="22-变量和常量">2.2 变量和常量</h3>
) a7 \* e: A  i: c( ]<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>& A8 m- o' {# u9 K5 o+ }+ d
<ul>
/ m. T) h, A/ Y, A$ ^<li>变量必须以字母开头</li>
. o* B$ _  q5 e; w  Z5 M<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
- `9 ]8 ~4 a$ N<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
8 H8 [6 e' U; t+ h1 ^$ O8 Y</ul>
$ s: Y' c7 B0 O9 v<p><code>var</code>定义的都为全局变量</p>
+ ^8 C2 K, a* k: L/ _6 o) `  x<p><code>let</code>可以声明局部变量</p>: s& ]5 [6 F  B
<p><strong>声明变量:</strong></p>5 r; t. V! E8 u; I
<pre><code class="language-javascript">// 定义单个变量/ G6 s$ ?% q$ F$ r* n8 m0 @
&gt; var name
, P3 ?8 d2 e) \8 j1 d, q/ ^% i&gt; name = 'Hans'
4 M' l" I% X6 _  _0 R! L//定义并赋值! p, f# N3 K9 S
&gt; var name = 'Hans'; K: @2 \1 s- U  d% v
&gt; name
: ^7 Q  a4 k9 a* f$ K& |1 k'Hans'
4 Y+ ?* E/ z; s7 C: \$ g& \# F) w5 D6 f9 @% j! o, t7 r( u
// 定义多个变量- R9 V/ |) i7 b( I: E& z! T
&gt; var name = "Hans", age = 188 f( e! R& _+ [  Z" U7 ?0 g
&gt; name
/ x( s1 M( N* F5 n'Hans'
1 @9 d$ M2 E" o$ `. i5 u&gt; age
! j  s7 ?$ @9 E+ t) g- |1 m18
) e. ~- C5 t: \7 k
4 o- G, s% N1 `/ t" B4 a( K//多行使用反引号`` 类型python中的三引号, ?8 Y$ [  [& B. N. c/ E" |
&gt; var text = `A young idler,
2 n+ m" @6 r8 r" m- I+ fan old beggar`5 N( S" X$ G7 H: i. d
&gt; text
7 J+ N! M' Y4 l'A young idler,\nan old beggar'
" L9 ?% A1 C  O! ^</code></pre>
" R+ e1 `/ q( S" p6 P/ }" J<p><strong>声明常量:</strong></p>( S0 ?" I' Y4 O- [2 @8 F
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>0 m# v4 ]0 X% y6 ~! i- Z
<pre><code class="language-javascript">&gt; const pi = 3.14
- B, O6 f4 Y) _; K: X&gt; pi
! |$ }* o+ W* C8 m- c) R  p1 C3.14
8 F) F. y& \. u0 v. h! l. b* k&gt;  pi = 3.01
7 q( p( Z/ d/ C! E+ _: \7 gUncaught TypeError: Assignment to constant variable.
& O( l0 T. [4 M) R$ C    at &lt;anonymous&gt;:1:4
+ B) _4 H+ m. ?  j
* z1 v) O$ B0 f; w" n: M</code></pre>5 h) C' C6 o1 @% `
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
: W5 H$ W$ {' R. w# P0 j5 O( q<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
8 f3 r! j" \: V<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>$ u" \  H! s; J/ I- S+ m
<h4 id="231-number类型">2.3.1 Number类型</h4>7 T( W' |- r/ n" N4 @& K; a2 t
<pre><code class="language-javascript">&gt; var a = 5
  T6 c% q/ \" Z  c4 \6 e$ q7 s&gt; typeof a   //查看变量的类型  
, X; D8 a* f2 C& u0 b7 wnumber" p# p! N  n$ F0 H+ o( N
# y/ d* H/ R+ `! y% a7 e' H
&gt; var b = 1.38 \. [4 P6 M+ k! b9 q
&gt; typeof b
" v3 Q7 \0 f+ knumber3 v& V6 T- ?# Z' u. c+ E; o) z0 {

; J3 I5 q4 e; }% b) W/ T( P9 N: j// 不管整型还是浮点型打开出来的结果都是number类型
8 e/ X, T% ]. [  h0 m
: A  H- w: u; d8 S# T' Y2 X) U3 v/*. ?1 C# ]2 O$ X, u4 y
NaN:Not A Number9 D. ]4 h+ d9 |* E; g$ B
NaN属于数值类型 表示的意思是 不是一个数字
( U( Z* k6 j0 g$ Y6 Z9 U- L*/* ~: h, l% T  V2 b6 Y  C' Z

5 R" l8 t( I2 b! {parseInt('2345')  // 转整型8 d1 q8 {/ O! R
2345
6 ?% K" u( V( b8 LparseInt('2345.5')
8 m+ F* ]# G1 V9 Y% d8 P2345! c6 }8 U# d* |/ w
parseFloat('2345.5') // 转浮点型
% X+ ^% R- X4 `& w. c- B2345.5% W8 u0 U2 w  [. ]2 F
parseFloat('ABC')1 m$ m5 ]2 m  j( c& H) O
NaN* t! T8 a+ e( i% D7 C. J; `8 m# Q
parseInt('abc')' }+ F, E6 m  d
NaN
: ?/ ]: `5 f3 P* o+ ]</code></pre>
0 R; ]& K1 P' U$ Q<h4 id="232-string类型">2.3.2 String类型</h4>
7 D; j# ^; r7 a0 Q- L9 n+ S- r<pre><code class="language-javascript">&gt; var name = 'Hans'5 L6 A( y. F" H0 ^( I# l9 \, M
&gt; typeof name( x: ^$ c  ?1 }6 g; Z$ L
'string'" S! N; Q* }: V) l/ |

( H4 \  p. R& V: p3 L& c//常用方法
# I* L. f0 m3 V1 c// 变量值长度7 g& q- }1 x8 M1 R1 o5 Z( V
&gt; name.length/ Y6 c, I$ m7 [3 Y3 l! z# F0 b# p
47 B- K' R# e9 ?5 q& q; y
// trim() 移除空白: h/ |3 F5 V5 w8 n) y
&gt; var a = '    ABC    '+ `$ l" H, m3 O' P6 e
&gt; a, c8 g. y( L/ T; a# [
'    ABC    '7 ~9 Y- `) s: `. ^; C. i
&gt; a.trim(): \) r$ @: Y* r" s1 ]0 U; n
'ABC'
) y+ n( B# M  h! C2 y//移除左边的空白
! I0 g  F0 ^3 |&gt; a.trimLeft()) D$ r* K# N2 ^% s8 @) {  _
'ABC    '
+ ^2 A9 T) J" |0 w//移除右边的空白
: @8 @! J4 ]. D0 H: y# U/ }&gt; a.trimRight()
" H+ b1 F, j) W# [5 K: i'    ABC'5 V$ q5 X" y# d

0 F: p; E$ u/ W' ]4 T, y# c, A//返回第n个字符,从0开始5 b3 A8 H: k3 A- r! |
&gt; name
! ?) ~/ V" \) _* L, x'Hans'
$ _4 {4 H% f, M  b9 F&gt; name.charAt(3)
9 z; A( d) e/ V's'  h5 I: J: u# c. @
&gt; name.charAt()
4 R% s( H9 A, z: g2 D9 g# i'H'
  O1 U8 [, U! m% O0 t+ S&gt; name.charAt(1). N7 V, g9 e" z1 C
'a'
( m! K( V0 Z" b- ?$ ~" Y: L) U" z% j- q8 W/ X7 G2 X5 d4 d( S
// 在javascript中推荐使用加号(+)拼接) T: g1 z4 `- \5 g6 a
&gt; name1 l: L; v8 p8 Q# X- \, o
'Hans'
6 X" P$ ~6 v. j9 }&gt; a' ~$ T+ @) w9 e7 z" A6 }& }
'    ABC    '6 X3 @3 p! s1 O& h: [0 J; p. R
&gt; name + a! E5 y: x& i' i! U; C
'Hans    ABC    '! m5 j( ^. J; Z: c& q% i" o+ N% R
// 使用concat拼接
5 M' [' `; L) Y$ Y&gt; name.concat(a)
2 w( W% `3 L( p. m'Hans    ABC    '
3 o7 r1 Q2 I6 d  u; ~7 o8 V6 w7 {& r5 J4 m; h
//indexOf(substring, start)子序列位置
# _, D' l% X9 E, f
# j/ c# k, j8 k" |: Q&gt; text
7 w( ~( s) N, C9 g3 a* U7 T' D'A young idler,\nan old beggar'. N) b4 ^+ T# G! l' w9 _
&gt; text.indexOf('young',0)
) k; F! V! X% H" I+ N2 h) |7 n2; u' U+ R/ Y1 `- m! C+ v7 i0 x
; H. Q0 j/ j  B0 c' j
//.substring(from, to)        根据索引获取子序列  o4 x( n; p+ @( V$ |1 T5 K# C" p
&gt; text.substring(0,)
- @, E1 _4 t5 u+ G9 r'A young idler,\nan old beggar'
5 N  I# p5 w+ {0 E& B. V&gt; text.substring(0,10)+ p8 n3 E& A2 G) U( _. W
'A young id'
$ D' m3 z# S# J# n. a& s& ^2 m2 [2 ?6 f5 r0 X& U) y
// .slice(start, end)        切片, 从0开始顾头不顾尾
3 W1 ]) x! J, G&gt; name.slice(0,3)
6 @2 \( t0 _# e. f'Han'
+ H9 o0 q7 t, \0 o
) T/ m7 g3 X( \# Y& C! q// 转小写
& `& r% ~+ @* t1 }8 K* p&gt; name
: u- ~, w" C& x8 T3 s: U1 S'Hans'* _8 i. A- n9 x; o
&gt; name.toLowerCase()7 R4 _- a* R' `  }7 y% D$ V
'hans'. a9 G* B2 y$ J) Y! U1 [' [$ Q9 P  A+ H
// 转大写& Z" _1 U) t9 D
&gt; name.toUpperCase()  [1 V4 a% \( Z3 `7 b6 K
'HANS'
5 W! H! f/ [, f4 `3 ~
6 o7 Q* k- }  l/ B* V2 A) \/ G// 分隔- s6 W2 i- E& j* q; Y
&gt; name
; y- D' S" Y  y' J3 P) t) H, }'Hans'; {, j! j8 G4 O+ Y: @  U0 T( k
&gt; name.split('a')* O) B' m$ f$ a" t( k$ W
(2)&nbsp;['H', 'ns']
; i" C$ u0 G9 t: K9 z</code></pre>
: W* h6 z5 `/ s9 G$ F<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>5 s- D- i6 f! {
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
0 ^* N: i) J* ?3 @<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>1 p' T+ m/ n7 k! S
<p><strong>null和undefined</strong></p>
1 Z! p# [/ h; H' n<ul>
4 f: y9 u' N0 @7 E% u<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
2 _- ]1 D: y# X$ I<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
( Q8 L* b+ c9 h/ ]. S" N! E</ul>
1 o! C9 r& N. v0 |( K( w% W<h4 id="234-array数组">2.3.4 Array数组</h4>
  I' N' m" u/ B) x, \<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>, L/ Q6 r+ N8 F  _
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
+ z* g3 e0 z0 ~2 I9 {  d* s2 y  e&gt; array1, h3 S$ h  ?6 Y6 [0 u
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']( {% H4 N# [& D' a% b. ^2 |
&gt; console.log(array1[2])  //console.log打印类似python中的print  n9 ~" M: u+ O6 N
3
0 ?: D; `3 q9 \5 y1 d// length元素个数
1 H8 c: e/ P5 x( `% Y0 c% ^&gt; array1.length7 T; w+ r; `" v, d; A
6, j' N9 e3 D1 |- t; q! c$ u0 V
// 在尾部增加元素,类型append
0 p3 h% Q0 t  _6 ^- J4 w&gt; array1.push('D'); L* X0 t; p* @. {. U' Z. Z
7  D9 d$ m' h( }. F
&gt; array1
3 c1 S, q+ M# k' l(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
$ u$ G; W! X( i+ r4 Z# R% Z// 在头部增加元素
' n; I" [3 X1 L- q&gt; array1.unshift(0)9 {$ y2 [" g9 q, k' s, q/ G
8
" f# \0 B: y9 v9 c2 O& p- k&gt; array1- d# s; D  T( I5 L" u
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']4 r5 E5 s! V& i3 {3 J+ K0 {* ~
; D$ y0 `- n4 n2 P' z7 K
//取最后一个元素) a, X2 h2 E% Q; N( J5 ~- e
&gt; array1.pop()
0 Y+ y$ v. \3 X# ~( |" L'D'
3 ?5 E4 u3 y! [: ~. b+ F0 [&gt; array10 L! v; b) x9 F2 ]8 }" T  a  i$ u
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
  ]7 b7 d! i& _, o* [8 r7 o  q# @6 N//取头部元素
. s& r3 L, y  P2 i& L- J/ M  J&gt; array1.shift()
* \5 A4 e" S3 p/ U) L02 ^7 X& ]7 m9 @) g
&gt; array1% W% h. w9 s7 n
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; S! T5 A' x* m. B$ ?# ^& l/ n" Z
: [/ e  c  H1 j0 Z
//切片, 从0开始顾头不顾尾  Y" U0 ?1 n/ {
&gt; array1.slice(3,6)7 H- o$ l/ [& P7 r
(3)&nbsp;['a', 'b', 'c']
. d0 _/ K. S$ Q% P. [2 K// 反转
* k; a. X# M% y6 ?&gt; array1.reverse()! {. d4 Z+ C" u5 |( d- Y! t
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
: v& s+ [5 H5 u4 Q0 q( V: l// 将数组元素连接成字符串
5 @8 Z0 M7 |: }) ]5 Y7 N6 C&gt; array1.join() // 什么不都写默认使用逗号分隔
# _" t3 W; @7 J'c,b,a,3,2,1'- X6 D# G/ g4 y$ Z' v1 A
&gt; array1.join('')4 S3 A6 o. G: J+ o
'cba321'% s7 |  }6 S: ^6 q% M" |- ]
&gt; array1.join('|')' r' M+ y+ h4 J' j4 D
'c|b|a|3|2|1'
4 n% Z- C% C& |( I  f, \
& p/ x9 Q, V9 j5 y// 连接数组. n$ Y* k# i# t% o, n% S- h% h
&gt; var array2 = ['A','B','C']
1 `& A7 L8 P9 \, B/ f&gt; array1.concat(array2)
7 H1 \7 j5 Q( u$ |(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
  s: r$ y5 {8 K
$ e! |8 b) [0 e1 _// 排序/ U5 h8 X8 s* ^$ h( h
&gt; array1.sort()
# Q1 M) ~6 ]! m3 B4 u(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']8 R' l* N# ]% X; }+ {' J7 b5 M3 i
  j- ?6 [# `: h& P0 p$ |. `* M
// 删除元素,并可以向数据组中添加新元素(可选)
7 r2 Q* A5 q$ X&gt; array1.splice(3,3)  // 删除元素
( i, P1 q7 Z4 G- w9 X/ W(3)&nbsp;['a', 'b', 'c']
% \9 ?1 G% @6 R6 ~$ m4 |" B&gt; array17 ^1 p- }) \! x4 j
(3)&nbsp;[1, 2, 3]
- K: f, h  p: ~; i) \  {&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素  P- f$ ^: v. Z4 e% g
[]. j/ z/ c  C7 a3 X
&gt; array16 F7 F! a2 O3 Q5 g0 w" s/ r7 }+ F
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
* ]2 x8 K) _1 E; j. o8 L, S2 l1 X4 Y  ~
/*
" @, x/ P: L1 t4 wsplice(index,howmany,item1,.....,itemX)
- X+ ]/ y# R: }2 [index:必需,必须是数字。规定从何处添加/删除元素。
1 N9 @& ^; Y  T/ I4 hhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
- u$ U, p" P$ q9 G" {item1, ..., itemX        可选。要添加到数组的新元素
; k4 ^+ D! G* [! G*/9 j- ~/ _) Z2 f

7 ^  \! D# {; Y  A4 j7 W/ g// forEach()        将数组的每个元素传递给回调函数3 n8 K; {" `0 I- S2 \, D, L/ n; ~) i; J( c
&gt; array1.forEach(function test(n){console.log(n)})
' O1 N( ]8 L! b7 g8 b+ |7 V  u 1. b2 g% e! X& K# [; q6 g$ p
2
5 R3 C. u" s0 n0 \: f& y 3% ~! P, O) i" t9 ]% {
A4 k& I, ]0 |2 s( v  g! n' g
B$ f9 j$ N8 ~1 o" R
C
: |# L! y; \3 l4 B( G  M// 返回一个数组元素调用函数处理后的值的新数组
7 q0 G& ]2 K/ g) M# y9 A) a) b&gt; array1.map(function(value){return value +1})3 a- `9 g( c% @) R9 L6 o* ]
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
0 f, s4 E, ~+ h2 e, T3 A& S. d</code></pre>
- v8 ~0 e+ L+ b% J<h3 id="24-运算符">2.4 运算符</h3>
* T4 l* y, Z# B<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
  j' e9 i9 w. e/ ^3 O& W4 D<p><code>+ - * / % ++ --</code></p>1 p, W9 H2 p/ D( c/ I
<pre><code class="language-javascript">&gt; var a = 6* P1 d, T0 r* ^. N+ |. v1 V
&gt; var b = 3/ g* s1 J; G* x) k  j
// 加5 a: G* F  l1 X- U+ ^7 ?
&gt; a + b
5 r- |4 {# \( j2 X1 B  G9
+ l; N/ o9 i; v8 v/ Z: A; K" ~// 减
7 b5 ?% _+ U: p7 D&gt; a - b# k8 f" r) h- Z0 H, U
3
+ H# K7 ]4 Y5 s# a" J) `// 乘4 u  B& z  u% e6 F# I6 f, I1 s& O5 S1 D
&gt; a * b
8 `& ^# Q: W6 w. g9 p18- o" v. s8 a5 ?3 n% P  c
// 除
& k* F! R1 @# Y# m&gt; a / b
! r4 u  y% U/ ?* a2 W2
3 [# j: }* @$ s8 e* `7 k// 取模(取余)- Q' `$ }! b5 H) w  i
&gt; a % b
5 S0 K3 G6 ]4 [! T2 ?- v( J& m, U+ Y* C0( l' j, s* I. V
// 自增1(先赋值再增1), R" J* [* T5 j8 a8 s4 a
&gt; a++7 q. R3 `; f, h1 `2 n9 L8 g  E/ Y% D
6- x6 ^' H3 M5 D/ p7 `
&gt; a7 V. N$ f# Q$ [/ c
77 M* K3 }8 E$ u1 K5 Y& c) V
// 自减1(先赋值再减1)2 f' L0 z0 B' k$ v! M
&gt; a--( Q3 ?- _  P* ?2 n1 R! N% M, C
7" V( Y! {: Z+ A( k  O8 K
&gt; a0 y# B$ p0 ?0 ]) v2 z
6
/ U+ R3 W6 b5 n  }) A) G// 自增1(先增1再赋值)
) ?, W) c3 m/ |  Q6 G+ y&gt; ++a
8 j6 F: d- X4 T# s9 \7# Y' M8 t' q- v! B3 c  i
// 自减1(先减1再赋值)$ e6 Q3 a4 M8 c2 r
&gt; --a: u" ]9 ?$ H% s3 G
66 H. b: e9 J1 T+ k- e
&gt; a
5 X; w4 Z- }2 y6
9 T6 q+ B6 ]2 W8 S. C! ~1 G
7 M6 u! J) H; ?//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
* O+ a7 ?! E7 x' P, B  C' A' R# s2 F</code></pre>
( P% e- n- N, B, n# j<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
, \1 W6 C# `$ w4 O  m( y6 X<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>" k! @9 F9 p& I
<pre><code class="language-javascript">// 大于
) g) F$ S8 y6 O, v7 n/ {1 ~) _&gt; a &gt; b
5 \: m8 a8 s( v, C6 Btrue
  P  ]6 Z" M+ l7 T! @  l# |// 大于等于
3 f9 g8 a4 E, c6 k+ M$ M5 ?9 |&gt; a &gt;= b3 g7 d/ s' J$ K& J& N. v
true
  S- m' _  v1 u  o3 q// 小于. u- B5 \( n% n( }; X
&gt; a &lt; b
" F+ v! {1 U( O1 s) e1 H9 \; Jfalse
: E. n: o. a, I/ c) V/ q// 小于等于
4 e! O; ~2 F& J6 n* J7 U! G&gt; a &lt;= b
; y6 A8 W9 ~5 p, Xfalse, {) }5 D! @; `; S
// 弱不等于- _6 s9 d4 Q, ]" B
&gt; a != b% ]1 X/ x, a& L3 ]1 s, J
true
! Q4 O7 P4 u6 ]$ D8 N) G2 q// 弱等于. Y& n0 q) O, ^% D: E& T; E
&gt; 1 == '1'
2 {7 G! u8 c' r; f" u* T/ Strue0 e, I( g6 P. ]5 r/ r7 N) D
// 强等于
( H1 _4 |, ]/ v7 r6 C- _&gt; 1 === '1'
/ q4 \1 `% J$ j$ Vfalse
/ N$ x$ c9 _1 O0 w% u# P% D// 强不等于5 ]; O' ?6 x5 d: @
&gt; 1 !== '1'& v  ?. t9 g1 _4 c' O; ^
true- F0 d  t- I) S
0 ]2 B' H. F0 d4 o
/*
( d: r2 @: R' [, S: ?. L* {' g" f% z$ dJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
5 z7 Q5 V3 j% l*/  u' H+ H8 ~  c
</code></pre>3 x' X' {+ n: p% p6 u8 Q
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>$ B8 [% z; y" b; a0 J6 B$ `5 \
<p><code>&amp;&amp; || !</code></p>
% u/ j- T  g8 O6 H% r0 U/ y<pre><code class="language-javascript">&amp;&amp; 与$ P; w" o# Q% y; Z+ Y& A
|| or - _/ g! G' p& U' W& ]
! 非/ _5 c8 Z- T0 K/ d. m: J% w7 C
</code></pre>: n$ W; r! n8 q" V9 ~& [
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>( b! v1 L% G0 G7 E
<p><code>= += -= *= /=</code></p>
8 N) y! x9 K( D0 ]- s<pre><code class="language-javascript">// 赋值
9 N# |, P/ s! X8 {8 i+ P&gt; var x = 3, {. C8 O* |3 k, a, |/ m! m2 t' I: U
// 加等于
+ P; ^- S0 H" ^&gt; x += 2- [6 y8 D1 W" B" E5 ?7 [- `) _7 M. B
56 A, G4 k5 y/ B7 V8 x7 v- g
// 减等于( w  T' D* p2 I; I3 G) _" o
&gt; x -= 1( V5 H4 B5 F+ f' P3 {6 S. k# f
4
% s4 {. B3 E" s( y  X// 乘等于
! i) b5 E9 h0 m& v, v&gt; x *= 25 K2 k; I) ]# r6 d! Y
8# A  G+ s) |; q. @
// 除等于
( |# l" Y# k/ w&gt; x /= 2
. }3 v1 |7 q" Q1 V4 ^! b4
. {$ Z0 i% d+ z, H. d4 _. C# b</code></pre>
- _2 w' y9 V: o6 |; O9 A( v<h3 id="25-流程控制">2.5 流程控制</h3>4 B( ]+ _4 K7 ~) ~. M2 y0 z# \0 T
<h4 id="251-if">2.5.1 if</h4>
& N7 A) S3 o3 j0 M# S& A$ ]/ c<pre><code class="language-javascript">1, if(条件){条件成立执行代码}/ d2 t% g, C9 u: Z6 S
$ W6 t7 J+ m! \
&gt; var x = 3- a$ [! y' V1 y$ d
&gt; if (x &gt; 2){console.log("OK")}
4 r. c- v4 |, Q/ c; U OK
6 q" L, M+ u/ j) S$ O* j5 d: p5 d3 {9 y5 m" l% K2 \; p  I
2, if(条件){条件成立执行代码}
" F: D5 n$ S6 j0 R        else{条件不成立执行代码}
! T2 Z+ i! z3 Y$ j1 w/ m7 ], l- Q
& `/ f1 l2 G- v# O&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
2 Z! h  i$ [+ c* P. O2 `0 w'NO'0 L- S# V6 q1 d' R3 n
, G& I0 h, p  @; _" k; }
3, if(条件1){条件1成立执行代码} 5 u; J0 r& X2 q( r/ G; i
        else if(条件2){条件2成立执行代码}5 L% {! B5 V; @0 o1 B
    else{上面条件都不成立执行代码}2 t  ?: y- j+ ?% i9 w; s$ \
# O- j' f' ^# T7 J& \9 S1 c
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}  \- I7 g& d- `
Ha
! ~, `& X& I" m</code></pre>9 e; i# G5 w1 W
<h4 id="252-switch">2.5.2 switch</h4>, K" \; s$ o: L7 _5 `$ ]
<pre><code class="language-javascript">var day = new Date().getDay();" m8 a- ?1 I- ?5 K0 K) m/ v
switch (day) {- m5 |3 N7 J# f9 C
  case 0:
- x+ q' O0 I5 |7 g) [* B  console.log("Sunday");
( q0 x( [+ L# M. l7 T  break;" ~0 x: u$ P) u- Y2 U7 ]3 R
  case 1:
0 B2 O) m* e% b0 R0 z  console.log("Monday");8 M5 U7 _5 g. k8 S* u1 F0 D
  break;
4 h. ?+ P  Q  _# a% b6 z# Tdefault:, ?$ A1 @; O* [1 ?1 ]% G5 Q& O
  console.log("不在范围")" m5 P5 u: H+ A# a+ `
}6 t) \7 j& |% K, w6 ~: o! K1 v; q# V8 a
不在范围% [0 n8 G, K# P" W/ b1 q/ U
</code></pre>
. [9 U' W1 \5 D0 T<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>0 a1 Z6 r" B* c$ C7 T
<h4 id="253-for">2.5.3 for</h4>- p$ a, Y% k* q7 K! r
<pre><code class="language-python">// for 循环
" {- Y9 E) {0 p, }7 b: {( M# z9 N        for(起始值;循环条件;每次循环后执行的操作){
* T# }& P4 a+ j. o3 i4 x        for循环体代码
% x' s7 F$ o- f' J9 u* |    }  A4 u% S: I# V( k  G. n

% g, D( E% o! pfor (var i = 0; i&lt;10; i++){% C7 M& `3 b  H; X' {
    console.log(i)
5 V4 d. E- V) Z2 ^3 q/ L) _$ v. S& E}& b1 A% h6 k: A" G& R2 M3 p
        0/ A2 P- z6 ~6 l/ L, i/ M6 ?
        1  D* ~; g" t" o
        28 F. \/ N- Z! t/ L
        3
/ D, M. U9 S9 w; P        4; s4 q2 p% C( C: \
        5) O" y2 S% K1 v7 w- w/ D* C
        6$ d7 ^2 v4 O8 K) l5 Z4 H3 r  q
        7! ]: K# r/ z& f6 }; l$ x7 O1 x9 Y
        85 Q/ ]: r% {  ^- ]: n/ f7 F" C
        9+ _  }( O8 N! L/ ^: ~
</code></pre>* {1 x$ i$ j- A1 w
<h4 id="254-while">2.5.4 while</h4>
5 X' j5 _  L5 `3 [# P<pre><code class="language-javascript">// while 循环% I: w+ V: T8 ]
        while(循环条件){% f4 N, l+ ~! n$ e, @6 y
        循环体代码
6 L, j4 l+ O7 l. \9 e1 \9 }; N    }
; d* P" h3 q) a6 ^" a$ |; Y0 t) ]- X$ h9 h. l) ^& Y: ^
&gt; var i = 07 h1 s# z3 i$ Y: c( S- p- l
&gt; while(i&lt;10){
2 A4 J( S  Z1 I: {0 k# x    console.log(i)9 g' F* `8 E/ P9 T
    i++& ?: v" F6 N9 C& ~
}3 x: B: L9 L' X/ y
0
$ V" Z0 m5 P1 u5 n 1
* }; M- c& S0 V  l0 k/ { 2( {) o* C3 N3 E. c
3
9 w& `' u- M7 }  A; _) b( { 48 c6 X) C7 [) h" r0 t: I
5
; i0 V3 H7 I$ U: h3 l: S7 T) o( c 6* `: ?& K1 p2 D8 Q& I" e7 p2 v
7% U  [3 l. ?% i9 ^' n8 n
88 C8 |) q. x* ?# \- L% A/ ^( G
91 `& h( }+ U. Z% w- n. V& f
</code></pre>' R1 m4 E" D6 Q! W' }; D
<h4 id="255-break和continue">2.5.5 break和continue</h4>9 w& u, I( }, f
<pre><code class="language-javascript">// break  l! x% a$ l" x. y2 i6 r
for (var i = 0; i&lt;10; i++){4 C/ d7 O  m' @7 w2 m3 ?  g
    if (i == 5){break}6 B3 J6 z3 b4 r. A
    console.log(i)! _3 @; G5 h0 s8 _" N) ^
}
5 i4 F; \8 Z+ p9 s! K 0  P# v( I% I% ~/ Q( V9 [
1
3 X9 c; v7 u; r! M 24 q7 `* t1 a/ x5 m* H
3
3 R5 ]/ D) v; D! q6 I+ A4 i 4, C+ r+ X" V! g* Q
// continue
( D* g9 d# f# q! s, Y  W+ ufor (var i = 0; i&lt;10; i++){
1 f: T3 F: x7 ]2 u( l) C% k$ n! @& S    if (i == 5){continue}" y5 }; d* v$ e$ X* s
    console.log(i)- |% S, B9 N; J7 v5 p0 g( V) }6 `
}
, I% D9 ^6 G: S- U0 l/ x 0$ p; L" c- ^" u) ~! C& n  j
1" N/ v( g3 w* x. f1 n) Q$ Y) D: x
2& K( \3 N4 _  H2 @
32 J' `$ F. F6 @, I1 e1 P) y! L2 ~2 ?
40 I  |: \$ k' ]. e. m. |7 C
6
6 }$ @' o- B6 k+ h- ^. ~# z 71 A/ \% G" k6 j4 w, B% d+ j
8
. V+ a( T; [3 I2 O% f& g2 U 9- a" z, d, E  W, \" n+ f$ \  p

, Q( W) i5 a: W" U</code></pre>
7 Y6 T% ?$ @5 I: [) \* |1 H<h3 id="26-三元运算">2.6 三元运算</h3>
+ n2 J( Y; @) x& G. g2 x' i<pre><code class="language-javascript">&gt; a
" s; ~" j: e1 u. I2 |6
) x/ A& y. ^' H3 e&gt; b
  S6 P$ B. _. ^6 i( l" E" C0 \$ x' S& y3
' l# O) f) O* `) z( V
6 a9 w$ P* O! {0 M8 Q9 [" f//条件成立c为a的值,不成立c为b的值6 i; g" U- Z  g
&gt; var c = a &gt; b ? a : b* \8 \8 _& R6 {
&gt; c
  m# J6 l4 p, ~1 \" j: ^, y65 G% |; K( f. U" g" @6 h
6 q# ]6 T0 [' X. G8 [
// 三元运算可以嵌套. ^+ o; @! e- n5 _
</code></pre>8 ~  N. c' I) \' g7 |  ~! ^, k, W7 i: b
<h3 id="27-函数">2.7 函数</h3>
, J' M, T8 [3 t; \<pre><code class="language-javascript">1. 普通函数" a! E2 v, _1 P) S& A1 j
&gt; function foo1(){' }7 p# r/ H- H8 T! b+ V: ~/ h
    console.log("Hi")
+ ]( c  ]; s+ M}* V$ H0 n" u  _. V' E: p: z8 b

6 Z! S) l! w9 V) n7 q&gt; foo1()- c& d; c% C3 ]" s4 M8 Q
        Hi
4 z% ]  o0 k5 k1 L$ }) A2. 带参数函数
4 p$ a/ e4 l4 D9 d: F  {&gt; function foo1(name){
: q9 }# C, m$ N  q+ y6 Hconsole.log("Hi",name)
0 |9 r$ ~* A6 @6 i; `; c% {8 W}/ S0 R3 e2 [6 ]4 q/ G6 }

: {, U) b1 P& k( B&gt; foo1("Hans"), o7 s" n( c" L! v) m# ]+ z# D
Hi Hans  W; x- q9 K4 N$ U; n  y. S

3 |" d& t4 A/ v* o0 C&gt; var name = "Hello"
9 j6 Z- D( J( X# I) p: W! e, D4 b&gt; foo1(name)/ C, [  }6 t- n$ V, ~( K
Hi Hello1 k; V/ }3 k. |+ t( x# ~& ?
( z$ `# L2 d& U; |: f
3. 带返回值函数( D) r) L$ B/ p4 l/ S) R& V
&gt; function foo1(a,b){3 [1 r; e5 f" q6 B
        return a + b   
! d( m* Q* w& y# t, k$ W}
: _( O; t1 O0 z9 _% O" P&gt; foo1(1,2)
( x) U0 P4 ], f# H; x! `9 g% l3
/ O- @3 `0 U1 |: N5 Z; f5 ~&gt; var a = foo1(10,20)  //接受函数返回值' M2 _9 ]" Q( M
&gt; a1 o; @$ T! {* x) \3 t
30
( v2 [. y" u; P; n3 J3 R2 z8 \& W" _- C+ m# H) l
4. 匿名函数
% R$ c7 n$ J. u( R* }0 X* X% C&gt; var sum = function(a, b){* O  r0 e; f% [  Y: n4 M
  return a + b;
+ S8 R" C. |& |; [$ s& N8 C" D5 K}
3 i# _1 ~5 U& x7 d' z& e9 H1 }&gt; sum(1,2)8 H3 d, c6 v# ]1 j2 `6 P, v
3
9 t' H7 P8 Z0 m4 g) [3 p5 z: L( `1 l2 K, F- q5 V
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱) c/ I- |! F' F$ t
&gt; (function(a, b){4 @3 c, Q0 k* l5 w: O4 z$ f/ N( i
  return a + b
3 |: e; Z; t. t2 P; F})(10, 20)+ X- Z5 ]9 S" l0 }( |
30% [' U$ n! d& r* e6 f: k4 ^

/ d. g0 ]8 l3 R, N! A5. 闭包函数  l- E5 r  l9 x) N; a
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数
" p5 Q. l4 u. N6 vvar city = "BJ"
! r8 e2 H3 B1 k! e2 h; zfunction f(){! t2 \6 q6 A6 V# S
    var city = "SH"
! Q8 Y- o  [& J% c0 E/ i    function inner(){- ]( f8 O; s- K
        console.log(city)
& j# [! N6 z! Z) |; k    }, L: h8 J, Y5 p  E
    return inner$ J3 {  a3 w6 j* b9 ~+ l7 g
}  M- p5 y; l1 T( v- m( U2 f
var ret = f()
/ Q3 x& k- }+ ?; ?0 A! m* Fret()
+ B) S2 v( T8 D% j$ {. x) g/ ~执行结果:
; }4 p* I6 R* r) D' U* C, vSH
4 g1 D: o% \4 p/ [$ g5 J
+ W4 z& v- H- T  f  H) L' j. N</code></pre># o6 O) r$ M3 v8 R0 T( `
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>4 R6 k3 }! \" U& X! _& k" \
<pre><code class="language-javascript">var f = v =&gt; v;) q+ X$ f% R7 t4 H) t6 H" Y2 J
// 等同于' _9 D# U5 C; g% N
var f = function(v){/ w! D8 o, c" D; h0 M0 Q
  return v;
# F: k; O0 N+ w/ _5 o7 t}; x7 t9 L9 X) T5 \* t. w5 H. s5 s+ \5 Y2 {
</code></pre>! w( h9 `* ^3 w. |3 W
<p><code>arguments</code>参数 可以获取传入的所有数据</p>8 c  B+ U/ O% @, d/ W
<pre><code class="language-javascript">function foo1(a,b){% l: e9 A$ c/ P  x4 U; S2 n
    console.log(arguments.length)  //参数的个数
6 S0 j0 o' w' c; h    console.log(arguments[0]) // 第一个参数的值4 e8 t; \- D2 _  ?2 X
        return a + b   
) F8 e8 Q& l/ C3 U}$ X; W- F; a6 F/ c
foo1(10,20)2 i" l- p( m5 D7 Z: f
结果:
/ d$ h  f! A, ?0 h 2          //参数的个数
2 m& q; H2 L/ z% d/ X) v4 Z# [10        // 第一个参数的值) |' D; O7 A% j0 z
30        // 返回相加的结果
2 M0 ~; i2 q* G: A6 g</code></pre>8 i: K% ~. G! Z
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
( i& \) z4 N& Y+ F; O<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
  [0 I9 m- K& }7 ?<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>- m& J+ b) R; p" k
<h4 id="281-date对象">2.8.1 Date对象</h4>
& {0 Z2 n" Y, U( G<pre><code class="language-javascript">&gt; var data_test = new Date()
/ T* T& t& ~0 L&gt; data_test
; s' D0 J& h) Z. _7 yFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间), w, l, W& H- M
&gt; data_test.toLocaleString()
$ Z+ p5 o2 }% m- Z'2022/2/11 下午9:44:43'
( h; p% A/ W8 |) d% j/ q: x% b6 q
&gt; data_test.toLocaleDateString()
9 B  k& P0 s/ U  r* y$ G'2022/2/11'# E! E* b7 U8 ]% @8 O5 m% e
0 O1 p8 j2 R. o; c0 B
&gt; var data_test2  = new Date("2022/2/11 9:44:43")
, p; l/ w6 N  s' J0 m* o  x# K& M&gt; data_test2.toLocaleString()7 R" ?2 z( `  V3 p+ s! i/ k, z4 _
'2022/2/11 上午9:44:43'
* S( K# a8 q6 p; J5 T0 {$ |/ l, {
! U' }: C* w6 J0 y// 获取当前几号; d( w% a& a' f/ n+ b$ N4 B
&gt; data_test.getDate()
6 Z9 _/ Z6 h+ C" b119 T! V8 ?4 |# [
// 获取星期几,数字表示: m9 u! ?5 }6 u" z
&gt; data_test.getDay()  
" k7 E$ J  I, A5( c2 Y8 V0 X0 H: s& @8 u! M, U
// 获取月份(0-11)3 e1 o1 I  P* x7 w
&gt; data_test.getMonth()
; p4 j  }- O( i5 O- t) p1 |1 R# O1
5 L5 ^( R4 p9 r1 s6 s+ B// 获取完整年份
0 p  R0 ^; }: R. [  Y- C# i' H&gt; data_test.getFullYear()
. e8 {+ ]1 L; I1 E2022
5 U* P! a1 C/ d+ P; j7 Y' }0 N4 Q// 获取时# t- \4 T. {* M& j( d8 B
&gt; data_test.getHours()
% A: Q5 t: u1 y# e213 Y3 k4 N$ a: f2 D  E  F
// 获取分
7 z8 c5 Z2 h& y" a+ E2 k&gt; data_test.getMinutes()
' C, x& s. ?+ P% A! S6 K( |% T44
. G, v6 E. K. m9 m+ m5 D( _; W& `// 获取秒3 h. `& t9 j6 y. S; x9 ]! ^
&gt; data_test.getSeconds()
& m$ j2 G! d/ R) Q# [) T43( p  ^9 T: \4 d) }* i; Z3 F& Z
// 获取毫秒
) }) w  ~+ Y  F' N# _&gt; data_test.getMilliseconds()
$ C# A8 k2 @' @' U) e& R# }8 U. m2 M2905 W# U* j2 D2 f) j/ ]
// 获取时间戳2 {6 [* g  y" m
&gt; data_test.getTime()/ R. t/ F+ k- j
1644587083290
/ `  g" t$ ^3 [- i# |9 J</code></pre>9 y6 A8 Q* g' J0 C4 x, @; _- e8 p
<h4 id="282-json对象">2.8.2 Json对象</h4>
0 @0 f& t  O# G& j5 s<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
" b0 [) c6 E3 P: ]JSON.parse()  // 反序列化,把JSON字符串转换成对象
4 O/ b$ S- A) L5 X2 N* Y8 E* ]; J# G) d: i
// 序列化
+ p! L- T* G1 t& w- n  T&gt; var jstojson = JSON.stringify(person)
$ b& u& M7 `4 i. j- j2 R# d! \( u6 O  `&gt; jstojson  
) K' r) ^' T3 b# O'{"Name":"Hans","Age":18}'& T& M) O3 c1 R) R7 p5 E5 J
- @$ w, L! Y" U8 g
// 反序列化+ J2 L; ^3 k. V' A/ }7 y# d- i
&gt; var x = JSON.parse(jstojson)2 u) H! z7 H2 F5 R( r0 n4 K3 g' \
&gt; x3 l! N" o! \! z; j+ e7 D$ s8 V
{Name: 'Hans', Age: 18}. P6 I! ?) O8 F& X% r' K
&gt; x.Age# \! f. j1 U4 ]" m" M  [: E
185 _, Q5 n& O8 y
</code></pre>9 Y: h& I/ ?3 V0 `7 ^; I  h* E
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
2 w6 w( ?! N3 y8 V<p>正则</p>8 M! x$ ^/ W! j& L  H
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
$ s, Y4 L9 y6 [/ s&gt; reg1
/ J, x+ S+ b" `/^[a-zA-Z][a-zA-Z0-9]{4,7}/
' y' l$ S  u6 O# R- q&gt; reg1.test("Hans666")
) u8 f/ @5 D5 w& Ttrue, v9 a1 S* V) ]" [
# |% V2 Y& q* y0 j& H
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
/ v/ d/ ?4 t* ]3 k+ A&gt; reg2- h/ w; ~7 e% e9 H9 N! \
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
( V5 }! S- o( t6 v- H; T- l" A% H&gt; reg2.test('Hasdfa')
+ ?8 g( c! v/ I: ^* W) \true
# C6 Q1 S& i+ k; D: n4 t8 m  V+ T% U8 v# {/ G5 s* D
全局匹配:
% r' y+ W& W4 d&gt; name
' h" N$ ~- i  _& H0 y' U# j3 e'Hello'( L& I0 Q# q2 Z) t
&gt; name.match(/l/)5 u8 ]0 t- c# y. q" [3 Z' R
['l', index: 2, input: 'Hello', groups: undefined]' f# @' q, B9 d) R( g. e

1 j; I: c& k; l7 Y  W&gt; name.match(/l/g)
: K$ `2 s% J0 u" t! ], _' E2 X(2)&nbsp;['l', 'l'], v9 Z' I  ~' R* g4 v6 H% ~  R$ }
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配& u9 N5 j# @" V: ]' ]# i7 E

7 O5 e- U& |8 m7 W  e全局匹配注意事项:
# G1 V( f' }. Y&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g, V6 x+ O$ ^, n0 \8 l
&gt; reg2.test('Hasdfa')+ D" S2 |/ z/ n# }
true0 z3 z- Z  k2 B8 z( c( O8 H- \
&gt;reg2.lastIndex;
4 q) f. y) M, D  \& Z  ?6' V$ h0 a5 C( ~) R
&gt; reg2.test('Hasdfa')8 u, f% P2 i& U
false
* T5 y8 `/ g0 t0 F& K8 G9 g5 r&gt; reg2.lastIndex;  I& K8 T8 b' e0 q; m* m: Q
0
) x& {( u8 X( q/ o' G&gt; reg2.test('Hasdfa')
$ y  m' M0 W2 }4 p9 x: n% ?1 itrue2 P( f; Q! J  I% K
&gt; reg2.lastIndex;/ y& S. r2 w0 T7 [
6
( I/ O* C* N/ i* @4 _6 D6 R4 M" X" Q&gt; reg2.test('Hasdfa')
& P% ~7 t: C. Yfalse( \/ \2 V9 _$ M: S- N; i
&gt; reg2.lastIndex;
: I; i* D8 X: k2 \0
4 P  `3 _- k! B7 d8 A( c// 全局匹配会有一个lastindex属性0 h% r) ?& U0 h% ]# L
&gt; reg2.test()/ @. Q/ n# n+ w; b7 [
false
1 t7 r7 y2 b6 ~' }' `6 t&gt; reg2.test()2 x0 B. L/ B0 Y! i
true# M; {* |0 ]) l
// 校验时不传参数默认传的是undefined; Z* L, D. w/ l- Z+ d
</code></pre>+ H* e3 S/ q+ p3 |/ n; b+ R9 Z3 R
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>; r& _  N2 u& G5 a
<p>就相当于是<code>python</code>中的字典</p>
% O' }' ~6 w8 x0 L0 y$ g<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
: _3 T5 x/ g) ~$ P: q& I% ]&gt; person
8 {% {* z6 I" u6 Y; Z; V{Name: 'Hans', Age: 18}
# R5 F, b, G/ g&gt; person.Name
9 Y0 H0 F+ }2 o  ?0 J- r# S'Hans'
+ h, ]! r2 k0 ?3 S&gt; person["Name"]( B4 f3 g( [3 [1 Y
'Hans'; ]' Z* J2 E& S& N9 X

/ \  H- f5 l# u// 也可以使用new Object创建9 K( [/ e; @$ S5 E' u# Q
&gt; var person2 = new Object()' w) [5 k* h. K' u6 n
&gt; person2.name = "Hello"" i! Q8 b2 V: b9 e3 P
'Hello'
/ o, E3 l* E( m&gt; person2.age = 20
4 O  x$ F, W# d/ a- L+ w* ]9 A20
0 F3 f% e4 B% Z- c6 o4 a</code></pre>5 B3 |9 E4 m8 p% f- |
<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
3 V( }) k: m: k# f, H; e+ e3 \- i<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>2 x! O6 e  j0 r/ R0 ~, u2 V. c% i, ~# R
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>& a3 e( ^  ^! n: C' n3 A+ P$ S2 Y
<h3 id="31-window-对象">3.1 window 对象</h3>
* L% E# C! D- O% i1 `1 \<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
, B6 `! A6 w5 b4 ^& D: I, s9 Y<pre><code class="language-python">//览器窗口的内部高度
, Q7 P3 Y/ c- V: G2 c6 e7 uwindow.innerHeight * E/ Z# u) f) }
706
) M- U, ^# ~# g- W1 q% s* m/ W//浏览器窗口的内部宽度: h/ R- |! l( D6 g" a
window.innerWidth$ ^1 y# T% T4 F. q" \
1522, w( o' t8 V- j3 y4 Y0 e6 v
// 打开新窗口
) M# Y: R; r! Uwindow.open('https://www.baidu.com')) @* A( ^% d1 ^, o+ W' D
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
, z& Q2 m$ O3 r) [9 Y1 G9 K% D" V, d// 关闭当前窗口
+ C9 g/ c. Z; |7 _& Cwindow.close()
# ~/ Q9 o4 |# e: l6 @4 [+ Q//  后退一页
6 v" T1 w8 ?  f7 N  N5 j) bwindow.history.back()  g5 l' h; K2 a" A% m0 v) F$ l  Z! v
// 前进一页$ {% k0 E; G( H  [/ {+ a0 q9 X
window.history.forward() % C" D. N6 F$ x& \
//Web浏览器全称7 `; X( T, o, j0 y3 w* b8 p; d+ ^
window.navigator.appName
; G: K$ p8 w. D'Netscape'
, R7 O5 X/ M$ [! J' G// Web浏览器厂商和版本的详细字符串
8 i' r( g2 x$ X. T' kwindow.navigator.appVersion
, s2 T- k+ ~/ h. m& W( u'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
3 q5 V( g) P; D2 s. H! t) ?// 客户端绝大部分信息; Y# A: ^' B/ k( y- w3 w
window.navigator.userAgent! Z. G3 `& ~  L4 L4 a: ]2 _
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'( U, }/ y% f" k( X
// 浏览器运行所在的操作系统+ U1 C" f* Z- i1 w9 M7 {
window.navigator.platform4 _5 z4 [5 A/ z- u# b
'Win32'/ h6 f& ^8 e3 P
- q5 _* e  f/ [! F& I
//  获取URL
& E. J+ r+ o8 w- o) L1 F2 m2 twindow.location.href
( _8 _  M3 h0 k/ |: r// 跳转到指定页面% @* }; A1 x9 n8 R1 e1 U4 @! v
window.location.href='https://www.baidu.com'- t' m& `+ L% f# @
// 重新加载页面0 I1 N( ^4 M! F+ g" o
window.location.reload()
! ~3 L6 j( j' C* Q! I</code></pre>7 A% C) c; @& b+ d( c  E
<h3 id="32-弹出框">3.2 弹出框</h3>
" J8 t* t0 D, z% f3 B& v8 c6 {' m: T<p>三种消息框:警告框、确认框、提示框。</p>7 J% c9 x( k; n# n
<h4 id="321-警告框">3.2.1 警告框</h4>5 y) C1 g, G5 E3 @$ R
<pre><code class="language-javascript">alert("Hello")
0 C- B% ?: M% i: R( h</code></pre>
  _( k: [8 N$ a1 A<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>0 y' X. Y$ n9 F  n+ l0 U
<h4 id="322-确认框">3.2.2 确认框</h4>
2 U2 D* x7 R" x! Z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
  Z) S3 L2 y/ t- `; G+ W<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true8 X3 B: R9 ?: C7 i* s
true
; x% W, J; B# X4 q; ?6 @3 n&gt; confirm("你确定吗?")  // 点取消返回false
: [& F, Q5 v* D+ C/ G& s2 Wfalse$ B8 F  Y( _: t, i% D) [
</code></pre>( }: {$ ^$ _& r6 V/ x4 @
<h4 id="323-提示框">3.2.3 提示框</h4>7 }% X% {; |% a6 r. G0 r
<p><code>prompt("请输入","提示")</code></p>
7 R/ K8 l# z. U5 p! W1 d' s; d' K<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>% K% {) D) U1 M# C- \0 m0 e
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>+ [. j& D+ q" y$ ?
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>  {* Z3 K8 ^2 w/ w1 k; |3 @7 s( ^
<h3 id="33-计时相关">3.3 计时相关</h3>
2 W/ @* {% [$ J0 p, x<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
9 l- I6 x  q  j7 y- [0 z& e<pre><code class="language-javascript">// 等于3秒钟弹窗0 J" s6 L2 F% k1 J& I* U
setTimeout(function(){alert("Hello")}, 3000)6 y$ o- i# D- C% w1 Q
8 q; ]& Y2 U3 |6 j
var t = setTimeout(function(){alert("Hello")}, 3000)
9 c. c( q4 N3 P9 ]% c8 A" i2 j
% Z4 W6 H( H5 j5 a( ]% N7 S// 取消setTimeout设置
) m0 }% F; d8 i+ eclearTimeout(t)0 y' {" ~# ]: ^
</code></pre>; M( e! x3 \6 C- n1 [
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
+ M( ?, b$ _2 P/ {( {/ G<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
4 e+ W! L) D# W; B, c4 U<pre><code class="language-javascript">每三秒弹出 "hello" :
! Y/ ~5 V" ?: |  f4 VsetInterval(function(){alert("Hello")},3000);
) v8 W. b* ^1 ]( N+ Q0 e( }</code></pre>
, w- @! P9 T2 ~3 n$ y3 {0 Z! O<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
9 m/ \' [0 Q2 F" v( Z( ^0 j: ]( Q* p<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);7 t) g( J+ `+ ~. x1 h! A' ~% T  T
//取消:
6 t4 T: P5 k3 M' ~4 A: O+ r2 c9 HclearInterval(t)
- j- ~9 p4 c6 f. F8 E* ]</code></pre>6 P" l. [# l- P8 m# B& C

1 l* }" a2 S9 y' V5 A  J
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-11-22 16:54 , Processed in 0.071906 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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