速通Javascript
参考资料:web前端开发全程实战
web全栈开发从入门到实战——董雪燕
快速入门JS基础知识
前言
JavaScript是一门实现用户与网页交互的编程语言,与HTML和CSS并称为前端三剑客,主要负责给网页加点灵魂,让其可以与用户交互,这种交互称为事件!基础知识包括变量和常量、数据类型、运算符和表达式、基本控制结构、函数、对象的基本用法!
前端三兄弟的作用
HTML和CSS是一种标记语言,通过标识符号去说明需要的功能,主要运用在网页中展示内容和定义样式,生成静态的网页,也就是内容不可增删,而JavaScript是一门编程语言,可以控制元素的增删,可以控制样式的改变,还可以控制浏览器,从而动态的更新页面中的内容,制作动画特效等交互任务!
引入到HTML文件中
可以内嵌式,把JS代码放在<sript></script>标签对内,一般放置在</body>前,也可以像图片标签一样,通过<script>标签和src属性,引入外部的JS文件,<script src="js.js"></script>
JS工作原理
javascript是运行在浏览器中的一门编程语言,通过浏览器编译执行,实现网页上的一些交互效果!是一门解释型语言,也就是说,运行时才被编译,逐条语句的编译和执行,这样的语言优势是可以跨平台,缺点是运行速度比较慢,一条有错,下面的语句就无法执行!
交互功能原理
交互功能的核心原理是事件驱动模型,通过页面中的元素,或者浏览器等去设置触发事件,相当于是设置一个陷阱或者夹子,浏览器作为被动监听,一直在捕捉行为,当用户或者浏览器与网站中设置的陷阱有交互时,网页就会动态的生成内容,变化页面等,使页面具有一种交互性,动态性!
JS的核心任务就是弄清除用户或系统,怎么与网站实现交互的!
驱动模型三要素
事件源、事件、事件驱动程序
比如,我用手去按开关,灯亮了。
- 事件源是:开关
- 事件是:按开关。
- 事件驱动程序是:灯的亮与灭。
事件源,就是引发后续事件的物体,比如网页中的元素,事件是规定好的一系列行为,比如鼠标单击,事件驱动程序就是我们学习的重点,也就是网页的动态改变,包括改变网页中元素的内容、属性、样式等!
编程思维
先是需求分析,然后提出解决实际问题的方案,需要思考你的程序要实现什么目标,包括哪些功能,细化到一个函数解决!把一个问题想出一套解决方案,这个方案充满因果逻辑关系,不同阶段存在不同的过程,最后完整的解决问题!先干什么、后干什么,如果发生生成,才干什么!
涉及的逻辑结构
顺序结构:一条接一条指令,顺序执行;选择结构:根据情况判断,是否执行,什么条件下执行;循环结构:重复做某事,相当于把这些事,按照顺序复制了N份,直到满足某个条件才停!
注释
单行
//多行
/* */
打印
一种方法,已经被定义好的方法,属于Window对象或者Document对象里的方法,直接使用!
alert('打印内容');浏览器弹出框
console.log('打印内容');控制台
document.write('打印内容');页面中
JS基础知识
存储数据
可以看作是存储值的容器,相当于空盒子或者水杯,在计算机中,有很多长相一样的容器,可以把写的程序和数据都放进去,为了方便拿取这些数据,需要给每个容器取名字!
变量中存储的值,在程序运行过程中可以改变,常量中存储的值,一旦定义好,后续无法改变
定义变量
指定名称(标识符),通过赋值符,把右边的数据临时存储起来,关键字let、var
let 变量名; // 只声明 |
标识符(取名)
也就是名称的专业术语,一般采用驼峰命名法,下画线分词法、中画线分词法等
并遵循一定规则:
- 第一个字符必须是字母、下画线、或美元符号
- 其它字符一般是ASCII字符
- 不能与关键字、保留字重名
值
包括数值、字符串、布尔值、数组、对象、函数!也就是各种数据类型的值!
定义常量
一旦设定,无法修改的量,关键字const
const pi = 3.141592 |
数据类型
值的分类
全部分成六种基本数据类型,数值、字符串、布尔、对象、空、未定义!
数值
Number:十进制,科学计数法,其它进制0x 0o字符串
String:一切以单引号’ ‘或双引号“ ”包裹的内容布尔
Boolean:ture或false两个值,其中undefind、null、””、0、NaN、false都是假值;空
Null:赋值为null;未定义
Undefined:变量未赋值;对象
object:表示复合结构的数据集,包括对象、函数、数组等
类型检测
使用 typeof 关键字来进行数据检测,检测结果就是该数据的数据类型
typeof 待检测的值 |
类型转换
转数值——把其它类型值,转化为数值
Number();括号内待转值,结果为转换的数值,如果可以转,结果就是数字,不可以则是NaNparseInt();括号内待转值,结果为转换的数值,同理!当数字和文本结合时,一个一个字符读取转换,可以就转换成数字,不可以就停止,最终结果就是可以转换的数字!parseFloat();与上同理;能解析到小数部分!也就是可以识别第一个点!乘法运算符
*:其它数据乘1后,如果可以转,结果就是数字,不可以则是NaN
转字符串——把其它类型值,转化为字符串
String();括号内待转值,结果为转换的字符串.toString();前面填待转值,括号内不用填,结果为转换的字符串
转布尔——把其它类型值,转化为布尔
Boolean();括号内待转值,结果为转换的布尔值!除6种false,其它都是true!- 双重否定:使用逻辑非运算符
!,取反再取反,可以把值转化为布尔值!
运算符与表达式
算术运算
主要对数值间的运行,+ - * / %,++ -- - 单目运算
+:加法运算- 当两边都是数字,两边都是布尔,进行数学运算
- 当任意一边是字符串,进行字符串拼接,结果是个字符串
* / %只能进行数学运算!前置并参与运算时,先自增(减),再参与其它运算
后置并参与运算时,先参与其它运算,再自增(减)
逻辑运算
也就是布尔值的”算术运算“,&& || !——逻辑与、或、非,!是单目
- 逻辑与是一种短路逻辑,当左侧表达式为假,则直接返回运算结果,不再运算右侧的表达式!
关系运算(比较运算)
大小关系运算 > < >= <=、等值运算== === != !==,结果一定是布尔值
> < >= <=:== === != !==:==不考虑数据类型,只看值,===要考虑数据类型!
赋值运算
= += -= *= /= %=
一种是把等号右边的值赋值给左边的变量,一种是附加运算,赋值前先运算,再赋值!
条件运算——唯一三目
布尔型表达式 ? 值1 : 值2,运算结果为真时返回值1,运算结果为假时返回值2
typeof a!='undefined' ? a=a : a=0; |
可以转换成条件结构
if(typeof a != 'undefined') |
数据类型
字符串
""
字符串在web应用中,占据非常重要的位置,可以说我们交流的信息,大部分都是字符串!是网页内容的主要形式,这段文本信息必须用单引号或双引号括起来!
定义字符串值
用单引号或者双引号包裹任意长度文本,表示字符串值!单引号和双引号可以相互嵌套,如果需要在字符串中表示特殊字符,使用转义字符\,反斜杠加
连接字符串
把多个字符串拼接在一起组成一个字符串!使用+运算符
注意:当字符串与数值使用加号时,会先把数值转化为字符串,再进行拼接!
数组
[]
数组是指申请了一块连续的存储空间,相当于一个容器,用来存放一串有关联的值,比如一个班上的人的名字!如果使用单个变量,存在多个问题,第一是取变量名,第二无法反映数据之间的关系!
并且数组中,也允许存放不同类型的数据,数组大小是可以动态变化,灵活性强!
索引(下标):从0开始,依次加1;
声明数组
let 数组名 = [数据集合] |
利用javascript的内置Array对象
let 数组名 = new Array() // 空数组,也可以直接赋予初始值 |
let 数组名 = new Array(6) // 数组长度为6,即能存储多少个值! |
逻辑结构
默认是顺序执行,以及根据条件选择是否执行,以及根据条件循环执行多少遍!
分支结构
根据不同情况,做出对应的行为,首先是判断条件,然后是执行的代码块!
if语句
if(){}
根据()内的布尔型表达式,决定是否执行接着的内容!为真时,执行包裹的代码块!
()里面写的是条件,一般是逻辑运算、关系运算,运算的结果只有真或假两种情况;{}里面写的是当条件为真时执行的代码块,一般是处理命令,算法步骤;
if(){}else{}
根据()内的布尔值,为true时执行if后的{};false时执行与之相邻的else后的{}!
衍生
if(){}else if(){},构成关联,只会执行其中某一种情况,衍生
if(){}else if(){}else{},依次判断,都不满足,执行最后else的代码!无论一个任务有多少种情况,都可以使用这种结构实现
分支嵌套
某些情况下,使用逻辑运算,可以简化分支结构!
if(a > 0){ |
等价于
if(a>0 && b>0){ |
switch语句
switch(){case 比较值1: case 比较值2: }
根据()内的表达式的值,与case后表达式的、的值进行比较,完全匹配后,执行对应的代码!也可以改写成if第3种模式if(XX===OO){}else if(XX===PP){},本质执行的就是if语句!
switch(已知条件){ |
使用
break;
结束语句,跳出选择框!如果没有break;且其中某个值匹配,后面的语句直接穿透执行!即忽视后面case的值,直接执行case对应的语句!从第一个满足条件的位置向下穿透,直到出现break!
switch(已知条件){ |
使用
default:
在所有选项都不符合时,执行默认语句,相当于if语句中最后的else!
循环结构
while循环语句
while(){}
当()中为真,则执行{}内的代码块,依次执行结束后,再返回判断()中是否为真,直到表达式的值为假时,才跳出循环,也就意味着使用while()循环时,当()为真时,则开始循环;为假时,则结束循环;如果()一直为真不改变,则是死循环!
while(){}的使用
当()的布尔值与{}中的语句无关时,也就意味着()里面的值不会被改变时,其结果要么为真,则一直执行,要么为假,则从不执行,显然这两种状态都不是想要的,一般放一个待改变的值!
通常在()放入变量,一开始时为真,执行{}中的语句,并改变这个变量的值,当执行到想要的次数后,也就是()结果为假时,从而跳出循环!也就意味着()内一般是关于变量的关系运算、逻辑运算
while语句三步走
定义控制变量初始值多少
设置条件判断
执行语句中改变初始值步数
这三步共同来控制循环次数,且控制变量是呈规律的变化!利用规律的步长值参与到其它运算!
定义初始值; |
do-while循环语句
do{}while();一般情况可以与while(){}可以互换,不同的是,do{}while();是先执行{}中的语句,再判断(),{}中的语句至少执行一次,适合连贯的代码节奏!
for循环语句
for(){}
与while()一样,定义变量;条件判断;改变初始值,标准的循环三步骤,再加上要循环的代码!更简洁
执行顺序与while()一致,先定义变量,再条件判断,再重复执行的代码,再改变初始值!往复的在循环体前执行条件判断,再循环体后执行改变初始值!
for()中的小括号,把
(定义变量;条件判断;改变初始值)三要素包裹在一起,{}放重复执行的代码!执行顺序与
while()一致,优势是避免忘记设置改变初始值,避免死循环!可以嵌套使用!
循环嵌套的妙用
for(){for(){}}
当两层循环嵌套,外层循环的初始变量,作为内层循环的判断条件时!
外层循环,通过初始变量,实现控制内层循环的循环次数,通过外层循环变量的步长,来控制内存循环次数呈规律重复次数!
- 内层
for()的条件判断,i<=j是由两个变量构成,共同来控制循环次数,重点是右侧的j是变化的,也就意味着,内层的循环次数,也是由外层初始变量控制!即第1次执行外层,内层循环1次;第2次执行外层,内层循环2次;第3次执行外层,内层循环3次; - 到最后,外层执行一次,内层执行9次!外层执行一次,内层执行
j次!
for的其它循环语句
for(变量 in 对象){}
可以实现遍历对象,把数组或者字符串的索引,或者对象的属性,赋值给变量,然后执行循环体!
循环次数与对象的值的个数有关
for(变量 of 对象){}
可以实现遍历对象,把数组或者字符串的值,或者对象的属性值,赋值给变量,然后执行循环体!
流程控制
label语句
可以为一行语句添加标签,设置跳转目标
label: 标签名; |
break语句
结束当前循环或者switch分支语句,同时可以接受一个可选的标签名来跳出结构语句!
continue语句
在循环结构内,跳过本次循环中剩余的代码,转到判断条件!同时可以接受一个便签名来跳出循环!
异常处理器
try/catch/finally语句
按顺序执行,先执行try,如果没有异常,则忽略catch子句,跳转到finally子句
try{ |
如果try中有错误,则执行catch子句,同时传入一个参数,可以在catch填写个形参,接受其值!
一般都包括tr、catch子句,finally子句是可选的!
throw语句
主动抛出异常,JavaScript会停止程序正常执行,并跳转到最近的catch子句,如果没有将显示错误!
数据类型
函数
function
可以看成是种数据类型,只不过可以存储一大段代码块,这段代码块通常是为了完成一个独立的功能,在使用时只需要通过函数名进行调用!
用function关键字定义,分定义和调用!
- 函数定义阶段(声明函数):把代码装进盒子,不执行函数体内代码
- 函数调用阶段:把盒子里面的代码执行
定义阶段
关键字function后写函数名,()内可以放变量,叫做形参,{}内可以存放代码。
function 标识符函数名字(){ |
- 形参是个特殊的变量,只能函数内部使用,值由调用时,实参决定!
调用阶段
函数名();:调用函数时,就能执行{}内的代码,()可以输入值,叫做实参,也就是给形参赋值!某些函数运行后可以返回值!也就是调用函数后的运行结果!
为什么需要函数
函数可以把实现一种功能,或解决一类问题的代码块存储起来,通过一个函数名就可以调用这一长串代码,用来完成某项任务或者计算,通常把实现某种具体功能的代码封装在函数{}内,比如求阶乘,求最小公倍数。一个函数解决一类问题,只需要输入值,就能输出计算后的结果!
return 值;
当函数有返回值时,可以把函数本身看成是一个值,调用函数时,相当于一个加工工厂,一个有输入,有输出的值!可以把这类函数参与到其它运算中!
这才是函数最重要的功能之一,像一个处理工厂,给原料,就能加工成成品!当然这种函数通常只加工!只处理运算,运算结果只存在于计算机内存中,要想使用输出的结果,还需要另外的代码处理!
没有返回值时,主要把函数看成一个完整功能,有返回值时,可以把函数制当成一个值(处理值的值)!
带有返回值的函数
当函数调用时,添加结果!作为函数的返回值!即运算后是一个值!又变成了一个数据!
像算术运算,+、-、*、/都可以看成是一个函数,运算符两边是输入,返回运算结果!
匿名函数
不需要为函数指明名字,这种函数不能通过名字进行调用执行,通常这类函数与事件绑定在一起,当事件发生时,这个绑定的函数就会自动执行!匿名函数只用出现一次,也就是定义时,而普通函数至少出现两次,一次是定义,一次是调用才执行!总之就是调用方式不一样!
对象
{}
可以看成是变量的集合,用于现实中更复杂的事物,具有属性特征、行为特征,比如洗衣机可以洗衣服,还可以放入洗衣粉和衣服,完成洗衣服的操作!比如老师有姓名年龄、授课科目等属性特征,还会说话等行为!
描述属性特征,使用一组键:值对,name:value用冒号分开!
其中描述行为特征,使用函数作为值,在对象中的函数,称为方法!
创建对象:
let 对象名 = {}
使用大括号{}包裹很多属性,每一个属性都是一个键值对,就是名:值,对象相当于键值对的集合!可以是数值、字符、数值、函数,多个属性用逗号隔开,最后一个属性没有逗号!
let teacherYan = { |
访问对象的值
- 通过点位符,
teacherYan.name;,执行对象中的属性时teacherYan.selfIntro(); - 通过指定键名,
teacherYan['name'];
this
对象中的方法,使用对象中的属性时,为什么要用this?因为方法内部只认全局变量、局部变量、形参,使用this是告诉方法,到对象内属性中找!
方法
方法需要和属性配合,完成对属性变量中值的修改,或访问值来实现其它功能!切记,方法与属性必然有联系!
对象的特征
主要包含两部分,属性、方法,通过一系列的变量来声明属性,通过函数来声明方法
原装对象及方法
JavaScript提供了很多内置对象,共我们直接使用,以String对象、Array对象为例!
实例化对象
要想使用对象中的方法,必须先实例化,成为对象的儿子,或者复制一份对象,或者指向对象,反正与对象产生联系!使用关键字new,对象名后接一个括号,就创建了一个对象!新对象返回后,使用变量保存,这个变量就是实例,这个过程叫做实例化!
let hi = new String('hello world'); |
每个实例都可以调用对象的方法,并且每个实例间还可以不一样!在创建时可以赋初始值,这样每个实例又都不一样了,并且每个实例还可以自己创建新的属性!
接口API
JavaScript提供了很多内置对象,编程人员可以通过定义一个对象实例,就可以访问这些内置对象的方法和属性,而这些提前封装好的属性和方法,常常称为接口!
JavaScript进阶
通过内置对象,去处理字符串、数组,以及对函数、对象的深入了解!
数组常用方法
帮助我们对数组进行快速操作,记住就行,没有逻辑
push()方法,将数据追加到数组末尾- 语法:
数组.push(数据) - 返回值:数组最新的长度
- 语法:
pop()方法,删除数组末尾数据- 语法:
数组.push() - 返回值:被删除的数据,一个数据值!
- 语法:
unshift()方法,数组最前面添加一个数据- 语法:
数组.unshift(数据) - 返回值:数组最新的长度
- 语法:
shift()方法,删除数组最前面的数据- 语法:
数组.shift() - 返回值:被删除的数据,一个数据值!
- 语法:
reverse()方法,将数组反转- 语法:
数组.reverse() - 返回值:反转后的数组,一个数组
- 语法:
splice()方法,删除数组中若干数据,并选择是否插入新的数据!截取并拿走,会改变数组- 语法:
数组.splice(开始索引,多少个,要插入的数据)- 开始索引:默认为0
- 多少个:默认为0
- 要插入的数据:默认没有,如果写的话,从哪儿删除,从哪儿插入
- 返回值:以数组的形式,返回被删除的数据
- 语法:
sort()方法,对数组进行排序- 语法有三种:
数组.sort(),结果为位排序数组.sort(function(a,b){return a-b}),传递一个函数作为参数,结果为升序数组.sort(function(a,b){return b-a}),传递一个函数作为参数,结果为降序
- 返回值:排序好的数组
- 语法有三种:
join()方法,将数组变成一个字符串,形式为数据+连接符,原数组无变化!- 语法:
数组.join(连接符) - 返回值:连接好的字符串
- 语法:
concat()方法,将其它数组和原始数组拼接在一起!两个数组合并成一个数组。- 语法:
数组.concat(其它数组) - 返回值:合并好的数组
- 语法:
slice()方法,截取数组中部分数据,相当于切片面包- 语法:数组.slice(开始索引,结束索引)
- 开始索引:默认为0
- 结束索引:默认为数组长度,注意是索引包括之前,不包括索引之后的数据。
- 返回值:以数组形式,返回截取的数据
- 语法:数组.slice(开始索引,结束索引)
indexOf()方法,查找数据,在数组中,的索引!- 语法:数组.indexOf(数据)
- 返回值:一个数字
- 有该数据,返回第一次出现的索引位置;
- 没有该数据,返回-1
forEach()方法,遍历数组- 语法:数组.forEach(function(item,index,arr){})
- 传递一个函数作为参数,数组有多少个数据,这个函数就执行多少次!
- item:数据的每一项
- index:索引
- arr:原始数组
- 返回值:无
map()方法,映射数组- 语法:数组.map(function(item,index,arr){})
- 添加一个映射条件即可,以return的方式书写
- item:数据的每一项
- index:索引
- arr:原始数组
- 返回值:映射好的数组
let arr=[1,2,3,4,5,6,7,8] |
filter()方法,过滤数组- 语法:数组.filter(function(item,index,arr){})
- 添加一个过滤条件即可,以return的方式书写
- item:数据的每一项
- index:索引
- arr:原始数组
- 返回值:过滤好的数组
let arr=[1,2,3,4,5,6,7,8]
let retnum=arr.filter(function(item,index,arr){
return item>5; //以return的方式书写过滤`条件`
})
console.log(retnum);every()方法,判断数组中,每个数据是否满足条件,都满足则返回ture- 语法:数组.every(function(item,index,arr){})
- 添加一个条件即可,以return的方式书写
- item:数据的每一项
- index:索引
- arr:原始数组
- 返回值:一个布尔值,代表是否每一项都满足条件
let arr=[1,2,3,4,5,6,7,8]
let retnum=arr.every(function(item,index,arr){
return item>5; //以return的方式书写判断`条件`
})
console.log(retnum); //返回falselet arr=[1,2,3,4,5,6,7,8]
let retnum=arr.every(function(item,index,arr){
return item>0; //以return的方式书写判断`条件`
})
console.log(retnum); //返回turesome()方法,判断数组中,是否有数据满足条件,有一个满足则返回ture- 语法:数组.some(function(item,index,arr){})
- 添加一个条件即可,以return的方式书写
- item:数据的每一项
- index:索引
- arr:原始数组
- 返回值:一个布尔值,代表至少有一项满足条件
let arr=[1,2,3,4,5,6,7,8]
let retnum=arr.some(function(item,index,arr){
return item>5; //以return的方式书写判断`条件`
})
console.log(retnum); //返回ture总结,前7个方法都会直接改变数组,后9个不改变原始数组!
字符串常用方法
字符串可以看成是数组,也是按照索性进行排列的,一个字符就是一个索引位置!这就是字符串的排列!
charAt()方法,获取字符串索引位置的字符,从索引是从0开始计数。- 语法:字符串.charAt(索引)
- 返回值:对应索引的字符
toLowerCase()方法,将字符串中字母全部转换成小写- 语法:字符串.toLowerCase()
- 返回值:转换好的字符串
toUpperCase()方法,将字符串中字母全部转换成大写- 语法:字符串.toUpperCase()
- 返回值:转换好的字符串
replace()方法,替换字符串,将字符串内,第一个 满足换下内容的片段替换成换上内容!- 语法:字符串.replace(换下内容,换上内容)
- 返回值:替换好的字符串
trim()方法,去掉字符串首尾空格!中间空格不会去掉!- 语法:字符串.trim()
- 返回值:去掉首位空格的字符串
split()方法,按照分隔符,将字符串,切割成一个数组!这个分隔符存在于字符串中!- 语法:字符串.split(分隔符)
- 返回值:切割数据后的字符串数组!
- 统一说三个方法,都是截取字符串,返回截取出来的字符串
substr()- 语法:字符串.substr(开始索引,==多少个==);
substring()- 语法:字符串.substring(开始索引,结束索引);
slice()- 语法:字符串.slice(开始索引,结束索引);
- 总结,都不会改变原来的字符串,以返回值方式使用!
数字常用方法
random(),获取0~1之间的随机小数,包含0,但不包含1,小数点后最多保留17位!
- 语法:
Math.random() - 返回值:0~1之间的随机小数!
- 语法:
round(),对数字进行四舍五入的取整!
- 语法:
Math.random() - 返回值:四舍五入后的整数
console.log(Math.random(10.4));
//打印10- 语法:
两个方法取整
Math.ceil(),向上取整- 语法:Math.ceil(数字)
- 返回值:向上取整后的整数
Math.floor(),向下取整- 语法:Math.floor(数字)
- 返回值:向下取整后的整数
pow(),幂运算
- 语法:
Math.pow(底数,指数) - 返回值:运算结果
- 语法:
sqrt(),算术平方根
- 语法:Math.sqrt(数)
- 返回值:运算结果
abs(),绝对值
- 语法:Math.abs(数)
- 返回值:运算结果
max(),最大值
- 语法:Math.max(数1,数2,数3···)
- 返回值:运算结果
min(),最小值
- 语法:Math.min(数1,数2,数3···)
- 返回值:运算结果
PI,Π值,这是个属性
- 语法:Math.PI
- 返回值:运算结果
时间常用方法
时间(Date)也是JS中的一个数据类型,通过时间对象创建时间实例!
创建时间变量,new Date()创建当前终端时间,new Date(代表年的数字,月,日,时,分,秒),注意月
let time = new Date() |
获取时间
- 时间对象.getFullYear(),获取年份
- 时间对象.getMonth(),获取月份,返回数值!0代表一月,以此类推!
- 时间对象.getDate(),获取日期
- 时间对象.getHours(),获取时
- 时间对象.getMinutes(),获取分
- 时间对象.getSeconds(),获取秒
- 时间对象.getDay(),获取星期几,0代表周日!
- 时间对象.getTime(),获取时间戳,单位为ms毫秒
设置时间
把上述get变成set,没有设置星期,是按日期自动匹配,带有与日期相关的数值参数!
- 时间对象.setFullYear(数字),获取年份
- 时间对象.setMonth(数字),获取月份,返回数值!0代表一月,以此类推!
- 时间对象.setDate(数字),获取日期
- 时间对象.setHours(数字),获取时
- 时间对象.setMinutes(数字),获取分
- 时间对象.setSeconds(数字),获取秒
- 时间对象.setTime(数字),把数字的时间戳单位为ms毫秒,转化为年月日时分秒,传递给时间对象




