哪些字符可以用来命名JavaScript变量?
我想为工作中的非javascript用户创建一个小型的“扩展库”(当涉及到这种语言时,他们似乎都很拘谨)。我喜欢jQuery和Prototype都使用$ dollar符号,因为我使用jQuery,所以我正在寻找另一个很好的单字符符号来使用。
我意识到我可以只测试一些字符,但我希望缩小字符列表的范围(考虑到未来可能与另一个流行库集成)。
哪些字符可以用来命名JavaScript变量?
我想为工作中的非javascript用户创建一个小型的“扩展库”(当涉及到这种语言时,他们似乎都很拘谨)。我喜欢jQuery和Prototype都使用$ dollar符号,因为我使用jQuery,所以我正在寻找另一个很好的单字符符号来使用。
我意识到我可以只测试一些字符,但我希望缩小字符列表的范围(考虑到未来可能与另一个流行库集成)。
当前回答
我采纳了Anas Nakawa的想法并加以改进。首先,没有理由实际运行被声明的函数。我们想知道它是否正确地解析,而不是代码是否工作。其次,对于我们的目的来说,文字对象是一个比var XXX更好的上下文,因为它更难摆脱。
function isValidVarName( name ) {
try {
return name.indexOf('}') === -1 && eval('(function() { a = {' + name + ':1}; a.' + name + '; var ' + name + '; }); true');
} catch( e ) {
return false;
}
return true;
}
// so we can see the test code
var _eval = eval;
window.eval = function(s) {
console.log(s);
return _eval(s);
}
console.log(isValidVarName('name'));
console.log(isValidVarName('$name'));
console.log(isValidVarName('not a name'));
console.log(isValidVarName('a:2,b'));
console.log(isValidVarName('"a string"'));
console.log(isValidVarName('xss = alert("I\'m in your vars executin mah scrip\'s");;;;;'));
console.log(isValidVarName('_;;;'));
console.log(isValidVarName('_=location="#!?"'));
console.log(isValidVarName('ᾩ'));
console.log(isValidVarName('ĦĔĽĻŎ'));
console.log(isValidVarName('〱〱〱〱'));
console.log(isValidVarName('जावास्क्रिप्ट'));
console.log(isValidVarName('KingGeorgeⅦ'));
console.log(isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid'));
console.log(isValidVarName('if'));
其他回答
我采纳了Anas Nakawa的想法并加以改进。首先,没有理由实际运行被声明的函数。我们想知道它是否正确地解析,而不是代码是否工作。其次,对于我们的目的来说,文字对象是一个比var XXX更好的上下文,因为它更难摆脱。
function isValidVarName( name ) {
try {
return name.indexOf('}') === -1 && eval('(function() { a = {' + name + ':1}; a.' + name + '; var ' + name + '; }); true');
} catch( e ) {
return false;
}
return true;
}
// so we can see the test code
var _eval = eval;
window.eval = function(s) {
console.log(s);
return _eval(s);
}
console.log(isValidVarName('name'));
console.log(isValidVarName('$name'));
console.log(isValidVarName('not a name'));
console.log(isValidVarName('a:2,b'));
console.log(isValidVarName('"a string"'));
console.log(isValidVarName('xss = alert("I\'m in your vars executin mah scrip\'s");;;;;'));
console.log(isValidVarName('_;;;'));
console.log(isValidVarName('_=location="#!?"'));
console.log(isValidVarName('ᾩ'));
console.log(isValidVarName('ĦĔĽĻŎ'));
console.log(isValidVarName('〱〱〱〱'));
console.log(isValidVarName('जावास्क्रिप्ट'));
console.log(isValidVarName('KingGeorgeⅦ'));
console.log(isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid'));
console.log(isValidVarName('if'));
基本上,以正则表达式形式:[a-zA-Z_$][0-9a-zA-Z_$]*。换句话说,第一个字符可以是字母、_或$,其他字符可以是字母、_、$或数字。
注意:虽然其他回答指出可以在JavaScript标识符中使用Unicode字符,但实际的问题是“我应该使用什么字符作为像jQuery这样的扩展库的名称?”这就是那个问题的答案。您可以在标识符中使用Unicode字符,但不要这样做。编码总是被搞砸。将公共标识符保持在32-126 ASCII范围内,这样比较安全。
JavaScript变量
可以用任意字母、$或_字符作为变量的开头。只要不是以数字开头,你也可以包含数字。
开始:[a-z], $, _
包含:[a-z], [0-9], $, _
jQuery
你可以在你的库中使用_,这样它就可以和jQuery并肩作战了。但是,可以设置一个配置,使jQuery不使用$。它将使用jQuery。要做到这一点,只需设置:
jQuery.noConflict();
本页解释了如何做到这一点。
下面是创建变量名的一个快速建议。
如果您希望变量在Firefox中使用时不发生冲突,请不要使用变量名“_content”,因为该变量名已被浏览器使用。我发现这一点很困难,不得不在一个大型JavaScript应用程序中更改所有使用变量“_content”的地方。
JavaScript变量可以有字母、数字、美元符号($)和下划线(_)。不能以数字开头。
通常库使用$和_作为你在任何地方都会用到的函数的快捷方式。虽然名称$或_没有意义,但它们的简短是有用的,因为您将在任何地方使用该函数,因此希望知道它们的含义。
如果你的库不包括让一个函数在任何地方都被使用,我建议你使用更有意义的名称,因为这些名称将帮助你和其他人理解你的代码在做什么,而不必牺牲源代码的美观性。
例如,您可以看看了不起的DateJS库和它所允许的语法糖,而不需要任何符号或短名称变量。
你应该首先让你的代码实用,并且只有在试着让它漂亮之后。