2015-10-14 17 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 [symbols]); // still console undefined –

+0

@AkhileshKumar你在哪里运行?适用于最新的Chrome稳定版: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(X)%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