ES6学习笔记(3)- 对象的功能性扩展
一、什么是对象字面量
对象字面量就是创建对象(Object)的一种简单容易理解的方式,再通俗点就是所谓的键值对的集合。举个简单的例子:
let book = { name: 'JavaScript', price: 12, };
但是对象字面量存在一点小问题,那就是再创建对象的时候需要对属性的值(如上面的name和price)进行初始化,此时会造成一定的重复。将上面的代码改成如下形式就会体现出这个问题所在:
function getBook(bookName, price) { return { bookName: bookName, price: price, getBookName: function() { console.log(bookName); } }; }
可以看出函数内部返回一个对象,属性名称和函数的形参相同,而bookName和price都是重复的书写,这样子对编码的效率也是极为低下的。ES6对该种方式做了一定的扩展使其消除了属性名称和局部变量之间的重复书写。当一个本地变量和对象属性同名的时候,不需要再以键值对的方式书写,而是可以简化为如下的方式:
function getBook(bookName, price) { return { bookName: bookName, price: price, getBookName() { console.log(bookName); } }; }
注意:上述的函数的书写方式也一样被简化了。
二、全等运算符(===)和Object.is()方法
在JS中比较两个值时,可能习惯使用相等运算符(==)或者全等运算符(===)来执行相应的语句,但是就算全等运算符也不一定完全准确,一个比较常见的例子就是:
console.log('NaN === NaN: ' + (NaN === NaN)); // 返回false
ES6中引入了Object.is()方法来弥补全等运算符的不准确性,下面是一些实际的使用方法:
console.log(Object.is(NaN, NaN)); // return true console.log(Object.is(5, '5')); // return false console.log(Object.is(5, 5)); // return true