哪些字符对JavaScript变量名称有效?

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

我想在这里为我的非JavaScript用户创建一个小的“扩展库”(在语言方面,他们似乎都显得有些懈怠)。我喜欢jQuery和Prototype都使用$美元符号,并且由于我使用jQuery,因此我正在寻找另一个好用的单字符符号。

我意识到我可以测试一些字符,但是我希望缩小我的字符列表以作为开始(考虑到将来可能与另一个流行的库集成)。

SamStafan十三2020/03/12 15:02:16

这是创建变量名称的快速建议。如果您希望变量在FireFox中使用时不冲突,请不要使用变量名“ _content ”,因为浏览器已在使用此变量名。我发现这很困难,因此不得不更改在大型JavaScript应用程序中使用变量“ _content”的所有位置。

LGO西里2020/03/12 15:02:16

Javascript变量可以包含字母,数字,美元符号($)和下划线(_)。他们不能以数字开头。

通常库使用$,并_作为功能快捷键,你将使用随处可见。尽管名称$_没什么意义,但是它们对于缩短名称很有用,并且由于您将在各处使用该函数,因此您应该知道它们的含义。

如果您的库不是要在每个地方都使用一个函数,那么我建议您使用更有意义的名称,因为这些名称将帮助您和其他人理解您的代码在做什么,而不必损害源代码的优美性

例如,您可以看看很棒的DateJS库和它允许的语法糖,而无需任何符号短名称变量。

您应该首先使代码实用,并且只有在尝试使其变得漂亮之后才能使用。

JinJin乐2020/03/12 15:02:16

据我所知,可接受的答案将排除许多有效的标识符这是我按照规范编写的正则表达式(请参阅有关标识符的第7.6章)。使用RegexBuddy创建了它,您可以在http://samples.geekality.net/js-identifiers找到说明的导出

^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*+$

此外,名称不能是以下保留字之一。

中断,执行,instanceof,typeof,case,其他,new,var,catch,finally,return,void,continue,for,switch,while,debugger,function,this,with,default,if,throw,delete in尝试,类,枚举,扩展,超级,常量,导出,导入,实现,让,私有,公共,收益,接口,包,保护,静态,空,真,假

Itachi猪猪猪猪2020/03/12 15:02:16

Javascript变量

您可以以任何字母$、、或_字符开头的变量只要它不是以数字开头,就可以包含数字。

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

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

jQuery的

您可以_为您的库使用它,使其与jQuery并存。但是,您可以设置一个配置,以使jQuery不使用$它将改为使用jQuery为此,只需设置:

jQuery.noConflict();

此页面说明了如何执行此操作。

十三伽罗Harry2020/03/12 15:02:16

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

注意:虽然其他答案都指出您可以在JavaScript标识符中使用Unicode字符,但实际的问题是“在扩展库(如jQuery)的名称中应使用哪些字符?” 这是对该问题的答案。您可以在标识符中使用Unicode字符,但不要这样做。编码一直被搞砸。将您的公共标识符保持在安全的32-126 ASCII范围内。

Pro乐2020/03/12 15:02:16

在JavaScript 1.5之前: ^[a-zA-Z_$][0-9a-zA-Z_$]*$

英文:必须以美元符号,下划线或26个字符的字母中的一个大写或小写开头。后续字符(如果有)可以是其中任何一个或十进制数字。

JavaScript 1.5及更高版本*^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$

This is more difficult to express in English, but it is conceptually similar to the older syntax with the addition that the letters and digits can be from any language. After the first character, there are also allowed additional underscore-like characters (collectively called “connectors”) and additional character combining marks (“modifiers”). (Other currency symbols are not included in this extended set.)

JavaScript 1.5 and later also allows Unicode escape sequences, provided that the result is a character that would be allowed in the above regular expression.

Identifiers also must not be a current reserved word or one that is considered for future use.

There is no practical limit to the length of an identifier. (Browsers vary, but you’ll safely have 1000 characters and probably several more orders of magnitude than that.)

Links to the character categories:

  • Letters: Lu, Ll, Lt, Lm, Lo, Nl
    (combined in the regex above as “L”)
  • Combining marks (“modifiers”): Mn, Mc
  • Digits: Nd
  • Connectors: Pc

*n.b. This Perl regex is intended to describe the syntax only — it won’t work in JavaScript, which doesn’t (yet) include support for Unicode Properties. (There are some third-party packages that claim to add such support.)

猿蛋蛋凯2020/03/12 15:02:16

实际上,ECMAScript在第15页上说:标识符可以以$,下划线或UnicodeLetter开头,然后继续(恰好在其下)指定UnicodeLetter可以是Unicode分类中的任何字符,Lo,Ll。 ,Lu,Lt,Lm和Nl。当您查找这些类别时,您会发现这不仅提供了拉丁字母,而且还提供了更多的可能性。只需在Google中搜索“ unicode类别”,即可找到它们。