飞雪团队

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

前端之JavaScript

[复制链接]

7994

主题

8082

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
26312
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
0 {: K4 k" j% ~" j
<h1 id="前端之javascript">前端之JavaScript</h1>
* @2 K' `+ D) E9 M<p></p><p></p>/ F: E& _8 A" N( _6 \3 x- p
<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>% g% D5 }5 J: q
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>: |) ^( n! ~) P& v* i* ?: \7 g5 V
它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>0 l. {5 ]/ ?! O% I( p+ R8 e
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
7 h1 K# \8 ~, g) N3 E+ t, f/ |* e它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>8 ^( `7 v% h9 h* x3 O2 ]( m& l
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>% b1 z9 V7 I, l/ Z; X3 f( q: z/ |
<h3 id="21-注释">2.1 注释</h3>3 {& K1 Z5 \- k7 }: @
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
- R# T" _) ]3 o# }<pre><code class="language-javascript">// 这是单行注释5 J: R5 g% Z6 l' H
, H7 g$ r5 g  E$ S
/*
6 i! |+ c  {7 y+ q8 V2 O这是多行注释的第一行,: N5 C' l6 p# ^9 z
这是第二行。
6 b9 H6 l4 X* `*/; m8 R1 k& N. }" q. x
</code></pre>
( B6 j1 a* u, u& T. R<h3 id="22-变量和常量">2.2 变量和常量</h3>7 B+ ~) ~- _  D. G. C2 ^* y  B
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>
. h' v1 D! U6 L7 `/ X7 }<ul>8 i0 Q3 k( |. y* B
<li>变量必须以字母开头</li>
' ^2 }) @$ s' O5 D4 {$ f" Y6 T<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
  \; P& W! }  ]! l<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
