飞雪团队

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

前端之JavaScript

[复制链接]

8042

主题

8130

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26456
发表于 2022-2-12 18:11:35 | 显示全部楼层 |阅读模式
' @  p+ F# m7 u# w
<h1 id="前端之javascript">前端之JavaScript</h1>
  I1 S( j' H& h( S3 e/ S<p></p><p></p>, J3 l2 g) [/ e) D  ?
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>. z, \8 C+ X2 H+ l% [* U) e
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
4 i! s# F' a4 I" T, b! g3 q" u& C它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
7 Q* I2 b3 [- I' ]4 y它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>) w, Y+ ]& z7 J/ I8 V2 {) u$ B$ x
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>8 e  H3 W, t! Q# R# }
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>
6 Q0 F- {6 Y4 H8 a: F3 \7 {<h3 id="21-注释">2.1 注释</h3>7 _. B! t  f  w, F# d1 O" e
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>; F) ^- Q9 l  T# K( u1 U- W9 k
<pre><code class="language-javascript">// 这是单行注释3 E+ ^9 [) f* E5 R; f- {

! D+ e9 A8 L. M1 q# u/*- \0 U" |* f! d, E. S# x1 }
这是多行注释的第一行,
) r+ e7 e. g3 X. {9 @2 u4 C7 ?这是第二行。: \. `( O. a( u
*/
% V8 s' A: M6 S" r! ~7 W7 l6 B1 E1 x) t</code></pre>
- c" d. h& c& V$ P$ o/ ?<h3 id="22-变量和常量">2.2 变量和常量</h3>2 t" y4 D' J5 H6 @
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
; g( [! l  J$ S+ s<ul>
; J9 X) b- k$ Q6 w9 `2 ^& n<li>变量必须以字母开头</li>
6 Z2 Z3 d8 _$ E<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>& I- ]$ d( Q0 k& P2 d% S2 B9 ]
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>) \7 v, Y4 ]7 w3 l5 w
</ul>& e; ~  [0 g1 b
<p><code>var</code>定义的都为全局变量</p>( h# u  |: j2 {8 \
<p><code>let</code>可以声明局部变量</p>: i" Y/ n/ j% _" ^0 X& L; T* H
<p><strong>声明变量:</strong></p>1 J6 J! j: h: ~1 g4 z
<pre><code class="language-javascript">// 定义单个变量
1 {! p# i# f4 w&gt; var name
+ @; j% u1 k" c3 B+ @- f8 c&gt; name = 'Hans'
" _, N* B  w7 |. z//定义并赋值4 p# I; f$ Z9 ~" l; z
&gt; var name = 'Hans'
) F- [+ C  I2 e9 D* c- p7 t&gt; name+ x2 G1 B) S4 q; B, S2 d' B* |5 }
'Hans'5 k1 S' l1 j" ^% t$ W# e; q, D
" u# Z; N9 f6 L) l$ {4 R
// 定义多个变量
  C2 w' F5 ?: V, y* N" i4 A" J1 v&gt; var name = "Hans", age = 189 c" G5 h4 u1 M7 D, p4 E3 K
&gt; name
) p7 L; g4 k0 _'Hans'$ I; H3 F9 B) F* ?3 W0 [
&gt; age
% K1 X/ S5 {1 L- `# o# Y& [1 r18
$ q6 f% L7 t+ O; ?8 z7 V  g& C3 t; k% o6 m+ W: l9 h/ \8 }6 @
//多行使用反引号`` 类型python中的三引号0 _9 g; L" B, H3 M1 Q& n  R
&gt; var text = `A young idler,
) Y, O8 ?. V6 T; Zan old beggar`
8 ?8 y5 G1 n: A2 S&gt; text
$ s3 _# G0 w* H+ d9 K'A young idler,\nan old beggar'
0 y- q* b9 c# i; z</code></pre>5 R& m4 n5 C2 ~$ x
<p><strong>声明常量:</strong></p>" W5 {( ~' g2 I4 A
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>% P, `8 H" A* l& S( y
<pre><code class="language-javascript">&gt; const pi = 3.144 F( Z5 h8 b$ v
&gt; pi
3 T& e/ D5 U6 M. \' {  ^6 x! T0 |3.14
$ S( T8 E+ F/ b5 U&gt;  pi = 3.01
0 j: u; C* ]* VUncaught TypeError: Assignment to constant variable.
4 b* p4 D9 k: A, Q/ N8 Q    at &lt;anonymous&gt;:1:4) W! y3 t/ S  ]; |
: E! j$ {, M% S: ~1 \# X$ z* R* ~
</code></pre>( j) d0 \, g. e( v6 O
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>1 }3 L& `4 |" @9 d* V, a1 h
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
& l. m9 p' U8 I) `1 E<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>, i1 z" k7 i, I
<h4 id="231-number类型">2.3.1 Number类型</h4>
* V8 W+ F& R9 C2 H* Q* [$ W1 j<pre><code class="language-javascript">&gt; var a = 5
/ P+ c; {* I. ~' B  X4 h, z" O&gt; typeof a   //查看变量的类型  
6 F# B! Q6 S: Z6 Y. unumber* ?' x& h! [* R& z7 p% I

; K. p7 P- I) z& y& v&gt; var b = 1.3% T# S7 y  x9 b9 q4 e. W& [9 n2 V2 R9 x
&gt; typeof b/ z9 ]% T1 u9 O  Q! F& K
number
% r# U* a7 K3 T4 F
3 j/ }0 ~) @1 ]: _// 不管整型还是浮点型打开出来的结果都是number类型
+ q2 J! \; b/ h& v
6 \; x7 }& P% J# C, k- s9 M; ^/*  L0 k& q8 [' U6 b6 x+ o
NaN:Not A Number, h4 f7 h$ v  O: j3 E
NaN属于数值类型 表示的意思是 不是一个数字
& f* K: g5 a. F" d3 V3 [, F*/
, x4 W' g( Q  X3 v$ e- N: |$ i
9 Q$ V( y$ C8 k& G$ p8 u. ^parseInt('2345')  // 转整型/ r8 W3 |3 z1 b+ `. i, I7 I( P
2345, q/ c+ Q; C) l) z
parseInt('2345.5')! c) T" \; A; l( R7 C3 ]6 `
2345" A, t' f$ L  ?8 |: u& k; G% r
parseFloat('2345.5') // 转浮点型$ t1 _0 n% B5 K3 W4 x( C% e2 E
2345.5
" R( c# ]- ^# O9 q9 X' u$ ]6 [parseFloat('ABC')4 ]% D# z) T) J$ k: [4 a8 S
NaN
5 [6 b1 ^6 E7 p3 iparseInt('abc')
  {1 s3 R/ v, f- N0 rNaN
( i, M' L9 B1 u  U* u</code></pre>
" X9 Q8 {  {! o: c; n; l<h4 id="232-string类型">2.3.2 String类型</h4>
- Q' E; {% m' t4 h0 a, Y<pre><code class="language-javascript">&gt; var name = 'Hans'
5 F; }- l6 b* D7 _&gt; typeof name& T. i( Z% i; O* ^& |! O
'string'( Q# s# D# h, v* ~5 Z
& X' C' ?3 a5 P
//常用方法5 F: v* S) [5 Q- Y
// 变量值长度
" |1 E5 G9 ~# j&gt; name.length6 X0 X6 n6 C1 L7 Q2 n% ^
4
' U3 i% U0 w* i// trim() 移除空白( S$ O% `1 G! _5 @# |9 h4 {5 Q  `
&gt; var a = '    ABC    '/ l+ s) p$ U9 Q. v) `& a5 D  d
&gt; a
; W1 R# e3 ^+ G$ a'    ABC    '4 [3 W6 V8 g: V2 P( W
&gt; a.trim()" C( K$ f2 \2 s9 @! B
'ABC'
5 w' u) o6 V' p* q6 l4 `+ f& L//移除左边的空白' l+ I* |  Q: v0 x* k
&gt; a.trimLeft()
) `& }7 I. j4 ^7 h- z* `0 A% M6 ~'ABC    '
1 x1 j) w  |- I6 u3 t& ?. j! T//移除右边的空白
. ?  G0 |1 g+ [&gt; a.trimRight()& n0 l, p/ ^! {, X7 t; j
'    ABC'% {* J0 c! V4 ^2 p

: t" J2 ]! t. x8 ~% g" L& ]//返回第n个字符,从0开始
: Y5 Q% @& a6 ^: O9 I% D; b$ U: a7 x&gt; name
. O* R: D. c6 Q$ _( h" s& _'Hans'
$ w( a$ A( X7 v0 w&gt; name.charAt(3)6 |6 g4 m( ]2 s6 Y9 j
's'1 x( r8 N5 M- u. N: h. p0 V0 N0 O
&gt; name.charAt()' p2 l) z# S5 t5 I5 S
'H'
- r% K9 s4 V2 @&gt; name.charAt(1)
" t& |2 L* `% z% F4 s$ c# f'a'; b  A0 e" W1 v# s1 _
4 b* B# B- A) Q9 X3 {) V6 M' w
// 在javascript中推荐使用加号(+)拼接
0 T) T+ r. l( {( e( b/ D&gt; name
! r3 w6 e# e- C4 w'Hans'
! [" n; x2 D9 }$ n) m3 b&gt; a
, k1 k5 Y3 d' k0 O'    ABC    '
1 U- h$ R: T  Q4 [7 f&gt; name + a
0 U; Z9 f- _- |'Hans    ABC    '
7 B" k2 S% N; W% ^// 使用concat拼接
1 A! B9 z0 I* ]' ~/ `&gt; name.concat(a); a( F. Z8 L- Q1 ?) X. i4 V- Y3 L
'Hans    ABC    ', {) t7 K& i8 F4 S5 `  o' D
* |7 _& A; z8 W0 V; {# m- D
//indexOf(substring, start)子序列位置
& X0 l5 ^( h- D3 W7 B
4 ?& f$ _# |3 m; W0 Y, s; c, N* l&gt; text
& [) [! L' V! X) }& v# S* h'A young idler,\nan old beggar'
( }4 y. o5 `3 x5 r" N# o0 v&gt; text.indexOf('young',0)
/ F' b1 R% @6 A! P2 K2
- M2 s+ H: t; y) G3 N  x1 e3 a) ~2 Z% ^+ A5 r0 ^+ d% W
//.substring(from, to)        根据索引获取子序列
$ [( K, g& r# Q/ ?0 U4 x+ ]&gt; text.substring(0,)% |: S0 b+ S7 z* s3 t' Y8 `
'A young idler,\nan old beggar'
8 i" ]4 Y) M5 e& e3 U&gt; text.substring(0,10)
. ?" g  ]- K, _'A young id'! J( }2 I0 n; |2 e% ~0 E8 u
7 f+ o: R, u! Z9 C! q' c- S* X' A- z
// .slice(start, end)        切片, 从0开始顾头不顾尾
) p! H* H6 p* h" O$ G- {&gt; name.slice(0,3)* a2 n* A" Y0 `+ Q8 y7 H5 j0 U9 t4 u
'Han'1 u: |9 J/ l  U- Y% O
5 k/ C8 u! v) [- W5 W6 Q
// 转小写' c3 |6 T# j6 F* u  m6 Y
&gt; name0 f1 F, ^- Y3 V2 W1 e: }
'Hans'8 U! E+ X- ^" y# P. X; M" Q$ f$ ?
&gt; name.toLowerCase()
$ g9 ~4 t3 c+ E. A9 S; L1 N'hans'
: S3 f2 z0 X# J% a3 }2 _( m* F( ?// 转大写7 l5 ^" S  H* C! G7 e( f
&gt; name.toUpperCase()8 [# D  h; t1 h# `
'HANS'
5 v. s; k" V  M, |1 p: n* U; I) {, z& O
// 分隔! Y$ G; o3 N7 p/ M
&gt; name
; l- L5 p- a9 G6 K# ^'Hans'& J) F* T  O# I- q9 G
&gt; name.split('a')5 ]) |; }. f3 E7 w1 ]8 a
(2)&nbsp;['H', 'ns']
/ L  B5 f) k3 Y</code></pre>
6 k. J4 K6 `& n<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>2 r: k% b: P+ L
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
4 V( A# Q. ?3 G9 n<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
. i: k! {* v3 W( B<p><strong>null和undefined</strong></p>
) l+ M* T( K8 c# @<ul>
, u3 L# X& A* z<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
# w1 j, @5 _7 }0 c& k* F<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>) O/ i- _! p% V$ b4 _3 x7 M
</ul>
% A7 M" i3 ]6 o3 |! W7 S<h4 id="234-array数组">2.3.4 Array数组</h4>
! e' i( H" b/ U" x7 \<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>
- `7 z2 y% ~9 b2 p( ^; |, Y, W<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] 4 x0 p% O+ m$ X- g4 `' j2 T: I5 d
&gt; array17 L2 ~0 F6 y4 u  ?
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']# M7 w, [, j$ k; v# [' K: V0 R  V: w
&gt; console.log(array1[2])  //console.log打印类似python中的print' a" N' Y  h7 H( |6 r  A9 u5 l
3
, e. p; f: c% L: c/ O// length元素个数
# _0 U' m7 y$ F4 y+ L' K  y&gt; array1.length
6 \& S, _$ `$ ~* Y& S! H6
' E) `6 ~( ~7 G5 Z1 V5 A0 \// 在尾部增加元素,类型append
* ~2 Y4 M* p: o, d4 Y&gt; array1.push('D')1 I, }/ L* [( Z) M6 R3 [
7
9 w, `2 K, \9 u0 S3 g&gt; array1
. S3 |2 L$ N, |5 N: t: B. c1 z(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
' ]( V9 @* Z, Q// 在头部增加元素
- t; X; J' b" S7 L&gt; array1.unshift(0)) {- R- G1 k& t) s% Y9 C. a, H( o5 ?
89 P: R& z! U. P, \% U7 w: |
&gt; array1
/ W; X7 p  U" b6 B(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']
/ ]& x5 F3 z8 p# h; B1 |3 h3 L( G' |- _+ U
//取最后一个元素
, U2 Q2 m& S7 e# L$ G&gt; array1.pop()) q' k" @! `7 ?& o& b6 }  M7 p
'D'
2 e' D, x' Z: ]- w" ?, C&gt; array1
/ T- C+ v5 Q7 H% J) Y(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
6 A8 C( ^7 D, e! s- l//取头部元素( `1 W7 e" b7 \4 O& U0 v. t# K
&gt; array1.shift()' H3 b+ O5 V" b
0
+ O6 F+ ^7 v) }0 w2 s4 w&gt; array1
! M) B5 H1 z4 b  w(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
/ G6 N2 d9 [; T7 }9 B. u; A% @/ f4 B0 P8 e3 R. y9 y$ b
//切片, 从0开始顾头不顾尾5 K/ y$ g- \3 S$ b8 o! M/ Q
&gt; array1.slice(3,6)* x; O) D, S5 h( U
(3)&nbsp;['a', 'b', 'c']/ a1 G& v" V# q7 W( M( ^
// 反转
' _$ R$ Q2 f: D& v7 m6 _3 c&gt; array1.reverse()
1 a, Z) D& ]3 U(6)&nbsp;['c', 'b', 'a', 3, 2, 1]3 v2 S7 N. a0 L) u  ~
// 将数组元素连接成字符串
- O  L+ @4 w4 s* G, N&gt; array1.join() // 什么不都写默认使用逗号分隔
* Q" I1 ?8 w6 k  C2 _2 g- P'c,b,a,3,2,1'
( P* k$ }, S# l) {! }&gt; array1.join('')
- y0 u: @( R" \! c! x'cba321'
2 L% {0 C$ i) }# r# k8 a&gt; array1.join('|')# C" ^/ E6 x# c: v
'c|b|a|3|2|1'( V+ Y4 X8 R" I/ L9 @

' p5 J( m: L0 Z: o// 连接数组
) o. d: m; K' \$ C. O6 k/ m6 x" O&gt; var array2 = ['A','B','C']$ r0 l3 X3 d) B/ P0 s6 Z  `7 `, O
&gt; array1.concat(array2)
" p" f3 C* j. a! p& c" D5 Q1 a(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']: h' V6 ]. r  n2 M

