JavaScript中的对象分为三种:自定义对象、内置对象、浏览器对象。
内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)。可以帮助我们快速开发。包括Math、Date、Array等。
它是内置对象,不是构造函数,所以不需要new来调用,具有数学常数和函数的属性和方法,直接使用里面的属性和方法就行,跟数学相关的运算(求绝对值、取整、最大值等)可以使用Math中的成员。
Math.PI
console.log(Math.PI); //输出 3.141592653589793
Math.abs(x)
console.log(Math.abs(-1))//绝对值,结果为1 console.log(Math.abs('-1'));//结果为1,隐式转换,会把字符串型-1转换为数字型 console.log(Math.abs('张三'));//结果为NaN
Math.pow(x,y)
console.log(Math.pow(2,2));//结果为4
Math.sqrt(x)
console.log(Math.sqrt(4));//结果为2 console.log(Math.sqrt(9));//结果为3
Math.random(),返回一个随机的小数,它的范围是[0,1),这个方法里不跟参数
console.log(Math.random());//结果为0.016698923240751062
得到两个数之间的随机整数并且包含这两个整数
function getRandom(min,max){ return Math.floor(Math.random()*(max-min+1))+min; } console.log(getRandom(1,10));
随机点名
//随机点名 function getRandom(min,max){ return Math.floor(Math.random() * (max-min+1)) + min; } var student = ['张三','李四','王五','赵六']; console.log(student[getRandom(0,(student.length-1))]);
猜数字游戏
// 程序随机生成一个1~100之间的数字,并让用户输入一个数字 // 1、如果大于该数字,就提示,数字大了,继续猜 // 2、如果小于该数字,就提示,数字小了,继续猜 // 3、如果等于该数字,就提示猜对了,结束程序 function getRandom(min,max){ return Math.floor(Math.random() * (max-min+1)) + min; } var random = getRandom(1,100); while(true){ var x = prompt("请输入一个数,看能不能猜对它"); if(x > random){ alert("数字大了,继续猜"); }else if(x < random){ alert("数字小了,继续猜"); }else{ alert("您猜对了"); break; } }
猜数字游戏升级版
//要求用户猜1~50之间的一个数字,但是只有10次猜的机会 function getRandom(min,max){ return Math.floor(Math.random() * (max-min+1)) + min; } var random = getRandom(1,50); for(var i = 1;i < 11;i++){ var x = prompt("请输入一个数,看能不能猜对它"); if(x > random){ alert("数字大了,继续猜"); }else if(x < random){ alert("数字小了,继续猜"); }else{ alert("您猜对了"); break; } }
向下取整,往最小了取值,返回小于或等于x的最大整数。
console.log(Math.floor(1.8));//结果为1
向上取整,往最大了取整,函数返回大于或等于x的最小整数。
console.log(Math.ceil(1.1));//结果为2
四舍五入取整
console.log(Math.round(1.3));//结果为1,四舍五入取整 console.log(Math.round(-1.1));//结果为-1 console.log(Math.round(-1.5));//结果为-1,其他数字都是四舍五入,但是.5特殊,它往大了取,所以当为负数是,取-1
Math.max():返回参数中的最大值
console.log(Math.max(1,99,3));//求最大值,会输出99 console.log(Math.max(1,'张三'));//如果有非数字型,会返回NaN console.log(Math.max());//如果什么都不写,会输出-Infinity
Math.min():返回参数中的最小值
console.log(Math.min(1,99,3));//求最小值,会输出1 console.log(Math.min(1,'张三'));//如果有非数字型,会返回NaN console.log(Math.min());//如果什么都不写,会输出-Infinity
封装自己的数学对象,里面有PI最大值和最小值
var myMath = { PI: 3.1415926, max:function(){ var max = arguments[0]; for (var i = 1;i < arguments.length;i++){ if(arguments[i] > max){ max = arguments[i]; } } return max; }, min:function(){ var min = arguments[0]; for (var i = 1;i < arguments.length;i++){ if(arguments[i] < min){ min = arguments[i]; } } return min; }, } console.log(myMath.PI); console.log(myMath.max(1,2,3)); console.log(myMath.min(1,2,3)); //结果为 3.1415926 3 1
Date()是一个构造函数,获取当前时间必须实例化,即必须使用new来调用创建我们的日期对象。
如果没有参数,返回当前系统的当前时间
var date = new Date(); console.log(date); //结果为: 2021-12-02T07:28:25.983Z//时间会比当前时间少八个小时,这是由于时区的不同造成的
如果括号里面有参数,则返回参数里面的时间,具体形式如下:
数字型:new Date(y,M,d,h,m,s):带参的构造,参数是年、月、日、时、分、秒
字符串型:new Date(dateString): 参数是日期字符串
注意:月份的整数值,从 0(1月)到 11(12月)
var date1 = new Date(2021,12,2,15,33,33); console.log(date1);//输入12月,返回的多了一个月 var date2 = new Date('2021-12-2 12:12:12'); console.log(date2); //输出为: 2022-01-02T07:33:33.000Z//输出的月份多了一个月,时间与当前时间相比少了八小时 2021-12-02T04:12:12.000Z//月份正确,但时间依旧与当前时间相比少八小时
需要获取日期指定的部分时,要使用下列方法:
A、getFullYear():获取4位年份
B、getMonth():获取0~11之间的月份
C、getDate():获取日期(一个月中的第几天)
D、getDay():获取星期几(一周中的第几天),0为周天
E、getHours():获取小时数
F、getMinutes():获取分钟数
G、getSeconds():获取秒钟数
H、getMilliseconds() :返回指定日期对象的毫秒数
//格式化日期 var date = new Date(); console.log(date.getFullYear());//返回当前日期的年 console.log(date.getMonth());//返回当前月份(0-11),所以会小一个月 console.log(date.getDate());//返回几号 console.log(date.getDay());//返回周几,它的周日是0,其他正常 //格式化日期 时分秒 var date = new Date(); console.log(date.getHours());//时 console.log(date.getMinutes());//分 console.log(date.getSeconds());//秒 console.log(date.getMilliseconds());//毫秒 //输出为: 2021 11 2 4 15 52 41 525
举例:我们写一个2021年12月2日星期四
//我们写一个2021年12月2日星期四 var date = new Date(); var year = date.getFullYear(); var month = date.getMonth() + 1; var dates = date.getDate(); var day = date.getDay(); var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']; console.log("今天是:"+year+"年"+month+"月"+dates+"日 "+arr[day]);//由于day输出的是星期索引,不符合我们需要得到星期几的习惯,所以我们采取数组的方式 //输出为: 今天是:2021年12月2日 星期四
举例:要求封装一个函数返回当前的时分秒 格式 00:00:00
//要求封装一个函数返回当前的时分秒 格式 08:08:08 function getTime(){ var time = new Date(); var h = time.getHours(); h = h < 10 ? '0'+ h : h; var m = time.getMinutes(); m = m < 10 ? '0'+ m : m; var s = time.getSeconds(); s = s < 10 ? '0'+ s : s; return h + ':' + m + ':' + s } console.log(getTime()); //输出为: 16:25:35
Date对象是基于1970年1月1日(世界标准时间)起的毫秒数,我们经常利用总的毫秒数来计算时间,因为它更加精确。
valueOf()
getTime()
+new Date()
Date.now()
//获得Date总的毫秒数(时间戳) 不是当前时间的毫秒数,而是距1970年1月1日过了多少毫秒数 //1、通过valueOf() getTime() var date = new Date(); console.log(date.valueOf());//我们现在时间距离1970年1月1日总的毫秒数 console.log(date.getTime()); //2、简单的写法(最常用的写法) var date1 = +new Date(); console.log(date1); //3、H5新增的 获得总的毫秒数(老版本可能不适用) console.log(Date.now()); //输出为: 1638433853305 1638433853305 1638433853312 1638433853312
toDateString():将日期转为字符
toLocaleDateString():将日期转换为本地日期格式的字符串
var date = new Date(); console.log(date.toDateString()); console.log(date.toLocaleDateString()); //输出为: Thu Dec 02 2021 2021-12-2
我们离2022年1月1日还有多少天
核心算法:输入的时间减去现在的时间就是剩余时间,用时间戳来做,用户输入时间总的毫秒数减去现在时间的毫秒数,得到的就是剩余时间的毫秒数,再把剩余时间总的毫秒数转换为天、时、分、秒。
//倒计时 //核心算法:输入的时间减去现在的时间就是剩余时间,用时间戳来做,用户输入时间总的 //毫秒数减去现在时间的毫秒数,得到的就是剩余时间的毫秒数,再把剩余时间总的毫秒数转换为天、时、分、秒 function countDown(time){ var nowTime = +new Date();//返回的是当前时间总的毫秒数 var inputTime = +new Date(time);//返回的是用户输入时间总的毫秒数 var times = (inputTime - nowTime) / 1000; var d = parseInt(times / 60 / 60 / 24);//天 d = d < 10 ? '0' + d : d; var h = parseInt(times / 60 / 60 % 24);//时 h = h < 10 ? '0' + h : h; var m = parseInt(times / 60 % 60);//分 m = m < 10 ? '0' + m : m; var s = parseInt(times % 60);//秒 s = s < 10 ? '0' + s : s; return d + '天' + h + '时' + m + '分' + s + '秒'; } console.log('您离2022年1月1日还有 '+countDown('2022-1-1 00:00:00')); //输出为: 您离2022年1月1日还有 29天04时09分18秒
假定2008-08-08在第一天晒网,请问今天是"打鱼"还是"晒网" 。
//"三天打鱼,两天晒网",假定2008-08-08在"晒网",请问今天是"打鱼"还是"晒网" function fish(){ var nowTime = +new Date(); var upTime = +new Date('2008-8-8'); var time = (nowTime - upTime)/1000; var n = parseInt(time/60/60/24)%5; var arr = ['晒网','晒网','打鱼','打鱼','打鱼']; var thing = arr[n]; console.log(thing); } fish(); //输出为: 打鱼