【问题标题】:Javascript convention when clashing with a reserved word与保留字冲突时的 Javascript 约定
【发布时间】:2013-07-11 13:08:36
【问题描述】:

在 python 中,当变量名与保留字冲突时(如classindefault 等),PEP8 约定规定应使用尾随下划线(class_、@ 987654325@, default_)。

对于同一案例,最常用的 javascript 约定是什么?

【问题讨论】:

    标签: javascript coding-style naming-conventions


    【解决方案1】:

    据我所知,没有。基本上你只是避免使用保留字。例如,对于class,我见过:ClassclsklazzclazzclassName。再举一个例子,在将属性映射到 DOM 元素的属性(大量使用 JavaScript)时,W3C 人员使用className(用于class)、htmlFor(用于for)、 cssFloat(对于float)等等。我从未见过有人使用尾随_。 (另一方面,领先_ 很常见——人们将其用于他们希望人们认为是私有的对象的属性。)

    当做一个属性时,从技术上讲你不必担心它,因为从技术上讲属性名称可以根据规范是保留字,因为解析器有足够的上下文来知道该属性名字不是别的东西。 (这并不意味着所有 实现 都会正确,我不推荐这样做。)这是因为属性名称只需要成为规范所称的 IdentifierName,而不是标识符。 (标识符字面意思是"IdentifierName but not ReservedWord")。

    对于那些不想冒险使用属性名称的人来说,常见的做法是使用引号:

    var obj = { "class": "is perfectly fine" };
    
    // Access
    console.log(obj["class"]);
    

    【讨论】:

    • 只是一个旁注:我不确切知道哪些关键字需要括号表示法,但 var foo = {class: 'bar', function: 'zar'}; console.log(foo.class); console.log(foo.function); 在 chrome 中可以正常工作
    • @EliasVanOotegem:这是一个上下文问题。最好远离reserved words,但在某些情况下(例如您的示例,对象初始化程序的 property name 部分),您可以摆脱它。在规范中,区别在于具有足够上下文不关心冲突的 IdentifierName 和不关心冲突的 Identifier 。一个Identifier is an IdentifierName that isn't a ReservedWord。我只是不想让自己绊倒。 :-)
    • @EliasVanOotegem:当然,这让我在答案中的例子很蹩脚。 :-) 所以我更新了。
    • 当然,我完全同意,如果我要使用保留字作为属性名称,我也会谨慎行事。我只是一个迂腐的混蛋;)
    • @EliasVanOotegem:迂腐的,可能,当然不是混蛋。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多