十一、内置对象
第一部分:内置对象
(一)内置对象导读
(二)内置对象的概念
JS中,对象分三大类:自定义对象,内置对象,浏览器对象
前面两种对象时JS基础内容,是ECMAScript.第三个浏览器对象是JS独有的.
内置对象,比如手机自带的功能就是手机的内置对象,我们不关心它的具体实现过程.
内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法).
内置对象最大的优点就是帮助我们快速开发.
JS中的常见内置对象有:Math,Date,Array,String等
(三)学会查阅MDN文档
学内置对象最有效的学习方式就是查文档,用MDN查.
Mozilla开发者网络(MDN)提供了有关开放网络技术(OpenWeb)的信息,包括HTML,CSS和万维网以及HTML5应用的API
查阅到的是对象,那该如何学习对象中的方法?(步骤)
-
查阅该方法的功能.
-
查看里面参数的意义和类型(带中括号的参数指的是可以有也可以没有).
-
查看返回值的意义和类型.
-
通过demo进行测试
这个文档也可以通过中文查阅
第二部分:Math对象
(四)Math对象
Math对象不是构造函数,它具有数学函数和常数的属性和方法,跟数学相关的运算(求绝对值,取整,最大值等)可以使用Math中的成员.
-
最大值方法
Math中的属性和方法都是静态的,可以直接使用,无需new
如:
console.log(Math.PI); //属性 console.log(Math.max(1,99,3)); //方法
Math.max里面如果没有传参数,则返回-Infinity.如果传递了非数值参数,结果为NaN
-
封装自己的数学对象
案例:利用对象封装自己的数学对象,里面有PI,最大值,最小值.
var myMath={ PI: 3.1415926, max: function(){ var max=arguments[0]; for(var i=0;i<arguments.length;i++){ if(max<arguments[i]) max=arguments[i]; } return max; }, min:function(){ var min=arguments[0]; for(var i=0;i<arguments.length;i++){ if(min>arguments[i]) min=arguments[i]; } return min; } } console.log(myMath.PI);
-
绝对值
console.log(Math.abs(1)); console.log(Math.abs(-1)); console.log(Math.abs('-1')); //输出还是1
绝对值方法中存在隐式转换,会将字符串转成数值.
-
取整方法
Math.floor(1.1); //输出为1,向下取整 Math.ceil(1.1); //输出为2,向上取整 Math.round(1.1); //输出为1,四舍五入 .5往大取,Math.round(-1.5)==-1
-
随机数方法random()
Math.random();
它随机返回一个[0,1)之间的小数.
如果想得到两个数之间的随机整数:
Math.getRandomInt(min,max);
也可以自己重写方法,完成自己的随机函数:
var arr=['张三','李四','王五','赵六']; function getRandom(min,max){ return Math.floor(Math.random()*(max-min+1)+min); } var num=getRandom(0,arr.length-1); console.log(arr[num]);
(五)Math案例:猜数字游戏
function getRandom(min,max){ return Math.floor(Math.random()*(max-min+1)+min); } var num=getRandom(0,10); while(true){ var mynum=prompt('请猜数字')-0; if(num==mynum) break; else if(num<mynum) alert('太大了'); else alert('太小了'); } alert('猜对啦!!');
第三部分:Date对象
(六)Date日期对象
Date要通过Date构造函数来创建对象,必须new才能用.
var date=new Date(); console.log(date);
输出为当前时间
里面可以有参数,常用的写法为:
var date1=new Date(2019,10,02); var date2=new Date('2019-10-1 8:8:8');
里面输入的如果是数字,月份一项会默认从0开始记.如果输入的是1-12,则实际结果会比输入的大1
因此最常用的是字符串
(七)格式化日期
手动书写日期格式,就是日期的格式化.
常用的日期方法:
-
getFullYear():获取当年
-
getMonth():获取当月(0-11)
-
getDate():获取当天日期
-
getDay():获取当天星期几(0-6),周日是0,剩下的从1到6.
-
getHours():获取当前小时
-
getMinutes():获取当前分钟
-
getSeconds():获取当前秒钟
如:
var date=new Date(); console.log(date.getFullYear()); console.log(date.getMonth());
如果想要20xx年 xx月 xx日的格式,则需要:
var date=new Date(); var year=date.getFullYear(); var month=date.getMonth()+1; var day=date.getDate(); console.log('今天是'+year+'年 '+month+'月 '+day+'日');
时分秒同理.
也可以获取总的毫秒数,从1970年1月1日至今的毫秒数:
var date=new Date(); console.log(date.valueOf()); console.log(date.getTime()); //这两个的都是获取当前毫秒数. //简单写法:(最常用的写法) var date1=+new Date(); //它的返回值就是总的毫秒数 //最最简单的写法: console.log(Date.now()); //直接获取现在的毫秒数,不创建对象
总的毫秒数也叫时间戳,因为只要盖了这个戳,就是独一无二的,不会再重复.
(八)倒计时
做一个倒计时效果
用输入的时间减去现在的时间,就是剩余的时间.
注意,不能用时间直接相减.要用时间戳,1970开始的两个时间毫秒数相减.
function countDown(time){ var nowTime=+new Date(); var inPutTime=+new Date(time); var times=inPutTime-nowTime; var second=parseInt(times/1000)%60; second=second<10? '0'+second : second; var minute=parseInt(time/1000/60)%60; minute=minute<10? '0'+minute : minute; var hour=parseInt(time/1000/60/60)%24; hour=hour<10? '0'+hour : hour; var day=parseInt(time/1000/60/60/24)%365; day=day<10? '0'+day : day; console.log(day+' '+hour+' '+minute+' '+second); } var date=new Date('2022-8-1'); countDown(date);