+ F  i0 ^: F2 c' M& g' t' r</ul>9 S; S, V% X- ~0 g6 H
<p><code>var</code>定义的都为全局变量</p>
% G( Y! Z" [6 c3 F0 y. u; O<p><code>let</code>可以声明局部变量</p>5 |" ^5 _: y; I. P" @
<p><strong>声明变量:</strong></p>
4 m6 P3 w% L- u" Q* K  B0 B3 v$ u<pre><code class="language-javascript">// 定义单个变量
6 y$ u2 m3 Z2 D: z9 p/ c&gt; var name
! r+ b' b* K7 o8 {7 c5 o&gt; name = 'Hans'
% @( G0 c+ h8 P//定义并赋值3 y' t, Z6 E% u* W) r% H
&gt; var name = 'Hans'
2 U6 P4 j9 t: @$ u* {&gt; name3 ~# ^/ t( T$ B: |+ |
'Hans'
' U. U0 P4 L3 ~0 e& o; X+ ^
( P  Z* Y: L4 O7 q4 G// 定义多个变量
) r5 h- x# U8 R/ |4 C4 t&gt; var name = "Hans", age = 18
6 ^+ p& d" T0 _7 ~&gt; name
. b4 z( P" z, c, x4 i5 p, A/ ['Hans'
( V$ D+ s/ H* I. h3 Q&gt; age
, a, `. H6 f, ~% m& o. x18; e" T4 j- |5 g8 L) V
0 U( `$ ~3 H. X& W  e
//多行使用反引号`` 类型python中的三引号
" J# m) B  Y" `" N&gt; var text = `A young idler,$ c% m. y' W# A+ N
an old beggar`) j' E$ y' b# z* H% F
&gt; text
+ k2 Z  o/ W) ]- }'A young idler,\nan old beggar'
  Q  ~( d* y& I+ p</code></pre>
* i- x1 j8 l5 k! ]$ Q<p><strong>声明常量:</strong></p>
- p+ @, d1 q$ {<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
0 E8 _& H- b( H; F<pre><code class="language-javascript">&gt; const pi = 3.145 ^# g" j" r7 j5 M4 _
&gt; pi0 k0 V% q0 m! U8 r
3.149 r0 u% D* g# K: ?/ h  C
&gt;  pi = 3.011 j' ^$ u2 A' \6 A
Uncaught TypeError: Assignment to constant variable.) n$ p$ J7 z  B7 a  M5 Q, `
    at &lt;anonymous&gt;:1:4, E; W- a6 ?, c& Z0 H# |  R
% `8 E# d4 G7 m4 @. u* }6 }
</code></pre>/ j/ h6 T6 m: u  S8 ~
<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
( G7 E. P5 O$ e9 z2 H! _<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>
: ~+ s1 D: _  c4 g8 c) g/ [, Q<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
- _& l+ p, L; f  Y( [5 U<h4 id="231-number类型">2.3.1 Number类型</h4>
0 C$ W: R7 `; i" M2 E# O; g; {<pre><code class="language-javascript">&gt; var a = 5
) l/ S3 e3 V! T3 A&gt; typeof a   //查看变量的类型  9 l9 Z% m2 A( F
number
! T5 {" Z! W' H# Y: D- ~/ G! F" m5 k' G- f, b% B- t# r0 E
&gt; var b = 1.3
, W2 K0 X# N! Q  R# I) [&gt; typeof b
, \# X' [; X1 v+ ?number
! S) T; u5 A" n7 H5 M! n+ Y# s- j6 g1 [, K7 y3 |% |/ [6 n
// 不管整型还是浮点型打开出来的结果都是number类型+ H! l7 V. v* Y; c) N

/ y% q8 x2 s5 m7 S/*
$ x- e' [  Z/ t6 d4 P/ KNaN:Not A Number
! Y: c& _  Y% T- {. |% L) R/ S2 @NaN属于数值类型 表示的意思是 不是一个数字) Y! k% d% Y+ o) w7 U/ L. R
*/
* {% t- f: X$ J8 T" m
3 A" Y6 a$ Z# r2 q4 K5 L, ~parseInt('2345')  // 转整型
4 H' ?0 c6 F9 Q8 }2 W2345. }2 G% u0 a2 g
parseInt('2345.5')
- p2 S- `* {3 _  O2345
, @8 D* K: R1 E! `parseFloat('2345.5') // 转浮点型
+ }- ?9 C' n6 j$ U2345.59 V& G% }! `1 T! ?8 x8 l9 X( \' E) z
parseFloat('ABC'), D8 ~6 h, Y( \
NaN  s* w! i5 W: S
parseInt('abc')7 P4 |  k: d, z1 h! Z( ~# o  B
NaN
& h0 W( Y8 `( M( J1 A, i3 J; l</code></pre>
! K) X5 a" k! D( f' ?( }! a<h4 id="232-string类型">2.3.2 String类型</h4>
' _5 g7 M0 d; c% i& w8 j<pre><code class="language-javascript">&gt; var name = 'Hans': }$ `. Q$ O! U/ E" x
&gt; typeof name. n4 h; A" `; S3 k" \4 \
'string'+ C/ Q: o/ [* I$ q4 p

0 P0 M5 J6 C0 E( u( \//常用方法
+ t- m. q* z7 E, h// 变量值长度' A9 N; m6 E& O! Y- H2 }2 ]
&gt; name.length/ w1 S1 m1 P, K3 P
4
( q7 c1 {: T7 |9 c- l3 R// trim() 移除空白: T7 j( e7 _3 m5 C/ w4 r% b+ S
&gt; var a = '    ABC    '9 _* F5 M9 }3 Z- K' J* S
&gt; a- v, E3 F5 k- \) ]
'    ABC    '
' k4 i, x$ }& ~. K&gt; a.trim()
( X) N; ?, K) j& F2 \- b'ABC'. E; i1 \! A" K+ r3 l7 V
//移除左边的空白# O+ X# H  I# b. u& x! p+ k
&gt; a.trimLeft()
. u. i# b  m, m2 @: W! E, H, o1 _, s'ABC    ') B! E6 v0 z& j5 g1 X; i3 Q
//移除右边的空白
  l; z1 R: `! L. @5 |* H! b&gt; a.trimRight()/ ~# j% |3 G. B1 w# Y9 S3 g" J
'    ABC') Y5 U; n# f- A- k0 I/ `6 q
* B# \: O" y+ K% i+ O
//返回第n个字符,从0开始
* {# O2 l5 q+ C! U' w# z- H$ T! E&gt; name
; G0 E1 z6 ^+ M! w6 ~! a5 L'Hans'5 y5 z2 I5 D( ]7 v8 W4 M
&gt; name.charAt(3)0 l; P, L: {1 [1 W
's'
/ y/ ~+ r' K* T1 V! v' q&gt; name.charAt()
0 Q: b9 f% ]. c; K7 H9 X0 R) f7 i'H'
, c& N' C7 Z6 u2 y( S* V&gt; name.charAt(1)
2 b7 j2 @: I% d8 |, N'a'
9 R+ y' P9 D: h  |
% U  M- g6 L- Z// 在javascript中推荐使用加号(+)拼接
; g' {! O! V3 j6 m&gt; name, g9 V8 O8 N2 C& O6 V3 x
'Hans'% y/ e" T5 m  {& \- X& B- {( L
&gt; a
0 H) d: U" U& }$ e) X; a'    ABC    '
3 c( e7 {! K( z% Y5 X. e! F$ c&gt; name + a
$ l2 x$ F# F7 u1 K6 S& ~'Hans    ABC    '
9 N& L6 D3 R& m1 i4 Q! b+ i, F! z// 使用concat拼接
* S) n- e: |' j6 T, X&gt; name.concat(a); O8 n1 o: d/ [, o8 i$ z
'Hans    ABC    '
% t: o7 h  K4 k* p, k! y4 y% R- l2 i
//indexOf(substring, start)子序列位置
, }. O0 S7 |+ N+ s/ j% d
) c9 t- \7 |) q4 }: ^&gt; text
- a0 L& d& l  v. O* o'A young idler,\nan old beggar'
( F" J- T% ]+ `+ I' _&gt; text.indexOf('young',0)
, C, d! Y+ [2 Z2
6 a0 D: r+ h( A# V8 a( P& X7 J& }% U; e0 l
//.substring(from, to)        根据索引获取子序列
" {% i' u, [$ t&gt; text.substring(0,)  C# {5 o2 K/ ?! V& }
'A young idler,\nan old beggar'
8 o# {9 M& a% d% Q# H) f2 |&gt; text.substring(0,10)& A" V3 _, A3 [& p8 h) q8 |
'A young id'
3 O" Z+ U- L9 Y5 f# [8 V6 c, c7 X8 E9 {* I2 x- I2 a; z7 e2 H" p
// .slice(start, end)        切片, 从0开始顾头不顾尾
2 C# p' b4 e7 i&gt; name.slice(0,3)
! y: ^. _9 E/ y0 d'Han'
! F3 m. }4 C5 C+ n2 |8 _5 p3 R; `1 a. g0 B
// 转小写
; B8 c, v/ C  B: a% P" s5 ^$ x; B  q&gt; name
* k  [; Z2 o8 @8 Q, ~9 Z2 [( z'Hans') e4 k, ~, `' q% J
&gt; name.toLowerCase(). Z. x7 _% Y* r! J: b
'hans'
' }3 \. m8 a1 v// 转大写* _0 ^! _- P: ^8 |5 L% B* D
&gt; name.toUpperCase()
, F# I3 A/ i8 k( A8 `3 T4 V1 k'HANS'% S: K9 R' F/ h# Q
. x! v: N/ \$ I, I1 P
// 分隔
2 `6 Z8 j# M# p/ E9 v&gt; name4 `7 f' m" {9 F0 y; _7 g  }5 V7 {- [
'Hans'
( ^2 u/ Z3 d# t3 I4 B& p&gt; name.split('a')
8 `: N0 B" D! [* ]' l# y1 E4 ]5 f9 |(2)&nbsp;['H', 'ns']
; U% K+ c; p' D9 P</code></pre>, h; ]) C5 x4 o5 h* r# o' Y6 o
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>! e* h: \  N6 ~" G9 h$ v
<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
4 d4 K( Y  ^1 a* m1 ~, v<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>- C( p) W/ j0 m" v) E+ Z
<p><strong>null和undefined</strong></p>/ F6 y- @/ ?/ W7 W! a2 e
<ul>) ]0 \3 O0 ^7 w4 h
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>
5 F2 N6 {7 Y7 z: [& s: l<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>9 H& R  t* i+ \) q' C+ a
</ul>
- T. W3 A5 y/ \5 }<h4 id="234-array数组">2.3.4 Array数组</h4>, h' o  T# P; B% q
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>4 P+ v: N! F0 _. \+ E
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
; `2 y4 U9 [! w4 S, v7 P&gt; array1
' ?. ^: k6 n3 o% @- C6 M  j  v; `, N(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
7 ^9 f: G! S& ]* Y&gt; console.log(array1[2])  //console.log打印类似python中的print5 q* g1 s/ y3 N( F4 }4 ^4 t
3
+ i; u/ n6 M! J1 M// length元素个数
' O" R7 j" Q! j7 i&gt; array1.length
, [( o& H' C! O- K( R% j" p9 F63 d, g/ \, t) u7 v) d* u
// 在尾部增加元素,类型append/ E! h. r' r, }$ X1 S( F) ~
&gt; array1.push('D')6 c% ^/ ?" H2 V" V8 _6 P
71 s- z5 ]; D4 p2 J1 G
&gt; array1
1 |9 }. S3 u+ X5 G3 ~1 v+ H(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']. Y$ O9 l7 |0 n! P
// 在头部增加元素
+ {' \( Y8 y, j! L0 y  v* n&gt; array1.unshift(0)
7 ^, I- V; Y5 [- C8
. o. r" G2 J! P&gt; array1, S" }2 e1 V2 j6 L0 v" f
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']0 G# v4 b- y: l0 B; y  e
! k% n: r$ o) h: ~0 @
//取最后一个元素
& D; Q% j/ a; V8 h) q# y5 k&gt; array1.pop()' r' Z; w7 F4 q" t, g+ W/ }/ H
'D'
  Z/ _7 b; a* @  e0 Z# Q  q: c. Z&gt; array1
6 z6 l. ]7 x8 D  H. I(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
% P: L0 F* U- l" T! n5 D3 ]" `//取头部元素
8 F8 N, `( [) i! R, a- y&gt; array1.shift()( z# ]  ~, |) m" |$ z3 J* S3 s
0
3 Z2 }* p2 J" C; i, k&gt; array1
2 @+ I( j% j  |; n$ Y- z+ v(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
* i. f. X5 ?% R% Y9 y9 P
! G" H3 N( W7 D3 J/ _//切片, 从0开始顾头不顾尾
8 J3 \4 W: j3 G# C+ |+ g! I&gt; array1.slice(3,6)
% n4 x4 R' D8 r. l(3)&nbsp;['a', 'b', 'c']7 q8 a+ }4 g6 r: r
// 反转1 c# s, N# W* H
&gt; array1.reverse()
! [7 L: {. q, [. t4 O6 z7 A/ L( @. b(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
3 x6 n- v0 Q& z// 将数组元素连接成字符串8 j3 o4 ]! J4 G! v! q
&gt; array1.join() // 什么不都写默认使用逗号分隔' W$ L' W' j- U. a1 H8 t4 D, m
'c,b,a,3,2,1'
& o, h8 A+ x6 e. i: l&gt; array1.join('')
! ]$ @: L6 u6 d! {2 v3 }; W'cba321', W/ L; Z' X$ W* V$ W& f- `/ }
&gt; array1.join('|')
* m/ k& b/ O3 z- A, R/ w'c|b|a|3|2|1'2 {& A0 K: V9 |! i* u

& ~$ }* L4 g+ Q/ P9 y* x* b8 w// 连接数组. ^7 Z& y+ A) I
&gt; var array2 = ['A','B','C']
. X0 x: @2 z1 B' k9 ?8 {% A) J&gt; array1.concat(array2)
9 G/ ~5 S: [' I/ p& Q) f( k(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
) }) z7 Y2 I+ D/ e& v
) v0 ]4 X& ^7 X" I" C9 R' _& {// 排序
& K& j- |' R" I: @&gt; array1.sort()& v6 I" T4 [* ^6 a+ m' q7 d
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']6 T  t' S; J, s1 @4 b* T
4 P5 k/ a. h- s$ K
// 删除元素,并可以向数据组中添加新元素(可选)1 g, V9 [- S& v* m8 ?4 h. e, Z; C
&gt; array1.splice(3,3)  // 删除元素6 V, d: Z$ F7 Q
(3)&nbsp;['a', 'b', 'c']
: l# t5 u3 _3 c5 ?( j0 e&gt; array1& l) a. l5 C4 j& S2 {; t" _
(3)&nbsp;[1, 2, 3]
5 B' F+ @3 \; e1 E7 E&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素; R- Q7 j" w, d6 _2 F
[]8 C2 o  u* m: X
&gt; array1% u: x8 M5 I% y
(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
* J8 v5 p- F7 f& v. R0 z) m
  n: h4 r# n/ S* a4 a" e/*
+ y8 i# |* w/ Y- j4 Q$ f/ jsplice(index,howmany,item1,.....,itemX)
$ w' p1 a; `, S" _4 ~* @- qindex:必需,必须是数字。规定从何处添加/删除元素。
# u0 a5 \) @4 C( \howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。+ ]; b! h3 g7 W$ c
item1, ..., itemX        可选。要添加到数组的新元素# F+ d: P2 h! [" C; I
*/
9 G) t+ o5 [4 W1 L; H: J# \
2 F) F0 f# W  c" _% m$ w// forEach()        将数组的每个元素传递给回调函数
( [  h, u% n" W' \- M- T6 l&gt; array1.forEach(function test(n){console.log(n)}). ^- D3 @. K6 [, l
1$ e: Z/ [( Q8 l) b/ q6 n
2" I+ u, S3 h. `1 _( U
3% r$ z) S9 ~& k5 h0 c5 H8 l: j* E
A; G8 e6 ?5 B9 D$ y' Y! B9 J0 {
B
+ U  \9 a9 M! m8 T- s C  j( L2 i% i$ Q# B& C% j  [' M
// 返回一个数组元素调用函数处理后的值的新数组
/ d! P; Y& W2 w7 _/ C  Z& u; K&gt; array1.map(function(value){return value +1})# E* N* S) a$ H! {- L/ I- d
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
4 w2 M* l+ @6 v$ v$ c% h" G" T</code></pre>6 u  y2 R/ H8 z
<h3 id="24-运算符">2.4 运算符</h3>/ v& [( u) p- f( p( s
<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
+ q6 G5 s+ c% L. J6 [' H<p><code>+ - * / % ++ --</code></p>
0 Q/ c" c7 ~2 U, T8 U% ?+ `, P<pre><code class="language-javascript">&gt; var a = 6  S* f0 ~" a5 _5 P
&gt; var b = 3
0 d  m; ?# {* o2 t1 J8 ?) {// 加
9 p$ s8 v- ~! ]: ~, z7 b' L9 Q, N&gt; a + b
1 q7 F2 N1 B- L) w1 ?% j" O9" r6 q: g: C3 W; _# g; }9 F
// 减
' p9 z4 \% e/ w; B&gt; a - b
( d9 q2 h! h" |3# H+ p/ E& M9 Z
// 乘8 }9 l4 F! R6 k; x( L; P
&gt; a * b& J1 }& K( \1 A7 U* Q3 \. z
18
8 {9 [9 }5 O- ]. Y# K6 q* u8 w5 @// 除8 ?1 z) ?6 {6 `2 T. [: w
&gt; a / b
- U0 X7 M4 P: ?7 T- h$ ]7 `2; O. x. k* R7 q" J' H2 I" Z# N
// 取模(取余)) }2 B+ R& D: l# W' @6 V2 G2 ?- T
&gt; a % b
  L$ A, m/ Y8 g8 Q: q9 \4 O7 v0
/ E% ]+ [! {* j9 _! X// 自增1(先赋值再增1)
7 k# @+ a. F. _0 x&gt; a++
7 Y  I" w9 r8 q3 k( O$ R! M4 s6
! g3 q2 x1 Q' z" A&gt; a0 o5 z4 k# `! w) m  Y
7
+ u# X" ]5 D% m1 _// 自减1(先赋值再减1)
; q( h6 T* l  v: V9 p# M&gt; a--
( d. S+ x+ B/ @; @7; x  K5 n2 u6 k1 E
&gt; a3 @1 p1 v; N% m3 f: n7 H
67 [0 F: j' @( N# a6 ~2 {$ s
// 自增1(先增1再赋值), u! c8 z2 d* F  |  m
&gt; ++a% k# ]/ c' X5 S5 Q. {7 r
7
# U5 ^: M' I+ U- a6 G0 z5 r9 h// 自减1(先减1再赋值)
- G" F+ t2 X; q: r&gt; --a* @% U, W" Y5 s7 o6 {+ ]* T
6
  E1 q& q( W( \" _, H1 X&gt; a
- \4 o' D5 ?' L' d6! V, [. z, p/ }8 \
7 Y' p' z1 ?# v1 i: m
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
6 {( l$ I5 Z/ ?" U</code></pre>
6 ^3 Y/ i9 Z. n) B. G- V. E<h4 id="242-比较运算符">2.4.2 比较运算符</h4>& c# @/ o5 _) t/ J  B& W3 b
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
0 Z3 P% T+ i% b& A: O# {" B) ^, v<pre><code class="language-javascript">// 大于
" W3 W+ a- x" H' ~! ^, u! z&gt; a &gt; b
8 }! ?4 x3 \/ H/ Ttrue
; f0 o) K1 w0 c3 n4 G6 n$ X// 大于等于
# b  ?: x  N+ l! |&gt; a &gt;= b
" C$ T. x. Q4 v" ]- [true3 q0 ]/ M8 _3 X0 d4 G- z
// 小于
/ F" _) m4 A' Q) }&gt; a &lt; b
; x* y/ _5 r2 V( vfalse
& U+ k  X1 O2 D! q5 a' [// 小于等于( G+ {7 H" @! [0 ?, _# @9 w
&gt; a &lt;= b" @. h; E" L' U$ i' q" [' @
false: @% y9 O% k* o8 [7 A4 v7 G0 n( K
// 弱不等于/ U1 I5 h$ q4 c
&gt; a != b; [  {- N0 P  K
true, y$ q7 u  B( L( X- Z
// 弱等于# H% K$ ^# \* f3 `2 D9 e0 R5 X
&gt; 1 == '1'. B% ?- o% e' I6 ]8 ^1 A2 U" L" ]
true' d6 w4 m' F9 g4 W! e
// 强等于
( n& C8 g- }* x" n&gt; 1 === '1'
0 _% k# e/ s8 l; S3 I7 Lfalse: ?, A: c$ Q' Q. A0 X- K' D% \4 x" p
// 强不等于$ f2 p8 r; t' ?
&gt; 1 !== '1'
, g: M& y' U# a) R2 F* X; ktrue2 A/ A. ]' i( C+ Q
# _; i. M& V( K; N  `9 k
/*
7 W) P0 a/ E3 W9 o* Z) ?4 k5 U! AJS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
- d/ \& F) o: n; g& x! D8 y! A*/$ v8 t5 g$ E; D$ Y' h# J/ b0 H
</code></pre>
$ W- g1 T2 R/ Q<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>
' U  W4 d! x$ Q1 f8 f( |% ?<p><code>&amp;&amp; || !</code></p>
( Q3 k$ j' Z- Q5 y: _<pre><code class="language-javascript">&amp;&amp; 与
+ Q- b/ L( x1 d" \" n|| or
6 t0 H: E7 Y5 M3 g! 非. W. D, P: S7 l$ O
</code></pre>: D  l$ H" [9 j" y  M' s" H& O
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>' M! Z" C: u" P/ ~) @
<p><code>= += -= *= /=</code></p>
. m/ x1 }2 I* I: H9 W% k<pre><code class="language-javascript">// 赋值4 B2 V, M8 y* j5 O6 f  R
&gt; var x = 3
8 F& ?9 \9 N$ L/ R4 f% {  U// 加等于' p1 T( ?2 y, D+ u- G
&gt; x += 2
. d1 K9 g6 I% k# x8 ^  B5$ ]2 ], \5 m2 W. a* L
// 减等于' \& F6 W% i/ |7 K0 |$ a& q
&gt; x -= 1
6 S% e# k+ }' g# S- N4
* ^9 I" G' q6 N// 乘等于  l) k: n2 {5 t: S/ @$ S; B% r2 r- @
&gt; x *= 2
  z! M) C. |: e6 y2 j) b7 p# z8$ V9 c2 c0 e) O
// 除等于$ Q7 z7 n# s1 t+ Q& W2 Q
&gt; x /= 27 j8 N7 B, u2 C, z: p. w
4
" q3 p# a+ z; Q</code></pre>
& ?  m& e% b* `5 [7 V" ^<h3 id="25-流程控制">2.5 流程控制</h3>2 W2 u* [% v, z! x
<h4 id="251-if">2.5.1 if</h4>- Q! ], g7 N8 k8 @2 y4 W5 y
<pre><code class="language-javascript">1, if(条件){条件成立执行代码}1 S# {9 X: W% J; C! P

+ L% W9 n4 D0 J0 f. [+ z+ `. ]- x&gt; var x = 3
1 ^4 [( E) Z4 N! W7 n  ~5 \&gt; if (x &gt; 2){console.log("OK")}. U# u  n/ J9 g6 q1 g
OK
$ H( v4 b# O6 B  A4 F; g/ C6 h8 h' `6 f  o
2, if(条件){条件成立执行代码}
$ R5 r0 ^$ X' [1 |        else{条件不成立执行代码}) y/ ]3 \; F  p7 q  w. @

6 _$ ?& t/ v: ^/ T! b- T&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
8 }! V* `8 f" ~& z'NO'% r) N' z) E$ W* N% m8 C. O
1 x+ Y4 i/ h8 h& j/ e  q7 f0 T
3, if(条件1){条件1成立执行代码} * Q! H8 d6 u- s2 m3 r9 \4 M
        else if(条件2){条件2成立执行代码}7 ^3 s, ]3 n. l; l2 ~( [: O6 S
    else{上面条件都不成立执行代码}( [0 \3 p1 P* g

/ A8 @: u% \5 W' B% ?: s0 s& Y8 R6 {&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}
" J5 C0 m9 W) B Ha2 [; E! t' x! i# m- v
</code></pre>! @2 A: ~; Q9 J
<h4 id="252-switch">2.5.2 switch</h4>& {  u+ x' x1 I: t2 L
<pre><code class="language-javascript">var day = new Date().getDay();& T, Y  J5 L* s% [$ \: m6 S
switch (day) {! `& {- C' x3 r, p
  case 0:
+ Y, p5 n% }1 b" y7 }; R6 S6 x  console.log("Sunday");
- B4 q/ x3 R& X: X# }8 w2 V  break;: G9 U6 e8 T4 |+ p* J
  case 1:
/ M3 q% ]: _$ q% F5 c* p  console.log("Monday");
! s- ]% O( H! c  break;* j2 Z$ a  q. t8 W2 G
default:
5 ?: c  W% y2 K( t% C8 E8 N; f- z% X7 j  console.log("不在范围")
3 N% Q9 X) b' X/ N/ x}
8 E$ k- F, u" `: \ 不在范围
* V# H: d( S# Q; _- v</code></pre>
, Q$ Z; k( {  r% {6 P. J5 Z<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>' [7 p, f/ z( u% V7 q9 c6 e, `; e% h
<h4 id="253-for">2.5.3 for</h4>+ _1 e8 C4 u. M+ b
<pre><code class="language-python">// for 循环) c: G+ d4 X( _9 x# J8 H0 G
        for(起始值;循环条件;每次循环后执行的操作){
6 g6 s! E6 C( r/ U# Y$ A        for循环体代码: m. J, O/ W6 T
    }- J2 f+ L( {7 h  H. O
/ n+ q* W0 e% p" d+ h* }3 H0 F  j
for (var i = 0; i&lt;10; i++){
+ B' d# d) H8 X, k9 p    console.log(i)
; ~  W  ^' }5 B% A0 Z- H+ {+ ]}9 e( t/ g) J/ A# |' H9 q# u  R
        0( z, b5 w, E# g; y* [7 ~
        14 }4 j* a. g- v7 i, ?2 X& }6 K
        2
7 k+ i8 T( w) w; k8 C: \0 Q        3; |, }- {% }* |. W2 O
        4% ^; j, A5 ^# ?7 G# m
        58 j4 ?" Z8 b& v, W7 L: G
        6$ V  T( P, Z) ]  I) x8 @" R
        7
$ ?2 L+ @3 ?' r5 H# e" y1 y% t        8
- b3 c& g; N' ?" [' X* `7 d# _% g4 v2 Z        9$ A& Y' y% U0 D+ F  K/ V* U  x
</code></pre>
* ?1 P; Z& Y. h0 _<h4 id="254-while">2.5.4 while</h4>
% H" w. {" Z( |7 c; b<pre><code class="language-javascript">// while 循环8 D+ ]( q' y7 G' |, b
        while(循环条件){
, N% e; K$ J2 N        循环体代码/ P3 J/ c2 N4 n- f9 y) G8 b3 |
    }- H  P0 |1 ]) a

' S- G% g7 V) ]7 w/ a/ k0 S&gt; var i = 0
' |$ s. T3 G7 s6 ~* S* S9 W0 }&gt; while(i&lt;10){
" c3 W% E) C7 N$ C& F+ Y    console.log(i)  e- H. [4 K% E' W+ P
    i++- t% S9 @+ g- r5 J6 T# S7 X3 ^
}
; \+ _# U6 c% ] 0" w: Q. X" [# ^
1( H7 k# W  m# G# e# ^% p1 k
2
+ m9 V4 c1 Y4 q 3
& Y, i* O% u3 u+ P, _6 @- D 4" t, }/ O6 Z. R
5
: v; u; l9 j# E  u1 R3 Y* u 62 n; R/ G8 P6 Y. L4 ?; a! b1 Q
7+ c' ]# l1 N6 N8 L
8! |. M! S( I7 F" _  @' R$ s
9
) H# f' z  \, U- a8 K4 t- E</code></pre>
+ h9 |' F1 O' j# K0 H+ m# M, t<h4 id="255-break和continue">2.5.5 break和continue</h4>
9 [7 O. V( P% o! v<pre><code class="language-javascript">// break
5 z4 t" m6 I( j) Q/ @) A6 vfor (var i = 0; i&lt;10; i++){
  W4 t' T5 Z7 j, ?# G" R1 m    if (i == 5){break}
. ?* d3 a) j( ^& J) Z  N    console.log(i)
2 y* ]3 N3 V' D) @9 @8 W5 o- t& C! k}8 n7 Q) N" s; j) m& ~
0; o% D% b' e5 n, r- i
1
, u2 c( t( Z; x2 k1 ` 2
+ [+ D7 V5 s" j 3
+ d1 \$ y2 N* i; x 4: R5 V2 {9 A+ }3 k4 M3 A; m
// continue2 y! X) A9 _8 k) {2 X' V9 O
for (var i = 0; i&lt;10; i++){! ?. r! Q+ r7 E% O1 k% i3 e
    if (i == 5){continue}
, K5 j6 G$ T7 X2 _/ U    console.log(i)! z, ~% A1 p! g) u6 t
}/ M/ R# n3 O, Y& ~  H! P% r$ c
0
  q! Y- B( n5 d9 ~ 1: u0 g7 F9 u& t4 V
2
! x, K& `. h& i$ h0 C 3( G- E. `: Q* O0 O8 n# F
40 e4 @8 n/ V1 y! `4 K% ]
60 a0 u, N1 d% T! R
7
* N8 O- y9 C9 z/ S: t 8
& y3 Y0 P. a2 n4 H 9
( O+ ?- K) o1 j1 X7 C7 b; a  Q
  N7 n" W( ]! i8 i& t, G</code></pre>" x& g- a6 H2 P$ G  n. g
<h3 id="26-三元运算">2.6 三元运算</h3>0 @0 M9 s5 T% A' x
<pre><code class="language-javascript">&gt; a7 Z# T1 M7 L, i$ E+ h9 _
6
. x6 b$ d9 f3 I4 g&gt; b
! l9 b3 u  _3 V; f8 w8 t1 E3
5 f9 ^& O9 L7 ?9 N3 G+ i' h# g2 K9 Y
, I" _; U- |/ r: c//条件成立c为a的值,不成立c为b的值9 H7 T$ l2 d9 ^! N) h5 I
&gt; var c = a &gt; b ? a : b+ |5 T3 H% p. m, X
&gt; c
( h/ z7 [* n/ ~/ v/ h6
6 |  f+ j4 {: ]% S+ c. @5 ?
* ]" M: A, o3 z// 三元运算可以嵌套$ Y2 c; V3 A9 X% Z% H
</code></pre>' W. o# ]; k8 I/ H/ F( o# z
<h3 id="27-函数">2.7 函数</h3>
, {6 O6 \+ g) h! r* P<pre><code class="language-javascript">1. 普通函数
1 Z) v# e8 c0 z6 @. ~&gt; function foo1(){9 Z5 M* N0 n  d5 ^
    console.log("Hi")
1 o$ f8 Y. k0 p}
. Q# U: Z# D3 C5 {
- A' i0 p  S3 {* J8 d$ I* c: h&gt; foo1()- ~) Z& W# L1 X* a9 Z9 y0 g; N* A
        Hi  w" ]. X2 D$ D/ w; W
2. 带参数函数
1 c) k" Y* P5 S5 \$ ]9 I&gt; function foo1(name){7 B+ M+ j3 V2 D1 S# a% s9 t4 p9 T
console.log("Hi",name)
3 M& m$ e( v" i; [}
4 ]$ [2 \3 Z# E" R( s# U9 \
# _1 b. E. P5 Q" f, i+ L&gt; foo1("Hans")
5 g* T9 |, Y; Q0 _Hi Hans! ~" _, U: q6 Z
( o$ @7 }+ h- m7 f6 N
&gt; var name = "Hello"
' f! O4 h5 m* M- B&gt; foo1(name)% q0 W9 T4 g  A' K1 ?, q
Hi Hello
! e: Y$ H' g) f; {0 J
" @5 }" G, ?4 z6 g' s3. 带返回值函数& S. g6 c1 d$ f$ f6 x; y6 A; d; t
&gt; function foo1(a,b){
& e' J& o% l* g) ?        return a + b   / m' |4 D; E- I3 ?- G1 ?
}
" o$ y8 J  }, i' v6 t+ q&gt; foo1(1,2)
$ b- {: b9 K  [, s3 w, O32 v6 d  I& G$ A! t9 X6 ~# d
&gt; var a = foo1(10,20)  //接受函数返回值$ Z$ R( I& v  R
&gt; a. [8 u* U5 f7 }/ H; G
30
$ E; X' x- a/ g$ Y" Y5 J8 Y7 A
2 T- k! X, {; w4. 匿名函数
1 B0 I6 y# A- t9 g6 j2 v&gt; var sum = function(a, b){: Y$ e, [6 G/ j+ @4 q" g
  return a + b;" P+ Y6 A7 u0 V; m) o
}
0 r+ o' |4 P5 Z3 L* m9 a3 d&gt; sum(1,2)7 C$ Z, z5 d0 }; r
3
* L  N) B, i# J2 Q1 S
& s9 q* F( S1 r: J6 @, b) I; G// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
1 O2 y, T# D. I- p+ q% K&gt; (function(a, b){
5 R- S& Y4 p2 _$ c) `  return a + b
0 e  W5 ?# V/ o7 a})(10, 20)$ u( @2 y  G7 G- @
30
( z9 k& c/ h% Q, g( x5 K+ x- U" x- \: I3 ^
5. 闭包函数! z4 V7 E; L8 F. U
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数% b) E9 l" ?2 B$ g, W& v
var city = "BJ"/ |% P0 N& }# B: v9 s+ E! ?
function f(){5 o; h# `4 c; [: a5 s8 s: }% w
    var city = "SH"+ g  X6 W2 {2 `. g
    function inner(){- i1 R% g  v% e
        console.log(city), W0 a+ h5 D2 ~/ q8 R5 K% M
    }# {+ E8 u4 a  q
    return inner
$ e& f" v8 i! O+ I9 O}
. |) q/ _' g0 A* w+ yvar ret = f()
+ ^9 L0 Z( o) Z) ^2 Q4 x  \ret(). M( B( K- K* [$ h  H! T: E
执行结果:
- S- W9 x" u& f+ o" ~SH" z/ W0 {3 [* w1 P! @

' B4 J1 B6 H# b+ e8 Y6 b1 ^4 _9 G8 }</code></pre>
* t) K6 u  R0 Y% h3 U  ^+ M5 P<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>7 I+ y( D, G$ |# g) X9 X4 K8 B
<pre><code class="language-javascript">var f = v =&gt; v;5 d- h/ H0 I) s" Q6 \
// 等同于& }* y5 G2 z0 B( A  \
var f = function(v){
3 I4 v5 i" s% \! r8 H7 e( O  return v;
& B6 L. c6 H4 i" [1 n5 Y}1 P1 S3 v  I7 H7 T" b. p
</code></pre>
3 g; o# y6 M5 c6 P<p><code>arguments</code>参数 可以获取传入的所有数据</p>
8 d5 @9 z+ e( T5 o1 f' m) A<pre><code class="language-javascript">function foo1(a,b){; y" r, S& g( H, N0 X5 ~
    console.log(arguments.length)  //参数的个数 : X3 d) y8 r+ {" B
    console.log(arguments[0]) // 第一个参数的值
2 i7 r; T( h- X! K        return a + b   
( u! m/ t4 k7 A6 c9 `* j2 k}/ B/ V7 M1 [0 r, {2 a& B2 e
foo1(10,20)
9 L1 p9 r1 B! y6 s7 [结果:" l( C  V: f. j1 U5 B. `' U
2          //参数的个数 ! R, Q6 y8 i: I2 I+ j( R
10        // 第一个参数的值2 H- E: }( l. E  ?4 Z" ~
30        // 返回相加的结果
/ m6 \: c9 Y/ m, s0 N* H</code></pre>1 E& M6 |3 r5 X: P7 b) b
<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>
0 e6 s) e, B3 P) A$ @' ^6 g; b' C  G& Z: U<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
9 F  h7 o7 k! Y+ Y8 z5 v9 W<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
; W) a" s5 ~. j3 S2 p<h4 id="281-date对象">2.8.1 Date对象</h4>: O1 ~) M- _; k7 @4 T8 H& M+ x
<pre><code class="language-javascript">&gt; var data_test = new Date()
# ~( M# @0 S0 `. ]1 O&gt; data_test9 d  v6 F. y% \
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
( y1 k" }: u) l+ y0 A&gt; data_test.toLocaleString()
+ B* o" m1 A; u) U; O' u. \'2022/2/11 下午9:44:43'2 A6 e' |! V8 ~% i6 \/ S, Q9 w

7 t8 F* F& g1 p# p8 _' C; {&gt; data_test.toLocaleDateString()
9 s, \. V  y' n1 e% }'2022/2/11'
* e( u7 W* G3 ]0 f* M! e
1 ]$ K+ o$ H, X/ H&gt; var data_test2  = new Date("2022/2/11 9:44:43")
) [) Z7 I+ z$ x% S&gt; data_test2.toLocaleString()3 G+ {3 u+ i' R
'2022/2/11 上午9:44:43'
% z% ~/ P4 |. N: ?/ l: |! u. z6 g% ]( q- A. m: Z" Z0 y
// 获取当前几号
6 p- G3 \: d( y1 l. l8 \4 s$ {&gt; data_test.getDate()+ Q- j+ u1 l+ _0 G4 q( w
11
! S# q- Y. x, K; d- S// 获取星期几,数字表示6 M4 F. Y7 N5 J6 s
&gt; data_test.getDay()  " W& Q9 o' P5 h4 m; _+ ?- `
5
# P' d6 ?1 H  ]' `' R% j  w* y// 获取月份(0-11)
. L( G/ R6 d8 l$ z9 R7 k1 t&gt; data_test.getMonth()$ \  E. y/ y' R+ V; |
1# s  p7 y4 P+ |* o
// 获取完整年份2 P8 [$ [3 W7 y
&gt; data_test.getFullYear()) o& g6 [; _" k5 h/ K  y/ Q
2022, }2 F8 t# ^( K# U% e
// 获取时9 i$ ]% m2 E  S2 D5 J
&gt; data_test.getHours()4 w5 c$ ^8 r! p+ K
210 _5 p5 l4 X! d
// 获取分: }; U" G7 B$ d: _1 i1 a' y1 b/ r
&gt; data_test.getMinutes()  R& }9 d5 U8 r. b+ C% \
44
3 s" [& }, v$ `$ _- E/ @// 获取秒+ ]. {0 g' m- ^: Y
&gt; data_test.getSeconds()& B4 E: \1 D, l" \& J" O+ `' X! y
43
4 E: i3 P3 Z3 ~$ f/ C- M8 d// 获取毫秒9 P2 f, ]  Y6 j' I; d
&gt; data_test.getMilliseconds()
5 ~1 Y% m7 Q* G3 g290
7 h% C/ L1 S# @: I// 获取时间戳
: [1 i7 @# [. U) C/ h6 n4 a&gt; data_test.getTime()
2 o' A& |! D$ n% {1644587083290
- c0 R9 Q& P- c0 T4 w</code></pre>
2 P- q8 W* b2 b0 i8 O1 L<h4 id="282-json对象">2.8.2 Json对象</h4>) J  c+ _: g# T% |7 Q
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串: \% A  k" ~3 q1 j. q* y6 K- c: M
JSON.parse()  // 反序列化,把JSON字符串转换成对象
# b5 [8 |; L) u! x
0 _: s; k& f8 V1 `4 r5 \+ X4 N// 序列化* H3 M2 h; H4 |  F: ~7 R! d
&gt; var jstojson = JSON.stringify(person)
" z4 V3 n; f2 L1 T&gt; jstojson  
" a! N+ O& [+ w0 w4 A/ |'{"Name":"Hans","Age":18}'/ h  R3 T3 k9 K
2 t& E4 }; I  h4 s
// 反序列化/ M( L* q: U, }8 r
&gt; var x = JSON.parse(jstojson)
8 h0 L1 ?4 t: g& O, O& i3 m&gt; x
- b, i2 m# C, |4 h. s2 W% w6 i{Name: 'Hans', Age: 18}
9 v1 `/ g# C7 r+ p&gt; x.Age7 _; ~9 S$ W  m: x5 J1 H2 K5 `$ _1 [
18, R/ ~/ y. M, I6 X3 _; p: }. [+ G
</code></pre>0 @, K1 G) O- ^, E  G6 F
<h4 id="283-regexp对象">2.8.3 RegExp对象</h4># b0 {+ A6 f5 K/ }6 b  F- Q2 F
<p>正则</p>3 B" |2 F7 d6 m+ F: Z. ^: ^
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");& N: R4 _7 j5 l" B# r) d
&gt; reg1% C7 |* }  R+ y+ Z; M
/^[a-zA-Z][a-zA-Z0-9]{4,7}/7 U/ ~' L% [8 X' h  e2 i
&gt; reg1.test("Hans666")! y+ g# E5 m7 F) @
true
; \* {1 A$ N! s' G  Q
9 b  q$ w( B  P: j/ A&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/! b- @% W) D7 N9 `! X- N$ t
&gt; reg2
( o& ~& i) f! W6 t+ b* y' D/^[a-zA-Z][a-zA-Z0-9]{4,7}/  N7 ]- a4 P+ R" x, r/ n
&gt; reg2.test('Hasdfa')3 |% d4 s) W* V2 K( G7 w# r6 J" z
true. K! b1 v* o( y7 D2 N' }! e$ B

( a- r6 i5 [2 ?, J4 O' i3 Q  }全局匹配:$ k7 _9 g3 @( G* k) A: `
&gt; name
  U! h+ v" r( V1 v8 ?) x, C'Hello'
  k. D4 s5 `/ T0 g% j6 f  G1 n- r&gt; name.match(/l/)
5 c$ n8 w0 D- q2 E; ?, ^# l['l', index: 2, input: 'Hello', groups: undefined]
  N* u2 f  P1 g8 j$ q9 ]5 N5 M+ X, s& `
&gt; name.match(/l/g)
. g8 {4 h1 `' Y(2)&nbsp;['l', 'l']6 W' W7 W3 c9 B  F1 ~* N
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配4 a/ X: }* }2 c; |8 C: s
  V  f: n3 O" R
全局匹配注意事项:
- E% d, E  I9 }4 T" a- k&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g9 o& D1 a; j8 W% Z
&gt; reg2.test('Hasdfa')
: h# l" c2 L; w, y2 s/ N: r2 vtrue
& Y# y+ j, O" t1 {1 K5 h. t&gt;reg2.lastIndex;
) k9 ]; _& q5 r4 B6
& Y# r( d: L1 }4 {& q' l&gt; reg2.test('Hasdfa')
6 q: w: V3 D% `7 [: Hfalse9 |! v$ a" j0 S2 A. p5 H. \
&gt; reg2.lastIndex;
# ]; x9 ?. e( f% F9 k! G, ?/ }08 J4 h  r+ E* J
&gt; reg2.test('Hasdfa')( `: D  K4 ^. `$ k- a
true
! y. i0 ]- p; e: u5 @/ _&gt; reg2.lastIndex;3 O3 O" S% E# G% b: l2 C( i
6
  ~6 F1 `. o! Y5 {/ J0 S; U&gt; reg2.test('Hasdfa'); j* G' B: R+ r3 ~% A+ n4 V) }, o4 K. {
false
4 D' N. M5 N* ~5 U% I. U&gt; reg2.lastIndex;8 C7 R. b9 T( p& t
0: Q$ m1 k5 V+ R; ]" r
// 全局匹配会有一个lastindex属性6 b. m/ B! p1 [$ Y" Q
&gt; reg2.test()' U" O* a: v3 v; o, o. A* W3 {
false9 H7 @4 V# A8 |: X
&gt; reg2.test()+ h) C0 F/ f1 R3 T5 N7 f; e9 m
true% A- S1 g2 b) M8 d
// 校验时不传参数默认传的是undefined
/ ]1 C- f- Q: k" q) Q& V</code></pre>6 \& z5 v2 p( A' B
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
" w: j& @9 O1 ~1 l<p>就相当于是<code>python</code>中的字典</p># p( l- N, ^# P/ }
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
! h$ L% ]" b, h5 j) n7 W&gt; person, y9 y' ]  h, j# y! i( Q. U
{Name: 'Hans', Age: 18}
* v9 P& W6 f& Q7 V' ?* S&gt; person.Name' C: J) ?# ]9 ~& r
'Hans'
# R' }2 Y. d6 u9 {- y; i5 i: s' {# P. N&gt; person["Name"]# [0 ^5 j, Y8 I
'Hans'8 P/ u5 w: }7 S- G! s; N3 A& T

) x+ x  j4 U3 K8 v6 J) s% e// 也可以使用new Object创建! f# r% S: |4 V
&gt; var person2 = new Object()5 D; j9 I1 W6 w6 N
&gt; person2.name = "Hello"( E+ F5 C) d; B) W- R8 i# S
'Hello'
0 L1 w: x# R. K& e&gt; person2.age = 20! w4 }  Z0 B+ k& s4 H. ]: a  x& @
20
8 {3 t8 W  C+ i</code></pre>
  V8 Y/ |) e0 d9 P7 K<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>: ]2 D' P  a1 ~% s# A
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>) n9 {0 b+ N* F1 O: h% V9 g
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
2 ^1 o4 e2 L) X  ]% w<h3 id="31-window-对象">3.1 window 对象</h3>
: T" t" ^$ Z: S, f) g5 }<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>6 b  s( [# `! K  R
<pre><code class="language-python">//览器窗口的内部高度
1 L8 |. D, G; z8 [# o2 ~( ~! Bwindow.innerHeight
' L& o) U7 `7 Y. l7 T1 {706/ ?' ~9 Y) `1 u8 O; e+ g
//浏览器窗口的内部宽度1 P, e) C& \0 i
window.innerWidth
' z0 a# U) q/ z5 k1522
0 I' o! b( r% Q7 P+ V* `// 打开新窗口) A% {" H& S, _; ?7 J
window.open('https://www.baidu.com'), ?4 w% q9 X4 y$ z3 c1 l
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}
6 `. G2 ?1 H+ b" E! K0 y// 关闭当前窗口: L. a) K6 H9 B/ X
window.close()
& G! O) a; u; @8 E& c//  后退一页
' @- M4 Y0 \8 f. qwindow.history.back()
8 `5 J. p* O# K8 U// 前进一页
. L  G$ q5 j( p6 |7 E$ hwindow.history.forward()
4 `* n7 |1 |  O) J3 J1 Q: W//Web浏览器全称: h6 L; o9 I+ w; g$ B+ p
window.navigator.appName
5 ?" @7 B3 e+ T& f3 |# y: N'Netscape'
! _, {* o0 y1 T// Web浏览器厂商和版本的详细字符串
& k+ g0 ^4 Q( I; Hwindow.navigator.appVersion4 Q* i. g9 [+ O; A6 @. _7 u
'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'/ ?- y* `2 s2 Y
// 客户端绝大部分信息
8 x) k$ r6 z; Y9 b. s/ I  ewindow.navigator.userAgent
# _) ]6 F/ p8 w# o) C  N" Y'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
6 C- ~7 c4 ?! ~# T( ~2 e5 g// 浏览器运行所在的操作系统3 w. m* Z) O5 C9 C* i. \, E! _
window.navigator.platform0 U; P) q) J) B" U$ g
'Win32'
5 @& ]3 [1 X! F8 O
, v  f) ~$ W& g2 N: l6 p//  获取URL
+ l' ^, p- ]: w; d# e" R1 Pwindow.location.href: g$ a+ [& E4 {
// 跳转到指定页面
9 U8 Q2 o0 M6 A& t! T* ?" }window.location.href='https://www.baidu.com'
" j8 D+ w: J" s! n// 重新加载页面6 c2 ~+ i5 f! b5 G# d% s9 S$ D
window.location.reload()
- L1 ~% |$ ]2 t- Q' h& S, ]</code></pre>
% M, x$ r( Z4 }! J0 F<h3 id="32-弹出框">3.2 弹出框</h3>
+ d- r/ d4 h5 H5 U6 r<p>三种消息框:警告框、确认框、提示框。</p>! b4 s: l5 Z$ l2 e' U
<h4 id="321-警告框">3.2.1 警告框</h4># K8 f! Y+ l9 ?% w
<pre><code class="language-javascript">alert("Hello")7 F, d1 \3 _; E$ |1 v
</code></pre>
! K+ d0 k( J  F<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>$ M) e/ {$ v+ `8 Q% N  A
<h4 id="322-确认框">3.2.2 确认框</h4>
6 Z1 ]7 Q# t  C4 ?: A) ~<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
8 b3 o' d! S( L0 C" W9 ^<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true8 s/ E) k) p, B! g, L5 e: O
true. y4 Z7 e( R: K/ L: x  I: ~9 w+ E2 @7 ]
&gt; confirm("你确定吗?")  // 点取消返回false
- A8 s: H3 Y8 d. I: T1 N' l4 ~false' e- a/ _. c- H& X
</code></pre>
2 D  A2 u/ C4 W. I2 ~* G: u<h4 id="323-提示框">3.2.3 提示框</h4>% z8 u( m, \- Z( u2 ]0 R% V4 D
<p><code>prompt("请输入","提示")</code></p>
4 O7 j6 C! u" `' i<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>, Q  i% |" o& Z# Q9 _" y2 l3 z$ H
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>& g. b2 o5 |" f; z  o! g
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>0 ^) [$ P9 x- Q" f1 A6 r! @/ I/ L
<h3 id="33-计时相关">3.3 计时相关</h3>
: @8 U- ~( g/ Z# j/ K* v5 R0 n  b1 D<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>1 U3 d$ c% X: Q$ x% _
<pre><code class="language-javascript">// 等于3秒钟弹窗
3 ^$ \+ a- Y, J3 G- y2 |setTimeout(function(){alert("Hello")}, 3000)
5 G% }( t4 ~' o& r! o/ A+ f# }- Q$ I# K, ~
var t = setTimeout(function(){alert("Hello")}, 3000): o7 L/ [3 {& p2 Q; u

7 }1 L- F# {* i" W7 H+ g// 取消setTimeout设置
6 L2 Z+ U( ?7 VclearTimeout(t)
" F& V3 q' h$ v' m</code></pre># B% U* N( ~/ c1 p+ U. m
<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>/ E9 f# ~2 I7 o% T0 g
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>( j' X1 t! C, {  `/ {5 |
<pre><code class="language-javascript">每三秒弹出 "hello" :0 z1 W& h7 V7 `
setInterval(function(){alert("Hello")},3000);
* h( ?6 _& H& Q+ G8 N4 \6 Q</code></pre>
$ V" y& [9 v2 ]/ |9 E" F<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
$ }$ B0 G2 r. ~<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);. p" A! r( Y, W  B0 G
//取消:4 f7 J9 |2 I: m& _' f+ r
clearInterval(t)# P$ g: I8 x7 T  _  N- j
</code></pre>9 j* b4 T. v1 {1 j% j$ M

# l/ F% l( @/ [2 \* h% [
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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