12. JS特殊类实例
JS特殊类实例
12.1 包装类
js中为我们提供了三个包装类,通过这三个包装类可以将基本的数据类型转换为对象
这三个包装类分别为String(),Number()和Boolean()
对于包装类的举例
var num=new Number(3)
//这样就能把基本数据类型number转换为一个对象,3依然是num的值,这样做能为num添加属性
/*
注意:
1.如果为一个基本数据类型添加属性虽然不会报错但是不会添加成功
2.如果在创建number类型的时候用了包装类,那么两个相同的值比较也就不再相等,因为开辟了两片空间,地址不同
*/
注:在实际开发中我们不会使用包装类创建对象,如果使用这种基本数据类型的对象,在做一些比较时可能会带来一些不可预期的结果
包装类的用途
**浏览器会自己调用包装类的方法,**当我们对一些基本数据类型的值调用属性和方法时,浏览器会临时使用包装类将其转换为对象,然后调用对象的属性和方法,调用完以后又转换回来
对基本数据类型添加属性或方法的解释
给一个基本数据类型添加属性或方法就是将该类型的值转换为对象,其实属性添加进去了,但是因为临时转换,又转换为基本数据类型,然后销毁了属性或方法
var num=1;
num.say="hello";//这时确实进行了类型转换但是又马上转换回来销毁了say属性
console.log(num.say);//undefined
/*
第二次使用该属性时其实是又临时转换了类型,但是由于每次转换都是新建一个对象,所以第二次转换的对象和第一次的
对象不同,这个对象没有添加say属性,所以返回的值为undefined
*/
12.2 Date对象
在js中使用Date对象来表示一个时间对象,Date可以作为构造函数,也可以作为一个普通对象使用
12.2.1 创建一个Date对象
如果直接使用构造函数创建一个Date对象,则会封装为当前代码执行的时间
var d=new Date(); console,log(d)//打印出当前执行到该时刻时的时间(以地区时间为准)
创建一个指定的时间对象
需要在构造函数中传递一个表示时间的字符串作为参数
//格式:月/日/年 时间(比如12:31:30表示12点31分30秒) var dt=new Date("2/15/2019 12:31:30");//所有设置年月日前面都可以加0或者不加如02/15/2019 console.log(dt);//Fri Feb 15 2019 12:31:30
注意:
new Date()获取的时间对象通过toString()方法可以完全转换为一个字符串
通过Date.parse()函数可以将传入的字符串参数转换为一个日期对象
12.2.2 Date对象的方法
12.2.2.1 getDate方法
getDate()方法获取当前日期对象是该月中的第几日
var date=new Date("2/15/2019 12:31:30");
var day=date.getDate();
console.log(day);//15
10.2.2.2 getDay,getMonth与getFullYear方法
getDay()方法获取当前日期是周几
,该方法的返回值为0-6
(0为周日)
,1-6依次为周一到周六
var date=new Date("2/15/2019 12:31:30"); var week=date.getDay(); console.log(week);//5
getMonth()方法获取当前日期月份,
该方法的返回值为0-11
(0为一月)
,依次向后排序
var date=new Date("2/15/2019 12:31:30"); var month=date.getMonth(); console.log(month);//1
getFullYear()方法获取当前日期年份
var date=new Date("2/15/2019 12:31:30"); var year=date.getFullYear(); console.log(year);//2019
12.2.2.3 getHours,getMinutes,getSeconds与getMilliseconds方法
getHours()方法获取当前日期的小时数
getMinutes()方法获取当前日期的分钟数
getSeconds()方法获取当前日期的秒数
getMilliseconds()获取当前日期的毫秒数
var date=new Date("2/15/2019 12:31:30");
var hour=date.getHours();
var minute=date.getMinutes();
var second=date.getSeconds();
var millscecond=date.getMilliseconds();
console.log(hour);//12
console.log(minute);//31
console.log(second);//30
console.log(millsecond);//0,因为没有设置,在这里默认是0
12.2.2.4 getTime方法
**getTime()方法获取当前日期对象的时间差,**就是自格林威治标准时间的1970年1月1日0时0分0秒到现在的是
所经历的毫秒数(因为计算机底层报错时间就是用的毫秒)
var date=new Date("2/15/2019 12:31:30");
var time=date.getTime();
console.log(time);//1550205090123
**注:**如果想要具体到秒,分或者时,只需要将返回的值除以各自相对于毫秒的倍数即可
**注意:**如果我们(在中国)用new Date()创建对象时传入的日期是1970年1月1日0时0分0秒,用getTime()方法也会返回
一个负数(-28800000),因为我们输入的时间默认是北京时间,相对于标准时间有8个小时的提前时差
var date=new Date("1/1/1970 0:0:0");
var time=date.getTime();
console.log(time);//-28800000
12.2.2.5 getTimezoneOffset方法
**getTimezoneOffset()方法获取当前地区相对于世界时的时间差,**该方法会返回一个数字,单位为分钟
var date=new Date();
var time=date.getTimezoneOffset();//世界时-本地时间=-8*60 分钟
console.log(time);//-480,因为本地时间比世界时快
12.2.3 Date.now函数
**Date.now()函数能够获取当前时刻距离格林威治标准时间的1970年1月1日0时0分0秒的时间差,**是一个静态方法,
通常用作测试代码的执行性能(在代码前后分别设置事件作差值)
var time=Date.now();
console.log(time);
12.3 Math对象
Math不是一个构造函数,只是一个普通对象,Math对象中包含了许多数学方法
所有方法通过Math.方法名()来使用;
在这里只列举了一些常用数学方法
abs()取绝对值
sqrt()计算开方,得到算术平方根
ceil()可以对一个数进行向上整数,小数位是要有值就会自动进一位
floor()可以对一个数进行向下取整,小数部分会被舍掉
round()可以对一个数进行四舍五入
max(x,y,z)可以获取多个数中的最大值
min(x,y,z)可以获取多个数中的最小值
pow(x,y)返回x的y次幂
trunc()方法用于去除一个数的小数部分,返回整数部分 注意:
- 该方法对于大于0的数时向下取整,对于小于0的数是向上取整
- 对于非数值会先进行强制类型转换,对于空值或无法取整的值会返回NaN
sign()方法用来判断一个数是正数,负数,还是0,如果是非数值会先进行强制类型转换 五种返回值
- 参数为正数,返回+1
- 参数为负数,返回-1
- 参数为0,返回0
- 参数为-0,返回-0
- 参数为其他值,返回NaN
cbrt()方法用于计算一个数的立方根,非数值会进行强制类型转换
hypot()返回
所有参数的平方和的平方根
,用法相当于用勾股定理已知两直角边求斜边
console.log(Math.hypot(3,4));//5 console.log(Math.hypot(3,4,5));//7.0710678118654755 console.log(Math.hypot());//0,不传参数返回值为0 console.log(Math.hypot(NaN));//NaN console.log(Math.hypot(3,4,"num"));//NaN console.log(Math.hypot("3","4"));//5 console.log(Math.hypot(-3,-4));//5
random()可以生成一个0-1之间[0,1)的随机数
- **生成一个0-X之间的随机数Math.random()X
- **生成一个X-Y之间的随机数Math.random()(Y-X)+X
//生成一个0-10的随机数
var num1=Math.random()*10
console.log(num1);
//如果要取整可以四舍五入
console.log(Math.round(num1));
保留几位小数用toFixed()方法,这个方法不是Math对象调用,而是原来的数值对象调用,参数为具体数值,并将会进行四舍五入
注意:
该方法内部是用的银行的四舍五入算法,和普通的四舍五入不同(具体的银行四舍五入算法请私下了解)
var num=0.95; var num2=1.35; console.log(num.toFixed(1));//0.9,代表保留一位小数 console.log(num2.toFixed(1));//1.4