【JavaScript】Object.createとObject.assign

  • このエントリーをはてなブックマークに追加

Object.createとObject.assignの挙動が違う。
うーん。挙動の違いを1つづつ覚えていくかな。
Object.createで生成したオブジェクトとObject.assignでシャローコピーしたオブジェクトの違い。
Object.createで生成したオブジェクト自身のプロパティは存在しない。
Object.createで生成したオブジェクト自身のプロパティにmemberがない。hasOwnPropertyで確認するとfalseになる。
Object.assignで生成したオブジェクト自身のプロパティにmemberがある。hasOwnPropertyで確認するとtrueになる。
これは重要な挙動の違いと思う。




const a = {
  member: 'John'
};
const b = Object.create(a);
const c = Object.assign({}, a)

const hantei0 = a.hasOwnProperty('member');
console.log('hantei0', hantei0); // hantei0 true

const hantei1 = b.hasOwnProperty('member');
console.log('hantei1', hantei1); // hantei1 false

const hantei2 = c.hasOwnProperty('member');
console.log('hantei2', hantei2); // hantei2 true

if ('member' in a) {
  console.log('1:true'); // 1:true
}

if ('member' in b) {
  console.log('2:true'); // 2:true
}

if ('member' in c) {
  console.log('3:true'); // 3:true
}
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*