数值的扩展

1.二进制和八进制表示法

ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)0o(或0O)表示

1.1Number.isFinite(), Number.isNaN()

ES6 在Number对象上,新提供了Number.isFinite()Number.isNaN()两个方法。

Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity。

	Number.isFinite(15); // true
	Number.isFinite(0.8); // true
	Number.isFinite(NaN); // false
	Number.isFinite(Infinity); // false
	Number.isFinite(-Infinity); // false
	Number.isFinite('foo'); // false
	Number.isFinite('15'); // false
	Number.isFinite(true); // false

注意,如果参数类型不是数值Number.isFinite一律返回false。

Number.isNaN()用来检查一个值是否为NaN

	Number.isNaN(NaN) // true
	Number.isNaN(15) // false
	Number.isNaN('15') // false
	Number.isNaN(true) // false
	Number.isNaN(9/NaN) // true
	Number.isNaN('true' / 0) // true
	Number.isNaN('true' / 'true') // true

如果参数类型不是NaNNumber.isNaN一律返回false

它们与传统的全局方法isFinite()isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false

	isFinite(25) // true
	isFinite("25") // true
	Number.isFinite(25) // true
	Number.isFinite("25") // false
	
	isNaN(NaN) // true
	isNaN("NaN") // true
	Number.isNaN(NaN) // true
	Number.isNaN("NaN") // false
	Number.isNaN(1) // false

1.2Number.parseInt(), Number.parseFloat()

  1. ES6 将全局方法parseInt()parseFloat(),移植到Number对象上面,行为完全保持不变。
  2. 这样做的目的,是逐步减少全局性方法,使得语言逐步模块化
	// ES5的写法
	parseInt('12.34') // 12
	parseFloat('123.45#') // 123.45
	
	// ES6的写法
	Number.parseInt('12.34') // 12
	Number.parseFloat('123.45#') // 123.45
	
	Number.parseInt === parseInt // true
	Number.parseFloat === parseFloat // true

1.3Number.isInteger()

Number.isInteger()用来判断一个数值是否为整数。

	Number.isInteger(25) // true
	Number.isInteger(25.1) // false

JavaScript 内部,整数浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值。

如果参数不是数值Number.isInteger返回false

	Number.isInteger() // false
	Number.isInteger(null) // false
	Number.isInteger('15') // false
	Number.isInteger(true) // false

注意,由于 JavaScript 采用 IEEE 754 标准,数值存储为64位双精度格式,数值精度最多可以达到 53 个二进制位(1 个隐藏位与 52 个有效位)。如果数值的精度超过这个限度,第54位及后面的位就会被丢弃,这种情况下,Number.isInteger可能会误判

	Number.isInteger(3.0000000000000002) // true

总之,如果对数据精度的要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。

2.Math 对象的扩展

1.判断两个值是否完全相等 === Object.is

   console.log(Object.is(100,100)); //true
   console.log(Object.is(100,200)); //false
   console.log(Object.is(NaN,NaN)); //true
   console.log(NaN === NaN); //false

2.Object.assign对象的合并

		var obj1 = {
	        a : 1,
	        b : 2	
	    }
	    var obj2 = {
	        c : 1,
	        d : 2
	    }
	    
	    let newObj = Object.assign(obj1,obj2);
	    console.log(newObj);  //  {a: 1, b: 2, c: 1, d: 2}

3.直接修改 __proto__设置原型

	var obj1 = {
        a: 1,
        b: 2
    }
    var obj2 = {
        c: 1,
        d: 2
    }
    obj1.__proto__ = obj2;

    console.dir(obj1);

来源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值