我经常看到JavaScript中以美元符号开头的变量。什么时候/为什么选择以这种方式为变量加上前缀?
(我不是问你在jQuery和其他中看到的$('p.foo')语法,而是像$name和$order这样的正常变量)
我经常看到JavaScript中以美元符号开头的变量。什么时候/为什么选择以这种方式为变量加上前缀?
(我不是问你在jQuery和其他中看到的$('p.foo')语法,而是像$name和$order这样的正常变量)
当前回答
如果你看到美元符号($)或双美元符号($$),并想知道这在Prototype框架中意味着什么,下面是你的答案:
$$('div');
// -> all DIVs in the document. Same as document.getElementsByTagName('div')!
$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).
$$('li.faux');
// -> all LI elements with class 'faux'
来源: http://www.prototypejs.org/api/utility/dollar-dollar
其他回答
${varname}只是jQuery开发人员用来区分包含jQuery元素的变量的命名约定。
Plain {varname}用于存储一般内容,如文本和字符串。 ${varname}保存从jQuery返回的元素。
你也可以使用plain {varname}来存储jQuery元素,但正如我在开始时所说的,这将它与普通变量区别开来,使其更容易理解(想象一下将其混淆为普通变量并搜索以了解它所包含的内容)。
例如:
var $blah = $(this).parents('.blahblah');
这里,blah存储返回的jQuery元素。
因此,当其他人在代码中看到$blah时,他们会明白这不仅仅是一个字符串或数字,而是一个jQuery元素。
如果你看到美元符号($)或双美元符号($$),并想知道这在Prototype框架中意味着什么,下面是你的答案:
$$('div');
// -> all DIVs in the document. Same as document.getElementsByTagName('div')!
$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).
$$('li.faux');
// -> all LI elements with class 'faux'
来源: http://www.prototypejs.org/api/utility/dollar-dollar
在ECMAScript的第1版、第2版和第3版中,规范明确禁止使用$前缀的变量名,除非是在自动生成代码的上下文中:
美元符号($)和下划线(_)允许出现在标识符中的任何位置。美元符号仅用于机械生成的代码。
然而,在下一个版本(当前的第5版)中,这一限制被取消了,上面的段落被替换为
美元符号($)和下划线(_)允许出现在IdentifierName中的任何位置。
因此,$符号现在可以在变量名中自由使用。某些框架和库对符号的含义有自己的约定,在这里的其他回答中说明了这一点。
正如其他人所提到的,美元符号是用于机械生成的代码。然而,这种惯例已经被一些非常流行的JavaScript库打破了。JQuery, Prototype和MS AJAX(又名Atlas)都在它们的标识符中使用这个字符(或作为一个完整的标识符)。
简而言之,你可以随时使用美元。(翻译不会抱怨。)问题是你想什么时候使用它?
我个人不使用它,但我认为它的使用是有效的。我认为MS AJAX使用它来表示函数是一些更详细调用的别名。
例如:
var $get = function(id) { return document.getElementById(id); }
这似乎是一个合理的惯例。
$字符对于JavaScript引擎没有特殊意义。它只是变量名中的另一个有效字符,如a-z, a-z, _, 0-9等…