飞雪团队

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

前端之JavaScript

[复制链接]

7726

主题

7814

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
25508
发表于 2022-2-12 14:35:41 | 显示全部楼层 |阅读模式
4 u8 l% m% F7 G  s
<h1 id="前端之javascript">前端之JavaScript</h1>
/ e: P) u" C3 x0 [" i& f. e<p></p><p></p>
: W1 o8 @2 c$ Y! X/ J<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>$ y: E$ f$ p. ]
<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
4 h/ O6 X) u" M8 _2 m它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>
, L( g! n4 }3 }8 D7 {- G它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>
- z9 ^' s8 V1 }9 U/ o2 Q( J它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>
" l* ~+ P8 }4 v1 b. ]<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>! N) M4 e: A; W+ u% U
<h3 id="21-注释">2.1 注释</h3>
) A4 o% n% D0 X% q5 `: x<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>
" U0 n- |5 H% a+ R* }7 y<pre><code class="language-javascript">// 这是单行注释
  G  A1 ], O, S1 e4 w$ M2 j! J  H. w! r0 A  H* q8 N
/*. ]0 h. V! f* s" w% e
这是多行注释的第一行,
- F: v( Y. s: W+ N这是第二行。
) p  S: d/ D. d) ~*/4 w* Q9 W% @- B# p. u! R4 }
</code></pre>
7 T3 ?2 O3 C) A% e7 C4 k& r* o6 P<h3 id="22-变量和常量">2.2 变量和常量</h3>. Z% t9 l1 |# M  ]; U& Q
<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>$ w# Y7 e; h1 y; M  U
<ul>
  d% ~$ K2 Q3 x2 U: f<li>变量必须以字母开头</li>
0 [. Q5 i4 @4 i+ ~8 b9 x9 P" L<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>" j; O2 C. l& G( n7 I. Q3 W, [
<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>
' C6 |. g* g5 ~</ul>) [5 K. U: K" c, j7 J) l
<p><code>var</code>定义的都为全局变量</p>
3 o, W% M6 D0 }0 v# i; ^8 w1 M<p><code>let</code>可以声明局部变量</p>  W8 P9 M/ ]$ x3 ^
<p><strong>声明变量:</strong></p>. P9 g0 d1 H) T4 r* F1 r
<pre><code class="language-javascript">// 定义单个变量
/ \" A# y  @2 {! A8 a$ m5 l&gt; var name  Q# ?) l5 x/ I5 o2 m- T; [
&gt; name = 'Hans'& V% B6 \3 N& [/ ~% E; X' z
//定义并赋值
0 Y" q2 M! b" i- T% O&gt; var name = 'Hans'3 p, @$ U/ V) B# R' n' z
&gt; name
# f. k' v6 Y8 S' l- Q9 g2 a: B'Hans'& {* J% S: j2 a4 v4 m" h
, H. l. \: d5 U; z1 }& R6 p
// 定义多个变量+ N5 N0 z7 v& w: Q$ b
&gt; var name = "Hans", age = 18
- j: c. p9 P, l&gt; name# c+ F# b4 h* T( E: _
'Hans'
' J$ R/ @6 K, b4 N5 V2 D: W, a&gt; age, L; ^8 `. S& Q: U: f& Y, [: O
185 J" v9 ?& q/ \9 g- J, _
8 L# [- c( Y6 d! |  e  `( D
//多行使用反引号`` 类型python中的三引号5 y. a, j) I8 [, ^+ ~; L* K9 U" [
&gt; var text = `A young idler,/ k' J7 Z1 h* T% e
an old beggar`! D  ^3 ]6 H0 W  c( T# z% m
&gt; text
7 ?. n% ?6 p& D( H: X% f6 Q'A young idler,\nan old beggar'
+ K, D% F/ s! a7 E</code></pre>
. L2 G6 ~+ Q# e5 S! E<p><strong>声明常量:</strong></p>
: L  t  A7 l$ T<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>+ r2 r. c: C$ c- l9 B6 ]
<pre><code class="language-javascript">&gt; const pi = 3.14
2 |0 P- |; G& T% l6 c# `&gt; pi
# q3 Y/ b( b" V; t4 o0 e& z3.14
& F: d7 c, M: [7 G3 s' j* P9 D&gt;  pi = 3.01% z$ n, C$ @2 L
Uncaught TypeError: Assignment to constant variable.
4 ?* u! h' l! B1 O: U- _; M8 p% ^    at &lt;anonymous&gt;:1:4$ e* t$ U5 ^- |' q
# T3 u: X3 @9 G( M7 B4 W; R
</code></pre>
9 n! E: V/ t) s( [# Y% u+ ^6 G<h3 id="23-基本数据类型">2.3 基本数据类型</h3>
* ~' a$ [( C; X$ C<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>' b3 e7 A/ ]0 [8 \
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>7 a, K$ `$ I% k! K. E, r
<h4 id="231-number类型">2.3.1 Number类型</h4>
5 O9 @9 q7 \0 q<pre><code class="language-javascript">&gt; var a = 5
. x0 A# y$ {; {3 a; I&gt; typeof a   //查看变量的类型  
. J% [& t3 O1 m8 p! U* M% f' snumber
; Z) H+ D: k. G  l' t
- R' r, `4 A! j. P' K9 ^, S&gt; var b = 1.32 o+ o! z3 v8 |0 H) p9 I& ~  `- a( A: q
&gt; typeof b! {3 {- r; a  N9 x  p
number% j1 }- T0 O( b# e# Q/ k3 v

. }3 P9 t7 i( w// 不管整型还是浮点型打开出来的结果都是number类型
7 J/ `3 T% o; F7 C5 @" Z6 Z( J. G2 P) X8 Q
/*
6 q5 e; p  `9 T9 {4 O, U1 nNaN:Not A Number
" Y" l( p- i% a/ Q: [3 G6 sNaN属于数值类型 表示的意思是 不是一个数字' K6 b1 l! p8 [( ?
*/
. o& F& j% \8 P
# o1 G5 t& ^$ gparseInt('2345')  // 转整型. [0 n, i) i" ~2 u4 s" I
2345
& i2 I6 h5 D) j  c9 q/ i0 BparseInt('2345.5')/ L" t0 ?: E  w- m! ?+ G+ |2 J
2345
0 ]7 C; Z& K( M4 k  [* }parseFloat('2345.5') // 转浮点型0 g; Q# W# H9 P  T9 g) R
2345.5! G0 ~* v* d* ^5 C: c
parseFloat('ABC')( j5 V/ w4 s% X6 R
NaN: N3 _  D6 i$ c  ]
parseInt('abc')
# \8 L  I' Z) b2 z8 x5 {9 X& @7 INaN
8 C8 k6 A9 s' b% c6 f2 @0 v</code></pre>% V/ }! x$ i: N1 x
<h4 id="232-string类型">2.3.2 String类型</h4>
4 d+ Z* I) N$ Y2 }( F( ~! n. ~4 b<pre><code class="language-javascript">&gt; var name = 'Hans'& H* ]3 p0 w* @  `5 \
&gt; typeof name
( g! }3 _& b& b5 l2 d2 O'string'1 D+ f8 b1 C: h, b) \6 k' y
+ p# z- o( k8 q5 R& r
//常用方法
3 M, o4 l* M5 @// 变量值长度
( n; }) v# C8 Y# L4 W6 j# c&gt; name.length
: W: T0 ^+ Q% i8 \, r4
8 z0 _% [, {5 x" e9 t0 d// trim() 移除空白; F. ~4 W( D1 x4 ?
&gt; var a = '    ABC    '7 k; p" x" F5 _2 C  [$ Y
&gt; a! V$ @5 Y  @2 g
'    ABC    '$ S( R4 v. |6 j7 G. k
&gt; a.trim()' {4 Z) ?+ L9 J( U/ t
'ABC'8 h: L. [+ K9 {
//移除左边的空白/ d  E" M8 H  E) [4 T! Y% E( ~
&gt; a.trimLeft()* D- Z2 x/ F$ j: W$ m# e* R& O  ]( ]
'ABC    '
2 r7 x# ~# O; s" U. K2 V  }% e//移除右边的空白
5 e" t. ]7 X; ^: J' J& a0 {  u+ g&gt; a.trimRight()# B7 p% k3 \# F# m$ Y
'    ABC'1 c5 X1 n$ {( j" q# @; H. P
8 Z' g8 ~& c6 W' o# z/ Q
//返回第n个字符,从0开始
: N7 H8 C9 Z  d" L&gt; name: O( x) v5 I" Q9 y. q/ v
'Hans'
2 `; t" O9 T0 h' f- V) q, _&gt; name.charAt(3)
: t- u% b- B8 A- j. o's'
9 y$ v, A; ~; X: A; A&gt; name.charAt()( M$ |% A9 n& Y/ c, z/ U
'H'1 ?- V  _& H! z2 ]7 c7 w8 M  E
&gt; name.charAt(1)
8 D$ D: C" }; f; {'a'" o+ ], Q+ C+ t5 p8 v& u) ~

4 M! J8 r8 u+ V% i: y; Z// 在javascript中推荐使用加号(+)拼接
- I; Y+ w( `, x/ I- l! |&gt; name
/ E3 a- }& \! D( R9 N1 d4 I( Q! U'Hans'( y" f9 @2 {9 t3 \
&gt; a
$ @8 S$ i9 |, g* w5 w, v  ]'    ABC    '* V) O6 e: K1 g0 \
&gt; name + a
/ o3 }; i  q8 U; G. c'Hans    ABC    '
0 K$ j( t) z- O0 j9 ~% H9 y& u// 使用concat拼接
7 @6 z1 n( Z* [" r&gt; name.concat(a), ?" \4 I$ t  }7 [$ y% p
'Hans    ABC    '; V$ d% X8 N- C' v0 Q, M1 j) q4 Q" O

% n; v: n) @+ ]//indexOf(substring, start)子序列位置# L! }0 t+ W# c! M+ V

/ B4 b$ ^5 U* h# H&gt; text8 g- M8 A+ n$ V, J( c
'A young idler,\nan old beggar'0 P, g% X2 \% Y& t# r
&gt; text.indexOf('young',0)
' @6 n9 X  r7 ~7 w# I/ x1 ]4 x2* r1 H# _: ]4 J, T1 e. q" `

/ j5 o+ q; S/ Q# k# C7 ^//.substring(from, to)        根据索引获取子序列  t4 I  m) d& j9 k6 ?' B' ?, p! [# J
&gt; text.substring(0,)
# r1 ~6 s% g" F1 F& W3 J8 b'A young idler,\nan old beggar'& f# |6 U: Y* W/ j; e! m
&gt; text.substring(0,10); v' y- X6 p) A' ?9 Z4 @& L
'A young id'' b; P" M  a* h: B! z+ R4 A' X
) m# a2 h6 ?/ H$ e2 G
// .slice(start, end)        切片, 从0开始顾头不顾尾' i* G8 A5 `/ T$ @. t9 L, Q
&gt; name.slice(0,3)9 v# C; A, p; b: `8 n2 R8 O
'Han'
+ s' u9 r! G6 Z. b  W( y# A1 g# G; w( e! c: a1 `* O
// 转小写) t$ p8 H1 l8 o  S
&gt; name
; p1 m; }  Z7 S7 o" |'Hans'
9 u( H/ A" G1 e/ x&gt; name.toLowerCase()( ^* |- ?6 x- k+ O3 V  \/ X
'hans': V  g0 y, R& F* g+ W
// 转大写5 R6 N. t9 {* ]- s+ o/ O. l: a
&gt; name.toUpperCase()
0 m. F9 z; ^8 g'HANS'
; r. o; ^' q( R3 _! w
* J5 v; ]8 ^( s4 ^8 W// 分隔
- H+ M8 J1 z4 T, g& u1 m&gt; name
3 w3 X) c( Q5 S( J: a'Hans'
  b2 h6 x- O7 b5 ]; s/ j  ~& v* d&gt; name.split('a')3 q# G7 R4 R8 f+ g
(2)&nbsp;['H', 'ns']
) @. c) _, x; t  }" c3 c</code></pre>6 b8 D; ]# j1 W' ]( U$ Y+ u* G9 z, ?
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
8 n4 G' g( R+ m<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>; Y7 @8 z. }% P) l. o4 O: G/ X$ \
<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>
% S' k: @6 o/ ?$ R" F<p><strong>null和undefined</strong></p># D% Y( l% f7 K0 I$ W
<ul>
6 K2 X7 S! ?6 h# B, H. c1 W<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>2 C, `4 N( S+ U- j$ ~
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
$ `/ u; ?' i: H</ul>
2 m2 j% t* Q; S2 b<h4 id="234-array数组">2.3.4 Array数组</h4>' |/ f) }( f' c1 S, x# a
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>8 ^% s$ g: x# e3 f
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c']
2 k/ f; [5 X. n$ {+ J1 R&gt; array1
( T: ?5 U3 F+ @+ P8 B3 @8 E(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']  f8 s  n  `1 @' M2 }
&gt; console.log(array1[2])  //console.log打印类似python中的print, G# E) p' d; p  d) B" l8 |8 R
38 W0 z" Q# E2 {" Y
// length元素个数* R9 ], p5 D% n$ w6 Y/ H
&gt; array1.length7 Q; ]6 @# l. m# {* A) d) t, N7 ?: M) c
6$ y* L, H4 q$ x& @
// 在尾部增加元素,类型append
" X. M6 d. ]; K&gt; array1.push('D')
0 d. h% n4 `0 q2 A7( y  [* X2 p; d) u/ n: b* `
&gt; array1# H/ V. K6 X  m1 ?8 O& K9 z) r
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']: O2 B6 d9 _" ^- ]
// 在头部增加元素
/ I9 G* y3 l5 G: S  L( G& G&gt; array1.unshift(0)
8 p9 H0 n1 D: |* I( x4 H2 f! H8
, l3 U! U$ ]" D, [  P  M) ]! t&gt; array1
8 o& b! Z- R" C/ ~# S(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% K& X+ ]" c( z

+ }/ g( y* s+ I9 B* b' h6 a2 N2 l3 b//取最后一个元素7 c; E1 l. A8 y& e6 f7 W( N, |1 K
&gt; array1.pop()
% q! L# G4 R& ~) m' ]'D'+ q# Q9 g& n% j
&gt; array15 u' y) M* G. h" t7 ^9 }& r6 y% z
(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']" ^! f* }( v& \0 r
//取头部元素8 \( L& T% Q( x& r' |- ?
&gt; array1.shift()
/ Z, T0 U) k$ _2 q/ f* ^0 P5 X0
; m  \  D/ }/ B2 p5 r1 E&gt; array13 l  S) l1 z0 ^& u. _- Q( l' q7 p- n
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
# c  q2 J6 M0 Q) m( m+ s% x5 \
$ \8 K& @; ?" Z' I//切片, 从0开始顾头不顾尾" M# c- ]* B7 ^# U( r, E) A
&gt; array1.slice(3,6): c" J! _" Y: r3 z) Z, o3 |* x
(3)&nbsp;['a', 'b', 'c']5 H/ ^' u* F) v' m! c
// 反转
3 X' D) ^# C( L- J( D&gt; array1.reverse()
& K2 p6 x# `  ?(6)&nbsp;['c', 'b', 'a', 3, 2, 1]
% ^" v7 W2 e- j/ {// 将数组元素连接成字符串
% k2 X% v1 t2 ~7 k5 @1 v* Y% o9 k&gt; array1.join() // 什么不都写默认使用逗号分隔! X  Y+ h$ `4 x7 L
'c,b,a,3,2,1'
5 o" l, E9 `4 S+ k6 u) ?- a&gt; array1.join('')' t9 l! ]9 c2 }: M
'cba321'* a& P* S$ @% x& Z5 I
&gt; array1.join('|')8 Z  s$ r6 b; e+ M
'c|b|a|3|2|1'
0 L9 Q0 T% G; m" p3 J  U; L4 x
! T3 ?" b; s5 g9 |  {; b5 G// 连接数组' _4 _; ?$ X3 C3 `) X# s1 o
&gt; var array2 = ['A','B','C']1 E4 h' h+ Q/ B4 g/ n0 x
&gt; array1.concat(array2)
/ r7 A' D" R1 A$ o. k- O7 Y5 m0 R(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
- D+ T( i9 \8 z. U: ?1 j: P' \; v+ v( D  ^
// 排序
# p9 q3 S7 |- S" q* R&gt; array1.sort()6 H! V2 A. ?. V5 T
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']4 E) I' K/ J9 R' F6 v
9 ^3 |: Q$ x4 N" U
// 删除元素,并可以向数据组中添加新元素(可选)
" A7 |! x, S: w0 U) N7 ~8 z&gt; array1.splice(3,3)  // 删除元素# C9 w. l# p7 `5 g6 ~
(3)&nbsp;['a', 'b', 'c']
7 _3 w1 a1 l3 _" h- i; O; P&gt; array1
0 H2 N8 J& w( U(3)&nbsp;[1, 2, 3]
/ y8 f$ f0 G4 p& Y&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
" Y6 X4 H7 H: q6 D7 F" W8 F[]3 K: ?" m- Y$ K4 \
&gt; array1
% F, O# s4 m$ @( {$ p+ B(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']' \; g) v: A6 ^+ D9 i
/ ~) w+ u: S/ Q  `) P) j3 \# D/ M
/*
' H8 x& w, C5 `, q2 hsplice(index,howmany,item1,.....,itemX)$ j/ s: F" V* f8 Z7 {5 v
index:必需,必须是数字。规定从何处添加/删除元素。0 V, w5 v) I8 b
howmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
5 e& k) y0 U* c( Pitem1, ..., itemX        可选。要添加到数组的新元素
1 I7 \' p( s3 Y' |$ }*/2 Q) v4 G6 B; _1 u: l
0 b* N& A; h' q+ {: b- {
// forEach()        将数组的每个元素传递给回调函数
. O5 u& ?; U3 T; [9 x; `5 {&gt; array1.forEach(function test(n){console.log(n)})9 \$ p! }* G- y  }7 X( {( Q3 F% U
16 d0 t! _5 O2 X
2# M+ ]+ A9 E( r" J3 Y
3
$ |" m( u! o, S/ U+ t3 W9 v8 u A
) V2 I% _) B0 G+ H B% r# m0 s' e3 x  @3 ~4 G, r
C" c; v; g! `& d
// 返回一个数组元素调用函数处理后的值的新数组! d( U% A& C9 o- u' ^& w
&gt; array1.map(function(value){return value +1})$ \6 M' h7 h9 r7 f
(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
) c6 z- V1 h  V( A1 C</code></pre>
+ W$ l+ H' p. b, G) L<h3 id="24-运算符">2.4 运算符</h3>
( P9 T! T6 [9 c+ f, x9 M& G<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
3 ?, x- z$ ~" h0 X, I( I3 x# T<p><code>+ - * / % ++ --</code></p>; L3 c8 p2 S8 s$ X
<pre><code class="language-javascript">&gt; var a = 6
+ K8 O& C2 Q( ~&gt; var b = 3
/ b% w1 X/ p. {// 加2 V# m7 f, }" D$ q$ D
&gt; a + b: H9 I& K; b  [& \; ~
9
# L) _) X& ?4 G$ y// 减2 D% O. w6 ]1 i! r
&gt; a - b7 n. m& d, ~1 T( V3 M( `8 X
3$ n; r/ O/ e4 s8 M; U2 e5 S; c
// 乘& A9 F3 i4 m- ^0 f
&gt; a * b2 i+ R1 n  @: p/ i# z5 V
18* L8 N* E7 \. P0 B, Z" e
// 除
) h: I2 \+ E0 J5 q" R+ r7 G2 o0 I&gt; a / b
3 j- Y( f+ D+ ^9 r1 d8 j: n2
" F4 I" O8 m+ r" w' _// 取模(取余)" p1 Q3 E3 M* [7 D6 _
&gt; a % b7 G7 s! F4 H) t, `" X0 A
0- `" K6 g( M) e/ j1 d
// 自增1(先赋值再增1)7 u, d( ~4 g' X4 c
&gt; a++
0 ?5 {6 _1 r' A* e& k6
- C& B' p' K! W2 k8 k6 S0 p' w; Z&gt; a1 o7 R: V( {- u: `$ Z6 Y
7; j/ R# @, M9 O2 W8 e) I3 z
// 自减1(先赋值再减1)& E0 x1 @5 o" W4 S
&gt; a--5 ]5 N. n* i1 Z8 I, L
7
# S9 L5 b- G0 u. A' G&gt; a4 P/ r  ?2 P7 D
6
+ G) c% y5 k* [# I  w3 d// 自增1(先增1再赋值)' i8 n  `/ ]+ x  P
&gt; ++a
- p% E* @% O9 v71 @' |' T4 a0 p4 y3 s
// 自减1(先减1再赋值)
! [& J3 X3 U2 y' b&gt; --a
5 X2 _0 F4 X4 K0 d8 v, e: O$ z6
7 v  k0 O8 z: j, _! x0 \9 }, b9 k& V&gt; a
9 J. r8 g8 s" `6: u/ [( I8 o0 |5 f, P/ p
9 H. w$ ?7 k1 V$ H
//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理% x$ g; @2 a! A, v+ O$ S
</code></pre>
6 X5 S+ G: [' }6 n, N6 C1 a8 T<h4 id="242-比较运算符">2.4.2 比较运算符</h4>
, y8 |4 f( r$ ]" g7 r3 N+ k<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>5 u  |" x+ a. ~8 v% T% F
<pre><code class="language-javascript">// 大于
# Z$ J5 u0 g# B1 x  b5 d/ O) k&gt; a &gt; b
( }8 N7 R. [0 `5 l+ ?8 Q8 Htrue& _7 L$ ?5 F6 J9 X$ w
// 大于等于, R8 F3 F" A  G6 Z( ]
&gt; a &gt;= b" g; t( y( @3 W# |. T
true
5 ~( C+ E; H% s7 M// 小于" N4 K9 z# \4 I( V$ n
&gt; a &lt; b
7 p" g1 g2 x' gfalse
; L2 d+ X+ ?9 X8 x// 小于等于
, e7 S- U$ N5 ^5 Z&gt; a &lt;= b8 z2 H0 d* y  J2 q3 a) H
false
3 ?  y8 m+ g. ~0 w) _// 弱不等于
2 F- ~3 d  z7 g% Z. ^&gt; a != b" C' @, q- _# ]5 L
true
# \+ F1 S5 ?2 l" J' E+ a1 x" ^// 弱等于7 I9 @; i0 |4 \  S- ~1 u
&gt; 1 == '1': m- c( V8 n6 B! _! O) P% c
true/ g, U) E% H1 Y% E3 F" u
// 强等于2 V% Q* N- K/ L
&gt; 1 === '1'
) h1 h2 n+ V2 }3 f' ?4 s9 Jfalse" L- M! z; N0 G9 M' p
// 强不等于, u# e9 N/ a8 B' x  w9 C& k6 d
&gt; 1 !== '1'
( R6 w- X$ X9 ~true1 I, Y5 M, W! ], p- j
; p5 V2 {" f5 F; `
/*4 D2 ]- m3 @% w+ i: m0 o
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
" V% e5 j0 U; u0 p+ ^5 A. P*/, J4 i2 [+ k$ Q* \3 K1 ]9 Z6 R2 N
</code></pre>
' Z% s' p4 k' p( W<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>: [6 J: Q+ h  H( E
<p><code>&amp;&amp; || !</code></p>
0 J" f- v0 [/ b( c<pre><code class="language-javascript">&amp;&amp; 与
& F6 C& o8 X" K4 v/ R$ i6 R|| or 9 x& `7 W1 x! k4 g; W( ]! `
! 非: X5 T5 f5 J  e' v
</code></pre>5 L9 |: y7 l) x, _- m- x  L4 F
<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>
0 u  c3 a" Z& g<p><code>= += -= *= /=</code></p>
+ c, S; J% }; ]% T: q* _3 A<pre><code class="language-javascript">// 赋值$ x- x4 @$ G4 s( j; d& `- E
&gt; var x = 37 V  {* l$ {5 n) |) s1 y
// 加等于& j1 C# w; s$ r# t, r3 _2 a
&gt; x += 2# [/ Q7 K+ f; W- o5 D+ P
58 L+ B- H3 H; q
// 减等于
( f( s1 m9 ?( N, x/ R: n  P- J&gt; x -= 1
6 N* C1 r( l5 T* }44 b5 s* d$ r' I( Y
// 乘等于
: y2 D4 Z: q$ N. o# T; D# B- V&gt; x *= 28 _" A# j+ G1 T& `- i
8- K. C0 s9 `$ b  m9 x- `) T; t9 h
// 除等于) r5 U. R* Q' l. I
&gt; x /= 2
, t5 }7 `7 I* R3 d( ?4' ]+ t# Y" x" g, \2 j
</code></pre>
! C0 @' ]# r1 M0 p9 o" K7 H* J<h3 id="25-流程控制">2.5 流程控制</h3>
1 b* z2 P! q3 F* t5 a<h4 id="251-if">2.5.1 if</h4>
3 t& U7 J7 H0 u<pre><code class="language-javascript">1, if(条件){条件成立执行代码}7 o3 v; H. e/ m% e

3 M( l7 p! u( h. {&gt; var x = 3. P- }9 t! A! J3 l
&gt; if (x &gt; 2){console.log("OK")}/ u. Q6 u* o( Q7 ?$ \( Q
OK+ y: V% ~$ X# r( @  I; F  T; E

. E+ A0 F% P  `* q1 B. r4 o, V9 O2, if(条件){条件成立执行代码} - Z2 w" H/ k% S0 ~
        else{条件不成立执行代码}
  \8 s6 L" ~/ P" V. a1 d$ H) [/ b& e+ x$ @
&gt; if (x &gt; 4){console.log("OK")}else{"NO"}
/ ], Q2 ?2 {6 a: ~0 x4 X5 b" x'NO'
4 ]# U( a1 x& N, p" u' F! I7 U& E# [& g4 r9 y# K5 Q' l* `
3, if(条件1){条件1成立执行代码} ! O  Q9 ?7 I5 C/ N7 \' w6 j+ q: U
        else if(条件2){条件2成立执行代码}
0 O& K% J' q! x8 E    else{上面条件都不成立执行代码}
4 Z# y$ Z/ U& \8 b" O0 n- \" x( S4 i' y8 |  X1 W. ?$ I7 z
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}9 y  G7 |2 U$ L
Ha& z7 e# g+ L' f9 X
</code></pre>
9 u6 {7 L% C: b. N<h4 id="252-switch">2.5.2 switch</h4>& R% z% ^5 C% ]1 F: c' O
<pre><code class="language-javascript">var day = new Date().getDay();
& w. {3 w$ R8 y+ {( u9 f  b' C7 G$ bswitch (day) {# j& w# E6 `7 q* X' Z
  case 0:
; ~( c9 y( Z4 R" ~  console.log("Sunday");4 z9 e" B* S7 X. ~( S# q7 Z
  break;
! l8 w" Q9 `/ ~- r  case 1:8 f5 R8 b7 }) T/ J7 O
  console.log("Monday");
. Q1 u! |, ^$ d7 `, N  break;  Z7 j! B& Q: Z
default:& o' m# {5 p) z; X! g
  console.log("不在范围")$ a) @8 r6 y4 V0 S* N
}* \) d, z* `( V3 d9 l
不在范围
: d, F* X3 r8 w4 U% h</code></pre>
! r# `+ ^# d  Y% E% R5 d# K2 `5 t<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>8 \- H# W7 Y/ R6 x6 w1 e$ w6 o3 L
<h4 id="253-for">2.5.3 for</h4>
, _7 z, @2 _9 ]. X  I% M( V: I<pre><code class="language-python">// for 循环* E$ Y6 p/ C& j$ n' R
        for(起始值;循环条件;每次循环后执行的操作){
4 t& w) X* {& `# b        for循环体代码
% f3 y: ~8 a  V# X    }
; K/ t" X. ]/ `) m' H( H  R2 u+ C9 b* d4 h. f2 a0 Y
for (var i = 0; i&lt;10; i++){$ B& x5 Y& Z/ v  p8 d' _' J# E1 V
    console.log(i)$ _& [# Y& j5 s9 t
}
! N# b- i5 G3 }6 K        06 s  F( ~: i' ~
        1
& B* c/ z+ r) T5 v        2& m) \/ n' U5 b# w  X3 R7 {" i) g
        3
1 b0 ^' [0 h* o5 h% U2 C3 y+ m        4* n; \0 h+ R0 t% r6 ?
        5' F) q$ n2 y% u' N6 k8 N
        6
3 I/ w4 d- ?  G        7
5 B2 I2 O  l  Q" o        8
' C; g( H( B* X, S; F! s        9" C$ T: _- O% v% j
</code></pre>
' y% i% y9 J' m4 d# c& ]. Q) _<h4 id="254-while">2.5.4 while</h4>5 R& l2 F  i! ?8 T$ v
<pre><code class="language-javascript">// while 循环; N! Q  s& e! h9 f. P! s
        while(循环条件){
) u6 p" Q$ x( x& _# s        循环体代码
+ r  o' Y6 M+ y    }
2 F; r: F7 m# P2 M. E( g. `9 y% O7 ]3 M; y7 A3 Z9 W. J2 B* ~
&gt; var i = 0% T) J; e: c! e0 z
&gt; while(i&lt;10){' z2 Z8 m$ y' M9 t# t- e% b
    console.log(i)
0 d0 c0 s! L" F7 q& `- x! s4 x    i++
( v2 s' p9 X" E; e9 a5 V# y) g  h}1 ~5 R( |  |9 D6 X: F% n' X( ?& u
0
* T- j: n! V& I 15 S' P. ^+ e$ L  u' J! I( m$ Q
2- a7 f! S6 x9 D; I" l: w2 }8 V0 a
3
% f+ n: N$ z* A/ u$ J 4% }- c& O8 U. C" ~$ s9 N; U
5* k) w* x0 Z) _1 ]. B
6
, z6 f+ X' w; j9 q: q! r% M 75 `+ J! i+ H6 [$ B$ {% c2 ]
87 \$ p' o2 V  z$ d+ {4 c0 O
9
4 {  n7 }7 E; X</code></pre>: Z' T* k: m( q% X* y1 W2 @0 x
<h4 id="255-break和continue">2.5.5 break和continue</h4>2 }0 c6 p2 u# \' q
<pre><code class="language-javascript">// break) |! ?  s' o  l- o, J
for (var i = 0; i&lt;10; i++){' W: a. B; O. j% w# c
    if (i == 5){break}& X3 s- x- w+ M; P4 W
    console.log(i)
, b' o" W1 U/ p6 {}
& Q: R( Q# m7 i" l. S8 t 0
% Y0 |( J3 o9 f- M! h 1+ t! J0 ]2 a# D" T
2/ O& u" R; \& f: S- I3 V
3( Q. m+ v+ M1 P; c. [5 v7 n( v5 p
45 @  Y. E4 s+ ^' L7 i+ K: ~
// continue& f+ L7 z1 S$ ]% K3 c* [2 A5 R
for (var i = 0; i&lt;10; i++){0 b/ S# n9 s- p6 Z+ _
    if (i == 5){continue}3 \' W/ L4 W* e* d: a" G6 [
    console.log(i)
" B3 q$ Q( y" b}
4 R+ h9 d% @  y3 F6 W* c2 J4 a 0
% H+ _* c% ~' B1 { 1. U- [( Y) D3 S& f% ]( p" `$ _2 z3 F
2
1 }4 A- @# u! X0 a# Z9 [ 3
/ e/ t' t6 J0 {; W8 [# i" ^8 z% F 4
3 W' G4 T; ^; a$ i" P/ F' k 66 f% z" D7 G. D0 b9 ^
7
. K0 Z. m" n. C+ F9 J 8
+ A! M2 t/ s* M; O 9
8 k( c% h0 J2 n. V1 t8 m4 d$ ]9 j! ~) G1 ?
</code></pre>7 N, b8 _9 g3 v7 m
<h3 id="26-三元运算">2.6 三元运算</h3>
- n: G6 i: a* M, O# S<pre><code class="language-javascript">&gt; a
2 M$ J/ C% N& j* v6" z* ]% f' F4 V1 v
&gt; b
' k$ I6 l. ^. Y* }& x# O- S; I% w3
+ N. w. i% w2 d( j# \7 J
. Y3 J% i" q/ }* s2 w  {/ D' r//条件成立c为a的值,不成立c为b的值
8 e$ e$ k! S, c1 K+ p; M&gt; var c = a &gt; b ? a : b# U9 A8 w( m, O* O# \  V& w" u
&gt; c
1 h7 ?% L6 l7 H8 {6' ^0 {& y& }' j1 U: j+ Q6 z! y4 X. H
4 S# M4 z9 o3 p4 |* u* H; j
// 三元运算可以嵌套% I" a( I7 F5 G$ S
</code></pre>
( I) V2 W( D: B7 E; B" K<h3 id="27-函数">2.7 函数</h3>9 q6 h" w: u0 f! R) U" R; B
<pre><code class="language-javascript">1. 普通函数. f& N9 |3 l  }3 Q5 S0 \0 E8 e3 o
&gt; function foo1(){
& ]# K: E& X1 }/ w7 W% S& W    console.log("Hi")3 h" w  ^$ U5 @+ h& B: G
}1 [6 k! c8 e; }4 }

& i7 C* P( V- O&gt; foo1()" J0 S0 {, B& a( X* R# T
        Hi
% x. ?/ I' i. W  C$ U2. 带参数函数+ c; r+ V4 `. `
&gt; function foo1(name){' d+ j" f/ C9 e) W! m/ L
console.log("Hi",name)
1 u* Y1 G! t5 k, a, o+ m}
9 W+ ?% U) w0 l' B
% a0 ]$ i  O6 L4 y) E( }&gt; foo1("Hans")
" s9 P! T  S% A5 xHi Hans
  Y. a6 s9 g; N3 m& p1 h9 K  x, H' [$ Y. v9 D
&gt; var name = "Hello"
. D7 K# O) G- G8 Y; v( m&gt; foo1(name); @' b2 W/ q: u8 Z
Hi Hello# C, S7 W4 G5 N; \6 ^

$ u1 }- r9 I" _7 |" v/ j$ V3. 带返回值函数4 }) ]. t& Q# x# ^3 d
&gt; function foo1(a,b){* X# ~6 ], _& M+ g
        return a + b   & l# q7 j/ a, w4 E* ?5 z; l, j" |
}7 y) ^+ x& t) p6 ]
&gt; foo1(1,2): X  S8 I7 ?/ T& K( p. G* s
3
% ]& R$ R5 Q2 a2 {4 E" G&gt; var a = foo1(10,20)  //接受函数返回值! I: W' J# A! B
&gt; a5 Z% S, x9 \6 _
30! d' j0 \8 ]2 ]" q

, s) ?; P0 v7 K4. 匿名函数
2 P  R  w. u, _7 U: l&gt; var sum = function(a, b){
1 b4 d/ R$ d( I2 s4 o4 R8 h/ _! a  return a + b;: L" g# _7 I% f( |
}
" W  `7 w4 J7 E% [/ V% }&gt; sum(1,2)
. n, U" J- E3 T3 \* P3
$ A" I# l: S' n" p6 }+ T$ n/ _% [( m- Y& I4 g5 k1 m( F# V: [
// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱7 M" t7 c% K% w6 ^
&gt; (function(a, b){
4 [* m# F0 @7 o1 A; ?. p$ I; u% v, n, \/ M  return a + b
5 M, r1 i) h2 S8 c4 O) S9 l})(10, 20)  G* f9 q7 ^; r, c, C4 n) E
30$ H# ?8 z+ X& N0 w9 F: m$ c1 y
- r/ M# e$ p+ A/ a
5. 闭包函数9 n% n, [1 x: A$ B; t/ Y
// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数6 ^1 u! c; q3 Q% ~
var city = "BJ"- g: W3 @' k5 u# F$ D1 r- z6 U1 j
function f(){
( z2 ?2 @! \% `- y/ l3 v! _" z9 n    var city = "SH"
; _2 u  Y) ~' c3 J    function inner(){
4 y* K8 J8 _$ O- g" v2 r2 @        console.log(city)3 S. r) p9 A* P( F) J9 M
    }
  I! p4 ~) e8 J  K' Y; @    return inner
0 W* b# H0 G9 \! ~7 ]0 H/ j}8 U; Y/ H3 L, f% \8 U  }
var ret = f()3 ?' C2 Q7 |: Y8 h
ret()
6 b/ q' ^6 ]1 w  ?  G0 C执行结果:3 x% t  X' g/ [/ w
SH
$ [7 m8 z; f0 U' R2 Q5 z* y  N5 [- c) U. Y  J2 T1 P( A0 p
</code></pre>
( b, k+ W' I- E: A  f% U; B* a<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
0 D4 X3 s2 H7 x9 C( B0 S; A" b<pre><code class="language-javascript">var f = v =&gt; v;
+ p. n' b( y1 s; l) R. [4 C3 R* m// 等同于+ o' X3 X7 K7 ~  W
var f = function(v){' F$ _) z& p1 R( p/ @% F
  return v;
2 }4 B; r3 z! o6 B3 r}
( N& V' c. c! S0 Q2 y  F</code></pre>
3 M) ?3 z2 c% V<p><code>arguments</code>参数 可以获取传入的所有数据</p>( `" P; U9 y( c. m
<pre><code class="language-javascript">function foo1(a,b){
6 }6 o  c8 F0 G2 d    console.log(arguments.length)  //参数的个数 , g  B, N* ~# E; X6 U3 S5 G
    console.log(arguments[0]) // 第一个参数的值
* f$ W2 ~( j2 W4 Z' y        return a + b   ; O; C* p, j" d7 `) n9 j
}6 R+ v3 |# _* h# k; ?% i
foo1(10,20)
$ a# I3 h  G. m  B* |' k) ~4 X结果:) L' l7 u: p) m& e0 Y9 o
2          //参数的个数 " C) B0 R7 L. k! d& l
10        // 第一个参数的值
4 j7 i& n7 g; l9 R. ]- }30        // 返回相加的结果0 L" b' B: i5 j- K: C+ |" X
</code></pre>
( G/ T3 v$ n4 Z, @9 `<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p>2 }4 Z9 e# x& i) M+ w
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>
4 t. w4 v' O3 {5 g- x6 n<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>. J& `/ @+ |2 I5 J5 {; D
<h4 id="281-date对象">2.8.1 Date对象</h4>
3 h( l" W8 U2 M$ [6 I: g<pre><code class="language-javascript">&gt; var data_test = new Date()+ L* P  q& u& u
&gt; data_test
3 @) F$ g, S4 R; H. t; uFri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)
& a* Q/ S# J; h0 N1 h8 L4 |&gt; data_test.toLocaleString()
% i  P1 C) M  b'2022/2/11 下午9:44:43'! U* Y+ W. K& Z

! C6 s& ~/ S+ m&gt; data_test.toLocaleDateString()
$ o& z3 i8 }8 D( c3 k8 e'2022/2/11'
8 E* E7 o3 u* |6 S
9 `& i, |0 x' T; ^6 Z&gt; var data_test2  = new Date("2022/2/11 9:44:43")0 O% b+ V/ E$ X
&gt; data_test2.toLocaleString()) K/ m6 F4 P3 ^7 @
'2022/2/11 上午9:44:43'% P; y7 c8 T; j# K6 E0 N3 S( ^, E
5 a$ a( R% z! u8 o
// 获取当前几号
) k  |7 K7 ?% q/ u; ^1 Z&gt; data_test.getDate()
4 V7 ]( D# S- O% o/ N& W11
( `" z8 A: v7 Q7 H( R/ p// 获取星期几,数字表示
: K* t& @/ D. U8 g&gt; data_test.getDay()  ) J8 O" C  U& d7 X
52 U$ {$ J5 T+ \- d# @6 X7 p
// 获取月份(0-11)' ~& C" W# r; l' ^  n
&gt; data_test.getMonth()
3 l, F: a6 p2 m. h" n1& @  c/ R3 M0 j1 M+ u% T. b' X
// 获取完整年份4 p& f" h. S4 k# I
&gt; data_test.getFullYear(); J+ W4 J5 f2 i$ q# f7 b: W
2022' m, X( C+ f: q3 N- F; r; [9 Y
// 获取时
4 w  M0 Z0 z; o+ s  @$ V&gt; data_test.getHours()
- g+ x1 [" K* D  M$ |- p21
9 s: ^9 |6 y8 n* E# d// 获取分
% ]$ u9 [% \' [& V, s5 W* Z- a% \+ e&gt; data_test.getMinutes()0 @+ _: _1 c6 b3 s& ?) k' u( m: x. r
44
9 f0 n+ x7 J3 \7 N8 m// 获取秒
- Y( g$ O; z& ]8 g) P&gt; data_test.getSeconds()0 T# D1 Q7 n! I! `1 O
434 H7 V, u- t# N7 k1 i
// 获取毫秒- U9 h+ u1 p/ Y1 ]
&gt; data_test.getMilliseconds()
3 b2 H( }  q( Z290
3 ^+ {1 V5 H: Q, j( F# E! C// 获取时间戳- ]$ [% R3 U' n! L5 o# ^
&gt; data_test.getTime()7 J! n4 n5 Y. Z! H
1644587083290' X9 w  {+ b, B+ z: e7 m
</code></pre>
0 G; ?: L( N( c<h4 id="282-json对象">2.8.2 Json对象</h4>& |$ M$ [: n  P9 A4 q$ N% a2 e$ U( r3 x
<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
6 P7 z. {" E( WJSON.parse()  // 反序列化,把JSON字符串转换成对象
! }; |4 ~( K# C9 x! B
5 ?$ [  ?( L( q  Y8 ?5 o// 序列化$ m+ q, Y9 e& n* }& X6 V1 O& ~
&gt; var jstojson = JSON.stringify(person)
. z! c* M: ~- }4 Z# w8 s&gt; jstojson  
$ c5 W8 c7 k7 t+ G) h) _( k* Z' \'{"Name":"Hans","Age":18}'
6 p+ r" Y2 L; G! N1 [8 \& l$ z
5 y6 o, S9 x5 T6 ]0 H/ L// 反序列化3 z  B( K* K. F/ k' o
&gt; var x = JSON.parse(jstojson)- k: L6 U% K( v/ M
&gt; x2 P, [: a: \0 x1 b/ ?9 n
{Name: 'Hans', Age: 18}
9 b. w# z, {: h# A+ o$ g$ u) k&gt; x.Age) A* N7 v3 y: S  _
18
8 X1 ?, }' I+ _  _3 K</code></pre>
1 Q7 A0 J7 e+ J- z/ v2 y<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>
! J) ^7 n* t, b' P: V<p>正则</p>
0 h. n2 k$ T+ B( M6 h& }+ O<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");
6 z7 m) `' J3 Y&gt; reg1) h/ n  S/ t) E' x8 v
/^[a-zA-Z][a-zA-Z0-9]{4,7}/2 l9 e" Z2 B2 K, l9 f/ [
&gt; reg1.test("Hans666")& M9 _" C2 ~% u# V9 Z; c9 p% }, r
true
" U- h8 ?% K; |8 q' g1 I$ V# B8 B+ j2 s: N  U" q6 t0 }
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/
  o, S1 L/ w( F! w% V3 R&gt; reg2. |1 f8 }% v! O* T, Q
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
& }$ J, s( e: W&gt; reg2.test('Hasdfa')
- }5 J0 L7 r8 ^- M8 itrue
- d3 r7 X% ]7 C# l. q: N6 K$ Q% Z1 P& X& T' w- w
全局匹配:
' O( M; \  t: h8 {9 h0 e&gt; name, @" N) v  Q& i3 t: m
'Hello'
9 \2 M$ {$ j2 K&gt; name.match(/l/)
% T! e6 J* J0 H+ [2 t. W  C* H['l', index: 2, input: 'Hello', groups: undefined]8 M8 z5 R4 x7 P4 W

0 [/ z: t, g8 [' o7 i% ~&gt; name.match(/l/g)
" T& z: x0 Z( v" T5 d9 a(2)&nbsp;['l', 'l']2 D; x! j7 o/ u3 d& `
// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
) @) F! z# Y. u/ }# |
# ?+ r- L$ N/ ^全局匹配注意事项:
# l4 ?, b" Z) V, f* `&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
& d8 h/ K0 h% F1 v6 D- ^1 }&gt; reg2.test('Hasdfa')
8 Q) k, d, l2 ]! \& p  z% W5 x  r: ^4 [true
: }. k' u7 j2 @&gt;reg2.lastIndex;
) W$ c; x3 u$ P1 O* o- f% n" S6
" _* @1 l# d& C! O3 ^! M&gt; reg2.test('Hasdfa')
4 P4 L; ~0 G% u1 r0 e9 ?6 n. ~false) A6 H: a2 t/ j' K! K- z
&gt; reg2.lastIndex;
; A7 m1 E  B! G1 e7 O0& u) d) a8 M. L5 U
&gt; reg2.test('Hasdfa')3 P1 c1 h2 A1 P6 u" H. d, u* t3 g, n$ E* i
true
8 [8 E) v% X) ]) K3 Q1 l&gt; reg2.lastIndex;% F4 N! G$ r  h- M* A
6; A  F+ W7 e8 x5 ^$ \$ n( `
&gt; reg2.test('Hasdfa')& U0 p/ c) Z$ I5 n& G
false7 N1 F( l: [1 C8 C, e
&gt; reg2.lastIndex;. j5 ?1 y' `6 g, X2 X8 p
0
. K9 y0 @& K+ U. B) [, I; R// 全局匹配会有一个lastindex属性' Z, e; |4 O' L+ V3 K: o1 }, g
&gt; reg2.test()
5 {; V9 f- X+ n& E9 ^3 s: ^false
3 @. O( k6 b  ?! Z$ Y- S( |- ~) D&gt; reg2.test()
- s' K0 q7 K( `, @' T  k* T' |true
% Z" I! O0 m9 U" _8 {+ }: }6 ^// 校验时不传参数默认传的是undefined; e  G% O" \. N+ H, J5 u; l
</code></pre>" M1 M, H8 _$ \/ d# u7 U) m, H
<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
5 A+ l6 L. H# q5 c. H. z7 w<p>就相当于是<code>python</code>中的字典</p>, o# O. Z! D2 k/ U# {) t, p
<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}
& l2 z* X8 l4 ~: _9 [&gt; person' I; T6 G" E$ F( B3 H5 u" w
{Name: 'Hans', Age: 18}* i$ \# O# S% L: G8 O
&gt; person.Name
7 I; s; x& z. ~% D'Hans'
! t9 ~* |3 t8 ~! U- n2 f& e! d&gt; person["Name"]
$ p" D/ k/ _" ~( ]/ w8 V'Hans'  J/ e% q! ]  a1 d$ e# p
- ~7 R9 C* W7 ^& g- ]+ b7 O6 t$ ?
// 也可以使用new Object创建
2 k! {6 z+ q$ n* X&gt; var person2 = new Object(): C, C$ S  Z% c; z1 c8 E4 N' X
&gt; person2.name = "Hello"/ H2 g2 I* G5 i
'Hello'! I, u8 S' e7 h0 D5 F5 T+ t3 t
&gt; person2.age = 203 i; x: G, L0 w0 Y
20' P$ j- ]4 ~- v- Y4 h4 T
</code></pre>
5 u+ H* n7 A! i' o1 y<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>
! f9 E! w9 T( }+ j<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>6 H% H/ P" r" {" j) r7 G
<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>
4 Z- K( ^3 m  d$ z) F<h3 id="31-window-对象">3.1 window 对象</h3>
- m8 E8 _6 E! L<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
2 R1 p& y# r& V  c3 v7 W, w* @<pre><code class="language-python">//览器窗口的内部高度% @, ]  u$ k4 R& B. r+ q
window.innerHeight
/ B  a2 j4 C1 P, a706, e$ |( r1 B  C# ^' v5 C: Y" ]9 H
//浏览器窗口的内部宽度# y) ~! |7 [- p( M8 c- ?& F! }
window.innerWidth- S, y" |! l8 A# f# S
1522; Z1 g, H" w' j; C( K
// 打开新窗口
$ K0 Z7 v5 V6 ?: U% b9 w2 Xwindow.open('https://www.baidu.com')# K/ T8 p/ n  d( E
Window&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}6 f% i) r9 |0 y2 X: w' k
// 关闭当前窗口
4 d' r* {1 I; R1 L, O# H: ^window.close()
: [: ?9 e( `9 d  M0 `* z/ s) K. E//  后退一页1 r( }/ [0 O) O: c7 O
window.history.back()8 z) F% o3 t; B9 z' |, F9 c
// 前进一页' Q1 z) \2 \& ~  k. ]
window.history.forward() * n. e, `& w; g7 `( A
//Web浏览器全称) @% M; a# e, x1 d# c
window.navigator.appName8 N5 Z# i1 f7 O0 v6 T5 s9 A
'Netscape'
. F+ r% [( @- }5 |  O1 M// Web浏览器厂商和版本的详细字符串
& G6 A5 Y; a+ |" W) Zwindow.navigator.appVersion
8 Q7 z$ F1 a) ?" d- s& s: G'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
8 f! a; z6 R$ |0 l' `+ b// 客户端绝大部分信息# J: P6 j3 T% R( c
window.navigator.userAgent
+ C$ h$ G  x4 V" Y: L0 l'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'1 T( N# }. e; `9 {$ `8 T
// 浏览器运行所在的操作系统/ c0 R* s7 p: X: Z6 _9 S& Y( e
window.navigator.platform
/ C) M1 R8 `, Q! n$ |. ?, C3 l'Win32'
+ P" D1 E0 |5 w  ?4 N# T6 ^* q' j9 I2 w) w, s3 I
//  获取URL" N9 D: e4 k, t7 `
window.location.href
' v! _( a$ N# C4 x% o4 @; m// 跳转到指定页面0 w# I# v, Z/ C% B9 o% ]6 W; O
window.location.href='https://www.baidu.com'
# N( C2 y7 G8 P8 M& P// 重新加载页面
' D0 |: J. z5 g4 P- Nwindow.location.reload()
- v# S, B( x' V& A( n</code></pre>/ y9 Y/ `( ^2 ?  i) X8 @6 s
<h3 id="32-弹出框">3.2 弹出框</h3>
: S* G  t: k6 _% n" ~- j<p>三种消息框:警告框、确认框、提示框。</p>
6 l: s* G6 e* z& \& D3 I<h4 id="321-警告框">3.2.1 警告框</h4>1 n4 U' ]; v; O% a
<pre><code class="language-javascript">alert("Hello")# W0 \/ I/ Z# ~- P! J) t% c
</code></pre>5 }, L; Z5 w2 S* s. o+ m4 {" e, c
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>( ?! G* [! {3 O% o& k( l4 i
<h4 id="322-确认框">3.2.2 确认框</h4>
5 v- J0 R& q6 q1 p& @( a<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>
& @( [& \: l- s6 ~: r<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true! e: D; W; ]. V
true
/ q+ A8 C- }5 |, x2 V! F&gt; confirm("你确定吗?")  // 点取消返回false
+ }( X3 s" Q4 D9 dfalse
9 r4 @2 W' n( Y0 X% r1 J8 }; F</code></pre>
% ~4 U" F: T! u$ h- Y& [<h4 id="323-提示框">3.2.3 提示框</h4>
+ u1 g+ w$ |0 T' k<p><code>prompt("请输入","提示")</code></p>
1 L$ K) b6 o; ^6 r<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>& x/ W; w& b! E7 a3 C
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>- Q! N/ @3 g& _& Z( m3 ~
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>; {- E# H( h4 N4 @: O, \; @
<h3 id="33-计时相关">3.3 计时相关</h3>
+ @* h+ _6 [7 J7 B<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>) T( O/ L5 D# p0 {8 H0 j+ _
<pre><code class="language-javascript">// 等于3秒钟弹窗
" U/ m0 P% n9 y7 w; AsetTimeout(function(){alert("Hello")}, 3000)" w! [1 Q, d! K/ [+ q& H# x

  ^) ?- Z5 v8 G- Qvar t = setTimeout(function(){alert("Hello")}, 3000)
: L! K8 o/ _2 e6 Y! ~# f
, b! a( G" {3 A. p0 F8 v// 取消setTimeout设置
7 @+ d3 \* R2 ^# |$ y+ HclearTimeout(t)) e' S+ A- j6 ^+ m, y' S$ N) D" r
</code></pre>
- F. G' q, t/ `% Z. f<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>
* A& _4 b4 Y! y, v<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
& O0 T7 N- _9 z! C* s0 W/ x<pre><code class="language-javascript">每三秒弹出 "hello" :* x# _4 S% |4 p, j
setInterval(function(){alert("Hello")},3000);' F  C2 J2 B$ K0 b9 x9 I/ f% K5 i
</code></pre>
1 d, t1 C$ E5 u<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
/ Y: W/ G, a4 O0 c<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
/ @# Z9 h5 [) W# T//取消:2 U7 T4 p; ?! B: _7 E1 G- f
clearInterval(t)
& t7 n' w. _5 |! ~; f0 w2 ^</code></pre>7 z$ y0 m1 v2 m2 S# s1 S

/ R5 ^0 x" b  v/ |2 U2 \) B+ Y" a$ z
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-10-31 04:33 , Processed in 0.071278 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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