我正在做一个dojo项目,偶然发现以下代码:
format: function ( /*Date*/ value, /*locale.__FormatOptions*/ constraints) {
....
},
"parse": function ( /*String*/ value, /*locale.__FormatOptions*/ constraints) {
.....
},
如您所见,解析方法名称是一个字符串。我以前没看过这样的东西。有什么理由吗?
Link to original file。
最佳答案
根据JavaScript / ECMAScript标准,对象属性(或函数)标识符(在示例中,在冒号:
之前使用)可以是任何有效标识符(例如,不带引号的format
),任何字符串(例如"parse"
)甚至任何数字。
在这种情况下,使用"parse"
与使用parse
完全等效,但是在"parse that value"
的情况下(这是对象属性的有效字符串标识符,即使它带有空格)也可能有所不同。
然后,您可以使用myObject.parse
或myObject["parse"]
来访问您的属性,而在我的上一个示例中,您别无选择,只能使用myObject["parse that value"]
来访问它。
我认为我们还应该提到一种特殊情况,即对象键使用引号与不使用引号是不同的:如果要在ADVANCED_OPTIMIZATIONS模式下使用Google Closure缩小器,它将替换所有未引用的标识符以尝试节省空间,而这会保留完整的带引号的标识符,因为Google团队将其用作指示符,您稍后将尝试使用方括号方法和字符串来访问它,或者您是否检查像这样的实际键名:
for (var i in myObject) {
if (i === "parse") { // if i is replaced by the minifier, you will never execute the block below
// do something...
}
}
这种特殊性迫使您有时(但并非总是如此,如果您不需要保留原始名称)使用带引号的标识符,这是促使人们不使用这种高级优化模式的原因之一。
关于javascript - Javascript-为什么使用字符串作为函数名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33388167/