哪些字符可以用来命名JavaScript变量?

我想为工作中的非javascript用户创建一个小型的“扩展库”(当涉及到这种语言时,他们似乎都很拘谨)。我喜欢jQuery和Prototype都使用$ dollar符号,因为我使用jQuery,所以我正在寻找另一个很好的单字符符号来使用。

我意识到我可以只测试一些字符,但我希望缩小字符列表的范围(考虑到未来可能与另一个流行库集成)。


当前回答

在ECMAScript规范第7.6节的标识符名称和标识符中,一个有效的标识符定义为:

Identifier ::
    IdentifierName but not ReservedWord

IdentifierName ::
    IdentifierStart
    IdentifierName IdentifierPart

IdentifierStart ::
    UnicodeLetter
    $
    _
    \ UnicodeEscapeSequence

IdentifierPart ::
    IdentifierStart
    UnicodeCombiningMark
    UnicodeDigit
    UnicodeConnectorPunctuation
    \ UnicodeEscapeSequence

UnicodeLetter
    any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”,
    “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.

UnicodeCombiningMark
    any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”

UnicodeDigit
    any character in the Unicode category “Decimal number (Nd)”

UnicodeConnectorPunctuation
    any character in the Unicode category “Connector punctuation (Pc)”

UnicodeEscapeSequence
    see 7.8.4.

HexDigit :: one of
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

这为命名变量创造了很多机会,在高尔夫运动中也是如此。我们来举几个例子。

有效的标识符可以以UnicodeLetter、$、_或\ UnicodeEscapeSequence开头。Unicode字母是以下类别中的任何字符(请参阅所有类别):

大写字母(Lu) 小写字母(Ll) 头衔信(Lt) 修饰字母(Lm) 其他字母(Lo) 字母编号(Nl)

仅这一点就说明了一些疯狂的可能性-工作的例子。如果它不能在所有浏览器中工作,那么就称它为bug,因为它应该是bug。

var ᾩ = "something";
var ĦĔĽĻŎ = "hello";
var 〱〱〱〱 = "less than? wtf";
var जावास्क्रिप्ट = "javascript"; // OK, that's JavaScript in Hindi
var KingGeorgeⅦ = "Roman numerals, awesome!";

其他回答

JavaScript变量

可以用任意字母、$或_字符作为变量的开头。只要不是以数字开头,你也可以包含数字。

开始:[a-z], $, _

包含:[a-z], [0-9], $, _

jQuery

你可以在你的库中使用_,这样它就可以和jQuery并肩作战了。但是,可以设置一个配置,使jQuery不使用$。它将使用jQuery。要做到这一点,只需设置:

jQuery.noConflict();

本页解释了如何做到这一点。

JavaScript变量可以有字母、数字、美元符号($)和下划线(_)。不能以数字开头。

通常库使用$和_作为你在任何地方都会用到的函数的快捷方式。虽然名称$或_没有意义,但它们的简短是有用的,因为您将在任何地方使用该函数,因此希望知道它们的含义。

如果你的库不包括让一个函数在任何地方都被使用,我建议你使用更有意义的名称,因为这些名称将帮助你和其他人理解你的代码在做什么,而不必牺牲源代码的美观性。

例如,您可以看看了不起的DateJS库和它所允许的语法糖,而不需要任何符号或短名称变量。

你应该首先让你的代码实用,并且只有在试着让它漂亮之后。

下面是创建变量名的一个快速建议。

如果您希望变量在Firefox中使用时不发生冲突,请不要使用变量名“_content”,因为该变量名已被浏览器使用。我发现这一点很困难,不得不在一个大型JavaScript应用程序中更改所有使用变量“_content”的地方。

基本上,以正则表达式形式:[a-zA-Z_$][0-9a-zA-Z_$]*。换句话说,第一个字符可以是字母、_或$,其他字符可以是字母、_、$或数字。

注意:虽然其他回答指出可以在JavaScript标识符中使用Unicode字符,但实际的问题是“我应该使用什么字符作为像jQuery这样的扩展库的名称?”这就是那个问题的答案。您可以在标识符中使用Unicode字符,但不要这样做。编码总是被搞砸。将公共标识符保持在32-126 ASCII范围内,这样比较安全。

在ECMAScript规范第7.6节的标识符名称和标识符中,一个有效的标识符定义为:

Identifier ::
    IdentifierName but not ReservedWord

IdentifierName ::
    IdentifierStart
    IdentifierName IdentifierPart

IdentifierStart ::
    UnicodeLetter
    $
    _
    \ UnicodeEscapeSequence

IdentifierPart ::
    IdentifierStart
    UnicodeCombiningMark
    UnicodeDigit
    UnicodeConnectorPunctuation
    \ UnicodeEscapeSequence

UnicodeLetter
    any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”,
    “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”.

UnicodeCombiningMark
    any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)”

UnicodeDigit
    any character in the Unicode category “Decimal number (Nd)”

UnicodeConnectorPunctuation
    any character in the Unicode category “Connector punctuation (Pc)”

UnicodeEscapeSequence
    see 7.8.4.

HexDigit :: one of
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F

这为命名变量创造了很多机会,在高尔夫运动中也是如此。我们来举几个例子。

有效的标识符可以以UnicodeLetter、$、_或\ UnicodeEscapeSequence开头。Unicode字母是以下类别中的任何字符(请参阅所有类别):

大写字母(Lu) 小写字母(Ll) 头衔信(Lt) 修饰字母(Lm) 其他字母(Lo) 字母编号(Nl)

仅这一点就说明了一些疯狂的可能性-工作的例子。如果它不能在所有浏览器中工作,那么就称它为bug,因为它应该是bug。

var ᾩ = "something";
var ĦĔĽĻŎ = "hello";
var 〱〱〱〱 = "less than? wtf";
var जावास्क्रिप्ट = "javascript"; // OK, that's JavaScript in Hindi
var KingGeorgeⅦ = "Roman numerals, awesome!";