3 ~" u! v" _( @0 q* o" e0 O, C0 i// 排序6 o# E( @* K' j9 w
&gt; array1.sort()( r# }3 \( F4 {4 M1 N1 f
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
; K$ t- `; }* S3 c3 U8 ]( W& |' w) a/ a) l% m2 C, ^, O" G1 o/ s9 r
// 删除元素,并可以向数据组中添加新元素(可选)& p3 C5 k- I5 y6 M
&gt; array1.splice(3,3)  // 删除元素5 F# O" R) l" L0 r* ?( s8 E5 V
(3)&nbsp;['a', 'b', 'c']& c6 p8 ~" [' H1 u
&gt; array1* D4 a) d  {. {0 W' g0 Q0 R8 F
(3)&nbsp;[1, 2, 3]
; w2 j% c& z2 ?&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素4 x. \/ Q* ^8 a0 j
[]
- ]# s! M2 [9 v7 ]9 x( W9 G&gt; array1! T6 {, Q) N5 K: `$ h7 Z! s! {
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']0 _$ k' Q# g1 N0 D  C

$ Q5 \" l) d* }/ h' o/*
% W: O; H3 r, K+ zsplice(index,howmany,item1,.....,itemX)
7 `' E  t+ J$ o5 z# S, `# S- e' Gindex:必需,必须是数字。规定从何处添加/删除元素。
2 c! X. a2 v2 B$ \6 Vhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。' }) V$ V7 V4 l+ g3 z  W
item1, ..., itemX        可选。要添加到数组的新元素, F( i' F/ u7 m5 l2 B9 g# g9 d
*/% k) C. ?/ V2 d* G! J
% r) s% O$ H7 n: ~0 E% F: a
// forEach()        将数组的每个元素传递给回调函数
" ^7 v9 x; ?7 A&gt; array1.forEach(function test(n){console.log(n)})* P- s, L* j  \' b
1
# F8 S3 D" f, }9 [" i! [( [ 2! P8 ~1 _- F3 B$ h+ ?+ z
37 p* Z: `1 y5 @3 d! R
A
* V, N" ?+ N; E3 }: I B
; t7 E9 M' d  v- `$ L9 ]9 T C
. D! E0 |. Q- N' @  Q" l8 D/ T// 返回一个数组元素调用函数处理后的值的新数组; @! {+ b" N( v# t6 D
&gt; array1.map(function(value){return value +1})5 ]8 `* a1 D. Z! R5 h! s
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
% |8 C1 ]  }. M: j) J1 A$ k# c8 @</code></pre>! k! ]' l. B: O7 s7 z, d2 |; y
<h3 id="24-运算符">2.4 运算符</h3>
: Q& t) u$ G* B5 Z5 b/ ]) {3 h0 T* {<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
# f0 ?: t: _7 e% X. u& y$ Y/ ]<p><code>+ - * / % ++ --</code></p>
5 R4 Y" E' i$ O3 @% H) q8 h# E<pre><code class="language-javascript">&gt; var a = 6
' @3 I2 S+ S" e9 Z1 X3 Y2 _&gt; var b = 3
( h7 q  f/ C5 i$ e  r3 F// 加
; J! E$ r/ z' \! R3 x: P. e, m# d$ N&gt; a + b( n; H+ E! \0 a2 C6 ^
9  K3 |$ W$ A: q  J# G* Z
// 减7 Q6 o& j- A! _6 W8 u! d
&gt; a - b
# o! r' j5 f- n9 X9 r: J; z5 l) R7 f3
# L; E/ W8 `: o// 乘
3 G% [: K8 y6 n* p) |! d&gt; a * b  h7 F! k3 @# c2 {# y
186 {7 t# |9 _6 g
// 除  G1 r9 q! J2 Y2 m# \8 Y5 I4 x
&gt; a / b+ A; z6 t* X" Q8 v: _
2. k$ p9 e! @  K8 U0 w# Y2 q
// 取模(取余)7 I' S! `4 K+ b$ U# w$ q& i
&gt; a % b0 L- L, H" R3 N( \- c
0
) r8 U! ~, [: }  h// 自增1(先赋值再增1)
  p  F8 l& P8 G&gt; a++
