Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。您无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。
1. Math对象
PI? ?圆周率
console.log(Math.PI);//圆周率
abs()? 获取绝对值
console.log(Math.abs(-1));//1
ceil()?? 向上取整
console.log(Math.ceil(3.14));//4
floor()? 向下取整
console.log(Math.floor(3.94));//3
round() 四舍五入取整
console.log(Math.round(6.49));//6
pow(x,y) 次方/次幂
console.log(Math.pow(5,2));//5的二次方 25
max()? 获取一组字最大值
console.log(Math.max(23, 9, 95, 78, 5));//95
min()? 获取一组数字最小值
console.log(Math.min(23, 9, 45, 78, 5)); //5
random()?? 获取随机?? >=0?? <1
console.log(Math.random());
console.log(Math.random());
console.log(Math.random());
Math对象? ? 随机获取4个字母? 代码实例:
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'U', 'V', 'W', 'T', 'X', 'Y', 'Z'
];
//准备新数组 用于保存每次获取的随机元素
var arr2 = [];
//循环四次 每次获取一个随机元素
for (i = 0; i < 4; i++) {
//随机获取公式:随机下标=向下取整(随机数*数组长度)
var a = Math.floor(Math.random() * arr.length);
//console.log(n);
//通过随机下标找到元素 放入到新数组
arr2.push(arr[a]);
//从原数组arr中删除获取的元素
arr.splice(a, 1)
}
console.log(arr2)
2.Date对象
用于日期时间的存储和计算
(1)创建
new Date(‘2021/8/17 11:44:30’)
var d1=new Date('2021/8/17 11:24:12');
console.log(d1);//打印结果2021-08-17T03:24:12.000Z
var d1 = new Date('2021-8-17 11:24:12'); //有兼容性问题 苹果下有问题
console.log(d1); //打印结果2021-08-17T03:24:12.000Z
new Date(2021,7,17,11,44,30)//月份范围0~11代表1~12月
var d2 = new Date(2021, 8, 17, 11, 24, 30); //月份是从零开始对应1~12月 所以八月变成九月
console.log(d2) //打印结果2021-09-17T03:24:30.000Z
new Date () 存储的是当前操作系统
var d3 = new Date(); //当前操作系统的时间
console.log(d3);
new Date(16830360000000)存储的是距离计算机元年(1970-1-1 0:0:0 0)的毫秒数
var d4 = new Date(1608336000000);
console.log(d4); //打印结果2020-12-19T00:00:00.000Z
存储距离计算机元年(1970-1-1?0:0:0?0)的毫秒数
//距离1970差值年份*365*24*60*60*1000=1608336000000
?API时间获取?
getFullYear()年
getMonth()月 月份范围0~12? 代表1~12
getDate()日
getHours()
getMinutes()
getSeconds()
getMilliseconds() 毫秒
getDay星期? 0~6 对应 日~六
getTime()距离元年的毫秒数
var d = new Date('2021/8/17 11:50:30');
console.log(d.getFullYear());
console.log(d.getMonth() + 1) ///月份范围0~11代表1~12月
console.log(d.getDate());
console.log(d.getHours());
console.log(d.getTime()); //距离计算机元年毫秒数
console.log(d.getDay()); //星期 0~6 对应 日~六
?创建对象保存当前操作系统的时间?,获取日期时间,打印以下格式今天是xxxx年xx月x日??星期x
var d = new Date();
var year = d.getFullYear();
var month = d.getMonth() + 1;
var date = d.getDate();
var day = d.getDay();
//判断月份是否小于10,如果小于10,在前拼接字符串0
if (month < 10) {
month = '0' + month;
}
if (date < 10) {
date = '0' + date;
}
//数组
var arr = ['日', '一', '二', '三', '四', '五', '六']
//console.log(arr[day]);
//拼接
console.log('今天是' + year + '年' + month + '月' + date + '日' + '星期' + arr[day]);
当前时间距离2021年9月1日还有x天x小时x分x秒? 创建两个对象,计算两者相差的毫秒数
var d1 = new Date(); //当前时间
var d2 = new Date('2021/9/1')
//console.log(d2)
var d = d2.getTime() - d1.getTime();
//两个对象相减得到的就是相差的毫秒数
//console.log(d2-d1);
//将相差的单位换算为秒
d = Math.floor(d / 1000);
//计算相差的秒数部分,用相差的秒数去除于含有的分钟(60)
var secound = d % 60;
//console.log(secound);
//计算相差的秒数部分,用相差的秒数去除于含有的小时(3600),然后在换算为分钟
var minute = (d % 3600);
minute = Math.floor(minute / 60);
//console.log(minute);
//计算相差的秒数部分,用相差的秒数去除于含有的小时(24*3600),然后在换算为小时
var hour = d % (24 * 3600);
hour = Math.floor(hour / 3600);
//console.log(hour);
//计算相差的天数,直接用相差的秒数
var day = Math.floor(d / (24 * 3600));
console.log(day);
console.log('距离2021年9月1日还有' + day + "天" + hour + '小时' + minute + '分钟' + secound + '秒')
?
(2)转为本地字符串
存在兼容性问题,只能用于调试
toLocaleString()??? //’2021-8-17? 15:28:30’?
toLocaleDateString()?? //’2021-8-17’
toLocaleTimeString()??? //’15:28:30’
var d=new Date('2021/8/17 15:21:40');
console.log(d.toLocaleString());//转化为本地字符串
console.log(d.toLocaleDateString());
console.log(d.toLocaleTimeString());
setFullYear()? 设置年
setMonth()?? 设置月
setDate()???? 设置日期
setHours()???? 设置小时
setMinute()?? 设置分钟
setSeconds()?? 设置秒
getMilliseconds() 设置毫秒数
var d=new Date ('2021/8/17 15:21:40');
//另存一份(拷贝Date对象)
var d2=new Date(d);
//设置 修改数据
d.setFullYear(2024);
d.setMonth(0);
d.setDate(20);
//d.setDay(6);//没有这个方法 不允许修改星期
console.log(d.toLocaleString());
var d = new Date('2021/8/17 15:21:40');
//3天前 获取当前的日期然后减3 再把结果设置为日期
d.setDate(d.getDate()-3);
console.log(d.toLocaleString());
//3个月以后
d.setMonth(d.getMonth()+3)
console.log(d.toLocaleString());
?假设一个员工的入职时间是2021/8/17???合同期为3年合同到期前1个月要发起续签。计算出以下时间? 入职时间 到期时间? ?续签时间。
代码展示
var d = new Date('2021/8/17');
//拷贝一份入职时间 作为到期时间
var d2 = new Date(d);
//3年以后
d2.setFullYear(d.getFullYear() + 3)
//拷贝一份到期时间 作为续签时间
var d3 = new Date(d2);
// 提前一个月
d3.setMonth(d2.getMonth() - 1);
console.log('入职时间:' + d.toLocaleDateString());
console.log('到期时间' + d2.toLocaleDateString());
console.log('续签时间' + d3.toLocaleDateString());
3.Number对象
new Number()? 将数据转为数值,返回对象
Number()? 将数据转为数值? 返回时数值
toFixed(n)?? 保留小数点后n位
toString()? 将数值转为字符串
4.Boolean对象
new Boolean()? 将数据转换为布尔型?? 返回对象’
Boolean()??? 将数据转换为布尔型?? 返回布尔值
!!数据? 将数据隐式转换为布尔型
var b1=true;//字面量
//false :0 NaN '' null undefined
var b2=new Boolean();//new 调用 ]
var b3=Boolean('');//用普通函数调用
console.log(b2);//[Boolean: false
console.log(b3);//false
//{ } [ ]
console.log(Boolean({}));//true
console.log(Boolean([]));//true
//两个取反的目的 将数据隐式转换为布尔型
console.log(!!1);//1 为true 0为false
5.错误处理
(1)常见的错误
语法错误(SyntaxError):不符合语法规范,例如出现中文错误? 括号缺少一半
引用错位(ReferenceError):使用了未声明的变量
类型错误(TypeError):调用的函数不是一个函数类型
范围错误(RangeError):超出了范围,例如递归无法结束...
自定义错误 : 程序员自己指定的错误
???????? ???throw?? 错误内容
(2)错误处理
try{
尝试执行,可能产生错误,即使出现错误,也不影响后续代码执行
}catch(err){
一旦try出现错误才会执行,将错误保存到err中
执行错误处理的代码
代码展示:
var age =80;
try{
//尝试执行 可能会产生错误,即使产生错误也不影响后续代码执行
if(age<18 || age>60){
throw '非法的年龄';
}
}catch(err){
//捕获
//一旦try中出现错误才会执行,把try中的错误保存到err中
console.log(err);
//解决错误
age=60;
}
console.log(age);
console.log(2);
|