前端学习之ES6-对象的扩展笔记

2016-03-16  本文已影响0人  娟子

属性的简洁表示法

 ES6允许直接写入变量和函数,作为对象的属性和方法;这种写法同样可以应用于函数返回值

 var birth = '2000/01/01'; 
  var Person = { 
  name: '张三', 
  birth,    //等同于birth: birth 
  // 等同于hello: function ()... 
  hello() { 
          console.log('我的名字是', this.name); 
          }
  };
function getPerson() {
   var name = 'LSJ';
   var age = 18;
   return {name,  age};
}
getPoint()// {name: 'LSJ', age:18}

属性名表达式

JavaScript语言定义对象的属性,有两种方法:
表达式还可以作为方法名
`let obj = { 
['h'+'ello']() { return 'hi'; }
 };
obj.hello() // hi`

方法的name属性

函数的`name`属性,返回函数名。对象方法也是函数,因此也有`name`属性。
(new Function()).name // "anonymous"
var doSomething = function() {  // ...};
doSomething.bind().name // "bound doSomething"

Object.is()

ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。JavaScript缺乏一种运算,在所有环境中,只要两个值是一样的,它们就应该相等。

ES6提出“Same-value equality”(同值相等)算法,用来解决这个问题。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致,并克服了上述问题。

Object.assign()

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

Object.assign方法至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。

注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
var target = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
属性名为Symbol值的属性,也会被Object.assign拷贝。

Object.assign只拷贝自身属性,不可枚举的属性(enumerable为false)和继承的属性不会被拷贝。

对象的属性特征需要学习一下(js设计那本书)

上一篇下一篇

猜你喜欢

热点阅读