Javascript 尝试将符号包装器对象显式转换为字符串时出错
我在firefox web控制台中尝试了以下操作Javascript 尝试将符号包装器对象显式转换为字符串时出错,javascript,language-lawyer,Javascript,Language Lawyer,我在firefox web控制台中尝试了以下操作 var sow=(函数(){返回此;}).call(Symbol()); console.log(类型(sow));//对象 console.log(sow.toString());//作品:Symbol() 字符串(sow);//不起作用:抛出“TypeError:无法将符号转换为字符串”首先请注意,您对sow的定义可以简化为: var sow = Object(Symbol()); 在草率模式下,它与您的代码执行相同的操作 当您使用参数v
var sow=(函数(){返回此;}).call(Symbol());
console.log(类型(sow));//对象
console.log(sow.toString());//作品:Symbol()
字符串(sow);//不起作用:抛出“TypeError:无法将符号转换为字符串”
首先请注意,您对sow
的定义可以简化为:
var sow = Object(Symbol());
在草率模式下,它与您的代码执行相同的操作
当您使用参数value
调用String
时,根据:
a。如果NewTarget未定义且类型(值)为Symbol,则返回SymbolDescriptiveString(值)
b。就这样吧?ToString(值)
在这里,由于您已将符号包装在对象中,因此其类型不是符号;相反,它是一个对象,因此调用ToString
。调用此函数时,将首先将对象强制为原语,然后对其调用ToString
:
ToString
;正如您在同一个表中看到的,当传递一个符号时,ToString
将抛出一个TypeError
这就是为什么String(sow)代码>工作。相反,当您执行sow.toString()
时,您使用对象包装符号的调用上下文(athis
)调用Symbol.prototype.toString
:
var-sow=Object(Symbol());
log(sow.toString==Symbol.prototype.toString)代码>这是否回答了您的问题?