ES6新特性_number数值扩展与object对象方法扩展

ES6新特性_number数值扩展与object对象方法扩展

本文主要介绍,ES6新特性,数值扩展和对象方法扩展,1.Number.EPSILON、2.二进制和八进制的表现方式、3.Number.isFinite 检测一个数值是否为有限数、4.Number.isNaN 检测一个数值是否是 NaN、5.Number.parseInt 和 Number.parseFloat 字符串转整数、6.Number.isInteger 判断一个数是否为整数、7.Math.trunc 将数字的小数部分抹掉、8.Math.sign 判断一个数到是: 正数,负数还是零、9.Object.is 判断两个值是否完全相等、10.Object.assign 对象的合并, 11.Object.setPrototypeOf 和 Object.getPrototypeOf 设置和获取原型对象。
ES6新特性-数值扩展 1. Number.EPSILON
  • Number.EPSILON 是 JavaScript 表示的最小精度;
  • EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16;
  • 主要用于浮点运算,对精度的一个设置

二个浮点相加
console.log(0.1 + 0.2); // 打印 0.30000000000000004

// 是否相等
console.log(0.1 + 0.2 === 0.3); // 打印 false

// 使用EPSILON来做一个最小精度判断处理, 小于最小的精度,就表示为True
let res = (Math.abs((0.1+0.2) - 0.3) < Number.EPSILON) ? true : false;
console.log(res); // 打印 true
ES6新特性-数值扩展 2.二进制和八进制的表现方式
// 二进制为: 0b开头, 
let b = 0b1010;
console.log(b); // 10

// 八进制为: 0o开头
let o = 0o777;
console.log(o); // 511

// 十进制
let d = 100; 
console.log(d); // 100

// 十六进制: 0x
let x = 0xff;
console.log(x); // 255
ES6新特性-数值扩展 3.Number.isFinite 检测一个数值是否为有限数
console.log(Number.isFinite(100)); // True
console.log(Number.isFinite(100 / 0)); // False
console.log(Number.isFinite(Infinity)); // False
ES6新特性-数值扩展 4.Number.isNaN 检测一个数值是否是 NaN
console.log('isNaN:', Number.isNaN(1234)); // false
ES6新特性-数值扩展 5.Number.parseInt 和 Number.parseFloat 字符串转整数
console.log(Number.parseInt('123fujuhao.com')); // 123
console.log(Number.parseFloat('1.23fujuhao.com')); // 1.23
ES6新特性-数值扩展 6.Number.isInteger 判断一个数是否为整数
console.log(Number.isInteger(10)); // true
console.log(Number.isInteger(10.5)); // false
ES6新特性-数值扩展 7.Math.trunc 将数字的小数部分抹掉
console.log(Math.trunc(5.5)); // 5;
ES6新特性-数值扩展 8.Math.sign 判断一个数到是: 正数,负数还是零
console.log(Math.sign(100)); // 是正数返回 1
console.log(Math.sign(0)); // 是零返回 0
console.log(Math.sign(-100)); // 是负数返回 -1
ES6新特性-对象方法扩展 1.Object.is()
  1. 判断两个值是否完全相等
Object.is('foo', 'foo');     // true
Object.is(window, window);   // true

Object.is('foo', 'bar');     // false
Object.is([], []);           // false

var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);         // true
Object.is(foo, bar);         // false

Object.is(null, null);       // true

// 特例
Object.is(0, -0);            // false
Object.is(-0, -0);           // true
Object.is(NaN, 0/0);         // true
  1. 此方法的比较类似于 ‘===’ 但是还有一些不同之处,比如:
// 使用 ‘===’
+0 === -0 //true
NaN === NaN // false

// 使用 Object.is()
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
ES6新特性-对象方法扩展 2.Object.assign 对象的合并

合并对象时 obj1和obj2如果有相同的key时,放在后面的会覆盖前面的,差值会保留

const obj1 = {
    host: 'localhost',
    port: 4000,
    name: 'root',
    pass: '123456',
    test: 'test'
};
const obj2 = {
    host:'fujuhao.com',
    port: 4001,
    name: 'root',
    pass: 'fujuhao'
};

console.log(Object.assign(obj1,obj2));
// 打印: {host: 'fujuhao.com', port: 4001, name: 'root', pass: 'fujuhao', test: 'test'}
ES6新特性-对象方法扩展 3.Object.setPrototypeOf 和 Object.getPrototypeOf 设置和获取原型对象
  • 设置原型
const obj3 = {"name": "fujuhao.com"};
const obj4 = {"tags": ['Python','Nodejs','Php','Angular', 'Vue']};
Object.setPrototypeOf(obj3, obj4);
console.log(obj3);

// 打印:{name: 'fujuhao.com'}name: "fujuhao.com"[[Prototype]]: Objecttags: (5) ['Python', 'Nodejs', 'Php', 'Angular', 'Vue'][[Prototype]]: Object
  • 获取原型
console.log(Object.getPrototypeOf(obj3));
// 打印:
/*
    {tags: Array(5)}
    tags: (5) ['Python', 'Nodejs', 'Php', 'Angular', 'Vue']
    [[Prototype]]: Object
*/
Loading...