我正在做一个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.parsemyObject["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/

10-12 00:12
查看更多