跳至主要內容

12. JS特殊类实例

Harry Xiong大约 7 分钟Web 前端JavaScriptPromise 对象JS 异步async 与 await

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