2016-04-12 4 views
0

私は、ES6シンボルを探索、彼らが何であるかを理解しようと、私はこの現象を回避シンボルがキーとして使用されたかどうかを確認するにはどうすればよいですか?

> let sym = Symbol() 
> let a = {} 
> a[sym]= "value" 
'value' 
> a 
{} 
> Object.keys(a) 
[] 
> Object.getOwnPropertyNames(a) 
[] 
> a[sym] 
'value' 
> a[Symbol()] 
undefined 
> JSON.stringify(sym) 
undefined 
> JSON.stringify(a) 
'{}' 
> sym 
Symbol() 

を私の頭をラップすることはできませんよ、私はまだ記号を理解していないんだけど、どこにキーと値の隠蔽はありますか?!? Javaスクリプトが魔術と魔術の領域に入り込んだのか?とにかくそこにあると言うことはありますか?

EDIT ::

は(Object.getOwnPropertySymbolsについて私に通知していただきありがとうございます)。

ES6では、非表示の非表示プロパティのObject.getOwnPropertyNames()とObject.getOwnPropertySymbols()をチェックする必要がありますか?

+0

「シンボルは一意かつ不変のデータ型であり、オブジェクトプロパティの識別子として使用できます。シンボルオブジェクトは、シンボルプリミティブデータ型の暗黙のオブジェクトラッパーです。」 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol – pherris

+1

既存のものと存在しないものの両方を重ね合わせるのですか?どのようにシンボルをSchrödingerCats()に変更するのですか? – lonewarrior556

+1

'Object.getOwnPropertySymbols(a)'でそれらを得ることができます。 – pherris

答えて

4

MDNObject.getOwnPropertySymbols(a)で取得できるようです。

私はいくつかの追加のコンテキストを提供し、この記事に出くわし: http://blog.keithcirkel.co.uk/metaprogramming-in-es6-symbols/

シンボルは、オブジェクトに目的の全く新しい感覚を与える - 彼らは、オブジェクトへの層の下に隠さの種類を提供 - を返すイテレータではない、ではありません既存のReflectionツールを使用してフェッチされ、オブジェクト内の他のプロパティと競合しないことが保証されています。

+1

両方をループするメソッドを追加すればいいかもしれません。 'Object.getOwnProperties() 'を実行し、他の2つのインスタンスを必要とする場合 –

関連する問題