. A* b& U) J5 w6 _4 t/ g. `! m5 `6
" y9 f/ T, X0 h. e&gt; a; b. ~( t! z: u) \1 X
7
$ h8 L# @# H$ t4 Z0 Z- I; E// 自减1(先赋值再减1)
" @; G: D- \. K&gt; a--
! V; n6 U% e1 c  \: t' ?7
# K$ T8 e  e+ a, `7 X6 ~&gt; a
( n+ M/ C  C; l( f' h' X8 u+ E0 c  L6
* t1 g- L$ R3 B! \# r// 自增1(先增1再赋值)
9 k2 L2 J3 j, u  }&gt; ++a
  p6 H# b7 I2 A. c( U6 `' \. T7
- t7 Q" E; L7 E2 G( y& z0 y2 `// 自减1(先减1再赋值)# h* d. |8 R4 v2 y* {5 [; R
&gt; --a
/ E. C. {' {0 V/ O; [6
' F: @; I1 M  a( u- F  ?&gt; a
" X. J) m( [6 L$ X65 n5 g: J- V3 N3 l0 n# T6 j$ u
8 g' Y& F3 X( K8 Q. U
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理, i4 [" h, R. f* q! \! _
</code></pre>
. A8 M; L$ I1 A- N7 L" S- x<h4 id="242-比较运算符">2.4.2 比较运算符</h4>$ D. O9 ~) _/ }0 u- J
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
5 i, r0 i0 o2 {1 }. f% I<pre><code class="language-javascript">// 大于
/ p2 j$ Q. J2 x&gt; a &gt; b' q, q' ^6 R% {4 `+ k, U0 {+ ~4 w# d
true; e4 N# B' N& K+ a
// 大于等于
2 }1 D: l* n) v( [&gt; a &gt;= b& p  ?' X4 w% e' e
true
  e6 _: ]! u- y4 m// 小于( f) x/ T' P6 j
&gt; a &lt; b
1 w6 i5 q5 }. ~+ b% F. Yfalse
5 p) o, z2 `$ c4 ?// 小于等于
0 v6 P3 @" b" T) Y! c6 r&gt; a &lt;= b
% e+ Z1 O/ `% N4 Y# kfalse7 w& Z/ C) K& H$ u& m- u! K
// 弱不等于
1 ?  T9 p9 I; K6 p&gt; a != b( R% s4 a! l; z2 F; b$ Y
true. v$ v9 d; \. l- H+ m9 U
// 弱等于2 {" V6 [' q7 B9 k+ h. g% D- K2 s
&gt; 1 == '1'& m0 l! F1 N' V6 ]. X; o' q
true
- I- Y$ r. D8 t& q9 b: f7 m# i// 强等于4 r0 c5 x& p8 F; ]* H
&gt; 1 === '1'
8 q/ A/ L* h/ g' i" Kfalse# }  n* D" S  G. G. j
// 强不等于, A( {$ c, D) h5 I' K9 j
&gt; 1 !== '1'. P5 ~* R- f0 Y" [' r
true1 ^" B9 ?! K9 J* }' x$ ]: h

6 o0 S0 p/ _, n  U( y+ F  m/*
2 z; T+ N0 F: ^$ QJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误* R# H6 _7 Q9 l, E6 \
*/
9 f7 n3 d  w% U0 D" z</code></pre>. A* i  `; q$ J9 F* e" H
<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>) x* `4 W1 h1 a
<p><code>&amp;&amp; || !</code></p>
0 }. p  w0 b3 I/ p0 i6 l<pre><code class="language-javascript">&amp;&amp; 与
. L% k2 A1 r" o|| or ) |5 r$ f0 K  s
! 非
# A- R8 R( N! R, d" R</code></pre>+ a5 Q8 z) f. S6 `
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
) V1 V3 @- w9 M* t& ^: R7 }<p><code>= += -= *= /=</code></p>
, v, p+ W+ Y* h' ]8 u<pre><code class="language-javascript">// 赋值5 d# H8 h/ U+ [8 l: t5 r  A+ t1 J
&gt; var x = 34 b; L. h' E: E" v) T; _/ q; c
// 加等于& ]4 C+ ]5 s0 W% U1 `
&gt; x += 20 a" E- d8 ~: N3 Z5 d. a- j
5& o+ ~- H7 l1 p6 f9 A& S( D
// 减等于
' G! Q* i& W% w6 g0 W' F( q$ P&gt; x -= 1& [; I, ^- R* B: @
49 a" U; M3 B' c$ Q9 a1 l( X! K
// 乘等于4 C7 m5 [; f0 x& A
&gt; x *= 2
8 ?& B1 G+ ~2 C5 Z2 u# l* U5 _9 J& u8. R* ~% l. X: f5 F. |' O
// 除等于2 ?; c( L) s7 b# j6 e: _
&gt; x /= 2
; j; X* p1 L" A0 a/ h4
. A! o( I6 _  @</code></pre>2 r% j: `. a8 l
<h3 id="25-流程控制">2.5 流程控制</h3>
$ q1 b4 P$ [8 J2 B( l2 Y) T<h4 id="251-if">2.5.1 if</h4>5 b- K  P6 }- r0 w
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}0 k2 w, L) A# a/ B4 E% o; H* V7 C

! J/ V2 [4 l4 Z  K& A&gt; var x = 3
+ U" ^4 `+ @' Y$ \8 D&gt; if (x &gt; 2){console.log("OK")}
8 P$ [4 x- U6 X4 C OK8 V, k+ W5 l2 T

  E4 g' `$ _1 Q) r9 Z4 S: O' K2, if(条件){条件成立执行代码} ) j% Z: r) X7 V5 g! G
        else{条件不成立执行代码}  T; M, h, G% j: D' P( P

, b8 M% E) d! D3 B+ _% L8 _&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
. G" T* w  z- C: s* u'NO'
9 a! Y5 {6 }4 r( Z1 _; ?! K# O5 u+ D, B: V' F; b( Q  b
3, if(条件1){条件1成立执行代码}
/ X0 f7 E  a) t. L1 G: S        else if(条件2){条件2成立执行代码}/ }4 \9 R, [; `* g* U' g% \( [4 v
    else{上面条件都不成立执行代码}" {. z( C+ E+ u0 e0 e9 O

, j7 D" i9 |! u&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
1 c. e4 `7 J# \& i0 R Ha
0 |1 \: M, ?* D" v0 P+ D) C) T1 _</code></pre>; g  [" h3 u4 g3 w1 L
<h4 id="252-switch">2.5.2 switch</h4>) f7 j, {3 q- w
<pre><code class="language-javascript">var day = new Date().getDay();
5 h3 _- }0 j; r+ Xswitch (day) {
- r6 |0 y3 Y; ?, w" c( t7 B- j% R  case 0:
( L3 I  _; ]2 R  d& m' @; f0 K  console.log("Sunday");
3 h( _, F8 |, Z: M0 S  break;
3 r( M) W7 n# H) P  case 1:
( ^$ ~! x5 _  E4 s3 p; {  console.log("Monday");
, H- P# @6 o& g0 }: \8 {  break;
/ T3 r" a) x2 `& s4 _5 B6 Udefault:- \8 h9 O9 V& e; a2 E* y" A/ {$ F2 a
  console.log("不在范围")
! D6 n0 s' q% M) F+ M* q}
( y! ~6 g8 a# e' A 不在范围! f$ u. c5 Z  A5 u- e3 l8 M& p# B
</code></pre>( ?' g2 K6 r1 M0 H5 Y
<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
9 \4 R2 c1 {/ b) M0 D" o$ d5 R8 \<h4 id="253-for">2.5.3 for</h4>% R# x) }5 t5 S% i6 {( E
<pre><code class="language-python">// for 循环
! y+ x9 D7 ?8 s# R9 A        for(起始值;循环条件;每次循环后执行的操作){
# u( g$ H/ C3 s6 C) }1 P        for循环体代码# f" Z+ s2 [+ l( R% g9 |# O
    }* K! o* [/ i  R0 q0 A) h) s" o
0 @+ d8 n1 l. H; i# q  u
for (var i = 0; i&lt;10; i++){% a3 ~$ h# z  L5 W+ ^- Y2 {! I
    console.log(i)  [. a3 b; i; b# d
}! b+ a( y7 a% D! w2 w
        0
# h$ Z  T0 d. q8 B6 G. e        1
4 i) S& u" y! r( ~' j, ?8 s        2" V  l3 M$ p* u& R+ M
        3/ q" J# B; }0 F% P% Z0 K% D
        4
, j# l1 F- S1 D: \) g0 W8 T: r, j        5
$ i' L! _6 l5 d; W        6: ~1 k2 N+ A8 y9 d1 I$ q( s
        7
2 n, s1 U5 [+ G        88 {! W' v1 D4 g9 y# u8 _+ T
        97 T. G$ V6 T' c' v5 C8 b
</code></pre>
. X% x' Q/ F- V: `) Y& m<h4 id="254-while">2.5.4 while</h4>6 f+ X- p! @8 S8 _$ u  Z
<pre><code class="language-javascript">// while 循环2 @: J/ u) i! P
        while(循环条件){
% M4 _( d2 \3 T# {8 }3 _! [        循环体代码
# b" p/ I$ G' F/ p, C" r4 A    }
1 r- Y. s7 V0 L  y  W
- g( h) [, U, |0 A3 s6 r/ x&gt; var i = 0# R( L; R. M) b' x2 m" k
&gt; while(i&lt;10){
! j5 T6 f$ M. N7 y; _    console.log(i)
. g* {; p( ]( s8 h" T0 N1 g    i++
& C; x& ~$ v8 F# ]}/ x4 Q8 c% O$ K& s' b
0
0 ?! @0 `& D9 r 1
$ @& d0 C7 ?4 J+ M; N6 s 2
( [8 S# A' H) d* @/ ]4 d, F. \ 3' I$ t! q% k+ m* I( X
4
0 |# ~+ a; k2 x# }3 X5 w, ~ 5* z, j7 Z+ j2 \6 h. _
6
& ]- f+ o7 f( V* V1 H, w. N 7% ?* e% z0 E) r* H
8
  {1 Q# ~  g) r: d% f 9) v( R( Z6 ^. y0 ]
</code></pre>8 |. p0 p, p3 r& G6 b8 E% a$ F' |+ R
<h4 id="255-break和continue">2.5.5 break和continue</h4>8 v% ]: c9 N* w6 C5 ^* x  U
<pre><code class="language-javascript">// break
" v+ f% ^$ j, \3 Efor (var i = 0; i&lt;10; i++){* v4 p3 D/ \% F+ q6 q7 }% y! ~
    if (i == 5){break}. ]/ T  C& t# ^* f* I6 ]& M4 m$ @
    console.log(i)! Q! F" e" O  F, P% u+ w
}0 M) \1 w9 e+ p( M6 u
07 a% q: h$ T' K7 D& |
1/ v4 b7 \- G& o7 m2 x
2# a% q: v9 q* ?1 u  ^- Q: A
36 ~  M% Z+ y7 h5 h1 z8 [
4
$ s1 U! N, ?# Z, y8 b& m8 V8 A/ v+ O, v// continue$ U% e8 L* D! J; ~/ M: t
for (var i = 0; i&lt;10; i++){
* p7 X3 R; ~; b$ u( _: ~$ T    if (i == 5){continue}( Z! g3 ]" n3 p: I- K
    console.log(i)
$ w) g8 s, K  ]}
' \* r" B4 X/ A: | 0
( J$ X7 T$ p) y8 F5 M( D) ~; v 1
* r% D, l; _  l9 c/ [7 X 2$ e- D) h  c6 [0 V% y- u
3
5 |3 p# y; L9 j/ a3 G5 j: S8 _7 f. M 4
7 l0 f  ^$ I# D 6
1 V) F3 I# P, q8 O2 C. J% A# x8 l+ ] 7. Y+ ?0 @4 ~: h: g6 g: Y0 Y4 \
8
: J$ g% c  e8 u 9
+ m: [: Q4 }. D  S0 v* I$ M$ @9 U+ D8 V* Z4 g/ d6 ?2 E
</code></pre>% @9 [1 c! w6 y$ l# f) Q
<h3 id="26-三元运算">2.6 三元运算</h3>6 c# W& i2 b9 k* n
<pre><code class="language-javascript">&gt; a- E3 {3 r, P8 G' O
60 r# t1 w5 k5 u* A% Z* [
&gt; b
/ I5 \0 t# j: `. Q0 ^! j3 @8 M3: ~. M7 P9 w7 d6 z
+ N5 F8 n/ k7 d8 ^
//条件成立c为a的值,不成立c为b的值. S3 ?( D% j2 u) c# F4 C
&gt; var c = a &gt; b ? a : b, [/ [- `) F. q. ^, N
&gt; c/ h( J: O4 R% o: T3 P
6
) V: x$ o8 G$ f! i7 z! b% X3 b) j; m' e+ [
// 三元运算可以嵌套7 E* k& F5 e/ D) f
</code></pre>
+ n; Q4 a( u  Z3 v7 V<h3 id="27-函数">2.7 函数</h3># r/ K: U- Q4 W) X/ U3 @* {7 p
<pre><code class="language-javascript">1. 普通函数* b& }/ Y6 a7 @. j6 d) R. C# K
&gt; function foo1(){
: i0 `  \' G" l' B8 J, j- x' {* d8 v    console.log("Hi")( _$ R7 J% D3 a% }, s
}0 b( }% ]6 I3 M: e; ^* x4 `

7 S  `+ i; n( t&gt; foo1()
% z& @' v! @- C5 \1 G4 G  ^3 B        Hi
' u0 E$ M: x# ]' i+ L4 S2. 带参数函数
' C8 m) g4 m3 t! \, c# o&gt; function foo1(name){* f2 [# H& A  f" H( s; B; p* h
console.log("Hi",name)
+ A/ I/ S2 M+ D}
+ m- U5 ^5 B+ e3 o/ a; Q
* d# q# z; b6 K&gt; foo1("Hans")# Q" @0 b+ T3 `
Hi Hans6 h) @$ M7 x# C
. ?' C+ @* o/ J+ C4 k
&gt; var name = "Hello"- w+ t1 ?4 N: z* A0 M3 ?
&gt; foo1(name)4 C0 Y8 N5 R" z9 r8 _. N
Hi Hello
% ?. K, m) X) O; f+ x/ J
7 c/ ]9 d% I: m$ j1 t3. 带返回值函数
3 R) ?6 Q0 {# W! u&gt; function foo1(a,b){
+ H5 z, I# v8 h4 j8 q. W% T' X        return a + b   5 g1 D; W- q7 `, D, I
}
" m+ s1 V; [4 j. `. w&gt; foo1(1,2)
  Z  w+ I* R" G. X: w* [& A3 P3
" c9 D* w! y4 m# i( Q# K( R3 Z&gt; var a = foo1(10,20)  //接受函数返回值
' P' ^& |! c  _- [: b+ F1 |&gt; a' u' F5 H- w, ?6 m  }7 X% p  R/ L
300 [* @) p5 F0 A* G

/ x) k/ v5 {: G4. 匿名函数
$ R, ~; b3 e6 b2 L  P5 V; y5 ~&gt; var sum = function(a, b){# R, S: x& R" M* A7 W6 E
  return a + b;
7 N7 [, i  H8 S" B, t1 e# P}( \" ?' M1 b. r. ~, f1 C' M1 g
&gt; sum(1,2)
" Y5 V5 s4 L: F( _4 P% H3
; i; ?* y  K4 g6 N; o9 c' m$ `0 B! P, ]: Y; l! u6 i: p
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
% b  P5 ?% c/ r3 ~0 r* k&gt; (function(a, b){) H5 }+ K) M7 O( D4 V" K' ]
  return a + b8 V. l# ?3 c; Q$ V, a8 d- [% y& |
})(10, 20)
3 r6 {& a& U# h4 g" B30
- R- w$ B0 N  |2 w- H# c) n. {" k" D: K5 d) M% A
5. 闭包函数
- p9 P3 L, w0 F8 }5 N// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数9 K, q- B" [3 s4 C( p& r
var city = "BJ"
4 q3 O# n% @. c  Z& _. Vfunction f(){
( N! v( F  N, }    var city = "SH"1 V  d6 |2 D, o! |8 x% m* T
    function inner(){% J$ }3 e7 q1 l; N
        console.log(city)
, m! y' E4 |+ {8 l' x0 Q6 E1 ?4 G    }
7 Q* T/ F$ \" U5 Y$ K# n8 O" J    return inner
  k& ^1 [! O+ y2 v}
$ x3 b+ f3 M$ I+ L7 b- [: l7 ^/ I. jvar ret = f()* \% a! n5 F* [* D- ?2 |. ~
ret()
; g1 _# Q' C: u' N- h" ~/ m执行结果:
8 O: Y) T2 E1 o' x- s- }2 ]SH
( Y7 E' O4 F# I) S/ l! @
0 ^# b' H2 ]/ B' j$ Q+ O- W</code></pre>  J0 p3 o) F. t9 B8 J
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>) E- E8 u; i3 n  N/ Y! A
<pre><code class="language-javascript">var f = v =&gt; v;. K, u4 I" g# D) e
// 等同于
- M2 \" r, O9 A2 {5 |, `var f = function(v){
6 _" Y  q+ J9 g  D% [  return v;9 O8 H' V% M! u2 g; ~. o* f
}
$ e2 I. b- u2 i& V1 g, N0 k/ v" k, o</code></pre>) G+ O* n; D& V: r
<p><code>arguments</code>参数 可以获取传入的所有数据</p>/ @3 q2 k. y# e2 \7 U% g
<pre><code class="language-javascript">function foo1(a,b){
& \# a; r/ S) W+ d    console.log(arguments.length)  //参数的个数 6 j5 j- ?4 L) R( L2 U* S
    console.log(arguments[0]) // 第一个参数的值
" Q/ ~0 w9 m7 ]* V6 T0 {        return a + b   
! b8 L# Y2 m" s}, S* F! X) g" E- }* d' o# S6 C
foo1(10,20)
( \+ K: b* B3 J7 Q8 x结果:! `3 Z  h% F" u' V6 z2 P
2          //参数的个数 ( J2 I$ K+ W% n3 m. d0 d. A
10        // 第一个参数的值/ o' W# i- R. r( L3 P
30        // 返回相加的结果/ [  g1 }7 s( q1 Z* o7 k5 {" d: I
</code></pre>- `9 w6 A9 _. F0 W9 Z
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>- W1 N2 B+ J. J4 Q! Z" J
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>2 ]/ a- G* M3 @) r
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>. c- c- d6 ~9 b  N
<h4 id="281-date对象">2.8.1 Date对象</h4>8 s' U% C% B% J: K# ^1 e& e
<pre><code class="language-javascript">&gt; var data_test = new Date()
+ T% i6 x9 |! C' P" n( H7 M&gt; data_test' s* D4 N8 X$ a$ G: A; x
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)9 r' g* x9 O2 \( j2 c. B
&gt; data_test.toLocaleString()+ K( [. l' d" ^4 D: ~- `3 k* Y* U
'2022/2/11 下午9:44:43'
0 ~9 x% A+ d' e* C  \: O8 N' i0 i3 a2 U  _7 F1 ~- J
&gt; data_test.toLocaleDateString()
7 n/ r# T, v$ E'2022/2/11'
+ u2 \. X- H9 r! y) R/ J5 z, |
6 }# R0 S- ^$ x: W' x, e&gt; var data_test2  = new Date("2022/2/11 9:44:43")
0 H& z( o+ e/ X+ f. D4 w; t&gt; data_test2.toLocaleString()
) x: P% e) n2 |! t+ U1 d& Z* G) E: P'2022/2/11 上午9:44:43'
4 N% w" k) d, ^- k% }4 `5 Q& o: `/ o& i
// 获取当前几号  a9 P6 U  O/ Y! |( v  u. g
&gt; data_test.getDate()
: S6 H1 I( ^" q& N7 f3 D. v11  q# q: K" K+ T: V: n
// 获取星期几,数字表示
: |4 ]! c* r) U: f& q&gt; data_test.getDay()  
& W! v# A( x2 C3 L59 [" e( c6 Y) [; X8 P1 w0 W/ ~9 _
// 获取月份(0-11), ^4 T+ V/ ]( E
&gt; data_test.getMonth()/ a3 t: ]+ C/ G1 q, w
1" o5 ^$ I8 ^% a
// 获取完整年份  }" @/ B; {2 d
&gt; data_test.getFullYear()
! q& u# H' h$ H20223 e8 f; s" k- G6 T' x4 v! w
// 获取时* s# b# P$ |% x2 J8 h: Z/ ]& T
&gt; data_test.getHours()
  Z8 {6 t. Y+ @21
0 m' {, l" b2 Q// 获取分+ {. G3 v5 I! M8 B) s
&gt; data_test.getMinutes()
% P& D8 W) {  o2 j: I6 W3 X/ l! h44, L8 T5 R! B2 x  |
// 获取秒
7 ?# p, R1 o% ^&gt; data_test.getSeconds()$ b" g1 O6 H' K# p* J& q$ E! L7 F
43
7 e* A( h# X  M# ?// 获取毫秒
) t$ e9 @! }9 ]" R  y8 P: M2 Z" j&gt; data_test.getMilliseconds()
+ {. ^! z( k0 }% Y2908 d: L3 K4 `2 V& V
// 获取时间戳: Y. L8 }- _7 f; c8 G- W! v
&gt; data_test.getTime()
6 Z9 V! d2 t7 g5 W* _% f3 F4 |  b16445870832900 K; h; x/ x& b, K' D* d6 m
</code></pre># n' @9 Z/ M: ]
<h4 id="282-json对象">2.8.2 Json对象</h4>( g) O3 W. o- X4 z
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串) C8 f. H  G* u  e$ h
JSON.parse()  // 反序列化,把JSON字符串转换成对象
& Z. `4 J3 a! e6 q+ O" a
# g7 }0 \9 j  Q) p0 M) v0 J+ n// 序列化* Z9 p4 F8 d' j
&gt; var jstojson = JSON.stringify(person) . W# m( _1 v/ R" z+ t8 r
&gt; jstojson  ) Q5 S4 t% ^+ `" z! N0 F/ m2 G
'{"Name":"Hans","Age":18}'
( {; L$ S$ t! ]: V4 z/ m2 e6 Q. H5 z& e
// 反序列化
) r' _3 }" N7 k- D/ |&gt; var x = JSON.parse(jstojson)
* `% m& W+ A( T! T# ^1 y) J&gt; x9 G6 \) j3 n) |! `
{Name: 'Hans', Age: 18}
6 p: a1 m* h$ k&gt; x.Age5 v# [* S0 z# O
18
: }9 Y- m! j# q1 V2 `( \1 q</code></pre>! ^- d' K1 Q$ ?
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
( j/ Z/ s3 @# L* B<p>正则</p>
) {  H  O2 H! U! n. f' y<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");  O( b5 H! a  C5 Z+ J; C
&gt; reg1
& M, X0 P' a; L7 M. }/^[a-zA-Z][a-zA-Z0-9]{4,7}/. \. x- `* \/ |. v* ?7 A7 @
&gt; reg1.test("Hans666")# O+ ^+ w6 X0 S# d3 @5 P
true
4 O) t! m- L) X% w( k& y; B1 g
# Q' M1 D& K; f* G& x- k! ]&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
. L7 u2 [" r! j0 F9 ]) B( w5 u&gt; reg2$ L2 c  K6 T/ z+ [  f
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
" y9 h2 {  `1 r1 u. P) \&gt; reg2.test('Hasdfa')$ g4 o/ O$ X. K) D" X
true
) _/ ?6 N6 o2 W% `
% e( J, q' p1 ?& O5 N7 i全局匹配:
: I2 L( H3 \" b$ J& T6 a% h# _&gt; name
; W8 F6 J* p- m, T5 e'Hello') m/ `4 J: g0 }% E* D1 P: y+ B8 _
&gt; name.match(/l/)
4 i- y) }- ~  R9 ?8 V8 T6 I# d- k1 {8 ]['l', index: 2, input: 'Hello', groups: undefined]
* E- j( c1 P+ y6 Z/ r! K  Z
4 j9 s0 q( J9 [, ~: r9 K&gt; name.match(/l/g)8 w4 M9 I2 }. H  u6 l
(2)&nbsp;['l', 'l']
* M" a& l$ m1 `* P( t, R; i// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配( ?) a" x: r6 z' r1 M! f0 g5 Y
* a4 u+ h& Z0 N) a. |
全局匹配注意事项:
- G' n0 S* h/ o7 m- R&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
" u. |! ?* L# Z" O% B" v: j) ?&gt; reg2.test('Hasdfa')2 B) |: v! t7 s2 D$ ^# }( [
true- n( S' }4 W0 z7 x: ~$ P, r
&gt;reg2.lastIndex;1 g4 [: V$ Q( U$ u3 l3 l3 F
6
0 |6 q/ d* X2 d+ C&gt; reg2.test('Hasdfa')
* A( A( v$ a7 y# J( e$ Z/ K3 _false
& Z3 W1 E: A6 w6 V& m$ e! J&gt; reg2.lastIndex;
9 Q; ]- [$ u9 f0 g( P( n" ~0
) h# m. }9 o0 G: P" l&gt; reg2.test('Hasdfa')* @1 h; b( I9 Y% W
true/ v5 j) _! z  x% ^- y8 U
&gt; reg2.lastIndex;/ i( X7 j% I# X0 I
6
3 f% k- }4 W8 x- D; a&gt; reg2.test('Hasdfa'), K3 O' |! }1 |2 T$ f
false: o6 ~3 Q) x! W; X: E' Q8 @9 q% E4 _
&gt; reg2.lastIndex;) x- Q+ d  d3 D6 Z# f
08 d$ R' ~: e6 k) z) J( r
// 全局匹配会有一个lastindex属性: @9 m2 l2 M, H) B+ m+ g
&gt; reg2.test()$ O4 y) A7 W* v" \7 x
false
# G- J0 e& B+ o0 P6 C&gt; reg2.test()) i0 Q9 |/ w5 c
true
. v" W9 }  l: @+ q3 @& V; b// 校验时不传参数默认传的是undefined
6 F5 [; x; p- F+ N</code></pre>& t; t; y; _; @' l! T# F
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>1 P" N6 Y% ]1 r  k* W+ }
<p>就相当于是<code>python</code>中的字典</p>
0 h9 I* C, C) Y0 g, H. {<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
3 O+ q; h' D& p, X8 Q# ?&gt; person
$ b" U& x3 I# B1 }9 N' ]; l, A{Name: 'Hans', Age: 18}) X# M6 p  r% p9 [/ h- _/ }; Q
&gt; person.Name6 l# q$ H* D/ |. h% s1 L: \$ H" `
'Hans'
( U: f# Q) V  x1 y5 D/ g&gt; person["Name"]
' ~  Q' h8 @% a: o'Hans'+ o) N8 X5 E, D8 q& \) n! @  n5 K
$ Z$ X: ^- K. N" P4 K* x
// 也可以使用new Object创建
3 b8 O/ q2 u, D& N. u/ ?&gt; var person2 = new Object()
8 {3 G" k9 _" q. ]) E! i4 B&gt; person2.name = "Hello"
: c$ A" H# j& @# @1 m# j; r'Hello'
; W& z/ g8 }* H&gt; person2.age = 20
% G0 p3 K0 s9 S! J- g+ \: C9 F204 m4 o' i& W% {) w% n/ k
</code></pre>
% }% g7 e  L7 k& D<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>7 J+ f/ C! w. B$ _+ C. @* Z+ Q* A
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
. g! x8 _4 Y& i5 {<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
7 Q. ~: f! s+ Q1 z) o<h3 id="31-window-对象">3.1 window 对象</h3>
4 a0 j5 m. j! o4 d<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
" l2 n' v5 Y" r: ^; L6 u: L9 d& O<pre><code class="language-python">//览器窗口的内部高度
9 i- D5 n2 {& x" Gwindow.innerHeight
  G- \% y4 V) h" D" r706% J! q. z1 F  G# ^7 r
//浏览器窗口的内部宽度4 l' q  b( [* ~0 |" U* U1 {
window.innerWidth
# g- x3 b! b$ T  Z* T' x' w" T, P, D15222 e+ K& [; I6 p: M# q* f  \+ C9 K
// 打开新窗口& h% s3 w8 C: l6 ?1 O
window.open('https://www.baidu.com')
3 f' p" p8 a9 @1 I* iWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}! h) d7 P/ N) I2 z: q$ G% M6 n
// 关闭当前窗口
8 T3 ^/ C- u1 c5 u: hwindow.close() # e! T2 E3 p  |# v
//  后退一页
+ ?! M" W  d/ B9 E$ kwindow.history.back()9 r. {/ A8 ]8 ~. ?1 A% K6 O
// 前进一页1 K1 D% f; t0 b" F( t
window.history.forward() * d% R) c0 x! D; f$ N
//Web浏览器全称" F  F3 W$ n0 T6 Y  w/ j5 B
window.navigator.appName9 m3 w9 G$ ?2 S5 F
'Netscape'  B8 r6 p  W6 f- K7 E
// Web浏览器厂商和版本的详细字符串. K: c9 \! d. d. _, i
window.navigator.appVersion
; C& K" e; K7 v% T' f) _'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 l9 j' ?/ l& S" D% o7 L. x) L// 客户端绝大部分信息' S  T1 n0 O' t
window.navigator.userAgent
- {# T8 u; B/ s6 e'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
, Z5 B! v/ @0 ~& S& N// 浏览器运行所在的操作系统. p3 B; t- J! Z" x7 k
window.navigator.platform4 b# m9 h; P$ I2 J" C
'Win32'- E4 J& `/ `9 I$ @; h
, \2 |& }3 C7 |: X  E
//  获取URL- f& ~/ O& @, Z# [( L* Z/ u! `
window.location.href
: R: b( G: R1 j+ a" k, i5 @) Q// 跳转到指定页面5 p, G' N8 w4 Z
window.location.href='https://www.baidu.com'
, u- X- k% o9 ]: l! u1 ]// 重新加载页面3 c- m1 ~, y8 F- P" S/ w
window.location.reload() 1 e9 g9 [8 e( O. T  G: P! C
</code></pre>
" z5 S5 w1 q% o; z+ V<h3 id="32-弹出框">3.2 弹出框</h3>. V5 f. s2 I5 X( {$ U7 p# P
<p>三种消息框:警告框、确认框、提示框。</p>! _( Q* R( _9 f6 ^, j9 `6 j
<h4 id="321-警告框">3.2.1 警告框</h4>( w+ K" s/ I; j7 o* |
<pre><code class="language-javascript">alert("Hello")
! f" I/ K9 s- b* ?+ P4 M</code></pre>* m) G- I/ z9 {
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
% {2 F; M9 Z3 V6 I! F5 N<h4 id="322-确认框">3.2.2 确认框</h4>
" P5 I# G( K! n  E( Z<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
2 N  G8 T  a7 y<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true$ R! _# n9 x/ Q
true3 d) }4 D9 A8 }' t, H' z  P3 i
&gt; confirm("你确定吗?")  // 点取消返回false5 U# |# t  b$ U5 z$ v
false
' ?3 H" h# a+ }. I( V/ f( J+ q</code></pre>
! R7 W( z# M2 H<h4 id="323-提示框">3.2.3 提示框</h4>
4 D5 h$ b5 i% V: v4 V: }<p><code>prompt("请输入","提示")</code></p>" s% Q: l! k$ @
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>
5 M" I! I' [/ k) V6 |! {! B5 U. |<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>
% Y6 D- V- w) i: R, O5 p<p>如果直接点<code>取消</code>后端收到<code>null</code></p>
; U1 d. d% v2 \* A0 M0 j2 V  {& u% {) H<h3 id="33-计时相关">3.3 计时相关</h3>
; @' v/ C$ h* O. s' ~8 c3 |<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>
$ u6 X. w* Z+ U) Z6 r0 h<pre><code class="language-javascript">// 等于3秒钟弹窗% C# }- ?# t. [1 ^
setTimeout(function(){alert("Hello")}, 3000)! z2 K" q) o& k+ A2 l8 Z3 V
. n0 d5 }1 N: S$ U4 k
var t = setTimeout(function(){alert("Hello")}, 3000)
- c# l7 V, w4 E
/ Y5 m6 b; x0 p2 O* _// 取消setTimeout设置
- a% N6 O8 K3 n0 WclearTimeout(t)# B3 D9 i# O/ b2 r6 ^
</code></pre>
& z! v4 Q$ e( z3 A! R7 x0 H<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>; _8 O. E( O7 e3 F8 k% h# W6 i
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
; k) a: [0 k5 x$ Q5 t! r<pre><code class="language-javascript">每三秒弹出 "hello" :3 y3 D  k7 c4 V( }: P2 N' r
setInterval(function(){alert("Hello")},3000);* S* c2 i9 q6 f( O8 T; Z. m
</code></pre>
0 C/ s+ H  {4 o3 _<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
, I# F) {+ ]& \: d3 W2 |( D<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);! O, @1 L& z$ @4 r9 I# m
//取消:
- x  a; c1 p' l. E) S" h; e  tclearInterval(t)
: L/ V, \) U0 l7 ^% z4 i! u) d9 I</code></pre>
8 T7 O. F+ k$ |
/ W! Z% A+ V0 b2 E
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 01:55 , Processed in 0.082139 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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