飞雪团队

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

前端之JavaScript

[复制链接]

8044

主题

8132

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

5 r: i- T/ E$ ~; C" _<h1 id="前端之javascript">前端之JavaScript</h1>
9 m! d2 o. Y) E% |5 u<p></p><p></p>
5 m: }& }. ]* C5 x/ O7 u4 ?<h2 id="1-javascript-发展历史">1. JavaScript 发展历史</h2>
9 b% x7 a4 b% P; ?+ A<p>JavaScript(通常缩写为JS)是一种高级的、解释型的编程语言。JavaScript是一门基于原型、头等函数的语言,是一门多范式的语言,它支持面向对象程序设计,指令式编程,以及函数式编程。<br>
! l0 @" y0 I3 J1 o8 l它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。<br>3 h+ @, b/ M3 u: b9 X
它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。<br>% u" @0 b6 [7 K
它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、Firefox、Safari、Opera)支持。</p>: \1 B" K* v& I0 O, {
<h2 id="2-javascript基础语法">2. JavaScript基础语法</h2>5 D1 d3 w$ b6 M: [
<h3 id="21-注释">2.1 注释</h3>: f' g# x& ^! M0 `1 z
<p>在<code>JavaScript</code>中单行注释使用<code>//</code>,多行注释<code>/**/</code></p>3 x# g  {) P8 O' @5 d8 T1 N
<pre><code class="language-javascript">// 这是单行注释9 k' r/ D6 P- V' m) h
; H  ^0 T7 ?( m0 H( y
/*
. q6 W' V2 k; V* Z; F7 d4 {" v这是多行注释的第一行,1 p) X5 P1 L1 L# [  O
这是第二行。
0 y$ |; J" V6 ~6 t$ ?*/
( L# D6 t' u6 p" a1 f  h, ]- q! h</code></pre>
2 D8 `: l' e6 c& P. Y<h3 id="22-变量和常量">2.2 变量和常量</h3>
9 r4 C1 v8 K8 J% c<p>在JavaScript中使用<code>var</code>和<code>let</code>定义变量:</p>0 A  R# U3 e, w' b
<ul>
% s8 y# B' a/ i2 a/ E4 c& j<li>变量必须以字母开头</li>
- H! t( V' n: u( n* E3 X- k" l<li>变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做)</li>
! e) S; j8 ~9 s8 p  I$ J* }  q<li>变量名称对大小写敏感(y 和 Y 是不同的变量)</li>1 K# f! c; c* V4 G
</ul>2 |- L/ q7 {  h& \1 y. h' M
<p><code>var</code>定义的都为全局变量</p>
; ~7 ], z7 \; e5 B* q<p><code>let</code>可以声明局部变量</p>$ o5 N7 `1 j; T9 T$ c% G) W. L1 d
<p><strong>声明变量:</strong></p>
  k& Z% H. Q3 R, E# _<pre><code class="language-javascript">// 定义单个变量
  Z2 @4 \* V. W; G/ o. d) l' @+ U, V4 P&gt; var name
. w3 s9 i+ D* h&gt; name = 'Hans'5 u0 t' s5 H5 A0 o2 G2 `& Z
//定义并赋值
0 W$ P7 b/ M9 \&gt; var name = 'Hans'
" ^  L) i  N8 ~&gt; name
5 V- I6 }" B% [  t8 j'Hans'# X3 f3 s0 k' A4 ?. o  `8 r" \8 k

& ]$ d9 ^8 b5 g: v  o5 z// 定义多个变量
/ b& l+ ]1 O- v+ g&gt; var name = "Hans", age = 187 r1 b7 |0 u) ~/ I3 \+ g  z
&gt; name- W; I5 g4 c1 o8 n
'Hans', A+ M" Z. F* E* C- K
&gt; age
( q" ^* o9 F* D18
" s* x4 \3 @& W1 k& Q4 E3 o3 p! `# R6 F9 ?, C% Z0 C! Z5 o
//多行使用反引号`` 类型python中的三引号- h9 b8 M$ e$ J7 |2 |
&gt; var text = `A young idler,9 Z& m! E  b. R* y
an old beggar`$ p! V4 Z* u; c  L3 D# G8 N: D0 A
&gt; text4 j4 _) ~0 ^, r/ J: a
'A young idler,\nan old beggar'2 F+ N1 Y% i" Y& O
</code></pre>
9 X/ {5 N$ R: J. p# k1 k<p><strong>声明常量:</strong></p>0 ~. g/ x( Y, A: Y5 w& }, v% S
<p>在<code>JavaScript</code>中使用<code>const</code>定义常量</p>
+ P) a( n1 n/ E<pre><code class="language-javascript">&gt; const pi = 3.149 [& y9 i  ^$ I! Q6 q
&gt; pi
7 S6 ]4 ^; _! X5 z5 I8 m/ C3.14* m8 H7 Q* K6 o8 I) I- @' ^
&gt;  pi = 3.01* ^8 @4 B' t; [( {1 E, V8 d
Uncaught TypeError: Assignment to constant variable.
0 b  ]1 F$ ~" C2 {& E    at &lt;anonymous&gt;:1:4
$ F1 ^- m  I5 n2 n9 P/ K+ q$ V3 F( h3 {0 h
</code></pre>
* ~) P) W8 L$ f& \# P, p1 _<h3 id="23-基本数据类型">2.3 基本数据类型</h3>$ f+ F# z* t$ Z# Y- h
<p><strong>值类型(基本类型)</strong>:字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(表示独一无二的值,ES6引入)。</p>. \$ }2 Y' u' |9 U+ X- \9 @
<p><strong>引用数据类型</strong>:对象(Object)、数组(Array)、函数(Function)。</p>
, }: o# F) k: e<h4 id="231-number类型">2.3.1 Number类型</h4>
, L" T; w! B; `  V. \, d<pre><code class="language-javascript">&gt; var a = 5- o+ _+ n* n/ W5 `% @& \, o
&gt; typeof a   //查看变量的类型  , f6 f! l3 K2 i9 _4 f# T% @
number
- R6 k+ A4 ?$ B8 h3 Q8 M; C3 z, ]0 u
&gt; var b = 1.3  ^8 E& w" E* p2 g+ q
&gt; typeof b
1 c( @$ N* j4 o- Z' |! {number
7 V1 c5 g' Y9 w2 e" C% a" `% m% ?5 b3 G( U
// 不管整型还是浮点型打开出来的结果都是number类型
) Y+ S' l. i# c# Z3 t* x" X; a- q( S$ {6 J% L
/*, `: s- _' R7 A, F' Y: x
NaN:Not A Number
. m; h4 a. I; rNaN属于数值类型 表示的意思是 不是一个数字
, s- F6 b/ U: a0 ~( I: j: E8 L*/% ~& C7 P5 |! @& n
+ T. |$ q( L8 ^) b) I
parseInt('2345')  // 转整型; Q3 h  P- S+ _
2345: f& ^7 k6 r0 y, U# W
parseInt('2345.5'): t: s6 t4 [6 [# q' K- a. @
2345, q9 @9 p- I0 k+ _2 P
parseFloat('2345.5') // 转浮点型( M6 k9 g; {0 q$ [
2345.5
7 H  @3 i5 e2 P2 k7 y+ _parseFloat('ABC'). C/ }' l$ e' O
NaN
8 \. X" U# A! K( J* UparseInt('abc')
  {, ]7 l# G  f8 d$ JNaN
8 T1 i  f+ L, k- H, J</code></pre>* q4 r& T/ z5 H% y8 _- @4 e  F
<h4 id="232-string类型">2.3.2 String类型</h4>
# {6 D1 \- N) P0 g9 R8 y<pre><code class="language-javascript">&gt; var name = 'Hans') c2 M6 s  J; V0 M4 W
&gt; typeof name
$ D  u: H, V6 ?- ^7 H& M'string'+ H0 O6 U/ I; R; N7 P- D
) g; u! [' v* i8 m5 r9 k
//常用方法
- M" C) |) g( G  p// 变量值长度, K8 p3 m! h$ t
&gt; name.length) j* `4 c/ l  W) R' _  ^1 `
4
: L- X& f: F7 X0 E% s% k# {// trim() 移除空白
" R( H  M3 s7 M* a&gt; var a = '    ABC    '. D' g: \0 N- P: s+ Q6 x
&gt; a
( \9 z9 J3 L$ {1 b& p0 f3 E& {'    ABC    '; o$ g+ j7 b( j6 R
&gt; a.trim()7 @/ b( M) C5 M6 t) C3 K
'ABC'
+ W* s( z  E% @  R//移除左边的空白
- a% ?) h# s- }' k" t4 G) B3 S: l&gt; a.trimLeft()" x- i0 V& B6 M# w* z! C. z7 e
'ABC    '6 B' S) {; L: W5 I7 |( }
//移除右边的空白
& @2 l  b  d: r&gt; a.trimRight()
" V% Z1 Y/ l# u9 u, u'    ABC'
# ?' r  `6 u, y
5 I0 ~  @1 n. C1 O, n$ ?" t+ p//返回第n个字符,从0开始
7 \; z/ G! f* o7 L&gt; name& V" i% J1 t5 T* x+ Q
'Hans'
, y/ z) G( L; W4 ?$ J&gt; name.charAt(3). |7 B4 H2 l' c. @, P; d# |
's'1 {5 Q6 d5 l9 e" V& M
&gt; name.charAt()
" R9 I) z* \7 {# x: o'H'
1 u; ]8 k7 g$ m; ~4 ?% f8 L# E: D&gt; name.charAt(1)
5 i0 k! c/ \. l  `! h'a'
( D8 L- h% V' C9 H
9 i! a# |6 c, i4 j// 在javascript中推荐使用加号(+)拼接- i; x* q, N) R2 x7 d
&gt; name# |8 Z" B" W9 A! _4 [
'Hans'
, _; c" {' f3 W" s&gt; a
" ]8 x: `; _% u3 O; w0 C" I'    ABC    '' D4 V# p8 y8 z  A' D7 k5 Z' R
&gt; name + a/ w; z# j5 H" C9 z) o
'Hans    ABC    '6 U  L& `+ p( y
// 使用concat拼接" U) y8 X  P( B% t
&gt; name.concat(a)
7 P9 N( b5 [7 n! F8 O* O'Hans    ABC    '9 ~4 Q; |& o8 `1 u" s( n! k" Z

; x2 e* j! a' ?/ ~//indexOf(substring, start)子序列位置& g; S8 j3 C: \! f7 h$ Y
2 i4 n/ ^1 k7 _
&gt; text
4 v* N3 h3 |1 ?) o( d  M% u. _/ c'A young idler,\nan old beggar'# G) I3 ?' t& e0 L3 K4 g
&gt; text.indexOf('young',0)
, U9 R6 }. ~- j/ q* D2
4 N+ w; H! X! E1 t" n/ \- z
0 T" w9 K' Z" v# x/ \//.substring(from, to)        根据索引获取子序列
: a  `4 R  J' l8 B9 c9 F# h& m  z&gt; text.substring(0,)
) {! h; D; X8 l% N7 t( d+ `1 Q2 S'A young idler,\nan old beggar': N/ Y6 p5 \; ]+ C
&gt; text.substring(0,10)2 a# U3 A, K! m$ v# [6 ~
'A young id'; y' [: `* X4 O, n$ _. f5 ^5 P0 x+ {

+ Q7 A3 }4 [& U$ c1 z// .slice(start, end)        切片, 从0开始顾头不顾尾
# D, Z1 X6 `: q. Q&gt; name.slice(0,3)$ g# ]% p1 x3 j
'Han'* e+ C$ i& x* [0 O

1 k3 }  c0 p  w3 {( E// 转小写
" }& m, u! O& v, C: V! n8 R&gt; name! l; t( `& U4 R: @7 d! ~+ L
'Hans'
& ^, U7 b* z, Z8 ]7 Q&gt; name.toLowerCase()# Z8 T8 G* i: ~+ }" I0 O' [
'hans'
$ R1 N& D. z; X$ u8 n* N// 转大写0 r+ Y9 z( [6 A9 e' U  B
&gt; name.toUpperCase()
, `8 o9 x: x( d7 ~6 G. u: g+ f'HANS'0 E8 K! z# ^: I6 r; R* q
, g  e# L! D: e
// 分隔( Y& r6 ]0 C5 z, F
&gt; name0 @& R7 ]7 m! j
'Hans'6 m4 ]4 z, M5 o* q4 H# p9 K5 W
&gt; name.split('a')
; h; m+ T5 B6 i& p& m6 W; @2 T(2)&nbsp;['H', 'ns']3 Z  y' e" s+ R# ]' \  n/ T" {
</code></pre>% m8 f* \; S! y+ R9 A, B
<h4 id="233-boolean布尔值">2.3.3 Boolean布尔值</h4>
! u! K5 f0 D. r) v$ X( L<p>在<code>JavaScript</code>中布尔值<code>true</code>和<code>false</code> 都是小写</p>
; i4 N3 {* a- q4 g<p><code>""(空字符串)、0、null、undefined、NaN都是false。</code></p>; k2 m$ h2 Z8 o1 O
<p><strong>null和undefined</strong></p>
. Y/ ~; x5 K# H3 y! ?<ul>6 t" E$ v* L" Q7 f
<li>null表示值是空,一般在需要指定或清空一个变量时才会使用,如 name=null;</li>" X; _' V. i  ]9 K# r# i
<li>undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。</li>
4 r. ^/ ~/ G2 S. V0 k% e</ul>% E& P' I) d& q  V5 i" K
<h4 id="234-array数组">2.3.4 Array数组</h4>! _# Q& q# M; C- n
<p>使用单独的变量名来存储一系列的值。类似<code>python</code>中的列表。</p>6 {# y3 l) f9 D: p) X
<pre><code class="language-javascript">&gt; var array1 = [1, 2, 3, 'a','b','c'] + m% R. p& ]. ~  c
&gt; array1
. X( U/ L: q5 i, [(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']
6 ^6 [$ N2 {9 z" z, O&gt; console.log(array1[2])  //console.log打印类似python中的print
# @1 P  u7 j2 |6 _" @3, V2 ^2 q2 }- q* f
// length元素个数
3 l; B; t3 ?' E' ]+ M$ L) n&gt; array1.length
: C% v8 l7 H; G& V. y2 f62 M4 E1 _  S* C. `
// 在尾部增加元素,类型append, {# ?- x& y; A% H# D$ L0 c
&gt; array1.push('D')
# J0 Z$ ~9 g& ?# ~# F) l7
: Q: L% N5 ~0 ]# M. q: [&gt; array17 S! X! l, T7 p% J9 H& W, `
(7)&nbsp;[1, 2, 3, 'a', 'b', 'c', 'D']
, @" l9 v4 o/ G// 在头部增加元素. b: A0 e8 }" t$ X' j7 ~
&gt; array1.unshift(0)
- S+ f9 D7 s( Z5 b' y' [1 k8
3 q1 F8 G$ X0 J: K2 s&gt; array1/ _* {" c" _* |
(8)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c', 'D']% X* ^5 O6 h- h$ R
4 }  Z% B1 V3 W& F4 X
//取最后一个元素: C+ L0 |( R" @& v2 F( F
&gt; array1.pop()
) j5 z5 e- O2 l. R. k8 o'D'
, o: m5 r* v% P, x2 y: l&gt; array1
) |5 F) v) |  }6 v(7)&nbsp;[0, 1, 2, 3, 'a', 'b', 'c']
* x1 {) }! ^( |+ V//取头部元素
& B5 e8 }$ U7 Y- s% k# s; p2 p&gt; array1.shift()
! f. A8 n: c2 `# q9 m/ ]9 I0& t, \' p/ t% A2 Q- w+ t
&gt; array1
& ^# P/ }: B- \(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']/ \: _0 `' r1 y6 T

