2015-10-14 3 views
2

я выполнил следующий кодКак получить атрибут Символ объекта

var x={}; 
x[Symbol("a")] = "a"; 
x.d = "d"; 

Когда я пытаюсь в консоли браузера

console.log(x); //Object {d: "d", Symbol(a): "a"} 

JSON.stringify(x); //"{"d":"d"}" 

var a=Symbol("a"); 
console.log(x[a]); //undefined 

console.log(x['a']); //undefined 

Я немного смущен, как я получу второй атрибут переменной x, которая является символом

+0

Как быстро вопроса вы публикуемым (и удалены), это ваш браузер совместим с ECMAScript 2015 (ES6)? Поскольку существует метод: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols – sailens

ответ

2

Необходимо сначала восстановить эти символы.

var x = {}; 
x[Symbol("a")] = "a"; 
x.d = "d"; 
symbols = Object.getOwnPropertySymbols(x); 

console.log(symbols); //will output [Symbol("a")] 

Поскольку символы используются для отладки, они не показывают, как обычный атрибут, даже если обычно перебора объекта.

Чтобы получить значение символа, как только получил свойство символов, вы можете сделать:

console.log(x[ symbols[0] ]); 

Вот JSFiddle: http://jsfiddle.net/730q04bw/1/

+0

console.log (x [символы]); // still console undefined –

+0

@AkhileshKumar Где вы работаете? Работает для меня в последней Chrome stable: http://jsfiddle.net/730q04bw/, а также [Babel REPL] (https://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=false&code=var%20x % 20% 3D% 20% 7B% 7D% 3B% 0D% 0Ax% 5BSymbol (% 22a% 22)% 5D% 20% 3D% 20% 22a% 22% 3B% 0D% 0Ax.d% 20% 3D% 20 % 22d% 22% 3B% 0D% 0Avar% 20symbols% 20% 3D% 20Object.getOwnPropertySymbols (х)% 3B% 0D% 0A% 0D% 0Aconsole.log (% 20x% 5Bsymbols% 5B0% 5D% 5D% 20)% 3B% 20% 2F% 2Fwill% 20output% 20% 5BSymbol (% 22a% 22)% 5D) – CodingIntrigue

+0

@AkhileshKumar Поддерживает ли ваш браузер спецификацию ES6? – sailens