Javascript属性键 - 功能

时间:2014-04-17 22:17:25

标签: javascript

在以下示例中:

var tester = Object.create(null);

tester.forename = "Bob";
tester[function () { return "surname"; }] = "Jones";

javascript是否只是将函数定义转换为字符串以用作属性键?

2 个答案:

答案 0 :(得分:3)

  

javascript是否只是将函数定义转换为字符串以用作属性键?

是。请注意,字符串"surname"。实际上,到目前为止,还没有指定字符串将是什么,并且它因引擎而异。在某些引擎上,它将大致与源代码中的内容相同。但它是完全有效的(例如,在规范内)它是"dunno, some function"。对于Function#toString

,下一个规范ES6可能会这么说
  

返回此对象的依赖于实现的String源代码表示形式。这个   表示法具有 FunctionDeclaration FunctionExpression GeneratorDeclaration 的语法,    GeneratorExpession ClassDeclaration ClassExpression ArrowFunction MethodDefinition GeneratorMethod   取决于对象的实际特征。特别是使用和放置白色空间,线条   表示字符串中的终结符和分号是依赖于实现的。

(这是2014年1月的措辞。)

但这是下一个规范,但尚未最终确定,并且随着规范接近完成(特别是关于本机功能),可能会稍微改变一下。截至目前的规范,Function#toString可以返回它喜欢的任何内容,并且不需要因功能而异。

答案 1 :(得分:2)

是。对象的属性名称始终是字符串。

如果您尝试使用其他类型,它将被强制转换为字符串。

如果您希望它们是其他类型,您可以使用ES6 Map