4 S! Y. q9 V' l# H2 p6 j//切片, 从0开始顾头不顾尾+ P% D  @- L* v- o  {7 c
&gt; array1.slice(3,6)
! R5 O! s8 x" _( E(3)&nbsp;['a', 'b', 'c']. H. ]/ u# @: L' |8 s  g
// 反转
8 [0 D  t* o% ~3 G5 v  G6 i&gt; array1.reverse()& D; o9 R4 f+ \0 y3 X; t
(6)&nbsp;['c', 'b', 'a', 3, 2, 1]& l1 f! i8 d2 `1 E$ T( A- W* A& D
// 将数组元素连接成字符串
# {3 b5 I- z" J&gt; array1.join() // 什么不都写默认使用逗号分隔3 t3 p" m6 Q4 h5 P! H+ Q+ K: S7 ~2 }
'c,b,a,3,2,1'5 P% U2 f1 e2 f/ N5 n
&gt; array1.join('')
5 @" ]8 U% i+ g' j, W'cba321'. k) d8 N9 s- v) b& v
&gt; array1.join('|')2 ]4 V6 R5 K- H; `
'c|b|a|3|2|1'
( Z! @/ Y5 K2 q5 B
% @5 a& y$ @/ r1 u/ u// 连接数组# m  ]: N3 c% \/ T) c; u& t
&gt; var array2 = ['A','B','C']
6 V5 J# |. |3 m&gt; array1.concat(array2)
- ~4 o7 l3 {  P(9)&nbsp;['c', 'b', 'a', 3, 2, 1, 'A', 'B', 'C']
. {5 l  T9 T" s4 `1 X
) W" g2 v1 _- S// 排序
) ]5 w, {1 g% b2 v$ ^&gt; array1.sort(); _7 ?! k5 j% {9 O# r
(6)&nbsp;[1, 2, 3, 'a', 'b', 'c']; ?! L- F4 L, {# J( e) E' p

$ Z/ ~, y2 e# S5 Y7 u// 删除元素,并可以向数据组中添加新元素(可选)
. ^: o# ?1 f, e+ W&gt; array1.splice(3,3)  // 删除元素
  z9 Z3 K' _$ z/ i, a, N; \(3)&nbsp;['a', 'b', 'c']
2 N, i) G" f; c4 Y2 F&gt; array18 m7 M- l9 z# Y  q+ d
(3)&nbsp;[1, 2, 3]- p, P/ M6 C/ ^% L
&gt; array1.splice(3,3,'A','B','C')  // 删除元素从添加新元素
# d* D" S2 s) m0 B! \1 o0 A% S[]9 F6 G  l3 J% ]# d' X+ \& D6 j2 U
&gt; array1
3 Z6 D1 K; u6 e0 L* r(6)&nbsp;[1, 2, 3, 'A', 'B', 'C']
3 r5 K( X) I& }, S8 `5 ]7 [1 \
+ k6 m7 T2 c3 r- A/*  G) q9 b$ i7 |7 ~
splice(index,howmany,item1,.....,itemX)5 w  l: O& h  ]7 W
index:必需,必须是数字。规定从何处添加/删除元素。
. d0 b& N. C( }3 Q6 b# Lhowmany:  必需。规定应该删除多少元素。必须是数字,但可以是 "0"。如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
0 F! }, h0 e, B' ditem1, ..., itemX        可选。要添加到数组的新元素
( q0 q7 M9 ?7 w+ ?*/
$ v  V! A' f5 M/ Z% @' I, u% \" W3 q
; Z7 P; s6 Y- v0 J4 W1 S2 u// forEach()        将数组的每个元素传递给回调函数
$ B9 f# {' m' p&gt; array1.forEach(function test(n){console.log(n)})
6 B+ Q$ v/ [6 V 1; M' p3 L7 ^; y
2! x9 ?* ?6 o& Z, T& V5 S/ v7 Y/ w  h
31 i, \6 i+ |/ Q# [
A
3 I$ ?2 ^5 a+ R B, B- d8 j8 B; g. C6 b6 Y
C
6 \0 n, m8 S  ?7 B! Y- m" l// 返回一个数组元素调用函数处理后的值的新数组
, `1 j; A$ s# c& ~  [$ ?  B&gt; array1.map(function(value){return value +1})
: b( R* c& M4 i4 s(6)&nbsp;[2, 3, 4, 'A1', 'B1', 'C1']
* o, L$ {9 o, m, J$ X</code></pre>
: l# v# X5 @/ p<h3 id="24-运算符">2.4 运算符</h3>
" |/ s! u4 B/ ]% O' n<h4 id="241-数学运算符">2.4.1 数学运算符</h4>
8 T+ v9 y, M6 ~+ ~# U" N<p><code>+ - * / % ++ --</code></p>$ k0 K# \, S% w6 o: }
<pre><code class="language-javascript">&gt; var a = 6
! r$ s; Y4 A% o& {. v&gt; var b = 38 S9 w9 C" F- [9 b$ t, ]6 A- C
// 加- D+ ?$ o$ g0 D1 O* t" B7 d: ^
&gt; a + b1 d1 s$ \1 C! M- ?' E7 [, L9 |
9
" L) R# Z+ X( g' Q5 H% J// 减
& L) ]3 p% o2 H# `$ \&gt; a - b! x- y1 y5 C& s1 l0 ?* B2 R: L3 I
3
3 n* M/ H. l3 ~2 Z0 c" ~1 l// 乘
4 L. V& u2 c- L- g2 U  s( T&gt; a * b
' ]# A( j( ^2 t1 |18
) Z7 \3 S: ]9 R6 e+ o7 c// 除" L$ n' x, O: b+ _5 a
&gt; a / b
& ~+ t5 Q& s" a7 S) a2
0 q4 t8 z$ e# t/ k: R// 取模(取余)6 [7 Z4 c: c! \& {
&gt; a % b; H+ a, Q, \7 q+ ]! L
0
4 \( p$ T: ^; j8 l// 自增1(先赋值再增1)
9 Y  \; B* D% n& J& Y&gt; a++: F  h2 l: K# Q) A- }
64 D1 N2 f0 R. w! t
&gt; a, T# l  D0 u( t2 ?3 y% j
7/ m/ \% X. s: _8 D; s2 _* E7 R
// 自减1(先赋值再减1)
% A5 @3 ~! p  [5 ~&gt; a--
9 h* v2 c+ o1 w9 B5 g  d+ o" H7) P' L# w$ t- E% Y. Q1 ^
&gt; a
, E% E) Z$ j/ j/ Q6
' J, C* G$ T8 O% d7 i( o; f2 F// 自增1(先增1再赋值)
0 m: k3 I8 D  E9 N; X! a&gt; ++a+ U6 ~# o6 i0 t# J
7
; B4 J* _, g+ L! M( I3 r1 k// 自减1(先减1再赋值), a% I3 B7 i2 G0 F' ]
&gt; --a( C" k5 Y3 M( }% L- O
67 g( P  U" c' h1 B( P# g$ P8 {$ s8 v
&gt; a+ e" x. s) ^7 g$ T* R) z1 x
69 x' ]) r' F1 f% U

# d! E" C5 m: a7 G! p/ e4 \//a++会先赋值再进行自增1运算,而++a会先进行自增运算再赋值,--同理
! O( ^) y7 b- C$ D) W) }! U7 ]: ?</code></pre>& z8 F' K5 O) m' D& y& p- `# z  ]
<h4 id="242-比较运算符">2.4.2 比较运算符</h4>8 u9 O3 Q' `4 F- D$ [$ {
<p><code>&gt; &gt;= &lt; &lt;= != == === !==</code></p>
9 @/ z" S8 {. P3 y$ o6 q9 H<pre><code class="language-javascript">// 大于
" y; P+ G: e7 }  @&gt; a &gt; b
: x3 c3 }" B" H  H- Z8 }true
+ O6 [+ b* t9 C1 C3 c' b4 R// 大于等于. W$ h8 K8 A# O* d9 W" L) y
&gt; a &gt;= b3 y" ?4 N, d: T: R' U+ ~# ?3 Q9 i
true. H+ ]4 K% y6 B9 p& ?/ x, ^$ z' z, m
// 小于" n$ V' N& W: A8 g+ w
&gt; a &lt; b4 P, }) H9 \, q& Z/ \
false" s9 |, }: f/ V1 |4 u/ e4 b
// 小于等于. \9 a, F0 l* `* q
&gt; a &lt;= b
+ c) B, m- V; r: r* A' s5 ^false
1 H2 P6 D/ D' Q1 H2 ]// 弱不等于
& M" a. \2 e1 G" P' O&gt; a != b2 G# r' D" c% J4 e1 V
true1 H2 D6 i+ d. n+ q$ j6 [
// 弱等于
- R+ A# S! p: Q: D&gt; 1 == '1'
* j' }' f+ b7 U0 [true
, _% Y6 _' F7 F8 x$ G. S// 强等于; P( s, Q5 K- Q2 ?
&gt; 1 === '1'5 w' v: D+ O2 |( D7 N+ V$ o
false
% S  r& ]) w4 N) w// 强不等于5 o# C& {, K  e
&gt; 1 !== '1'
9 \1 w, v. D1 e- Z" ?8 Itrue
* c* G# f! `2 ~  a
  s' I/ X) p  f) H& h( e/*0 N  ^$ h4 Q: e; U# H* A
