码迷,mamicode.com
首页 > 其他好文 > 详细

对象的扩展

时间:2017-08-31 22:17:43      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:==   size   多个   方法   两种   表达式   type   注意   简洁   

1、属性的简洁表示法

es6 允许直接写入变量和函数,作为对象的属性和方法

// 简洁表示法 ---> 变量
  let o=1;
  let k=2;
  let es5={
    o:o,
    k:k
  };
  let es6={
    o,
    k
  };
  console.log(es5,es6);   // {o:1, k:2}  {o:1, k:2}


// 简洁表示法 ---> 函数
let es5_method={
    hello:function(){
      console.log(‘hello‘);
    }
  };
  let es6_method={
    hello(){
      console.log(‘hello‘);
    }
  };
  console.log(es5_method.hello(),es6_method.hello());   // hello  hello

 

2、属性名表达式

js 定义对象的属性有两种方法

// 方法一  字面量
obj.foo = true;

// 方法二  表达式
obj[‘a‘ + ‘bc‘] = 123;

es6 允许字面量定义对象时,用表达式作为对象的属性名,即把表达式放在方括号内

let propKey = ‘foo‘;

let obj = {
  [propKey]: true,
  [‘a‘ + ‘bc‘]: 123
};

console.log(obj);   // {foo: true, abc: 123}

let a=‘b‘;
  let es5_obj={
    a:‘c‘,
    b:‘c‘
  };

let es6_obj={
   [a]:‘c‘
}

console.log(es5_obj,es6_obj);   //  {a: "c", b: "c"} {b: "c"}

 

3、Object.is()

Object.is 方法用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致

Object.is(‘foo‘, ‘foo‘)   // true

Object.is({}, {})   // false

不同之处只有两个:一是+0不等于-0,二是NaN等于自身

+0 === -0   // true
NaN === NaN   // false

Object.is(+0, -0)    // false
Object.is(NaN, NaN)    // true

 

4、Object.assign()

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

Object.assign方法的第一个参数是目标对象,后面的参数都是源对象

var target = { a: 1 };

var source1 = { b: 2 };
var source2 = { c: 3 };

Object.assign(target, source1, source2);
target    // {a:1, b:2, c:3}

console.log(Object.assign({a:‘a‘},{b:‘b‘}))   // {a: "a", b: "b"}

 

注意点:

(1)、如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性

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}

 

(2)、如果只有一个参数,Object.assign会直接返回该参数

var obj = {a: 1};
Object.assign(obj) === obj    // true

 

(3)、如果该参数不是对象,则会先转成对象,然后返回

typeof Object.assign(2)    // "object"

 

(4)、由于undefined和null无法转成对象,所以如果它们作为参数,就会报错

Object.assign(undefined)    // 报错 Cannot convert undefined or null to object
Object.assign(null)    // 报错 Cannot convert undefined or null to object

 

(5)、Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用

var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);

obj2.a.b    // 1


var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b    // 2

上面代码中,源对象obj1的a属性的值是一个对象,Object.assign拷贝得到的是这个对象的引用。这个对象的任何变化,都会反映到目标对象上面

对象的扩展

标签:==   size   多个   方法   两种   表达式   type   注意   简洁   

原文地址:http://www.cnblogs.com/rogerwu/p/7460698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!