情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

ECMAScript 6の新機能(20)オブジェクト関連関数

ECMAScript 6で新しいオブジェクト関連関数が幾つか追加されました。

Object.assign

これはあるオブジェクトに別のオブジェクトの列挙可能なプロパティをコピーする関数です。ただし、継承したプロパティは対象としません。

また、ゲッターやセッターもコピーの対象となりますが、その場合にはゲッターから値が取得されたり、セッターに値が設定されたりします。

C:\work\node>node
> var target = {
... foo: 100,
... var: 200,
... set bax (value) {
..... console.log(value + ' is set.');
..... }
... }
undefined
> var source = {
... foo: 999,
... bar: 777,
... bax: 101,
... get quu () {
..... return 666;
..... }
... }
undefined
> target
{ foo: 100, var: 200, bax: [Setter] }
> source
{ foo: 999, bar: 777, bax: 101, quu: [Getter] }
> Object.assign(target, source)
101 is set.
{ foo: 999, var: 200, bax: [Setter], bar: 777, quu: 666 }

Object.getOwnPropertySymbols

これはオブジェクトのプロパティの中でキーがシンボルであるものを全て返す関数です。ただし、継承したプロパティは対象としません。

C:\work\node>node
> var obj = {
... foo: 100,
... [Symbol('nyan')]: 8888,
... [Symbol('wan')]: 1
... }
undefined
> obj
{ foo: 100 }
> Object.getOwnPropertySymbols(obj)
[ Symbol(nyan), Symbol(wan) ]

Object.is

これは2つのオブジェクトが等しいかチェックする関数です。

ただし、===演算子とは2つの点で動作が異なります

  • NaN === NaNfalseとなりますが、Object.is(NaN, NaN)trueとなります。
  • +0 === -0trueとなりますが、Object.is(+0, -0)falseとなります。
C:\work\node>node
> NaN === NaN
false
> Object.is(NaN, NaN)
true
> +0 === -0
true
> Object.is(+0, -0)
false

Object.setPrototypeOf

これはオブジェクトのプロトタイプを設定する関数です。

C:\work\node>node
> var obj = {}
undefined
> obj
{}
> Object.getPrototypeOf(obj)
{}
> obj.foo
undefined
> Object.setPrototypeOf(obj, { foo: 100 })
{}
> obj
{}
> Object.getPrototypeOf(obj)
{ foo: 100 }
> obj.foo
100

Object.__proto__

これはオブジェクトのプロトタイプを表すプロパティです。

C:\work\node>node
> var obj = {}
undefined
> obj.__proto__
{}
> obj.__proto__ = { x: 100 }
{ x: 100 }
> obj.__proto__
{ x: 100 }
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-ecmascript 2015, ecmascript 6, Javascript