JS是一门弱类型语言(会自动转换数据类型),所以用两个等号进行比较时,JS内部会自动先将数值类型的1转换成字符串类型的1再进行比较,所以以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误
  r/ L6 i  u& A6 P! R*/4 |- L$ m7 |! P3 r" f
</code></pre>
8 \+ r; {, u6 E<h4 id="243-逻辑运算符">2.4.3 逻辑运算符</h4>6 B  ?5 f) k6 {
<p><code>&amp;&amp; || !</code></p>' G0 a. S' t) S' ~: ^
<pre><code class="language-javascript">&amp;&amp; 与
8 l  }! c! b0 H4 @  Q" g9 A4 X|| or
8 X0 `: e- ~) g5 v* p( G8 S+ W1 w! 非
* D, {1 g0 j, B7 f</code></pre>
4 J1 r) @8 D; f4 I<h4 id="244-赋值运算符">2.4.4 赋值运算符</h4>/ O( X1 w! C3 @3 X3 c! e
<p><code>= += -= *= /=</code></p>6 Y& H$ f( q2 e7 i$ w
<pre><code class="language-javascript">// 赋值
' b- j: N' ?. @! N  q" c. J&gt; var x = 3
4 J  J6 y/ h0 F, e// 加等于1 q- {+ o; j+ V" c$ s
&gt; x += 2
& c- X  |2 {0 M5 z+ ?. V' G5
" V$ u, q7 \7 H' ]6 m2 N// 减等于! ^7 E' W0 _: A& j3 J
&gt; x -= 1
3 z7 W; I1 d  u9 }: _4
7 u( B# f3 w- \8 Y; l( n8 B& J' D3 W// 乘等于
( c4 `% R! }( s% T&gt; x *= 2- ~6 U( @, B+ H+ L% t: X1 V6 g; L
80 u0 t. {, b8 O+ ~
// 除等于
/ R6 x8 D# P) i7 ?&gt; x /= 2
) D; Z) _; M6 _6 \' @- K4
, ]9 A  D2 ~& C! @. O</code></pre>- {; Q, I  p' w
<h3 id="25-流程控制">2.5 流程控制</h3>
* ^" C! Y6 h8 W. b' K/ N6 X4 K<h4 id="251-if">2.5.1 if</h4>
$ Y1 u8 x7 {" E* m<pre><code class="language-javascript">1, if(条件){条件成立执行代码}
. ^4 B0 n; @2 I# Q: D; c  }! t6 J' H+ @
&gt; var x = 30 e; g8 u% w2 Z5 B0 }- K8 y5 G+ f
&gt; if (x &gt; 2){console.log("OK")}% ~4 Q2 s7 t5 a) m# i
OK
# x/ l" ^3 h8 K0 _' f8 r. r/ \  a% K
& k8 B% ?4 t$ b0 f) }: l) e+ m2, if(条件){条件成立执行代码} : F( x* B" |6 L* T7 U7 D) A9 g) q9 {
        else{条件不成立执行代码}( w9 ~$ W1 d( f3 [

& i- ?* a+ Z3 C- B&gt; if (x &gt; 4){console.log("OK")}else{"NO"}9 P' [6 h* m: e& ?+ ]+ j1 b
'NO') f2 V4 e2 ]4 ]" R6 M" J* F

' J4 g' Q4 F% F# J9 x3, if(条件1){条件1成立执行代码} : I1 d4 G3 e% |& C5 n6 a( g
        else if(条件2){条件2成立执行代码}
9 Q7 `  L, V  e5 V    else{上面条件都不成立执行代码}% a8 I+ r: i, Z8 E) d
1 ?" t5 s" c0 C9 r3 Y1 |5 z
&gt; if (x &gt; 4){console.log("OK")}else if(x &gt; 5){console.log("OK2")}else{console.log('Ha')}1 `! {( W7 W, u5 D/ K
Ha
  j1 i& j% F# f0 a( x</code></pre>9 c" x/ ^% S5 V9 B8 R
<h4 id="252-switch">2.5.2 switch</h4>, w3 T6 ^/ L* M* F7 @" J2 L" {
<pre><code class="language-javascript">var day = new Date().getDay();
  b& t3 j! ^! V2 Nswitch (day) {
) V- [7 u' y0 ^+ m- r, T  case 0:7 L0 i1 i6 t* }
  console.log("Sunday");
/ P8 \& d* F) j, G, ]1 `  break;
3 A1 p) ~) n2 E; I7 o2 U  case 1:
( i4 w3 Q; }+ R; ^+ w+ r( O  console.log("Monday");+ L$ q) T; P  N- F2 [' W
  break;
* W/ I8 I. o+ e- k6 A4 p2 Adefault:1 Q( ]% k. c/ b, z" n
  console.log("不在范围")
  M. t8 n1 ^; T7 V+ J, k}
3 u4 x# d5 U& g" w 不在范围$ L$ ]5 K3 P, F- F1 K2 H
</code></pre>
+ w, v2 {$ ?* t- b  ?<p>注意:<code>switch</code>中的<code>case</code>子句通常都会加<code>break</code>语句,否则程序会继续执行后续<code>case</code>中的语句。</p>
( a  c/ U; r7 `2 F+ M$ l<h4 id="253-for">2.5.3 for</h4>
5 [+ ^. O7 m+ `) z4 i+ m  a. \<pre><code class="language-python">// for 循环% ^, W5 C# |; S
        for(起始值;循环条件;每次循环后执行的操作){) L; y8 X/ M% C. a3 _$ T; C/ z
        for循环体代码
* w+ }; z3 S- p# R% p6 f0 v    }) U( L8 {& D% y/ n4 S' L

* d' [9 z$ R) h+ j6 cfor (var i = 0; i&lt;10; i++){
: e, q, N' x6 H2 z: o    console.log(i)
: _. I- g- u8 E, y) M. p}
- `9 W7 T0 M0 N6 ?# N$ d9 Q        0/ r/ {$ j6 {/ J3 i: A7 V
        1. I% k( [: Y! g' S
        23 j% H/ u7 x3 f7 t
        33 P& a' |( a+ i& v' K( X& v
        4
, F, T5 P6 x; C' M  d        5
6 Z, A. @) e9 ~1 C5 s& I        6
6 h/ V& o4 U/ H        71 @/ L9 t4 h1 A
        89 |0 d; p+ N% l( E, }
        9
# t* F3 w" ^8 b6 e' v' I1 Q, d</code></pre>
- R' E  m: ^2 ]; e<h4 id="254-while">2.5.4 while</h4>/ D9 v' R: _- B1 H: C
<pre><code class="language-javascript">// while 循环9 [; S  \* V' c$ j% Y+ G0 E1 \
        while(循环条件){
0 i$ y  x& K5 A( a1 s7 x9 r- T        循环体代码
7 Q- W# O" a/ R0 Z& U8 c    }
, q4 U1 D6 @- A- b2 e: y, d- p* V# W( R6 y7 a3 h' w5 {! b$ t
&gt; var i = 07 Z8 x( \1 G- T* P
&gt; while(i&lt;10){
2 K: @- F6 g* f! w2 s    console.log(i)
. q( m" l' ], A& ^- ~; F* C    i++  F' C9 \# w3 I4 h( V
}
) j/ v* S  m+ i8 j, q, z9 { 0) c0 d2 d* j' z3 t
1
2 e+ W. Z, Y6 H; H, J 2- S0 A' ^+ o8 V8 B2 O2 V# a/ s
3
5 N+ @- F5 ?2 \# q- b; J 4  O  \1 o5 w: g. w, Z3 K
5
' b, z) _  z* G( A+ ^" a 6  A, F6 {0 _3 U  |# X
7
( C: G  |0 N; Q/ o8 u 8' p% x) P* A4 t: w; i* ]
9- E1 \- K) j9 l: v
</code></pre>
% n3 w* v2 K& _, H<h4 id="255-break和continue">2.5.5 break和continue</h4>
5 U, Y; [# v9 {( ~' B1 u- [  @<pre><code class="language-javascript">// break
9 B! F! l' c! ]. a# ^9 cfor (var i = 0; i&lt;10; i++){
$ V, ~3 \5 a8 `. Z5 h    if (i == 5){break}4 b. N4 ]* \. f1 R# z. B
    console.log(i)# N' I, \6 w% V+ w& U7 O
}
! o" b& X, j' i  j3 G- s  I 0
: w8 A" |8 ^. d. j9 g 1
* E. _4 @8 |- I 23 Z7 [$ p, }% G' G( {
3
2 k# _3 J1 Z% s8 ? 4
6 g2 e; K/ @; O0 W4 v// continue
0 I- L- D: @- F9 ~% R5 rfor (var i = 0; i&lt;10; i++){
* `# t3 T& N- t    if (i == 5){continue}. h% n% Z- `. o% |6 [7 ]2 W, Z, w
    console.log(i)
; K; \: T( h) b+ ]3 D# W}
+ Z7 _  Y0 V% J 0$ u! J- k. u; N/ m
19 ]- l, {3 E& T' f4 _- K9 @' n
2! K; [: r# j+ Z( n. b! |
31 S: ?( |: y, c
4
2 E% ]) ^. h! f 6" _. ?' R( S" j8 @
7
1 u7 z( D6 H+ W, N 8" Q3 r. Y" k: z+ X. ^8 R
9& `" t8 [" s* n, Z5 o

0 s! F6 e6 A* O( p, g  u</code></pre>; F" H4 ]5 J9 U/ O
<h3 id="26-三元运算">2.6 三元运算</h3>: g& O  e8 |$ ^  N' ~6 _# Z, f1 x
<pre><code class="language-javascript">&gt; a5 k. C) c7 A4 e0 \* ]( Q. D
62 l2 {+ x- [# g: ?; Z- ]
&gt; b
- z" n8 p5 ]# l2 C/ ^3
; `$ q5 r$ K# e7 T# s( s/ k! a2 n4 K
//条件成立c为a的值,不成立c为b的值3 \. _4 i- ]7 e9 U: W) E! U7 v
&gt; var c = a &gt; b ? a : b. z- @* P  }1 E  F) U
&gt; c* H9 _. l6 z& l) e8 w
6& F1 \& I2 j! c  K8 D: M+ X7 W: B
" N: c( R2 H8 R. k9 h5 o! f/ O  |' _9 ^/ p
// 三元运算可以嵌套+ S+ n" b6 m+ M" ?
</code></pre>
' R8 {+ A( Y" z' S/ j% U<h3 id="27-函数">2.7 函数</h3>
  P; n0 B" o3 y8 J3 s4 Y<pre><code class="language-javascript">1. 普通函数
5 d6 q) K1 \4 b9 A2 Z9 ]: q+ C/ g&gt; function foo1(){
: o2 v2 d. O, E    console.log("Hi")7 n( E! `6 X% x% U9 P! G$ |* Q& C
}
# P& T( |. N9 V3 i5 l+ p0 v/ L, A0 ?" e. k
&gt; foo1()- q& m+ i2 W& j6 e4 [* r# O7 C/ H" ^5 c
        Hi( [% @9 d' S$ z" I
2. 带参数函数# M' g& g* \7 q/ {
&gt; function foo1(name){8 ?# C  T2 ]9 {
console.log("Hi",name)7 f! D$ ]! I9 X( Z
}
7 S9 R& N: H* y$ u5 O& s+ {
6 U( `& _9 z: a+ T  q( i8 a&gt; foo1("Hans")
, W2 x, X8 A# h2 W: X0 XHi Hans+ e) P' }' _6 \9 _% n5 m4 I( u3 n
3 O8 ^* g! T" V5 l
&gt; var name = "Hello"0 \7 A5 L" R0 t7 S1 n7 {# `
&gt; foo1(name)0 y$ K$ g7 D$ _& p% {; {# @! X
Hi Hello
; H9 r6 |8 t. I% R# |
; J* N! @' l; i& U2 Z/ Q3. 带返回值函数
0 G+ ~; l9 e/ Q" |&gt; function foo1(a,b){
7 u5 [- r% A9 P; S6 ]        return a + b   $ F8 f6 m/ J- d9 a( [8 [# n
}9 B& `6 q9 B4 O# K2 ]$ j
&gt; foo1(1,2)! X4 X4 W! |5 O8 I
3
# A8 W) v1 ~  j. I; F, l% S5 L&gt; var a = foo1(10,20)  //接受函数返回值
6 S6 k# S7 u1 N&gt; a
" q9 M- J2 {) C' s' R+ x30* j& Y: J6 F3 R0 n
+ ~4 Z- K# J. w( ]/ x1 a) p
4. 匿名函数& }) x2 \' `( B. A
&gt; var sum = function(a, b){% @- i6 ^# h. X
  return a + b;
5 k% j( _( g' l4 _3 S, a4 p}( z! N9 ^' t+ H5 {0 ]
&gt; sum(1,2)" _  C6 O0 ]% t) c" Z" x3 \+ w
3
! J9 D) V: n% }
6 c0 I1 d# Z3 Y// 立即执行函数 书写立即执行的函数,首先先写两个括号()()这样防止书写混乱
+ o2 s- x1 l3 X2 F% _( _( X&gt; (function(a, b){
5 j: E) ^* s/ u7 V. _/ |  return a + b
; W5 k! K5 ?, O& B  d  J})(10, 20)' R( x8 r8 O9 l' ]6 S5 B
30
2 w2 R( W6 t' p; N, f) @; s
( Y4 |+ V9 T" z: N1 j$ L5. 闭包函数
- B: O; Y$ u! a" U' ]( [; v// 内部函数可以使用外部函数的参数,这个内部函数就是个闭包函数$ D$ D$ t) R! T7 g$ g2 E! D1 z
var city = "BJ"  N9 a, D8 Y4 q" ^9 Y3 J
function f(){, {  G8 V/ L* Q" C' w( S2 w
    var city = "SH"" T9 ]! V; N7 w0 c  R% `# Z
    function inner(){
3 |8 ?5 k9 r% {; V        console.log(city). P/ D7 {1 C/ i1 e& _$ C
    }
1 E9 t7 ]  i' X% ]9 X" n    return inner1 y" C; z# M. j3 \
}/ T- H! |0 _% i" E+ V4 p
var ret = f()0 W9 A4 c4 g8 ~' A3 Y6 P# e) c) M
ret()
# h: N6 J; P  X5 F* M* m  V执行结果:
, k8 z/ ~% Q/ R1 v- b/ fSH
% n( d3 m" Z3 ?& R8 x
: i: d( A: ~- n( N</code></pre>; y8 q6 T6 B3 ]' E3 f  k
<p>ES6中允许使用“箭头”(=&gt;)定义函数。</p>
# i4 w: L" n6 @& E<pre><code class="language-javascript">var f = v =&gt; v;* h  u9 p8 v: q) P- `
// 等同于
8 ~' x- M( K% U: kvar f = function(v){
8 |+ ?: l; x1 ]/ ^& K7 Z1 j  return v;* E" v4 r+ L9 }2 m( e
}; C# ~" u2 }. g
</code></pre>
9 u( f; Z/ ^. M& Z& p<p><code>arguments</code>参数 可以获取传入的所有数据</p>; G& O' o. j5 F
<pre><code class="language-javascript">function foo1(a,b){5 m0 ~6 d* y" w$ g) E* i) w0 X; a
    console.log(arguments.length)  //参数的个数 " W# O2 o5 Z& d) O
    console.log(arguments[0]) // 第一个参数的值, p; x4 e7 v4 t, y
        return a + b   
% `& S) G/ P* f+ i% r9 F1 q}( D# s$ R& a8 N  u/ y
foo1(10,20)* n, v+ h! d7 t3 `. M: N. d" G; G- s5 l
结果:% r, e7 e9 v9 M
2          //参数的个数 9 Y9 ~" U. V# P: _+ |
10        // 第一个参数的值# a" B7 O! i4 L( y% I
30        // 返回相加的结果) A+ I/ A7 C6 o
</code></pre>
9 {+ q& X4 @, s1 t% E5 X, J  T<p><strong>注意:</strong>函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回</p># x  e: c& C5 v6 w+ \) N6 |' h
<h3 id="28-内置对象和方法">2.8 内置对象和方法</h3>7 s4 W; J$ ?* R+ h% b
<p><code>JavaScript</code>中的所有事物都是对象:字符串、数字、数组、日期等。在<code>JavaScript</code>中,对象是拥有属性和方法的数据。</p>
8 V- T$ E, a; a0 G- x6 A7 u<h4 id="281-date对象">2.8.1 Date对象</h4>
  V; U8 A/ g* `9 _, Q* D. [<pre><code class="language-javascript">&gt; var data_test = new Date()! U, i( W' P/ D  s
&gt; data_test0 e! U9 [( p& b) B) T
Fri Feb 11 2022 21:44:43 GMT+0800 (中国标准时间)5 C' s+ K0 a1 z
&gt; data_test.toLocaleString(): S% }4 \$ h! M% E
'2022/2/11 下午9:44:43'
/ C7 p+ f1 n0 b0 h, c, Z' m; e( ]/ B7 A2 j! d/ l
&gt; data_test.toLocaleDateString()! H- Z) v- p1 C4 i
'2022/2/11'% N; j1 C  }- s$ K; c

5 A3 w3 k7 ^$ T. S6 |&gt; var data_test2  = new Date("2022/2/11 9:44:43")/ g9 M+ N6 Z! u/ B* h
&gt; data_test2.toLocaleString()/ N# k2 c2 Z  }( w& R# t4 ?
'2022/2/11 上午9:44:43'! a4 w- C2 W& i4 L1 _8 Q! P

1 Z" Z+ t! h6 t$ @8 `/ p// 获取当前几号& ^, M/ ]+ j$ |. J3 E
&gt; data_test.getDate()
  p5 c6 ]) B: x& V& ~11
+ h# h5 K( Z& X& @1 D( i// 获取星期几,数字表示3 s: G( q8 o# g) D0 v
&gt; data_test.getDay()  
' t! D8 F' P: ]) [4 \4 C2 s' V2 G5
" |+ O6 F2 d# w$ X1 ]// 获取月份(0-11)
2 \1 I: ~6 L0 K8 R( G&gt; data_test.getMonth()% K: P/ u( a2 v' z4 _2 {# }; z
1
( f+ g. g  T! B4 q$ M  s// 获取完整年份) S/ c  q0 l7 H
&gt; data_test.getFullYear()6 s& K5 D- t. M
20225 U' _2 @; e+ P$ Y- q2 Z. E
// 获取时
' O4 R0 ^/ e" d  p5 x: t&gt; data_test.getHours()
  ^! p+ Y/ g4 y  N5 L21! ^2 g6 z. j5 Y' T- k% i0 d% S! ?
// 获取分  J' V/ V: v- }% ^- M! E
&gt; data_test.getMinutes()" u6 z6 h6 Q% h: M$ _2 f) _
441 R9 K- f# f& o  \# q- M3 R
// 获取秒
# }$ n4 t1 L- K: p, h. \3 \7 R( \&gt; data_test.getSeconds()
' U1 ?. U" q; U/ R; v) F2 ^43
0 u7 J) C1 R( a/ Q2 h// 获取毫秒
, Z% Z! m1 p* E( a&gt; data_test.getMilliseconds()' p4 [+ Z0 K! u5 G7 O3 t$ m
2909 P+ c# }8 p) k+ m
// 获取时间戳
, g# u, Z: ]+ b1 v&gt; data_test.getTime()! J( K: N0 _1 C3 _
1644587083290
3 K* @: n9 L0 [. y' L</code></pre>
9 ?7 Q# \$ q2 E  {- t/ i  b<h4 id="282-json对象">2.8.2 Json对象</h4>
: h7 E2 w/ k$ }$ t4 \<pre><code class="language-javascript">JSON.stringify()  // 序列化, 把对象转换成JSON字符串
3 h$ b. x8 G6 Y( d* c! \+ YJSON.parse()  // 反序列化,把JSON字符串转换成对象6 P% C, R7 W: B6 `; L
% n0 h/ T5 c+ X* `" U
// 序列化6 _# q8 e/ N% \  ?; t: t
&gt; var jstojson = JSON.stringify(person) 5 @7 r4 [9 G9 u4 ?. I$ S9 f
&gt; jstojson  
% Z4 F+ @/ d, e3 z& x3 ~  c'{"Name":"Hans","Age":18}'
5 q( X2 D/ K5 B5 I: g; g7 D0 x& Q* p: H/ W
// 反序列化/ ^+ }( U: r! J
&gt; var x = JSON.parse(jstojson)2 V  ^  i4 C9 n( v: ?
&gt; x
5 M. f$ n6 @! W) K  `3 N8 x{Name: 'Hans', Age: 18}) K9 ^" T  U+ R$ O
&gt; x.Age- D9 D$ l4 V# ~: B5 i4 A
18
  M+ N+ D& o& g4 o</code></pre>
9 e; X, R+ d0 v1 l<h4 id="283-regexp对象">2.8.3 RegExp对象</h4>0 v& J, d" L5 X8 U
<p>正则</p>/ r; s* y  W% W# M
<pre><code class="language-javascript">&gt; var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{4,7}");7 v) g% E: F" Q; s. u6 u
&gt; reg17 H9 y. j: V3 h1 O
/^[a-zA-Z][a-zA-Z0-9]{4,7}/
; S7 \+ P( P  ], }&gt; reg1.test("Hans666")/ I: M1 ]" [% w$ ?( k' Y# n2 \
true
$ M2 [  M9 V5 Q+ p* \6 o9 M3 N8 j4 m  \. b
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/  // 推荐这种写法使用 /正则/0 \+ x, h$ [  D2 d' c/ n
&gt; reg2! m9 |6 B7 @' h0 f! y6 M+ V
/^[a-zA-Z][a-zA-Z0-9]{4,7}/4 J' a( _. C# v+ E1 Z- J
&gt; reg2.test('Hasdfa')4 H! L, L/ C: A$ `' j
true+ ]+ ]1 c2 O/ m
5 A5 U0 y& ~1 }0 F
全局匹配:
( g; M3 D/ u; \) T4 F+ r&gt; name
: p$ J2 t3 D- Z' O. {'Hello'6 z3 y  H: {" z
&gt; name.match(/l/)
5 k1 L& V( K, W" o8 A' N  p/ [9 c9 j* P['l', index: 2, input: 'Hello', groups: undefined]- w* Y/ f7 H& ^6 a9 x# R- q/ S. L

& g7 t* `5 L) \+ Q( A&gt; name.match(/l/g)5 L& Z" [4 Z- ?7 R
(2)&nbsp;['l', 'l']
& V$ J- c8 N2 Z8 c0 Y// 正则表达式的最后不加g则表示匹配成功就结束 加g表示全局匹配
$ `" v, \! |6 |& f
" v  T8 T5 x5 X: W2 z全局匹配注意事项:. |4 C% p7 n+ i  p6 _
&gt; var reg2 = /^[a-zA-Z][a-zA-Z0-9]{4,7}/g
# W) T! A( ]/ Y) y1 ?1 D&gt; reg2.test('Hasdfa')
; Z* Y$ d- P4 L. E) ftrue
, R' ^7 z9 r% A+ }- ]& V' L&gt;reg2.lastIndex;
3 D  E% h9 w  y" m3 I! Y* J6
% w9 Z2 O- a" i% U&gt; reg2.test('Hasdfa')
/ z. U' y6 J3 j3 ofalse$ v* [5 O* c3 _6 l9 z4 f2 d! Y# `
&gt; reg2.lastIndex;* i6 c+ [) w# u# v8 {" S
0  ~; ]$ y3 d4 x% g
&gt; reg2.test('Hasdfa')
" E1 x; M4 L; R5 w; w; E# dtrue
+ h; g. h! ?6 L2 i&gt; reg2.lastIndex;
$ o7 Z. o; D9 f  I1 [* K6
4 [3 E8 l7 T8 \) e4 v0 r&gt; reg2.test('Hasdfa')& U5 \* Y$ ?$ \) F; _0 Q
false
2 d8 C' n9 p, Y" c&gt; reg2.lastIndex;
" X% F) y# K$ ]$ f0
: w9 R- G9 S8 O4 A3 z. M- W- t* h* L' V5 `// 全局匹配会有一个lastindex属性
- C$ ^! F1 k+ {&gt; reg2.test()
4 s# ^$ @( T: B9 o7 K! w0 n6 E; M% Ifalse0 v  e& |  \# b3 Z% r
&gt; reg2.test()& s7 l! _9 S' _+ `2 x, l# m) \/ E
true8 F1 r# C, P' Q. l3 m
// 校验时不传参数默认传的是undefined
4 X& q# S$ _- M9 \  y, B</code></pre>
: l1 E" m4 ]% j) W9 q# N3 k. L% W<h4 id="284-自定义对象">2.8.4 自定义对象</h4>
$ i+ @2 U* v+ j<p>就相当于是<code>python</code>中的字典</p>
: Z" ~: G# P% k, W6 l1 P  ]<pre><code class="language-javascript">&gt; var person = {'Name':"Hans", "Age":18}/ R2 \  @: ^, b9 ~( x7 I
&gt; person
* S, U: I3 @6 b% j7 h( J) M{Name: 'Hans', Age: 18}/ L: C  u9 d7 o
&gt; person.Name
1 u+ z- q9 o. ^) A'Hans'
  X9 \; t5 E" i% g&gt; person["Name"]5 i( i' J( r$ l8 ~9 v
'Hans'2 i0 O5 ^& R" O0 @
2 z' g1 f) L9 }! U; U* O4 V. G3 T
// 也可以使用new Object创建) |' @  ^' z! k3 D, \
&gt; var person2 = new Object()2 c! V/ h1 R+ i# p6 {" V' l5 F
&gt; person2.name = "Hello"
: d) z, j! t( o9 E* J: ?3 D'Hello'& a) y' J0 T8 R  h6 j2 h
&gt; person2.age = 20
9 d) K# [& w, v2 i5 E20* Y5 y3 R. y3 i( Q, Y, W
</code></pre>
+ I7 @: [  m1 K& q7 R* {4 E$ {: j<h2 id="3-javascript-bom和dom操作">3. JavaScript BOM和DOM操作</h2>7 \7 p* X& s2 B
<p>BOM(Browser Object Model)是指浏览器对象模型,使用js操作浏览器。</p>
$ `# f" [1 K/ |6 t# K/ v, z<p>DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。使用js操作前端页面。</p>4 f4 M0 q" S. G$ Q) @' Q
<h3 id="31-window-对象">3.1 window 对象</h3>
& t, d0 @* X1 s) O: L: M<p>所有浏览器都支持 window 对象。它表示浏览器窗口。</p>
; Y  t5 h% k$ I) r: l1 |<pre><code class="language-python">//览器窗口的内部高度
0 Y; b6 L' g' T( S! y& Ewindow.innerHeight
; h' u% |  D3 S" Y* U! D+ w/ Y706
2 y2 J+ x) U' n! }( q//浏览器窗口的内部宽度
, J6 n: c, x6 P- ~window.innerWidth; {1 X  n6 X5 b% R. H2 B% t: N
1522: q  x: |% G! P% G2 @
// 打开新窗口9 E2 X6 B2 B/ w0 {& m$ |' _% c: p
window.open('https://www.baidu.com')
* K" |( R. a2 x5 o" n: BWindow&nbsp;{window: Window, self: Window, document: document, name: '', location: Location,&nbsp;…}1 \/ A0 \5 u- p8 c- G, x+ p
// 关闭当前窗口
. D6 t" K6 Y: \" p3 R: T' gwindow.close()
& E" q% R/ F) v//  后退一页
2 j' t: b( f1 R5 fwindow.history.back()0 x& E$ Z" ]6 |) T% X7 [
// 前进一页
0 S( f4 _% L/ `; ]window.history.forward()
7 Z9 A7 r) \8 s7 n2 {# b+ g//Web浏览器全称
% m2 t' @. Y6 \. b! [window.navigator.appName
, J6 \' [5 ^- _2 _  Q8 L# r'Netscape'2 R7 C# L' g7 y9 ?: [) ~' D1 E
// Web浏览器厂商和版本的详细字符串
3 f2 \3 i! t. X8 `$ ]window.navigator.appVersion
: E* b6 e$ J; T$ o'5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'# A( M6 V/ ~4 A) i0 w6 l) c$ L
// 客户端绝大部分信息
; w2 X, l  {. Y8 M: V% ?window.navigator.userAgent
" k$ M" H  p( E'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36'
, e6 D; y, S3 O0 @// 浏览器运行所在的操作系统% F+ C. m. C/ S8 Q6 }! B
window.navigator.platform
0 u3 o; g! |  `'Win32'
$ U! K5 r0 z3 b6 b/ i6 b/ ^" k5 l7 [5 w
//  获取URL8 b5 K$ I7 Y; `
window.location.href
0 a! d/ W5 Q1 D// 跳转到指定页面  `* b7 v/ B5 t3 N! z7 D
window.location.href='https://www.baidu.com'
7 y1 T0 K, A! p' b! @) x( `// 重新加载页面
8 y; G! E6 B8 [- W" a* Swindow.location.reload() ! m; @3 l. p/ B7 V; h' ]* q2 [7 m
</code></pre>' c6 S: Q) R6 ?
<h3 id="32-弹出框">3.2 弹出框</h3>
* |4 M; e+ R9 n0 ]1 y5 N1 F" W) ?<p>三种消息框:警告框、确认框、提示框。</p>2 j; u, _) s+ \9 i
<h4 id="321-警告框">3.2.1 警告框</h4>
8 V6 i# D( \7 q( I2 B: B/ |: X! G<pre><code class="language-javascript">alert("Hello")2 V9 s4 K1 s) U$ ?: b. C
</code></pre>
1 P6 I6 Z# j$ c; P: X9 p<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225243640-1572156192.png" ></p>
' D" P/ L: s$ y2 j5 D- d, }6 u<h4 id="322-确认框">3.2.2 确认框</h4>; l9 g/ w8 f( s; y
<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225205414-770035518.png" ></p>8 o, }' z& \7 Q
<pre><code class="language-javascript">&gt; confirm("你确定吗?") // 点确认返回true- {+ K( k: C9 s/ A! ~% N
true1 G" _; X% J$ N0 V' Y
&gt; confirm("你确定吗?")  // 点取消返回false
. [: ~) v! ?6 q, {false
$ X# ~- b6 e8 s+ q+ F8 P% D" V</code></pre>: v( r$ z' g7 D- l+ J
<h4 id="323-提示框">3.2.3 提示框</h4>/ I6 Z+ O7 M/ A$ ?7 p9 E4 p! I/ a
<p><code>prompt("请输入","提示")</code></p>
9 [0 W2 C1 ]/ B4 e3 L1 ~<p><img src="https://img2022.cnblogs.com/blog/723171/202202/723171-20220211225311668-600169621.png" ></p>  w6 a% {0 O" v& Z6 D  M4 m  M
<p>如果直接点<code>确定</code>后端得收到提示两个字,也可以删除输入自己想输入的内容、</p>, Y1 Q* C/ M* }4 i- ~$ l5 [
<p>如果直接点<code>取消</code>后端收到<code>null</code></p>+ u* T  o  q; G+ k* o8 C0 o" ~
<h3 id="33-计时相关">3.3 计时相关</h3>
" V0 X( r* x) V; X. N. S<p>在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。</p>$ i1 h$ k$ `! {3 s
<pre><code class="language-javascript">// 等于3秒钟弹窗
7 D7 {( b+ i8 b1 p0 ]) ~' @" M' ZsetTimeout(function(){alert("Hello")}, 3000)
  j# t, I' V) b( [) q0 I# u- i6 {, M0 Q# @) l& a+ D
var t = setTimeout(function(){alert("Hello")}, 3000)
' Z' {5 V( p' A3 n: u% g/ S/ S& c! d$ e6 R/ e/ s, o3 ~
// 取消setTimeout设置
7 w6 F( C  I. q/ ^1 R; ^+ WclearTimeout(t)  t' W) ?  o( m
</code></pre>
) t$ N& @$ k, W* v+ y<p><code>setTimeout() </code>方法会返回某个值。在上面的语句中,值被储存在名为 <code>t</code> 的变量中。假如你希望取消这个 <code>setTimeout()</code>,你可以使用这个变量名来指定它。</p>" _# \2 W& o0 `) A6 |, R4 `
<h4 id="331-setinterval--间隔指定的毫秒数不停地执行指定的代码">3.3.1 setInterval()  间隔指定的毫秒数不停地执行指定的代码</h4>
. J" V1 t+ O2 G  W( `9 F<pre><code class="language-javascript">每三秒弹出 "hello" :
+ a& \: ^! w  X5 T5 @7 QsetInterval(function(){alert("Hello")},3000);) O3 x6 j# n. |
</code></pre>
9 e# b% d; z2 F+ k' s7 Q; e8 p  d<p>取消使用<code>clearInterval() </code>方法.它用于停止 <code>setInterval() </code>方法执行的函数代码。</p>
3 o; q" I% R! O& H' y. l<pre><code class="language-javascript">var t = setInterval(function(){alert("Hello")},3000);
$ A/ h0 v' c1 c- f# W' h7 {# D5 h//取消:3 F& ]7 f& o( V$ J# `$ _3 A2 ?# d
clearInterval(t)) @& ]# X: {* ?5 ?
</code></pre>
9 j) A* d. D2 B/ |+ Q& v5 A: y5 u2 ], K4 v+ N/ w) |3 q
回复

使用道具 举报

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

本版积分规则

手机版|飞雪团队

GMT+8, 2025-12-9 21:03 , Processed in 0.072545 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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