es6的数值扩展与es6-es11中包含的对象方法扩展

数值扩展

1、Number.EPSILON 是 JavaScript 表示的最小精度,一般用来处理浮点数运算。例如可以用于两个浮点数的比较。

let equal = (x, y) => Math.abs(x - y) < Number.EPSILON;
console.log(0.1 + 0.2 === 0.3); // false
console.log(equal(0.1 + 0.2, 0.3)); // true

2、二进制和八进制:二进制以 0b 开头,八进制以 0o 开头。

let b = 0b1010;
let o = 0o777;
let d = 100; // 十进制
let x = 0xff; // 十二进制
console.log(x);

3、Number.isFinite 检测一个数值是否为有限数。

console.log(Number.isFinite(100)); // false
console.log(Number.isFinite(100 / 0)); // true
console.log(Number.isFinite(Infinity)); // false

4、Number.parseInt 和 Number.parseFloat
ES6 给 Number 添加了 parseInt 方法,Number.parseInt 完全等同于 parseInt。将字符串转为整数,或者进行进制转换。Number.parseFloat 则等同于 parseFloat()

console.log(Number.parseInt('5211314love')); // 5211314
console.log(Number.parseFloat('3.1415926神奇')); // 3.1415926

5、Number.isInteger() 判断一个数是否为整数。

console.log(Number.isInteger(5)); // true
console.log(Number.isInteger(2.5)); // false

6、Math.trunc() 将数字的小数部分抹掉。

console.log(Math.trunc(3.5)); // 3

7、Math.sign 判断一个数到底为正数 负数 还是零

对象方法扩展

ES6 新增了一些 Object 对象的方法。

  • Object.is 比较两个值是否严格相等,与『===』行为 基本一致
  • Object.assign 对象的合并,将源对象的所有可枚举属性,复制到目标对象
  • __proto__setPrototypeOfsetPrototypeOf 可以直接设置对象的原型

1、Object.is()

Object.is() 方法判断两个值是否完全相同。Object.is 比较两个值是否严格相等,与 === 行为 基本一致。返回一个 Boolean 类型。

Object.is(value1, value2);

Object.is() 方法判断两个值是否为同一个值。如果满足以下条件则两个值相等:

  • 都是 undefined
  • 都是 null
  • 都是 true 或 false
  • 都是相同长度的字符串且相同字符按相同顺序排列
  • 都是相同对象(意味着每个对象有同一个引用)
  • 都是数字且
    • 都是 +0
    • 都是 -0
    • 都是 NaN
    • 或都是非零而且非 NaN 且为同一个值

与 == 运算不同。 == 运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换 (这种行为的结果会将 "" == false 判断为 true),而 Object.is 不会强制转换两边的值。

与 ===算也不相同。 === 运算符 (也包括 == 运算符) 将数字 -0 和 +0 视为相等,而将 Number.NaN 与 NaN 视为不相等。

2、Object.assign

Object.assign 对象的合并,相当于浅拷贝。

const config1 = {
    host: 'localhost',
    port: 3306,
    name: 'root',
    pass: 'root',
    test: 'test'
};
const config2 = {
    host: 'http://atguigu.com',
    port: 33060,
    name: 'atguigu.com',
    pass: 'iloveyou',
    test2: 'test2'
}
console.log(Object.assign(config1, config2));

3、Object.setPrototypeOf 和 Object.getPrototypeof

Object.setPrototypeOf 用于设置对象的原型对象,Object.getPrototypeof 用于获取对象的原型对象,相当于 __proto__

const school = {
    name: '尚硅谷'
}
const cities = {
    xiaoqu: ['北京','上海','深圳']
}
Object.setPrototypeOf(school, cities);
console.log(Object.getPrototypeOf(school));
console.log(school);

4、Object.values、Object.entries和Object.getOwnPropertyDescriptors

4. 1、 Object.values()方法:返回一个给定对象的所有可枚举属性值的数组;
4. 2、Object.entries()方法:返回一个给定对象自身可遍历属性 [key,value] 的数组;
4. 3、Object.getOwnPropertyDescriptors()该方法:返回指定对象所有自身属性的描述对象;

代码实现:

<!DOCTYPE html>
<html>
    <head>
       <meta charset="utf-8">
       <title>对象方法扩展</title>
    </head>
               
<body>
<script>
    // 对象方法扩展
    let school = { name : "訾博", age : 24, sex : "男" }
    // 获取对象所有的键 
    console.log(Object.keys(school)); 
    // 获取对象所有的值
    console.log(Object.values(school));
    // 获取对象的entries 
    console.log(Object.entries(school));
    // 创建map 
    const map = new Map(Object.entries(school));
    console.log(map);
    console.log(map.get("name")); 
    // 返回指定对象所有自身属性的描述对象
    console.log(Object.getOwnPropertyDescriptors(school));
    const obj = Object.create(null,{ 
        name : { 
            // 设置值 
            value : "訾博", 
            // 属性特性 
            writable : true, 
            configuration : true, 
            enumerable : true 
          } 
      });                                        
</script>
</body>

</html>

运行结果:

es10对象扩展( Object.fromEntries 将数组转换成对象与Object.entries相反):

	let results = Object.fromEntries([
		['name','name'],
		['value','value']
	])
	let m = new Map();
	m.set('name','333')
	console.log(results)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张媛的博客

打赏不能超过你的早餐钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值